| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546605476054860549605506055160552605536055460555605566055760558605596056060561605626056360564605656056660567605686056960570605716057260573605746057560576605776057860579605806058160582605836058460585605866058760588605896059060591605926059360594605956059660597605986059960600606016060260603606046060560606606076060860609606106061160612606136061460615606166061760618606196062060621606226062360624606256062660627606286062960630606316063260633606346063560636606376063860639606406064160642606436064460645606466064760648606496065060651606526065360654606556065660657606586065960660606616066260663606646066560666606676066860669606706067160672606736067460675606766067760678606796068060681606826068360684606856068660687606886068960690606916069260693606946069560696606976069860699607006070160702607036070460705607066070760708607096071060711607126071360714607156071660717607186071960720607216072260723607246072560726607276072860729607306073160732607336073460735607366073760738607396074060741607426074360744607456074660747607486074960750607516075260753607546075560756607576075860759607606076160762607636076460765607666076760768607696077060771607726077360774607756077660777607786077960780607816078260783607846078560786607876078860789607906079160792607936079460795607966079760798607996080060801608026080360804608056080660807608086080960810608116081260813608146081560816608176081860819608206082160822608236082460825608266082760828608296083060831608326083360834608356083660837608386083960840608416084260843608446084560846608476084860849608506085160852608536085460855608566085760858608596086060861608626086360864608656086660867608686086960870608716087260873608746087560876608776087860879608806088160882608836088460885608866088760888608896089060891608926089360894608956089660897608986089960900609016090260903609046090560906609076090860909609106091160912609136091460915609166091760918609196092060921609226092360924609256092660927609286092960930609316093260933609346093560936609376093860939609406094160942609436094460945609466094760948609496095060951609526095360954609556095660957609586095960960609616096260963609646096560966609676096860969609706097160972609736097460975609766097760978609796098060981609826098360984609856098660987609886098960990609916099260993609946099560996609976099860999610006100161002610036100461005610066100761008610096101061011610126101361014610156101661017610186101961020610216102261023610246102561026610276102861029610306103161032610336103461035610366103761038610396104061041610426104361044610456104661047610486104961050610516105261053610546105561056610576105861059610606106161062610636106461065610666106761068610696107061071610726107361074610756107661077610786107961080610816108261083610846108561086610876108861089610906109161092610936109461095610966109761098610996110061101611026110361104611056110661107611086110961110611116111261113611146111561116611176111861119611206112161122611236112461125611266112761128611296113061131611326113361134611356113661137611386113961140611416114261143611446114561146611476114861149611506115161152611536115461155611566115761158611596116061161611626116361164611656116661167611686116961170611716117261173611746117561176611776117861179611806118161182611836118461185611866118761188611896119061191611926119361194611956119661197611986119961200612016120261203612046120561206612076120861209612106121161212612136121461215612166121761218612196122061221612226122361224612256122661227612286122961230612316123261233612346123561236612376123861239612406124161242612436124461245612466124761248612496125061251612526125361254612556125661257612586125961260612616126261263612646126561266612676126861269612706127161272612736127461275612766127761278612796128061281612826128361284612856128661287612886128961290612916129261293612946129561296612976129861299613006130161302613036130461305613066130761308613096131061311613126131361314613156131661317613186131961320613216132261323613246132561326613276132861329613306133161332613336133461335613366133761338613396134061341613426134361344613456134661347613486134961350613516135261353613546135561356613576135861359613606136161362613636136461365613666136761368613696137061371613726137361374613756137661377613786137961380613816138261383613846138561386613876138861389613906139161392613936139461395613966139761398613996140061401614026140361404614056140661407614086140961410614116141261413614146141561416614176141861419614206142161422614236142461425614266142761428614296143061431614326143361434614356143661437614386143961440614416144261443614446144561446614476144861449614506145161452614536145461455614566145761458614596146061461614626146361464614656146661467614686146961470614716147261473614746147561476614776147861479614806148161482614836148461485614866148761488614896149061491614926149361494614956149661497614986149961500615016150261503615046150561506615076150861509615106151161512615136151461515615166151761518615196152061521615226152361524615256152661527615286152961530615316153261533615346153561536615376153861539615406154161542615436154461545615466154761548615496155061551615526155361554615556155661557615586155961560615616156261563615646156561566615676156861569615706157161572615736157461575615766157761578615796158061581615826158361584615856158661587615886158961590615916159261593615946159561596615976159861599616006160161602616036160461605616066160761608616096161061611616126161361614616156161661617616186161961620616216162261623616246162561626616276162861629616306163161632616336163461635616366163761638616396164061641616426164361644616456164661647616486164961650616516165261653616546165561656616576165861659616606166161662616636166461665616666166761668616696167061671616726167361674616756167661677616786167961680616816168261683616846168561686616876168861689616906169161692616936169461695616966169761698616996170061701617026170361704617056170661707617086170961710617116171261713617146171561716617176171861719617206172161722617236172461725617266172761728617296173061731617326173361734617356173661737617386173961740617416174261743617446174561746617476174861749617506175161752617536175461755617566175761758617596176061761617626176361764617656176661767617686176961770617716177261773617746177561776617776177861779617806178161782617836178461785617866178761788617896179061791617926179361794617956179661797617986179961800618016180261803618046180561806618076180861809618106181161812618136181461815618166181761818618196182061821618226182361824618256182661827618286182961830618316183261833618346183561836618376183861839618406184161842618436184461845618466184761848618496185061851618526185361854618556185661857618586185961860618616186261863618646186561866618676186861869618706187161872618736187461875618766187761878618796188061881618826188361884618856188661887618886188961890618916189261893618946189561896618976189861899619006190161902619036190461905619066190761908619096191061911619126191361914619156191661917619186191961920619216192261923619246192561926619276192861929619306193161932619336193461935619366193761938619396194061941619426194361944619456194661947619486194961950619516195261953619546195561956619576195861959619606196161962619636196461965619666196761968619696197061971619726197361974619756197661977619786197961980619816198261983619846198561986619876198861989619906199161992619936199461995619966199761998619996200062001620026200362004620056200662007620086200962010620116201262013620146201562016620176201862019620206202162022620236202462025620266202762028620296203062031620326203362034620356203662037620386203962040620416204262043620446204562046620476204862049620506205162052620536205462055620566205762058620596206062061620626206362064620656206662067620686206962070620716207262073620746207562076620776207862079620806208162082620836208462085620866208762088620896209062091620926209362094620956209662097620986209962100621016210262103621046210562106621076210862109621106211162112621136211462115621166211762118621196212062121621226212362124621256212662127621286212962130621316213262133621346213562136621376213862139621406214162142621436214462145621466214762148621496215062151621526215362154621556215662157621586215962160621616216262163621646216562166621676216862169621706217162172621736217462175621766217762178621796218062181621826218362184621856218662187621886218962190621916219262193621946219562196621976219862199622006220162202622036220462205622066220762208622096221062211622126221362214622156221662217622186221962220622216222262223622246222562226622276222862229622306223162232622336223462235622366223762238622396224062241622426224362244622456224662247622486224962250622516225262253622546225562256622576225862259622606226162262622636226462265622666226762268622696227062271622726227362274622756227662277622786227962280622816228262283622846228562286622876228862289622906229162292622936229462295622966229762298622996230062301623026230362304623056230662307623086230962310623116231262313623146231562316623176231862319623206232162322623236232462325623266232762328623296233062331623326233362334623356233662337623386233962340623416234262343623446234562346623476234862349623506235162352623536235462355623566235762358623596236062361623626236362364623656236662367623686236962370623716237262373623746237562376623776237862379623806238162382623836238462385623866238762388623896239062391623926239362394623956239662397623986239962400624016240262403624046240562406624076240862409624106241162412624136241462415624166241762418624196242062421624226242362424624256242662427624286242962430624316243262433624346243562436624376243862439624406244162442624436244462445624466244762448624496245062451624526245362454624556245662457624586245962460624616246262463624646246562466624676246862469624706247162472624736247462475624766247762478624796248062481624826248362484624856248662487624886248962490624916249262493624946249562496624976249862499625006250162502625036250462505625066250762508625096251062511625126251362514625156251662517625186251962520625216252262523625246252562526625276252862529625306253162532625336253462535625366253762538625396254062541625426254362544625456254662547625486254962550625516255262553625546255562556625576255862559625606256162562625636256462565625666256762568625696257062571625726257362574625756257662577625786257962580625816258262583625846258562586625876258862589625906259162592625936259462595625966259762598625996260062601626026260362604626056260662607626086260962610626116261262613626146261562616626176261862619626206262162622626236262462625626266262762628626296263062631626326263362634626356263662637626386263962640626416264262643626446264562646626476264862649626506265162652626536265462655626566265762658626596266062661626626266362664626656266662667626686266962670626716267262673626746267562676626776267862679626806268162682626836268462685626866268762688626896269062691626926269362694626956269662697626986269962700627016270262703627046270562706627076270862709627106271162712627136271462715627166271762718627196272062721627226272362724627256272662727627286272962730627316273262733627346273562736627376273862739627406274162742627436274462745627466274762748627496275062751627526275362754627556275662757627586275962760627616276262763627646276562766627676276862769627706277162772627736277462775627766277762778627796278062781627826278362784627856278662787627886278962790627916279262793627946279562796627976279862799628006280162802628036280462805628066280762808628096281062811628126281362814628156281662817628186281962820628216282262823628246282562826628276282862829628306283162832628336283462835628366283762838628396284062841628426284362844628456284662847628486284962850628516285262853628546285562856628576285862859628606286162862628636286462865628666286762868628696287062871628726287362874628756287662877628786287962880628816288262883628846288562886628876288862889628906289162892628936289462895628966289762898628996290062901629026290362904629056290662907629086290962910629116291262913629146291562916629176291862919629206292162922629236292462925629266292762928629296293062931629326293362934629356293662937629386293962940629416294262943629446294562946629476294862949629506295162952629536295462955629566295762958629596296062961629626296362964629656296662967629686296962970629716297262973629746297562976629776297862979629806298162982629836298462985629866298762988629896299062991629926299362994629956299662997629986299963000630016300263003630046300563006630076300863009630106301163012630136301463015630166301763018630196302063021630226302363024630256302663027630286302963030630316303263033630346303563036630376303863039630406304163042630436304463045630466304763048630496305063051630526305363054630556305663057630586305963060630616306263063630646306563066630676306863069630706307163072630736307463075630766307763078630796308063081630826308363084630856308663087630886308963090630916309263093630946309563096630976309863099631006310163102631036310463105631066310763108631096311063111631126311363114631156311663117631186311963120631216312263123631246312563126631276312863129631306313163132631336313463135631366313763138631396314063141631426314363144631456314663147631486314963150631516315263153631546315563156631576315863159631606316163162631636316463165631666316763168631696317063171631726317363174631756317663177631786317963180631816318263183631846318563186631876318863189631906319163192631936319463195631966319763198631996320063201632026320363204632056320663207632086320963210632116321263213632146321563216632176321863219632206322163222632236322463225632266322763228632296323063231632326323363234632356323663237632386323963240632416324263243632446324563246632476324863249632506325163252632536325463255632566325763258632596326063261632626326363264632656326663267632686326963270632716327263273632746327563276632776327863279632806328163282632836328463285632866328763288632896329063291632926329363294632956329663297632986329963300633016330263303633046330563306633076330863309633106331163312633136331463315633166331763318633196332063321633226332363324633256332663327633286332963330633316333263333633346333563336633376333863339633406334163342633436334463345633466334763348633496335063351633526335363354633556335663357633586335963360633616336263363633646336563366633676336863369633706337163372633736337463375633766337763378633796338063381633826338363384633856338663387633886338963390633916339263393633946339563396633976339863399634006340163402634036340463405634066340763408634096341063411634126341363414634156341663417634186341963420634216342263423634246342563426634276342863429634306343163432634336343463435634366343763438634396344063441634426344363444634456344663447634486344963450634516345263453634546345563456634576345863459634606346163462634636346463465634666346763468634696347063471634726347363474634756347663477634786347963480634816348263483634846348563486634876348863489634906349163492634936349463495634966349763498634996350063501635026350363504635056350663507635086350963510635116351263513635146351563516635176351863519635206352163522635236352463525635266352763528635296353063531635326353363534635356353663537635386353963540635416354263543635446354563546635476354863549635506355163552635536355463555635566355763558635596356063561635626356363564635656356663567635686356963570635716357263573635746357563576635776357863579635806358163582635836358463585635866358763588635896359063591635926359363594635956359663597635986359963600636016360263603636046360563606636076360863609636106361163612636136361463615636166361763618636196362063621636226362363624636256362663627636286362963630636316363263633636346363563636636376363863639636406364163642636436364463645636466364763648636496365063651636526365363654636556365663657636586365963660636616366263663636646366563666636676366863669636706367163672636736367463675636766367763678636796368063681636826368363684636856368663687636886368963690636916369263693636946369563696636976369863699637006370163702637036370463705637066370763708637096371063711637126371363714637156371663717637186371963720637216372263723637246372563726637276372863729637306373163732637336373463735637366373763738637396374063741637426374363744637456374663747637486374963750637516375263753637546375563756637576375863759637606376163762637636376463765637666376763768637696377063771637726377363774637756377663777637786377963780637816378263783637846378563786637876378863789637906379163792637936379463795637966379763798637996380063801638026380363804638056380663807638086380963810638116381263813638146381563816638176381863819638206382163822638236382463825638266382763828638296383063831638326383363834638356383663837638386383963840638416384263843638446384563846638476384863849638506385163852638536385463855638566385763858638596386063861638626386363864638656386663867638686386963870638716387263873638746387563876638776387863879638806388163882638836388463885638866388763888638896389063891638926389363894638956389663897638986389963900639016390263903639046390563906639076390863909639106391163912639136391463915639166391763918639196392063921639226392363924639256392663927639286392963930639316393263933639346393563936639376393863939639406394163942639436394463945639466394763948639496395063951639526395363954639556395663957639586395963960639616396263963639646396563966639676396863969639706397163972639736397463975639766397763978639796398063981639826398363984639856398663987639886398963990639916399263993639946399563996639976399863999640006400164002640036400464005640066400764008640096401064011640126401364014640156401664017640186401964020640216402264023640246402564026640276402864029640306403164032640336403464035640366403764038640396404064041640426404364044640456404664047640486404964050640516405264053640546405564056640576405864059640606406164062640636406464065640666406764068640696407064071640726407364074640756407664077640786407964080640816408264083640846408564086640876408864089640906409164092640936409464095640966409764098640996410064101641026410364104641056410664107641086410964110641116411264113641146411564116641176411864119641206412164122641236412464125641266412764128641296413064131641326413364134641356413664137641386413964140641416414264143641446414564146641476414864149641506415164152641536415464155641566415764158641596416064161641626416364164641656416664167641686416964170641716417264173641746417564176641776417864179641806418164182641836418464185641866418764188641896419064191641926419364194641956419664197641986419964200642016420264203642046420564206642076420864209642106421164212642136421464215642166421764218642196422064221642226422364224642256422664227642286422964230642316423264233642346423564236642376423864239642406424164242642436424464245642466424764248642496425064251642526425364254642556425664257642586425964260642616426264263642646426564266642676426864269642706427164272642736427464275642766427764278642796428064281642826428364284642856428664287642886428964290642916429264293642946429564296642976429864299643006430164302643036430464305643066430764308643096431064311643126431364314643156431664317643186431964320643216432264323643246432564326643276432864329643306433164332643336433464335643366433764338643396434064341643426434364344643456434664347643486434964350643516435264353643546435564356643576435864359643606436164362643636436464365643666436764368643696437064371643726437364374643756437664377643786437964380643816438264383643846438564386643876438864389643906439164392643936439464395643966439764398643996440064401644026440364404644056440664407644086440964410644116441264413644146441564416644176441864419644206442164422644236442464425644266442764428644296443064431644326443364434644356443664437644386443964440644416444264443644446444564446644476444864449644506445164452644536445464455644566445764458644596446064461644626446364464644656446664467644686446964470644716447264473644746447564476644776447864479644806448164482644836448464485644866448764488644896449064491644926449364494644956449664497644986449964500645016450264503645046450564506645076450864509645106451164512645136451464515645166451764518645196452064521645226452364524645256452664527645286452964530645316453264533645346453564536645376453864539645406454164542645436454464545645466454764548645496455064551645526455364554645556455664557645586455964560645616456264563645646456564566645676456864569645706457164572645736457464575645766457764578645796458064581645826458364584645856458664587645886458964590645916459264593645946459564596645976459864599646006460164602646036460464605646066460764608646096461064611646126461364614646156461664617646186461964620646216462264623646246462564626646276462864629646306463164632646336463464635646366463764638646396464064641646426464364644646456464664647646486464964650646516465264653646546465564656646576465864659646606466164662646636466464665646666466764668646696467064671646726467364674646756467664677646786467964680646816468264683646846468564686646876468864689646906469164692646936469464695646966469764698646996470064701647026470364704647056470664707647086470964710647116471264713647146471564716647176471864719647206472164722647236472464725647266472764728647296473064731647326473364734647356473664737647386473964740647416474264743647446474564746647476474864749647506475164752647536475464755647566475764758647596476064761647626476364764647656476664767647686476964770647716477264773647746477564776647776477864779647806478164782647836478464785647866478764788647896479064791647926479364794647956479664797647986479964800648016480264803648046480564806648076480864809648106481164812648136481464815648166481764818648196482064821648226482364824648256482664827648286482964830648316483264833648346483564836648376483864839648406484164842648436484464845648466484764848648496485064851648526485364854648556485664857648586485964860648616486264863648646486564866648676486864869648706487164872648736487464875648766487764878648796488064881648826488364884648856488664887648886488964890648916489264893648946489564896648976489864899649006490164902649036490464905649066490764908649096491064911649126491364914649156491664917649186491964920649216492264923649246492564926649276492864929649306493164932649336493464935649366493764938649396494064941649426494364944649456494664947649486494964950649516495264953649546495564956649576495864959649606496164962649636496464965649666496764968649696497064971649726497364974649756497664977649786497964980649816498264983649846498564986649876498864989649906499164992649936499464995649966499764998649996500065001650026500365004650056500665007650086500965010650116501265013650146501565016650176501865019650206502165022650236502465025650266502765028650296503065031650326503365034650356503665037650386503965040650416504265043650446504565046650476504865049650506505165052650536505465055650566505765058650596506065061650626506365064650656506665067650686506965070650716507265073650746507565076650776507865079650806508165082650836508465085650866508765088650896509065091650926509365094650956509665097650986509965100651016510265103651046510565106651076510865109651106511165112651136511465115651166511765118651196512065121651226512365124651256512665127651286512965130651316513265133651346513565136651376513865139651406514165142651436514465145651466514765148651496515065151651526515365154651556515665157651586515965160651616516265163651646516565166651676516865169651706517165172651736517465175651766517765178651796518065181651826518365184651856518665187651886518965190651916519265193651946519565196651976519865199652006520165202652036520465205652066520765208652096521065211652126521365214652156521665217652186521965220652216522265223652246522565226652276522865229652306523165232652336523465235652366523765238652396524065241652426524365244652456524665247652486524965250652516525265253652546525565256652576525865259652606526165262652636526465265652666526765268652696527065271652726527365274652756527665277652786527965280652816528265283652846528565286652876528865289652906529165292652936529465295652966529765298652996530065301653026530365304653056530665307653086530965310653116531265313653146531565316653176531865319653206532165322653236532465325653266532765328653296533065331653326533365334653356533665337653386533965340653416534265343653446534565346653476534865349653506535165352653536535465355653566535765358653596536065361653626536365364653656536665367653686536965370653716537265373653746537565376653776537865379653806538165382653836538465385653866538765388653896539065391653926539365394653956539665397653986539965400654016540265403654046540565406654076540865409654106541165412654136541465415654166541765418654196542065421654226542365424654256542665427654286542965430654316543265433654346543565436654376543865439654406544165442654436544465445654466544765448654496545065451654526545365454654556545665457654586545965460654616546265463654646546565466654676546865469654706547165472654736547465475654766547765478654796548065481654826548365484654856548665487654886548965490654916549265493654946549565496654976549865499655006550165502655036550465505655066550765508655096551065511655126551365514655156551665517655186551965520655216552265523655246552565526655276552865529655306553165532655336553465535655366553765538655396554065541655426554365544655456554665547655486554965550655516555265553655546555565556655576555865559655606556165562655636556465565655666556765568655696557065571655726557365574655756557665577655786557965580655816558265583655846558565586655876558865589655906559165592655936559465595655966559765598655996560065601656026560365604656056560665607656086560965610656116561265613656146561565616656176561865619656206562165622656236562465625656266562765628656296563065631656326563365634656356563665637656386563965640656416564265643656446564565646656476564865649656506565165652656536565465655656566565765658656596566065661656626566365664656656566665667656686566965670656716567265673656746567565676656776567865679656806568165682656836568465685656866568765688656896569065691656926569365694656956569665697656986569965700657016570265703657046570565706657076570865709657106571165712657136571465715657166571765718657196572065721657226572365724657256572665727657286572965730657316573265733657346573565736657376573865739657406574165742657436574465745657466574765748657496575065751657526575365754657556575665757657586575965760657616576265763657646576565766657676576865769657706577165772657736577465775657766577765778657796578065781657826578365784657856578665787657886578965790657916579265793657946579565796657976579865799658006580165802658036580465805658066580765808658096581065811658126581365814658156581665817658186581965820658216582265823658246582565826658276582865829658306583165832658336583465835658366583765838658396584065841658426584365844658456584665847658486584965850658516585265853658546585565856658576585865859658606586165862658636586465865658666586765868658696587065871658726587365874658756587665877658786587965880658816588265883658846588565886658876588865889658906589165892658936589465895658966589765898658996590065901659026590365904659056590665907659086590965910659116591265913659146591565916659176591865919659206592165922659236592465925659266592765928659296593065931659326593365934659356593665937659386593965940659416594265943659446594565946659476594865949659506595165952659536595465955659566595765958659596596065961659626596365964659656596665967659686596965970659716597265973659746597565976659776597865979659806598165982659836598465985659866598765988659896599065991659926599365994659956599665997659986599966000660016600266003660046600566006660076600866009660106601166012660136601466015660166601766018660196602066021660226602366024660256602666027660286602966030660316603266033660346603566036660376603866039660406604166042660436604466045660466604766048660496605066051660526605366054660556605666057660586605966060660616606266063660646606566066660676606866069660706607166072660736607466075660766607766078660796608066081660826608366084660856608666087660886608966090660916609266093660946609566096660976609866099661006610166102661036610466105661066610766108661096611066111661126611366114661156611666117661186611966120661216612266123661246612566126661276612866129661306613166132661336613466135661366613766138661396614066141661426614366144661456614666147661486614966150661516615266153661546615566156661576615866159661606616166162661636616466165661666616766168661696617066171661726617366174661756617666177661786617966180661816618266183661846618566186661876618866189661906619166192661936619466195661966619766198661996620066201662026620366204662056620666207662086620966210662116621266213662146621566216662176621866219662206622166222662236622466225662266622766228662296623066231662326623366234662356623666237662386623966240662416624266243662446624566246662476624866249662506625166252662536625466255662566625766258662596626066261662626626366264662656626666267662686626966270662716627266273662746627566276662776627866279662806628166282662836628466285662866628766288662896629066291662926629366294662956629666297662986629966300663016630266303663046630566306663076630866309663106631166312663136631466315663166631766318663196632066321663226632366324663256632666327663286632966330663316633266333663346633566336663376633866339663406634166342663436634466345663466634766348663496635066351663526635366354663556635666357663586635966360663616636266363663646636566366663676636866369663706637166372663736637466375663766637766378663796638066381663826638366384663856638666387663886638966390663916639266393663946639566396663976639866399664006640166402664036640466405664066640766408664096641066411664126641366414664156641666417664186641966420664216642266423664246642566426664276642866429664306643166432664336643466435664366643766438664396644066441664426644366444664456644666447664486644966450664516645266453664546645566456664576645866459664606646166462664636646466465664666646766468664696647066471664726647366474664756647666477664786647966480664816648266483664846648566486664876648866489664906649166492664936649466495664966649766498664996650066501665026650366504665056650666507665086650966510665116651266513665146651566516665176651866519665206652166522665236652466525665266652766528665296653066531665326653366534665356653666537665386653966540665416654266543665446654566546665476654866549665506655166552665536655466555665566655766558665596656066561665626656366564665656656666567665686656966570665716657266573665746657566576665776657866579665806658166582665836658466585665866658766588665896659066591665926659366594665956659666597665986659966600666016660266603666046660566606666076660866609666106661166612666136661466615666166661766618666196662066621666226662366624666256662666627666286662966630666316663266633666346663566636666376663866639666406664166642666436664466645666466664766648666496665066651666526665366654666556665666657666586665966660666616666266663666646666566666666676666866669666706667166672666736667466675666766667766678666796668066681666826668366684666856668666687666886668966690666916669266693666946669566696666976669866699667006670166702667036670466705667066670766708667096671066711667126671366714667156671666717667186671966720667216672266723667246672566726667276672866729667306673166732667336673466735667366673766738667396674066741667426674366744667456674666747667486674966750667516675266753667546675566756667576675866759667606676166762667636676466765667666676766768667696677066771667726677366774667756677666777667786677966780667816678266783667846678566786667876678866789667906679166792667936679466795667966679766798667996680066801668026680366804668056680666807668086680966810668116681266813668146681566816668176681866819668206682166822668236682466825668266682766828668296683066831668326683366834668356683666837668386683966840668416684266843668446684566846668476684866849668506685166852668536685466855668566685766858668596686066861668626686366864668656686666867668686686966870668716687266873668746687566876668776687866879668806688166882668836688466885668866688766888668896689066891668926689366894668956689666897668986689966900669016690266903669046690566906669076690866909669106691166912669136691466915669166691766918669196692066921669226692366924669256692666927669286692966930669316693266933669346693566936669376693866939669406694166942669436694466945669466694766948669496695066951669526695366954669556695666957669586695966960669616696266963669646696566966669676696866969669706697166972669736697466975669766697766978669796698066981669826698366984669856698666987669886698966990669916699266993669946699566996669976699866999670006700167002670036700467005670066700767008670096701067011670126701367014670156701667017670186701967020670216702267023670246702567026670276702867029670306703167032670336703467035670366703767038670396704067041670426704367044670456704667047670486704967050670516705267053670546705567056670576705867059670606706167062670636706467065670666706767068670696707067071670726707367074670756707667077670786707967080670816708267083670846708567086670876708867089670906709167092670936709467095670966709767098670996710067101671026710367104671056710667107671086710967110671116711267113671146711567116671176711867119671206712167122671236712467125671266712767128671296713067131671326713367134671356713667137671386713967140671416714267143671446714567146671476714867149671506715167152671536715467155671566715767158671596716067161671626716367164671656716667167671686716967170671716717267173671746717567176671776717867179671806718167182671836718467185671866718767188671896719067191671926719367194671956719667197671986719967200672016720267203672046720567206672076720867209672106721167212672136721467215672166721767218672196722067221672226722367224672256722667227672286722967230672316723267233672346723567236672376723867239672406724167242672436724467245672466724767248672496725067251672526725367254672556725667257672586725967260672616726267263672646726567266672676726867269672706727167272672736727467275672766727767278672796728067281672826728367284672856728667287672886728967290672916729267293672946729567296672976729867299673006730167302673036730467305673066730767308673096731067311673126731367314673156731667317673186731967320673216732267323673246732567326673276732867329673306733167332673336733467335673366733767338673396734067341673426734367344673456734667347673486734967350673516735267353673546735567356673576735867359673606736167362673636736467365673666736767368673696737067371673726737367374673756737667377673786737967380673816738267383673846738567386673876738867389673906739167392673936739467395673966739767398673996740067401674026740367404674056740667407674086740967410674116741267413674146741567416674176741867419674206742167422674236742467425674266742767428674296743067431674326743367434674356743667437674386743967440674416744267443674446744567446674476744867449674506745167452674536745467455674566745767458674596746067461674626746367464674656746667467674686746967470674716747267473674746747567476674776747867479674806748167482674836748467485674866748767488674896749067491674926749367494674956749667497674986749967500675016750267503675046750567506675076750867509675106751167512675136751467515675166751767518675196752067521675226752367524675256752667527675286752967530675316753267533675346753567536675376753867539675406754167542675436754467545675466754767548675496755067551675526755367554675556755667557675586755967560675616756267563675646756567566675676756867569675706757167572675736757467575675766757767578675796758067581675826758367584675856758667587675886758967590675916759267593675946759567596675976759867599676006760167602676036760467605676066760767608676096761067611676126761367614676156761667617676186761967620676216762267623676246762567626676276762867629676306763167632676336763467635676366763767638676396764067641676426764367644676456764667647676486764967650676516765267653676546765567656676576765867659676606766167662676636766467665676666766767668676696767067671676726767367674676756767667677676786767967680676816768267683676846768567686676876768867689676906769167692676936769467695676966769767698676996770067701677026770367704677056770667707677086770967710677116771267713677146771567716677176771867719677206772167722677236772467725677266772767728677296773067731677326773367734677356773667737677386773967740677416774267743677446774567746677476774867749677506775167752677536775467755677566775767758677596776067761677626776367764677656776667767677686776967770677716777267773677746777567776677776777867779677806778167782677836778467785677866778767788677896779067791677926779367794677956779667797677986779967800678016780267803678046780567806678076780867809678106781167812678136781467815678166781767818678196782067821678226782367824678256782667827678286782967830678316783267833678346783567836678376783867839678406784167842678436784467845678466784767848678496785067851678526785367854678556785667857678586785967860678616786267863678646786567866678676786867869678706787167872678736787467875678766787767878678796788067881678826788367884678856788667887678886788967890678916789267893678946789567896678976789867899679006790167902679036790467905679066790767908679096791067911679126791367914679156791667917679186791967920679216792267923679246792567926679276792867929679306793167932679336793467935679366793767938679396794067941679426794367944679456794667947679486794967950679516795267953679546795567956679576795867959679606796167962679636796467965679666796767968679696797067971679726797367974679756797667977679786797967980679816798267983679846798567986679876798867989679906799167992679936799467995679966799767998679996800068001680026800368004680056800668007680086800968010680116801268013680146801568016680176801868019680206802168022680236802468025680266802768028680296803068031680326803368034680356803668037680386803968040680416804268043680446804568046680476804868049680506805168052680536805468055680566805768058680596806068061680626806368064680656806668067680686806968070680716807268073680746807568076680776807868079680806808168082680836808468085680866808768088680896809068091680926809368094680956809668097680986809968100681016810268103681046810568106681076810868109681106811168112681136811468115681166811768118681196812068121681226812368124681256812668127681286812968130681316813268133681346813568136681376813868139681406814168142681436814468145681466814768148681496815068151681526815368154681556815668157681586815968160681616816268163681646816568166681676816868169681706817168172681736817468175681766817768178681796818068181681826818368184681856818668187681886818968190681916819268193681946819568196681976819868199682006820168202682036820468205682066820768208682096821068211682126821368214682156821668217682186821968220682216822268223682246822568226682276822868229682306823168232682336823468235682366823768238682396824068241682426824368244682456824668247682486824968250682516825268253682546825568256682576825868259682606826168262682636826468265682666826768268682696827068271682726827368274682756827668277682786827968280682816828268283682846828568286682876828868289682906829168292682936829468295682966829768298682996830068301683026830368304683056830668307683086830968310683116831268313683146831568316683176831868319683206832168322683236832468325683266832768328683296833068331683326833368334683356833668337683386833968340683416834268343683446834568346683476834868349683506835168352683536835468355683566835768358683596836068361683626836368364683656836668367683686836968370683716837268373683746837568376683776837868379683806838168382683836838468385683866838768388683896839068391683926839368394683956839668397683986839968400684016840268403684046840568406684076840868409684106841168412684136841468415684166841768418684196842068421684226842368424684256842668427684286842968430684316843268433684346843568436684376843868439684406844168442684436844468445684466844768448684496845068451684526845368454684556845668457684586845968460684616846268463684646846568466684676846868469684706847168472684736847468475684766847768478684796848068481684826848368484684856848668487684886848968490684916849268493684946849568496684976849868499685006850168502685036850468505685066850768508685096851068511685126851368514685156851668517685186851968520685216852268523685246852568526685276852868529685306853168532685336853468535685366853768538685396854068541685426854368544685456854668547685486854968550685516855268553685546855568556685576855868559685606856168562685636856468565685666856768568685696857068571685726857368574685756857668577685786857968580685816858268583685846858568586685876858868589685906859168592685936859468595685966859768598685996860068601686026860368604686056860668607686086860968610686116861268613686146861568616686176861868619686206862168622686236862468625686266862768628686296863068631686326863368634686356863668637686386863968640686416864268643686446864568646686476864868649686506865168652686536865468655686566865768658686596866068661686626866368664686656866668667686686866968670686716867268673686746867568676686776867868679686806868168682686836868468685686866868768688686896869068691686926869368694686956869668697686986869968700687016870268703687046870568706687076870868709687106871168712687136871468715687166871768718687196872068721687226872368724687256872668727687286872968730687316873268733687346873568736687376873868739687406874168742687436874468745687466874768748687496875068751687526875368754687556875668757687586875968760687616876268763687646876568766687676876868769687706877168772687736877468775687766877768778687796878068781687826878368784687856878668787687886878968790687916879268793687946879568796687976879868799688006880168802688036880468805688066880768808688096881068811688126881368814688156881668817688186881968820688216882268823688246882568826688276882868829688306883168832688336883468835688366883768838688396884068841688426884368844688456884668847688486884968850688516885268853688546885568856688576885868859688606886168862688636886468865688666886768868688696887068871688726887368874688756887668877688786887968880688816888268883688846888568886688876888868889688906889168892688936889468895688966889768898688996890068901689026890368904689056890668907689086890968910689116891268913689146891568916689176891868919689206892168922689236892468925689266892768928689296893068931689326893368934689356893668937689386893968940689416894268943689446894568946689476894868949689506895168952689536895468955689566895768958689596896068961689626896368964689656896668967689686896968970689716897268973689746897568976689776897868979689806898168982689836898468985689866898768988689896899068991689926899368994689956899668997689986899969000690016900269003690046900569006690076900869009690106901169012690136901469015690166901769018690196902069021690226902369024690256902669027690286902969030690316903269033690346903569036690376903869039690406904169042690436904469045690466904769048690496905069051690526905369054690556905669057690586905969060690616906269063690646906569066690676906869069690706907169072690736907469075690766907769078690796908069081690826908369084690856908669087690886908969090690916909269093690946909569096690976909869099691006910169102691036910469105691066910769108691096911069111691126911369114691156911669117691186911969120691216912269123691246912569126691276912869129691306913169132691336913469135691366913769138691396914069141691426914369144691456914669147691486914969150691516915269153691546915569156691576915869159691606916169162691636916469165691666916769168691696917069171691726917369174691756917669177691786917969180691816918269183691846918569186691876918869189691906919169192691936919469195691966919769198691996920069201692026920369204692056920669207692086920969210692116921269213692146921569216692176921869219692206922169222692236922469225692266922769228692296923069231692326923369234692356923669237692386923969240692416924269243692446924569246692476924869249692506925169252692536925469255692566925769258692596926069261692626926369264692656926669267692686926969270692716927269273692746927569276692776927869279692806928169282692836928469285692866928769288692896929069291692926929369294692956929669297692986929969300693016930269303693046930569306693076930869309693106931169312693136931469315693166931769318693196932069321693226932369324693256932669327693286932969330693316933269333693346933569336693376933869339693406934169342693436934469345693466934769348693496935069351693526935369354693556935669357693586935969360693616936269363693646936569366693676936869369693706937169372693736937469375693766937769378693796938069381693826938369384693856938669387693886938969390693916939269393693946939569396693976939869399694006940169402694036940469405694066940769408694096941069411694126941369414694156941669417694186941969420694216942269423694246942569426694276942869429694306943169432694336943469435694366943769438694396944069441694426944369444694456944669447694486944969450694516945269453694546945569456694576945869459694606946169462694636946469465694666946769468694696947069471694726947369474694756947669477694786947969480694816948269483694846948569486694876948869489694906949169492694936949469495694966949769498694996950069501695026950369504695056950669507695086950969510695116951269513695146951569516695176951869519695206952169522695236952469525695266952769528695296953069531695326953369534695356953669537695386953969540695416954269543695446954569546695476954869549695506955169552695536955469555695566955769558695596956069561695626956369564695656956669567695686956969570695716957269573695746957569576695776957869579695806958169582695836958469585695866958769588695896959069591695926959369594695956959669597695986959969600696016960269603696046960569606696076960869609696106961169612696136961469615696166961769618696196962069621696226962369624696256962669627696286962969630696316963269633696346963569636696376963869639696406964169642696436964469645696466964769648696496965069651696526965369654696556965669657696586965969660696616966269663696646966569666696676966869669696706967169672696736967469675696766967769678696796968069681696826968369684696856968669687696886968969690696916969269693696946969569696696976969869699697006970169702697036970469705697066970769708697096971069711697126971369714697156971669717697186971969720697216972269723697246972569726697276972869729697306973169732697336973469735697366973769738697396974069741697426974369744697456974669747697486974969750697516975269753697546975569756697576975869759697606976169762697636976469765697666976769768697696977069771697726977369774697756977669777697786977969780697816978269783697846978569786697876978869789697906979169792697936979469795697966979769798697996980069801698026980369804698056980669807698086980969810698116981269813698146981569816698176981869819698206982169822698236982469825698266982769828698296983069831698326983369834698356983669837698386983969840698416984269843698446984569846698476984869849698506985169852698536985469855698566985769858698596986069861698626986369864698656986669867698686986969870698716987269873698746987569876698776987869879698806988169882698836988469885698866988769888698896989069891698926989369894698956989669897698986989969900699016990269903699046990569906699076990869909699106991169912699136991469915699166991769918699196992069921699226992369924699256992669927699286992969930699316993269933699346993569936699376993869939699406994169942699436994469945699466994769948699496995069951699526995369954699556995669957699586995969960699616996269963699646996569966699676996869969699706997169972699736997469975699766997769978699796998069981699826998369984699856998669987699886998969990699916999269993699946999569996699976999869999700007000170002700037000470005700067000770008700097001070011700127001370014700157001670017700187001970020700217002270023700247002570026700277002870029700307003170032700337003470035700367003770038700397004070041700427004370044700457004670047700487004970050700517005270053700547005570056700577005870059700607006170062700637006470065700667006770068700697007070071700727007370074700757007670077700787007970080700817008270083700847008570086700877008870089700907009170092700937009470095700967009770098700997010070101701027010370104701057010670107701087010970110701117011270113701147011570116701177011870119701207012170122701237012470125701267012770128701297013070131701327013370134701357013670137701387013970140701417014270143701447014570146701477014870149701507015170152701537015470155701567015770158701597016070161701627016370164701657016670167701687016970170701717017270173701747017570176701777017870179701807018170182701837018470185701867018770188701897019070191701927019370194701957019670197701987019970200702017020270203702047020570206702077020870209702107021170212702137021470215702167021770218702197022070221702227022370224702257022670227702287022970230702317023270233702347023570236702377023870239702407024170242702437024470245702467024770248702497025070251702527025370254702557025670257702587025970260702617026270263702647026570266702677026870269702707027170272702737027470275702767027770278702797028070281702827028370284702857028670287702887028970290702917029270293702947029570296702977029870299703007030170302703037030470305703067030770308703097031070311703127031370314703157031670317703187031970320703217032270323703247032570326703277032870329703307033170332703337033470335703367033770338703397034070341703427034370344703457034670347703487034970350703517035270353703547035570356703577035870359703607036170362703637036470365703667036770368703697037070371703727037370374703757037670377703787037970380703817038270383703847038570386703877038870389703907039170392703937039470395703967039770398703997040070401704027040370404704057040670407704087040970410704117041270413704147041570416704177041870419704207042170422704237042470425704267042770428704297043070431704327043370434704357043670437704387043970440704417044270443704447044570446704477044870449704507045170452704537045470455704567045770458704597046070461704627046370464704657046670467704687046970470704717047270473704747047570476704777047870479704807048170482704837048470485704867048770488704897049070491704927049370494704957049670497704987049970500705017050270503705047050570506705077050870509705107051170512705137051470515705167051770518705197052070521705227052370524705257052670527705287052970530705317053270533705347053570536705377053870539705407054170542705437054470545705467054770548705497055070551705527055370554705557055670557705587055970560705617056270563705647056570566705677056870569705707057170572705737057470575705767057770578705797058070581705827058370584705857058670587705887058970590705917059270593705947059570596705977059870599706007060170602706037060470605706067060770608706097061070611706127061370614706157061670617706187061970620706217062270623706247062570626706277062870629706307063170632706337063470635706367063770638706397064070641706427064370644706457064670647706487064970650706517065270653706547065570656706577065870659706607066170662706637066470665706667066770668706697067070671706727067370674706757067670677706787067970680706817068270683706847068570686706877068870689706907069170692706937069470695706967069770698706997070070701707027070370704707057070670707707087070970710707117071270713707147071570716707177071870719707207072170722707237072470725707267072770728707297073070731707327073370734707357073670737707387073970740707417074270743707447074570746707477074870749707507075170752707537075470755707567075770758707597076070761707627076370764707657076670767707687076970770707717077270773707747077570776707777077870779707807078170782707837078470785707867078770788707897079070791707927079370794707957079670797707987079970800708017080270803708047080570806708077080870809708107081170812708137081470815708167081770818708197082070821708227082370824708257082670827708287082970830708317083270833708347083570836708377083870839708407084170842708437084470845708467084770848708497085070851708527085370854708557085670857708587085970860708617086270863708647086570866708677086870869708707087170872708737087470875708767087770878708797088070881708827088370884708857088670887708887088970890708917089270893708947089570896708977089870899709007090170902709037090470905709067090770908709097091070911709127091370914709157091670917709187091970920709217092270923709247092570926709277092870929709307093170932709337093470935709367093770938709397094070941709427094370944709457094670947709487094970950709517095270953709547095570956709577095870959709607096170962709637096470965709667096770968709697097070971709727097370974709757097670977709787097970980709817098270983709847098570986709877098870989709907099170992709937099470995709967099770998709997100071001710027100371004710057100671007710087100971010710117101271013710147101571016710177101871019710207102171022710237102471025710267102771028710297103071031710327103371034710357103671037710387103971040710417104271043710447104571046710477104871049710507105171052710537105471055710567105771058710597106071061710627106371064710657106671067710687106971070710717107271073710747107571076710777107871079710807108171082710837108471085710867108771088710897109071091710927109371094710957109671097710987109971100711017110271103711047110571106711077110871109711107111171112711137111471115711167111771118711197112071121711227112371124711257112671127711287112971130711317113271133711347113571136711377113871139711407114171142711437114471145711467114771148711497115071151711527115371154711557115671157711587115971160711617116271163711647116571166711677116871169711707117171172711737117471175711767117771178711797118071181711827118371184711857118671187711887118971190711917119271193711947119571196711977119871199712007120171202712037120471205712067120771208712097121071211712127121371214712157121671217712187121971220712217122271223712247122571226712277122871229712307123171232712337123471235712367123771238712397124071241712427124371244712457124671247712487124971250712517125271253712547125571256712577125871259712607126171262712637126471265712667126771268712697127071271712727127371274712757127671277712787127971280712817128271283712847128571286712877128871289712907129171292712937129471295712967129771298712997130071301713027130371304713057130671307713087130971310713117131271313713147131571316713177131871319713207132171322713237132471325713267132771328713297133071331713327133371334713357133671337713387133971340713417134271343713447134571346713477134871349713507135171352713537135471355713567135771358713597136071361713627136371364713657136671367713687136971370713717137271373713747137571376713777137871379713807138171382713837138471385713867138771388713897139071391713927139371394713957139671397713987139971400714017140271403714047140571406714077140871409714107141171412714137141471415714167141771418714197142071421714227142371424714257142671427714287142971430714317143271433714347143571436714377143871439714407144171442714437144471445714467144771448714497145071451714527145371454714557145671457714587145971460714617146271463714647146571466714677146871469714707147171472714737147471475714767147771478714797148071481714827148371484714857148671487714887148971490714917149271493714947149571496714977149871499715007150171502715037150471505715067150771508715097151071511715127151371514715157151671517715187151971520715217152271523715247152571526715277152871529715307153171532715337153471535715367153771538715397154071541715427154371544715457154671547715487154971550715517155271553715547155571556715577155871559715607156171562715637156471565715667156771568715697157071571715727157371574715757157671577715787157971580715817158271583715847158571586715877158871589715907159171592715937159471595715967159771598715997160071601716027160371604716057160671607716087160971610716117161271613716147161571616716177161871619716207162171622716237162471625716267162771628716297163071631716327163371634716357163671637716387163971640716417164271643716447164571646716477164871649716507165171652716537165471655716567165771658716597166071661716627166371664716657166671667716687166971670716717167271673716747167571676716777167871679716807168171682716837168471685716867168771688716897169071691716927169371694716957169671697716987169971700717017170271703717047170571706717077170871709717107171171712717137171471715717167171771718717197172071721717227172371724717257172671727717287172971730717317173271733717347173571736717377173871739717407174171742717437174471745717467174771748717497175071751717527175371754717557175671757717587175971760717617176271763717647176571766717677176871769717707177171772717737177471775717767177771778717797178071781717827178371784717857178671787717887178971790717917179271793717947179571796717977179871799718007180171802718037180471805718067180771808718097181071811718127181371814718157181671817718187181971820718217182271823718247182571826718277182871829718307183171832718337183471835718367183771838718397184071841718427184371844718457184671847718487184971850718517185271853718547185571856718577185871859718607186171862718637186471865718667186771868718697187071871718727187371874718757187671877718787187971880718817188271883718847188571886718877188871889718907189171892718937189471895718967189771898718997190071901719027190371904719057190671907719087190971910719117191271913719147191571916719177191871919719207192171922719237192471925719267192771928719297193071931719327193371934719357193671937719387193971940719417194271943719447194571946719477194871949719507195171952719537195471955719567195771958719597196071961719627196371964719657196671967719687196971970719717197271973719747197571976719777197871979719807198171982719837198471985719867198771988719897199071991719927199371994719957199671997719987199972000720017200272003720047200572006720077200872009720107201172012720137201472015720167201772018720197202072021720227202372024720257202672027720287202972030720317203272033720347203572036720377203872039720407204172042720437204472045720467204772048720497205072051720527205372054720557205672057720587205972060720617206272063720647206572066720677206872069720707207172072720737207472075720767207772078720797208072081720827208372084720857208672087720887208972090720917209272093720947209572096720977209872099721007210172102721037210472105721067210772108721097211072111721127211372114721157211672117721187211972120721217212272123721247212572126721277212872129721307213172132721337213472135721367213772138721397214072141721427214372144721457214672147721487214972150721517215272153721547215572156721577215872159721607216172162721637216472165721667216772168721697217072171721727217372174721757217672177721787217972180721817218272183721847218572186721877218872189721907219172192721937219472195721967219772198721997220072201722027220372204722057220672207722087220972210722117221272213722147221572216722177221872219722207222172222722237222472225722267222772228722297223072231722327223372234722357223672237722387223972240722417224272243722447224572246722477224872249722507225172252722537225472255722567225772258722597226072261722627226372264722657226672267722687226972270722717227272273722747227572276722777227872279722807228172282722837228472285722867228772288722897229072291722927229372294722957229672297722987229972300723017230272303723047230572306723077230872309723107231172312723137231472315723167231772318723197232072321723227232372324723257232672327723287232972330723317233272333723347233572336723377233872339723407234172342723437234472345723467234772348723497235072351723527235372354723557235672357723587235972360723617236272363723647236572366723677236872369723707237172372723737237472375723767237772378723797238072381723827238372384723857238672387723887238972390723917239272393723947239572396723977239872399724007240172402724037240472405724067240772408724097241072411724127241372414724157241672417724187241972420724217242272423724247242572426724277242872429724307243172432724337243472435724367243772438724397244072441724427244372444724457244672447724487244972450724517245272453724547245572456724577245872459724607246172462724637246472465724667246772468724697247072471724727247372474724757247672477724787247972480724817248272483724847248572486724877248872489724907249172492724937249472495724967249772498724997250072501725027250372504725057250672507725087250972510725117251272513725147251572516725177251872519725207252172522725237252472525725267252772528725297253072531725327253372534725357253672537725387253972540725417254272543725447254572546725477254872549725507255172552725537255472555725567255772558725597256072561725627256372564725657256672567725687256972570725717257272573725747257572576725777257872579725807258172582725837258472585725867258772588725897259072591725927259372594725957259672597725987259972600726017260272603726047260572606726077260872609726107261172612726137261472615726167261772618726197262072621726227262372624726257262672627726287262972630726317263272633726347263572636726377263872639726407264172642726437264472645726467264772648726497265072651726527265372654726557265672657726587265972660726617266272663726647266572666726677266872669726707267172672726737267472675726767267772678726797268072681726827268372684726857268672687726887268972690726917269272693726947269572696726977269872699727007270172702727037270472705727067270772708727097271072711727127271372714727157271672717727187271972720727217272272723727247272572726727277272872729727307273172732727337273472735727367273772738727397274072741727427274372744727457274672747727487274972750727517275272753727547275572756727577275872759727607276172762727637276472765727667276772768727697277072771727727277372774727757277672777727787277972780727817278272783727847278572786727877278872789727907279172792727937279472795727967279772798727997280072801728027280372804728057280672807728087280972810728117281272813728147281572816728177281872819728207282172822728237282472825728267282772828728297283072831728327283372834728357283672837728387283972840728417284272843728447284572846728477284872849728507285172852728537285472855728567285772858728597286072861728627286372864728657286672867728687286972870728717287272873728747287572876728777287872879728807288172882728837288472885728867288772888728897289072891728927289372894728957289672897728987289972900729017290272903729047290572906729077290872909729107291172912729137291472915729167291772918729197292072921729227292372924729257292672927729287292972930729317293272933729347293572936729377293872939729407294172942729437294472945729467294772948729497295072951729527295372954729557295672957729587295972960729617296272963729647296572966729677296872969729707297172972729737297472975729767297772978729797298072981729827298372984729857298672987729887298972990729917299272993729947299572996729977299872999730007300173002730037300473005730067300773008730097301073011730127301373014730157301673017730187301973020730217302273023730247302573026730277302873029730307303173032730337303473035730367303773038730397304073041730427304373044730457304673047730487304973050730517305273053730547305573056730577305873059730607306173062730637306473065730667306773068730697307073071730727307373074730757307673077730787307973080730817308273083730847308573086730877308873089730907309173092730937309473095730967309773098730997310073101731027310373104731057310673107731087310973110731117311273113731147311573116731177311873119731207312173122731237312473125731267312773128731297313073131731327313373134731357313673137731387313973140731417314273143731447314573146731477314873149731507315173152731537315473155731567315773158731597316073161731627316373164731657316673167731687316973170731717317273173731747317573176731777317873179731807318173182731837318473185731867318773188731897319073191731927319373194731957319673197731987319973200732017320273203732047320573206732077320873209732107321173212732137321473215732167321773218732197322073221732227322373224732257322673227732287322973230732317323273233732347323573236732377323873239732407324173242732437324473245732467324773248732497325073251732527325373254732557325673257732587325973260732617326273263732647326573266732677326873269732707327173272732737327473275732767327773278732797328073281732827328373284732857328673287732887328973290732917329273293732947329573296732977329873299733007330173302733037330473305733067330773308733097331073311733127331373314733157331673317733187331973320733217332273323733247332573326733277332873329733307333173332733337333473335733367333773338733397334073341733427334373344733457334673347733487334973350733517335273353733547335573356733577335873359733607336173362733637336473365733667336773368733697337073371733727337373374733757337673377733787337973380733817338273383733847338573386733877338873389733907339173392733937339473395733967339773398733997340073401734027340373404734057340673407734087340973410734117341273413734147341573416734177341873419734207342173422734237342473425734267342773428734297343073431734327343373434734357343673437734387343973440734417344273443734447344573446734477344873449734507345173452734537345473455734567345773458734597346073461734627346373464734657346673467734687346973470734717347273473734747347573476734777347873479734807348173482734837348473485734867348773488734897349073491734927349373494734957349673497734987349973500735017350273503735047350573506735077350873509735107351173512735137351473515735167351773518735197352073521735227352373524735257352673527735287352973530735317353273533735347353573536735377353873539735407354173542735437354473545735467354773548735497355073551735527355373554735557355673557735587355973560735617356273563735647356573566735677356873569735707357173572735737357473575735767357773578735797358073581735827358373584735857358673587735887358973590735917359273593735947359573596735977359873599736007360173602736037360473605736067360773608736097361073611736127361373614736157361673617736187361973620736217362273623736247362573626736277362873629736307363173632736337363473635736367363773638736397364073641736427364373644736457364673647736487364973650736517365273653736547365573656736577365873659736607366173662736637366473665736667366773668736697367073671736727367373674736757367673677736787367973680736817368273683736847368573686736877368873689736907369173692736937369473695736967369773698736997370073701737027370373704737057370673707737087370973710737117371273713737147371573716737177371873719737207372173722737237372473725737267372773728737297373073731737327373373734737357373673737737387373973740737417374273743737447374573746737477374873749737507375173752737537375473755737567375773758737597376073761737627376373764737657376673767737687376973770737717377273773737747377573776737777377873779737807378173782737837378473785737867378773788737897379073791737927379373794737957379673797737987379973800738017380273803738047380573806738077380873809738107381173812738137381473815738167381773818738197382073821738227382373824738257382673827738287382973830738317383273833738347383573836738377383873839738407384173842738437384473845738467384773848738497385073851738527385373854738557385673857738587385973860738617386273863738647386573866738677386873869738707387173872738737387473875738767387773878738797388073881738827388373884738857388673887738887388973890738917389273893738947389573896738977389873899739007390173902739037390473905739067390773908739097391073911739127391373914739157391673917739187391973920739217392273923739247392573926739277392873929739307393173932739337393473935739367393773938739397394073941739427394373944739457394673947739487394973950739517395273953739547395573956739577395873959739607396173962739637396473965739667396773968739697397073971739727397373974739757397673977739787397973980739817398273983739847398573986739877398873989739907399173992739937399473995739967399773998739997400074001740027400374004740057400674007740087400974010740117401274013740147401574016740177401874019740207402174022740237402474025740267402774028740297403074031740327403374034740357403674037740387403974040740417404274043740447404574046740477404874049740507405174052740537405474055740567405774058740597406074061740627406374064740657406674067740687406974070740717407274073740747407574076740777407874079740807408174082740837408474085740867408774088740897409074091740927409374094740957409674097740987409974100741017410274103741047410574106741077410874109741107411174112741137411474115741167411774118741197412074121741227412374124741257412674127741287412974130741317413274133741347413574136741377413874139741407414174142741437414474145741467414774148741497415074151741527415374154741557415674157741587415974160741617416274163741647416574166741677416874169741707417174172741737417474175741767417774178741797418074181741827418374184741857418674187741887418974190741917419274193741947419574196741977419874199742007420174202742037420474205742067420774208742097421074211742127421374214742157421674217742187421974220742217422274223742247422574226742277422874229742307423174232742337423474235742367423774238742397424074241742427424374244742457424674247742487424974250742517425274253742547425574256742577425874259742607426174262742637426474265742667426774268742697427074271742727427374274742757427674277742787427974280742817428274283742847428574286742877428874289742907429174292742937429474295742967429774298742997430074301743027430374304743057430674307743087430974310743117431274313743147431574316743177431874319743207432174322743237432474325743267432774328743297433074331743327433374334743357433674337743387433974340743417434274343743447434574346743477434874349743507435174352743537435474355743567435774358743597436074361743627436374364743657436674367743687436974370743717437274373743747437574376743777437874379743807438174382743837438474385743867438774388743897439074391743927439374394743957439674397743987439974400744017440274403744047440574406744077440874409744107441174412744137441474415744167441774418744197442074421744227442374424744257442674427744287442974430744317443274433744347443574436744377443874439744407444174442744437444474445744467444774448744497445074451744527445374454744557445674457744587445974460744617446274463744647446574466744677446874469744707447174472744737447474475744767447774478744797448074481744827448374484744857448674487744887448974490744917449274493744947449574496744977449874499745007450174502745037450474505745067450774508745097451074511745127451374514745157451674517745187451974520745217452274523745247452574526745277452874529745307453174532745337453474535745367453774538745397454074541745427454374544745457454674547745487454974550745517455274553745547455574556745577455874559745607456174562745637456474565745667456774568745697457074571745727457374574745757457674577745787457974580745817458274583745847458574586745877458874589745907459174592745937459474595745967459774598745997460074601746027460374604746057460674607746087460974610746117461274613746147461574616746177461874619746207462174622746237462474625746267462774628746297463074631746327463374634746357463674637746387463974640746417464274643746447464574646746477464874649746507465174652746537465474655746567465774658746597466074661746627466374664746657466674667746687466974670746717467274673746747467574676746777467874679746807468174682746837468474685746867468774688746897469074691746927469374694746957469674697746987469974700747017470274703747047470574706747077470874709747107471174712747137471474715747167471774718747197472074721747227472374724747257472674727747287472974730747317473274733747347473574736747377473874739747407474174742747437474474745747467474774748747497475074751747527475374754747557475674757747587475974760747617476274763747647476574766747677476874769747707477174772747737477474775747767477774778747797478074781747827478374784747857478674787747887478974790747917479274793747947479574796747977479874799748007480174802748037480474805748067480774808748097481074811748127481374814748157481674817748187481974820748217482274823748247482574826748277482874829748307483174832748337483474835748367483774838748397484074841748427484374844748457484674847748487484974850748517485274853748547485574856748577485874859748607486174862748637486474865748667486774868748697487074871748727487374874748757487674877748787487974880748817488274883748847488574886748877488874889748907489174892748937489474895748967489774898748997490074901749027490374904749057490674907749087490974910749117491274913749147491574916749177491874919749207492174922749237492474925749267492774928749297493074931749327493374934749357493674937749387493974940749417494274943749447494574946749477494874949749507495174952749537495474955749567495774958749597496074961749627496374964749657496674967749687496974970749717497274973749747497574976749777497874979749807498174982749837498474985749867498774988749897499074991749927499374994749957499674997749987499975000750017500275003750047500575006750077500875009750107501175012750137501475015750167501775018750197502075021750227502375024750257502675027750287502975030750317503275033750347503575036750377503875039750407504175042750437504475045750467504775048750497505075051750527505375054750557505675057750587505975060750617506275063750647506575066750677506875069750707507175072750737507475075750767507775078750797508075081750827508375084750857508675087750887508975090750917509275093750947509575096750977509875099751007510175102751037510475105751067510775108751097511075111751127511375114751157511675117751187511975120751217512275123751247512575126751277512875129751307513175132751337513475135751367513775138751397514075141751427514375144751457514675147751487514975150751517515275153751547515575156751577515875159751607516175162751637516475165751667516775168751697517075171751727517375174751757517675177751787517975180751817518275183751847518575186751877518875189751907519175192751937519475195751967519775198751997520075201752027520375204752057520675207752087520975210752117521275213752147521575216752177521875219752207522175222752237522475225752267522775228752297523075231752327523375234752357523675237752387523975240752417524275243752447524575246752477524875249752507525175252752537525475255752567525775258752597526075261752627526375264752657526675267752687526975270752717527275273752747527575276752777527875279752807528175282752837528475285752867528775288752897529075291752927529375294752957529675297752987529975300753017530275303753047530575306753077530875309753107531175312753137531475315753167531775318753197532075321753227532375324753257532675327753287532975330753317533275333753347533575336753377533875339753407534175342753437534475345753467534775348753497535075351753527535375354753557535675357753587535975360753617536275363753647536575366753677536875369753707537175372753737537475375753767537775378753797538075381753827538375384753857538675387753887538975390753917539275393753947539575396753977539875399754007540175402754037540475405754067540775408754097541075411754127541375414754157541675417754187541975420754217542275423754247542575426754277542875429754307543175432754337543475435754367543775438754397544075441754427544375444754457544675447754487544975450754517545275453754547545575456754577545875459754607546175462754637546475465754667546775468754697547075471754727547375474754757547675477754787547975480754817548275483754847548575486754877548875489754907549175492754937549475495754967549775498754997550075501755027550375504755057550675507755087550975510755117551275513755147551575516755177551875519755207552175522755237552475525755267552775528755297553075531755327553375534755357553675537755387553975540755417554275543755447554575546755477554875549755507555175552755537555475555755567555775558755597556075561755627556375564755657556675567755687556975570755717557275573755747557575576755777557875579755807558175582755837558475585755867558775588755897559075591755927559375594755957559675597755987559975600756017560275603756047560575606756077560875609756107561175612756137561475615756167561775618756197562075621756227562375624756257562675627756287562975630756317563275633756347563575636756377563875639756407564175642756437564475645756467564775648756497565075651756527565375654756557565675657756587565975660756617566275663756647566575666756677566875669756707567175672756737567475675756767567775678756797568075681756827568375684756857568675687756887568975690756917569275693756947569575696756977569875699757007570175702757037570475705757067570775708757097571075711757127571375714757157571675717757187571975720757217572275723757247572575726757277572875729757307573175732757337573475735757367573775738757397574075741757427574375744757457574675747757487574975750757517575275753757547575575756757577575875759757607576175762757637576475765757667576775768757697577075771757727577375774757757577675777757787577975780757817578275783757847578575786757877578875789757907579175792757937579475795757967579775798757997580075801758027580375804758057580675807758087580975810758117581275813758147581575816758177581875819758207582175822758237582475825758267582775828758297583075831758327583375834758357583675837758387583975840758417584275843758447584575846758477584875849758507585175852758537585475855758567585775858758597586075861758627586375864758657586675867758687586975870758717587275873758747587575876758777587875879758807588175882758837588475885758867588775888758897589075891758927589375894758957589675897758987589975900759017590275903759047590575906759077590875909759107591175912759137591475915759167591775918759197592075921759227592375924759257592675927759287592975930759317593275933759347593575936759377593875939759407594175942759437594475945759467594775948759497595075951759527595375954759557595675957759587595975960759617596275963759647596575966759677596875969759707597175972759737597475975759767597775978759797598075981759827598375984759857598675987759887598975990759917599275993759947599575996759977599875999760007600176002760037600476005760067600776008760097601076011760127601376014760157601676017760187601976020760217602276023760247602576026760277602876029760307603176032760337603476035760367603776038760397604076041760427604376044760457604676047760487604976050760517605276053760547605576056760577605876059760607606176062760637606476065760667606776068760697607076071760727607376074760757607676077760787607976080760817608276083760847608576086760877608876089760907609176092760937609476095760967609776098760997610076101761027610376104761057610676107761087610976110761117611276113761147611576116761177611876119761207612176122761237612476125761267612776128761297613076131761327613376134761357613676137761387613976140761417614276143761447614576146761477614876149761507615176152761537615476155761567615776158761597616076161761627616376164761657616676167761687616976170761717617276173761747617576176761777617876179761807618176182761837618476185761867618776188761897619076191761927619376194761957619676197761987619976200762017620276203762047620576206762077620876209762107621176212762137621476215762167621776218762197622076221762227622376224762257622676227762287622976230762317623276233762347623576236762377623876239762407624176242762437624476245762467624776248762497625076251762527625376254762557625676257762587625976260762617626276263762647626576266762677626876269762707627176272762737627476275762767627776278762797628076281762827628376284762857628676287762887628976290762917629276293762947629576296762977629876299763007630176302763037630476305763067630776308763097631076311763127631376314763157631676317763187631976320763217632276323763247632576326763277632876329763307633176332763337633476335763367633776338763397634076341763427634376344763457634676347763487634976350763517635276353763547635576356763577635876359763607636176362763637636476365763667636776368763697637076371763727637376374763757637676377763787637976380763817638276383763847638576386763877638876389763907639176392763937639476395763967639776398763997640076401764027640376404764057640676407764087640976410764117641276413764147641576416764177641876419764207642176422764237642476425764267642776428764297643076431764327643376434764357643676437764387643976440764417644276443764447644576446764477644876449764507645176452764537645476455764567645776458764597646076461764627646376464764657646676467764687646976470764717647276473764747647576476764777647876479764807648176482764837648476485764867648776488764897649076491764927649376494764957649676497764987649976500765017650276503765047650576506765077650876509765107651176512765137651476515765167651776518765197652076521765227652376524765257652676527765287652976530765317653276533765347653576536765377653876539765407654176542765437654476545765467654776548765497655076551765527655376554765557655676557765587655976560765617656276563765647656576566765677656876569765707657176572765737657476575765767657776578765797658076581765827658376584765857658676587765887658976590765917659276593765947659576596765977659876599766007660176602766037660476605766067660776608766097661076611766127661376614766157661676617766187661976620766217662276623766247662576626766277662876629766307663176632766337663476635766367663776638766397664076641766427664376644766457664676647766487664976650766517665276653766547665576656766577665876659766607666176662766637666476665766667666776668766697667076671766727667376674766757667676677766787667976680766817668276683766847668576686766877668876689766907669176692766937669476695766967669776698766997670076701767027670376704767057670676707767087670976710767117671276713767147671576716767177671876719767207672176722767237672476725767267672776728767297673076731767327673376734767357673676737767387673976740767417674276743767447674576746767477674876749767507675176752767537675476755767567675776758767597676076761767627676376764767657676676767767687676976770767717677276773767747677576776767777677876779767807678176782767837678476785767867678776788767897679076791767927679376794767957679676797767987679976800768017680276803768047680576806768077680876809768107681176812768137681476815768167681776818768197682076821768227682376824768257682676827768287682976830768317683276833768347683576836768377683876839768407684176842768437684476845768467684776848768497685076851768527685376854768557685676857768587685976860768617686276863768647686576866768677686876869768707687176872768737687476875768767687776878768797688076881768827688376884768857688676887768887688976890768917689276893768947689576896768977689876899769007690176902769037690476905769067690776908769097691076911769127691376914769157691676917769187691976920769217692276923769247692576926769277692876929769307693176932769337693476935769367693776938769397694076941769427694376944769457694676947769487694976950769517695276953769547695576956769577695876959769607696176962769637696476965769667696776968769697697076971769727697376974769757697676977769787697976980769817698276983769847698576986769877698876989769907699176992769937699476995769967699776998769997700077001770027700377004770057700677007770087700977010770117701277013770147701577016770177701877019770207702177022770237702477025770267702777028770297703077031770327703377034770357703677037770387703977040770417704277043770447704577046770477704877049770507705177052770537705477055770567705777058770597706077061770627706377064770657706677067770687706977070770717707277073770747707577076770777707877079770807708177082770837708477085770867708777088770897709077091770927709377094770957709677097770987709977100771017710277103771047710577106771077710877109771107711177112771137711477115771167711777118771197712077121771227712377124771257712677127771287712977130771317713277133771347713577136771377713877139771407714177142771437714477145771467714777148771497715077151771527715377154771557715677157771587715977160771617716277163771647716577166771677716877169771707717177172771737717477175771767717777178771797718077181771827718377184771857718677187771887718977190771917719277193771947719577196771977719877199772007720177202772037720477205772067720777208772097721077211772127721377214772157721677217772187721977220772217722277223772247722577226772277722877229772307723177232772337723477235772367723777238772397724077241772427724377244772457724677247772487724977250772517725277253772547725577256772577725877259772607726177262772637726477265772667726777268772697727077271772727727377274772757727677277772787727977280772817728277283772847728577286772877728877289772907729177292772937729477295772967729777298772997730077301773027730377304773057730677307773087730977310773117731277313773147731577316773177731877319773207732177322773237732477325773267732777328773297733077331773327733377334773357733677337773387733977340773417734277343773447734577346773477734877349773507735177352773537735477355773567735777358773597736077361773627736377364773657736677367773687736977370773717737277373773747737577376773777737877379773807738177382773837738477385773867738777388773897739077391773927739377394773957739677397773987739977400774017740277403774047740577406774077740877409774107741177412774137741477415774167741777418774197742077421774227742377424774257742677427774287742977430774317743277433774347743577436774377743877439774407744177442774437744477445774467744777448774497745077451774527745377454774557745677457774587745977460774617746277463774647746577466774677746877469774707747177472774737747477475774767747777478774797748077481774827748377484774857748677487774887748977490774917749277493774947749577496774977749877499775007750177502775037750477505775067750777508775097751077511775127751377514775157751677517775187751977520775217752277523775247752577526775277752877529775307753177532775337753477535775367753777538775397754077541775427754377544775457754677547775487754977550775517755277553775547755577556775577755877559775607756177562775637756477565775667756777568775697757077571775727757377574775757757677577775787757977580775817758277583775847758577586775877758877589775907759177592775937759477595775967759777598775997760077601776027760377604776057760677607776087760977610776117761277613776147761577616776177761877619776207762177622776237762477625776267762777628776297763077631776327763377634776357763677637776387763977640776417764277643776447764577646776477764877649776507765177652776537765477655776567765777658776597766077661776627766377664776657766677667776687766977670776717767277673776747767577676776777767877679776807768177682776837768477685776867768777688776897769077691776927769377694776957769677697776987769977700777017770277703777047770577706777077770877709777107771177712777137771477715777167771777718777197772077721777227772377724777257772677727777287772977730777317773277733777347773577736777377773877739777407774177742777437774477745777467774777748777497775077751777527775377754777557775677757777587775977760777617776277763777647776577766777677776877769777707777177772777737777477775777767777777778777797778077781777827778377784777857778677787777887778977790777917779277793777947779577796777977779877799778007780177802778037780477805778067780777808778097781077811778127781377814778157781677817778187781977820778217782277823778247782577826778277782877829778307783177832778337783477835778367783777838778397784077841778427784377844778457784677847778487784977850778517785277853778547785577856778577785877859778607786177862778637786477865778667786777868778697787077871778727787377874778757787677877778787787977880778817788277883778847788577886778877788877889778907789177892778937789477895778967789777898778997790077901779027790377904779057790677907779087790977910779117791277913779147791577916779177791877919779207792177922779237792477925779267792777928779297793077931779327793377934779357793677937779387793977940779417794277943779447794577946779477794877949779507795177952779537795477955779567795777958779597796077961779627796377964779657796677967779687796977970779717797277973779747797577976779777797877979779807798177982779837798477985779867798777988779897799077991779927799377994779957799677997779987799978000780017800278003780047800578006780077800878009780107801178012780137801478015780167801778018780197802078021780227802378024780257802678027780287802978030780317803278033780347803578036780377803878039780407804178042780437804478045780467804778048780497805078051780527805378054780557805678057780587805978060780617806278063780647806578066780677806878069780707807178072780737807478075780767807778078780797808078081780827808378084780857808678087780887808978090780917809278093780947809578096780977809878099781007810178102781037810478105781067810778108781097811078111781127811378114781157811678117781187811978120781217812278123781247812578126781277812878129781307813178132781337813478135781367813778138781397814078141781427814378144781457814678147781487814978150781517815278153781547815578156781577815878159781607816178162781637816478165781667816778168781697817078171781727817378174781757817678177781787817978180781817818278183781847818578186781877818878189781907819178192781937819478195781967819778198781997820078201782027820378204782057820678207782087820978210782117821278213782147821578216782177821878219782207822178222782237822478225782267822778228782297823078231782327823378234782357823678237782387823978240782417824278243782447824578246782477824878249782507825178252782537825478255782567825778258782597826078261782627826378264782657826678267782687826978270782717827278273782747827578276782777827878279782807828178282782837828478285782867828778288782897829078291782927829378294782957829678297782987829978300783017830278303783047830578306783077830878309783107831178312783137831478315783167831778318783197832078321783227832378324783257832678327783287832978330783317833278333783347833578336783377833878339783407834178342783437834478345783467834778348783497835078351783527835378354783557835678357783587835978360783617836278363783647836578366783677836878369783707837178372783737837478375783767837778378783797838078381783827838378384783857838678387783887838978390783917839278393783947839578396783977839878399784007840178402784037840478405784067840778408784097841078411784127841378414784157841678417784187841978420784217842278423784247842578426784277842878429784307843178432784337843478435784367843778438784397844078441784427844378444784457844678447784487844978450784517845278453784547845578456784577845878459784607846178462784637846478465784667846778468784697847078471784727847378474784757847678477784787847978480784817848278483784847848578486784877848878489784907849178492784937849478495784967849778498784997850078501785027850378504785057850678507785087850978510785117851278513785147851578516785177851878519785207852178522785237852478525785267852778528785297853078531785327853378534785357853678537785387853978540785417854278543785447854578546785477854878549785507855178552785537855478555785567855778558785597856078561785627856378564785657856678567785687856978570785717857278573785747857578576785777857878579785807858178582785837858478585785867858778588785897859078591785927859378594785957859678597785987859978600786017860278603786047860578606786077860878609786107861178612786137861478615786167861778618786197862078621786227862378624786257862678627786287862978630786317863278633786347863578636786377863878639786407864178642786437864478645786467864778648786497865078651786527865378654786557865678657786587865978660786617866278663786647866578666786677866878669786707867178672786737867478675786767867778678786797868078681786827868378684786857868678687786887868978690786917869278693786947869578696786977869878699787007870178702787037870478705787067870778708787097871078711787127871378714787157871678717787187871978720787217872278723787247872578726787277872878729787307873178732787337873478735787367873778738787397874078741787427874378744787457874678747787487874978750787517875278753787547875578756787577875878759787607876178762787637876478765787667876778768787697877078771787727877378774787757877678777787787877978780787817878278783787847878578786787877878878789787907879178792787937879478795787967879778798787997880078801788027880378804788057880678807788087880978810788117881278813788147881578816788177881878819788207882178822788237882478825788267882778828788297883078831788327883378834788357883678837788387883978840788417884278843788447884578846788477884878849788507885178852788537885478855788567885778858788597886078861788627886378864788657886678867788687886978870788717887278873788747887578876788777887878879788807888178882788837888478885788867888778888788897889078891788927889378894788957889678897788987889978900789017890278903789047890578906789077890878909789107891178912789137891478915789167891778918789197892078921789227892378924789257892678927789287892978930789317893278933789347893578936789377893878939789407894178942789437894478945789467894778948789497895078951789527895378954789557895678957789587895978960789617896278963789647896578966789677896878969789707897178972789737897478975789767897778978789797898078981789827898378984789857898678987789887898978990789917899278993789947899578996789977899878999790007900179002790037900479005790067900779008790097901079011790127901379014790157901679017790187901979020790217902279023790247902579026790277902879029790307903179032790337903479035790367903779038790397904079041790427904379044790457904679047790487904979050790517905279053790547905579056790577905879059790607906179062790637906479065790667906779068790697907079071790727907379074790757907679077790787907979080790817908279083790847908579086790877908879089790907909179092790937909479095790967909779098790997910079101791027910379104791057910679107791087910979110791117911279113791147911579116791177911879119791207912179122791237912479125791267912779128791297913079131791327913379134791357913679137791387913979140791417914279143791447914579146791477914879149791507915179152791537915479155791567915779158791597916079161791627916379164791657916679167791687916979170791717917279173791747917579176791777917879179791807918179182791837918479185791867918779188791897919079191791927919379194791957919679197791987919979200792017920279203792047920579206792077920879209792107921179212792137921479215792167921779218792197922079221792227922379224792257922679227792287922979230792317923279233792347923579236792377923879239792407924179242792437924479245792467924779248792497925079251792527925379254792557925679257792587925979260792617926279263792647926579266792677926879269792707927179272792737927479275792767927779278792797928079281792827928379284792857928679287792887928979290792917929279293792947929579296792977929879299793007930179302793037930479305793067930779308793097931079311793127931379314793157931679317793187931979320793217932279323793247932579326793277932879329793307933179332793337933479335793367933779338793397934079341793427934379344793457934679347793487934979350793517935279353793547935579356793577935879359793607936179362793637936479365793667936779368793697937079371793727937379374793757937679377793787937979380793817938279383793847938579386793877938879389793907939179392793937939479395793967939779398793997940079401794027940379404794057940679407794087940979410794117941279413794147941579416794177941879419794207942179422794237942479425794267942779428794297943079431794327943379434794357943679437794387943979440794417944279443794447944579446794477944879449794507945179452794537945479455794567945779458794597946079461794627946379464794657946679467794687946979470794717947279473794747947579476794777947879479794807948179482794837948479485794867948779488794897949079491794927949379494794957949679497794987949979500795017950279503795047950579506795077950879509795107951179512795137951479515795167951779518795197952079521795227952379524795257952679527795287952979530795317953279533795347953579536795377953879539795407954179542795437954479545795467954779548795497955079551795527955379554795557955679557795587955979560795617956279563795647956579566795677956879569795707957179572795737957479575795767957779578795797958079581795827958379584795857958679587795887958979590795917959279593795947959579596795977959879599796007960179602796037960479605796067960779608796097961079611796127961379614796157961679617796187961979620796217962279623796247962579626796277962879629796307963179632796337963479635796367963779638796397964079641796427964379644796457964679647796487964979650796517965279653796547965579656796577965879659796607966179662796637966479665796667966779668796697967079671796727967379674796757967679677796787967979680796817968279683796847968579686796877968879689796907969179692796937969479695796967969779698796997970079701797027970379704797057970679707797087970979710797117971279713797147971579716797177971879719797207972179722797237972479725797267972779728797297973079731797327973379734797357973679737797387973979740797417974279743797447974579746797477974879749797507975179752797537975479755797567975779758797597976079761797627976379764797657976679767797687976979770797717977279773797747977579776797777977879779797807978179782797837978479785797867978779788797897979079791797927979379794797957979679797797987979979800798017980279803798047980579806798077980879809798107981179812798137981479815798167981779818798197982079821798227982379824798257982679827798287982979830798317983279833798347983579836798377983879839798407984179842798437984479845798467984779848798497985079851798527985379854798557985679857798587985979860798617986279863798647986579866798677986879869798707987179872798737987479875798767987779878798797988079881798827988379884798857988679887798887988979890798917989279893798947989579896798977989879899799007990179902799037990479905799067990779908799097991079911799127991379914799157991679917799187991979920799217992279923799247992579926799277992879929799307993179932799337993479935799367993779938799397994079941799427994379944799457994679947799487994979950799517995279953799547995579956799577995879959799607996179962799637996479965799667996779968799697997079971799727997379974799757997679977799787997979980799817998279983799847998579986799877998879989799907999179992799937999479995799967999779998799998000080001800028000380004800058000680007800088000980010800118001280013800148001580016800178001880019800208002180022800238002480025800268002780028800298003080031800328003380034800358003680037800388003980040800418004280043800448004580046800478004880049800508005180052800538005480055800568005780058800598006080061800628006380064800658006680067800688006980070800718007280073800748007580076800778007880079800808008180082800838008480085800868008780088800898009080091800928009380094800958009680097800988009980100801018010280103801048010580106801078010880109801108011180112801138011480115801168011780118801198012080121801228012380124801258012680127801288012980130801318013280133801348013580136801378013880139801408014180142801438014480145801468014780148801498015080151801528015380154801558015680157801588015980160801618016280163801648016580166801678016880169801708017180172801738017480175801768017780178801798018080181801828018380184801858018680187801888018980190801918019280193801948019580196801978019880199802008020180202802038020480205802068020780208802098021080211802128021380214802158021680217802188021980220802218022280223802248022580226802278022880229802308023180232802338023480235802368023780238802398024080241802428024380244802458024680247802488024980250802518025280253802548025580256802578025880259802608026180262802638026480265802668026780268802698027080271802728027380274802758027680277802788027980280802818028280283802848028580286802878028880289802908029180292802938029480295802968029780298802998030080301803028030380304803058030680307803088030980310803118031280313803148031580316803178031880319803208032180322803238032480325803268032780328803298033080331803328033380334803358033680337803388033980340803418034280343803448034580346803478034880349803508035180352803538035480355803568035780358803598036080361803628036380364803658036680367803688036980370803718037280373803748037580376803778037880379803808038180382803838038480385803868038780388803898039080391803928039380394803958039680397803988039980400804018040280403804048040580406804078040880409804108041180412804138041480415804168041780418804198042080421804228042380424804258042680427804288042980430804318043280433804348043580436804378043880439804408044180442804438044480445804468044780448804498045080451804528045380454804558045680457804588045980460804618046280463804648046580466804678046880469804708047180472804738047480475804768047780478804798048080481804828048380484804858048680487804888048980490804918049280493804948049580496804978049880499805008050180502805038050480505805068050780508805098051080511805128051380514805158051680517805188051980520805218052280523805248052580526805278052880529805308053180532805338053480535805368053780538805398054080541805428054380544805458054680547805488054980550805518055280553805548055580556805578055880559805608056180562805638056480565805668056780568805698057080571805728057380574805758057680577805788057980580805818058280583805848058580586805878058880589805908059180592805938059480595805968059780598805998060080601806028060380604806058060680607806088060980610806118061280613806148061580616806178061880619806208062180622806238062480625806268062780628806298063080631806328063380634806358063680637806388063980640806418064280643806448064580646806478064880649806508065180652806538065480655806568065780658806598066080661806628066380664806658066680667806688066980670806718067280673806748067580676806778067880679806808068180682806838068480685806868068780688806898069080691806928069380694806958069680697806988069980700807018070280703807048070580706807078070880709807108071180712807138071480715807168071780718807198072080721807228072380724807258072680727807288072980730807318073280733807348073580736807378073880739807408074180742807438074480745807468074780748807498075080751807528075380754807558075680757807588075980760807618076280763807648076580766807678076880769807708077180772807738077480775807768077780778807798078080781807828078380784807858078680787807888078980790807918079280793807948079580796807978079880799808008080180802808038080480805808068080780808808098081080811808128081380814808158081680817 |
- (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.geopackage = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
- module.exports = require('./lib/api');
- var proj4Defs = require('./lib/proj4Defs');
- module.exports.proj4Defs = proj4Defs;
- module.exports.GeoPackageTileRetriever = require('./lib/tiles/retriever');
- module.exports.GeoPackageConnection = require('./lib/db/geoPackageConnection');
- module.exports.TableCreator = require('./lib/db/tableCreator');
- module.exports.MediaTable = require('./lib/extension/relatedTables/mediaTable');
- module.exports.UserMappingTable = require('./lib/extension/relatedTables/userMappingTable');
- module.exports.DublinCoreType = require('./lib/extension/relatedTables/dublinCoreType');
- module.exports.TileColumn = require('./lib/tiles/user/tileColumn');
- module.exports.BoundingBox = require('./lib/boundingBox');
- module.exports.TileUtilities = require('./lib/tiles/creator/tileUtilities');
- module.exports.FeatureColumn = require('./lib/features/user/featureColumn');
- module.exports.UserColumn = require('./lib/user/userColumn');
- module.exports.GeometryColumns = require('./lib/features/columns').GeometryColumns;
- module.exports.GeometryData = require('./lib/geom/geometryData');
- module.exports.DataColumns = require('./lib/dataColumns').DataColumns;
- module.exports.DataTypes = require('./lib/db/dataTypes');
- module.exports.Metadata = require('./lib/metadata').Metadata;
- module.exports.MetadataReference = require('./lib/metadata/reference').MetadataReference;
- module.exports.RTreeIndex = require('./lib/extension/rtree').RTreeIndex;
- module.exports.CrsWktExtension = require('./lib/extension/crsWkt').CrsWktExtension;
- module.exports.SchemaExtension = require('./lib/extension/schema').SchemaExtension;
- module.exports.MetadataExtension = require('./lib/extension/metadata').MetadataExtension;
- module.exports.WebPExtension = require('./lib/extension/webp').WebPExtension;
- module.exports.DataColumnsDao = require('./lib/dataColumns').DataColumnsDao;
- module.exports.DataColumnConstraintsDao = require('./lib/dataColumnConstraints').DataColumnConstraintsDao;
- },{"./lib/api":2,"./lib/boundingBox":7,"./lib/dataColumnConstraints":12,"./lib/dataColumns":13,"./lib/db/dataTypes":14,"./lib/db/geoPackageConnection":15,"./lib/db/tableCreator":19,"./lib/extension/crsWkt":24,"./lib/extension/metadata":29,"./lib/extension/relatedTables/dublinCoreType":30,"./lib/extension/relatedTables/mediaTable":35,"./lib/extension/relatedTables/userMappingTable":42,"./lib/extension/rtree":44,"./lib/extension/schema":45,"./lib/extension/webp":63,"./lib/features/columns":64,"./lib/features/user/featureColumn":65,"./lib/geom/geometryData":73,"./lib/metadata":74,"./lib/metadata/reference":75,"./lib/proj4Defs":77,"./lib/tiles/creator/tileUtilities":82,"./lib/tiles/retriever":92,"./lib/tiles/user/tileColumn":95,"./lib/user/userColumn":105}],2:[function(require,module,exports){
- (function (process){
- var wkx = require('wkx')
- , reproject = require('reproject')
- , path = require('path')
- , fs = require('fs')
- , geojsonvt = require('geojson-vt')
- , vtpbf = require('vt-pbf')
- , Pbf = require('pbf')
- , VectorTile = require('@mapbox/vector-tile');
- var GeoPackage = require('./geoPackage')
- , GeoPackageValidate = require('./validate/geoPackageValidate')
- , GeoPackageTileRetriever = require('./tiles/retriever')
- , GeoPackageConnection = require('./db/geoPackageConnection')
- , BoundingBox = require('./boundingBox')
- , GeometryData = require('./geom/geometryData')
- , TableCreator = require('./db/tableCreator')
- , TileBoundingBoxUtils = require('./tiles/tileBoundingBoxUtils')
- , FeatureTile = require('./tiles/features')
- , FeatureTableIndex = require('./extension/index/featureTableIndex')
- , DataColumnsDao = require('./dataColumns').DataColumnsDao
- , DataColumns = require('./dataColumns').DataColumns
- , DataTypes = require('./db/dataTypes')
- , GeometryColumns = require('./features/columns').GeometryColumns
- , FeatureColumn = require('./features/user/featureColumn')
- , RelationType = require('./extension/relatedTables/relationType')
- , MediaTable = require('./extension/relatedTables/mediaTable')
- , SimpleAttributesTable = require('./extension/relatedTables/simpleAttributesTable')
- , UserColumn = require('./user/userColumn');
- /**
- * This module is the entry point to the GeoPackage API, providing static
- * methods for opening and building GeoPackage files.
- *
- * @exports api
- */
- var GeoPackageAPI = module.exports;
- /**
- * In Node, open a GeoPackage file at the given path, or in a browser, load an
- * in-memory GeoPackage from the given byte array.
- * @param {String|Uint8Array} gppathOrByteArray path to the GeoPackage file or `Uint8Array` of GeoPackage bytes
- * @param {geopackageCallback=} callback called with an `Error` if one occurred and the open `GeoPackage` object
- * @return {Promise} promise that resolves with the open {@link module:geoPackage~GeoPackage} object or rejects with an `Error`
- */
- GeoPackageAPI.open = function(gppathOrByteArray, callback) {
- return new Promise(function(resolve, reject) {
- var valid = (typeof gppathOrByteArray !== 'string') || (typeof gppathOrByteArray === 'string' &&
- (gppathOrByteArray.indexOf('http') === 0 || !GeoPackageValidate.validateGeoPackageExtension(gppathOrByteArray)));
- if (!valid) {
- reject(new Error('Invalid GeoPackage - Invalid GeoPackage Extension'));
- } else {
- resolve(gppathOrByteArray);
- }
- }).then(function() {
- return GeoPackageConnection.connect(gppathOrByteArray);
- }).then(function(connection) {
- if (gppathOrByteArray && typeof gppathOrByteArray === 'string') {
- return new GeoPackage(path.basename(gppathOrByteArray), gppathOrByteArray, connection);
- } else {
- return new GeoPackage('geopackage', undefined, connection);
- }
- })
- .then(function(geoPackage) {
- if (GeoPackageValidate.hasMinimumTables(geoPackage)) {
- return geoPackage;
- } else {
- throw new Error('Invalid GeoPackage - GeoPackage does not have the minimum required tables');
- }
- })
- .then(function(geoPackage) {
- if(callback) callback(null, geoPackage);
- return geoPackage;
- })
- .catch(function(error){
- if(callback) {
- callback(error);
- } else {
- throw error;
- }
- });
- };
- /**
- * In Node, create a GeoPackage file at the given file path, or in a browser,
- * create an in-memory GeoPackage.
- * @param {String|geopackageCallback} gppath path of the created GeoPackage file; ignored in the browser
- * @param {geopackageCallback=} callback called with an `Error` if one occurred and the open {@link module:geoPackage~GeoPackage} object
- * @return {Promise} promise that resolves with the open {@link module:geoPackage~GeoPackage} object or rejects with an `Error`
- */
- GeoPackageAPI.create = function(gppath, callback) {
- if (typeof gppath == 'function') {
- callback = gppath;
- gppath = undefined;
- }
- var valid = (typeof gppath !== 'string') || (typeof gppath === 'string' && !GeoPackageValidate.validateGeoPackageExtension(gppath));
- if (!valid) {
- if (callback) {
- return callback(new Error('Invalid GeoPackage'));
- }
- return Promise.reject(new Error('Invalid GeoPackage'));
- }
- var promise = new Promise(function(resolve, reject) {
- if (typeof(process) !== 'undefined' && process.version && gppath) {
- fs.mkdirSync(path.dirname(gppath));
- }
- resolve(gppath);
- })
- .catch(function(error) {
- // could not create directory, just move on
- })
- .then(function() {
- return GeoPackageConnection.connect(gppath);
- })
- .then(function(connection) {
- connection.setApplicationId();
- return connection;
- })
- .then(function(connection) {
- if (gppath) {
- return new GeoPackage(path.basename(gppath), gppath, connection);
- } else {
- return new GeoPackage('geopackage', undefined, connection);
- }
- })
- .then(function(geopackage) {
- return geopackage.createRequiredTables();
- })
- .then(function(geopackage) {
- return geopackage.createSupportedExtensions();
- })
- .then(function(geopackage) {
- if (callback) callback(null, geopackage);
- return geopackage;
- })
- .catch(function(error){
- if (callback) {
- callback(error);
- } else {
- throw error;
- }
- });
- return promise;
- };
- /**
- * Create the [tables and rows](https://www.geopackage.org/spec121/index.html#tiles)
- * necessary to store tiles according to the ubiquitous [XYZ web/slippy-map tiles](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames) scheme.
- * The extent for the [contents table]{@link module:core/contents~Contents} row,
- * `contentsBoundingBox`, is [informational only](https://www.geopackage.org/spec121/index.html#gpkg_contents_cols),
- * and need not match the [tile matrix set]{@link module:tiles/matrixset~TileMatrixSet}
- * extent, `tileMatrixSetBoundingBox`, which should be the precise bounding box
- * used to calculate the tile row and column coordinates of all tiles in the
- * tile set. The two SRS ID parameters, `contentsSrsId` and `tileMatrixSetSrsId`,
- * must match, however. See {@link module:tiles/matrixset~TileMatrixSet} for
- * more information about how GeoPackage consumers use the bouding boxes for a
- * tile set.
- *
- * @param {module:geoPackage~GeoPackage} geopackage the GeoPackage that will store the tiles
- * @param {string} tableName the name of the table that will store the tiles
- * @param {BoundingBox} contentsBoundingBox the bounds stored in the [`gpkg_contents`]{@link module:core/contents~Contents} table row for the tile matrix set
- * @param {SRSRef} contentsSrsId the ID of a [spatial reference system]{@link module:core/srs~SpatialReferenceSystem}; must match `tileMatrixSetSrsId`
- * @param {BoundingBox} tileMatrixSetBoundingBox the bounds stored in the [`gpkg_tile_matrix_set`]{@link module:tiles/matrixset~TileMatrixSet} table row
- * @param {SRSRef} tileMatrixSetSrsId the ID of a [spatial reference system]{@link module:core/srs~SpatialReferenceSystem}
- * for the [tile matrix set](https://www.geopackage.org/spec121/index.html#_tile_matrix_set) table; must match `contentsSrsId`
- * @param {number} minZoom the zoom level of the lowest resolution [tile matrix]{@link module:tiles/matrix~TileMatrix} in the tile matrix set
- * @param {number} maxZoom the zoom level of the highest resolution [tile matrix]{@link module:tiles/matrix~TileMatrix} in the tile matrix set
- * @param {number=} tileSize the width and height in pixels of the tile images; defaults to 256
- * @returns {Promise} a `Promise` that resolves with the created {@link module:tiles/matrixset~TileMatrixSet} object, or rejects with an `Error`
- *
- * @todo make `tileMatrixSetSrsId` optional because it always has to be the same anyway
- */
- GeoPackageAPI.createStandardWebMercatorTileTable = function(geopackage, tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId, minZoom, maxZoom, tileSize) {
- tileSize = tileSize || 256;
- return geopackage.createTileTableWithTableName(tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId)
- .then(function(tileMatrixSet) {
- geopackage.createStandardWebMercatorTileMatrix(tileMatrixSetBoundingBox, tileMatrixSet, minZoom, maxZoom, tileSize);
- return tileMatrixSet;
- });
- }
- GeoPackageAPI.createFeatureTable = function(geopackage, tableName, geometryColumn, featureColumns) {
- return GeoPackageAPI.createFeatureTableWithDataColumns(geopackage, tableName, geometryColumn, featureColumns, null);
- };
- GeoPackageAPI.createFeatureTableWithDataColumns = function(geopackage, tableName, geometryColumn, featureColumns, dataColumns) {
- var boundingBox = new BoundingBox(-180, 180, -90, 90);
- return GeoPackageAPI.createFeatureTableWithDataColumnsAndBoundingBox(geopackage, tableName, geometryColumn, featureColumns, dataColumns, boundingBox, 4326);
- };
- GeoPackageAPI.createFeatureTableWithDataColumnsAndBoundingBox = function(geopackage, tableName, geometryColumn, featureColumns, dataColumns, boundingBox, boundingBoxSrsId) {
- return geopackage.createFeatureTableWithGeometryColumnsAndDataColumns(geometryColumn, boundingBox, boundingBoxSrsId, featureColumns, dataColumns)
- .then(function() {
- return geopackage.getFeatureDao(tableName);
- });
- };
- /**
- * Create a feature table with the properties specified.
- * @param {module:geoPackage~GeoPackage} geopackage the geopackage object
- * @param {Object[]} properties properties to create columns from
- * @param {string} properties.name name of the column
- * @param {string} properties.dataType name of the data type
- * @return {Promise}
- */
- GeoPackageAPI.createFeatureTableWithProperties = function(geopackage, tableName, properties) {
- var geometryColumns = new GeometryColumns();
- geometryColumns.table_name = tableName;
- geometryColumns.column_name = 'geometry';
- geometryColumns.geometry_type_name = 'GEOMETRY';
- geometryColumns.z = 0;
- geometryColumns.m = 0;
- var boundingBox = new BoundingBox(-180, 180, -80, 80);
- var columns = [];
- var columnNumber = 0;
- columns.push(FeatureColumn.createPrimaryKeyColumnWithIndexAndName(columnNumber++, 'id'));
- columns.push(FeatureColumn.createGeometryColumn(columnNumber++, 'geometry', 'GEOMETRY', false, null));
- for (var i = 0; i < properties.length; i++) {
- var property = properties[i];
- columns.push(FeatureColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType)));
- }
- return geopackage.createFeatureTableWithGeometryColumns(geometryColumns, boundingBox, 4326, columns);
- };
- /**
- * Create a feature table with the properties specified.
- * @param {module:geoPackage~GeoPackage} geopackage the geopackage object
- * @param {Object[]} properties properties to create columns from
- * @param {string} properties.name name of the column
- * @param {string} properties.dataType name of the data type
- * @return {Promise}
- */
- GeoPackageAPI.createAttributeTableWithProperties = function(geopackage, tableName, properties) {
- var columns = [];
- var columnNumber = 0;
- columns.push(UserColumn.createPrimaryKeyColumnWithIndexAndName(columnNumber++, 'id'));
- var dataColumns = [];
- for (var i = 0; i < properties.length; i++) {
- var property = properties[i];
- columns.push(UserColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType)));
- if (property.dataColumn) {
- var dc = new DataColumns();
- dc.table_name = property.dataColumn.table_name;
- dc.column_name = property.dataColumn.column_name;
- dc.name = property.dataColumn.name;
- dc.title = property.dataColumn.title;
- dc.description = property.dataColumn.description;
- dc.mime_type = property.dataColumn.mime_type;
- dc.constraint_name = property.dataColumn.constraint_name;
- dataColumns.push(dc);
- }
- }
- return geopackage.createAttributeTable(tableName, columns, dataColumns.length ? dataColumns : undefined);
- };
- GeoPackageAPI.addAttributeRow = function(geopackage, tableName, row) {
- var attributeDao = geopackage.getAttributeDaoWithTableName(tableName);
- var attributeRow = attributeDao.newRow(row);
- return attributeDao.create(attributeRow);
- }
- /**
- * Create a simple attributes table with the properties specified.
- * @param {module:geoPackage~GeoPackage} geopackage the geopackage object
- * @param {Object[]} properties properties to create columns from
- * @param {string} properties.name name of the column
- * @param {string} properties.dataType name of the data type
- * @return {Promise}
- */
- GeoPackageAPI.createSimpleAttributesTableWithProperties = function(geopackage, tableName, properties) {
- var relatedTables = geopackage.getRelatedTablesExtension();
- var columns = [];
- var columnNumber = SimpleAttributesTable.numRequiredColumns();
- if (properties) {
- for (var i = 0; i < properties.length; i++) {
- var property = properties[i];
- columns.push(UserColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType), true));
- }
- }
- var simpleAttributesTable = SimpleAttributesTable.create(tableName, columns);
- relatedTables.createRelatedTable(simpleAttributesTable);
- return relatedTables.getSimpleAttributesDao(simpleAttributesTable);
- };
- /**
- * Create a media table with the properties specified. These properties are added to the required columns
- * @param {module:geoPackage~GeoPackage} geopackage the geopackage object
- * @param {Object[]} properties properties to create columns from
- * @param {string} properties.name name of the column
- * @param {string} properties.dataType name of the data type
- * @return {Promise}
- */
- GeoPackageAPI.createMediaTableWithProperties = function(geopackage, tableName, properties) {
- var relatedTables = geopackage.getRelatedTablesExtension();
- var columns = [];
- var columnNumber = MediaTable.numRequiredColumns();
- if (properties) {
- for (var i = 0; i < properties.length; i++) {
- var property = properties[i];
- columns.push(UserColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType)));
- }
- }
- var mediaTable = MediaTable.create(tableName, columns)
- relatedTables.createRelatedTable(mediaTable);
- return relatedTables.getMediaDao(mediaTable);
- };
- GeoPackageAPI.addMedia = function(geopackage, tableName, dataBuffer, contentType, additionalProperties) {
- var relatedTables = geopackage.getRelatedTablesExtension();
- var mediaDao = relatedTables.getMediaDao(tableName);
- var row = mediaDao.newRow();
- row.setContentType(contentType);
- row.setData(dataBuffer);
- for (var key in additionalProperties) {
- row.setValueWithColumnName(key, additionalProperties[key]);
- }
- return mediaDao.create(row);
- }
- GeoPackageAPI.linkMedia = function(geopackage, baseTableName, baseId, mediaTableName, mediaId) {
- var relatedTables = geopackage.getRelatedTablesExtension();
- return relatedTables.linkRelatedIds(baseTableName, baseId, mediaTableName, mediaId, RelationType.MEDIA);
- }
- GeoPackageAPI.getLinkedMedia = function(geopackage, baseTableName, baseId) {
- var relationships = GeoPackageAPI.getRelatedRows(geopackage, baseTableName, baseId);
- var mediaRelationships = [];
- for (var i = 0; i < relationships.length; i++) {
- var relationship = relationships[i];
- if (relationship.relation_name === RelationType.MEDIA.name) {
- for (var r = 0; r < relationship.mappingRows.length; r++) {
- var row = relationship.mappingRows[r].row;
- mediaRelationships.push(row);
- }
- }
- }
- return mediaRelationships;
- }
- GeoPackageAPI.getRelatedRows = function(geopackage, baseTableName, baseId) {
- return geopackage.getRelatedTablesExtension().getRelatedRows(baseTableName, baseId);
- }
- /**
- * Adds a GeoJSON feature to the GeoPackage
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {object} feature GeoJSON feature to add
- * @param {String} tableName name of the table that will store the feature
- */
- GeoPackageAPI.addGeoJSONFeatureToGeoPackage = function(geopackage, feature, tableName) {
- var featureDao = geopackage.getFeatureDao(tableName);
- var srs = featureDao.getSrs();
- var featureRow = featureDao.newRow();
- var geometryData = new GeometryData();
- geometryData.setSrsId(srs.srs_id);
- var srs = featureDao.getSrs();
- if (!(srs.organization === 'EPSG' && srs.organization_coordsys_id === 4326)) {
- feature = reproject.reproject(feature, 'EPSG:4326', featureDao.projection);
- }
- var featureGeometry = typeof feature.geometry === 'string' ? JSON.parse(feature.geometry) : feature.geometry;
- var geometry = wkx.Geometry.parseGeoJSON(featureGeometry);
- geometryData.setGeometry(geometry);
- featureRow.setGeometry(geometryData);
- for (var propertyKey in feature.properties) {
- if (feature.properties.hasOwnProperty(propertyKey)) {
- featureRow.setValueWithColumnName(propertyKey, feature.properties[propertyKey]);
- }
- }
- return featureDao.create(featureRow);
- };
- /**
- * Adds a GeoJSON feature to the GeoPackage and updates the FeatureTableIndex extension if it exists
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {object} feature GeoJSON feature to add
- * @param {String} tableName name of the table that will store the feature
- */
- GeoPackageAPI.addGeoJSONFeatureToGeoPackageAndIndex = function(geopackage, feature, tableName) {
- var featureDao = geopackage.getFeatureDao(tableName);
- if (!featureDao) throw new Error('No feature Dao for table ', + tableName);
- var srs = featureDao.getSrs();
- var featureRow = featureDao.newRow();
- var geometryData = new GeometryData();
- geometryData.setSrsId(srs.srs_id);
- var reprojectedFeature = reproject.reproject(feature, 'EPSG:4326', featureDao.projection);
- var featureGeometry = typeof reprojectedFeature.geometry === 'string' ? JSON.parse(reprojectedFeature.geometry) : reprojectedFeature.geometry;
- var geometry = wkx.Geometry.parseGeoJSON(featureGeometry);
- geometryData.setGeometry(geometry);
- featureRow.setGeometry(geometryData);
- for (var propertyKey in feature.properties) {
- if (feature.properties.hasOwnProperty(propertyKey)) {
- featureRow.setValueWithColumnName(propertyKey, feature.properties[propertyKey]);
- }
- }
- var id = featureDao.create(featureRow);
- var fti = featureDao.featureTableIndex;
- var tableIndex = fti.getTableIndex();
- if (!tableIndex) return id;
- fti.indexRow(tableIndex, id, geometryData);
- fti.updateLastIndexed(tableIndex);
- return id;
- };
- /**
- * Queries for GeoJSON features in a feature tables
- * @param {String} geoPackagePath path to the GeoPackage file
- * @param {String} tableName Table name to query
- * @param {BoundingBox} boundingBox BoundingBox to query
- * @param {Function} callback Caled with err, featureArray
- */
- GeoPackageAPI.queryForGeoJSONFeaturesInTableFromPath = function(geoPackagePath, tableName, boundingBox) {
- return GeoPackageAPI.open(geoPackagePath)
- .then(function(geoPackage) {
- var features = geoPackage.queryForGeoJSONFeaturesInTable(tableName, boundingBox);
- geoPackage.close();
- return features;
- });
- }
- /**
- * Queries for GeoJSON features in a feature tables
- * @param {module:geoPackage~GeoPackage} geoPackage open GeoPackage object
- * @param {String} tableName Table name to query
- * @param {BoundingBox} boundingBox BoundingBox to query
- * @param {Function} callback Caled with err, featureArray
- */
- GeoPackageAPI.queryForGeoJSONFeaturesInTable = function(geoPackage, tableName, boundingBox) {
- return geoPackage.queryForGeoJSONFeaturesInTable(tableName, boundingBox);
- }
- /**
- * Iterates GeoJSON features in a feature table that matches the bounding box
- * @param {module:geoPackage~GeoPackage} geoPackage open GeoPackage object
- * @param {String} tableName Table name to query
- * @param {BoundingBox} boundingBox BoundingBox to query
- * @param {Function} rowCallback Caled with err, and GeoJSON feature
- * @param {Function} doneCallback Caled with err if one occurred
- */
- GeoPackageAPI.iterateGeoJSONFeaturesInTableWithinBoundingBox = function(geoPackage, tableName, boundingBox) {
- return geoPackage.iterateGeoJSONFeaturesInTableWithinBoundingBox(tableName, boundingBox);
- }
- /**
- * Iterates GeoJSON features in a feature table that matches the bounding box
- * @param {String} geoPackagePath path to the GeoPackage file
- * @param {String} tableName Table name to query
- * @param {BoundingBox} boundingBox BoundingBox to query
- * @param {Function} rowCallback Caled with err, and GeoJSON feature
- * @param {Function} doneCallback Caled with err if one occurred
- */
- GeoPackageAPI.iterateGeoJSONFeaturesFromPathInTableWithinBoundingBox = function(geoPackagePath, tableName, boundingBox) {
- return GeoPackageAPI.open(geoPackagePath)
- .then(function(geoPackage) {
- return geoPackage.iterateGeoJSONFeaturesInTableWithinBoundingBox(tableName, boundingBox);
- });
- }
- GeoPackageAPI.createDataColumnMap = function(featureDao) {
- var columnMap = {};
- var dcd = new DataColumnsDao(featureDao.geoPackage);
- featureDao.table.columns.forEach(function(column) {
- var dataColumn = dcd.getDataColumns(featureDao.table.table_name, column.name);
- columnMap[column.name] = {
- index: column.index,
- name: column.name,
- max: column.max,
- min: column.min,
- notNull: column.notNull,
- primaryKey: column.primaryKey,
- dataType: column.dataType ? DataTypes.name(column.dataType) : '',
- displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name,
- dataColumn: dataColumn
- };
- }.bind(this));
- return columnMap;
- }
- /**
- * Iterate GeoJSON features from table
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table Table name to Iterate
- * @return {Iterator<module:user/feature/featureRow~FeatureRow>}
- */
- GeoPackageAPI.iterateGeoJSONFeaturesFromTable = function(geopackage, table) {
- var featureDao = geopackage.getFeatureDao(table);
- if (!featureDao) {
- throw new Error('No Table exists with the name ' + table);
- }
- var columnMap = GeoPackageAPI.createDataColumnMap(featureDao);
- var srs = featureDao.getSrs();
- var iterator = featureDao.queryForEach();
- return {
- srs: srs,
- featureDao: featureDao,
- results: {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- var featureRow;
- var geometry;
- while(!nextRow.done && !geometry) {
- featureRow = featureDao.getRow(nextRow.value);
- return {
- value: GeoPackageAPI.parseFeatureRowIntoGeoJSON(featureRow, srs, columnMap),
- done: false
- };
- }
- }
- return {
- done: true
- }
- }.bind(this)
- }
- };
- };
- /**
- * Gets a GeoJSON feature from the table by id
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table name of the table to get the feature from
- * @param {Number} featureId ID of the feature
- * @param {Function} callback called with an error if one occurred and the GeoJSON feature
- */
- GeoPackageAPI.getFeature = function(geopackage, table, featureId) {
- var srs;
- var featureDao = geopackage.getFeatureDao(table)
- srs = featureDao.getSrs();
- var feature = featureDao.queryForId(featureId);
- if (!feature) {
- var features = featureDao.queryForAllEq('_feature_id', featureId)
- if (features.length) {
- feature = featureDao.getRow(features[0]);
- } else {
- var features = featureDao.queryForAllEq('_properties_id', featureId)
- if (features.length) {
- feature = featureDao.getRow(features[0]);
- }
- }
- }
- if (feature) {
- return GeoPackageAPI.parseFeatureRowIntoGeoJSON(feature, srs);
- }
- };
- GeoPackageAPI.parseFeatureRowIntoGeoJSON = function(featureRow, srs, columnMap) {
- var geoJson = {
- type: 'Feature',
- properties: {}
- };
- var geometry = featureRow.getGeometry();
- if (geometry && geometry.geometry) {
- var geom = geometry.geometry;
- var geoJsonGeom = geometry.geometry.toGeoJSON();
- if (srs.definition && srs.definition !== 'undefined' && (srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id) != 'EPSG:4326') {
- // geoJsonGeom = reproject.reproject(geoJsonGeom, srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id, 'EPSG:4326');
- geoJsonGeom = reproject.reproject(geoJsonGeom, srs.getProjection(), 'EPSG:4326');
- }
- geoJson.geometry = geoJsonGeom;
- }
- for (var key in featureRow.values) {
- if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') {
- if (key.toLowerCase() == '_feature_id') {
- geoJson.id = featureRow.values[key];
- } else if (key.toLowerCase() == '_properties_id') {
- geoJson.properties[key.substring(12)] = featureRow.values[key];
- } else if (columnMap && columnMap[key]) {
- geoJson.properties[columnMap[key].displayName] = featureRow.values[key];
- } else {
- geoJson.properties[key] = featureRow.values[key];
- }
- } else if (featureRow.getGeometryColumn().name === key) {
- // geoJson.properties[key] = geometry && !geometry.geometryError ? 'Valid' : geometry.geometryError;
- }
- }
- geoJson.id = geoJson.id || featureRow.getId();
- return geoJson;
- }
- /**
- * Gets a tile from the specified table
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table name of the table to get the tile from
- * @param {Number} zoom zoom level of the tile
- * @param {Number} tileRow row of the tile
- * @param {Number} tileColumn column of the tile
- *
- * @todo jsdoc return value
- */
- GeoPackageAPI.getTileFromTable = function(geopackage, table, zoom, tileRow, tileColumn) {
- var tileDao = geopackage.getTileDao(table);
- return tileDao.queryForTile(tileColumn, tileRow, zoom);
- };
- /**
- * Gets the tiles in the EPSG:4326 bounding box
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table name of the tile table
- * @param {Number} zoom Zoom of the tiles to query for
- * @param {Number} west EPSG:4326 western boundary
- * @param {Number} east EPSG:4326 eastern boundary
- * @param {Number} south EPSG:4326 southern boundary
- * @param {Number} north EPSG:4326 northern boundary
- * @param {Function} callback called with an error if one occurred and a tiles object describing the tiles
- */
- GeoPackageAPI.getTilesInBoundingBox = function(geopackage, table, zoom, west, east, south, north) {
- var tiles = {};
- var tileDao = geopackage.getTileDao(table);
- if (zoom < tileDao.minZoom || zoom > tileDao.maxZoom) {
- return
- }
- tiles.columns = [];
- for (var i = 0; i < tileDao.table.columns.length; i++) {
- var column = tileDao.table.columns[i];
- tiles.columns.push({
- index: column.index,
- name: column.name,
- max: column.max,
- min: column.min,
- notNull: column.notNull,
- primaryKey: column.primaryKey
- });
- }
- var srs = tileDao.getSrs();
- tiles.srs = srs;
- tiles.tiles = [];
- var tms = tileDao.tileMatrixSet;
- var tm = tileDao.getTileMatrixWithZoomLevel(zoom);
- if (!tm) {
- return tiles;
- }
- var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north);
- tiles.west = Math.max(-180, west).toFixed(2);
- tiles.east = Math.min(east, 180).toFixed(2);
- tiles.south = south.toFixed(2);
- tiles.north = north.toFixed(2);
- tiles.zoom = zoom;
- mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id);
- var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox);
- var iterator = tileDao.queryByTileGrid(grid, zoom);
- for (var row of iterator ) {
- var tile = {};
- tile.tableName = table;
- tile.id = row.getId();
- var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow());
- tile.minLongitude = tileBB.minLongitude;
- tile.maxLongitude = tileBB.maxLongitude;
- tile.minLatitude = tileBB.minLatitude;
- tile.maxLatitude = tileBB.maxLatitude;
- tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id;
- tile.values = [];
- for (var i = 0; i < tiles.columns.length; i++) {
- var value = row.values[tiles.columns[i].name];
- if (tiles.columns[i].name === 'tile_data') {
- tile.values.push('data');
- } else
- if (value === null || value === 'null') {
- tile.values.push('');
- } else {
- tile.values.push(value.toString());
- tile[tiles.columns[i].name] = value;
- }
- }
- tiles.tiles.push(tile);
- }
- return tiles;
- };
- /**
- * Gets the tiles in the EPSG:4326 bounding box
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table name of the tile table
- * @param {Number} zoom Zoom of the tiles to query for
- * @param {Number} west EPSG:4326 western boundary
- * @param {Number} east EPSG:4326 eastern boundary
- * @param {Number} south EPSG:4326 southern boundary
- * @param {Number} north EPSG:4326 northern boundary
- * @param {Function} callback called with an error if one occurred and a tiles object describing the tiles
- */
- GeoPackageAPI.getTilesInBoundingBoxWebZoom = function(geopackage, table, webZoom, west, east, south, north) {
- var tiles = {};
- var tileDao = geopackage.getTileDao(table);
- if (webZoom < tileDao.minWebZoom || webZoom > tileDao.maxWebZoom) {
- return;
- }
- tiles.columns = [];
- for (var i = 0; i < tileDao.table.columns.length; i++) {
- var column = tileDao.table.columns[i];
- tiles.columns.push({
- index: column.index,
- name: column.name,
- max: column.max,
- min: column.min,
- notNull: column.notNull,
- primaryKey: column.primaryKey
- });
- }
- var srs = tileDao.getSrs();
- tiles.srs = srs;
- tiles.tiles = [];
- var zoom = tileDao.webZoomToGeoPackageZoom(webZoom);
- var tms = tileDao.tileMatrixSet;
- var tm = tileDao.getTileMatrixWithZoomLevel(zoom);
- if (!tm) {
- return tiles;
- }
- var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north);
- tiles.west = Math.max(-180, west).toFixed(2);
- tiles.east = Math.min(east, 180).toFixed(2);
- tiles.south = south.toFixed(2);
- tiles.north = north.toFixed(2);
- tiles.zoom = zoom;
- mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id);
- var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox);
- var iterator = tileDao.queryByTileGrid(grid, zoom);
- for (var row of iterator) {
- var tile = {};
- tile.tableName = table;
- tile.id = row.getId();
- var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow());
- tile.minLongitude = tileBB.minLongitude;
- tile.maxLongitude = tileBB.maxLongitude;
- tile.minLatitude = tileBB.minLatitude;
- tile.maxLatitude = tileBB.maxLatitude;
- tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id;
- tile.values = [];
- for (var i = 0; i < tiles.columns.length; i++) {
- var value = row.values[tiles.columns[i].name];
- if (tiles.columns[i].name === 'tile_data') {
- tile.values.push('data');
- } else
- if (value === null || value === 'null') {
- tile.values.push('');
- } else {
- tile.values.push(value.toString());
- tile[tiles.columns[i].name] = value;
- }
- }
- tiles.tiles.push(tile);
- }
- return tiles;
- };
- GeoPackageAPI.getFeatureTileFromXYZ = function(geopackage, table, x, y, z, width, height) {
- x = Number(x);
- y = Number(y);
- z = Number(z);
- width = Number(width);
- height = Number(height);
- var featureDao = geopackage.getFeatureDao(table)
- if (!featureDao) return;
- var ft = new FeatureTile(featureDao, width, height);
- return ft.drawTile(x, y, z);
- }
- /**
- * Gets the features in the EPSG:4326 bounding box
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table name of the feature table
- * @param {Number} west EPSG:4326 western boundary
- * @param {Number} east EPSG:4326 eastern boundary
- * @param {Number} south EPSG:4326 southern boundary
- * @param {Number} north EPSG:4326 northern boundary
- */
- GeoPackageAPI.getGeoJSONFeaturesInTile = function(geopackage, table, x, y, z, skipVerification) {
- var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z);
- var bb = webMercatorBoundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326');
- return geopackage.indexFeatureTable(table)
- .then(function(indexed) {
- return geopackage.getFeatureDao(table);
- })
- .then(function(featureDao) {
- if (!featureDao) return;
- var features = [];
- var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(bb, skipVerification);
- for (var feature of iterator) {
- features.push(feature);
- }
- return features;
- })
- .catch(function(error) {
- console.log('error', error);
- });
- }
- GeoPackageAPI.convertPBFToVectorTile = function(pbf) {
- return new VectorTile.VectorTile(new Pbf(pbf));
- }
- /**
- * Gets a mapbox VectorTile for the x y z web mercator tile specified
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table table name
- * @param {Number} x x tile
- * @param {Number} y y tile
- * @param {Number} z web zoom
- * @return {VectorTile}
- */
- GeoPackageAPI.getVectorTile = function(geopackage, table, x, y, z) {
- return GeoPackageAPI.getVectorTileProtobuf(geopackage, table, x, y, z)
- .then(function(pbf) {
- return new VectorTile.VectorTile(new Pbf(pbf));
- });
- }
- /**
- * Gets a protobuf for the x y z web mercator tile specified
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table table name
- * @param {Number} x x tile
- * @param {Number} y y tile
- * @param {Number} z web zoom
- * @return {Protobuf}
- */
- GeoPackageAPI.getVectorTileProtobuf = function(geopackage, table, x, y, z) {
- return GeoPackageAPI.getGeoJSONFeaturesInTile(geopackage, table, x, y, z, true)
- .then(function(features) {
- var featureCollection = {
- type: 'FeatureCollection',
- features: features
- };
- var tileBuffer = 8;
- var tileIndex = geojsonvt(featureCollection, {buffer: tileBuffer * 8, maxZoom: z});
- var layer = {};
- var tile = tileIndex.getTile(z, x, y);
- var gjvt = {};
- if (tile) {
- gjvt[table] = tile;
- } else {
- gjvt[table] = {features:[]};
- }
- return vtpbf.fromGeojsonVt(gjvt);
- });
- }
- /**
- * Gets the features in the EPSG:4326 bounding box
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table name of the feature table
- * @param {Number} west EPSG:4326 western boundary
- * @param {Number} east EPSG:4326 eastern boundary
- * @param {Number} south EPSG:4326 southern boundary
- * @param {Number} north EPSG:4326 northern boundary
- */
- GeoPackageAPI.getFeaturesInBoundingBox = function(geopackage, table, west, east, south, north) {
- return geopackage.indexFeatureTable(table)
- .then(function(indexed) {
- var featureDao = geopackage.getFeatureDao(table);
- if (!featureDao) throw new Error('Unable to find table ' + table);
- var features = [];
- var bb = new BoundingBox(west, east, south, north);
- var iterator = featureDao.queryIndexedFeaturesWithBoundingBox(bb);
- return iterator;
- });
- }
- /**
- * Gets a tile image for an XYZ tile pyramid location
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table name of the table containing the tiles
- * @param {Number} x x index of the tile
- * @param {Number} y y index of the tile
- * @param {Number} z zoom level of the tile
- * @param {Number} width width of the resulting tile
- * @param {Number} height height of the resulting tile
- * @return {Promise}
- */
- GeoPackageAPI.getTileFromXYZ = function(geopackage, table, x, y, z, width, height) {
- x = Number(x);
- y = Number(y);
- z = Number(z);
- width = Number(width);
- height = Number(height);
- var tileDao = geopackage.getTileDao(table);
- var retriever = new GeoPackageTileRetriever(tileDao, width, height);
- return retriever.getTile(x, y, z);
- };
- /**
- * Draws an XYZ tile pyramid location into the provided canvas
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table name of the table containing the tiles
- * @param {Number} x x index of the tile
- * @param {Number} y y index of the tile
- * @param {Number} z zoom level of the tile
- * @param {Number} width width of the resulting tile
- * @param {Number} height height of the resulting tile
- * @param {Canvas} canvas canvas element to draw the tile into
- */
- GeoPackageAPI.drawXYZTileInCanvas = function(geopackage, table, x, y, z, width, height, canvas) {
- x = Number(x);
- y = Number(y);
- z = Number(z);
- width = Number(width);
- height = Number(height);
- var tileDao = geopackage.getTileDao(table)
- var retriever = new GeoPackageTileRetriever(tileDao, width, height);
- return retriever.drawTileIn(x, y, z, canvas);
- };
- /**
- * Draws a tile specified by the bounds in EPSG:4326 into the canvas
- * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object
- * @param {String} table name of the table containing the tiles
- * @param {Number} minLat minimum latitude bounds of tile
- * @param {Number} minLon minimum longitude bounds of tile
- * @param {Number} maxLat maximum latitude bounds of tile
- * @param {Number} maxLon maximum longitude bounds of tile
- * @param {Number} z zoom level of the tile
- * @param {Number} width width of the resulting tile
- * @param {Number} height height of the resulting tile
- * @param {Canvas} canvas canvas element to draw the tile into
- */
- GeoPackageAPI.draw4326TileInCanvas = function(geopackage, table, minLat, minLon, maxLat, maxLon, z, width, height, canvas) {
- z = Number(z);
- width = Number(width);
- height = Number(height);
- var tileDao = geopackage.getTileDao(table);
- var retriever = new GeoPackageTileRetriever(tileDao, width, height);
- var bounds = new BoundingBox(minLon, maxLon, minLat, maxLat);
- return retriever.drawTileWithWgs84BoundsInProjection(bounds, z, 'EPSG:4326', canvas);
- }
- ///////////////////
- // JSDoc Globals //
- ///////////////////
- /**
- * @callback geopackageCallback
- * @param {?Error} error
- * @param {module:geoPackage~GeoPackage=} geopackage a GeoPackage instance
- */
- /**
- * An integer database key referencing a {@link module:core/srs~SpatialReferenceSystem} row in a GeoPackage database
- * @typedef {number} SRSRef
- * @see https://www.geopackage.org/spec121/index.html#spatial_ref_sys
- */
- }).call(this,require('_process'))
- },{"./boundingBox":7,"./dataColumns":13,"./db/dataTypes":14,"./db/geoPackageConnection":15,"./db/tableCreator":19,"./extension/index/featureTableIndex":26,"./extension/relatedTables/mediaTable":35,"./extension/relatedTables/relationType":36,"./extension/relatedTables/simpleAttributesTable":39,"./features/columns":64,"./features/user/featureColumn":65,"./geoPackage":70,"./geom/geometryData":73,"./tiles/features":87,"./tiles/retriever":92,"./tiles/tileBoundingBoxUtils":93,"./user/userColumn":105,"./validate/geoPackageValidate":110,"@mapbox/vector-tile":113,"_process":284,"fs":177,"geojson-vt":226,"path":276,"pbf":277,"reproject":315,"vt-pbf":345,"wkx":360}],3:[function(require,module,exports){
- /**
- * @module attributes/attributeDao
- */
- var UserDao = require('../user/userDao')
- , AttributeRow = require('./attributeRow');
- var util = require('util');
- /**
- * Attribute DAO for reading attribute user data tables
- * @class AttributeDao
- * @extends {module:user/userDao~UserDao}
- * @param {module:geoPackage~GeoPackage} geopackage geopackage object
- * @param {module:attributes/attributeTable~AttributeTable} table attribute table
- */
- var AttributeDao = function(geoPackage, table) {
- UserDao.call(this, geoPackage, table);
- if (!table.contents) {
- throw new Error('Attributes table has null Contents');
- }
- /**
- * Contents of this AttributeDao
- * @member {module:core/contents~Contents}
- */
- this.contents = table.contents;
- }
- util.inherits(AttributeDao, UserDao);
- /**
- * Create a new attribute row with the column types and values
- * @param {Array} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @return {moule:attributes/attributeRow~AttributeRow} attribute row
- */
- AttributeDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new AttributeRow(this.table, columnTypes, values);
- };
- /**
- * Create a new attribute row
- * @return {module:attributes/attributeRow~AttributeRow} attribute row
- */
- AttributeDao.prototype.newRow = function () {
- return new AttributeRow(this.table);
- };
- module.exports = AttributeDao;
- },{"../user/userDao":106,"./attributeRow":4,"util":343}],4:[function(require,module,exports){
- /**
- * AttributeRow module.
- * @module attributes/attributeRow
- */
- var UserRow = require('../user/userRow');
- var util = require('util');
- /**
- * Attribute Row containing the values from a single result set row
- * @class AttributeRow
- * @extends module:user/userRow~UserRow
- * @param {module:attributes/attributeTable~AttributeTable} attributeTable attribute table
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- */
- var AttributeRow = function(attributeTable, columnTypes, values) {
- UserRow.call(this, attributeTable, columnTypes, values);
- }
- util.inherits(AttributeRow, UserRow);
- module.exports = AttributeRow;
- },{"../user/userRow":107,"util":343}],5:[function(require,module,exports){
- /**
- * @module attributes/attributeTable
- */
- var UserTable = require('../user/userTable')
- , ContentsDao = require('../core/contents').ContentsDao;
- var util = require('util');
- /**
- * Represents a user attribute table
- * @class AttributeTable
- * @extends {module:user/userTable~UserTable}
- * @constructor
- * @param {string} tableName table name
- * @param {module:user/userColumn~UserColumn[]} columns attribute columns
- */
- var AttributeTable = function(tableName, columns) {
- /**
- * Contents of this AttributeTable
- * @member {module:core/contents~Contents}
- */
- this.contents;
- UserTable.call(this, tableName, columns);
- }
- util.inherits(AttributeTable, UserTable);
- /**
- * Set the contents
- * @param {module:core/contents~Contents} contents the contents
- */
- AttributeTable.prototype.setContents = function(contents) {
- this.contents = contents;
- if (contents.data_type !== ContentsDao.GPKG_CDT_ATTRIBUTES_NAME) {
- throw new Error('The Contents of an Attributes Table must have a data type of ' + ContentsDao.GPKG_CDT_ATTRIBUTES_NAME);
- }
- }
- module.exports = AttributeTable;
- },{"../core/contents":8,"../user/userTable":108,"util":343}],6:[function(require,module,exports){
- /**
- * attributeTableReader module.
- * @module attributes/attributeTableReader
- */
- var UserTableReader = require('../user/userTableReader')
- , AttributeTable = require('./attributeTable')
- , DataTypes = require('../db/dataTypes');
- var util = require('util');
- /**
- * Reads the metadata from an existing attribute table
- * @class AttributeTableReader
- * @extends {module:user/userTableReader~UserTableReader}
- * @classdesc Reads the metadata from an existing attributes table
- */
- var AttributeTableReader = function(tableName) {
- UserTableReader.call(this, tableName);
- }
- util.inherits(AttributeTableReader, UserTableReader);
- /**
- * @inheritdoc
- */
- AttributeTableReader.prototype.createTable = function (tableName, columns) {
- return new AttributeTable(tableName, columns);
- };
- module.exports = AttributeTableReader;
- },{"../db/dataTypes":14,"../user/userTableReader":109,"./attributeTable":5,"util":343}],7:[function(require,module,exports){
- var proj4 = require('proj4');
- proj4 = 'default' in proj4 ? proj4['default'] : proj4;
- /**
- * Create a new bounding box
- * @class BoundingBox
- * @param {Number} minLongitudeOrBoundingBox minimum longitude or bounding box to copy (west)
- * @param {Number} maxLongitude maximum longitude (east)
- * @param {Number} minLatitude Minimum latitude (south)
- * @param {Number} maxLatitude Maximum latitude (north)
- * @return {BoundingBox} newly constructed bounding box
- */
- var BoundingBox = function(minLongitudeOrBoundingBox, maxLongitude, minLatitude, maxLatitude) {
- // if there is a second argument the first argument is the minLongitude
- if (maxLongitude !== undefined) {
- this.minLongitude = minLongitudeOrBoundingBox;
- this.maxLongitude = maxLongitude;
- this.minLatitude = minLatitude;
- this.maxLatitude = maxLatitude;
- } else {
- var boundingBox = minLongitudeOrBoundingBox;
- this.minLongitude = boundingBox.minLongitude;
- this.maxLongitude = boundingBox.maxLongitude;
- this.minLatitude = boundingBox.minLatitude;
- this.maxLatitude = boundingBox.maxLatitude;
- }
- }
- module.exports = BoundingBox;
- /**
- * Build a Geometry Envelope from the bounding box
- *
- * @return geometry envelope
- */
- BoundingBox.prototype.buildEnvelope = function () {
- return {
- minY: this.minLatitude,
- minX: this.minLongitude,
- maxY: this.maxLatitude,
- maxX: this.maxLongitude
- };
- };
- BoundingBox.prototype.toGeoJSON = function() {
- return {
- "type": "Feature",
- "properties": {},
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [this.minLongitude,this.minLatitude],
- [this.maxLongitude,this.minLatitude],
- [this.maxLongitude,this.maxLatitude],
- [this.minLongitude,this.maxLatitude],
- [this.minLongitude,this.minLatitude]
- ]
- ]
- }
- };
- }
- /**
- * Determine if equal to the provided bounding box
- * @param {BoundingBox} boundingBox bounding boundingBox
- * @return {Boolean} true if equal, false if not
- */
- BoundingBox.prototype.equals = function (boundingBox) {
- if (!boundingBox) {
- return false;
- }
- if (this === boundingBox) {
- return true;
- }
- return this.maxLatitude === boundingBox.maxLatitude
- && this.minLatitude === boundingBox.minLatitude
- && this.maxLongitude === boundingBox.maxLongitude
- && this.maxLatitude === boundingBox.maxLatitude;
- };
- BoundingBox.prototype.projectBoundingBox = function (from, to) {
- if (from && from !== 'undefined' && to && to !== 'undefined') {
- var toProj = to.toUpperCase ? proj4(to) : to;
- var fromProj = from.toUpperCase ? proj4(from) : from;
- if (to.toUpperCase && to.toUpperCase() === 'EPSG:3857' && from.toUpperCase && from.toUpperCase() === 'EPSG:4326') {
- this.maxLatitude = this.maxLatitude > 85.0511 ? 85.0511 : this.maxLatitude;
- this.minLatitude = this.minLatitude < -85.0511 ? -85.0511 : this.minLatitude;
- this.minLongitude = this.minLongitude < -180.0 ? -180.0 : this.minLongitude;
- this.maxLongitude = this.maxLongitude > 180.0 ? 180.0 : this.maxLongitude;
- }
- var min = proj4(from, to, [this.minLongitude, this.minLatitude]);
- var max = proj4(from, to, [this.maxLongitude, this.maxLatitude]);
- var projected = new BoundingBox(min[0], max[0], min[1], max[1]);
- return projected;
- } else {
- return this;
- }
- };
- // /**
- // * Get a Map Rectangle representing the bounding box
- // *
- // * @return map rectangle
- // */
- // -(MKMapRect) getMapRect;
- //
- // /**
- // * Get a Coordinate Region of the bounding box
- // *
- // * @return Coordinate Region
- // */
- // -(MKCoordinateRegion) getCoordinateRegion;
- //
- // /**
- // * Get the Span of the bounding box
- // *
- // * @return Span
- // */
- // -(MKCoordinateSpan) getSpan;
- //
- // /**
- // * Get the center of the bounding box
- // *
- // * @return center location
- // */
- // -(CLLocationCoordinate2D) getCenter;
- //
- // /**
- // * Get with width and height of the bounding box in meters
- // *
- // * @return bounding box size
- // */
- // -(struct GPKGBoundingBoxSize) sizeInMeters;
- },{"proj4":285}],8:[function(require,module,exports){
- /**
- * Contents module.
- * @module core/contents
- */
- var Dao = require('../../dao/dao')
- , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao
- , SpatialReferenceSystemDao = require('../srs').SpatialReferenceSystemDao
- , TileMatrixDao = require('../../tiles/matrix').TileMatrixDao
- , TileMatrixSetDao = require('../../tiles/matrixset').TileMatrixSetDao
- , ColumnValues = require('../../dao/columnValues');
- var util = require('util');
- /**
- * The Contents class models rows in the [`gpkg_contents`](https://www.geopackage.org/spec121/index.html#_contents)
- * table. The contents table stores identifying and descriptive information
- * that an application can display to a user in a menu of geospatial data
- * available in a GeoPackage.
- * @class Contents
- * @see https://www.geopackage.org/spec121/index.html#_contents
- */
- var Contents = function() {
- /**
- * the name of the tiles, or feature table
- * @member {string}
- */
- this.table_name;
- /**
- * Type of data stored in the table:. “features” per clause Features,
- * “tiles” per clause Tiles, or an implementer-defined value for other data
- * tables per clause in an Extended GeoPackage.
- * @member {string}
- */
- this.data_type;
- /**
- * A human-readable identifier (e.g. short name) for the table_name content
- * @member {string}
- */
- this.identifier;
- /**
- * A human-readable description for the table_name content
- * @member {string}
- */
- this.description;
- /**
- * timestamp value in ISO 8601 format as defined by the strftime function
- * %Y-%m-%dT%H:%M:%fZ format string applied to the current time
- * @member {Date}
- */
- this.last_change;
- /**
- * Bounding box minimum easting or longitude for all content in table_name
- * @member {Number}
- */
- this.min_x;
- /**
- * Bounding box minimum northing or latitude for all content in table_name
- * @member {Number}
- */
- this.min_y;
- /**
- * Bounding box maximum easting or longitude for all content in table_name
- * @member {Number}
- */
- this.max_x;
- /**
- * Bounding box maximum northing or latitude for all content in table_name
- * @member {Number}
- */
- this.max_y;
- /**
- * Unique identifier for each Spatial Reference System within a GeoPackage
- * @member {SRSRef}
- */
- this.srs_id;
- }
- /**
- * Contents object. Provides identifying and descriptive information that an
- * application can display to a user in a menu of geospatial data that is
- * available for access and/or update.
- * @class ContentsDao
- * @extends {module:dao/dao~Dao}
- */
- var ContentsDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- }
- util.inherits(ContentsDao, Dao);
- /**
- * Creates a new Contents object
- * @return {module:core/contents~Contents} new Contents object
- */
- ContentsDao.prototype.createObject = function () {
- return new Contents();
- };
- /**
- * Get table names by table type
- * @param {string} [tableType] table type to query for
- * @return {string[]} Array of table names
- */
- ContentsDao.prototype.getTables = function(tableType) {
- var results;
- if (tableType) {
- var fieldValues = new ColumnValues();
- fieldValues.addColumn(ContentsDao.COLUMN_DATA_TYPE, tableType);
- results = this.queryForColumns('table_name', fieldValues);
- } else {
- results = this.queryForColumns('table_name');
- }
- var tableNames = [];
- for (var i = 0; i < results.length; i++) {
- tableNames.push(results[i].table_name);
- }
- return tableNames;
- }
- /**
- * Returns the proj4 projection for the Contents
- * @param {module:core/contents~Contents} contents Contents to get the projection from
- * @return {proj4} proj4 projection
- */
- ContentsDao.prototype.getProjection = function (contents) {
- var srs = this.getSrs(contents);
- var srsDao = this.geoPackage.getSpatialReferenceSystemDao();
- return srsDao.getProjection(srs);
- };
- /**
- * Get the SpatialReferenceSystemDao for the Contents
- * @param {module:core/contents~Contents} contents Contents to get the SpatialReferenceSystemDao from
- * @return {module:core/srs~SpatialReferenceSystemDao}
- */
- ContentsDao.prototype.getSrs = function (contents) {
- var dao = this.geoPackage.getSpatialReferenceSystemDao();
- return dao.queryForId(contents.srs_id);
- };
- /**
- * Get the GeometryColumns for the Contents
- * @param {module:core/contents~Contents} contents Contents
- * @return {module:features/columns~GeometryColumns}
- */
- ContentsDao.prototype.getGeometryColumns = function (contents) {
- var dao = this.geoPackage.getGeometryColumnsDao();
- // TODO what is causing this to need to be here and not up in the require section
- var GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao;
- var results = dao.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, contents.table_name);
- if (!results || !results.length) return;
- var gc = dao.createObject();
- dao.populateObjectFromResult(gc, results[0]);
- return gc;
- };
- /**
- * Get the TileMatrixSet for the Contents
- * @param {module:core/contents~Contents} contents Contents
- * @return {module:tiles/matrixset~TileMatrixSet}
- */
- ContentsDao.prototype.getTileMatrixSet = function (contents) {
- var dao = this.geoPackage.getTileMatrixSetDao();
- var results = dao.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, contents.table_name);
- if (!results || !results.length) return;
- var gc = dao.createObject();
- dao.populateObjectFromResult(gc, results[0]);
- return gc;
- };
- /**
- * Get the TileMatrix for the Contents
- * @param {module:core/contents~Contents} contents Contents
- * @return {module:tiles/matrix~TileMatrix}
- */
- ContentsDao.prototype.getTileMatrix = function (contents) {
- var dao = this.geoPackage.getTileMatrixDao();
- var results = dao.queryForAllEq(TileMatrixDao.COLUMN_TABLE_NAME, contents.table_name);
- if (!results || !results.length) return;
- var tileMatricies = [];
- for (var i = 0; i < results.length; i++) {
- var gc = dao.createObject();
- dao.populateObjectFromResult(gc, results[i]);
- tileMatricies.push(gc);
- }
- return tileMatricies;
- };
- ContentsDao.TABLE_NAME = "gpkg_contents";
- ContentsDao.COLUMN_PK = "table_name";
- ContentsDao.COLUMN_TABLE_NAME = "table_name";
- ContentsDao.COLUMN_DATA_TYPE = "data_type";
- ContentsDao.COLUMN_IDENTIFIER = "identifier";
- ContentsDao.COLUMN_DESCRIPTION = "description";
- ContentsDao.COLUMN_LAST_CHANGE = "last_change";
- ContentsDao.COLUMN_MIN_X = "min_x";
- ContentsDao.COLUMN_MIN_Y = "min_y";
- ContentsDao.COLUMN_MAX_X = "max_x";
- ContentsDao.COLUMN_MAX_Y = "max_y";
- ContentsDao.COLUMN_SRS_ID = "srs_id";
- ContentsDao.GPKG_CDT_FEATURES_NAME = "features";
- ContentsDao.GPKG_CDT_TILES_NAME = "tiles";
- ContentsDao.GPKG_CDT_ATTRIBUTES_NAME = "attributes";
- ContentsDao.prototype.gpkgTableName = ContentsDao.TABLE_NAME;
- ContentsDao.prototype.idColumns = [ContentsDao.COLUMN_PK];
- module.exports.ContentsDao = ContentsDao;
- Contents.TABLE_NAME = ContentsDao.TABLE_NAME;
- module.exports.Contents = Contents;
- },{"../../dao/columnValues":10,"../../dao/dao":11,"../../features/columns":64,"../../tiles/matrix":90,"../../tiles/matrixset":91,"../srs":9,"util":343}],9:[function(require,module,exports){
- /**
- * SpatialReferenceSystem module.
- * @module core/srs
- */
- var Dao = require('../../dao/dao');
- var util = require('util')
- , proj4 = require('proj4');
- proj4 = 'default' in proj4 ? proj4['default'] : proj4;
- /**
- * Spatial Reference System object. The coordinate reference system definitions it contains are referenced by the GeoPackage Contents and GeometryColumns objects to relate the vector and tile data in user tables to locations on the earth.
- * @class SpatialReferenceSystem
- */
- var SpatialReferenceSystem = function() {
- /**
- * Human readable name of this SRS
- * @member {string}
- */
- this.srs_name;
- /**
- * Unique identifier for each Spatial Reference System within a GeoPackage
- * @member {Number}
- */
- this.srs_id;
- /**
- * Case-insensitive name of the defining organization e.g. EPSG or epsg
- * @member {string}
- */
- this.organization;
- /**
- * Numeric ID of the Spatial Reference System assigned by the organization
- * @member {Number}
- */
- this.organization_coordsys_id;
- /**
- * Well-known Text [32] Representation of the Spatial Reference System
- * @member {string}
- */
- this.definition;
- /**
- * Human readable description of this SRS
- * @member {string}
- */
- this.description;
- /**
- * Well-known Text Representation of the Spatial Reference System
- * @member {string}
- */
- this.definition_12_063;
- };
- /**
- * Return the proj4 projection specified by this SpatialReferenceSystem
- * @return {proj4}
- */
- SpatialReferenceSystem.prototype.getProjection = function() {
- if(this.organization === 'NONE') return {};
- if(this.organization_coordsys_id === 4326 && (this.organization === 'EPSG' || this.organization === 'epsg')) {
- return proj4('EPSG:4326');
- } else if (this.definition_12_063 && this.definition_12_063 !== '' && this.definition_12_063 !== 'undefined') {
- return proj4(this.definition_12_063);
- } else if (this.definition && this.definition !== '' && this.definition !== 'undefined') {
- return proj4(this.definition);
- } else if (this.organization && this.organization_coordsys_id) {
- return proj4(this.organization.toUpperCase() + ':' + this.organization_coordsys_id);
- } else {
- return {};
- }
- }
- /**
- * Spatial Reference System Data Access Object
- * @class SpatialReferenceSystemDao
- * @extends {module:dao/dao~Dao}
- * @param {module:geoPackage~GeoPackage} geoPackage The GeoPackage object
- */
- var SpatialReferenceSystemDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- }
- util.inherits(SpatialReferenceSystemDao, Dao);
- /**
- * Create a new SpatialReferenceSystem object
- * @return {module:core/srs~SpatialReferenceSystem}
- */
- SpatialReferenceSystemDao.prototype.createObject = function () {
- return new SpatialReferenceSystem();
- };
- /**
- * Get the Spatial Reference System for the provided id
- * @param {Number} srsId srs id
- * @return {module:core/srs~SpatialReferenceSystem}
- */
- SpatialReferenceSystemDao.prototype.getBySrsId = function(srsId) {
- return this.queryForId(srsId);
- };
- /**
- * Return the proj4 projection specified by this SpatialReferenceSystem
- * @return {proj4}
- */
- SpatialReferenceSystemDao.prototype.getProjection = function (srs) {
- return srs.getProjection();
- };
- /**
- * Creates the required EPSG WGS84 Spatial Reference System (spec
- * Requirement 11)
- * @return {Number} id of the created row
- */
- SpatialReferenceSystemDao.prototype.createWgs84 = function() {
- var srs = this.getBySrsId(4326);
- if (srs) {
- return srs;
- }
- var srs = new SpatialReferenceSystem();
- srs.srs_name = 'WGS 84 geodetic';
- srs.srs_id = 4326;
- srs.organization = 'EPSG';
- srs.organization_coordsys_id = 4326;
- srs.definition = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]';
- srs.description = 'longitude/latitude coordinates in decimal degrees on the WGS 84 spheroid';
- if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {
- srs.definition_12_063 = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]';
- }
- return this.create(srs);
- }
- /**
- * Creates the required Undefined Cartesian Spatial Reference System (spec
- * Requirement 11)
- * @return {Number} id of the created row
- */
- SpatialReferenceSystemDao.prototype.createUndefinedCartesian = function() {
- var srs = this.getBySrsId(-1);
- if (srs) {
- return srs;
- }
- var srs = new SpatialReferenceSystem();
- srs.srs_name = 'Undefined cartesian SRS';
- srs.srs_id = -1;
- srs.organization = 'NONE';
- srs.organization_coordsys_id = -1;
- srs.definition = 'undefined';
- srs.description = 'undefined cartesian coordinate reference system';
- if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {
- srs.definition_12_063 = 'undefined';
- }
- return this.create(srs);
- }
- /**
- * Creates the required Undefined Geographic Spatial Reference System (spec
- * Requirement 11)
- * @return {Number} id of the created row
- */
- SpatialReferenceSystemDao.prototype.createUndefinedGeographic = function() {
- var srs = this.getBySrsId(0);
- if (srs) {
- return srs;
- }
- var srs = new SpatialReferenceSystem();
- srs.srs_name = 'Undefined geographic SRS';
- srs.srs_id = 0;
- srs.organization = 'NONE';
- srs.organization_coordsys_id = 0;
- srs.definition = 'undefined';
- srs.description = 'undefined geographic coordinate reference system';
- if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {
- srs.definition_12_063 = 'undefined';
- }
- return this.create(srs);
- }
- /**
- * Creates the Web Mercator Spatial Reference System if it does not already
- * exist
- * @return {Number} id of the created row
- */
- SpatialReferenceSystemDao.prototype.createWebMercator = function() {
- var srs = this.getBySrsId(3857);
- if (srs) {
- return srs;
- }
- var srs = new SpatialReferenceSystem();
- srs.srs_name = 'WGS 84 / Pseudo-Mercator';
- srs.srs_id = 3857;
- srs.organization = 'EPSG';
- srs.organization_coordsys_id = 3857;
- srs.definition = 'PROJCS["WGS 84 / Pseudo-Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3857"]]';
- srs.description = 'Spherical Mercator projection coordinate system';
- if(this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {
- srs.definition_12_063 = 'PROJCS["WGS 84 / Pseudo-Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3857"]]';
- }
- return this.create(srs);
- }
- /**
- * Spatial Reference System Table Name
- * @type {String}
- */
- SpatialReferenceSystemDao.TABLE_NAME = 'gpkg_spatial_ref_sys';
- /**
- * Table Name
- * @type {String}
- */
- SpatialReferenceSystemDao.prototype.gpkgTableName = SpatialReferenceSystemDao.TABLE_NAME;
- /**
- * srsName field name
- * @type {String}
- */
- SpatialReferenceSystemDao.COLUMN_SRS_NAME = "srs_name";
- /**
- * srsId field name
- * @type {String}
- */
- SpatialReferenceSystemDao.COLUMN_SRS_ID = "srs_id";
- /**
- * id field name, srsId
- * @type {String}
- */
- SpatialReferenceSystemDao.COLUMN_ID = SpatialReferenceSystemDao.COLUMN_SRS_ID;
- /**
- * organization field name
- * @type {String}
- */
- SpatialReferenceSystemDao.COLUMN_ORGANIZATION = "organization";
- /**
- * organizationCoordsysId field name
- * @type {String}
- */
- SpatialReferenceSystemDao.COLUMN_ORGANIZATION_COORDSYS_ID = "organization_coordsys_id";
- /**
- * definition field name
- * @type {String}
- */
- SpatialReferenceSystemDao.COLUMN_DEFINITION = "definition";
- /**
- * description field name
- * @type {String}
- */
- SpatialReferenceSystemDao.COLUMN_DESCRIPTION = "description";
- SpatialReferenceSystemDao.prototype.idColumns = [SpatialReferenceSystemDao.COLUMN_SRS_ID];
- module.exports.SpatialReferenceSystemDao = SpatialReferenceSystemDao;
- SpatialReferenceSystem.TABLE_NAME = SpatialReferenceSystemDao.TABLE_NAME;
- module.exports.SpatialReferenceSystem = SpatialReferenceSystem;
- },{"../../dao/dao":11,"proj4":285,"util":343}],10:[function(require,module,exports){
- /**
- * @module dao/columnValues
- */
- /**
- * Structure to define columns in a table
- * @class ColumnValues
- */
- var ColumnValues = function() {
- this.values = {};
- this.columns = [];
- }
- module.exports = ColumnValues;
- /**
- * adds a column to the structure
- * @param {string} columnName name of column to add
- * @param {module:user/userColumn~UserColumn} column column to add
- */
- ColumnValues.prototype.addColumn = function (columnName, column) {
- this.columns.push(columnName);
- this.values[columnName] = column;
- };
- /**
- * Gets the column by name
- * @param {string} columnName name of column
- * @return {module:user/userColumn~UserColumn} user column
- */
- ColumnValues.prototype.getValue = function (columnName) {
- return this.values[columnName];
- };
- },{}],11:[function(require,module,exports){
- /**
- * Dao module.
- * @module dao/dao
- */
- var sqliteQueryBuilder = require('../db/sqliteQueryBuilder')
- , ColumnValues = require('./columnValues');
- /**
- * Base DAO
- * @class Dao
- * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object
- */
- var Dao = function(geoPackage) {
- /**
- * GeoPackage object this dao belongs to
- * @type {module:geoPackage~GeoPackage}
- */
- this.geoPackage = geoPackage;
- /**
- * Database connection to the sqlite file
- * @type {module:db/geoPackageConnection~GeoPackageConnection}
- */
- this.connection = geoPackage.getDatabase();
- }
- /**
- * Copies object properties from result object to the object
- * @param {Object} object object to copy properties to
- * @param {Object} result object to copy properties from
- */
- Dao.prototype.populateObjectFromResult = function (object, result) {
- if (!result) return;
- for (var key in result) {
- object[key] = result[key];
- }
- };
- /**
- * Checks if the table exists
- * @return {Boolean}
- */
- Dao.prototype.isTableExists = function () {
- var results = this.connection.isTableExists(this.gpkgTableName);
- return !!results;
- };
- /**
- * Refreshes the object by id
- * @param {Object} object object to refresh
- * @return {Object}
- */
- Dao.prototype.refresh = function(object) {
- return this.queryForSameId(object);
- }
- /**
- * Query for object by id
- * @param {object} id ID of the object to query for
- * @return {Object} object created from the raw database object
- */
- Dao.prototype.queryForId = function(id) {
- var whereString = this.buildPkWhere(id);
- var whereArgs = this.buildPkWhereArgs(id);
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString);
- var result = this.connection.get(query, whereArgs);
- if (!result) return;
- var object = this.createObject(result);
- // TOOD something is wrong here
- this.populateObjectFromResult(object, result);
- return object;
- };
- Dao.prototype.queryForSameId = function (object) {
- var idArray = this.getMultiId(object);
- return this.queryForMultiId(idArray);
- };
- Dao.prototype.getMultiId = function (object) {
- var idValues = [];
- for (var i = 0; i < this.idColumns.length; i++) {
- var idValue = object.values ? object.values[this.idColumns[i]] : object[this.idColumns[i]];
- if (idValue !== undefined) {
- idValues.push(idValue);
- }
- }
- return idValues;
- };
- /**
- * Query for object by multi id
- * @param {module:dao/columnValues~ColumnValues} idValues ColumnValues with the multi id
- * @return {Object} object created from the raw database object
- */
- Dao.prototype.queryForMultiId = function (idValues) {
- var whereString = this.buildPkWhere(idValues);
- var whereArgs = this.buildPkWhereArgs(idValues);
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString);
- var result = this.connection.get(query, whereArgs);
- if (!result) return;
- var object = this.createObject(result);
- this.populateObjectFromResult(object, result);
- return object;
- };
- /**
- * Queries for all matches and returns them in the callback. Be aware this pulls all results into memory
- * @param {string} [where] Optional where clause
- * @param {object[]} [whereArgs] Optional where args array
- * @return {Object[]} raw object array from the database
- */
- Dao.prototype.queryForAll = function (where, whereArgs) {
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, where);
- return this.connection.all(query, whereArgs);
- };
- /**
- * Queries for all matches and returns them in the callback. Be aware this pulls all results into memory
- * @param {string} fieldName name of the field to query for
- * @param {string} value value of the like clause
- * @return {Object[]} raw object array from the database
- */
- Dao.prototype.queryForLike = function(fieldName, value) {
- var values = new ColumnValues();
- values.addColumn(fieldName, value);
- var where = this.buildWhereLike(values);
- var whereArgs = this.buildWhereArgs(value);
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, where);
- return this.connection.all(query, whereArgs);
- }
- /**
- * Queries for all matches and returns them. Only queries for the specified column name Be aware this pulls all results into memory
- * @param {string} columnName name of the column to query for
- * @param {module:dao/columnValues~ColumnValues} [fieldValues] optional values to filter on
- * @return {Object[]} raw object array from the database
- */
- Dao.prototype.queryForColumns = function (columnName, fieldValues) {
- var where;
- var whereArgs;
- if (fieldValues) {
- where = this.buildWhere(fieldValues);
- whereArgs = this.buildWhereArgs(fieldValues);
- }
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", [columnName], where);
- return this.connection.all(query, whereArgs);
- };
- /**
- * Queries for all items in the table with a page size and page number
- * @param {Number} pageSize size of the chunk to query for
- * @param {Number} page chunk number to query for
- * @return {Object[]} raw object array from the database
- */
- Dao.prototype.queryForChunk = function(pageSize, page) {
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, undefined, undefined, undefined, undefined, this.idColumns[0], pageSize, page * pageSize);
- return this.connection.all(query);
- };
- /**
- * Iterate all items in the table one at a time. If no parameters are passed, iterates the entire table. Returns an Iterable object
- * @param {string} [field] field to filter on
- * @param {Object} [value] value to filter on
- * @param {string} [groupBy] group by clause
- * @param {string} [having] having clause
- * @param {string} [orderBy] order by clause
- * @return {Iterable} iterable of database objects
- */
- Dao.prototype.queryForEach = function (field, value, groupBy, having, orderBy) {
- if (!field) {
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'");
- var count = 0;
- return this.connection.each(query);
- } else {
- var whereString = this.buildWhereWithFieldAndValue(field, value);
- var whereArgs = this.buildWhereArgs(value);
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString);
- return this.connection.each(query, whereArgs);
- }
- };
- /**
- * Iterate all objects in thet able that match the ColumnValues passed in
- * @param {module:dao/columnValues~ColumnValues} fieldValues ColumnValues to query for
- * @return {Iterable.Object}
- */
- Dao.prototype.queryForFieldValues = function (fieldValues) {
- var whereString = this.buildWhere(fieldValues);
- var whereArgs = this.buildWhereArgs(fieldValues);
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString);
- var count = 0;
- return this.connection.each(query, whereArgs);
- };
- /**
- * Iterate all matching objects
- * @param {string} join join clause
- * @param {string} where where clause
- * @param {Object[]} whereArgs array of where query values
- * @param {string[]} columns columns to query for
- * @return {Iterable.<Object>}
- */
- Dao.prototype.queryJoinWhereWithArgs = function(join, where, whereArgs, columns) {
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", columns, where, join);
- var count = 0;
- return this.connection.each(query, whereArgs);
- }
- /**
- * Count all matching objects
- * @param {string} join join clause
- * @param {string} where where clause
- * @param {Object[]} whereArgs array of where query values
- * @param {string[]} columns columns to query for
- * @return {Number}
- */
- Dao.prototype.countJoinWhereWithArgs = function(join, where, whereArgs, columns) {
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", columns, where, join);
- return this.connection.all(query, whereArgs).length;
- }
- /**
- * Iterate all distinct matching rows in the table
- * @param {string} where where clause
- * @param {Object[]} whereArgs array of where query values
- * @return {Iterable.<Object>}
- */
- Dao.prototype.queryWhereWithArgsDistinct = function(where, whereArgs) {
- var query = sqliteQueryBuilder.buildQuery(true, "'"+this.gpkgTableName+"'", undefined, where);
- var count = 0;
- return this.connection.each(query, whereArgs);
- }
- /**
- * Iterate all matching rows
- * @param {string} [where] where clause
- * @param {Object[]} [whereArgs] array of where query values
- * @param {string} [groupBy] group by clause
- * @param {string} [having] having clause
- * @param {string} [orderBy] order by clause
- * @param {string} [limit] limit clause
- * @return {Iterable.<Object>}
- */
- Dao.prototype.queryWhere = function (where, whereArgs, groupBy, having, orderBy, limit) {
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, where, undefined, groupBy, having, orderBy, limit);
- return this.connection.each(query, whereArgs);
- };
- /**
- * Get the primary key where clause
- * @param {Object|Object[]} idValue id
- * @return {string} primary key where clause
- */
- Dao.prototype.buildPkWhere = function(idValue) {
- if (Array.isArray(idValue)) {
- var idValuesArray = idValue;
- var idColumnValues = new ColumnValues();
- for (var i = 0; i < idValuesArray.length; i++) {
- idColumnValues.addColumn(this.idColumns[i], idValuesArray[i]);
- }
- return this.buildWhere(idColumnValues);
- }
- return this.buildWhereWithFieldAndValue(this.idColumns, idValue);
- };
- /**
- * Get the primary key where args
- * @param {Object} idValue id
- * @return {Object[]} where args
- */
- Dao.prototype.buildPkWhereArgs = function (idValue) {
- if (Array.isArray(idValue)) {
- var idValuesArray = idValue;
- var values = [];
- for (var i = 0; i < idValuesArray.length; i++) {
- values = values.concat(this.buildWhereArgs(idValuesArray[i]));
- }
- return values;
- }
- return this.buildWhereArgs(idValue);
- };
- /**
- * Build where (or selection) LIKE statement for fields
- * @param {module:dao/columnValues~ColumnValues} fields columns and values
- * @param {string} operation AND or OR
- * @return {string} where clause
- */
- Dao.prototype.buildWhereLike = function(fields, operation) {
- var whereString = '';
- for (var i = 0; i < fields.columns.length; i++) {
- var column = fields.columns[i];
- if (i) {
- whereString += ' ' + operation + ' ';
- }
- whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column), 'like');
- }
- return whereString;
- }
- /**
- * Build where or selection statement for fields
- * @param {module:dao/columnValues~ColumnValues} fields columns and values
- * @param {string} [operation=AND] AND or OR
- * @return {string} where clause
- */
- Dao.prototype.buildWhere = function (fields, operation) {
- operation = operation || 'and';
- var whereString = '';
- for (var i = 0; i < fields.columns.length; i++) {
- var column = fields.columns[i];
- if (i) {
- whereString += ' ' + operation + ' ';
- }
- whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column));
- }
- return whereString;
- };
- Dao.prototype.buildWhereArgs = function (values) {
- var args = [];
- if (Array.isArray(values)) {
- for (var i = 0; i < values.length; i++) {
- var value = values[i];
- if (value !== undefined && value !== null) {
- args.push(value);
- }
- }
- } else if (values.columns) {
- for (var i = 0; i < values.columns.length; i++) {
- var column = values.columns[i];
- var value = values.getValue(column);
- if (value !== undefined && value !== null) {
- args.push(value);
- }
- }
- } else {
- if(values !== undefined || values !== null) {
- args.push(values);
- }
- }
- return args.count ? null : args;
- };
- /**
- * Builds a where clause from the field and value with an optional operation. If the value is empty, 'is null' is added to the query for the field
- * @param {string} field field name
- * @param {Object} [value] optional value to filter on
- * @param {string} [operation='='] optional operation
- * @return {string} where clause
- */
- Dao.prototype.buildWhereWithFieldAndValue = function (field, value, operation) {
- operation = operation || '=';
- var whereString = '' + field + ' ';
- if(value === undefined || value === null){
- whereString += "is null";
- } else {
- whereString += operation + ' ?';
- }
- return whereString;
- };
- /**
- * Query for all rows in the table that match
- * @param {string} field field to match
- * @param {string} value value to match
- * @param {string} [groupBy] group by clause
- * @param {string} [having] having clause
- * @param {string} [orderBy] order by clause
- * @return {Object[]} array of raw database objects
- */
- Dao.prototype.queryForAllEq = function(field, value, groupBy, having, orderBy) {
- var whereString = this.buildWhereWithFieldAndValue(field, value);
- var whereArgs = this.buildWhereArgs(value);
- var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString, undefined, groupBy, having, orderBy);
- return this.connection.all(query, whereArgs);
- };
- /**
- * Count rows in the table optionally filtered by the parameters specified
- * @param {module:dao/columnValues~ColumnValues|string} [fields] Either a ColumnValues object or a string specifying a field name
- * @param {Object} [value] value to filter on if fields is a string
- * @return {Number} count of objects
- */
- Dao.prototype.count = function(fields, value) {
- if (!fields) {
- return this.connection.count(this.gpkgTableName);
- }
- var where;
- var whereArgs;
- var query;
- if (fields.columns) {
- where = this.buildWhere(fields, 'and');
- whereArgs = this.buildWhereArgs(fields);
- query = sqliteQueryBuilder.buildCount("'"+this.gpkgTableName+"'", where);
- } else {
- whereString = this.buildWhereWithFieldAndValue(fields, value);
- whereArgs = this.buildWhereArgs(value);
- query = sqliteQueryBuilder.buildCount("'"+this.gpkgTableName+"'", whereString);
- }
- var result = this.connection.get(query, whereArgs);
- if (!result) return 0;
- return result.count;
- }
- /**
- * Get the min of the column
- * @param {string} column column name
- * @param {string} [where] where clause
- * @param {Object[]} [whereArgs] where args
- * @return {Number}
- */
- Dao.prototype.minOfColumn = function (column, where, whereArgs) {
- return this.connection.minOfColumn("'"+this.gpkgTableName+"'", column, where, whereArgs);
- };
- /**
- * Get the max of the column
- * @param {string} column column name
- * @param {string} [where] where clause
- * @param {Object[]} [whereArgs] where args
- * @return {Number}
- */
- Dao.prototype.maxOfColumn = function (column, where, whereArgs) {
- return this.connection.maxOfColumn("'"+this.gpkgTableName+"'", column, where, whereArgs);
- };
- /**
- * Delete the object passed in. Object is deleted by id
- * @param {Object} object object to delete
- * @return {Number} number of objects deleted
- */
- Dao.prototype.delete = function(object) {
- if (object.getId) {
- return this.deleteById(object.getId());
- }
- return this.deleteByMultiId(this.getMultiId(object));
- };
- /**
- * Delete the object specified by the id
- * @param {Object} idValue id value
- * @return {Number} number of objects deleted
- */
- Dao.prototype.deleteById = function(idValue) {
- var where = this.buildPkWhere(idValue);
- var whereArgs = this.buildPkWhereArgs(idValue);
- return this.connection.delete("'"+this.gpkgTableName+"'", where, whereArgs);
- };
- /**
- * Delete the object specified by the ids
- * @param {module:dao/columnValues~ColumnValues} idValue id values
- * @return {Number} number of objects deleted
- */
- Dao.prototype.deleteByMultiId = function(idValues) {
- var where = this.buildPkWhere(idValues);
- var whereArgs = this.buildPkWhereArgs(idValues);
- return this.connection.delete("'"+this.gpkgTableName+"'", where, whereArgs);
- };
- /**
- * Delete objects that match the query
- * @param {string} where where clause
- * @param {Object[]} whereArgs where arguments
- * @return {Number} number of objects deleted
- */
- Dao.prototype.deleteWhere = function(where, whereArgs) {
- return this.connection.delete("'"+this.gpkgTableName+"'", where, whereArgs);
- };
- /**
- * Delete all objects in the table
- * @return {Number} number of objects deleted
- */
- Dao.prototype.deleteAll = function() {
- return this.connection.delete("'"+this.gpkgTableName+"'", '', []);
- };
- /**
- * Insert the object into the table
- * @param {Object} object object to be inserted
- * @return {Number} id of the inserted object
- */
- Dao.prototype.create = function(object) {
- var sql = sqliteQueryBuilder.buildInsert("'"+this.gpkgTableName+"'", object);
- var insertObject = sqliteQueryBuilder.buildUpdateOrInsertObject(object);
- return this.connection.insert(sql, insertObject);
- };
- /**
- * Update all rows that match the query
- * @param {module:dao/columnValues~ColumnValues} values values to insert
- * @param {string} where where clause
- * @param {Object[]} whereArgs where arguments
- * @return {Number} number of objects updated
- */
- Dao.prototype.updateWithValues = function (values, where, whereArgs) {
- var update = sqliteQueryBuilder.buildUpdate("'"+this.gpkgTableName+"'", values, where, whereArgs);
- return this.connection.run(update.sql, update.args);
- };
- /**
- * Update the object specified
- * @param {Object} object object with updated values
- * @return {Number} number of objects updated
- */
- Dao.prototype.update = function(object) {
- var updateValues = sqliteQueryBuilder.buildUpdateOrInsertObject(object);
- var update = sqliteQueryBuilder.buildObjectUpdate("'"+this.gpkgTableName+"'", object);
- var multiId = this.getMultiId(object);
- if (multiId.length) {
- var where = ' where ';
- for (var i = 0; i < multiId.length; i++) {
- where += '"' + this.idColumns[i] + '" = $' + sqliteQueryBuilder.fixColumnName(this.idColumns[i]);
- updateValues[sqliteQueryBuilder.fixColumnName(this.idColumns[i])] = multiId[i];
- }
- update += where;
- }
- return this.connection.run(update, updateValues);
- };
- /**
- * Queries for the object by id, and if it exists, updates it, otherwise creates a new object
- * @param {Object} object object to update or create
- * @return {Number} number of objects modified
- */
- Dao.prototype.createOrUpdate = function(object) {
- var existing = this.queryForSameId(object);
- if (!existing) {
- return this.create(object);
- } else {
- return this.update(object);
- }
- };
- /**
- * Drops this table
- * @return {Number} results of the drop
- */
- Dao.prototype.dropTable = function() {
- return this.connection.dropTable(this.gpkgTableName);
- };
- Dao.prototype.rename = function(newName) {
- var result = this.connection.run('ALTER TABLE ' + '"' + this.gpkgTableName + '" RENAME TO "' + newName + '"');
- this.gpkgTableName = newName;
- }
- module.exports = Dao;
- },{"../db/sqliteQueryBuilder":17,"./columnValues":10}],12:[function(require,module,exports){
- /**
- * DataColumnConstraints module.
- * @module dataColumnConstraints
- */
- var Dao = require('../dao/dao');
- var util = require('util');
- /**
- * Contains data to specify restrictions on basic data type column values
- * @class DataColumnConstraints
- */
- var DataColumnConstraints = function() {
- /**
- * Case sensitive name of constraint
- * @member {string}
- */
- this.constraint_name;
- /**
- * Lowercase type name of constraint: range | enum | glob
- * @member {string}
- */
- this.constraint_type;
- /**
- * Specified case sensitive value for enum or glob or NULL for range constraint_type
- * @member {string}
- */
- this.value;
- /**
- * Minimum value for 'range' or NULL for 'enum' or 'glob' constraint_type
- * @member {Number}
- */
- this.min;
- /**
- * 0 (false) if min value is exclusive, or 1 (true) if min value is inclusive
- * @member {Number}
- */
- this.min_is_inclusive;
- /**
- * Maximum value for 'range' or NULL for 'enum' or 'glob' constraint_type
- * @member {Number}
- */
- this.max;
- /**
- * 0 (false) if max value is exclusive, or 1 (true) if max value is inclusive
- * @member {Number}
- */
- this.max_is_inclusive;
- /**
- * For ranges and globs, describes the constraing; for enums, describes the enum value.
- */
- this.description;
- }
- /**
- * Data Column Constraints Data Access Object
- * @class
- * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object
- * @extends {module:dao/dao~Dao}
- */
- var DataColumnConstraintsDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- }
- util.inherits(DataColumnConstraintsDao, Dao);
- /**
- * Creates a new DataColumnConstraints object
- * @return {module:dataColumnConstraints~DataColumnConstraints}
- */
- DataColumnConstraintsDao.prototype.createObject = function () {
- return new DataColumnConstraints();
- };
- /**
- * query by constraint name
- * @param {String} constraintName constraint name
- * @return {Iterable}
- */
- DataColumnConstraintsDao.prototype.queryByConstraintName = function (constraintName) {
- return this.queryForEach(DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, constraintName);
- };
- /**
- * Query by the unique column values
- * @param {String} constraintName constraint name
- * @param {String} constraintType constraint type
- * @param {String} value value
- * @return {module:dataColumnConstraints~DataColumnConstraints}
- */
- DataColumnConstraintsDao.prototype.queryUnique = function (constraintName, constraintType, value) {
- var dataColumnConstraints = new DataColumnConstraints();
- dataColumnConstraints.constraint_name = constraintName;
- dataColumnConstraints.constraint_type = constraintType;
- dataColumnConstraints.value = value;
- return this.queryForSameId(dataColumnConstraints);
- };
- DataColumnConstraintsDao.TABLE_NAME = "gpkg_data_column_constraints";
- DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME = "constraint_name";
- DataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE = "constraint_type";
- DataColumnConstraintsDao.COLUMN_VALUE = "value";
- DataColumnConstraintsDao.COLUMN_MIN = "min";
- DataColumnConstraintsDao.COLUMN_MIN_IS_INCLUSIVE = "min_is_inclusive";
- DataColumnConstraintsDao.COLUMN_MAX = "max";
- DataColumnConstraintsDao.COLUMN_MAX_IS_INCLUSIVE = "max_is_inclusive";
- DataColumnConstraintsDao.COLUMN_DESCRIPTION = "description";
- DataColumnConstraintsDao.ENUM_TYPE = 'enum';
- DataColumnConstraintsDao.GLOB_TYPE = 'glob';
- DataColumnConstraintsDao.RANGE_TYPE = 'range';
- DataColumnConstraintsDao.prototype.gpkgTableName = DataColumnConstraintsDao.TABLE_NAME;
- DataColumnConstraintsDao.prototype.idColumns = [DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, DataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE, DataColumnConstraintsDao.COLUMN_VALUE];
- module.exports.DataColumnConstraintsDao = DataColumnConstraintsDao;
- module.exports.DataColumnConstraints = DataColumnConstraints;
- },{"../dao/dao":11,"util":343}],13:[function(require,module,exports){
- /**
- * DataColumns module.
- * @module dataColumns
- */
- var Dao = require('../dao/dao')
- , ContentsDao = require('../core/contents').ContentsDao;
- var util = require('util');
- /**
- * Stores minimal application schema identifying, descriptive and MIME type
- * information about columns in user vector feature and tile matrix data tables
- * that supplements the data available from the SQLite sqlite_master table and
- * pragma table_info(table_name) SQL function. The gpkg_data_columns data CAN be
- * used to provide more specific column data types and value ranges and
- * application specific structural and semantic information to enable more
- * informative user menu displays and more effective user decisions on the
- * suitability of GeoPackage contents for specific purposes.
- * @class DataColumns
- */
- var DataColumns = function() {
- /**
- * the name of the tiles, or feature table
- * @member {string}
- */
- this.table_name;
- /**
- * the name of the table column
- * @member {string}
- */
- this.column_name;
- /**
- * A human-readable identifier (e.g. short name) for the column_name content
- * @member {string}
- */
- this.name;
- /**
- * A human-readable formal title for the column_name content
- * @member {string}
- */
- this.title;
- /**
- * A human-readable description for the table_name contente
- * @member {string}
- */
- this.description;
- /**
- * MIME type of columnName if BLOB type or NULL for other types
- * @member {string}
- */
- this.mime_type;
- /**
- * Case sensitive column value constraint name specified
- */
- this.constraint_name;
- }
- /**
- * Contents object. Provides identifying and descriptive information that an
- * application can display to a user in a menu of geospatial data that is
- * available for access and/or update.
- * @class
- * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object
- * @extends {module:dao/dao~Dao}
- */
- var DataColumnsDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- }
- util.inherits(DataColumnsDao, Dao);
- /**
- * Creates a new {module:dataColumns~DataColumns} object
- * @return {module:dataColumns~DataColumns}
- */
- DataColumnsDao.prototype.createObject = function () {
- return new DataColumns();
- };
- /**
- * Get the Contents from the Data Columns
- * @param {module:dataColumns~DataColumns} dataColumns data columns
- * @return {module:core/contents~Contents} contents
- */
- DataColumnsDao.prototype.getContents = function (dataColumns) {
- var cd = new ContentsDao(this.geoPackage);
- return cd.queryForId(dataColumns.table_name);
- };
- /**
- * Query by constraint name
- * @param {String} constraintName constraint name
- * @return {Iterator} iterator of database objects
- */
- DataColumnsDao.prototype.queryByConstraintName = function (constraintName) {
- return this.queryForEach(DataColumnsDao.COLUMN_CONSTRAINT_NAME, constraintName);
- };
- /**
- * Get DataColumn by column name and table name
- * @param {String} tableName table name
- * @param {String} columnName column name
- * @return {module:dataColumns~DataColumns}
- */
- DataColumnsDao.prototype.getDataColumns = function (tableName, columnName) {
- var exists = this.isTableExists();
- if (!exists) {
- return;
- }
- var where = this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_TABLE_NAME, tableName) +
- ' and ' +
- this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_COLUMN_NAME, columnName);
- var values = [tableName, columnName];
- var dataColumn;
- for (var row of this.queryWhere(where, values)) {
- dataColumn = row;
- }
- return dataColumn;
- };
- DataColumnsDao.TABLE_NAME = "gpkg_data_columns";
- DataColumnsDao.COLUMN_PK1 = "table_name";
- DataColumnsDao.COLUMN_PK2 = "column_name";
- DataColumnsDao.COLUMN_TABLE_NAME = "table_name";
- DataColumnsDao.COLUMN_COLUMN_NAME = "column_name";
- DataColumnsDao.COLUMN_NAME = "name";
- DataColumnsDao.COLUMN_TITLE = "title";
- DataColumnsDao.COLUMN_DESCRIPTION = "description";
- DataColumnsDao.COLUMN_MIME_TYPE = "mime_type";
- DataColumnsDao.COLUMN_CONSTRAINT_NAME = "constraint_name";
- DataColumnsDao.prototype.gpkgTableName = DataColumnsDao.TABLE_NAME;
- DataColumnsDao.prototype.idColumns = [DataColumnsDao.COLUMN_PK1, DataColumnsDao.COLUMN_PK2];
- module.exports.DataColumnsDao = DataColumnsDao;
- module.exports.DataColumns = DataColumns;
- },{"../core/contents":8,"../dao/dao":11,"util":343}],14:[function(require,module,exports){
- /**
- * @module db/dataTypes
- */
- /**
- * A boolean value representing true or false.
- * @type {String}
- */
- module.exports.GPKG_DT_BOOLEAN_NAME = "BOOLEAN";
- /**
- * 8-bit signed two’s complement integer.
- * @type {String}
- */
- module.exports.GPKG_DT_TINYINT_NAME = "TINYINT";
- /**
- * 16-bit signed two’s complement integer.
- * @type {String}
- */
- module.exports.GPKG_DT_SMALLINT_NAME = "SMALLINT";
- /**
- * 32-bit signed two’s complement integer.
- * @type {String}
- */
- module.exports.GPKG_DT_MEDIUMINT_NAME = "MEDIUMINT";
- /**
- * 64-bit signed two’s complement integer.
- * @type {String}
- */
- module.exports.GPKG_DT_INT_NAME = "INT";
- /**
- * 64-bit signed two’s complement integer.
- * @type {String}
- */
- module.exports.GPKG_DT_INTEGER_NAME = "INTEGER";
- /**
- * 32-bit IEEE floating point number.
- * @type {String}
- */
- module.exports.GPKG_DT_FLOAT_NAME = "FLOAT";
- /**
- * 64-bit IEEE floating point number.
- * @type {String}
- */
- module.exports.GPKG_DT_DOUBLE_NAME = "DOUBLE";
- /**
- * 64-bit IEEE floating point number.
- * @type {String}
- */
- module.exports.GPKG_DT_REAL_NAME = "REAL";
- /**
- * TEXT{(maxchar_count)}: Variable length string encoded in either UTF-8 or UTF-16, determined by PRAGMA encoding; see http://www.sqlite.org/pragma.html#pragma_encoding.
- * @type {String}
- */
- module.exports.GPKG_DT_TEXT_NAME = "TEXT";
- /**
- * BLOB{(max_size)}: Variable length binary data.
- * @type {String}
- */
- module.exports.GPKG_DT_BLOB_NAME = "BLOB";
- /**
- * ISO-8601 date string in the form YYYY-MM-DD encoded in either UTF-8 or UTF-16.
- * @type {String}
- */
- module.exports.GPKG_DT_DATE_NAME = "DATE";
- /**
- * ISO-8601 date/time string in the form YYYY-MM-DDTHH:MM:SS.SSSZ with T separator character and Z suffix for coordinated universal time (UTC) encoded in either UTF-8 or UTF-16.
- * @type {String}
- */
- module.exports.GPKG_DT_DATETIME_NAME = "DATETIME";
- module.exports.GPKG_DT_GEOMETRY_NAME = "GEOMETRY";
- /**
- * DataType enumeration
- * @typedef {object} GPKGDataType
- */
- module.exports.GPKGDataType = {};
- module.exports.GPKGDataType[module.exports.GPKG_DT_BOOLEAN_NAME] = 0;
- module.exports.GPKGDataType[module.exports.GPKG_DT_TINYINT_NAME] = 1;
- module.exports.GPKGDataType[module.exports.GPKG_DT_SMALLINT_NAME] = 2;
- module.exports.GPKGDataType[module.exports.GPKG_DT_MEDIUMINT_NAME] = 3;
- module.exports.GPKGDataType[module.exports.GPKG_DT_INT_NAME] = 4;
- module.exports.GPKGDataType[module.exports.GPKG_DT_INTEGER_NAME] = 5;
- module.exports.GPKGDataType[module.exports.GPKG_DT_FLOAT_NAME] = 6;
- module.exports.GPKGDataType[module.exports.GPKG_DT_DOUBLE_NAME] = 7;
- module.exports.GPKGDataType[module.exports.GPKG_DT_REAL_NAME] = 8;
- module.exports.GPKGDataType[module.exports.GPKG_DT_TEXT_NAME] = 9;
- module.exports.GPKGDataType[module.exports.GPKG_DT_BLOB_NAME] = 10;
- module.exports.GPKGDataType[module.exports.GPKG_DT_DATE_NAME] = 11;
- module.exports.GPKGDataType[module.exports.GPKG_DT_DATETIME_NAME] = 12;
- module.exports.GPKGDataType[module.exports.GPKG_DT_GEOMETRY_NAME] = 13;
- module.exports.GPKGDataType.GPKG_DT_BOOLEAN = 0;
- module.exports.GPKGDataType.GPKG_DT_TINYINT = 1;
- module.exports.GPKGDataType.GPKG_DT_SMALLINT = 2;
- module.exports.GPKGDataType.GPKG_DT_MEDIUMINT = 3;
- module.exports.GPKGDataType.GPKG_DT_INT = 4;
- module.exports.GPKGDataType.GPKG_DT_INTEGER = 5;
- module.exports.GPKGDataType.GPKG_DT_FLOAT = 6;
- module.exports.GPKGDataType.GPKG_DT_DOUBLE = 7;
- module.exports.GPKGDataType.GPKG_DT_REAL = 8;
- module.exports.GPKGDataType.GPKG_DT_TEXT = 9;
- module.exports.GPKGDataType.GPKG_DT_BLOB = 10;
- module.exports.GPKGDataType.GPKG_DT_DATE = 11;
- module.exports.GPKGDataType.GPKG_DT_DATETIME = 12;
- module.exports.GPKGDataType.GPKG_DT_GEOMETRY = 13;
- /**
- * Return the name of the given data type.
- *
- * @param {module:db/dataTypes~GPKGDataType} dataType the enum to retrieve the name for
- * @return {String} the string name of the given data type enum
- */
- module.exports.name = function(dataType) {
- var name = undefined;
- switch(dataType){
- case module.exports.GPKGDataType.GPKG_DT_BOOLEAN:
- name = module.exports.GPKG_DT_BOOLEAN_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_TINYINT:
- name = module.exports.GPKG_DT_TINYINT_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_SMALLINT:
- name = module.exports.GPKG_DT_SMALLINT_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_MEDIUMINT:
- name = module.exports.GPKG_DT_MEDIUMINT_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_INT:
- name = module.exports.GPKG_DT_INT_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_INTEGER:
- name = module.exports.GPKG_DT_INTEGER_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_FLOAT:
- name = module.exports.GPKG_DT_FLOAT_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_DOUBLE:
- name = module.exports.GPKG_DT_DOUBLE_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_REAL:
- name = module.exports.GPKG_DT_REAL_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_TEXT:
- name = module.exports.GPKG_DT_TEXT_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_BLOB:
- name = module.exports.GPKG_DT_BLOB_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_DATE:
- name = module.exports.GPKG_DT_DATE_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_DATETIME:
- name = module.exports.GPKG_DT_DATETIME_NAME;
- break;
- case module.exports.GPKGDataType.GPKG_DT_GEOMETRY:
- name = module.exports.GPKG_DT_GEOMETRY_NAME;
- break;
- }
- return name;
- }
- /**
- * Return the data type enum value for the given name, ignoring case.
- *
- * @param {String} name the name of the data type enum
- * @return {module:db/dataTypes~GPKGDataType} the enum value
- */
- module.exports.fromName = function(name) {
- var value = 9;
- if (name) {
- name = name.toUpperCase();
- value = module.exports.GPKGDataType[name];
- }
- return value;
- }
- },{}],15:[function(require,module,exports){
- (function (process,Buffer){
- /**
- * Connection to the SQLite file
- * @module db/geoPackageConnection
- */
- var GeoPackageConstants = require('../geoPackageConstants');
- if (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) {
- console.log('Better SQLite');
- } else {
- console.log('SQL.js');
- }
- /**
- * Creates a connection to the SQLite file and when connected, returns a promise that resolves the connection.
- * This will create a {module:db/sqliteAdapter~Adapter} if running in node and the FORCE_SQLJS environment variable is not set.
- * This will create a {module:db/sqljsAdapter~Adapter} if running in the browser or the FORCE_SQLJS environment variable is set
- * @see {module:db/sqliteAdapter~Adapter}
- * @see {module:db/sqljsAdapter~Adapter}
- * @class
- * @param {string} filePath path to the sqlite file
- * @return {Promise<module:db/geoPackageConnection~GeoPackageConnection>}
- * @todo change this constructor to return an actual `GeoPackageConnection` instance instead of a `Promise`
- */
- var GeoPackageConnection = function(filePath) {
- if (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) {
- this.adapterCreator = require('./sqliteAdapter');
- } else {
- this.adapterCreator = require('./sqljsAdapter');
- }
- var promise = new Promise(function(resolve, reject) {
- this.adapterCreator.createAdapter(filePath)
- .then(function(adapter) {
- this.adapter = adapter;
- resolve(this);
- }.bind(this))
- .catch(function(error) {
- reject(error);
- });
- }.bind(this));
- return promise;
- }
- /**
- * Close the database.
- */
- GeoPackageConnection.prototype.close = function() {
- this.adapter.close();
- }
- /**
- * exports the GeoPackage as a file
- * @param {Function} callback called with an err and the buffer containing the contents of the file
- */
- GeoPackageConnection.prototype.export = function(callback) {
- this.adapter.export(callback);
- }
- /**
- * Gets the raw connection to the database
- * @return {Object}
- */
- GeoPackageConnection.prototype.getDBConnection = function () {
- return this.adapter.db;
- };
- /**
- * Connects to a GeoPackage database
- * @param {Object} db database to connect to
- * @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)}
- */
- GeoPackageConnection.prototype.setDBConnection = function (db) {
- return this.adapter = this.adapterCreator.createAdapterFromDb(db);
- };
- /**
- * Registers the given function so that it can be used by SQL statements
- * @param {string} name name of function to register
- * @param {Function} functionDefinition function to register
- * @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)} the adapter in use
- */
- GeoPackageConnection.prototype.registerFunction = function(name, functionDefinition) {
- this.adapter.registerFunction(name, functionDefinition);
- return this.adapter;
- }
- /**
- * Gets the first result from the query
- * @param {string} sql sql query to run
- * @param {Array|Object} [params] array of substitution parameters
- * @return {object}
- */
- GeoPackageConnection.prototype.get = function (sql, params) {
- return this.adapter.get(sql, params);
- };
- /**
- * Checks if table exists in database
- * @param {String} tableName
- * @returns {Boolean}
- */
- GeoPackageConnection.prototype.isTableExists = function (tableName) {
- return this.adapter.isTableExists(tableName);
- };
- /**
- * Run the given SQL and return the results.
- * @param {string} sql sql to run
- * @param {Array|Object} [params] array of substitution parameters
- * @return {{changes: number, lastInsertROWID: number}} object: `{ "changes": number, "lastInsertROWID": number }`
- * * `changes`: number of rows the statement changed
- * * `lastInsertROWID`: ID of the last inserted row
- */
- GeoPackageConnection.prototype.run = function (sql, params) {
- return this.adapter.run(sql, params)
- };
- /**
- * Executes the query and returns all results in an array
- * @param {string} sql sql to run
- * @param {Array|Object} [params] substitution parameters
- * @return {Object[]}
- */
- GeoPackageConnection.prototype.all = function (sql, params) {
- return this.adapter.all(sql, params);
- };
- /**
- * Executes the query and returns an Iterable object of results
- * @param {string} sql sql to run
- * @param {Array|Object} [params] substitution parameters
- * @return {Iterable<Object>}
- */
- GeoPackageConnection.prototype.each = function (sql, params) {
- return this.adapter.each(sql, params);
- };
- /**
- * Gets the minimum value from the column
- * @param {string} table table to query
- * @param {string} column column to get the min value from
- * @param {string} [where] where clause
- * @param {Array|Object} [whereArgs] substitution parameters
- * @return {Object}
- */
- GeoPackageConnection.prototype.minOfColumn = function(table, column, where, whereArgs) {
- var minStatement = 'select min('+column+') as min from ' + table;
- if(where) {
- minStatement += ' ';
- if (where.indexOf('where')) {
- where = 'where ' + where;
- }
- minStatement += where;
- }
- return this.adapter.get(minStatement, whereArgs).min;
- };
- /**
- * Gets the maximum value from the column
- * @param {string} table table to query
- * @param {string} column column to get the max value from
- * @param {string} [where] where clause
- * @param {Array|Object} [whereArgs] substitution parameters
- * @return {Object}
- */
- GeoPackageConnection.prototype.maxOfColumn = function(table, column, where, whereArgs, callback) {
- var maxStatement = 'select max('+column+') as max from ' + table;
- if(where) {
- maxStatement += ' ';
- if (where.indexOf('where')) {
- where = 'where ' + where;
- }
- maxStatement += where;
- }
- return this.adapter.get(maxStatement, whereArgs).max;
- };
- /**
- * Return the count of objects in the table
- * @param {string} table table name
- * @param {string} [where] where clause
- * @param {Array|Object} [whereArgs] substitution parameters
- * @return {Number}
- */
- GeoPackageConnection.prototype.count = function(table, where, whereArgs) {
- return this.adapter.count(table, where, whereArgs);
- };
- /**
- * Executes an insert statement and returns the last id inserted
- * @param {string} sql sql to insert
- * @param {Array|Object} params substitution parameters
- * @return {Object} last row id inserted
- */
- GeoPackageConnection.prototype.insert = function (sql, params) {
- return this.adapter.insert(sql, params);
- };
- /**
- * Delete from the table
- * @param {string} tableName table name to delete from
- * @param {string} [where] where clause
- * @param {Array|Object} [whereArgs] substitution parameters
- * @return {Number} number of rows deleted
- */
- GeoPackageConnection.prototype.delete = function(tableName, where, whereArgs) {
- var deleteStatement = 'DELETE FROM ' + tableName + '';
- if (where) {
- deleteStatement += ' WHERE ' + where;
- }
- return this.adapter.delete(deleteStatement, whereArgs);
- };
- /**
- * Drops the table specified
- * @param {string} tableName table to drop
- * @return {Boolean} results of table drop
- */
- GeoPackageConnection.prototype.dropTable = function(tableName) {
- return this.adapter.dropTable(tableName);
- };
- /**
- * Gets information about the table specified. If data is returned, the table exists
- * @param {string} tableName table to check
- * @return {Object}
- */
- GeoPackageConnection.prototype.tableExists = function(tableName) {
- return this.adapter.get('SELECT name FROM sqlite_master WHERE type="table" AND name=?', [tableName]);
- };
- /**
- * Checks if a table and column exist
- * @param {string} tableName table to check
- * @param {string} columnName column to check
- * @return {Boolean}
- */
- GeoPackageConnection.prototype.columnAndTableExists = function(tableName, columnName) {
- var columns = this.adapter.all('PRAGMA table_info(\''+tableName+'\')');
- for (var i = 0; i < columns.length; i++) {
- if (columns[i].name === columnName) {
- return true;
- }
- }
- return false;
- }
- /**
- * Sets the APPLICATION_ID and user_version for GeoPackage
- */
- GeoPackageConnection.prototype.setApplicationId = function() {
- var buff = Buffer.from(GeoPackageConstants.APPLICATION_ID);
- var applicationId = buff.readUInt32BE(0);
- this.adapter.run('PRAGMA application_id = ' + applicationId);
- this.adapter.run('PRAGMA user_version = ' + GeoPackageConstants.USER_VERSION);
- }
- /**
- * gets the application_id from the sqlite file
- * @return {Object}
- */
- GeoPackageConnection.prototype.getApplicationId = function() {
- return this.adapter.get('PRAGMA application_id').application_id;
- }
- module.exports = GeoPackageConnection;
- /**
- * Convenience method
- * @see {module:db/geoPackageConnection~GeoPackageConnection}
- * @see {module:db/sqliteAdapter~Adapter}
- * @see {module:db/sqljsAdapter~Adapter}
- * @param {string|Buffer} filePath string path to an existing file or a path to where a new file will be created or a Buffer containing the contents of the file, if undefined, an in memory database is created
- * @return {Promise} that resolves
- */
- GeoPackageConnection.connect = function(filePath) {
- return new GeoPackageConnection(filePath);
- }
- /**
- * Convenience method
- * @param {Object} db open database to connect to
- * @return {Promise}
- */
- GeoPackageConnection.connectWithDatabase = function(db) {
- return new GeoPackageConnection(undefined)
- .then(function(connection) {
- connection.setDBConnection(db);
- });
- }
- }).call(this,require('_process'),require("buffer").Buffer)
- },{"../geoPackageConstants":71,"./sqliteAdapter":16,"./sqljsAdapter":18,"_process":284,"buffer":182}],16:[function(require,module,exports){
- /**
- * This adapter uses better-sqlite3 to execute queries against the GeoPackage database
- * @module db/sqliteAdapter
- * @see {@link https://github.com/JoshuaWise/better-sqlite3|better-sqlite3}
- */
- var fs = require('fs')
- , path = require('path')
- , http = require('http')
- , Buffer = require('buffer')
- , os = require('os');
- /**
- * Returns a Promise which, when resolved, returns a {module:db/sqliteAdapter~Adapter} which has connected to the GeoPackage database file
- * @param {string|Buffer} [filePath] string path to an existing file or a path to where a new file will be created or a Buffer containing the contents of the file, if undefined, an in memory database is created
- * @return {Promise<module:db/sqliteAdapter~Adapter>}
- */
- module.exports.createAdapter = function(filePath) {
- var promise = new Promise(function(resolve, reject) {
- var Database = require('better-sqlite3');
- try {
- var db;
- if (filePath && typeof filePath === 'string') {
- if (filePath.indexOf('http') === 0) {
- http.get(filePath, function(response) {
- if (response.statusCode !== 200) {
- return reject(new Error('Unable to reach url: ' + filePath));
- }
- var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg');
- var writeStream = fs.createWriteStream(tmpPath);
- response.pipe(writeStream);
- writeStream.on('close', function() {
- try {
- db = new Database(tmpPath);
- // verify that this is an actual database
- var applicationId = db.pragma('application_id');
- db.pragma('journal_mode = WAL');
- var adapter = new Adapter(db);
- adapter.filePath = tmpPath;
- resolve(adapter);
- } catch (err) {
- console.log('error', err);
- return reject(err);
- }
- });
- });
- } else {
- db = new Database(filePath);
- var adapter = new Adapter(db);
- adapter.filePath = filePath;
- resolve(adapter);
- }
- } else if (filePath) {
- // write this byte array to a file then open it
- var byteArray = filePath;
- var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg');
- return fs.writeFile(tmpPath, byteArray, function(err) {
- db = new Database(tmpPath);
- // verify that this is an actual database
- try {
- var applicationId = db.pragma('application_id');
- db.pragma('journal_mode = WAL');
- } catch (err) {
- console.log('error', err);
- return reject(err);
- }
- var adapter = new Adapter(db);
- adapter.filePath = tmpPath;
- resolve(adapter);
- });
- } else {
- console.log('create in memory');
- db = new Database("memory", {
- memory: !filePath
- });
- var adapter = new Adapter(db);
- adapter.filePath = filePath;
- resolve(adapter);
- }
- } catch (err) {
- console.log('Error opening database', err);
- return reject(err);
- }
- });
- return promise;
- }
- /**
- * Creates an adapter from an already established better-sqlite3 database connection
- * @param {better-sqlite3.Database} db better-sqlite3 database connection
- * @return {module:db/sqliteAdapter~Adapter}
- */
- module.exports.createAdapterFromDb = function(db) {
- return new Adapter(db);
- }
- /**
- * Class which adapts generic GeoPackage queries to better-sqlite3 queries
- * @class Adapter
- * @param {better-sqlite3.Database} db better-sqlite3 database connection
- */
- function Adapter(db) {
- this.db = db;
- }
- /**
- * Closes the connection to the GeoPackage
- */
- Adapter.prototype.close = function() {
- this.db.close();
- }
- /**
- * Get the connection to the database file
- * @return {better-sqlite3.Database}
- */
- Adapter.prototype.getDBConnection = function () {
- return this.db;
- };
- /**
- * Returns a Buffer containing the contents of the database as a file
- * @param {Function} callback called when export is complete
- */
- Adapter.prototype.export = function(callback) {
- fs.readFile(this.filePath, callback);
- }
- /**
- * Registers the given function so that it can be used by SQL statements
- * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#registeroptions-function---this|better-sqlite3 register}
- * @param {string} name name of function to register
- * @param {Function} functionDefinition function to register
- * @return {module:db/sqliteAdapter~Adapter} this
- */
- Adapter.prototype.registerFunction = function(name, functionDefinition) {
- this.db.function(name, functionDefinition);
- return this;
- }
- /**
- * Gets one row of results from the statement
- * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#getbindparameters---row|better-sqlite3 get}
- * @param {string} sql statement to run
- * @param {Array|Object} [params] bind parameters
- * @return {Object}
- */
- Adapter.prototype.get = function (sql, params) {
- var statement = this.db.prepare(sql);
- if (params) {
- return statement.get(params);
- } else {
- return statement.get();
- }
- };
- /**
- * Determines if a tableName exists in the database
- * @param {String} tableName
- * @returns {Boolean}
- */
- Adapter.prototype.isTableExists = function (tableName) {
- var statement = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=:name");
- var result;
- result = statement.get({name: tableName});
- return !!result;
- };
- /**
- * Gets all results from the statement in an array
- * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#allbindparameters---array-of-rows|better-sqlite3 all}
- * @param {string} sql statement to run
- * @param {Array|Object} [params] bind parameters
- * @return {Object[]}
- */
- Adapter.prototype.all = function (sql, params) {
- var statement = this.db.prepare(sql);
- if (params) {
- return statement.all(params);
- } else {
- return statement.all();
- }
- };
- /**
- * Returns an `Iterable` with results from the query
- * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#iteratebindparameters---iterator|better-sqlite3 iterate}
- * @param {string} sql statement to run
- * @param {Object|Array} [params] bind parameters
- * @return {Iterable<Object>}
- */
- Adapter.prototype.each = function (sql, params) {
- var statement = this.db.prepare(sql);
- if (params) {
- return statement.iterate(params);
- } else {
- return statement.iterate();
- }
- };
- /**
- * Run the given statement, returning information about what changed.
- *
- * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#runbindparameters---object|better-sqlite3}
- * @param {string} sql statement to run
- * @param {Object|Array} [params] bind parameters
- * @return {{changes: number, lastInsertROWID: number}} object: `{ "changes": number, "lastInsertROWID": number }`
- * * `changes`: number of rows the statement changed
- * * `lastInsertROWID`: ID of the last inserted row
- */
- Adapter.prototype.run = function(sql, params) {
- var statement = this.db.prepare(sql);
- if (params) {
- return statement.run(params);
- } else {
- return statement.run();
- }
- }
- /**
- * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened
- * @param {string} sql statement to run
- * @param {Object|Array} [params] bind parameters
- * @return {Number} last inserted row id
- */
- Adapter.prototype.insert = function(sql, params) {
- var statement = this.db.prepare(sql);
- return statement.run(params).lastInsertRowid;
- };
- /**
- * Runs the specified delete statement and returns the number of deleted rows
- * @param {string} sql statement to run
- * @param {Object|Array} params bind parameters
- * @return {number} deleted rows
- */
- Adapter.prototype.delete = function(sql, params) {
- var statement = this.db.prepare(sql);
- return statement.run(params).changes;
- };
- /**
- * Drops the table
- * @param {string} table table name
- * @return {Boolean} indicates if the table was dropped
- */
- Adapter.prototype.dropTable = function(table) {
- try {
- var statement = this.db.prepare('DROP TABLE IF EXISTS "' + table + '"');
- var result = statement.run();
- var vacuum = this.db.prepare('VACUUM');
- vacuum.run();
- return result.changes == 0;
- } catch (e) {
- console.log('Drop Table Error', e);
- return false;
- }
- };
- /**
- * Counts rows that match the query
- * @param {string} tableName table name from which to count
- * @param {string} [where] where clause
- * @param {Object|Array} [whereArgs] where args
- * @return {Number} count
- */
- Adapter.prototype.count = function (tableName, where, whereArgs) {
- var sql = 'SELECT COUNT(*) as count FROM "' + tableName + '"';
- if (where) {
- sql += ' where ' + where;
- }
- var statement = this.db.prepare(sql);
- if (whereArgs) {
- return statement.get(whereArgs).count;
- } else {
- return statement.get().count;
- }
- };
- },{"better-sqlite3":undefined,"buffer":182,"fs":177,"http":329,"os":270,"path":276}],17:[function(require,module,exports){
- /**
- * SQLite query builder module.
- * @module db/sqliteQueryBuilder
- */
- /**
- * Utility class to build sql queries
- * @class
- */
- function SqliteQueryBuilder() {}
- module.exports = SqliteQueryBuilder;
- /**
- * Replaces all whitespace in a column name with underscores
- * @param {string} columnName column name to fix
- * @return {string}
- */
- SqliteQueryBuilder.fixColumnName = function(columnName) {
- return columnName.replace(/\W+/g, '_');
- }
- /**
- * Builds a query
- * @param {Boolean} distinct whether query should be distinct or not
- * @param {string} tables table names to query, added to the query from clause
- * @param {string[]} [columns=*] columns to query for
- * @param {string} [where] where clause
- * @param {string} [join] join clause
- * @param {string} [groupBy] group by clause
- * @param {string} [having] having clause
- * @param {string} [orderBy] order by clause
- * @param {Number} [limit] limit
- * @param {Number} [offset] offset
- * @return {string}
- */
- SqliteQueryBuilder.buildQuery = function(distinct, tables, columns, where, join, groupBy, having, orderBy, limit, offset) {
- var query = '';
- if (isEmpty(groupBy) && !isEmpty(having)) {
- throw new Error('Illegal Arguments: having clauses require a groupBy clause');
- }
- query += 'select ';
- if (distinct) {
- query += 'distinct ';
- }
- if(columns && columns.length) {
- query = appendColumnsToString(columns, query);
- } else {
- query += '* ';
- }
- query += 'from ' + tables;
- if (join) {
- query += ' ' + join;
- }
- query = appendClauseToString(query, ' where ', where);
- query = appendClauseToString(query, ' group by ', groupBy);
- query = appendClauseToString(query, ' having ', having);
- query = appendClauseToString(query, ' order by ', orderBy);
- query = appendClauseToString(query, ' limit ', limit);
- query = appendClauseToString(query, ' offset ', offset);
- return query;
- }
- /**
- * Builds a count statement
- * @param {string} tables table names to query for
- * @param {string} [where] where clause
- * @return {string} count statement
- */
- SqliteQueryBuilder.buildCount = function(tables, where) {
- var query = 'select count(*) as count from ' + tables;
- query = appendClauseToString(query, ' where ', where);
- return query;
- }
- /**
- * Builds an insert statement using the properties of the object
- * @param {string} table table to insert into
- * @param {Object} object object to insert
- * @return {string} insert statement
- */
- SqliteQueryBuilder.buildInsert = function(table, object) {
- if (object.getColumnNames) {
- return SqliteQueryBuilder.buildInsertFromColumnNames(table, object);
- }
- var insert = 'insert into ' + table + ' (';
- var keys = '';
- var values = '';
- var first = true;
- for (var key in object) {
- if (object.hasOwnProperty(key)) {
- if (!first) {
- keys += ',';
- values += ',';
- }
- first = false;
- keys += key;
- values += '$' + SqliteQueryBuilder.fixColumnName(key);
- }
- }
- insert += keys + ') values (' + values + ')';
- return insert;
- }
- /**
- * Builds an insert statement from the object.getColumnNames method
- * @param {string} table table to insert into
- * @param {Object} object object with a getColumnNames method
- * @return {string} insert statement
- */
- SqliteQueryBuilder.buildInsertFromColumnNames = function(table, object) {
- var insert = 'insert into ' + table + ' (';
- var keys = '';
- var values = '';
- var first = true;
- var columnNames = object.getColumnNames();
- for (var i = 0; i < columnNames.length; i++) {
- var key = columnNames[i];
- if (!first) {
- keys += ',';
- values += ',';
- }
- first = false;
- keys += '"' + key + '"';
- values += '$' + SqliteQueryBuilder.fixColumnName(key);
- }
- insert += keys + ') values (' + values + ')';
- return insert;
- }
- /**
- * Builds an update or insert object to bind to a statement
- * @param {Object} object object to create bind parameters from
- * @return {Object} bind parameters
- */
- SqliteQueryBuilder.buildUpdateOrInsertObject = function(object) {
- var insertOrUpdate = {};
- if (object.getColumnNames) {
- var columnNames = object.getColumnNames();
- for (var i = 0; i < columnNames.length; i++) {
- insertOrUpdate[SqliteQueryBuilder.fixColumnName(columnNames[i])] = object.toDatabaseValue(columnNames[i]);
- }
- } else {
- for (var key in object) {
- if (object.hasOwnProperty(key)) {
- if (object.toDatabaseValue) {
- insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object.toDatabaseValue(key);
- } else {
- if (typeof object[key] == 'boolean') {
- insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key] ? 1 : 0;
- } else {
- insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key];
- }
- }
- }
- }
- }
- return insertOrUpdate;
- }
- /**
- * Builds an update statement
- * @param {string} table table to update
- * @param {Object} values object with values to update
- * @param {string} [where] where clause
- * @param {Array|Ojbect} [whereArgs] where bind parameters
- * @return {Object} object with a sql property containing the update statement and an args property with bind arguments
- */
- SqliteQueryBuilder.buildUpdate = function(table, values, where, whereArgs) {
- var args = [];
- var update = 'update ' + table + ' set ';
- var first = true;
- for (var columnName in values) {
- if (!first) {
- update += ', ';
- }
- first = false;
- update += '"'+ columnName + '"';
- args.push(values[columnName]);
- update += '=?';
- }
- if (whereArgs) {
- for (var i = 0; i < whereArgs.length; i++) {
- args.push(whereArgs[i]);
- }
- }
- if (where) {
- update += ' where ';
- update += where;
- }
- return {
- sql: update,
- args: args
- };
- }
- /**
- * Builds an update from an object
- * @param {string} table table name to update
- * @param {Object} object object with values to update
- * @return {string} update statement
- */
- SqliteQueryBuilder.buildObjectUpdate = function(table, object) {
- var update = 'update ' + table + ' set ';
- var first = true;
- if (object.getColumnNames) {
- var columnNames = object.getColumnNames();
- for (var i = 0; i < columnNames.length; i++) {
- var key = columnNames[i];
- if (!first) {
- update += ', ';
- }
- first = false;
- update += '"' + key + '"=';
- update += '$' + SqliteQueryBuilder.fixColumnName(key);
- }
- } else {
- for (var key in object) {
- if (!first) {
- update += ', ';
- }
- first = false;
- if (object.hasOwnProperty(key)) {
- update += '"' + key + '"=';
- update += '$' + SqliteQueryBuilder.fixColumnName(key);
- }
- }
- }
- return update;
- }
- function appendClauseToString(string, name, clause) {
- if (clause) {
- string += name + clause;
- }
- return string;
- }
- function appendColumnsToString(columns, string) {
- if (!columns || columns.length == 0) return string;
- string += columnToAppend(columns[0]);
- for (var i = 1; i < columns.length; i++) {
- string += ', ' + columnToAppend(columns[i]);
- }
- string += ' ';
- return string;
- }
- function columnToAppend(column) {
- return column.indexOf('*') != -1 ? column : '"' + column + '"';
- }
- function isEmpty(string) {
- return !string || string.length === 0;
- }
- },{}],18:[function(require,module,exports){
- (function (process,Buffer){
- /**
- * This adapter uses sql.js to execute queries against the GeoPackage database
- * @module db/sqljsAdapter
- * @see {@link http://kripken.github.io/sql.js/documentation/|sqljs}
- */
- var sqljs = require('sql.js/dist/sql-asm-memory-growth.js');
- // var sqljs = require('sql.js/js/sql.js');
- /**
- * Returns a Promise which, when resolved, returns a {module:db/sqljsAdapter~Adapter} which has connected to the GeoPackage database file
- * @param {string|Buffer} [filePath] string path to an existing file or a path to where a new file will be created or a url from which to download a GeoPackage or a Uint8Array containing the contents of the file, if undefined, an in memory database is created
- * @return {Promise<module:db/sqjsAdapter~Adapter>}
- */
- module.exports.createAdapter = function(filePath) {
- var promise = new Promise(function(resolve, reject) {
- sqljs().then(SQL => {
- if (filePath && typeof filePath === 'string') {
- if (typeof (process) !== 'undefined' && process.version) {
- var fs = require('fs');
- if (filePath.indexOf('http') === 0) {
- var http = require('http');
- http.get(filePath, function(response) {
- if (response.statusCode !== 200) {
- return reject(new Error('Unable to reach url: ' + filePath));
- }
- var body = [];
- response.on('data', chunk => body.push(chunk));
- response.on('end', function() {
- var t = new Uint8Array(Buffer.concat(body));
- var db = new SQL.Database(t);
- var adapter = new Adapter(db);
- resolve(adapter);
- });
- });
- } else {
- try {
- var stats = fs.statSync(filePath);
- } catch (e) {
- var db = new SQL.Database();
- var adapter = new Adapter(db);
- return resolve(adapter);
- }
- var filebuffer = fs.readFileSync(filePath);
- var t = new Uint8Array(filebuffer);
- var db = new SQL.Database(t);
- // console.log('setting wal mode');
- // var walMode = db.exec('PRAGMA journal_mode=DELETE');
- // console.log('walMode', walMode);
- var adapter = new Adapter(db);
- return resolve(adapter);
- }
- } else {
- var xhr = new XMLHttpRequest();
- xhr.open('GET', filePath, true);
- xhr.responseType = 'arraybuffer';
- xhr.onload = function (e) {
- if (xhr.status !== 200) {
- return reject(new Error('Unable to reach url: ' + filePath));
- }
- var uInt8Array = new Uint8Array(this.response);
- var db = new SQL.Database(uInt8Array);
- var adapter = new Adapter(db);
- return resolve(adapter);
- };
- xhr.onerror = function (e) {
- return reject(new Error('Error reaching url: ' + filePath));
- };
- xhr.send();
- }
- } else if (filePath) {
- var byteArray = filePath;
- var db = new SQL.Database(byteArray);
- var adapter = new Adapter(db);
- return resolve(adapter);
- } else {
- var db = new SQL.Database();
- var adapter = new Adapter(db);
- return resolve(adapter);
- }
- });
- });
- return promise;
- }
- /**
- * Creates an adapter from an already established better-sqlite3 database connection
- * @param {sqljs.Database} db sqljs database connection
- * @return {module:db/sqljsAdapter~Adapter}
- */
- module.exports.createAdapterFromDb = function(db) {
- return new Adapter(db);
- }
- /**
- * Class which adapts generic GeoPackage queries to sqljs queries
- * @class Adapter
- * @param {sqljs.Database} db sqljs database connection
- */
- function Adapter(db) {
- this.db = db;
- }
- /**
- * Closes the connection to the GeoPackage
- */
- Adapter.prototype.close = function() {
- this.db.close();
- }
- /**
- * Get the connection to the database file
- * @return {sqljs.Database}
- */
- Adapter.prototype.getDBConnection = function () {
- return this.db;
- };
- /**
- * Returns a Uint8Array containing the contents of the database as a file
- * @param {Function} callback called when export is complete
- */
- Adapter.prototype.export = function(callback) {
- callback(null, this.db.export());
- }
- /**
- * Registers the given function so that it can be used by SQL statements
- * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Database.html#create_function-dynamic|sqljs create_function}
- * @param {string} name name of function to register
- * @param {Function} functionDefinition function to register
- * @return {module:db/sqljsAdapter~Adapter} this
- */
- Adapter.prototype.registerFunction = function(name, functionDefinition) {
- this.db.create_function(name, functionDefinition);
- return this;
- }
- /**
- * Gets one row of results from the statement
- * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#get-dynamic|sqljs get}
- * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#getAsObject-dynamic|sqljs getAsObject}
- * @param {string} sql statement to run
- * @param {Array|Object} [params] substitution parameters
- * @return {Object}
- */
- Adapter.prototype.get = function (sql, params) {
- params = params || [];
- var statement = this.db.prepare(sql);
- statement.bind(params);
- var hasResult = statement.step();
- var row;
- if (hasResult) {
- row = statement.getAsObject();
- }
- statement.free();
- return row;
- };
- /**
- * Determines if a tableName exists in the database
- * @param {String} tableName
- * @returns {Boolean}
- */
- Adapter.prototype.isTableExists = function (tableName) {
- var statement = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=:name");
- statement.bind([tableName]);
- var hasResult = statement.step();
- var row;
- if (hasResult) {
- row = statement.getAsObject();
- }
- statement.free();
- return !!row;
- };
- /**
- * Gets all results from the statement in an array
- * @param {string} sql statement to run
- * @param {Array|Object} [params] bind parameters
- * @return {Object[]}
- */
- Adapter.prototype.all = function (sql, params) {
- var rows = [];
- var iterator = this.each(sql, params);
- for (var row of iterator) {
- rows.push(row);
- }
- return rows;
- };
- /**
- * Returns an Iterable with results from the query
- * @param {string} sql statement to run
- * @param {Object|Array} params bind parameters
- * @return {Iterable<Object>}
- */
- Adapter.prototype.each = function (sql, params) {
- var statement = this.db.prepare(sql);
- statement.bind(params);
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- if (statement.step()) {
- return {
- value: statement.getAsObject(),
- done: false
- };
- } else {
- statement.free();
- return {
- done: true
- }
- }
- }
- }
- };
- /**
- * Runs the statement specified, returning information about what changed
- * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#run-dynamic|sqljs run}
- * @param {string} sql statement to run
- * @param {Object|Array} [params] bind parameters
- * @return {Object} object containing a changes property indicating the number of rows changed and a lastInsertROWID indicating the last inserted row
- */
- Adapter.prototype.run = function(sql, params) {
- if (params) {
- for (var key in params) {
- params['$' + key] = params[key];
- }
- }
- this.db.run(sql, params);
- var lastId = this.db.exec('select last_insert_rowid();');
- var lastInsertedId;
- if (lastId) {
- lastInsertedId = lastId[0].values[0][0];
- }
- return {
- lastInsertROWID: lastInsertedId,
- changes: this.db.getRowsModified()
- };
- };
- /**
- * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened
- * @param {string} sql statement to run
- * @param {Object|Array} [params] bind parameters
- * @return {Number} last inserted row id
- */
- Adapter.prototype.insert = function(sql, params) {
- if (params) {
- for (var key in params) {
- params['$' + key] = params[key];
- }
- }
- var statement = this.db.prepare(sql, params);
- statement.step();
- statement.free();
- var lastId = this.db.exec('select last_insert_rowid();');
- if (lastId) {
- return lastId[0].values[0][0];
- } else {
- return;
- }
- };
- /**
- * Runs the specified delete statement and returns the number of deleted rows
- * @param {string} sql statement to run
- * @param {Object|Array} [params] bind parameters
- * @return {number} deleted rows
- */
- Adapter.prototype.delete = function(sql, params) {
- var rowsModified = 0;
- var statement = this.db.prepare(sql, params);
- statement.step();
- rowsModified = this.db.getRowsModified();
- statement.free();
- return rowsModified;
- };
- /**
- * Drops the table
- * @param {string} table table name
- * @return {Boolean} indicates if the table was dropped
- */
- Adapter.prototype.dropTable = function(table) {
- var response = this.db.exec('DROP TABLE IF EXISTS "' + table + '"');
- var vacuum = this.db.exec('VACUUM');
- return !!response;
- };
- /**
- * Counts rows that match the query
- * @param {string} tableName table name from which to count
- * @param {string} [where] where clause
- * @param {Object|Array} [whereArgs] where args
- * @return {Number} count
- */
- Adapter.prototype.count = function (tableName, where, whereArgs) {
- var sql = 'SELECT COUNT(*) as count FROM "' + tableName + '"';
- if (where) {
- sql += ' where ' + where;
- }
- return this.get(sql, whereArgs).count;
- };
- }).call(this,require('_process'),require("buffer").Buffer)
- },{"_process":284,"buffer":182,"fs":177,"http":329,"sql.js/dist/sql-asm-memory-growth.js":327}],19:[function(require,module,exports){
- /**
- * Creates tables necessary for GeoPackages
- * @module db/tableCreator
- */
- const SpatialReferenceSystemDao = require('../core/srs').SpatialReferenceSystemDao;
- const DataTypes = require('./dataTypes');
- /**
- * `TableCreator` provides methods for creating the various standard tables in
- * a GeoPackage database.
- *
- * @class
- * @param {module:geoPackage~GeoPackage} geopackage GeoPackage object
- */
- var TableCreator = function(geopackage) {
- this.geopackage = geopackage;
- this.connection = geopackage.getDatabase();
- }
- module.exports = TableCreator;
- /**
- * Creates all required tables and Spatial Reference Systems, in addition to EPSG:3857
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createRequired = function () {
- var dao = new SpatialReferenceSystemDao(this.geopackage);
- return Promise.all([this.createSpatialReferenceSystem(), this.createContents()])
- .then(function() {
- // Create the required Spatial Reference Systems (spec Requirement 11)
- dao.createUndefinedGeographic();
- dao.createWgs84();
- dao.createUndefinedCartesian();
- // not required but very common
- dao.createWebMercator();
- return true;
- });
- };
- /**
- * Creates the spatial reference system tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createSpatialReferenceSystem = function() {
- return this.createTable('spatial_reference_system');
- }
- /**
- * Creates the contents tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createContents = function() {
- return this.createTable('contents');
- }
- /**
- * Creates the geometry columns tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createGeometryColumns = function() {
- return this.createTable('geometry_columns');
- }
- /**
- * Creates the tile matrix set tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createTileMatrixSet = function() {
- return this.createTable('tile_matrix_set');
- }
- /**
- * Creates the tile matrix tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createTileMatrix = function() {
- return this.createTable('tile_matrix');
- }
- /**
- * Creates the data columns tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createDataColumns = function() {
- return this.createTable('data_columns');
- }
- /**
- * Creates the data column constraints tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createDataColumnConstraints = function() {
- return this.createTable('data_column_constraints');
- }
- /**
- * Creates the metadata tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createMetadata = function() {
- return this.createTable('metadata');
- }
- /**
- * Creates the metadata reference tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createMetadataReference = function() {
- return this.createTable('metadata_reference');
- }
- /**
- * Creates the extensions tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createExtensions = function() {
- return this.createTable('extensions');
- }
- /**
- * Creates the table index tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createTableIndex = function() {
- return this.createTable('table_index');
- }
- /**
- * Creates the geometry index tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createGeometryIndex = function() {
- return this.createTable('geometry_index');
- }
- /**
- * Creates the feature tile link tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createFeatureTileLink = function() {
- return this.createTable('feature_tile_link');
- }
- /**
- * Creates the extended relations tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createExtendedRelations = function() {
- return this.createTable('extended_relations');
- }
- /**
- * Creates the contentsId tables
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createContentsId = function() {
- return this.createTable('contents_id');
- }
- /**
- * Creates all tables necessary for the specified table creation script name in the GeoPackage
- * @param {string} creationScriptName creation scripts to run
- * @return {Promise<Boolean>}
- */
- TableCreator.prototype.createTable = function(creationScriptName) {
- var connection = this.connection;
- return tableCreationScripts[creationScriptName].reduce(function(sequence, sql) {
- return sequence.then(function() {
- try {
- return !!connection.run(sql);
- } catch (error) {
- if (error.message.indexOf('already exists') === -1) {
- throw error;
- }
- }
- });
- }, Promise.resolve());
- }
- /**
- * Create the given user table.
- *
- * @param {modle:user/userTable~UserTable} userTable user table to create
- * @return {object} the result of {@link module:db/geoPackageConnection~GeoPackageConnection#run}
- * @throws {Error} if the table already exists
- */
- TableCreator.prototype.createUserTable = function (userTable) {
- var connection = this.connection;
- var result = connection.tableExists(userTable.table_name);
- if (result) {
- throw new Error('Table already exists and cannot be created: ' + userTable.table_name);
- }
- var check = '';
- var sql = 'create table \'' + userTable.table_name + '\' (';
- for (var i = 0; i < userTable.columns.length; i++) {
- var tc = userTable.columns[i];
- if (i) {
- sql += ', ';
- }
- sql += '\n\'' + tc.name + '\' ' + tc.getTypeName();
- if (tc.max != null) {
- sql += '(' + tc.max + ')';
- if (check.length) {
- check += ' AND\n';
- }
- check += '\tlength("'+tc.name+'") <= ' + tc.max;
- }
- if (tc.notNull) {
- sql += ' not null'
- }
- if (tc.primaryKey) {
- sql += ' primary key autoincrement';
- }
- if (tc.defaultValue) {
- if (tc.dataType === DataTypes.GPKGDataType.GPKG_DT_TEXT) {
- sql += ' default \'' + tc.defaultValue + '\'';
- } else {
- sql += ' default ' + tc.defaultValue;
- }
- }
- }
- for (var i = 0; i < userTable.uniqueConstraints.length; i++) {
- var uniqueConstraint = userTable.uniqueConstraints[i];
- sql += ',\n unique (';
- for (var j = 0; j < uniqueConstraint.columns.length; j++) {
- var uniqueColumn = uniqueConstraint.columns[j];
- if (j) {
- sql += ', ';
- }
- sql += uniqueColumn.name;
- }
- sql += ')';
- }
- if (check.length) {
- sql += '\nCHECK(\n' + check + '\n)';
- }
- sql += '\n);';
- return connection.run(sql);
- };
- var tableCreationScripts = {
- spatial_reference_system: [
- 'CREATE TABLE gpkg_spatial_ref_sys ('+
- ' srs_name TEXT NOT NULL,'+
- ' srs_id INTEGER NOT NULL PRIMARY KEY,'+
- ' organization TEXT NOT NULL,'+
- ' organization_coordsys_id INTEGER NOT NULL,'+
- ' definition TEXT NOT NULL,'+
- ' description TEXT,'+
- ' definition_12_063 TEXT NOT NULL DEFAULT "undefined"'+
- ')',
- 'CREATE VIEW st_spatial_ref_sys AS'+
- ' SELECT'+
- ' srs_name,'+
- ' srs_id,'+
- ' organization,'+
- ' organization_coordsys_id,'+
- ' definition,'+
- ' description'+
- ' FROM gpkg_spatial_ref_sys',
- 'CREATE VIEW spatial_ref_sys AS'+
- ' SELECT'+
- ' srs_id AS srid,'+
- ' organization AS auth_name,'+
- ' organization_coordsys_id AS auth_srid,'+
- ' definition AS srtext'+
- ' FROM gpkg_spatial_ref_sys'
- ],
- contents: [
- 'CREATE TABLE gpkg_contents ('+
- ' table_name TEXT NOT NULL PRIMARY KEY,'+
- ' data_type TEXT NOT NULL,'+
- ' identifier TEXT UNIQUE,'+
- " description TEXT DEFAULT '',"+
- " last_change DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),"+
- ' min_x DOUBLE,'+
- ' min_y DOUBLE,'+
- ' max_x DOUBLE,'+
- ' max_y DOUBLE,'+
- ' srs_id INTEGER,'+
- ' CONSTRAINT fk_gc_r_srs_id FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys(srs_id)'+
- ')'
- ],
- geometry_columns: [
- 'CREATE TABLE gpkg_geometry_columns ('+
- ' table_name TEXT NOT NULL,'+
- ' column_name TEXT NOT NULL,'+
- ' geometry_type_name TEXT NOT NULL,'+
- ' srs_id INTEGER NOT NULL,'+
- ' z TINYINT NOT NULL,'+
- ' m TINYINT NOT NULL,'+
- ' CONSTRAINT pk_geom_cols PRIMARY KEY (table_name, column_name),'+
- ' CONSTRAINT uk_gc_table_name UNIQUE (table_name),'+
- ' CONSTRAINT fk_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+
- ' CONSTRAINT fk_gc_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+
- ')',
- 'CREATE VIEW st_geometry_columns AS'+
- ' SELECT'+
- ' table_name,'+
- ' column_name,'+
- ' "ST_" || geometry_type_name AS geometry_type_name,'+
- ' g.srs_id,'+
- ' srs_name'+
- ' FROM gpkg_geometry_columns as g JOIN gpkg_spatial_ref_sys AS s'+
- ' WHERE g.srs_id = s.srs_id',
- 'CREATE VIEW geometry_columns AS'+
- ' SELECT'+
- ' table_name AS f_table_name,'+
- ' column_name AS f_geometry_column,'+
- ' (CASE geometry_type_name'+
- ' WHEN "GEOMETRY" THEN 0'+
- ' WHEN "POINT" THEN 1'+
- ' WHEN "LINESTRING" THEN 2'+
- ' WHEN "POLYGON" THEN 3'+
- ' WHEN "MULTIPOINT" THEN 4'+
- ' WHEN "MULTILINESTRING" THEN 5'+
- ' WHEN "MULTIPOLYGON" THEN 6'+
- ' WHEN "GEOMETRYCOLLECTION" THEN 7'+
- ' WHEN "CIRCULARSTRING" THEN 8'+
- ' WHEN "COMPOUNDCURVE" THEN 9'+
- ' WHEN "CURVEPOLYGON" THEN 10'+
- ' WHEN "MULTICURVE" THEN 11'+
- ' WHEN "MULTISURFACE" THEN 12'+
- ' WHEN "CURVE" THEN 13'+
- ' WHEN "SURFACE" THEN 14'+
- ' WHEN "POLYHEDRALSURFACE" THEN 15'+
- ' WHEN "TIN" THEN 16'+
- ' WHEN "TRIANGLE" THEN 17'+
- ' ELSE 0 END) AS geometry_type,'+
- ' 2 + (CASE z WHEN 1 THEN 1 WHEN 2 THEN 1 ELSE 0 END) + (CASE m WHEN 1 THEN 1 WHEN 2 THEN 1 ELSE 0 END) AS coord_dimension,'+
- ' srs_id AS srid'+
- ' FROM gpkg_geometry_columns'
- ],
- tile_matrix_set: [
- 'CREATE TABLE gpkg_tile_matrix_set ('+
- ' table_name TEXT NOT NULL PRIMARY KEY,'+
- ' srs_id INTEGER NOT NULL,'+
- ' min_x DOUBLE NOT NULL,'+
- ' min_y DOUBLE NOT NULL,'+
- ' max_x DOUBLE NOT NULL,'+
- ' max_y DOUBLE NOT NULL,'+
- ' CONSTRAINT fk_gtms_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+
- ' CONSTRAINT fk_gtms_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+
- ')'
- ],
- tile_matrix: [
- 'CREATE TABLE gpkg_tile_matrix ('+
- ' table_name TEXT NOT NULL,'+
- ' zoom_level INTEGER NOT NULL,'+
- ' matrix_width INTEGER NOT NULL,'+
- ' matrix_height INTEGER NOT NULL,'+
- ' tile_width INTEGER NOT NULL,'+
- ' tile_height INTEGER NOT NULL,'+
- ' pixel_x_size DOUBLE NOT NULL,'+
- ' pixel_y_size DOUBLE NOT NULL,'+
- ' CONSTRAINT pk_ttm PRIMARY KEY (table_name, zoom_level),'+
- ' CONSTRAINT fk_tmm_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+
- ')',
- "CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_insert'"+
- "BEFORE INSERT ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')"+
- "WHERE (NEW.zoom_level < 0);"+
- "END",
- "CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_update'"+
- "BEFORE UPDATE of zoom_level ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')"+
- "WHERE (NEW.zoom_level < 0);"+
- "END",
- "CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_insert'"+
- "BEFORE INSERT ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')"+
- "WHERE (NEW.matrix_width < 1);"+
- "END",
- "CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_update'"+
- "BEFORE UPDATE OF matrix_width ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')"+
- "WHERE (NEW.matrix_width < 1);"+
- "END",
- "CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_insert'"+
- "BEFORE INSERT ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')"+
- "WHERE (NEW.matrix_height < 1);"+
- "END",
- "CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_update'"+
- "BEFORE UPDATE OF matrix_height ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')"+
- "WHERE (NEW.matrix_height < 1);"+
- "END",
- "CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_insert'"+
- "BEFORE INSERT ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')"+
- "WHERE NOT (NEW.pixel_x_size > 0);"+
- "END",
- "CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_update'"+
- "BEFORE UPDATE OF pixel_x_size ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')"+
- "WHERE NOT (NEW.pixel_x_size > 0);"+
- "END",
- "CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_insert'"+
- "BEFORE INSERT ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')"+
- "WHERE NOT (NEW.pixel_y_size > 0);"+
- "END",
- "CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_update'"+
- "BEFORE UPDATE OF pixel_y_size ON 'gpkg_tile_matrix'"+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')"+
- "WHERE NOT (NEW.pixel_y_size > 0);"+
- "END"
- ],
- data_columns: [
- 'CREATE TABLE gpkg_data_columns ('+
- ' table_name TEXT NOT NULL,'+
- ' column_name TEXT NOT NULL,'+
- ' name TEXT,'+
- ' title TEXT,'+
- ' description TEXT,'+
- ' mime_type TEXT,'+
- ' constraint_name TEXT,'+
- ' CONSTRAINT pk_gdc PRIMARY KEY (table_name, column_name),'+
- ' CONSTRAINT fk_gdc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+
- ')'
- ],
- data_column_constraints: [
- 'CREATE TABLE gpkg_data_column_constraints ('+
- ' constraint_name TEXT NOT NULL,'+
- ' constraint_type TEXT NOT NULL, /* "range" | "enum" | "glob" */'+
- ' value TEXT,'+
- ' min NUMERIC,'+
- ' min_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+
- ' max NUMERIC,'+
- ' max_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+
- ' description TEXT,'+
- ' CONSTRAINT gdcc_ntv UNIQUE (constraint_name, constraint_type, value)'+
- ')'
- ],
- metadata: [
- 'CREATE TABLE gpkg_metadata ('+
- ' id INTEGER CONSTRAINT m_pk PRIMARY KEY ASC NOT NULL UNIQUE,'+
- ' md_scope TEXT NOT NULL DEFAULT "dataset",'+
- ' md_standard_uri TEXT NOT NULL,'+
- ' mime_type TEXT NOT NULL DEFAULT "text/xml",'+
- ' metadata TEXT NOT NULL'+
- ')',
- "CREATE TRIGGER 'gpkg_metadata_md_scope_insert' "+
- "BEFORE INSERT ON 'gpkg_metadata' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table gpkg_metadata violates "+
- "constraint: md_scope must be one of undefined | fieldSession | "+
- "collectionSession | series | dataset | featureType | feature | "+
- "attributeType | attribute | tile | model | catalogue | schema | "+
- "taxonomy software | service | collectionHardware | "+
- "nonGeographicDataset | dimensionGroup') "+
- "WHERE NOT(NEW.md_scope IN "+
- "('undefined','fieldSession','collectionSession','series','dataset', "+
- "'featureType','feature','attributeType','attribute','tile','model', "+
- "'catalogue','schema','taxonomy','software','service', "+
- "'collectionHardware','nonGeographicDataset','dimensionGroup')); "+
- "END",
- "CREATE TRIGGER 'gpkg_metadata_md_scope_update' "+
- "BEFORE UPDATE OF 'md_scope' ON 'gpkg_metadata' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table gpkg_metadata violates "+
- "constraint: md_scope must be one of undefined | fieldSession | "+
- "collectionSession | series | dataset | featureType | feature | "+
- "attributeType | attribute | tile | model | catalogue | schema | "+
- "taxonomy software | service | collectionHardware | "+
- "nonGeographicDataset | dimensionGroup') "+
- "WHERE NOT(NEW.md_scope IN "+
- "('undefined','fieldSession','collectionSession','series','dataset', "+
- "'featureType','feature','attributeType','attribute','tile','model', "+
- "'catalogue','schema','taxonomy','software','service', "+
- "'collectionHardware','nonGeographicDataset','dimensionGroup')); "+
- "END"
- ],
- metadata_reference: [
- "CREATE TABLE gpkg_metadata_reference (" +
- " reference_scope TEXT NOT NULL," +
- " table_name TEXT," +
- " column_name TEXT," +
- " row_id_value INTEGER," +
- " timestamp DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now'))," +
- " md_file_id INTEGER NOT NULL," +
- " md_parent_id INTEGER," +
- " CONSTRAINT crmr_mfi_fk FOREIGN KEY (md_file_id) REFERENCES gpkg_metadata(id)," +
- " CONSTRAINT crmr_mpi_fk FOREIGN KEY (md_parent_id) REFERENCES gpkg_metadata(id)" +
- ")",
- "CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_insert' "+
- "BEFORE INSERT ON 'gpkg_metadata_reference' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+
- "violates constraint: reference_scope must be one of \"geopackage\", "+
- "table\", \"column\", \"row\", \"row/col\"') "+
- "WHERE NOT NEW.reference_scope IN "+
- "('geopackage','table','column','row','row/col'); "+
- "END",
- "CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_update' "+
- "BEFORE UPDATE OF 'reference_scope' ON 'gpkg_metadata_reference' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+
- "violates constraint: referrence_scope must be one of \"geopackage\", "+
- "\"table\", \"column\", \"row\", \"row/col\"') "+
- "WHERE NOT NEW.reference_scope IN "+
- "('geopackage','table','column','row','row/col'); "+
- "END",
- "CREATE TRIGGER 'gpkg_metadata_reference_column_name_insert' "+
- "BEFORE INSERT ON 'gpkg_metadata_reference' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+
- "violates constraint: column name must be NULL when reference_scope "+
- "is \"geopackage\", \"table\" or \"row\"') "+
- "WHERE (NEW.reference_scope IN ('geopackage','table','row') "+
- "AND NEW.column_name IS NOT NULL); "+
- "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+
- "violates constraint: column name must be defined for the specified "+
- "table when reference_scope is \"column\" or \"row/col\"') "+
- "WHERE (NEW.reference_scope IN ('column','row/col') "+
- "AND NOT NEW.table_name IN ( "+
- "SELECT name FROM SQLITE_MASTER WHERE type = 'table' "+
- "AND name = NEW.table_name "+
- "AND sql LIKE ('%' || NEW.column_name || '%'))); "+
- "END",
- "CREATE TRIGGER 'gpkg_metadata_reference_column_name_update' "+
- "BEFORE UPDATE OF column_name ON 'gpkg_metadata_reference' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+
- "violates constraint: column name must be NULL when reference_scope "+
- "is \"geopackage\", \"table\" or \"row\"') "+
- "WHERE (NEW.reference_scope IN ('geopackage','table','row') "+
- "AND NEW.column_nameIS NOT NULL); "+
- "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+
- "violates constraint: column name must be defined for the specified "+
- "table when reference_scope is \"column\" or \"row/col\"') "+
- "WHERE (NEW.reference_scope IN ('column','row/col') "+
- "AND NOT NEW.table_name IN ( "+
- "SELECT name FROM SQLITE_MASTER WHERE type = 'table' "+
- "AND name = NEW.table_name "+
- "AND sql LIKE ('%' || NEW.column_name || '%'))); "+
- "END",
- "CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_insert' "+
- "BEFORE INSERT ON 'gpkg_metadata_reference' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+
- "violates constraint: row_id_value must be NULL when reference_scope "+
- "is \"geopackage\", \"table\" or \"column\"') "+
- "WHERE NEW.reference_scope IN ('geopackage','table','column') "+
- "AND NEW.row_id_value IS NOT NULL; "+
- "END ",
- "CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_update' "+
- "BEFORE UPDATE OF 'row_id_value' ON 'gpkg_metadata_reference' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+
- "violates constraint: row_id_value must be NULL when reference_scope "+
- "is \"geopackage\", \"table\" or \"column\"') "+
- "WHERE NEW.reference_scope IN ('geopackage','table','column') "+
- "AND NEW.row_id_value IS NOT NULL; "+
- "END",
- "CREATE TRIGGER 'gpkg_metadata_reference_timestamp_insert' "+
- "BEFORE INSERT ON 'gpkg_metadata_reference' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+
- "violates constraint: timestamp must be a valid time in ISO 8601 "+
- "\"yyyy-mm-ddThh:mm:ss.cccZ\" form') "+
- "WHERE NOT (NEW.timestamp GLOB "+
- "'[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]Z' "+
- "AND strftime('%s',NEW.timestamp) NOT NULL); "+
- "END",
- "CREATE TRIGGER 'gpkg_metadata_reference_timestamp_update' "+
- "BEFORE UPDATE OF 'timestamp' ON 'gpkg_metadata_reference' "+
- "FOR EACH ROW BEGIN "+
- "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+
- "violates constraint: timestamp must be a valid time in ISO 8601 "+
- "\"yyyy-mm-ddThh:mm:ss.cccZ\" form') "+
- "WHERE NOT (NEW.timestamp GLOB "+
- "'[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]Z' "+
- "AND strftime('%s',NEW.timestamp) NOT NULL); "+
- "END "
- ],
- extensions: [
- 'CREATE TABLE gpkg_extensions ('+
- ' table_name TEXT,'+
- ' column_name TEXT,'+
- ' extension_name TEXT NOT NULL,'+
- ' definition TEXT NOT NULL,'+
- ' scope TEXT NOT NULL,'+
- ' CONSTRAINT ge_tce UNIQUE (table_name, column_name, extension_name)'+
- ')'
- ],
- table_index: [
- 'CREATE TABLE nga_table_index ('+
- ' table_name TEXT NOT NULL PRIMARY KEY,'+
- ' last_indexed DATETIME'+
- ')'
- ],
- geometry_index: [
- 'CREATE TABLE nga_geometry_index ('+
- ' table_name TEXT NOT NULL,'+
- ' geom_id INTEGER NOT NULL,'+
- ' min_x DOUBLE NOT NULL,'+
- ' max_x DOUBLE NOT NULL,'+
- ' min_y DOUBLE NOT NULL,'+
- ' max_y DOUBLE NOT NULL,'+
- ' min_z DOUBLE,'+
- ' max_z DOUBLE,'+
- ' min_m DOUBLE,'+
- ' max_m DOUBLE,'+
- ' CONSTRAINT pk_ngi PRIMARY KEY (table_name, geom_id),'+
- ' CONSTRAINT fk_ngi_nti_tn FOREIGN KEY (table_name) REFERENCES nga_table_index(table_name)'+
- ')'
- ],
- feature_tile_link: [
- 'CREATE TABLE nga_feature_tile_link ('+
- ' feature_table_name TEXT NOT NULL,'+
- ' tile_table_name TEXT NOT NULL,'+
- ' CONSTRAINT pk_nftl PRIMARY KEY (feature_table_name, tile_table_name)'+
- ')'
- ],
- extended_relations: [
- 'CREATE TABLE gpkgext_relations (' +
- ' id INTEGER PRIMARY KEY AUTOINCREMENT,' +
- ' base_table_name TEXT NOT NULL,' +
- ' base_primary_column TEXT NOT NULL DEFAULT \'id\',' +
- ' related_table_name TEXT NOT NULL,' +
- ' related_primary_column TEXT NOT NULL DEFAULT \'id\',' +
- ' relation_name TEXT NOT NULL,' +
- ' mapping_table_name TEXT NOT NULL UNIQUE' +
- ')'
- ],
- contents_id: [
- 'CREATE TABLE nga_contents_id (' +
- ' id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,' +
- ' table_name TEXT NOT NULL,' +
- ' CONSTRAINT uk_nci_table_name UNIQUE (table_name),' +
- ' CONSTRAINT fk_nci_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)' +
- ')'
- ]
- };
- },{"../core/srs":9,"./dataTypes":14}],20:[function(require,module,exports){
- /**
- * Base Extension
- * @module extension/baseExtension
- */
- var Extension = require('./index').Extension
- , ExtensionDao = require('./index').ExtensionDao;
- /**
- * Abstract base GeoPackage extension
- * @class
- */
- var BaseExtension = function(geoPackage) {
- this.geoPackage = geoPackage;
- this.connection = geoPackage.connection;
- this.extensionsDao = geoPackage.getExtensionDao();
- }
- module.exports = BaseExtension;
- /**
- * Get the extension or create as needed
- * @param {String} extensionName extension name
- * @param {String} tableName table name
- * @param {String} columnName column name
- * @param {String} definition extension definition
- * @param {String} scopeType extension scope type
- * @return {Promise<module:extension/baseExtension~BaseExtension>}
- */
- BaseExtension.prototype.getOrCreate = function(extensionName, tableName, columnName, definition, scopeType) {
- var extension = this.getExtension(extensionName, tableName, columnName);
- if (extension) {
- return Promise.resolve(extension);
- }
- return this.extensionsDao.createTable()
- .then(function() {
- return this.createExtension(extensionName, tableName, columnName, definition, scopeType);
- }.bind(this));
- };
- /**
- * Get the extension for the name, table name and column name
- * @param {String} extensionName extension name
- * @param {String} tableName table name
- * @param {String} columnName column name
- * @param {Function} callback Called with err if one occurred and the extension
- */
- BaseExtension.prototype.getExtension = function(extensionName, tableName, columnName) {
- if (!this.extensionsDao.isTableExists()) {
- return false;
- }
- return this.extensionsDao.queryByExtensionAndTableNameAndColumnName(extensionName, tableName, columnName);
- };
- /**
- * Determine if the GeoPackage has the extension
- * @param {String} extensionName extension name
- * @param {String} tableName table name
- * @param {String} columnName column name
- */
- BaseExtension.prototype.hasExtension = function(extensionName, tableName, columnName) {
- var exists = this.getExtension(extensionName, tableName, columnName);
- return !!this.getExtension(extensionName, tableName, columnName).length;
- };
- BaseExtension.prototype.createExtension = function(extensionName, tableName, columnName, definition, scopeType) {
- var extension = new Extension();
- extension.table_name = tableName;
- extension.column_name = columnName;
- extension.extension_name = extensionName;
- extension.definition = definition;
- extension.scope = scopeType;
- return this.extensionsDao.create(extension);
- };
- },{"./index":25}],21:[function(require,module,exports){
- /**
- * @memberOf module:extension/contents
- * @class ContentsId
- */
- /**
- * Contents Id object, for maintaining a unique identifier for contents tables
- * @constructor
- */
- var ContentsId = function() {
- /**
- * Id column, primary key
- * @member {Number}
- */
- this.id = undefined;
- /**
- * Table name column
- * @member {String}
- */
- this.table_name = undefined;
- };
- module.exports = ContentsId;
- },{}],22:[function(require,module,exports){
- /**
- * @memberOf module:extension/contents
- * @class ContentsIdDao
- */
- var Dao = require('../../dao/dao')
- , ContentsId = require('./contentsId');
- var util = require('util');
- /**
- * Contents Id Data Access Object
- * @extends {module:dao/dao~Dao}
- * @constructor
- */
- var ContentsIdDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- };
- util.inherits(ContentsIdDao, Dao);
- /**
- * Create a {module:extension/contents.ContentsId} object
- * @return {module:extension/contents.ContentsId}
- */
- ContentsIdDao.prototype.createObject = function() {
- return new ContentsId();
- };
- /**
- * Create the necessary tables for this dao
- * @return {Promise}
- */
- ContentsIdDao.prototype.createTable = function() {
- return this.geoPackage.getTableCreator().createContentsId();
- };
- /**
- * Get all the table names
- * @return {string[]}
- */
- ContentsIdDao.prototype.getTableNames = function() {
- var tableNames = [];
- var tableNameColumns = this.queryForColumns('table_name');
- for (var i = 0; i < tableNameColumns.length; i++) {
- tableNames.push(tableNameColumns[i].table_name);
- }
- return tableNames;
- };
- /**
- * Query by table name
- * @param {string} tableName name of the table
- * @return {module:extension/contents.ContentsId}
- */
- ContentsIdDao.prototype.queryForTableName = function(tableName) {
- var contentsIds = this.queryForAll(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName));
- if (contentsIds.length > 0) {
- return contentsIds[0];
- } else {
- return null;
- }
- };
- /**
- * Delete by tableName
- * @param {string} tableName the table name to delete by
- * @return {number} number of deleted rows
- */
- ContentsIdDao.prototype.deleteByTableName = function(tableName) {
- return this.deleteWhere(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName));
- };
- ContentsIdDao.TABLE_NAME = 'nga_contents_id';
- ContentsIdDao.COLUMN_ID = 'id';
- ContentsIdDao.COLUMN_TABLE_NAME = 'table_name';
- ContentsIdDao.prototype.gpkgTableName = ContentsIdDao.TABLE_NAME;
- ContentsIdDao.prototype.idColumns = ['id'];
- module.exports = ContentsIdDao;
- },{"../../dao/dao":11,"./contentsId":21,"util":343}],23:[function(require,module,exports){
- /**
- * @module extension/contents
- */
- var BaseExtension = require('../baseExtension')
- , Extension = require('../.').Extension
- , ContentsDao = require('../../core/contents').ContentsDao
- , ContentsIdDao = require('./contentsIdDao');
- var util = require('util');
- /**
- * Style extension
- * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object
- * @extends {module:extension/baseExtension~BaseExtension}
- * @class ContentsIdExtension
- * @constructor
- */
- var ContentsIdExtension = function(geoPackage) {
- BaseExtension.call(this, geoPackage);
- this.contentsIdDao = geoPackage.getContentsIdDao();
- };
- util.inherits(ContentsIdExtension, BaseExtension);
- /**
- * Get or create the contents id extension
- * @return {Promise}
- */
- ContentsIdExtension.prototype.getOrCreateExtension = function() {
- return this.getOrCreate(ContentsIdExtension.EXTENSION_NAME, null, null, ContentsIdExtension.EXTENSION_DEFINITION, Extension.READ_WRITE)
- .then(function() {
- return this.contentsIdDao.createTable();
- }.bind(this));
- };
- /**
- * Get the ContentsIdDao
- * @returns {module:extension/contents.ContentsIdDao}
- */
- ContentsIdExtension.prototype.getDao = function() {
- return this.contentsIdDao;
- };
- ContentsIdExtension.prototype.has = function () {
- return this.hasExtension(ContentsIdExtension.EXTENSION_NAME, null, null) && this.contentsIdDao.isTableExists();
- };
- /**
- * Get the ContentsId object
- * @param contents {module:core/contents.Contents}
- * @returns {module:extension/contents.ContentsId}
- */
- ContentsIdExtension.prototype.get = function (contents) {
- var contentsId = null;
- if (contents && contents.table_name) {
- contentsId = this.getByTableName(contents.table_name);
- }
- return contentsId;
- };
- /**
- * Get the ContentsId object
- * @param tableName
- * @returns {module:extension/contents.ContentsId}
- */
- ContentsIdExtension.prototype.getByTableName = function (tableName) {
- var contentsId = null;
- if (this.contentsIdDao.isTableExists()) {
- contentsId = this.contentsIdDao.queryForTableName(tableName);
- }
- return contentsId;
- };
- /**
- * Get the ContentsId id
- * @param contents {module:core/contents.Contents}
- * @returns {Number}
- */
- ContentsIdExtension.prototype.getId = function (contents) {
- let contentsId = null;
- if (contents && contents.table_name) {
- contentsId = this.getIdByTableName(contents.table_name);
- }
- return contentsId;
- };
- /**
- * Get the ContentsId id
- * @param tableName
- * @returns {Number}
- */
- ContentsIdExtension.prototype.getIdByTableName = function (tableName) {
- var id = null;
- if (this.contentsIdDao.isTableExists()) {
- var contentsId = this.contentsIdDao.queryForTableName(tableName);
- if (contentsId) {
- id = contentsId.id;
- }
- }
- return id;
- };
- /**
- * Creates contentsId for contents
- * @param contents {module:core/contents.Contents}
- * @returns {module:extension/contents.ContentsId}
- */
- ContentsIdExtension.prototype.create = function (contents) {
- var contentsId = null;
- if (contents && contents.table_name) {
- contentsId = this.createWithTableName(contents.table_name);
- }
- return contentsId;
- };
- /**
- * Creates contentsId for contents
- * @param tableName
- * @returns {module:extension/contents.ContentsId}
- */
- ContentsIdExtension.prototype.createWithTableName = function (tableName) {
- var contentsId = this.contentsIdDao.createObject();
- contentsId.table_name = tableName;
- contentsId.id = this.contentsIdDao.create(contentsId);
- return contentsId;
- };
- /**
- * Creates contentsId for contents
- * @param contents {module:core/contents.Contents}
- * @returns {module:extension/contents.ContentsId}
- */
- ContentsIdExtension.prototype.createId = function (contents) {
- var contentsId = null;
- if (contents && contents.table_name) {
- contentsId = this.createIdWithTableName(contents.table_name);
- }
- return contentsId;
- };
- /**
- * Creates contentsId for contents
- * @param tableName {string}
- * @returns {module:extension/contents.ContentsId}
- */
- ContentsIdExtension.prototype.createIdWithTableName = function (tableName) {
- return this.createWithTableName(tableName);
- };
- /**
- * Gets or creates contentsId for contents
- * @param contents {module:core/contents.Contents}
- * @returns {module:extension/contents.ContentsId}
- */
- ContentsIdExtension.prototype.getOrCreateId = function (contents) {
- var contentsId = null;
- if (contents && contents.table_name) {
- contentsId = this.getOrCreateIdByTableName(contents.table_name);
- }
- return contentsId;
- };
- /**
- * Gets or creates contentsId for table name
- * @param tableName {string}
- * @returns {module:extension/contents.ContentsId}
- */
- ContentsIdExtension.prototype.getOrCreateIdByTableName = function (tableName) {
- var contentId = this.getByTableName(tableName);
- if (contentId == null) {
- contentId = this.createWithTableName(tableName);
- }
- return contentId;
- };
- /**
- * Deletes contentsId for contents
- * @param contents {module:core/contents.Contents}
- * @returns {number} number of deleted rows
- */
- ContentsIdExtension.prototype.deleteId = function (contents) {
- var deleted = false;
- if (contents && contents.table_name) {
- deleted = this.deleteIdByTableName(contents.table_name);
- }
- return deleted;
- };
- /**
- * Deletes contentId for table name
- * @param tableName {string}
- * @returns {number} number of deleted rows
- */
- ContentsIdExtension.prototype.deleteIdByTableName = function (tableName) {
- return this.contentsIdDao.deleteByTableName(tableName);
- };
- /**
- * Number of contentsIds
- * @returns {number}
- */
- ContentsIdExtension.prototype.count = function () {
- var count = 0;
- if (this.has()) {
- count = this.contentsIdDao.count();
- }
- return count;
- };
- /**
- * Create contentsIds for contents of type passed in
- * @param type {string} defaults to ""
- * @returns {number}
- */
- ContentsIdExtension.prototype.createIds = function (type = "") {
- var missing = this.getMissing(type);
- for (var i = 0; i < missing.length; i++) {
- this.getOrCreateIdByTableName(missing[i].table_name);
- }
- return missing.length;
- };
- /**
- * Deletes ids by type
- * @param type
- * @returns {number}
- */
- ContentsIdExtension.prototype.deleteIds = function (type = "") {
- var deleted = 0;
- if (this.has()) {
- if (type.length === 0) {
- deleted = this.contentsIdDao.deleteAll();
- } else {
- var ids = this.getIdsByType(type);
- for (var i = 0; i < ids.length; i++) {
- deleted += this.contentsIdDao.deleteById(ids[i].id);
- }
- }
- }
- return deleted;
- };
- ContentsIdExtension.prototype.getIdsByType = function (type = "") {
- var contentIds = [];
- if (this.has()) {
- var query = "SELECT ";
- query += ContentsIdDao.COLUMN_ID;
- query += ", ";
- query += ContentsIdDao.COLUMN_TABLE_NAME;
- query += " FROM " + ContentsIdDao.TABLE_NAME;
- query += " WHERE ";
- query += ContentsIdDao.COLUMN_TABLE_NAME;
- query += " IN (SELECT ";
- query += ContentsDao.COLUMN_TABLE_NAME;
- query += " FROM ";
- query += ContentsDao.TABLE_NAME;
- var where = "";
- var params = [];
- if (type != null && type.length > 0) {
- where += ContentsDao.COLUMN_DATA_TYPE;
- where += " = ?";
- params.push(type);
- }
- if (where.length > 0) {
- query += " WHERE " + where;
- }
- query += ")";
- contentIds = this.connection.all(query, params);
- }
- return contentIds;
- };
- /**
- * Get contents without contents ids
- * @param type
- * @returns {string[]}
- */
- ContentsIdExtension.prototype.getMissing = function (type = "") {
- var query = "SELECT " + ContentsDao.COLUMN_TABLE_NAME + " FROM " + ContentsDao.TABLE_NAME;
- var where = "";
- var params = [];
- if (type != null && type.length > 0) {
- where += ContentsDao.COLUMN_DATA_TYPE;
- where += " = ?";
- params.push(type);
- }
- if (this.has()) {
- if (where.length > 0) {
- where += " AND ";
- }
- where += ContentsDao.COLUMN_TABLE_NAME;
- where += " NOT IN (SELECT ";
- where += ContentsIdDao.COLUMN_TABLE_NAME;
- where += " FROM ";
- where += ContentsIdDao.TABLE_NAME;
- where += ")";
- }
- if (where.length > 0) {
- query += " WHERE " + where;
- }
- return this.connection.all(query, params);
- };
- /**
- * Remove contents id extension
- */
- ContentsIdExtension.prototype.removeExtension = function() {
- if (this.contentsIdDao.isTableExists()) {
- this.geoPackage.deleteTable(ContentsIdDao.TABLE_NAME);
- }
- if (this.extensionsDao.isTableExists()) {
- this.extensionsDao.deleteByExtension(ContentsIdDao.EXTENSION_NAME);
- }
- };
- ContentsIdExtension.EXTENSION_NAME = 'nga_contents_id';
- ContentsIdExtension.EXTENSION_AUTHOR = 'nga';
- ContentsIdExtension.EXTENSION_NAME_NO_AUTHOR = 'contents_id';
- ContentsIdExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/contents-id.html';
- module.exports = ContentsIdExtension;
- },{"../.":25,"../../core/contents":8,"../baseExtension":20,"./contentsIdDao":22,"util":343}],24:[function(require,module,exports){
- /**
- * CrsWktExtension module.
- * @module extension/crsWkt
- */
- var BaseExtension = require('../baseExtension')
- , Extension = require('../.').Extension;
- var util = require('util');
- /**
- * OGC Well known text representation of Coordinate Reference Systems extensionName
- * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object
- * @class
- * @extends {module:extension/baseExtension~BaseExtension}
- */
- var CrsWktExtension = function(geoPackage) {
- BaseExtension.call(this, geoPackage);
- this.extensionName = CrsWktExtension.EXTENSION_NAME;
- this.extensionDefinition = CrsWktExtension.EXTENSION_CRS_WKT_DEFINITION;
- }
- util.inherits(CrsWktExtension, BaseExtension);
- /**
- * Get or create the extension
- * @return {Promise<module:extension/crsWkt~CrsWktExtension>}
- */
- CrsWktExtension.prototype.getOrCreateExtension = function() {
- return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE);
- };
- CrsWktExtension.EXTENSION_NAME = 'gpkg_crs_wkt';
- CrsWktExtension.EXTENSION_CRS_WKT_AUTHOR = 'gpkg';
- CrsWktExtension.EXTENSION_CRS_WKT_NAME_NO_AUTHOR = 'crs_wkt';
- CrsWktExtension.EXTENSION_CRS_WKT_DEFINITION = 'http://www.geopackage.org/spec/#extension_crs_wkt';
- module.exports.CrsWktExtension = CrsWktExtension;
- },{"../.":25,"../baseExtension":20,"util":343}],25:[function(require,module,exports){
- /**
- * Metadata module.
- * @module extension
- * @see module:dao/dao
- */
- var Dao = require('../dao/dao')
- , ColumnValues = require('../dao/columnValues')
- , TableCreator = require('../db/tableCreator');
- var util = require('util');
- /**
- * Indicates that a particular extension applies to a GeoPackage, a table in a
- * GeoPackage or a column of a table in a GeoPackage. An application that access
- * a GeoPackage can query the gpkg_extensions table instead of the contents of
- * all the user data tables to determine if it has the required capabilities to
- * read or write to tables with extensions, and to “fail fast” and return an
- * error message if it does not.
- * @class Extension
- */
- var Extension = function() {
- /**
- * Name of the table that requires the extension. When NULL, the extension
- * is required for the entire GeoPackage. SHALL NOT be NULL when the
- * column_name is not NULL.
- * @member {String}
- */
- this.table_name;
- /**
- * Name of the column that requires the extension. When NULL, the extension
- * is required for the entire table.
- * @member {String}
- */
- this.column_name;
- /**
- * The case sensitive name of the extension that is required, in the form
- * <author>_<extension_name>.
- * @member {String}
- */
- this.extension_name;
- /**
- * Definition of the extension in the form specfied by the template in
- * GeoPackage Extension Template (Normative) or reference thereto.
- * @member {String}
- */
- this.definition;
- /**
- * Indicates scope of extension effects on readers / writers: read-write or
- * write-only in lowercase.
- * @member {String}
- */
- this.scope;
- }
- Extension.EXTENSION_NAME_DIVIDER = "_";
- Extension.READ_WRITE = "read-write";
- Extension.WRITE_ONLY = "write-only";
- Extension.prototype.setExtensionName = function(author, extensionName) {
- this.extension_name = Extension.buildExtensionName(author, extensionName);
- };
- Extension.prototype.getAuthor = function() {
- return Extension.getAuthorWithExtensionName(this.extension_name);
- }
- Extension.prototype.getExtensionNameNoAuthor = function() {
- return Extension.getExtensionNameNoAuthor(this.extension_name);
- }
- Extension.buildExtensionName = function(author, extensionName) {
- return author + Extension.EXTENSION_NAME_DIVIDER + extensionName;
- }
- Extension.getAuthorWithExtensionName = function(extensionName) {
- return extensionName.split(Extension.EXTENSION_NAME_DIVIDER)[0];
- }
- Extension.getExtensionNameNoAuthor = function(extensionName) {
- return extensionName.slice(extensionName.indexOf(Extension.EXTENSION_NAME_DIVIDER)+1);
- }
- /**
- * Extension Data Access Object
- * @class
- * @extends {module:dao/dao~Dao}
- */
- var ExtensionDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- };
- util.inherits(ExtensionDao, Dao);
- ExtensionDao.prototype.createObject = function(row) {
- var e = new Extension();
- for (var key in row) {
- e[key] = row[key];
- }
- return e;
- };
- ExtensionDao.prototype.queryByExtension = function(extensionName) {
- var results = this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);
- var e = this.createObject(results[0]);
- return e;
- }
- ExtensionDao.prototype.queryAllByExtension = function(extensionName) {
- var extensions = []
- for (var row of this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName)) {
- var e = this.createObject(row);
- extensions.push(e);
- }
- if (extensions.length) {
- return extensions;
- } else {
- return false;
- }
- }
- ExtensionDao.prototype.queryByExtensionAndTableName = function(extensionName, tableName) {
- var values = new ColumnValues();
- values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);
- values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName);
- var extensions = [];
- for (var row of this.queryForFieldValues(values)) {
- var e = this.createObject(row);
- extensions.push(e);
- }
- if (extensions.length) {
- return extensions;
- } else {
- return false;
- }
- }
- ExtensionDao.prototype.queryByExtensionAndTableNameAndColumnName = function (extensionName, tableName, columnName) {
- var values = new ColumnValues();
- values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);
- values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName);
- values.addColumn(ExtensionDao.COLUMN_COLUMN_NAME, columnName);
- var extensions = [];
- for (var row of this.queryForFieldValues(values)) {
- var e = this.createObject(row);
- extensions.push(e);
- }
- if (extensions.length) {
- return extensions;
- } else {
- return false;
- }
- };
- ExtensionDao.prototype.createTable = function() {
- var tc = new TableCreator(this.geoPackage);
- return tc.createExtensions();
- }
- ExtensionDao.prototype.deleteByExtension = function(extensionName) {
- var values = new ColumnValues();
- values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);
- this.deleteWhere(this.buildWhere(values, '='), this.buildWhereArgs(values));
- }
- ExtensionDao.prototype.deleteByExtensionAndTableName = function(extensionName, tableName) {
- var values = new ColumnValues();
- values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);
- values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName);
- this.deleteWhere(this.buildWhere(values, 'and'), this.buildWhereArgs(values));
- }
- ExtensionDao.TABLE_NAME = "gpkg_extensions";
- ExtensionDao.COLUMN_TABLE_NAME = "table_name";
- ExtensionDao.COLUMN_COLUMN_NAME = "column_name";
- ExtensionDao.COLUMN_EXTENSION_NAME = "extension_name";
- ExtensionDao.COLUMN_DEFINITION = "definition";
- ExtensionDao.COLUMN_SCOPE = "scope";
- ExtensionDao.prototype.gpkgTableName = ExtensionDao.TABLE_NAME;
- ExtensionDao.prototype.idColumns = [ExtensionDao.COLUMN_TABLE_NAME, ExtensionDao.COLUMN_COLUMN_NAME, ExtensionDao.COLUMN_EXTENSION_NAME];
- module.exports.ExtensionDao = ExtensionDao;
- module.exports.Extension = Extension;
- },{"../dao/columnValues":10,"../dao/dao":11,"../db/tableCreator":19,"util":343}],26:[function(require,module,exports){
- /**
- * Feature Table Index
- * @module extension/index
- */
- var Extension = require('../index').Extension
- , ExtensionDao = require('../index').ExtensionDao
- , BaseExtension = require('../baseExtension')
- , TableIndexDao = require('./tableIndex').TableIndexDao
- , TableIndex = require('./tableIndex').TableIndex
- , GeometryIndexDao = require('./geometryIndex').GeometryIndexDao
- , RTreeIndexDao = require('../rtree').RTreeIndexDao
- , RTreeIndex = require('../rtree').RTreeIndex
- , ContentsDao = require('../../core/contents').ContentsDao
- , EnvelopeBuilder = require('../../geom/envelopeBuilder');
- var proj4 = require('proj4');
- proj4 = 'default' in proj4 ? proj4['default'] : proj4;
- var util = require('util');
- /**
- * This class will either use the RTree index if it exists, or the
- * Feature Table Index NGA Extension implementation. This extension is used to
- * index Geometries within a feature table by their minimum bounding box for
- * bounding box queries.
- * @extends {module:extension/baseExtension~BaseExtension}
- * @class
- */
- var FeatureTableIndex = function(geoPackage, featureDao) {
- BaseExtension.call(this, geoPackage);
- this.progress;
- /**
- * Feature Dao to index
- * @type {module:features/user/featureDao~FeatureDao}
- */
- this.featureDao = featureDao;
- this.extensionName = Extension.buildExtensionName(FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR, FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR);
- this.extensionDefinition = FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION;
- this.tableName = featureDao.table_name;
- this.columnName = featureDao.getGeometryColumnName();
- this.extensionsDao = geoPackage.getExtensionDao();
- this.tableIndexDao = geoPackage.getTableIndexDao();
- this.geometryIndexDao = geoPackage.getGeometryIndexDao(featureDao);
- this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao);
- this.rtreeIndexDao.gpkgTableName = 'rtree_'+this.tableName+'_'+this.columnName;
- this.rtreeIndex = new RTreeIndex(geoPackage, featureDao);
- /**
- * true if the table is indexed with an RTree
- * @type {Boolean}
- */
- this.rtreeIndexed = this.hasExtension('gpkg_rtree_index', this.tableName, this.columnName);
- }
- util.inherits(FeatureTableIndex, BaseExtension);
- /**
- * Index the table if not already indexed
- * @param {Function} progress function which is called with progress while indexing
- * @return {Promise<Boolean>} promise resolved when the indexing is complete
- */
- FeatureTableIndex.prototype.index = function(progress) {
- return this.indexWithForce(false, progress);
- };
- /**
- * Index the table if not already indexed or force is true
- * @param {Boolean} force force index even if the table is already indexed
- * @param {Function} progress function which is called with progress while indexing
- * @return {Promise<Boolean>} promise resolved when the indexing is complete
- */
- FeatureTableIndex.prototype.indexWithForce = function(force, progress) {
- progress = progress || function() {};
- this.progress = function(message) {
- setTimeout(progress, 0, message);
- };
- var indexed = this.isIndexed();
- if (force || !indexed) {
- return this.getOrCreateExtension()
- .then(function(extension) {
- return this.getOrCreateTableIndex();
- }.bind(this))
- .then(function(tableIndex) {
- return this.createOrClearGeometryIndicies()
- .then(function() {
- return this.indexTable(tableIndex);
- }.bind(this))
- .then(function() {
- return true;
- });
- }.bind(this));
- } else {
- return Promise.resolve(indexed);
- }
- }
- /**
- * Check if the table is indexed either with an RTree or the NGA Feature Table Index
- * @return {Boolean}
- */
- FeatureTableIndex.prototype.isIndexed = function () {
- if (this.rtreeIndexed) return true;
- try {
- var result = this.getFeatureTableIndexExtension();
- if (result) {
- var contentsDao = this.geoPackage.getContentsDao();
- var contents = contentsDao.queryForId(this.tableName);
- if (!contents) return false;
- var lastChange = new Date(contents.last_change);
- var tableIndex = this.tableIndexDao.queryForId(this.tableName);
- if (!tableIndex || !tableIndex.last_indexed) {
- return false;
- }
- var lastIndexed = new Date(tableIndex.last_indexed);
- return lastIndexed >= lastChange;
- } else {
- return false;
- }
- } catch (e) {
- return false;
- }
- };
- /**
- * Returns the feature table index extension for this table and column name if exists
- * @return {module:extension~Extension}
- */
- FeatureTableIndex.prototype.getFeatureTableIndexExtension = function () {
- return this.getExtension(this.extensionName, this.tableName, this.columnName);
- };
- /**
- * Get or create the extension for this table name and column name
- * @return {module:extension~Extension}
- */
- FeatureTableIndex.prototype.getOrCreateExtension = function() {
- return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.READ_WRITE);
- };
- /**
- * Get or create if needed the table index
- * @return {Promise<TableIndex>}
- */
- FeatureTableIndex.prototype.getOrCreateTableIndex = function() {
- var tableIndex = this.getTableIndex();
- if (tableIndex) return Promise.resolve(tableIndex);
- return this.tableIndexDao.createTable()
- .then(function() {
- this.createTableIndex();
- return this.getTableIndex();
- }.bind(this));
- };
- /**
- * Create the table index
- * @return {module:extension/index~TableIndex}
- */
- FeatureTableIndex.prototype.createTableIndex = function() {
- var ti = new TableIndex();
- ti.table_name = this.tableName;
- ti.last_indexed = this.lastIndexed;
- return this.tableIndexDao.create(ti);
- };
- /**
- * Get the table index
- * @return {module:extension/index~TableIndex}
- */
- FeatureTableIndex.prototype.getTableIndex = function() {
- if (this.tableIndexDao.isTableExists()) {
- return this.tableIndexDao.queryForId(this.tableName);
- } else {
- return;
- }
- };
- /**
- * Clear the geometry indices or create the table if needed
- * @return {Promise} resolved when complete
- */
- FeatureTableIndex.prototype.createOrClearGeometryIndicies = function() {
- return this.geometryIndexDao.createTable()
- .then(function() {
- return this.clearGeometryIndicies();
- }.bind(this));
- };
- /**
- * Clears the geometry indices
- * @return {Number} number of rows deleted
- */
- FeatureTableIndex.prototype.clearGeometryIndicies = function() {
- var where = this.geometryIndexDao.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, this.tableName);
- var whereArgs = this.geometryIndexDao.buildWhereArgs(this.tableName);
- return this.geometryIndexDao.deleteWhere(where, whereArgs);
- };
- /**
- * Indexes the table
- * @param {module:extension/index~TableIndex} tableIndex TableIndex
- * @return {Promise} resolved when complete
- */
- FeatureTableIndex.prototype.indexTable = function(tableIndex) {
- return new Promise(function(resolve, reject) {
- setTimeout(function() {
- this.indexChunk(0, tableIndex, resolve, reject);
- }.bind(this));
- }.bind(this))
- .then(function(result) {
- return this.updateLastIndexed(tableIndex);
- }.bind(this));
- };
- /**
- * Indexes a chunk of 100 rows
- * @param {Number} page page to start on
- * @param {module:extension/index~TableIndex} tableIndex TableIndex
- * @param {Function} resolve function to call when all chunks are indexed
- * @param {Function} reject called if there is an error
- */
- FeatureTableIndex.prototype.indexChunk = function(page, tableIndex, resolve, reject) {
- var rows = this.featureDao.queryForChunk(100, page);
- if (rows.length) {
- this.progress('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100));
- console.log('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100));
- rows.forEach(function(row) {
- var fr = this.featureDao.getRow(row);
- this.indexRow(tableIndex, fr.getId(), fr.getGeometry());
- }.bind(this));
- setTimeout(function() {
- this.indexChunk(++page, tableIndex, resolve, reject);
- }.bind(this));
- } else {
- resolve();
- }
- }
- /**
- * Indexes a row
- * @param {module:extension/index~TableIndex} tableIndex TableIndex`
- * @param {Number} geomId id of the row
- * @param {module:geom/geometryData~GeometryData} geomData GeometryData to index
- * @return {Boolean} success
- */
- FeatureTableIndex.prototype.indexRow = function(tableIndex, geomId, geomData) {
- if (!geomData) return false;
- var envelope = geomData.envelope;
- if (!envelope) {
- var geometry = geomData.geometry;
- if (geometry) {
- envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geometry);
- }
- }
- if (envelope) {
- var geometryIndex = this.geometryIndexDao.populate(tableIndex, geomId, envelope);
- return this.geometryIndexDao.createOrUpdate(geometryIndex);
- } else {
- return false;
- }
- };
- /**
- * Update the last time this feature table was indexed
- * @param {module:extension/index~TableIndex} tableIndex TableIndex
- * @return {Object} update status
- */
- FeatureTableIndex.prototype.updateLastIndexed = function(tableIndex) {
- if (!tableIndex) {
- tableIndex = new TableIndex();
- tableIndex.table_name = this.tableName;
- }
- tableIndex.last_indexed = new Date().toISOString();
- var updateIndex = this.tableIndexDao.createOrUpdate(tableIndex);
- return updateIndex;
- }
- /**
- * Query the index with the specified bounding box and projection
- * @param {module:boundingBox~BoundingBox} boundingBox bounding box to query for
- * @param {string} projection projection the boundingBox is in
- * @return {Iterable}
- */
- FeatureTableIndex.prototype.queryWithBoundingBox = function(boundingBox, projection) {
- var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection);
- var envelope = projectedBoundingBox.buildEnvelope();
- return this.queryWithGeometryEnvelope(envelope);
- }
- /**
- * Query witha geometry envelope
- * @param {Envelope} envelope envelope
- * @return {Iterable}
- */
- FeatureTableIndex.prototype.queryWithGeometryEnvelope = function(envelope) {
- if (this.rtreeIndexed) {
- return this.rtreeIndexDao.queryWithGeometryEnvelope(envelope);
- } else {
- return this.geometryIndexDao.queryWithGeometryEnvelope(envelope);
- }
- }
- /**
- * Count the index with the specified bounding box and projection
- * @param {module:boundingBox~BoundingBox} boundingBox bounding box to query for
- * @param {string} projection projection the boundingBox is in
- * @return {Number}
- */
- FeatureTableIndex.prototype.countWithBoundingBox = function(boundingBox, projection) {
- var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection);
- var envelope = projectedBoundingBox.buildEnvelope();
- return this.countWithGeometryEnvelope(envelope);
- };
- /**
- * Count with a geometry envelope
- * @param {Envelope} envelope envelope
- * @return {Number}
- */
- FeatureTableIndex.prototype.countWithGeometryEnvelope = function(envelope) {
- if (this.rtreeIndexed) {
- return this.rtreeIndexDao.countWithGeometryEnvelope(envelope);
- } else {
- return this.geometryIndexDao.countWithGeometryEnvelope(envelope);
- }
- };
- FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR = 'nga';
- FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR = 'geometry_index';
- FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/geometry-index.html';
- module.exports = FeatureTableIndex;
- },{"../../core/contents":8,"../../geom/envelopeBuilder":72,"../baseExtension":20,"../index":25,"../rtree":44,"./geometryIndex":27,"./tableIndex":28,"proj4":285,"util":343}],27:[function(require,module,exports){
- /**
- * GeometryIndexDao module.
- * @module extension/index
- */
- var Dao = require('../../dao/dao')
- , TableIndexDao = require('./tableIndex').TableIndexDao
- , TableCreator = require('../../db/tableCreator');
- var util = require('util');
- /**
- * Geometry Index object, for indexing data within user tables
- * @class
- */
- var GeometryIndex = function() {
- /**
- * Name of the table
- * @member {String}
- */
- this.table_name;
- /**
- * Geometry Id column
- * @member {Number}
- */
- this.geom_id;
- /**
- * Min X
- * @member {Number}
- */
- this.min_x;
- /**
- * Max X
- * @member {Number}
- */
- this.max_x;
- /**
- * Min Y
- * @member {Number}
- */
- this.min_y;
- /**
- * Max Y
- * @member {Number}
- */
- this.max_y;
- /**
- * Min Z
- * @member {Number}
- */
- this.min_z;
- /**
- * Max Z
- * @member {Number}
- */
- this.max_z;
- /**
- * Min M
- * @member {Number}
- */
- this.min_m;
- /**
- * Max M
- * @member {Number}
- */
- this.max_m;
- }
- GeometryIndex.prototype.setTableIndex = function(tableIndex) {
- this.table_name = tableIndex.table_name;
- }
- /**
- * Geometry Index Data Access Object
- * @class
- * @extends {module:dao/dao~Dao}
- */
- var GeometryIndexDao = function(geoPackage, featureDao) {
- Dao.call(this, geoPackage);
- this.featureDao = featureDao;
- };
- util.inherits(GeometryIndexDao, Dao);
- GeometryIndexDao.prototype.createObject = function() {
- return new GeometryIndex();
- };
- /**
- * Get the Table Index of the Geometry Index
- *
- * @param {module:extension/index~GeometryIndex} geometryIndex geometry index
- * @return {module:extension/index~TableIndex}
- */
- GeometryIndexDao.prototype.getTableIndex = function(geometryIndex) {
- var dao = this.geoPackage.getTableIndexDao();
- return dao.queryForId(geometryIndex.tableName);
- };
- /**
- * Query by table name
- * @param {string} tableName table name
- * @return {Iterable}
- */
- GeometryIndexDao.prototype.queryForTableName = function(tableName) {
- return this.queryForEach(GeometryIndexDao.COLUMN_TABLE_NAME, tableName);
- };
- /**
- * Count by table name
- *
- * @param tableName table name
- *
- * @return count
- */
- /**
- * Count by table name
- * @param {string} tableName table name
- * @return {Number}
- */
- GeometryIndexDao.prototype.countByTableName = function(tableName) {
- return this.count(GeometryIndexDao.COLUMN_TABLE_NAME, tableName);
- };
- /**
- * Populate a new geometry index from an envelope
- *
- * @param tableIndex table index
- * @param geomId geometry id
- * @param envelope geometry envelope
- * @param callback called with results of the populate
- */
- /**
- * Populate a new goemetry index from an envelope
- * @param {module:extension/index~TableIndex} tableIndex TableIndex
- * @param {Number} geometryId id of the geometry
- * @param {Object} envelope envelope to store
- * @return {module:extension/index~GeometryIndex}
- */
- GeometryIndexDao.prototype.populate = function(tableIndex, geometryId, envelope) {
- var geometryIndex = new GeometryIndex();
- geometryIndex.setTableIndex(tableIndex);
- geometryIndex.geom_id = geometryId;
- geometryIndex.min_x = envelope.minX;
- geometryIndex.min_y = envelope.minY;
- geometryIndex.max_x = envelope.maxX;
- geometryIndex.max_y = envelope.maxY;
- if (envelope.hasZ) {
- geometryIndex.min_z = envelope.minZ;
- geometryIndex.max_z = envelope.maxZ;
- }
- if (envelope.hasM) {
- geometryIndex.min_m = envelope.minM;
- geometryIndex.max_m = envelope.maxM;
- }
- return geometryIndex;
- };
- /**
- * Create the GeometryIndex table
- * @return {Promise}
- */
- GeometryIndexDao.prototype.createTable = function() {
- var exists = this.isTableExists();
- if (exists) return Promise.resolve(true);
- var tc = new TableCreator(this.geoPackage);
- return tc.createGeometryIndex();
- }
- /**
- * Query the index with an envelope
- * @param {Object} envelope envelope
- * @param {Number} envelope.minX min x
- * @param {Number} envelope.maxX max x
- * @param {Number} envelope.minY min y
- * @param {Number} envelope.maxY max y
- * @return {Iterable}
- */
- GeometryIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) {
- var tableName = this.featureDao.gpkgTableName;
- var where = '';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, tableName);
- where += ' and ';
- var minXLessThanMaxX = envelope.minX < envelope.maxX;
- if (minXLessThanMaxX) {
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<=');
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>=');
- } else {
- where += '(';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<=');
- where += ' or ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>=');
- where += ' or ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.minX, '>=');
- where += ' or ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.maxX, '<=');
- where += ')';
- }
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Y, envelope.maxY, '<=');
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Y, envelope.minY, '>=');
- var whereArgs = [tableName, envelope.maxX, envelope.minX];
- if (!minXLessThanMaxX) {
- whereArgs.push(envelope.minX, envelope.maxX);
- }
- whereArgs.push(envelope.maxY, envelope.minY);
- if (envelope.hasZ) {
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Z, envelope.minZ, '<=');
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Z, envelope.maxZ, '>=');
- whereArgs.push(envelope.maxZ, envelope.minZ);
- }
- if (envelope.hasM) {
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_M, envelope.minM, '<=');
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_M, envelope.maxM, '>=');
- whereArgs.push(envelope.maxM, envelope.minM);
- }
- return {
- join: 'inner join "' + tableName + '" on "' + tableName + '".' + this.featureDao.idColumns[0] + ' = ' + GeometryIndexDao.COLUMN_GEOM_ID,
- where,
- whereArgs,
- tableNameArr: ['"' + tableName + '".*']
- };
- };
- GeometryIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) {
- var result = this._generateGeometryEnvelopeQuery(envelope);
- return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);
- };
- GeometryIndexDao.prototype.countWithGeometryEnvelope = function(envelope) {
- var result = this._generateGeometryEnvelopeQuery(envelope);
- return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);
- };
- GeometryIndexDao.TABLE_NAME = "nga_geometry_index";
- GeometryIndexDao.COLUMN_TABLE_NAME = GeometryIndexDao.TABLE_NAME + ".table_name";
- GeometryIndexDao.COLUMN_GEOM_ID = GeometryIndexDao.TABLE_NAME + ".geom_id";
- GeometryIndexDao.COLUMN_MIN_X = GeometryIndexDao.TABLE_NAME + ".min_x";
- GeometryIndexDao.COLUMN_MAX_X = GeometryIndexDao.TABLE_NAME + ".max_x";
- GeometryIndexDao.COLUMN_MIN_Y = GeometryIndexDao.TABLE_NAME + ".min_y";
- GeometryIndexDao.COLUMN_MAX_Y = GeometryIndexDao.TABLE_NAME + ".max_y";
- GeometryIndexDao.COLUMN_MIN_Z = GeometryIndexDao.TABLE_NAME + ".min_z";
- GeometryIndexDao.COLUMN_MAX_Z = GeometryIndexDao.TABLE_NAME + ".max_z";
- GeometryIndexDao.COLUMN_MIN_M = GeometryIndexDao.TABLE_NAME + ".min_m";
- GeometryIndexDao.COLUMN_MAX_M = GeometryIndexDao.TABLE_NAME + ".max_m";
- GeometryIndexDao.prototype.gpkgTableName = GeometryIndexDao.TABLE_NAME;
- GeometryIndexDao.prototype.idColumns = ['table_name', 'geom_id'];
- module.exports.GeometryIndexDao = GeometryIndexDao;
- module.exports.GeometryIndex = GeometryIndex;
- },{"../../dao/dao":11,"../../db/tableCreator":19,"./tableIndex":28,"util":343}],28:[function(require,module,exports){
- /**
- * TableIndexDao module.
- * @module extension/index
- */
- var Dao = require('../../dao/dao')
- , TableCreator = require('../../db/tableCreator');
- var util = require('util');
- /**
- * Table Index object, for indexing data within user tables
- * @class TableIndex
- */
- var TableIndex = function() {
- /**
- * Name of the table
- * @member {String}
- */
- this.table_name;
- /**
- * Last indexed date
- * @member {String}
- */
- this.last_indexed;
- }
- /**
- * Table Index Data Access Object
- * @class
- * @extends {module:dao/dao~Dao}
- * @param {module:geoPackage~GeoPackage} geoPackage The GeoPackage object
- */
- var TableIndexDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- };
- util.inherits(TableIndexDao, Dao);
- /**
- * Create a new TableIndex object
- * @return {module:extension/index~TableIndex}
- */
- TableIndexDao.prototype.createObject = function() {
- return new TableIndex();
- };
- TableIndexDao.prototype.getGeometryIndices = function(tableIndex) {
- };
- TableIndexDao.prototype.getGeometryIndexCount = function(tableIndex) {
- };
- /**
- * Creates the tables necessary
- * @return {Promise}
- */
- TableIndexDao.prototype.createTable = function() {
- var tc = new TableCreator(this.geoPackage);
- return tc.createTableIndex();
- }
- TableIndexDao.TABLE_NAME = "nga_table_index";
- TableIndexDao.COLUMN_TABLE_NAME = "table_name";
- TableIndexDao.COLUMN_LAST_INDEXED = "last_indexed";
- TableIndexDao.prototype.gpkgTableName = TableIndexDao.TABLE_NAME;
- TableIndexDao.prototype.idColumns = [TableIndexDao.COLUMN_TABLE_NAME];
- module.exports.TableIndexDao = TableIndexDao;
- module.exports.TableIndex = TableIndex;
- },{"../../dao/dao":11,"../../db/tableCreator":19,"util":343}],29:[function(require,module,exports){
- /**
- * MetadataExtension module.
- * @module extension/metadata
- */
- var BaseExtension = require('../baseExtension')
- , Extension = require('../.').Extension;
- var util = require('util');
- /**
- * Metadata extension
- * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object
- * @class
- * @extends {module:extension/baseExtension~BaseExtension}
- */
- var MetadataExtension = function(geoPackage) {
- BaseExtension.call(this, geoPackage);
- this.extensionName = MetadataExtension.EXTENSION_NAME;
- this.extensionDefinition = MetadataExtension.EXTENSION_Metadata_DEFINITION;
- }
- util.inherits(MetadataExtension, BaseExtension);
- /**
- * Get or create the metadata extension
- * @return {Promise}
- */
- MetadataExtension.prototype.getOrCreateExtension = function() {
- return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE);
- };
- MetadataExtension.EXTENSION_NAME = 'gpkg_metadata';
- MetadataExtension.EXTENSION_Metadata_AUTHOR = 'gpkg';
- MetadataExtension.EXTENSION_Metadata_NAME_NO_AUTHOR = 'metadata';
- MetadataExtension.EXTENSION_Metadata_DEFINITION = 'http://www.geopackage.org/spec/#extension_metadata';
- module.exports.MetadataExtension = MetadataExtension;
- },{"../.":25,"../baseExtension":20,"util":343}],30:[function(require,module,exports){
- /**
- * @module extension/relatedTables
- */
- /**
- * Dublin Core Metadata Initiative term types
- * @class
- */
- function DublinCoreType() {}
- module.exports = DublinCoreType;
- /**
- * A point or period of time associated with an event in the lifecycle of
- * the resource.
- * @type {Object}
- */
- DublinCoreType.DATE = {
- name: 'date'
- };
- /**
- * An account of the resource.
- * @type {Object}
- */
- DublinCoreType.DESCRIPTION = {
- name: 'description'
- };
- /**
- * The file format, physical medium, or dimensions of the resource.
- * @type {Object}
- */
- DublinCoreType.FORMAT = {
- name: 'format',
- synonyms: ['content_type']
- };
- /**
- * An unambiguous reference to the resource within a given context.
- * @type {Object}
- */
- DublinCoreType.IDENTIFIER = {
- name: 'identifier',
- synonyms: ['id']
- };
- /**
- * A related resource from which the described resource is derived.
- * @type {Object}
- */
- DublinCoreType.SOURCE = {
- name: 'source'
- };
- /**
- * A name given to the resource.
- * @type {Object}
- */
- DublinCoreType.TITLE = {
- name: 'title'
- };
- /**
- * Get the Dublin Core Type from the name
- * @param {string} name name
- * @return {module:extension/relatedTables~DublinCoreType}
- */
- DublinCoreType.fromName = function(name) {
- for (var prop in module.exports) {
- var type = module.exports[prop];
- if (type.name === name) {
- return type;
- }
- }
- for (var prop in module.exports) {
- var type = module.exports[prop];
- if (type.synonyms) {
- for (var i = 0; i < type.synonyms.length; i++) {
- if (type.synonyms[i] === name) {
- return type;
- }
- }
- }
- }
- }
- },{}],31:[function(require,module,exports){
- /**
- * @module extension/relatedTables
- */
- var Dao = require('../../dao/dao')
- , ColumnValues = require('../../dao/columnValues');
- var util = require('util');
- /**
- * Describes the relationships between a base table, a related data table, and a
- * mapping table
- * @class ExtendedRelation
- */
- var ExtendedRelation = function() {
- /**
- * Autoincrement primary key
- * @member {Number}
- */
- this.id;
- /**
- * Name of the table containing the base data (e.g., features) to relate
- * @member {String}
- */
- this.base_table_name;
- /**
- * Name of the primary key column in base_table_name
- * @member {String}
- */
- this.base_primary_column;
- /**
- * Name of the table containing the related content
- * @member {String}
- */
- this.related_table_name;
- /**
- * Name of the primary key column in related_table_name
- * @member {String}
- */
- this.related_primary_column;
- /**
- * Name (profile) of the relationship
- * @member {String}
- */
- this.relation_name;
- /**
- * Name of a mapping table
- * @member {String}
- */
- this.mapping_table_name;
- }
- /**
- * Extended Relations Data Access Object
- * @class ExtendedRelationDao
- * @extends {module:dao/dao~Dao}
- */
- var ExtendedRelationDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- };
- util.inherits(ExtendedRelationDao, Dao);
- /**
- * Create a {module:extension/relatedTables~ExtendedRelation} object
- * @return {module:extension/relatedTables~ExtendedRelation}
- */
- ExtendedRelationDao.prototype.createObject = function() {
- return new ExtendedRelation();
- };
- /**
- * Create the necessary tables for this dao
- * @return {Promise}
- */
- ExtendedRelationDao.prototype.createTable = function() {
- var tc = this.geoPackage.getTableCreator();
- return tc.createExtendedRelations();
- }
- /**
- * Get all the base table names
- * @return {string[]}
- */
- ExtendedRelationDao.prototype.getBaseTables = function() {
- var baseTables = [];
- var baseTableColumns = this.queryForColumns('base_table_name');
- for (var i = 0; i < baseTableColumns.length; i++) {
- baseTables.push(baseTableColumns[i].base_table_name);
- }
- return baseTables;
- };
- /**
- * Get all the related table names
- * @return {string[]}
- */
- ExtendedRelationDao.prototype.getRelatedTables = function() {
- var relatedTables = [];
- var relatedTableColumns = this.queryForColumns('related_table_name');
- for (var i = 0; i < relatedTableColumns.length; i++) {
- relatedTables.push(relatedTableColumns[i].related_table_name);
- }
- return relatedTables;
- };
- /**
- * Get all relations for the given base table name
- * @param {string} baseTable base table name
- * @return {module:extension/relatedTables~ExtendedRelation[]}
- */
- ExtendedRelationDao.prototype.getBaseTableRelations = function(baseTable) {
- return this.queryForAllEq(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable);
- }
- /**
- * Get all relations for the given related table name
- * @param {string} relatedTable related table name
- * @return {module:extension/relatedTables~ExtendedRelation[]}
- */
- ExtendedRelationDao.prototype.getRelatedTableRelations = function(relatedTable) {
- return this.queryForAllEq(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTable);
- }
- /**
- * Get all relations for the base table with the relation name
- * @param {string} baseTable base table name
- * @param {string} name relation name
- * @return {module:extension/relatedTables~ExtendedRelation[]}
- */
- ExtendedRelationDao.prototype.getBaseTableRelationsWithName = function(baseTable, name) {
- var fields = new ColumnValues();
- fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable);
- fields.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, name);
- var where = this.buildWhere(fields, 'and');
- var whereArgs = this.buildWhereArgs(fields);
- return this.queryForAll(where, whereArgs);
- }
- /**
- * Get all relations to the table. Returns relations where the table is the base table and relations where the table is the related table.
- * @param {string} table table name to query for
- * @return {module:extension/relatedTables~ExtendedRelation[]}
- */
- ExtendedRelationDao.prototype.getTableRelations = function(table) {
- var fields = new ColumnValues();
- fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, table);
- fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, table);
- var where = this.buildWhere(fields, 'or');
- var whereArgs = this.buildWhereArgs(fields);
- return this.queryForAll(where, whereArgs);
- }
- /**
- * Gets all relationships in the GeoPackage with an optional base table name and an optional base id
- * @param {String} [baseTableName] base table name
- * @param {String} [relatedTableName] related table name
- * @param {String} [mappingTableName] mapping table name
- * @return {module:extension/relatedTables~ExtendedRelation[]}
- */
- ExtendedRelationDao.prototype.getRelations = function(baseTableName, relatedTableName, mappingTableName) {
- var fields = new ColumnValues();
- fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTableName);
- fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTableName);
- fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName);
- var where = this.buildWhereLike(fields, 'and');
- var whereArgs = this.buildWhereArgs(fields);
- return this.queryForAll(where, whereArgs);
- };
- /**
- * Get all relations by the mapping table name
- * @param {string} mappingTableName name of the mapping table
- * @return {module:extension/relatedTables~ExtendedRelation[]}
- */
- ExtendedRelationDao.prototype.queryByMappingTableName = function(mappingTableName) {
- var fields = new ColumnValues();
- fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName);
- var where = this.buildWhere(fields, 'and');
- var whereArgs = this.buildWhereArgs(fields);
- return this.queryForAll(where, whereArgs);
- }
- ExtendedRelationDao.TABLE_NAME = 'gpkgext_relations';
- ExtendedRelationDao.COLUMN_ID = ExtendedRelationDao.TABLE_NAME + '.id';
- ExtendedRelationDao.COLUMN_BASE_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.base_table_name';
- ExtendedRelationDao.COLUMN_BASE_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.base_primary_column';
- ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.related_table_name';
- ExtendedRelationDao.COLUMN_RELATED_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.related_primary_column';
- ExtendedRelationDao.COLUMN_RELATION_NAME = ExtendedRelationDao.TABLE_NAME + '.relation_name';
- ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.mapping_table_name';
- ExtendedRelationDao.prototype.gpkgTableName = ExtendedRelationDao.TABLE_NAME;
- ExtendedRelationDao.prototype.idColumns = ['id'];
- module.exports.ExtendedRelationDao = ExtendedRelationDao;
- module.exports.ExtendedRelation = ExtendedRelation;
- },{"../../dao/columnValues":10,"../../dao/dao":11,"util":343}],32:[function(require,module,exports){
- /**
- * RelatedTablesExtension module.
- * @module extension/relatedTables
- * @see module:extension/BaseExtension
- */
- var BaseExtension = require('../baseExtension')
- , Extension = require('../.').Extension
- , ColumnValues = require('../../dao/columnValues')
- , OptionBuilder = require('../../optionBuilder')
- , ExtendedRelationDao = require('./extendedRelation').ExtendedRelationDao
- , ExtendedRelation = require('./extendedRelation').ExtendedRelation
- , MediaDao = require('./mediaDao')
- , MediaTable = require('./mediaTable')
- , SimpleAttributesDao = require('./simpleAttributesDao')
- , SimpleAttributesTable = require('./simpleAttributesTable')
- , UserMappingTable = require('./userMappingTable')
- , UserMappingDao = require('./userMappingDao')
- , UserCustomDao = require('../../user/custom/userCustomDao')
- , UserDao = require('../../user/userDao')
- , UserTableReader = require('../../user/userTableReader')
- , RelationType = require('./relationType')
- , ContentsDao = require('../../core/contents').ContentsDao
- , Contents = require('../../core/contents').Contents
- , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao;
- var util = require('util');
- /**
- * Related Tables Extension
- * @param {module:geoPackage~GeoPackage} geoPackage the GeoPackage object
- * @class
- * @extends {module:extension/baseExtension~BaseExtension}
- */
- var RelatedTablesExtension = function(geoPackage) {
- BaseExtension.call(this, geoPackage);
- this.extendedRelationDao = geoPackage.getExtendedRelationDao();
- }
- util.inherits(RelatedTablesExtension, BaseExtension);
- /**
- * Get or create the extension
- * @return {Promise}
- */
- RelatedTablesExtension.prototype.getOrCreateExtension = function() {
- return this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, 'gpkgext_relations', undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE)
- .then(function() {
- return this.extendedRelationDao.createTable();
- }.bind(this));
- };
- /**
- * Get or create the extension for the mapping table
- * @param {string} mappingTableName user mapping table
- * @return {Promise}
- */
- RelatedTablesExtension.prototype.getOrCreateMappingTable = function(mappingTableName) {
- return this.getOrCreateExtension()
- .then(function() {
- this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, mappingTableName, undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE);
- }.bind(this));
- }
- /**
- * Set the contents in the UserRelatedTable
- * @param {module:extension/relatedTables~UserRelatedTable} userRelatedTable user related table
- */
- RelatedTablesExtension.prototype.setContents = function(userRelatedTable) {
- var contents = this.geoPackage.getContentsDao().queryForId(userRelatedTable.table_name);
- userRelatedTable.setContents(contents);
- }
- /**
- * Reads the user table and creates a UserCustomDao
- * @param {string} tableName table name to reader
- * @param {string[]} requiredColumns required columns
- * @return {module:user/custom~UserCustomDao}
- */
- RelatedTablesExtension.prototype.getUserDao = function(tableName, requiredColumns) {
- return UserCustomDao.readTable(this.geoPackage, tableName, requiredColumns);
- }
- /**
- * Gets the UserMappingDao from the mapping table name
- * @param {string|module:extension/relatedTables~ExtendedRelation} tableName user mapping table name or ExtendedRelation object
- * @return {module:extension/relatedTables~UserMappingDao}
- */
- RelatedTablesExtension.prototype.getMappingDao = function(tableName) {
- if (tableName.mapping_table_name) {
- tableName = tableName.mapping_table_name;
- }
- return new UserMappingDao(this.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage);
- }
- /**
- * Gets all relationships in the GeoPackage with an optional base table name and an optional base id
- * @param {string} [baseTableName] base table name
- * @return {module:extension/relatedTables~ExtendedRelation[]}
- */
- RelatedTablesExtension.prototype.getRelationships = function(baseTableName) {
- if (this.extendedRelationDao.isTableExists()) {
- if (baseTableName) {
- return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(baseTableName);
- }
- return this.extendedRelationDao.queryForAll();
- }
- return [];
- }
- /**
- * Gets all relationships in the GeoPackage with an optional base table name and an optional base id
- * @param {String} [baseTableName] base table name
- * @param {String} [relatedTableName] related table name
- * @param {String} [mappingTableName] mapping table name
- * @return {Boolean}
- */
- RelatedTablesExtension.prototype.hasRelations = function(baseTableName, relatedTableName, mappingTableName) {
- var relations = [];
- if (this.extendedRelationDao.isTableExists()) {
- relations = this.extendedRelationDao.getRelations(baseTableName, relatedTableName, mappingTableName);
- }
- return relations;
- };
- RelatedTablesExtension.prototype.getRelatedRows = function(baseTableName, baseId) {
- var relationships = this.getRelationships(baseTableName);
- for (var i = 0; i < relationships.length; i++) {
- var relation = relationships[i];
- var mappingRows = this.getMappingRowsForBase(relation.mapping_table_name, baseId);
- relation.mappingRows = mappingRows;
- var userDao;
- // TODO do this for all known types
- if (relation.relation_name === 'media') {
- userDao = MediaDao.readTable(this.geoPackage, relation.related_table_name);
- } else {
- userDao = UserDao.readTable(this.geoPackage, relation.related_table_name);
- }
- for (var m = 0; m < mappingRows.length; m++) {
- var mappingRow = mappingRows[m];
- mappingRow.row = userDao.queryForId(mappingRow.related_id);
- }
- }
- return relationships;
- }
- RelatedTablesExtension.RelationshipBuilder = function() {
- return OptionBuilder([
- 'baseTableName',
- 'relatedTableName',
- 'userMappingTable',
- 'mappingTableName',
- 'relationName',
- 'relationAuthor',
- 'relationType',
- 'relatedTable'
- ]);
- }
- /**
- * Convience object to build a Relationship object for querying and adding
- * @typedef {Object} module:extension/relatedTables~Relationship
- * @property {module:extension/relatedTables~RelationType} relationType type of relationship
- * @property {string} baseTableName base table name
- * @property {string} relatedTableName related table name
- * @property {string} relationAuthor relationship author
- * @property {string} mappingTableName mapping table name
- * @property {module:extension/relatedTables~UserMappingTable} userMappingTable UserMappingTable
- * @property {module:extension/relatedTables~UserRelatedTable} relatedTable UserRelatedTable
- */
- RelatedTablesExtension.prototype.getRelationshipBuilder = function() {
- return RelatedTablesExtension.RelationshipBuilder();
- }
- /**
- * Adds a relationship to the GeoPackage
- * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add
- * @return {Promise<module:extension/relatedTables~ExtendedRelation|Boolean>}
- */
- RelatedTablesExtension.prototype.addRelationship = function(relationship) {
- var extendedRelation = this.extendedRelationDao.createObject();
- var userMappingTable = relationship.userMappingTable;
- if (relationship.hasOwnProperty('base_table_name')) {
- extendedRelation = relationship;
- userMappingTable = UserMappingTable.create(extendedRelation.mapping_table_name);
- } else {
- if (relationship.relationType) {
- relationship.relationName = relationship.relationType.name;
- }
- if (relationship.relationAuthor) {
- relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName);
- }
- if (relationship.mappingTableName) {
- userMappingTable = UserMappingTable.create(relationship.mappingTableName);
- }
- if (relationship.relatedTable) {
- this.createRelatedTable(relationship.relatedTable);
- relationship.relatedTableName = relationship.relatedTable.table_name;
- relationship.relationName = relationship.relatedTable.relation_name;
- }
- extendedRelation.base_table_name = relationship.baseTableName;
- extendedRelation.base_primary_column = this.getPrimaryKeyColumnName(relationship.baseTableName);
- extendedRelation.related_table_name = relationship.relatedTableName;
- extendedRelation.related_primary_column = this.getPrimaryKeyColumnName(relationship.relatedTableName);
- extendedRelation.mapping_table_name = userMappingTable.table_name;
- extendedRelation.relation_name = relationship.relationName;
- }
- if (!this.validateRelationship(extendedRelation.base_table_name, extendedRelation.related_table_name, extendedRelation.relation_name)) {
- return Promise.resolve(false);
- }
- return this.createUserMappingTable(userMappingTable)
- .then(function() {
- var mappingTableRelations = this.extendedRelationDao.queryByMappingTableName(extendedRelation.mapping_table_name);
- if (mappingTableRelations.length) {
- return mappingTableRelations[0];
- }
- this.extendedRelationDao.create(extendedRelation);
- return extendedRelation;
- }.bind(this));
- }
- /**
- * Get the primary key column name from the specified table
- * @param {string} tableName table name
- * @return {string}
- */
- RelatedTablesExtension.prototype.getPrimaryKeyColumnName = function(tableName) {
- var reader = new UserTableReader(tableName);
- var table = reader.readTable(this.geoPackage.getDatabase());
- return table.getPkColumn().name;
- }
- /**
- * Adds a features relationship between the base feature and related feature
- * table. Creates a default user mapping table if needed.
- * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add
- * @return {Promise<module:extension/relatedTables~ExtendedRelation>}
- */
- RelatedTablesExtension.prototype.addFeaturesRelationship = function(relationship) {
- if (relationship.hasOwnProperty('relation_name')) {
- relationship.relation_name = relationship.relation_name || RelationType.FEATURES.name;
- } else {
- relationship.relationType = RelationType.FEATURES;
- }
- return this.addRelationship(relationship);
- }
- /**
- * Adds a tiles relationship between the base table and related tile
- * table. Creates a default user mapping table if needed.
- * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add
- * @return {Promise<module:extension/relatedTables~ExtendedRelation>}
- */
- RelatedTablesExtension.prototype.addTilesRelationship = function(relationship) {
- if (relationship.hasOwnProperty('relation_name')) {
- relationship.relation_name = relationship.relation_name || RelationType.TILES.name;
- } else {
- relationship.relationType = RelationType.TILES;
- }
- return this.addRelationship(relationship);
- }
- /**
- * Adds an attributes relationship between the base table and related attribute
- * table. Creates a default user mapping table if needed.
- * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add
- * @return {Promise<module:extension/relatedTables~ExtendedRelation>}
- */
- RelatedTablesExtension.prototype.addAttributesRelationship = function(relationship) {
- if (relationship.hasOwnProperty('relation_name')) {
- relationship.relation_name = relationship.relation_name || RelationType.ATTRIBUTES.name;
- } else {
- relationship.relationType = RelationType.ATTRIBUTES;
- }
- return this.addRelationship(relationship);
- }
- /**
- * Adds a simple attributes relationship between the base table and user
- * simple attributes related table. Creates a default user mapping table and
- * the simple attributes table if needed.
- * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add
- * @return {Promise<module:extension/relatedTables~ExtendedRelation>}
- */
- RelatedTablesExtension.prototype.addSimpleAttributesRelationship = function(relationship) {
- if (relationship.hasOwnProperty('relation_name')) {
- relationship.relation_name = relationship.relation_name || RelationType.SIMPLE_ATTRIBUTES.name;
- } else {
- relationship.relationType = RelationType.SIMPLE_ATTRIBUTES;
- }
- return this.addRelationship(relationship);
- }
- /**
- * Adds a media relationship between the base table and user media related
- * table. Creates a default user mapping table and the media table if
- * needed.
- * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add
- * @return {Promise<module:extension/relatedTables~ExtendedRelation>}
- */
- RelatedTablesExtension.prototype.addMediaRelationship = function(relationship) {
- if (relationship.hasOwnProperty('relation_name')) {
- relationship.relation_name = relationship.relation_name || RelationType.MEDIA.name;
- } else {
- relationship.relationType = RelationType.MEDIA;
- }
- return this.addRelationship(relationship);
- }
- /**
- * Remove a specific relationship from the GeoPackage
- * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to remove
- * @return {Number} number of relationships removed
- */
- RelatedTablesExtension.prototype.removeRelationship = function(relationship) {
- // this is an ExtendedRelation
- if (relationship.hasOwnProperty('base_table_name')) {
- relationship.baseTableName = relationship.base_table_name;
- relationship.relatedTableName = relationship.related_table_name;
- relationship.relationName = relationship.relation_name;
- relationship.userMappingTable = relationship.mapping_table_name;
- }
- if (relationship.relationType) {
- relationship.relationName = relationship.relationType.name;
- }
- if (relationship.relationAuthor) {
- relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName);
- }
- if (this.extendedRelationDao.isTableExists()) {
- var values = new ColumnValues();
- values.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, relationship.baseTableName);
- values.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relationship.relatedTableName);
- values.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, relationship.relationName);
- var iterator = this.extendedRelationDao.queryForFieldValues(values);
- var tablesToDelete = [];
- for (var extendedRelation of iterator) {
- tablesToDelete.push(extendedRelation.mapping_table_name);
- }
- tablesToDelete.forEach(function(table) {
- this.geoPackage.deleteTable(table);
- }.bind(this));
- this.extensionsDao.deleteByExtensionAndTableName(RelatedTablesExtension.EXTENSION_NAME, relationship.userMappingTable);
- return this.extendedRelationDao.delete(extendedRelation);
- }
- return 0;
- }
- /**
- * Create a default user mapping table and extension row if either does not
- * exist. When not created, there is no guarantee that an existing table has
- * the same schema as the provided tabled.
- * @param {string|module:extension/relatedTables~UserMappingTable} userMappingTableOrName user mapping table or name
- * @return {Promise<Boolean>}
- */
- RelatedTablesExtension.prototype.createUserMappingTable = function(userMappingTableOrName) {
- var userMappingTable = userMappingTableOrName;
- if (typeof userMappingTableOrName === 'string') {
- userMappingTable = UserMappingTable.create(userMappingTableOrName);
- }
- return this.getOrCreateMappingTable(userMappingTable.table_name)
- .then(function(){
- if (!this.geoPackage.isTable(userMappingTable.table_name)) {
- return this.geoPackage.tableCreator.createUserTable(userMappingTable);
- }
- return true;
- }.bind(this));
- }
- /**
- * Create a user related table if it does not exist. When not created, there
- * is no guarantee that an existing table has the same schema as the
- * provided tabled.
- * @param {module:extension/relatedTables~UserRelatedTable} relatedTable user related table
- * @return {Boolean} true if the table now exists
- */
- RelatedTablesExtension.prototype.createRelatedTable = function(relatedTable) {
- if (!this.geoPackage.isTable(relatedTable.table_name)) {
- this.geoPackage.tableCreator.createUserTable(relatedTable);
- var contents = new Contents();
- contents.table_name = relatedTable.table_name;
- contents.data_type = relatedTable.data_type;
- contents.identifier = relatedTable.table_name;
- this.geoPackage.getContentsDao().create(contents);
- var refreshed = this.geoPackage.getContentsDao().refresh(contents);
- relatedTable.setContents(refreshed);
- }
- return true;
- }
- /**
- * Validate that the relation name is valid between the base and related tables
- * @param {string} baseTableName base table name
- * @param {string} relatedTableName related table name
- * @param {string} relationName relation name
- * @return {Boolean}
- */
- RelatedTablesExtension.prototype.validateRelationship = function(baseTableName, relatedTableName, relationName) {
- // Verify the base and related tables exist
- if (!this.geoPackage.isTable(baseTableName)) {
- console.log('Base relationship table does not exist: ' + baseTableName + ', Relation: ' + relationName);
- return false;
- }
- if (!this.geoPackage.isTable(relatedTableName)) {
- console.log('Related relationship table does not exist: ' + relatedTableName + ', Relation: ' + relationName);
- return false;
- }
- // Verify spec defined relation types
- var relationType = RelationType.fromName(relationName);
- if (relationType) {
- if (!this.geoPackage.isTableType(relationType.dataType, relatedTableName)) {
- console.log('The related table must be a ' + relationType.dataType + ' table. Related Table: ' + relatedTableName + ', Type: ' + this.geoPackage.getTableType(relatedTableName));
- return false;
- }
- return true;
- }
- return true;
- }
- /**
- * Link related Ids
- * @param {string} baseTableName base table name
- * @param {Number} baseId base row id
- * @param {string} relatedTableName related table name
- * @param {Number} relatedId related row id
- * @param {module:extension/relatedTables~RelationType} relationType relation type
- * @return {Promise}
- */
- RelatedTablesExtension.prototype.linkRelatedIds = function(baseTableName, baseId, relatedTableName, relatedId, relationType) {
- var baseDao = UserDao.readTable(this.geoPackage, baseTableName);
- var relatedDao = UserDao.readTable(this.geoPackage, relatedTableName);
- var baseRow = baseDao.queryForId(baseId);
- var relatedRow = relatedDao.queryForId(relatedId);
- return baseDao.linkRelatedRow(baseRow, relatedRow, relationType);
- }
- /**
- * Get the related id mappings for the base id
- * @param {string} mappingTableName mapping table name
- * @param {Number} baseId base id
- * @return {Number[]} ids of related items
- */
- RelatedTablesExtension.prototype.getMappingsForBase = function(mappingTableName, baseId) {
- var mappingDao = this.getMappingDao(mappingTableName);
- var results = mappingDao.queryByBaseId(baseId);
- var relatedIds = [];
- for (var i = 0; i < results.length; i++) {
- var row = mappingDao.getUserMappingRow(results[i]);
- relatedIds.push(row.getRelatedId());
- }
- return relatedIds;
- }
- /**
- * Get the related id mapping rows for the base id
- * @param {string} mappingTableName mapping table name
- * @param {Number} baseId base id
- * @return {module:extension/relatedTables~UserMappingRow[]} user mapping rows
- */
- RelatedTablesExtension.prototype.getMappingRowsForBase = function(mappingTableName, baseId) {
- var mappingDao = this.getMappingDao(mappingTableName);
- return mappingDao.queryByBaseId(baseId);
- }
- /**
- * Get the base id mappings for the base id
- * @param {string} mappingTableName mapping table name
- * @param {Number} relatedId related id
- * @return {Number[]} ids of base items
- */
- RelatedTablesExtension.prototype.getMappingsForRelated = function(mappingTableName, relatedId) {
- var mappingDao = this.getMappingDao(mappingTableName);
- var results = mappingDao.queryByRelatedId(relatedId);
- var baseIds = [];
- for (var i = 0; i < results.length; i++) {
- var row = mappingDao.getUserMappingRow(results[i]);
- baseIds.push(row.getBaseId());
- }
- return baseIds;
- }
- /**
- * Returns a {module:extension/relatedTables~MediaDao} from the table specified
- * @param {string|module:extension/relatedTables~MediaTable} tableName either a table name or a MediaTable
- * @return {module:extension/relatedTables~MediaDao}
- */
- RelatedTablesExtension.prototype.getMediaDao = function(tableName) {
- var table;
- if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'media') {
- table = tableName;
- } else {
- if (tableName.related_table_name) {
- tableName = tableName.related_table_name;
- }
- var reader = new UserTableReader(tableName, MediaTable.requiredColumns());
- var userTable = reader.readTable(this.geoPackage.getDatabase());
- table = new MediaTable(userTable.table_name, userTable.columns, MediaTable.requiredColumns());
- table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name));
- }
- return new MediaDao(this.geoPackage, table);
- }
- /**
- * Returns a {module:extension/relatedTables~SimpleAttributesDao} from the table specified
- * @param {string|module:extension/relatedTables~SimpleAttributesDao} tableName either a table name or a SimpleAttributesDao
- * @return {module:extension/relatedTables~SimpleAttributesDao}
- */
- RelatedTablesExtension.prototype.getSimpleAttributesDao = function(tableName) {
- var table;
- if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'simple_attributes') {
- table = tableName;
- } else {
- if (tableName.related_table_name) {
- tableName = tableName.related_table_name;
- }
- var reader = new UserTableReader(tableName, SimpleAttributesTable.requiredColumns());
- var userTable = reader.readTable(this.geoPackage.getDatabase());
- table = new SimpleAttributesTable(userTable.table_name, userTable.columns, SimpleAttributesTable.requiredColumns());
- table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name));
- }
- return new SimpleAttributesDao(this.geoPackage, table);
- }
- /**
- * Builds the custom relation name with the author
- * @param {string} author author
- * @param {string} name name
- * @return {string}
- */
- RelatedTablesExtension.prototype.buildRelationName = function(author, name) {
- return 'x-' + author + '_' + name;
- }
- /**
- * Remove all traces of the extension
- */
- RelatedTablesExtension.prototype.removeExtension = function() {
- if (this.extendedRelationDao.isTableExists()) {
- var extendedRelations = this.extendedRelationDao.queryForAll();
- extendedRelations.forEach(function(relation) {
- this.geoPackage.deleteTable(relation.mapping_table_name);
- }.bind(this));
- this.geoPackage.deleteTable(ExtendedRelationDao.TABLE_NAME);
- }
- if (this.extensionsDao.isTableExists()) {
- this.extensionsDao.deleteByExtension(RelatedTablesExtension.EXTENSION_NAME);
- }
- }
- /**
- * Determine if the GeoPackage has the extension
- * @param {string} [mappingTableName] mapping table name to check, if not specified, this checks for any mapping table name
- * @return {Boolean}
- */
- RelatedTablesExtension.prototype.has = function(mappingTableName) {
- if (mappingTableName) {
- return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME)
- && this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, mappingTableName);
- }
- return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME);
- }
- RelatedTablesExtension.EXTENSION_NAME = 'related_tables';
- RelatedTablesExtension.EXTENSION_RELATED_TABLES_AUTHOR = 'gpkg';
- RelatedTablesExtension.EXTENSION_RELATED_TABLES_NAME_NO_AUTHOR = 'related_tables';
- RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION = 'TBD';
- module.exports = RelatedTablesExtension;
- },{"../.":25,"../../core/contents":8,"../../dao/columnValues":10,"../../features/columns":64,"../../optionBuilder":76,"../../user/custom/userCustomDao":102,"../../user/userDao":106,"../../user/userTableReader":109,"../baseExtension":20,"./extendedRelation":31,"./mediaDao":33,"./mediaTable":35,"./relationType":36,"./simpleAttributesDao":37,"./simpleAttributesTable":39,"./userMappingDao":40,"./userMappingTable":42,"util":343}],33:[function(require,module,exports){
- /**
- * MediaDao module.
- * @module extension/relatedTables
- */
- var MediaRow = require('./mediaRow')
- , MediaTable = require('./mediaTable')
- , Dao = require('../../dao/dao')
- , UserDao = require('../../user/userDao')
- , UserTableReader = require('../../user/userTableReader');
- var util = require('util');
- /**
- * User Media DAO for reading user media data tables
- * @class
- * @extends {module:user/userDao~UserDao}
- * @param {module:db/geoPackageConnection~GeoPackageConnection} connection connection
- * @param {string} table table name
- */
- var MediaDao = function(geoPackage, table) {
- UserDao.call(this, geoPackage, table);
- this.mediaTable = table;
- }
- util.inherits(MediaDao, UserDao);
- /**
- * Reads the table specified from the geopackage
- * @param {module:geoPackage~GeoPackage} geoPackage geopackage object
- * @param {string} tableName table name
- * @param {string[]} requiredColumns required columns
- * @return {module:user/userDao~UserDao}
- */
- MediaDao.readTable = function(geoPackage, tableName) {
- var reader = new UserTableReader(tableName);
- var userTable = reader.readTable(geoPackage.getDatabase());
- return new MediaDao(geoPackage, userTable);
- }
- /**
- * Create a new media row
- * @return {module:extension/relatedTables~MediaRow}
- */
- MediaDao.prototype.newRow = function() {
- return new MediaRow(this.mediaTable);
- }
- /**
- * Create a media row with the column types and values
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @return {module:extension/relatedTables~MediaRow} media row
- */
- MediaDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new MediaRow(this.mediaTable, columnTypes, values);
- };
- /**
- * Gets the media table
- * @return {module:extension/relatedTables~MediaTable}
- */
- MediaDao.prototype.getTable = function() {
- return this.mediaTable;
- }
- module.exports = MediaDao;
- },{"../../dao/dao":11,"../../user/userDao":106,"../../user/userTableReader":109,"./mediaRow":34,"./mediaTable":35,"util":343}],34:[function(require,module,exports){
- /**
- * MediaRow module.
- * @module extension/relatedTables
- */
- var UserRow = require('../../user/userRow');
- var util = require('util');
- var ImageUtils = require('../../tiles/imageUtils');
- /**
- * User Media Row containing the values from a single result set row
- * @class
- * @extends {module:user/userRow~UserRow}
- * @param {module:extension/relatedTables~MediaTable} mediaTable media table
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- */
- var MediaRow = function(mediaTable, columnTypes, values) {
- UserRow.call(this, mediaTable, columnTypes, values);
- this.mediaTable = mediaTable;
- }
- util.inherits(MediaRow, UserRow);
- /**
- * Gets the id column
- * @return {module:user/userColumn~UserColumn}
- */
- MediaRow.prototype.getIdColumn = function() {
- return this.mediaTable.getIdColumn();
- }
- /**
- * Gets the id
- * @return {Number}
- */
- MediaRow.prototype.getId = function() {
- return this.getValueWithColumnName(this.getIdColumn().name);
- }
- /**
- * Get the data column
- * @return {module:user/userColumn~UserColumn}
- */
- MediaRow.prototype.getDataColumn = function() {
- return this.mediaTable.getDataColumn();
- }
- /**
- * Gets the data
- * @return {Buffer}
- */
- MediaRow.prototype.getData = function() {
- return this.getValueWithColumnName(this.getDataColumn().name);
- }
- /**
- * Get the data image
- *
- * @return {Promise<Image>}
- */
- MediaRow.prototype.getDataImage = function() {
- return ImageUtils.getImage(this.getData(), this.getContentType());
- }
- /**
- * Get the scaled data image
- * @param {Number} scale
- * @return {Promise<Image>}
- */
- MediaRow.prototype.getScaledDataImage = function(scale) {
- return ImageUtils.getScaledImage(this.getData(), scale);
- }
- /**
- * Sets the data for the row
- * @param {Buffer} data data
- */
- MediaRow.prototype.setData = function(data) {
- this.setValueWithColumnName(this.getDataColumn().name, data);
- }
- /**
- * Get the content type column
- * @return {module:user/userColumn~UserColumn}
- */
- MediaRow.prototype.getContentTypeColumn = function() {
- return this.mediaTable.getContentTypeColumn();
- }
- /**
- * Gets the content type
- * @return {string}
- */
- MediaRow.prototype.getContentType = function() {
- return this.getValueWithColumnName(this.getContentTypeColumn().name);
- }
- /**
- * Sets the content type for the row
- * @param {string} contentType contentType
- */
- MediaRow.prototype.setContentType = function(contentType) {
- this.setValueWithColumnName(this.getContentTypeColumn().name, contentType);
- }
- module.exports = MediaRow;
- },{"../../tiles/imageUtils":89,"../../user/userRow":107,"util":343}],35:[function(require,module,exports){
- /**
- * mediaTable module.
- * @module extension/relatedTables
- */
- var UserTable = require('../../user/userTable')
- , UserRelatedTable = require('./userRelatedTable')
- , UserColumn = require('../../user/userColumn')
- , DataType = require('../../db/dataTypes')
- , RelationType = require('./relationType');
- var util = require('util');
- /**
- * Media Requirements Class User-Defined Related Data Table
- * @class
- * @extends {module:extension/relatedTables~UserRelatedTable}
- * @param {string} tableName table name
- * @param {module:user/userColumn~UserColumn[]} columns media columns
- * @param {string[]} requiredColumns required column names
- */
- var MediaTable = function(tableName, columns, requiredColumns) {
- UserRelatedTable.call(this, tableName, MediaTable.RELATION_TYPE.name, MediaTable.RELATION_TYPE.dataType, columns, requiredColumns);
- }
- util.inherits(MediaTable, UserRelatedTable);
- /**
- * Create a media table with a minimum required columns followed by the additional columns
- * @param {string} tableName name of the table
- * @param {module:user/userColumn~UserColumn[]} additionalColumns additional columns
- * @return {module:extension/relatedTables~MediaTable}
- */
- MediaTable.create = function(tableName, additionalColumns) {
- var columns = MediaTable.createRequiredColumns();
- if (additionalColumns) {
- columns = columns.concat(additionalColumns);
- }
- return new MediaTable(tableName, columns, MediaTable.requiredColumns());
- }
- /**
- * Get the required columns
- * @param {string} [idColumnName=id] id column name
- * @return {string[]}
- */
- MediaTable.requiredColumns = function(idColumnName) {
- var requiredColumns = [];
- requiredColumns.push(idColumnName || MediaTable.COLUMN_ID);
- requiredColumns.push(MediaTable.COLUMN_DATA);
- requiredColumns.push(MediaTable.COLUMN_CONTENT_TYPE);
- return requiredColumns;
- }
- /**
- * Get the number of required columns
- * @return {Number}
- */
- MediaTable.numRequiredColumns = function(){
- return MediaTable.requiredColumns().length;
- }
- /**
- * Create the required columns
- * @param {Number} [startingIndex=0] starting index of the required columns
- * @param {string} [idColumnName=id] id column name
- * @return {module:user/userColumn~UserColumn[]}
- */
- MediaTable.createRequiredColumns = function(startingIndex, idColumnName) {
- startingIndex = startingIndex || 0;
- return [
- MediaTable.createIdColumn(startingIndex++, idColumnName || MediaTable.COLUMN_ID),
- MediaTable.createDataColumn(startingIndex++),
- MediaTable.createContentTypeColumn(startingIndex++)
- ];
- }
- /**
- * Create the primary key id column
- * @param {Number} index index of the column
- * @param {string} idColumnName name of the id column
- * @return {module:user/userColumn~UserColumn}
- */
- MediaTable.createIdColumn = function(index, idColumnName) {
- return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName);
- }
- /**
- * Create the data column
- * @param {Number} index index of the column
- * @param {string} idColumnName name of the id column
- * @return {module:user/userColumn~UserColumn}
- */
- MediaTable.createDataColumn = function(index) {
- return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_DATA, DataType.GPKGDataType.GPKG_DT_BLOB, true);
- }
- /**
- * Create the content type column
- * @param {Number} index index of the column
- * @param {string} idColumnName name of the id column
- * @return {module:user/userColumn~UserColumn}
- */
- MediaTable.createContentTypeColumn = function(index) {
- return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_CONTENT_TYPE, DataType.GPKGDataType.GPKG_DT_TEXT, true);
- }
- /**
- * Get the primary key id column
- * @return {module:user/userColumn~UserColumn}
- */
- MediaTable.prototype.getIdColumn = function() {
- return this.getPkColumn();
- }
- /**
- * Get the data column
- * @return {module:user/userColumn~UserColumn}
- */
- MediaTable.prototype.getDataColumn = function() {
- return this.getColumnWithColumnName(MediaTable.COLUMN_DATA);
- }
- /**
- * Get the content type column
- * @return {module:user/userColumn~UserColumn}
- */
- MediaTable.prototype.getContentTypeColumn = function() {
- return this.getColumnWithColumnName(MediaTable.COLUMN_CONTENT_TYPE);
- }
- MediaTable.RELATION_TYPE = RelationType.MEDIA;
- MediaTable.COLUMN_ID = 'id';
- MediaTable.COLUMN_DATA = 'data';
- MediaTable.COLUMN_CONTENT_TYPE = 'content_type';
- MediaTable.prototype.TABLE_TYPE = 'media';
- module.exports = MediaTable;
- },{"../../db/dataTypes":14,"../../user/userColumn":105,"../../user/userTable":108,"./relationType":36,"./userRelatedTable":43,"util":343}],36:[function(require,module,exports){
- /**
- * @module extension/relatedTables
- */
- var ContentsDao = require('../../core/contents').ContentsDao;
- /**
- * Spec supported User-Defined Related Data Tables
- * @class
- */
- var RelationType = function() {}
- module.exports = RelationType;
- /**
- * Link features with other features
- * @type {Object}
- */
- RelationType.FEATURES = {
- name: 'features',
- dataType: ContentsDao.GPKG_CDT_FEATURES_NAME
- };
- /**
- * Relate sets of tabular text or numeric data
- * @type {Object}
- */
- RelationType.SIMPLE_ATTRIBUTES = {
- name: 'simple_attributes',
- dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME
- };
- /**
- * Relate features or attributes to multimedia files such as pictures and videos
- * @type {Object}
- */
- RelationType.MEDIA = {
- name: 'media',
- dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME
- };
- /**
- * Attribute type relation
- * @type {Object}
- */
- RelationType.ATTRIBUTES = {
- name: 'attributes',
- dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME
- };
- /**
- * Tile type relation
- * @type {Object}
- */
- RelationType.TILES = {
- name: 'tiles',
- dataType: ContentsDao.GPKG_CDT_TILES_NAME
- };
- /**
- * Get the relation type from the name
- * @param {string} name name
- * @return {module:extension/relatedTables~RelationType}
- */
- RelationType.fromName = function(name) {
- return RelationType[name.toUpperCase()];
- }
- },{"../../core/contents":8}],37:[function(require,module,exports){
- /**
- * SimpleAttributesDao module.
- * @module extension/relatedTables
- */
- var SimpleAttributesRow = require('./simpleAttributesRow')
- , SimpleAttributesTable = require('./simpleAttributesTable')
- , Dao = require('../../dao/dao')
- , UserDao = require('../../user/userDao');
- var util = require('util');
- /**
- * User Simple Attributes DAO for reading user simple attributes data tables
- * @class
- * @extends {module:user/userDao~UserDao}
- * @param {module:db/geoPackageConnection~GeoPackageConnection} connection connection
- * @param {string} table table name
- */
- var SimpleAttributesDao = function(geoPackage, table) {
- UserDao.call(this, geoPackage, table);
- this.simpleAttributesTable = table;
- }
- util.inherits(SimpleAttributesDao, UserDao);
- /**
- * Create a new {module:extension/relatedTables~SimpleAttributesRow}
- * @return {module:extension/relatedTables~SimpleAttributesRow}
- */
- SimpleAttributesDao.prototype.newRow = function() {
- return new SimpleAttributesRow(this.simpleAttributesTable);
- }
- /**
- * Create a new {module:extension/relatedTables~SimpleAttributesRow} with the column types and values
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @return {module:extension/relatedTables~SimpleAttributesRow} simple attributes row
- */
- SimpleAttributesDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new SimpleAttributesRow(this.simpleAttributesTable, columnTypes, values);
- };
- /**
- * Gets the {module:extension/relatedTables~SimpleAttributesTable}
- * @return {module:extension/relatedTables~SimpleAttributesTable}
- */
- SimpleAttributesDao.prototype.getTable = function() {
- return this.simpleAttributesTable;
- }
- /**
- * Get the simple attributes rows from this table by ids
- * @param {Number[]} ids array of ids
- * @return {module:extension/relatedTables~SimpleAttributesRow[]}
- */
- SimpleAttributesDao.prototype.getRows = function(ids) {
- var simpleAttributesRows = [];
- for (var i = 0; i < ids.length; i++) {
- var row = this.queryForId(ids[i]);
- if (row) {
- simpleAttributesRows.push(row);
- }
- }
- return simpleAttributesRows;
- }
- module.exports = SimpleAttributesDao;
- },{"../../dao/dao":11,"../../user/userDao":106,"./simpleAttributesRow":38,"./simpleAttributesTable":39,"util":343}],38:[function(require,module,exports){
- /**
- * SimpleAttributesRow module.
- * @module extension/relatedTables
- */
- var UserRow = require('../../user/userRow');
- var util = require('util');
- /**
- * User Simple Attributes Row containing the values from a single result set row
- * @class
- * @extends {module:user/userRow~UserRow}
- * @param {module:extension/relatedTables~SimpleAttributesTable} simpleAttributesTable simple attributes table
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- */
- var SimpleAttributesRow = function(simpleAttributesTable, columnTypes, values) {
- UserRow.call(this, simpleAttributesTable, columnTypes, values);
- this.simpleAttributesTable = simpleAttributesTable;
- }
- util.inherits(SimpleAttributesRow, UserRow);
- /**
- * Gets the primary key id column
- * @return {module:user/userColumn~UserColumn}
- */
- SimpleAttributesRow.prototype.getIdColumn = function() {
- return this.simpleAttributesTable.getIdColumn();
- }
- /**
- * Gets the id
- * @return {Number}
- */
- SimpleAttributesRow.prototype.getId = function() {
- return this.getValueWithColumnName(this.getIdColumn().name);
- }
- module.exports = SimpleAttributesRow;
- },{"../../user/userRow":107,"util":343}],39:[function(require,module,exports){
- /**
- * simpleAttributesTable module.
- * @module extension/relatedTables
- */
- var UserTable = require('../../user/userTable')
- , UserRelatedTable = require('./userRelatedTable')
- , UserColumn = require('../../user/userColumn')
- , DataTypes = require('../../db/dataTypes')
- , RelationType = require('./relationType');
- var util = require('util');
- /**
- * Simple Attributes Requirements Class User-Defined Related Data Table
- * @class
- * @extends {module:extension/relatedTables~UserRelatedTable}
- * @param {string} tableName table name
- * @param {module:user/userColumn~UserColumn[]} columns attribute columns
- * @param {string[]} requiredColumns required column names
- */
- var SimpleAttributesTable = function(tableName, columns, requiredColumns) {
- UserRelatedTable.call(this, tableName, SimpleAttributesTable.RELATION_TYPE.name, SimpleAttributesTable.RELATION_TYPE.dataType, columns, requiredColumns);
- this.validateColumns();
- }
- util.inherits(SimpleAttributesTable, UserRelatedTable);
- /**
- * Create a simple attributes table with the columns
- * @param {string} tableName name of the table
- * @param {module:user/userColumn~UserColumn[]} additionalColumns additional columns
- * @return {module:extension/relatedTables~SimpleAttributesTable}
- */
- SimpleAttributesTable.create = function(tableName, additionalColumns) {
- var tableColumns = SimpleAttributesTable.createRequiredColumns(0);
- if (additionalColumns) {
- tableColumns = tableColumns.concat(additionalColumns);
- }
- return new SimpleAttributesTable(tableName, tableColumns, SimpleAttributesTable.requiredColumns());
- }
- /**
- * Get the required columns
- * @param {string} [idColumnName=id] id column name
- * @return {string[]}
- */
- SimpleAttributesTable.requiredColumns = function(idColumnName) {
- var requiredColumns = [];
- requiredColumns.push(idColumnName || SimpleAttributesTable.COLUMN_ID);
- return requiredColumns;
- }
- /**
- * Get the number of required columns
- * @return {Number}
- */
- SimpleAttributesTable.numRequiredColumns = function(){
- return SimpleAttributesTable.requiredColumns().length;
- }
- /**
- * Create the required columns
- * @param {Number} [startingIndex=0] starting index of the required columns
- * @param {string} [idColumnName=id] id column name
- * @return {module:user/userColumn~UserColumn[]}
- */
- SimpleAttributesTable.createRequiredColumns = function(startingIndex, idColumnName) {
- startingIndex = startingIndex || 0;
- return [SimpleAttributesTable.createIdColumn(startingIndex++, idColumnName || SimpleAttributesTable.COLUMN_ID)];
- }
- /**
- * Create the primary key id column
- * @param {Number} index index of the column
- * @param {string} idColumnName name of the id column
- * @return {module:user/userColumn~UserColumn}
- */
- SimpleAttributesTable.createIdColumn = function(index, idColumnName) {
- return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName);
- }
- /**
- * Validate that Simple Attributes columns to verify at least one non id
- * column exists and that all columns are simple data types
- */
- SimpleAttributesTable.prototype.validateColumns = function() {
- var columns = this.columns;
- if (columns.length < 2) {
- throw new Error('Simple Attributes Tables require at least one non id column');
- }
- for (var i = 0; i < columns.length; i++) {
- var column = columns[i];
- if (!SimpleAttributesTable.isSimple(column)) {
- throw new Error('Simple Attributes Tables only support simple data types. Column: ' + column.name + ', Non Simple Data Type: ' + column.dataType);
- }
- }
- }
- /**
- * Get the column index of the id column
- * @return {Number}
- */
- SimpleAttributesTable.prototype.getIdColumnIndex = function() {
- return this.pkIndex;
- }
- /**
- * Get the primary key id column
- * @return {module:user/userColumn~UserColumn}
- */
- SimpleAttributesTable.prototype.getIdColumn = function() {
- return this.getPkColumn();
- }
- /**
- * Determine if the column is a simple column
- * @param {module:user/userColumn~UserColumn} column column to check
- * @return {Boolean}
- */
- SimpleAttributesTable.isSimple = function(column) {
- return column.notNull && SimpleAttributesTable.isSimpleDataType(column.dataType);
- }
- /**
- * Determine if the data type is a simple type: TEXT, INTEGER, or REAL
- * @param {module:db/dataTypes~GPKGDataType}
- * @return {Boolean}
- */
- SimpleAttributesTable.isSimpleDataType = function(dataType) {
- return dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB && dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY;
- }
- SimpleAttributesTable.RELATION_TYPE = RelationType.SIMPLE_ATTRIBUTES;
- SimpleAttributesTable.COLUMN_ID = 'id';
- SimpleAttributesTable.prototype.TABLE_TYPE = 'simple_attributes';
- module.exports = SimpleAttributesTable;
- },{"../../db/dataTypes":14,"../../user/userColumn":105,"../../user/userTable":108,"./relationType":36,"./userRelatedTable":43,"util":343}],40:[function(require,module,exports){
- /**
- * @module extension/relatedTables
- */
- var UserMappingRow = require('./userMappingRow')
- , UserMappingTable = require('./userMappingTable')
- , UserCustomDao = require('../../user/custom/userCustomDao')
- , ColumnValues = require('../../dao/columnValues');
- var util = require('util');
- /**
- * User Mapping DAO for reading user mapping data tables
- * @class
- * @extends {module:user/custom/userCustomDao~UserCustomDao}
- * @param {string} table table name
- * @param {module:geoPackage~GeoPackage} geoPackage geopackage object
- */
- var UserMappingDao = function(userCustomDao, geoPackage) {
- UserCustomDao.call(this, geoPackage, this.createMappingTable(userCustomDao));
- }
- util.inherits(UserMappingDao, UserCustomDao);
- /**
- * Create a new {module:user/custom~UserCustomTable}
- * @param {module:user/custom~UserCustomDao} userCustomDao
- * @return {module:user/custom~UserCustomTable} userCustomTable user custom table
- */
- UserMappingDao.prototype.createMappingTable = function(userCustomDao) {
- return new UserMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns);
- }
- /**
- * Create a new {module:extension/relatedTables~UserMappingRow}
- * @return {module:extension/relatedTables~UserMappingRow}
- */
- UserMappingDao.prototype.newRow = function() {
- return new UserMappingRow(this.table);
- }
- /**
- * Gets the {module:extension/relatedTables~UserMappingTable}
- * @return {module:extension/relatedTables~UserMappingTable}
- */
- UserMappingDao.prototype.getTable = function() {
- return this.table;
- }
- /**
- * Create a user mapping row
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @return {module:extension/relatedTables~UserMappingRow} user mapping row
- */
- UserMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new UserMappingRow(this.table, columnTypes, values);
- };
- /**
- * Gets the user mapping row from the result
- * @param {Object} result db result
- * @return {module:extension/relatedTables~UserMappingRow} user mapping row
- */
- UserMappingDao.prototype.getUserMappingRow = function(result) {
- return this.getRow(result);
- }
- /**
- * Query by base id
- * @param {Number} baseId base id
- * @return {Object[]}
- */
- UserMappingDao.prototype.queryByBaseId = function(baseId) {
- if (baseId.getBaseId) {
- baseId = baseId.getBaseId();
- }
- return this.queryForAllEq(UserMappingTable.COLUMN_BASE_ID, baseId);
- }
- /**
- * Query by related id
- * @param {Number} relatedId related id
- * @return {Object[]}
- */
- UserMappingDao.prototype.queryByRelatedId = function(relatedId) {
- if (relatedId.getRelatedId) {
- relatedId = relatedId.getRelatedId();
- }
- return this.queryForAllEq(UserMappingTable.COLUMN_RELATED_ID, relatedId);
- }
- /**
- * Query by base id and related id
- * @param {Number} baseId base id
- * @param {Number} relatedId related id
- * @return {Object[]}
- */
- UserMappingDao.prototype.queryByIds = function(baseId, relatedId) {
- if (baseId.getBaseId) {
- relatedId = baseId.getRelatedId();
- baseId = baseId.getBaseId();
- }
- var values = new ColumnValues();
- values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId);
- values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId);
- return this.queryForFieldValues(values);
- }
- /**
- * The unique related ids
- * @return {Number[]}
- */
- UserMappingDao.prototype.uniqueRelatedIds = function() {
- var query = 'SELECT DISTINCT ';
- query += UserMappingTable.COLUMN_RELATED_ID;
- query += ' FROM ';
- query += "'"+this.gpkgTableName+"'";
- return this.connection.all(query);
- }
- /**
- * Count user mapping rows by base id and related id
- * @param {Number} baseId base id
- * @param {Number} relatedId related id
- * @return {Number}
- */
- UserMappingDao.prototype.countByIds = function(baseId, relatedId) {
- if (baseId.getBaseId) {
- relatedId = baseId.getRelatedId();
- baseId = baseId.getBaseId();
- }
- var values = new ColumnValues();
- values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId);
- values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId);
- return this.count(values);
- }
- /**
- * Delete by base id
- * @param {Number} baseId base id
- * @return {Number} number of deleted rows
- */
- UserMappingDao.prototype.deleteByBaseId = function(baseId) {
- if (baseId.getBaseId) {
- baseId = baseId.getBaseId();
- }
- var where = '';
- where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId);
- var whereArgs = this.buildWhereArgs([baseId]);
- return this.deleteWhere(where, whereArgs);
- };
- /**
- * Delete by related id
- * @param {Number} relatedId related id
- * @return {Number} number of deleted rows
- */
- UserMappingDao.prototype.deleteByRelatedId = function(relatedId) {
- if (relatedId.getRelatedId) {
- relatedId = relatedId.getRelatedId();
- }
- var where = '';
- where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId);
- var whereArgs = this.buildWhereArgs([relatedId]);
- return this.deleteWhere(where, whereArgs);
- };
- /**
- * Delete by base id and related id
- * @param {Number} baseId base id
- * @param {Number} relatedId related id
- * @return {Number} number of deleted rows
- */
- UserMappingDao.prototype.deleteByIds = function(baseId, relatedId) {
- if (baseId.getBaseId) {
- relatedId = baseId.getRelatedId();
- baseId = baseId.getBaseId();
- }
- var where = '';
- where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId);
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId);
- var whereArgs = this.buildWhereArgs([baseId, relatedId]);
- return this.deleteWhere(where, whereArgs);
- }
- module.exports = UserMappingDao;
- },{"../../dao/columnValues":10,"../../user/custom/userCustomDao":102,"./userMappingRow":41,"./userMappingTable":42,"util":343}],41:[function(require,module,exports){
- /**
- * UserMappingRow module.
- * @module extension/relatedTables
- */
- var UserRow = require('../../user/userRow');
- var util = require('util');
- /**
- * User Mapping Row containing the values from a single result set row
- * @class
- * @extends {module:user/userRow~UserRow}
- * @param {module:extension/relatedTables~UserMappingTable} userMappingTable user mapping table
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- */
- var UserMappingRow = function(userMappingTable, columnTypes, values) {
- UserRow.call(this, userMappingTable, columnTypes, values);
- }
- util.inherits(UserMappingRow, UserRow);
- /**
- * Get the base id column
- * @return {module:user/userColumn~UserColumn}
- */
- UserMappingRow.prototype.getBaseIdColumn = function() {
- return this.table.getBaseIdColumn();
- }
- /**
- * Gets the base id
- * @return {Number}
- */
- UserMappingRow.prototype.getBaseId = function() {
- return this.getValueWithColumnName(this.getBaseIdColumn().name);
- }
- /**
- * Sets the base id
- * @param {Number} baseId base id
- */
- UserMappingRow.prototype.setBaseId = function(baseId) {
- this.setValueWithColumnName(this.getBaseIdColumn().name, baseId);
- }
- /**
- * Get the related id column
- * @return {module:user/userColumn~UserColumn}
- */
- UserMappingRow.prototype.getRelatedIdColumn = function() {
- return this.table.getRelatedIdColumn();
- }
- /**
- * Gets the related id
- * @return {Number}
- */
- UserMappingRow.prototype.getRelatedId = function() {
- return this.getValueWithColumnName(this.getRelatedIdColumn().name);
- }
- /**
- * Sets the related id
- * @param {Number} relatedId related id
- */
- UserMappingRow.prototype.setRelatedId = function(relatedId) {
- this.setValueWithColumnName(this.getRelatedIdColumn().name, relatedId);
- }
- module.exports = UserMappingRow;
- },{"../../user/userRow":107,"util":343}],42:[function(require,module,exports){
- /**
- * userMappingTable module.
- * @module extension/relatedTables
- */
- var UserTable = require('../../user/userTable')
- , UserCustomColumn = require('../../user/custom/userCustomColumn')
- , DataTypes = require('../../db/dataTypes');
- var util = require('util');
- /**
- * Contains user mapping table factory and utility methods
- * @class
- * @extends {module:user/userTable~UserTable}
- * @param {string} tableName table name
- * @param {module:user/userColumn~UserColumn[]} columns user mapping columns
- */
- var UserMappingTable = function(tableName, columns) {
- UserTable.call(this, tableName, columns);
- }
- util.inherits(UserMappingTable, UserTable);
- /**
- * Creates a user mapping table with the minimum required columns followed by the additional columns
- * @param {string} tableName name of the table
- * @param {module:user/userColumn~UserColumn[]} additionalColumns additional columns
- * @return {module:extension/relatedTables~UserMappingTable}
- */
- UserMappingTable.create = function(tableName, columns) {
- var allColumns = UserMappingTable.createRequiredColumns(0);
- if (columns) {
- allColumns = allColumns.concat(columns);
- }
- return new UserMappingTable(tableName, allColumns);
- }
- /**
- * Get the number of required columns
- * @return {Number}
- */
- UserMappingTable.numRequiredColumns = function() {
- return UserMappingTable.createRequiredColumns(0).length;
- }
- /**
- * Create the required columns
- * @param {Number} [startingIndex=0] starting index of the required columns
- * @return {module:user/userColumn~UserColumn[]}
- */
- UserMappingTable.createRequiredColumns = function(startingIndex) {
- startingIndex = startingIndex || 0;
- return [
- UserMappingTable.createBaseIdColumn(startingIndex++),
- UserMappingTable.createRelatedIdColumn(startingIndex)
- ];
- }
- /**
- * Create the base id column
- * @param {Number} index index of the column
- * @return {module:user/userColumn~UserColumn}
- */
- UserMappingTable.createBaseIdColumn = function(index) {
- var baseIdColumn = UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_BASE_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true);
- return baseIdColumn;
- }
- /**
- * Create the related id column
- * @param {Number} index index of the column
- * @return {module:user/userColumn~UserColumn}
- */
- UserMappingTable.createRelatedIdColumn = function(index) {
- return UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_RELATED_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true);
- }
- /**
- * Get the base id column
- * @return {module:user/userColumn~UserColumn}
- */
- UserMappingTable.prototype.getBaseIdColumn = function() {
- return this.getColumnWithColumnName(UserMappingTable.COLUMN_BASE_ID);
- }
- /**
- * Get the related id column
- * @return {module:user/userColumn~UserColumn}
- */
- UserMappingTable.prototype.getRelatedIdColumn = function() {
- return this.getColumnWithColumnName(UserMappingTable.COLUMN_RELATED_ID);
- }
- /**
- * Get the required columns
- * @return {string[]}
- */
- UserMappingTable.requiredColumns = function() {
- return [UserMappingTable.COLUMN_BASE_ID, UserMappingTable.COLUMN_RELATED_ID];
- }
- UserMappingTable.COLUMN_BASE_ID = 'base_id';
- UserMappingTable.COLUMN_RELATED_ID = 'related_id';
- module.exports = UserMappingTable;
- },{"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../../user/userTable":108,"util":343}],43:[function(require,module,exports){
- /**
- * userRelatedTable module.
- * @module extension/relatedTables
- */
- var UserTable = require('../../user/userTable')
- , UserColumn = require('../../user/userColumn')
- , DataTypes = require('../../db/dataTypes');
- var util = require('util');
- /**
- * User Defined Related Table
- * @param {string} tableName table name
- * @param {array} columns attribute columns
- */
- /**
- * User Defined Related Table
- * @param {string} tableName table name
- * @param {string} relationName relation name
- * @param {string} dataType Contents data type
- * @param {module:user/userColumn~UserColumn} columns columns
- * @param {string[]} requiredColumns required columns
- * @return {module:extension/relatedTables~UserRelatedTable}
- */
- var UserRelatedTable = function(tableName, relationName, dataType, columns, requiredColumns) {
- UserTable.call(this, tableName, columns, requiredColumns);
- this.relation_name = relationName;
- this.data_type = dataType;
- }
- util.inherits(UserRelatedTable, UserTable);
- /**
- * Sets the contents
- * @param {module:core/contents~Contents} contents contents
- * @throw Error if the contents data type does not match this data type
- */
- UserRelatedTable.prototype.setContents = function(contents) {
- this.contents = contents;
- // verify the contents have a relation name data type
- if (!contents.data_type || contents.data_type !== this.data_type) {
- throw new Error('The contents of this related table must have a data type of ' + this.data_type);
- }
- }
- module.exports = UserRelatedTable;
- },{"../../db/dataTypes":14,"../../user/userColumn":105,"../../user/userTable":108,"util":343}],44:[function(require,module,exports){
- /**
- * RTreeIndexDao module.
- * @module RTreeIndexDao
- * @see module:dao/dao
- */
- var Dao = require('../../dao/dao')
- , BaseExtension = require('../baseExtension')
- , Extension = require('../.').Extension
- , EnvelopeBuilder = require('../../geom/envelopeBuilder')
- , GeometryData = require('../../geom/geometryData');
- var util = require('util');
- var RTreeIndex = function(geoPackage, featureDao) {
- BaseExtension.call(this, geoPackage);
- this.extensionName = Extension.buildExtensionName(RTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR, RTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR);
- this.extensionDefinition = RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION;
- this.tableName = featureDao.table_name;
- this.primaryKeyColumn = featureDao.idColumns[0];
- this.columnName = featureDao.getGeometryColumnName();
- this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao);
- this.extensionExists = this.hasExtension(this.extensionName, this.tableName, this.columnName);
- }
- util.inherits(RTreeIndex, BaseExtension);
- RTreeIndex.prototype.getRTreeIndexExtension = function () {
- return this.getExtension(this.extensionName, this.tableName, this.columnName);
- };
- RTreeIndex.prototype.getOrCreateExtension = function() {
- return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.WRITE_ONLY);
- };
- RTreeIndex.prototype.create = function() {
- if (this.extensionExists) {
- return Promise.resolve(this.getRTreeIndexExtension());
- }
- return this.getOrCreate(this.extensionName, this.tableName, this.columnName, RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION, Extension.WRITE_ONLY)
- .then(function() {
- this.createAllFunctions();
- this.createRTreeIndex();
- this.loadRTreeIndex();
- this.createAllTriggers();
- return this.getRTreeIndexExtension();
- }.bind(this));
- }
- RTreeIndex.prototype.createAllTriggers = function() {
- var insertTrigger =
- 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_insert AFTER INSERT ON '+this.tableName+
- ' WHEN (new.'+this.columnName+' NOT NULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+
- 'BEGIN '+
- ' INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+
- ' NEW.'+this.primaryKeyColumn+','+
- ' ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+
- ' ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+
- ' ); '+
- 'END;';
- var update1Trigger =
- 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update1 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+
- ' WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+
- ' (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+
- 'BEGIN '+
- ' INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+
- ' NEW.'+this.primaryKeyColumn+','+
- ' ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+
- ' ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+
- ' ); '+
- 'END;';
- var update2Trigger =
- 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update2 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+
- ' WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+
- ' (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+
- 'BEGIN '+
- ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+
- 'END;';
- var update3Trigger =
- 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update3 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+
- ' WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+
- ' (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+
- 'BEGIN '+
- ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+
- ' INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+
- ' NEW.'+this.primaryKeyColumn+', '+
- ' ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+
- ' ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+')'+
- ' ); '+
- 'END;';
- var update4Trigger =
- 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update4 AFTER UPDATE ON '+this.tableName+
- ' WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+
- ' (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+
- 'BEGIN '+
- ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id IN (OLD.'+this.primaryKeyColumn+', NEW.'+this.primaryKeyColumn+'); '+
- 'END;';
- var deleteTrigger =
- 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_delete AFTER DELETE ON '+this.tableName+
- ' WHEN old.'+this.columnName+' NOT NULL '+
- 'BEGIN'+
- ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+
- 'END;';
- this.connection.run(insertTrigger);
- this.connection.run(update1Trigger);
- this.connection.run(update2Trigger);
- this.connection.run(update3Trigger);
- this.connection.run(update4Trigger);
- this.connection.run(deleteTrigger);
- }
- RTreeIndex.prototype.loadRTreeIndex = function() {
- this.connection.run('INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' SELECT '+this.primaryKeyColumn+', st_minx('+this.columnName+'), st_maxx('+this.columnName+'), st_miny('+this.columnName+'), st_maxy('+this.columnName+') FROM '+this.tableName);
- }
- RTreeIndex.prototype.createRTreeIndex = function() {
- this.connection.run('CREATE VIRTUAL TABLE rtree_'+this.tableName+'_'+this.columnName+' USING rtree(id, minx, maxx, miny, maxy)');
- }
- RTreeIndex.prototype.createAllFunctions = function() {
- this.createMinXFunction();
- this.createMaxXFunction();
- this.createMinYFunction();
- this.createMaxYFunction();
- this.createIsEmptyFunction();
- }
- RTreeIndex.prototype.createMinXFunction = function() {
- this.connection.registerFunction('ST_MinX', function(buffer) {
- var geom = new GeometryData(buffer);
- var envelope = geom.envelope;
- if (!envelope) {
- envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);
- }
- return envelope.minX;
- });
- }
- RTreeIndex.prototype.createMinYFunction = function() {
- this.connection.registerFunction('ST_MinY', function(buffer) {
- var geom = new GeometryData(buffer);
- var envelope = geom.envelope;
- if (!envelope) {
- envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);
- }
- return envelope.minY;
- });
- }
- RTreeIndex.prototype.createMaxXFunction = function() {
- this.connection.registerFunction('ST_MaxX', function(buffer) {
- var geom = new GeometryData(buffer);
- var envelope = geom.envelope;
- if (!envelope) {
- envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);
- }
- return envelope.maxX;
- });
- }
- RTreeIndex.prototype.createMaxYFunction = function() {
- this.connection.registerFunction('ST_MaxY', function(buffer) {
- var geom = new GeometryData(buffer);
- var envelope = geom.envelope;
- if (!envelope) {
- envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);
- }
- return envelope.maxY;
- });
- }
- RTreeIndex.prototype.createIsEmptyFunction = function() {
- this.connection.registerFunction('ST_IsEmpty', function(buffer) {
- var geom = new GeometryData(buffer);
- return !geom || geom.empty || !geom.geometry;
- });
- }
- /**
- * RTree Index Data Access Object
- * @class
- * @extends {module:dao/dao~Dao}
- */
- var RTreeIndexDao = function(geoPackage, featureDao) {
- Dao.call(this, geoPackage);
- this.featureDao = featureDao;
- };
- util.inherits(RTreeIndexDao, Dao);
- /**
- * Generate query components
- * @param envelope
- * @returns {{whereArgs: Array, where: string, join: string, tableNameArr: string[]}}
- * @private
- */
- RTreeIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) {
- var tableName = this.featureDao.gpkgTableName;
- var where = '';
- var minXLessThanMaxX = envelope.minX < envelope.maxX;
- if (minXLessThanMaxX) {
- where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<=');
- where += ' and ';
- where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>=');
- } else {
- where += '(';
- where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<=');
- where += ' or ';
- where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>=');
- where += ' or ';
- where += this.buildWhereWithFieldAndValue('minx', envelope.minX, '>=');
- where += ' or ';
- where += this.buildWhereWithFieldAndValue('maxx', envelope.maxX, '<=');
- where += ')';
- }
- where += ' and ';
- where += this.buildWhereWithFieldAndValue('miny', envelope.maxY, '<=');
- where += ' and ';
- where += this.buildWhereWithFieldAndValue('maxy', envelope.minY, '>=');
- var whereArgs = []
- whereArgs.push(envelope.maxX, envelope.minX);
- if (!minXLessThanMaxX) {
- whereArgs.push(envelope.minX, envelope.maxX);
- }
- whereArgs.push(envelope.maxY, envelope.minY);
- return {
- join: 'inner join ' + tableName + ' on ' + tableName + '.' + this.featureDao.idColumns[0] + ' = ' + this.gpkgTableName+'.id',
- where,
- whereArgs,
- tableNameArr: [tableName + '.*']
- };
- };
- RTreeIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) {
- var result = this._generateGeometryEnvelopeQuery(envelope)
- return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);
- };
- RTreeIndexDao.prototype.countWithGeometryEnvelope = function(envelope) {
- var result = this._generateGeometryEnvelopeQuery(envelope)
- return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);
- };
- RTreeIndexDao.TABLE_NAME = "rtree";
- RTreeIndexDao.COLUMN_TABLE_NAME = RTreeIndexDao.TABLE_NAME + ".table_name";
- RTreeIndexDao.COLUMN_GEOM_ID = RTreeIndexDao.TABLE_NAME + ".geom_id";
- RTreeIndexDao.COLUMN_MIN_X = RTreeIndexDao.TABLE_NAME + ".minx";
- RTreeIndexDao.COLUMN_MAX_X = RTreeIndexDao.TABLE_NAME + ".maxx";
- RTreeIndexDao.COLUMN_MIN_Y = RTreeIndexDao.TABLE_NAME + ".miny";
- RTreeIndexDao.COLUMN_MAX_Y = RTreeIndexDao.TABLE_NAME + ".maxy";
- RTreeIndexDao.COLUMN_MIN_Z = RTreeIndexDao.TABLE_NAME + ".minz";
- RTreeIndexDao.COLUMN_MAX_Z = RTreeIndexDao.TABLE_NAME + ".maxz";
- RTreeIndexDao.COLUMN_MIN_M = RTreeIndexDao.TABLE_NAME + ".minm";
- RTreeIndexDao.COLUMN_MAX_M = RTreeIndexDao.TABLE_NAME + ".maxm";
- RTreeIndexDao.EXTENSION_NAME = 'gpkg_rtree_index';
- RTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR = 'gpkg';
- RTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR = 'rtree_index';
- RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION = 'http://www.geopackage.org/spec/#extension_rtree';
- RTreeIndexDao.prototype.gpkgTableName = RTreeIndexDao.TABLE_NAME;
- module.exports.RTreeIndexDao = RTreeIndexDao;
- module.exports.RTreeIndex = RTreeIndex;
- },{"../.":25,"../../dao/dao":11,"../../geom/envelopeBuilder":72,"../../geom/geometryData":73,"../baseExtension":20,"util":343}],45:[function(require,module,exports){
- /**
- * SchemaExtension module.
- * @module SchemaExtension
- * @see module:extension/BaseExtension
- */
- var BaseExtension = require('../baseExtension')
- , Extension = require('../.').Extension;
- var util = require('util');
- var SchemaExtension = function(geoPackage) {
- BaseExtension.call(this, geoPackage);
- this.extensionName = SchemaExtension.EXTENSION_NAME;
- this.extensionDefinition = SchemaExtension.EXTENSION_SCHEMA_DEFINITION;
- }
- util.inherits(SchemaExtension, BaseExtension);
- SchemaExtension.prototype.getOrCreateExtension = function() {
- return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE);
- };
- SchemaExtension.EXTENSION_NAME = 'gpkg_schema';
- SchemaExtension.EXTENSION_SCHEMA_AUTHOR = 'gpkg';
- SchemaExtension.EXTENSION_SCHEMA_NAME_NO_AUTHOR = 'schema';
- SchemaExtension.EXTENSION_SCHEMA_DEFINITION = 'http://www.geopackage.org/spec/#extension_schema';
- module.exports.SchemaExtension = SchemaExtension;
- },{"../.":25,"../baseExtension":20,"util":343}],46:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class FeatureStyle
- */
- /**
- * FeatureStyle constructor
- * @param {module:extension/style.StyleRow} styleRow
- * @param {module:extension/style.IconRow} iconRow
- * @constructor
- */
- var FeatureStyle = function(styleRow, iconRow) {
- this.styleRow = styleRow;
- this.iconRow = iconRow;
- };
- /**
- * Set style
- * @param {module:extension/style.StyleRow} styleRow
- */
- FeatureStyle.prototype.setStyle = function(styleRow) {
- this.styleRow = styleRow;
- };
- /**
- * Get style
- * @returns {module:extension/style.StyleRow}
- */
- FeatureStyle.prototype.getStyle = function() {
- return this.styleRow;
- };
- /**
- * Returns true if has style
- * @returns {Boolean}
- */
- FeatureStyle.prototype.hasStyle = function() {
- return !!this.styleRow;
- };
- /**
- * Set icon
- * @param {module:extension/style.IconRow} iconRow
- */
- FeatureStyle.prototype.setIcon = function(iconRow) {
- this.iconRow = iconRow;
- };
- /**
- * Get icon
- * @returns {module:extension/style.IconRow}
- */
- FeatureStyle.prototype.getIcon = function() {
- return this.iconRow;
- };
- /**
- * Returns true if has icon
- * @returns {Boolean}
- */
- FeatureStyle.prototype.hasIcon = function() {
- return !!this.iconRow;
- };
- module.exports = FeatureStyle;
- },{}],47:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class FeatureStyles
- */
- /**
- * FeatureStyles constructor
- * @param {module:extension/style.Styles} styles
- * @param {module:extension/style.Icons} icons
- * @constructor
- */
- var FeatureStyles = function(styles = null, icons = null) {
- this.styles = styles;
- this.icons = icons;
- };
- /**
- * Set style
- * @param {module:extension/style.Styles} styles
- */
- FeatureStyles.prototype.setStyles = function(styles) {
- this.styles = styles;
- };
- /**
- * Get style
- * @returns {module:extension/style.Styles}
- */
- FeatureStyles.prototype.getStyles = function() {
- return this.styles;
- };
- /**
- * Set icon
- * @param {module:extension/style.Icons} icons
- */
- FeatureStyles.prototype.setIcons = function(icons) {
- this.icons = icons;
- };
- /**
- * Get icon
- * @returns {module:extension/style.Icons}
- */
- FeatureStyles.prototype.getIcons = function() {
- return this.icons;
- };
- module.exports = FeatureStyles;
- },{}],48:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class FeatureStyleExtension
- */
- var FeatureStyles = require('./featureStyles')
- , FeatureStyle = require('./featureStyle')
- , Styles = require('./styles')
- , Icons = require('./icons');
- /**
- * Feature Table Styles, styles and icons for an individual feature table
- * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object
- * @param {String} tableName
- * @constructor
- */
- var FeatureTableStyles = function(geoPackage, tableName) {
- this.featureStyleExtension = geoPackage.getFeatureStyleExtension();
- this.cachedTableFeatureStyles = new FeatureStyles();
- this.tableName = tableName;
- };
- /**
- * Get the feature style extension
- * @return {module:extension/style.FeatureStyleExtension} feature style extension
- */
- FeatureTableStyles.prototype.getFeatureStyleExtension = function() {
- return this.featureStyleExtension;
- };
- /**
- * Get the feature table name
- * @return {String} feature table name
- */
- FeatureTableStyles.prototype.getTableName = function() {
- return this.tableName;
- };
- /**
- * Determine if the GeoPackage has the extension for the table
- * @return {Boolean} true if has extension
- */
- FeatureTableStyles.prototype.has = function() {
- return this.featureStyleExtension.has(this.tableName);
- };
- /**
- * Create style, icon, table style, and table icon relationships for the
- * feature table
- * @return {Promise}
- */
- FeatureTableStyles.prototype.createRelationships = function() {
- return this.featureStyleExtension.createRelationships(this.tableName);
- };
- /**
- * Check if feature table has a style, icon, table style, or table icon
- * relationships
- * @return {Boolean} true if has a relationship
- */
- FeatureTableStyles.prototype.hasRelationship = function() {
- return this.featureStyleExtension.hasRelationship(this.tableName);
- };
- /**
- * Create a style relationship for the feature table
- * @return {Promise}
- */
- FeatureTableStyles.prototype.createStyleRelationship = function() {
- return this.featureStyleExtension.createStyleRelationship(this.tableName);
- };
- /**
- * Determine if a style relationship exists for the feature table
- * @return {Boolean} true if relationship exists
- */
- FeatureTableStyles.prototype.hasStyleRelationship = function() {
- return this.featureStyleExtension.hasStyleRelationship(this.tableName);
- };
- /**
- * Create a feature table style relationship
- * @return {Promise}
- */
- FeatureTableStyles.prototype.createTableStyleRelationship = function() {
- return this.featureStyleExtension.createTableStyleRelationship(this.tableName);
- };
- /**
- * Determine if feature table style relationship exists
- *
- * @return {Boolean} true if relationship exists
- */
- FeatureTableStyles.prototype.hasTableStyleRelationship = function() {
- return this.featureStyleExtension.hasTableStyleRelationship(this.tableName);
- };
- /**
- * Create an icon relationship for the feature table
- * @return {Promise}
- */
- FeatureTableStyles.prototype.createIconRelationship = function() {
- return this.featureStyleExtension.createIconRelationship(this.tableName);
- };
- /**
- * Determine if an icon relationship exists for the feature table
- * @return {Boolean} true if relationship exists
- */
- FeatureTableStyles.prototype.hasIconRelationship = function() {
- return this.featureStyleExtension.hasIconRelationship(this.tableName);
- };
- /**
- * Create a feature table icon relationship
- * @return {Promise}
- */
- FeatureTableStyles.prototype.createTableIconRelationship = function() {
- return this.featureStyleExtension.createTableIconRelationship(this.tableName);
- };
- /**
- * Determine if feature table icon relationship exists
- * @return {Boolean} true if relationship exists
- */
- FeatureTableStyles.prototype.hasTableIconRelationship = function() {
- return this.featureStyleExtension.hasTableIconRelationship(this.tableName);
- };
- /**
- * Delete the style and icon table and row relationships for the feature
- * table
- */
- FeatureTableStyles.prototype.deleteRelationships = function() {
- this.featureStyleExtension.deleteRelationships(this.tableName);
- };
- /**
- * Delete a style relationship for the feature table
- */
- FeatureTableStyles.prototype.deleteStyleRelationship = function() {
- this.featureStyleExtension.deleteStyleRelationship(this.tableName);
- };
- /**
- * Delete a table style relationship for the feature table
- */
- FeatureTableStyles.prototype.deleteTableStyleRelationship = function() {
- this.featureStyleExtension.deleteTableStyleRelationship(this.tableName);
- };
- /**
- * Delete a icon relationship for the feature table
- */
- FeatureTableStyles.prototype.deleteIconRelationship = function() {
- this.featureStyleExtension.deleteIconRelationship(this.tableName);
- };
- /**
- * Delete a table icon relationship for the feature table
- */
- FeatureTableStyles.prototype.deleteTableIconRelationship = function() {
- this.featureStyleExtension.deleteTableIconRelationship(this.tableName);
- };
- /**
- * Get a Style Mapping DAO
- * @return {module:extension/style.StyleMappingDao} style mapping DAO
- */
- FeatureTableStyles.prototype.getStyleMappingDao = function() {
- return this.featureStyleExtension.getStyleMappingDao(this.tableName);
- };
- /**
- * Get a Table Style Mapping DAO
- * @return {module:extension/style.StyleMappingDao} table style mapping DAO
- */
- FeatureTableStyles.prototype.getTableStyleMappingDao = function() {
- return this.featureStyleExtension.getTableStyleMappingDao(this.tableName);
- };
- /**
- * Get a Icon Mapping DAO
- * @return {module:extension/style.StyleMappingDao} icon mapping DAO
- */
- FeatureTableStyles.prototype.getIconMappingDao = function() {
- return this.featureStyleExtension.getIconMappingDao(this.tableName);
- };
- /**
- * Get a Table Icon Mapping DAO
- * @return {module:extension/style.StyleMappingDao} table icon mapping DAO
- */
- FeatureTableStyles.prototype.getTableIconMappingDao = function() {
- return this.featureStyleExtension.getTableIconMappingDao(this.tableName);
- };
- /**
- * Get a style DAO
- * @return {module:extension/style.StyleDao} style DAO
- */
- FeatureTableStyles.prototype.getStyleDao = function() {
- return this.featureStyleExtension.getStyleDao();
- };
- /**
- * Get a icon DAO
- * @return {module:extension/style.IconDao} icon DAO
- */
- FeatureTableStyles.prototype.getIconDao = function() {
- return this.featureStyleExtension.getIconDao();
- };
- /**
- * Get the table feature styles
- * @return {module:extension/style.FeatureStyles} table feature styles or null
- */
- FeatureTableStyles.prototype.getTableFeatureStyles = function() {
- return this.featureStyleExtension.getTableFeatureStyles(this.tableName);
- };
- /**
- * Get the table styles
- * @return {module:extension/style.Styles} table styles or null
- */
- FeatureTableStyles.prototype.getTableStyles = function() {
- return this.featureStyleExtension.getTableStyles(this.tableName);
- };
- /**
- * Get the cached table styles, querying and caching if needed
- * @return {module:extension/style.Styles} cached table styles
- */
- FeatureTableStyles.prototype.getCachedTableStyles = function() {
- var styles = this.cachedTableFeatureStyles.getStyles();
- if (styles === null) {
- styles = this.cachedTableFeatureStyles.getStyles();
- if (styles === null) {
- styles = this.getTableStyles();
- if (styles === null) {
- styles = new Styles();
- }
- this.cachedTableFeatureStyles.setStyles(styles);
- }
- }
- if (styles.isEmpty()) {
- styles = null;
- }
- return styles;
- };
- /**
- * Get the table style of the geometry type
- * @param {String} geometryType geometry type
- * @return {module:extension/style.StyleRow} style row
- */
- FeatureTableStyles.prototype.getTableStyle = function(geometryType) {
- return this.featureStyleExtension.getTableStyle(this.tableName, geometryType);
- };
- /**
- * Get the table style default
- * @return {module:extension/style.StyleRow} style row
- */
- FeatureTableStyles.prototype.getTableStyleDefault = function() {
- return this.featureStyleExtension.getTableStyleDefault(this.tableName);
- };
- /**
- * Get the table icons
- * @return {module:extension/style.Icons} table icons or null
- */
- FeatureTableStyles.prototype.getTableIcons = function() {
- return this.featureStyleExtension.getTableIcons(this.tableName);
- };
- /**
- * Get the cached table icons, querying and caching if needed
- * @return {module:extension/style.Icons} cached table icons
- */
- FeatureTableStyles.prototype.getCachedTableIcons = function() {
- var icons = this.cachedTableFeatureStyles.getIcons();
- if (icons === null) {
- icons = this.cachedTableFeatureStyles.getIcons();
- if (icons === null) {
- icons = this.getTableIcons();
- if (icons === null) {
- icons = new Icons();
- }
- this.cachedTableFeatureStyles.setIcons(icons);
- }
- }
- if (icons.isEmpty()) {
- icons = null;
- }
- return icons;
- };
- /**
- * Get the table icon of the geometry type
- * @param {String} geometryType geometry type
- * @return {module:extension/style.IconRow} icon row
- */
- FeatureTableStyles.prototype.getTableIcon = function(geometryType) {
- return this.featureStyleExtension.getTableIcon(this.tableName, geometryType);
- };
- /**
- * Get the table icon default
- * @return {module:extension/style.IconRow} icon row
- */
- FeatureTableStyles.prototype.getTableIconDefault = function() {
- return this.featureStyleExtension.getTableIconDefault(this.tableName);
- };
- /**
- * Get the feature styles for the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.FeatureStyles} feature styles or null
- */
- FeatureTableStyles.prototype.getFeatureStylesForFeatureRow = function(featureRow) {
- return this.featureStyleExtension.getFeatureStylesForFeatureRow(featureRow);
- };
- /**
- * Get the feature styles for the feature id
- *
- * @param {Number} featureId feature id
- * @return {module:extension/style.FeatureStyles} feature styles or null
- */
- FeatureTableStyles.prototype.getFeatureStyles = function(featureId) {
- return this.featureStyleExtension.getFeatureStyles(this.tableName, featureId);
- };
- /**
- * Get the feature style (style and icon) of the feature row, searching in
- * order: feature geometry type style or icon, feature default style or
- * icon, table geometry type style or icon, table default style or icon
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.FeatureStyle} feature style
- */
- FeatureTableStyles.prototype.getFeatureStyleForFeatureRow = function(featureRow) {
- return this.getFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());
- };
- /**
- * Get the feature style (style and icon) of the feature row with the
- * provided geometry type, searching in order: feature geometry type style
- * or icon, feature default style or icon, table geometry type style or
- * icon, table default style or icon
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- * @return {module:extension/style.FeatureStyle} feature style
- */
- FeatureTableStyles.prototype.getFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {
- return this.getFeatureStyle(featureRow.getId(), geometryType);
- };
- /**
- * Get the feature style default (style and icon) of the feature row,
- * searching in order: feature default style or icon, table default style or
- * icon
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.FeatureStyle} feature style
- */
- FeatureTableStyles.prototype.getFeatureStyleDefaultForFeatureRow = function(featureRow) {
- return this.getFeatureStyle(featureRow.getId(), null);
- };
- /**
- * Get the feature style (style and icon) of the feature, searching in
- * order: feature geometry type style or icon, feature default style or
- * icon, table geometry type style or icon, table default style or icon
- *
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- * @return {module:extension/style.FeatureStyle} feature style
- */
- FeatureTableStyles.prototype.getFeatureStyle = function(featureId, geometryType) {
- var featureStyle = null;
- var style = this.getStyle(featureId, geometryType);
- var icon = this.getIcon(featureId, geometryType);
- if (style != null || icon != null) {
- featureStyle = new FeatureStyle(style, icon);
- }
- return featureStyle;
- };
- /**
- * Get the feature style (style and icon) of the feature, searching in
- * order: feature geometry type style or icon, feature default style or
- * icon, table geometry type style or icon, table default style or icon
- *
- * @param {Number} featureId feature id
- * @return {module:extension/style.FeatureStyle} feature style
- */
- FeatureTableStyles.prototype.getFeatureStyleDefault = function(featureId) {
- return this.getFeatureStyle(featureId, null);
- };
- /**
- * Get the styles for the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.Styles} styles or null
- */
- FeatureTableStyles.prototype.getStylesForFeatureRow = function(featureRow) {
- return this.featureStyleExtension.getStylesForFeatureRow(featureRow);
- };
- /**
- * Get the styles for the feature id
- *
- * @param {Number} featureId feature id
- * @return {module:extension/style.Styles} styles or null
- */
- FeatureTableStyles.prototype.getStylesForFeatureId = function(featureId) {
- return this.featureStyleExtension.getStylesForFeatureId(this.tableName, featureId);
- };
- /**
- * Get the style of the feature row, searching in order: feature geometry
- * type style, feature default style, table geometry type style, table
- * default style
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.StyleRow} style row
- */
- FeatureTableStyles.prototype.getStyleForFeatureRow = function(featureRow) {
- return this.getStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());
- };
- /**
- * Get the style of the feature row with the provided geometry type,
- * searching in order: feature geometry type style, feature default style,
- * table geometry type style, table default style
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- * @return {module:extension/style.StyleRow} style row
- */
- FeatureTableStyles.prototype.getStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {
- return this.getStyle(featureRow.getId(), geometryType);
- };
- /**
- * Get the default style of the feature row, searching in order: feature
- * default style, table default style
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.StyleRow} style row
- */
- FeatureTableStyles.prototype.getStyleDefaultForFeatureRow = function(featureRow) {
- return this.getStyle(featureRow.getId(), null);
- };
- /**
- * Get the style of the feature, searching in order: feature geometry type
- * style, feature default style, table geometry type style, table default
- * style
- *
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- * @return {module:extension/style.StyleRow} style row
- */
- FeatureTableStyles.prototype.getStyle = function(featureId, geometryType) {
- var styleRow = this.featureStyleExtension.getStyle(this.tableName, featureId, geometryType, false);
- if (styleRow === null) {
- // Table Style
- var styles = this.getCachedTableStyles();
- if (styles != null) {
- styleRow = styles.getStyle(geometryType);
- }
- }
- return styleRow;
- };
- /**
- * Get the default style of the feature, searching in order: feature default
- * style, table default style
- *
- * @param {Number} featureId feature id
- * @return {module:extension/style.StyleRow} style row
- */
- FeatureTableStyles.prototype.getStyleDefault = function(featureId) {
- return this.getStyle(featureId, null);
- };
- /**
- * Get the icons for the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.Icons} icons or null
- */
- FeatureTableStyles.prototype.getIconsForFeatureRow = function(featureRow) {
- return this.featureStyleExtension.getIconsForFeatureRow(featureRow);
- };
- /**
- * Get the icons for the feature id
- *
- * @param {Number} featureId feature id
- * @return {module:extension/style.Icons} icons or null
- */
- FeatureTableStyles.prototype.getIconsForFeatureId = function(featureId) {
- return this.featureStyleExtension.getIconsForFeatureId(this.tableName, featureId);
- };
- /**
- * Get the icon of the feature row, searching in order: feature geometry
- * type icon, feature default icon, table geometry type icon, table default
- * icon
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.IconRow} icon row
- */
- FeatureTableStyles.prototype.getIconForFeatureRow = function(featureRow) {
- return this.getIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());
- };
- /**
- * Get the icon of the feature row with the provided geometry type,
- * searching in order: feature geometry type icon, feature default icon,
- * table geometry type icon, table default icon
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- * @return {module:extension/style.IconRow} icon row
- */
- FeatureTableStyles.prototype.getIconForFeatureRowAndGeometryType = function(featureRow, geometryType) {
- return this.getIcon(featureRow.getId(), geometryType);
- };
- /**
- * Get the default icon of the feature row, searching in order: feature
- * default icon, table default icon
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.IconRow} icon row
- */
- FeatureTableStyles.prototype.getIconDefaultForFeatureRow = function(featureRow) {
- return this.getIcon(featureRow.getId(), null);
- };
- /**
- * Get the icon of the feature, searching in order: feature geometry type
- * icon, feature default icon, table geometry type icon, table default icon
- *
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- * @return {module:extension/style.IconRow} icon row
- */
- FeatureTableStyles.prototype.getIcon = function(featureId, geometryType) {
- var iconRow = this.featureStyleExtension.getIcon(this.tableName, featureId, geometryType, false);
- if (iconRow === null) {
- // Table Icon
- var icons = this.getCachedTableIcons();
- if (icons != null) {
- iconRow = icons.getIcon(geometryType);
- }
- }
- return iconRow;
- };
- /**
- * Get the default icon of the feature, searching in order: feature default
- * icon, table default icon
- *
- * @param {Number} featureId feature id
- * @return {module:extension/style.IconRow} icon row
- */
- FeatureTableStyles.prototype.getIconDefault = function(featureId) {
- return this.getIcon(featureId, null);
- };
- /**
- * Set the feature table default feature styles
- *
- * @param {module:extension/style.FeatureStyles} featureStyles default feature styles
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setTableFeatureStyles = function(featureStyles) {
- return this.featureStyleExtension.setTableFeatureStyles(this.tableName, featureStyles).then(function () {
- this.clearCachedTableFeatureStyles();
- }.bind(this));
- };
- /**
- * Set the feature table default styles
- *
- * @param {module:extension/style.Styles} styles default styles
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setTableStyles = function(styles) {
- return this.featureStyleExtension.setTableStyles(this.tableName, styles).then(function () {
- this.clearCachedTableStyles();
- }.bind(this));
- };
- /**
- * Set the feature table style default
- *
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setTableStyleDefault = function(style) {
- return this.featureStyleExtension.setTableStyleDefault(this.tableName, style).then(function () {
- this.clearCachedTableStyles();
- }.bind(this));
- };
- /**
- * Set the feature table style for the geometry type
- *
- * @param {String} geometryType geometry type
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setTableStyle = function(geometryType, style) {
- return this.featureStyleExtension.setTableStyle(this.tableName, geometryType, style).then(function () {
- this.clearCachedTableStyles();
- }.bind(this));
- };
- /**
- * Set the feature table default icons
- *
- * @param {module:extension/style.Icons} icons default icons
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setTableIcons = function(icons) {
- return this.featureStyleExtension.setTableIcons(this.tableName, icons).then(function () {
- this.clearCachedTableIcons();
- }.bind(this));
- };
- /**
- * Set the feature table icon default
- *
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setTableIconDefault = function(icon) {
- return this.featureStyleExtension.setTableIconDefault(this.tableName, icon).then(function () {
- this.clearCachedTableIcons();
- }.bind(this));
- };
- /**
- * Set the feature table icon for the geometry type
- *
- * @param {String} geometryType geometry type
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setTableIcon = function(geometryType, icon) {
- return this.featureStyleExtension.setTableIcon(this.tableName, geometryType, icon).then(function () {
- this.clearCachedTableIcons();
- }.bind(this));
- };
- /**
- * Set the feature styles for the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.FeatureStyles} featureStyles feature styles
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) {
- return this.featureStyleExtension.setFeatureStylesForFeatureRow(featureRow, featureStyles);
- };
- /**
- * Set the feature styles for the feature table and feature id
- *
- * @param {Number} featureId feature id
- * @param {module:extension/style.FeatureStyles} featureStyles feature styles
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setFeatureStyles = function(featureId, featureStyles) {
- return this.featureStyleExtension.setFeatureStyles(this.tableName, featureId, featureStyles);
- };
- /**
- * Set the feature style (style and icon) of the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) {
- return this.featureStyleExtension.setFeatureStyleForFeatureRow(featureRow, featureStyle);
- };
- /**
- * Set the feature style (style and icon) of the feature row for the
- * specified geometry type
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) {
- return this.featureStyleExtension.setFeatureStyleForFeatureRowAndGeometryType(featureRow, geometryType, featureStyle);
- };
- /**
- * Set the feature style default (style and icon) of the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) {
- return this.featureStyleExtension.setFeatureStyleDefaultForFeatureRow(featureRow, featureStyle);
- };
- /**
- * Set the feature style (style and icon) of the feature
- *
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setFeatureStyle = function(featureId, geometryType, featureStyle) {
- return this.featureStyleExtension.setFeatureStyle(this.tableName, featureId, geometryType, featureStyle);
- };
- /**
- * Set the feature style (style and icon) of the feature
- *
- * @param {Number} featureId feature id
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setFeatureStyleDefault = function(featureId, featureStyle) {
- return this.featureStyleExtension.setFeatureStyleDefault(this.tableName, featureId, featureStyle);
- };
- /**
- * Set the styles for the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.StyleRow} styles styles
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setStylesForFeatureRow = function(featureRow, styles) {
- return this.featureStyleExtension.setStylesForFeatureRow(featureRow, styles);
- };
- /**
- * Set the styles for the feature table and feature id
- *
- * @param {Number} featureId feature id
- * @param {module:extension/style.Styles} styles styles
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setStyles = function(featureId, styles) {
- return this.featureStyleExtension.setStyles(this.tableName, featureId, styles);
- };
- /**
- * Set the style of the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setStyleForFeatureRow = function(featureRow, style) {
- return this.featureStyleExtension.setStyleForFeatureRow(featureRow, style);
- };
- /**
- * Set the style of the feature row for the specified geometry type
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) {
- return this.featureStyleExtension.setStyleForFeatureRowAndGeometryType(featureRow, geometryType, style);
- };
- /**
- * Set the default style of the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) {
- return this.featureStyleExtension.setStyleDefaultForFeatureRow(featureRow, style);
- };
- /**
- * Set the style of the feature
- *
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setStyle = function(featureId, geometryType, style) {
- return this.featureStyleExtension.setStyle(this.tableName, featureId, geometryType, style);
- };
- /**
- * Set the default style of the feature
- *
- * @param {Number} featureId feature id
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setStyleDefault = function(featureId, style) {
- return this.featureStyleExtension.setStyleDefault(this.tableName, featureId, style);
- };
- /**
- * Set the icons for the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.Icons} icons icons
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setIconsForFeatureRow = function(featureRow, icons) {
- return this.featureStyleExtension.setIconsForFeatureRow(featureRow, icons);
- };
- /**
- * Set the icons for the feature table and feature id
- *
- * @param {Number} featureId feature id
- * @param {module:extension/style.Icons} icons icons
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setIcons = function(featureId, icons) {
- return this.featureStyleExtension.setIcons(this.tableName, featureId, icons);
- };
- /**
- * Set the icon of the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setIconForFeatureRow = function(featureRow, icon) {
- return this.featureStyleExtension.setIconForFeatureRow(featureRow, icon);
- };
- /**
- * Set the icon of the feature row for the specified geometry type
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) {
- return this.featureStyleExtension.setIconForFeatureRowAndGeometryType(featureRow, geometryType, icon);
- };
- /**
- * Set the default icon of the feature row
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) {
- return this.featureStyleExtension.setIconDefaultForFeatureRow(featureRow, icon);
- };
- /**
- * Get the icon of the feature, searching in order: feature geometry type
- * icon, feature default icon, table geometry type icon, table default icon
- *
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setIcon = function(featureId, geometryType, icon) {
- return this.featureStyleExtension.setIcon(this.tableName, featureId, geometryType, icon);
- };
- /**
- * Set the default icon of the feature
- *
- * @param {Number} featureId feature id
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureTableStyles.prototype.setIconDefault = function(featureId, icon) {
- return this.featureStyleExtension.setIconDefault(this.tableName, featureId, icon);
- };
- /**
- * Delete all feature styles including table styles, table icons, style, and
- * icons
- */
- FeatureTableStyles.prototype.deleteAllFeatureStyles = function() {
- this.featureStyleExtension.deleteAllFeatureStyles(this.tableName);
- this.clearCachedTableFeatureStyles();
- };
- /**
- * Delete all styles including table styles and feature row styles
- */
- FeatureTableStyles.prototype.deleteAllStyles = function() {
- this.featureStyleExtension.deleteAllStyles(this.tableName);
- this.clearCachedTableStyles();
- };
- /**
- * Delete all icons including table icons and feature row icons
- */
- FeatureTableStyles.prototype.deleteAllIcons = function() {
- this.featureStyleExtension.deleteAllIcons(this.tableName);
- this.clearCachedTableIcons();
- };
- /**
- * Delete the feature table feature styles
- */
- FeatureTableStyles.prototype.deleteTableFeatureStyles = function() {
- this.featureStyleExtension.deleteTableFeatureStyles(this.tableName);
- this.clearCachedTableFeatureStyles();
- };
- /**
- * Delete the feature table styles
- */
- FeatureTableStyles.prototype.deleteTableStyles = function() {
- this.featureStyleExtension.deleteTableStyles(this.tableName);
- this.clearCachedTableStyles();
- };
- /**
- * Delete the feature table default style
- */
- FeatureTableStyles.prototype.deleteTableStyleDefault = function() {
- this.featureStyleExtension.deleteTableStyleDefault(this.tableName);
- this.clearCachedTableStyles();
- };
- /**
- * Delete the feature table style for the geometry type
- *
- * @param {String} geometryType geometry type
- */
- FeatureTableStyles.prototype.deleteTableStyle = function(geometryType) {
- this.featureStyleExtension.deleteTableStyle(this.tableName, geometryType);
- this.clearCachedTableStyles();
- };
- /**
- * Delete the feature table icons
- */
- FeatureTableStyles.prototype.deleteTableIcons = function() {
- this.featureStyleExtension.deleteTableIcons(this.tableName);
- this.clearCachedTableIcons();
- };
- /**
- * Delete the feature table default icon
- */
- FeatureTableStyles.prototype.deleteTableIconDefault = function() {
- this.featureStyleExtension.deleteTableIconDefault(this.tableName);
- this.clearCachedTableIcons();
- };
- /**
- * Delete the feature table icon for the geometry type
- *
- * @param {String} geometryType geometry type
- */
- FeatureTableStyles.prototype.deleteTableIcon = function(geometryType) {
- this.featureStyleExtension.deleteTableIcon(this.tableName, geometryType);
- this.clearCachedTableIcons();
- };
- /**
- * Clear the cached table feature styles
- */
- FeatureTableStyles.prototype.clearCachedTableFeatureStyles = function() {
- this.cachedTableFeatureStyles.setStyles(null);
- this.cachedTableFeatureStyles.setIcons(null);
- };
- /**
- * Clear the cached table styles
- */
- FeatureTableStyles.prototype.clearCachedTableStyles = function() {
- this.cachedTableFeatureStyles.setStyles(null);
- };
- /**
- * Clear the cached table icons
- */
- FeatureTableStyles.prototype.clearCachedTableIcons = function() {
- this.cachedTableFeatureStyles.setIcons(null);
- };
- /**
- * Delete all feature styles
- */
- FeatureTableStyles.prototype.deleteFeatureStyles = function() {
- this.featureStyleExtension.deleteFeatureStyles(this.tableName);
- };
- /**
- * Delete all styles
- */
- FeatureTableStyles.prototype.deleteStyles = function() {
- this.featureStyleExtension.deleteStyles(this.tableName);
- };
- /**
- * Delete feature row styles
- *
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureTableStyles.prototype.deleteStylesForFeatureRow = function(featureRow) {
- this.featureStyleExtension.deleteStylesForFeatureRow(featureRow);
- };
- /**
- * Delete feature row styles
- *
- * @param {Number} featureId feature id
- */
- FeatureTableStyles.prototype.deleteStylesForFeatureId = function(featureId) {
- this.featureStyleExtension.deleteStylesForFeatureId(this.tableName, featureId);
- };
- /**
- * Delete the feature row default style
- *
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureTableStyles.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) {
- this.featureStyleExtension.deleteStyleDefaultForFeatureRow(featureRow);
- };
- /**
- * Delete the feature row default style
- *
- * @param {Number} featureId feature id
- */
- FeatureTableStyles.prototype.deleteStyleDefault = function(featureId) {
- this.featureStyleExtension.deleteStyleDefault(this.tableName, featureId);
- };
- /**
- * Delete the feature row style for the feature row geometry type
- *
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureTableStyles.prototype.deleteStyleForFeatureRow = function(featureRow) {
- this.featureStyleExtension.deleteStyleForFeatureRow(featureRow);
- };
- /**
- * Delete the feature row style for the geometry type
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- */
- FeatureTableStyles.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {
- this.featureStyleExtension.deleteStyleForFeatureRowAndGeometryType(featureRow, geometryType);
- };
- /**
- * Delete the feature row style for the geometry type
- *
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- */
- FeatureTableStyles.prototype.deleteStyle = function(featureId, geometryType) {
- this.featureStyleExtension.deleteStyle(this.tableName, featureId, geometryType);
- };
- /**
- * Delete all icons
- */
- FeatureTableStyles.prototype.deleteIcons = function() {
- this.featureStyleExtension.deleteIcons(this.tableName);
- };
- /**
- * Delete feature row icons
- *
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureTableStyles.prototype.deleteIconsForFeatureRow = function(featureRow) {
- this.featureStyleExtension.deleteIconsForFeatureRow(featureRow);
- };
- /**
- * Delete feature row icons
- *
- * @param {Number} featureId feature id
- */
- FeatureTableStyles.prototype.deleteIconsForFeatureId = function(featureId) {
- this.featureStyleExtension.deleteIconsForFeatureId(this.tableName, featureId);
- };
- /**
- * Delete the feature row default icon
- *
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureTableStyles.prototype.deleteIconDefaultForFeatureRow = function(featureRow) {
- this.featureStyleExtension.deleteIconDefaultForFeatureRow(featureRow);
- };
- /**
- * Delete the feature row default icon
- *
- * @param {Number} featureId feature id
- */
- FeatureTableStyles.prototype.deleteIconDefault = function(featureId) {
- this.featureStyleExtension.deleteIconDefault(this.tableName, featureId);
- };
- /**
- * Delete the feature row icon for the feature row geometry type
- *
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureTableStyles.prototype.deleteIconForFeatureRow = function(featureRow) {
- this.featureStyleExtension.deleteIconForFeatureRow(featureRow);
- };
- /**
- * Delete the feature row icon for the geometry type
- *
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- */
- FeatureTableStyles.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) {
- this.featureStyleExtension.deleteIconForFeatureRowAndGeometryType(featureRow, geometryType);
- };
- /**
- * Delete the feature row icon for the geometry type
- *
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- */
- FeatureTableStyles.prototype.deleteIcon = function(featureId, geometryType) {
- this.featureStyleExtension.deleteIcon(this.tableName, featureId, geometryType);
- };
- /**
- * Get all the unique style row ids the table maps to
- *
- * @return {module:extension/style.StyleRow} style row ids
- */
- FeatureTableStyles.prototype.getAllTableStyleIds = function() {
- return this.featureStyleExtension.getAllTableStyleIds(this.tableName);
- };
- /**
- * Get all the unique icon row ids the table maps to
- *
- * @return {module:extension/style.IconRow} icon row ids
- */
- FeatureTableStyles.prototype.getAllTableIconIds = function() {
- return this.featureStyleExtension.getAllTableIconIds(this.tableName);
- };
- /**
- * Get all the unique style row ids the features map to
- *
- * @return {module:extension/style.StyleRow} style row ids
- */
- FeatureTableStyles.prototype.getAllStyleIds = function() {
- return this.featureStyleExtension.getAllStyleIds(this.tableName);
- };
- /**
- * Get all the unique icon row ids the features map to
- *
- * @return {module:extension/style.IconRow} icon row ids
- */
- FeatureTableStyles.prototype.getAllIconIds = function() {
- return this.featureStyleExtension.getAllIconIds(this.tableName);
- };
- module.exports = FeatureTableStyles;
- },{"./featureStyle":46,"./featureStyles":47,"./icons":53,"./styles":62}],49:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class IconCache
- */
- /**
- * Constructor, created with cache size of {@link #IconCache.DEFAULT_CACHE_SIZE}
- * @constructor
- */
- var IconCache = function(size = null) {
- this.cacheSize = size !== null ? size : IconCache.DEFAULT_CACHE_SIZE;
- this.iconCache = {};
- this.accessHistory = [];
- };
- /**
- * Get the cached image for the icon row or null if not cached
- * @param {module:extension/style.IconRow} iconRow icon row
- * @return {Image} icon image or null
- */
- IconCache.prototype.getIconForIconRow = function(iconRow) {
- return this.get(iconRow.getId());
- };
- /**
- * Get the cached image for the icon row id or null if not cached
- * @param {Number} iconRowId icon row id
- * @return {Image} icon image or null
- */
- IconCache.prototype.get = function(iconRowId) {
- var image = this.iconCache[iconRowId];
- if (!!image) {
- var index = this.accessHistory.indexOf(iconRowId);
- if (index > -1) {
- this.accessHistory.splice(index, 1);
- }
- this.accessHistory.push(iconRowId);
- }
- return image;
- };
- /**
- * Cache the icon image for the icon row
- * @param {module:extension/style.IconRow} iconRow icon row
- * @param {Image} image icon image
- * @return {Image} previous cached icon image or null
- */
- IconCache.prototype.putIconForIconRow = function(iconRow, image) {
- return this.put(iconRow.getId(), image);
- };
- /**
- * Cache the icon image for the icon row id
- * @param {Number} iconRowId icon row id
- * @param {Image} image icon image
- * @return {Image} previous cached icon image or null
- */
- IconCache.prototype.put = function(iconRowId, image) {
- var previous = this.iconCache[iconRowId];
- this.iconCache[iconRowId] = image;
- if (!!previous) {
- var index = this.accessHistory.indexOf(iconRowId);
- if (index > -1) {
- this.accessHistory.splice(index, 1);
- }
- }
- this.accessHistory.push(iconRowId);
- if (Object.keys(this.iconCache).length > this.cacheSize) {
- var iconId = this.accessHistory.shift();
- if (iconId) {
- delete this.iconCache[iconId];
- }
- }
- return previous;
- };
- /**
- * Remove the cached image for the icon row
- * @param {module:extension/style.IconRow} iconRow icon row
- * @return {Image} removed icon image or null
- */
- IconCache.prototype.removeIconForIconRow = function(iconRow) {
- return this.remove(iconRow.getId());
- };
- /**
- * Remove the cached image for the icon row id
- * @param {Number} iconRowId icon row id
- * @return {Image} removed icon image or null
- */
- IconCache.prototype.remove = function(iconRowId) {
- var removed = this.iconCache[iconRowId];
- delete this.iconCache[iconRowId];
- if (!!removed) {
- var index = this.accessHistory.indexOf(iconRowId);
- if (index > -1) {
- this.accessHistory.splice(index, 1);
- } }
- return removed;
- };
- /**
- * Clear the cache
- */
- IconCache.prototype.clear = function() {
- this.iconCache = {};
- this.accessHistory = [];
- };
- /**
- * Resize the cache
- * @param {Number} maxSize max size
- */
- IconCache.prototype.resize = function(maxSize) {
- this.cacheSize = maxSize;
- var keys = Object.keys(this.iconCache);
- if (keys.length > maxSize) {
- var numberToRemove = keys.length - maxSize;
- for (var i = 0; i < numberToRemove; i++) {
- delete this.iconCache[this.accessHistory.shift()];
- }
- }
- };
- /**
- * Create or retrieve from cache an icon image for the icon row
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise<Image>} icon image
- */
- IconCache.prototype.createIcon = function(icon) {
- return this.createAndCacheIcon(icon, this);
- };
- /**
- * Create or retrieve from cache an icon image for the icon row
- * @param {module:extension/style.IconRow} icon icon row
- * @param {Number} scale scale factor
- * @return {Promise<Image>} icon image
- */
- IconCache.prototype.createScaledIcon = function(icon, scale) {
- return this.createAndCacheScaledIcon(icon, scale, this);
- };
- /**
- * Create an icon image for the icon row without caching
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise<Image>} icon image
- */
- IconCache.prototype.createIconNoCache = function(icon) {
- return this.createScaledIconNoCache(icon, 1.0);
- };
- /**
- * Create an icon image for the icon row without caching
- * @param icon icon row
- * @param scale scale factor
- * @return {Promise<Image>} icon image
- */
- IconCache.prototype.createScaledIconNoCache = function(icon, scale) {
- return this.createAndCacheScaledIcon(icon, scale, null);
- };
- /**
- * Create or retrieve from cache an icon image for the icon row
- * @param {module:extension/style.IconRow} icon icon row
- * @param {module:extension/style.IconCache} iconCache icon cache
- * @return {Promise<Image>} icon image
- */
- IconCache.prototype.createAndCacheIcon = function(icon, iconCache) {
- return this.createAndCacheScaledIcon(icon, 1.0, iconCache);
- };
- /**
- * Create or retrieve from cache an icon image for the icon row
- * @param {module:extension/style.IconRow} icon icon row
- * @param {Number} scale scale factor
- * @param {module:extension/style.IconCache} iconCache icon cache
- * @return {Promise<Image>} icon image
- */
- IconCache.prototype.createAndCacheScaledIcon = async function(icon, scale, iconCache) {
- var iconImage = null;
- if (icon != null) {
- var iconId = icon.getId();
- if (iconCache !== null) {
- iconImage = iconCache.get(iconId);
- }
- var iconScaledWidth = Math.round(icon.getWidth() * scale);
- var iconScaledHeight = Math.round(icon.getHeight() * scale);
- if (!iconImage || iconImage.width !== iconScaledWidth || iconImage.height !== iconScaledHeight) {
- iconImage = await icon.getScaledDataImage(scale);
- }
- if (iconCache !== null) {
- iconCache.putIconForIconRow(icon, iconImage);
- }
- }
- return iconImage;
- };
- IconCache.DEFAULT_CACHE_SIZE = 100;
- module.exports = IconCache;
- },{}],50:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class IconDao
- */
- var IconRow = require('./iconRow')
- , MediaDao = require('../relatedTables/mediaDao');
- var util = require('util');
- /**
- * Icon DAO for reading user icon data tables
- * @extends {module:user/userDao~MediaDao}
- * @param {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection
- * @param {string} table table name
- * @constructor
- */
- var IconDao = function(geoPackage, table) {
- MediaDao.call(this, geoPackage, table);
- this.table = table;
- };
- util.inherits(IconDao, MediaDao);
- /**
- * Create a new icon row
- * @return {module:extension/style.IconRow}
- */
- IconDao.prototype.newRow = function() {
- return new IconRow(this.table);
- };
- /**
- * Create a icon row with the column types and values
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @return {module:extension/style.IconRow} icon row
- */
- IconDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new IconRow(this.table, columnTypes, values);
- };
- module.exports = IconDao;
- },{"../relatedTables/mediaDao":33,"./iconRow":51,"util":343}],51:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class IconRow
- */
- var MediaRow = require('../relatedTables/mediaRow');
- var util = require('util');
- var ImageUtils = require('../../tiles/imageUtils');
- /**
- * Icon Row
- * @extends {module:extension/relatedTables~MediaRow}
- * @param {module:extension/style.IconTable} iconTable icon table
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @constructor
- */
- var IconRow = function(iconTable, columnTypes, values) {
- MediaRow.call(this, iconTable, columnTypes, values);
- this.iconTable = iconTable;
- };
- util.inherits(IconRow, MediaRow);
- /**
- * Get the name column
- * @return {module:user/userColumn~UserColumn}
- */
- IconRow.prototype.getNameColumn = function() {
- return this.iconTable.getNameColumn();
- };
- /**
- * Gets the name
- * @return {String}
- */
- IconRow.prototype.getName = function() {
- return this.getValueWithColumnName(this.getNameColumn().name);
- };
- /**
- * Sets the name for the row
- * @param {String} name name
- */
- IconRow.prototype.setName = function(name) {
- this.setValueWithColumnName(this.getNameColumn().name, name);
- };
- /**
- * Get the description column
- * @return {module:user/userColumn~UserColumn}
- */
- IconRow.prototype.getDescriptionColumn = function() {
- return this.iconTable.getDescriptionColumn();
- };
- /**
- * Gets the description
- * @return {String}
- */
- IconRow.prototype.getDescription = function() {
- return this.getValueWithColumnName(this.getDescriptionColumn().name);
- };
- /**
- * Sets the description for the row
- * @param {string} description description
- */
- IconRow.prototype.setDescription = function(description) {
- this.setValueWithColumnName(this.getDescriptionColumn().name, description);
- };
- /**
- * Get the width column
- * @return {module:user/userColumn~UserColumn}
- */
- IconRow.prototype.getWidthColumn = function() {
- return this.iconTable.getWidthColumn();
- };
- /**
- * Gets the width
- * @return {Number}
- */
- IconRow.prototype.getWidth = function() {
- return this.getValueWithColumnName(this.getWidthColumn().name);
- };
- /**
- * Sets the width for the row
- * @param {Number} width width
- */
- IconRow.prototype.setWidth = function(width) {
- this.setValueWithColumnName(this.getWidthColumn().name, width);
- };
- /**
- * Get the width or derived width from the icon data and scaled as needed
- * for the height
- *
- * @return {Promise<Number>} derived width
- */
- IconRow.prototype.getDerivedWidth = function() {
- var width = this.getWidth();
- if (width === undefined || width === null) {
- width = this.getDerivedDimensions()[0];
- }
- return width;
- };
- /**
- * Get the height column
- * @return {module:user/userColumn~UserColumn}
- */
- IconRow.prototype.getHeightColumn = function() {
- return this.iconTable.getHeightColumn();
- };
- /**
- * Gets the height
- * @return {Number}
- */
- IconRow.prototype.getHeight = function() {
- return this.getValueWithColumnName(this.getHeightColumn().name);
- };
- /**
- * Sets the height for the row
- * @param {Number} height height
- */
- IconRow.prototype.setHeight = function(height) {
- this.setValueWithColumnName(this.getHeightColumn().name, height);
- };
- /**
- * Get the height or derived height from the icon data and scaled as needed
- * for the width
- *
- * @return {Promise<Number>} derived height
- */
- IconRow.prototype.getDerivedHeight = function() {
- var height = this.getHeight();
- if (height === undefined || height === null) {
- height = this.getDerivedDimensions()[1];
- }
- return height;
- };
- /**
- * Get the derived width and height from the values and icon data, scaled as needed
- * @return {Number[]} derived dimensions array with two values, width at index 0, height at index 1
- */
- IconRow.prototype.getDerivedDimensions = function() {
- var width = this.getWidth();
- var height = this.getHeight();
- if (width === undefined || width === null || height === undefined || height === null) {
- var dataWidth;
- var dataHeight;
- var imageSize = ImageUtils.getImageSize(this.getData());
- dataWidth = imageSize.width;
- dataHeight = imageSize.height;
- if (width === undefined || width === null) {
- width = dataWidth;
- if (height !== undefined && height !== null) {
- width *= (height / dataHeight);
- }
- }
- if (height === undefined || height === null) {
- height = dataHeight;
- if (width !== undefined && width !== null) {
- height *= (width / dataWidth);
- }
- }
- }
- return [width, height];
- };
- /**
- * Get the anchor_u column
- * @return {module:user/userColumn~UserColumn}
- */
- IconRow.prototype.getAnchorUColumn = function() {
- return this.iconTable.getAnchorUColumn();
- };
- /**
- * Gets the anchor_u
- * @return {Number}
- */
- IconRow.prototype.getAnchorU = function() {
- return this.getValueWithColumnName(this.getAnchorUColumn().name);
- };
- /**
- * Sets the anchor_u for the row
- * @param {Number} anchor_u anchor_u
- */
- IconRow.prototype.setAnchorU = function(anchor_u) {
- this.validateAnchor(anchor_u);
- this.setValueWithColumnName(this.getAnchorUColumn().name, anchor_u);
- };
- /**
- * Get the anchor u value or the default value of 0.5
- * @return {Number} anchor u value
- */
- IconRow.prototype.getAnchorUOrDefault = function() {
- var anchorU = this.getAnchorU();
- if (anchorU == null) {
- anchorU = 0.5;
- }
- return anchorU;
- };
- /**
- * Get the anchor_v column
- * @return {module:user/userColumn~UserColumn}
- */
- IconRow.prototype.getAnchorVColumn = function() {
- return this.iconTable.getAnchorVColumn();
- };
- /**
- * Gets the anchor_v
- * @return {Number}
- */
- IconRow.prototype.getAnchorV = function() {
- return this.getValueWithColumnName(this.getAnchorVColumn().name);
- };
- /**
- * Sets the anchor_v for the row
- * @param {Number} anchor_v anchor_v
- */
- IconRow.prototype.setAnchorV = function(anchor_v) {
- this.validateAnchor(anchor_v);
- this.setValueWithColumnName(this.getAnchorVColumn().name, anchor_v);
- };
- /**
- * Get the anchor v value or the default value of 1.0
- * @return {Number} anchor v value
- */
- IconRow.prototype.getAnchorVOrDefault = function() {
- var anchorV = this.getAnchorV();
- if (anchorV == null) {
- anchorV = 1.0;
- }
- return anchorV;
- };
- /**
- * Validate the anchor value
- * @param {Number} anchor anchor
- */
- IconRow.prototype.validateAnchor = function(anchor) {
- if (anchor != null && (anchor < 0.0 || anchor > 1.0)) {
- throw new Error("Anchor must be set inclusively between 0.0 and 1.0, invalid value: " + anchor);
- }
- };
- module.exports = IconRow;
- },{"../../tiles/imageUtils":89,"../relatedTables/mediaRow":34,"util":343}],52:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class IconTable
- */
- var MediaTable = require('../relatedTables/mediaTable')
- , UserCustomColumn = require('../../user/custom/userCustomColumn')
- , DataTypes = require('../../db/dataTypes');
- var util = require('util');
- /**
- * Icon Requirements Class Media Table
- * @class
- * @extends {module:extension/relatedTables~MediaTable}
- * @param {string} tableName table name
- * @param {module:user/userColumn~UserColumn[]} columns media columns
- * @param {string[]} requiredColumns required column names
- */
- var IconTable = function(tableName, columns, requiredColumns) {
- MediaTable.call(this, tableName, columns, requiredColumns);
- };
- util.inherits(IconTable, MediaTable);
- /**
- * Create a media table with a minimum required columns followed by the additional columns
- * @return {module:extension/relatedTables~MediaTable}
- */
- IconTable.create = function() {
- return new IconTable(IconTable.TABLE_NAME, IconTable.createColumns(), IconTable.requiredColumns());
- };
- IconTable.createRequiredColumns = function() {
- return MediaTable.createRequiredColumns();
- };
- /**
- * Get the required columns
- * @return {string[]}
- */
- IconTable.requiredColumns = function() {
- return MediaTable.requiredColumns();
- };
- /**
- * Create the columns
- * @return {module:user/userColumn~UserColumn[]}
- */
- IconTable.createColumns = function() {
- var columns = IconTable.createRequiredColumns();
- var index = columns.length;
- columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_HEIGHT, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_ANCHOR_U, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index, IconTable.COLUMN_ANCHOR_V, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));
- return columns;
- };
- /**
- * Get the name column index
- * @return int
- */
- IconTable.prototype.getNameColumnIndex = function() {
- return this.getColumnIndex(IconTable.COLUMN_NAME);
- };
- /**
- * Get the name column
- * @return {module:user/userColumn~UserColumn}
- */
- IconTable.prototype.getNameColumn = function() {
- return this.getColumnWithColumnName(IconTable.COLUMN_NAME);
- };
- /**
- * Get the description column index
- * @return int
- */
- IconTable.prototype.getDescriptionColumnIndex = function() {
- return this.getColumnIndex(IconTable.COLUMN_DESCRIPTION);
- };
- /**
- * Get the description column
- * @return {module:user/userColumn~UserColumn}
- */
- IconTable.prototype.getDescriptionColumn = function() {
- return this.getColumnWithColumnName(IconTable.COLUMN_DESCRIPTION);
- };
- /**
- * Get the width column index
- * @return int
- */
- IconTable.prototype.getWidthColumnIndex = function() {
- return this.getColumnIndex(IconTable.COLUMN_WIDTH);
- };
- /**
- * Get the width column
- * @return {module:user/userColumn~UserColumn}
- */
- IconTable.prototype.getWidthColumn = function() {
- return this.getColumnWithColumnName(IconTable.COLUMN_WIDTH);
- };
- /**
- * Get the height column index
- * @return int
- */
- IconTable.prototype.getHeightColumnIndex = function() {
- return this.getColumnIndex(IconTable.COLUMN_HEIGHT);
- };
- /**
- * Get the height column
- * @return {module:user/userColumn~UserColumn}
- */
- IconTable.prototype.getHeightColumn = function() {
- return this.getColumnWithColumnName(IconTable.COLUMN_HEIGHT);
- };
- /**
- * Get the anchor_u column index
- * @return int
- */
- IconTable.prototype.getAnchorUColumnIndex = function() {
- return this.getColumnIndex(IconTable.COLUMN_ANCHOR_U);
- };
- /**
- * Get the anchor_u column
- * @return {module:user/userColumn~UserColumn}
- */
- IconTable.prototype.getAnchorUColumn = function() {
- return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_U);
- };
- /**
- * Get the anchor_v column index
- * @return int
- */
- IconTable.prototype.getAnchorVColumnIndex = function() {
- return this.getColumnIndex(IconTable.COLUMN_ANCHOR_V);
- };
- /**
- * Get the anchor_v column
- * @return {module:user/userColumn~UserColumn}
- */
- IconTable.prototype.getAnchorVColumn = function() {
- return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_V);
- };
- IconTable.TABLE_NAME = 'nga_icon';
- IconTable.COLUMN_NAME = 'name';
- IconTable.COLUMN_DESCRIPTION = 'description';
- IconTable.COLUMN_WIDTH = 'width';
- IconTable.COLUMN_HEIGHT = 'height';
- IconTable.COLUMN_ANCHOR_U = 'anchor_u';
- IconTable.COLUMN_ANCHOR_V = 'anchor_v';
- IconTable.prototype.TABLE_TYPE = 'media';
- module.exports = IconTable;
- },{"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../relatedTables/mediaTable":35,"util":343}],53:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class Icons
- */
- /**
- * Icons constructor
- * @constructor
- */
- var Icons = function() {
- this.defaultIcon = null;
- this.icons = {};
- };
- Icons.prototype.setDefault = function(iconRow) {
- this.defaultIcon = iconRow;
- };
- Icons.prototype.getDefault = function() {
- return this.defaultIcon;
- };
- Icons.prototype.setIcon = function(iconRow, geometryType) {
- if (geometryType != null) {
- if (iconRow != null) {
- this.icons[geometryType] = iconRow;
- } else {
- delete this.icons[geometryType];
- }
- } else {
- this.setDefault(iconRow);
- }
- };
- Icons.prototype.getIcon = function(geometryType) {
- var iconRow = null;
- if (geometryType != null) {
- iconRow = this.icons[geometryType];
- }
- if (iconRow === null || geometryType === null) {
- iconRow = this.getDefault();
- }
- return iconRow;
- };
- Icons.prototype.isEmpty = function() {
- return Object.keys(this.icons).length === 0 && this.defaultIcon === null;
- };
- module.exports = Icons;
- },{}],54:[function(require,module,exports){
- /**
- * @module extension/style
- */
- var BaseExtension = require('../baseExtension')
- , Extension = require('../.').Extension
- , ContentsIdDao = require('../contents/contentsIdDao')
- , IconTable = require('./iconTable')
- , IconDao = require('./iconDao')
- , StyleTable = require('./styleTable')
- , StyleDao = require('./styleDao')
- , StyleMappingTable = require('./styleMappingTable')
- , StyleMappingDao = require('./styleMappingDao')
- , UserMappingTable = require('../relatedTables/userMappingTable')
- , FeatureStyles = require('./featureStyles')
- , FeatureStyle = require('./featureStyle')
- , Styles = require('./styles')
- , Icons = require('./icons')
- , StyleTableReader = require('./styleTableReader')
- , UserTableReader = require('../../user/userTableReader');
- var util = require('util');
- /**
- * Style extension
- * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object
- * @extends {module:extension/baseExtension~BaseExtension}
- * @constructor
- */
- var FeatureStyleExtension = function(geoPackage) {
- BaseExtension.call(this, geoPackage);
- this.relatedTablesExtension = geoPackage.getRelatedTablesExtension();
- this.contentsIdExtension = geoPackage.getContentsIdExtension();
- };
- util.inherits(FeatureStyleExtension, BaseExtension);
- /**
- * Get or create the metadata extension
- * @param {module:features/user/featureTable|String} featureTable, defaults to null
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.getOrCreateExtension = function(featureTable) {
- return this.getOrCreate(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null, FeatureStyleExtension.EXTENSION_DEFINITION, Extension.READ_WRITE);
- };
- /**
- * Determine if the GeoPackage has the extension or has the extension for the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @returns {Boolean}
- */
- FeatureStyleExtension.prototype.has = function (featureTable) {
- return this.hasExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null);
- };
- /**
- * Gets featureTables
- * @returns {String[]}
- */
- FeatureStyleExtension.prototype.getTables = function() {
- var tables = [];
- if (this.extensionsDao.isTableExists()) {
- var extensions = this.extensionsDao.queryAllByExtension(FeatureStyleExtension.EXTENSION_NAME);
- for (var i = 0; i < extensions.length; i++) {
- tables.push(extensions[i].table_name);
- }
- }
- return tables;
- };
- /**
- * Get the related tables extension
- * @returns {module:extension/relatedTables~RelatedTablesExtension}
- */
- FeatureStyleExtension.prototype.getRelatedTables = function () {
- return this.relatedTablesExtension;
- };
- /**
- * Get the contentsId extension
- * @returns {module:extension/contents~ContentsIdExtension}
- */
- FeatureStyleExtension.prototype.getContentsId = function () {
- return this.contentsIdExtension;
- };
- /**
- * Create style, icon, table style, and table icon relationships for the
- * feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.createRelationships = function(featureTable) {
- var promises = [];
- promises.push(this.createStyleRelationship(featureTable));
- promises.push(this.createTableStyleRelationship(featureTable));
- promises.push(this.createIconRelationship(featureTable));
- promises.push(this.createTableIconRelationship(featureTable));
- return Promise.all(promises);
- };
- /**
- * Check if feature table has a style, icon, table style, or table icon
- * relationships
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @returns {boolean}
- */
- FeatureStyleExtension.prototype.hasRelationship = function(featureTable) {
- return this.hasStyleRelationship(featureTable)
- || this.hasTableStyleRelationship(featureTable)
- || this.hasIconRelationship(featureTable)
- || this.hasTableIconRelationship(featureTable);
- };
- /**
- * Create a style relationship for the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.createStyleRelationship = function(featureTable) {
- return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME);
- };
- /**
- * Determine if a style relationship exists for the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @returns {boolean}
- */
- FeatureStyleExtension.prototype.hasStyleRelationship = function(featureTable) {
- return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME);
- };
- /**
- * Create a feature table style relationship
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.createTableStyleRelationship = function(featureTable) {
- return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME);
- };
- /**
- * Determine if a feature table style relationship exists
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @returns {boolean} true if relationship exists
- */
- FeatureStyleExtension.prototype.hasTableStyleRelationship = function(featureTable) {
- return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME);
- };
- /**
- * Create an icon relationship for the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.createIconRelationship = function(featureTable) {
- return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME);
- };
- /**
- * Determine if an icon relationship exists for the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @returns {boolean} true if relationship exists
- */
- FeatureStyleExtension.prototype.hasIconRelationship = function(featureTable) {
- return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME);
- };
- /**
- * Create a feature table icon relationship
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.createTableIconRelationship = function(featureTable) {
- return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME);
- };
- /**
- * Determine if a feature table icon relationship exists
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @returns {Boolean} true if relationship exists
- */
- FeatureStyleExtension.prototype.hasTableIconRelationship = function(featureTable) {
- return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME);
- };
- /**
- * Get the mapping table name
- * @param tablePrefix table name prefix
- * @param {module:features/user/featureTable|String} featureTable feature table name
- * @returns {String} mapping table name
- */
- FeatureStyleExtension.prototype.getMappingTableName = function(tablePrefix, featureTable) {
- return tablePrefix + this.getFeatureTableName(featureTable);
- };
- /**
- * Check if the style extension relationship between a feature table and
- * style extension table exists
- * @param {String} mappingTableName mapping table name
- * @param {String} baseTable base table name
- * @param {String} relatedTable related table name
- * @returns {boolean} true if relationship exists
- */
- FeatureStyleExtension.prototype._hasStyleRelationship = function(mappingTableName, baseTable, relatedTable) {
- return this.relatedTablesExtension.hasRelations(baseTable, relatedTable, mappingTableName).length !== 0;
- };
- /**
- * Create a style extension relationship between a feature table and style
- * extension table
- * @param {String} mappingTableName mapping table name
- * @param {String} featureTable feature table
- * @param {String} baseTable base table name
- * @param {String} relatedTable related table name
- * @return {Promise}
- * @private
- */
- FeatureStyleExtension.prototype._createStyleRelationship = function(mappingTableName, featureTable, baseTable, relatedTable) {
- if (!this._hasStyleRelationship(mappingTableName, baseTable, relatedTable)) {
- // Create the extension
- return this.getOrCreateExtension(featureTable).then(function () {
- if (baseTable === ContentsIdDao.TABLE_NAME && !this.contentsIdExtension.has()) {
- return this.contentsIdExtension.getOrCreateExtension().then(function () {
- return this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable);
- }.bind(this));
- } else {
- return this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable);
- }
- }.bind(this));
- } else {
- return Promise.resolve();
- }
- };
- /**
- * Private function to aid in creation of the a style extension relationship between a feature table and style extension table
- * @param {String} mappingTableName
- * @param {String} baseTable
- * @param {String} relatedTable
- * @return {Promise}
- * @private
- */
- FeatureStyleExtension.prototype._handleCreateStyleRelationship = function(mappingTableName, baseTable, relatedTable) {
- if (relatedTable === StyleTable.TABLE_NAME) {
- return this.relatedTablesExtension.addAttributesRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder()
- .setBaseTableName(baseTable)
- .setUserMappingTable(StyleMappingTable.create(mappingTableName))
- .setRelatedTable(StyleTable.create()));
- } else {
- return this.relatedTablesExtension.addMediaRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder()
- .setBaseTableName(baseTable)
- .setUserMappingTable(StyleMappingTable.create(mappingTableName))
- .setRelatedTable(IconTable.create()));
- }
- };
- /**
- * Delete the style and icon table and row relationships for all feature
- * tables
- */
- FeatureStyleExtension.prototype.deleteAllRelationships = function() {
- var tables = this.getTables();
- for (var i = 0; i < tables.length; i++) {
- this.deleteRelationships(tables[i]);
- }
- };
- /**
- * Delete the style and icon table and row relationships for the feature
- * table
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteRelationships = function(featureTable) {
- this.deleteStyleRelationship(featureTable);
- this.deleteTableStyleRelationship(featureTable);
- this.deleteIconRelationship(featureTable);
- this.deleteTableIconRelationship(featureTable);
- };
- /**
- * Delete a style relationship for the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteStyleRelationship = function(featureTable) {
- this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), featureTable);
- };
- /**
- * Delete a table style relationship for the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteTableStyleRelationship = function(featureTable) {
- this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), featureTable);
- };
- /**
- * Delete a icon relationship for the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteIconRelationship = function(featureTable) {
- this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), featureTable);
- };
- /**
- * Delete a table icon relationship for the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteTableIconRelationship = function(featureTable) {
- this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), featureTable);
- };
- /**
- * Delete a style extension feature table relationship and the mapping table
- * @param {String} mappingTableName
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @private
- */
- FeatureStyleExtension.prototype._deleteStyleRelationship = function(mappingTableName, featureTable) {
- var relationships = this.geoPackage.getExtendedRelationDao().queryByMappingTableName(mappingTableName);
- for (var i = 0; i < relationships.length; i++) {
- this.relatedTablesExtension.removeRelationship(relationships[i]);
- }
- if (!this.hasRelationship(featureTable)) {
- if (this.extensionsDao.isTableExists()) {
- this.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable));
- }
- }
- };
- /**
- * Get a Style Mapping DAO
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.StyleMappingDao} style mapping DAO
- */
- FeatureStyleExtension.prototype.getStyleMappingDao = function (featureTable) {
- return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable);
- };
- /**
- * Get a Table Style Mapping DAO
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.StyleMappingDao} table style mapping DAO
- */
- FeatureStyleExtension.prototype.getTableStyleMappingDao = function (featureTable) {
- return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable);
- };
- /**
- * Get a Icon Mapping DAO
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.StyleMappingDao} icon mapping DAO
- */
- FeatureStyleExtension.prototype.getIconMappingDao = function (featureTable) {
- return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable);
- };
- /**
- * Get a Table Icon Mapping DAO
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.StyleMappingDao} table icon mapping DAO
- */
- FeatureStyleExtension.prototype.getTableIconMappingDao = function (featureTable) {
- return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable);
- };
- /**
- * Get a Style Mapping DAO from a table name
- * @param {String} tablePrefix table name prefix
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.StyleMappingDao} style mapping dao
- * @private
- */
- FeatureStyleExtension.prototype._getMappingDao = function (tablePrefix, featureTable) {
- var featureTableName = this.getFeatureTableName(featureTable);
- var tableName = tablePrefix + featureTableName;
- var dao = null;
- if (this.geoPackage.isTable(tableName)) {
- dao = new StyleMappingDao(this.relatedTablesExtension.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage);
- }
- return dao;
- };
- /**
- * Get a style DAO
- * @return {module:extension/style.StyleDao} style DAO
- */
- FeatureStyleExtension.prototype.getStyleDao = function () {
- var styleDao = null;
- if (this.geoPackage.isTable(StyleTable.TABLE_NAME)) {
- var dao = this.geoPackage.getContentsDao();
- var contents = dao.queryForId(StyleTable.TABLE_NAME);
- if (contents) {
- var reader = new StyleTableReader(contents.table_name);
- var table = reader.readTable(this.geoPackage.connection);
- this.relatedTablesExtension.setContents(table);
- styleDao = new StyleDao(this.geoPackage, table);
- }
- }
- return styleDao;
- };
- /**
- * Get a icon DAO
- * @return {module:extension/style.IconDao}
- */
- FeatureStyleExtension.prototype.getIconDao = function() {
- var iconDao = null;
- if (this.geoPackage.isTable(IconTable.TABLE_NAME)) {
- var reader = new UserTableReader(IconTable.TABLE_NAME, IconTable.requiredColumns());
- var userTable = reader.readTable(this.geoPackage.getDatabase());
- var table = new IconTable(userTable.table_name, userTable.columns, IconTable.requiredColumns());
- table.setContents(this.geoPackage.getContentsDao().queryForId(IconTable.TABLE_NAME));
- iconDao = new IconDao(this.geoPackage, table);
- }
- return iconDao;
- };
- /**
- * Get the feature table default feature styles
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.FeatureStyles} table feature styles or null
- */
- FeatureStyleExtension.prototype.getTableFeatureStyles = function(featureTable) {
- var featureStyles = null;
- var id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));
- if (id !== null) {
- var styles = this.getTableStyles(featureTable);
- var icons = this.getTableIcons(featureTable);
- if (styles !== null || icons !== null) {
- featureStyles = new FeatureStyles(styles, icons);
- }
- }
- return featureStyles;
- };
- /**
- * Get the default style of the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.StyleRow} style row
- */
- FeatureStyleExtension.prototype.getTableStyleDefault = function(featureTable) {
- return this.getTableStyle(featureTable, null);
- };
- /**
- * Get the style of the feature table and geometry type
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {String} geometryType geometry type
- * @return {module:extension/style.StyleRow} style row
- */
- FeatureStyleExtension.prototype.getTableStyle = function(featureTable, geometryType) {
- var style = null;
- var styles = this.getTableStyles(featureTable);
- if (styles !== null) {
- if (geometryType === null) {
- style = styles.getDefault();
- } else {
- style = styles.getStyle(geometryType);
- }
- }
- return style;
- };
- /**
- * Get the feature table default styles
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.Styles} table styles or null
- */
- FeatureStyleExtension.prototype.getTableStyles = function(featureTable) {
- var styles = null;
- var id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));
- if (id !== null) {
- styles = this.getStyles(id, this.getTableStyleMappingDao(featureTable));
- }
- return styles;
- };
- /**
- * Get the default icon of the feature table
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.IconRow} icon row
- */
- FeatureStyleExtension.prototype.getTableIconDefault = function(featureTable) {
- return this.getTableIcon(featureTable, null);
- };
- /**
- * Get the icon of the feature table and geometry type
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {String} geometryType geometry type
- * @return {module:extension/style.IconRow} icon row
- */
- FeatureStyleExtension.prototype.getTableIcon = function(featureTable, geometryType) {
- var icon = null;
- var icons = this.getTableIcons(featureTable);
- if (icons !== null) {
- if (geometryType === null) {
- icon = icons.getDefault();
- } else {
- icon = icons.getIcon(geometryType);
- }
- }
- return icon;
- };
- /**
- * Get the feature table default icons
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {module:extension/style.Icons} table icons or null
- */
- FeatureStyleExtension.prototype.getTableIcons = function(featureTable) {
- var icons = null;
- var id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));
- if (id !== null) {
- icons = this.getIcons(id, this.getTableIconMappingDao(featureTable));
- }
- return icons;
- };
- /**
- * Gets Icons for featureId and mappingDao
- * @param {Number} featureId
- * @param mappingDao
- * @returns {module:extension/style.Icons}
- * @private
- */
- FeatureStyleExtension.prototype.getIcons = function(featureId, mappingDao) {
- var icons = new Icons();
- if (mappingDao !== null) {
- var iconDao = this.getIconDao();
- var styleMappingRows = mappingDao.queryByBaseId(featureId);
- for (var i = 0; i < styleMappingRows.length; i++) {
- var styleMappingRow = mappingDao.createObject(styleMappingRows[i]);
- var iconRow = iconDao.queryForId(styleMappingRow.getRelatedId());
- if (styleMappingRow.getGeometryTypeName() === null) {
- icons.setDefault(iconRow);
- } else {
- icons.setIcon(iconRow, styleMappingRow.getGeometryTypeName());
- }
- }
- }
- if (icons.isEmpty()) {
- icons = null;
- }
- return icons;
- };
- /**
- * Gets Styles for featureId and mappingDao
- * @param {Number} featureId
- * @param {module:extension/style.StyleMappingDao} mappingDao
- * @returns {module:extension/style.Styles}
- */
- FeatureStyleExtension.prototype.getStyles = function(featureId, mappingDao) {
- var styles = new Styles();
- if (mappingDao !== null) {
- var styleDao = this.getStyleDao();
- var styleMappingRows = mappingDao.queryByBaseId(featureId);
- for (var i = 0; i < styleMappingRows.length; i++) {
- var styleMappingRow = mappingDao.createObject(styleMappingRows[i]);
- var styleRow = styleDao.queryForId(styleMappingRow.getRelatedId());
- if (styleMappingRow.getGeometryTypeName() === null) {
- styles.setDefault(styleRow);
- } else {
- styles.setStyle(styleRow, styleMappingRow.getGeometryTypeName());
- }
- }
- }
- if (styles.isEmpty()) {
- styles = null;
- }
- return styles;
- };
- /**
- * Get the feature styles for the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.FeatureStyles} feature styles or null
- */
- FeatureStyleExtension.prototype.getFeatureStylesForFeatureRow = function(featureRow) {
- return this.getFeatureStyles(featureRow.featureTable, featureRow.getId());
- };
- /**
- * Get the feature styles for the feature row
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @return {module:extension/style.FeatureStyles} feature styles or null
- */
- FeatureStyleExtension.prototype.getFeatureStyles = function(featureTable, featureId) {
- var styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable));
- var icons = this.getIcons(featureId, this.getIconMappingDao(featureTable));
- var featureStyles = null;
- if (styles !== null || icons !== null) {
- featureStyles = new FeatureStyles(styles, icons);
- }
- return featureStyles;
- };
- /**
- * Get the styles for the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.Styles} styles or null
- */
- FeatureStyleExtension.prototype.getStylesForFeatureRow = function(featureRow) {
- return this.getStyles(featureRow.getId(), this.getStyleMappingDao(featureRow.featureTable.table_name));
- };
- /**
- * Get the styles for the feature id
- * @param {String} tableName table name
- * @param {Number} featureId feature id
- * @return {module:extension/style.Styles} styles or null
- */
- FeatureStyleExtension.prototype.getStylesForFeatureId = function(tableName, featureId) {
- return this.getStyles(featureId, this.getStyleMappingDao(tableName));
- };
- /**
- * Get the icons for the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.Icons} icons or null
- */
- FeatureStyleExtension.prototype.getIconsForFeatureRow = function(featureRow) {
- return this.getIcons(featureRow.getId(), this.getIconMappingDao(featureRow.featureTable.table_name));
- };
- /**
- * Get the icons for the feature id
- * @param {String} tableName table name
- * @param {Number} featureId feature id
- * @return {module:extension/style.Icons} icons or null
- */
- FeatureStyleExtension.prototype.getIconsForFeatureId = function(tableName, featureId) {
- return this.getIcons(featureId, this.getIconMappingDao(tableName));
- };
- /**
- * Get the feature style (style and icon) of the feature row, searching in
- * order: feature geometry type style or icon, feature default style or
- * icon, table geometry type style or icon, table default style or icon
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.FeatureStyle} feature style
- */
- FeatureStyleExtension.prototype.getFeatureStyleForFeatureRow = function(featureRow) {
- return new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true));
- };
- /**
- * Get the feature style (style and icon) of the feature, searching in
- * order: feature geometry type style or icon, feature default style or
- * icon, table geometry type style or icon, table default style or icon
- * @param {module:features/user/featureRow} featureRow feature row
- * @return {module:extension/style.FeatureStyle} feature style
- */
- FeatureStyleExtension.prototype.getFeatureStyleDefault = function(featureRow) {
- return new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), null, true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), null, true));
- };
- /**
- * Get the icon of the feature, searching in order: feature geometry type
- * icon, feature default icon, when tableIcon enabled continue searching:
- * table geometry type icon, table default icon
- * @param {module:features/user/featureTable|String} featureTable
- * @param {Number} featureId
- * @param {String} geometryType
- * @param {Boolean} tableIcon
- * @returns {module:extension/style.IconRow}
- * @private
- */
- FeatureStyleExtension.prototype.getIcon = function(featureTable, featureId, geometryType, tableIcon) {
- var iconRow = null;
- var icons = this.getIcons(featureId, this.getIconMappingDao(featureTable));
- if (icons !== null) {
- iconRow = icons.getIcon(geometryType);
- }
- if (iconRow === null && tableIcon) {
- iconRow = this.getTableIcon(featureTable, geometryType);
- }
- return iconRow;
- };
- /**
- * Get the style of the feature, searching in order: feature geometry type
- * style, feature default style, when tableStyle enabled continue searching:
- * table geometry type style, table default style
- * @param {module:features/user/featureTable|String} featureTable
- * @param {Number} featureId
- * @param {String} geometryType
- * @param {Boolean} tableStyle
- * @returns {module:extension/style.StyleRow}
- * @private
- */
- FeatureStyleExtension.prototype.getStyle = function(featureTable, featureId, geometryType, tableStyle) {
- var styleRow = null;
- var styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable));
- if (styles !== null) {
- styleRow = styles.getStyle(geometryType);
- }
- if (styleRow === null && tableStyle) {
- styleRow = this.getTableStyle(featureTable, geometryType);
- }
- return styleRow;
- };
- /**
- * Set the feature table default feature styles
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {module:extension/style.FeatureStyles} featureStyles feature styles
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setTableFeatureStyles = function(featureTable, featureStyles) {
- if (featureStyles !== null) {
- var promises = [];
- promises.push(this.setTableStyles(featureTable, featureStyles.getStyles()));
- promises.push(this.setTableIcons(featureTable, featureStyles.getIcons()));
- return Promise.all(promises);
- } else {
- this.deleteTableFeatureStyles(featureTable);
- return Promise.resolve();
- }
- };
- /**
- * Set the feature table default styles
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {module:extension/style.Styles} styles default styles
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setTableStyles = function(featureTable, styles) {
- // var tableName = featureTable.table_name ? featureTable.table_name : featureTable;
- this.deleteTableStyles(featureTable);
- if (styles !== null) {
- var promises = [];
- if (styles.getDefault() !== null) {
- promises.push(this.setTableStyleDefault(featureTable, styles.getDefault()));
- }
- var keys = Object.keys(styles.styles);
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- var value = styles.styles[key];
- promises.push(this.setTableStyle(featureTable, key, value));
- }
- return Promise.all(promises);
- } else {
- return Promise.resolve();
- }
- };
- /**
- * Set the feature table style default
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setTableStyleDefault = function(featureTable, style) {
- return this.setTableStyle(featureTable, null, style);
- };
- /**
- * Set the feature table style for the geometry type
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {String} geometryType geometry type
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setTableStyle = function(featureTable, geometryType, style) {
- this.deleteTableStyle(featureTable, geometryType);
- if (style !== null) {
- return this.createTableStyleRelationship(featureTable).then(function () {
- var featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable));
- var styleId = this.getOrInsertStyle(style);
- var mappingDao = this.getTableStyleMappingDao(featureTable);
- this.insertStyleMapping(mappingDao, featureContentsId.id, styleId, geometryType);
- }.bind(this));
- } else {
- return Promise.resolve();
- }
- };
- /**
- * Set the feature table default icons
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {module:extension/style.Icons} icons default icons
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setTableIcons = function(featureTable, icons) {
- this.deleteTableIcons(featureTable);
- if (icons !== null) {
- var promises = [];
- if (icons.getDefault() !== null) {
- promises.push(this.setTableIconDefault(featureTable, icons.getDefault()));
- }
- var keys = Object.keys(icons.icons);
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- var value = icons.icons[key];
- promises.push(this.setTableIcon(featureTable, key, value));
- }
- return Promise.all(promises);
- } else {
- return Promise.resolve();
- }
- };
- /**
- * Set the feature table icon default
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setTableIconDefault = function(featureTable, icon) {
- return this.setTableIcon(featureTable, null, icon);
- };
- /**
- * Set the feature table icon for the geometry type
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {String} geometryType geometry type
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setTableIcon = function(featureTable, geometryType, icon) {
- this.deleteTableIcon(featureTable, geometryType);
- if (icon !== null) {
- return this.createTableIconRelationship(featureTable).then(function () {
- var featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable));
- var iconId = this.getOrInsertIcon(icon);
- var mappingDao = this.getTableIconMappingDao(featureTable);
- this.insertStyleMapping(mappingDao, featureContentsId.id, iconId, geometryType);
- }.bind(this));
- } else {
- return Promise.resolve();
- }
- };
- /**
- * Set the feature styles for the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.FeatureStyles} featureStyles feature styles
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) {
- return this.setFeatureStyles(featureRow.featureTable.table_name, featureRow.getId(), featureStyles);
- };
- /**
- * Set the feature styles for the feature table and feature id
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {module:extension/style.FeatureStyles} featureStyles feature styles
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setFeatureStyles = function(featureTable, featureId, featureStyles) {
- if (featureStyles !== null) {
- var promises = [];
- promises.push(this.setStyles(featureTable, featureId, featureStyles.getStyles()));
- promises.push(this.setIcons(featureTable, featureId, featureStyles.getIcons()));
- return Promise.all(promises);
- } else {
- this.deleteStyles(featureTable, featureId);
- this.deleteIcons(featureTable, featureId);
- return Promise.resolve();
- }
- };
- /**
- * Set the feature style (style and icon) of the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) {
- return this.setFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), featureStyle);
- };
- /**
- * Set the feature style (style and icon) of the feature row for the
- * specified geometry type
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) {
- return this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, featureStyle);
- };
- /**
- * Set the feature style default (style and icon) of the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) {
- return this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), null, featureStyle);
- };
- /**
- * Set the feature style (style and icon) of the feature
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setFeatureStyle = async function(featureTable, featureId, geometryType, featureStyle) {
- if (featureStyle !== null) {
- var promises = [];
- promises.push(this.setStyle(featureTable, featureId, geometryType, featureStyle.getStyle()));
- promises.push(this.setIcon(featureTable, featureId, geometryType, featureStyle.getIcon()));
- return Promise.all(promises);
- } else {
- this.deleteStyle(featureTable, featureId, geometryType);
- this.deleteIcon(featureTable, featureId, geometryType);
- return Promise.resolve();
- }
- };
- /**
- * Set the feature style (style and icon) of the feature
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {module:extension/style.FeatureStyle} featureStyle feature style
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setFeatureStyleDefault = function(featureTable, featureId, featureStyle) {
- return this.setFeatureStyle(featureTable, featureId, null, featureStyle);
- };
- /**
- * Set the styles for the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.Styles} styles styles
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setStylesForFeatureRow = function(featureRow, styles) {
- return this.setStyles(featureRow.featureTable.table_name, featureRow.getId(), styles);
- };
- /**
- * Set the styles for the feature table and feature id
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {module:extension/style.Styles} styles styles
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setStyles = function(featureTable, featureId, styles) {
- this.deleteStylesForFeatureId(featureTable, featureId);
- if (styles !== null) {
- var promises = [];
- if (styles.getDefault() !== null) {
- promises.push(this.setStyleDefault(featureTable, featureId, styles.getDefault()));
- }
- var keys = Object.keys(styles.styles);
- for (var i = 0; i < keys.length; i++) {
- promises.push(this.setStyle(featureTable, featureId, keys[i], styles.styles[keys[i]]));
- }
- return Promise.all(promises);
- } else {
- return Promise.resolve();
- }
- };
- /**
- * Set the style of the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setStyleForFeatureRow = function(featureRow, style) {
- return this.setStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), style);
- };
- /**
- * Set the style of the feature row for the specified geometry type
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) {
- return this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, style);
- };
- /**
- * Set the default style of the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) {
- return this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), null, style);
- };
- /**
- * Set the style of the feature
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setStyle = function(featureTable, featureId, geometryType, style) {
- this.deleteStyle(featureTable, featureId, geometryType);
- if (style !== null) {
- return this.createStyleRelationship(featureTable).then(function () {
- var styleId = this.getOrInsertStyle(style);
- var mappingDao = this.getStyleMappingDao(featureTable);
- this.insertStyleMapping(mappingDao, featureId, styleId, geometryType);
- }.bind(this));
- } else {
- return Promise.resolve();
- }
- };
- /**
- * Set the default style of the feature
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {module:extension/style.StyleRow} style style row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setStyleDefault = function(featureTable, featureId, style) {
- return this.setStyle(featureTable, featureId, null, style);
- };
- /**
- * Set the icons for the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.Icons} icons icons
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setIconsForFeatureRow = function(featureRow, icons) {
- return this.setIcons(featureRow.featureTable.table_name, featureRow.getId(), icons);
- };
- /**
- * Set the icons for the feature table and feature id
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {module:extension/style.Icons} icons icons
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setIcons = function(featureTable, featureId, icons) {
- this.deleteIconsForFeatureId(featureTable, featureId);
- if (icons !== null) {
- var promises = [];
- if (icons.getDefault() !== null) {
- promises.push(this.setIconDefault(featureTable, featureId, icons.getDefault()));
- }
- var keys = Object.keys(icons.icons);
- for (var i = 0; i < keys.length; i++) {
- promises.push(this.setIcon(featureTable, featureId, keys[i], icons.icons[keys[i]]));
- }
- return Promise.all(promises);
- } else {
- return Promise.resolve();
- }
- };
- /**
- * Set the icon of the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setIconForFeatureRow = function(featureRow, icon) {
- return this.setIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), icon);
- };
- /**
- * Set the icon of the feature row for the specified geometry type
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) {
- return this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), geometryType, icon);
- };
- /**
- * Set the default icon of the feature row
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) {
- return this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), null, icon);
- };
- /**
- * Get the icon of the feature, searching in order: feature geometry type
- * icon, feature default icon, table geometry type icon, table default icon
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setIcon = function(featureTable, featureId, geometryType, icon) {
- this.deleteIcon(featureTable, featureId, geometryType);
- if (icon !== null) {
- return this.createIconRelationship(featureTable).then(function () {
- var iconId = this.getOrInsertIcon(icon);
- var mappingDao = this.getIconMappingDao(featureTable);
- this.insertStyleMapping(mappingDao, featureId, iconId, geometryType);
- }.bind(this));
- } else {
- return Promise.resolve();
- }
- };
- /**
- * Set the default icon of the feature
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Promise}
- */
- FeatureStyleExtension.prototype.setIconDefault = function(featureTable, featureId, icon) {
- return this.setIcon(featureTable, featureId, null, icon);
- };
- /**
- * Get the style id, either from the existing style or by inserting a new one
- * @param {module:extension/style.StyleRow} style style row
- * @return {Number} style id
- */
- FeatureStyleExtension.prototype.getOrInsertStyle = function(style) {
- var styleId;
- if (style.hasId()) {
- styleId = style.getId();
- } else {
- var styleDao = this.getStyleDao();
- if (styleDao !== null) {
- styleId = styleDao.create(style);
- style.setId(styleId);
- }
- }
- return styleId;
- };
- /**
- * Get the icon id, either from the existing icon or by inserting a new one
- * @param {module:extension/style.IconRow} icon icon row
- * @return {Number} icon id
- */
- FeatureStyleExtension.prototype.getOrInsertIcon = function(icon) {
- var iconId;
- if (icon.hasId()) {
- iconId = icon.getId();
- } else {
- var iconDao = this.getIconDao();
- if (iconDao != null) {
- iconId = iconDao.create(icon);
- icon.setId(iconId);
- }
- }
- return iconId;
- };
- /**
- * Insert a style mapping row
- * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao
- * @param {Number} baseId base id, either contents id or feature id
- * @param {Number} relatedId related id, either style or icon id
- * @param {String} geometryType geometry type or null
- */
- FeatureStyleExtension.prototype.insertStyleMapping = function(mappingDao, baseId, relatedId, geometryType) {
- var row = mappingDao.newRow();
- row.setBaseId(baseId);
- row.setRelatedId(relatedId);
- row.setGeometryTypeName(geometryType);
- mappingDao.create(row);
- };
- /**
- * Delete all feature styles including table styles, table icons, style, and icons
- * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteAllFeatureStyles = function(featureTable) {
- this.deleteTableFeatureStyles(featureTable);
- this.deleteFeatureStyles(featureTable);
- };
- /**
- * Delete all styles including table styles and feature row style
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteAllStyles = function(featureTable) {
- this.deleteTableStyles(featureTable);
- this.deleteStyles(featureTable);
- };
- /**
- * Delete all icons including table icons and feature row icons
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteAllIcons = function(featureTable) {
- this.deleteTableIcons(featureTable);
- this.deleteIcons(featureTable);
- };
- /**
- * Delete the feature table feature styles
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteTableFeatureStyles = function(featureTable) {
- this.deleteTableStyles(featureTable);
- this.deleteTableIcons(featureTable);
- };
- /**
- * Delete the feature table styles
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteTableStyles = function(featureTable) {
- this.deleteTableMappings(this.getTableStyleMappingDao(featureTable), featureTable);
- };
- /**
- * Delete the feature table default style
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteTableStyleDefault = function(featureTable) {
- this.deleteTableStyle(featureTable, null);
- };
- /**
- * Delete the feature table style for the geometry type
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {String} geometryType geometry type
- */
- FeatureStyleExtension.prototype.deleteTableStyle = function(featureTable, geometryType) {
- this.deleteTableMapping(this.getTableStyleMappingDao(featureTable), featureTable, geometryType);
- };
- /**
- * Delete the feature table icons
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteTableIcons = function(featureTable) {
- this.deleteTableMappings(this.getTableIconMappingDao(featureTable), featureTable);
- };
- /**
- * Delete the feature table default icon
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteTableIconDefault = function(featureTable) {
- this.deleteTableIcon(featureTable, null);
- };
- /**
- * Delete the feature table icon for the geometry type
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {String} geometryType geometry type
- */
- FeatureStyleExtension.prototype.deleteTableIcon = function(featureTable, geometryType) {
- this.deleteTableMapping(this.getTableIconMappingDao(featureTable), featureTable, geometryType);
- };
- /**
- * Delete the table style mappings
- * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteTableMappings = function(mappingDao, featureTable) {
- if (mappingDao !== null) {
- var featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));
- if (featureContentsId !== null) {
- mappingDao.deleteByBaseId(featureContentsId);
- }
- }
- };
- /**
- * Delete the table style mapping with the geometry type value
- * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {String} geometryType geometry type
- */
- FeatureStyleExtension.prototype.deleteTableMapping = function(mappingDao, featureTable, geometryType) {
- if (mappingDao !== null) {
- var featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));
- if (featureContentsId !== null) {
- mappingDao.deleteByBaseIdAndGeometryType(featureContentsId, geometryType);
- }
- }
- };
- /**
- * Delete all feature styles
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteFeatureStyles = function(featureTable) {
- this.deleteStyles(featureTable);
- this.deleteIcons(featureTable);
- };
- /**
- * Delete all styles
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteStyles = function(featureTable) {
- this.deleteMappings(this.getStyleMappingDao(featureTable));
- };
- /**
- * Delete feature row styles
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureStyleExtension.prototype.deleteStylesForFeatureRow = function(featureRow) {
- this.deleteStylesForFeatureId(featureRow.featureTable.table_name, featureRow.getId());
- };
- /**
- * Delete feature row styles
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- */
- FeatureStyleExtension.prototype.deleteStylesForFeatureId = function(featureTable, featureId) {
- this.deleteMappingsForFeatureId(this.getStyleMappingDao(featureTable), featureId);
- };
- /**
- * Delete the feature row default style
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureStyleExtension.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) {
- this.deleteStyleForFeatureRowAndGeometryType(featureRow, null);
- };
- /**
- * Delete the feature row default style
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- */
- FeatureStyleExtension.prototype.deleteStyleDefault = function(featureTable, featureId) {
- this.deleteStyle(featureTable, featureId, null);
- };
- /**
- * Delete the feature row style for the feature row geometry type
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureStyleExtension.prototype.deleteStyleForFeatureRow = function(featureRow) {
- this.deleteStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());
- };
- /**
- * Delete the feature row style for the geometry type
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- */
- FeatureStyleExtension.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {
- this.deleteStyle(featureRow.featureTable, featureRow.getId(), geometryType);
- };
- /**
- * Delete the feature row style for the geometry type
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- */
- FeatureStyleExtension.prototype.deleteStyle = function(featureTable, featureId, geometryType) {
- this.deleteMapping(this.getStyleMappingDao(featureTable), featureId, geometryType);
- };
- /**
- * Delete all icons
- * @param {module:features/user/featureTable|String} featureTable feature table
- */
- FeatureStyleExtension.prototype.deleteIcons = function(featureTable) {
- this.deleteMappings(this.getIconMappingDao(featureTable));
- };
- /**
- * Delete feature row icons
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureStyleExtension.prototype.deleteIconsForFeatureRow = function(featureRow) {
- this.deleteIconsForFeatureId(featureRow.featureTable.table_name, featureRow.getId());
- };
- /**
- * Delete feature row icons
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- */
- FeatureStyleExtension.prototype.deleteIconsForFeatureId = function(featureTable, featureId) {
- this.deleteMappingsForFeatureId(this.getIconMappingDao(featureTable), featureId);
- };
- /**
- * Delete the feature row default icon
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureStyleExtension.prototype.deleteIconDefaultForFeatureRow = function(featureRow) {
- this.deleteIconDefault(featureRow.featureTable.table_name, featureRow.getId());
- };
- /**
- * Delete the feature row default icon
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- */
- FeatureStyleExtension.prototype.deleteIconDefault = function(featureTable, featureId) {
- this.deleteIcon(featureTable, featureId, null);
- };
- /**
- * Delete the feature row icon for the feature row geometry type
- * @param {module:features/user/featureRow} featureRow feature row
- */
- FeatureStyleExtension.prototype.deleteIconForFeatureRow = function(featureRow) {
- this.deleteIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());
- };
- /**
- * Delete the feature row icon for the geometry type
- * @param {module:features/user/featureRow} featureRow feature row
- * @param {String} geometryType geometry type
- */
- FeatureStyleExtension.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) {
- this.deleteIcon(featureRow.featureTable, featureRow.getId(), geometryType);
- };
- /**
- * Delete the feature row icon for the geometry type
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- */
- FeatureStyleExtension.prototype.deleteIcon = function(featureTable, featureId, geometryType) {
- this.deleteMapping(this.getIconMappingDao(featureTable), featureId, geometryType);
- };
- /**
- * Delete all style mappings
- * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao
- */
- FeatureStyleExtension.prototype.deleteMappings = function(mappingDao) {
- if (mappingDao !== null) {
- mappingDao.deleteAll();
- }
- };
- /**
- * Delete the style mappings
- * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao
- * @param {Number} featureId feature id
- */
- FeatureStyleExtension.prototype.deleteMappingsForFeatureId = function(mappingDao, featureId) {
- if (mappingDao !== null) {
- mappingDao.deleteByBaseId(featureId);
- }
- };
- /**
- * Delete the style mapping with the geometry type value
- * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao
- * @param {Number} featureId feature id
- * @param {String} geometryType geometry type
- */
- FeatureStyleExtension.prototype.deleteMapping = function(mappingDao, featureId, geometryType) {
- if (mappingDao !== null) {
- mappingDao.deleteByBaseIdAndGeometryType(featureId, geometryType);
- }
- };
- /**
- * Get all the unique style row ids the table maps to
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return style row ids
- */
- FeatureStyleExtension.prototype.getAllTableStyleIds = function(featureTable) {
- var styleIds = null;
- var mappingDao = this.getTableStyleMappingDao(featureTable);
- if (mappingDao !== null) {
- styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);
- }
- return styleIds;
- };
- /**
- * Get all the unique icon row ids the table maps to
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return icon row ids
- */
- FeatureStyleExtension.prototype.getAllTableIconIds = function(featureTable) {
- var styleIds = null;
- var mappingDao = this.getTableIconMappingDao(featureTable);
- if (mappingDao !== null) {
- styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);
- }
- return styleIds;
- };
- /**
- * Get all the unique style row ids the features map to
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {Number[]} style row ids
- */
- FeatureStyleExtension.prototype.getAllStyleIds = function(featureTable) {
- var styleIds = null;
- var mappingDao = this.getStyleMappingDao(featureTable);
- if (mappingDao !== null) {
- styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);
- }
- return styleIds;
- };
- /**
- * Get all the unique icon row ids the features map to
- * @param {module:features/user/featureTable|String} featureTable feature table
- * @return {Number[]} icon row ids
- */
- FeatureStyleExtension.prototype.getAllIconIds = function(featureTable) {
- var styleIds = null;
- var mappingDao = this.getIconMappingDao(featureTable);
- if (mappingDao !== null) {
- styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);
- }
- return styleIds;
- };
- /**
- * Get name of feature table
- * @param featureTable
- * @returns {String}
- */
- FeatureStyleExtension.prototype.getFeatureTableName = function(featureTable) {
- return featureTable.table_name ? featureTable.table_name : featureTable;
- };
- /**
- * Remove all traces of the extension
- */
- FeatureStyleExtension.prototype.removeExtension = function() {
- this.deleteAllRelationships();
- this.geoPackage.deleteTable(StyleTable.TABLE_NAME);
- this.geoPackage.deleteTable(IconTable.TABLE_NAME);
- if (this.extensionsDao.isTableExists()) {
- this.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME);
- }
- };
- FeatureStyleExtension.EXTENSION_NAME = 'nga_feature_style';
- FeatureStyleExtension.EXTENSION_AUTHOR = 'nga';
- FeatureStyleExtension.EXTENSION_NAME_NO_AUTHOR = 'feature_style';
- FeatureStyleExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/feature-style.html';
- FeatureStyleExtension.TABLE_MAPPING_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + "_style_";
- FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + "_style_default_";
- FeatureStyleExtension.TABLE_MAPPING_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + "_icon_";
- FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + "_icon_default_";
- module.exports = FeatureStyleExtension;
- },{"../.":25,"../../user/userTableReader":109,"../baseExtension":20,"../contents/contentsIdDao":22,"../relatedTables/userMappingTable":42,"./featureStyle":46,"./featureStyles":47,"./iconDao":50,"./iconTable":52,"./icons":53,"./styleDao":55,"./styleMappingDao":56,"./styleMappingTable":58,"./styleTable":60,"./styleTableReader":61,"./styles":62,"util":343}],55:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class StyleDao
- */
- var StyleRow = require('./styleRow')
- , StyleTable = require('./styleTable')
- , AttributesDao = require('../../attributes/attributeDao');
- var util = require('util');
- /**
- * Style DAO for reading style tables
- * @extends {module:attributes/attributeDao~AttributesDao}
- * @param {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection
- * @param {string} table table name
- * @constructor
- */
- var StyleDao = function(geoPackage, table) {
- AttributesDao.call(this, geoPackage, table);
- this.table = table;
- };
- util.inherits(StyleDao, AttributesDao);
- /**
- * Creates a StyleRow object from the results
- * @param results
- * @returns {module:extension/style.StyleRow}
- */
- StyleDao.prototype.createObject = function (results) {
- if (results) {
- return this.getRow(results);
- }
- return this.newRow();
- };
- /**
- * Create a new style row
- * @return {module:extension/style.StyleRow}
- */
- StyleDao.prototype.newRow = function() {
- return new StyleRow(this.table);
- };
- /**
- * Create a style row with the column types and values
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @return {module:extension/style.StyleRow} icon row
- */
- StyleDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new StyleRow(this.table, columnTypes, values);
- };
- module.exports = StyleDao;
- },{"../../attributes/attributeDao":3,"./styleRow":59,"./styleTable":60,"util":343}],56:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class StyleMappingDao
- */
- var StyleMappingRow = require('./styleMappingRow')
- , StyleMappingTable = require('./styleMappingTable')
- , UserMappingTable = require('../relatedTables/userMappingTable')
- , UserMappingDao = require('../relatedTables/userMappingDao');
- var util = require('util');
- /**
- * Style Mapping DAO for reading user mapping data tables
- * @extends {module:extension/relatedTables~UserMappingDao}
- * @param {module:user/custom~UserCustomDao} userCustomDao
- * @param {module:geoPackage~GeoPackage} geoPackage geopackage object
- * @constructor
- */
- var StyleMappingDao = function(userCustomDao, geoPackage) {
- UserMappingDao.call(this, userCustomDao, geoPackage);
- };
- util.inherits(StyleMappingDao, UserMappingDao);
- /**
- * Create a new {module:user/custom~UserCustomTable}
- * @param {module:user/custom~UserCustomDao} userCustomDao
- * @return {module:user/custom~UserCustomTable} userCustomTable user custom table
- */
- StyleMappingDao.prototype.createMappingTable = function(userCustomDao) {
- return new StyleMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns);
- };
- /**
- * Create a new {module:extension/style.StyleMappingRow}
- * @return {module:extension/style.StyleMappingRow}
- */
- StyleMappingDao.prototype.newRow = function() {
- return new StyleMappingRow(this.table);
- };
- /**
- * Create a user mapping row
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @return {module:extension/style.StyleMappingRow} style mapping row
- */
- StyleMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new StyleMappingRow(this.table, columnTypes, values);
- };
- /**
- * Delete by base id and geometry type
- * @param {Number} baseId base id
- * @param {String} geometryType geometry type
- * @return {Number} number of deleted rows
- */
- StyleMappingDao.prototype.deleteByBaseIdAndGeometryType = function(baseId, geometryType) {
- var where = '';
- where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId);
- where += ' AND ';
- where += this.buildWhereWithFieldAndValue(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, geometryType);
- var whereArgs = this.buildWhereArgs([baseId, geometryType]);
- return this.deleteWhere(where, whereArgs);
- };
- module.exports = StyleMappingDao;
- },{"../relatedTables/userMappingDao":40,"../relatedTables/userMappingTable":42,"./styleMappingRow":57,"./styleMappingTable":58,"util":343}],57:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class StyleMappingRow
- */
- var UserMappingRow = require('../relatedTables/userMappingRow');
- var util = require('util');
- /**
- * User Mapping Row containing the values from a single result set row
- * @extends {module:extension/relatedTables~UserMappingRow}
- * @param {module:extension/style.StyleMappingTable} styleMappingTable style mapping table
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @constructor
- */
- var StyleMappingRow = function(styleMappingTable, columnTypes, values) {
- UserMappingRow.call(this, styleMappingTable, columnTypes, values);
- this.styleMappingTable = styleMappingTable;
- };
- util.inherits(StyleMappingRow, UserMappingRow);
- /**
- * Get the geometry type name column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleMappingRow.prototype.getGeometryTypeNameColumn = function() {
- return this.styleMappingTable.getGeometryTypeNameColumn();
- };
- /**
- * Gets the geometry type name
- * @return {string}
- */
- StyleMappingRow.prototype.getGeometryTypeName = function() {
- return this.getValueWithColumnName(this.getGeometryTypeNameColumn().name);
- };
- /**
- * Sets the geometry type name
- * @param {string} geometryTypeName geometry type name
- */
- StyleMappingRow.prototype.setGeometryTypeName = function(geometryTypeName) {
- this.setValueWithColumnName(this.getGeometryTypeNameColumn().name, geometryTypeName);
- };
- module.exports = StyleMappingRow;
- },{"../relatedTables/userMappingRow":41,"util":343}],58:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class StyleMappingTable
- */
- var UserMappingTable = require('../relatedTables/userMappingTable')
- , UserCustomColumn = require('../../user/custom/userCustomColumn')
- , DataTypes = require('../../db/dataTypes');
- var util = require('util');
- /**
- * Contains style mapping table factory and utility methods
- * @extends {module:extension/relatedTables~UserMappingTable}
- * @param {string} tableName table name
- * @param {module:user/userColumn~UserColumn[]} columns style mapping columns
- * @constructor
- */
- var StyleMappingTable = function(tableName, columns) {
- UserMappingTable.call(this, tableName, columns);
- };
- util.inherits(StyleMappingTable, UserMappingTable);
- /**
- * Creates a user mapping table with the minimum required columns followed by the additional columns
- * @param {string} tableName name of the table
- * @return {module:extension/relatedTables~UserMappingTable}
- */
- StyleMappingTable.create = function(tableName) {
- return new StyleMappingTable(tableName, StyleMappingTable.createColumns());
- };
- /**
- * Create the columns
- * @return {module:user/userColumn~UserColumn[]}
- */
- StyleMappingTable.createColumns = function() {
- var columns = UserMappingTable.createRequiredColumns();
- var index = columns.length;
- columns.push(UserCustomColumn.createColumn(index, StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined))
- return columns;
- };
- /**
- * Get the geometry type name column index
- * @return int
- */
- StyleMappingTable.prototype.getGeometryTypeNameColumnIndex = function() {
- return this.getColumnIndex(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME);
- };
- /**
- * Get the geometry type name column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleMappingTable.prototype.getGeometryTypeNameColumn = function() {
- return this.getColumnWithColumnName(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME);
- };
- StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME = 'geometry_type_name';
- module.exports = StyleMappingTable;
- },{"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../relatedTables/userMappingTable":42,"util":343}],59:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class StyleRow
- */
- var AttributesRow = require('../../attributes/attributeRow');
- var util = require('util');
- /**
- * Color hex pattern
- */
- var colorPattern = /^#([0-9a-fA-F]{3}){1,2}$/;
- /**
- * Style Row
- * @extends {module:attributes/attributeRow~AttributesRow}
- * @param {module:extension/style.StyleTable} styleTable style table
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @constructor
- */
- var StyleRow = function(styleTable, columnTypes, values) {
- AttributesRow.call(this, styleTable, columnTypes, values);
- this.styleTable = styleTable;
- };
- util.inherits(StyleRow, AttributesRow);
- /**
- * Get the name column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleRow.prototype.getNameColumn = function() {
- return this.styleTable.getNameColumn();
- };
- /**
- * Gets the name
- * @return {String}
- */
- StyleRow.prototype.getName = function() {
- return this.getValueWithColumnName(this.getNameColumn().name);
- };
- /**
- * Sets the name for the row
- * @param {String} name name
- */
- StyleRow.prototype.setName = function(name) {
- this.setValueWithColumnName(this.getNameColumn().name, name);
- };
- /**
- * Get the description column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleRow.prototype.getDescriptionColumn = function() {
- return this.styleTable.getDescriptionColumn();
- };
- /**
- * Gets the description
- * @return {String}
- */
- StyleRow.prototype.getDescription = function() {
- return this.getValueWithColumnName(this.getDescriptionColumn().name);
- };
- /**
- * Sets the description for the row
- * @param {String} description description
- */
- StyleRow.prototype.setDescription = function(description) {
- this.setValueWithColumnName(this.getDescriptionColumn().name, description);
- };
- /**
- * Get the color column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleRow.prototype.getColorColumn = function() {
- return this.styleTable.getColorColumn();
- };
- /**
- * Get the style color
- * @return {String} color
- */
- StyleRow.prototype.getColor = function() {
- return this.createColor(this.getHexColor(), this.getOpacity());
- };
- /**
- * Check if the style has a color
- * @return true if has a color
- */
- StyleRow.prototype.hasColor = function() {
- return this._hasColor(this.getHexColor(), this.getOpacity());
- };
- /**
- * Get the color
- * @return {String} color
- */
- StyleRow.prototype.getHexColor = function() {
- return this.getValueWithColumnName(this.getColorColumn().name);
- };
- /**
- * Set the color
- * @param {String} color color
- * @param {Number} opacity opacity
- */
- StyleRow.prototype.setColor = function(color, opacity) {
- this.setHexColor(color);
- this.setOpacity(opacity);
- };
- /**
- * Sets the color for the row
- * @param {String} color color
- */
- StyleRow.prototype.setHexColor = function(color) {
- var validatedColor = this.validateColor(color);
- this.setValueWithColumnName(this.getColorColumn().name, validatedColor);
- };
- /**
- * Get the opacity column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleRow.prototype.getOpacityColumn = function() {
- return this.styleTable.getOpacityColumn();
- };
- /**
- * Gets the opacity
- * @return {Number}
- */
- StyleRow.prototype.getOpacity = function() {
- return this.getValueWithColumnName(this.getOpacityColumn().name);
- };
- /**
- * Get the opacity or default value
- * @return {Number} opacity
- */
- StyleRow.prototype.getOpacityOrDefault = function() {
- var opacity = this.getOpacity();
- if (opacity === null) {
- opacity = 1.0;
- }
- return opacity;
- };
- /**
- * Sets the opacity for the row
- * @param {Number} opacity opacity
- */
- StyleRow.prototype.setOpacity = function(opacity) {
- this.validateOpacity(opacity);
- this.setValueWithColumnName(this.getOpacityColumn().name, opacity);
- };
- /**
- * Get the width column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleRow.prototype.getWidthColumn = function() {
- return this.styleTable.getWidthColumn();
- };
- /**
- * Gets the width
- * @return {int}
- */
- StyleRow.prototype.getWidth = function() {
- return this.getValueWithColumnName(this.getWidthColumn().name);
- };
- /**
- * Sets the width for the row
- * @param {Number} width width
- */
- StyleRow.prototype.setWidth = function(width) {
- if (width !== null && width < 0.0) {
- throw new Error("Width must be greater than or equal to 0.0, invalid value: " + width);
- }
- this.setValueWithColumnName(this.getWidthColumn().name, width);
- };
- /**
- * Get the width value or default width
- * @return width
- */
- StyleRow.prototype.getWidthOrDefault = function() {
- var width = this.getWidth();
- if (width === null) {
- width = 1.0;
- }
- return width;
- };
- /**
- * Get the fill color column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleRow.prototype.getFillColorColumn = function() {
- return this.styleTable.getFillColorColumn();
- };
- /**
- * Get the style fill color
- * @return {String} color
- */
- StyleRow.prototype.getFillColor = function() {
- return this.createColor(this.getFillHexColor(), this.getFillOpacity());
- };
- /**
- * Check if the style has a fill color
- * @return true if has a color
- */
- StyleRow.prototype.hasFillColor = function() {
- return this._hasColor(this.getFillHexColor(), this.getFillOpacity());
- };
- /**
- * Get the fill color
- * @return {String} color
- */
- StyleRow.prototype.getFillHexColor = function() {
- return this.getValueWithColumnName(this.getFillColorColumn().name);
- };
- /**
- * Set the fill color
- * @param {String} color color
- * @param {Number} opacity opacity
- */
- StyleRow.prototype.setFillColor = function(color, opacity) {
- this.setFillHexColor(color);
- this.setFillOpacity(opacity);
- };
- /**
- * Sets the fill color for the row
- * @param {String} color color
- */
- StyleRow.prototype.setFillHexColor = function(color) {
- var validatedColor = this.validateColor(color);
- this.setValueWithColumnName(this.getFillColorColumn().name, validatedColor);
- };
- /**
- * Get the fill opacity column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleRow.prototype.getFillOpacityColumn = function() {
- return this.styleTable.getFillOpacityColumn();
- };
- /**
- * Gets the fill opacity
- * @return {Number}
- */
- StyleRow.prototype.getFillOpacity = function() {
- return this.getValueWithColumnName(this.getFillOpacityColumn().name);
- };
- /**
- * Sets the fill opacity for the row
- * @param {Number} fillOpacity fillOpacity
- */
- StyleRow.prototype.setFillOpacity = function(fillOpacity) {
- this.validateOpacity(fillOpacity);
- this.setValueWithColumnName(this.getFillOpacityColumn().name, fillOpacity);
- };
- /**
- * Get the fill opacity or default value
- * @return {Number} fill opacity
- */
- StyleRow.prototype.getFillOpacityOrDefault = function() {
- var fillOpacity = this.getFillOpacity();
- if (fillOpacity == null) {
- fillOpacity = 1.0;
- }
- return fillOpacity;
- };
- /**
- * Validate and adjust the color value
- * @param {String} color color
- */
- StyleRow.prototype.validateColor = function(color) {
- var validated = color;
- if (color != null) {
- if (!color.startsWith("#")) {
- validated = "#" + color;
- }
- if (!colorPattern.test(validated)) {
- throw new Error("Color must be in hex format #RRGGBB or #RGB, invalid value: " + color);
- }
- validated = validated.toUpperCase();
- }
- return validated;
- };
- /**
- * Validate the opacity value
- * @param {Number} opacity opacity
- */
- StyleRow.prototype.validateOpacity = function(opacity) {
- if (opacity != null && (opacity < 0.0 || opacity > 1.0)) {
- throw new Error("Opacity must be set inclusively between 0.0 and 1.0, invalid value: " + opacity);
- }
- };
- /**
- * Create a color from the hex color and opacity
- * @param {String} hexColor hex color
- * @param {Number} opacity opacity
- * @return {String} rgba color
- */
- StyleRow.prototype.createColor = function(hexColor, opacity) {
- var color = '#000000';
- if (hexColor !== null) {
- color = hexColor;
- }
- if (opacity !== null) {
- var a = Math.round(opacity * 255).toString(16);
- if (a.length === 1) {
- a = "0" + a;
- }
- color += a;
- }
- return color.toUpperCase();
- };
- /**
- * Determine if a color exists from the hex color and opacity
- * @param {String} hexColor hex color
- * @param {Number} opacity opacity
- * @return true if has a color
- */
- StyleRow.prototype._hasColor = function(hexColor, opacity) {
- return hexColor !== null || opacity !== null;
- };
- module.exports = StyleRow;
- },{"../../attributes/attributeRow":4,"util":343}],60:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class StyleTable
- */
- var AttributesTable = require('../../attributes/attributeTable')
- , UserColumn = require('../../user/userColumn')
- , UserCustomColumn = require('../../user/custom/userCustomColumn')
- , RelationType = require('../relatedTables/relationType')
- , DataTypes = require('../../db/dataTypes');
- var util = require('util');
- /**
- * Icon Requirements Class Media Table
- * @extends {module:attributes/attributeTable~AttributeTable}
- * @param {string} tableName table name
- * @param {module:user/userColumn~UserColumn[]} columns media columns
- * @constructor
- */
- var StyleTable = function(tableName, columns) {
- this.data_type = RelationType.ATTRIBUTES.dataType;
- this.relation_name = RelationType.ATTRIBUTES.name;
- AttributesTable.call(this, tableName, columns);
- };
- util.inherits(StyleTable, AttributesTable);
- /**
- * Create a media table with a minimum required columns followed by the additional columns
- * @return {module:extension/style.StyleTable}
- */
- StyleTable.create = function() {
- return new StyleTable(StyleTable.TABLE_NAME, StyleTable.createColumns());
- };
- /**
- * Create the columns
- * @return {module:user/custom~UserCustomColumn[]}
- */
- StyleTable.createColumns = function() {
- var columns = [];
- var index = 0;
- columns.push(UserColumn.createPrimaryKeyColumnWithIndexAndName(index++, StyleTable.COLUMN_ID));
- columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_OPACITY, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_FILL_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));
- columns.push(UserCustomColumn.createColumn(index, StyleTable.COLUMN_FILL_OPACITY, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));
- return columns;
- };
- /**
- * Get the name column index
- * @return int
- */
- StyleTable.prototype.getNameColumnIndex = function() {
- return this.getColumnIndex(StyleTable.COLUMN_NAME);
- };
- /**
- * Get the name column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleTable.prototype.getNameColumn = function() {
- return this.getColumnWithColumnName(StyleTable.COLUMN_NAME);
- };
- /**
- * Get the description column index
- * @return int
- */
- StyleTable.prototype.getDescriptionColumnIndex = function() {
- return this.getColumnIndex(StyleTable.COLUMN_DESCRIPTION);
- };
- /**
- * Get the description column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleTable.prototype.getDescriptionColumn = function() {
- return this.getColumnWithColumnName(StyleTable.COLUMN_DESCRIPTION);
- };
- /**
- * Get the color column index
- * @return int
- */
- StyleTable.prototype.getColorColumnIndex = function() {
- return this.getColumnIndex(StyleTable.COLUMN_COLOR);
- };
- /**
- * Get the color column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleTable.prototype.getColorColumn = function() {
- return this.getColumnWithColumnName(StyleTable.COLUMN_COLOR);
- };
- /**
- * Get the opacity column index
- * @return int
- */
- StyleTable.prototype.getOpacityColumnIndex = function() {
- return this.getColumnIndex(StyleTable.COLUMN_OPACITY);
- };
- /**
- * Get the opacity column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleTable.prototype.getOpacityColumn = function() {
- return this.getColumnWithColumnName(StyleTable.COLUMN_OPACITY);
- };
- /**
- * Get the width column index
- * @return int
- */
- StyleTable.prototype.getWidthColumnIndex = function() {
- return this.getColumnIndex(StyleTable.COLUMN_WIDTH);
- };
- /**
- * Get the width column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleTable.prototype.getWidthColumn = function() {
- return this.getColumnWithColumnName(StyleTable.COLUMN_WIDTH);
- };
- /**
- * Get the fill_color column index
- * @return int
- */
- StyleTable.prototype.getFillColorColumnIndex = function() {
- return this.getColumnIndex(StyleTable.COLUMN_FILL_COLOR);
- };
- /**
- * Get the fill_color column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleTable.prototype.getFillColorColumn = function() {
- return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_COLOR);
- };
- /**
- * Get the fill_opacity column index
- * @return int
- */
- StyleTable.prototype.getFillOpacityColumnIndex = function() {
- return this.getColumnIndex(StyleTable.COLUMN_FILL_OPACITY);
- };
- /**
- * Get the fill_opacity column
- * @return {module:user/userColumn~UserColumn}
- */
- StyleTable.prototype.getFillOpacityColumn = function() {
- return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_OPACITY);
- };
- StyleTable.TABLE_NAME = 'nga_style';
- StyleTable.COLUMN_ID = 'id';
- StyleTable.COLUMN_NAME = 'name';
- StyleTable.COLUMN_DESCRIPTION = 'description';
- StyleTable.COLUMN_COLOR = 'color';
- StyleTable.COLUMN_OPACITY = 'opacity';
- StyleTable.COLUMN_WIDTH = 'width';
- StyleTable.COLUMN_FILL_COLOR = 'fill_color';
- StyleTable.COLUMN_FILL_OPACITY = 'fill_opacity';
- StyleTable.prototype.TABLE_TYPE = 'media';
- module.exports = StyleTable;
- },{"../../attributes/attributeTable":5,"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../../user/userColumn":105,"../relatedTables/relationType":36,"util":343}],61:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class StyleTableReader
- */
- var AttributeTableReader = require('../../attributes/attributeTableReader')
- , StyleTable = require('./styleTable');
- var util = require('util');
- /**
- * Reads the metadata from an existing attribute table
- * @extends {module:attributes/attributeTableReader}
- * @constructor
- */
- var StyleTableReader = function(tableName) {
- AttributeTableReader.call(this, tableName);
- };
- util.inherits(StyleTableReader, AttributeTableReader);
- /**
- *
- * @param {String} tableName
- * @param columns
- * @returns {module:extension/style.StyleTable}
- */
- StyleTableReader.prototype.createTable = function (tableName, columns) {
- return new StyleTable(tableName, columns);
- };
- module.exports = StyleTableReader;
- },{"../../attributes/attributeTableReader":6,"./styleTable":60,"util":343}],62:[function(require,module,exports){
- /**
- * @memberOf module:extension/style
- * @class Styles
- */
- /**
- * Styles constructor
- * @constructor
- */
- var Styles = function() {
- this.defaultStyle = null;
- this.styles = {};
- };
- Styles.prototype.setDefault = function(styleRow) {
- this.defaultStyle = styleRow;
- };
- Styles.prototype.getDefault = function() {
- return this.defaultStyle;
- };
- Styles.prototype.setStyle = function(styleRow, geometryType) {
- if (geometryType != null) {
- if (styleRow != null) {
- this.styles[geometryType] = styleRow;
- } else {
- delete this.styles[geometryType];
- }
- } else {
- this.setDefault(styleRow);
- }
- };
- Styles.prototype.getStyle = function(geometryType) {
- var styleRow = null;
- if (geometryType != null) {
- styleRow = this.styles[geometryType];
- }
- if (styleRow === null || geometryType === null) {
- styleRow = this.getDefault();
- }
- return styleRow;
- };
- Styles.prototype.isEmpty = function() {
- return Object.keys(this.styles).length === 0 && this.defaultStyle === null;
- };
- module.exports = Styles;
- },{}],63:[function(require,module,exports){
- /**
- * WebPExtension module.
- * @module WebPExtension
- * @see module:extension/BaseExtension
- */
- var BaseExtension = require('../baseExtension')
- , Extension = require('../.').Extension;
- var util = require('util');
- var WebPExtension = function(geoPackage, tableName) {
- BaseExtension.call(this, geoPackage);
- this.tableName = tableName;
- }
- util.inherits(WebPExtension, BaseExtension);
- WebPExtension.prototype.getOrCreateExtension = function() {
- return this.getOrCreate(WebPExtension.EXTENSION_NAME, this.tableName, 'tile_data', WebPExtension.EXTENSION_WEBP_DEFINITION, Extension.READ_WRITE);
- };
- WebPExtension.EXTENSION_NAME = 'gpkg_webp';
- WebPExtension.EXTENSION_WEBP_AUTHOR = 'gpkg';
- WebPExtension.EXTENSION_WEBP_NAME_NO_AUTHOR = 'webp';
- WebPExtension.EXTENSION_WEBP_DEFINITION = 'http://www.geopackage.org/spec/#extension_webp';
- module.exports.WebPExtension = WebPExtension;
- },{"../.":25,"../baseExtension":20,"util":343}],64:[function(require,module,exports){
- /**
- * GeometryColumns module.
- * @module features/columns
- */
- var Dao = require('../../dao/dao')
- , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao
- , ContentsDao = require('../../core/contents').ContentsDao
- , Contents = require('../../core/contents').Contents;
- var util = require('util');
- /**
- * Spatial Reference System object. The coordinate reference system definitions it contains are referenced by the GeoPackage Contents and GeometryColumns objects to relate the vector and tile data in user tables to locations on the earth.
- * @class GeometryColumns
- */
- var GeometryColumns = function() {
- /**
- * Name of the table containing the geometry column
- * @member {string}
- */
- this.table_name;
- /**
- * Name of a column in the feature table that is a Geometry Column
- * @member {string}
- */
- this.column_name;
- /**
- * Name from Geometry Type Codes (Core) or Geometry Type Codes (Extension)
- * in Geometry Types (Normative)
- * @member {string}
- */
- this.geometry_type_name;
- /**
- * Spatial Reference System ID: gpkg_spatial_ref_sys.srs_id
- * @member {module:dao/spatialReferenceSystem~SpatialReferenceSystem}
- */
- this.srs;
- /**
- * Unique identifier for each Spatial Reference System within a GeoPackage
- * @member {Number}
- */
- this.srs_id;
- /**
- * 0: z values prohibited; 1: z values mandatory; 2: z values optional
- * @member {byte}
- */
- this.z;
- /**
- * 0: m values prohibited; 1: m values mandatory; 2: m values optional
- * @member {byte}
- */
- this.m;
- };
- GeometryColumns.prototype.getGeometryType = function() {
- return this.geometry_type_name;
- };
- // /**
- // * Contents
- // */
- // @ForeignCollectionField(eager = false)
- // private ForeignCollection<Contents> contents;
- //
- // /**
- // * Geometry Columns
- // */
- // @ForeignCollectionField(eager = false)
- // private ForeignCollection<GeometryColumns> geometryColumns;
- //
- // /**
- // * Matrix Tile Set
- // */
- // @ForeignCollectionField(eager = false)
- // private ForeignCollection<TileMatrixSet> tileMatrixSet;
- /**
- * Geometry Columns Data Access Object
- * @class GeometryColumnsDao
- * @extends {module:dao/dao~Dao}
- */
- var GeometryColumnsDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- }
- util.inherits(GeometryColumnsDao, Dao);
- GeometryColumnsDao.prototype.createObject = function () {
- return new GeometryColumns();
- };
- /**
- * Query for the table name
- *
- * @param {string} tableName table name
- * @param {callback} callback called with an error if one occurred and the {module:dao/geometryColumns~GeometryColumns}
- */
- GeometryColumnsDao.prototype.queryForTableName = function (tableName) {
- var results = this.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, tableName);
- if (results && results.length) {
- var gc = this.createObject();
- this.populateObjectFromResult(gc, results[0]);
- return gc;
- }
- return;
- };
- /**
- * Get the feature table names
- *
- * @param {callback} callback called with an error if one occurred and an array of the {FeatureTable}
- */
- GeometryColumnsDao.prototype.getFeatureTables = function () {
- var tableNames = [];
- for (var result of this.connection.each('select ' + GeometryColumnsDao.COLUMN_TABLE_NAME + ' from ' + this.gpkgTableName)) {
- tableNames.push(result[GeometryColumnsDao.COLUMN_TABLE_NAME]);
- }
- return tableNames;
- };
- /**
- * Get the Spatial Reference System of the Geometry Columns
- *
- * @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns
- * @param {callback} callback called with an error if one occurred and the {SpatialReferenceSystem}
- */
- GeometryColumnsDao.prototype.getSrs = function (geometryColumns) {
- var dao = this.geoPackage.getSpatialReferenceSystemDao();
- return dao.queryForId(geometryColumns.srs_id);;
- };
- /**
- * Get the Contents of the Geometry Columns
- *
- * @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns
- * @return {ContentsDao} contents dao
- */
- GeometryColumnsDao.prototype.getContents = function (geometryColumns) {
- var dao = this.geoPackage.getContentsDao();
- return dao.queryForId(geometryColumns.table_name);
- };
- GeometryColumnsDao.prototype.getProjection = function (projectionObject) {
- var srs = this.getSrs(projectionObject);
- var srsDao = this.geoPackage.getSpatialReferenceSystemDao();
- return srsDao.getProjection(srs);
- };
- /**
- * tableName field name
- * @type {String}
- */
- GeometryColumnsDao.COLUMN_TABLE_NAME = "table_name";
- /**
- * columnName field name
- * @type {String}
- */
- GeometryColumnsDao.COLUMN_COLUMN_NAME = "column_name";
- /**
- * id 1 field name, tableName
- * @type {String}
- */
- GeometryColumnsDao.COLUMN_ID_1 = GeometryColumnsDao.COLUMN_TABLE_NAME;
- /**
- * id 2 field name, columnName
- * @type {String}
- */
- GeometryColumnsDao.COLUMN_ID_2 = GeometryColumnsDao.COLUMN_COLUMN_NAME;
- /**
- * geometryTypeName field name
- * @type {String}
- */
- GeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME = "geometry_type_name";
- /**
- * srsId field name
- * @type {String}
- */
- GeometryColumnsDao.COLUMN_SRS_ID = 'srs_id';
- /**
- * z field name
- * @type {String}
- */
- GeometryColumnsDao.COLUMN_Z = "z";
- /**
- * m field name
- * @type {String}
- */
- GeometryColumnsDao.COLUMN_M = "m";
- /**
- * Table Name
- * @type {String}
- */
- GeometryColumnsDao.prototype.gpkgTableName = 'gpkg_geometry_columns';
- GeometryColumnsDao.prototype.idColumns = [GeometryColumnsDao.COLUMN_ID_1, GeometryColumnsDao.COLUMN_ID_2];
- GeometryColumnsDao.prototype.columns =
- [GeometryColumnsDao.COLUMN_TABLE_NAME, GeometryColumnsDao.COLUMN_COLUMN_NAME, GeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME, GeometryColumnsDao.COLUMN_SRS_ID, GeometryColumnsDao.COLUMN_Z, GeometryColumnsDao.COLUMN_M];
- GeometryColumns.TABLE_NAME = "tableName";
- GeometryColumns.COLUMN_NAME = "columnName";
- GeometryColumns.GEOMETRY_TYPE_NAME = "geometryTypeName";
- GeometryColumns.SRS_ID = "srsId";
- GeometryColumns.Z = "z";
- GeometryColumns.M = "m";
- module.exports.GeometryColumnsDao = GeometryColumnsDao;
- module.exports.GeometryColumns = GeometryColumns;
- },{"../../core/contents":8,"../../core/srs":9,"../../dao/dao":11,"util":343}],65:[function(require,module,exports){
- /**
- * @module features/user/featureColumn
- */
- const UserColumn = require('../../user/userColumn');
- const DataTypes = require('../../db/dataTypes');
- const util = require('util');
- /**
- * Represents a user feature column
- * @class
- * @extends {module:user/userColumn~UserColumn}
- */
- var FeatureColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType) {
- UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey);
- this.geometryType = geometryType;
- if (!geometryType && dataType === DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) {
- throw new Error('Data or Geometry Type is required to create column: ' + name);
- }
- }
- util.inherits(FeatureColumn, UserColumn);
- FeatureColumn.prototype.getTypeName = function () {
- if (this.isGeometry()) {
- return DataTypes.name(DataTypes.GPKGDataType.GPKG_DT_GEOMETRY);
- }
- return this.dataType !== undefined && DataTypes.name(this.dataType);
- };
- /**
- * Create a new primary key column
- *
- * @param {Number} index column index
- * @param {string} name column name
- *
- * @return feature column
- */
- FeatureColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) {
- return new FeatureColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true);
- }
- /**
- * Create a new geometry column
- *
- * @param {Number} index column index
- * @param {string} name column name
- * @param {WKBGeometryType} type geometry type
- * @param {Boolean} notNull not null
- * @param {Object} defaultValue default value or nil
- *
- * @return feature column
- */
- FeatureColumn.createGeometryColumn = function(index, name, type, notNull, defaultValue) {
- return new FeatureColumn(index, name, type, undefined, notNull, defaultValue, false, type);
- }
- /**
- * Create a new column
- *
- * @param {Number} index column index
- * @param {string} name column name
- * @param {module:db/dataTypes~GPKGDataType} type data type
- * @param {Boolean} notNull not null
- * @param {Object} defaultValue default value or nil
- *
- * @return feature column
- */
- FeatureColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) {
- return FeatureColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue);
- }
- /**
- * Create a new column
- *
- * @param {Number} index column index
- * @param {string} name column name
- * @param {module:db/dataTypes~GPKGDataType} type data type
- * @param {Number} max max value
- * @param {Boolean} notNull not null
- * @param {Object} defaultValue default value or nil
- *
- * @return feature column
- */
- FeatureColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) {
- return new FeatureColumn(index, name, type, max, notNull, defaultValue, false);
- }
- /**
- * Determine if this column is a geometry
- * @return {Boolean} true if a geometry column
- */
- FeatureColumn.prototype.isGeometry = function () {
- return this.geometryType !== undefined;
- };
- module.exports = FeatureColumn;
- },{"../../db/dataTypes":14,"../../user/userColumn":105,"util":343}],66:[function(require,module,exports){
- /**
- * featureDao module.
- * @module features/user/featureDao
- */
- var UserDao = require('../../user/userDao')
- , GeometryColumnsDao = require('../columns').GeometryColumnsDao
- , ContentsDao = require('../../core/contents').ContentsDao
- , DataColumnsDao = require('../../dataColumns').DataColumnsDao
- , FeatureRow = require('./featureRow')
- , DataTypes = require('../../db/dataTypes')
- , FeatureTableIndex = require('../../extension/index/featureTableIndex')
- , BoundingBox = require('../../boundingBox');
- var util = require('util')
- , reproject = require('reproject')
- , LineIntersect = require('@turf/line-intersect').default
- , Intersect = require('@turf/intersect').default
- , BooleanWithin = require('@turf/boolean-within').default;
- /**
- * Feature DAO for reading feature user data tables
- * @class FeatureDao
- * @extends {module:user/userDao~UserDao}
- * @param {sqlite3} db database connection
- * @param {FeatureTable} table feature table
- * @param {GeometryColumns} geometryColumns geometry columns
- * @param {MetadataDb} metadataDb metadata db
- */
- var FeatureDao = function(geoPackage, table, geometryColumns, metadataDb) {
- UserDao.call(this, geoPackage, table);
- this.geometryColumns = geometryColumns;
- this.metadataDb = metadataDb;
- this.dataColumnsDao = new DataColumnsDao(geoPackage);
- this.featureTableIndex = new FeatureTableIndex(geoPackage, this);
- var dao = geoPackage.getGeometryColumnsDao();
- if (!dao.getContents(geometryColumns)) {
- throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Contents');
- }
- if (!dao.getSrs(geometryColumns)) {
- throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Spatial Reference System');
- }
- this.projection = dao.getProjection(geometryColumns);
- }
- util.inherits(FeatureDao, UserDao);
- FeatureDao.prototype.createObject = function (results) {
- if (results) {
- return this.getRow(results);
- }
- return this.newRow();
- };
- FeatureDao.prototype.getContents = function() {
- var dao = this.geoPackage.getGeometryColumnsDao();
- return dao.getContents(this.geometryColumns);
- }
- /**
- * Get the feature table
- * @return {FeatureTable} the feature table
- */
- FeatureDao.prototype.getFeatureTable = function () {
- return this.table;
- };
- /**
- * Create a new feature row with the column types and values
- * @param {Array} columnTypes column types
- * @param {Array} values values
- * @return {FeatureRow} feature row
- */
- FeatureDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new FeatureRow(this.getFeatureTable(), columnTypes, values);
- };
- /**
- * Create a new feature row
- * @return {FeatureRow} feature row
- */
- FeatureDao.prototype.newRow = function () {
- return new FeatureRow(this.getFeatureTable());
- };
- /**
- * Get the geometry column name
- * @return {string} the geometry column name
- */
- FeatureDao.prototype.getGeometryColumnName = function () {
- return this.geometryColumns.column_name;
- };
- /**
- * Get the geometry types
- * @return {WKBGeometryType} well known binary geometry type
- */
- FeatureDao.prototype.getGeometryType = function () {
- return this.geometryColumns.getGeometryType();
- };
- FeatureDao.prototype.getSrs = function() {
- return this.geoPackage.getGeometryColumnsDao().getSrs(this.geometryColumns);
- };
- /**
- * Determine if the feature table is indexed
- * @param {Function} callback called with err if one occurred and true or false indicating the indexed status
- */
- FeatureDao.prototype.isIndexed = function() {
- return this.featureTableIndex.isIndexed();
- }
- /**
- * Query for count in bounding box
- * @param boundingBox
- * @returns {Number}}
- */
- FeatureDao.prototype.countWebMercatorBoundingBox = function(boundingBox) {
- var srs = this.getSrs();
- return this.featureTableIndex.countWithBoundingBox(boundingBox, 'EPSG:3857');
- }
- FeatureDao.prototype.fastQueryWebMercatorBoundingBox = function(boundingBox, featureRowCallback) {
- var srs = this.getSrs();
- var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857');
- var thisgetRow = this.getRow.bind(this);
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- var featureRow = thisgetRow(nextRow.value);
- return {
- value: featureRow,
- done: false
- };
- } else {
- return {
- done: true
- }
- }
- }
- }
- }
- FeatureDao.prototype.queryIndexedFeaturesWithWebMercatorBoundingBox = function(boundingBox) {
- var srs = this.getSrs();
- var projection = this.projection;
- var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857');
- var thisgetRow = this.getRow.bind(this);
- var projectedBoundingBox = boundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326');
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- var featureRow;
- var geometry;
- while(!nextRow.done && !geometry) {
- featureRow = thisgetRow(nextRow.value);
- geometry = reprojectFeature(featureRow, srs, projection);
- geometry = verifyFeature(geometry, projectedBoundingBox);
- if (geometry) {
- geometry.properties = featureRow.values;
- return {
- value: featureRow,
- done: false
- };
- } else {
- nextRow = iterator.next();
- }
- }
- }
- return {
- done: true
- }
- }
- }
- }
- /**
- * Calls geoJSONFeatureCallback with the geoJSON of each matched feature (always in 4326 projection)
- * @param {BoundingBox} boundingBox 4326 bounding box to query
- * @param {function} geoJSONFeatureCallback called with err, geoJSON, doneCallback
- * @param {function} doneCallback called when all rows have been returned
- */
- FeatureDao.prototype.queryForGeoJSONIndexedFeaturesWithBoundingBox = function(boundingBox, skipVerification) {
- var columns = [];
- var columnMap = {};
- var srs = this.getSrs();
- var projection = this.projection;
- this.table.columns.forEach(function(column) {
- var dataColumn = this.dataColumnsDao.getDataColumns(this.table.table_name, column.name);
- columns.push({
- index: column.index,
- name: column.name,
- max: column.max,
- min: column.min,
- notNull: column.notNull,
- primaryKey: column.primaryKey,
- dataType: column.dataType ? DataTypes.name(column.dataType) : '',
- displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name,
- dataColumn: dataColumn
- });
- columnMap[column.name] = columns[columns.length-1];
- }.bind(this));
- var verifiedCount = 0;
- var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326')[Symbol.iterator]();
- var thisgetRow = this.getRow.bind(this);
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- var featureRow;
- var geometry;
- while(!nextRow.done && !geometry) {
- featureRow = thisgetRow(nextRow.value);
- geometry = reprojectFeature(featureRow, srs, projection);
- if (!skipVerification) {
- geometry = verifyFeature(geometry, boundingBox);
- }
- if (geometry) {
- var geoJson = {
- properties: {},
- geometry: geometry
- };
- for (var key in featureRow.values) {
- if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') {
- if (key.toLowerCase() == '_feature_id') {
- geoJson.id = featureRow.values[key];
- } else if (key.toLowerCase() == '_properties_id') {
- geoJson.properties[key.substring(12)] = featureRow.values[key];
- } else {
- geoJson.properties[columnMap[key].displayName] = featureRow.values[key];
- }
- }
- }
- geoJson.id = geoJson.id || featureRow.getId();
- return {
- value: geoJson,
- done: false
- };
- } else {
- nextRow = iterator.next();
- }
- }
- }
- return {
- done: true
- }
- }.bind(this)
- }
- }
- function reprojectFeature(featureRow, srs, projection) {
- var geometry = featureRow.getGeometry().toGeoJSON();
- if (srs.organization + ':' + srs.organization_coordsys_id != 'EPSG:4326') {
- geometry = reproject.reproject(geometry, projection, 'EPSG:4326');
- }
- return geometry;
- }
- function verifyFeature(geometry, boundingBox) {
- try {
- if (geometry.type == 'Point') {
- return geometry;
- } else if (geometry.type == 'LineString') {
- var intersect = LineIntersect(geometry, boundingBox.toGeoJSON().geometry);
- if (intersect.features.length) {
- return geometry;
- } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) {
- return geometry;
- }
- } else if (geometry.type == 'Polygon') {
- var polyIntersect = Intersect(geometry, boundingBox.toGeoJSON().geometry);
- if (polyIntersect) {
- return geometry;
- } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) {
- return geometry;
- }
- }
- } catch (e) {}
- }
- FeatureDao.prototype.queryIndexedFeaturesWithBoundingBox = function(boundingBox) {
- var srs = this.getSrs();
- var projection = this.projection;
- var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326');
- var thisgetRow = this.getRow.bind(this);
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- var featureRow;
- var geometry;
- while(!nextRow.done && !geometry) {
- featureRow = thisgetRow(nextRow.value);
- geometry = reprojectFeature(featureRow, srs, projection);
- geometry = verifyFeature(geometry, boundingBox);
- if (geometry) {
- geometry.properties = featureRow.values;
- return {
- value: featureRow,
- done: false
- };
- } else {
- nextRow = iterator.next();
- }
- }
- }
- return {
- done: true
- }
- }.bind(this)
- }
- }
- FeatureDao.prototype.getBoundingBox = function () {
- var contents = this.getContents();
- return new BoundingBox(contents.min_x, contents.max_x, contents.min_y, contents.max_y);
- };
- module.exports = FeatureDao;
- },{"../../boundingBox":7,"../../core/contents":8,"../../dataColumns":13,"../../db/dataTypes":14,"../../extension/index/featureTableIndex":26,"../../user/userDao":106,"../columns":64,"./featureRow":67,"@turf/boolean-within":120,"@turf/intersect":124,"@turf/line-intersect":126,"reproject":315,"util":343}],67:[function(require,module,exports){
- /**
- * featureRow module.
- * @module features/user/featureRow
- */
- var UserRow = require('../../user/userRow')
- , FeatureColumn = require('./featureColumn')
- , GeometryData = require('../../geom/geometryData')
- , DataTypes = require('../../db/dataTypes');
- var util = require('util');
- /**
- * Feature Row containing the values from a single result set row
- * @param {FeatureTable} featureTable feature table
- * @param {Array} columnTypes column types
- * @param {Array} values values
- */
- var FeatureRow = function(featureTable, columnTypes, values) {
- UserRow.call(this, featureTable, columnTypes, values);
- this.featureTable = featureTable;
- }
- util.inherits(FeatureRow, UserRow);
- /**
- * Get the geometry column index
- * @return {Number} geometry column index
- */
- FeatureRow.prototype.getGeometryColumnIndex = function () {
- return this.featureTable.geometryIndex;
- };
- /**
- * Get the geometry column
- * @return {FeatureColumn} geometry column
- */
- FeatureRow.prototype.getGeometryColumn = function () {
- return this.featureTable.getGeometryColumn();
- };
- /**
- * Get the geometry
- * @return {Buffer} geometry data
- */
- FeatureRow.prototype.getGeometry = function () {
- return this.getValueWithIndex(this.featureTable.geometryIndex);
- };
- /**
- * Get the geometry's type
- * @return {String} geometry data
- */
- FeatureRow.prototype.getGeometryType = function () {
- var geometryType = null;
- var geometry = this.getValueWithIndex(this.featureTable.geometryIndex);
- if (geometry !== null) {
- geometryType = geometry.toGeoJSON().type;
- }
- return geometryType;
- };
- /**
- * set the geometry
- * @param {Buffer} geometryData geometry data
- */
- FeatureRow.prototype.setGeometry = function (geometryData) {
- this.setValueWithIndex(this.featureTable.geometryIndex, geometryData);
- };
- FeatureRow.prototype.toObjectValue = function (index, value) {
- var objectValue = value;
- var column = this.getColumnWithIndex(index);
- if (column.isGeometry() && value) {
- objectValue = new GeometryData(value);
- }
- return objectValue;
- };
- FeatureRow.prototype.toDatabaseValue = function(columnName) {
- var column = this.getColumnWithColumnName(columnName);
- var value = this.getValueWithColumnName(columnName);
- if (column.isGeometry() && value.toData) {
- return value.toData();
- } else if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) {
- return value === true ? 1 : 0;
- }
- return value;
- }
- module.exports = FeatureRow;
- },{"../../db/dataTypes":14,"../../geom/geometryData":73,"../../user/userRow":107,"./featureColumn":65,"util":343}],68:[function(require,module,exports){
- /**
- * featureTable module.
- * @module features/user/featureTable
- */
- var UserTable = require('../../user/userTable');
- var util = require('util');
- /**
- * Represents a user feature table
- * @param {string} tableName table name
- * @param {array} columns feature columns
- */
- var FeatureTable = function(tableName, columns) {
- UserTable.call(this, tableName, columns);
- var geometry = undefined;
- for (var i = 0; i < columns.length; i++) {
- var column = columns[i];
- if (column.isGeometry()) {
- this.duplicateCheck(column.index, geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY');
- geometry = column.index;
- }
- }
- this.missingCheck(geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY');
- this.geometryIndex = geometry;
- }
- util.inherits(FeatureTable, UserTable);
- /**
- * Get the geometry feature column
- * @return {FeatureColumn} geometry feature column
- */
- FeatureTable.prototype.getGeometryColumn = function () {
- return this.getColumnWithIndex(this.geometryIndex);
- };
- FeatureTable.prototype.getTableType = function() {
- return UserTable.FEATURE_TABLE;
- }
- /**
- * The FeatureTable
- * @type {FeatureTable}
- */
- module.exports = FeatureTable;
- },{"../../user/userTable":108,"util":343}],69:[function(require,module,exports){
- /**
- * featureTableReader module.
- * @module features/user/featureTableReader
- */
- var UserTableReader = require('../../user/userTableReader')
- , FeatureTable = require('./featureTable')
- , FeatureColumn = require('./featureColumn')
- , GeometryColumnsDao = require('../columns').GeometryColumnsDao
- , DataTypes = require('../../db/dataTypes')
- , wkb = require('../../wkb');
- var util = require('util');
- /**
- * Reads the metadata from an existing feature table
- * @class FeatureTableReader
- * @extends {module:user~UserTableReader}
- */
- var FeatureTableReader = function(tableNameOrGeometryColumns) {
- if (util.isString(tableNameOrGeometryColumns)) {
- UserTableReader.call(this, tableNameOrGeometryColumns);
- } else {
- UserTableReader.call(this, tableNameOrGeometryColumns.table_name);
- this.geometryColumns = tableNameOrGeometryColumns;
- }
- }
- util.inherits(FeatureTableReader, UserTableReader);
- FeatureTableReader.prototype.readFeatureTable = function (geoPackage) {
- if (!this.geometryColumns) {
- var gcd = new GeometryColumnsDao(geoPackage);
- this.geometryColumns = gcd.queryForTableName(this.table_name);
- return this.readTable(geoPackage.getDatabase());
- } else {
- return this.readTable(geoPackage.getDatabase());
- }
- };
- FeatureTableReader.prototype.createTable = function (tableName, columns) {
- return new FeatureTable(tableName, columns);
- };
- FeatureTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValue, primaryKey) {
- var geometry = name === this.geometryColumns.column_name;
- var geometryType = undefined;
- var dataType = undefined;
- if (geometry) {
- geometryType = wkb.fromName(type);
- } else {
- dataType = DataTypes.fromName(type);
- }
- var column = new FeatureColumn(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType);
- return column;
- };
- /**
- * The FeatureTableReader
- * @type {FeatureTableReader}
- */
- module.exports = FeatureTableReader;
- },{"../../db/dataTypes":14,"../../user/userTableReader":109,"../../wkb":111,"../columns":64,"./featureColumn":65,"./featureTable":68,"util":343}],70:[function(require,module,exports){
- /**
- * @module geoPackage
- */
- var SpatialReferenceSystemDao = require('./core/srs').SpatialReferenceSystemDao
- , GeometryColumnsDao = require('./features/columns').GeometryColumnsDao
- , FeatureDao = require('./features/user/featureDao')
- , FeatureTableReader = require('./features/user/featureTableReader')
- , ContentsDao = require('./core/contents').ContentsDao
- , Contents = require('./core/contents').Contents
- , TileMatrixSetDao = require('./tiles/matrixset').TileMatrixSetDao
- , TileMatrixSet = require('./tiles/matrixset').TileMatrixSet
- , TileMatrixDao = require('./tiles/matrix').TileMatrixDao
- , TileMatrix = require('./tiles/matrix').TileMatrix
- , TileTableReader = require('./tiles/user/tileTableReader')
- , TileDao = require('./tiles/user/tileDao')
- , TileTable = require('./tiles/user/tileTable')
- , TileBoundingBoxUtils = require('./tiles/tileBoundingBoxUtils')
- , TableCreator = require('./db/tableCreator')
- , UserTable = require('./user/userTable')
- , FeatureTable = require('./features/user/featureTable')
- , DataColumnsDao = require('./dataColumns').DataColumnsDao
- , DataColumnConstraintsDao = require('./dataColumnConstraints').DataColumnConstraintsDao
- , MetadataDao = require('./metadata').MetadataDao
- , MetadataReferenceDao = require('./metadata/reference').MetadataReferenceDao
- , ExtensionDao = require('./extension').ExtensionDao
- , CrsWktExtension = require('./extension/crsWkt').CrsWktExtension
- , SchemaExtension = require('./extension/schema').SchemaExtension
- , RelatedTablesExtension = require('./extension/relatedTables')
- , TableIndexDao = require('./extension/index/tableIndex').TableIndexDao
- , GeometryIndexDao = require('./extension/index/geometryIndex').GeometryIndexDao
- , ExtendedRelationDao = require('./extension/relatedTables/extendedRelation').ExtendedRelationDao
- , ContentsIdDao = require('./extension/contents/contentsIdDao')
- , ContentsIdExtension = require('./extension/contents/.')
- , FeatureStyleExtension = require('./extension/style/.')
- , AttributeTable = require('./attributes/attributeTable')
- , AttributeTableReader = require('./attributes/attributeTableReader')
- , AttributeDao = require('./attributes/attributeDao')
- , DataTypes = require('./db/dataTypes');
- var proj4 = require('proj4');
- proj4 = 'default' in proj4 ? proj4['default'] : proj4; // Module loading hack
- var defs = require('./proj4Defs');
- for (var name in defs) {
- if (defs[name]) {
- proj4.defs(name, defs[name]);
- }
- }
- /**
- * A `GeoPackage` instance is the interface to a physical GeoPackage SQLite
- * database.
- * @param {string} name
- * @param {string} path
- * @param {module:db/geoPackageConnection~GeoPackageConnection} connection
- * @class
- */
- var GeoPackage = module.exports = function(name, path, connection) {
- this.name = name;
- this.path = path;
- this.connection = connection;
- this.tableCreator = new TableCreator(this);
- }
- GeoPackage.loadProjections = function(items) {
- if (!(items instanceof Array)) throw new Error('Invalid array of projections');
- for (var i = 0; i < items.length; i++) {
- if (!defs[items[i]]) throw new Error('Projection not found');
- this.addProjection(items[i], defs[items[i]]);
- }
- }
- GeoPackage.addProjection = function(name, definition) {
- if (!name || ! definition) throw new Error('Invalid projection name/definition');
- proj4.defs(''+name, ''+definition);
- }
- GeoPackage.hasProjection = function(name) {
- return proj4.defs(''+name);
- }
- GeoPackage.prototype.close = function() {
- this.connection.close();
- }
- GeoPackage.prototype.getDatabase = function() {
- return this.connection;
- }
- GeoPackage.prototype.getPath = function() {
- return this.path;
- }
- GeoPackage.prototype.export = function(callback) {
- this.connection.export(callback);
- }
- /**
- * Get the GeoPackage name
- * @return {String} the GeoPackage name
- */
- GeoPackage.prototype.getName = function() {
- return this.name;
- }
- /**
- * @returns {module:core/srs~SpatialReferenceSystemDao} the DAO to access the [SRS table]{@link module:core/srs~SpatialReferenceSystem} in this `GeoPackage`
- */
- GeoPackage.prototype.getSpatialReferenceSystemDao = function() {
- return this.spatialReferenceSystemDao || (this.spatialReferenceSystemDao = new SpatialReferenceSystemDao(this));
- }
- /**
- * @returns {module:core/contents~ContentsDao} the DAO to access the [contents table]{@link module:core/contents~Contents} in this `GeoPackage`
- */
- GeoPackage.prototype.getContentsDao = function() {
- return this.contentsDao || (this.contentsDao = new ContentsDao(this));
- }
- /**
- * @returns {module:tiles/matrixset~TileMatrixSetDao} the DAO to access the [tile matrix set]{@link module:tiles/matrixset~TileMatrixSet} in this `GeoPackage`
- */
- GeoPackage.prototype.getTileMatrixSetDao = function () {
- return this.tileMatrixSetDao || (this.tileMatrixSetDao = new TileMatrixSetDao(this));
- };
- /**
- * @returns {module:tiles/matrixset~TileMatrixDao} the DAO to access the [tile matrix]{@link module:tiles/matrixset~TileMatrix} in this `GeoPackage`
- */
- GeoPackage.prototype.getTileMatrixDao = function() {
- return this.tileMatrixDao || (this.tileMatrixDao = new TileMatrixDao(this));
- }
- GeoPackage.prototype.getDataColumnsDao = function() {
- return this.dataColumnsDao || (this.dataColumnsDao = new DataColumnsDao(this));
- }
- GeoPackage.prototype.getExtensionDao = function() {
- return this.extensionDao || (this.extensionDao = new ExtensionDao(this));
- }
- GeoPackage.prototype.getTableIndexDao = function() {
- return this.tableIndexDao || (this.tableIndexDao = new TableIndexDao(this));
- }
- GeoPackage.prototype.getGeometryColumnsDao = function () {
- return this.geometryColumnsDao || (this.geometryColumnsDao = new GeometryColumnsDao(this));
- };
- GeoPackage.prototype.getDataColumnConstraintsDao = function () {
- return this.dataColumnConstraintsDao || (this.dataColumnConstraintsDao = new DataColumnConstraintsDao(this));
- };
- GeoPackage.prototype.getMetadataReferenceDao = function () {
- return this.metadataReferenceDao || (this.metadataReferenceDao = new MetadataReferenceDao(this));
- };
- GeoPackage.prototype.getMetadataDao = function () {
- return this.metadataDao || (this.metadataDao = new MetadataDao(this));
- };
- GeoPackage.prototype.getExtendedRelationDao = function() {
- return this.extendedRelationDao || (this.extendedRelationDao = new ExtendedRelationDao(this));
- }
- GeoPackage.prototype.getContentsIdDao = function() {
- return this.contentsIdDao || (this.contentsIdDao = new ContentsIdDao(this));
- }
- GeoPackage.prototype.getContentsIdExtension = function() {
- return this.contentsIdExtension || (this.contentsIdExtension = new ContentsIdExtension(this));
- }
- GeoPackage.prototype.getFeatureStyleExtension = function() {
- return this.featureStyleExtension || (this.featureStyleExtension = new FeatureStyleExtension(this));
- }
- GeoPackage.prototype.getGeometryIndexDao = function(featureDao) {
- return new GeometryIndexDao(this, featureDao);
- }
- GeoPackage.prototype.getRelatedTablesExtension = function() {
- return this.relatedTablesExtension || (this.relatedTablesExtension = new RelatedTablesExtension(this));
- }
- GeoPackage.prototype.getSrs = function(srsId) {
- var dao = this.getSpatialReferenceSystemDao();
- return dao.queryForId(srsId);
- }
- GeoPackage.prototype.createRequiredTables = function() {
- var geopackage = this;
- return this.tableCreator.createRequired()
- .then(function(results) {
- return geopackage;
- });
- }
- GeoPackage.prototype.createSupportedExtensions = function() {
- var crs = new CrsWktExtension(this);
- crs.getOrCreateExtension();
- var schema = new SchemaExtension(this);
- schema.getOrCreateExtension();
- return this;
- }
- /**
- * @returns {module:tiles/user/tileDao~TileDao} the `TileDao` to access [tiles]{@link module:tiles/user/tileTable}
- */
- GeoPackage.prototype.getTileDaoWithTileMatrixSet = function (tileMatrixSet) {
- var tileMatrices = [];
- var tileMatrixDao = this.getTileMatrixDao();
- var results = tileMatrixDao.queryForAllEq(TileMatrixDao.COLUMN_TABLE_NAME, tileMatrixSet.table_name, null, null, TileMatrixDao.COLUMN_ZOOM_LEVEL + ' ASC, ' + TileMatrixDao.COLUMN_PIXEL_X_SIZE + ' DESC, ' + TileMatrixDao.COLUMN_PIXEL_Y_SIZE + ' DESC');
- results.forEach(function(result) {
- var tm = new TileMatrix();
- tileMatrixDao.populateObjectFromResult(tm, result);
- tileMatrices.push(tm);
- });
- var tableReader = new TileTableReader(tileMatrixSet);
- var tileTable = tableReader.readTileTable(this);
- return new TileDao(this, tileTable, tileMatrixSet, tileMatrices);
- };
- GeoPackage.prototype.getTileDaoWithContents = function (contents) {
- var dao = this.getContentsDao();
- var tileMatrixSet = dao.getTileMatrixSet(contents);
- return this.getTileDaoWithTileMatrixSet(tileMatrixSet);
- };
- GeoPackage.prototype.getTileDao = function (tableName) {
- var tms = this.getTileMatrixSetDao();
- var results = tms.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, tableName);
- if (results.length > 1) {
- throw new Error('Unexpected state. More than one Tile Matrix Set matched for table name: ' + tableName + ', count: ' + results.length);
- } else if (results.length === 0) {
- throw new Error('No Tile Matrix found for table name: ' + tableName);
- }
- var tileMatrixSet = new TileMatrixSet();
- tms.populateObjectFromResult(tileMatrixSet, results[0]);
- return this.getTileDaoWithTileMatrixSet(tileMatrixSet);
- };
- /**
- * Return a hash containing arrays of table names grouped under keys `features`,
- * `tiles`, and `attributes`.
- * @return {{features: string[], tiles: string[], attributes: string[]}}
- */
- GeoPackage.prototype.getTables = function() {
- var tables = {};
- var featureTables = this.getFeatureTables();
- tables.features = featureTables;
- var tileTables = this.getTileTables();
- tables.tiles = tileTables;
- var attributesTables = this.getAttributesTables();
- tables.attributes = attributesTables;
- return tables;
- };
- GeoPackage.prototype.getAttributesTables = function() {
- return this.getContentsDao().getTables(ContentsDao.GPKG_CDT_ATTRIBUTES_NAME);
- }
- GeoPackage.prototype.hasAttributeTable = function(attributeTableName) {
- var tables = this.getAttributesTables();
- return tables && tables.indexOf(attributeTableName) != -1;
- }
- /**
- * Get the tile tables
- * @param {callback} callback called with an error if one occurred and the array of {TileTable} names
- */
- GeoPackage.prototype.getTileTables = function () {
- var tms = this.getTileMatrixSetDao();
- if (!tms.isTableExists()) {
- return [];
- }
- return tms.getTileTables();
- };
- /**
- * Checks if the tile table exists in the GeoPackage
- * @param {String} tileTableName name of the table to query for
- * @param {Function} callback called with an error if one occurred and true or false for the existence of the table
- */
- GeoPackage.prototype.hasTileTable = function(tileTableName) {
- var tables = this.getTileTables();
- return tables && tables.indexOf(tileTableName) != -1;
- };
- /**
- * Checks if the feature table exists in the GeoPackage
- * @param {GeoPackage} geopackage open GeoPackage object
- * @param {String} featureTableName name of the table to query for
- * @param {Function} callback called with an error if one occurred and true or false for the existence of the table
- */
- GeoPackage.prototype.hasFeatureTable = function(featureTableName) {
- var tables = this.getFeatureTables();
- return tables && tables.indexOf(featureTableName) != -1;
- };
- /**
- * Get the feature tables
- * @param {callback} callback called with an error if one occurred and the array of {FeatureTable} names
- */
- GeoPackage.prototype.getFeatureTables = function () {
- var gcd = this.getGeometryColumnsDao();
- if (!gcd.isTableExists()) {
- return [];
- }
- return gcd.getFeatureTables();
- };
- GeoPackage.prototype.isTable = function(tableName) {
- return !!this.connection.tableExists(tableName);
- }
- GeoPackage.prototype.isTableType = function(type, tableName) {
- return type === this.getTableType(tableName);
- }
- GeoPackage.prototype.getTableType = function(tableName) {
- var contents = this.getTableContents(tableName);
- if (contents) {
- return contents.data_type;
- }
- }
- GeoPackage.prototype.getTableContents = function(tableName) {
- return this.getContentsDao().queryForId(tableName);
- }
- GeoPackage.prototype.deleteTable = function(tableName) {
- this.connection.dropTable(tableName);
- }
- GeoPackage.prototype.getTableCreator = function() {
- return this.tableCreator;
- }
- GeoPackage.prototype.index = function() {
- var tables = this.getFeatureTables();
- return tables.reduce(function(sequence, table) {
- return sequence.then(function() {
- return this.indexFeatureTable(table)
- .then(function(indexed) {
- if (indexed) {
- return true;
- } else {
- throw new Error('Unable to index table ' + table);
- }
- });
- }.bind(this))
- }.bind(this), Promise.resolve());
- }
- GeoPackage.prototype.indexFeatureTable = function(table, progress) {
- var featureDao = this.getFeatureDao(table);
- var fti = featureDao.featureTableIndex;
- return new Promise(function(resolve, reject) {
- var tableIndex = fti.getTableIndex();
- if (tableIndex) {
- return resolve(true);
- }
- resolve(fti.index(progress));
- });
- }
- /**
- * Get a Feature DAO from Geometry Columns
- *
- * @param {GeometryColumns} geometryColumns Geometry Columns
- * @param {callback} callback called with an error if one occurred and the {FeatureDao}
- */
- GeoPackage.prototype.getFeatureDaoWithGeometryColumns = function (geometryColumns) {
- if (!geometryColumns) {
- throw new Error('Non null Geometry Columns is required to create Feature DAO');
- }
- var tableReader = new FeatureTableReader(geometryColumns);
- var featureTable = tableReader.readFeatureTable(this);
- var dao = new FeatureDao(this, featureTable, geometryColumns, this.metadataDb);
- return dao;
- };
- /**
- * Get a Feature DAO from Contents
- * @param {Contents} contents Contents
- * @param {Function} callback callback called with an error if one occurred and the {FeatureDao}
- */
- GeoPackage.prototype.getFeatureDaoWithContents = function (contents) {
- var dao = this.getContentsDao();
- var columns = dao.getGeometryColumns(contents);
- return this.getFeatureDaoWithGeometryColumns(columns);
- };
- /**
- * Get a Feature DAO from Contents
- * @param {string} tableName table name
- * @param {Function} callback callback called with an error if one occurred and the {FeatureDao}
- */
- GeoPackage.prototype.getFeatureDao = function (tableName) {
- var dao = this.getGeometryColumnsDao();
- var geometryColumns = dao.queryForTableName(tableName);
- if (!geometryColumns) {
- throw new Error('No Feature Table exists for table name: ' + tableName);
- }
- return this.getFeatureDaoWithGeometryColumns(geometryColumns);
- };
- /**
- * Queries for GeoJSON features in a feature table
- * @param {String} tableName Table name to query
- * @param {BoundingBox} boundingBox BoundingBox to query
- * @param {Function} callback Caled with err, featureArray
- */
- GeoPackage.prototype.queryForGeoJSONFeaturesInTable = function(tableName, boundingBox) {
- var featureDao = this.getFeatureDao(tableName);
- var features = [];
- var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox);
- for (var feature of iterator) {
- features.push(feature);
- }
- return features;
- }
- /**
- * iterates GeoJSON features in a feature table within a bounding box
- * @param {String} tableName Table name to query
- * @param {BoundingBox} boundingBox BoundingBox to query
- * @param {Function} rowCallback Caled with err, geoJSON
- * @param {Function} doneCallback Caled with err if one occurred
- */
- GeoPackage.prototype.iterateGeoJSONFeaturesInTableWithinBoundingBox = function(tableName, boundingBox) {
- var featureDao = this.getFeatureDao(tableName);
- return featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox);
- }
- /**
- * Create the Geometry Columns table if it does not already exist
- * @param {Function} callback called with an error if one occurred otherwise the table now exists
- */
- GeoPackage.prototype.createGeometryColumnsTable = function () {
- var dao = this.getGeometryColumnsDao();
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createGeometryColumns();
- };
- /**
- * Get a Attribute DAO
- * @param {string} tableName table name
- * @param {Function} callback callback called with an error if one occurred and the {AttributeDao}
- */
- GeoPackage.prototype.getAttributeDaoWithTableName = function (tableName) {
- var dao = this.getContentsDao();
- var contents = dao.queryForId(tableName);
- return this.getAttributeDaoWithContents(contents);
- };
- /**
- * Get a Attribute DAO
- * @param {Contents} contents Contents
- * @param {Function} callback callback called with an error if one occurred and the {AttributeDao}
- */
- GeoPackage.prototype.getAttributeDaoWithContents = function (contents) {
- if (!contents) {
- throw new Error('Non null Contents is required to create an Attributes DAO');
- }
- var reader = new AttributeTableReader(contents.table_name);
- var table = reader.readTable(this.connection);
- table.setContents(contents);
- return new AttributeDao(this, table);
- }
- GeoPackage.prototype.createAttributeTable = function(tableName, columns, dataColumns) {
- return Promise.resolve()
- .then(function() {
- var attributeTable = new AttributeTable(tableName, columns);
- var result = this.tableCreator.createUserTable(attributeTable);
- var contents = new Contents();
- contents.table_name = tableName;
- contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME;
- contents.identifier = tableName;
- contents.last_change = new Date().toISOString();
- return this.getContentsDao().create(contents);
- }.bind(this))
- .then(function() {
- if (dataColumns) {
- return this.createDataColumns()
- .then(function() {
- var dataColumnsDao = this.getDataColumnsDao();
- dataColumns.forEach(function(dataColumn) {
- dataColumnsDao.create(dataColumn);
- });
- }.bind(this));
- }
- }.bind(this))
- .then(function() {
- return true;
- });
- }
- /**
- * Create the given {@link module:features/user/featureTable~FeatureTable}
- * @param {FeatureTable} featureTable feature table
- */
- GeoPackage.prototype.createFeatureTable = function(featureTable) {
- return this.tableCreator.createUserTable(featureTable);
- };
- GeoPackage.prototype.createFeatureTableWithGeometryColumns = function(geometryColumns, boundingBox, srsId, columns) {
- return this.createFeatureTableWithGeometryColumnsAndDataColumns(geometryColumns, boundingBox, srsId, columns, undefined);
- };
- GeoPackage.prototype.createFeatureTableWithGeometryColumnsAndDataColumns = function(geometryColumns, boundingBox, srsId, columns, dataColumns) {
- return this.createGeometryColumnsTable()
- .then(function(result) {
- var featureTable = new FeatureTable(geometryColumns.table_name, columns);
- var result = this.createFeatureTable(featureTable);
- var contents = new Contents();
- contents.table_name = geometryColumns.table_name;
- contents.data_type = ContentsDao.GPKG_CDT_FEATURES_NAME;
- contents.identifier = geometryColumns.table_name;
- contents.last_change = new Date().toISOString();
- contents.min_x = boundingBox.minLongitude;
- contents.min_y = boundingBox.minLatitude;
- contents.max_x = boundingBox.maxLongitude;
- contents.max_y = boundingBox.maxLatitude;
- contents.srs_id = srsId;
- this.getContentsDao().create(contents);
- geometryColumns.srs_id = srsId;
- return this.getGeometryColumnsDao().create(geometryColumns);
- }.bind(this))
- .then(function() {
- if (dataColumns) {
- return this.createDataColumns()
- .then(function() {
- var dataColumnsDao = this.getDataColumnsDao();
- dataColumns.forEach(function(dataColumn) {
- dataColumnsDao.create(dataColumn);
- });
- }.bind(this));
- }
- }.bind(this))
- .then(function() {
- return true;
- });
- };
- /**
- * Create the Tile Matrix Set table if it does not already exist
- * @param {Function} callback called with an error if one occurred otherwise the table now exists
- */
- GeoPackage.prototype.createTileMatrixSetTable = function() {
- var dao = this.getTileMatrixSetDao();
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createTileMatrixSet();
- }
- /**
- * Create the Tile Matrix table if it does not already exist
- * @param {Function} callback called with an error if one occurred otherwise the table now exists
- */
- GeoPackage.prototype.createTileMatrixTable = function() {
- var dao = this.getTileMatrixDao();
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createTileMatrix();
- };
- /**
- * Create the given tile table in this GeoPackage.
- *
- * @param {module:tiles/user/tileTable~TileTable} tileTable
- * @returns {@link module:db/tableCreator~TableCreator#createUserTable}
- */
- GeoPackage.prototype.createTileTable = function(tileTable) {
- return this.tableCreator.createUserTable(tileTable);
- };
- /**
- * Create a new [tile table]{@link module:tiles/user/tileTable~TileTable} in this GeoPackage.
- *
- * @param {String} tableName tile table name
- * @param {BoundingBox} contentsBoundingBox bounding box of the contents table
- * @param {Number} contentsSrsId srs id of the contents table
- * @param {BoundingBox} tileMatrixSetBoundingBox bounding box of the matrix set
- * @param {Number} tileMatrixSetSrsId srs id of the matrix set
- * @returns {Promise<module:tiles/matrixset~TileMatrixSet>} `Promise` of the created {@link module:tiles/matrixset~TileMatrixSet}
- */
- GeoPackage.prototype.createTileTableWithTableName = function(tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId) {
- const columns = TileTable.createRequiredColumns();
- const tileTable = new TileTable(tableName, columns);
- const contents = new Contents();
- contents.table_name = tableName;
- contents.data_type = ContentsDao.GPKG_CDT_TILES_NAME;
- contents.identifier = tableName;
- contents.last_change = new Date().toISOString();
- contents.min_x = contentsBoundingBox.minLongitude;
- contents.min_y = contentsBoundingBox.minLatitude;
- contents.max_x = contentsBoundingBox.maxLongitude;
- contents.max_y = contentsBoundingBox.maxLatitude;
- contents.srs_id = contentsSrsId;
- const tileMatrixSet = new TileMatrixSet();
- tileMatrixSet.setContents(contents);
- tileMatrixSet.srs_id = tileMatrixSetSrsId;
- tileMatrixSet.min_x = tileMatrixSetBoundingBox.minLongitude;
- tileMatrixSet.min_y = tileMatrixSetBoundingBox.minLatitude;
- tileMatrixSet.max_x = tileMatrixSetBoundingBox.maxLongitude;
- tileMatrixSet.max_y = tileMatrixSetBoundingBox.maxLatitude;
- return this.createTileMatrixSetTable()
- .then(function() {
- return this.createTileMatrixTable();
- }.bind(this))
- .then(function() {
- return this.createTileTable(tileTable);
- }.bind(this))
- .then(function() {
- return this.getContentsDao().create(contents);
- }.bind(this))
- .then(function() {
- return this.getTileMatrixSetDao().create(tileMatrixSet);
- }.bind(this))
- .then(function() {
- return tileMatrixSet;
- });
- };
- /**
- * Create the tables and rows necessary to store tiles in a {@link module:tiles/matrixset~TileMatrixSet}.
- * This will create a [tile matrix row]{@link module:tiles/matrix~TileMatrix}
- * for every integral zoom level in the range `[minZoom..maxZoom]`.
- *
- * @param {BoundingBox} epsg3857TileBoundingBox
- * @param {module:tiles/matrixset~TileMatrixSet} tileMatrixSet
- * @param {number} minZoom
- * @param {number} maxZoom
- * @param {number} [tileSize=256] optional tile size in pixels
- * @returns {module:geoPackage~GeoPackage} `this` `GeoPackage`
- */
- GeoPackage.prototype.createStandardWebMercatorTileMatrix = function(epsg3857TileBoundingBox, tileMatrixSet, minZoom, maxZoom, tileSize) {
- tileSize = tileSize || 256;
- var tileMatrixDao = this.getTileMatrixDao();
- for (var zoom = minZoom; zoom <= maxZoom; zoom++) {
- var box = TileBoundingBoxUtils.webMercatorTileBox(epsg3857TileBoundingBox, zoom);
- var matrixWidth = (box.maxX - box.minX) + 1;
- var matrixHeight = (box.maxY - box.minY) + 1;
- var pixelXSize = ((epsg3857TileBoundingBox.maxLongitude - epsg3857TileBoundingBox.minLongitude) / matrixWidth) / tileSize;
- var pixelYSize = ((epsg3857TileBoundingBox.maxLatitude - epsg3857TileBoundingBox.minLatitude) / matrixHeight) / tileSize;
- var tileMatrix = new TileMatrix();
- tileMatrix.table_name = tileMatrixSet.table_name;
- tileMatrix.zoom_level = zoom;
- tileMatrix.matrix_width = matrixWidth;
- tileMatrix.matrix_height = matrixHeight;
- tileMatrix.tile_width = tileSize;
- tileMatrix.tile_height = tileSize;
- tileMatrix.pixel_x_size = pixelXSize;
- tileMatrix.pixel_y_size = pixelYSize;
- tileMatrixDao.create(tileMatrix);
- }
- return this;
- };
- /**
- * Adds a tile to the GeoPackage
- * @param {object} tile Byte array or Buffer containing the tile bytes
- * @param {String} tableName Table name to add the tile to
- * @param {Number} zoom zoom level of this tile
- * @param {Number} tileRow row of this tile
- * @param {Number} tileColumn column of this tile
- */
- GeoPackage.prototype.addTile = function(tileStream, tableName, zoom, tileRow, tileColumn) {
- var tileDao = this.getTileDao(tableName);
- var newRow = tileDao.newRow();
- newRow.setZoomLevel(zoom);
- newRow.setTileColumn(tileColumn);
- newRow.setTileRow(tileRow);
- newRow.setTileData(tileStream);
- return tileDao.create(newRow);
- };
- /**
- * Create the Data Columns table if it does not already exist
- * @param {Function} callback called with an error if one occurred otherwise the table now exists
- */
- GeoPackage.prototype.createDataColumns = function() {
- var dao = this.getDataColumnsDao();
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createDataColumns();
- };
- /**
- * Create the Data Column Constraints table if it does not already exist
- * @param {Function} callback called with an error if one occurred otherwise the table now exists
- */
- GeoPackage.prototype.createDataColumnConstraintsTable = function () {
- var dao = this.getDataColumnConstraintsDao();
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createDataColumnConstraints();
- };
- GeoPackage.prototype.createMetadataTable = function () {
- var dao = this.getMetadataDao()
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createMetadata();
- };
- GeoPackage.prototype.createMetadataReferenceTable = function () {
- var dao = this.getMetadataReferenceDao()
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createMetadataReference();
- };
- GeoPackage.prototype.createExtensionTable = function () {
- var dao = this.getExtensionDao()
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createExtensions();
- };
- GeoPackage.prototype.createTableIndexTable = function () {
- var dao = this.getTableIndexDao();
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createTableIndex();
- };
- GeoPackage.prototype.createGeometryIndexTable = function() {
- var dao = this.getGeometryIndexDao();
- if (dao.isTableExists()) {
- return Promise.resolve().then(function() { return true; });
- }
- return this.tableCreator.createGeometryIndex();
- };
- GeoPackage.prototype.createStyleMappingTable = function(tableName, columns, dataColumns) {
- return Promise.resolve()
- .then(function() {
- var attributeTable = new StyleMappingTable(tableName, columns);
- var result = this.tableCreator.createUserTable(attributeTable);
- var contents = new Contents();
- contents.table_name = tableName;
- contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME;
- contents.identifier = tableName;
- contents.last_change = new Date().toISOString();
- return this.getContentsDao().create(contents);
- }.bind(this))
- .then(function() {
- if (dataColumns) {
- return this.createDataColumns()
- .then(function() {
- var dataColumnsDao = this.getDataColumnsDao();
- dataColumns.forEach(function(dataColumn) {
- dataColumnsDao.create(dataColumn);
- });
- }.bind(this));
- }
- }.bind(this))
- .then(function() {
- return true;
- });
- }
- /**
- * Get the application id of the GeoPackage
- * @param {Function} callback callback called with the application id
- */
- GeoPackage.prototype.getApplicationId = function() {
- var connection = this.getDatabase();
- return connection.getApplicationId();
- }
- GeoPackage.prototype.getInfoForTable = function (tableDao) {
- var info = {};
- info.tableName = tableDao.table_name;
- info.tableType = tableDao.table.getTableType();
- info.count = tableDao.getCount();
- if (info.tableType === UserTable.FEATURE_TABLE) {
- info.geometryColumns = {};
- info.geometryColumns.tableName = tableDao.geometryColumns.table_name;
- info.geometryColumns.geometryColumn = tableDao.geometryColumns.column_name;
- info.geometryColumns.geometryTypeName = tableDao.geometryColumns.geometry_type_name;
- info.geometryColumns.z = tableDao.geometryColumns.z;
- info.geometryColumns.m = tableDao.geometryColumns.m;
- }
- if (info.tableType === UserTable.TILE_TABLE) {
- info.minZoom = tableDao.minZoom;
- info.maxZoom = tableDao.maxZoom;
- info.minWebMapZoom = tableDao.minWebMapZoom;
- info.maxWebMapZoom = tableDao.maxWebMapZoom;
- info.zoomLevels = tableDao.tileMatrices.length;
- }
- var dao;
- var contentsRetriever;
- if (info.tableType === UserTable.FEATURE_TABLE) {
- dao = this.getGeometryColumnsDao();
- contentsRetriever = tableDao.geometryColumns;
- } else if (info.tableType === UserTable.TILE_TABLE) {
- dao = this.getTileMatrixSetDao();
- contentsRetriever = tableDao.tileMatrixSet;
- info.tileMatrixSet = {};
- info.tileMatrixSet.srsId = tableDao.tileMatrixSet.srs_id;
- info.tileMatrixSet.minX = tableDao.tileMatrixSet.min_x;
- info.tileMatrixSet.maxX = tableDao.tileMatrixSet.max_x;
- info.tileMatrixSet.minY = tableDao.tileMatrixSet.min_y;
- info.tileMatrixSet.maxY = tableDao.tileMatrixSet.max_y;
- }
- var contents = dao.getContents(contentsRetriever);
- info.contents = {};
- info.contents.tableName = contents.table_name;
- info.contents.dataType = contents.data_type;
- info.contents.identifier = contents.identifier;
- info.contents.description = contents.description;
- info.contents.lastChange = contents.last_change;
- info.contents.minX = contents.min_x;
- info.contents.maxX = contents.max_x;
- info.contents.minY = contents.min_y;
- info.contents.maxY = contents.max_y;
- var contentsDao = this.getContentsDao();
- var contentsSrs = contentsDao.getSrs(contents);
- info.contents.srs = {
- name:contentsSrs.srs_name,
- id:contentsSrs.srs_id,
- organization:contentsSrs.organization,
- organization_coordsys_id:contentsSrs.organization_coordsys_id,
- definition:contentsSrs.definition,
- description:contentsSrs.description
- };
- var srs = tableDao.getSrs();
- info.srs = {
- name:srs.srs_name,
- id:srs.srs_id,
- organization:srs.organization,
- organization_coordsys_id:srs.organization_coordsys_id,
- definition:srs.definition,
- description:srs.description
- };
- info.columns = [];
- info.columnMap = {};
- var dcd = this.getDataColumnsDao();
- tableDao.table.columns.forEach(function(column) {
- var dataColumn = dcd.getDataColumns(tableDao.table.table_name, column.name);
- info.columns.push({
- index: column.index,
- name: column.name,
- max: column.max,
- min: column.min,
- notNull: column.notNull,
- primaryKey: column.primaryKey,
- dataType: column.dataType ? DataTypes.name(column.dataType) : '',
- displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name,
- dataColumn: dataColumn
- });
- info.columnMap[column.name] = info.columns[info.columns.length-1];
- }.bind(this));
- return info;
- };
- },{"./attributes/attributeDao":3,"./attributes/attributeTable":5,"./attributes/attributeTableReader":6,"./core/contents":8,"./core/srs":9,"./dataColumnConstraints":12,"./dataColumns":13,"./db/dataTypes":14,"./db/tableCreator":19,"./extension":25,"./extension/contents/.":23,"./extension/contents/contentsIdDao":22,"./extension/crsWkt":24,"./extension/index/geometryIndex":27,"./extension/index/tableIndex":28,"./extension/relatedTables":32,"./extension/relatedTables/extendedRelation":31,"./extension/schema":45,"./extension/style/.":54,"./features/columns":64,"./features/user/featureDao":66,"./features/user/featureTable":68,"./features/user/featureTableReader":69,"./metadata":74,"./metadata/reference":75,"./proj4Defs":77,"./tiles/matrix":90,"./tiles/matrixset":91,"./tiles/tileBoundingBoxUtils":93,"./tiles/user/tileDao":96,"./tiles/user/tileTable":99,"./tiles/user/tileTableReader":100,"./user/userTable":108,"proj4":285}],71:[function(require,module,exports){
- /**
- * GeoPackage Constants module.
- * @module dao/geoPackageConstants
- */
- /** @constant {string} GEOPACKAGE_EXTENSION Extension to GeoPackage files */
- exports.GEOPACKAGE_EXTENSION = 'gpkg';
- /** @constant {string} GEOPACKAGE_EXTENDED_EXTENSION Extension to GeoPackage extension files */
- exports.GEOPACKAGE_EXTENDED_EXTENSION = 'gpkx';
- /** @constant {string} APPLICATION_ID GeoPackage application id */
- exports.APPLICATION_ID = 'GPKG';
- /** @constant {string} USER_VERSION GeoPackage user version */
- exports.USER_VERSION = '10200';
- /** @constant {string} GEOPACKAGE_EXTENSION_AUTHOR GeoPackage author */
- exports.GEOPACKAGE_EXTENSION_AUTHOR = exports.GEOPACKAGE_EXTENSION;
- /** @constant {string} GEOMETRY_EXTENSION_PREFIX Geometry extension prefix */
- exports.GEOMETRY_EXTENSION_PREFIX = 'geom';
- /** @constant {string} GEOPACKAGE_GEOMETRY_MAGIX_NUMBER Expected magic number */
- exports.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER = 'GP';
- /** @constant {string} GEOPACKAGE_GEOMETRY_VERSION_1 Expected version 1 value */
- exports.GEOPACKAGE_GEOMETRY_VERSION_1 = 0;
- /** @constant {string} SQLITE_HEADER_PREFIX SQLite header string prefix */
- exports.SQLITE_HEADER_PREFIX = 'SQLite format 3';
- },{}],72:[function(require,module,exports){
- var wkx = require('wkx');
- var turfBbox = require('@turf/bbox');
- module.exports.buildEnvelopeWithGeometry = function(wkbGeometry) {
- var geoJson = wkbGeometry.toGeoJSON();
- var bbox = turfBbox(geoJson);
- return {
- minX: bbox[0],
- minY: bbox[1],
- maxX: bbox[2],
- maxY: bbox[3]
- };
- }
- module.exports.expandEnvelopeForGeometry = function(envelope, wkbGeometry) {
- }
- },{"@turf/bbox":117,"wkx":360}],73:[function(require,module,exports){
- (function (Buffer){
- /**
- * GeometryData module.
- * @module geom/geometryData
- */
- var GeoPackageConstants = require('../geoPackageConstants');
- var wkx = require('wkx');
- var BIG_ENDIAN = 0;
- var LITTLE_ENDIAN = 1;
- /**
- * GeoPackage Geometry Data
- */
- var GeometryData = function(buffer) {
- this.empty = true;
- this.byteOrder = BIG_ENDIAN;
- if (buffer) {
- this.fromData(buffer);
- }
- }
- module.exports = GeometryData;
- GeometryData.prototype.setSrsId = function(srsId) {
- this.srsId = srsId;
- }
- GeometryData.prototype.setGeometry = function(wkbGeometry) {
- this.empty = false;
- this.geometry = wkbGeometry;
- }
- GeometryData.prototype.setEnvelope = function(envelope) {
- this.envelope = envelope;
- }
- GeometryData.prototype.toGeoJSON = function() {
- return this.geometry.toGeoJSON();
- }
- GeometryData.prototype.fromData = function (buffer) {
- this.buffer = buffer;
- if (buffer instanceof Uint8Array) {
- this.buffer = buffer = Buffer.from(buffer);
- }
- var magicString = buffer.toString('ascii', 0, 2);
- if (magicString !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER) {
- throw new Error('Unexpected GeoPackage Geometry magic number: ' + magicString + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER);
- }
- var version = buffer.readUInt8(2);
- if (version !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1) {
- throw new Error('Unexpected GeoPackage Geometry version ' + version + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1);
- }
- var flags = buffer.readUInt8(3);
- var envelopeIndicator = this.readFlags(flags);
- this.srsId = buffer[this.byteOrder ? 'readUInt32LE' : 'readUInt32BE'](4);
- var envelopeAndOffset = this.readEnvelope(envelopeIndicator, buffer);
- this.envelope = envelopeAndOffset.envelope;
- var offset = envelopeAndOffset.offset;
- var wkbBuffer = buffer.slice(offset);
- try {
- this.geometry = wkx.Geometry.parse(wkbBuffer);
- this.geometryError = undefined;
- } catch (error) {
- this.geometryError = error.message;
- console.log('Error parsing geometry');
- }
- };
- GeometryData.prototype.toData = function() {
- var header = Buffer.alloc(8);
- // Write GP as the 2 byte magic number
- header.write(GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER);
- // Write a byte as the version value of 0 = version 1
- header.writeUInt8(GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1, 2);
- // Build and write a flags byte
- var flags = this.buildFlagsByte();
- header.writeUInt8(flags, 3);
- // write the 4 byte srs id
- header[this.byteOrder ? 'writeUInt32LE' : 'writeUInt32BE'](this.srsId, 4);
- var envelopeBuffer = this.writeEnvelope(this.envelope);
- var concatArray = [header, envelopeBuffer];
- try {
- concatArray.push(this.geometry.toWkb());
- this.geometryError = undefined;
- } catch (error) {
- this.geometryError = error.message;
- }
- this.buffer = Buffer.concat(concatArray);
- return this.buffer;
- };
- GeometryData.prototype.writeEnvelope = function() {
- if (!this.envelope) return Buffer.alloc(0);
- var writeDoubleMethod = 'writeDouble' + (this.byteOrder ? 'LE' : 'BE');
- var length = 32;
- if (this.envelope.hasZ) {
- length += 16;
- }
- if (this.envelope.hasM) {
- length += 16;
- }
- var envelopeBuffer = Buffer.alloc(length);
- envelopeBuffer[writeDoubleMethod](this.envelope.minX, 0);
- envelopeBuffer[writeDoubleMethod](this.envelope.maxX, 8);
- envelopeBuffer[writeDoubleMethod](this.envelope.minY, 16);
- envelopeBuffer[writeDoubleMethod](this.envelope.maxY, 24);
- var position = 32;
- if (this.envelope.hasZ) {
- envelopeBuffer[writeDoubleMethod](this.envelope.minZ, position);
- envelopeBuffer[writeDoubleMethod](this.envelope.maxZ, position+8);
- position = 48;
- }
- if (this.envelope.hasM) {
- envelopeBuffer[writeDoubleMethod](this.envelope.minM, position);
- envelopeBuffer[writeDoubleMethod](this.envelope.maxM, position+8);
- }
- return envelopeBuffer;
- };
- GeometryData.prototype.buildFlagsByte = function() {
- var flag = 0;
- // Add the binary type to bit 5, 0 for standard and 1 for extended
- var binaryType = this.extended ? 1 : 0;
- flag += (binaryType << 5);
- // Add the empty geometry flag to bit 4, 0 for non-empty and 1 for empty
- var emptyValue = this.empty ? 1 : 0;
- flag += (emptyValue << 4);
- // Add the envelope contents indicator code (3-bit unsigned integer to bits 3, 2, and 1)
- var envelopeIndicator = !this.envelope ? 0 : this.getIndicatorWithEnvelope(this.envelope);
- flag += (envelopeIndicator << 1);
- // Add the byte order to bit 0, 0 for Big Endian and 1 for Little Endian
- var byteOrderValue = (this.byteOrder === BIG_ENDIAN) ? 0 : 1;
- flag += byteOrderValue;
- return flag;
- };
- GeometryData.prototype.getIndicatorWithEnvelope = function(envelope) {
- var indicator = 1;
- if (envelope.hasZ) {
- indicator++;
- }
- if (envelope.hasM) {
- indicator += 2;
- }
- return indicator;
- };
- GeometryData.prototype.readFlags = function (flagsInt) {
- // Verify the reserved bits at 7 and 6 are 0
- var reserved7 = (flagsInt >> 7) & 1;
- var reserved6 = (flagsInt >> 6) & 1;
- if (reserved7 !== 0 || reserved6 !== 0) {
- throw new Error('Unexpected GeoPackage Geometry flags. Flag bit 7 and 6 should both be 0, 7='+reserved7+', 6='+ reserved6);
- }
- // Get the binary type from bit 5, 0 for standard and 1 for extended
- var binaryType = (flagsInt >> 5) & 1;
- this.extended = binaryType == 1;
- // Get the empty geometry flag from bit 4, 0 for non-empty and 1 for
- // empty
- var emptyValue = (flagsInt >> 4) & 1;
- this.empty = emptyValue == 1;
- // Get the envelope contents indicator code (3-bit unsigned integer from
- // bits 3, 2, and 1)
- var envelopeIndicator = (flagsInt >> 1) & 7;
- if (envelopeIndicator > 4) {
- throw new Error('Unexpected GeoPackage Geometry flags. Envelope contents indicator must be between 0 and 4. Actual: ' + envelopeIndicator);
- }
- // Get the byte order from bit 0, 0 for Big Endian and 1 for Little Endian
- var byteOrderValue = flagsInt & 1;
- this.byteOrder = byteOrderValue;
- return envelopeIndicator;
- };
- GeometryData.prototype.readEnvelope = function (envelopeIndicator, buffer) {
- var readDoubleMethod = 'readDouble' + (this.byteOrder ? 'LE' : 'BE');
- var envelopeByteOffset = 8;
- reads = 0;
- var envelopeAndOffset = {
- envelope: undefined,
- offset: envelopeByteOffset
- };
- if (envelopeIndicator <= 0) {
- return envelopeAndOffset;
- }
- var envelope = {};
- // Read x and y values and create envelope
- envelope.minX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));
- envelope.maxX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));
- envelope.minY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));
- envelope.maxY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));
- envelope.hasZ = false;
- var minZ = undefined;
- var maxZ = undefined;
- envelope.hasM = false;
- var minM = undefined;
- var maxM = undefined;
- // Read z values
- if (envelopeIndicator === 2 || envelopeIndicator === 4) {
- envelope.hasZ = true;
- envelope.minZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));
- envelope.maxZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));
- }
- // Read m values
- if (envelopeIndicator === 3 || envelopeIndicator === 4) {
- envelope.hasM = true;
- envelope.minM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));
- envelope.maxM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));
- }
- envelopeAndOffset.envelope = envelope;
- envelopeAndOffset.offset = envelopeByteOffset + (8 * reads);
- return envelopeAndOffset;
- };
- }).call(this,require("buffer").Buffer)
- },{"../geoPackageConstants":71,"buffer":182,"wkx":360}],74:[function(require,module,exports){
- /**
- * Metadata module.
- * @module metadata
- * @see module:dao/dao
- */
- var Dao = require('../dao/dao');
- var util = require('util');
- /**
- * Contains metadata in MIME encodings structured in accordance with any
- * authoritative metadata specification
- * @class Metadata
- */
- var Metadata = function() {
- /**
- * Metadata primary key
- * @member {Number}
- */
- this.id;
- /**
- * Case sensitive name of the data scope to which this metadata applies; see Metadata Scopes below
- * @member {string}
- */
- this.md_scope;
- /**
- * URI reference to the metadata structure definition authority
- * @member {string}
- */
- this.md_standard_uri;
- /**
- * MIME encoding of metadata
- * @member {string}
- */
- this.mime_type;
- /**
- * metadata
- * @member {string}
- */
- this.metadata;
- }
- Metadata.UNDEFINED = "undefined";
- Metadata.FIELD_SESSION = "fieldSession";
- Metadata.COLLECTION_SESSION = "collectionSession";
- Metadata.SERIES = "series";
- Metadata.DATASET = "dataset";
- Metadata.FEATURE_TYPE = "featureType";
- Metadata.FEATURE = "feature";
- Metadata.ATTRIBUTE_TYPE = "attributeType";
- Metadata.ATTRIBUTE = "attribute";
- Metadata.TILE = "tile";
- Metadata.MODEL = "model";
- Metadata.CATALOG = "catalog";
- Metadata.SCHEMA = "schema";
- Metadata.TAXONOMY = "taxonomy";
- Metadata.SOFTWARE = "software";
- Metadata.SERVICE = "service";
- Metadata.COLLECTION_HARDWARE = "collectionHardware";
- Metadata.NON_GEOGRAPHIC_DATASET = "nonGeographicDataset";
- Metadata.DIMENSION_GROUP = "dimensionGroup";
- Metadata.prototype.getScopeInformation = function(type) {
- switch(type) {
- case Metadata.UNDEFINED:
- return {
- name: Metadata.UNDEFINED,
- code: 'NA',
- definition: 'Metadata information scope is undefined'
- };
- case Metadata.FIELD_SESSION:
- return {
- name: Metadata.FIELD_SESSION,
- code: '012',
- definition: 'Information applies to the field session'
- };
- case Metadata.COLLECTION_SESSION:
- return {
- name: Metadata.COLLECTION_SESSION,
- code: '004',
- definition: 'Information applies to the collection session'
- };
- case Metadata.SERIES:
- return {
- name: Metadata.SERIES,
- code: '006',
- definition: 'Information applies to the (dataset) series'
- };
- case Metadata.DATASET:
- return {
- name: Metadata.DATASET,
- code: '005',
- definition: 'Information applies to the (geographic feature) dataset'
- };
- case Metadata.FEATURE_TYPE:
- return {
- name: Metadata.FEATURE_TYPE,
- code: '010',
- definition: 'Information applies to a feature type (class)'
- };
- case Metadata.FEATURE:
- return {
- name: Metadata.FEATURE,
- code: '009',
- definition: 'Information applies to a feature (instance)'
- };
- case Metadata.ATTRIBUTE_TYPE:
- return {
- name: Metadata.ATTRIBUTE_TYPE,
- code: '002',
- definition: 'Information applies to the attribute class'
- };
- case Metadata.ATTRIBUTE:
- return {
- name: Metadata.ATTRIBUTE,
- code: '001',
- definition: 'Information applies to the characteristic of a feature (instance)'
- };
- case Metadata.TILE:
- return {
- name: Metadata.TILE,
- code: '016',
- definition: 'Information applies to a tile, a spatial subset of geographic data'
- };
- case Metadata.MODEL:
- return {
- name: Metadata.MODEL,
- code: '015',
- definition: 'Information applies to a copy or imitation of an existing or hypothetical object'
- };
- case Metadata.CATALOG:
- return {
- name: Metadata.CATALOG,
- code: 'NA',
- definition: 'Metadata applies to a feature catalog'
- };
- case Metadata.SCHEMA:
- return {
- name: Metadata.SCHEMA,
- code: 'NA',
- definition: 'Metadata applies to an application schema'
- };
- case Metadata.TAXONOMY:
- return {
- name: Metadata.TAXONOMY,
- code: 'NA',
- definition: 'Metadata applies to a taxonomy or knowledge system'
- };
- case Metadata.SOFTWARE:
- return {
- name: Metadata.SOFTWARE,
- code: '013',
- definition: 'Information applies to a computer program or routine'
- };
- case Metadata.SERVICE:
- return {
- name: Metadata.SERVICE,
- code: '014',
- definition: 'Information applies to a capability which a service provider entity makes available to a service user entity through a set of interfaces that define a behaviour, such as a use case'
- };
- case Metadata.COLLECTION_HARDWARE:
- return {
- name: Metadata.COLLECTION_HARDWARE,
- code: '003',
- definition: 'Information applies to the collection hardware class'
- };
- case Metadata.NON_GEOGRAPHIC_DATASET:
- return {
- name: Metadata.NON_GEOGRAPHIC_DATASET,
- code: '007',
- definition: 'Information applies to non-geographic data'
- };
- case Metadata.DIMENSION_GROUP:
- return {
- name: Metadata.DIMENSION_GROUP,
- code: '008',
- definition: 'Information applies to a dimension group'
- };
- }
- }
- /**
- * Metadata Data Access Object
- * @class
- * @extends {module:dao/dao~Dao}
- */
- var MetadataDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- };
- util.inherits(MetadataDao, Dao);
- MetadataDao.prototype.createObject = function() {
- return new Metadata();
- };
- MetadataDao.TABLE_NAME = "gpkg_metadata";
- MetadataDao.COLUMN_ID = "id";
- MetadataDao.COLUMN_MD_SCOPE = "md_scope";
- MetadataDao.COLUMN_MD_STANDARD_URI = "md_standard_uri";
- MetadataDao.COLUMN_MIME_TYPE = "mime_type";
- MetadataDao.COLUMN_METADATA = "metadata";
- MetadataDao.prototype.gpkgTableName = MetadataDao.TABLE_NAME;
- MetadataDao.prototype.idColumns = [MetadataDao.COLUMN_ID];
- module.exports.MetadataDao = MetadataDao;
- module.exports.Metadata = Metadata;
- },{"../dao/dao":11,"util":343}],75:[function(require,module,exports){
- /**
- * MetadataReference module.
- * @module metadata/reference
- * @see module:dao/dao
- */
- var Dao = require('../../dao/dao')
- , ColumnValues = require('../../dao/columnValues');
- var util = require('util');
- /**
- * Links metadata in the gpkg_metadata table to data in the feature, and tiles tables
- * @class MetadataReference
- */
- var MetadataReference = function() {
- /**
- * Lowercase metadata reference scope; one of ‘geopackage’, ‘table’, ‘column’, ’row’, ’row/col’
- * @member {string}
- */
- this.reference_scope;
- /**
- * Name of the table to which this metadata reference applies, or NULL for reference_scope of ‘geopackage’.
- * @member {string}
- */
- this.table_name;
- /**
- * Name of the column to which this metadata reference applies; NULL for
- * reference_scope of ‘geopackage’,‘table’ or ‘row’, or the name of a column
- * in the table_name table for reference_scope of ‘column’ or ‘row/col’
- * @member {string}
- */
- this.column_name;
- /**
- * NULL for reference_scope of ‘geopackage’, ‘table’ or ‘column’, or the
- * rowed of a row record in the table_name table for reference_scope of
- * ‘row’ or ‘row/col’
- * @member {Number}
- */
- this.row_id_value;
- /**
- * timestamp value in ISO 8601 format as defined by the strftime function
- * '%Y-%m-%dT%H:%M:%fZ' format string applied to the current time
- * @member {Date}
- */
- this.timestamp;
- /**
- * gpkg_metadata table id column value for the metadata to which this
- * gpkg_metadata_reference applies
- * @member {Number}
- */
- this.md_file_id;
- /**
- * gpkg_metadata table id column value for the hierarchical parent
- * gpkg_metadata for the gpkg_metadata to which this gpkg_metadata_reference
- * applies, or NULL if md_file_id forms the root of a metadata hierarchy
- * @member {Number}
- */
- this.md_parent_id;
- }
- MetadataReference.prototype.toDatabaseValue = function(columnName) {
- if (columnName === 'timestamp') {
- return this.timestamp.toISOString();
- }
- return this[columnName];
- }
- /**
- * Set the metadata
- * @param {Metadata} metadata metadata
- */
- MetadataReference.prototype.setMetadata = function(metadata) {
- if (metadata) {
- this.md_file_id = metadata.id;
- } else {
- this.md_file_id = -1;
- }
- }
- /**
- * Set the parent metadata
- * @param {Metadata} metadata parent metadata
- */
- MetadataReference.prototype.setParentMetadata = function(metadata) {
- if (metadata) {
- this.md_parent_id = metadata.id;
- } else {
- this.md_parent_id = -1;
- }
- }
- MetadataReference.prototype.setReferenceScopeType = function(referenceScopeType) {
- this.reference_scope = referenceScopeType;
- switch(referenceScopeType) {
- case MetadataReference.GEOPACKAGE:
- this.table_name = undefined;
- this.column_name = undefined;
- this.row_id_value = undefined;
- break;
- case MetadataReference.TABLE:
- this.column_name = undefined;
- this.row_id_value = undefined;
- break;
- case MetadataReference.ROW:
- this.column_name = undefined;
- break;
- case MetadataReference.COLUMN:
- this.row_id_value = undefined;
- break;
- }
- }
- MetadataReference.GEOPACKAGE = "geopackage";
- MetadataReference.TABLE = "table";
- MetadataReference.COLUMN = "column";
- MetadataReference.ROW = "row";
- MetadataReference.ROW_COL = "row/col";
- /**
- * Metadata Reference Data Access Object
- * @class
- * @extends {module:dao/dao~Dao}
- */
- var MetadataReferenceDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- };
- util.inherits(MetadataReferenceDao, Dao);
- MetadataReferenceDao.prototype.createObject = function() {
- return new MetadataReference();
- };
- MetadataReferenceDao.prototype.removeMetadataParent = function(parentId) {
- var values = {};
- values[MetadataReferenceDao.COLUMN_MD_PARENT_ID] = null;
- var where = this.buildWhereWithFieldAndValue(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId);
- var whereArgs = this.buildWhereArgs(parentId);
- return this.updateWithValues(values, where, whereArgs);
- }
- MetadataReferenceDao.prototype.queryByMetadataAndParent = function (fileId, parentId) {
- var columnValues = new ColumnValues();
- columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId);
- columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId);
- return this.queryForFieldValues(columnValues);
- };
- MetadataReferenceDao.prototype.queryByMetadata = function(fileId) {
- var columnValues = new ColumnValues();
- columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId);
- return this.queryForFieldValues(columnValues);
- };
- MetadataReferenceDao.prototype.queryByMetadataParent = function(parentId) {
- var columnValues = new ColumnValues();
- columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId);
- return this.queryForFieldValues(columnValues);
- };
- MetadataReferenceDao.TABLE_NAME = "gpkg_metadata_reference";
- MetadataReferenceDao.COLUMN_REFERENCE_SCOPE = "reference_scope";
- MetadataReferenceDao.COLUMN_TABLE_NAME = "table_name";
- MetadataReferenceDao.COLUMN_COLUMN_NAME = "column_name";
- MetadataReferenceDao.COLUMN_ROW_ID = "row_id";
- MetadataReferenceDao.COLUMN_TIMESTAMP = "timestamp";
- MetadataReferenceDao.COLUMN_MD_FILE_ID = "md_file_id";
- MetadataReferenceDao.COLUMN_MD_PARENT_ID = "md_parent_id";
- MetadataReferenceDao.prototype.gpkgTableName = MetadataReferenceDao.TABLE_NAME;
- MetadataReferenceDao.prototype.idColumns = [MetadataReferenceDao.COLUMN_MD_FILE_ID, MetadataReferenceDao.COLUMN_MD_PARENT_ID];
- module.exports.MetadataReferenceDao = MetadataReferenceDao;
- module.exports.MetadataReference = MetadataReference;
- },{"../../dao/columnValues":10,"../../dao/dao":11,"util":343}],76:[function(require,module,exports){
- module.exports = function(optionList) {
- var optionBuilder = {};
- optionList.forEach(function(option) {
- optionBuilder['set'+option.slice(0,1).toUpperCase()+option.slice(1)] = function(param) {
- this[option] = param;
- return this;
- }
- optionBuilder['get'+option.slice(0,1).toUpperCase()+option.slice(1)] = function() {
- return this[option];
- }
- });
- return optionBuilder;
- }
- },{}],77:[function(require,module,exports){
- module.exports = {
- "EPSG:3819":'+proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs ',
- "EPSG:3821":'+proj=longlat +ellps=aust_SA +no_defs ',
- "EPSG:3824":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:3889":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:3906":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +no_defs ',
- "EPSG:4001":'+proj=longlat +ellps=airy +no_defs ',
- "EPSG:4002":'+proj=longlat +ellps=mod_airy +no_defs ',
- "EPSG:4003":'+proj=longlat +ellps=aust_SA +no_defs ',
- "EPSG:4004":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:4005":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs ',
- "EPSG:4006":'+proj=longlat +ellps=bess_nam +no_defs ',
- "EPSG:4007":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',
- "EPSG:4008":'+proj=longlat +ellps=clrk66 +no_defs ',
- "EPSG:4009":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ',
- "EPSG:4010":'+proj=longlat +a=6378300.789 +b=6356566.435 +no_defs ',
- "EPSG:4011":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',
- "EPSG:4012":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4013":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs ',
- "EPSG:4014":'+proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs ',
- "EPSG:4015":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs ',
- "EPSG:4016":'+proj=longlat +ellps=evrstSS +no_defs ',
- "EPSG:4018":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs ',
- "EPSG:4019":'+proj=longlat +ellps=GRS80 +no_defs ',
- "EPSG:4020":'+proj=longlat +ellps=helmert +no_defs ',
- "EPSG:4021":'+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs ',
- "EPSG:4022":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4023":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4024":'+proj=longlat +ellps=krass +no_defs ',
- "EPSG:4025":'+proj=longlat +ellps=WGS66 +no_defs ',
- "EPSG:4027":'+proj=longlat +a=6376523 +b=6355862.933255573 +no_defs ',
- "EPSG:4028":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs ',
- "EPSG:4029":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ',
- "EPSG:4030":'+proj=longlat +ellps=WGS84 +no_defs ',
- "EPSG:4031":'+proj=longlat +ellps=WGS84 +no_defs ',
- "EPSG:4032":'+proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs ',
- "EPSG:4033":'+proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs ',
- "EPSG:4034":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ',
- "EPSG:4035":'+proj=longlat +a=6371000 +b=6371000 +no_defs ',
- "EPSG:4036":'+proj=longlat +ellps=GRS67 +no_defs ',
- "EPSG:4041":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ',
- "EPSG:4042":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ',
- "EPSG:4043":'+proj=longlat +ellps=WGS72 +no_defs ',
- "EPSG:4044":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs ',
- "EPSG:4045":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs ',
- "EPSG:4046":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4047":'+proj=longlat +a=6371007 +b=6371007 +no_defs ',
- "EPSG:4052":'+proj=longlat +a=6370997 +b=6370997 +no_defs ',
- "EPSG:4053":'+proj=longlat +a=6371228 +b=6371228 +no_defs ',
- "EPSG:4054":'+proj=longlat +a=6378273 +b=6356889.449 +no_defs ',
- "EPSG:4055":'+proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4075":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4081":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4120":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:4121":'+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs ',
- "EPSG:4122":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ',
- "EPSG:4123":'+proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +no_defs ',
- "EPSG:4124":'+proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs ',
- "EPSG:4125":'+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs ',
- "EPSG:4126":'+proj=longlat +ellps=GRS80 +no_defs ',
- "EPSG:4127":'+proj=longlat +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +no_defs ',
- "EPSG:4128":'+proj=longlat +ellps=clrk66 +no_defs ',
- "EPSG:4129":'+proj=longlat +ellps=clrk66 +no_defs ',
- "EPSG:4130":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs ',
- "EPSG:4131":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +no_defs ',
- "EPSG:4132":'+proj=longlat +ellps=clrk80 +towgs84=-241.54,-163.64,396.06,0,0,0,0 +no_defs ',
- "EPSG:4133":'+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs ',
- "EPSG:4134":'+proj=longlat +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +no_defs ',
- "EPSG:4135":'+proj=longlat +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +no_defs ',
- "EPSG:4136":'+proj=longlat +ellps=clrk66 +no_defs ',
- "EPSG:4137":'+proj=longlat +ellps=clrk66 +no_defs ',
- "EPSG:4138":'+proj=longlat +ellps=clrk66 +no_defs ',
- "EPSG:4139":'+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs ',
- "EPSG:4140":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4141":'+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs ',
- "EPSG:4142":'+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs ',
- "EPSG:4143":'+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs ',
- "EPSG:4144":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +no_defs ',
- "EPSG:4145":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +no_defs ',
- "EPSG:4146":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs ',
- "EPSG:4147":'+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs ',
- "EPSG:4148":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4149":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +no_defs ',
- "EPSG:4150":'+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs ',
- "EPSG:4151":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4152":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4153":'+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs ',
- "EPSG:4154":'+proj=longlat +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +no_defs ',
- "EPSG:4155":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs ',
- "EPSG:4156":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +no_defs ',
- "EPSG:4157":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',
- "EPSG:4158":'+proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +no_defs ',
- "EPSG:4159":'+proj=longlat +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +no_defs ',
- "EPSG:4160":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4161":'+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs ',
- "EPSG:4162":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:4163":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4164":'+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs ',
- "EPSG:4165":'+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs ',
- "EPSG:4166":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4167":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4168":'+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs ',
- "EPSG:4169":'+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs ',
- "EPSG:4170":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4171":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4172":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4173":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4174":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ',
- "EPSG:4175":'+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs ',
- "EPSG:4176":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4178":'+proj=longlat +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +no_defs ',
- "EPSG:4179":'+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs ',
- "EPSG:4180":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4181":'+proj=longlat +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +no_defs ',
- "EPSG:4182":'+proj=longlat +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +no_defs ',
- "EPSG:4183":'+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs ',
- "EPSG:4184":'+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs ',
- "EPSG:4185":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4188":'+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ',
- "EPSG:4189":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4190":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4191":'+proj=longlat +ellps=krass +no_defs ',
- "EPSG:4192":'+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs ',
- "EPSG:4193":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ',
- "EPSG:4194":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ',
- "EPSG:4195":'+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs ',
- "EPSG:4196":'+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs ',
- "EPSG:4197":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4198":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4199":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4200":'+proj=longlat +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +no_defs ',
- "EPSG:4201":'+proj=longlat +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +no_defs ',
- "EPSG:4202":'+proj=longlat +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +no_defs ',
- "EPSG:4203":'+proj=longlat +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +no_defs ',
- "EPSG:4204":'+proj=longlat +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +no_defs ',
- "EPSG:4205":'+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs ',
- "EPSG:4206":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',
- "EPSG:4207":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +no_defs ',
- "EPSG:4208":'+proj=longlat +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +no_defs ',
- "EPSG:4209":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +no_defs ',
- "EPSG:4210":'+proj=longlat +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs ',
- "EPSG:4211":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +no_defs ',
- "EPSG:4212":'+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs ',
- "EPSG:4213":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs ',
- "EPSG:4214":'+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs ',
- "EPSG:4215":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4216":'+proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs ',
- "EPSG:4218":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs ',
- "EPSG:4219":'+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs ',
- "EPSG:4220":'+proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +no_defs ',
- "EPSG:4221":'+proj=longlat +ellps=intl +towgs84=-148,136,90,0,0,0,0 +no_defs ',
- "EPSG:4222":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +no_defs ',
- "EPSG:4223":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +no_defs ',
- "EPSG:4224":'+proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs ',
- "EPSG:4225":'+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs ',
- "EPSG:4226":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',
- "EPSG:4227":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +no_defs ',
- "EPSG:4228":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',
- "EPSG:4229":'+proj=longlat +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +no_defs ',
- "EPSG:4230":'+proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs ',
- "EPSG:4231":'+proj=longlat +ellps=intl +towgs84=-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218 +no_defs ',
- "EPSG:4232":'+proj=longlat +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +no_defs ',
- "EPSG:4233":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ',
- "EPSG:4234":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',
- "EPSG:4235":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4236":'+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs ',
- "EPSG:4237":'+proj=longlat +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +no_defs ',
- "EPSG:4238":'+proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +no_defs ',
- "EPSG:4239":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs ',
- "EPSG:4240":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +no_defs ',
- "EPSG:4241":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ',
- "EPSG:4242":'+proj=longlat +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +no_defs ',
- "EPSG:4243":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ',
- "EPSG:4244":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs ',
- "EPSG:4245":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs ',
- "EPSG:4246":'+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs ',
- "EPSG:4247":'+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs ',
- "EPSG:4248":'+proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +no_defs ',
- "EPSG:4249":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4250":'+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs ',
- "EPSG:4251":'+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs ',
- "EPSG:4252":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',
- "EPSG:4253":'+proj=longlat +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +no_defs ',
- "EPSG:4254":'+proj=longlat +ellps=intl +towgs84=16,196,93,0,0,0,0 +no_defs ',
- "EPSG:4255":'+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs ',
- "EPSG:4256":'+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs ',
- "EPSG:4257":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs ',
- "EPSG:4258":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4259":'+proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +no_defs ',
- "EPSG:4260":'+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ',
- "EPSG:4261":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs ',
- "EPSG:4262":'+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs ',
- "EPSG:4263":'+proj=longlat +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +no_defs ',
- "EPSG:4264":'+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs ',
- "EPSG:4265":'+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +no_defs ',
- "EPSG:4266":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +no_defs ',
- "EPSG:4267":'+proj=longlat +datum=NAD27 +no_defs ',
- "EPSG:4268":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ',
- "EPSG:4269":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4270":'+proj=longlat +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +no_defs ',
- "EPSG:4271":'+proj=longlat +ellps=intl +towgs84=-10,375,165,0,0,0,0 +no_defs ',
- "EPSG:4272":'+proj=longlat +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +no_defs ',
- "EPSG:4273":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs ',
- "EPSG:4274":'+proj=longlat +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +no_defs ',
- "EPSG:4275":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs ',
- "EPSG:4276":'+proj=longlat +ellps=WGS66 +no_defs ',
- "EPSG:4277":'+proj=longlat +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +no_defs ',
- "EPSG:4278":'+proj=longlat +ellps=airy +no_defs ',
- "EPSG:4279":'+proj=longlat +ellps=airy +no_defs ',
- "EPSG:4280":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:4281":'+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs ',
- "EPSG:4282":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +no_defs ',
- "EPSG:4283":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4284":'+proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs ',
- "EPSG:4285":'+proj=longlat +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +no_defs ',
- "EPSG:4286":'+proj=longlat +ellps=helmert +no_defs ',
- "EPSG:4287":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ',
- "EPSG:4288":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4289":'+proj=longlat +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +no_defs ',
- "EPSG:4291":'+proj=longlat +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +no_defs ',
- "EPSG:4292":'+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs ',
- "EPSG:4293":'+proj=longlat +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +no_defs ',
- "EPSG:4294":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ',
- "EPSG:4295":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:4296":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',
- "EPSG:4297":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs ',
- "EPSG:4298":'+proj=longlat +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +no_defs ',
- "EPSG:4299":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ',
- "EPSG:4300":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ',
- "EPSG:4301":'+proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs ',
- "EPSG:4302":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs ',
- "EPSG:4303":'+proj=longlat +ellps=helmert +no_defs ',
- "EPSG:4304":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs ',
- "EPSG:4306":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:4307":'+proj=longlat +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +no_defs ',
- "EPSG:4308":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:4309":'+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs ',
- "EPSG:4310":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',
- "EPSG:4311":'+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs ',
- "EPSG:4312":'+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs ',
- "EPSG:4313":'+proj=longlat +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +no_defs ',
- "EPSG:4314":'+proj=longlat +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +no_defs ',
- "EPSG:4315":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs ',
- "EPSG:4316":'+proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs ',
- "EPSG:4317":'+proj=longlat +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +no_defs ',
- "EPSG:4318":'+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs ',
- "EPSG:4319":'+proj=longlat +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +no_defs ',
- "EPSG:4322":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ',
- "EPSG:4324":'+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs ',
- "EPSG:4326":'+proj=longlat +datum=WGS84 +no_defs ',
- "EPSG:4463":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4470":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4475":'+proj=longlat +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +no_defs ',
- "EPSG:4483":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4490":'+proj=longlat +ellps=GRS80 +no_defs ',
- "EPSG:4555":'+proj=longlat +ellps=krass +no_defs ',
- "EPSG:4558":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4600":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4601":'+proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs ',
- "EPSG:4602":'+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs ',
- "EPSG:4603":'+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs ',
- "EPSG:4604":'+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs ',
- "EPSG:4605":'+proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs ',
- "EPSG:4606":'+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs ',
- "EPSG:4607":'+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs ',
- "EPSG:4608":'+proj=longlat +ellps=clrk66 +no_defs ',
- "EPSG:4609":'+proj=longlat +ellps=clrk66 +no_defs ',
- "EPSG:4610":'+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs ',
- "EPSG:4611":'+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs ',
- "EPSG:4612":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4613":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ',
- "EPSG:4614":'+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs ',
- "EPSG:4615":'+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs ',
- "EPSG:4616":'+proj=longlat +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +no_defs ',
- "EPSG:4617":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4618":'+proj=longlat +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +no_defs ',
- "EPSG:4619":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4620":'+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs ',
- "EPSG:4621":'+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs ',
- "EPSG:4622":'+proj=longlat +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +no_defs ',
- "EPSG:4623":'+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs ',
- "EPSG:4624":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4625":'+proj=longlat +ellps=intl +towgs84=186,482,151,0,0,0,0 +no_defs ',
- "EPSG:4626":'+proj=longlat +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +no_defs ',
- "EPSG:4627":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4628":'+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs ',
- "EPSG:4629":'+proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +no_defs ',
- "EPSG:4630":'+proj=longlat +ellps=intl +towgs84=84,274,65,0,0,0,0 +no_defs ',
- "EPSG:4631":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ',
- "EPSG:4632":'+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs ',
- "EPSG:4633":'+proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +no_defs ',
- "EPSG:4634":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ',
- "EPSG:4635":'+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs ',
- "EPSG:4636":'+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs ',
- "EPSG:4637":'+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs ',
- "EPSG:4638":'+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs ',
- "EPSG:4639":'+proj=longlat +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +no_defs ',
- "EPSG:4640":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4641":'+proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +no_defs ',
- "EPSG:4642":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ',
- "EPSG:4643":'+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs ',
- "EPSG:4644":'+proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +no_defs ',
- "EPSG:4645":'+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4646":'+proj=longlat +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +no_defs ',
- "EPSG:4657":'+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs ',
- "EPSG:4658":'+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs ',
- "EPSG:4659":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4660":'+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +no_defs ',
- "EPSG:4661":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4662":'+proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +no_defs ',
- "EPSG:4663":'+proj=longlat +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +no_defs ',
- "EPSG:4664":'+proj=longlat +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +no_defs ',
- "EPSG:4665":'+proj=longlat +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +no_defs ',
- "EPSG:4666":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +no_defs ',
- "EPSG:4667":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4668":'+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs ',
- "EPSG:4669":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4670":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4671":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',
- "EPSG:4672":'+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs ',
- "EPSG:4673":'+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs ',
- "EPSG:4674":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4675":'+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs ',
- "EPSG:4676":'+proj=longlat +ellps=krass +no_defs ',
- "EPSG:4677":'+proj=longlat +ellps=krass +no_defs ',
- "EPSG:4678":'+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs ',
- "EPSG:4679":'+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs ',
- "EPSG:4680":'+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs ',
- "EPSG:4681":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4682":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +no_defs ',
- "EPSG:4683":'+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs ',
- "EPSG:4684":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ',
- "EPSG:4685":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4686":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4687":'+proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +no_defs ',
- "EPSG:4688":'+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs ',
- "EPSG:4689":'+proj=longlat +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +no_defs ',
- "EPSG:4690":'+proj=longlat +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +no_defs ',
- "EPSG:4691":'+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs ',
- "EPSG:4692":'+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs ',
- "EPSG:4693":'+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs ',
- "EPSG:4694":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4695":'+proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs ',
- "EPSG:4696":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4697":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4698":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ',
- "EPSG:4699":'+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs ',
- "EPSG:4700":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4701":'+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs ',
- "EPSG:4702":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4703":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4704":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4705":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4706":'+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs ',
- "EPSG:4707":'+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs ',
- "EPSG:4708":'+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs ',
- "EPSG:4709":'+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs ',
- "EPSG:4710":'+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs ',
- "EPSG:4711":'+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs ',
- "EPSG:4712":'+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs ',
- "EPSG:4713":'+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs ',
- "EPSG:4714":'+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs ',
- "EPSG:4715":'+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs ',
- "EPSG:4716":'+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs ',
- "EPSG:4717":'+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs ',
- "EPSG:4718":'+proj=longlat +ellps=intl +towgs84=230,-199,-752,0,0,0,0 +no_defs ',
- "EPSG:4719":'+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs ',
- "EPSG:4720":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ',
- "EPSG:4721":'+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs ',
- "EPSG:4722":'+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs ',
- "EPSG:4723":'+proj=longlat +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +no_defs ',
- "EPSG:4724":'+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs ',
- "EPSG:4725":'+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs ',
- "EPSG:4726":'+proj=longlat +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +no_defs ',
- "EPSG:4727":'+proj=longlat +ellps=intl +towgs84=403,-81,277,0,0,0,0 +no_defs ',
- "EPSG:4728":'+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs ',
- "EPSG:4729":'+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs ',
- "EPSG:4730":'+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs ',
- "EPSG:4731":'+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs ',
- "EPSG:4732":'+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs ',
- "EPSG:4733":'+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs ',
- "EPSG:4734":'+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs ',
- "EPSG:4735":'+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs ',
- "EPSG:4736":'+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs ',
- "EPSG:4737":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4738":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',
- "EPSG:4739":'+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs ',
- "EPSG:4740":'+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs ',
- "EPSG:4741":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4742":'+proj=longlat +ellps=GRS80 +no_defs ',
- "EPSG:4743":'+proj=longlat +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +no_defs ',
- "EPSG:4744":'+proj=longlat +ellps=clrk80 +no_defs ',
- "EPSG:4745":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:4746":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:4747":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4748":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ',
- "EPSG:4749":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4750":'+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs ',
- "EPSG:4751":'+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs ',
- "EPSG:4752":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ',
- "EPSG:4753":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4754":'+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs ',
- "EPSG:4755":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4756":'+proj=longlat +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +no_defs ',
- "EPSG:4757":'+proj=longlat +ellps=WGS84 +no_defs ',
- "EPSG:4758":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4759":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4760":'+proj=longlat +ellps=WGS66 +no_defs ',
- "EPSG:4761":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4762":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4763":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4764":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4765":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:4801":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +no_defs ',
- "EPSG:4802":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +pm=bogota +no_defs ',
- "EPSG:4803":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +no_defs ',
- "EPSG:4804":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs ',
- "EPSG:4805":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +no_defs ',
- "EPSG:4806":'+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +no_defs ',
- "EPSG:4807":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs ',
- "EPSG:4808":'+proj=longlat +ellps=bessel +pm=jakarta +no_defs ',
- "EPSG:4809":'+proj=longlat +ellps=intl +pm=brussels +no_defs ',
- "EPSG:4810":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs ',
- "EPSG:4811":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs ',
- "EPSG:4813":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +no_defs ',
- "EPSG:4814":'+proj=longlat +ellps=bessel +pm=stockholm +no_defs ',
- "EPSG:4815":'+proj=longlat +ellps=bessel +pm=athens +no_defs ',
- "EPSG:4816":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +pm=paris +no_defs ',
- "EPSG:4817":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs ',
- "EPSG:4818":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +no_defs ',
- "EPSG:4819":'+proj=longlat +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +pm=paris +no_defs ',
- "EPSG:4820":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +no_defs ',
- "EPSG:4821":'+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs ',
- "EPSG:4823":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4824":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:4901":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +no_defs ',
- "EPSG:4902":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs ',
- "EPSG:4903":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs ',
- "EPSG:4904":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +pm=lisbon +no_defs ',
- "EPSG:5013":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5132":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:5228":'+proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +no_defs ',
- "EPSG:5229":'+proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +pm=ferro +no_defs ',
- "EPSG:5233":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +no_defs ',
- "EPSG:5246":'+proj=longlat +ellps=GRS80 +no_defs ',
- "EPSG:5252":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5264":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5324":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5340":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5354":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5360":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5365":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5371":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5373":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5381":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5393":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5451":'+proj=longlat +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +no_defs ',
- "EPSG:5464":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',
- "EPSG:5467":'+proj=longlat +ellps=clrk66 +no_defs ',
- "EPSG:5489":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5524":'+proj=longlat +ellps=intl +no_defs ',
- "EPSG:5527":'+proj=longlat +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +no_defs ',
- "EPSG:5546":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5561":'+proj=longlat +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +no_defs ',
- "EPSG:5593":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:5681":'+proj=longlat +ellps=bessel +no_defs ',
- "EPSG:5886":'+proj=longlat +ellps=GRS80 +no_defs ',
- "EPSG:6135":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',
- "EPSG:2000":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:2001":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs ',
- "EPSG:2002":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs ',
- "EPSG:2003":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs ',
- "EPSG:2004":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs ',
- "EPSG:2005":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs ',
- "EPSG:2006":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs ',
- "EPSG:2007":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs ',
- "EPSG:2008":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2009":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2010":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2011":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2012":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2013":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2014":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2015":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2016":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2017":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2018":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2019":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2020":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2021":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2022":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2023":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2024":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2025":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2026":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2027":'+proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2028":'+proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2029":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2030":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2031":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2032":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2033":'+proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2034":'+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2035":'+proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2036":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2037":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2038":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2039":'+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs ',
- "EPSG:2040":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ',
- "EPSG:2041":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ',
- "EPSG:2042":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ',
- "EPSG:2043":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ',
- "EPSG:2044":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ',
- "EPSG:2045":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ',
- "EPSG:2046":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2047":'+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2048":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2049":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2050":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2051":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2052":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2053":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2054":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2055":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2056":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs ',
- "EPSG:2057":'+proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +gamma=0.5716611944444444 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs ',
- "EPSG:2058":'+proj=utm +zone=38 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',
- "EPSG:2059":'+proj=utm +zone=39 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',
- "EPSG:2060":'+proj=utm +zone=40 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',
- "EPSG:2061":'+proj=utm +zone=41 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',
- "EPSG:2062":'+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs ',
- "EPSG:2063":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',
- "EPSG:2064":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',
- "EPSG:2065":'+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:2066":'+proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs ',
- "EPSG:2067":'+proj=utm +zone=20 +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +units=m +no_defs ',
- "EPSG:2068":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2069":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2070":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2071":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2072":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2073":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2074":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2075":'+proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2076":'+proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2077":'+proj=utm +zone=32 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2078":'+proj=utm +zone=33 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2079":'+proj=utm +zone=34 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2080":'+proj=utm +zone=35 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2081":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs ',
- "EPSG:2082":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs ',
- "EPSG:2083":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs ',
- "EPSG:2084":'+proj=utm +zone=19 +south +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs ',
- "EPSG:2085":'+proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs ',
- "EPSG:2086":'+proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs ',
- "EPSG:2087":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',
- "EPSG:2088":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',
- "EPSG:2089":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2090":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2091":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',
- "EPSG:2092":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',
- "EPSG:2093":'+proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ',
- "EPSG:2094":'+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:2095":'+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs ',
- "EPSG:2096":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:2097":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:2098":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:2099":'+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs ',
- "EPSG:2100":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs ',
- "EPSG:2101":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs ',
- "EPSG:2102":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs ',
- "EPSG:2103":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs ',
- "EPSG:2104":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs ',
- "EPSG:2105":'+proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2106":'+proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2107":'+proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2108":'+proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2109":'+proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2110":'+proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2111":'+proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2112":'+proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2113":'+proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2114":'+proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2115":'+proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2116":'+proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2117":'+proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2118":'+proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2119":'+proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2120":'+proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2121":'+proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2122":'+proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2123":'+proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2124":'+proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2125":'+proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2126":'+proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2127":'+proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2128":'+proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2129":'+proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2130":'+proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2131":'+proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2132":'+proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2133":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2134":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2135":'+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2136":'+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs ',
- "EPSG:2137":'+proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs ',
- "EPSG:2138":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:2139":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2140":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2141":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2142":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2143":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2144":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2145":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2146":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2147":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2148":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2149":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2150":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2151":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2152":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2153":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2154":'+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2155":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2156":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2157":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2158":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2159":'+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs ',
- "EPSG:2160":'+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs ',
- "EPSG:2161":'+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ',
- "EPSG:2162":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ',
- "EPSG:2163":'+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs ',
- "EPSG:2164":'+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ',
- "EPSG:2165":'+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ',
- "EPSG:2166":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:2167":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:2168":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:2169":'+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +units=m +no_defs ',
- "EPSG:2170":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:2171":'+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:2172":'+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:2173":'+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:2174":'+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:2175":'+proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:2176":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2177":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2178":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2179":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2180":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2188":'+proj=utm +zone=25 +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +units=m +no_defs ',
- "EPSG:2189":'+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs ',
- "EPSG:2190":'+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs ',
- "EPSG:2191":'+proj=utm +zone=28 +ellps=intl +units=m +no_defs ',
- "EPSG:2192":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2193":'+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2194":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2195":'+proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2196":'+proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2197":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2198":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2199":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:2200":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',
- "EPSG:2201":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2202":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2203":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2204":'+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:2205":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2206":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2207":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2208":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2209":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2210":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2211":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2212":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2213":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2214":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs ',
- "EPSG:2215":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs ',
- "EPSG:2216":'+proj=utm +zone=22 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ',
- "EPSG:2217":'+proj=utm +zone=23 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ',
- "EPSG:2219":'+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',
- "EPSG:2220":'+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',
- "EPSG:2222":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2223":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2224":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2225":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2226":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2227":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2228":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2229":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2230":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2231":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2232":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2233":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2234":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2235":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2236":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2237":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2238":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2239":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2240":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2241":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2242":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2243":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2244":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2245":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2246":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2247":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2248":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2249":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2250":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2251":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2252":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2253":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2254":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2255":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2256":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2257":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2258":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2259":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2260":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2261":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2262":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2263":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2264":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2265":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2266":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2267":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2268":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2269":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2270":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2271":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2272":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2273":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2274":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2275":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2276":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2277":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2278":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2279":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2280":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2281":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2282":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2283":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2284":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2285":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2286":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2287":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2288":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2289":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2290":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',
- "EPSG:2291":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',
- "EPSG:2292":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2294":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',
- "EPSG:2295":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',
- "EPSG:2308":'+proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',
- "EPSG:2309":'+proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:2310":'+proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:2311":'+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:2312":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:2313":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:2314":'+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.3047972654 +no_defs ',
- "EPSG:2315":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',
- "EPSG:2316":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',
- "EPSG:2317":'+proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:2318":'+proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',
- "EPSG:2319":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2320":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2321":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2322":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2323":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2324":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2325":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:2326":'+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs ',
- "EPSG:2327":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2328":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2329":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2330":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2331":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2332":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2333":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2334":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2335":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2336":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2337":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2338":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2339":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2340":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2341":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2342":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2343":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2344":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2345":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2346":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2347":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2348":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2349":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2350":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2351":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2352":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2353":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2354":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2355":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2356":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2357":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2358":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2359":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2360":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2361":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2362":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2363":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2364":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2365":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2366":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2367":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2368":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2369":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2370":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2371":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2372":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2373":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2374":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2375":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2376":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2377":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2378":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2379":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2380":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2381":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2382":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2383":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2384":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2385":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2386":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2387":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2388":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2389":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2390":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',
- "EPSG:2391":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',
- "EPSG:2392":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',
- "EPSG:2393":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',
- "EPSG:2394":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',
- "EPSG:2395":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',
- "EPSG:2396":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',
- "EPSG:2397":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:2398":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:2399":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:2400":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',
- "EPSG:2401":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2402":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2403":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2404":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2405":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2406":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2407":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2408":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2409":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2410":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2411":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2412":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2413":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2414":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2415":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2416":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2417":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2418":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2419":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2420":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2421":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2422":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2423":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2424":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2425":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2426":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2427":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2428":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2429":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2430":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2431":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2432":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2433":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2434":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2435":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2436":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2437":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2438":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2439":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2440":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2441":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2442":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:2443":'+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2444":'+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2445":'+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2446":'+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2447":'+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2448":'+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2449":'+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2450":'+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2451":'+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2452":'+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2453":'+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2454":'+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2455":'+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2456":'+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2457":'+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2458":'+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2459":'+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2460":'+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2461":'+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2462":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:2463":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2464":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2465":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2466":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2467":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2468":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2469":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2470":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2471":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2472":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2473":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2474":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2475":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2476":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2477":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2478":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2479":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2480":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2481":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2482":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2483":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2484":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2485":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2486":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2487":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2488":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2489":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2490":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2491":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2492":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2493":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2494":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2495":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2496":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2497":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2498":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2499":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2500":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2501":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2502":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2503":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2504":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2505":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2506":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2507":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2508":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2509":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2510":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2511":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2512":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2513":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2514":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2515":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2516":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2517":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2518":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2519":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2520":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2521":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2522":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2523":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2524":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2525":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2526":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2527":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2528":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2529":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2530":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2531":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2532":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2533":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2534":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2535":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2536":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2537":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2538":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2539":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2540":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2541":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2542":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2543":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2544":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2545":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2546":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2547":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2548":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2549":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2550":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs ',
- "EPSG:2551":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2552":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2553":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2554":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2555":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2556":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2557":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2558":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2559":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2560":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2561":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2562":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2563":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2564":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2565":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2566":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2567":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2568":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2569":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2570":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2571":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2572":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2573":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2574":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2575":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2576":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2577":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2578":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2579":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2580":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2581":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2582":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2583":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2584":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2585":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2586":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2587":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2588":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2589":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2590":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2591":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2592":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2593":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2594":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2595":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2596":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2597":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2598":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2599":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2600":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2601":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2602":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2603":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2604":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2605":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2606":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2607":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2608":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2609":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2610":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2611":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2612":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2613":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2614":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2615":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2616":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2617":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2618":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2619":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2620":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2621":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2622":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2623":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2624":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2625":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2626":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2627":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2628":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2629":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2630":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2631":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2632":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2633":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2634":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2635":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2636":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2637":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2638":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2639":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2640":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2641":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2642":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2643":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2644":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2645":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2646":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2647":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2648":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2649":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2650":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2651":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2652":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2653":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2654":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2655":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2656":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2657":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2658":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2659":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2660":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2661":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2662":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2663":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2664":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2665":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2666":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2667":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2668":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2669":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2670":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2671":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2672":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2673":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2674":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2675":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2676":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2677":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2678":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2679":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2680":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2681":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2682":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2683":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2684":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2685":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2686":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2687":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2688":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2689":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2690":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2691":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2692":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2693":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2694":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2695":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2696":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2697":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2698":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2699":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2700":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2701":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2702":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2703":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2704":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2705":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2706":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2707":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2708":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2709":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2710":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2711":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2712":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2713":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2714":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2715":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2716":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2717":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2718":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2719":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2720":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2721":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2722":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2723":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2724":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2725":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2726":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2727":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2728":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2729":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2730":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2731":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2732":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2733":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2734":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2735":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2736":'+proj=utm +zone=36 +south +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +units=m +no_defs ',
- "EPSG:2737":'+proj=utm +zone=37 +south +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +units=m +no_defs ',
- "EPSG:2738":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2739":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2740":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2741":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2742":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2743":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2744":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2745":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2746":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2747":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2748":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2749":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2750":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2751":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2752":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2753":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2754":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2755":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2756":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2757":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2758":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:2759":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2760":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2761":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2762":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2763":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2764":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2765":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2766":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2767":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2768":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2769":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2770":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2771":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2772":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2773":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2774":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2775":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2776":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2777":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2778":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2779":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2780":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2781":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2782":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2783":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2784":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2785":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2786":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2787":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2788":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2789":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2790":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2791":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2792":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2793":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2794":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2795":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2796":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2797":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2798":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2799":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2800":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2801":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2802":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2803":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2804":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2805":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2806":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2807":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2808":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2809":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2810":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2811":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2812":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2813":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2814":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2815":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2816":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2817":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2818":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2819":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2820":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2821":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2822":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2823":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2824":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2825":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2826":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2827":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2828":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2829":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2830":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2831":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2832":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2833":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2834":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2835":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2836":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2837":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2838":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2839":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2840":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2841":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2842":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2843":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2844":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2845":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2846":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2847":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2848":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2849":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2850":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2851":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2852":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2853":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2854":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2855":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2856":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2857":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2858":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2859":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2860":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2861":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2862":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2863":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2864":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2865":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2866":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2867":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2868":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2869":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2870":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2871":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2872":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2873":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2874":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2875":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2876":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2877":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2878":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2879":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2880":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2881":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2882":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2883":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2884":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2885":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2886":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2887":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2888":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2889":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2890":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2891":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2892":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2893":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2894":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2895":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2896":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2897":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2898":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2899":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2900":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2901":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2902":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2903":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2904":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2905":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2906":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2907":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2908":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2909":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2910":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2911":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2912":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2913":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2914":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2915":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2916":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2917":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2918":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2919":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2920":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2921":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2922":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2923":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2924":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2925":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2926":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2927":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2928":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2929":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2930":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2931":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs ',
- "EPSG:2932":'+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs ',
- "EPSG:2933":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs ',
- "EPSG:2934":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs ',
- "EPSG:2935":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2936":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2937":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2938":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2939":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2940":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2941":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:2942":'+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs ',
- "EPSG:2943":'+proj=utm +zone=28 +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +units=m +no_defs ',
- "EPSG:2944":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2945":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2946":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2947":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2948":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2949":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2950":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2951":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2952":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2953":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2954":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2955":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2956":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2957":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2958":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2959":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2960":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2961":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2962":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2964":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:2965":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2966":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2967":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2968":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:2969":'+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs ',
- "EPSG:2970":'+proj=utm +zone=20 +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +units=m +no_defs ',
- "EPSG:2971":'+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ',
- "EPSG:2972":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2973":'+proj=utm +zone=20 +ellps=intl +towgs84=186,482,151,0,0,0,0 +units=m +no_defs ',
- "EPSG:2975":'+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2976":'+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs ',
- "EPSG:2977":'+proj=utm +zone=5 +south +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +units=m +no_defs ',
- "EPSG:2978":'+proj=utm +zone=7 +south +ellps=intl +towgs84=84,274,65,0,0,0,0 +units=m +no_defs ',
- "EPSG:2979":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ',
- "EPSG:2980":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ',
- "EPSG:2981":'+proj=utm +zone=58 +south +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +units=m +no_defs ',
- "EPSG:2982":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ',
- "EPSG:2983":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs ',
- "EPSG:2984":'+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2987":'+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs ',
- "EPSG:2988":'+proj=utm +zone=1 +south +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +units=m +no_defs ',
- "EPSG:2989":'+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2990":'+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs ',
- "EPSG:2991":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2992":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2993":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:2994":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:2995":'+proj=utm +zone=58 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ',
- "EPSG:2996":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ',
- "EPSG:2997":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs ',
- "EPSG:2998":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ',
- "EPSG:2999":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +units=m +no_defs ',
- "EPSG:3000":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs ',
- "EPSG:3001":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',
- "EPSG:3002":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs ',
- "EPSG:3003":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ',
- "EPSG:3004":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ',
- "EPSG:3005":'+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3006":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3007":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3008":'+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3009":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3010":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3011":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3012":'+proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3013":'+proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3014":'+proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3015":'+proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3016":'+proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3017":'+proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3018":'+proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3019":'+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',
- "EPSG:3020":'+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',
- "EPSG:3021":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',
- "EPSG:3022":'+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',
- "EPSG:3023":'+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',
- "EPSG:3024":'+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',
- "EPSG:3025":'+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3026":'+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3027":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3028":'+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3029":'+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3030":'+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3031":'+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3032":'+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3033":'+proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3034":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3035":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3036":'+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ',
- "EPSG:3037":'+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ',
- "EPSG:3038":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3039":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3040":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3041":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3042":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3043":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3044":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3045":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3046":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3047":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3048":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3049":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3050":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3051":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3054":'+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ',
- "EPSG:3055":'+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ',
- "EPSG:3056":'+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ',
- "EPSG:3057":'+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3058":'+proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +units=m +no_defs ',
- "EPSG:3059":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3060":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +units=m +no_defs ',
- "EPSG:3061":'+proj=utm +zone=28 +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +units=m +no_defs ',
- "EPSG:3062":'+proj=utm +zone=26 +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +units=m +no_defs ',
- "EPSG:3063":'+proj=utm +zone=26 +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +units=m +no_defs ',
- "EPSG:3064":'+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3065":'+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3066":'+proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:3067":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3068":'+proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:3069":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3070":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3071":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3072":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3073":'+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3074":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3075":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3076":'+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3077":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3078":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3079":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3080":'+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +datum=NAD27 +units=ft +no_defs ',
- "EPSG:3081":'+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3082":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3083":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3084":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3085":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3086":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3087":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3088":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3089":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3090":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3091":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3092":'+proj=utm +zone=51 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:3093":'+proj=utm +zone=52 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:3094":'+proj=utm +zone=53 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:3095":'+proj=utm +zone=54 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:3096":'+proj=utm +zone=55 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:3097":'+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3098":'+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3099":'+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3100":'+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3101":'+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3102":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3103":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3104":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3105":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3106":'+proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +units=m +no_defs ',
- "EPSG:3107":'+proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3108":'+proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3109":'+proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3110":'+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:3111":'+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3112":'+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3113":'+proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3114":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3115":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3116":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3117":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3118":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3119":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs ',
- "EPSG:3120":'+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3121":'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',
- "EPSG:3122":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',
- "EPSG:3123":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',
- "EPSG:3124":'+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',
- "EPSG:3125":'+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',
- "EPSG:3126":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3127":'+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3128":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3129":'+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3130":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3131":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3132":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3133":'+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3134":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3135":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3136":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3137":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3138":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3140":'+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs ',
- "EPSG:3141":'+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ',
- "EPSG:3142":'+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ',
- "EPSG:3143":'+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:3146":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:3147":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:3148":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ',
- "EPSG:3149":'+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ',
- "EPSG:3150":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:3151":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:3152":'+proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3153":'+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3154":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3155":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3156":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3157":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3158":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3159":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3160":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3161":'+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3162":'+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3163":'+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3164":'+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs ',
- "EPSG:3165":'+proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ',
- "EPSG:3166":'+proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ',
- "EPSG:3167":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs ',
- "EPSG:3168":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs ',
- "EPSG:3169":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3170":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3171":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3172":'+proj=utm +zone=59 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ',
- "EPSG:3174":'+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3175":'+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3176":'+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ',
- "EPSG:3177":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3178":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3179":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3180":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3181":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3182":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3183":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3184":'+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3185":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3186":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3187":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3188":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3189":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3190":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3191":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3192":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3193":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3194":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3195":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3196":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3197":'+proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3198":'+proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3199":'+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3200":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-241.54,-163.64,396.06,0,0,0,0 +units=m +no_defs ',
- "EPSG:3201":'+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3202":'+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3203":'+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',
- "EPSG:3204":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3205":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3206":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3207":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3208":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3209":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3210":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3211":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3212":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3213":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3214":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3215":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3216":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3217":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3218":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3219":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3220":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3221":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3222":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3223":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3224":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3225":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3226":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3227":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3228":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3229":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3230":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3231":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3232":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3233":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3234":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3235":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3236":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3237":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3238":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3239":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3240":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3241":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3242":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3243":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3244":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3245":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3246":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3247":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3248":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3249":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3250":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3251":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3252":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3253":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3254":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3255":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3256":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3257":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3258":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3259":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3260":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3261":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3262":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3263":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3264":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3265":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3266":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3267":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3268":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3269":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3270":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3271":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3272":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3273":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3274":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3275":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3276":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3277":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3278":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3279":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3280":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3281":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3282":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3283":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3284":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3285":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3286":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3287":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3288":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3289":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3290":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3291":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3292":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3293":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3294":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3296":'+proj=utm +zone=5 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',
- "EPSG:3297":'+proj=utm +zone=6 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',
- "EPSG:3298":'+proj=utm +zone=7 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',
- "EPSG:3299":'+proj=utm +zone=8 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',
- "EPSG:3300":'+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs ',
- "EPSG:3301":'+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3302":'+proj=utm +zone=7 +south +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +units=m +no_defs ',
- "EPSG:3303":'+proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs ',
- "EPSG:3304":'+proj=utm +zone=6 +south +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +units=m +no_defs ',
- "EPSG:3305":'+proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs ',
- "EPSG:3306":'+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs ',
- "EPSG:3307":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs ',
- "EPSG:3308":'+proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3309":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3310":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3311":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3312":'+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ',
- "EPSG:3313":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3314":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:3315":'+proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:3316":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3317":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3318":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3319":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3320":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3321":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3322":'+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3323":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3324":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3325":'+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3326":'+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3327":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3328":'+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3329":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3330":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3331":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3332":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3333":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3334":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3335":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3336":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ',
- "EPSG:3337":'+proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs ',
- "EPSG:3338":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3339":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',
- "EPSG:3340":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',
- "EPSG:3341":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',
- "EPSG:3342":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',
- "EPSG:3343":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3344":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3345":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3346":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3347":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3348":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3349":'+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3350":'+proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:3351":'+proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:3352":'+proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:3353":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ',
- "EPSG:3354":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ',
- "EPSG:3355":'+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs ',
- "EPSG:3356":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=m +no_defs ',
- "EPSG:3357":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +units=m +no_defs ',
- "EPSG:3358":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3359":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3360":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3361":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3362":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3363":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3364":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3365":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3366":'+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs ',
- "EPSG:3367":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3368":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3369":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3370":'+proj=utm +zone=59 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3371":'+proj=utm +zone=60 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3372":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3373":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3374":'+proj=utm +zone=29 +ellps=intl +units=m +no_defs ',
- "EPSG:3375":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3376":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +no_uoff +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3377":'+proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3378":'+proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3379":'+proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3380":'+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3381":'+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3382":'+proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3383":'+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3384":'+proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3385":'+proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:3386":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',
- "EPSG:3387":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',
- "EPSG:3388":'+proj=merc +lon_0=51 +lat_ts=42 +x_0=0 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:3389":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:3390":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:3391":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ',
- "EPSG:3392":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ',
- "EPSG:3393":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ',
- "EPSG:3394":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs ',
- "EPSG:3395":'+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3396":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3397":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3398":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3399":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:3400":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3401":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3402":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3403":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3404":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3405":'+proj=utm +zone=48 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs ',
- "EPSG:3406":'+proj=utm +zone=49 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs ',
- "EPSG:3407":'+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs ',
- "EPSG:3408":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ',
- "EPSG:3409":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ',
- "EPSG:3410":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ',
- "EPSG:3411":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ',
- "EPSG:3412":'+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ',
- "EPSG:3413":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3414":'+proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs ',
- "EPSG:3415":'+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:3416":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3417":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3418":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3419":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3420":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3421":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3422":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3423":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3424":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3425":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3426":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3427":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3428":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3429":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3430":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3431":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3432":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3433":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3434":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3435":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3436":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3437":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3438":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3439":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs ',
- "EPSG:3440":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs ',
- "EPSG:3441":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3442":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3443":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3444":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3445":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3446":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3447":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3448":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3449":'+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3450":'+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3451":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3452":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3453":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3454":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3455":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3456":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3457":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3458":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3459":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3460":'+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:3461":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ',
- "EPSG:3462":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ',
- "EPSG:3463":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3464":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3465":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3466":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3467":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3468":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3469":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3470":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3471":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3472":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3473":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3474":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3475":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3476":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3477":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3478":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3479":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3480":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3481":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3482":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3483":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3484":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3485":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3486":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3487":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3488":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3489":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3490":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3491":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3492":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3493":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3494":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3495":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3496":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3497":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3498":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3499":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3500":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3501":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3502":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3503":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3504":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3505":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3506":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3507":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3508":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3509":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3510":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3511":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3512":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3513":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3514":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3515":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3516":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3517":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3518":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3519":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3520":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3521":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3522":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3523":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3524":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3525":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3526":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3527":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3528":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3529":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3530":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3531":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3532":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3533":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3534":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3535":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3536":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3537":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3538":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3539":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3540":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3541":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3542":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3543":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3544":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3545":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3546":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3547":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3548":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3549":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3550":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3551":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3552":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3553":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3554":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3555":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3556":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3557":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3558":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3559":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3560":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3561":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3562":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3563":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3564":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3565":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3566":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3567":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3568":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3569":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3570":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3571":'+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3572":'+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3573":'+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3574":'+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3575":'+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3576":'+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3577":'+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3578":'+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3579":'+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3580":'+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3581":'+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3582":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3583":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3584":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3585":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3586":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3587":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3588":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3589":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3590":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3591":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3592":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3593":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3594":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3595":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3596":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3597":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3598":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3599":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3600":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3601":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3602":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3603":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3604":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3605":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3606":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3607":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3608":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3609":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3610":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3611":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3612":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3613":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3614":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3615":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3616":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3617":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3618":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3619":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3620":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3621":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3622":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3623":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3624":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3625":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3626":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3627":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3628":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3629":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3630":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3631":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3632":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3633":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3634":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3635":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3636":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3637":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3638":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3639":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3640":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3641":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3642":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3643":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3644":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3645":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3646":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3647":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3648":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3649":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3650":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3651":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3652":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3653":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3654":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3655":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3656":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3657":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3658":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3659":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3660":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3661":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3662":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3663":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3664":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3665":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3666":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3667":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3668":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3669":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3670":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3671":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3672":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3673":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3674":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3675":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3676":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3677":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3678":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3679":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3680":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3681":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3682":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:3683":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3684":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3685":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3686":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3687":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3688":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3689":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3690":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3691":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3692":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3693":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3694":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3695":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3696":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3697":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3698":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3699":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3700":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3701":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3702":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3703":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3704":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3705":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3706":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3707":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3708":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3709":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3710":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3711":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3712":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3713":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3714":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3715":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3716":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3717":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3718":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3719":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3720":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3721":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3722":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3723":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3724":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3725":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3726":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3727":'+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs ',
- "EPSG:3728":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3729":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3730":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3731":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3732":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3733":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3734":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3735":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3736":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3737":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3738":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3739":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3740":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3741":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3742":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3743":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3744":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3745":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3746":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3747":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3748":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3749":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3750":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3751":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3752":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3753":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3754":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3755":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3756":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3757":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3758":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3759":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3760":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3761":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3762":'+proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3763":'+proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3764":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3765":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3766":'+proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3767":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3768":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3769":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +units=m +no_defs ',
- "EPSG:3770":'+proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3771":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3772":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3773":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3774":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3775":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3776":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3777":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3778":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3779":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3780":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3781":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3782":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3783":'+proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3784":'+proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs ',
- "EPSG:3785":'+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs',
- "EPSG:3786":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs ',
- "EPSG:3787":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:3788":'+proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3789":'+proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3790":'+proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3791":'+proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3793":'+proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3794":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3795":'+proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3796":'+proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3797":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3798":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3799":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3800":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:3801":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3802":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3812":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3814":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3815":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3816":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3825":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3826":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3827":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs ',
- "EPSG:3828":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs ',
- "EPSG:3829":'+proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs ',
- "EPSG:3832":'+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3833":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3834":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:3835":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:3836":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:3837":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3838":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3839":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3840":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3841":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:3842":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:3843":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:3844":'+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:3845":'+proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3846":'+proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3847":'+proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3848":'+proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3849":'+proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3850":'+proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3851":'+proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3852":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3854":'+proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- //"EPSG:3857":'+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs',
- "EPSG:3873":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3874":'+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3875":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3876":'+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3877":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3878":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=24500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3879":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3880":'+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3881":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3882":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3883":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3884":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3885":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3890":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3891":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3892":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3893":'+proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:3907":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',
- "EPSG:3908":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',
- "EPSG:3909":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',
- "EPSG:3910":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',
- "EPSG:3911":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',
- "EPSG:3912":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',
- "EPSG:3920":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs ',
- "EPSG:3942":'+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3943":'+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3944":'+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3945":'+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3946":'+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3947":'+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3948":'+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3949":'+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3950":'+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3968":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3969":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3970":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3973":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3974":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3975":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3976":'+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3978":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3979":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:3985":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:3986":'+proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:3987":'+proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:3988":'+proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:3989":'+proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:3991":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3992":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:3994":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3995":'+proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3996":'+proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:3997":'+proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:4026":'+proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4037":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ',
- "EPSG:4038":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ',
- "EPSG:4048":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4049":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4050":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4051":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4056":'+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4057":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4058":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4059":'+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4060":'+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4061":'+proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4062":'+proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4063":'+proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4071":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +units=m +no_defs ',
- "EPSG:4082":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4083":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4087":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:4088":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs ',
- "EPSG:4093":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99998 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4094":'+proj=tmerc +lat_0=0 +lon_0=10 +k=0.99998 +x_0=400000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4095":'+proj=tmerc +lat_0=0 +lon_0=11.75 +k=0.99998 +x_0=600000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4096":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=800000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4217":'+proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4399":'+proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4400":'+proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4401":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4402":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4403":'+proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4404":'+proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4405":'+proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4406":'+proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4407":'+proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4408":'+proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4409":'+proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4410":'+proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4411":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4412":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4413":'+proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4414":'+proj=tmerc +lat_0=13.5 +lon_0=144.75 +k=1 +x_0=100000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4415":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=-9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:4417":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:4418":'+proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4419":'+proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4420":'+proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4421":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4422":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4423":'+proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4424":'+proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4425":'+proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4426":'+proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4427":'+proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4428":'+proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4429":'+proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4430":'+proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4431":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4432":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4433":'+proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4434":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:4437":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4438":'+proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4439":'+proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4455":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4456":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:4457":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:4462":'+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=-27 +lon_0=132 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:4467":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4471":'+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4474":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ',
- "EPSG:4484":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4485":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4486":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4487":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4488":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4489":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4491":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4492":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4493":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4494":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4495":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4496":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4497":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4498":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4499":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4500":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4501":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4502":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4503":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4504":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4505":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4506":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4507":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4508":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4509":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4510":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4511":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4512":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4513":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4514":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4515":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4516":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4517":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4518":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4519":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4520":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4521":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4522":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4523":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4524":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4525":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4526":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4527":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4528":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4529":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4530":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4531":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4532":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4533":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4534":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4535":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4536":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4537":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4538":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4539":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4540":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4541":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4542":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4543":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4544":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4545":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4546":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4547":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4548":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4549":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4550":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4551":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4552":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4553":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4554":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:4559":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4568":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4569":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4570":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4571":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4572":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4573":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4574":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4575":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4576":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4577":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4578":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4579":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4580":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4581":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4582":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4583":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4584":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4585":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4586":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4587":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4588":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4589":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4647":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4652":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4653":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4654":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4655":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4656":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4766":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4767":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4768":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4769":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4770":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4771":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4772":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4773":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4774":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4775":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4776":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4777":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4778":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4779":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4780":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4781":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4782":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4783":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4784":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4785":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4786":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4787":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4788":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4789":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4790":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4791":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4792":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4793":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4794":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4795":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4796":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4797":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4798":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4799":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4800":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4812":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4822":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',
- "EPSG:4826":'+proj=lcc +lat_1=15 +lat_2=16.66666666666667 +lat_0=15.83333333333333 +lon_0=-24 +x_0=161587.83 +y_0=128511.202 +datum=WGS84 +units=m +no_defs ',
- "EPSG:4839":'+proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4855":'+proj=tmerc +lat_0=0 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4856":'+proj=tmerc +lat_0=0 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4857":'+proj=tmerc +lat_0=0 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4858":'+proj=tmerc +lat_0=0 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4859":'+proj=tmerc +lat_0=0 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4860":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4861":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4862":'+proj=tmerc +lat_0=0 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4863":'+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4864":'+proj=tmerc +lat_0=0 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4865":'+proj=tmerc +lat_0=0 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4866":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4867":'+proj=tmerc +lat_0=0 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4868":'+proj=tmerc +lat_0=0 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4869":'+proj=tmerc +lat_0=0 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4870":'+proj=tmerc +lat_0=0 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4871":'+proj=tmerc +lat_0=0 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4872":'+proj=tmerc +lat_0=0 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4873":'+proj=tmerc +lat_0=0 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4874":'+proj=tmerc +lat_0=0 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4875":'+proj=tmerc +lat_0=0 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4876":'+proj=tmerc +lat_0=0 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4877":'+proj=tmerc +lat_0=0 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4878":'+proj=tmerc +lat_0=0 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4879":'+proj=tmerc +lat_0=0 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:4880":'+proj=tmerc +lat_0=0 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5014":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5015":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5016":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5018":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +units=m +no_defs ',
- "EPSG:5041":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5042":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5048":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5069":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:5070":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5071":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5072":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5105":'+proj=tmerc +lat_0=58 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5106":'+proj=tmerc +lat_0=58 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5107":'+proj=tmerc +lat_0=58 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5108":'+proj=tmerc +lat_0=58 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5109":'+proj=tmerc +lat_0=58 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5110":'+proj=tmerc +lat_0=58 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5111":'+proj=tmerc +lat_0=58 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5112":'+proj=tmerc +lat_0=58 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5113":'+proj=tmerc +lat_0=58 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5114":'+proj=tmerc +lat_0=58 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5115":'+proj=tmerc +lat_0=58 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5116":'+proj=tmerc +lat_0=58 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5117":'+proj=tmerc +lat_0=58 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5118":'+proj=tmerc +lat_0=58 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5119":'+proj=tmerc +lat_0=58 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5120":'+proj=tmerc +lat_0=58 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5121":'+proj=tmerc +lat_0=58 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5122":'+proj=tmerc +lat_0=58 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5123":'+proj=tmerc +lat_0=58 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5124":'+proj=tmerc +lat_0=58 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5125":'+proj=tmerc +lat_0=58 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5126":'+proj=tmerc +lat_0=58 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5127":'+proj=tmerc +lat_0=58 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5128":'+proj=tmerc +lat_0=58 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5129":'+proj=tmerc +lat_0=58 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5130":'+proj=tmerc +lat_0=58 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5167":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5168":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5169":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5170":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5171":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5172":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5173":'+proj=tmerc +lat_0=38 +lon_0=125.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5174":'+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5175":'+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5176":'+proj=tmerc +lat_0=38 +lon_0=129.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5177":'+proj=tmerc +lat_0=38 +lon_0=131.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5178":'+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=bessel +units=m +no_defs ',
- "EPSG:5179":'+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5180":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5181":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5182":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5183":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5184":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5185":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5186":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5187":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5188":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5221":'+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:5223":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5234":'+proj=tmerc +lat_0=7.000480277777778 +lon_0=80.77171111111112 +k=0.9999238418 +x_0=200000 +y_0=200000 +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +units=m +no_defs ',
- "EPSG:5235":'+proj=tmerc +lat_0=7.000471527777778 +lon_0=80.77171308333334 +k=0.9999238418 +x_0=500000 +y_0=500000 +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +units=m +no_defs ',
- "EPSG:5243":'+proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5247":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +no_uoff +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:5253":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5254":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5255":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5256":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5257":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5258":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5259":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5266":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5269":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5270":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5271":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5272":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5273":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5274":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5275":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5292":'+proj=tmerc +lat_0=0 +lon_0=90.73333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5293":'+proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5294":'+proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5295":'+proj=tmerc +lat_0=0 +lon_0=90.03333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5296":'+proj=tmerc +lat_0=0 +lon_0=90.15000000000001 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5297":'+proj=tmerc +lat_0=0 +lon_0=91.13333333333334 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5298":'+proj=tmerc +lat_0=0 +lon_0=91.23333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5299":'+proj=tmerc +lat_0=0 +lon_0=89.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5300":'+proj=tmerc +lat_0=0 +lon_0=91.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5301":'+proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5302":'+proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5303":'+proj=tmerc +lat_0=0 +lon_0=89.06666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5304":'+proj=tmerc +lat_0=0 +lon_0=90.26666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5305":'+proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5306":'+proj=tmerc +lat_0=0 +lon_0=91.75 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5307":'+proj=tmerc +lat_0=0 +lon_0=90.5 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5308":'+proj=tmerc +lat_0=0 +lon_0=90.16666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5309":'+proj=tmerc +lat_0=0 +lon_0=90.11666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5310":'+proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5311":'+proj=tmerc +lat_0=0 +lon_0=90.86666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5316":'+proj=tmerc +lat_0=0 +lon_0=-7 +k=0.999997 +x_0=200000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5320":'+proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5321":'+proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5325":'+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=1700000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5329":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs ',
- "EPSG:5330":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs ',
- "EPSG:5331":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs ',
- "EPSG:5337":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',
- "EPSG:5343":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5344":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5345":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5346":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5347":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5348":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5349":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5355":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5356":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5357":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5361":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5362":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5367":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5382":'+proj=utm +zone=21 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5383":'+proj=utm +zone=22 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5387":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5388":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5389":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5396":'+proj=utm +zone=26 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5456":'+proj=lcc +lat_1=10.46666666666667 +lat_0=10.46666666666667 +lon_0=-84.33333333333333 +k_0=0.99995696 +x_0=500000 +y_0=271820.522 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:5457":'+proj=lcc +lat_1=9 +lat_0=9 +lon_0=-83.66666666666667 +k_0=0.99995696 +x_0=500000 +y_0=327987.436 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:5458":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs ',
- "EPSG:5459":'+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:5460":'+proj=lcc +lat_1=13.78333333333333 +lat_0=13.78333333333333 +lon_0=-89 +k_0=0.99996704 +x_0=500000 +y_0=295809.184 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:5461":'+proj=lcc +lat_1=13.86666666666667 +lat_0=13.86666666666667 +lon_0=-85.5 +k_0=0.99990314 +x_0=500000 +y_0=359891.816 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:5462":'+proj=lcc +lat_1=11.73333333333333 +lat_0=11.73333333333333 +lon_0=-85.5 +k_0=0.9999222800000001 +x_0=500000 +y_0=288876.327 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:5463":'+proj=utm +zone=17 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:5466":'+proj=tmerc +lat_0=17.06124194444444 +lon_0=-88.6318575 +k=1 +x_0=66220.02833082761 +y_0=135779.5099885299 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs ',
- "EPSG:5469":'+proj=lcc +lat_1=8.416666666666666 +lat_0=8.416666666666666 +lon_0=-80 +k_0=0.99989909 +x_0=500000 +y_0=294865.303 +ellps=clrk66 +units=m +no_defs ',
- "EPSG:5472":'+proj=poly +lat_0=8.25 +lon_0=-81 +x_0=914391.7962 +y_0=999404.7217154861 +ellps=clrk66 +to_meter=0.9143917962 +no_defs ',
- "EPSG:5479":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=163 +x_0=7000000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5480":'+proj=lcc +lat_1=-73.66666666666667 +lat_2=-75.33333333333333 +lat_0=-74.5 +lon_0=165 +x_0=5000000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5481":'+proj=lcc +lat_1=-70.66666666666667 +lat_2=-72.33333333333333 +lat_0=-71.5 +lon_0=166 +x_0=3000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5482":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=180 +k=0.994 +x_0=5000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5490":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5513":'+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ',
- "EPSG:5514":'+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ',
- "EPSG:5518":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=175,-38,113,0,0,0,0 +units=m +no_defs ',
- "EPSG:5519":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:5520":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:5523":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=1500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5530":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',
- "EPSG:5531":'+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',
- "EPSG:5532":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:5533":'+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',
- "EPSG:5534":'+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',
- "EPSG:5535":'+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',
- "EPSG:5536":'+proj=utm +zone=21 +south +ellps=intl +units=m +no_defs ',
- "EPSG:5537":'+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs ',
- "EPSG:5538":'+proj=utm +zone=23 +south +ellps=intl +units=m +no_defs ',
- "EPSG:5539":'+proj=utm +zone=24 +south +ellps=intl +units=m +no_defs ',
- "EPSG:5550":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5551":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5552":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5559":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',
- "EPSG:5562":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5563":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5564":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5565":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5566":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5567":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5568":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5569":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5570":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5571":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5572":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5573":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5574":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5575":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5576":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5577":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5578":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5579":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5580":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5581":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5582":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5583":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',
- "EPSG:5588":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=304800 +y_0=304800 +datum=NAD27 +units=ft +no_defs ',
- "EPSG:5589":'+proj=tmerc +lat_0=17.06124194444444 +lon_0=-88.6318575 +k=1 +x_0=66220.02833082761 +y_0=135779.5099885299 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs ',
- "EPSG:5596":'+proj=tmerc +lat_0=0 +lon_0=11.33333333333333 +k=1 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5623":'+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:5624":'+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:5625":'+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:5627":'+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:5629":'+proj=utm +zone=38 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ',
- "EPSG:5631":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:5632":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5633":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5634":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5635":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5636":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5637":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5638":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5639":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5641":'+proj=merc +lon_0=-43 +lat_ts=-2 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5643":'+proj=lcc +lat_1=52.66666666666666 +lat_2=54.33333333333334 +lat_0=48 +lon_0=10 +x_0=815000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:5644":'+proj=utm +zone=39 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5646":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:5649":'+proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5650":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5651":'+proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5652":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5653":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5654":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:5655":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:5659":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=500053 +y_0=-3999820 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ',
- "EPSG:5663":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:5664":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:5665":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:5666":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:5667":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:5668":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:5669":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:5670":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:5671":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:5672":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',
- "EPSG:5673":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:5674":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:5675":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',
- "EPSG:5676":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:5677":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:5678":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:5679":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:5680":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:5682":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:5683":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:5684":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:5685":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:5700":'+proj=utm +zone=1 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5825":'+proj=tmerc +lat_0=-35.31773627777778 +lon_0=149.0092948305555 +k=1.000086 +x_0=200000 +y_0=600000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:5836":'+proj=utm +zone=37 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5837":'+proj=utm +zone=40 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5839":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5842":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5844":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5858":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',
- "EPSG:5875":'+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',
- "EPSG:5876":'+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',
- "EPSG:5877":'+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',
- "EPSG:5879":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +units=m +no_defs ',
- "EPSG:5880":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:5887":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs ',
- "EPSG:5890":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=90 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ',
- "EPSG:5921":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5922":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5923":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5924":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5925":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5926":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5927":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5928":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5929":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5930":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5931":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5932":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5933":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5934":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5935":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5936":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-150 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5937":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-100 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5938":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-33 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5939":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=18 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:5940":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=105 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6050":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-30 +x_0=25500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6051":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-52 +x_0=18500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6052":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-12 +x_0=20500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6053":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6054":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-39 +x_0=31500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6055":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-10 +x_0=33500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6056":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-64 +x_0=20500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6057":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-39 +x_0=22500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6058":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-14 +x_0=24500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6059":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-62 +x_0=41500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6060":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-42 +x_0=43500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6061":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-22 +x_0=45500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6062":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-56 +x_0=26500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6063":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-38 +x_0=28500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6064":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-20 +x_0=30500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6065":'+proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-51 +x_0=11500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6066":'+proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-34 +x_0=13500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6067":'+proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-52 +x_0=20500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6068":'+proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-37 +x_0=22500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6069":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=16 +x_0=22500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6070":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=21 +x_0=11500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6071":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=10 +x_0=26500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6072":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=34 +x_0=28500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6073":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=14 +x_0=11500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6074":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=34 +x_0=13500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6075":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=53 +x_0=24500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6076":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=93 +x_0=26500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6077":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=52 +x_0=13500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6078":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=83 +x_0=15500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6079":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=114 +x_0=17500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6080":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=145 +x_0=19500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6081":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=58 +x_0=30500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6082":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=82 +x_0=32500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6083":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=106 +x_0=34500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6084":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=130 +x_0=36500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6085":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=154 +x_0=38500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6086":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=179 +x_0=40500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6087":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=54 +x_0=15500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6088":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=74 +x_0=17500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6089":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=95 +x_0=19500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6090":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=116 +x_0=21500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6091":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=137 +x_0=23500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6092":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=158 +x_0=25500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6093":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=179 +x_0=27500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6094":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-163 +x_0=29500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6095":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-147 +x_0=31500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6096":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-165 +x_0=14500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6097":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-147 +x_0=16500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6098":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-90 +x_0=23500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6099":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-115 +x_0=14500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6100":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-75 +x_0=16500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6101":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-129 +x_0=25500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6102":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-99 +x_0=27500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6103":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6104":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-129 +x_0=14500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6105":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-104 +x_0=16500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6106":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-79 +x_0=18500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6107":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-131 +x_0=33500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6108":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-111 +x_0=35500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6109":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-91 +x_0=37500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6110":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-71 +x_0=39500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6111":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-132 +x_0=18500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6112":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-113 +x_0=20500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6113":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-94 +x_0=22500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6114":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-75 +x_0=24500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6115":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=30 +x_0=27500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6116":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=90 +x_0=29500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6117":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=150 +x_0=31500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6118":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-150 +x_0=21500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6119":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=133 +x_0=28500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6120":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=166 +x_0=10500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6121":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-154 +x_0=12500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6122":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=176 +x_0=21500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6123":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-153 +x_0=23500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6124":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-155 +x_0=12500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:6125":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-5 +x_0=47500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:6128":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=ft +no_defs ',
- "EPSG:6129":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +units=ft +no_defs ',
- "EPSG:6141":'+proj=lcc +lat_1=19.33333333333333 +lat_2=19.7 +lat_0=19.33333333333333 +lon_0=80.56666666666666 +x_0=899160 +y_0=579120 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',
- "EPSG:20004":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20005":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20006":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20007":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20008":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20009":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20010":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20011":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20012":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20013":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20014":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20015":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20016":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20017":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20018":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20019":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20020":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20021":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20022":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20023":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20024":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20025":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20026":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20027":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20028":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20029":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20030":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20031":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20032":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20064":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20065":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20066":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20067":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20068":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20069":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20070":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20071":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20072":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20073":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20074":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20075":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20076":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20077":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20078":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20079":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20080":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20081":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20082":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20083":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20084":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20085":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20086":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20087":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20088":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20089":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20090":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20091":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20092":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',
- "EPSG:20135":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',
- "EPSG:20136":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',
- "EPSG:20137":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',
- "EPSG:20138":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',
- "EPSG:20248":'+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20249":'+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20250":'+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20251":'+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20252":'+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20253":'+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20254":'+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20255":'+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20256":'+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20257":'+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20258":'+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',
- "EPSG:20348":'+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20349":'+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20350":'+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20351":'+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20352":'+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20353":'+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20354":'+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20355":'+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20356":'+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20357":'+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20358":'+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',
- "EPSG:20436":'+proj=utm +zone=36 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',
- "EPSG:20437":'+proj=utm +zone=37 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',
- "EPSG:20438":'+proj=utm +zone=38 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',
- "EPSG:20439":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',
- "EPSG:20440":'+proj=utm +zone=40 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',
- "EPSG:20499":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',
- "EPSG:20538":'+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ',
- "EPSG:20539":'+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ',
- "EPSG:20790":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs ',
- "EPSG:20791":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs ',
- "EPSG:20822":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',
- "EPSG:20823":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',
- "EPSG:20824":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',
- "EPSG:20934":'+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ',
- "EPSG:20935":'+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ',
- "EPSG:20936":'+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ',
- "EPSG:21035":'+proj=utm +zone=35 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',
- "EPSG:21036":'+proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',
- "EPSG:21037":'+proj=utm +zone=37 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',
- "EPSG:21095":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',
- "EPSG:21096":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',
- "EPSG:21097":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',
- "EPSG:21100":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs ',
- "EPSG:21148":'+proj=utm +zone=48 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',
- "EPSG:21149":'+proj=utm +zone=49 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',
- "EPSG:21150":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',
- "EPSG:21291":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs ',
- "EPSG:21292":'+proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs ',
- "EPSG:21413":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21414":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21415":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21416":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21417":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21418":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21419":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21420":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21421":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21422":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21423":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21453":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21454":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21455":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21456":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21457":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21458":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21459":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21460":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21461":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21462":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21463":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21473":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21474":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21475":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21476":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21477":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21478":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21479":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21480":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21481":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21482":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21483":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21500":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs ',
- "EPSG:21780":'+proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +units=m +no_defs ',
- "EPSG:21781":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21782":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:21817":'+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:21818":'+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:21891":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:21892":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:21893":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:21894":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:21896":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:21897":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:21898":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:21899":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',
- "EPSG:22032":'+proj=utm +zone=32 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',
- "EPSG:22033":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',
- "EPSG:22091":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',
- "EPSG:22092":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',
- "EPSG:22171":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22172":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22173":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22174":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22175":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22176":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22177":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22181":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22182":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22183":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22184":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22185":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22186":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22187":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:22191":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',
- "EPSG:22192":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',
- "EPSG:22193":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',
- "EPSG:22194":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',
- "EPSG:22195":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',
- "EPSG:22196":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',
- "EPSG:22197":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',
- "EPSG:22234":'+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22235":'+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22236":'+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22275":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22277":'+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22279":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22281":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22283":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22285":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22287":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22289":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22291":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22293":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',
- "EPSG:22332":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',
- "EPSG:22391":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',
- "EPSG:22392":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',
- "EPSG:22521":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',
- "EPSG:22522":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',
- "EPSG:22523":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',
- "EPSG:22524":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',
- "EPSG:22525":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',
- "EPSG:22700":'+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ',
- "EPSG:22770":'+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ',
- "EPSG:22780":'+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ',
- "EPSG:22832":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs ',
- "EPSG:22991":'+proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',
- "EPSG:22992":'+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',
- "EPSG:22993":'+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',
- "EPSG:22994":'+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',
- "EPSG:23028":'+proj=utm +zone=28 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23029":'+proj=utm +zone=29 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23030":'+proj=utm +zone=30 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23031":'+proj=utm +zone=31 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23032":'+proj=utm +zone=32 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23033":'+proj=utm +zone=33 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23034":'+proj=utm +zone=34 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23035":'+proj=utm +zone=35 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23036":'+proj=utm +zone=36 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23037":'+proj=utm +zone=37 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23038":'+proj=utm +zone=38 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23090":'+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23095":'+proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',
- "EPSG:23239":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ',
- "EPSG:23240":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ',
- "EPSG:23433":'+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs ',
- "EPSG:23700":'+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +units=m +no_defs ',
- "EPSG:23830":'+proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23831":'+proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23832":'+proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23833":'+proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23834":'+proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23835":'+proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23836":'+proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23837":'+proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23838":'+proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23839":'+proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23840":'+proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23841":'+proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23842":'+proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23843":'+proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23844":'+proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23845":'+proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23846":'+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23847":'+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23848":'+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23849":'+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23850":'+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23851":'+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23852":'+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23853":'+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23866":'+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23867":'+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23868":'+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23869":'+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23870":'+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23871":'+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23872":'+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23877":'+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23878":'+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23879":'+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23880":'+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23881":'+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23882":'+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23883":'+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23884":'+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:23886":'+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23887":'+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23888":'+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23889":'+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23890":'+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23891":'+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23892":'+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23893":'+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23894":'+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:23946":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ',
- "EPSG:23947":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ',
- "EPSG:23948":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ',
- "EPSG:24047":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ',
- "EPSG:24048":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ',
- "EPSG:24100":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs ',
- "EPSG:24200":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +units=m +no_defs ',
- "EPSG:24305":'+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ',
- "EPSG:24306":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ',
- "EPSG:24311":'+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',
- "EPSG:24312":'+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',
- "EPSG:24313":'+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',
- "EPSG:24342":'+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24343":'+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24344":'+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24345":'+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24346":'+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24347":'+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24370":'+proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',
- "EPSG:24371":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',
- "EPSG:24372":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',
- "EPSG:24373":'+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',
- "EPSG:24374":'+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',
- "EPSG:24375":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ',
- "EPSG:24376":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',
- "EPSG:24377":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',
- "EPSG:24378":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24379":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24380":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24381":'+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24382":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',
- "EPSG:24383":'+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',
- "EPSG:24500":'+proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:24547":'+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:24548":'+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ',
- "EPSG:24571":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs ',
- "EPSG:24600":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs ',
- "EPSG:24718":'+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ',
- "EPSG:24719":'+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ',
- "EPSG:24720":'+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ',
- "EPSG:24817":'+proj=utm +zone=17 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24818":'+proj=utm +zone=18 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24819":'+proj=utm +zone=19 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24820":'+proj=utm +zone=20 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24821":'+proj=utm +zone=21 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24877":'+proj=utm +zone=17 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24878":'+proj=utm +zone=18 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24879":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24880":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24881":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24882":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24891":'+proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24892":'+proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:24893":'+proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',
- "EPSG:25000":'+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs ',
- "EPSG:25231":'+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs ',
- "EPSG:25391":'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',
- "EPSG:25392":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',
- "EPSG:25393":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',
- "EPSG:25394":'+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',
- "EPSG:25395":'+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',
- "EPSG:25700":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs ',
- "EPSG:25828":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25829":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25830":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25831":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25832":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25833":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25834":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25835":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25836":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25837":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25838":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25884":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:25932":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +units=m +no_defs ',
- "EPSG:26191":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',
- "EPSG:26192":'+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',
- "EPSG:26193":'+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',
- "EPSG:26194":'+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',
- "EPSG:26195":'+proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',
- "EPSG:26237":'+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs ',
- "EPSG:26331":'+proj=utm +zone=31 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',
- "EPSG:26332":'+proj=utm +zone=32 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',
- "EPSG:26391":'+proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',
- "EPSG:26392":'+proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',
- "EPSG:26393":'+proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',
- "EPSG:26432":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs ',
- "EPSG:26591":'+proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs ',
- "EPSG:26592":'+proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs ',
- "EPSG:26632":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ',
- "EPSG:26692":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ',
- "EPSG:26701":'+proj=utm +zone=1 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26702":'+proj=utm +zone=2 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26703":'+proj=utm +zone=3 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26704":'+proj=utm +zone=4 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26705":'+proj=utm +zone=5 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26706":'+proj=utm +zone=6 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26707":'+proj=utm +zone=7 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26708":'+proj=utm +zone=8 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26709":'+proj=utm +zone=9 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26710":'+proj=utm +zone=10 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26711":'+proj=utm +zone=11 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26712":'+proj=utm +zone=12 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26713":'+proj=utm +zone=13 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26714":'+proj=utm +zone=14 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26715":'+proj=utm +zone=15 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26716":'+proj=utm +zone=16 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26717":'+proj=utm +zone=17 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26718":'+proj=utm +zone=18 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26719":'+proj=utm +zone=19 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26720":'+proj=utm +zone=20 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26721":'+proj=utm +zone=21 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26722":'+proj=utm +zone=22 +datum=NAD27 +units=m +no_defs ',
- "EPSG:26729":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26730":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26731":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +no_uoff +gamma=323.1301023611111 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26732":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26733":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26734":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26735":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26736":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26737":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26738":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26739":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26740":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26741":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26742":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26743":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26744":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26745":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26746":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26747":'+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26748":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26749":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26750":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26751":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26752":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26753":'+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26754":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26755":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26756":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26757":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26758":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26759":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26760":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26766":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26767":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26768":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26769":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26770":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26771":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26772":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26773":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26774":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26775":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26776":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26777":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26778":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26779":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26780":'+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26781":'+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26782":'+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26783":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26784":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26785":'+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26786":'+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26787":'+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26791":'+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26792":'+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26793":'+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26794":'+proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26795":'+proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26796":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26797":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26798":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26799":'+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:26801":'+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',
- "EPSG:26802":'+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',
- "EPSG:26803":'+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',
- "EPSG:26811":'+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',
- "EPSG:26812":'+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',
- "EPSG:26813":'+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',
- "EPSG:26814":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26815":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26819":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26820":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26821":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26822":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26823":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26824":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26825":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26826":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26830":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26831":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26832":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26833":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26834":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26835":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26836":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26837":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26841":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26842":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26843":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26844":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26845":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26846":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26847":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26848":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26849":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26850":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26851":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26852":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26853":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26854":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26855":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26856":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26857":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26858":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26859":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26860":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26861":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26862":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26863":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26864":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26865":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26866":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26867":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26868":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26869":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26870":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:26891":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26892":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26893":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26894":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26895":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26896":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26897":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26898":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26899":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26901":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26902":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26903":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26904":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26905":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26906":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26907":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26908":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26909":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26910":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26911":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26912":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26913":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26914":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26915":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26916":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26917":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26918":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26919":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26920":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26921":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26922":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26923":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26929":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26930":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26931":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26932":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26933":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26934":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26935":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26936":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26937":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26938":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26939":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26940":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26941":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26942":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26943":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26944":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26945":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26946":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26948":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26949":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26950":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26951":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26952":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26953":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26954":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26955":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26956":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26957":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26958":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26959":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26960":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26961":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26962":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26963":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26964":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26965":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26966":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26967":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26968":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26969":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26970":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26971":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26972":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26973":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26974":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26975":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26976":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26977":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26978":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26979":'+proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26980":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26981":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26982":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26983":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26984":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26985":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26986":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26987":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26988":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26989":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26990":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26991":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26992":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26993":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26994":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26995":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26996":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26997":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:26998":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:27037":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:27038":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:27039":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:27040":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',
- "EPSG:27120":'+proj=utm +zone=20 +ellps=intl +towgs84=-10,375,165,0,0,0,0 +units=m +no_defs ',
- "EPSG:27200":'+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27205":'+proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27206":'+proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27207":'+proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27208":'+proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27209":'+proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27210":'+proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27211":'+proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27212":'+proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27213":'+proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27214":'+proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27215":'+proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27216":'+proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27217":'+proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27218":'+proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27219":'+proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27220":'+proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27221":'+proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27222":'+proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27223":'+proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27224":'+proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27225":'+proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27226":'+proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27227":'+proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27228":'+proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27229":'+proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27230":'+proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27231":'+proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27232":'+proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27258":'+proj=utm +zone=58 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27259":'+proj=utm +zone=59 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27260":'+proj=utm +zone=60 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',
- "EPSG:27291":'+proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs ',
- "EPSG:27292":'+proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs ',
- "EPSG:27391":'+proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',
- "EPSG:27392":'+proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',
- "EPSG:27393":'+proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',
- "EPSG:27394":'+proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',
- "EPSG:27395":'+proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',
- "EPSG:27396":'+proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',
- "EPSG:27397":'+proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',
- "EPSG:27398":'+proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',
- "EPSG:27429":'+proj=utm +zone=29 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ',
- "EPSG:27492":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ',
- "EPSG:27493":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ',
- "EPSG:27500":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=5.399999999999999 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +units=m +no_defs ',
- "EPSG:27561":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27562":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27563":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27564":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27571":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27572":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27573":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27574":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27581":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27582":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27583":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27584":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27591":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27592":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27593":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27594":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:27700":'+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs ',
- "EPSG:28191":'+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ',
- "EPSG:28192":'+proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ',
- "EPSG:28193":'+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ',
- "EPSG:28232":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +units=m +no_defs ',
- "EPSG:28348":'+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28349":'+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28350":'+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28351":'+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28352":'+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28353":'+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28354":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28355":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28356":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28357":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28358":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:28402":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28403":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28404":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28405":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28406":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28407":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28408":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28409":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28410":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28411":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28412":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28413":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28414":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28415":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28416":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28417":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28418":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28419":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28420":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28421":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28422":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28423":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28424":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28425":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28426":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28427":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28428":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28429":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28430":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28431":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28432":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28462":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28463":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28464":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28465":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28466":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28467":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28468":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28469":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28470":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28471":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28472":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28473":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28474":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28475":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28476":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28477":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28478":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28479":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28480":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28481":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28482":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28483":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28484":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28485":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28486":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28487":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28488":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28489":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28490":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28491":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28492":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',
- "EPSG:28600":'+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +units=m +no_defs ',
- "EPSG:28991":'+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs ',
- "EPSG:28992":'+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs ',
- "EPSG:29100":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29101":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29118":'+proj=utm +zone=18 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29119":'+proj=utm +zone=19 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29120":'+proj=utm +zone=20 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29121":'+proj=utm +zone=21 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29122":'+proj=utm +zone=22 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29168":'+proj=utm +zone=18 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29169":'+proj=utm +zone=19 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29170":'+proj=utm +zone=20 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29171":'+proj=utm +zone=21 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29172":'+proj=utm +zone=22 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29177":'+proj=utm +zone=17 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29178":'+proj=utm +zone=18 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29179":'+proj=utm +zone=19 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29180":'+proj=utm +zone=20 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29181":'+proj=utm +zone=21 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29182":'+proj=utm +zone=22 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29183":'+proj=utm +zone=23 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29184":'+proj=utm +zone=24 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29185":'+proj=utm +zone=25 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29187":'+proj=utm +zone=17 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29188":'+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29189":'+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29190":'+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29191":'+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29192":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29193":'+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29194":'+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29195":'+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',
- "EPSG:29220":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ',
- "EPSG:29221":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ',
- "EPSG:29333":'+proj=utm +zone=33 +south +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +units=m +no_defs ',
- "EPSG:29371":'+proj=tmerc +lat_0=-22 +lon_0=11 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',
- "EPSG:29373":'+proj=tmerc +lat_0=-22 +lon_0=13 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',
- "EPSG:29375":'+proj=tmerc +lat_0=-22 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',
- "EPSG:29377":'+proj=tmerc +lat_0=-22 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',
- "EPSG:29379":'+proj=tmerc +lat_0=-22 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',
- "EPSG:29381":'+proj=tmerc +lat_0=-22 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',
- "EPSG:29383":'+proj=tmerc +lat_0=-22 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',
- "EPSG:29385":'+proj=tmerc +lat_0=-22 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',
- "EPSG:29635":'+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs ',
- "EPSG:29636":'+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs ',
- "EPSG:29700":'+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:29702":'+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs ',
- "EPSG:29738":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ',
- "EPSG:29739":'+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ',
- "EPSG:29849":'+proj=utm +zone=49 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ',
- "EPSG:29850":'+proj=utm +zone=50 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ',
- "EPSG:29871":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +to_meter=20.11676512155263 +no_defs ',
- "EPSG:29872":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +to_meter=0.3047994715386762 +no_defs ',
- "EPSG:29873":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ',
- "EPSG:29900":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',
- "EPSG:29901":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',
- "EPSG:29902":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',
- "EPSG:29903":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',
- "EPSG:30161":'+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30162":'+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30163":'+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30164":'+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30165":'+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30166":'+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30167":'+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30168":'+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30169":'+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30170":'+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30171":'+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30172":'+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30173":'+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30174":'+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30175":'+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30176":'+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30177":'+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30178":'+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30179":'+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',
- "EPSG:30200":'+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.201166195164 +no_defs ',
- "EPSG:30339":'+proj=utm +zone=39 +ellps=helmert +units=m +no_defs ',
- "EPSG:30340":'+proj=utm +zone=40 +ellps=helmert +units=m +no_defs ',
- "EPSG:30491":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs ',
- "EPSG:30492":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs ',
- "EPSG:30493":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs ',
- "EPSG:30494":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs ',
- "EPSG:30729":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',
- "EPSG:30730":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',
- "EPSG:30731":'+proj=utm +zone=31 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',
- "EPSG:30732":'+proj=utm +zone=32 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',
- "EPSG:30791":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',
- "EPSG:30792":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',
- "EPSG:30800":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',
- "EPSG:31028":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs ',
- "EPSG:31121":'+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',
- "EPSG:31154":'+proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',
- "EPSG:31170":'+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',
- "EPSG:31171":'+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',
- "EPSG:31251":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31252":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31253":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31254":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31255":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31256":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31257":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31258":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31259":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31265":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31266":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31267":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31268":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31275":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31276":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31277":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31278":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31279":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31281":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31282":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31283":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31284":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31285":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31286":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31287":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31288":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31289":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31290":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31291":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31292":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31293":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',
- "EPSG:31294":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31295":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31296":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31297":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',
- "EPSG:31300":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs ',
- "EPSG:31370":'+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs ',
- "EPSG:31461":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:31462":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:31463":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:31464":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:31465":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:31466":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:31467":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:31468":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:31469":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',
- "EPSG:31528":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',
- "EPSG:31529":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',
- "EPSG:31600":'+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs ',
- "EPSG:31700":'+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +units=m +no_defs ',
- "EPSG:31838":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ',
- "EPSG:31839":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ',
- "EPSG:31900":'+proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs ',
- "EPSG:31901":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs ',
- "EPSG:31965":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31966":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31967":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31968":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31969":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31970":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31971":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31972":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31973":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31974":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31975":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31976":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31977":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31978":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31979":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31980":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31981":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31982":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31983":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31984":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31985":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31986":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31987":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31988":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31989":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31990":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31991":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31992":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31993":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31994":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31995":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31996":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31997":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31998":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:31999":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32000":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32001":'+proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32002":'+proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32003":'+proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32005":'+proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32006":'+proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32007":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32008":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32009":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32010":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32011":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32012":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32013":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32014":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32015":'+proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32016":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32017":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32018":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32019":'+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32020":'+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32021":'+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32022":'+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32023":'+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32024":'+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32025":'+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32026":'+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32027":'+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32028":'+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32029":'+proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32030":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32031":'+proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32033":'+proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32034":'+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32035":'+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32036":'+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32037":'+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32038":'+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32039":'+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32040":'+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32041":'+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32042":'+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32043":'+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32044":'+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32045":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32046":'+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32047":'+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32048":'+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32049":'+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32050":'+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32051":'+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32052":'+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32053":'+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32054":'+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32055":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32056":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32057":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32058":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32061":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs ',
- "EPSG:32062":'+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +datum=NAD27 +units=m +no_defs ',
- "EPSG:32064":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32065":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32066":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32067":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32074":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32075":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32076":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32077":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32081":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:32082":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:32083":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:32084":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:32085":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:32086":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:32098":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',
- "EPSG:32099":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',
- "EPSG:32100":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32104":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32107":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32108":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32109":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32110":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32111":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32112":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32113":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32114":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32115":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32116":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32117":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32118":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32119":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32120":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32121":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32122":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32123":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32124":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32125":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32126":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32127":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32128":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32129":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32130":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32133":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32134":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32135":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32136":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32137":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32138":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32139":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32140":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32141":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32142":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32143":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32144":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32145":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32146":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32147":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32148":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32149":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32150":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32151":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32152":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32153":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32154":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32155":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32156":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32157":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32158":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32161":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32164":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:32165":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:32166":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:32167":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',
- "EPSG:32180":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32181":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32182":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32183":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32184":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32185":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32186":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32187":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32188":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32189":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32190":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32191":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32192":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32193":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32194":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32195":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32196":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32197":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32198":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32199":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32201":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32202":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32203":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32204":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32205":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32206":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32207":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32208":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32209":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32210":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32211":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32212":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32213":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32214":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32215":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32216":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32217":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32218":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32219":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32220":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32221":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32222":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32223":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32224":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32225":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32226":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32227":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32228":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32229":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32230":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32231":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32232":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32233":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32234":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32235":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32236":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32237":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32238":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32239":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32240":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32241":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32242":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32243":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32244":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32245":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32246":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32247":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32248":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32249":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32250":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32251":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32252":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32253":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32254":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32255":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32256":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32257":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32258":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32259":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32260":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32301":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32302":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32303":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32304":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32305":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32306":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32307":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32308":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32309":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32310":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32311":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32312":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32313":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32314":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32315":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32316":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32317":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32318":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32319":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32320":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32321":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32322":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32323":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32324":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32325":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32326":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32327":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32328":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32329":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32330":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32331":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32332":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32333":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32334":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32335":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32336":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32337":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32338":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32339":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32340":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32341":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32342":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32343":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32344":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32345":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32346":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32347":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32348":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32349":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32350":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32351":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32352":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32353":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32354":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32355":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32356":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32357":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32358":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32359":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32360":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',
- "EPSG:32401":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32402":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32403":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32404":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32405":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32406":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32407":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32408":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32409":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32410":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32411":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32412":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32413":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32414":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32415":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32416":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32417":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32418":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32419":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32420":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32421":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32422":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32423":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32424":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32425":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32426":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32427":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32428":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32429":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32430":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32431":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32432":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32433":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32434":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32435":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32436":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32437":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32438":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32439":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32440":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32441":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32442":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32443":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32444":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32445":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32446":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32447":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32448":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32449":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32450":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32451":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32452":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32453":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32454":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32455":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32456":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32457":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32458":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32459":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32460":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32501":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32502":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32503":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32504":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32505":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32506":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32507":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32508":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32509":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32510":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32511":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32512":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32513":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32514":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32515":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32516":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32517":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32518":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32519":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32520":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32521":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32522":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32523":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32524":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32525":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32526":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32527":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32528":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32529":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32530":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32531":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32532":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32533":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32534":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32535":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32536":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32537":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32538":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32539":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32540":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32541":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32542":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32543":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32544":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32545":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32546":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32547":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32548":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32549":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32550":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32551":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32552":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32553":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32554":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32555":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32556":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32557":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32558":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32559":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32560":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',
- "EPSG:32601":'+proj=utm +zone=1 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32602":'+proj=utm +zone=2 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32603":'+proj=utm +zone=3 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32604":'+proj=utm +zone=4 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32605":'+proj=utm +zone=5 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32606":'+proj=utm +zone=6 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32607":'+proj=utm +zone=7 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32608":'+proj=utm +zone=8 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32609":'+proj=utm +zone=9 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32610":'+proj=utm +zone=10 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32611":'+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32612":'+proj=utm +zone=12 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32613":'+proj=utm +zone=13 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32614":'+proj=utm +zone=14 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32615":'+proj=utm +zone=15 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32616":'+proj=utm +zone=16 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32617":'+proj=utm +zone=17 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32618":'+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32619":'+proj=utm +zone=19 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32620":'+proj=utm +zone=20 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32621":'+proj=utm +zone=21 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32622":'+proj=utm +zone=22 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32623":'+proj=utm +zone=23 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32624":'+proj=utm +zone=24 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32625":'+proj=utm +zone=25 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32626":'+proj=utm +zone=26 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32627":'+proj=utm +zone=27 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32628":'+proj=utm +zone=28 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32629":'+proj=utm +zone=29 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32630":'+proj=utm +zone=30 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32631":'+proj=utm +zone=31 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32632":'+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32633":'+proj=utm +zone=33 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32634":'+proj=utm +zone=34 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32635":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32636":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32637":'+proj=utm +zone=37 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32638":'+proj=utm +zone=38 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32639":'+proj=utm +zone=39 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32640":'+proj=utm +zone=40 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32641":'+proj=utm +zone=41 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32642":'+proj=utm +zone=42 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32643":'+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32644":'+proj=utm +zone=44 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32645":'+proj=utm +zone=45 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32646":'+proj=utm +zone=46 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32647":'+proj=utm +zone=47 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32648":'+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32649":'+proj=utm +zone=49 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32650":'+proj=utm +zone=50 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32651":'+proj=utm +zone=51 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32652":'+proj=utm +zone=52 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32653":'+proj=utm +zone=53 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32654":'+proj=utm +zone=54 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32655":'+proj=utm +zone=55 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32656":'+proj=utm +zone=56 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32657":'+proj=utm +zone=57 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32658":'+proj=utm +zone=58 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32659":'+proj=utm +zone=59 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32660":'+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32661":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32662":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32663":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',
- "EPSG:32664":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',
- "EPSG:32665":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',
- "EPSG:32666":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',
- "EPSG:32667":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',
- "EPSG:32701":'+proj=utm +zone=1 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32702":'+proj=utm +zone=2 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32703":'+proj=utm +zone=3 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32704":'+proj=utm +zone=4 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32705":'+proj=utm +zone=5 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32706":'+proj=utm +zone=6 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32707":'+proj=utm +zone=7 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32708":'+proj=utm +zone=8 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32709":'+proj=utm +zone=9 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32710":'+proj=utm +zone=10 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32711":'+proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32712":'+proj=utm +zone=12 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32713":'+proj=utm +zone=13 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32714":'+proj=utm +zone=14 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32715":'+proj=utm +zone=15 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32716":'+proj=utm +zone=16 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32717":'+proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32718":'+proj=utm +zone=18 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32719":'+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32720":'+proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32721":'+proj=utm +zone=21 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32722":'+proj=utm +zone=22 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32723":'+proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32724":'+proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32725":'+proj=utm +zone=25 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32726":'+proj=utm +zone=26 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32727":'+proj=utm +zone=27 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32728":'+proj=utm +zone=28 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32729":'+proj=utm +zone=29 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32730":'+proj=utm +zone=30 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32731":'+proj=utm +zone=31 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32732":'+proj=utm +zone=32 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32733":'+proj=utm +zone=33 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32734":'+proj=utm +zone=34 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32735":'+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32736":'+proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32737":'+proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32738":'+proj=utm +zone=38 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32739":'+proj=utm +zone=39 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32740":'+proj=utm +zone=40 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32741":'+proj=utm +zone=41 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32742":'+proj=utm +zone=42 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32743":'+proj=utm +zone=43 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32744":'+proj=utm +zone=44 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32745":'+proj=utm +zone=45 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32746":'+proj=utm +zone=46 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32747":'+proj=utm +zone=47 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32748":'+proj=utm +zone=48 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32749":'+proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32750":'+proj=utm +zone=50 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32751":'+proj=utm +zone=51 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32752":'+proj=utm +zone=52 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32753":'+proj=utm +zone=53 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32754":'+proj=utm +zone=54 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32755":'+proj=utm +zone=55 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32756":'+proj=utm +zone=56 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32757":'+proj=utm +zone=57 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32758":'+proj=utm +zone=58 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32759":'+proj=utm +zone=59 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32760":'+proj=utm +zone=60 +south +datum=WGS84 +units=m +no_defs ',
- "EPSG:32761":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',
- "EPSG:32766":'+proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs '
- };
- },{}],78:[function(require,module,exports){
- var util = require('util')
- , fileType = require('file-type');
- var TileCreator = require('./index').TileCreator
- , TileBoundingBoxUtils = require('../tileBoundingBoxUtils')
- , TileUtilities = require('./tileUtilities')
- , ProjectTile = require('./projectTile.js');
- function CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) {
- TileCreator.apply(this, arguments);
- this.canvas = canvas || document.createElement('canvas');
- this.canvas.width = width;
- this.canvas.height = height;
- this.ctx = this.canvas.getContext('2d');
- this.image = document.createElement('img');
- this.tileCanvas = document.createElement('canvas');
- this.tileContext = this.tileCanvas.getContext('2d');
- this.tileCanvas.width = tileMatrix.tile_width;
- this.tileCanvas.height = tileMatrix.tile_height;
- this.imageData = new Uint8ClampedArray(width * height * 4);
- }
- util.inherits(CanvasTileCreator, TileCreator);
- CanvasTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) {
- var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1);
- this.imageData.set(color.data, (targetY * this.width * 4) + (targetX * 4));
- };
- CanvasTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) {
- var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow);
- var type = fileType(tileData);
- var binary = '';
- var bytes = tileData;
- var len = bytes.byteLength;
- for (var i = 0; i < len; i++) {
- binary += String.fromCharCode( bytes[ i ] );
- }
- var base64Data = btoa( binary );
- return new Promise(function(resolve, reject) {
- this.chunks = [];
- this.image.onload = function() {
- resolve(this.tileContext.drawImage(this.image, 0, 0));
- }.bind(this);
- this.image.src = 'data:'+type.mime+';base64,' + base64Data;
- }.bind(this))
- .then(function() {
- return this.projectTile(tileData, gridColumn, gridRow);
- }.bind(this))
- .then(function() {
- if (this.chunks && this.chunks.length) {
- return this.chunks.reduce(function(sequence, chunk) {
- var type = fileType(tileData);
- var binary = '';
- var bytes = chunk.chunk;
- var len = bytes.byteLength;
- for (var i = 0; i < len; i++) {
- binary += String.fromCharCode( bytes[ i ] );
- }
- var base64DataChunk = btoa( binary );
- var image = document.createElement('img');
- return sequence.then(function() {
- return new Promise(function(resolve, reject) {
- image.onload = function() {
- var p = chunk.position;
- this.ctx.drawImage(image,
- p.sx,
- p.sy,
- p.sWidth,
- p.sHeight,
- p.dx,
- p.dy,
- p.dWidth,
- p.dHeight
- );
- resolve();
- }.bind(this);
- image.src = 'data:'+type.mime+';base64,' + base64DataChunk;
- }.bind(this));
- }.bind(this));
- }.bind(this), Promise.resolve());
- }
- }.bind(this));
- };
- CanvasTileCreator.prototype.getCompleteTile = function (format, callback) {
- return this.canvas.toDataURL();
- };
- CanvasTileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) {
- var ctx = this.ctx;
- var width = this.width;
- var height = this.height;
- var piecePosition = TileUtilities.getPiecePosition(tilePieceBoundingBox, this.tileBoundingBox, this.height, this.width, this.projectionTo, this.projectionFrom, this.projectionFromDefinition, this.tileHeightUnitsPerPixel, this.tileWidthUnitsPerPixel, this.tileMatrix.pixel_x_size, this.tileMatrix.pixel_y_size);
- var job = {
- tileBoundingBox: JSON.stringify(this.tileBoundingBox),
- tileWidthUnitsPerPixel: this.tileWidthUnitsPerPixel,
- tileHeightUnitsPerPixel: this.tileHeightUnitsPerPixel,
- projectionTo: this.projectionTo,
- projectionFrom: this.projectionFrom,
- projectionFromDefinition: this.projectionFromDefinition,
- tileWidth: this.tileMatrix.tile_width,
- tileHeight: this.tileMatrix.tile_height,
- pixelYSize: this.tileMatrix.pixel_y_size,
- pixelXSize: this.tileMatrix.pixel_x_size,
- height: this.height,
- width: this.width,
- tilePieceBoundingBox: JSON.stringify(tilePieceBoundingBox),
- imageData: this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer
- };
- return new Promise(function(resolve, reject) {
- try {
- var work = require('webworkify');
- var worker = work(require('./tileWorker.js'));
- worker.onmessage = function(e) {
- resolve(workerDone(e.data, piecePosition, ctx));
- };
- worker.postMessage(job, [this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer]);
- } catch (e) {
- worker = ProjectTile;
- worker(job, function(err, data) {
- resolve(workerDone(data, piecePosition, ctx));
- });
- }
- }.bind(this));
- };
- function workerDone(data, piecePosition, ctx) {
- if (data.message === 'done') {
- var imageData = new Uint8ClampedArray(data.imageData);
- var offsetX = piecePosition.startX;
- var offsetY = piecePosition.startY;
- var finalWidth = data.finalWidth;
- var finalHeight = data.finalHeight;
- var tmpCanvas = document.createElement('canvas');
- tmpCanvas.width = finalWidth;
- tmpCanvas.height = finalHeight;
- tmpCanvas.getContext('2d').putImageData(new ImageData(imageData, finalWidth, finalHeight), 0, 0);
- ctx.drawImage(tmpCanvas, offsetX, offsetY);
- }
- }
- module.exports = CanvasTileCreator;
- },{"../tileBoundingBoxUtils":93,"./index":79,"./projectTile.js":81,"./tileUtilities":82,"./tileWorker.js":83,"file-type":223,"util":343,"webworkify":347}],79:[function(require,module,exports){
- (function (process){
- var proj4 = require('proj4');
- proj4 = 'default' in proj4 ? proj4['default'] : proj4;
- var TileBoundingBoxUtils = require('../tileBoundingBoxUtils');
- module.exports.initialize = function(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) {
- var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1);
- var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom);
- var isNode = typeof(process) !== 'undefined' && process.version;
- if (isNode && !isPhantom && !isElectron) {
- var NodeTileCreator = require('./node');
- return new NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas);
- } else {
- var CanvasTileCreator = require('./canvas');
- return new CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas);
- }
- }
- function TileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo) {
- this.width = width;
- this.height = height;
- this.tileMatrix = tileMatrix;
- this.projectionFrom = srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id;
- this.projectionFromDefinition = srs.definition;
- this.projectionTo = projectionTo.toUpperCase();
- this.tileBoundingBox = tileBoundingBox;
- this.tileMatrixSet = tileMatrixSet;
- this.chunks = [];
- this.tileHeightUnitsPerPixel = (tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude) / height;
- this.tileWidthUnitsPerPixel = (tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude) / width;
- // use this as a quick check if the projections are equal. If they are we can shortcut some math
- // special cases 'EPSG:900913' =='EPSG:3857' == 'EPSG:102113'
- this.sameProjection = (this.projectionFrom === this.projectionTo) || (this.projectionTo === 'EPSG:3857' && (this.projectionFrom === 'EPSG:900913' || this.projectionFrom === 'EPSG:102113'));
- }
- module.exports.TileCreator = TileCreator;
- TileCreator.prototype.projectTile = function(tileData, gridColumn, gridRow) {
- var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow);
- if (!this.sameProjection) {
- return this.reproject(tileData, bb);
- } else {
- return Promise.resolve(this.cutAndScale(tileData, bb));
- }
- }
- TileCreator.prototype.cutAndScale = function (tileData, tilePieceBoundingBox) {
- var position = TileBoundingBoxUtils.determinePositionAndScale(tilePieceBoundingBox, this.tileMatrix.tile_height, this.tileMatrix.tile_width, this.tileBoundingBox, this.height, this.width);
- if (position.xPositionInFinalTileStart >= this.width || position.xPositionInFinalTileEnd <= 0 || position.yPositionInFinalTileStart >= this.height || position.yPositionInFinalTileEnd <= 0) {
- // this tile doesn't belong just skip it
- } else {
- this.addChunk(tileData, position);
- }
- };
- TileCreator.prototype.addChunk = function (chunk, position) {
- this.chunks.push({
- chunk: chunk,
- position: position
- });
- };
- TileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) {
- var y = 0;
- var x = 0;
- var height = this.height;
- var width = this.width;
- var proj4To = proj4(this.projectionTo);
- var proj4From;
- if (this.projectionFrom) {
- try {
- proj4From = proj4(this.projectionFrom);
- } catch (e) {}
- }
- if (!proj4From && this.projectionFromDefinition) {
- proj4From = proj4(this.projectionFromDefinition);
- }
- var conversion;
- try {
- conversion = proj4(this.projectionTo, this.projectionFrom);
- } catch (e) {}
- if (!conversion) {
- conversion = proj4(this.projectionTo, this.projectionFromDefinition);
- }
- var latitude;
- var rows = [];
- for (var i = 0; i < height; i++) {
- rows.push(i);
- }
- var columns = [];
- for (var i = 0; i < width; i++) {
- columns.push(i);
- }
- return rows.reduce(function(rowSequence, row) {
- return rowSequence.then(function() {
- latitude = this.tileBoundingBox.maxLatitude - (row * this.tileHeightUnitsPerPixel);
- var currentColumns = columns.slice();
- return currentColumns.reduce(function(columnSequence, column) {
- return columnSequence.then(function() {
- // loop over all pixels in the target tile
- // determine the position of the current pixel in the target tile
- var longitude = this.tileBoundingBox.minLongitude + (column * this.tileWidthUnitsPerPixel);
- // project that lat/lng to the source coordinate system
- var projected = conversion.forward([longitude, latitude]);
- var projectedLongitude = projected[0];
- var projectedLatitude = projected[1];
- // now find the source pixel
- var xPixel = this.tileMatrix.tile_width - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / this.tileMatrix.pixel_x_size);
- var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / this.tileMatrix.pixel_y_size);
- if (xPixel >= 0 && xPixel < this.tileMatrix.tile_width
- && yPixel >= 0 && yPixel < this.tileMatrix.tile_height) {
- this.addPixel(column, row, xPixel, yPixel);
- }
- }.bind(this));
- }.bind(this), Promise.resolve());
- }.bind(this));
- }.bind(this), Promise.resolve());
- };
- }).call(this,require('_process'))
- },{"../tileBoundingBoxUtils":93,"./canvas":78,"./node":80,"_process":284,"proj4":285}],80:[function(require,module,exports){
- var util = require('util')
- , concat = require('concat-stream')
- , ImageUtils = require('../imageUtils');
- var TileCreator = require('./index').TileCreator;
- function NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, projectionFrom, projectionTo, canvas) {
- TileCreator.apply(this, arguments);
- this.Canvas = require('canvas');
- this.canvas = canvas || this.Canvas.createCanvas(width, height);
- this.ctx = this.canvas.getContext('2d');
- this.tileCanvas = this.Canvas.createCanvas(width, height);
- this.tileContext = this.tileCanvas.getContext('2d');
- this.tileCanvas.width = tileMatrix.tile_width;
- this.tileCanvas.height = tileMatrix.tile_height;
- this.imageData = this.Canvas.createImageData(new Uint8ClampedArray(width * height * 4), width, height);
- this.pixelAdded = false;
- }
- util.inherits(NodeTileCreator, TileCreator);
- NodeTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) {
- var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1);
- this.imageData.data.set(color.data, (targetY * this.width * 4) + (targetX * 4));
- this.pixelAdded = true;
- };
- NodeTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) {
- return ImageUtils.getImage(tileData)
- .then(function(img) {
- this.tile = img;
- this.tileContext.drawImage(img, 0, 0);
- this.chunks = [];
- }.bind(this))
- .then(function() {
- return this.projectTile(tileData, gridColumn, gridRow);
- }.bind(this))
- .then(function() {
- if (this.pixelAdded) {
- this.ctx.putImageData(this.imageData, 0, 0);
- }
- }.bind(this))
- .then(function() {
- if (this.chunks && this.chunks.length) {
- return this.chunks.reduce(function(sequence, chunk) {
- return sequence.then(function() {
- return ImageUtils.getImage(tileData);
- }.bind(this))
- .then(function(image) {
- var p = chunk.position;
- this.ctx.drawImage(image,
- p.sx,
- p.sy,
- p.sWidth,
- p.sHeight,
- p.dx,
- p.dy,
- p.dWidth,
- p.dHeight
- );
- }.bind(this));
- }.bind(this), Promise.resolve());
- }
- }.bind(this))
- .then(function() {
- return this.canvas;
- }.bind(this));
- };
- NodeTileCreator.prototype.getCompleteTile = function (format) {
- return new Promise(function (resolve, reject) {
- var writeStream = concat(function(buffer) {
- resolve(buffer);
- });
- var stream = null;
- if (format === 'png') {
- stream = this.canvas.createPNGStream();
- } else {
- stream = this.canvas.createJPEGStream();
- }
- stream.pipe(writeStream);
- }.bind(this));
- };
- module.exports = NodeTileCreator;
- },{"../imageUtils":89,"./index":79,"canvas":undefined,"concat-stream":185,"util":343}],81:[function(require,module,exports){
- var proj4 = require('proj4');
- proj4 = 'default' in proj4 ? proj4['default'] : proj4;
- var TileUtilities = require('./tileUtilities')
- , proj4Defs = require('../../proj4Defs');
- module.exports = function(job, callback) {
- console.log('Tile Worker - working');
- console.time('Tile Worker - time');
- var self = this;
- if (proj4Defs[job.projectionTo]) {
- proj4.defs(job.projectionTo, proj4Defs[job.projectionTo]);
- }
- if (proj4Defs[job.projectionFrom]) {
- proj4.defs(job.projectionFrom, proj4Defs[job.projectionFrom]);
- }
- var proj4To = proj4(job.projectionTo);
- var proj4From = proj4(job.projectionFrom);
- var conversion;
- try {
- conversion = proj4(job.projectionTo, job.projectionFrom);
- } catch (e) {}
- if (!conversion) {
- conversion = proj4(job.projectionTo, job.projectionFromDefinition);
- }
- var tileBoundingBox = JSON.parse(job.tileBoundingBox);
- var tilePieceBoundingBox = JSON.parse(job.tilePieceBoundingBox);
- var piecePosition = TileUtilities.getPiecePosition(tilePieceBoundingBox, tileBoundingBox, job.height, job.width, job.projectionTo, job.projectionFrom, job.projectionFromDefinition, job.tileHeightUnitsPerPixel, job.tileWidthUnitsPerPixel, job.pixelXSize, job.pixelYSize);
- var x = piecePosition.startX;
- var y = piecePosition.startY;
- var finalWidth = (piecePosition.endX - piecePosition.startX);
- var finalHeight = (piecePosition.endY - piecePosition.startY);
- if (finalWidth <= 0 || finalHeight <= 0) {
- console.timeEnd('Tile Worker - time');
- if (callback) {
- return callback(null, {message:'donenodata'});
- } else {
- postMessage({message:'donenodata'});
- return self.close();
- }
- }
- var imageData = new Uint8ClampedArray(job.imageData);
- var finalImageData = new Uint8ClampedArray(finalWidth * finalHeight * 4);
- var latitude;
- var yArray = [];
- for (var i = y; i < piecePosition.endY; i++) {
- yArray.push(i);
- }
- var xArray = [];
- for (var i = x; i < piecePosition.endX; i++) {
- xArray.push(i);
- }
- return yArray.reduce(function(ySequence, y) {
- return ySequence.then(function() {
- latitude = tileBoundingBox.maxLatitude - (y * job.tileHeightUnitsPerPixel);
- var currentXArray = xArray.slice();
- return currentXArray.reduce(function(xSequence, x) {
- return xSequence.then(function() {
- longitude = tileBoundingBox.minLongitude + (x * job.tileWidthUnitsPerPixel);
- var projected = conversion.forward([longitude, latitude]);
- var projectedLongitude = projected[0];
- var projectedLatitude = projected[1];
- var xPixel = job.tileWidth - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / job.pixelXSize);
- var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / job.pixelYSize);
- if (xPixel >= 0 && xPixel < job.tileWidth
- && yPixel >= 0 && yPixel < job.tileHeight) {
- var sliceStart = (yPixel * job.tileWidth * 4) + (xPixel * 4);
- if (sliceStart >= 0) {
- finalImageData.set(imageData.slice(sliceStart, sliceStart + 4), ((y-piecePosition.startY)*finalWidth*4) + ((x-piecePosition.startX)*4));
- }
- }
- });
- }, Promise.resolve());
- });
- }, Promise.resolve())
- .then(function() {
- console.timeEnd('Tile Worker - time');
- if (callback) {
- callback(null, {message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]);
- } else {
- postMessage({message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]);
- self.close();
- }
- });
- }
- },{"../../proj4Defs":77,"./tileUtilities":82,"proj4":285}],82:[function(require,module,exports){
- var proj4 = require('proj4');
- proj4 = 'default' in proj4 ? proj4['default'] : proj4;
- module.exports.getPiecePosition = function(tilePieceBoundingBox, tileBoundingBox, height, width, projectionTo, projectionFrom, projectionFromDefinition, tileHeightUnitsPerPixel, tileWidthUnitsPerPixel, pixelXSize, pixelYSize) {
- var conversion;
- try {
- conversion = proj4(projectionTo, projectionFrom);
- } catch (e) {}
- if (!conversion) {
- conversion = proj4(projectionTo, projectionFromDefinition);
- }
- var maxLatitude = tilePieceBoundingBox.maxLatitude;
- var minLatitude = tilePieceBoundingBox.minLatitude;
- var minLongitude = tilePieceBoundingBox.minLongitude - pixelXSize;
- var maxLongitude = tilePieceBoundingBox.maxLongitude + pixelXSize;
- if (projectionTo.toUpperCase() === 'EPSG:3857' && projectionFrom.toUpperCase() === 'EPSG:4326') {
- maxLatitude = maxLatitude > 85.0511 ? 85.0511 : maxLatitude;
- minLatitude = minLatitude < -85.0511 ? -85.0511 : minLatitude;
- minLongitude = minLongitude < -180.0 ? -180.0 : minLongitude;
- maxLongitude = maxLongitude > 180.0 ? 180.0 : maxLongitude;
- }
- // ensure the projeced longitude wont wrap around the world
- var negative180 = proj4('EPSG:4326', projectionTo, [-180,0]);
- var positive180 = proj4('EPSG:4326', projectionTo, [180,0]);
- minLongitude = minLongitude < negative180[0] ? negative180[0] : minLongitude;
- maxLongitude = maxLongitude > positive180[0] ? positive180[0] : maxLongitude;
- var pieceBoundingBoxInTileProjectionSW = conversion.inverse([minLongitude, minLatitude]);
- var pieceBoundingBoxInTileProjectionNE = conversion.inverse([maxLongitude, maxLatitude]);
- var pieceBBProjected = {
- minLatitude: isNaN(pieceBoundingBoxInTileProjectionSW[1]) ? tileBoundingBox.minLatitude : pieceBoundingBoxInTileProjectionSW[1],
- maxLatitude: isNaN(pieceBoundingBoxInTileProjectionNE[1]) ? tileBoundingBox.maxLatitude : pieceBoundingBoxInTileProjectionNE[1],
- minLongitude: pieceBoundingBoxInTileProjectionSW[0],
- maxLongitude: pieceBoundingBoxInTileProjectionNE[0]
- };
- var startY = y = Math.max(0, Math.floor((tileBoundingBox.maxLatitude - pieceBBProjected.maxLatitude) / tileHeightUnitsPerPixel));
- var startX = x = Math.max(0, Math.floor((pieceBBProjected.minLongitude - tileBoundingBox.minLongitude) / tileWidthUnitsPerPixel));
- var endY = Math.min(height, height - Math.floor((pieceBBProjected.minLatitude - tileBoundingBox.minLatitude) / tileHeightUnitsPerPixel));
- var endX = Math.min(width, width - Math.floor((tileBoundingBox.maxLongitude - pieceBBProjected.maxLongitude) / tileWidthUnitsPerPixel));
- return {
- startY: startY,
- startX: startX,
- endY: endY,
- endX: endX
- };
- }
- },{"proj4":285}],83:[function(require,module,exports){
- var ProjectTile = require('./projectTile');
- function tileWorker(e) {
- console.log('Tile Worker - working');
- console.time('Tile Worker - time');
- var self = this;
- var job = e.data;
- ProjectTile(job, function(err, data) {
- postMessage(data);
- self.close();
- });
- }
- module.exports = function(self) {
- self.onmessage = tileWorker;
- self.onerror = function(e) {
- console.log('error', e);
- }
- };
- },{"./projectTile":81}],84:[function(require,module,exports){
- /**
- * Feature Draw Type module.
- * @module tiles/features
- */
- var FeatureDrawType = {
- /**
- * Circle for a point
- */
- CIRCLE: 'CIRCLE',
- /**
- * Stroke for a line of polygon
- */
- STROKE: 'STOKE',
- /**
- * Fill for a polygon
- */
- FILL: 'FILL'
- };
- module.exports = FeatureDrawType;
- },{}],85:[function(require,module,exports){
- /**
- * FeaturePaint module.
- * @module tiles/features
- */
- var FeaturePaint = function () {
- this.featurePaints = {};
- };
- /**
- * Get the feature paint for the featureDrawType
- * @param {module:tiles/features~FeatureDrawType} featureDrawType
- * @return {module:tiles/features~FeaturePaint} paint
- */
- FeaturePaint.prototype.getPaint = function(featureDrawType) {
- return this.featurePaints[featureDrawType];
- };
- /**
- * Set the feature paint for the featureDrawType
- * @param {module:tiles/features~FeatureDrawType} featureDrawType
- * @param {module:tiles/features~Paint} paint
- */
- FeaturePaint.prototype.setPaint = function(featureDrawType, paint) {
- this.featurePaints[featureDrawType] = paint;
- };
- module.exports = FeaturePaint;
- },{}],86:[function(require,module,exports){
- /**
- * Feature Paint Cache.
- * @module tiles/features
- */
- var FeaturePaint = require('./featurePaint');
- /**
- * Constructor, created with cache size of {@link #DEFAULT_CACHE_SIZE}
- * @constructor
- */
- var FeaturePaintCache = function(size = null) {
- this.cacheSize = size !== null ? size : FeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE;
- this.paintCache = {};
- this.accessHistory = [];
- };
- /**
- * Get the cached featurePaint for the style row or null if not cached
- * @param {module:extension/style~StyleRow} styleRow style row
- * @return {module:tiles/features~FeaturePaint} feature paint or null
- */
- FeaturePaintCache.prototype.getFeaturePaintForStyleRow = function(styleRow) {
- return this.getFeaturePaint(styleRow.getId());
- };
- /**
- * Get the cached featurePaint for the style row id or null if not cached
- * @param {Number} styleRowId style row id
- * @return {module:tiles/features~FeaturePaint} feature paint or null
- */
- FeaturePaintCache.prototype.getFeaturePaint = function(styleRowId) {
- var featurePaint = this.paintCache[styleRowId];
- if (!!featurePaint) {
- var index = this.accessHistory.indexOf(styleRowId);
- if (index > -1) {
- this.accessHistory.splice(index, 1);
- }
- this.accessHistory.push(styleRowId);
- }
- return featurePaint;
- };
- /**
- * Get the paint for the style row and draw type
- * @param {module:extension/style~StyleRow} styleRow style row
- * @param {String} type feature draw type
- * @return {module:tiles/features~Paint} paint
- */
- FeaturePaintCache.prototype.getPaintForStyleRow = function(styleRow, type) {
- return this.getPaint(styleRow.getId(), type);
- };
- /**
- * Get the paint for the style row id and draw type
- * @param {Number} styleId style row id
- * @param {String} type feature draw type
- * @return {module:tiles/features~Paint} paint
- */
- FeaturePaintCache.prototype.getPaint = function(styleId, type) {
- var paint = null;
- var featurePaint = this.getFeaturePaint(styleId);
- if (featurePaint !== undefined && featurePaint !== null) {
- paint = featurePaint.getPaint(type);
- }
- return paint;
- };
- /**
- * Cache the featurePaint for the style row
- * @param {module:extension/style~StyleRow} styleRow style row
- * @param {module:tiles/features~FeatureDrawType} type feature draw type
- * @param {module:tiles/features~Paint} paint paint
- */
- FeaturePaintCache.prototype.setPaintForStyleRow = function(styleRow, type, paint) {
- this.setPaint(styleRow.getId(), type, paint);
- };
- /**
- * Cache the featurePaint for the style row id
- * @param {Number} styleRowId style row id
- * @param {module:tiles/features~FeatureDrawType} type feature draw type
- * @param {module:tiles/features~Paint} paint paint
- */
- FeaturePaintCache.prototype.setPaint = function(styleRowId, type, paint) {
- var featurePaint = this.paintCache[styleRowId];
- if (!featurePaint) {
- featurePaint = new FeaturePaint();
- } else {
- var index = this.accessHistory.indexOf(styleRowId);
- if (index > -1) {
- this.accessHistory.splice(index, 1);
- }
- }
- featurePaint.setPaint(type, paint);
- this.paintCache[styleRowId] = featurePaint;
- this.accessHistory.push(styleRowId);
- if (Object.keys(this.paintCache).length > this.cacheSize) {
- var styleId = this.accessHistory.shift();
- if (styleId) {
- delete this.paintCache[styleId];
- }
- }
- };
- /**
- * Remove the cached featurePaint for the style row id
- * @param {Number} styleRowId style row id
- * @return {module:tiles/features~FeaturePaint} removed feature paint or null
- */
- FeaturePaintCache.prototype.remove = function(styleRowId) {
- var removed = this.paintCache[styleRowId];
- delete this.paintCache[styleRowId];
- if (!!removed) {
- var index = this.accessHistory.indexOf(styleRowId);
- if (index > -1) {
- this.accessHistory.splice(index, 1);
- } }
- return removed;
- };
- /**
- * Clear the cache
- */
- FeaturePaintCache.prototype.clear = function() {
- this.paintCache = {};
- this.accessHistory = [];
- };
- /**
- * Resize the cache
- * @param {Number} maxSize max size
- */
- FeaturePaintCache.prototype.resize = function(maxSize) {
- this.cacheSize = maxSize;
- var keys = Object.keys(this.paintCache);
- if (keys.length > maxSize) {
- var numberToRemove = keys.length - maxSize;
- for (var i = 0; i < numberToRemove; i++) {
- var styleRowId = this.accessHistory.shift();
- if (!!styleRowId) {
- delete this.paintCache[styleRowId];
- }
- }
- }
- };
- FeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE = 100;
- module.exports = FeaturePaintCache;
- },{"./featurePaint":85}],87:[function(require,module,exports){
- (function (process){
- /**
- * FeatureTiles module.
- * @module tiles/features
- */
- var TileBoundingBoxUtils = require('../tileBoundingBoxUtils')
- , BoundingBox = require('../../boundingBox')
- , FeatureTableStyles = require('../../extension/style/featureTableStyles')
- , Paint = require('./paint')
- , FeaturePaintCache = require('./featurePaintCache')
- , FeatureDrawType = require('./featureDrawType')
- , IconCache = require('../../extension/style/iconCache')
- , ImageUtils = require('../imageUtils');
- var d3geo = require('d3-geo')
- , concat = require('concat-stream')
- , reproject = require('reproject')
- , PolyToLine = require('@turf/polygon-to-line').default;
- /**
- * Tiles drawn from or linked to features. Used to query features and optionally draw tiles
- * from those features.
- */
- var FeatureTiles = function(featureDao, tileWidth = null, tileHeight = null) {
- var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1);
- var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom);
- var isNode = typeof(process) !== 'undefined' && process.version;
- this.useNodeCanvas = isNode && !isPhantom && !isElectron;
- this.featureDao = featureDao;
- this.tileWidth = tileWidth !== null ? tileWidth : 256;
- this.tileHeight = tileHeight !== null ? tileHeight : 256;
- this.compressFormat = 'png';
- this.pointRadius = 4.0;
- this.pointPaint = new Paint();
- this.pointIcon = null;
- this.linePaint = new Paint();
- this.linePaint.setStrokeWidth(2.0);
- this.lineStrokeWidth = 2.0;
- this.polygonPaint = new Paint();
- this.polygonPaint.setStrokeWidth(2.0);
- this.polygonStrokeWidth = 2.0;
- this.fillPolygon = true;
- this.polygonFillPaint = new Paint();
- this.featurePaintCache = new FeaturePaintCache();
- this.iconCache = new IconCache();
- this.scale = 1.0;
- this.geoPackage = this.featureDao.geoPackage;
- if (this.geoPackage != null) {
- this.featureTableStyles = new FeatureTableStyles(this.geoPackage, this.featureDao.getTable());
- if (!this.featureTableStyles.has()) {
- this.featureTableStyles = null;
- }
- }
- this.maxFeaturesPerTile = null;
- this.maxFeaturesTileDraw = null;
- this.calculateDrawOverlap();
- };
- /**
- * Manually set the width and height draw overlap
- * @param {Number} pixels pixels
- */
- FeatureTiles.prototype.setDrawOverlap = function (pixels) {
- this.setWidthDrawOverlap(pixels);
- this.setHeightDrawOverlap(pixels);
- };
- /**
- * Get the width draw overlap
- * @return {Number} width draw overlap
- */
- FeatureTiles.prototype.getWidthDrawOverlap = function () {
- return this.widthOverlap;
- };
- /**
- * Manually set the width draw overlap
- * @param {Number} pixels pixels
- */
- FeatureTiles.prototype.setWidthDrawOverlap = function (pixels) {
- this.widthOverlap = pixels;
- };
- /**
- * Get the height draw overlap
- * @return {Number} height draw overlap
- */
- FeatureTiles.prototype.getHeightDrawOverlap = function () {
- return this.heightOverlap;
- };
- /**
- * Manually set the height draw overlap
- * @param {Number} pixels pixels
- */
- FeatureTiles.prototype.setHeightDrawOverlap = function (pixels) {
- this.heightOverlap = pixels;
- };
- /**
- * Get the feature DAO
- * @return {module:features/user/featureDao} feature dao
- */
- FeatureTiles.prototype.getFeatureDao = function () {
- return this.featureDao;
- };
- /**
- * Get the feature table styles
- * @return {module:extension/style~FeatureTableStyles} feature table styles
- */
- FeatureTiles.prototype.getFeatureTableStyles = function () {
- return this.featureTableStyles;
- };
- /**
- * Set the feature table styles
- * @param {module:extension/style~FeatureTableStyles} featureTableStyles feature table styles
- */
- FeatureTiles.prototype.setFeatureTableStyles = function (featureTableStyles) {
- this.featureTableStyles = featureTableStyles;
- };
- /**
- * Ignore the feature table styles within the GeoPackage
- */
- FeatureTiles.prototype.ignoreFeatureTableStyles = function () {
- this.setFeatureTableStyles(null);
- this.calculateDrawOverlap();
- };
- /**
- * Clear all caches
- */
- FeatureTiles.prototype.clearCache = function () {
- this.clearStylePaintCache();
- this.clearIconCache();
- };
- /**
- * Clear the style paint cache
- */
- FeatureTiles.prototype.clearStylePaintCache = function () {
- this.featurePaintCache.clear();
- };
- /**
- * Set / resize the style paint cache size
- *
- * @param {Number} size
- * @since 3.3.0
- */
- FeatureTiles.prototype.setStylePaintCacheSize = function (size) {
- this.featurePaintCache.resize(size);
- };
- /**
- * Clear the icon cache
- */
- FeatureTiles.prototype.clearIconCache = function () {
- this.iconCache.clear();
- };
- /**
- * Set / resize the icon cache size
- * @param {Number} size new size
- */
- FeatureTiles.prototype.setIconCacheSize = function (size) {
- this.iconCache.resize(size);
- };
- /**
- * Get the tile width
- * @return {Number} tile width
- */
- FeatureTiles.prototype.getTileWidth = function () {
- return this.tileWidth;
- };
- /**
- * Set the tile width
- * @param {Number} tileWidth tile width
- */
- FeatureTiles.prototype.setTileWidth = function (tileWidth) {
- this.tileWidth = tileWidth;
- };
- /**
- * Get the tile height
- * @return {Number} tile height
- */
- FeatureTiles.prototype.getTileHeight = function () {
- return this.tileHeight;
- };
- /**
- * Set the tile height
- * @param {Number} tileHeight tile height
- */
- FeatureTiles.prototype.setTileHeight = function (tileHeight) {
- this.tileHeight = tileHeight;
- };
- /**
- * Get the compress format
- * @return {String} compress format
- */
- FeatureTiles.prototype.getCompressFormat = function () {
- return this.compressFormat;
- };
- /**
- * Set the compress format
- * @param {String} compressFormat compress format
- */
- FeatureTiles.prototype.setCompressFormat = function (compressFormat) {
- this.compressFormat = compressFormat;
- };
- /**
- * Set the scale
- *
- * @param {Number} scale scale factor
- */
- FeatureTiles.prototype.setScale = function(scale) {
- this.scale = scale;
- this.linePaint.setStrokeWidth(scale * this.lineStrokeWidth);
- this.polygonPaint.setStrokeWidth(scale * this.polygonStrokeWidth);
- this.featurePaintCache.clear();
- };
- /**
- * Get the scale
- * @return {Number} scale factor
- */
- FeatureTiles.prototype.getScale = function() {
- return this.scale;
- };
- FeatureTiles.prototype.calculateDrawOverlap = function() {
- if (this.pointIcon) {
- this.heightOverlap = this.scale * this.pointIcon.getHeight();
- this.widthOverlap = this.scale * this.pointIcon.getWidth();
- } else {
- this.heightOverlap = this.scale * this.pointRadius;
- this.widthOverlap = this.scale * this.pointRadius;
- }
- var lineHalfStroke = this.scale * this.lineStrokeWidth / 2.0;
- this.heightOverlap = Math.max(this.heightOverlap, lineHalfStroke);
- this.widthOverlap = Math.max(this.widthOverlap, lineHalfStroke);
- var polygonHalfStroke = this.scale * this.polygonStrokeWidth / 2.0;
- this.heightOverlap = Math.max(this.heightOverlap, polygonHalfStroke);
- this.widthOverlap = Math.max(this.widthOverlap, polygonHalfStroke);
- if (this.featureTableStyles !== null && this.featureTableStyles.has()) {
- var styleRowIds = [];
- var tableStyleIds = this.featureTableStyles.getAllTableStyleIds();
- if (tableStyleIds !== null) {
- styleRowIds = styleRowIds.concat(tableStyleIds);
- }
- var styleIds = this.featureTableStyles.getAllStyleIds();
- if (styleIds != null) {
- styleRowIds = styleRowIds.concat(styleIds.filter(id => styleRowIds.indexOf(id) === -1));
- }
- var styleDao = this.featureTableStyles.getStyleDao();
- for (var i = 0; i < styleRowIds.length; i++) {
- var styleRowId = styleRowIds[i];
- var styleRow = styleDao.queryForId(styleRowId);
- var styleHalfWidth = this.scale * (styleRow.getWidthOrDefault() / 2.0);
- this.widthOverlap = Math.max(this.widthOverlap, styleHalfWidth);
- this.heightOverlap = Math.max(this.heightOverlap, styleHalfWidth);
- }
- var iconRowIds = [];
- var tableIconIds = this.featureTableStyles.getAllTableIconIds();
- if (tableIconIds != null) {
- iconRowIds = iconRowIds.concat(tableIconIds);
- }
- var iconIds = this.featureTableStyles.getAllIconIds();
- if (iconIds != null) {
- iconRowIds = iconRowIds.concat(iconIds.filter(id => iconRowIds.indexOf(id) === -1));
- }
- var iconDao = this.featureTableStyles.getIconDao();
- for (i = 0; i < iconRowIds.length; i++) {
- var iconRowId = iconRowIds[i];
- var iconRow = iconDao.queryForId(iconRowId);
- var iconDimensions = iconRow.getDerivedDimensions();
- var iconWidth = this.scale * Math.ceil(iconDimensions[0]);
- var iconHeight = this.scale * Math.ceil(iconDimensions[1]);
- this.widthOverlap = Math.max(this.widthOverlap, iconWidth);
- this.heightOverlap = Math.max(this.heightOverlap, iconHeight);
- }
- }
- };
- FeatureTiles.prototype.setDrawOverlapsWithPixels = function(pixels) {
- this.widthOverlap = pixels;
- this.heightOverlap = pixels;
- };
- FeatureTiles.prototype.getFeatureStyle = function(featureRow) {
- var featureStyle = null;
- if (this.featureTableStyles !== null) {
- featureStyle = this.featureTableStyles.getFeatureStyleForFeatureRow(featureRow);
- }
- return featureStyle;
- };
- /**
- * Get the point paint for the feature style, or return the default paint
- * @param featureStyle feature style
- * @return paint
- */
- FeatureTiles.prototype.getPointPaint = function(featureStyle) {
- var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.CIRCLE);
- if (paint == null) {
- paint = this.pointPaint;
- }
- return paint;
- };
- /**
- * Get the line paint for the feature style, or return the default paint
- * @param featureStyle feature style
- * @return paint
- */
- FeatureTiles.prototype.getLinePaint = function(featureStyle) {
- var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE);
- if (paint === null) {
- paint = this.linePaint;
- }
- return paint;
- };
- /**
- * Get the polygon paint for the feature style, or return the default paint
- * @param featureStyle feature style
- * @return paint
- */
- FeatureTiles.prototype.getPolygonPaint = function(featureStyle) {
- var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE);
- if (paint == null) {
- paint = this.polygonPaint;
- }
- return paint;
- };
- /**
- * Get the polygon fill paint for the feature style, or return the default
- * paint
- * @param featureStyle feature style
- * @return paint
- */
- FeatureTiles.prototype.getPolygonFillPaint = function(featureStyle) {
- var paint = null;
- var hasStyleColor = false;
- if (featureStyle != null) {
- var style = featureStyle.getStyle();
- if (style != null) {
- if (style.hasFillColor()) {
- paint = this.getStylePaint(style, FeatureDrawType.FILL);
- } else {
- hasStyleColor = style.hasColor();
- }
- }
- }
- if (paint === null && !hasStyleColor && this.fillPolygon) {
- paint = this.polygonFillPaint;
- }
- return paint;
- };
- /**
- * Get the feature style paint from cache, or create and cache it
- * @param featureStyle feature style
- * @param drawType draw type
- * @return feature style paint
- */
- FeatureTiles.prototype.getFeatureStylePaint = function(featureStyle, drawType) {
- var paint = null;
- if (featureStyle != null) {
- var style = featureStyle.getStyle();
- if (style !== null && style.hasColor()) {
- paint = this.getStylePaint(style, drawType);
- }
- }
- return paint;
- };
- /**
- * Get the style paint from cache, or create and cache it
- * @param style style row
- * @param drawType draw type
- * @return {Paint} paint
- */
- FeatureTiles.prototype.getStylePaint = function(style, drawType) {
- var paint = this.featurePaintCache.getPaintForStyleRow(style, drawType);
- if (paint === undefined || paint === null) {
- var color = null;
- var strokeWidth = null;
- if (drawType === FeatureDrawType.CIRCLE) {
- color = style.getColor();
- } else if (drawType === FeatureDrawType.STROKE) {
- color = style.getColor();
- strokeWidth = this.scale * style.getWidthOrDefault();
- } else if (drawType === FeatureDrawType.FILL) {
- color = style.getFillColor();
- strokeWidth = this.scale * style.getWidthOrDefault();
- } else {
- throw new Error("Unsupported Draw Type: " + drawType);
- }
- var stylePaint = new Paint();
- stylePaint.setColor(color);
- if (strokeWidth !== null) {
- stylePaint.setStrokeWidth(strokeWidth);
- }
- paint = this.featurePaintCache.getPaintForStyleRow(style, drawType);
- if (paint === undefined || paint === null) {
- this.featurePaintCache.setPaintForStyleRow(style, drawType, stylePaint);
- paint = stylePaint;
- }
- }
- return paint;
- };
- /**
- * Get the point radius
- * @return {Number} radius
- */
- FeatureTiles.prototype.getPointRadius = function() {
- return this.pointRadius;
- };
- /**
- * Set the point radius
- * @param {Number} pointRadius point radius
- */
- FeatureTiles.prototype.setPointRadius = function(pointRadius) {
- this.pointRadius = pointRadius;
- };
- /**
- * Get point color
- * @return {String} color
- */
- FeatureTiles.prototype.getPointColor = function() {
- return this.pointPaint.getColor();
- };
- /**
- * Set point color
- * @param {String} pointColor point color
- */
- FeatureTiles.prototype.setPointColor = function(pointColor) {
- this.pointPaint.setColor(pointColor);
- };
- /**
- * Get the point icon
- * @return {module:tiles/features.FeatureTilePointIcon} icon
- */
- FeatureTiles.prototype.getPointIcon = function() {
- return this.pointIcon;
- };
- /**
- * Set the point icon
- * @param {module:tiles/features.FeatureTilePointIcon} pointIcon point icon
- */
- FeatureTiles.prototype.setPointIcon = function(pointIcon) {
- this.pointIcon = pointIcon;
- };
- /**
- * Get line stroke width
- * @return {Number} width
- */
- FeatureTiles.prototype.getLineStrokeWidth = function() {
- return this.lineStrokeWidth;
- };
- /**
- * Set line stroke width
- * @param {Number} lineStrokeWidth line stroke width
- */
- FeatureTiles.prototype.setLineStrokeWidth = function(lineStrokeWidth) {
- this.lineStrokeWidth = lineStrokeWidth;
- this.linePaint.setStrokeWidth(this.scale * this.lineStrokeWidth);
- };
- /**
- * Get line color
- * @return {String} color
- */
- FeatureTiles.prototype.getLineColor = function() {
- return this.linePaint.getColor();
- };
- /**
- * Set line color
- * @param {String} lineColor line color
- */
- FeatureTiles.prototype.setLineColor = function(lineColor) {
- this.linePaint.setColor(lineColor);
- };
- /**
- * Get polygon stroke width
- * @return {Number} width
- */
- FeatureTiles.prototype.getPolygonStrokeWidth = function() {
- return this.polygonStrokeWidth;
- };
- /**
- * Set polygon stroke width
- * @param {Number} polygonStrokeWidth polygon stroke width
- */
- FeatureTiles.prototype.setPolygonStrokeWidth = function(polygonStrokeWidth) {
- this.polygonStrokeWidth = polygonStrokeWidth;
- this.polygonPaint.setStrokeWidth(this.scale * this.polygonStrokeWidth);
- };
- /**
- * Get polygon color
- * @return {String} color
- */
- FeatureTiles.prototype.getPolygonColor = function() {
- return this.polygonPaint.getColor();
- };
- /**
- * Set polygon color
- * @param {String} polygonColor polygon color
- */
- FeatureTiles.prototype.setPolygonColor = function(polygonColor) {
- this.polygonPaint.setColor(polygonColor);
- };
- /**
- * Is fill polygon
- * @return {Boolean} true if fill polygon
- */
- FeatureTiles.prototype.isFillPolygon = function() {
- return this.fillPolygon;
- };
- /**
- * Set the fill polygon
- * @param {Boolean} fillPolygon fill polygon
- */
- FeatureTiles.prototype.setFillPolygon = function(fillPolygon) {
- this.fillPolygon = fillPolygon;
- };
- /**
- * Get polygon fill color
- * @return {String} color
- */
- FeatureTiles.prototype.getPolygonFillColor = function() {
- return this.polygonFillPaint.getColor();
- };
- /**
- * Set polygon fill color
- * @param {String} polygonFillColor polygon fill color
- */
- FeatureTiles.prototype.setPolygonFillColor = function(polygonFillColor) {
- this.polygonFillPaint.setColor(polygonFillColor);
- };
- /**
- * Get the max features per tile
- * @return {Number} max features per tile or null
- */
- FeatureTiles.prototype.getMaxFeaturesPerTile = function() {
- return this.maxFeaturesPerTile;
- };
- /**
- * Set the max features per tile. When more features are returned in a query
- * to create a single tile, the tile is not created.
- * @param {Number} maxFeaturesPerTile max features per tile
- */
- FeatureTiles.prototype.setMaxFeaturesPerTile = function(maxFeaturesPerTile) {
- this.maxFeaturesPerTile = maxFeaturesPerTile;
- };
- /**
- * Get the max features tile draw, the custom tile drawing implementation
- * for tiles with more features than the max at #getMaxFeaturesPerTile
- * @return {module:tiles/features/custom~CustomFeatureTile} max features tile draw or null
- */
- FeatureTiles.prototype.getMaxFeaturesTileDraw = function() {
- return this.maxFeaturesTileDraw;
- };
- /**
- * Set the max features tile draw, used to draw tiles when more features for
- * a single tile than the max at #getMaxFeaturesPerTile exist
- * @param {module:tiles/features/custom~CustomFeatureTile} maxFeaturesTileDraw max features tile draw
- */
- FeatureTiles.prototype.setMaxFeaturesTileDraw = function(maxFeaturesTileDraw) {
- this.maxFeaturesTileDraw = maxFeaturesTileDraw;
- };
- FeatureTiles.prototype.drawTile = function (x, y, z, canvas = null) {
- var indexed = this.featureDao.isIndexed();
- if (indexed) {
- return this.drawTileQueryIndex(x, y, z, canvas);
- } else {
- return this.drawTileQueryAll(x, y, z, canvas);
- }
- };
- FeatureTiles.prototype.drawTileQueryAll = function(x, y, zoom, canvas) {
- var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);
- boundingBox = this.expandBoundingBox(boundingBox);
- var count = this.featureDao.getCount();
- if (this.maxFeaturesPerTile === null || count <= this.maxFeaturesPerTile) {
- return this.drawTileWithBoundingBox(boundingBox, zoom, canvas);
- } else if (this.maxFeaturesTileDraw !== null) {
- return this.maxFeaturesTileDraw.drawUnindexedTile(256, 256, canvas);
- }
- };
- FeatureTiles.prototype.drawTileQueryIndex = async function(x, y, z, tileCanvas) {
- var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z);
- var expandedBoundingBox = this.expandBoundingBox(boundingBox);
- var width = 256;
- var height = 256;
- var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << z), width * (1 << z));
- var xTranslate = -positionAndScale.xPositionInFinalTileStart;
- var yTranslate = -positionAndScale.yPositionInFinalTileStart;
- var pi = Math.PI,
- tau = 2 * pi;
- var drawProjection = d3geo.geoMercator()
- .scale((1 << z) * 256 / tau)
- .center([-180, 85.0511287798066])
- .translate([xTranslate, yTranslate]);
- var canvas;
- if (tileCanvas !== null) {
- canvas = tileCanvas;
- }
- var context;
- if (canvas === undefined || canvas === null) {
- if (this.useNodeCanvas) {
- var Canvas = require('canvas');
- canvas = Canvas.createCanvas(width, height);
- } else {
- canvas = document.createElement('canvas');
- canvas.width = width;
- canvas.height = height;
- }
- }
- context = canvas.getContext('2d');
- context.clearRect(0, 0, width, height);
- var srs = this.featureDao.getSrs();
- var tileCount = this.featureDao.countWebMercatorBoundingBox(expandedBoundingBox);
- if (this.maxFeaturesPerTile === null || tileCount <= this.maxFeaturesPerTile) {
- var iterator = this.featureDao.fastQueryWebMercatorBoundingBox(expandedBoundingBox);
- var geojsonFeatures = []
- for (var featureRow of iterator) {
- geojsonFeatures.push(featureRow.getGeometry().geometry.toGeoJSON());
- }
- for (var gj of geojsonFeatures) {
- var style = this.getFeatureStyle(featureRow);
- if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) {
- gj = reproject.toWgs84(gj, this.featureDao.projection);
- }
- await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style);
- }
- return new Promise(function(resolve, reject) {
- if (this.useNodeCanvas) {
- var writeStream = concat(function (buffer) {
- resolve(buffer);
- });
- var stream = null;
- if (this.compressFormat === 'png') {
- stream = canvas.createPNGStream();
- } else {
- stream = canvas.createJPEGStream();
- }
- stream.pipe(writeStream);
- } else {
- resolve(canvas.toDataURL('image/' + this.compressFormat));
- }
- }.bind(this));
- } else if (this.maxFeaturesTileDraw !== null) {
- // Draw the max features tile
- return this.maxFeaturesTileDraw.drawTile(width, height, tileCount, canvas);
- }
- };
- FeatureTiles.prototype.drawTileWithBoundingBox = async function(boundingBox, zoom, tileCanvas) {
- var width = 256;
- var height = 256;
- var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << zoom), width * (1 << zoom));
- var xTranslate = -positionAndScale.xPositionInFinalTileStart;
- var yTranslate = -positionAndScale.yPositionInFinalTileStart;
- var pi = Math.PI,
- tau = 2 * pi;
- var drawProjection = d3geo.geoMercator()
- .scale((1 << zoom) * 256 / tau)
- .center([-180, 85.0511287798066])
- .translate([xTranslate, yTranslate]);
- var canvas;
- if (tileCanvas !== null) {
- canvas = tileCanvas;
- }
- var context;
- if (canvas === undefined || canvas === null) {
- if (this.useNodeCanvas) {
- var Canvas = require('canvas');
- canvas = Canvas.createCanvas(width, height);
- } else {
- canvas = document.createElement('canvas');
- canvas.width = width;
- canvas.height = height;
- }
- }
- context = canvas.getContext('2d');
- context.clearRect(0, 0, width, height);
- var featureDao = this.featureDao;
- var srs = featureDao.getSrs();
- var each = featureDao.queryForEach();
- var featureRows = [];
- for (var row of each) {
- featureRows.push(featureDao.getRow(row));
- }
- for (var fr of featureRows) {
- var gj = fr.getGeometry().geometry.toGeoJSON();
- var style = this.getFeatureStyle(fr);
- if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) {
- gj = reproject.toWgs84(gj, featureDao.projection);
- }
- await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style);
- }
- return new Promise(function(resolve, reject) {
- if (this.useNodeCanvas) {
- var writeStream = concat(function (buffer) {
- resolve(buffer);
- });
- var stream = null;
- if (this.compressFormat === 'png') {
- stream = canvas.createPNGStream();
- } else {
- stream = canvas.createJPEGStream();
- }
- stream.pipe(writeStream);
- } else {
- resolve(canvas.toDataURL('image/' + this.compressFormat));
- }
- }.bind(this));
- };
- /**
- * Draw a point in the context
- * @param path
- * @param geoJson
- * @param context
- * @param boundingBox
- * @param featureStyle
- * @param drawProjection
- */
- FeatureTiles.prototype.drawPoint = async function(path, geoJson, context, boundingBox, featureStyle, drawProjection) {
- var width;
- var height;
- var iconX;
- var iconY;
- var transformedCoords = drawProjection([geoJson.coordinates[0], geoJson.coordinates[1]]);
- var x = transformedCoords[0];
- var y = transformedCoords[1];
- if (featureStyle !== undefined && featureStyle !== null && featureStyle.hasIcon()) {
- var iconRow = featureStyle.getIcon();
- var image = await iconRow.getDataImage(iconRow);
- width = Math.round(this.scale * iconRow.getWidth());
- height = Math.round(this.scale * iconRow.getHeight());
- if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height && y <= this.tileHeight + height) {
- var anchorU = iconRow.getAnchorUOrDefault();
- var anchorV = iconRow.getAnchorVOrDefault();
- iconX = Math.round(x - (anchorU * width));
- iconY = Math.round(y - (anchorV * height));
- context.drawImage(image, iconX, iconY, width, height);
- }
- } else if (this.pointIcon !== undefined && this.pointIcon !== null) {
- width = Math.round(this.scale * this.pointIcon.getWidth());
- height = Math.round(this.scale * this.pointIcon.getHeight());
- if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height
- && y <= this.tileHeight + height) {
- iconX = Math.round(x - this.scale * this.pointIcon.getXOffset());
- iconY = Math.round(y - this.scale * this.pointIcon.getYOffset());
- ImageUtils.scaleBitmap(this.pointIcon.getIcon(), this.scale).then((image) => {
- context.drawImage(image, iconX, iconY, width, height);
- });
- }
- } else {
- context.save();
- var radius = null;
- if (featureStyle !== undefined && featureStyle !== null) {
- var styleRow = featureStyle.getStyle();
- if (styleRow !== undefined && styleRow !== null) {
- radius = this.scale * (styleRow.getWidthOrDefault() / 2.0);
- }
- }
- if (radius == null) {
- radius = this.scale * this.pointRadius;
- }
- var pointPaint = this.getPointPaint(featureStyle);
- if (x >= 0 - radius && x <= this.tileWidth + radius && y >= 0 - radius && y <= this.tileHeight + radius) {
- var circleX = Math.round(x);
- var circleY = Math.round(y);
- context.beginPath();
- context.arc(circleX, circleY, radius, 0, 2 * Math.PI, true);
- context.closePath()
- context.fillStyle = pointPaint.getColorRGBA();
- context.fill();
- }
- context.restore();
- }
- };
- /**
- * Draw a line in the context
- * @param path
- * @param geoJson
- * @param context
- * @param featureStyle
- */
- FeatureTiles.prototype.drawLine = function(path, geoJson, context, featureStyle) {
- context.save();
- context.beginPath();
- var paint = this.getLinePaint(featureStyle);
- context.strokeStyle = paint.getColorRGBA();
- context.lineWidth = paint.getStrokeWidth();
- path(geoJson);
- context.stroke();
- context.closePath();
- context.restore();
- };
- /**
- * Draw a polygon in the context
- * @param path
- * @param geoJson
- * @param context
- * @param featureStyle
- */
- FeatureTiles.prototype.drawPolygon = function(path, geoJson, context, featureStyle) {
- context.save();
- context.beginPath();
- path(PolyToLine(geoJson).geometry);
- context.closePath();
- var fillPaint = this.getPolygonFillPaint(featureStyle);
- if (fillPaint !== undefined && fillPaint !== null) {
- context.fillStyle = fillPaint.getColorRGBA();
- context.fill();
- }
- var paint = this.getPolygonPaint(featureStyle);
- context.strokeStyle = paint.getColorRGBA();
- context.lineWidth = paint.getStrokeWidth();
- context.stroke();
- context.restore();
- };
- /**
- * Add a feature to the batch
- * @param geoJson
- * @param context
- * @param drawProjection
- * @param boundingBox
- * @param featureStyle
- */
- FeatureTiles.prototype.addFeatureToBatch = async function(geoJson, context, drawProjection, boundingBox, featureStyle) {
- var path = new d3geo.geoPath()
- .context(context)
- .projection(drawProjection);
- var i, c;
- if (geoJson.type === 'Point') {
- await this.drawPoint(path, geoJson, context, boundingBox, featureStyle, drawProjection);
- } else if (geoJson.type === 'LineString') {
- this.drawLine(path, geoJson, context, featureStyle);
- } else if (geoJson.type === 'Polygon') {
- this.drawPolygon(path, geoJson, context, featureStyle);
- } else if (geoJson.type === 'MultiPoint') {
- for (i = 0; i < geoJson.coordinates.length; i++) {
- c = geoJson.coordinates[i];
- var ptGeom = {
- type: 'Point',
- coordinates: c
- };
- await this.drawPoint(path, ptGeom, context, boundingBox, featureStyle, drawProjection);
- }
- } else if (geoJson.type === 'MultiLineString') {
- for (i = 0; i < geoJson.coordinates.length; i++) {
- c = geoJson.coordinates[i];
- var lsGeom = {
- type: 'LineString',
- coordinates: c
- };
- this.drawLine(path, lsGeom, context, featureStyle);
- }
- } else if (geoJson.type === 'MultiPolygon') {
- for (i = 0; i < geoJson.coordinates.length; i++) {
- c = geoJson.coordinates[i];
- var pGeom = {
- type: 'Polygon',
- coordinates: c
- };
- this.drawPolygon(path, pGeom, context, featureStyle);
- }
- }
- };
- /**
- * Create an expanded bounding box to handle features outside the tile that overlap
- * @param webMercatorBoundingBox web mercator bounding box
- * @return {BoundingBox} bounding box
- */
- FeatureTiles.prototype.expandBoundingBox = function(webMercatorBoundingBox) {
- return this.expandWebMercatorBoundingBox(webMercatorBoundingBox, webMercatorBoundingBox);
- };
- /**
- * Create an expanded bounding box to handle features outside the tile that overlap
- * @param webMercatorBoundingBox web mercator bounding box
- * @param tileWebMercatorBoundingBox tile web mercator bounding box
- * @return {BoundingBox} bounding box
- */
- FeatureTiles.prototype.expandWebMercatorBoundingBox = function(webMercatorBoundingBox, tileWebMercatorBoundingBox) {
- // Create an expanded bounding box to handle features outside the tile that overlap
- var minLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.widthOverlap);
- var maxLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox, this.tileWidth + this.widthOverlap);
- var maxLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.heightOverlap);
- var minLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, this.tileHeight + this. heightOverlap);
- // Choose the most expanded longitudes and latitudes
- minLongitude = Math.min(minLongitude, webMercatorBoundingBox.minLongitude);
- maxLongitude = Math.max(maxLongitude, webMercatorBoundingBox.maxLongitude);
- minLatitude = Math.min(minLatitude, webMercatorBoundingBox.minLatitude);
- maxLatitude = Math.max(maxLatitude, webMercatorBoundingBox.maxLatitude);
- // Bound with the web mercator limits
- minLongitude = Math.max(minLongitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);
- maxLongitude = Math.min(maxLongitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);
- minLatitude = Math.max(minLatitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);
- maxLatitude = Math.min(maxLatitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);
- return new BoundingBox(minLongitude, maxLongitude, minLatitude, maxLatitude);
- };
- module.exports = FeatureTiles;
- }).call(this,require('_process'))
- },{"../../boundingBox":7,"../../extension/style/featureTableStyles":48,"../../extension/style/iconCache":49,"../imageUtils":89,"../tileBoundingBoxUtils":93,"./featureDrawType":84,"./featurePaintCache":86,"./paint":88,"@turf/polygon-to-line":131,"_process":284,"canvas":undefined,"concat-stream":185,"d3-geo":194,"reproject":315}],88:[function(require,module,exports){
- /**
- * Paint module.
- * @module tiles/features
- */
- var Paint = function () {
- this.color = '#000000FF';
- this.strokeWidth = 1.0;
- };
- /**
- * Get the color
- * @returns {String} color
- */
- Paint.prototype.getColor = function() {
- return this.color;
- };
- /**
- * Get the color
- * @returns {String} color
- */
- Paint.prototype.getColorRGBA = function() {
- // assumes color is in the format #RRGGBB or #RRGGBBAA
- var red = parseInt(this.color.substr(1,2), 16);
- var green = parseInt(this.color.substr(3,2), 16);
- var blue = parseInt(this.color.substr(5,2), 16);
- var alpha = 1.0;
- if (this.color.length > 7) {
- alpha = parseInt(this.color.substr(7,2), 16) / 255;
- }
- return 'rgba(' + red + ',' + green + ',' + blue + ',' + alpha + ')';
- };
- /**
- * Set the color
- * @param {String} color
- */
- Paint.prototype.setColor = function(color) {
- this.color = color;
- };
- /**
- * Get the stroke width
- * @returns {Number} strokeWidth
- */
- Paint.prototype.getStrokeWidth = function() {
- return this.strokeWidth;
- };
- /**
- * Set the stroke width
- * @param {Number} strokeWidth
- */
- Paint.prototype.setStrokeWidth = function(strokeWidth) {
- this.strokeWidth = strokeWidth;
- };
- module.exports = Paint;
- },{}],89:[function(require,module,exports){
- (function (process,Buffer){
- var sizeOf = require('image-size');
- var ImageUtils = {};
- var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1);
- var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom);
- var isNode = typeof(process) !== 'undefined' && process.version;
- ImageUtils.useNodeCanvas = isNode && !isPhantom && !isElectron;
- /**
- * Get image for data
- * @param {Buffer|String} data file data or file path
- * @returns {Object}
- */
- ImageUtils.getImageSize = function (data) {
- return sizeOf(data);
- };
- /**
- * Get image for data
- * @param {Buffer|String} data file data or file path
- * @param {String} contentType
- * @returns {Promise<Image>}
- */
- ImageUtils.getImage = function (data, contentType = 'image/png') {
- return new Promise(function (resolve, reject) {
- var image;
- if (ImageUtils.useNodeCanvas) {
- var Canvas = require('canvas');
- image = new Canvas.Image();
- } else {
- image = new Image();
- }
- image.onload = () => {
- resolve(image);
- };
- image.onerror = (error) => {
- reject(error);
- };
- var src = data;
- if (data instanceof Buffer) {
- src = 'data:' + contentType + ';base64,' + data.toString('base64');
- }
- image.src = src;
- }.bind(this));
- };
- /**
- * Get a scaled image
- * @param {Buffer} data
- * @param {Number} scale
- * @returns {Promise<Image>}
- */
- ImageUtils.getScaledImage = function (data, scale) {
- return ImageUtils.getImage(data).then(function (image) {
- return ImageUtils.scaleBitmap(image, scale);
- }.bind(this));
- };
- /**
- * Get a scaled image
- * @param {Image} image
- * @param {Number} scale
- * @returns {Promise<Image>}
- */
- ImageUtils.scaleBitmap = function (image, scale) {
- if (scale === 1.0) {
- return Promise.resolve(image);
- } else {
- var iconWidth = image.width;
- var iconHeight = image.height;
- var scaledWidth = Math.round(scale * iconWidth);
- var scaledHeight = Math.round(scale * iconHeight);
- var canvas, ctx, img;
- if (ImageUtils.useNodeCanvas) {
- var Canvas = require('canvas');
- canvas = Canvas.createCanvas(scaledWidth, scaledHeight);
- img = new Canvas.Image();
- } else {
- canvas = document.createElement('canvas');
- canvas.width = scaledWidth;
- canvas.height = scaledHeight;
- img = new Image();
- }
- ctx = canvas.getContext('2d');
- ctx.drawImage(image, 0, 0, iconWidth, iconHeight, 0, 0, scaledWidth, scaledHeight);
- return new Promise(function (resolve) {
- img.onload = () => { resolve(img); };
- img.src = canvas.toDataURL();
- }.bind(this));
- }
- };
- module.exports = ImageUtils;
- }).call(this,require('_process'),require("buffer").Buffer)
- },{"_process":284,"buffer":182,"canvas":undefined,"image-size":244}],90:[function(require,module,exports){
- /**
- * @module tiles/matrix
- * @see module:dao/dao
- */
- var Dao = require('../../dao/dao')
- // , ContentsDao = require('../../core/contents').ContentsDao
- , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao;
- var util = require('util');
- /**
- * Tile Matrix object. Documents the structure of the tile matrix at each zoom
- * level in each tiles table. It allows GeoPackages to contain rectangular as
- * well as square tiles (e.g. for better representation of polar regions). It
- * allows tile pyramids with zoom levels that differ in resolution by factors of
- * 2, irregular intervals, or regular intervals other than factors of 2.
- * @class TileMatrix
- */
- var TileMatrix = function() {
- /**
- * Tile Pyramid User Data Table Name
- * @member {string}
- */
- this.table_name;
- /**
- * 0 ⇐ zoom_level ⇐ max_level for table_name
- * @member {Number}
- */
- this.zoom_level;
- /**
- * Number of columns (>= 1) in tile matrix at this zoom level
- * @member {Number}
- */
- this.matrix_width;
- /**
- * Number of rows (>= 1) in tile matrix at this zoom level
- * @member {Number}
- */
- this.matrix_height;
- /**
- * Tile width in pixels (>= 1)for this zoom level
- * @member {Number}
- */
- this.tile_width;
- /**
- * Tile height in pixels (>= 1)for this zoom level
- * @member {Number}
- */
- this.tile_height;
- /**
- * In t_table_name srid units or default meters for srid 0 (>0)
- * @member {Number}
- */
- this.pixel_x_size;
- /**
- * In t_table_name srid units or default meters for srid 0 (>0)
- * @member {Number}
- */
- this.pixel_y_size;
- };
- /**
- * Tile Matrix Set Data Access Object
- * @class TileMatrixDao
- * @extends {module:dao/dao~Dao}
- */
- var TileMatrixDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- }
- util.inherits(TileMatrixDao, Dao);
- TileMatrixDao.prototype.createObject = function () {
- return new TileMatrix();
- };
- /**
- * get the Contents of the Tile matrix
- * @param {tileMatrix} tileMatrix the tile matrix
- * @param {Function} callback returns the contents
- */
- TileMatrixDao.prototype.getContents = function (tileMatrix) {
- var dao = this.geoPackage.getContentsDao();
- return dao.queryForId(tileMatrix.table_name);
- };
- TileMatrixDao.prototype.getTileMatrixSet = function (tileMatrix) {
- var dao = this.geoPackage.getTileMatrixSetDao();
- return dao.queryForId(tileMatrix.table_name);
- };
- TileMatrixDao.TABLE_NAME = "gpkg_tile_matrix";
- TileMatrixDao.COLUMN_PK1 = "table_name";
- TileMatrixDao.COLUMN_PK2 = "zoom_level";
- TileMatrixDao.COLUMN_TABLE_NAME = "table_name";
- TileMatrixDao.COLUMN_ZOOM_LEVEL = "zoom_level";
- TileMatrixDao.COLUMN_MATRIX_WIDTH = "matrix_width";
- TileMatrixDao.COLUMN_MATRIX_HEIGHT = "matrix_height";
- TileMatrixDao.COLUMN_TILE_WIDTH = "tile_width";
- TileMatrixDao.COLUMN_TILE_HEIGHT = "tile_height";
- TileMatrixDao.COLUMN_PIXEL_X_SIZE = "pixel_x_size";
- TileMatrixDao.COLUMN_PIXEL_Y_SIZE = "pixel_y_size";
- TileMatrix.TABLE_NAME = 'tableName';
- TileMatrix.ZOOM_LEVEL = 'zoomLevel';
- TileMatrix.MATRIX_WIDTH = 'matrixWidth';
- TileMatrix.MATRIX_HEIGHT = 'matrixHeight';
- TileMatrix.TILE_WIDTH = 'tileWidth';
- TileMatrix.TILE_HEIGHT = 'tileHeight';
- TileMatrix.PIXEL_X_SIZE = 'pixelXSize';
- TileMatrix.PIXEL_Y_SIZE = 'pixelYSize';
- TileMatrixDao.prototype.gpkgTableName = 'gpkg_tile_matrix';
- TileMatrixDao.prototype.idColumns = [TileMatrixDao.COLUMN_PK1, TileMatrixDao.COLUMN_PK2];
- TileMatrixDao.prototype.columns = [TileMatrixDao.COLUMN_TABLE_NAME, TileMatrixDao.COLUMN_ZOOM_LEVEL, TileMatrixDao.COLUMN_MATRIX_WIDTH, TileMatrixDao.COLUMN_MATRIX_HEIGHT, TileMatrixDao.COLUMN_TILE_WIDTH, TileMatrixDao.COLUMN_TILE_HEIGHT, TileMatrixDao.COLUMN_PIXEL_X_SIZE, TileMatrixDao.COLUMN_PIXEL_Y_SIZE];
- module.exports.TileMatrixDao = TileMatrixDao;
- module.exports.TileMatrix = TileMatrix;
- },{"../../dao/dao":11,"../matrixset":91,"util":343}],91:[function(require,module,exports){
- /**
- * @module tiles/matrixset
- * @see module:dao/dao
- */
- var Dao = require('../../dao/dao')
- , BoundingBox = require('../../boundingBox')
- , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao;
- // , ContentsDao = require('../../core/contents').ContentsDao;
- var util = require('util');
- /**
- * `TileMatrixSet` models the [`gpkg_tile_matrix_set`](https://www.geopackage.org/spec121/index.html#_tile_matrix_set)
- * table. A row in this table defines the minimum bounding box (min_x, min_y,
- * max_x, max_y) and spatial reference system (srs_id) for all tiles in a
- * [tile pyramid](https://www.geopackage.org/spec121/index.html#tiles_user_tables)
- * user data table. While the parent [Contents]{@link module:core/contents~Contents}
- * row/object also defines a bounding box, the tile matrix set bounding box is
- * used as the reference for calculating tile column/row matrix coordinates, so
- * (min_x, max_y) in SRS coordinates would be the upper-left corner of the tile
- * at tile matrix coordinate (0, 0). The parent `Contents` bounding box may be
- * smaller or larger than the `TileMatrixSet` bounding box, and its purpose is
- * to guide a user-facing application to the target region of the tile pyramid.
- * The [`srs_id`]{@link module:tiles/matrixset~TileMatrixSet#srs_id} of the `TileMatrixSet`, on the other hand, must
- * match that of the parent [`Contents`]{@link module:core/contents~Contents#srs_id}.
- *
- * @class TileMatrixSet
- */
- var TileMatrixSet = function() {
- /**
- * Name of the [tile pyramid user data table](https://www.geopackage.org/spec121/index.html#tiles_user_tables)
- * that stores the tiles
- * @member {string}
- */
- this.table_name;
- /**
- * Unique identifier for each Spatial Reference System within a GeoPackage
- * @member {SRSRef}
- */
- this.srs_id;
- /**
- * Bounding box minimum easting or longitude for all content in table_name
- * @member {Number}
- */
- this.min_x;
- /**
- * Bounding box minimum northing or latitude for all content in table_name
- * @member {Number}
- */
- this.min_y;
- /**
- * Bounding box maximum easting or longitude for all content in table_name
- * @member {Number}
- */
- this.max_x;
- /**
- * Bounding box maximum northing or latitude for all content in table_name
- * @member {Number}
- */
- this.max_y;
- };
- TileMatrixSet.prototype.setBoundingBox = function (boundingBox) {
- this.min_x = boundingBox.minLongitude;
- this.max_x = boundingBox.maxLongitude;
- this.min_y = boundingBox.minLatitude;
- this.max_y = boundingBox.maxLatitude;
- };
- TileMatrixSet.prototype.getBoundingBox = function () {
- return new BoundingBox(this.min_x, this.max_x, this.min_y, this.max_y);
- };
- TileMatrixSet.prototype.setContents = function(contents) {
- if (contents && contents.data_type === 'tiles') {
- this.table_name = contents.table_name;
- }
- }
- /**
- * Tile Matrix Set Data Access Object
- * @class TileMatrixSetDao
- * @extends {module:dao/dao~Dao}
- */
- var TileMatrixSetDao = function(geoPackage) {
- Dao.call(this, geoPackage);
- }
- util.inherits(TileMatrixSetDao, Dao);
- TileMatrixSetDao.prototype.createObject = function () {
- return new TileMatrixSet();
- };
- /**
- * Get the tile table names
- * @param {Function} callback returns the tile table names
- */
- TileMatrixSetDao.prototype.getTileTables = function () {
- var tableNames = [];
- for (var result of this.connection.each('select ' + TileMatrixSetDao.COLUMN_TABLE_NAME + ' from ' + TileMatrixSetDao.TABLE_NAME)) {
- tableNames.push(result[TileMatrixSetDao.COLUMN_TABLE_NAME]);
- }
- return tableNames;
- };
- TileMatrixSetDao.prototype.getProjection = function (tileMatrixSet) {
- var srs = this.getSrs(tileMatrixSet);
- if (!srs) return;
- var srsDao = this.geoPackage.getSpatialReferenceSystemDao();
- return srsDao.getProjection(srs);
- };
- /**
- * Get the Spatial Reference System of the Tile Matrix set
- * @param {TileMatrixSet} tileMatrixSet tile matrix set
- */
- TileMatrixSetDao.prototype.getSrs = function (tileMatrixSet) {
- var dao = this.geoPackage.getSpatialReferenceSystemDao();
- return dao.queryForId(tileMatrixSet.srs_id);
- };
- TileMatrixSetDao.prototype.getContents = function (tileMatrixSet) {
- var dao = this.geoPackage.getContentsDao();
- return dao.queryForId(tileMatrixSet.table_name);
- };
- TileMatrixSet.TABLE_NAME = "tableName";
- TileMatrixSet.MIN_X = "minX";
- TileMatrixSet.MIN_Y = "minY";
- TileMatrixSet.MAX_X = "maxX";
- TileMatrixSet.MAX_Y = "maxY";
- TileMatrixSet.SRS_ID = "srsId";
- TileMatrixSetDao.TABLE_NAME = "gpkg_tile_matrix_set";
- TileMatrixSetDao.COLUMN_PK = "table_name";
- TileMatrixSetDao.COLUMN_TABLE_NAME = "table_name";
- TileMatrixSetDao.COLUMN_SRS_ID = "srs_id";
- TileMatrixSetDao.COLUMN_MIN_X = "min_x";
- TileMatrixSetDao.COLUMN_MIN_Y = "min_y";
- TileMatrixSetDao.COLUMN_MAX_X = "max_x";
- TileMatrixSetDao.COLUMN_MAX_Y = "max_y";
- TileMatrixSetDao.prototype.gpkgTableName = 'gpkg_tile_matrix_set';
- TileMatrixSetDao.prototype.idColumns = [TileMatrixSetDao.COLUMN_PK];
- TileMatrixSetDao.prototype.columns = [TileMatrixSetDao.COLUMN_TABLE_NAME, TileMatrixSetDao.COLUMN_SRS_ID, TileMatrixSetDao.COLUMN_MIN_X, TileMatrixSetDao.COLUMN_MIN_Y, TileMatrixSetDao.COLUMN_MAX_X, TileMatrixSetDao.COLUMN_MAX_Y];
- TileMatrixSetDao.prototype.columnToPropertyMap = {};
- TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_TABLE_NAME] = TileMatrixSet.TABLE_NAME;
- TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_SRS_ID] = TileMatrixSet.SRS_ID;
- TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_X] = TileMatrixSet.MIN_X;
- TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_Y] = TileMatrixSet.MIN_Y;
- TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_X] = TileMatrixSet.MAX_X;
- TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_Y] = TileMatrixSet.MAX_Y;
- module.exports.TileMatrixSetDao = TileMatrixSetDao;
- module.exports.TileMatrixSet = TileMatrixSet;
- },{"../../boundingBox":7,"../../core/srs":9,"../../dao/dao":11,"util":343}],92:[function(require,module,exports){
- var TileMatrixSetDao = require('../matrixset').TileMatrixSetDao
- , TileBoundingBoxUtils = require('../tileBoundingBoxUtils')
- , TileCreator = require('../creator')
- , BoundingBox = require('../../boundingBox');
- var proj4 = require('proj4');
- proj4 = 'default' in proj4 ? proj4['default'] : proj4;
- var GeoPackageTileRetriever = function(tileDao, width, height) {
- this.tileDao = tileDao;
- this.tileDao.adjustTileMatrixLengths();
- this.width = width;
- this.height = height;
- }
- module.exports = GeoPackageTileRetriever;
- GeoPackageTileRetriever.prototype.getWebMercatorBoundingBox = function () {
- if (this.setWebMercatorBoundingBox) {
- return this.setWebMercatorBoundingBox;
- } else {
- var tileMatrixSetDao = this.tileDao.geoPackage.getTileMatrixSetDao();
- var tileMatrixSet = this.tileDao.tileMatrixSet;
- var srs = tileMatrixSetDao.getSrs(tileMatrixSet);
- this.setProjectionBoundingBox = tileMatrixSet.getBoundingBox();
- if (srs.organization_coordsys_id === 4326 && srs.organization === 'EPSG') {
- this.setProjectionBoundingBox.minLatitude = Math.max(this.setProjectionBoundingBox.minLatitude, -85.05);
- this.setProjectionBoundingBox.maxLatitude = Math.min(this.setProjectionBoundingBox.maxLatitude, 85.05);
- }
- this.setWebMercatorBoundingBox = this.setProjectionBoundingBox.projectBoundingBox(this.tileDao.projection, 'EPSG:3857');
- return this.setWebMercatorBoundingBox;
- }
- };
- GeoPackageTileRetriever.prototype.hasTile = function (x, y, zoom) {
- var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);
- var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom);
- var iterator = this.retrieveTileResults(webMercatorBoundingBox, tileMatrix);
- var exists = false;
- for (var row of iterator) {
- exists = true;
- }
- return exists;
- };
- GeoPackageTileRetriever.prototype.getTile = function (x, y, zoom) {
- var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);
- var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);
- return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857');
- };
- GeoPackageTileRetriever.prototype.drawTileIn = function (x, y, zoom, canvas) {
- var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);
- var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);
- return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857', canvas);
- };
- GeoPackageTileRetriever.prototype.getTileWithWgs84Bounds = function (wgs84BoundingBox, zoom) {
- var webMercatorBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', 'EPSG:3857');
- var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);
- return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857');
- };
- GeoPackageTileRetriever.prototype.getTileWithWgs84BoundsInProjection = function (wgs84BoundingBox, zoom, targetProjection) {
- var targetBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', targetProjection);
- return this.getTileWithBounds(targetBoundingBox, zoom, targetProjection);
- };
- GeoPackageTileRetriever.prototype.getWebMercatorTile = function (x, y, zoom) {
- // need to determine the geoPackage zoom level from the web mercator zoom level
- var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);
- var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);
- return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857');
- };
- GeoPackageTileRetriever.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) {
- // find width and height of this tile in geopackage projection
- var proj4Projection = proj4(this.tileDao.projection, 'EPSG:3857');
- var ne = proj4Projection.inverse([webMercatorBoundingBox.maxLongitude, webMercatorBoundingBox.maxLatitude]);
- var sw = proj4Projection.inverse([webMercatorBoundingBox.minLongitude, webMercatorBoundingBox.minLatitude]);
- var width = (ne[0] - sw[0]);
- var height = (ne[1] - sw[1]);
- var gpZoom = undefined;
- // find the closest zoom for width
- for (var i = 0; i < this.tileDao.widths.length; i++) {
- var tileWidth = this.tileDao.widths[i];
- var difference = Math.abs(width - tileWidth);
- var tolerance = .001 * tileWidth;
- if (tileWidth <= width || difference <= tolerance) {
- gpZoom = this.tileDao.maxZoom - i;
- }
- }
- return gpZoom;
- };
- GeoPackageTileRetriever.prototype.getTileWithBounds = function (targetBoundingBox, zoom, targetProjection, canvas) {
- var tiles = [];
- var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom);
- if (!tileMatrix) return Promise.resolve();
- var tileWidth = tileMatrix.tile_width;
- var tileHeight = tileMatrix.tile_height;
- var matrixSetBoundsInTargetProjection = this.tileDao.tileMatrixSet.getBoundingBox().projectBoundingBox(this.tileDao.projection, targetProjection);
- var matrixTotalBoundingBox = this.tileDao.tileMatrixSet.getBoundingBox();
- var targetBoundingBoxInMatrixSetProjection = targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection);
- var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(matrixTotalBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, targetBoundingBoxInMatrixSetProjection);
- var creator = TileCreator.initialize(this.width || tileWidth, this.height || tileHeight, tileMatrix, this.tileDao.tileMatrixSet, targetBoundingBox, this.tileDao.srs, targetProjection, canvas);
- var iterator = this.retrieveTileResults(targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection), tileMatrix);
- for (var tile of iterator) {
- tiles.push({
- data: tile.getTileData(),
- gridColumn: tile.getTileColumn(),
- gridRow: tile.getRow()
- });
- }
- return tiles.reduce(function(sequence, tile) {
- return sequence.then(function() {
- return creator.addTile(tile.data, tile.gridColumn, tile.gridRow);
- });
- }, Promise.resolve())
- .then(function() {
- if (!canvas) {
- return creator.getCompleteTile('png');
- }
- });
- };
- GeoPackageTileRetriever.prototype.retrieveTileResults = function (tileMatrixProjectionBoundingBox, tileMatrix) {
- if(tileMatrix) {
- var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(this.tileDao.tileMatrixSet.getBoundingBox(), tileMatrix.matrix_width, tileMatrix.matrix_height, tileMatrixProjectionBoundingBox);
- return this.tileDao.queryByTileGrid(tileGrid, tileMatrix.zoom_level);
- } else {
- return Promise.resolve();
- }
- };
- },{"../../boundingBox":7,"../creator":79,"../matrixset":91,"../tileBoundingBoxUtils":93,"proj4":285}],93:[function(require,module,exports){
- /**
- * This module exports utility functions for [slippy map (XYZ)](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames)
- * tile calculations.
- *
- * @module tiles/tileBoundingBoxUtils
- */
- const BoundingBox = require('../boundingBox');
- const TileGrid = require('./tileGrid');
- const proj4 = ((proj4) => { return 'default' in proj4 ? proj4['default'] : proj4 })(require('proj4'));
- var WEB_MERCATOR_HALF_WORLD_WIDTH = proj4('EPSG:4326', 'EPSG:3857').forward([180, 0])[0];
- /**
- * Calculate the bounds in tile coordinates that covers the given bounding box
- * at the given zoom level. The result object contains the keys `minX`, `maxX`,
- * `minY`, and `maxY`, which are tile column and row values in the XYZ tile
- * scheme.
- *
- * @param {BoundingBox} webMercatorBoundingBox bounds in EPSG:3857 coordinates (meters)
- * @param {number} zoom the integral zoom level
- * @returns {{minX: number, maxX: number, minY: number, maxY: number}} bounds in tile column and row coordinates
- */
- module.exports.webMercatorTileBox = function(webMercatorBoundingBox, zoom) {
- var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom);
- var tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide);
- const minLonClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLongitude);
- const maxLonClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLongitude);
- const minLatClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLatitude);
- const maxLatClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLatitude);
- var minX = Math.floor((minLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize);
- var maxX = Math.max(0, Math.ceil((maxLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize) - 1);
- var minY = Math.floor((WEB_MERCATOR_HALF_WORLD_WIDTH - maxLatClip) / tileSize);
- var maxY = Math.max(0, Math.ceil((WEB_MERCATOR_HALF_WORLD_WIDTH - minLatClip) / tileSize) - 1);
- return {
- minX: minX,
- maxX: maxX,
- minY: minY,
- maxY: maxY
- };
- }
- module.exports.WEB_MERCATOR_HALF_WORLD_WIDTH = WEB_MERCATOR_HALF_WORLD_WIDTH;
- module.exports.determinePositionAndScale = function(geoPackageTileBoundingBox, tileHeight, tileWidth, totalBoundingBox, totalHeight, totalWidth) {
- var p = {};
- var finalTileWidth = totalBoundingBox.maxLongitude - totalBoundingBox.minLongitude;
- var xoffsetMin = geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude;
- var xpercentageMin = xoffsetMin / finalTileWidth;
- var finalTileHeight = totalBoundingBox.maxLatitude - totalBoundingBox.minLatitude;
- var yoffsetMax = totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude;
- var ypercentageMax = yoffsetMax / finalTileHeight;
- var gpTileWidth = geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude;
- var gpPixelsPerUnitWidth = tileWidth / gpTileWidth;
- var finalTilePixelsPerUnitWidth = totalWidth / finalTileWidth;
- var xPositionInFinalTileUnits = ((geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth);
- var widthInFinalTileUnits = Math.round(((geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth));
- var gpTileHeight = geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude;
- var gpPixelsPerUnitHeight = tileHeight / gpTileHeight;
- var finalTilePixelsPerUnitHeight = totalHeight / finalTileHeight;
- var yPositionInFinalTileUnits = ((totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude) * finalTilePixelsPerUnitHeight);
- var heightInFinalTileUnits = Math.round((geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude) * finalTilePixelsPerUnitHeight);
- p.yPositionInFinalTileStart = Math.round(ypercentageMax * totalHeight);
- p.xPositionInFinalTileStart = Math.round(xpercentageMin * totalWidth);
- p.dx = p.xPositionInFinalTileStart;
- p.dy = p.yPositionInFinalTileStart;
- p.sx = 0;
- p.sy = 0;
- p.dWidth = widthInFinalTileUnits;
- p.dHeight = heightInFinalTileUnits;
- p.sWidth = tileWidth;
- p.sHeight = tileHeight;
- return p;
- }
- /**
- * Calculate the bounds in EPSG:3857 coordinates of the tile at the given XYZ
- * coordinates coordinates and zoom level.
- *
- * @param {number} x tile column
- * @param {number} y tile row
- * @param {number} zoom zoom level
- * @return {BoundingBox} a bounding box in EPSG:3857 meters
- */
- module.exports.getWebMercatorBoundingBoxFromXYZ = function(x, y, zoom, options) {
- var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom);
- var tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide);
- var meterBuffer = 0;
- if (options && options.buffer && options.tileSize) {
- var pixelBuffer = options.buffer;
- var metersPerPixel = tileSize / options.tileSize;
- meterBuffer = metersPerPixel * pixelBuffer;
- }
- var minLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + (x * tileSize) - meterBuffer;
- var maxLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + ((x + 1) * tileSize) + meterBuffer;
- var minLat = WEB_MERCATOR_HALF_WORLD_WIDTH - ((y + 1) * tileSize) - meterBuffer;
- var maxLat = WEB_MERCATOR_HALF_WORLD_WIDTH - (y * tileSize) + meterBuffer;
- minLon = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLon);
- maxLon = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLon);
- minLat = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLat);
- maxLat = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLat);
- var box = new BoundingBox(minLon, maxLon, minLat, maxLat);
- return box;
- }
- /**
- * Get the tile size in meters
- *
- * @param tilesPerSide tiles per side
- *
- * @return meters
- */
- module.exports.tileSizeWithTilesPerSide = function(tilesPerSide) {
- return (2 * WEB_MERCATOR_HALF_WORLD_WIDTH) / tilesPerSide;
- }
- /**
- * Get the tiles per side, width and height, at the zoom level
- *
- * @param zoom zoom level
- *
- * @return tiles per side
- */
- module.exports.tilesPerSideWithZoom = function(zoom) {
- return 1 << zoom;
- }
- /**
- * Get the tile grid
- *
- * @param webMercatorTotalBox web mercator total bounding box
- * @param matrixWidth matrix width
- * @param matrixHeight matrix height
- * @param boundingBox bounding box
- *
- * @return tile grid
- */
- module.exports.getTileGridWithTotalBoundingBox = function(totalBoundingBox, matrixWidth, matrixHeight, boundingBox) {
- var minColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.minLongitude);
- var maxColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.maxLongitude, true);
- if (minColumn < matrixWidth && maxColumn >= 0) {
- if (minColumn < 0) {
- minColumn = 0;
- }
- if (maxColumn >= matrixWidth) {
- maxColumn = matrixWidth - 1;
- }
- }
- var maxRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.minLatitude, true);
- var minRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.maxLatitude);
- if(minRow < matrixHeight && maxRow >= 0){
- if(minRow < 0){
- minRow = 0;
- }
- if(maxRow >= matrixHeight){
- maxRow = matrixHeight - 1;
- }
- }
- var tileGrid = new TileGrid(minColumn, maxColumn, minRow, maxRow);
- return tileGrid;
- }
- /**
- * Get the tile column of the longitude in degrees
- *
- * @param webMercatorTotalBox web mercator total bounding box
- * @param matrixWidth matrix width
- * @param longitude longitude
- *
- * @return tile column
- */
- module.exports.getTileColumnWithTotalBoundingBox = function(webMercatorTotalBox, matrixWidth, longitude, max) {
- var minX = webMercatorTotalBox.minLongitude;
- var maxX = webMercatorTotalBox.maxLongitude;
- var tileId;
- if (longitude < minX) {
- tileId = -1;
- } else if (longitude >= maxX) {
- tileId = matrixWidth;
- } else {
- var matrixWidthMeters = maxX - minX;
- var tileWidth = matrixWidthMeters / matrixWidth;
- var tileIdDouble = ((longitude - minX) / tileWidth);
- tileId = ~~tileIdDouble;
- if (max) {
- // if the edge lands right on the calculated edge, subtract one
- if (tileIdDouble === tileId) {
- tileId--;
- }
- }
- }
- return tileId;
- }
- /**
- * Get the tile row of the latitude in degrees
- *
- * @param webMercatorTotalBox web mercator total bounding box
- * @param matrixHeight matrix height
- * @param latitude latitude
- *
- * @return tile row
- */
- module.exports.getRowWithTotalBoundingBox = function(webMercatorTotalBox, matrixHeight, latitude, max) {
- var minY = webMercatorTotalBox.minLatitude;
- var maxY = webMercatorTotalBox.maxLatitude;
- var tileId;
- if (latitude < minY) {
- tileId = matrixHeight;
- } else if (latitude >= maxY) {
- tileId = -1;
- } else {
- var matrixHeightMeters = maxY - minY;
- var tileHeight = matrixHeightMeters / matrixHeight;
- var tileIdDouble = ((maxY - latitude) / tileHeight);
- tileId = ~~tileIdDouble;
- if (max) {
- // if the edge lands right on the calculated edge, add one
- if (tileIdDouble === tileId) {
- tileId--;
- }
- }
- }
- return tileId;
- }
- /**
- * Get the web mercator bounding box of the tile column and row in the tile
- * matrix using the total bounding box
- *
- * @param webMercatorTotalBox web mercator total bounding box
- * @param tileMatrix tile matrix
- * @param tileColumn tile column
- * @param tileRow tile row
- *
- * @return web mercator bounding box
- */
- module.exports.getTileBoundingBox = function(box, tileMatrix, tileColumn, tileRow) {
- var tileMatrixWidth = tileMatrix.matrix_width;
- var tileMatrixHeight = tileMatrix.matrix_height;
- var tileGrid = new TileGrid(tileColumn, tileColumn, tileRow, tileRow);
- var matrixMinX = box.minLongitude;
- var matrixMaxX = box.maxLongitude;
- var matrixWidth = matrixMaxX - matrixMinX;
- var tileWidth = matrixWidth / tileMatrixWidth;
- // Find the longitude range
- var minLon = matrixMinX + (tileWidth * tileGrid.min_x);
- var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x));
- // Get the tile height
- var matrixMinY = box.minLatitude;
- var matrixMaxY = box.maxLatitude;
- var matrixHeight = matrixMaxY - matrixMinY;
- var tileHeight = matrixHeight / tileMatrixHeight;
- // Find the latitude range
- var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y);
- var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y));
- return new BoundingBox(minLon, maxLon, minLat, maxLat);
- }
- module.exports.getTileGridBoundingBox = function(matrixSetBoundingBox, tileMatrixWidth, tileMatrixHeight, tileGrid) {
- // Get the tile width
- var matrixMinX = matrixSetBoundingBox.minLongitude;
- var matrixMaxX = matrixSetBoundingBox.maxLongitude;
- var matrixWidth = matrixMaxX - matrixMinX;
- var tileWidth = matrixWidth / tileMatrixWidth;
- // Find the longitude range
- var minLon = matrixMinX + (tileWidth * tileGrid.min_x);
- var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x));
- // Get the tile height
- var matrixMinY = matrixSetBoundingBox.minLatitude;
- var matrixMaxY = matrixSetBoundingBox.maxLatitude;
- var matrixHeight = matrixMaxY - matrixMinY;
- var tileHeight = matrixHeight / tileMatrixHeight;
- // Find the latitude range
- var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y);
- var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y));
- return new BoundingBox(minLon, maxLon, minLat, maxLat);
- }
- module.exports.getXPixel = function(width, boundingBox, longitude) {
- var boxWidth = boundingBox.maxLongitude - boundingBox.minLongitude;
- var offset = longitude - boundingBox.minLongitude;
- var percentage = offset / boxWidth;
- return percentage * width;
- }
- module.exports.getLongitudeFromPixel = function(width, boundingBox, tileBoundingBox, pixel) {
- var boxWidth = tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude;
- var percentage = pixel / width;
- var offset = percentage * boxWidth;
- return offset + boundingBox.minLongitude;
- }
- module.exports.getYPixel = function(height, boundingBox, latitude) {
- var boxHeight = boundingBox.maxLatitude - boundingBox.minLatitude;
- var offset = boundingBox.maxLatitude - latitude;
- var percentage = offset / boxHeight;
- return percentage * height;
- }
- module.exports.getLatitudeFromPixel = function(height, boundingBox, tileBoundingBox, pixel) {
- var boxHeight = tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude;
- var percentage = pixel / height;
- var offset = percentage * boxHeight;
- return boundingBox.maxLatitude - offset;
- }
- },{"../boundingBox":7,"./tileGrid":94,"proj4":285}],94:[function(require,module,exports){
- /**
- * Tile grid with x and y ranges
- * @module tiles/tileGrid
- * @class
- */
- var TileGrid = function(minX, maxX, minY, maxY) {
- this.min_x = minX;
- this.max_x = maxX;
- this.min_y = minY;
- this.max_y = maxY;
- }
- TileGrid.prototype.count = function () {
- return ((this.max_x + 1) - this.min_x) * ((this.max_y + 1) - this.min_y);
- };
- TileGrid.prototype.equals = function (tileGrid) {
- if (!tileGrid) return false;
- return this.min_x === tileGrid.min_x
- && this.max_x === tileGrid.max_x
- && this.min_y === tileGrid.min_y
- && this.max_y === tileGrid.max_y;
- };
- module.exports = TileGrid;
- },{}],95:[function(require,module,exports){
- /**
- * @module tiles/user/tileColumn
- */
- const UserColumn = require('../../user/userColumn');
- const DataTypes = require('../../db/dataTypes');
- const util = require('util');
- /**
- * `TileColumn` models columns in [user tile pyramid tables]{@link module:tiles/user/tileTable~TileTable}.
- *
- * @class
- * @extends {module:user/userColumn~UserColumn}
- */
- var TileColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) {
- UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey);
- if (dataType === DataTypes.GPKG_DT_GEOMETRY) {
- throw new Error('Data Type is required to create column: ' + name);
- }
- }
- util.inherits(TileColumn, UserColumn);
- /**
- * Create an id column
- * @param {number} index Index
- */
- TileColumn.createIdColumn = function(index) {
- return new TileColumn(index, TileColumn.COLUMN_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, false, null, true);
- }
- /**
- * Create a zoom level column
- * @param {number} index Index
- */
- TileColumn.createZoomLevelColumn = function(index) {
- return new TileColumn(index, TileColumn.COLUMN_ZOOM_LEVEL, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false);
- }
- /**
- * Create a tile column column
- *
- * @param {number} index column index
- */
- TileColumn.createTileColumnColumn = function(index) {
- return new TileColumn(index, TileColumn.COLUMN_TILE_COLUMN, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false);
- }
- /**
- * Create a tile row column
- *
- * @param {number} index column index
- *
- */
- TileColumn.createTileRowColumn = function(index) {
- return new TileColumn(index, TileColumn.COLUMN_TILE_ROW, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false);
- }
- /**
- * Create a tile data column
- *
- * @param {number} index column index
- */
- TileColumn.createTileDataColumn = function(index) {
- return new TileColumn(index, TileColumn.COLUMN_TILE_DATA, DataTypes.GPKGDataType.GPKG_DT_BLOB, null, true, null, false);
- }
- TileColumn.COLUMN_ID = "id";
- TileColumn.COLUMN_ZOOM_LEVEL = "zoom_level";
- TileColumn.COLUMN_TILE_COLUMN = "tile_column";
- TileColumn.COLUMN_TILE_ROW = "tile_row";
- TileColumn.COLUMN_TILE_DATA = "tile_data";
- module.exports = TileColumn;
- },{"../../db/dataTypes":14,"../../user/userColumn":105,"util":343}],96:[function(require,module,exports){
- /**
- * tileDao module.
- * @module tiles/user/tileDao
- */
- var UserDao = require('../../user/userDao')
- , TileGrid = require('../tileGrid')
- , TileRow = require('./tileRow')
- , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao
- , TileMatrixDao = require('../matrix').TileMatrixDao
- , ContentsDao = require('../../core/contents').ContentsDao
- , BoundingBox = require('../../boundingBox')
- , BoundingBoxUtils = require('../tileBoundingBoxUtils')
- , BoundingBox = require('../../boundingBox')
- , ColumnValues = require('../../dao/columnValues')
- , TileColumn = require('./tileColumn')
- , TileDaoUtils = require('./tileDaoUtils');
- var util = require('util')
- , proj4 = require('proj4');
- proj4 = 'default' in proj4 ? proj4['default'] : proj4;
- /**
- * `TileDao` is a {@link module:dao/dao~Dao} subclass for reading
- * [user tile tables]{@link module:tiles/user/tileTable~TileTable}.
- *
- * @class TileDao
- * @extends {module:user/userDao~UserDao}
- * @param {GeoPackageConnection} connection
- * @param {TileTable} table
- * @param {TileMatrixSet} tileMatrixSet
- * @param {TileMatrix[]} tileMatrices
- */
- var TileDao = function(geoPackage, table, tileMatrixSet, tileMatrices) {
- UserDao.call(this, geoPackage, table);
- this.tileMatrixSet = tileMatrixSet;
- this.tileMatrices = tileMatrices;
- this.zoomLevelToTileMatrix = [];
- this.widths = [];
- this.heights = [];
- if (tileMatrices.length === 0) {
- this.minZoom = 0;
- this.maxZoom = 0;
- } else {
- this.minZoom = this.tileMatrices[0].zoom_level;
- this.maxZoom = this.tileMatrices[this.tileMatrices.length-1].zoom_level;
- }
- // Populate the zoom level to tile matrix and the sorted tile widths and heights
- for (var i = this.tileMatrices.length-1; i >= 0; i--) {
- var tileMatrix = this.tileMatrices[i];
- this.zoomLevelToTileMatrix[tileMatrix.zoom_level] = tileMatrix;
- }
- this.initialize();
- }
- util.inherits(TileDao, UserDao);
- TileDao.prototype.initialize = function() {
- var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao();
- this.srs = tileMatrixSetDao.getSrs(this.tileMatrixSet);
- this.projection = this.srs.organization.toUpperCase() + ':' + this.srs.organization_coordsys_id;
- // Populate the zoom level to tile matrix and the sorted tile widths and heights
- for (var i = this.tileMatrices.length-1; i >= 0; i--) {
- var tileMatrix = this.tileMatrices[i];
- var width = tileMatrix.pixel_x_size * tileMatrix.tile_width;
- var height = tileMatrix.pixel_y_size * tileMatrix.tile_height;
- var proj4Projection = proj4(this.projection);
- if (proj4Projection.to_meter) {
- width = proj4Projection.to_meter * tileMatrix.pixel_x_size * tileMatrix.tile_width;
- height = proj4Projection.to_meter * tileMatrix.pixel_y_size * tileMatrix.tile_height;
- }
- this.widths.push(width);
- this.heights.push(height);
- }
- this.setWebMapZoomLevels();
- }
- TileDao.prototype.webZoomToGeoPackageZoom = function(webZoom) {
- var webMercatorBoundingBox = BoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(0, 0, webZoom);
- return this.determineGeoPackageZoomLevel(webMercatorBoundingBox, webZoom);
- }
- TileDao.prototype.setWebMapZoomLevels = function() {
- this.minWebMapZoom = 20;
- this.maxWebMapZoom = 0;
- this.webZoomToGeoPackageZooms = {};
- var totalTileWidth = this.tileMatrixSet.max_x - this.tileMatrixSet.min_x;
- var totalTileHeight = this.tileMatrixSet.max_y - this.tileMatrixSet.min_y;
- for (var i = 0; i < this.tileMatrices.length; i++) {
- var tileMatrix = this.tileMatrices[i];
- var singleTileWidth = totalTileWidth / tileMatrix.matrix_width;
- var singleTileHeight = totalTileHeight / tileMatrix.matrix_height;
- var tileBox = new BoundingBox(this.tileMatrixSet.min_x, this.tileMatrixSet.min_x + singleTileWidth, this.tileMatrixSet.min_y, this.tileMatrixSet.min_y + singleTileHeight);
- var proj4Projection = proj4(this.projection, 'EPSG:4326');
- var ne = proj4Projection.forward([tileBox.maxLongitude, tileBox.maxLatitude]);
- var sw = proj4Projection.forward([tileBox.minLongitude, tileBox.minLatitude]);
- var width = (ne[0] - sw[0]);
- var height = (ne[1] - sw[1]);
- var zoom = Math.ceil(Math.log2(360/width));
- if (this.minWebMapZoom > zoom) {
- this.minWebMapZoom = zoom;
- }
- if (this.maxWebMapZoom < zoom) {
- this.maxWebMapZoom = zoom;
- }
- this.webZoomToGeoPackageZooms[zoom] = tileMatrix.zoom_level;
- }
- }
- TileDao.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) {
- return this.webZoomToGeoPackageZooms[zoom];
- };
- /**
- * Get the bounding box of tiles at the zoom level
- * @param {Number} zoomLevel zoom level
- * @return {BoundingBox} bounding box of the zoom level, or null if no tiles
- */
- TileDao.prototype.getBoundingBoxWithZoomLevel = function (zoomLevel) {
- var boundingBox;
- var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel);
- if (tileMatrix) {
- var tileGrid = this.queryForTileGridWithZoomLevel(zoomLevel);
- if (tileGrid) {
- var matrixSetBoundingBox = this.getBoundingBox();
- boundingBox = BoundingBoxUtils.getTileGridBoundingBox(matrixSetBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, tileGrid);
- }
- return boundingBox;
- } else {
- return boundingBox;
- }
- };
- TileDao.prototype.getBoundingBox = function () {
- return this.tileMatrixSet.getBoundingBox();
- };
- TileDao.prototype.queryForTileGridWithZoomLevel = function (zoomLevel) {
- var where = this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);
- var whereArgs = this.buildWhereArgs(zoomLevel);
- var minX = this.minOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs);
- var maxX = this.maxOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs);
- var minY = this.minOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs);
- var maxY = this.maxOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs);
- var tileGrid;
- if (minX != null && minY != null && maxX != null && maxY != null) {
- tileGrid = new TileGrid(minX, maxX, minY, maxY);
- }
- return tileGrid;
- };
- /**
- * Get the tile grid of the zoom level
- * @param {Number} zoomLevel zoom level
- * @return {TileGrid} tile grid at zoom level, null if no tile matrix at zoom level
- */
- TileDao.prototype.getTileGridWithZoomLevel = function (zoomLevel) {
- var tileGrid;
- var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel);
- if (tileMatrix) {
- tileGrid = new TileGrid(0, ~~tileMatrix.matrix_width - 1, 0, ~~tileMatrix.matrix_height - 1);
- }
- return tileGrid;
- };
- /**
- * get the tile table
- * @return {TileTable} tile table
- */
- TileDao.prototype.getTileTable = function () {
- return this.table;
- };
- /**
- * Create a new tile row with the column types and values
- * @param {Array} columnTypes column types
- * @param {Array} values values
- * @return {TileRow} tile row
- */
- TileDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new TileRow(this.getTileTable(), columnTypes, values);
- };
- /**
- * Create a new tile row
- * @return {TileRow} tile row
- */
- TileDao.prototype.newRow = function () {
- return new TileRow(this.getTileTable());
- };
- /**
- * Adjust the tile matrix lengths if needed. Check if the tile matrix width
- * and height need to expand to account for pixel * number of pixels fitting
- * into the tile matrix lengths
- */
- TileDao.prototype.adjustTileMatrixLengths = function () {
- TileDaoUtils.adjustTileMatrixLengths(this.tileMatrixSet, this.tileMatrices);
- };
- /**
- * Get the tile matrix at the zoom level
- * @param {Number} zoomLevel zoom level
- * @return {TileMatrix} tile matrix
- */
- TileDao.prototype.getTileMatrixWithZoomLevel = function (zoomLevel) {
- return this.zoomLevelToTileMatrix[zoomLevel];
- };
- /**
- * Query for a tile
- * @param {Number} column column
- * @param {Number} row row
- * @param {Number} zoomLevel zoom level
- * @param {Function} callback called with an error if one occurred and the TileDao
- */
- TileDao.prototype.queryForTile = function (column, row, zoomLevel) {
- var fieldValues = new ColumnValues();
- fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column);
- fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row);
- fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);
- var tileRow;
- for (var row of this.queryForFieldValues(fieldValues)) {
- tileRow = this.getRow(row);
- }
- return tileRow;
- };
- TileDao.prototype.queryForTilesWithZoomLevel = function (zoomLevel, tileCallback) {
- var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);
- var thisgetRow = this.getRow.bind(this);
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- return {
- value: thisgetRow(nextRow.value),
- done: false
- };
- }
- return {
- done: true
- }
- }.bind(this)
- }
- };
- /**
- * Query for Tiles at a zoom level in descending row and column order
- * @param {Number} zoomLevel zoom level
- * @param {Function} tileCallback callback for each tile
- * @param {Function} doneCallback called when all tiles are retrieved
- */
- TileDao.prototype.queryForTilesDescending = function (zoomLevel, tileCallback) {
- var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel, undefined, undefined, TileColumn.COLUMN_TILE_COLUMN + ' DESC, ' + TileColumn.COLUMN_TILE_ROW + ', DESC');
- var thisgetRow = this.getRow.bind(this);
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- return {
- value: thisgetRow(nextRow.value),
- done: false
- };
- }
- return {
- done: true
- }
- }.bind(this)
- };
- };
- /**
- * Query for tiles at a zoom level and column
- * @param {Number} column column
- * @param {Number} zoomLevel zoom level
- * @param {Function} tileCallback called for each tile
- * @param {Function} doneCallback called when all tiles have been retrieved
- */
- TileDao.prototype.queryForTilesInColumn = function (column, zoomLevel, tileCallback) {
- var fieldValues = new ColumnValues();
- fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column);
- fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);
- var iterator = this.queryForFieldValues(fieldValues);
- var thisgetRow = this.getRow.bind(this);
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- var tileRow = thisgetRow(nextRow.value);
- return {
- value: tileRow,
- done: false
- };
- } else {
- return {
- done: true
- }
- }
- }
- }
- };
- /**
- * Query for tiles at a zoom level and row
- * @param {Number} row row
- * @param {Number} zoomLevel zoom level
- * @param {Function} tileCallback called for each tile
- * @param {Function} doneCallback called when all tiles have been retrieved
- */
- TileDao.prototype.queryForTilesInRow = function (row, zoomLevel, tileCallback, doneCallback) {
- var fieldValues = new ColumnValues();
- fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row);
- fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);
- var iterator = this.queryForFieldValues(fieldValues);
- var thisgetRow = this.getRow.bind(this);
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- var tileRow = thisgetRow(nextRow.value);
- return {
- value: tileRow,
- done: false
- };
- } else {
- return {
- done: true
- }
- }
- }
- }
- };
- /**
- * Query by tile grid and zoom level
- * @param {TileGrid} tileGrid tile grid
- * @param {Number} zoomLevel zoom level
- * @param {Function} tileCallback called for each tile
- * @param {Function} doneCallback called when all tiles have been retrieved
- */
- TileDao.prototype.queryByTileGrid = function (tileGrid, zoomLevel) {
- if (!tileGrid) return doneCallback();
- var tileCount = 0;
- var x = tileGrid.min_x;
- var where = '';
- where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.min_x, '>=');
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.max_x, '<=');
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.min_y, '>=');
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.max_y, '<=');
- var whereArgs = this.buildWhereArgs([zoomLevel, tileGrid.min_x, tileGrid.max_x, tileGrid.min_y, tileGrid.max_y]);
- var iterator = this.queryWhereWithArgsDistinct(where, whereArgs);
- var thisgetRow = this.getRow.bind(this);
- return {
- [Symbol.iterator]() {
- return this;
- },
- next: function() {
- var nextRow = iterator.next();
- if (!nextRow.done) {
- var tileRow = thisgetRow(nextRow.value);
- return {
- value: tileRow,
- done: false
- };
- } else {
- return {
- done: true
- }
- }
- }
- }
- };
- TileDao.prototype.deleteTile = function(column, row, zoomLevel) {
- var where = '';
- where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, column);
- where += ' and ';
- where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, row);
- var whereArgs = this.buildWhereArgs([zoomLevel, column, row]);
- return this.deleteWhere(where, whereArgs);
- };
- TileDao.prototype.getSrs = function() {
- return this.geoPackage.getContentsDao().getSrs(this.tileMatrixSet);
- };
- TileDao.prototype.dropTable = function() {
- var tileMatrixDao = this.geoPackage.getTileMatrixDao();
- var dropResult = UserDao.prototype.dropTable.call(this);
- var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao();
- tileMatrixSetDao.delete(this.tileMatrixSet);
- for (var i = this.tileMatrices.length-1; i >= 0; i--) {
- var tileMatrix = this.tileMatrices[i];
- tileMatrixDao.delete(tileMatrix);
- }
- var dao = this.geoPackage.getContentsDao();
- dao.deleteById(this.gpkgTableName);
- return dropResult;
- }
- TileDao.prototype.rename = function(newName) {
- UserDao.prototype.rename.call(this, newName);
- var oldName = this.tileMatrixSet.table_name;
- var values = {};
- values[TileMatrixSetDao.COLUMN_TABLE_NAME] = newName;
- var where = this.buildWhereWithFieldAndValue(TileMatrixSetDao.COLUMN_TABLE_NAME, oldName);
- var whereArgs = this.buildWhereArgs([oldName]);
- var contentsDao = this.geoPackage.getContentsDao();
- var contents = contentsDao.queryForId(oldName);
- contents.table_name = newName;
- contents.identifier = newName;
- contentsDao.create(contents);
- var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao();
- tileMatrixSetDao.updateWithValues(values, where, whereArgs);
- var tileMatrixDao = this.geoPackage.getTileMatrixDao();
- var tileMatrixUpdate = {};
- tileMatrixUpdate[TileMatrixDao.COLUMN_TABLE_NAME] = newName;
- var tileMatrixWhere = this.buildWhereWithFieldAndValue(TileMatrixDao.COLUMN_TABLE_NAME, oldName);
- tileMatrixDao.updateWithValues(tileMatrixUpdate, tileMatrixWhere, whereArgs);
- contentsDao.deleteById(oldName);
- }
- module.exports = TileDao;
- },{"../../boundingBox":7,"../../core/contents":8,"../../dao/columnValues":10,"../../user/userDao":106,"../matrix":90,"../matrixset":91,"../tileBoundingBoxUtils":93,"../tileGrid":94,"./tileColumn":95,"./tileDaoUtils":97,"./tileRow":98,"proj4":285,"util":343}],97:[function(require,module,exports){
- module.exports.adjustTileMatrixLengths = function(tileMatrixSet, tileMatrices) {
- var tileMatrixWidth = tileMatrixSet.maxX - tileMatrixSet.minX;
- var tileMatrixHeight = tileMatrixSet.maxY - tileMatrixSet.minY;
- for (var i = 0; i < tileMatrices.length; i++) {
- var tileMatrix = tileMatrices[i];
- var tempMatrixWidth = ~~((tileMatrixWidth / (tileMatrix.pixelXSize * ~~tileMatrix.tileWidth)));
- var tempMatrixHeight = ~~((tileMatrixHeight / (tileMatrix.pixelYSize * ~~(tileMatrix.tileHeight))));
- if(tempMatrixWidth > ~~(tileMatrix.matrixWidth)) {
- tileMatrix.matrixWidth = ~~(tempMatrixWidth);
- }
- if (tempMatrixHeight > ~~(tileMatrix.matrixHeight)) {
- tileMatrix.matrixHeight = ~~(tempMatrixHeight);
- }
- }
- }
- },{}],98:[function(require,module,exports){
- /**
- * tileRow module.
- * @module tiles/user/tileRow
- */
- var UserRow = require('../../user/userRow');
- var util = require('util');
- /**
- * Tile Row containing the values from a single result set row
- * @param {TileTable} tileTable tile table
- * @param {Array} columnTypes column types
- * @param {Array} values values
- */
- var TileRow = function(tileTable, columnTypes, values) {
- UserRow.call(this, tileTable, columnTypes, values);
- this.tileTable = tileTable;
- }
- util.inherits(TileRow, UserRow);
- TileRow.prototype.toObjectValue = function (value) {
- return value;
- };
- TileRow.prototype.toDatabaseValue = function (columnName) {
- return this.getValueWithColumnName(columnName);
- };
- /**
- * Get the zoom level column index
- * @return {Number} zoom level column index
- */
- TileRow.prototype.getZoomLevelColumnIndex = function () {
- return this.tileTable.zoomLevelIndex;
- };
- /**
- * Get the zoom level column
- * @return {TileColumn} zoom level column
- */
- TileRow.prototype.getZoomLevelColumn = function() {
- return this.tileTable.getZoomLevelColumn();
- }
- /**
- * Get the zoom level
- * @return {Number} zoom level
- */
- TileRow.prototype.getZoomLevel = function () {
- return this.getValueWithColumnName(this.getZoomLevelColumn().name);
- };
- /**
- * Set the zoom level
- * @param {Number} zoomLevel zoom level
- */
- TileRow.prototype.setZoomLevel = function (zoomLevel) {
- this.setValueWithIndex(this.getZoomLevelColumnIndex(), zoomLevel);
- };
- /**
- * Get the tile column column Index
- * @return {number} tile column column index
- */
- TileRow.prototype.getTileColumnColumnIndex = function () {
- return this.tileTable.tileColumnIndex;
- };
- /**
- * Get the tile column column
- * @return {TileColumn} tile column column
- */
- TileRow.prototype.getTileColumnColumn = function () {
- return this.tileTable.getTileColumnColumn();
- };
- /**
- * Get the tile column
- * @return {Number} tile column
- */
- TileRow.prototype.getTileColumn = function () {
- return this.getValueWithColumnName(this.getTileColumnColumn().name);
- };
- /**
- * Set the tile column
- * @param {number} tileColumn tile column
- */
- TileRow.prototype.setTileColumn = function (tileColumn) {
- this.setValueWithColumnName(this.getTileColumnColumn().name, tileColumn);
- };
- /**
- * Get the tile row column index
- * @return {Number} tile row column index
- */
- TileRow.prototype.getRowColumnIndex = function () {
- return this.tileTable.tileRowIndex;
- };
- /**
- * Get the tile row column
- * @return {TileColumn} tile row column
- */
- TileRow.prototype.getRowColumn = function () {
- return this.tileTable.getRowColumn();
- };
- /**
- * Get the tile row
- * @return {Number} tile row
- */
- TileRow.prototype.getRow = function () {
- return this.getValueWithColumnName(this.getRowColumn().name);
- };
- /**
- * Set the tile row
- * @param {Number} tileRow tile row
- */
- TileRow.prototype.setTileRow = function (tileRow) {
- this.setValueWithColumnName(this.getRowColumn().name, tileRow);
- };
- /**
- * Get the tile data column index
- * @return {Number} tile data column index
- */
- TileRow.prototype.getTileDataColumnIndex = function () {
- return this.tileTable.tileDataIndex;
- };
- /**
- * Get the tile data column
- * @return {TileColumn} tile data column
- */
- TileRow.prototype.getTileDataColumn = function () {
- return this.tileTable.getTileDataColumn();
- };
- /**
- * Get the tile data
- * @return {Buffer} tile data
- */
- TileRow.prototype.getTileData = function () {
- return this.getValueWithColumnName(this.getTileDataColumn().name);
- };
- /**
- * Set the tile data
- * @param {Buffer} tileData tile data
- */
- TileRow.prototype.setTileData = function (tileData) {
- this.setValueWithColumnName(this.getTileDataColumn().name, tileData);
- };
- /**
- * Get the tile data as an image
- * @return {image} tile image
- */
- TileRow.prototype.getTileDataImage = function () {
- // TODO
- };
- // /**
- // * Get the tile data as a scaled image
- // *
- // * @param scale scale, 0.0 to 1.0
- // *
- // * @return tile image
- // */
- // -(UIImage *) getTileDataImageWithScale: (CGFloat) scale;
- //
- // /**
- // * Set the tile data with an image
- // *
- // * @param image image
- // * @param format image format
- // */
- // -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format;
- //
- // /**
- // * Set the tile data with an image
- // *
- // * @param image image
- // * @param format image format
- // * @param quality compression quality, 0.0 to 1.0, used only for GPKG_CF_JPEG
- // */
- // -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format andQuality: (CGFloat) quality;
- module.exports = TileRow;
- },{"../../user/userRow":107,"util":343}],99:[function(require,module,exports){
- /**
- * @module tiles/user/tileTable
- */
- const UserTable = require('../../user/userTable');
- const TileColumn = require('./tileColumn');
- const util = require('util');
- /**
- * `TileTable` models [tile pyramid user tables](https://www.geopackage.org/spec121/index.html#tiles_user_tables).
- *
- * @class
- * @extends {module:user/userTable~UserTable}
- * @param {string} tableName
- * @param {module:tiles/user/tileColumn~TileColumn[]} columns
- */
- var TileTable = module.exports = function(tableName, columns) {
- UserTable.call(this, tableName, columns);
- var zoomLevel;
- var tileColumn;
- var tileRow;
- var tileData;
- var uniqueColumns = [];
- for (var i = 0; i < columns.length; i++) {
- var column = columns[i];
- var columnName = column.name;
- var columnIndex = column.index;
- switch(columnName) {
- case TileColumn.COLUMN_ZOOM_LEVEL:
- this.duplicateCheck(columnIndex, zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL);
- zoomLevel = columnIndex;
- uniqueColumns.push(column);
- break;
- case TileColumn.COLUMN_TILE_COLUMN:
- this.duplicateCheck(columnIndex, tileColumn, TileColumn.COLUMN_TILE_COLUMN);
- tileColumn = columnIndex;
- uniqueColumns.push(column);
- break;
- case TileColumn.COLUMN_TILE_ROW:
- this.duplicateCheck(columnIndex, tileRow, TileColumn.COLUMN_TILE_ROW);
- tileRow = columnIndex;
- uniqueColumns.push(column);
- break;
- case TileColumn.COLUMN_TILE_DATA:
- this.duplicateCheck(columnIndex, tileData, TileColumn.COLUMN_TILE_DATA);
- tileData = columnIndex;
- break;
- }
- }
- this.uniqueConstraints = [{columns: uniqueColumns}];
- this.missingCheck(zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL);
- this.zoomLevelIndex = zoomLevel;
- this.missingCheck(tileColumn, TileColumn.COLUMN_TILE_COLUMN);
- this.tileColumnIndex = tileColumn;
- this.missingCheck(tileRow, TileColumn.COLUMN_TILE_ROW);
- this.tileRowIndex = tileRow;
- this.missingCheck(tileData, TileColumn.COLUMN_TILE_DATA);
- this.tileDataIndex = tileData;
- }
- util.inherits(TileTable, UserTable);
- TileTable.prototype.getZoomLevelColumn = function() {
- return this.getColumnWithIndex(this.zoomLevelIndex);
- };
- TileTable.prototype.getTileColumnColumn = function() {
- return this.getColumnWithIndex(this.tileColumnIndex);
- };
- TileTable.prototype.getRowColumn = function() {
- return this.getColumnWithIndex(this.tileRowIndex);
- };
- TileTable.prototype.getTileDataColumn = function() {
- return this.getColumnWithIndex(this.tileDataIndex);
- };
- TileTable.prototype.getTableType = function() {
- return UserTable.TILE_TABLE;
- }
- TileTable.createRequiredColumns = function() {
- return TileTable.createRequiredColumnsWithStartingIndex(0);
- }
- TileTable.createRequiredColumnsWithStartingIndex = function(startingIndex) {
- var columns = [];
- columns.push(TileColumn.createIdColumn(startingIndex++));
- columns.push(TileColumn.createZoomLevelColumn(startingIndex++));
- columns.push(TileColumn.createTileColumnColumn(startingIndex++));
- columns.push(TileColumn.createTileRowColumn(startingIndex++));
- columns.push(TileColumn.createTileDataColumn(startingIndex++));
- return columns;
- }
- },{"../../user/userTable":108,"./tileColumn":95,"util":343}],100:[function(require,module,exports){
- /**
- * tileTableReader module.
- * @module tiles/user/tileTableReader
- */
- var UserTableReader = require('../../user/userTableReader')
- , DataTypes = require('../../db/dataTypes')
- , TileMatrixSet = require('../matrixset').TileMatrixSet
- , TileTable = require('./tileTable')
- , TileColumn = require('./tileColumn');
- var util = require('util');
- /**
- * Reads the metadata from an existing tile table
- * @class TileTableReader
- * @extends {module:user~UserTableReader}
- */
- var TileTableReader = function(tileMatrixSet) {
- UserTableReader.call(this, tileMatrixSet.table_name);
- this.tileMatrixSet = tileMatrixSet;
- }
- util.inherits(TileTableReader, UserTableReader);
- TileTableReader.prototype.readTileTable = function (geoPackage) {
- return this.readTable(geoPackage.getDatabase());
- };
- TileTableReader.prototype.createTable = function (tableName, columns) {
- return new TileTable(tableName, columns);
- };
- TileTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValueIndex, primaryKey) {
- var dataType = DataTypes.fromName(type);
- var defaultValue = undefined;
- if (defaultValueIndex) {
- // console.log('default value index', defaultValueIndex);
- // console.log('result', results);
- }
- var column = new TileColumn(index, name, dataType, max, notNull, defaultValue, primaryKey);
- return column;
- };
- /**
- * The TileTableReader
- * @type {TileTableReader}
- */
- module.exports = TileTableReader;
- },{"../../db/dataTypes":14,"../../user/userTableReader":109,"../matrixset":91,"./tileColumn":95,"./tileTable":99,"util":343}],101:[function(require,module,exports){
- /**
- * @module user/custom
- */
- var util = require('util');
- var UserColumn = require('../userColumn')
- , DataTypes = require('../../db/dataTypes')
- /**
- * Create a new user custom columnd
- * @param {Number} index column index
- * @param {string} name column name
- * @param {module:db/dataTypes~GPKGDataType} dataType data type
- * @param {Number} max max value
- * @param {Boolean} notNull not null
- * @param {Object} defaultValue default value or nil
- * @param {Boolean} primaryKey primary key
- */
- var UserCustomColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) {
- UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey);
- if (dataType == null) {
- throw new Error('Data type is required to create column: ' + name);
- }
- }
- util.inherits(UserCustomColumn, UserColumn);
- /**
- * Create a new column
- *
- * @param {Number} index column index
- * @param {string} name column name
- * @param {module:db/dataTypes~GPKGDataType} type data type
- * @param {Number} max max value
- * @param {Boolean} notNull not null
- * @param {Object} defaultValue default value or nil
- *
- * @return {module:user/custom~UserCustomColumn} created column
- */
- UserCustomColumn.createColumn = function(index, name, dataType, max, notNull, defaultValue) {
- return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, false);
- }
- module.exports = UserCustomColumn;
- },{"../../db/dataTypes":14,"../userColumn":105,"util":343}],102:[function(require,module,exports){
- /**
- * @module user/custom
- */
- var util = require('util');
- var UserDao = require('../userDao')
- , UserRow = require('../userRow')
- , UserCustomTableReader = require('./userCustomTableReader');
- /**
- * User Custom Dao
- * @class
- * @extends module:user/userDao~UserDao
- * @param {module:geoPackage~GeoPackage} geoPackage geopackage object
- * @param {module:user/custom~UserCustomTable} userCustomTable user custom table
- */
- var UserCustomDao = function(geoPackage, userCustomTable) {
- UserDao.call(this, geoPackage, userCustomTable);
- }
- util.inherits(UserCustomDao, UserDao);
- /**
- * Create a new UserRow
- * @return {module:user/userRow~UserRow}
- */
- UserCustomDao.prototype.newRow = function() {
- return new UserRow(this.table);
- }
- /**
- * Reads the table specified from the geopackage
- * @param {module:geoPackage~GeoPackage} geoPackage geopackage object
- * @param {string} tableName table name
- * @param {string[]} requiredColumns required columns
- * @return {module:user/custom~UserCustomDao}
- */
- UserCustomDao.readTable = function(geoPackage, tableName, requiredColumns) {
- var reader = new UserCustomTableReader(tableName, requiredColumns);
- var userCustomTable = reader.readTable(geoPackage.getDatabase());
- return new UserCustomDao(geoPackage, userCustomTable);
- }
- module.exports = UserCustomDao;
- },{"../userDao":106,"../userRow":107,"./userCustomTableReader":104,"util":343}],103:[function(require,module,exports){
- /**
- * @module user/custom
- */
- var util = require('util');
- var UserTable = require('../userTable');
- /**
- * Create a new user custom table
- * @class
- * @extends module:user/userTable~UserTable
- * @param {string} tableName table name
- * @param {module:user/userColumn~UserColumn[]} columns user columns
- * @param {string[]} requiredColumns required columns
- */
- var UserCustomTable = function(tableName, columns, requiredColumns) {
- UserTable.call(this, tableName, columns);
- if (requiredColumns && requiredColumns.length) {
- var found = {};
- for (var i = 0; i < columns.length; i++) {
- var column = columns[i];
- if (requiredColumns.indexOf(column.name) !== -1) {
- var previousIndex = found[column.name];
- this.duplicateCheck(column.index, previousIndex, column.name);
- found[column.name] = column.index;
- }
- }
- for (var i = 0; i < requiredColumns.length; i++) {
- this.missingCheck(found[requiredColumns[i]], requiredColumns);
- }
- }
- }
- util.inherits(UserCustomTable, UserTable);
- module.exports = UserCustomTable;
- },{"../userTable":108,"util":343}],104:[function(require,module,exports){
- /**
- * @module user/custom
- */
- var util = require('util');
- var UserTableReader = require('../userTableReader')
- , DataTypes = require('../../db/dataTypes')
- , UserCustomColumn = require('./userCustomColumn')
- , UserCustomTable = require('./userCustomTable');
- /**
- * User custom table reader
- * @class
- * @extends module:user/userTableReader~UserTableReader
- * @param {string} tableName table name
- * @param {string[]} requiredColumns required columns
- */
- var UserCustomTableReader = function(tableName, requiredColumns) {
- UserTableReader.call(this, tableName, requiredColumns);
- }
- util.inherits(UserCustomTableReader, UserTableReader);
- /**
- * Creates user custom column
- * @param {string} tableName table name
- * @param {module:user/userCustom~UserCustomColumn[]} columnList columns
- * @param {string[]} requiredColumns required columns
- * @return {module:user/userCustom~UserCustomTable}
- */
- UserCustomTableReader.prototype.createTable = function(tableName, columnList, requiredColumns) {
- return new UserCustomTable(tableName, columnList, requiredColumns);
- }
- /**
- * Creates a user custom column
- * @param {Object} result
- * @param {Number} index column index
- * @param {string} name column name
- * @param {module:db/dataTypes~GPKGDataType} type data type
- * @param {Number} max max value
- * @param {Boolean} notNull not null
- * @param {Object} defaultValue default value or nil
- * @param {Boolean} primaryKey primary key
- * @return {module:user/custom~UserCustomColumn}
- */
- UserCustomTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) {
- var dataType = DataTypes.fromName(type);
- return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, primaryKey);
- }
- module.exports = UserCustomTableReader;
- },{"../../db/dataTypes":14,"../userTableReader":109,"./userCustomColumn":101,"./userCustomTable":103,"util":343}],105:[function(require,module,exports){
- /**
- * @module user/userColumn
- */
- var DataTypes = require('../db/dataTypes');
- /**
- * A `UserColumn` is meta-data about a single column from a {@link module:/user/userTable~UserTable}.
- *
- * @class
- * @param {Number} index column index
- * @param {string} name column name
- * @param {module:db/dataTypes~GPKGDataType} dataType data type of the column
- * @param {?Number} max max value
- * @param {Boolean} notNull not null
- * @param {?Object} defaultValue default value or null
- * @param {Boolean} primaryKey `true` if this column is part of the table's primary key
- */
- function UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey) {
- this.index = index;
- this.name = name;
- this.dataType = dataType;
- this.max = max;
- this.notNull = notNull;
- this.defaultValue = defaultValue;
- this.primaryKey = primaryKey;
- this.validateMax();
- }
- /**
- * Gets the type name
- * @return {module:db/dataTypes~GPKGDataType}
- */
- UserColumn.prototype.getTypeName = function () {
- var type = undefined;
- if (this.dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) {
- type = DataTypes.name(this.dataType);
- }
- return type;
- };
- /**
- * Validate that if max is set, the data type is text or blob
- */
- UserColumn.prototype.validateMax = function () {
- if(this.max && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_TEXT && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB) {
- throw new Error('Column max is only supported for TEXT and BLOB columns. column: ' + this.name + ', max: ' + this.max + ', type: ' + this.dataType)
- }
- };
- /**
- * Create a new primary key column
- *
- * @param {Number} index column index
- * @param {string} name column name
- *
- * @return {module:user/userColumn~UserColumn} created column
- */
- UserColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) {
- return new UserColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true);
- }
- /**
- * Create a new column
- *
- * @param {Number} index column index
- * @param {string} name column name
- * @param {module:db/dataTypes~GPKGDataType} type data type
- * @param {Boolean} notNull not null
- * @param {Object} defaultValue default value or nil
- *
- * @return {module:user/userColumn~UserColumn} created column
- */
- UserColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) {
- return UserColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue);
- }
- /**
- * Create a new column
- *
- * @param {Number} index column index
- * @param {string} name column name
- * @param {module:db/dataTypes~GPKGDataType} type data type
- * @param {Number} max max value
- * @param {Boolean} notNull not null
- * @param {Object} defaultValue default value or nil
- *
- * @return {module:user/userColumn~UserColumn} created column
- */
- UserColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) {
- return new UserColumn(index, name, type, max, notNull, defaultValue, false);
- }
- module.exports = UserColumn;
- },{"../db/dataTypes":14}],106:[function(require,module,exports){
- /**
- * UserDao module.
- * @module user/userDao
- */
- var UserRow = require('./userRow')
- , MediaTable = require('../extension/relatedTables/mediaTable')
- , SimpleAttributesTable = require('../extension/relatedTables/simpleAttributesTable')
- , RelationType = require('../extension/relatedTables/relationType')
- , UserTableReader = require('./userTableReader')
- , Dao = require('../dao/dao');
- var util = require('util');
- /**
- * Abstract User DAO for reading user tables
- * @class UserDao
- * @extends {module:dao/dao~Dao}
- * @param {module:db/geoPackageConnection~GeoPackageConnection} connection connection
- * @param {string} table table name
- */
- var UserDao = function(geoPackage, table) {
- Dao.call(this, geoPackage);
- this.table = table;
- this.table_name = table.table_name;
- this.gpkgTableName = table.table_name;
- if (table.getPkColumn()) {
- this.idColumns = [table.getPkColumn().name];
- } else {
- this.idColumns = [];
- }
- this.columns = table.columnNames;
- }
- util.inherits(UserDao, Dao);
- /**
- * Reads the table specified from the geopackage
- * @param {module:geoPackage~GeoPackage} geoPackage geopackage object
- * @param {string} tableName table name
- * @param {string[]} requiredColumns required columns
- * @return {module:user/userDao~UserDao}
- */
- UserDao.readTable = function(geoPackage, tableName) {
- var reader = new UserTableReader(tableName);
- var userTable = reader.readTable(geoPackage.getDatabase());
- return new UserDao(geoPackage, userTable);
- }
- /**
- * Creates a UserRow
- * @param {Object} [results] results to create the row from if not specified, an empty row is created
- * @return {module:user/userRow~UserRow}
- */
- UserDao.prototype.createObject = function (results) {
- if (results) {
- return this.getRow(results);
- }
- return this.newRow();
- };
- /**
- * Sets the value in the row
- * @param {module:user/userRow~UserRow} object user row
- * @param {Number} columnIndex index
- * @param {Object} value value
- */
- UserDao.prototype.setValueInObject = function (object, columnIndex, value) {
- object.setValueNoValidationWithIndex(columnIndex, value);
- };
- /**
- * Get a user row from the current results
- * @param {Object} results result to create the row from
- * @return {module:user/userRow~UserRow} the user row
- */
- UserDao.prototype.getRow = function (results) {
- var row = undefined;
- if (!this.table) return row;
- var columns = this.table.columnCount();
- var columnTypes = {};
- for (var i = 0; i < columns; i++) {
- var column = this.table.getColumnWithIndex(i);
- columnTypes[column.name] = column.dataType;
- }
- return this.newRowWithColumnTypes(columnTypes, results);
- };
- /**
- * Get the table for this dao
- * @return {module:user/userTable~UserTable}
- */
- UserDao.prototype.getTable = function() {
- return this.table;
- }
- /**
- * Create a user row
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {module:dao/columnValues~ColumnValues[]} values values
- * @return {module:user/userRow~UserRow} user row
- */
- UserDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {
- return new UserRow(this.table, columnTypes, values);
- };
- /**
- * Get the projection
- * @return {string} the projection
- */
- UserDao.prototype.getProjection = function () {
- return this.projection;
- };
- /**
- * Links related rows together
- * @param {module:user/userRow~UserRow} userRow user row
- * @param {module:user/userRow~UserRow} relatedRow related row
- * @param {string} relationType relation type
- * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table
- * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values
- * @return {Promise}
- */
- UserDao.prototype.linkRelatedRow = function(userRow, relatedRow, relationType, mappingTable, mappingColumnValues) {
- var rte = this.geoPackage.getRelatedTablesExtension();
- var baseTableName = userRow.table.table_name;
- var relatedTableName = relatedRow.table.table_name;
- var relationship = rte.getRelationshipBuilder()
- .setBaseTableName(baseTableName)
- .setRelatedTableName(relatedTableName)
- .setRelationType(relationType);
- var mappingTableName;
- if (!mappingTable || typeof mappingTable === 'string') {
- var mappingTable = mappingTable || baseTableName + '_' + relatedTableName;
- relationship.setMappingTableName(mappingTable);
- mappingTableName = mappingTable;
- } else {
- relationship.setUserMappingTable(mappingTable);
- mappingTableName = mappingTable.table_name;
- }
- return rte.addRelationship(relationship)
- .then(function() {
- var userMappingDao = rte.getMappingDao(mappingTableName);
- var userMappingRow = userMappingDao.newRow();
- userMappingRow.setBaseId(userRow.getId());
- userMappingRow.setRelatedId(relatedRow.getId());
- for (var column in mappingColumnValues) {
- userMappingRow.setValueWithColumnName(column, mappingColumnValues[column]);
- }
- userMappingDao.create(userMappingRow);
- });
- }
- /**
- * Links a user row to a feature row
- * @param {module:user/userRow~UserRow} userRow user row
- * @param {module:features/user/featureRow~FeatureRow} featureRow feature row
- * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table
- * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values
- * @return {Promise}
- */
- UserDao.prototype.linkFeatureRow = function(userRow, featureRow, mappingTable, mappingColumnValues) {
- return this.linkRelatedRow(userRow, featureRow, RelationType.FEATURES, mappingTable, mappingColumnValues);
- }
- /**
- * Links a user row to a media row
- * @param {module:user/userRow~UserRow} userRow user row
- * @param {module:extension/relatedTables~MediaRow} mediaRow media row
- * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table
- * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values
- * @return {Promise}
- */
- UserDao.prototype.linkMediaRow = function(userRow, mediaRow, mappingTable, mappingColumnValues) {
- return this.linkRelatedRow(userRow, mediaRow, RelationType.MEDIA, mappingTable, mappingColumnValues);
- }
- /**
- * Links a user row to a simpleAttributes row
- * @param {module:user/userRow~UserRow} userRow user row
- * @param {module:extension/relatedTables~SimpleAttributesRow} simpleAttributesRow simple attributes row
- * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table
- * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values
- * @return {Promise}
- */
- UserDao.prototype.linkSimpleAttributesRow = function(userRow, simpleAttrbuteRow, mappingTable, mappingColumnValues) {
- return this.linkRelatedRow(userRow, simpleAttrbuteRow, RelationType.SIMPLE_ATTRIBUTES, mappingTable, mappingColumnValues);
- }
- /**
- * Get all media rows that are linked to this user row
- * @param {module:user/userRow~UserRow} userRow user row
- * @return {module:extension/relatedTables~MediaRow[]}
- */
- UserDao.prototype.getLinkedMedia = function(userRow) {
- var mediaRelations = this.getMediaRelations();
- var rte = this.geoPackage.getRelatedTablesExtension();
- var linkedMedia = [];
- for (var i = 0; i < mediaRelations.length; i++) {
- var mediaRelation = mediaRelations[i];
- var mediaDao = rte.getMediaDao(mediaRelation);
- var userMappingDao = rte.getMappingDao(mediaRelation.mapping_table_name);
- var mappings = userMappingDao.queryByBaseId(userRow.getId());
- for (var m = 0; m < mappings.length; m++) {
- var relatedId = mappings[m].related_id;
- linkedMedia.push(mediaDao.queryForId(relatedId));
- }
- }
- return linkedMedia;
- }
- /**
- * Get all simple attribute rows that are linked to this user row
- * @param {module:user/userRow~UserRow} userRow user row
- * @return {module:extension/relatedTables~SimpleAttributeRow[]}
- */
- UserDao.prototype.getLinkedSimpleAttributes = function(userRow) {
- var simpleRelations = this.getSimpleAttributesRelations();
- var rte = this.geoPackage.getRelatedTablesExtension();
- var linkedSimpleAttributes = [];
- for (var i = 0; i < simpleRelations.length; i++) {
- var simpleRelation = simpleRelations[i];
- var simpleDao = rte.getSimpleAttributesDao(simpleRelation);
- var userMappingDao = rte.getMappingDao(simpleRelation.mapping_table_name);
- var mappings = userMappingDao.queryByBaseId(userRow.getId());
- for (var m = 0; m < mappings.length; m++) {
- var relatedId = mappings[m].related_id;
- linkedSimpleAttributes.push(simpleDao.queryForId(relatedId));
- }
- }
- return linkedSimpleAttributes;
- }
- /**
- * Get all feature rows that are linked to this user row
- * @param {module:user/userRow~UserRow} userRow user row
- * @return {module:features/user/featureRow~FeatureRow[]}
- */
- UserDao.prototype.getLinkedFeatures = function(userRow) {
- var featureRelations = this.getFeatureRelations();
- var rte = this.geoPackage.getRelatedTablesExtension();
- var linkedFeatures = [];
- for (var i = 0; i < featureRelations.length; i++) {
- var featureRelation = featureRelations[i];
- var featureDao = this.geoPackage.getFeatureDao(featureRelation.base_table_name);
- var userMappingDao = rte.getMappingDao(featureRelation.mapping_table_name);
- var mappings = userMappingDao.queryByBaseId(userRow.getId());
- for (var m = 0; m < mappings.length; m++) {
- var relatedId = mappings[m].related_id;
- linkedFeatures.push(featureDao.queryForId(relatedId));
- }
- }
- return linkedFeatures;
- }
- /**
- * Get all simple attribute relations to this table
- * @return {Object[]}
- */
- UserDao.prototype.getSimpleAttributesRelations = function() {
- return this.getRelationsWithName(SimpleAttributesTable.RELATION_TYPE.name);
- }
- /**
- * Get all feature relations to this table
- * @return {Object[]}
- */
- UserDao.prototype.getFeatureRelations = function() {
- return this.getRelationsWithName(RelationType.FEATURES.name);
- }
- /**
- * Get all media relations to this table
- * @return {Object[]}
- */
- UserDao.prototype.getMediaRelations = function() {
- return this.getRelationsWithName(MediaTable.RELATION_TYPE.name);
- }
- /**
- * Get all relations to this table with the specified name
- * @param {string} name
- * @return {Object[]}
- */
- UserDao.prototype.getRelationsWithName = function(name) {
- return this.geoPackage.getExtendedRelationDao().getBaseTableRelationsWithName(this.table_name, name);
- }
- /**
- * Get all relations to this table
- * @return {Object[]}
- */
- UserDao.prototype.getRelations = function() {
- return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(this.table_name);
- }
- /**
- * Gets the rows in this table by id
- * @param {Number[]} ids ids to query for
- * @return {Object[]}
- */
- UserDao.prototype.getRows = function(ids) {
- var rows = [];
- for (var i = 0; i < ids.length; i++) {
- var row = this.queryForId(ids[i]);
- if (row) {
- rows.push(row);
- }
- }
- return rows;
- }
- /**
- * Get the approximate zoom level of where the bounding box of the user data fits into the world
- *
- * @return zoom level
- */
- UserDao.prototype.getZoomLevel = function () {
- return 0;
- // if(self.projection == nil){
- // [NSException raise:@"No Projection" format:@"No projection was set which is required to determine the zoom level"];
- // }
- // GPKGBoundingBox * boundingBox = [self getBoundingBox];
- // if([self.projection.epsg intValue] == PROJ_EPSG_WORLD_GEODETIC_SYSTEM){
- // boundingBox = [GPKGTileBoundingBoxUtils boundWgs84BoundingBoxWithWebMercatorLimits:boundingBox];
- // }
- // GPKGProjectionTransform * webMercatorTransform = [[GPKGProjectionTransform alloc] initWithFromProjection:self.projection andToEpsg:PROJ_EPSG_WEB_MERCATOR];
- // GPKGBoundingBox * webMercatorBoundingBox = [webMercatorTransform transformWithBoundingBox:boundingBox];
- // int zoomLevel = [GPKGTileBoundingBoxUtils getZoomLevelWithWebMercatorBoundingBox:webMercatorBoundingBox];
- // return zoomLevel;
- };
- /**
- * Get count of all rows in this table
- * @return {Number}
- */
- UserDao.prototype.getCount = function () {
- return this.connection.count(this.table_name);
- };
- module.exports = UserDao;
- },{"../dao/dao":11,"../extension/relatedTables/mediaTable":35,"../extension/relatedTables/relationType":36,"../extension/relatedTables/simpleAttributesTable":39,"./userRow":107,"./userTableReader":109,"util":343}],107:[function(require,module,exports){
- (function (Buffer){
- /**
- * UserRow module.
- * @module user/userRow
- */
- var DataTypes = require('../db/dataTypes');
- /**
- * User Row containing the values from a single result row
- * @class UserRow
- * @param {UserTable} table user table
- * @param {module:db/dataTypes[]} columnTypes column types
- * @param {Array} values values
- */
- var UserRow = function(table, columnTypes, values) {
- /**
- * User table
- * @type {UserTable}
- */
- this.table = table;
- /**
- * Column types of this row, based upon the data values
- * @type {Object}
- */
- this.columnTypes = columnTypes;
- /**
- * Array of row values
- * @type {Object}
- */
- this.values = values;
- if (!this.columnTypes) {
- var columnCount = this.table.columnCount();
- this.columnTypes = {};
- this.values = {};
- for (var i = 0; i < columnCount; i++) {
- this.columnTypes[this.table.columnNames[i]] = this.table.columns[i].dataType;
- this.values[this.table.columnNames[i]] = this.table.columns[i].defaultValue;
- }
- }
- }
- module.exports = UserRow;
- /**
- * Get the column count
- * @return {number} column count
- */
- UserRow.prototype.columnCount = function () {
- return this.table.columnCount();
- };
- /**
- * Get the column names
- * @return {Array} column names
- */
- UserRow.prototype.getColumnNames = function () {
- return this.table.columnNames;
- };
- /**
- * Get the column name at the index
- * @param {Number} index index
- * @return {string} column name
- */
- UserRow.prototype.getColumnNameWithIndex = function (index) {
- return this.table.getColumnNameWithIndex(index);
- };
- /**
- * Get the column index of the column name
- * @param {string} columnName column name
- * @return {Number} column index
- */
- UserRow.prototype.getColumnIndexWithColumnName = function (columnName) {
- return this.table.getColumnIndex(columnName);
- };
- /**
- * Get the value at the index
- * @param {Number} index index
- * @return {object} value
- */
- UserRow.prototype.getValueWithIndex = function (index) {
- var value = this.values[this.getColumnNameWithIndex(index)];
- if (value !== undefined) {
- value = this.toObjectValue(index, value);
- }
- return value;
- };
- /**
- * Get the value of the column name
- * @param {string} columnName column name
- * @return {Object} value
- */
- UserRow.prototype.getValueWithColumnName = function (columnName) {
- var value = this.values[columnName];
- var dataType = this.getRowColumnTypeWithColumnName(columnName);
- if (value === undefined || value === null) return value;
- if (dataType === DataTypes.GPKGDataType.BOOLEAN) {
- return value === 1 ? true : false;
- } else if (dataType === DataTypes.GPKGDataType.BLOB) {
- return Buffer.from(value);
- }
- return value;
- };
- UserRow.prototype.toObjectValue = function (index, value) {
- var objectValue = value;
- var column = this.getColumnWithIndex(index);
- if (column.dataType === DataTypes.GPKGDataType.BOOLEAN && value) {
- return value === 1 ? true : false;
- }
- return objectValue;
- };
- UserRow.prototype.toDatabaseValue = function(columnName) {
- var column = this.getColumnWithColumnName(columnName);
- var value = this.getValueWithColumnName(columnName);
- if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) {
- return value === true ? 1 : 0;
- }
- return value;
- }
- /**
- * Get the row column type at the index
- * @param {Number} index index
- * @return {Number} row column type
- */
- UserRow.prototype.getRowColumnTypeWithIndex = function (index) {
- return this.columnTypes[this.getColumnNameWithIndex(index)];
- };
- /**
- * Get the row column type of the column name
- * @param {string} columnName column name
- * @return {Number} row column type
- */
- UserRow.prototype.getRowColumnTypeWithColumnName = function (columnName) {
- return this.columnTypes[columnName];
- };
- /**
- * Get the column at the index
- * @param {Number} index index
- * @return {UserColumn} column
- */
- UserRow.prototype.getColumnWithIndex = function (index) {
- return this.table.getColumnWithIndex(index);
- };
- /**
- * Get the column of the column name
- * @param {string} columnName column name
- * @return {UserColumn} column
- */
- UserRow.prototype.getColumnWithColumnName = function (columnName) {
- return this.table.getColumnWithColumnName(columnName);
- };
- /**
- * Get the id value, which is the value of the primary key
- * @return {Number} id value
- */
- UserRow.prototype.getId = function () {
- if (this.getPkColumn()) {
- return this.getValueWithColumnName(this.getPkColumn().name);
- }
- };
- /**
- * Get the primary key column Index
- * @return {Number} pk index
- */
- UserRow.prototype.getPkColumnIndex = function () {
- return this.table.pkIndex;
- };
- /**
- * Get the primary key column
- * @return {UserColumn} pk column
- */
- UserRow.prototype.getPkColumn = function () {
- return this.table.getPkColumn();
- };
- /**
- * Set the value at the index
- * @param {Number} index index
- * @param {object} value value
- */
- UserRow.prototype.setValueWithIndex = function (index, value) {
- if (index === this.table.pkIndex) {
- throw new Error('Cannot update the primary key of the row. Table Name: ' + this.table.tableName + ', Index: ' + index + ', Name: ' + this.table.getPkColumn().name);
- }
- this.setValueWithColumnName(this.getColumnNameWithIndex(index), value);
- };
- /**
- * Set the value at the index without validation
- * @param {Number} index index
- * @param {Object} value value
- */
- UserRow.prototype.setValueNoValidationWithIndex = function (index, value) {
- this.values[this.getColumnNameWithIndex(index)] = value;
- };
- /**
- * Set the value of the column name
- * @param {string} columnName column name
- * @param {Object} value value
- */
- UserRow.prototype.setValueWithColumnName = function (columnName, value) {
- var dataType = this.getRowColumnTypeWithColumnName(columnName);
- if (dataType === DataTypes.GPKGDataType.BOOLEAN) {
- value === true ? this.values[columnName] = 1 : this.values[columnName] = 0;
- } else if (dataType === DataTypes.GPKGDataType.DATE) {
- this.values[columnName] = value.toISOString().slice(0,10);
- } else if (dataType === DataTypes.GPKGDataType.DATETIME) {
- this.values[columnName] = value.toISOString();
- } else {
- this.values[columnName] = value;
- }
- };
- UserRow.prototype.hasIdColumn = function() {
- return this.table.pkIndex !== undefined;
- }
- UserRow.prototype.hasId = function() {
- var hasId = false;
- if (this.hasIdColumn()) {
- var objectValue = this.getValueWithIndex(this.table.pkIndex);
- hasId = objectValue !== null && objectValue !== undefined && typeof objectValue === 'number';
- }
- return hasId;
- }
- /**
- * Set the primary key id value
- * @param {Number} id id
- */
- UserRow.prototype.setId = function (id) {
- this.values[this.table.getPkColumn().name] = id;
- };
- /**
- * Clears the id so the row can be used as part of an insert or create
- */
- UserRow.prototype.resetId = function () {
- this.values[this.table.getPkColumn().name] = undefined;
- };
- /**
- * Validate the value and its actual value types against eh column data type class
- * @param {UserColumn} column column
- * @param {Object} value value
- * @param {Array} valueTypes value types
- */
- UserRow.prototype.validateValueWithColumn = function (column, value, valueTypes) {
- // TODO implement validation
- };
- }).call(this,require("buffer").Buffer)
- },{"../db/dataTypes":14,"buffer":182}],108:[function(require,module,exports){
- /**
- * @module user/userTable
- */
- /**
- * `UserTable` models optional [user data tables](https://www.geopackage.org/spec121/index.html#_options)
- * in a [GeoPackage]{@link module:geoPackage~GeoPackage}.
- *
- * @class
- * @param {string} tableName table name
- * @param {module:user/userColumn~UserColumn[]} columns user columns
- */
- var UserTable = function(tableName, columns) {
- /**
- * The name of the table
- * @type {string}
- */
- this.table_name = tableName;
- // Sort the columns by index
- columns.sort(function(a, b) {
- return a.index - b.index;
- });
- for (var i = 0; i < columns.length; i++) {
- var column = columns[i];
- if (column.index != i) {
- throw new Error('Column has wrong index of ' + column.index + ', found at index: ' + i + ', Table Name: ' + this.table_name);
- }
- }
- var pk = undefined;
- var tempColumnNames = new Array();
- var tempNameToIndex = {};
- for (var i = 0; i < columns.length; i++) {
- var column = columns[i];
- var index = column.index;
- if (column.primaryKey) {
- if (pk !== undefined) {
- throw new Error('More than one primary key column was found for table \'' + this.table_name + '\'. Index ' + pk + ' and ' + index);
- }
- pk = index;
- }
- tempColumnNames.push(column.name);
- tempNameToIndex[column.name] = index;
- }
- /**
- * Array of columns
- * @type {module:user/userColumn~UserColumn[]}
- */
- this.columns = columns;
- /**
- * Array of column names
- * @type {string[]}
- */
- this.columnNames = tempColumnNames;
- /**
- * Mapping between column names and their index
- * @type {Object}
- */
- this.nameToIndex = tempNameToIndex;
- this.uniqueConstraints = [];
- /**
- * Primary key column Index
- * @type {Number}
- */
- this.pkIndex = pk;
- }
- /**
- * Check for duplicate column names
- * @param {Number} index index
- * @param {Number} previousIndex previous index
- * @param {string} column column
- * @throws Throws an error if previous index is not undefined
- */
- UserTable.prototype.duplicateCheck = function (index, previousIndex, column) {
- if(previousIndex !== undefined) {
- throw new Error('More than one ' + column + ' column was found for table \'' + this.table_name + '\'. Index ' + previousIndex + ' and ' + index);
- }
- };
- /**
- * Check for the expected data type
- * @param {module:db/dataTypes~GPKGDataType} expected expected data type
- * @param {module:user/userColumn~UserColumn} column column
- * @throws Will throw an error if the actual column type does not match the expected column type
- */
- UserTable.prototype.typeCheck = function (expected, column) {
- var actual = column.dataType;
- if (!actual || actual !== expected) {
- throw new Error('Unexpected ' + column.name + ' column data type was found for table \'' + this.table_name + '\', expected: ' + DataTypes.name(expected) + ', actual: ' + column.dataType);
- }
- };
- /**
- * Check for missing columns
- * @param {Number} index index
- * @param {string} column column
- * @throws Will throw an error if no column is found
- */
- UserTable.prototype.missingCheck = function (index, column) {
- if (index === undefined || index === null) {
- throw new Error('No ' + column + ' column was found for table \'' + this.table_name +'\'');
- }
- };
- /**
- * Get the column index of the column name
- * @param {string} columnName column name
- * @return {Number} the column index
- * @throws Will throw an error if the column is not found in the table
- */
- UserTable.prototype.getColumnIndex = function (columnName) {
- var index = this.nameToIndex[columnName];
- if (index === undefined || index === null) {
- throw new Error('Column does not exist in table \'' + this.table_name + '\', column: ' + columnName);
- }
- return index;
- };
- /**
- * Check if the table has the column
- * @param {string} columnName name of the column
- * @return {Boolean} true if the column exists in the table
- */
- UserTable.prototype.hasColumn = function(columnName) {
- try {
- this.getColumnIndex(columnName);
- return true;
- } catch (e) {
- return false;
- }
- return false;
- }
- /**
- * Get the column name from the index
- * @param {Number} index index
- * @return {string} the column name
- */
- UserTable.prototype.getColumnNameWithIndex = function (index) {
- return this.columnNames[index];
- };
- /**
- * Get the column from the index
- * @param {Number} index index
- * @return {module:user/userColumn~UserColumn} column at the index
- */
- UserTable.prototype.getColumnWithIndex = function (index) {
- return this.columns[index];
- };
- /**
- * Get column with the column name
- * @param {string} columnName column name
- * @return {module:user/userColumn~UserColumn} column at the index
- */
- UserTable.prototype.getColumnWithColumnName = function (columnName) {
- return this.getColumnWithIndex(this.getColumnIndex(columnName));
- };
- /**
- * Get the column count
- * @return {Number} the count of the columns
- */
- UserTable.prototype.columnCount = function () {
- return this.columns.length;
- };
- /**
- * Get the primary key column
- * @return {module:user/userColumn~UserColumn} the primary key column
- */
- UserTable.prototype.getPkColumn = function () {
- return this.columns[this.pkIndex];
- };
- /**
- * Get the primary key id column
- * @return {module:user/userColumn~UserColumn}
- */
- UserTable.prototype.getIdColumn = function() {
- return this.getPkColumn();
- }
- UserTable.prototype.addUniqueConstraint = function (uniqueConstraint) {
- this.uniqueConstraints.push(uniqueConstraint);
- };
- UserTable.FEATURE_TABLE = 'FEATURE';
- UserTable.TILE_TABLE = 'TILE';
- module.exports = UserTable;
- },{}],109:[function(require,module,exports){
- /**
- * userTableReader module.
- * @module user/userTableReader
- */
- var UserColumn = require('./userColumn')
- , UserTable = require('./userTable')
- , DataTypes = require('../db/dataTypes');
- /**
- * @class
- * @param {string} tableName name of the table
- * @param {string[]} requiredColumns array of required column names
- */
- var UserTableReader = function(tableName, requiredColumns) {
- this.table_name = tableName;
- this.requiredColumns = requiredColumns;
- }
- var GPKG_UTR_CID = "cid";
- var GPKG_UTR_NAME = "name";
- var GPKG_UTR_TYPE = "type";
- var GPKG_UTR_NOT_NULL = "notnull";
- var GPKG_UTR_PK = "pk";
- var GPKG_UTR_DFLT_VALUE = "dflt_value";
- /**
- * Read the table
- * @param {object} db db connection
- * @return {module:user/userTable~UserTable}
- */
- UserTableReader.prototype.readTable = function (db) {
- var columnList = [];
- var results = db.all('PRAGMA table_info(\''+this.table_name+'\')');
- for (var i =0; i < results.length; i++) {
- var result = results[i];
- var index = result[GPKG_UTR_CID];
- var name = result[GPKG_UTR_NAME];
- var type = result[GPKG_UTR_TYPE];
- var notNull = result[GPKG_UTR_NOT_NULL] === 1;
- var primarykey = result[GPKG_UTR_PK] === 1;
- var max = undefined;
- if (type && type.lastIndexOf(')') === type.length-1) {
- var maxStart = type.indexOf('(');
- if (maxStart > -1) {
- var maxString = type.substring(maxStart + 1, type.length - 1);
- if (maxString !== '') {
- max = parseInt(maxString);
- type = type.substring(0, maxStart);
- }
- }
- }
- var defaultValue = undefined;
- if (result[GPKG_UTR_DFLT_VALUE]) {
- defaultValue = result[GPKG_UTR_DFLT_VALUE].replace(/\\'/g, '');
- }
- var column = this.createColumnWithResults(result, index, name, type, max, notNull, defaultValue, primarykey);
- columnList.push(column);
- }
- if (columnList.length === 0) {
- throw new Error('Table does not exist: ' + this.table_name);
- }
- return this.createTable(this.table_name, columnList, this.requiredColumns);
- };
- /**
- * Creates a user column
- * @param {Object} result
- * @param {Number} index column index
- * @param {string} name column name
- * @param {module:db/dataTypes~GPKGDataType} type data type
- * @param {Number} max max value
- * @param {Boolean} notNull not null
- * @param {Object} defaultValue default value or nil
- * @param {Boolean} primaryKey primary key
- * @return {module:user/custom~UserCustomColumn}
- */
- UserTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) {
- var dataType = DataTypes.fromName(type);
- return new UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey);
- }
- /**
- * Create the table
- * @param {string} tableName table name
- * @param {module:dao/columnValues~ColumnValues[]} columns columns
- * @return {module:user/userTable~UserTable} the user table
- */
- UserTableReader.prototype.createTable = function (tableName, columns) {
- return new UserTable(tableName, columns);
- };
- module.exports = UserTableReader;
- },{"../db/dataTypes":14,"./userColumn":105,"./userTable":108}],110:[function(require,module,exports){
- /**
- * GeoPackageValidate module.
- * @module validate/geoPackageValidate
- *
- */
- var path = require('path')
- , SpatialReferenceSystem = require('../core/srs').SpatialReferenceSystem
- , Contents = require('../core/contents').Contents
- , GeoPackageConstants = require('../geoPackageConstants');
- /**
- * Check the file extension to see if it is a GeoPackage
- * @param {string} filePath Absolute path to the GeoPackage to create
- * @return {boolean} true if GeoPackage extension
- */
- exports.hasGeoPackageExtension = function(filePath) {
- var extension = path.extname(filePath);
- return extension && extension !== ''
- && (extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENSION.toLowerCase()
- || extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION.toLowerCase());
- }
- /**
- * Validate the extension file as a GeoPackage
- * @param {string} filePath Absolute path to the GeoPackage to create
- * @return {Error} error if the extension is not valid
- */
- exports.validateGeoPackageExtension = function(filePath) {
- if (!exports.hasGeoPackageExtension(filePath)) {
- return new Error("GeoPackage database file '" + filePath
- + "' does not have a valid extension of '"
- + GeoPackageConstants.GEOPACKAGE_EXTENSION + "' or '"
- + GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION + "'");
- }
- }
- /**
- * Check the GeoPackage for the minimum required tables
- * @param {Object} geoPackage GeoPackage to check
- * @param {module:validate/geoPackageValidate~validationCallback} callback - The validation callback
- */
- exports.hasMinimumTables = function(geoPackage) {
- var srsExists = geoPackage.getSpatialReferenceSystemDao().isTableExists();
- var contentsExists = geoPackage.getContentsDao().isTableExists();
- return (srsExists && contentsExists);
- }
- /**
- * Validation callback is passed an error if the validation failed.
- * @callback module:validate/geoPackageValidate~validationCallback
- * @param {Error} null if no error, otherwise describes the error
- */
- },{"../core/contents":8,"../core/srs":9,"../geoPackageConstants":71,"path":276}],111:[function(require,module,exports){
- /**
- * WKB module.
- * @module wkb
- */
- var wkx = require('wkx');
- var wktToEnum = {};
- wktToEnum[wkx.Types.wkt.Point] = wkx.Types.wkb.Point;
- wktToEnum[wkx.Types.wkt.LineString] = wkx.Types.wkb.LineString;
- wktToEnum[wkx.Types.wkt.Polygon] = wkx.Types.wkb.Polygon;
- wktToEnum[wkx.Types.wkt.MultiPoint] = wkx.Types.wkb.MultiPoint;
- wktToEnum[wkx.Types.wkt.MultiLineString] = wkx.Types.wkb.MultiLineString;
- wktToEnum[wkx.Types.wkt.MultiPolygon] = wkx.Types.wkb.MultiPolygon;
- wktToEnum[wkx.Types.wkt.GeometryCollection] = wkx.Types.wkb.GeometryCollection;
- /**
- * number from name
- * @param {string} name name
- * @return {Number} number corresponding to the wkb name
- */
- module.exports.fromName = function(name) {
- name = name.toUpperCase();
- if (name === 'GEOMETRY') {
- return wkx.Types.wkb.GeometryCollection;
- }
- return wktToEnum[name];
- }
- },{"wkx":360}],112:[function(require,module,exports){
- 'use strict';
- module.exports = Point;
- /**
- * A standalone point geometry with useful accessor, comparison, and
- * modification methods.
- *
- * @class Point
- * @param {Number} x the x-coordinate. this could be longitude or screen
- * pixels, or any other sort of unit.
- * @param {Number} y the y-coordinate. this could be latitude or screen
- * pixels, or any other sort of unit.
- * @example
- * var point = new Point(-77, 38);
- */
- function Point(x, y) {
- this.x = x;
- this.y = y;
- }
- Point.prototype = {
- /**
- * Clone this point, returning a new point that can be modified
- * without affecting the old one.
- * @return {Point} the clone
- */
- clone: function() { return new Point(this.x, this.y); },
- /**
- * Add this point's x & y coordinates to another point,
- * yielding a new point.
- * @param {Point} p the other point
- * @return {Point} output point
- */
- add: function(p) { return this.clone()._add(p); },
- /**
- * Subtract this point's x & y coordinates to from point,
- * yielding a new point.
- * @param {Point} p the other point
- * @return {Point} output point
- */
- sub: function(p) { return this.clone()._sub(p); },
- /**
- * Multiply this point's x & y coordinates by point,
- * yielding a new point.
- * @param {Point} p the other point
- * @return {Point} output point
- */
- multByPoint: function(p) { return this.clone()._multByPoint(p); },
- /**
- * Divide this point's x & y coordinates by point,
- * yielding a new point.
- * @param {Point} p the other point
- * @return {Point} output point
- */
- divByPoint: function(p) { return this.clone()._divByPoint(p); },
- /**
- * Multiply this point's x & y coordinates by a factor,
- * yielding a new point.
- * @param {Point} k factor
- * @return {Point} output point
- */
- mult: function(k) { return this.clone()._mult(k); },
- /**
- * Divide this point's x & y coordinates by a factor,
- * yielding a new point.
- * @param {Point} k factor
- * @return {Point} output point
- */
- div: function(k) { return this.clone()._div(k); },
- /**
- * Rotate this point around the 0, 0 origin by an angle a,
- * given in radians
- * @param {Number} a angle to rotate around, in radians
- * @return {Point} output point
- */
- rotate: function(a) { return this.clone()._rotate(a); },
- /**
- * Rotate this point around p point by an angle a,
- * given in radians
- * @param {Number} a angle to rotate around, in radians
- * @param {Point} p Point to rotate around
- * @return {Point} output point
- */
- rotateAround: function(a,p) { return this.clone()._rotateAround(a,p); },
- /**
- * Multiply this point by a 4x1 transformation matrix
- * @param {Array<Number>} m transformation matrix
- * @return {Point} output point
- */
- matMult: function(m) { return this.clone()._matMult(m); },
- /**
- * Calculate this point but as a unit vector from 0, 0, meaning
- * that the distance from the resulting point to the 0, 0
- * coordinate will be equal to 1 and the angle from the resulting
- * point to the 0, 0 coordinate will be the same as before.
- * @return {Point} unit vector point
- */
- unit: function() { return this.clone()._unit(); },
- /**
- * Compute a perpendicular point, where the new y coordinate
- * is the old x coordinate and the new x coordinate is the old y
- * coordinate multiplied by -1
- * @return {Point} perpendicular point
- */
- perp: function() { return this.clone()._perp(); },
- /**
- * Return a version of this point with the x & y coordinates
- * rounded to integers.
- * @return {Point} rounded point
- */
- round: function() { return this.clone()._round(); },
- /**
- * Return the magitude of this point: this is the Euclidean
- * distance from the 0, 0 coordinate to this point's x and y
- * coordinates.
- * @return {Number} magnitude
- */
- mag: function() {
- return Math.sqrt(this.x * this.x + this.y * this.y);
- },
- /**
- * Judge whether this point is equal to another point, returning
- * true or false.
- * @param {Point} other the other point
- * @return {boolean} whether the points are equal
- */
- equals: function(other) {
- return this.x === other.x &&
- this.y === other.y;
- },
- /**
- * Calculate the distance from this point to another point
- * @param {Point} p the other point
- * @return {Number} distance
- */
- dist: function(p) {
- return Math.sqrt(this.distSqr(p));
- },
- /**
- * Calculate the distance from this point to another point,
- * without the square root step. Useful if you're comparing
- * relative distances.
- * @param {Point} p the other point
- * @return {Number} distance
- */
- distSqr: function(p) {
- var dx = p.x - this.x,
- dy = p.y - this.y;
- return dx * dx + dy * dy;
- },
- /**
- * Get the angle from the 0, 0 coordinate to this point, in radians
- * coordinates.
- * @return {Number} angle
- */
- angle: function() {
- return Math.atan2(this.y, this.x);
- },
- /**
- * Get the angle from this point to another point, in radians
- * @param {Point} b the other point
- * @return {Number} angle
- */
- angleTo: function(b) {
- return Math.atan2(this.y - b.y, this.x - b.x);
- },
- /**
- * Get the angle between this point and another point, in radians
- * @param {Point} b the other point
- * @return {Number} angle
- */
- angleWith: function(b) {
- return this.angleWithSep(b.x, b.y);
- },
- /*
- * Find the angle of the two vectors, solving the formula for
- * the cross product a x b = |a||b|sin(θ) for θ.
- * @param {Number} x the x-coordinate
- * @param {Number} y the y-coordinate
- * @return {Number} the angle in radians
- */
- angleWithSep: function(x, y) {
- return Math.atan2(
- this.x * y - this.y * x,
- this.x * x + this.y * y);
- },
- _matMult: function(m) {
- var x = m[0] * this.x + m[1] * this.y,
- y = m[2] * this.x + m[3] * this.y;
- this.x = x;
- this.y = y;
- return this;
- },
- _add: function(p) {
- this.x += p.x;
- this.y += p.y;
- return this;
- },
- _sub: function(p) {
- this.x -= p.x;
- this.y -= p.y;
- return this;
- },
- _mult: function(k) {
- this.x *= k;
- this.y *= k;
- return this;
- },
- _div: function(k) {
- this.x /= k;
- this.y /= k;
- return this;
- },
- _multByPoint: function(p) {
- this.x *= p.x;
- this.y *= p.y;
- return this;
- },
- _divByPoint: function(p) {
- this.x /= p.x;
- this.y /= p.y;
- return this;
- },
- _unit: function() {
- this._div(this.mag());
- return this;
- },
- _perp: function() {
- var y = this.y;
- this.y = this.x;
- this.x = -y;
- return this;
- },
- _rotate: function(angle) {
- var cos = Math.cos(angle),
- sin = Math.sin(angle),
- x = cos * this.x - sin * this.y,
- y = sin * this.x + cos * this.y;
- this.x = x;
- this.y = y;
- return this;
- },
- _rotateAround: function(angle, p) {
- var cos = Math.cos(angle),
- sin = Math.sin(angle),
- x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),
- y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);
- this.x = x;
- this.y = y;
- return this;
- },
- _round: function() {
- this.x = Math.round(this.x);
- this.y = Math.round(this.y);
- return this;
- }
- };
- /**
- * Construct a point from an array if necessary, otherwise if the input
- * is already a Point, or an unknown type, return it unchanged
- * @param {Array<Number>|Point|*} a any kind of input value
- * @return {Point} constructed point, or passed-through value.
- * @example
- * // this
- * var point = Point.convert([0, 1]);
- * // is equivalent to
- * var point = new Point(0, 1);
- */
- Point.convert = function (a) {
- if (a instanceof Point) {
- return a;
- }
- if (Array.isArray(a)) {
- return new Point(a[0], a[1]);
- }
- return a;
- };
- },{}],113:[function(require,module,exports){
- module.exports.VectorTile = require('./lib/vectortile.js');
- module.exports.VectorTileFeature = require('./lib/vectortilefeature.js');
- module.exports.VectorTileLayer = require('./lib/vectortilelayer.js');
- },{"./lib/vectortile.js":114,"./lib/vectortilefeature.js":115,"./lib/vectortilelayer.js":116}],114:[function(require,module,exports){
- 'use strict';
- var VectorTileLayer = require('./vectortilelayer');
- module.exports = VectorTile;
- function VectorTile(pbf, end) {
- this.layers = pbf.readFields(readTile, {}, end);
- }
- function readTile(tag, layers, pbf) {
- if (tag === 3) {
- var layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);
- if (layer.length) layers[layer.name] = layer;
- }
- }
- },{"./vectortilelayer":116}],115:[function(require,module,exports){
- 'use strict';
- var Point = require('@mapbox/point-geometry');
- module.exports = VectorTileFeature;
- function VectorTileFeature(pbf, end, extent, keys, values) {
- // Public
- this.properties = {};
- this.extent = extent;
- this.type = 0;
- // Private
- this._pbf = pbf;
- this._geometry = -1;
- this._keys = keys;
- this._values = values;
- pbf.readFields(readFeature, this, end);
- }
- function readFeature(tag, feature, pbf) {
- if (tag == 1) feature.id = pbf.readVarint();
- else if (tag == 2) readTag(pbf, feature);
- else if (tag == 3) feature.type = pbf.readVarint();
- else if (tag == 4) feature._geometry = pbf.pos;
- }
- function readTag(pbf, feature) {
- var end = pbf.readVarint() + pbf.pos;
- while (pbf.pos < end) {
- var key = feature._keys[pbf.readVarint()],
- value = feature._values[pbf.readVarint()];
- feature.properties[key] = value;
- }
- }
- VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
- VectorTileFeature.prototype.loadGeometry = function() {
- var pbf = this._pbf;
- pbf.pos = this._geometry;
- var end = pbf.readVarint() + pbf.pos,
- cmd = 1,
- length = 0,
- x = 0,
- y = 0,
- lines = [],
- line;
- while (pbf.pos < end) {
- if (length <= 0) {
- var cmdLen = pbf.readVarint();
- cmd = cmdLen & 0x7;
- length = cmdLen >> 3;
- }
- length--;
- if (cmd === 1 || cmd === 2) {
- x += pbf.readSVarint();
- y += pbf.readSVarint();
- if (cmd === 1) { // moveTo
- if (line) lines.push(line);
- line = [];
- }
- line.push(new Point(x, y));
- } else if (cmd === 7) {
- // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
- if (line) {
- line.push(line[0].clone()); // closePolygon
- }
- } else {
- throw new Error('unknown command ' + cmd);
- }
- }
- if (line) lines.push(line);
- return lines;
- };
- VectorTileFeature.prototype.bbox = function() {
- var pbf = this._pbf;
- pbf.pos = this._geometry;
- var end = pbf.readVarint() + pbf.pos,
- cmd = 1,
- length = 0,
- x = 0,
- y = 0,
- x1 = Infinity,
- x2 = -Infinity,
- y1 = Infinity,
- y2 = -Infinity;
- while (pbf.pos < end) {
- if (length <= 0) {
- var cmdLen = pbf.readVarint();
- cmd = cmdLen & 0x7;
- length = cmdLen >> 3;
- }
- length--;
- if (cmd === 1 || cmd === 2) {
- x += pbf.readSVarint();
- y += pbf.readSVarint();
- if (x < x1) x1 = x;
- if (x > x2) x2 = x;
- if (y < y1) y1 = y;
- if (y > y2) y2 = y;
- } else if (cmd !== 7) {
- throw new Error('unknown command ' + cmd);
- }
- }
- return [x1, y1, x2, y2];
- };
- VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
- var size = this.extent * Math.pow(2, z),
- x0 = this.extent * x,
- y0 = this.extent * y,
- coords = this.loadGeometry(),
- type = VectorTileFeature.types[this.type],
- i, j;
- function project(line) {
- for (var j = 0; j < line.length; j++) {
- var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
- line[j] = [
- (p.x + x0) * 360 / size - 180,
- 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
- ];
- }
- }
- switch (this.type) {
- case 1:
- var points = [];
- for (i = 0; i < coords.length; i++) {
- points[i] = coords[i][0];
- }
- coords = points;
- project(coords);
- break;
- case 2:
- for (i = 0; i < coords.length; i++) {
- project(coords[i]);
- }
- break;
- case 3:
- coords = classifyRings(coords);
- for (i = 0; i < coords.length; i++) {
- for (j = 0; j < coords[i].length; j++) {
- project(coords[i][j]);
- }
- }
- break;
- }
- if (coords.length === 1) {
- coords = coords[0];
- } else {
- type = 'Multi' + type;
- }
- var result = {
- type: "Feature",
- geometry: {
- type: type,
- coordinates: coords
- },
- properties: this.properties
- };
- if ('id' in this) {
- result.id = this.id;
- }
- return result;
- };
- // classifies an array of rings into polygons with outer rings and holes
- function classifyRings(rings) {
- var len = rings.length;
- if (len <= 1) return [rings];
- var polygons = [],
- polygon,
- ccw;
- for (var i = 0; i < len; i++) {
- var area = signedArea(rings[i]);
- if (area === 0) continue;
- if (ccw === undefined) ccw = area < 0;
- if (ccw === area < 0) {
- if (polygon) polygons.push(polygon);
- polygon = [rings[i]];
- } else {
- polygon.push(rings[i]);
- }
- }
- if (polygon) polygons.push(polygon);
- return polygons;
- }
- function signedArea(ring) {
- var sum = 0;
- for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
- p1 = ring[i];
- p2 = ring[j];
- sum += (p2.x - p1.x) * (p1.y + p2.y);
- }
- return sum;
- }
- },{"@mapbox/point-geometry":112}],116:[function(require,module,exports){
- 'use strict';
- var VectorTileFeature = require('./vectortilefeature.js');
- module.exports = VectorTileLayer;
- function VectorTileLayer(pbf, end) {
- // Public
- this.version = 1;
- this.name = null;
- this.extent = 4096;
- this.length = 0;
- // Private
- this._pbf = pbf;
- this._keys = [];
- this._values = [];
- this._features = [];
- pbf.readFields(readLayer, this, end);
- this.length = this._features.length;
- }
- function readLayer(tag, layer, pbf) {
- if (tag === 15) layer.version = pbf.readVarint();
- else if (tag === 1) layer.name = pbf.readString();
- else if (tag === 5) layer.extent = pbf.readVarint();
- else if (tag === 2) layer._features.push(pbf.pos);
- else if (tag === 3) layer._keys.push(pbf.readString());
- else if (tag === 4) layer._values.push(readValueMessage(pbf));
- }
- function readValueMessage(pbf) {
- var value = null,
- end = pbf.readVarint() + pbf.pos;
- while (pbf.pos < end) {
- var tag = pbf.readVarint() >> 3;
- value = tag === 1 ? pbf.readString() :
- tag === 2 ? pbf.readFloat() :
- tag === 3 ? pbf.readDouble() :
- tag === 4 ? pbf.readVarint64() :
- tag === 5 ? pbf.readVarint() :
- tag === 6 ? pbf.readSVarint() :
- tag === 7 ? pbf.readBoolean() : null;
- }
- return value;
- }
- // return feature `i` from this layer as a `VectorTileFeature`
- VectorTileLayer.prototype.feature = function(i) {
- if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');
- this._pbf.pos = this._features[i];
- var end = this._pbf.readVarint() + this._pbf.pos;
- return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values);
- };
- },{"./vectortilefeature.js":115}],117:[function(require,module,exports){
- var each = require('@turf/meta').coordEach;
- /**
- * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.
- *
- * @name bbox
- * @param {(Feature|FeatureCollection)} geojson input features
- * @returns {Array<number>} bbox extent in [minX, minY, maxX, maxY] order
- * @addToMap features, bboxPolygon
- * @example
- * var pt1 = turf.point([114.175329, 22.2524])
- * var pt2 = turf.point([114.170007, 22.267969])
- * var pt3 = turf.point([114.200649, 22.274641])
- * var pt4 = turf.point([114.200649, 22.274641])
- * var pt5 = turf.point([114.186744, 22.265745])
- * var features = turf.featureCollection([pt1, pt2, pt3, pt4, pt5])
- *
- * var bbox = turf.bbox(features);
- *
- * var bboxPolygon = turf.bboxPolygon(bbox);
- *
- * //=bbox
- *
- * //=bboxPolygon
- */
- module.exports = function (geojson) {
- var bbox = [Infinity, Infinity, -Infinity, -Infinity];
- each(geojson, function (coord) {
- if (bbox[0] > coord[0]) bbox[0] = coord[0];
- if (bbox[1] > coord[1]) bbox[1] = coord[1];
- if (bbox[2] < coord[0]) bbox[2] = coord[0];
- if (bbox[3] < coord[1]) bbox[3] = coord[1];
- });
- return bbox;
- };
- },{"@turf/meta":130}],118:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var invariant_1 = require("@turf/invariant");
- // http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule
- // modified from: https://github.com/substack/point-in-polygon/blob/master/index.js
- // which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
- /**
- * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point
- * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.
- *
- * @name booleanPointInPolygon
- * @param {Coord} point input point
- * @param {Feature<Polygon|MultiPolygon>} polygon input polygon or multipolygon
- * @param {Object} [options={}] Optional parameters
- * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if
- * the point is inside the polygon otherwise false.
- * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon
- * @example
- * var pt = turf.point([-77, 44]);
- * var poly = turf.polygon([[
- * [-81, 41],
- * [-81, 47],
- * [-72, 47],
- * [-72, 41],
- * [-81, 41]
- * ]]);
- *
- * turf.booleanPointInPolygon(pt, poly);
- * //= true
- */
- function booleanPointInPolygon(point, polygon, options) {
- if (options === void 0) { options = {}; }
- // validation
- if (!point) {
- throw new Error("point is required");
- }
- if (!polygon) {
- throw new Error("polygon is required");
- }
- var pt = invariant_1.getCoord(point);
- var geom = invariant_1.getGeom(polygon);
- var type = geom.type;
- var bbox = polygon.bbox;
- var polys = geom.coordinates;
- // Quick elimination if point is not inside bbox
- if (bbox && inBBox(pt, bbox) === false) {
- return false;
- }
- // normalize to multipolygon
- if (type === "Polygon") {
- polys = [polys];
- }
- var insidePoly = false;
- for (var i = 0; i < polys.length && !insidePoly; i++) {
- // check if it is in the outer ring first
- if (inRing(pt, polys[i][0], options.ignoreBoundary)) {
- var inHole = false;
- var k = 1;
- // check for the point in any of the holes
- while (k < polys[i].length && !inHole) {
- if (inRing(pt, polys[i][k], !options.ignoreBoundary)) {
- inHole = true;
- }
- k++;
- }
- if (!inHole) {
- insidePoly = true;
- }
- }
- }
- return insidePoly;
- }
- exports.default = booleanPointInPolygon;
- /**
- * inRing
- *
- * @private
- * @param {Array<number>} pt [x,y]
- * @param {Array<Array<number>>} ring [[x,y], [x,y],..]
- * @param {boolean} ignoreBoundary ignoreBoundary
- * @returns {boolean} inRing
- */
- function inRing(pt, ring, ignoreBoundary) {
- var isInside = false;
- if (ring[0][0] === ring[ring.length - 1][0] && ring[0][1] === ring[ring.length - 1][1]) {
- ring = ring.slice(0, ring.length - 1);
- }
- for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {
- var xi = ring[i][0];
- var yi = ring[i][1];
- var xj = ring[j][0];
- var yj = ring[j][1];
- var onBoundary = (pt[1] * (xi - xj) + yi * (xj - pt[0]) + yj * (pt[0] - xi) === 0) &&
- ((xi - pt[0]) * (xj - pt[0]) <= 0) && ((yi - pt[1]) * (yj - pt[1]) <= 0);
- if (onBoundary) {
- return !ignoreBoundary;
- }
- var intersect = ((yi > pt[1]) !== (yj > pt[1])) &&
- (pt[0] < (xj - xi) * (pt[1] - yi) / (yj - yi) + xi);
- if (intersect) {
- isInside = !isInside;
- }
- }
- return isInside;
- }
- /**
- * inBBox
- *
- * @private
- * @param {Position} pt point [x,y]
- * @param {BBox} bbox BBox [west, south, east, north]
- * @returns {boolean} true/false if point is inside BBox
- */
- function inBBox(pt, bbox) {
- return bbox[0] <= pt[0] &&
- bbox[1] <= pt[1] &&
- bbox[2] >= pt[0] &&
- bbox[3] >= pt[1];
- }
- },{"@turf/invariant":125}],119:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var invariant_1 = require("@turf/invariant");
- /**
- * Returns true if a point is on a line. Accepts a optional parameter to ignore the
- * start and end vertices of the linestring.
- *
- * @name booleanPointOnLine
- * @param {Coord} pt GeoJSON Point
- * @param {Feature<LineString>} line GeoJSON LineString
- * @param {Object} [options={}] Optional parameters
- * @param {boolean} [options.ignoreEndVertices=false] whether to ignore the start and end vertices.
- * @returns {boolean} true/false
- * @example
- * var pt = turf.point([0, 0]);
- * var line = turf.lineString([[-1, -1],[1, 1],[1.5, 2.2]]);
- * var isPointOnLine = turf.booleanPointOnLine(pt, line);
- * //=true
- */
- function booleanPointOnLine(pt, line, options) {
- if (options === void 0) { options = {}; }
- // Normalize inputs
- var ptCoords = invariant_1.getCoord(pt);
- var lineCoords = invariant_1.getCoords(line);
- // Main
- for (var i = 0; i < lineCoords.length - 1; i++) {
- var ignoreBoundary = false;
- if (options.ignoreEndVertices) {
- if (i === 0) {
- ignoreBoundary = "start";
- }
- if (i === lineCoords.length - 2) {
- ignoreBoundary = "end";
- }
- if (i === 0 && i + 1 === lineCoords.length - 1) {
- ignoreBoundary = "both";
- }
- }
- if (isPointOnLineSegment(lineCoords[i], lineCoords[i + 1], ptCoords, ignoreBoundary)) {
- return true;
- }
- }
- return false;
- }
- // See http://stackoverflow.com/a/4833823/1979085
- /**
- * @private
- * @param {Position} lineSegmentStart coord pair of start of line
- * @param {Position} lineSegmentEnd coord pair of end of line
- * @param {Position} pt coord pair of point to check
- * @param {boolean|string} excludeBoundary whether the point is allowed to fall on the line ends.
- * If true which end to ignore.
- * @returns {boolean} true/false
- */
- function isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt, excludeBoundary) {
- var x = pt[0];
- var y = pt[1];
- var x1 = lineSegmentStart[0];
- var y1 = lineSegmentStart[1];
- var x2 = lineSegmentEnd[0];
- var y2 = lineSegmentEnd[1];
- var dxc = pt[0] - x1;
- var dyc = pt[1] - y1;
- var dxl = x2 - x1;
- var dyl = y2 - y1;
- var cross = dxc * dyl - dyc * dxl;
- if (cross !== 0) {
- return false;
- }
- if (!excludeBoundary) {
- if (Math.abs(dxl) >= Math.abs(dyl)) {
- return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1;
- }
- return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1;
- }
- else if (excludeBoundary === "start") {
- if (Math.abs(dxl) >= Math.abs(dyl)) {
- return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1;
- }
- return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1;
- }
- else if (excludeBoundary === "end") {
- if (Math.abs(dxl) >= Math.abs(dyl)) {
- return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1;
- }
- return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1;
- }
- else if (excludeBoundary === "both") {
- if (Math.abs(dxl) >= Math.abs(dyl)) {
- return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1;
- }
- return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1;
- }
- return false;
- }
- exports.default = booleanPointOnLine;
- },{"@turf/invariant":125}],120:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var bbox_1 = require("@turf/bbox");
- var boolean_point_on_line_1 = require("@turf/boolean-point-on-line");
- var boolean_point_in_polygon_1 = require("@turf/boolean-point-in-polygon");
- var invariant_1 = require("@turf/invariant");
- /**
- * Boolean-within returns true if the first geometry is completely within the second geometry.
- * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a)
- * must not intersect the exterior of the secondary (geometry b).
- * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`.
- *
- * @name booleanWithin
- * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry
- * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry
- * @returns {boolean} true/false
- * @example
- * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);
- * var point = turf.point([1, 2]);
- *
- * turf.booleanWithin(point, line);
- * //=true
- */
- function booleanWithin(feature1, feature2) {
- var type1 = invariant_1.getType(feature1);
- var type2 = invariant_1.getType(feature2);
- var geom1 = invariant_1.getGeom(feature1);
- var geom2 = invariant_1.getGeom(feature2);
- switch (type1) {
- case 'Point':
- switch (type2) {
- case 'MultiPoint':
- return isPointInMultiPoint(geom1, geom2);
- case 'LineString':
- return boolean_point_on_line_1.default(geom1, geom2, { ignoreEndVertices: true });
- case 'Polygon':
- case 'MultiPolygon':
- return boolean_point_in_polygon_1.default(geom1, geom2, { ignoreBoundary: true });
- default:
- throw new Error('feature2 ' + type2 + ' geometry not supported');
- }
- case 'MultiPoint':
- switch (type2) {
- case 'MultiPoint':
- return isMultiPointInMultiPoint(geom1, geom2);
- case 'LineString':
- return isMultiPointOnLine(geom1, geom2);
- case 'Polygon':
- case 'MultiPolygon':
- return isMultiPointInPoly(geom1, geom2);
- default:
- throw new Error('feature2 ' + type2 + ' geometry not supported');
- }
- case 'LineString':
- switch (type2) {
- case 'LineString':
- return isLineOnLine(geom1, geom2);
- case 'Polygon':
- case 'MultiPolygon':
- return isLineInPoly(geom1, geom2);
- default:
- throw new Error('feature2 ' + type2 + ' geometry not supported');
- }
- case 'Polygon':
- switch (type2) {
- case 'Polygon':
- case 'MultiPolygon':
- return isPolyInPoly(geom1, geom2);
- default:
- throw new Error('feature2 ' + type2 + ' geometry not supported');
- }
- default:
- throw new Error('feature1 ' + type1 + ' geometry not supported');
- }
- }
- function isPointInMultiPoint(point, multiPoint) {
- var i;
- var output = false;
- for (i = 0; i < multiPoint.coordinates.length; i++) {
- if (compareCoords(multiPoint.coordinates[i], point.coordinates)) {
- output = true;
- break;
- }
- }
- return output;
- }
- function isMultiPointInMultiPoint(multiPoint1, multiPoint2) {
- for (var i = 0; i < multiPoint1.coordinates.length; i++) {
- var anyMatch = false;
- for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) {
- if (compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])) {
- anyMatch = true;
- }
- }
- if (!anyMatch) {
- return false;
- }
- }
- return true;
- }
- function isMultiPointOnLine(multiPoint, lineString) {
- var foundInsidePoint = false;
- for (var i = 0; i < multiPoint.coordinates.length; i++) {
- if (!boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString)) {
- return false;
- }
- if (!foundInsidePoint) {
- foundInsidePoint = boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString, { ignoreEndVertices: true });
- }
- }
- return foundInsidePoint;
- }
- function isMultiPointInPoly(multiPoint, polygon) {
- var output = true;
- var oneInside = false;
- for (var i = 0; i < multiPoint.coordinates.length; i++) {
- var isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon);
- if (!isInside) {
- output = false;
- break;
- }
- if (!oneInside) {
- isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon, { ignoreBoundary: true });
- }
- }
- return output && isInside;
- }
- function isLineOnLine(lineString1, lineString2) {
- for (var i = 0; i < lineString1.coordinates.length; i++) {
- if (!boolean_point_on_line_1.default(lineString1.coordinates[i], lineString2)) {
- return false;
- }
- }
- return true;
- }
- function isLineInPoly(linestring, polygon) {
- var polyBbox = bbox_1.default(polygon);
- var lineBbox = bbox_1.default(linestring);
- if (!doBBoxOverlap(polyBbox, lineBbox)) {
- return false;
- }
- var foundInsidePoint = false;
- for (var i = 0; i < linestring.coordinates.length - 1; i++) {
- if (!boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon)) {
- return false;
- }
- if (!foundInsidePoint) {
- foundInsidePoint = boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon, { ignoreBoundary: true });
- }
- if (!foundInsidePoint) {
- var midpoint = getMidpoint(linestring.coordinates[i], linestring.coordinates[i + 1]);
- foundInsidePoint = boolean_point_in_polygon_1.default(midpoint, polygon, { ignoreBoundary: true });
- }
- }
- return foundInsidePoint;
- }
- /**
- * Is Polygon2 in Polygon1
- * Only takes into account outer rings
- *
- * @private
- * @param {Geometry|Feature<Polygon>} feature1 Polygon1
- * @param {Geometry|Feature<Polygon>} feature2 Polygon2
- * @returns {boolean} true/false
- */
- function isPolyInPoly(feature1, feature2) {
- var poly1Bbox = bbox_1.default(feature1);
- var poly2Bbox = bbox_1.default(feature2);
- if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) {
- return false;
- }
- for (var i = 0; i < feature1.coordinates[0].length; i++) {
- if (!boolean_point_in_polygon_1.default(feature1.coordinates[0][i], feature2)) {
- return false;
- }
- }
- return true;
- }
- function doBBoxOverlap(bbox1, bbox2) {
- if (bbox1[0] > bbox2[0])
- return false;
- if (bbox1[2] < bbox2[2])
- return false;
- if (bbox1[1] > bbox2[1])
- return false;
- if (bbox1[3] < bbox2[3])
- return false;
- return true;
- }
- /**
- * compareCoords
- *
- * @private
- * @param {Position} pair1 point [x,y]
- * @param {Position} pair2 point [x,y]
- * @returns {boolean} true/false if coord pairs match
- */
- function compareCoords(pair1, pair2) {
- return pair1[0] === pair2[0] && pair1[1] === pair2[1];
- }
- /**
- * getMidpoint
- *
- * @private
- * @param {Position} pair1 point [x,y]
- * @param {Position} pair2 point [x,y]
- * @returns {Position} midpoint of pair1 and pair2
- */
- function getMidpoint(pair1, pair2) {
- return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];
- }
- exports.default = booleanWithin;
- },{"@turf/bbox":121,"@turf/boolean-point-in-polygon":118,"@turf/boolean-point-on-line":119,"@turf/invariant":125}],121:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var meta_1 = require("@turf/meta");
- /**
- * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.
- *
- * @name bbox
- * @param {GeoJSON} geojson any GeoJSON object
- * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order
- * @example
- * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);
- * var bbox = turf.bbox(line);
- * var bboxPolygon = turf.bboxPolygon(bbox);
- *
- * //addToMap
- * var addToMap = [line, bboxPolygon]
- */
- function bbox(geojson) {
- var result = [Infinity, Infinity, -Infinity, -Infinity];
- meta_1.coordEach(geojson, function (coord) {
- if (result[0] > coord[0]) {
- result[0] = coord[0];
- }
- if (result[1] > coord[1]) {
- result[1] = coord[1];
- }
- if (result[2] < coord[0]) {
- result[2] = coord[0];
- }
- if (result[3] < coord[1]) {
- result[3] = coord[1];
- }
- });
- return result;
- }
- exports.default = bbox;
- },{"@turf/meta":122}],122:[function(require,module,exports){
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- var helpers = require('@turf/helpers');
- /**
- * Callback for coordEach
- *
- * @callback coordEachCallback
- * @param {Array<number>} currentCoord The current coordinate being processed.
- * @param {number} coordIndex The current index of the coordinate being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
- * @param {number} geometryIndex The current index of the Geometry being processed.
- */
- /**
- * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()
- *
- * @name coordEach
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
- * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)
- * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.
- * @returns {void}
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {"foo": "bar"}),
- * turf.point([36, 53], {"hello": "world"})
- * ]);
- *
- * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
- * //=currentCoord
- * //=coordIndex
- * //=featureIndex
- * //=multiFeatureIndex
- * //=geometryIndex
- * });
- */
- function coordEach(geojson, callback, excludeWrapCoord) {
- // Handles null Geometry -- Skips this GeoJSON
- if (geojson === null) return;
- var j, k, l, geometry, stopG, coords,
- geometryMaybeCollection,
- wrapShrink = 0,
- coordIndex = 0,
- isGeometryCollection,
- type = geojson.type,
- isFeatureCollection = type === 'FeatureCollection',
- isFeature = type === 'Feature',
- stop = isFeatureCollection ? geojson.features.length : 1;
- // This logic may look a little weird. The reason why it is that way
- // is because it's trying to be fast. GeoJSON supports multiple kinds
- // of objects at its root: FeatureCollection, Features, Geometries.
- // This function has the responsibility of handling all of them, and that
- // means that some of the `for` loops you see below actually just don't apply
- // to certain inputs. For instance, if you give this just a
- // Point geometry, then both loops are short-circuited and all we do
- // is gradually rename the input until it's called 'geometry'.
- //
- // This also aims to allocate as few resources as possible: just a
- // few numbers and booleans, rather than any temporary arrays as would
- // be required with the normalization approach.
- for (var featureIndex = 0; featureIndex < stop; featureIndex++) {
- geometryMaybeCollection = (isFeatureCollection ? geojson.features[featureIndex].geometry :
- (isFeature ? geojson.geometry : geojson));
- isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;
- stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;
- for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {
- var multiFeatureIndex = 0;
- var geometryIndex = 0;
- geometry = isGeometryCollection ?
- geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;
- // Handles null Geometry -- Skips this geometry
- if (geometry === null) continue;
- coords = geometry.coordinates;
- var geomType = geometry.type;
- wrapShrink = (excludeWrapCoord && (geomType === 'Polygon' || geomType === 'MultiPolygon')) ? 1 : 0;
- switch (geomType) {
- case null:
- break;
- case 'Point':
- if (callback(coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
- coordIndex++;
- multiFeatureIndex++;
- break;
- case 'LineString':
- case 'MultiPoint':
- for (j = 0; j < coords.length; j++) {
- if (callback(coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
- coordIndex++;
- if (geomType === 'MultiPoint') multiFeatureIndex++;
- }
- if (geomType === 'LineString') multiFeatureIndex++;
- break;
- case 'Polygon':
- case 'MultiLineString':
- for (j = 0; j < coords.length; j++) {
- for (k = 0; k < coords[j].length - wrapShrink; k++) {
- if (callback(coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
- coordIndex++;
- }
- if (geomType === 'MultiLineString') multiFeatureIndex++;
- if (geomType === 'Polygon') geometryIndex++;
- }
- if (geomType === 'Polygon') multiFeatureIndex++;
- break;
- case 'MultiPolygon':
- for (j = 0; j < coords.length; j++) {
- geometryIndex = 0;
- for (k = 0; k < coords[j].length; k++) {
- for (l = 0; l < coords[j][k].length - wrapShrink; l++) {
- if (callback(coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
- coordIndex++;
- }
- geometryIndex++;
- }
- multiFeatureIndex++;
- }
- break;
- case 'GeometryCollection':
- for (j = 0; j < geometry.geometries.length; j++)
- if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false) return false;
- break;
- default:
- throw new Error('Unknown Geometry Type');
- }
- }
- }
- }
- /**
- * Callback for coordReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @callback coordReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {Array<number>} currentCoord The current coordinate being processed.
- * @param {number} coordIndex The current index of the coordinate being processed.
- * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
- * @param {number} featureIndex The current index of the Feature being processed.
- * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
- * @param {number} geometryIndex The current index of the Geometry being processed.
- */
- /**
- * Reduce coordinates in any GeoJSON object, similar to Array.reduce()
- *
- * @name coordReduce
- * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object
- * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.
- * @returns {*} The value that results from the reduction.
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {"foo": "bar"}),
- * turf.point([36, 53], {"hello": "world"})
- * ]);
- *
- * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
- * //=previousValue
- * //=currentCoord
- * //=coordIndex
- * //=featureIndex
- * //=multiFeatureIndex
- * //=geometryIndex
- * return currentCoord;
- * });
- */
- function coordReduce(geojson, callback, initialValue, excludeWrapCoord) {
- var previousValue = initialValue;
- coordEach(geojson, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
- if (coordIndex === 0 && initialValue === undefined) previousValue = currentCoord;
- else previousValue = callback(previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex);
- }, excludeWrapCoord);
- return previousValue;
- }
- /**
- * Callback for propEach
- *
- * @callback propEachCallback
- * @param {Object} currentProperties The current Properties being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- */
- /**
- * Iterate over properties in any GeoJSON object, similar to Array.forEach()
- *
- * @name propEach
- * @param {FeatureCollection|Feature} geojson any GeoJSON object
- * @param {Function} callback a method that takes (currentProperties, featureIndex)
- * @returns {void}
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {foo: 'bar'}),
- * turf.point([36, 53], {hello: 'world'})
- * ]);
- *
- * turf.propEach(features, function (currentProperties, featureIndex) {
- * //=currentProperties
- * //=featureIndex
- * });
- */
- function propEach(geojson, callback) {
- var i;
- switch (geojson.type) {
- case 'FeatureCollection':
- for (i = 0; i < geojson.features.length; i++) {
- if (callback(geojson.features[i].properties, i) === false) break;
- }
- break;
- case 'Feature':
- callback(geojson.properties, 0);
- break;
- }
- }
- /**
- * Callback for propReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @callback propReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {*} currentProperties The current Properties being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- */
- /**
- * Reduce properties in any GeoJSON object into a single value,
- * similar to how Array.reduce works. However, in this case we lazily run
- * the reduction, so an array of all properties is unnecessary.
- *
- * @name propReduce
- * @param {FeatureCollection|Feature} geojson any GeoJSON object
- * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @returns {*} The value that results from the reduction.
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {foo: 'bar'}),
- * turf.point([36, 53], {hello: 'world'})
- * ]);
- *
- * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {
- * //=previousValue
- * //=currentProperties
- * //=featureIndex
- * return currentProperties
- * });
- */
- function propReduce(geojson, callback, initialValue) {
- var previousValue = initialValue;
- propEach(geojson, function (currentProperties, featureIndex) {
- if (featureIndex === 0 && initialValue === undefined) previousValue = currentProperties;
- else previousValue = callback(previousValue, currentProperties, featureIndex);
- });
- return previousValue;
- }
- /**
- * Callback for featureEach
- *
- * @callback featureEachCallback
- * @param {Feature<any>} currentFeature The current Feature being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- */
- /**
- * Iterate over features in any GeoJSON object, similar to
- * Array.forEach.
- *
- * @name featureEach
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
- * @param {Function} callback a method that takes (currentFeature, featureIndex)
- * @returns {void}
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {foo: 'bar'}),
- * turf.point([36, 53], {hello: 'world'})
- * ]);
- *
- * turf.featureEach(features, function (currentFeature, featureIndex) {
- * //=currentFeature
- * //=featureIndex
- * });
- */
- function featureEach(geojson, callback) {
- if (geojson.type === 'Feature') {
- callback(geojson, 0);
- } else if (geojson.type === 'FeatureCollection') {
- for (var i = 0; i < geojson.features.length; i++) {
- if (callback(geojson.features[i], i) === false) break;
- }
- }
- }
- /**
- * Callback for featureReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @callback featureReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {Feature} currentFeature The current Feature being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- */
- /**
- * Reduce features in any GeoJSON object, similar to Array.reduce().
- *
- * @name featureReduce
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
- * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @returns {*} The value that results from the reduction.
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {"foo": "bar"}),
- * turf.point([36, 53], {"hello": "world"})
- * ]);
- *
- * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {
- * //=previousValue
- * //=currentFeature
- * //=featureIndex
- * return currentFeature
- * });
- */
- function featureReduce(geojson, callback, initialValue) {
- var previousValue = initialValue;
- featureEach(geojson, function (currentFeature, featureIndex) {
- if (featureIndex === 0 && initialValue === undefined) previousValue = currentFeature;
- else previousValue = callback(previousValue, currentFeature, featureIndex);
- });
- return previousValue;
- }
- /**
- * Get all coordinates from any GeoJSON object.
- *
- * @name coordAll
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
- * @returns {Array<Array<number>>} coordinate position array
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {foo: 'bar'}),
- * turf.point([36, 53], {hello: 'world'})
- * ]);
- *
- * var coords = turf.coordAll(features);
- * //= [[26, 37], [36, 53]]
- */
- function coordAll(geojson) {
- var coords = [];
- coordEach(geojson, function (coord) {
- coords.push(coord);
- });
- return coords;
- }
- /**
- * Callback for geomEach
- *
- * @callback geomEachCallback
- * @param {Geometry} currentGeometry The current Geometry being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- * @param {Object} featureProperties The current Feature Properties being processed.
- * @param {Array<number>} featureBBox The current Feature BBox being processed.
- * @param {number|string} featureId The current Feature Id being processed.
- */
- /**
- * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()
- *
- * @name geomEach
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
- * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
- * @returns {void}
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {foo: 'bar'}),
- * turf.point([36, 53], {hello: 'world'})
- * ]);
- *
- * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
- * //=currentGeometry
- * //=featureIndex
- * //=featureProperties
- * //=featureBBox
- * //=featureId
- * });
- */
- function geomEach(geojson, callback) {
- var i, j, g, geometry, stopG,
- geometryMaybeCollection,
- isGeometryCollection,
- featureProperties,
- featureBBox,
- featureId,
- featureIndex = 0,
- isFeatureCollection = geojson.type === 'FeatureCollection',
- isFeature = geojson.type === 'Feature',
- stop = isFeatureCollection ? geojson.features.length : 1;
- // This logic may look a little weird. The reason why it is that way
- // is because it's trying to be fast. GeoJSON supports multiple kinds
- // of objects at its root: FeatureCollection, Features, Geometries.
- // This function has the responsibility of handling all of them, and that
- // means that some of the `for` loops you see below actually just don't apply
- // to certain inputs. For instance, if you give this just a
- // Point geometry, then both loops are short-circuited and all we do
- // is gradually rename the input until it's called 'geometry'.
- //
- // This also aims to allocate as few resources as possible: just a
- // few numbers and booleans, rather than any temporary arrays as would
- // be required with the normalization approach.
- for (i = 0; i < stop; i++) {
- geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry :
- (isFeature ? geojson.geometry : geojson));
- featureProperties = (isFeatureCollection ? geojson.features[i].properties :
- (isFeature ? geojson.properties : {}));
- featureBBox = (isFeatureCollection ? geojson.features[i].bbox :
- (isFeature ? geojson.bbox : undefined));
- featureId = (isFeatureCollection ? geojson.features[i].id :
- (isFeature ? geojson.id : undefined));
- isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;
- stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;
- for (g = 0; g < stopG; g++) {
- geometry = isGeometryCollection ?
- geometryMaybeCollection.geometries[g] : geometryMaybeCollection;
- // Handle null Geometry
- if (geometry === null) {
- if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) return false;
- continue;
- }
- switch (geometry.type) {
- case 'Point':
- case 'LineString':
- case 'MultiPoint':
- case 'Polygon':
- case 'MultiLineString':
- case 'MultiPolygon': {
- if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) return false;
- break;
- }
- case 'GeometryCollection': {
- for (j = 0; j < geometry.geometries.length; j++) {
- if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) return false;
- }
- break;
- }
- default:
- throw new Error('Unknown Geometry Type');
- }
- }
- // Only increase `featureIndex` per each feature
- featureIndex++;
- }
- }
- /**
- * Callback for geomReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @callback geomReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {Geometry} currentGeometry The current Geometry being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- * @param {Object} featureProperties The current Feature Properties being processed.
- * @param {Array<number>} featureBBox The current Feature BBox being processed.
- * @param {number|string} featureId The current Feature Id being processed.
- */
- /**
- * Reduce geometry in any GeoJSON object, similar to Array.reduce().
- *
- * @name geomReduce
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
- * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @returns {*} The value that results from the reduction.
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {foo: 'bar'}),
- * turf.point([36, 53], {hello: 'world'})
- * ]);
- *
- * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
- * //=previousValue
- * //=currentGeometry
- * //=featureIndex
- * //=featureProperties
- * //=featureBBox
- * //=featureId
- * return currentGeometry
- * });
- */
- function geomReduce(geojson, callback, initialValue) {
- var previousValue = initialValue;
- geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
- if (featureIndex === 0 && initialValue === undefined) previousValue = currentGeometry;
- else previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId);
- });
- return previousValue;
- }
- /**
- * Callback for flattenEach
- *
- * @callback flattenEachCallback
- * @param {Feature} currentFeature The current flattened feature being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
- */
- /**
- * Iterate over flattened features in any GeoJSON object, similar to
- * Array.forEach.
- *
- * @name flattenEach
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
- * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {foo: 'bar'}),
- * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})
- * ]);
- *
- * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {
- * //=currentFeature
- * //=featureIndex
- * //=multiFeatureIndex
- * });
- */
- function flattenEach(geojson, callback) {
- geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {
- // Callback for single geometry
- var type = (geometry === null) ? null : geometry.type;
- switch (type) {
- case null:
- case 'Point':
- case 'LineString':
- case 'Polygon':
- if (callback(helpers.feature(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) return false;
- return;
- }
- var geomType;
- // Callback for multi-geometry
- switch (type) {
- case 'MultiPoint':
- geomType = 'Point';
- break;
- case 'MultiLineString':
- geomType = 'LineString';
- break;
- case 'MultiPolygon':
- geomType = 'Polygon';
- break;
- }
- for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {
- var coordinate = geometry.coordinates[multiFeatureIndex];
- var geom = {
- type: geomType,
- coordinates: coordinate
- };
- if (callback(helpers.feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false;
- }
- });
- }
- /**
- * Callback for flattenReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @callback flattenReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {Feature} currentFeature The current Feature being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
- */
- /**
- * Reduce flattened features in any GeoJSON object, similar to Array.reduce().
- *
- * @name flattenReduce
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
- * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @returns {*} The value that results from the reduction.
- * @example
- * var features = turf.featureCollection([
- * turf.point([26, 37], {foo: 'bar'}),
- * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})
- * ]);
- *
- * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {
- * //=previousValue
- * //=currentFeature
- * //=featureIndex
- * //=multiFeatureIndex
- * return currentFeature
- * });
- */
- function flattenReduce(geojson, callback, initialValue) {
- var previousValue = initialValue;
- flattenEach(geojson, function (currentFeature, featureIndex, multiFeatureIndex) {
- if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === undefined) previousValue = currentFeature;
- else previousValue = callback(previousValue, currentFeature, featureIndex, multiFeatureIndex);
- });
- return previousValue;
- }
- /**
- * Callback for segmentEach
- *
- * @callback segmentEachCallback
- * @param {Feature<LineString>} currentSegment The current Segment being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
- * @param {number} geometryIndex The current index of the Geometry being processed.
- * @param {number} segmentIndex The current index of the Segment being processed.
- * @returns {void}
- */
- /**
- * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()
- * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.
- *
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON
- * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)
- * @returns {void}
- * @example
- * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);
- *
- * // Iterate over GeoJSON by 2-vertex segments
- * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {
- * //=currentSegment
- * //=featureIndex
- * //=multiFeatureIndex
- * //=geometryIndex
- * //=segmentIndex
- * });
- *
- * // Calculate the total number of segments
- * var total = 0;
- * turf.segmentEach(polygon, function () {
- * total++;
- * });
- */
- function segmentEach(geojson, callback) {
- flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {
- var segmentIndex = 0;
- // Exclude null Geometries
- if (!feature.geometry) return;
- // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.
- var type = feature.geometry.type;
- if (type === 'Point' || type === 'MultiPoint') return;
- // Generate 2-vertex line segments
- var previousCoords;
- var previousFeatureIndex = 0;
- var previousMultiIndex = 0;
- var prevGeomIndex = 0;
- if (coordEach(feature, function (currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {
- // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`
- if (previousCoords === undefined || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {
- previousCoords = currentCoord;
- previousFeatureIndex = featureIndex;
- previousMultiIndex = multiPartIndexCoord;
- prevGeomIndex = geometryIndex;
- segmentIndex = 0;
- return;
- }
- var currentSegment = helpers.lineString([previousCoords, currentCoord], feature.properties);
- if (callback(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) === false) return false;
- segmentIndex++;
- previousCoords = currentCoord;
- }) === false) return false;
- });
- }
- /**
- * Callback for segmentReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @callback segmentReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {Feature<LineString>} currentSegment The current Segment being processed.
- * @param {number} featureIndex The current index of the Feature being processed.
- * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
- * @param {number} geometryIndex The current index of the Geometry being processed.
- * @param {number} segmentIndex The current index of the Segment being processed.
- */
- /**
- * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()
- * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.
- *
- * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON
- * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @returns {void}
- * @example
- * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);
- *
- * // Iterate over GeoJSON by 2-vertex segments
- * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {
- * //= previousSegment
- * //= currentSegment
- * //= featureIndex
- * //= multiFeatureIndex
- * //= geometryIndex
- * //= segmentInex
- * return currentSegment
- * });
- *
- * // Calculate the total number of segments
- * var initialValue = 0
- * var total = turf.segmentReduce(polygon, function (previousValue) {
- * previousValue++;
- * return previousValue;
- * }, initialValue);
- */
- function segmentReduce(geojson, callback, initialValue) {
- var previousValue = initialValue;
- var started = false;
- segmentEach(geojson, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {
- if (started === false && initialValue === undefined) previousValue = currentSegment;
- else previousValue = callback(previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex);
- started = true;
- });
- return previousValue;
- }
- /**
- * Callback for lineEach
- *
- * @callback lineEachCallback
- * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed
- * @param {number} featureIndex The current index of the Feature being processed
- * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed
- * @param {number} geometryIndex The current index of the Geometry being processed
- */
- /**
- * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,
- * similar to Array.forEach.
- *
- * @name lineEach
- * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object
- * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)
- * @example
- * var multiLine = turf.multiLineString([
- * [[26, 37], [35, 45]],
- * [[36, 53], [38, 50], [41, 55]]
- * ]);
- *
- * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {
- * //=currentLine
- * //=featureIndex
- * //=multiFeatureIndex
- * //=geometryIndex
- * });
- */
- function lineEach(geojson, callback) {
- // validation
- if (!geojson) throw new Error('geojson is required');
- flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {
- if (feature.geometry === null) return;
- var type = feature.geometry.type;
- var coords = feature.geometry.coordinates;
- switch (type) {
- case 'LineString':
- if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false) return false;
- break;
- case 'Polygon':
- for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {
- if (callback(helpers.lineString(coords[geometryIndex], feature.properties), featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
- }
- break;
- }
- });
- }
- /**
- * Callback for lineReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @callback lineReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed.
- * @param {number} featureIndex The current index of the Feature being processed
- * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed
- * @param {number} geometryIndex The current index of the Geometry being processed
- */
- /**
- * Reduce features in any GeoJSON object, similar to Array.reduce().
- *
- * @name lineReduce
- * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object
- * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @returns {*} The value that results from the reduction.
- * @example
- * var multiPoly = turf.multiPolygon([
- * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),
- * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])
- * ]);
- *
- * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {
- * //=previousValue
- * //=currentLine
- * //=featureIndex
- * //=multiFeatureIndex
- * //=geometryIndex
- * return currentLine
- * });
- */
- function lineReduce(geojson, callback, initialValue) {
- var previousValue = initialValue;
- lineEach(geojson, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {
- if (featureIndex === 0 && initialValue === undefined) previousValue = currentLine;
- else previousValue = callback(previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex);
- });
- return previousValue;
- }
- /**
- * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.
- *
- * Negative indexes are permitted.
- * Point & MultiPoint will always return null.
- *
- * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry
- * @param {Object} [options={}] Optional parameters
- * @param {number} [options.featureIndex=0] Feature Index
- * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index
- * @param {number} [options.geometryIndex=0] Geometry Index
- * @param {number} [options.segmentIndex=0] Segment Index
- * @param {Object} [options.properties={}] Translate Properties to output LineString
- * @param {BBox} [options.bbox={}] Translate BBox to output LineString
- * @param {number|string} [options.id={}] Translate Id to output LineString
- * @returns {Feature<LineString>} 2-vertex GeoJSON Feature LineString
- * @example
- * var multiLine = turf.multiLineString([
- * [[10, 10], [50, 30], [30, 40]],
- * [[-10, -10], [-50, -30], [-30, -40]]
- * ]);
- *
- * // First Segment (defaults are 0)
- * turf.findSegment(multiLine);
- * // => Feature<LineString<[[10, 10], [50, 30]]>>
- *
- * // First Segment of 2nd Multi Feature
- * turf.findSegment(multiLine, {multiFeatureIndex: 1});
- * // => Feature<LineString<[[-10, -10], [-50, -30]]>>
- *
- * // Last Segment of Last Multi Feature
- * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});
- * // => Feature<LineString<[[-50, -30], [-30, -40]]>>
- */
- function findSegment(geojson, options) {
- // Optional Parameters
- options = options || {};
- if (!helpers.isObject(options)) throw new Error('options is invalid');
- var featureIndex = options.featureIndex || 0;
- var multiFeatureIndex = options.multiFeatureIndex || 0;
- var geometryIndex = options.geometryIndex || 0;
- var segmentIndex = options.segmentIndex || 0;
- // Find FeatureIndex
- var properties = options.properties;
- var geometry;
- switch (geojson.type) {
- case 'FeatureCollection':
- if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;
- properties = properties || geojson.features[featureIndex].properties;
- geometry = geojson.features[featureIndex].geometry;
- break;
- case 'Feature':
- properties = properties || geojson.properties;
- geometry = geojson.geometry;
- break;
- case 'Point':
- case 'MultiPoint':
- return null;
- case 'LineString':
- case 'Polygon':
- case 'MultiLineString':
- case 'MultiPolygon':
- geometry = geojson;
- break;
- default:
- throw new Error('geojson is invalid');
- }
- // Find SegmentIndex
- if (geometry === null) return null;
- var coords = geometry.coordinates;
- switch (geometry.type) {
- case 'Point':
- case 'MultiPoint':
- return null;
- case 'LineString':
- if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;
- return helpers.lineString([coords[segmentIndex], coords[segmentIndex + 1]], properties, options);
- case 'Polygon':
- if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;
- if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1;
- return helpers.lineString([coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1]], properties, options);
- case 'MultiLineString':
- if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
- if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;
- return helpers.lineString([coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1]], properties, options);
- case 'MultiPolygon':
- if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
- if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;
- if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;
- return helpers.lineString([coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]], properties, options);
- }
- throw new Error('geojson is invalid');
- }
- /**
- * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.
- *
- * Negative indexes are permitted.
- *
- * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry
- * @param {Object} [options={}] Optional parameters
- * @param {number} [options.featureIndex=0] Feature Index
- * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index
- * @param {number} [options.geometryIndex=0] Geometry Index
- * @param {number} [options.coordIndex=0] Coord Index
- * @param {Object} [options.properties={}] Translate Properties to output Point
- * @param {BBox} [options.bbox={}] Translate BBox to output Point
- * @param {number|string} [options.id={}] Translate Id to output Point
- * @returns {Feature<Point>} 2-vertex GeoJSON Feature Point
- * @example
- * var multiLine = turf.multiLineString([
- * [[10, 10], [50, 30], [30, 40]],
- * [[-10, -10], [-50, -30], [-30, -40]]
- * ]);
- *
- * // First Segment (defaults are 0)
- * turf.findPoint(multiLine);
- * // => Feature<Point<[10, 10]>>
- *
- * // First Segment of the 2nd Multi-Feature
- * turf.findPoint(multiLine, {multiFeatureIndex: 1});
- * // => Feature<Point<[-10, -10]>>
- *
- * // Last Segment of last Multi-Feature
- * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});
- * // => Feature<Point<[-30, -40]>>
- */
- function findPoint(geojson, options) {
- // Optional Parameters
- options = options || {};
- if (!helpers.isObject(options)) throw new Error('options is invalid');
- var featureIndex = options.featureIndex || 0;
- var multiFeatureIndex = options.multiFeatureIndex || 0;
- var geometryIndex = options.geometryIndex || 0;
- var coordIndex = options.coordIndex || 0;
- // Find FeatureIndex
- var properties = options.properties;
- var geometry;
- switch (geojson.type) {
- case 'FeatureCollection':
- if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;
- properties = properties || geojson.features[featureIndex].properties;
- geometry = geojson.features[featureIndex].geometry;
- break;
- case 'Feature':
- properties = properties || geojson.properties;
- geometry = geojson.geometry;
- break;
- case 'Point':
- case 'MultiPoint':
- return null;
- case 'LineString':
- case 'Polygon':
- case 'MultiLineString':
- case 'MultiPolygon':
- geometry = geojson;
- break;
- default:
- throw new Error('geojson is invalid');
- }
- // Find Coord Index
- if (geometry === null) return null;
- var coords = geometry.coordinates;
- switch (geometry.type) {
- case 'Point':
- return helpers.point(coords, properties, options);
- case 'MultiPoint':
- if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
- return helpers.point(coords[multiFeatureIndex], properties, options);
- case 'LineString':
- if (coordIndex < 0) coordIndex = coords.length + coordIndex;
- return helpers.point(coords[coordIndex], properties, options);
- case 'Polygon':
- if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;
- if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex;
- return helpers.point(coords[geometryIndex][coordIndex], properties, options);
- case 'MultiLineString':
- if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
- if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex;
- return helpers.point(coords[multiFeatureIndex][coordIndex], properties, options);
- case 'MultiPolygon':
- if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
- if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;
- if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;
- return helpers.point(coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options);
- }
- throw new Error('geojson is invalid');
- }
- exports.coordEach = coordEach;
- exports.coordReduce = coordReduce;
- exports.propEach = propEach;
- exports.propReduce = propReduce;
- exports.featureEach = featureEach;
- exports.featureReduce = featureReduce;
- exports.coordAll = coordAll;
- exports.geomEach = geomEach;
- exports.geomReduce = geomReduce;
- exports.flattenEach = flattenEach;
- exports.flattenReduce = flattenReduce;
- exports.segmentEach = segmentEach;
- exports.segmentReduce = segmentReduce;
- exports.lineEach = lineEach;
- exports.lineReduce = lineReduce;
- exports.findSegment = findSegment;
- exports.findPoint = findPoint;
- },{"@turf/helpers":123}],123:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- /**
- * @module helpers
- */
- /**
- * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
- *
- * @memberof helpers
- * @type {number}
- */
- exports.earthRadius = 6371008.8;
- /**
- * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
- *
- * @memberof helpers
- * @type {Object}
- */
- exports.factors = {
- centimeters: exports.earthRadius * 100,
- centimetres: exports.earthRadius * 100,
- degrees: exports.earthRadius / 111325,
- feet: exports.earthRadius * 3.28084,
- inches: exports.earthRadius * 39.370,
- kilometers: exports.earthRadius / 1000,
- kilometres: exports.earthRadius / 1000,
- meters: exports.earthRadius,
- metres: exports.earthRadius,
- miles: exports.earthRadius / 1609.344,
- millimeters: exports.earthRadius * 1000,
- millimetres: exports.earthRadius * 1000,
- nauticalmiles: exports.earthRadius / 1852,
- radians: 1,
- yards: exports.earthRadius / 1.0936,
- };
- /**
- * Units of measurement factors based on 1 meter.
- *
- * @memberof helpers
- * @type {Object}
- */
- exports.unitsFactors = {
- centimeters: 100,
- centimetres: 100,
- degrees: 1 / 111325,
- feet: 3.28084,
- inches: 39.370,
- kilometers: 1 / 1000,
- kilometres: 1 / 1000,
- meters: 1,
- metres: 1,
- miles: 1 / 1609.344,
- millimeters: 1000,
- millimetres: 1000,
- nauticalmiles: 1 / 1852,
- radians: 1 / exports.earthRadius,
- yards: 1 / 1.0936,
- };
- /**
- * Area of measurement factors based on 1 square meter.
- *
- * @memberof helpers
- * @type {Object}
- */
- exports.areaFactors = {
- acres: 0.000247105,
- centimeters: 10000,
- centimetres: 10000,
- feet: 10.763910417,
- inches: 1550.003100006,
- kilometers: 0.000001,
- kilometres: 0.000001,
- meters: 1,
- metres: 1,
- miles: 3.86e-7,
- millimeters: 1000000,
- millimetres: 1000000,
- yards: 1.195990046,
- };
- /**
- * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
- *
- * @name feature
- * @param {Geometry} geometry input geometry
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature} a GeoJSON Feature
- * @example
- * var geometry = {
- * "type": "Point",
- * "coordinates": [110, 50]
- * };
- *
- * var feature = turf.feature(geometry);
- *
- * //=feature
- */
- function feature(geom, properties, options) {
- if (options === void 0) { options = {}; }
- var feat = { type: "Feature" };
- if (options.id === 0 || options.id) {
- feat.id = options.id;
- }
- if (options.bbox) {
- feat.bbox = options.bbox;
- }
- feat.properties = properties || {};
- feat.geometry = geom;
- return feat;
- }
- exports.feature = feature;
- /**
- * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
- * For GeometryCollection type use `helpers.geometryCollection`
- *
- * @name geometry
- * @param {string} type Geometry Type
- * @param {Array<any>} coordinates Coordinates
- * @param {Object} [options={}] Optional Parameters
- * @returns {Geometry} a GeoJSON Geometry
- * @example
- * var type = "Point";
- * var coordinates = [110, 50];
- * var geometry = turf.geometry(type, coordinates);
- * // => geometry
- */
- function geometry(type, coordinates, options) {
- if (options === void 0) { options = {}; }
- switch (type) {
- case "Point": return point(coordinates).geometry;
- case "LineString": return lineString(coordinates).geometry;
- case "Polygon": return polygon(coordinates).geometry;
- case "MultiPoint": return multiPoint(coordinates).geometry;
- case "MultiLineString": return multiLineString(coordinates).geometry;
- case "MultiPolygon": return multiPolygon(coordinates).geometry;
- default: throw new Error(type + " is invalid");
- }
- }
- exports.geometry = geometry;
- /**
- * Creates a {@link Point} {@link Feature} from a Position.
- *
- * @name point
- * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<Point>} a Point feature
- * @example
- * var point = turf.point([-75.343, 39.984]);
- *
- * //=point
- */
- function point(coordinates, properties, options) {
- if (options === void 0) { options = {}; }
- var geom = {
- type: "Point",
- coordinates: coordinates,
- };
- return feature(geom, properties, options);
- }
- exports.point = point;
- /**
- * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
- *
- * @name points
- * @param {Array<Array<number>>} coordinates an array of Points
- * @param {Object} [properties={}] Translate these properties to each Feature
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
- * associated with the FeatureCollection
- * @param {string|number} [options.id] Identifier associated with the FeatureCollection
- * @returns {FeatureCollection<Point>} Point Feature
- * @example
- * var points = turf.points([
- * [-75, 39],
- * [-80, 45],
- * [-78, 50]
- * ]);
- *
- * //=points
- */
- function points(coordinates, properties, options) {
- if (options === void 0) { options = {}; }
- return featureCollection(coordinates.map(function (coords) {
- return point(coords, properties);
- }), options);
- }
- exports.points = points;
- /**
- * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
- *
- * @name polygon
- * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<Polygon>} Polygon Feature
- * @example
- * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
- *
- * //=polygon
- */
- function polygon(coordinates, properties, options) {
- if (options === void 0) { options = {}; }
- for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
- var ring = coordinates_1[_i];
- if (ring.length < 4) {
- throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
- }
- for (var j = 0; j < ring[ring.length - 1].length; j++) {
- // Check if first point of Polygon contains two numbers
- if (ring[ring.length - 1][j] !== ring[0][j]) {
- throw new Error("First and last Position are not equivalent.");
- }
- }
- }
- var geom = {
- type: "Polygon",
- coordinates: coordinates,
- };
- return feature(geom, properties, options);
- }
- exports.polygon = polygon;
- /**
- * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
- *
- * @name polygons
- * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the FeatureCollection
- * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
- * @example
- * var polygons = turf.polygons([
- * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
- * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
- * ]);
- *
- * //=polygons
- */
- function polygons(coordinates, properties, options) {
- if (options === void 0) { options = {}; }
- return featureCollection(coordinates.map(function (coords) {
- return polygon(coords, properties);
- }), options);
- }
- exports.polygons = polygons;
- /**
- * Creates a {@link LineString} {@link Feature} from an Array of Positions.
- *
- * @name lineString
- * @param {Array<Array<number>>} coordinates an array of Positions
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<LineString>} LineString Feature
- * @example
- * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
- * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
- *
- * //=linestring1
- * //=linestring2
- */
- function lineString(coordinates, properties, options) {
- if (options === void 0) { options = {}; }
- if (coordinates.length < 2) {
- throw new Error("coordinates must be an array of two or more positions");
- }
- var geom = {
- type: "LineString",
- coordinates: coordinates,
- };
- return feature(geom, properties, options);
- }
- exports.lineString = lineString;
- /**
- * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
- *
- * @name lineStrings
- * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
- * associated with the FeatureCollection
- * @param {string|number} [options.id] Identifier associated with the FeatureCollection
- * @returns {FeatureCollection<LineString>} LineString FeatureCollection
- * @example
- * var linestrings = turf.lineStrings([
- * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
- * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
- * ]);
- *
- * //=linestrings
- */
- function lineStrings(coordinates, properties, options) {
- if (options === void 0) { options = {}; }
- return featureCollection(coordinates.map(function (coords) {
- return lineString(coords, properties);
- }), options);
- }
- exports.lineStrings = lineStrings;
- /**
- * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
- *
- * @name featureCollection
- * @param {Feature[]} features input features
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {FeatureCollection} FeatureCollection of Features
- * @example
- * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
- * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
- * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
- *
- * var collection = turf.featureCollection([
- * locationA,
- * locationB,
- * locationC
- * ]);
- *
- * //=collection
- */
- function featureCollection(features, options) {
- if (options === void 0) { options = {}; }
- var fc = { type: "FeatureCollection" };
- if (options.id) {
- fc.id = options.id;
- }
- if (options.bbox) {
- fc.bbox = options.bbox;
- }
- fc.features = features;
- return fc;
- }
- exports.featureCollection = featureCollection;
- /**
- * Creates a {@link Feature<MultiLineString>} based on a
- * coordinate array. Properties can be added optionally.
- *
- * @name multiLineString
- * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<MultiLineString>} a MultiLineString feature
- * @throws {Error} if no coordinates are passed
- * @example
- * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
- *
- * //=multiLine
- */
- function multiLineString(coordinates, properties, options) {
- if (options === void 0) { options = {}; }
- var geom = {
- type: "MultiLineString",
- coordinates: coordinates,
- };
- return feature(geom, properties, options);
- }
- exports.multiLineString = multiLineString;
- /**
- * Creates a {@link Feature<MultiPoint>} based on a
- * coordinate array. Properties can be added optionally.
- *
- * @name multiPoint
- * @param {Array<Array<number>>} coordinates an array of Positions
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<MultiPoint>} a MultiPoint feature
- * @throws {Error} if no coordinates are passed
- * @example
- * var multiPt = turf.multiPoint([[0,0],[10,10]]);
- *
- * //=multiPt
- */
- function multiPoint(coordinates, properties, options) {
- if (options === void 0) { options = {}; }
- var geom = {
- type: "MultiPoint",
- coordinates: coordinates,
- };
- return feature(geom, properties, options);
- }
- exports.multiPoint = multiPoint;
- /**
- * Creates a {@link Feature<MultiPolygon>} based on a
- * coordinate array. Properties can be added optionally.
- *
- * @name multiPolygon
- * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<MultiPolygon>} a multipolygon feature
- * @throws {Error} if no coordinates are passed
- * @example
- * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
- *
- * //=multiPoly
- *
- */
- function multiPolygon(coordinates, properties, options) {
- if (options === void 0) { options = {}; }
- var geom = {
- type: "MultiPolygon",
- coordinates: coordinates,
- };
- return feature(geom, properties, options);
- }
- exports.multiPolygon = multiPolygon;
- /**
- * Creates a {@link Feature<GeometryCollection>} based on a
- * coordinate array. Properties can be added optionally.
- *
- * @name geometryCollection
- * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
- * @example
- * var pt = turf.geometry("Point", [100, 0]);
- * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
- * var collection = turf.geometryCollection([pt, line]);
- *
- * // => collection
- */
- function geometryCollection(geometries, properties, options) {
- if (options === void 0) { options = {}; }
- var geom = {
- type: "GeometryCollection",
- geometries: geometries,
- };
- return feature(geom, properties, options);
- }
- exports.geometryCollection = geometryCollection;
- /**
- * Round number to precision
- *
- * @param {number} num Number
- * @param {number} [precision=0] Precision
- * @returns {number} rounded number
- * @example
- * turf.round(120.4321)
- * //=120
- *
- * turf.round(120.4321, 2)
- * //=120.43
- */
- function round(num, precision) {
- if (precision === void 0) { precision = 0; }
- if (precision && !(precision >= 0)) {
- throw new Error("precision must be a positive number");
- }
- var multiplier = Math.pow(10, precision || 0);
- return Math.round(num * multiplier) / multiplier;
- }
- exports.round = round;
- /**
- * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
- * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
- *
- * @name radiansToLength
- * @param {number} radians in radians across the sphere
- * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
- * meters, kilometres, kilometers.
- * @returns {number} distance
- */
- function radiansToLength(radians, units) {
- if (units === void 0) { units = "kilometers"; }
- var factor = exports.factors[units];
- if (!factor) {
- throw new Error(units + " units is invalid");
- }
- return radians * factor;
- }
- exports.radiansToLength = radiansToLength;
- /**
- * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
- * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
- *
- * @name lengthToRadians
- * @param {number} distance in real units
- * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
- * meters, kilometres, kilometers.
- * @returns {number} radians
- */
- function lengthToRadians(distance, units) {
- if (units === void 0) { units = "kilometers"; }
- var factor = exports.factors[units];
- if (!factor) {
- throw new Error(units + " units is invalid");
- }
- return distance / factor;
- }
- exports.lengthToRadians = lengthToRadians;
- /**
- * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
- * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
- *
- * @name lengthToDegrees
- * @param {number} distance in real units
- * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
- * meters, kilometres, kilometers.
- * @returns {number} degrees
- */
- function lengthToDegrees(distance, units) {
- return radiansToDegrees(lengthToRadians(distance, units));
- }
- exports.lengthToDegrees = lengthToDegrees;
- /**
- * Converts any bearing angle from the north line direction (positive clockwise)
- * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
- *
- * @name bearingToAzimuth
- * @param {number} bearing angle, between -180 and +180 degrees
- * @returns {number} angle between 0 and 360 degrees
- */
- function bearingToAzimuth(bearing) {
- var angle = bearing % 360;
- if (angle < 0) {
- angle += 360;
- }
- return angle;
- }
- exports.bearingToAzimuth = bearingToAzimuth;
- /**
- * Converts an angle in radians to degrees
- *
- * @name radiansToDegrees
- * @param {number} radians angle in radians
- * @returns {number} degrees between 0 and 360 degrees
- */
- function radiansToDegrees(radians) {
- var degrees = radians % (2 * Math.PI);
- return degrees * 180 / Math.PI;
- }
- exports.radiansToDegrees = radiansToDegrees;
- /**
- * Converts an angle in degrees to radians
- *
- * @name degreesToRadians
- * @param {number} degrees angle between 0 and 360 degrees
- * @returns {number} angle in radians
- */
- function degreesToRadians(degrees) {
- var radians = degrees % 360;
- return radians * Math.PI / 180;
- }
- exports.degreesToRadians = degreesToRadians;
- /**
- * Converts a length to the requested unit.
- * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
- *
- * @param {number} length to be converted
- * @param {Units} [originalUnit="kilometers"] of the length
- * @param {Units} [finalUnit="kilometers"] returned unit
- * @returns {number} the converted length
- */
- function convertLength(length, originalUnit, finalUnit) {
- if (originalUnit === void 0) { originalUnit = "kilometers"; }
- if (finalUnit === void 0) { finalUnit = "kilometers"; }
- if (!(length >= 0)) {
- throw new Error("length must be a positive number");
- }
- return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
- }
- exports.convertLength = convertLength;
- /**
- * Converts a area to the requested unit.
- * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
- * @param {number} area to be converted
- * @param {Units} [originalUnit="meters"] of the distance
- * @param {Units} [finalUnit="kilometers"] returned unit
- * @returns {number} the converted distance
- */
- function convertArea(area, originalUnit, finalUnit) {
- if (originalUnit === void 0) { originalUnit = "meters"; }
- if (finalUnit === void 0) { finalUnit = "kilometers"; }
- if (!(area >= 0)) {
- throw new Error("area must be a positive number");
- }
- var startFactor = exports.areaFactors[originalUnit];
- if (!startFactor) {
- throw new Error("invalid original units");
- }
- var finalFactor = exports.areaFactors[finalUnit];
- if (!finalFactor) {
- throw new Error("invalid final units");
- }
- return (area / startFactor) * finalFactor;
- }
- exports.convertArea = convertArea;
- /**
- * isNumber
- *
- * @param {*} num Number to validate
- * @returns {boolean} true/false
- * @example
- * turf.isNumber(123)
- * //=true
- * turf.isNumber('foo')
- * //=false
- */
- function isNumber(num) {
- return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
- }
- exports.isNumber = isNumber;
- /**
- * isObject
- *
- * @param {*} input variable to validate
- * @returns {boolean} true/false
- * @example
- * turf.isObject({elevation: 10})
- * //=true
- * turf.isObject('foo')
- * //=false
- */
- function isObject(input) {
- return (!!input) && (input.constructor === Object);
- }
- exports.isObject = isObject;
- /**
- * Validate BBox
- *
- * @private
- * @param {Array<number>} bbox BBox to validate
- * @returns {void}
- * @throws Error if BBox is not valid
- * @example
- * validateBBox([-180, -40, 110, 50])
- * //=OK
- * validateBBox([-180, -40])
- * //=Error
- * validateBBox('Foo')
- * //=Error
- * validateBBox(5)
- * //=Error
- * validateBBox(null)
- * //=Error
- * validateBBox(undefined)
- * //=Error
- */
- function validateBBox(bbox) {
- if (!bbox) {
- throw new Error("bbox is required");
- }
- if (!Array.isArray(bbox)) {
- throw new Error("bbox must be an Array");
- }
- if (bbox.length !== 4 && bbox.length !== 6) {
- throw new Error("bbox must be an Array of 4 or 6 numbers");
- }
- bbox.forEach(function (num) {
- if (!isNumber(num)) {
- throw new Error("bbox must only contain numbers");
- }
- });
- }
- exports.validateBBox = validateBBox;
- /**
- * Validate Id
- *
- * @private
- * @param {string|number} id Id to validate
- * @returns {void}
- * @throws Error if Id is not valid
- * @example
- * validateId([-180, -40, 110, 50])
- * //=Error
- * validateId([-180, -40])
- * //=Error
- * validateId('Foo')
- * //=OK
- * validateId(5)
- * //=OK
- * validateId(null)
- * //=Error
- * validateId(undefined)
- * //=Error
- */
- function validateId(id) {
- if (!id) {
- throw new Error("id is required");
- }
- if (["string", "number"].indexOf(typeof id) === -1) {
- throw new Error("id must be a number or a string");
- }
- }
- exports.validateId = validateId;
- // Deprecated methods
- function radians2degrees() {
- throw new Error("method has been renamed to `radiansToDegrees`");
- }
- exports.radians2degrees = radians2degrees;
- function degrees2radians() {
- throw new Error("method has been renamed to `degreesToRadians`");
- }
- exports.degrees2radians = degrees2radians;
- function distanceToDegrees() {
- throw new Error("method has been renamed to `lengthToDegrees`");
- }
- exports.distanceToDegrees = distanceToDegrees;
- function distanceToRadians() {
- throw new Error("method has been renamed to `lengthToRadians`");
- }
- exports.distanceToRadians = distanceToRadians;
- function radiansToDistance() {
- throw new Error("method has been renamed to `radiansToLength`");
- }
- exports.radiansToDistance = radiansToDistance;
- function bearingToAngle() {
- throw new Error("method has been renamed to `bearingToAzimuth`");
- }
- exports.bearingToAngle = bearingToAngle;
- function convertDistance() {
- throw new Error("method has been renamed to `convertLength`");
- }
- exports.convertDistance = convertDistance;
- },{}],124:[function(require,module,exports){
- "use strict";
- var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
- result["default"] = mod;
- return result;
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- var helpers_1 = require("@turf/helpers");
- var invariant_1 = require("@turf/invariant");
- var martinez = __importStar(require("martinez-polygon-clipping"));
- /**
- * Takes two {@link Polygon|polygon} or {@link MultiPolygon|multi-polygon} geometries and
- * finds their polygonal intersection. If they don't intersect, returns null.
- *
- * @name intersect
- * @param {Feature<Polygon | MultiPolygon>} poly1 the first polygon or multipolygon
- * @param {Feature<Polygon | MultiPolygon>} poly2 the second polygon or multipolygon
- * @param {Object} [options={}] Optional Parameters
- * @param {Object} [options.properties={}] Translate GeoJSON Properties to Feature
- * @returns {Feature|null} returns a feature representing the area they share (either a {@link Polygon} or
- * {@link MultiPolygon}). If they do not share any area, returns `null`.
- * @example
- * var poly1 = turf.polygon([[
- * [-122.801742, 45.48565],
- * [-122.801742, 45.60491],
- * [-122.584762, 45.60491],
- * [-122.584762, 45.48565],
- * [-122.801742, 45.48565]
- * ]]);
- *
- * var poly2 = turf.polygon([[
- * [-122.520217, 45.535693],
- * [-122.64038, 45.553967],
- * [-122.720031, 45.526554],
- * [-122.669906, 45.507309],
- * [-122.723464, 45.446643],
- * [-122.532577, 45.408574],
- * [-122.487258, 45.477466],
- * [-122.520217, 45.535693]
- * ]]);
- *
- * var intersection = turf.intersect(poly1, poly2);
- *
- * //addToMap
- * var addToMap = [poly1, poly2, intersection];
- */
- function intersect(poly1, poly2, options) {
- if (options === void 0) { options = {}; }
- var geom1 = invariant_1.getGeom(poly1);
- var geom2 = invariant_1.getGeom(poly2);
- if (geom1.type === "Polygon" && geom2.type === "Polygon") {
- var intersection = martinez.intersection(geom1.coordinates, geom2.coordinates);
- if (intersection === null || intersection.length === 0) {
- return null;
- }
- if (intersection.length === 1) {
- var start = intersection[0][0][0];
- var end = intersection[0][0][intersection[0][0].length - 1];
- if (start[0] === end[0] && start[1] === end[1]) {
- return helpers_1.polygon(intersection[0], options.properties);
- }
- return null;
- }
- return helpers_1.multiPolygon(intersection, options.properties);
- }
- else if (geom1.type === "MultiPolygon") {
- var resultCoords = [];
- // iterate through the polygon and run intersect with each part, adding to the resultCoords.
- for (var _i = 0, _a = geom1.coordinates; _i < _a.length; _i++) {
- var coords = _a[_i];
- var subGeom = invariant_1.getGeom(helpers_1.polygon(coords));
- var subIntersection = intersect(subGeom, geom2);
- if (subIntersection) {
- var subIntGeom = invariant_1.getGeom(subIntersection);
- if (subIntGeom.type === "Polygon") {
- resultCoords.push(subIntGeom.coordinates);
- }
- else if (subIntGeom.type === "MultiPolygon") {
- resultCoords = resultCoords.concat(subIntGeom.coordinates);
- }
- else {
- throw new Error("intersection is invalid");
- }
- }
- }
- // Make a polygon with the result
- if (resultCoords.length === 0) {
- return null;
- }
- if (resultCoords.length === 1) {
- return helpers_1.polygon(resultCoords[0], options.properties);
- }
- else {
- return helpers_1.multiPolygon(resultCoords, options.properties);
- }
- }
- else if (geom2.type === "MultiPolygon") {
- // geom1 is a polygon and geom2 a multiPolygon,
- // put the multiPolygon first and fallback to the previous case.
- return intersect(geom2, geom1);
- }
- else {
- // handle invalid geometry types
- throw new Error("poly1 and poly2 must be either polygons or multiPolygons");
- }
- }
- exports.default = intersect;
- },{"@turf/helpers":123,"@turf/invariant":125,"martinez-polygon-clipping":265}],125:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var helpers_1 = require("@turf/helpers");
- /**
- * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
- *
- * @name getCoord
- * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
- * @returns {Array<number>} coordinates
- * @example
- * var pt = turf.point([10, 10]);
- *
- * var coord = turf.getCoord(pt);
- * //= [10, 10]
- */
- function getCoord(coord) {
- if (!coord) {
- throw new Error("coord is required");
- }
- if (!Array.isArray(coord)) {
- if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
- return coord.geometry.coordinates;
- }
- if (coord.type === "Point") {
- return coord.coordinates;
- }
- }
- if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
- return coord;
- }
- throw new Error("coord must be GeoJSON Point or an Array of numbers");
- }
- exports.getCoord = getCoord;
- /**
- * Unwrap coordinates from a Feature, Geometry Object or an Array
- *
- * @name getCoords
- * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
- * @returns {Array<any>} coordinates
- * @example
- * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
- *
- * var coords = turf.getCoords(poly);
- * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
- */
- function getCoords(coords) {
- if (Array.isArray(coords)) {
- return coords;
- }
- // Feature
- if (coords.type === "Feature") {
- if (coords.geometry !== null) {
- return coords.geometry.coordinates;
- }
- }
- else {
- // Geometry
- if (coords.coordinates) {
- return coords.coordinates;
- }
- }
- throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
- }
- exports.getCoords = getCoords;
- /**
- * Checks if coordinates contains a number
- *
- * @name containsNumber
- * @param {Array<any>} coordinates GeoJSON Coordinates
- * @returns {boolean} true if Array contains a number
- */
- function containsNumber(coordinates) {
- if (coordinates.length > 1 && helpers_1.isNumber(coordinates[0]) && helpers_1.isNumber(coordinates[1])) {
- return true;
- }
- if (Array.isArray(coordinates[0]) && coordinates[0].length) {
- return containsNumber(coordinates[0]);
- }
- throw new Error("coordinates must only contain numbers");
- }
- exports.containsNumber = containsNumber;
- /**
- * Enforce expectations about types of GeoJSON objects for Turf.
- *
- * @name geojsonType
- * @param {GeoJSON} value any GeoJSON object
- * @param {string} type expected GeoJSON type
- * @param {string} name name of calling function
- * @throws {Error} if value is not the expected type.
- */
- function geojsonType(value, type, name) {
- if (!type || !name) {
- throw new Error("type and name required");
- }
- if (!value || value.type !== type) {
- throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
- }
- }
- exports.geojsonType = geojsonType;
- /**
- * Enforce expectations about types of {@link Feature} inputs for Turf.
- * Internally this uses {@link geojsonType} to judge geometry types.
- *
- * @name featureOf
- * @param {Feature} feature a feature with an expected geometry type
- * @param {string} type expected GeoJSON type
- * @param {string} name name of calling function
- * @throws {Error} error if value is not the expected type.
- */
- function featureOf(feature, type, name) {
- if (!feature) {
- throw new Error("No feature passed");
- }
- if (!name) {
- throw new Error(".featureOf() requires a name");
- }
- if (!feature || feature.type !== "Feature" || !feature.geometry) {
- throw new Error("Invalid input to " + name + ", Feature with geometry required");
- }
- if (!feature.geometry || feature.geometry.type !== type) {
- throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
- }
- }
- exports.featureOf = featureOf;
- /**
- * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
- * Internally this uses {@link geojsonType} to judge geometry types.
- *
- * @name collectionOf
- * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
- * @param {string} type expected GeoJSON type
- * @param {string} name name of calling function
- * @throws {Error} if value is not the expected type.
- */
- function collectionOf(featureCollection, type, name) {
- if (!featureCollection) {
- throw new Error("No featureCollection passed");
- }
- if (!name) {
- throw new Error(".collectionOf() requires a name");
- }
- if (!featureCollection || featureCollection.type !== "FeatureCollection") {
- throw new Error("Invalid input to " + name + ", FeatureCollection required");
- }
- for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
- var feature = _a[_i];
- if (!feature || feature.type !== "Feature" || !feature.geometry) {
- throw new Error("Invalid input to " + name + ", Feature with geometry required");
- }
- if (!feature.geometry || feature.geometry.type !== type) {
- throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
- }
- }
- }
- exports.collectionOf = collectionOf;
- /**
- * Get Geometry from Feature or Geometry Object
- *
- * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
- * @returns {Geometry|null} GeoJSON Geometry Object
- * @throws {Error} if geojson is not a Feature or Geometry Object
- * @example
- * var point = {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [110, 40]
- * }
- * }
- * var geom = turf.getGeom(point)
- * //={"type": "Point", "coordinates": [110, 40]}
- */
- function getGeom(geojson) {
- if (geojson.type === "Feature") {
- return geojson.geometry;
- }
- return geojson;
- }
- exports.getGeom = getGeom;
- /**
- * Get GeoJSON object's type, Geometry type is prioritize.
- *
- * @param {GeoJSON} geojson GeoJSON object
- * @param {string} [name="geojson"] name of the variable to display in error message
- * @returns {string} GeoJSON type
- * @example
- * var point = {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [110, 40]
- * }
- * }
- * var geom = turf.getType(point)
- * //="Point"
- */
- function getType(geojson, name) {
- if (geojson.type === "FeatureCollection") {
- return "FeatureCollection";
- }
- if (geojson.type === "GeometryCollection") {
- return "GeometryCollection";
- }
- if (geojson.type === "Feature" && geojson.geometry !== null) {
- return geojson.geometry.type;
- }
- return geojson.type;
- }
- exports.getType = getType;
- },{"@turf/helpers":123}],126:[function(require,module,exports){
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- }
- Object.defineProperty(exports, "__esModule", { value: true });
- var helpers_1 = require("@turf/helpers");
- var invariant_1 = require("@turf/invariant");
- var line_segment_1 = __importDefault(require("@turf/line-segment"));
- var meta_1 = require("@turf/meta");
- var geojson_rbush_1 = __importDefault(require("geojson-rbush"));
- /**
- * Takes any LineString or Polygon GeoJSON and returns the intersecting point(s).
- *
- * @name lineIntersect
- * @param {GeoJSON} line1 any LineString or Polygon
- * @param {GeoJSON} line2 any LineString or Polygon
- * @returns {FeatureCollection<Point>} point(s) that intersect both
- * @example
- * var line1 = turf.lineString([[126, -11], [129, -21]]);
- * var line2 = turf.lineString([[123, -18], [131, -14]]);
- * var intersects = turf.lineIntersect(line1, line2);
- *
- * //addToMap
- * var addToMap = [line1, line2, intersects]
- */
- function lineIntersect(line1, line2) {
- var unique = {};
- var results = [];
- // First, normalize geometries to features
- // Then, handle simple 2-vertex segments
- if (line1.type === "LineString") {
- line1 = helpers_1.feature(line1);
- }
- if (line2.type === "LineString") {
- line2 = helpers_1.feature(line2);
- }
- if (line1.type === "Feature" &&
- line2.type === "Feature" &&
- line1.geometry !== null &&
- line2.geometry !== null &&
- line1.geometry.type === "LineString" &&
- line2.geometry.type === "LineString" &&
- line1.geometry.coordinates.length === 2 &&
- line2.geometry.coordinates.length === 2) {
- var intersect = intersects(line1, line2);
- if (intersect) {
- results.push(intersect);
- }
- return helpers_1.featureCollection(results);
- }
- // Handles complex GeoJSON Geometries
- var tree = geojson_rbush_1.default();
- tree.load(line_segment_1.default(line2));
- meta_1.featureEach(line_segment_1.default(line1), function (segment) {
- meta_1.featureEach(tree.search(segment), function (match) {
- var intersect = intersects(segment, match);
- if (intersect) {
- // prevent duplicate points https://github.com/Turfjs/turf/issues/688
- var key = invariant_1.getCoords(intersect).join(",");
- if (!unique[key]) {
- unique[key] = true;
- results.push(intersect);
- }
- }
- });
- });
- return helpers_1.featureCollection(results);
- }
- /**
- * Find a point that intersects LineStrings with two coordinates each
- *
- * @private
- * @param {Feature<LineString>} line1 GeoJSON LineString (Must only contain 2 coordinates)
- * @param {Feature<LineString>} line2 GeoJSON LineString (Must only contain 2 coordinates)
- * @returns {Feature<Point>} intersecting GeoJSON Point
- */
- function intersects(line1, line2) {
- var coords1 = invariant_1.getCoords(line1);
- var coords2 = invariant_1.getCoords(line2);
- if (coords1.length !== 2) {
- throw new Error("<intersects> line1 must only contain 2 coordinates");
- }
- if (coords2.length !== 2) {
- throw new Error("<intersects> line2 must only contain 2 coordinates");
- }
- var x1 = coords1[0][0];
- var y1 = coords1[0][1];
- var x2 = coords1[1][0];
- var y2 = coords1[1][1];
- var x3 = coords2[0][0];
- var y3 = coords2[0][1];
- var x4 = coords2[1][0];
- var y4 = coords2[1][1];
- var denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1));
- var numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3));
- var numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3));
- if (denom === 0) {
- if (numeA === 0 && numeB === 0) {
- return null;
- }
- return null;
- }
- var uA = numeA / denom;
- var uB = numeB / denom;
- if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {
- var x = x1 + (uA * (x2 - x1));
- var y = y1 + (uA * (y2 - y1));
- return helpers_1.point([x, y]);
- }
- return null;
- }
- exports.default = lineIntersect;
- },{"@turf/helpers":123,"@turf/invariant":125,"@turf/line-segment":128,"@turf/meta":127,"geojson-rbush":224}],127:[function(require,module,exports){
- arguments[4][122][0].apply(exports,arguments)
- },{"@turf/helpers":123,"dup":122}],128:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var helpers_1 = require("@turf/helpers");
- var invariant_1 = require("@turf/invariant");
- var meta_1 = require("@turf/meta");
- /**
- * Creates a {@link FeatureCollection} of 2-vertex {@link LineString} segments from a
- * {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon}.
- *
- * @name lineSegment
- * @param {GeoJSON} geojson GeoJSON Polygon or LineString
- * @returns {FeatureCollection<LineString>} 2-vertex line segments
- * @example
- * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);
- * var segments = turf.lineSegment(polygon);
- *
- * //addToMap
- * var addToMap = [polygon, segments]
- */
- function lineSegment(geojson) {
- if (!geojson) {
- throw new Error("geojson is required");
- }
- var results = [];
- meta_1.flattenEach(geojson, function (feature) {
- lineSegmentFeature(feature, results);
- });
- return helpers_1.featureCollection(results);
- }
- /**
- * Line Segment
- *
- * @private
- * @param {Feature<LineString|Polygon>} geojson Line or polygon feature
- * @param {Array} results push to results
- * @returns {void}
- */
- function lineSegmentFeature(geojson, results) {
- var coords = [];
- var geometry = geojson.geometry;
- if (geometry !== null) {
- switch (geometry.type) {
- case "Polygon":
- coords = invariant_1.getCoords(geometry);
- break;
- case "LineString":
- coords = [invariant_1.getCoords(geometry)];
- }
- coords.forEach(function (coord) {
- var segments = createSegments(coord, geojson.properties);
- segments.forEach(function (segment) {
- segment.id = results.length;
- results.push(segment);
- });
- });
- }
- }
- /**
- * Create Segments from LineString coordinates
- *
- * @private
- * @param {Array<Array<number>>} coords LineString coordinates
- * @param {*} properties GeoJSON properties
- * @returns {Array<Feature<LineString>>} line segments
- */
- function createSegments(coords, properties) {
- var segments = [];
- coords.reduce(function (previousCoords, currentCoords) {
- var segment = helpers_1.lineString([previousCoords, currentCoords], properties);
- segment.bbox = bbox(previousCoords, currentCoords);
- segments.push(segment);
- return currentCoords;
- });
- return segments;
- }
- /**
- * Create BBox between two coordinates (faster than @turf/bbox)
- *
- * @private
- * @param {Array<number>} coords1 Point coordinate
- * @param {Array<number>} coords2 Point coordinate
- * @returns {BBox} [west, south, east, north]
- */
- function bbox(coords1, coords2) {
- var x1 = coords1[0];
- var y1 = coords1[1];
- var x2 = coords2[0];
- var y2 = coords2[1];
- var west = (x1 < x2) ? x1 : x2;
- var south = (y1 < y2) ? y1 : y2;
- var east = (x1 > x2) ? x1 : x2;
- var north = (y1 > y2) ? y1 : y2;
- return [west, south, east, north];
- }
- exports.default = lineSegment;
- },{"@turf/helpers":123,"@turf/invariant":125,"@turf/meta":129}],129:[function(require,module,exports){
- arguments[4][122][0].apply(exports,arguments)
- },{"@turf/helpers":123,"dup":122}],130:[function(require,module,exports){
- /**
- * Callback for coordEach
- *
- * @private
- * @callback coordEachCallback
- * @param {[number, number]} currentCoords The current coordinates being processed.
- * @param {number} currentIndex The index of the current element being processed in the
- * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
- */
- /**
- * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()
- *
- * @name coordEach
- * @param {Object} layer any GeoJSON object
- * @param {Function} callback a method that takes (currentCoords, currentIndex)
- * @param {boolean} [excludeWrapCoord=false] whether or not to include
- * the final coordinate of LinearRings that wraps the ring in its iteration.
- * @example
- * var features = {
- * "type": "FeatureCollection",
- * "features": [
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [26, 37]
- * }
- * },
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [36, 53]
- * }
- * }
- * ]
- * };
- * turf.coordEach(features, function (currentCoords, currentIndex) {
- * //=currentCoords
- * //=currentIndex
- * });
- */
- function coordEach(layer, callback, excludeWrapCoord) {
- var i, j, k, g, l, geometry, stopG, coords,
- geometryMaybeCollection,
- wrapShrink = 0,
- currentIndex = 0,
- isGeometryCollection,
- isFeatureCollection = layer.type === 'FeatureCollection',
- isFeature = layer.type === 'Feature',
- stop = isFeatureCollection ? layer.features.length : 1;
- // This logic may look a little weird. The reason why it is that way
- // is because it's trying to be fast. GeoJSON supports multiple kinds
- // of objects at its root: FeatureCollection, Features, Geometries.
- // This function has the responsibility of handling all of them, and that
- // means that some of the `for` loops you see below actually just don't apply
- // to certain inputs. For instance, if you give this just a
- // Point geometry, then both loops are short-circuited and all we do
- // is gradually rename the input until it's called 'geometry'.
- //
- // This also aims to allocate as few resources as possible: just a
- // few numbers and booleans, rather than any temporary arrays as would
- // be required with the normalization approach.
- for (i = 0; i < stop; i++) {
- geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry :
- (isFeature ? layer.geometry : layer));
- isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection';
- stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;
- for (g = 0; g < stopG; g++) {
- geometry = isGeometryCollection ?
- geometryMaybeCollection.geometries[g] : geometryMaybeCollection;
- coords = geometry.coordinates;
- wrapShrink = (excludeWrapCoord &&
- (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon')) ?
- 1 : 0;
- if (geometry.type === 'Point') {
- callback(coords, currentIndex);
- currentIndex++;
- } else if (geometry.type === 'LineString' || geometry.type === 'MultiPoint') {
- for (j = 0; j < coords.length; j++) {
- callback(coords[j], currentIndex);
- currentIndex++;
- }
- } else if (geometry.type === 'Polygon' || geometry.type === 'MultiLineString') {
- for (j = 0; j < coords.length; j++)
- for (k = 0; k < coords[j].length - wrapShrink; k++) {
- callback(coords[j][k], currentIndex);
- currentIndex++;
- }
- } else if (geometry.type === 'MultiPolygon') {
- for (j = 0; j < coords.length; j++)
- for (k = 0; k < coords[j].length; k++)
- for (l = 0; l < coords[j][k].length - wrapShrink; l++) {
- callback(coords[j][k][l], currentIndex);
- currentIndex++;
- }
- } else if (geometry.type === 'GeometryCollection') {
- for (j = 0; j < geometry.geometries.length; j++)
- coordEach(geometry.geometries[j], callback, excludeWrapCoord);
- } else {
- throw new Error('Unknown Geometry Type');
- }
- }
- }
- }
- module.exports.coordEach = coordEach;
- /**
- * Callback for coordReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @private
- * @callback coordReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {[number, number]} currentCoords The current coordinate being processed.
- * @param {number} currentIndex The index of the current element being processed in the
- * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
- */
- /**
- * Reduce coordinates in any GeoJSON object, similar to Array.reduce()
- *
- * @name coordReduce
- * @param {Object} layer any GeoJSON object
- * @param {Function} callback a method that takes (previousValue, currentCoords, currentIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @param {boolean} [excludeWrapCoord=false] whether or not to include
- * the final coordinate of LinearRings that wraps the ring in its iteration.
- * @returns {*} The value that results from the reduction.
- * @example
- * var features = {
- * "type": "FeatureCollection",
- * "features": [
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [26, 37]
- * }
- * },
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [36, 53]
- * }
- * }
- * ]
- * };
- * turf.coordReduce(features, function (previousValue, currentCoords, currentIndex) {
- * //=previousValue
- * //=currentCoords
- * //=currentIndex
- * return currentCoords;
- * });
- */
- function coordReduce(layer, callback, initialValue, excludeWrapCoord) {
- var previousValue = initialValue;
- coordEach(layer, function (currentCoords, currentIndex) {
- if (currentIndex === 0 && initialValue === undefined) {
- previousValue = currentCoords;
- } else {
- previousValue = callback(previousValue, currentCoords, currentIndex);
- }
- }, excludeWrapCoord);
- return previousValue;
- }
- module.exports.coordReduce = coordReduce;
- /**
- * Callback for propEach
- *
- * @private
- * @callback propEachCallback
- * @param {*} currentProperties The current properties being processed.
- * @param {number} currentIndex The index of the current element being processed in the
- * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
- */
- /**
- * Iterate over properties in any GeoJSON object, similar to Array.forEach()
- *
- * @name propEach
- * @param {Object} layer any GeoJSON object
- * @param {Function} callback a method that takes (currentProperties, currentIndex)
- * @example
- * var features = {
- * "type": "FeatureCollection",
- * "features": [
- * {
- * "type": "Feature",
- * "properties": {"foo": "bar"},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [26, 37]
- * }
- * },
- * {
- * "type": "Feature",
- * "properties": {"hello": "world"},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [36, 53]
- * }
- * }
- * ]
- * };
- * turf.propEach(features, function (currentProperties, currentIndex) {
- * //=currentProperties
- * //=currentIndex
- * });
- */
- function propEach(layer, callback) {
- var i;
- switch (layer.type) {
- case 'FeatureCollection':
- for (i = 0; i < layer.features.length; i++) {
- callback(layer.features[i].properties, i);
- }
- break;
- case 'Feature':
- callback(layer.properties, 0);
- break;
- }
- }
- module.exports.propEach = propEach;
- /**
- * Callback for propReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @private
- * @callback propReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {*} currentProperties The current properties being processed.
- * @param {number} currentIndex The index of the current element being processed in the
- * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
- */
- /**
- * Reduce properties in any GeoJSON object into a single value,
- * similar to how Array.reduce works. However, in this case we lazily run
- * the reduction, so an array of all properties is unnecessary.
- *
- * @name propReduce
- * @param {Object} layer any GeoJSON object
- * @param {Function} callback a method that takes (previousValue, currentProperties, currentIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @returns {*} The value that results from the reduction.
- * @example
- * var features = {
- * "type": "FeatureCollection",
- * "features": [
- * {
- * "type": "Feature",
- * "properties": {"foo": "bar"},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [26, 37]
- * }
- * },
- * {
- * "type": "Feature",
- * "properties": {"hello": "world"},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [36, 53]
- * }
- * }
- * ]
- * };
- * turf.propReduce(features, function (previousValue, currentProperties, currentIndex) {
- * //=previousValue
- * //=currentProperties
- * //=currentIndex
- * return currentProperties
- * });
- */
- function propReduce(layer, callback, initialValue) {
- var previousValue = initialValue;
- propEach(layer, function (currentProperties, currentIndex) {
- if (currentIndex === 0 && initialValue === undefined) {
- previousValue = currentProperties;
- } else {
- previousValue = callback(previousValue, currentProperties, currentIndex);
- }
- });
- return previousValue;
- }
- module.exports.propReduce = propReduce;
- /**
- * Callback for featureEach
- *
- * @private
- * @callback featureEachCallback
- * @param {Feature<any>} currentFeature The current feature being processed.
- * @param {number} currentIndex The index of the current element being processed in the
- * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
- */
- /**
- * Iterate over features in any GeoJSON object, similar to
- * Array.forEach.
- *
- * @name featureEach
- * @param {Object} layer any GeoJSON object
- * @param {Function} callback a method that takes (currentFeature, currentIndex)
- * @example
- * var features = {
- * "type": "FeatureCollection",
- * "features": [
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [26, 37]
- * }
- * },
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [36, 53]
- * }
- * }
- * ]
- * };
- * turf.featureEach(features, function (currentFeature, currentIndex) {
- * //=currentFeature
- * //=currentIndex
- * });
- */
- function featureEach(layer, callback) {
- if (layer.type === 'Feature') {
- callback(layer, 0);
- } else if (layer.type === 'FeatureCollection') {
- for (var i = 0; i < layer.features.length; i++) {
- callback(layer.features[i], i);
- }
- }
- }
- module.exports.featureEach = featureEach;
- /**
- * Callback for featureReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @private
- * @callback featureReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {Feature<any>} currentFeature The current Feature being processed.
- * @param {number} currentIndex The index of the current element being processed in the
- * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
- */
- /**
- * Reduce features in any GeoJSON object, similar to Array.reduce().
- *
- * @name featureReduce
- * @param {Object} layer any GeoJSON object
- * @param {Function} callback a method that takes (previousValue, currentFeature, currentIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @returns {*} The value that results from the reduction.
- * @example
- * var features = {
- * "type": "FeatureCollection",
- * "features": [
- * {
- * "type": "Feature",
- * "properties": {"foo": "bar"},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [26, 37]
- * }
- * },
- * {
- * "type": "Feature",
- * "properties": {"hello": "world"},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [36, 53]
- * }
- * }
- * ]
- * };
- * turf.featureReduce(features, function (previousValue, currentFeature, currentIndex) {
- * //=previousValue
- * //=currentFeature
- * //=currentIndex
- * return currentFeature
- * });
- */
- function featureReduce(layer, callback, initialValue) {
- var previousValue = initialValue;
- featureEach(layer, function (currentFeature, currentIndex) {
- if (currentIndex === 0 && initialValue === undefined) {
- previousValue = currentFeature;
- } else {
- previousValue = callback(previousValue, currentFeature, currentIndex);
- }
- });
- return previousValue;
- }
- module.exports.featureReduce = featureReduce;
- /**
- * Get all coordinates from any GeoJSON object.
- *
- * @name coordAll
- * @param {Object} layer any GeoJSON object
- * @returns {Array<Array<number>>} coordinate position array
- * @example
- * var features = {
- * "type": "FeatureCollection",
- * "features": [
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [26, 37]
- * }
- * },
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [36, 53]
- * }
- * }
- * ]
- * };
- * var coords = turf.coordAll(features);
- * //=coords
- */
- function coordAll(layer) {
- var coords = [];
- coordEach(layer, function (coord) {
- coords.push(coord);
- });
- return coords;
- }
- module.exports.coordAll = coordAll;
- /**
- * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()
- *
- * @name geomEach
- * @param {Object} layer any GeoJSON object
- * @param {Function} callback a method that takes (currentGeometry, currentIndex)
- * @example
- * var features = {
- * "type": "FeatureCollection",
- * "features": [
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [26, 37]
- * }
- * },
- * {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [36, 53]
- * }
- * }
- * ]
- * };
- * turf.geomEach(features, function (currentGeometry, currentIndex) {
- * //=currentGeometry
- * //=currentIndex
- * });
- */
- function geomEach(layer, callback) {
- var i, j, g, geometry, stopG,
- geometryMaybeCollection,
- isGeometryCollection,
- currentIndex = 0,
- isFeatureCollection = layer.type === 'FeatureCollection',
- isFeature = layer.type === 'Feature',
- stop = isFeatureCollection ? layer.features.length : 1;
- // This logic may look a little weird. The reason why it is that way
- // is because it's trying to be fast. GeoJSON supports multiple kinds
- // of objects at its root: FeatureCollection, Features, Geometries.
- // This function has the responsibility of handling all of them, and that
- // means that some of the `for` loops you see below actually just don't apply
- // to certain inputs. For instance, if you give this just a
- // Point geometry, then both loops are short-circuited and all we do
- // is gradually rename the input until it's called 'geometry'.
- //
- // This also aims to allocate as few resources as possible: just a
- // few numbers and booleans, rather than any temporary arrays as would
- // be required with the normalization approach.
- for (i = 0; i < stop; i++) {
- geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry :
- (isFeature ? layer.geometry : layer));
- isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection';
- stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;
- for (g = 0; g < stopG; g++) {
- geometry = isGeometryCollection ?
- geometryMaybeCollection.geometries[g] : geometryMaybeCollection;
- if (geometry.type === 'Point' ||
- geometry.type === 'LineString' ||
- geometry.type === 'MultiPoint' ||
- geometry.type === 'Polygon' ||
- geometry.type === 'MultiLineString' ||
- geometry.type === 'MultiPolygon') {
- callback(geometry, currentIndex);
- currentIndex++;
- } else if (geometry.type === 'GeometryCollection') {
- for (j = 0; j < geometry.geometries.length; j++) {
- callback(geometry.geometries[j], currentIndex);
- currentIndex++;
- }
- } else {
- throw new Error('Unknown Geometry Type');
- }
- }
- }
- }
- module.exports.geomEach = geomEach;
- /**
- * Callback for geomReduce
- *
- * The first time the callback function is called, the values provided as arguments depend
- * on whether the reduce method has an initialValue argument.
- *
- * If an initialValue is provided to the reduce method:
- * - The previousValue argument is initialValue.
- * - The currentValue argument is the value of the first element present in the array.
- *
- * If an initialValue is not provided:
- * - The previousValue argument is the value of the first element present in the array.
- * - The currentValue argument is the value of the second element present in the array.
- *
- * @private
- * @callback geomReduceCallback
- * @param {*} previousValue The accumulated value previously returned in the last invocation
- * of the callback, or initialValue, if supplied.
- * @param {*} currentGeometry The current Feature being processed.
- * @param {number} currentIndex The index of the current element being processed in the
- * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
- */
- /**
- * Reduce geometry in any GeoJSON object, similar to Array.reduce().
- *
- * @name geomReduce
- * @param {Object} layer any GeoJSON object
- * @param {Function} callback a method that takes (previousValue, currentGeometry, currentIndex)
- * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
- * @returns {*} The value that results from the reduction.
- * @example
- * var features = {
- * "type": "FeatureCollection",
- * "features": [
- * {
- * "type": "Feature",
- * "properties": {"foo": "bar"},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [26, 37]
- * }
- * },
- * {
- * "type": "Feature",
- * "properties": {"hello": "world"},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [36, 53]
- * }
- * }
- * ]
- * };
- * turf.geomReduce(features, function (previousValue, currentGeometry, currentIndex) {
- * //=previousValue
- * //=currentGeometry
- * //=currentIndex
- * return currentGeometry
- * });
- */
- function geomReduce(layer, callback, initialValue) {
- var previousValue = initialValue;
- geomEach(layer, function (currentGeometry, currentIndex) {
- if (currentIndex === 0 && initialValue === undefined) {
- previousValue = currentGeometry;
- } else {
- previousValue = callback(previousValue, currentGeometry, currentIndex);
- }
- });
- return previousValue;
- }
- module.exports.geomReduce = geomReduce;
- },{}],131:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var helpers_1 = require("@turf/helpers");
- var invariant_1 = require("@turf/invariant");
- /**
- * Converts a {@link Polygon} to {@link LineString|(Multi)LineString} or {@link MultiPolygon} to a
- * {@link FeatureCollection} of {@link LineString|(Multi)LineString}.
- *
- * @name polygonToLine
- * @param {Feature<Polygon|MultiPolygon>} poly Feature to convert
- * @param {Object} [options={}] Optional parameters
- * @param {Object} [options.properties={}] translates GeoJSON properties to Feature
- * @returns {FeatureCollection|Feature<LineString|MultiLinestring>} converted (Multi)Polygon to (Multi)LineString
- * @example
- * var poly = turf.polygon([[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]);
- *
- * var line = turf.polygonToLine(poly);
- *
- * //addToMap
- * var addToMap = [line];
- */
- function default_1(poly, options) {
- if (options === void 0) { options = {}; }
- var geom = invariant_1.getGeom(poly);
- if (!options.properties && poly.type === "Feature") {
- options.properties = poly.properties;
- }
- switch (geom.type) {
- case "Polygon": return polygonToLine(geom, options);
- case "MultiPolygon": return multiPolygonToLine(geom, options);
- default: throw new Error("invalid poly");
- }
- }
- exports.default = default_1;
- /**
- * @private
- */
- function polygonToLine(poly, options) {
- if (options === void 0) { options = {}; }
- var geom = invariant_1.getGeom(poly);
- var type = geom.type;
- var coords = geom.coordinates;
- var properties = options.properties ? options.properties : poly.type === "Feature" ? poly.properties : {};
- return coordsToLine(coords, properties);
- }
- exports.polygonToLine = polygonToLine;
- /**
- * @private
- */
- function multiPolygonToLine(multiPoly, options) {
- if (options === void 0) { options = {}; }
- var geom = invariant_1.getGeom(multiPoly);
- var type = geom.type;
- var coords = geom.coordinates;
- var properties = options.properties ? options.properties :
- multiPoly.type === "Feature" ? multiPoly.properties : {};
- var lines = [];
- coords.forEach(function (coord) {
- lines.push(coordsToLine(coord, properties));
- });
- return helpers_1.featureCollection(lines);
- }
- exports.multiPolygonToLine = multiPolygonToLine;
- /**
- * @private
- */
- function coordsToLine(coords, properties) {
- if (coords.length > 1) {
- return helpers_1.multiLineString(coords, properties);
- }
- return helpers_1.lineString(coords[0], properties);
- }
- exports.coordsToLine = coordsToLine;
- },{"@turf/helpers":123,"@turf/invariant":125}],132:[function(require,module,exports){
- var asn1 = exports;
- asn1.bignum = require('bn.js');
- asn1.define = require('./asn1/api').define;
- asn1.base = require('./asn1/base');
- asn1.constants = require('./asn1/constants');
- asn1.decoders = require('./asn1/decoders');
- asn1.encoders = require('./asn1/encoders');
- },{"./asn1/api":133,"./asn1/base":135,"./asn1/constants":139,"./asn1/decoders":141,"./asn1/encoders":144,"bn.js":147}],133:[function(require,module,exports){
- var asn1 = require('../asn1');
- var inherits = require('inherits');
- var api = exports;
- api.define = function define(name, body) {
- return new Entity(name, body);
- };
- function Entity(name, body) {
- this.name = name;
- this.body = body;
- this.decoders = {};
- this.encoders = {};
- };
- Entity.prototype._createNamed = function createNamed(base) {
- var named;
- try {
- named = require('vm').runInThisContext(
- '(function ' + this.name + '(entity) {\n' +
- ' this._initNamed(entity);\n' +
- '})'
- );
- } catch (e) {
- named = function (entity) {
- this._initNamed(entity);
- };
- }
- inherits(named, base);
- named.prototype._initNamed = function initnamed(entity) {
- base.call(this, entity);
- };
- return new named(this);
- };
- Entity.prototype._getDecoder = function _getDecoder(enc) {
- enc = enc || 'der';
- // Lazily create decoder
- if (!this.decoders.hasOwnProperty(enc))
- this.decoders[enc] = this._createNamed(asn1.decoders[enc]);
- return this.decoders[enc];
- };
- Entity.prototype.decode = function decode(data, enc, options) {
- return this._getDecoder(enc).decode(data, options);
- };
- Entity.prototype._getEncoder = function _getEncoder(enc) {
- enc = enc || 'der';
- // Lazily create encoder
- if (!this.encoders.hasOwnProperty(enc))
- this.encoders[enc] = this._createNamed(asn1.encoders[enc]);
- return this.encoders[enc];
- };
- Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
- return this._getEncoder(enc).encode(data, reporter);
- };
- },{"../asn1":132,"inherits":262,"vm":344}],134:[function(require,module,exports){
- var inherits = require('inherits');
- var Reporter = require('../base').Reporter;
- var Buffer = require('buffer').Buffer;
- function DecoderBuffer(base, options) {
- Reporter.call(this, options);
- if (!Buffer.isBuffer(base)) {
- this.error('Input not Buffer');
- return;
- }
- this.base = base;
- this.offset = 0;
- this.length = base.length;
- }
- inherits(DecoderBuffer, Reporter);
- exports.DecoderBuffer = DecoderBuffer;
- DecoderBuffer.prototype.save = function save() {
- return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
- };
- DecoderBuffer.prototype.restore = function restore(save) {
- // Return skipped data
- var res = new DecoderBuffer(this.base);
- res.offset = save.offset;
- res.length = this.offset;
- this.offset = save.offset;
- Reporter.prototype.restore.call(this, save.reporter);
- return res;
- };
- DecoderBuffer.prototype.isEmpty = function isEmpty() {
- return this.offset === this.length;
- };
- DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
- if (this.offset + 1 <= this.length)
- return this.base.readUInt8(this.offset++, true);
- else
- return this.error(fail || 'DecoderBuffer overrun');
- }
- DecoderBuffer.prototype.skip = function skip(bytes, fail) {
- if (!(this.offset + bytes <= this.length))
- return this.error(fail || 'DecoderBuffer overrun');
- var res = new DecoderBuffer(this.base);
- // Share reporter state
- res._reporterState = this._reporterState;
- res.offset = this.offset;
- res.length = this.offset + bytes;
- this.offset += bytes;
- return res;
- }
- DecoderBuffer.prototype.raw = function raw(save) {
- return this.base.slice(save ? save.offset : this.offset, this.length);
- }
- function EncoderBuffer(value, reporter) {
- if (Array.isArray(value)) {
- this.length = 0;
- this.value = value.map(function(item) {
- if (!(item instanceof EncoderBuffer))
- item = new EncoderBuffer(item, reporter);
- this.length += item.length;
- return item;
- }, this);
- } else if (typeof value === 'number') {
- if (!(0 <= value && value <= 0xff))
- return reporter.error('non-byte EncoderBuffer value');
- this.value = value;
- this.length = 1;
- } else if (typeof value === 'string') {
- this.value = value;
- this.length = Buffer.byteLength(value);
- } else if (Buffer.isBuffer(value)) {
- this.value = value;
- this.length = value.length;
- } else {
- return reporter.error('Unsupported type: ' + typeof value);
- }
- }
- exports.EncoderBuffer = EncoderBuffer;
- EncoderBuffer.prototype.join = function join(out, offset) {
- if (!out)
- out = new Buffer(this.length);
- if (!offset)
- offset = 0;
- if (this.length === 0)
- return out;
- if (Array.isArray(this.value)) {
- this.value.forEach(function(item) {
- item.join(out, offset);
- offset += item.length;
- });
- } else {
- if (typeof this.value === 'number')
- out[offset] = this.value;
- else if (typeof this.value === 'string')
- out.write(this.value, offset);
- else if (Buffer.isBuffer(this.value))
- this.value.copy(out, offset);
- offset += this.length;
- }
- return out;
- };
- },{"../base":135,"buffer":182,"inherits":262}],135:[function(require,module,exports){
- var base = exports;
- base.Reporter = require('./reporter').Reporter;
- base.DecoderBuffer = require('./buffer').DecoderBuffer;
- base.EncoderBuffer = require('./buffer').EncoderBuffer;
- base.Node = require('./node');
- },{"./buffer":134,"./node":136,"./reporter":137}],136:[function(require,module,exports){
- var Reporter = require('../base').Reporter;
- var EncoderBuffer = require('../base').EncoderBuffer;
- var DecoderBuffer = require('../base').DecoderBuffer;
- var assert = require('minimalistic-assert');
- // Supported tags
- var tags = [
- 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',
- 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',
- 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',
- 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'
- ];
- // Public methods list
- var methods = [
- 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',
- 'any', 'contains'
- ].concat(tags);
- // Overrided methods list
- var overrided = [
- '_peekTag', '_decodeTag', '_use',
- '_decodeStr', '_decodeObjid', '_decodeTime',
- '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',
- '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',
- '_encodeNull', '_encodeInt', '_encodeBool'
- ];
- function Node(enc, parent) {
- var state = {};
- this._baseState = state;
- state.enc = enc;
- state.parent = parent || null;
- state.children = null;
- // State
- state.tag = null;
- state.args = null;
- state.reverseArgs = null;
- state.choice = null;
- state.optional = false;
- state.any = false;
- state.obj = false;
- state.use = null;
- state.useDecoder = null;
- state.key = null;
- state['default'] = null;
- state.explicit = null;
- state.implicit = null;
- state.contains = null;
- // Should create new instance on each method
- if (!state.parent) {
- state.children = [];
- this._wrap();
- }
- }
- module.exports = Node;
- var stateProps = [
- 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',
- 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',
- 'implicit', 'contains'
- ];
- Node.prototype.clone = function clone() {
- var state = this._baseState;
- var cstate = {};
- stateProps.forEach(function(prop) {
- cstate[prop] = state[prop];
- });
- var res = new this.constructor(cstate.parent);
- res._baseState = cstate;
- return res;
- };
- Node.prototype._wrap = function wrap() {
- var state = this._baseState;
- methods.forEach(function(method) {
- this[method] = function _wrappedMethod() {
- var clone = new this.constructor(this);
- state.children.push(clone);
- return clone[method].apply(clone, arguments);
- };
- }, this);
- };
- Node.prototype._init = function init(body) {
- var state = this._baseState;
- assert(state.parent === null);
- body.call(this);
- // Filter children
- state.children = state.children.filter(function(child) {
- return child._baseState.parent === this;
- }, this);
- assert.equal(state.children.length, 1, 'Root node can have only one child');
- };
- Node.prototype._useArgs = function useArgs(args) {
- var state = this._baseState;
- // Filter children and args
- var children = args.filter(function(arg) {
- return arg instanceof this.constructor;
- }, this);
- args = args.filter(function(arg) {
- return !(arg instanceof this.constructor);
- }, this);
- if (children.length !== 0) {
- assert(state.children === null);
- state.children = children;
- // Replace parent to maintain backward link
- children.forEach(function(child) {
- child._baseState.parent = this;
- }, this);
- }
- if (args.length !== 0) {
- assert(state.args === null);
- state.args = args;
- state.reverseArgs = args.map(function(arg) {
- if (typeof arg !== 'object' || arg.constructor !== Object)
- return arg;
- var res = {};
- Object.keys(arg).forEach(function(key) {
- if (key == (key | 0))
- key |= 0;
- var value = arg[key];
- res[value] = key;
- });
- return res;
- });
- }
- };
- //
- // Overrided methods
- //
- overrided.forEach(function(method) {
- Node.prototype[method] = function _overrided() {
- var state = this._baseState;
- throw new Error(method + ' not implemented for encoding: ' + state.enc);
- };
- });
- //
- // Public methods
- //
- tags.forEach(function(tag) {
- Node.prototype[tag] = function _tagMethod() {
- var state = this._baseState;
- var args = Array.prototype.slice.call(arguments);
- assert(state.tag === null);
- state.tag = tag;
- this._useArgs(args);
- return this;
- };
- });
- Node.prototype.use = function use(item) {
- assert(item);
- var state = this._baseState;
- assert(state.use === null);
- state.use = item;
- return this;
- };
- Node.prototype.optional = function optional() {
- var state = this._baseState;
- state.optional = true;
- return this;
- };
- Node.prototype.def = function def(val) {
- var state = this._baseState;
- assert(state['default'] === null);
- state['default'] = val;
- state.optional = true;
- return this;
- };
- Node.prototype.explicit = function explicit(num) {
- var state = this._baseState;
- assert(state.explicit === null && state.implicit === null);
- state.explicit = num;
- return this;
- };
- Node.prototype.implicit = function implicit(num) {
- var state = this._baseState;
- assert(state.explicit === null && state.implicit === null);
- state.implicit = num;
- return this;
- };
- Node.prototype.obj = function obj() {
- var state = this._baseState;
- var args = Array.prototype.slice.call(arguments);
- state.obj = true;
- if (args.length !== 0)
- this._useArgs(args);
- return this;
- };
- Node.prototype.key = function key(newKey) {
- var state = this._baseState;
- assert(state.key === null);
- state.key = newKey;
- return this;
- };
- Node.prototype.any = function any() {
- var state = this._baseState;
- state.any = true;
- return this;
- };
- Node.prototype.choice = function choice(obj) {
- var state = this._baseState;
- assert(state.choice === null);
- state.choice = obj;
- this._useArgs(Object.keys(obj).map(function(key) {
- return obj[key];
- }));
- return this;
- };
- Node.prototype.contains = function contains(item) {
- var state = this._baseState;
- assert(state.use === null);
- state.contains = item;
- return this;
- };
- //
- // Decoding
- //
- Node.prototype._decode = function decode(input, options) {
- var state = this._baseState;
- // Decode root node
- if (state.parent === null)
- return input.wrapResult(state.children[0]._decode(input, options));
- var result = state['default'];
- var present = true;
- var prevKey = null;
- if (state.key !== null)
- prevKey = input.enterKey(state.key);
- // Check if tag is there
- if (state.optional) {
- var tag = null;
- if (state.explicit !== null)
- tag = state.explicit;
- else if (state.implicit !== null)
- tag = state.implicit;
- else if (state.tag !== null)
- tag = state.tag;
- if (tag === null && !state.any) {
- // Trial and Error
- var save = input.save();
- try {
- if (state.choice === null)
- this._decodeGeneric(state.tag, input, options);
- else
- this._decodeChoice(input, options);
- present = true;
- } catch (e) {
- present = false;
- }
- input.restore(save);
- } else {
- present = this._peekTag(input, tag, state.any);
- if (input.isError(present))
- return present;
- }
- }
- // Push object on stack
- var prevObj;
- if (state.obj && present)
- prevObj = input.enterObject();
- if (present) {
- // Unwrap explicit values
- if (state.explicit !== null) {
- var explicit = this._decodeTag(input, state.explicit);
- if (input.isError(explicit))
- return explicit;
- input = explicit;
- }
- var start = input.offset;
- // Unwrap implicit and normal values
- if (state.use === null && state.choice === null) {
- if (state.any)
- var save = input.save();
- var body = this._decodeTag(
- input,
- state.implicit !== null ? state.implicit : state.tag,
- state.any
- );
- if (input.isError(body))
- return body;
- if (state.any)
- result = input.raw(save);
- else
- input = body;
- }
- if (options && options.track && state.tag !== null)
- options.track(input.path(), start, input.length, 'tagged');
- if (options && options.track && state.tag !== null)
- options.track(input.path(), input.offset, input.length, 'content');
- // Select proper method for tag
- if (state.any)
- result = result;
- else if (state.choice === null)
- result = this._decodeGeneric(state.tag, input, options);
- else
- result = this._decodeChoice(input, options);
- if (input.isError(result))
- return result;
- // Decode children
- if (!state.any && state.choice === null && state.children !== null) {
- state.children.forEach(function decodeChildren(child) {
- // NOTE: We are ignoring errors here, to let parser continue with other
- // parts of encoded data
- child._decode(input, options);
- });
- }
- // Decode contained/encoded by schema, only in bit or octet strings
- if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
- var data = new DecoderBuffer(result);
- result = this._getUse(state.contains, input._reporterState.obj)
- ._decode(data, options);
- }
- }
- // Pop object
- if (state.obj && present)
- result = input.leaveObject(prevObj);
- // Set key
- if (state.key !== null && (result !== null || present === true))
- input.leaveKey(prevKey, state.key, result);
- else if (prevKey !== null)
- input.exitKey(prevKey);
- return result;
- };
- Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
- var state = this._baseState;
- if (tag === 'seq' || tag === 'set')
- return null;
- if (tag === 'seqof' || tag === 'setof')
- return this._decodeList(input, tag, state.args[0], options);
- else if (/str$/.test(tag))
- return this._decodeStr(input, tag, options);
- else if (tag === 'objid' && state.args)
- return this._decodeObjid(input, state.args[0], state.args[1], options);
- else if (tag === 'objid')
- return this._decodeObjid(input, null, null, options);
- else if (tag === 'gentime' || tag === 'utctime')
- return this._decodeTime(input, tag, options);
- else if (tag === 'null_')
- return this._decodeNull(input, options);
- else if (tag === 'bool')
- return this._decodeBool(input, options);
- else if (tag === 'objDesc')
- return this._decodeStr(input, tag, options);
- else if (tag === 'int' || tag === 'enum')
- return this._decodeInt(input, state.args && state.args[0], options);
- if (state.use !== null) {
- return this._getUse(state.use, input._reporterState.obj)
- ._decode(input, options);
- } else {
- return input.error('unknown tag: ' + tag);
- }
- };
- Node.prototype._getUse = function _getUse(entity, obj) {
- var state = this._baseState;
- // Create altered use decoder if implicit is set
- state.useDecoder = this._use(entity, obj);
- assert(state.useDecoder._baseState.parent === null);
- state.useDecoder = state.useDecoder._baseState.children[0];
- if (state.implicit !== state.useDecoder._baseState.implicit) {
- state.useDecoder = state.useDecoder.clone();
- state.useDecoder._baseState.implicit = state.implicit;
- }
- return state.useDecoder;
- };
- Node.prototype._decodeChoice = function decodeChoice(input, options) {
- var state = this._baseState;
- var result = null;
- var match = false;
- Object.keys(state.choice).some(function(key) {
- var save = input.save();
- var node = state.choice[key];
- try {
- var value = node._decode(input, options);
- if (input.isError(value))
- return false;
- result = { type: key, value: value };
- match = true;
- } catch (e) {
- input.restore(save);
- return false;
- }
- return true;
- }, this);
- if (!match)
- return input.error('Choice not matched');
- return result;
- };
- //
- // Encoding
- //
- Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
- return new EncoderBuffer(data, this.reporter);
- };
- Node.prototype._encode = function encode(data, reporter, parent) {
- var state = this._baseState;
- if (state['default'] !== null && state['default'] === data)
- return;
- var result = this._encodeValue(data, reporter, parent);
- if (result === undefined)
- return;
- if (this._skipDefault(result, reporter, parent))
- return;
- return result;
- };
- Node.prototype._encodeValue = function encode(data, reporter, parent) {
- var state = this._baseState;
- // Decode root node
- if (state.parent === null)
- return state.children[0]._encode(data, reporter || new Reporter());
- var result = null;
- // Set reporter to share it with a child class
- this.reporter = reporter;
- // Check if data is there
- if (state.optional && data === undefined) {
- if (state['default'] !== null)
- data = state['default']
- else
- return;
- }
- // Encode children first
- var content = null;
- var primitive = false;
- if (state.any) {
- // Anything that was given is translated to buffer
- result = this._createEncoderBuffer(data);
- } else if (state.choice) {
- result = this._encodeChoice(data, reporter);
- } else if (state.contains) {
- content = this._getUse(state.contains, parent)._encode(data, reporter);
- primitive = true;
- } else if (state.children) {
- content = state.children.map(function(child) {
- if (child._baseState.tag === 'null_')
- return child._encode(null, reporter, data);
- if (child._baseState.key === null)
- return reporter.error('Child should have a key');
- var prevKey = reporter.enterKey(child._baseState.key);
- if (typeof data !== 'object')
- return reporter.error('Child expected, but input is not object');
- var res = child._encode(data[child._baseState.key], reporter, data);
- reporter.leaveKey(prevKey);
- return res;
- }, this).filter(function(child) {
- return child;
- });
- content = this._createEncoderBuffer(content);
- } else {
- if (state.tag === 'seqof' || state.tag === 'setof') {
- // TODO(indutny): this should be thrown on DSL level
- if (!(state.args && state.args.length === 1))
- return reporter.error('Too many args for : ' + state.tag);
- if (!Array.isArray(data))
- return reporter.error('seqof/setof, but data is not Array');
- var child = this.clone();
- child._baseState.implicit = null;
- content = this._createEncoderBuffer(data.map(function(item) {
- var state = this._baseState;
- return this._getUse(state.args[0], data)._encode(item, reporter);
- }, child));
- } else if (state.use !== null) {
- result = this._getUse(state.use, parent)._encode(data, reporter);
- } else {
- content = this._encodePrimitive(state.tag, data);
- primitive = true;
- }
- }
- // Encode data itself
- var result;
- if (!state.any && state.choice === null) {
- var tag = state.implicit !== null ? state.implicit : state.tag;
- var cls = state.implicit === null ? 'universal' : 'context';
- if (tag === null) {
- if (state.use === null)
- reporter.error('Tag could be omitted only for .use()');
- } else {
- if (state.use === null)
- result = this._encodeComposite(tag, primitive, cls, content);
- }
- }
- // Wrap in explicit
- if (state.explicit !== null)
- result = this._encodeComposite(state.explicit, false, 'context', result);
- return result;
- };
- Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
- var state = this._baseState;
- var node = state.choice[data.type];
- if (!node) {
- assert(
- false,
- data.type + ' not found in ' +
- JSON.stringify(Object.keys(state.choice)));
- }
- return node._encode(data.value, reporter);
- };
- Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
- var state = this._baseState;
- if (/str$/.test(tag))
- return this._encodeStr(data, tag);
- else if (tag === 'objid' && state.args)
- return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
- else if (tag === 'objid')
- return this._encodeObjid(data, null, null);
- else if (tag === 'gentime' || tag === 'utctime')
- return this._encodeTime(data, tag);
- else if (tag === 'null_')
- return this._encodeNull();
- else if (tag === 'int' || tag === 'enum')
- return this._encodeInt(data, state.args && state.reverseArgs[0]);
- else if (tag === 'bool')
- return this._encodeBool(data);
- else if (tag === 'objDesc')
- return this._encodeStr(data, tag);
- else
- throw new Error('Unsupported tag: ' + tag);
- };
- Node.prototype._isNumstr = function isNumstr(str) {
- return /^[0-9 ]*$/.test(str);
- };
- Node.prototype._isPrintstr = function isPrintstr(str) {
- return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
- };
- },{"../base":135,"minimalistic-assert":268}],137:[function(require,module,exports){
- var inherits = require('inherits');
- function Reporter(options) {
- this._reporterState = {
- obj: null,
- path: [],
- options: options || {},
- errors: []
- };
- }
- exports.Reporter = Reporter;
- Reporter.prototype.isError = function isError(obj) {
- return obj instanceof ReporterError;
- };
- Reporter.prototype.save = function save() {
- var state = this._reporterState;
- return { obj: state.obj, pathLen: state.path.length };
- };
- Reporter.prototype.restore = function restore(data) {
- var state = this._reporterState;
- state.obj = data.obj;
- state.path = state.path.slice(0, data.pathLen);
- };
- Reporter.prototype.enterKey = function enterKey(key) {
- return this._reporterState.path.push(key);
- };
- Reporter.prototype.exitKey = function exitKey(index) {
- var state = this._reporterState;
- state.path = state.path.slice(0, index - 1);
- };
- Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
- var state = this._reporterState;
- this.exitKey(index);
- if (state.obj !== null)
- state.obj[key] = value;
- };
- Reporter.prototype.path = function path() {
- return this._reporterState.path.join('/');
- };
- Reporter.prototype.enterObject = function enterObject() {
- var state = this._reporterState;
- var prev = state.obj;
- state.obj = {};
- return prev;
- };
- Reporter.prototype.leaveObject = function leaveObject(prev) {
- var state = this._reporterState;
- var now = state.obj;
- state.obj = prev;
- return now;
- };
- Reporter.prototype.error = function error(msg) {
- var err;
- var state = this._reporterState;
- var inherited = msg instanceof ReporterError;
- if (inherited) {
- err = msg;
- } else {
- err = new ReporterError(state.path.map(function(elem) {
- return '[' + JSON.stringify(elem) + ']';
- }).join(''), msg.message || msg, msg.stack);
- }
- if (!state.options.partial)
- throw err;
- if (!inherited)
- state.errors.push(err);
- return err;
- };
- Reporter.prototype.wrapResult = function wrapResult(result) {
- var state = this._reporterState;
- if (!state.options.partial)
- return result;
- return {
- result: this.isError(result) ? null : result,
- errors: state.errors
- };
- };
- function ReporterError(path, msg) {
- this.path = path;
- this.rethrow(msg);
- };
- inherits(ReporterError, Error);
- ReporterError.prototype.rethrow = function rethrow(msg) {
- this.message = msg + ' at: ' + (this.path || '(shallow)');
- if (Error.captureStackTrace)
- Error.captureStackTrace(this, ReporterError);
- if (!this.stack) {
- try {
- // IE only adds stack when thrown
- throw new Error(this.message);
- } catch (e) {
- this.stack = e.stack;
- }
- }
- return this;
- };
- },{"inherits":262}],138:[function(require,module,exports){
- var constants = require('../constants');
- exports.tagClass = {
- 0: 'universal',
- 1: 'application',
- 2: 'context',
- 3: 'private'
- };
- exports.tagClassByName = constants._reverse(exports.tagClass);
- exports.tag = {
- 0x00: 'end',
- 0x01: 'bool',
- 0x02: 'int',
- 0x03: 'bitstr',
- 0x04: 'octstr',
- 0x05: 'null_',
- 0x06: 'objid',
- 0x07: 'objDesc',
- 0x08: 'external',
- 0x09: 'real',
- 0x0a: 'enum',
- 0x0b: 'embed',
- 0x0c: 'utf8str',
- 0x0d: 'relativeOid',
- 0x10: 'seq',
- 0x11: 'set',
- 0x12: 'numstr',
- 0x13: 'printstr',
- 0x14: 't61str',
- 0x15: 'videostr',
- 0x16: 'ia5str',
- 0x17: 'utctime',
- 0x18: 'gentime',
- 0x19: 'graphstr',
- 0x1a: 'iso646str',
- 0x1b: 'genstr',
- 0x1c: 'unistr',
- 0x1d: 'charstr',
- 0x1e: 'bmpstr'
- };
- exports.tagByName = constants._reverse(exports.tag);
- },{"../constants":139}],139:[function(require,module,exports){
- var constants = exports;
- // Helper
- constants._reverse = function reverse(map) {
- var res = {};
- Object.keys(map).forEach(function(key) {
- // Convert key to integer if it is stringified
- if ((key | 0) == key)
- key = key | 0;
- var value = map[key];
- res[value] = key;
- });
- return res;
- };
- constants.der = require('./der');
- },{"./der":138}],140:[function(require,module,exports){
- var inherits = require('inherits');
- var asn1 = require('../../asn1');
- var base = asn1.base;
- var bignum = asn1.bignum;
- // Import DER constants
- var der = asn1.constants.der;
- function DERDecoder(entity) {
- this.enc = 'der';
- this.name = entity.name;
- this.entity = entity;
- // Construct base tree
- this.tree = new DERNode();
- this.tree._init(entity.body);
- };
- module.exports = DERDecoder;
- DERDecoder.prototype.decode = function decode(data, options) {
- if (!(data instanceof base.DecoderBuffer))
- data = new base.DecoderBuffer(data, options);
- return this.tree._decode(data, options);
- };
- // Tree methods
- function DERNode(parent) {
- base.Node.call(this, 'der', parent);
- }
- inherits(DERNode, base.Node);
- DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
- if (buffer.isEmpty())
- return false;
- var state = buffer.save();
- var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
- if (buffer.isError(decodedTag))
- return decodedTag;
- buffer.restore(state);
- return decodedTag.tag === tag || decodedTag.tagStr === tag ||
- (decodedTag.tagStr + 'of') === tag || any;
- };
- DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
- var decodedTag = derDecodeTag(buffer,
- 'Failed to decode tag of "' + tag + '"');
- if (buffer.isError(decodedTag))
- return decodedTag;
- var len = derDecodeLen(buffer,
- decodedTag.primitive,
- 'Failed to get length of "' + tag + '"');
- // Failure
- if (buffer.isError(len))
- return len;
- if (!any &&
- decodedTag.tag !== tag &&
- decodedTag.tagStr !== tag &&
- decodedTag.tagStr + 'of' !== tag) {
- return buffer.error('Failed to match tag: "' + tag + '"');
- }
- if (decodedTag.primitive || len !== null)
- return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
- // Indefinite length... find END tag
- var state = buffer.save();
- var res = this._skipUntilEnd(
- buffer,
- 'Failed to skip indefinite length body: "' + this.tag + '"');
- if (buffer.isError(res))
- return res;
- len = buffer.offset - state.offset;
- buffer.restore(state);
- return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
- };
- DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
- while (true) {
- var tag = derDecodeTag(buffer, fail);
- if (buffer.isError(tag))
- return tag;
- var len = derDecodeLen(buffer, tag.primitive, fail);
- if (buffer.isError(len))
- return len;
- var res;
- if (tag.primitive || len !== null)
- res = buffer.skip(len)
- else
- res = this._skipUntilEnd(buffer, fail);
- // Failure
- if (buffer.isError(res))
- return res;
- if (tag.tagStr === 'end')
- break;
- }
- };
- DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,
- options) {
- var result = [];
- while (!buffer.isEmpty()) {
- var possibleEnd = this._peekTag(buffer, 'end');
- if (buffer.isError(possibleEnd))
- return possibleEnd;
- var res = decoder.decode(buffer, 'der', options);
- if (buffer.isError(res) && possibleEnd)
- break;
- result.push(res);
- }
- return result;
- };
- DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
- if (tag === 'bitstr') {
- var unused = buffer.readUInt8();
- if (buffer.isError(unused))
- return unused;
- return { unused: unused, data: buffer.raw() };
- } else if (tag === 'bmpstr') {
- var raw = buffer.raw();
- if (raw.length % 2 === 1)
- return buffer.error('Decoding of string type: bmpstr length mismatch');
- var str = '';
- for (var i = 0; i < raw.length / 2; i++) {
- str += String.fromCharCode(raw.readUInt16BE(i * 2));
- }
- return str;
- } else if (tag === 'numstr') {
- var numstr = buffer.raw().toString('ascii');
- if (!this._isNumstr(numstr)) {
- return buffer.error('Decoding of string type: ' +
- 'numstr unsupported characters');
- }
- return numstr;
- } else if (tag === 'octstr') {
- return buffer.raw();
- } else if (tag === 'objDesc') {
- return buffer.raw();
- } else if (tag === 'printstr') {
- var printstr = buffer.raw().toString('ascii');
- if (!this._isPrintstr(printstr)) {
- return buffer.error('Decoding of string type: ' +
- 'printstr unsupported characters');
- }
- return printstr;
- } else if (/str$/.test(tag)) {
- return buffer.raw().toString();
- } else {
- return buffer.error('Decoding of string type: ' + tag + ' unsupported');
- }
- };
- DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
- var result;
- var identifiers = [];
- var ident = 0;
- while (!buffer.isEmpty()) {
- var subident = buffer.readUInt8();
- ident <<= 7;
- ident |= subident & 0x7f;
- if ((subident & 0x80) === 0) {
- identifiers.push(ident);
- ident = 0;
- }
- }
- if (subident & 0x80)
- identifiers.push(ident);
- var first = (identifiers[0] / 40) | 0;
- var second = identifiers[0] % 40;
- if (relative)
- result = identifiers;
- else
- result = [first, second].concat(identifiers.slice(1));
- if (values) {
- var tmp = values[result.join(' ')];
- if (tmp === undefined)
- tmp = values[result.join('.')];
- if (tmp !== undefined)
- result = tmp;
- }
- return result;
- };
- DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
- var str = buffer.raw().toString();
- if (tag === 'gentime') {
- var year = str.slice(0, 4) | 0;
- var mon = str.slice(4, 6) | 0;
- var day = str.slice(6, 8) | 0;
- var hour = str.slice(8, 10) | 0;
- var min = str.slice(10, 12) | 0;
- var sec = str.slice(12, 14) | 0;
- } else if (tag === 'utctime') {
- var year = str.slice(0, 2) | 0;
- var mon = str.slice(2, 4) | 0;
- var day = str.slice(4, 6) | 0;
- var hour = str.slice(6, 8) | 0;
- var min = str.slice(8, 10) | 0;
- var sec = str.slice(10, 12) | 0;
- if (year < 70)
- year = 2000 + year;
- else
- year = 1900 + year;
- } else {
- return buffer.error('Decoding ' + tag + ' time is not supported yet');
- }
- return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
- };
- DERNode.prototype._decodeNull = function decodeNull(buffer) {
- return null;
- };
- DERNode.prototype._decodeBool = function decodeBool(buffer) {
- var res = buffer.readUInt8();
- if (buffer.isError(res))
- return res;
- else
- return res !== 0;
- };
- DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
- // Bigint, return as it is (assume big endian)
- var raw = buffer.raw();
- var res = new bignum(raw);
- if (values)
- res = values[res.toString(10)] || res;
- return res;
- };
- DERNode.prototype._use = function use(entity, obj) {
- if (typeof entity === 'function')
- entity = entity(obj);
- return entity._getDecoder('der').tree;
- };
- // Utility methods
- function derDecodeTag(buf, fail) {
- var tag = buf.readUInt8(fail);
- if (buf.isError(tag))
- return tag;
- var cls = der.tagClass[tag >> 6];
- var primitive = (tag & 0x20) === 0;
- // Multi-octet tag - load
- if ((tag & 0x1f) === 0x1f) {
- var oct = tag;
- tag = 0;
- while ((oct & 0x80) === 0x80) {
- oct = buf.readUInt8(fail);
- if (buf.isError(oct))
- return oct;
- tag <<= 7;
- tag |= oct & 0x7f;
- }
- } else {
- tag &= 0x1f;
- }
- var tagStr = der.tag[tag];
- return {
- cls: cls,
- primitive: primitive,
- tag: tag,
- tagStr: tagStr
- };
- }
- function derDecodeLen(buf, primitive, fail) {
- var len = buf.readUInt8(fail);
- if (buf.isError(len))
- return len;
- // Indefinite form
- if (!primitive && len === 0x80)
- return null;
- // Definite form
- if ((len & 0x80) === 0) {
- // Short form
- return len;
- }
- // Long form
- var num = len & 0x7f;
- if (num > 4)
- return buf.error('length octect is too long');
- len = 0;
- for (var i = 0; i < num; i++) {
- len <<= 8;
- var j = buf.readUInt8(fail);
- if (buf.isError(j))
- return j;
- len |= j;
- }
- return len;
- }
- },{"../../asn1":132,"inherits":262}],141:[function(require,module,exports){
- var decoders = exports;
- decoders.der = require('./der');
- decoders.pem = require('./pem');
- },{"./der":140,"./pem":142}],142:[function(require,module,exports){
- var inherits = require('inherits');
- var Buffer = require('buffer').Buffer;
- var DERDecoder = require('./der');
- function PEMDecoder(entity) {
- DERDecoder.call(this, entity);
- this.enc = 'pem';
- };
- inherits(PEMDecoder, DERDecoder);
- module.exports = PEMDecoder;
- PEMDecoder.prototype.decode = function decode(data, options) {
- var lines = data.toString().split(/[\r\n]+/g);
- var label = options.label.toUpperCase();
- var re = /^-----(BEGIN|END) ([^-]+)-----$/;
- var start = -1;
- var end = -1;
- for (var i = 0; i < lines.length; i++) {
- var match = lines[i].match(re);
- if (match === null)
- continue;
- if (match[2] !== label)
- continue;
- if (start === -1) {
- if (match[1] !== 'BEGIN')
- break;
- start = i;
- } else {
- if (match[1] !== 'END')
- break;
- end = i;
- break;
- }
- }
- if (start === -1 || end === -1)
- throw new Error('PEM section not found for: ' + label);
- var base64 = lines.slice(start + 1, end).join('');
- // Remove excessive symbols
- base64.replace(/[^a-z0-9\+\/=]+/gi, '');
- var input = new Buffer(base64, 'base64');
- return DERDecoder.prototype.decode.call(this, input, options);
- };
- },{"./der":140,"buffer":182,"inherits":262}],143:[function(require,module,exports){
- var inherits = require('inherits');
- var Buffer = require('buffer').Buffer;
- var asn1 = require('../../asn1');
- var base = asn1.base;
- // Import DER constants
- var der = asn1.constants.der;
- function DEREncoder(entity) {
- this.enc = 'der';
- this.name = entity.name;
- this.entity = entity;
- // Construct base tree
- this.tree = new DERNode();
- this.tree._init(entity.body);
- };
- module.exports = DEREncoder;
- DEREncoder.prototype.encode = function encode(data, reporter) {
- return this.tree._encode(data, reporter).join();
- };
- // Tree methods
- function DERNode(parent) {
- base.Node.call(this, 'der', parent);
- }
- inherits(DERNode, base.Node);
- DERNode.prototype._encodeComposite = function encodeComposite(tag,
- primitive,
- cls,
- content) {
- var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
- // Short form
- if (content.length < 0x80) {
- var header = new Buffer(2);
- header[0] = encodedTag;
- header[1] = content.length;
- return this._createEncoderBuffer([ header, content ]);
- }
- // Long form
- // Count octets required to store length
- var lenOctets = 1;
- for (var i = content.length; i >= 0x100; i >>= 8)
- lenOctets++;
- var header = new Buffer(1 + 1 + lenOctets);
- header[0] = encodedTag;
- header[1] = 0x80 | lenOctets;
- for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
- header[i] = j & 0xff;
- return this._createEncoderBuffer([ header, content ]);
- };
- DERNode.prototype._encodeStr = function encodeStr(str, tag) {
- if (tag === 'bitstr') {
- return this._createEncoderBuffer([ str.unused | 0, str.data ]);
- } else if (tag === 'bmpstr') {
- var buf = new Buffer(str.length * 2);
- for (var i = 0; i < str.length; i++) {
- buf.writeUInt16BE(str.charCodeAt(i), i * 2);
- }
- return this._createEncoderBuffer(buf);
- } else if (tag === 'numstr') {
- if (!this._isNumstr(str)) {
- return this.reporter.error('Encoding of string type: numstr supports ' +
- 'only digits and space');
- }
- return this._createEncoderBuffer(str);
- } else if (tag === 'printstr') {
- if (!this._isPrintstr(str)) {
- return this.reporter.error('Encoding of string type: printstr supports ' +
- 'only latin upper and lower case letters, ' +
- 'digits, space, apostrophe, left and rigth ' +
- 'parenthesis, plus sign, comma, hyphen, ' +
- 'dot, slash, colon, equal sign, ' +
- 'question mark');
- }
- return this._createEncoderBuffer(str);
- } else if (/str$/.test(tag)) {
- return this._createEncoderBuffer(str);
- } else if (tag === 'objDesc') {
- return this._createEncoderBuffer(str);
- } else {
- return this.reporter.error('Encoding of string type: ' + tag +
- ' unsupported');
- }
- };
- DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
- if (typeof id === 'string') {
- if (!values)
- return this.reporter.error('string objid given, but no values map found');
- if (!values.hasOwnProperty(id))
- return this.reporter.error('objid not found in values map');
- id = values[id].split(/[\s\.]+/g);
- for (var i = 0; i < id.length; i++)
- id[i] |= 0;
- } else if (Array.isArray(id)) {
- id = id.slice();
- for (var i = 0; i < id.length; i++)
- id[i] |= 0;
- }
- if (!Array.isArray(id)) {
- return this.reporter.error('objid() should be either array or string, ' +
- 'got: ' + JSON.stringify(id));
- }
- if (!relative) {
- if (id[1] >= 40)
- return this.reporter.error('Second objid identifier OOB');
- id.splice(0, 2, id[0] * 40 + id[1]);
- }
- // Count number of octets
- var size = 0;
- for (var i = 0; i < id.length; i++) {
- var ident = id[i];
- for (size++; ident >= 0x80; ident >>= 7)
- size++;
- }
- var objid = new Buffer(size);
- var offset = objid.length - 1;
- for (var i = id.length - 1; i >= 0; i--) {
- var ident = id[i];
- objid[offset--] = ident & 0x7f;
- while ((ident >>= 7) > 0)
- objid[offset--] = 0x80 | (ident & 0x7f);
- }
- return this._createEncoderBuffer(objid);
- };
- function two(num) {
- if (num < 10)
- return '0' + num;
- else
- return num;
- }
- DERNode.prototype._encodeTime = function encodeTime(time, tag) {
- var str;
- var date = new Date(time);
- if (tag === 'gentime') {
- str = [
- two(date.getFullYear()),
- two(date.getUTCMonth() + 1),
- two(date.getUTCDate()),
- two(date.getUTCHours()),
- two(date.getUTCMinutes()),
- two(date.getUTCSeconds()),
- 'Z'
- ].join('');
- } else if (tag === 'utctime') {
- str = [
- two(date.getFullYear() % 100),
- two(date.getUTCMonth() + 1),
- two(date.getUTCDate()),
- two(date.getUTCHours()),
- two(date.getUTCMinutes()),
- two(date.getUTCSeconds()),
- 'Z'
- ].join('');
- } else {
- this.reporter.error('Encoding ' + tag + ' time is not supported yet');
- }
- return this._encodeStr(str, 'octstr');
- };
- DERNode.prototype._encodeNull = function encodeNull() {
- return this._createEncoderBuffer('');
- };
- DERNode.prototype._encodeInt = function encodeInt(num, values) {
- if (typeof num === 'string') {
- if (!values)
- return this.reporter.error('String int or enum given, but no values map');
- if (!values.hasOwnProperty(num)) {
- return this.reporter.error('Values map doesn\'t contain: ' +
- JSON.stringify(num));
- }
- num = values[num];
- }
- // Bignum, assume big endian
- if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
- var numArray = num.toArray();
- if (!num.sign && numArray[0] & 0x80) {
- numArray.unshift(0);
- }
- num = new Buffer(numArray);
- }
- if (Buffer.isBuffer(num)) {
- var size = num.length;
- if (num.length === 0)
- size++;
- var out = new Buffer(size);
- num.copy(out);
- if (num.length === 0)
- out[0] = 0
- return this._createEncoderBuffer(out);
- }
- if (num < 0x80)
- return this._createEncoderBuffer(num);
- if (num < 0x100)
- return this._createEncoderBuffer([0, num]);
- var size = 1;
- for (var i = num; i >= 0x100; i >>= 8)
- size++;
- var out = new Array(size);
- for (var i = out.length - 1; i >= 0; i--) {
- out[i] = num & 0xff;
- num >>= 8;
- }
- if(out[0] & 0x80) {
- out.unshift(0);
- }
- return this._createEncoderBuffer(new Buffer(out));
- };
- DERNode.prototype._encodeBool = function encodeBool(value) {
- return this._createEncoderBuffer(value ? 0xff : 0);
- };
- DERNode.prototype._use = function use(entity, obj) {
- if (typeof entity === 'function')
- entity = entity(obj);
- return entity._getEncoder('der').tree;
- };
- DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
- var state = this._baseState;
- var i;
- if (state['default'] === null)
- return false;
- var data = dataBuffer.join();
- if (state.defaultBuffer === undefined)
- state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
- if (data.length !== state.defaultBuffer.length)
- return false;
- for (i=0; i < data.length; i++)
- if (data[i] !== state.defaultBuffer[i])
- return false;
- return true;
- };
- // Utility methods
- function encodeTag(tag, primitive, cls, reporter) {
- var res;
- if (tag === 'seqof')
- tag = 'seq';
- else if (tag === 'setof')
- tag = 'set';
- if (der.tagByName.hasOwnProperty(tag))
- res = der.tagByName[tag];
- else if (typeof tag === 'number' && (tag | 0) === tag)
- res = tag;
- else
- return reporter.error('Unknown tag: ' + tag);
- if (res >= 0x1f)
- return reporter.error('Multi-octet tag encoding unsupported');
- if (!primitive)
- res |= 0x20;
- res |= (der.tagClassByName[cls || 'universal'] << 6);
- return res;
- }
- },{"../../asn1":132,"buffer":182,"inherits":262}],144:[function(require,module,exports){
- var encoders = exports;
- encoders.der = require('./der');
- encoders.pem = require('./pem');
- },{"./der":143,"./pem":145}],145:[function(require,module,exports){
- var inherits = require('inherits');
- var DEREncoder = require('./der');
- function PEMEncoder(entity) {
- DEREncoder.call(this, entity);
- this.enc = 'pem';
- };
- inherits(PEMEncoder, DEREncoder);
- module.exports = PEMEncoder;
- PEMEncoder.prototype.encode = function encode(data, options) {
- var buf = DEREncoder.prototype.encode.call(this, data);
- var p = buf.toString('base64');
- var out = [ '-----BEGIN ' + options.label + '-----' ];
- for (var i = 0; i < p.length; i += 64)
- out.push(p.slice(i, i + 64));
- out.push('-----END ' + options.label + '-----');
- return out.join('\n');
- };
- },{"./der":143,"inherits":262}],146:[function(require,module,exports){
- 'use strict'
- exports.byteLength = byteLength
- exports.toByteArray = toByteArray
- exports.fromByteArray = fromByteArray
- var lookup = []
- var revLookup = []
- var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
- var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
- for (var i = 0, len = code.length; i < len; ++i) {
- lookup[i] = code[i]
- revLookup[code.charCodeAt(i)] = i
- }
- // Support decoding URL-safe base64 strings, as Node.js does.
- // See: https://en.wikipedia.org/wiki/Base64#URL_applications
- revLookup['-'.charCodeAt(0)] = 62
- revLookup['_'.charCodeAt(0)] = 63
- function getLens (b64) {
- var len = b64.length
- if (len % 4 > 0) {
- throw new Error('Invalid string. Length must be a multiple of 4')
- }
- // Trim off extra bytes after placeholder bytes are found
- // See: https://github.com/beatgammit/base64-js/issues/42
- var validLen = b64.indexOf('=')
- if (validLen === -1) validLen = len
- var placeHoldersLen = validLen === len
- ? 0
- : 4 - (validLen % 4)
- return [validLen, placeHoldersLen]
- }
- // base64 is 4/3 + up to two characters of the original data
- function byteLength (b64) {
- var lens = getLens(b64)
- var validLen = lens[0]
- var placeHoldersLen = lens[1]
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
- }
- function _byteLength (b64, validLen, placeHoldersLen) {
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
- }
- function toByteArray (b64) {
- var tmp
- var lens = getLens(b64)
- var validLen = lens[0]
- var placeHoldersLen = lens[1]
- var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
- var curByte = 0
- // if there are placeholders, only get up to the last complete 4 chars
- var len = placeHoldersLen > 0
- ? validLen - 4
- : validLen
- var i
- for (i = 0; i < len; i += 4) {
- tmp =
- (revLookup[b64.charCodeAt(i)] << 18) |
- (revLookup[b64.charCodeAt(i + 1)] << 12) |
- (revLookup[b64.charCodeAt(i + 2)] << 6) |
- revLookup[b64.charCodeAt(i + 3)]
- arr[curByte++] = (tmp >> 16) & 0xFF
- arr[curByte++] = (tmp >> 8) & 0xFF
- arr[curByte++] = tmp & 0xFF
- }
- if (placeHoldersLen === 2) {
- tmp =
- (revLookup[b64.charCodeAt(i)] << 2) |
- (revLookup[b64.charCodeAt(i + 1)] >> 4)
- arr[curByte++] = tmp & 0xFF
- }
- if (placeHoldersLen === 1) {
- tmp =
- (revLookup[b64.charCodeAt(i)] << 10) |
- (revLookup[b64.charCodeAt(i + 1)] << 4) |
- (revLookup[b64.charCodeAt(i + 2)] >> 2)
- arr[curByte++] = (tmp >> 8) & 0xFF
- arr[curByte++] = tmp & 0xFF
- }
- return arr
- }
- function tripletToBase64 (num) {
- return lookup[num >> 18 & 0x3F] +
- lookup[num >> 12 & 0x3F] +
- lookup[num >> 6 & 0x3F] +
- lookup[num & 0x3F]
- }
- function encodeChunk (uint8, start, end) {
- var tmp
- var output = []
- for (var i = start; i < end; i += 3) {
- tmp =
- ((uint8[i] << 16) & 0xFF0000) +
- ((uint8[i + 1] << 8) & 0xFF00) +
- (uint8[i + 2] & 0xFF)
- output.push(tripletToBase64(tmp))
- }
- return output.join('')
- }
- function fromByteArray (uint8) {
- var tmp
- var len = uint8.length
- var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
- var parts = []
- var maxChunkLength = 16383 // must be multiple of 3
- // go through the array every three bytes, we'll deal with trailing stuff later
- for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
- parts.push(encodeChunk(
- uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)
- ))
- }
- // pad the end with zeros, but make sure to not forget the extra bytes
- if (extraBytes === 1) {
- tmp = uint8[len - 1]
- parts.push(
- lookup[tmp >> 2] +
- lookup[(tmp << 4) & 0x3F] +
- '=='
- )
- } else if (extraBytes === 2) {
- tmp = (uint8[len - 2] << 8) + uint8[len - 1]
- parts.push(
- lookup[tmp >> 10] +
- lookup[(tmp >> 4) & 0x3F] +
- lookup[(tmp << 2) & 0x3F] +
- '='
- )
- }
- return parts.join('')
- }
- },{}],147:[function(require,module,exports){
- (function (module, exports) {
- 'use strict';
- // Utils
- function assert (val, msg) {
- if (!val) throw new Error(msg || 'Assertion failed');
- }
- // Could use `inherits` module, but don't want to move from single file
- // architecture yet.
- function inherits (ctor, superCtor) {
- ctor.super_ = superCtor;
- var TempCtor = function () {};
- TempCtor.prototype = superCtor.prototype;
- ctor.prototype = new TempCtor();
- ctor.prototype.constructor = ctor;
- }
- // BN
- function BN (number, base, endian) {
- if (BN.isBN(number)) {
- return number;
- }
- this.negative = 0;
- this.words = null;
- this.length = 0;
- // Reduction context
- this.red = null;
- if (number !== null) {
- if (base === 'le' || base === 'be') {
- endian = base;
- base = 10;
- }
- this._init(number || 0, base || 10, endian || 'be');
- }
- }
- if (typeof module === 'object') {
- module.exports = BN;
- } else {
- exports.BN = BN;
- }
- BN.BN = BN;
- BN.wordSize = 26;
- var Buffer;
- try {
- Buffer = require('buffer').Buffer;
- } catch (e) {
- }
- BN.isBN = function isBN (num) {
- if (num instanceof BN) {
- return true;
- }
- return num !== null && typeof num === 'object' &&
- num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
- };
- BN.max = function max (left, right) {
- if (left.cmp(right) > 0) return left;
- return right;
- };
- BN.min = function min (left, right) {
- if (left.cmp(right) < 0) return left;
- return right;
- };
- BN.prototype._init = function init (number, base, endian) {
- if (typeof number === 'number') {
- return this._initNumber(number, base, endian);
- }
- if (typeof number === 'object') {
- return this._initArray(number, base, endian);
- }
- if (base === 'hex') {
- base = 16;
- }
- assert(base === (base | 0) && base >= 2 && base <= 36);
- number = number.toString().replace(/\s+/g, '');
- var start = 0;
- if (number[0] === '-') {
- start++;
- }
- if (base === 16) {
- this._parseHex(number, start);
- } else {
- this._parseBase(number, base, start);
- }
- if (number[0] === '-') {
- this.negative = 1;
- }
- this.strip();
- if (endian !== 'le') return;
- this._initArray(this.toArray(), base, endian);
- };
- BN.prototype._initNumber = function _initNumber (number, base, endian) {
- if (number < 0) {
- this.negative = 1;
- number = -number;
- }
- if (number < 0x4000000) {
- this.words = [ number & 0x3ffffff ];
- this.length = 1;
- } else if (number < 0x10000000000000) {
- this.words = [
- number & 0x3ffffff,
- (number / 0x4000000) & 0x3ffffff
- ];
- this.length = 2;
- } else {
- assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
- this.words = [
- number & 0x3ffffff,
- (number / 0x4000000) & 0x3ffffff,
- 1
- ];
- this.length = 3;
- }
- if (endian !== 'le') return;
- // Reverse the bytes
- this._initArray(this.toArray(), base, endian);
- };
- BN.prototype._initArray = function _initArray (number, base, endian) {
- // Perhaps a Uint8Array
- assert(typeof number.length === 'number');
- if (number.length <= 0) {
- this.words = [ 0 ];
- this.length = 1;
- return this;
- }
- this.length = Math.ceil(number.length / 3);
- this.words = new Array(this.length);
- for (var i = 0; i < this.length; i++) {
- this.words[i] = 0;
- }
- var j, w;
- var off = 0;
- if (endian === 'be') {
- for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
- w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
- this.words[j] |= (w << off) & 0x3ffffff;
- this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
- off += 24;
- if (off >= 26) {
- off -= 26;
- j++;
- }
- }
- } else if (endian === 'le') {
- for (i = 0, j = 0; i < number.length; i += 3) {
- w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
- this.words[j] |= (w << off) & 0x3ffffff;
- this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
- off += 24;
- if (off >= 26) {
- off -= 26;
- j++;
- }
- }
- }
- return this.strip();
- };
- function parseHex (str, start, end) {
- var r = 0;
- var len = Math.min(str.length, end);
- for (var i = start; i < len; i++) {
- var c = str.charCodeAt(i) - 48;
- r <<= 4;
- // 'a' - 'f'
- if (c >= 49 && c <= 54) {
- r |= c - 49 + 0xa;
- // 'A' - 'F'
- } else if (c >= 17 && c <= 22) {
- r |= c - 17 + 0xa;
- // '0' - '9'
- } else {
- r |= c & 0xf;
- }
- }
- return r;
- }
- BN.prototype._parseHex = function _parseHex (number, start) {
- // Create possibly bigger array to ensure that it fits the number
- this.length = Math.ceil((number.length - start) / 6);
- this.words = new Array(this.length);
- for (var i = 0; i < this.length; i++) {
- this.words[i] = 0;
- }
- var j, w;
- // Scan 24-bit chunks and add them to the number
- var off = 0;
- for (i = number.length - 6, j = 0; i >= start; i -= 6) {
- w = parseHex(number, i, i + 6);
- this.words[j] |= (w << off) & 0x3ffffff;
- // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
- this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
- off += 24;
- if (off >= 26) {
- off -= 26;
- j++;
- }
- }
- if (i + 6 !== start) {
- w = parseHex(number, start, i + 6);
- this.words[j] |= (w << off) & 0x3ffffff;
- this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
- }
- this.strip();
- };
- function parseBase (str, start, end, mul) {
- var r = 0;
- var len = Math.min(str.length, end);
- for (var i = start; i < len; i++) {
- var c = str.charCodeAt(i) - 48;
- r *= mul;
- // 'a'
- if (c >= 49) {
- r += c - 49 + 0xa;
- // 'A'
- } else if (c >= 17) {
- r += c - 17 + 0xa;
- // '0' - '9'
- } else {
- r += c;
- }
- }
- return r;
- }
- BN.prototype._parseBase = function _parseBase (number, base, start) {
- // Initialize as zero
- this.words = [ 0 ];
- this.length = 1;
- // Find length of limb in base
- for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
- limbLen++;
- }
- limbLen--;
- limbPow = (limbPow / base) | 0;
- var total = number.length - start;
- var mod = total % limbLen;
- var end = Math.min(total, total - mod) + start;
- var word = 0;
- for (var i = start; i < end; i += limbLen) {
- word = parseBase(number, i, i + limbLen, base);
- this.imuln(limbPow);
- if (this.words[0] + word < 0x4000000) {
- this.words[0] += word;
- } else {
- this._iaddn(word);
- }
- }
- if (mod !== 0) {
- var pow = 1;
- word = parseBase(number, i, number.length, base);
- for (i = 0; i < mod; i++) {
- pow *= base;
- }
- this.imuln(pow);
- if (this.words[0] + word < 0x4000000) {
- this.words[0] += word;
- } else {
- this._iaddn(word);
- }
- }
- };
- BN.prototype.copy = function copy (dest) {
- dest.words = new Array(this.length);
- for (var i = 0; i < this.length; i++) {
- dest.words[i] = this.words[i];
- }
- dest.length = this.length;
- dest.negative = this.negative;
- dest.red = this.red;
- };
- BN.prototype.clone = function clone () {
- var r = new BN(null);
- this.copy(r);
- return r;
- };
- BN.prototype._expand = function _expand (size) {
- while (this.length < size) {
- this.words[this.length++] = 0;
- }
- return this;
- };
- // Remove leading `0` from `this`
- BN.prototype.strip = function strip () {
- while (this.length > 1 && this.words[this.length - 1] === 0) {
- this.length--;
- }
- return this._normSign();
- };
- BN.prototype._normSign = function _normSign () {
- // -0 = 0
- if (this.length === 1 && this.words[0] === 0) {
- this.negative = 0;
- }
- return this;
- };
- BN.prototype.inspect = function inspect () {
- return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
- };
- /*
- var zeros = [];
- var groupSizes = [];
- var groupBases = [];
- var s = '';
- var i = -1;
- while (++i < BN.wordSize) {
- zeros[i] = s;
- s += '0';
- }
- groupSizes[0] = 0;
- groupSizes[1] = 0;
- groupBases[0] = 0;
- groupBases[1] = 0;
- var base = 2 - 1;
- while (++base < 36 + 1) {
- var groupSize = 0;
- var groupBase = 1;
- while (groupBase < (1 << BN.wordSize) / base) {
- groupBase *= base;
- groupSize += 1;
- }
- groupSizes[base] = groupSize;
- groupBases[base] = groupBase;
- }
- */
- var zeros = [
- '',
- '0',
- '00',
- '000',
- '0000',
- '00000',
- '000000',
- '0000000',
- '00000000',
- '000000000',
- '0000000000',
- '00000000000',
- '000000000000',
- '0000000000000',
- '00000000000000',
- '000000000000000',
- '0000000000000000',
- '00000000000000000',
- '000000000000000000',
- '0000000000000000000',
- '00000000000000000000',
- '000000000000000000000',
- '0000000000000000000000',
- '00000000000000000000000',
- '000000000000000000000000',
- '0000000000000000000000000'
- ];
- var groupSizes = [
- 0, 0,
- 25, 16, 12, 11, 10, 9, 8,
- 8, 7, 7, 7, 7, 6, 6,
- 6, 6, 6, 6, 6, 5, 5,
- 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5
- ];
- var groupBases = [
- 0, 0,
- 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
- 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
- 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
- 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
- 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
- ];
- BN.prototype.toString = function toString (base, padding) {
- base = base || 10;
- padding = padding | 0 || 1;
- var out;
- if (base === 16 || base === 'hex') {
- out = '';
- var off = 0;
- var carry = 0;
- for (var i = 0; i < this.length; i++) {
- var w = this.words[i];
- var word = (((w << off) | carry) & 0xffffff).toString(16);
- carry = (w >>> (24 - off)) & 0xffffff;
- if (carry !== 0 || i !== this.length - 1) {
- out = zeros[6 - word.length] + word + out;
- } else {
- out = word + out;
- }
- off += 2;
- if (off >= 26) {
- off -= 26;
- i--;
- }
- }
- if (carry !== 0) {
- out = carry.toString(16) + out;
- }
- while (out.length % padding !== 0) {
- out = '0' + out;
- }
- if (this.negative !== 0) {
- out = '-' + out;
- }
- return out;
- }
- if (base === (base | 0) && base >= 2 && base <= 36) {
- // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
- var groupSize = groupSizes[base];
- // var groupBase = Math.pow(base, groupSize);
- var groupBase = groupBases[base];
- out = '';
- var c = this.clone();
- c.negative = 0;
- while (!c.isZero()) {
- var r = c.modn(groupBase).toString(base);
- c = c.idivn(groupBase);
- if (!c.isZero()) {
- out = zeros[groupSize - r.length] + r + out;
- } else {
- out = r + out;
- }
- }
- if (this.isZero()) {
- out = '0' + out;
- }
- while (out.length % padding !== 0) {
- out = '0' + out;
- }
- if (this.negative !== 0) {
- out = '-' + out;
- }
- return out;
- }
- assert(false, 'Base should be between 2 and 36');
- };
- BN.prototype.toNumber = function toNumber () {
- var ret = this.words[0];
- if (this.length === 2) {
- ret += this.words[1] * 0x4000000;
- } else if (this.length === 3 && this.words[2] === 0x01) {
- // NOTE: at this stage it is known that the top bit is set
- ret += 0x10000000000000 + (this.words[1] * 0x4000000);
- } else if (this.length > 2) {
- assert(false, 'Number can only safely store up to 53 bits');
- }
- return (this.negative !== 0) ? -ret : ret;
- };
- BN.prototype.toJSON = function toJSON () {
- return this.toString(16);
- };
- BN.prototype.toBuffer = function toBuffer (endian, length) {
- assert(typeof Buffer !== 'undefined');
- return this.toArrayLike(Buffer, endian, length);
- };
- BN.prototype.toArray = function toArray (endian, length) {
- return this.toArrayLike(Array, endian, length);
- };
- BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
- var byteLength = this.byteLength();
- var reqLength = length || Math.max(1, byteLength);
- assert(byteLength <= reqLength, 'byte array longer than desired length');
- assert(reqLength > 0, 'Requested array length <= 0');
- this.strip();
- var littleEndian = endian === 'le';
- var res = new ArrayType(reqLength);
- var b, i;
- var q = this.clone();
- if (!littleEndian) {
- // Assume big-endian
- for (i = 0; i < reqLength - byteLength; i++) {
- res[i] = 0;
- }
- for (i = 0; !q.isZero(); i++) {
- b = q.andln(0xff);
- q.iushrn(8);
- res[reqLength - i - 1] = b;
- }
- } else {
- for (i = 0; !q.isZero(); i++) {
- b = q.andln(0xff);
- q.iushrn(8);
- res[i] = b;
- }
- for (; i < reqLength; i++) {
- res[i] = 0;
- }
- }
- return res;
- };
- if (Math.clz32) {
- BN.prototype._countBits = function _countBits (w) {
- return 32 - Math.clz32(w);
- };
- } else {
- BN.prototype._countBits = function _countBits (w) {
- var t = w;
- var r = 0;
- if (t >= 0x1000) {
- r += 13;
- t >>>= 13;
- }
- if (t >= 0x40) {
- r += 7;
- t >>>= 7;
- }
- if (t >= 0x8) {
- r += 4;
- t >>>= 4;
- }
- if (t >= 0x02) {
- r += 2;
- t >>>= 2;
- }
- return r + t;
- };
- }
- BN.prototype._zeroBits = function _zeroBits (w) {
- // Short-cut
- if (w === 0) return 26;
- var t = w;
- var r = 0;
- if ((t & 0x1fff) === 0) {
- r += 13;
- t >>>= 13;
- }
- if ((t & 0x7f) === 0) {
- r += 7;
- t >>>= 7;
- }
- if ((t & 0xf) === 0) {
- r += 4;
- t >>>= 4;
- }
- if ((t & 0x3) === 0) {
- r += 2;
- t >>>= 2;
- }
- if ((t & 0x1) === 0) {
- r++;
- }
- return r;
- };
- // Return number of used bits in a BN
- BN.prototype.bitLength = function bitLength () {
- var w = this.words[this.length - 1];
- var hi = this._countBits(w);
- return (this.length - 1) * 26 + hi;
- };
- function toBitArray (num) {
- var w = new Array(num.bitLength());
- for (var bit = 0; bit < w.length; bit++) {
- var off = (bit / 26) | 0;
- var wbit = bit % 26;
- w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
- }
- return w;
- }
- // Number of trailing zero bits
- BN.prototype.zeroBits = function zeroBits () {
- if (this.isZero()) return 0;
- var r = 0;
- for (var i = 0; i < this.length; i++) {
- var b = this._zeroBits(this.words[i]);
- r += b;
- if (b !== 26) break;
- }
- return r;
- };
- BN.prototype.byteLength = function byteLength () {
- return Math.ceil(this.bitLength() / 8);
- };
- BN.prototype.toTwos = function toTwos (width) {
- if (this.negative !== 0) {
- return this.abs().inotn(width).iaddn(1);
- }
- return this.clone();
- };
- BN.prototype.fromTwos = function fromTwos (width) {
- if (this.testn(width - 1)) {
- return this.notn(width).iaddn(1).ineg();
- }
- return this.clone();
- };
- BN.prototype.isNeg = function isNeg () {
- return this.negative !== 0;
- };
- // Return negative clone of `this`
- BN.prototype.neg = function neg () {
- return this.clone().ineg();
- };
- BN.prototype.ineg = function ineg () {
- if (!this.isZero()) {
- this.negative ^= 1;
- }
- return this;
- };
- // Or `num` with `this` in-place
- BN.prototype.iuor = function iuor (num) {
- while (this.length < num.length) {
- this.words[this.length++] = 0;
- }
- for (var i = 0; i < num.length; i++) {
- this.words[i] = this.words[i] | num.words[i];
- }
- return this.strip();
- };
- BN.prototype.ior = function ior (num) {
- assert((this.negative | num.negative) === 0);
- return this.iuor(num);
- };
- // Or `num` with `this`
- BN.prototype.or = function or (num) {
- if (this.length > num.length) return this.clone().ior(num);
- return num.clone().ior(this);
- };
- BN.prototype.uor = function uor (num) {
- if (this.length > num.length) return this.clone().iuor(num);
- return num.clone().iuor(this);
- };
- // And `num` with `this` in-place
- BN.prototype.iuand = function iuand (num) {
- // b = min-length(num, this)
- var b;
- if (this.length > num.length) {
- b = num;
- } else {
- b = this;
- }
- for (var i = 0; i < b.length; i++) {
- this.words[i] = this.words[i] & num.words[i];
- }
- this.length = b.length;
- return this.strip();
- };
- BN.prototype.iand = function iand (num) {
- assert((this.negative | num.negative) === 0);
- return this.iuand(num);
- };
- // And `num` with `this`
- BN.prototype.and = function and (num) {
- if (this.length > num.length) return this.clone().iand(num);
- return num.clone().iand(this);
- };
- BN.prototype.uand = function uand (num) {
- if (this.length > num.length) return this.clone().iuand(num);
- return num.clone().iuand(this);
- };
- // Xor `num` with `this` in-place
- BN.prototype.iuxor = function iuxor (num) {
- // a.length > b.length
- var a;
- var b;
- if (this.length > num.length) {
- a = this;
- b = num;
- } else {
- a = num;
- b = this;
- }
- for (var i = 0; i < b.length; i++) {
- this.words[i] = a.words[i] ^ b.words[i];
- }
- if (this !== a) {
- for (; i < a.length; i++) {
- this.words[i] = a.words[i];
- }
- }
- this.length = a.length;
- return this.strip();
- };
- BN.prototype.ixor = function ixor (num) {
- assert((this.negative | num.negative) === 0);
- return this.iuxor(num);
- };
- // Xor `num` with `this`
- BN.prototype.xor = function xor (num) {
- if (this.length > num.length) return this.clone().ixor(num);
- return num.clone().ixor(this);
- };
- BN.prototype.uxor = function uxor (num) {
- if (this.length > num.length) return this.clone().iuxor(num);
- return num.clone().iuxor(this);
- };
- // Not ``this`` with ``width`` bitwidth
- BN.prototype.inotn = function inotn (width) {
- assert(typeof width === 'number' && width >= 0);
- var bytesNeeded = Math.ceil(width / 26) | 0;
- var bitsLeft = width % 26;
- // Extend the buffer with leading zeroes
- this._expand(bytesNeeded);
- if (bitsLeft > 0) {
- bytesNeeded--;
- }
- // Handle complete words
- for (var i = 0; i < bytesNeeded; i++) {
- this.words[i] = ~this.words[i] & 0x3ffffff;
- }
- // Handle the residue
- if (bitsLeft > 0) {
- this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
- }
- // And remove leading zeroes
- return this.strip();
- };
- BN.prototype.notn = function notn (width) {
- return this.clone().inotn(width);
- };
- // Set `bit` of `this`
- BN.prototype.setn = function setn (bit, val) {
- assert(typeof bit === 'number' && bit >= 0);
- var off = (bit / 26) | 0;
- var wbit = bit % 26;
- this._expand(off + 1);
- if (val) {
- this.words[off] = this.words[off] | (1 << wbit);
- } else {
- this.words[off] = this.words[off] & ~(1 << wbit);
- }
- return this.strip();
- };
- // Add `num` to `this` in-place
- BN.prototype.iadd = function iadd (num) {
- var r;
- // negative + positive
- if (this.negative !== 0 && num.negative === 0) {
- this.negative = 0;
- r = this.isub(num);
- this.negative ^= 1;
- return this._normSign();
- // positive + negative
- } else if (this.negative === 0 && num.negative !== 0) {
- num.negative = 0;
- r = this.isub(num);
- num.negative = 1;
- return r._normSign();
- }
- // a.length > b.length
- var a, b;
- if (this.length > num.length) {
- a = this;
- b = num;
- } else {
- a = num;
- b = this;
- }
- var carry = 0;
- for (var i = 0; i < b.length; i++) {
- r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
- this.words[i] = r & 0x3ffffff;
- carry = r >>> 26;
- }
- for (; carry !== 0 && i < a.length; i++) {
- r = (a.words[i] | 0) + carry;
- this.words[i] = r & 0x3ffffff;
- carry = r >>> 26;
- }
- this.length = a.length;
- if (carry !== 0) {
- this.words[this.length] = carry;
- this.length++;
- // Copy the rest of the words
- } else if (a !== this) {
- for (; i < a.length; i++) {
- this.words[i] = a.words[i];
- }
- }
- return this;
- };
- // Add `num` to `this`
- BN.prototype.add = function add (num) {
- var res;
- if (num.negative !== 0 && this.negative === 0) {
- num.negative = 0;
- res = this.sub(num);
- num.negative ^= 1;
- return res;
- } else if (num.negative === 0 && this.negative !== 0) {
- this.negative = 0;
- res = num.sub(this);
- this.negative = 1;
- return res;
- }
- if (this.length > num.length) return this.clone().iadd(num);
- return num.clone().iadd(this);
- };
- // Subtract `num` from `this` in-place
- BN.prototype.isub = function isub (num) {
- // this - (-num) = this + num
- if (num.negative !== 0) {
- num.negative = 0;
- var r = this.iadd(num);
- num.negative = 1;
- return r._normSign();
- // -this - num = -(this + num)
- } else if (this.negative !== 0) {
- this.negative = 0;
- this.iadd(num);
- this.negative = 1;
- return this._normSign();
- }
- // At this point both numbers are positive
- var cmp = this.cmp(num);
- // Optimization - zeroify
- if (cmp === 0) {
- this.negative = 0;
- this.length = 1;
- this.words[0] = 0;
- return this;
- }
- // a > b
- var a, b;
- if (cmp > 0) {
- a = this;
- b = num;
- } else {
- a = num;
- b = this;
- }
- var carry = 0;
- for (var i = 0; i < b.length; i++) {
- r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
- carry = r >> 26;
- this.words[i] = r & 0x3ffffff;
- }
- for (; carry !== 0 && i < a.length; i++) {
- r = (a.words[i] | 0) + carry;
- carry = r >> 26;
- this.words[i] = r & 0x3ffffff;
- }
- // Copy rest of the words
- if (carry === 0 && i < a.length && a !== this) {
- for (; i < a.length; i++) {
- this.words[i] = a.words[i];
- }
- }
- this.length = Math.max(this.length, i);
- if (a !== this) {
- this.negative = 1;
- }
- return this.strip();
- };
- // Subtract `num` from `this`
- BN.prototype.sub = function sub (num) {
- return this.clone().isub(num);
- };
- function smallMulTo (self, num, out) {
- out.negative = num.negative ^ self.negative;
- var len = (self.length + num.length) | 0;
- out.length = len;
- len = (len - 1) | 0;
- // Peel one iteration (compiler can't do it, because of code complexity)
- var a = self.words[0] | 0;
- var b = num.words[0] | 0;
- var r = a * b;
- var lo = r & 0x3ffffff;
- var carry = (r / 0x4000000) | 0;
- out.words[0] = lo;
- for (var k = 1; k < len; k++) {
- // Sum all words with the same `i + j = k` and accumulate `ncarry`,
- // note that ncarry could be >= 0x3ffffff
- var ncarry = carry >>> 26;
- var rword = carry & 0x3ffffff;
- var maxJ = Math.min(k, num.length - 1);
- for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
- var i = (k - j) | 0;
- a = self.words[i] | 0;
- b = num.words[j] | 0;
- r = a * b + rword;
- ncarry += (r / 0x4000000) | 0;
- rword = r & 0x3ffffff;
- }
- out.words[k] = rword | 0;
- carry = ncarry | 0;
- }
- if (carry !== 0) {
- out.words[k] = carry | 0;
- } else {
- out.length--;
- }
- return out.strip();
- }
- // TODO(indutny): it may be reasonable to omit it for users who don't need
- // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
- // multiplication (like elliptic secp256k1).
- var comb10MulTo = function comb10MulTo (self, num, out) {
- var a = self.words;
- var b = num.words;
- var o = out.words;
- var c = 0;
- var lo;
- var mid;
- var hi;
- var a0 = a[0] | 0;
- var al0 = a0 & 0x1fff;
- var ah0 = a0 >>> 13;
- var a1 = a[1] | 0;
- var al1 = a1 & 0x1fff;
- var ah1 = a1 >>> 13;
- var a2 = a[2] | 0;
- var al2 = a2 & 0x1fff;
- var ah2 = a2 >>> 13;
- var a3 = a[3] | 0;
- var al3 = a3 & 0x1fff;
- var ah3 = a3 >>> 13;
- var a4 = a[4] | 0;
- var al4 = a4 & 0x1fff;
- var ah4 = a4 >>> 13;
- var a5 = a[5] | 0;
- var al5 = a5 & 0x1fff;
- var ah5 = a5 >>> 13;
- var a6 = a[6] | 0;
- var al6 = a6 & 0x1fff;
- var ah6 = a6 >>> 13;
- var a7 = a[7] | 0;
- var al7 = a7 & 0x1fff;
- var ah7 = a7 >>> 13;
- var a8 = a[8] | 0;
- var al8 = a8 & 0x1fff;
- var ah8 = a8 >>> 13;
- var a9 = a[9] | 0;
- var al9 = a9 & 0x1fff;
- var ah9 = a9 >>> 13;
- var b0 = b[0] | 0;
- var bl0 = b0 & 0x1fff;
- var bh0 = b0 >>> 13;
- var b1 = b[1] | 0;
- var bl1 = b1 & 0x1fff;
- var bh1 = b1 >>> 13;
- var b2 = b[2] | 0;
- var bl2 = b2 & 0x1fff;
- var bh2 = b2 >>> 13;
- var b3 = b[3] | 0;
- var bl3 = b3 & 0x1fff;
- var bh3 = b3 >>> 13;
- var b4 = b[4] | 0;
- var bl4 = b4 & 0x1fff;
- var bh4 = b4 >>> 13;
- var b5 = b[5] | 0;
- var bl5 = b5 & 0x1fff;
- var bh5 = b5 >>> 13;
- var b6 = b[6] | 0;
- var bl6 = b6 & 0x1fff;
- var bh6 = b6 >>> 13;
- var b7 = b[7] | 0;
- var bl7 = b7 & 0x1fff;
- var bh7 = b7 >>> 13;
- var b8 = b[8] | 0;
- var bl8 = b8 & 0x1fff;
- var bh8 = b8 >>> 13;
- var b9 = b[9] | 0;
- var bl9 = b9 & 0x1fff;
- var bh9 = b9 >>> 13;
- out.negative = self.negative ^ num.negative;
- out.length = 19;
- /* k = 0 */
- lo = Math.imul(al0, bl0);
- mid = Math.imul(al0, bh0);
- mid = (mid + Math.imul(ah0, bl0)) | 0;
- hi = Math.imul(ah0, bh0);
- var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
- w0 &= 0x3ffffff;
- /* k = 1 */
- lo = Math.imul(al1, bl0);
- mid = Math.imul(al1, bh0);
- mid = (mid + Math.imul(ah1, bl0)) | 0;
- hi = Math.imul(ah1, bh0);
- lo = (lo + Math.imul(al0, bl1)) | 0;
- mid = (mid + Math.imul(al0, bh1)) | 0;
- mid = (mid + Math.imul(ah0, bl1)) | 0;
- hi = (hi + Math.imul(ah0, bh1)) | 0;
- var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
- w1 &= 0x3ffffff;
- /* k = 2 */
- lo = Math.imul(al2, bl0);
- mid = Math.imul(al2, bh0);
- mid = (mid + Math.imul(ah2, bl0)) | 0;
- hi = Math.imul(ah2, bh0);
- lo = (lo + Math.imul(al1, bl1)) | 0;
- mid = (mid + Math.imul(al1, bh1)) | 0;
- mid = (mid + Math.imul(ah1, bl1)) | 0;
- hi = (hi + Math.imul(ah1, bh1)) | 0;
- lo = (lo + Math.imul(al0, bl2)) | 0;
- mid = (mid + Math.imul(al0, bh2)) | 0;
- mid = (mid + Math.imul(ah0, bl2)) | 0;
- hi = (hi + Math.imul(ah0, bh2)) | 0;
- var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
- w2 &= 0x3ffffff;
- /* k = 3 */
- lo = Math.imul(al3, bl0);
- mid = Math.imul(al3, bh0);
- mid = (mid + Math.imul(ah3, bl0)) | 0;
- hi = Math.imul(ah3, bh0);
- lo = (lo + Math.imul(al2, bl1)) | 0;
- mid = (mid + Math.imul(al2, bh1)) | 0;
- mid = (mid + Math.imul(ah2, bl1)) | 0;
- hi = (hi + Math.imul(ah2, bh1)) | 0;
- lo = (lo + Math.imul(al1, bl2)) | 0;
- mid = (mid + Math.imul(al1, bh2)) | 0;
- mid = (mid + Math.imul(ah1, bl2)) | 0;
- hi = (hi + Math.imul(ah1, bh2)) | 0;
- lo = (lo + Math.imul(al0, bl3)) | 0;
- mid = (mid + Math.imul(al0, bh3)) | 0;
- mid = (mid + Math.imul(ah0, bl3)) | 0;
- hi = (hi + Math.imul(ah0, bh3)) | 0;
- var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
- w3 &= 0x3ffffff;
- /* k = 4 */
- lo = Math.imul(al4, bl0);
- mid = Math.imul(al4, bh0);
- mid = (mid + Math.imul(ah4, bl0)) | 0;
- hi = Math.imul(ah4, bh0);
- lo = (lo + Math.imul(al3, bl1)) | 0;
- mid = (mid + Math.imul(al3, bh1)) | 0;
- mid = (mid + Math.imul(ah3, bl1)) | 0;
- hi = (hi + Math.imul(ah3, bh1)) | 0;
- lo = (lo + Math.imul(al2, bl2)) | 0;
- mid = (mid + Math.imul(al2, bh2)) | 0;
- mid = (mid + Math.imul(ah2, bl2)) | 0;
- hi = (hi + Math.imul(ah2, bh2)) | 0;
- lo = (lo + Math.imul(al1, bl3)) | 0;
- mid = (mid + Math.imul(al1, bh3)) | 0;
- mid = (mid + Math.imul(ah1, bl3)) | 0;
- hi = (hi + Math.imul(ah1, bh3)) | 0;
- lo = (lo + Math.imul(al0, bl4)) | 0;
- mid = (mid + Math.imul(al0, bh4)) | 0;
- mid = (mid + Math.imul(ah0, bl4)) | 0;
- hi = (hi + Math.imul(ah0, bh4)) | 0;
- var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
- w4 &= 0x3ffffff;
- /* k = 5 */
- lo = Math.imul(al5, bl0);
- mid = Math.imul(al5, bh0);
- mid = (mid + Math.imul(ah5, bl0)) | 0;
- hi = Math.imul(ah5, bh0);
- lo = (lo + Math.imul(al4, bl1)) | 0;
- mid = (mid + Math.imul(al4, bh1)) | 0;
- mid = (mid + Math.imul(ah4, bl1)) | 0;
- hi = (hi + Math.imul(ah4, bh1)) | 0;
- lo = (lo + Math.imul(al3, bl2)) | 0;
- mid = (mid + Math.imul(al3, bh2)) | 0;
- mid = (mid + Math.imul(ah3, bl2)) | 0;
- hi = (hi + Math.imul(ah3, bh2)) | 0;
- lo = (lo + Math.imul(al2, bl3)) | 0;
- mid = (mid + Math.imul(al2, bh3)) | 0;
- mid = (mid + Math.imul(ah2, bl3)) | 0;
- hi = (hi + Math.imul(ah2, bh3)) | 0;
- lo = (lo + Math.imul(al1, bl4)) | 0;
- mid = (mid + Math.imul(al1, bh4)) | 0;
- mid = (mid + Math.imul(ah1, bl4)) | 0;
- hi = (hi + Math.imul(ah1, bh4)) | 0;
- lo = (lo + Math.imul(al0, bl5)) | 0;
- mid = (mid + Math.imul(al0, bh5)) | 0;
- mid = (mid + Math.imul(ah0, bl5)) | 0;
- hi = (hi + Math.imul(ah0, bh5)) | 0;
- var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
- w5 &= 0x3ffffff;
- /* k = 6 */
- lo = Math.imul(al6, bl0);
- mid = Math.imul(al6, bh0);
- mid = (mid + Math.imul(ah6, bl0)) | 0;
- hi = Math.imul(ah6, bh0);
- lo = (lo + Math.imul(al5, bl1)) | 0;
- mid = (mid + Math.imul(al5, bh1)) | 0;
- mid = (mid + Math.imul(ah5, bl1)) | 0;
- hi = (hi + Math.imul(ah5, bh1)) | 0;
- lo = (lo + Math.imul(al4, bl2)) | 0;
- mid = (mid + Math.imul(al4, bh2)) | 0;
- mid = (mid + Math.imul(ah4, bl2)) | 0;
- hi = (hi + Math.imul(ah4, bh2)) | 0;
- lo = (lo + Math.imul(al3, bl3)) | 0;
- mid = (mid + Math.imul(al3, bh3)) | 0;
- mid = (mid + Math.imul(ah3, bl3)) | 0;
- hi = (hi + Math.imul(ah3, bh3)) | 0;
- lo = (lo + Math.imul(al2, bl4)) | 0;
- mid = (mid + Math.imul(al2, bh4)) | 0;
- mid = (mid + Math.imul(ah2, bl4)) | 0;
- hi = (hi + Math.imul(ah2, bh4)) | 0;
- lo = (lo + Math.imul(al1, bl5)) | 0;
- mid = (mid + Math.imul(al1, bh5)) | 0;
- mid = (mid + Math.imul(ah1, bl5)) | 0;
- hi = (hi + Math.imul(ah1, bh5)) | 0;
- lo = (lo + Math.imul(al0, bl6)) | 0;
- mid = (mid + Math.imul(al0, bh6)) | 0;
- mid = (mid + Math.imul(ah0, bl6)) | 0;
- hi = (hi + Math.imul(ah0, bh6)) | 0;
- var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
- w6 &= 0x3ffffff;
- /* k = 7 */
- lo = Math.imul(al7, bl0);
- mid = Math.imul(al7, bh0);
- mid = (mid + Math.imul(ah7, bl0)) | 0;
- hi = Math.imul(ah7, bh0);
- lo = (lo + Math.imul(al6, bl1)) | 0;
- mid = (mid + Math.imul(al6, bh1)) | 0;
- mid = (mid + Math.imul(ah6, bl1)) | 0;
- hi = (hi + Math.imul(ah6, bh1)) | 0;
- lo = (lo + Math.imul(al5, bl2)) | 0;
- mid = (mid + Math.imul(al5, bh2)) | 0;
- mid = (mid + Math.imul(ah5, bl2)) | 0;
- hi = (hi + Math.imul(ah5, bh2)) | 0;
- lo = (lo + Math.imul(al4, bl3)) | 0;
- mid = (mid + Math.imul(al4, bh3)) | 0;
- mid = (mid + Math.imul(ah4, bl3)) | 0;
- hi = (hi + Math.imul(ah4, bh3)) | 0;
- lo = (lo + Math.imul(al3, bl4)) | 0;
- mid = (mid + Math.imul(al3, bh4)) | 0;
- mid = (mid + Math.imul(ah3, bl4)) | 0;
- hi = (hi + Math.imul(ah3, bh4)) | 0;
- lo = (lo + Math.imul(al2, bl5)) | 0;
- mid = (mid + Math.imul(al2, bh5)) | 0;
- mid = (mid + Math.imul(ah2, bl5)) | 0;
- hi = (hi + Math.imul(ah2, bh5)) | 0;
- lo = (lo + Math.imul(al1, bl6)) | 0;
- mid = (mid + Math.imul(al1, bh6)) | 0;
- mid = (mid + Math.imul(ah1, bl6)) | 0;
- hi = (hi + Math.imul(ah1, bh6)) | 0;
- lo = (lo + Math.imul(al0, bl7)) | 0;
- mid = (mid + Math.imul(al0, bh7)) | 0;
- mid = (mid + Math.imul(ah0, bl7)) | 0;
- hi = (hi + Math.imul(ah0, bh7)) | 0;
- var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
- w7 &= 0x3ffffff;
- /* k = 8 */
- lo = Math.imul(al8, bl0);
- mid = Math.imul(al8, bh0);
- mid = (mid + Math.imul(ah8, bl0)) | 0;
- hi = Math.imul(ah8, bh0);
- lo = (lo + Math.imul(al7, bl1)) | 0;
- mid = (mid + Math.imul(al7, bh1)) | 0;
- mid = (mid + Math.imul(ah7, bl1)) | 0;
- hi = (hi + Math.imul(ah7, bh1)) | 0;
- lo = (lo + Math.imul(al6, bl2)) | 0;
- mid = (mid + Math.imul(al6, bh2)) | 0;
- mid = (mid + Math.imul(ah6, bl2)) | 0;
- hi = (hi + Math.imul(ah6, bh2)) | 0;
- lo = (lo + Math.imul(al5, bl3)) | 0;
- mid = (mid + Math.imul(al5, bh3)) | 0;
- mid = (mid + Math.imul(ah5, bl3)) | 0;
- hi = (hi + Math.imul(ah5, bh3)) | 0;
- lo = (lo + Math.imul(al4, bl4)) | 0;
- mid = (mid + Math.imul(al4, bh4)) | 0;
- mid = (mid + Math.imul(ah4, bl4)) | 0;
- hi = (hi + Math.imul(ah4, bh4)) | 0;
- lo = (lo + Math.imul(al3, bl5)) | 0;
- mid = (mid + Math.imul(al3, bh5)) | 0;
- mid = (mid + Math.imul(ah3, bl5)) | 0;
- hi = (hi + Math.imul(ah3, bh5)) | 0;
- lo = (lo + Math.imul(al2, bl6)) | 0;
- mid = (mid + Math.imul(al2, bh6)) | 0;
- mid = (mid + Math.imul(ah2, bl6)) | 0;
- hi = (hi + Math.imul(ah2, bh6)) | 0;
- lo = (lo + Math.imul(al1, bl7)) | 0;
- mid = (mid + Math.imul(al1, bh7)) | 0;
- mid = (mid + Math.imul(ah1, bl7)) | 0;
- hi = (hi + Math.imul(ah1, bh7)) | 0;
- lo = (lo + Math.imul(al0, bl8)) | 0;
- mid = (mid + Math.imul(al0, bh8)) | 0;
- mid = (mid + Math.imul(ah0, bl8)) | 0;
- hi = (hi + Math.imul(ah0, bh8)) | 0;
- var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
- w8 &= 0x3ffffff;
- /* k = 9 */
- lo = Math.imul(al9, bl0);
- mid = Math.imul(al9, bh0);
- mid = (mid + Math.imul(ah9, bl0)) | 0;
- hi = Math.imul(ah9, bh0);
- lo = (lo + Math.imul(al8, bl1)) | 0;
- mid = (mid + Math.imul(al8, bh1)) | 0;
- mid = (mid + Math.imul(ah8, bl1)) | 0;
- hi = (hi + Math.imul(ah8, bh1)) | 0;
- lo = (lo + Math.imul(al7, bl2)) | 0;
- mid = (mid + Math.imul(al7, bh2)) | 0;
- mid = (mid + Math.imul(ah7, bl2)) | 0;
- hi = (hi + Math.imul(ah7, bh2)) | 0;
- lo = (lo + Math.imul(al6, bl3)) | 0;
- mid = (mid + Math.imul(al6, bh3)) | 0;
- mid = (mid + Math.imul(ah6, bl3)) | 0;
- hi = (hi + Math.imul(ah6, bh3)) | 0;
- lo = (lo + Math.imul(al5, bl4)) | 0;
- mid = (mid + Math.imul(al5, bh4)) | 0;
- mid = (mid + Math.imul(ah5, bl4)) | 0;
- hi = (hi + Math.imul(ah5, bh4)) | 0;
- lo = (lo + Math.imul(al4, bl5)) | 0;
- mid = (mid + Math.imul(al4, bh5)) | 0;
- mid = (mid + Math.imul(ah4, bl5)) | 0;
- hi = (hi + Math.imul(ah4, bh5)) | 0;
- lo = (lo + Math.imul(al3, bl6)) | 0;
- mid = (mid + Math.imul(al3, bh6)) | 0;
- mid = (mid + Math.imul(ah3, bl6)) | 0;
- hi = (hi + Math.imul(ah3, bh6)) | 0;
- lo = (lo + Math.imul(al2, bl7)) | 0;
- mid = (mid + Math.imul(al2, bh7)) | 0;
- mid = (mid + Math.imul(ah2, bl7)) | 0;
- hi = (hi + Math.imul(ah2, bh7)) | 0;
- lo = (lo + Math.imul(al1, bl8)) | 0;
- mid = (mid + Math.imul(al1, bh8)) | 0;
- mid = (mid + Math.imul(ah1, bl8)) | 0;
- hi = (hi + Math.imul(ah1, bh8)) | 0;
- lo = (lo + Math.imul(al0, bl9)) | 0;
- mid = (mid + Math.imul(al0, bh9)) | 0;
- mid = (mid + Math.imul(ah0, bl9)) | 0;
- hi = (hi + Math.imul(ah0, bh9)) | 0;
- var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
- w9 &= 0x3ffffff;
- /* k = 10 */
- lo = Math.imul(al9, bl1);
- mid = Math.imul(al9, bh1);
- mid = (mid + Math.imul(ah9, bl1)) | 0;
- hi = Math.imul(ah9, bh1);
- lo = (lo + Math.imul(al8, bl2)) | 0;
- mid = (mid + Math.imul(al8, bh2)) | 0;
- mid = (mid + Math.imul(ah8, bl2)) | 0;
- hi = (hi + Math.imul(ah8, bh2)) | 0;
- lo = (lo + Math.imul(al7, bl3)) | 0;
- mid = (mid + Math.imul(al7, bh3)) | 0;
- mid = (mid + Math.imul(ah7, bl3)) | 0;
- hi = (hi + Math.imul(ah7, bh3)) | 0;
- lo = (lo + Math.imul(al6, bl4)) | 0;
- mid = (mid + Math.imul(al6, bh4)) | 0;
- mid = (mid + Math.imul(ah6, bl4)) | 0;
- hi = (hi + Math.imul(ah6, bh4)) | 0;
- lo = (lo + Math.imul(al5, bl5)) | 0;
- mid = (mid + Math.imul(al5, bh5)) | 0;
- mid = (mid + Math.imul(ah5, bl5)) | 0;
- hi = (hi + Math.imul(ah5, bh5)) | 0;
- lo = (lo + Math.imul(al4, bl6)) | 0;
- mid = (mid + Math.imul(al4, bh6)) | 0;
- mid = (mid + Math.imul(ah4, bl6)) | 0;
- hi = (hi + Math.imul(ah4, bh6)) | 0;
- lo = (lo + Math.imul(al3, bl7)) | 0;
- mid = (mid + Math.imul(al3, bh7)) | 0;
- mid = (mid + Math.imul(ah3, bl7)) | 0;
- hi = (hi + Math.imul(ah3, bh7)) | 0;
- lo = (lo + Math.imul(al2, bl8)) | 0;
- mid = (mid + Math.imul(al2, bh8)) | 0;
- mid = (mid + Math.imul(ah2, bl8)) | 0;
- hi = (hi + Math.imul(ah2, bh8)) | 0;
- lo = (lo + Math.imul(al1, bl9)) | 0;
- mid = (mid + Math.imul(al1, bh9)) | 0;
- mid = (mid + Math.imul(ah1, bl9)) | 0;
- hi = (hi + Math.imul(ah1, bh9)) | 0;
- var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
- w10 &= 0x3ffffff;
- /* k = 11 */
- lo = Math.imul(al9, bl2);
- mid = Math.imul(al9, bh2);
- mid = (mid + Math.imul(ah9, bl2)) | 0;
- hi = Math.imul(ah9, bh2);
- lo = (lo + Math.imul(al8, bl3)) | 0;
- mid = (mid + Math.imul(al8, bh3)) | 0;
- mid = (mid + Math.imul(ah8, bl3)) | 0;
- hi = (hi + Math.imul(ah8, bh3)) | 0;
- lo = (lo + Math.imul(al7, bl4)) | 0;
- mid = (mid + Math.imul(al7, bh4)) | 0;
- mid = (mid + Math.imul(ah7, bl4)) | 0;
- hi = (hi + Math.imul(ah7, bh4)) | 0;
- lo = (lo + Math.imul(al6, bl5)) | 0;
- mid = (mid + Math.imul(al6, bh5)) | 0;
- mid = (mid + Math.imul(ah6, bl5)) | 0;
- hi = (hi + Math.imul(ah6, bh5)) | 0;
- lo = (lo + Math.imul(al5, bl6)) | 0;
- mid = (mid + Math.imul(al5, bh6)) | 0;
- mid = (mid + Math.imul(ah5, bl6)) | 0;
- hi = (hi + Math.imul(ah5, bh6)) | 0;
- lo = (lo + Math.imul(al4, bl7)) | 0;
- mid = (mid + Math.imul(al4, bh7)) | 0;
- mid = (mid + Math.imul(ah4, bl7)) | 0;
- hi = (hi + Math.imul(ah4, bh7)) | 0;
- lo = (lo + Math.imul(al3, bl8)) | 0;
- mid = (mid + Math.imul(al3, bh8)) | 0;
- mid = (mid + Math.imul(ah3, bl8)) | 0;
- hi = (hi + Math.imul(ah3, bh8)) | 0;
- lo = (lo + Math.imul(al2, bl9)) | 0;
- mid = (mid + Math.imul(al2, bh9)) | 0;
- mid = (mid + Math.imul(ah2, bl9)) | 0;
- hi = (hi + Math.imul(ah2, bh9)) | 0;
- var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
- w11 &= 0x3ffffff;
- /* k = 12 */
- lo = Math.imul(al9, bl3);
- mid = Math.imul(al9, bh3);
- mid = (mid + Math.imul(ah9, bl3)) | 0;
- hi = Math.imul(ah9, bh3);
- lo = (lo + Math.imul(al8, bl4)) | 0;
- mid = (mid + Math.imul(al8, bh4)) | 0;
- mid = (mid + Math.imul(ah8, bl4)) | 0;
- hi = (hi + Math.imul(ah8, bh4)) | 0;
- lo = (lo + Math.imul(al7, bl5)) | 0;
- mid = (mid + Math.imul(al7, bh5)) | 0;
- mid = (mid + Math.imul(ah7, bl5)) | 0;
- hi = (hi + Math.imul(ah7, bh5)) | 0;
- lo = (lo + Math.imul(al6, bl6)) | 0;
- mid = (mid + Math.imul(al6, bh6)) | 0;
- mid = (mid + Math.imul(ah6, bl6)) | 0;
- hi = (hi + Math.imul(ah6, bh6)) | 0;
- lo = (lo + Math.imul(al5, bl7)) | 0;
- mid = (mid + Math.imul(al5, bh7)) | 0;
- mid = (mid + Math.imul(ah5, bl7)) | 0;
- hi = (hi + Math.imul(ah5, bh7)) | 0;
- lo = (lo + Math.imul(al4, bl8)) | 0;
- mid = (mid + Math.imul(al4, bh8)) | 0;
- mid = (mid + Math.imul(ah4, bl8)) | 0;
- hi = (hi + Math.imul(ah4, bh8)) | 0;
- lo = (lo + Math.imul(al3, bl9)) | 0;
- mid = (mid + Math.imul(al3, bh9)) | 0;
- mid = (mid + Math.imul(ah3, bl9)) | 0;
- hi = (hi + Math.imul(ah3, bh9)) | 0;
- var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
- w12 &= 0x3ffffff;
- /* k = 13 */
- lo = Math.imul(al9, bl4);
- mid = Math.imul(al9, bh4);
- mid = (mid + Math.imul(ah9, bl4)) | 0;
- hi = Math.imul(ah9, bh4);
- lo = (lo + Math.imul(al8, bl5)) | 0;
- mid = (mid + Math.imul(al8, bh5)) | 0;
- mid = (mid + Math.imul(ah8, bl5)) | 0;
- hi = (hi + Math.imul(ah8, bh5)) | 0;
- lo = (lo + Math.imul(al7, bl6)) | 0;
- mid = (mid + Math.imul(al7, bh6)) | 0;
- mid = (mid + Math.imul(ah7, bl6)) | 0;
- hi = (hi + Math.imul(ah7, bh6)) | 0;
- lo = (lo + Math.imul(al6, bl7)) | 0;
- mid = (mid + Math.imul(al6, bh7)) | 0;
- mid = (mid + Math.imul(ah6, bl7)) | 0;
- hi = (hi + Math.imul(ah6, bh7)) | 0;
- lo = (lo + Math.imul(al5, bl8)) | 0;
- mid = (mid + Math.imul(al5, bh8)) | 0;
- mid = (mid + Math.imul(ah5, bl8)) | 0;
- hi = (hi + Math.imul(ah5, bh8)) | 0;
- lo = (lo + Math.imul(al4, bl9)) | 0;
- mid = (mid + Math.imul(al4, bh9)) | 0;
- mid = (mid + Math.imul(ah4, bl9)) | 0;
- hi = (hi + Math.imul(ah4, bh9)) | 0;
- var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
- w13 &= 0x3ffffff;
- /* k = 14 */
- lo = Math.imul(al9, bl5);
- mid = Math.imul(al9, bh5);
- mid = (mid + Math.imul(ah9, bl5)) | 0;
- hi = Math.imul(ah9, bh5);
- lo = (lo + Math.imul(al8, bl6)) | 0;
- mid = (mid + Math.imul(al8, bh6)) | 0;
- mid = (mid + Math.imul(ah8, bl6)) | 0;
- hi = (hi + Math.imul(ah8, bh6)) | 0;
- lo = (lo + Math.imul(al7, bl7)) | 0;
- mid = (mid + Math.imul(al7, bh7)) | 0;
- mid = (mid + Math.imul(ah7, bl7)) | 0;
- hi = (hi + Math.imul(ah7, bh7)) | 0;
- lo = (lo + Math.imul(al6, bl8)) | 0;
- mid = (mid + Math.imul(al6, bh8)) | 0;
- mid = (mid + Math.imul(ah6, bl8)) | 0;
- hi = (hi + Math.imul(ah6, bh8)) | 0;
- lo = (lo + Math.imul(al5, bl9)) | 0;
- mid = (mid + Math.imul(al5, bh9)) | 0;
- mid = (mid + Math.imul(ah5, bl9)) | 0;
- hi = (hi + Math.imul(ah5, bh9)) | 0;
- var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
- w14 &= 0x3ffffff;
- /* k = 15 */
- lo = Math.imul(al9, bl6);
- mid = Math.imul(al9, bh6);
- mid = (mid + Math.imul(ah9, bl6)) | 0;
- hi = Math.imul(ah9, bh6);
- lo = (lo + Math.imul(al8, bl7)) | 0;
- mid = (mid + Math.imul(al8, bh7)) | 0;
- mid = (mid + Math.imul(ah8, bl7)) | 0;
- hi = (hi + Math.imul(ah8, bh7)) | 0;
- lo = (lo + Math.imul(al7, bl8)) | 0;
- mid = (mid + Math.imul(al7, bh8)) | 0;
- mid = (mid + Math.imul(ah7, bl8)) | 0;
- hi = (hi + Math.imul(ah7, bh8)) | 0;
- lo = (lo + Math.imul(al6, bl9)) | 0;
- mid = (mid + Math.imul(al6, bh9)) | 0;
- mid = (mid + Math.imul(ah6, bl9)) | 0;
- hi = (hi + Math.imul(ah6, bh9)) | 0;
- var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
- w15 &= 0x3ffffff;
- /* k = 16 */
- lo = Math.imul(al9, bl7);
- mid = Math.imul(al9, bh7);
- mid = (mid + Math.imul(ah9, bl7)) | 0;
- hi = Math.imul(ah9, bh7);
- lo = (lo + Math.imul(al8, bl8)) | 0;
- mid = (mid + Math.imul(al8, bh8)) | 0;
- mid = (mid + Math.imul(ah8, bl8)) | 0;
- hi = (hi + Math.imul(ah8, bh8)) | 0;
- lo = (lo + Math.imul(al7, bl9)) | 0;
- mid = (mid + Math.imul(al7, bh9)) | 0;
- mid = (mid + Math.imul(ah7, bl9)) | 0;
- hi = (hi + Math.imul(ah7, bh9)) | 0;
- var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
- w16 &= 0x3ffffff;
- /* k = 17 */
- lo = Math.imul(al9, bl8);
- mid = Math.imul(al9, bh8);
- mid = (mid + Math.imul(ah9, bl8)) | 0;
- hi = Math.imul(ah9, bh8);
- lo = (lo + Math.imul(al8, bl9)) | 0;
- mid = (mid + Math.imul(al8, bh9)) | 0;
- mid = (mid + Math.imul(ah8, bl9)) | 0;
- hi = (hi + Math.imul(ah8, bh9)) | 0;
- var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
- w17 &= 0x3ffffff;
- /* k = 18 */
- lo = Math.imul(al9, bl9);
- mid = Math.imul(al9, bh9);
- mid = (mid + Math.imul(ah9, bl9)) | 0;
- hi = Math.imul(ah9, bh9);
- var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
- c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
- w18 &= 0x3ffffff;
- o[0] = w0;
- o[1] = w1;
- o[2] = w2;
- o[3] = w3;
- o[4] = w4;
- o[5] = w5;
- o[6] = w6;
- o[7] = w7;
- o[8] = w8;
- o[9] = w9;
- o[10] = w10;
- o[11] = w11;
- o[12] = w12;
- o[13] = w13;
- o[14] = w14;
- o[15] = w15;
- o[16] = w16;
- o[17] = w17;
- o[18] = w18;
- if (c !== 0) {
- o[19] = c;
- out.length++;
- }
- return out;
- };
- // Polyfill comb
- if (!Math.imul) {
- comb10MulTo = smallMulTo;
- }
- function bigMulTo (self, num, out) {
- out.negative = num.negative ^ self.negative;
- out.length = self.length + num.length;
- var carry = 0;
- var hncarry = 0;
- for (var k = 0; k < out.length - 1; k++) {
- // Sum all words with the same `i + j = k` and accumulate `ncarry`,
- // note that ncarry could be >= 0x3ffffff
- var ncarry = hncarry;
- hncarry = 0;
- var rword = carry & 0x3ffffff;
- var maxJ = Math.min(k, num.length - 1);
- for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
- var i = k - j;
- var a = self.words[i] | 0;
- var b = num.words[j] | 0;
- var r = a * b;
- var lo = r & 0x3ffffff;
- ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
- lo = (lo + rword) | 0;
- rword = lo & 0x3ffffff;
- ncarry = (ncarry + (lo >>> 26)) | 0;
- hncarry += ncarry >>> 26;
- ncarry &= 0x3ffffff;
- }
- out.words[k] = rword;
- carry = ncarry;
- ncarry = hncarry;
- }
- if (carry !== 0) {
- out.words[k] = carry;
- } else {
- out.length--;
- }
- return out.strip();
- }
- function jumboMulTo (self, num, out) {
- var fftm = new FFTM();
- return fftm.mulp(self, num, out);
- }
- BN.prototype.mulTo = function mulTo (num, out) {
- var res;
- var len = this.length + num.length;
- if (this.length === 10 && num.length === 10) {
- res = comb10MulTo(this, num, out);
- } else if (len < 63) {
- res = smallMulTo(this, num, out);
- } else if (len < 1024) {
- res = bigMulTo(this, num, out);
- } else {
- res = jumboMulTo(this, num, out);
- }
- return res;
- };
- // Cooley-Tukey algorithm for FFT
- // slightly revisited to rely on looping instead of recursion
- function FFTM (x, y) {
- this.x = x;
- this.y = y;
- }
- FFTM.prototype.makeRBT = function makeRBT (N) {
- var t = new Array(N);
- var l = BN.prototype._countBits(N) - 1;
- for (var i = 0; i < N; i++) {
- t[i] = this.revBin(i, l, N);
- }
- return t;
- };
- // Returns binary-reversed representation of `x`
- FFTM.prototype.revBin = function revBin (x, l, N) {
- if (x === 0 || x === N - 1) return x;
- var rb = 0;
- for (var i = 0; i < l; i++) {
- rb |= (x & 1) << (l - i - 1);
- x >>= 1;
- }
- return rb;
- };
- // Performs "tweedling" phase, therefore 'emulating'
- // behaviour of the recursive algorithm
- FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
- for (var i = 0; i < N; i++) {
- rtws[i] = rws[rbt[i]];
- itws[i] = iws[rbt[i]];
- }
- };
- FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
- this.permute(rbt, rws, iws, rtws, itws, N);
- for (var s = 1; s < N; s <<= 1) {
- var l = s << 1;
- var rtwdf = Math.cos(2 * Math.PI / l);
- var itwdf = Math.sin(2 * Math.PI / l);
- for (var p = 0; p < N; p += l) {
- var rtwdf_ = rtwdf;
- var itwdf_ = itwdf;
- for (var j = 0; j < s; j++) {
- var re = rtws[p + j];
- var ie = itws[p + j];
- var ro = rtws[p + j + s];
- var io = itws[p + j + s];
- var rx = rtwdf_ * ro - itwdf_ * io;
- io = rtwdf_ * io + itwdf_ * ro;
- ro = rx;
- rtws[p + j] = re + ro;
- itws[p + j] = ie + io;
- rtws[p + j + s] = re - ro;
- itws[p + j + s] = ie - io;
- /* jshint maxdepth : false */
- if (j !== l) {
- rx = rtwdf * rtwdf_ - itwdf * itwdf_;
- itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
- rtwdf_ = rx;
- }
- }
- }
- }
- };
- FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
- var N = Math.max(m, n) | 1;
- var odd = N & 1;
- var i = 0;
- for (N = N / 2 | 0; N; N = N >>> 1) {
- i++;
- }
- return 1 << i + 1 + odd;
- };
- FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
- if (N <= 1) return;
- for (var i = 0; i < N / 2; i++) {
- var t = rws[i];
- rws[i] = rws[N - i - 1];
- rws[N - i - 1] = t;
- t = iws[i];
- iws[i] = -iws[N - i - 1];
- iws[N - i - 1] = -t;
- }
- };
- FFTM.prototype.normalize13b = function normalize13b (ws, N) {
- var carry = 0;
- for (var i = 0; i < N / 2; i++) {
- var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
- Math.round(ws[2 * i] / N) +
- carry;
- ws[i] = w & 0x3ffffff;
- if (w < 0x4000000) {
- carry = 0;
- } else {
- carry = w / 0x4000000 | 0;
- }
- }
- return ws;
- };
- FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
- var carry = 0;
- for (var i = 0; i < len; i++) {
- carry = carry + (ws[i] | 0);
- rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
- rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
- }
- // Pad with zeroes
- for (i = 2 * len; i < N; ++i) {
- rws[i] = 0;
- }
- assert(carry === 0);
- assert((carry & ~0x1fff) === 0);
- };
- FFTM.prototype.stub = function stub (N) {
- var ph = new Array(N);
- for (var i = 0; i < N; i++) {
- ph[i] = 0;
- }
- return ph;
- };
- FFTM.prototype.mulp = function mulp (x, y, out) {
- var N = 2 * this.guessLen13b(x.length, y.length);
- var rbt = this.makeRBT(N);
- var _ = this.stub(N);
- var rws = new Array(N);
- var rwst = new Array(N);
- var iwst = new Array(N);
- var nrws = new Array(N);
- var nrwst = new Array(N);
- var niwst = new Array(N);
- var rmws = out.words;
- rmws.length = N;
- this.convert13b(x.words, x.length, rws, N);
- this.convert13b(y.words, y.length, nrws, N);
- this.transform(rws, _, rwst, iwst, N, rbt);
- this.transform(nrws, _, nrwst, niwst, N, rbt);
- for (var i = 0; i < N; i++) {
- var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
- iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
- rwst[i] = rx;
- }
- this.conjugate(rwst, iwst, N);
- this.transform(rwst, iwst, rmws, _, N, rbt);
- this.conjugate(rmws, _, N);
- this.normalize13b(rmws, N);
- out.negative = x.negative ^ y.negative;
- out.length = x.length + y.length;
- return out.strip();
- };
- // Multiply `this` by `num`
- BN.prototype.mul = function mul (num) {
- var out = new BN(null);
- out.words = new Array(this.length + num.length);
- return this.mulTo(num, out);
- };
- // Multiply employing FFT
- BN.prototype.mulf = function mulf (num) {
- var out = new BN(null);
- out.words = new Array(this.length + num.length);
- return jumboMulTo(this, num, out);
- };
- // In-place Multiplication
- BN.prototype.imul = function imul (num) {
- return this.clone().mulTo(num, this);
- };
- BN.prototype.imuln = function imuln (num) {
- assert(typeof num === 'number');
- assert(num < 0x4000000);
- // Carry
- var carry = 0;
- for (var i = 0; i < this.length; i++) {
- var w = (this.words[i] | 0) * num;
- var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
- carry >>= 26;
- carry += (w / 0x4000000) | 0;
- // NOTE: lo is 27bit maximum
- carry += lo >>> 26;
- this.words[i] = lo & 0x3ffffff;
- }
- if (carry !== 0) {
- this.words[i] = carry;
- this.length++;
- }
- return this;
- };
- BN.prototype.muln = function muln (num) {
- return this.clone().imuln(num);
- };
- // `this` * `this`
- BN.prototype.sqr = function sqr () {
- return this.mul(this);
- };
- // `this` * `this` in-place
- BN.prototype.isqr = function isqr () {
- return this.imul(this.clone());
- };
- // Math.pow(`this`, `num`)
- BN.prototype.pow = function pow (num) {
- var w = toBitArray(num);
- if (w.length === 0) return new BN(1);
- // Skip leading zeroes
- var res = this;
- for (var i = 0; i < w.length; i++, res = res.sqr()) {
- if (w[i] !== 0) break;
- }
- if (++i < w.length) {
- for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
- if (w[i] === 0) continue;
- res = res.mul(q);
- }
- }
- return res;
- };
- // Shift-left in-place
- BN.prototype.iushln = function iushln (bits) {
- assert(typeof bits === 'number' && bits >= 0);
- var r = bits % 26;
- var s = (bits - r) / 26;
- var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
- var i;
- if (r !== 0) {
- var carry = 0;
- for (i = 0; i < this.length; i++) {
- var newCarry = this.words[i] & carryMask;
- var c = ((this.words[i] | 0) - newCarry) << r;
- this.words[i] = c | carry;
- carry = newCarry >>> (26 - r);
- }
- if (carry) {
- this.words[i] = carry;
- this.length++;
- }
- }
- if (s !== 0) {
- for (i = this.length - 1; i >= 0; i--) {
- this.words[i + s] = this.words[i];
- }
- for (i = 0; i < s; i++) {
- this.words[i] = 0;
- }
- this.length += s;
- }
- return this.strip();
- };
- BN.prototype.ishln = function ishln (bits) {
- // TODO(indutny): implement me
- assert(this.negative === 0);
- return this.iushln(bits);
- };
- // Shift-right in-place
- // NOTE: `hint` is a lowest bit before trailing zeroes
- // NOTE: if `extended` is present - it will be filled with destroyed bits
- BN.prototype.iushrn = function iushrn (bits, hint, extended) {
- assert(typeof bits === 'number' && bits >= 0);
- var h;
- if (hint) {
- h = (hint - (hint % 26)) / 26;
- } else {
- h = 0;
- }
- var r = bits % 26;
- var s = Math.min((bits - r) / 26, this.length);
- var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
- var maskedWords = extended;
- h -= s;
- h = Math.max(0, h);
- // Extended mode, copy masked part
- if (maskedWords) {
- for (var i = 0; i < s; i++) {
- maskedWords.words[i] = this.words[i];
- }
- maskedWords.length = s;
- }
- if (s === 0) {
- // No-op, we should not move anything at all
- } else if (this.length > s) {
- this.length -= s;
- for (i = 0; i < this.length; i++) {
- this.words[i] = this.words[i + s];
- }
- } else {
- this.words[0] = 0;
- this.length = 1;
- }
- var carry = 0;
- for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
- var word = this.words[i] | 0;
- this.words[i] = (carry << (26 - r)) | (word >>> r);
- carry = word & mask;
- }
- // Push carried bits as a mask
- if (maskedWords && carry !== 0) {
- maskedWords.words[maskedWords.length++] = carry;
- }
- if (this.length === 0) {
- this.words[0] = 0;
- this.length = 1;
- }
- return this.strip();
- };
- BN.prototype.ishrn = function ishrn (bits, hint, extended) {
- // TODO(indutny): implement me
- assert(this.negative === 0);
- return this.iushrn(bits, hint, extended);
- };
- // Shift-left
- BN.prototype.shln = function shln (bits) {
- return this.clone().ishln(bits);
- };
- BN.prototype.ushln = function ushln (bits) {
- return this.clone().iushln(bits);
- };
- // Shift-right
- BN.prototype.shrn = function shrn (bits) {
- return this.clone().ishrn(bits);
- };
- BN.prototype.ushrn = function ushrn (bits) {
- return this.clone().iushrn(bits);
- };
- // Test if n bit is set
- BN.prototype.testn = function testn (bit) {
- assert(typeof bit === 'number' && bit >= 0);
- var r = bit % 26;
- var s = (bit - r) / 26;
- var q = 1 << r;
- // Fast case: bit is much higher than all existing words
- if (this.length <= s) return false;
- // Check bit and return
- var w = this.words[s];
- return !!(w & q);
- };
- // Return only lowers bits of number (in-place)
- BN.prototype.imaskn = function imaskn (bits) {
- assert(typeof bits === 'number' && bits >= 0);
- var r = bits % 26;
- var s = (bits - r) / 26;
- assert(this.negative === 0, 'imaskn works only with positive numbers');
- if (this.length <= s) {
- return this;
- }
- if (r !== 0) {
- s++;
- }
- this.length = Math.min(s, this.length);
- if (r !== 0) {
- var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
- this.words[this.length - 1] &= mask;
- }
- return this.strip();
- };
- // Return only lowers bits of number
- BN.prototype.maskn = function maskn (bits) {
- return this.clone().imaskn(bits);
- };
- // Add plain number `num` to `this`
- BN.prototype.iaddn = function iaddn (num) {
- assert(typeof num === 'number');
- assert(num < 0x4000000);
- if (num < 0) return this.isubn(-num);
- // Possible sign change
- if (this.negative !== 0) {
- if (this.length === 1 && (this.words[0] | 0) < num) {
- this.words[0] = num - (this.words[0] | 0);
- this.negative = 0;
- return this;
- }
- this.negative = 0;
- this.isubn(num);
- this.negative = 1;
- return this;
- }
- // Add without checks
- return this._iaddn(num);
- };
- BN.prototype._iaddn = function _iaddn (num) {
- this.words[0] += num;
- // Carry
- for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
- this.words[i] -= 0x4000000;
- if (i === this.length - 1) {
- this.words[i + 1] = 1;
- } else {
- this.words[i + 1]++;
- }
- }
- this.length = Math.max(this.length, i + 1);
- return this;
- };
- // Subtract plain number `num` from `this`
- BN.prototype.isubn = function isubn (num) {
- assert(typeof num === 'number');
- assert(num < 0x4000000);
- if (num < 0) return this.iaddn(-num);
- if (this.negative !== 0) {
- this.negative = 0;
- this.iaddn(num);
- this.negative = 1;
- return this;
- }
- this.words[0] -= num;
- if (this.length === 1 && this.words[0] < 0) {
- this.words[0] = -this.words[0];
- this.negative = 1;
- } else {
- // Carry
- for (var i = 0; i < this.length && this.words[i] < 0; i++) {
- this.words[i] += 0x4000000;
- this.words[i + 1] -= 1;
- }
- }
- return this.strip();
- };
- BN.prototype.addn = function addn (num) {
- return this.clone().iaddn(num);
- };
- BN.prototype.subn = function subn (num) {
- return this.clone().isubn(num);
- };
- BN.prototype.iabs = function iabs () {
- this.negative = 0;
- return this;
- };
- BN.prototype.abs = function abs () {
- return this.clone().iabs();
- };
- BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
- var len = num.length + shift;
- var i;
- this._expand(len);
- var w;
- var carry = 0;
- for (i = 0; i < num.length; i++) {
- w = (this.words[i + shift] | 0) + carry;
- var right = (num.words[i] | 0) * mul;
- w -= right & 0x3ffffff;
- carry = (w >> 26) - ((right / 0x4000000) | 0);
- this.words[i + shift] = w & 0x3ffffff;
- }
- for (; i < this.length - shift; i++) {
- w = (this.words[i + shift] | 0) + carry;
- carry = w >> 26;
- this.words[i + shift] = w & 0x3ffffff;
- }
- if (carry === 0) return this.strip();
- // Subtraction overflow
- assert(carry === -1);
- carry = 0;
- for (i = 0; i < this.length; i++) {
- w = -(this.words[i] | 0) + carry;
- carry = w >> 26;
- this.words[i] = w & 0x3ffffff;
- }
- this.negative = 1;
- return this.strip();
- };
- BN.prototype._wordDiv = function _wordDiv (num, mode) {
- var shift = this.length - num.length;
- var a = this.clone();
- var b = num;
- // Normalize
- var bhi = b.words[b.length - 1] | 0;
- var bhiBits = this._countBits(bhi);
- shift = 26 - bhiBits;
- if (shift !== 0) {
- b = b.ushln(shift);
- a.iushln(shift);
- bhi = b.words[b.length - 1] | 0;
- }
- // Initialize quotient
- var m = a.length - b.length;
- var q;
- if (mode !== 'mod') {
- q = new BN(null);
- q.length = m + 1;
- q.words = new Array(q.length);
- for (var i = 0; i < q.length; i++) {
- q.words[i] = 0;
- }
- }
- var diff = a.clone()._ishlnsubmul(b, 1, m);
- if (diff.negative === 0) {
- a = diff;
- if (q) {
- q.words[m] = 1;
- }
- }
- for (var j = m - 1; j >= 0; j--) {
- var qj = (a.words[b.length + j] | 0) * 0x4000000 +
- (a.words[b.length + j - 1] | 0);
- // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
- // (0x7ffffff)
- qj = Math.min((qj / bhi) | 0, 0x3ffffff);
- a._ishlnsubmul(b, qj, j);
- while (a.negative !== 0) {
- qj--;
- a.negative = 0;
- a._ishlnsubmul(b, 1, j);
- if (!a.isZero()) {
- a.negative ^= 1;
- }
- }
- if (q) {
- q.words[j] = qj;
- }
- }
- if (q) {
- q.strip();
- }
- a.strip();
- // Denormalize
- if (mode !== 'div' && shift !== 0) {
- a.iushrn(shift);
- }
- return {
- div: q || null,
- mod: a
- };
- };
- // NOTE: 1) `mode` can be set to `mod` to request mod only,
- // to `div` to request div only, or be absent to
- // request both div & mod
- // 2) `positive` is true if unsigned mod is requested
- BN.prototype.divmod = function divmod (num, mode, positive) {
- assert(!num.isZero());
- if (this.isZero()) {
- return {
- div: new BN(0),
- mod: new BN(0)
- };
- }
- var div, mod, res;
- if (this.negative !== 0 && num.negative === 0) {
- res = this.neg().divmod(num, mode);
- if (mode !== 'mod') {
- div = res.div.neg();
- }
- if (mode !== 'div') {
- mod = res.mod.neg();
- if (positive && mod.negative !== 0) {
- mod.iadd(num);
- }
- }
- return {
- div: div,
- mod: mod
- };
- }
- if (this.negative === 0 && num.negative !== 0) {
- res = this.divmod(num.neg(), mode);
- if (mode !== 'mod') {
- div = res.div.neg();
- }
- return {
- div: div,
- mod: res.mod
- };
- }
- if ((this.negative & num.negative) !== 0) {
- res = this.neg().divmod(num.neg(), mode);
- if (mode !== 'div') {
- mod = res.mod.neg();
- if (positive && mod.negative !== 0) {
- mod.isub(num);
- }
- }
- return {
- div: res.div,
- mod: mod
- };
- }
- // Both numbers are positive at this point
- // Strip both numbers to approximate shift value
- if (num.length > this.length || this.cmp(num) < 0) {
- return {
- div: new BN(0),
- mod: this
- };
- }
- // Very short reduction
- if (num.length === 1) {
- if (mode === 'div') {
- return {
- div: this.divn(num.words[0]),
- mod: null
- };
- }
- if (mode === 'mod') {
- return {
- div: null,
- mod: new BN(this.modn(num.words[0]))
- };
- }
- return {
- div: this.divn(num.words[0]),
- mod: new BN(this.modn(num.words[0]))
- };
- }
- return this._wordDiv(num, mode);
- };
- // Find `this` / `num`
- BN.prototype.div = function div (num) {
- return this.divmod(num, 'div', false).div;
- };
- // Find `this` % `num`
- BN.prototype.mod = function mod (num) {
- return this.divmod(num, 'mod', false).mod;
- };
- BN.prototype.umod = function umod (num) {
- return this.divmod(num, 'mod', true).mod;
- };
- // Find Round(`this` / `num`)
- BN.prototype.divRound = function divRound (num) {
- var dm = this.divmod(num);
- // Fast case - exact division
- if (dm.mod.isZero()) return dm.div;
- var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
- var half = num.ushrn(1);
- var r2 = num.andln(1);
- var cmp = mod.cmp(half);
- // Round down
- if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
- // Round up
- return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
- };
- BN.prototype.modn = function modn (num) {
- assert(num <= 0x3ffffff);
- var p = (1 << 26) % num;
- var acc = 0;
- for (var i = this.length - 1; i >= 0; i--) {
- acc = (p * acc + (this.words[i] | 0)) % num;
- }
- return acc;
- };
- // In-place division by number
- BN.prototype.idivn = function idivn (num) {
- assert(num <= 0x3ffffff);
- var carry = 0;
- for (var i = this.length - 1; i >= 0; i--) {
- var w = (this.words[i] | 0) + carry * 0x4000000;
- this.words[i] = (w / num) | 0;
- carry = w % num;
- }
- return this.strip();
- };
- BN.prototype.divn = function divn (num) {
- return this.clone().idivn(num);
- };
- BN.prototype.egcd = function egcd (p) {
- assert(p.negative === 0);
- assert(!p.isZero());
- var x = this;
- var y = p.clone();
- if (x.negative !== 0) {
- x = x.umod(p);
- } else {
- x = x.clone();
- }
- // A * x + B * y = x
- var A = new BN(1);
- var B = new BN(0);
- // C * x + D * y = y
- var C = new BN(0);
- var D = new BN(1);
- var g = 0;
- while (x.isEven() && y.isEven()) {
- x.iushrn(1);
- y.iushrn(1);
- ++g;
- }
- var yp = y.clone();
- var xp = x.clone();
- while (!x.isZero()) {
- for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
- if (i > 0) {
- x.iushrn(i);
- while (i-- > 0) {
- if (A.isOdd() || B.isOdd()) {
- A.iadd(yp);
- B.isub(xp);
- }
- A.iushrn(1);
- B.iushrn(1);
- }
- }
- for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
- if (j > 0) {
- y.iushrn(j);
- while (j-- > 0) {
- if (C.isOdd() || D.isOdd()) {
- C.iadd(yp);
- D.isub(xp);
- }
- C.iushrn(1);
- D.iushrn(1);
- }
- }
- if (x.cmp(y) >= 0) {
- x.isub(y);
- A.isub(C);
- B.isub(D);
- } else {
- y.isub(x);
- C.isub(A);
- D.isub(B);
- }
- }
- return {
- a: C,
- b: D,
- gcd: y.iushln(g)
- };
- };
- // This is reduced incarnation of the binary EEA
- // above, designated to invert members of the
- // _prime_ fields F(p) at a maximal speed
- BN.prototype._invmp = function _invmp (p) {
- assert(p.negative === 0);
- assert(!p.isZero());
- var a = this;
- var b = p.clone();
- if (a.negative !== 0) {
- a = a.umod(p);
- } else {
- a = a.clone();
- }
- var x1 = new BN(1);
- var x2 = new BN(0);
- var delta = b.clone();
- while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
- for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
- if (i > 0) {
- a.iushrn(i);
- while (i-- > 0) {
- if (x1.isOdd()) {
- x1.iadd(delta);
- }
- x1.iushrn(1);
- }
- }
- for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
- if (j > 0) {
- b.iushrn(j);
- while (j-- > 0) {
- if (x2.isOdd()) {
- x2.iadd(delta);
- }
- x2.iushrn(1);
- }
- }
- if (a.cmp(b) >= 0) {
- a.isub(b);
- x1.isub(x2);
- } else {
- b.isub(a);
- x2.isub(x1);
- }
- }
- var res;
- if (a.cmpn(1) === 0) {
- res = x1;
- } else {
- res = x2;
- }
- if (res.cmpn(0) < 0) {
- res.iadd(p);
- }
- return res;
- };
- BN.prototype.gcd = function gcd (num) {
- if (this.isZero()) return num.abs();
- if (num.isZero()) return this.abs();
- var a = this.clone();
- var b = num.clone();
- a.negative = 0;
- b.negative = 0;
- // Remove common factor of two
- for (var shift = 0; a.isEven() && b.isEven(); shift++) {
- a.iushrn(1);
- b.iushrn(1);
- }
- do {
- while (a.isEven()) {
- a.iushrn(1);
- }
- while (b.isEven()) {
- b.iushrn(1);
- }
- var r = a.cmp(b);
- if (r < 0) {
- // Swap `a` and `b` to make `a` always bigger than `b`
- var t = a;
- a = b;
- b = t;
- } else if (r === 0 || b.cmpn(1) === 0) {
- break;
- }
- a.isub(b);
- } while (true);
- return b.iushln(shift);
- };
- // Invert number in the field F(num)
- BN.prototype.invm = function invm (num) {
- return this.egcd(num).a.umod(num);
- };
- BN.prototype.isEven = function isEven () {
- return (this.words[0] & 1) === 0;
- };
- BN.prototype.isOdd = function isOdd () {
- return (this.words[0] & 1) === 1;
- };
- // And first word and num
- BN.prototype.andln = function andln (num) {
- return this.words[0] & num;
- };
- // Increment at the bit position in-line
- BN.prototype.bincn = function bincn (bit) {
- assert(typeof bit === 'number');
- var r = bit % 26;
- var s = (bit - r) / 26;
- var q = 1 << r;
- // Fast case: bit is much higher than all existing words
- if (this.length <= s) {
- this._expand(s + 1);
- this.words[s] |= q;
- return this;
- }
- // Add bit and propagate, if needed
- var carry = q;
- for (var i = s; carry !== 0 && i < this.length; i++) {
- var w = this.words[i] | 0;
- w += carry;
- carry = w >>> 26;
- w &= 0x3ffffff;
- this.words[i] = w;
- }
- if (carry !== 0) {
- this.words[i] = carry;
- this.length++;
- }
- return this;
- };
- BN.prototype.isZero = function isZero () {
- return this.length === 1 && this.words[0] === 0;
- };
- BN.prototype.cmpn = function cmpn (num) {
- var negative = num < 0;
- if (this.negative !== 0 && !negative) return -1;
- if (this.negative === 0 && negative) return 1;
- this.strip();
- var res;
- if (this.length > 1) {
- res = 1;
- } else {
- if (negative) {
- num = -num;
- }
- assert(num <= 0x3ffffff, 'Number is too big');
- var w = this.words[0] | 0;
- res = w === num ? 0 : w < num ? -1 : 1;
- }
- if (this.negative !== 0) return -res | 0;
- return res;
- };
- // Compare two numbers and return:
- // 1 - if `this` > `num`
- // 0 - if `this` == `num`
- // -1 - if `this` < `num`
- BN.prototype.cmp = function cmp (num) {
- if (this.negative !== 0 && num.negative === 0) return -1;
- if (this.negative === 0 && num.negative !== 0) return 1;
- var res = this.ucmp(num);
- if (this.negative !== 0) return -res | 0;
- return res;
- };
- // Unsigned comparison
- BN.prototype.ucmp = function ucmp (num) {
- // At this point both numbers have the same sign
- if (this.length > num.length) return 1;
- if (this.length < num.length) return -1;
- var res = 0;
- for (var i = this.length - 1; i >= 0; i--) {
- var a = this.words[i] | 0;
- var b = num.words[i] | 0;
- if (a === b) continue;
- if (a < b) {
- res = -1;
- } else if (a > b) {
- res = 1;
- }
- break;
- }
- return res;
- };
- BN.prototype.gtn = function gtn (num) {
- return this.cmpn(num) === 1;
- };
- BN.prototype.gt = function gt (num) {
- return this.cmp(num) === 1;
- };
- BN.prototype.gten = function gten (num) {
- return this.cmpn(num) >= 0;
- };
- BN.prototype.gte = function gte (num) {
- return this.cmp(num) >= 0;
- };
- BN.prototype.ltn = function ltn (num) {
- return this.cmpn(num) === -1;
- };
- BN.prototype.lt = function lt (num) {
- return this.cmp(num) === -1;
- };
- BN.prototype.lten = function lten (num) {
- return this.cmpn(num) <= 0;
- };
- BN.prototype.lte = function lte (num) {
- return this.cmp(num) <= 0;
- };
- BN.prototype.eqn = function eqn (num) {
- return this.cmpn(num) === 0;
- };
- BN.prototype.eq = function eq (num) {
- return this.cmp(num) === 0;
- };
- //
- // A reduce context, could be using montgomery or something better, depending
- // on the `m` itself.
- //
- BN.red = function red (num) {
- return new Red(num);
- };
- BN.prototype.toRed = function toRed (ctx) {
- assert(!this.red, 'Already a number in reduction context');
- assert(this.negative === 0, 'red works only with positives');
- return ctx.convertTo(this)._forceRed(ctx);
- };
- BN.prototype.fromRed = function fromRed () {
- assert(this.red, 'fromRed works only with numbers in reduction context');
- return this.red.convertFrom(this);
- };
- BN.prototype._forceRed = function _forceRed (ctx) {
- this.red = ctx;
- return this;
- };
- BN.prototype.forceRed = function forceRed (ctx) {
- assert(!this.red, 'Already a number in reduction context');
- return this._forceRed(ctx);
- };
- BN.prototype.redAdd = function redAdd (num) {
- assert(this.red, 'redAdd works only with red numbers');
- return this.red.add(this, num);
- };
- BN.prototype.redIAdd = function redIAdd (num) {
- assert(this.red, 'redIAdd works only with red numbers');
- return this.red.iadd(this, num);
- };
- BN.prototype.redSub = function redSub (num) {
- assert(this.red, 'redSub works only with red numbers');
- return this.red.sub(this, num);
- };
- BN.prototype.redISub = function redISub (num) {
- assert(this.red, 'redISub works only with red numbers');
- return this.red.isub(this, num);
- };
- BN.prototype.redShl = function redShl (num) {
- assert(this.red, 'redShl works only with red numbers');
- return this.red.shl(this, num);
- };
- BN.prototype.redMul = function redMul (num) {
- assert(this.red, 'redMul works only with red numbers');
- this.red._verify2(this, num);
- return this.red.mul(this, num);
- };
- BN.prototype.redIMul = function redIMul (num) {
- assert(this.red, 'redMul works only with red numbers');
- this.red._verify2(this, num);
- return this.red.imul(this, num);
- };
- BN.prototype.redSqr = function redSqr () {
- assert(this.red, 'redSqr works only with red numbers');
- this.red._verify1(this);
- return this.red.sqr(this);
- };
- BN.prototype.redISqr = function redISqr () {
- assert(this.red, 'redISqr works only with red numbers');
- this.red._verify1(this);
- return this.red.isqr(this);
- };
- // Square root over p
- BN.prototype.redSqrt = function redSqrt () {
- assert(this.red, 'redSqrt works only with red numbers');
- this.red._verify1(this);
- return this.red.sqrt(this);
- };
- BN.prototype.redInvm = function redInvm () {
- assert(this.red, 'redInvm works only with red numbers');
- this.red._verify1(this);
- return this.red.invm(this);
- };
- // Return negative clone of `this` % `red modulo`
- BN.prototype.redNeg = function redNeg () {
- assert(this.red, 'redNeg works only with red numbers');
- this.red._verify1(this);
- return this.red.neg(this);
- };
- BN.prototype.redPow = function redPow (num) {
- assert(this.red && !num.red, 'redPow(normalNum)');
- this.red._verify1(this);
- return this.red.pow(this, num);
- };
- // Prime numbers with efficient reduction
- var primes = {
- k256: null,
- p224: null,
- p192: null,
- p25519: null
- };
- // Pseudo-Mersenne prime
- function MPrime (name, p) {
- // P = 2 ^ N - K
- this.name = name;
- this.p = new BN(p, 16);
- this.n = this.p.bitLength();
- this.k = new BN(1).iushln(this.n).isub(this.p);
- this.tmp = this._tmp();
- }
- MPrime.prototype._tmp = function _tmp () {
- var tmp = new BN(null);
- tmp.words = new Array(Math.ceil(this.n / 13));
- return tmp;
- };
- MPrime.prototype.ireduce = function ireduce (num) {
- // Assumes that `num` is less than `P^2`
- // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
- var r = num;
- var rlen;
- do {
- this.split(r, this.tmp);
- r = this.imulK(r);
- r = r.iadd(this.tmp);
- rlen = r.bitLength();
- } while (rlen > this.n);
- var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
- if (cmp === 0) {
- r.words[0] = 0;
- r.length = 1;
- } else if (cmp > 0) {
- r.isub(this.p);
- } else {
- r.strip();
- }
- return r;
- };
- MPrime.prototype.split = function split (input, out) {
- input.iushrn(this.n, 0, out);
- };
- MPrime.prototype.imulK = function imulK (num) {
- return num.imul(this.k);
- };
- function K256 () {
- MPrime.call(
- this,
- 'k256',
- 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
- }
- inherits(K256, MPrime);
- K256.prototype.split = function split (input, output) {
- // 256 = 9 * 26 + 22
- var mask = 0x3fffff;
- var outLen = Math.min(input.length, 9);
- for (var i = 0; i < outLen; i++) {
- output.words[i] = input.words[i];
- }
- output.length = outLen;
- if (input.length <= 9) {
- input.words[0] = 0;
- input.length = 1;
- return;
- }
- // Shift by 9 limbs
- var prev = input.words[9];
- output.words[output.length++] = prev & mask;
- for (i = 10; i < input.length; i++) {
- var next = input.words[i] | 0;
- input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
- prev = next;
- }
- prev >>>= 22;
- input.words[i - 10] = prev;
- if (prev === 0 && input.length > 10) {
- input.length -= 10;
- } else {
- input.length -= 9;
- }
- };
- K256.prototype.imulK = function imulK (num) {
- // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
- num.words[num.length] = 0;
- num.words[num.length + 1] = 0;
- num.length += 2;
- // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
- var lo = 0;
- for (var i = 0; i < num.length; i++) {
- var w = num.words[i] | 0;
- lo += w * 0x3d1;
- num.words[i] = lo & 0x3ffffff;
- lo = w * 0x40 + ((lo / 0x4000000) | 0);
- }
- // Fast length reduction
- if (num.words[num.length - 1] === 0) {
- num.length--;
- if (num.words[num.length - 1] === 0) {
- num.length--;
- }
- }
- return num;
- };
- function P224 () {
- MPrime.call(
- this,
- 'p224',
- 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
- }
- inherits(P224, MPrime);
- function P192 () {
- MPrime.call(
- this,
- 'p192',
- 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
- }
- inherits(P192, MPrime);
- function P25519 () {
- // 2 ^ 255 - 19
- MPrime.call(
- this,
- '25519',
- '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
- }
- inherits(P25519, MPrime);
- P25519.prototype.imulK = function imulK (num) {
- // K = 0x13
- var carry = 0;
- for (var i = 0; i < num.length; i++) {
- var hi = (num.words[i] | 0) * 0x13 + carry;
- var lo = hi & 0x3ffffff;
- hi >>>= 26;
- num.words[i] = lo;
- carry = hi;
- }
- if (carry !== 0) {
- num.words[num.length++] = carry;
- }
- return num;
- };
- // Exported mostly for testing purposes, use plain name instead
- BN._prime = function prime (name) {
- // Cached version of prime
- if (primes[name]) return primes[name];
- var prime;
- if (name === 'k256') {
- prime = new K256();
- } else if (name === 'p224') {
- prime = new P224();
- } else if (name === 'p192') {
- prime = new P192();
- } else if (name === 'p25519') {
- prime = new P25519();
- } else {
- throw new Error('Unknown prime ' + name);
- }
- primes[name] = prime;
- return prime;
- };
- //
- // Base reduction engine
- //
- function Red (m) {
- if (typeof m === 'string') {
- var prime = BN._prime(m);
- this.m = prime.p;
- this.prime = prime;
- } else {
- assert(m.gtn(1), 'modulus must be greater than 1');
- this.m = m;
- this.prime = null;
- }
- }
- Red.prototype._verify1 = function _verify1 (a) {
- assert(a.negative === 0, 'red works only with positives');
- assert(a.red, 'red works only with red numbers');
- };
- Red.prototype._verify2 = function _verify2 (a, b) {
- assert((a.negative | b.negative) === 0, 'red works only with positives');
- assert(a.red && a.red === b.red,
- 'red works only with red numbers');
- };
- Red.prototype.imod = function imod (a) {
- if (this.prime) return this.prime.ireduce(a)._forceRed(this);
- return a.umod(this.m)._forceRed(this);
- };
- Red.prototype.neg = function neg (a) {
- if (a.isZero()) {
- return a.clone();
- }
- return this.m.sub(a)._forceRed(this);
- };
- Red.prototype.add = function add (a, b) {
- this._verify2(a, b);
- var res = a.add(b);
- if (res.cmp(this.m) >= 0) {
- res.isub(this.m);
- }
- return res._forceRed(this);
- };
- Red.prototype.iadd = function iadd (a, b) {
- this._verify2(a, b);
- var res = a.iadd(b);
- if (res.cmp(this.m) >= 0) {
- res.isub(this.m);
- }
- return res;
- };
- Red.prototype.sub = function sub (a, b) {
- this._verify2(a, b);
- var res = a.sub(b);
- if (res.cmpn(0) < 0) {
- res.iadd(this.m);
- }
- return res._forceRed(this);
- };
- Red.prototype.isub = function isub (a, b) {
- this._verify2(a, b);
- var res = a.isub(b);
- if (res.cmpn(0) < 0) {
- res.iadd(this.m);
- }
- return res;
- };
- Red.prototype.shl = function shl (a, num) {
- this._verify1(a);
- return this.imod(a.ushln(num));
- };
- Red.prototype.imul = function imul (a, b) {
- this._verify2(a, b);
- return this.imod(a.imul(b));
- };
- Red.prototype.mul = function mul (a, b) {
- this._verify2(a, b);
- return this.imod(a.mul(b));
- };
- Red.prototype.isqr = function isqr (a) {
- return this.imul(a, a.clone());
- };
- Red.prototype.sqr = function sqr (a) {
- return this.mul(a, a);
- };
- Red.prototype.sqrt = function sqrt (a) {
- if (a.isZero()) return a.clone();
- var mod3 = this.m.andln(3);
- assert(mod3 % 2 === 1);
- // Fast case
- if (mod3 === 3) {
- var pow = this.m.add(new BN(1)).iushrn(2);
- return this.pow(a, pow);
- }
- // Tonelli-Shanks algorithm (Totally unoptimized and slow)
- //
- // Find Q and S, that Q * 2 ^ S = (P - 1)
- var q = this.m.subn(1);
- var s = 0;
- while (!q.isZero() && q.andln(1) === 0) {
- s++;
- q.iushrn(1);
- }
- assert(!q.isZero());
- var one = new BN(1).toRed(this);
- var nOne = one.redNeg();
- // Find quadratic non-residue
- // NOTE: Max is such because of generalized Riemann hypothesis.
- var lpow = this.m.subn(1).iushrn(1);
- var z = this.m.bitLength();
- z = new BN(2 * z * z).toRed(this);
- while (this.pow(z, lpow).cmp(nOne) !== 0) {
- z.redIAdd(nOne);
- }
- var c = this.pow(z, q);
- var r = this.pow(a, q.addn(1).iushrn(1));
- var t = this.pow(a, q);
- var m = s;
- while (t.cmp(one) !== 0) {
- var tmp = t;
- for (var i = 0; tmp.cmp(one) !== 0; i++) {
- tmp = tmp.redSqr();
- }
- assert(i < m);
- var b = this.pow(c, new BN(1).iushln(m - i - 1));
- r = r.redMul(b);
- c = b.redSqr();
- t = t.redMul(c);
- m = i;
- }
- return r;
- };
- Red.prototype.invm = function invm (a) {
- var inv = a._invmp(this.m);
- if (inv.negative !== 0) {
- inv.negative = 0;
- return this.imod(inv).redNeg();
- } else {
- return this.imod(inv);
- }
- };
- Red.prototype.pow = function pow (a, num) {
- if (num.isZero()) return new BN(1).toRed(this);
- if (num.cmpn(1) === 0) return a.clone();
- var windowSize = 4;
- var wnd = new Array(1 << windowSize);
- wnd[0] = new BN(1).toRed(this);
- wnd[1] = a;
- for (var i = 2; i < wnd.length; i++) {
- wnd[i] = this.mul(wnd[i - 1], a);
- }
- var res = wnd[0];
- var current = 0;
- var currentLen = 0;
- var start = num.bitLength() % 26;
- if (start === 0) {
- start = 26;
- }
- for (i = num.length - 1; i >= 0; i--) {
- var word = num.words[i];
- for (var j = start - 1; j >= 0; j--) {
- var bit = (word >> j) & 1;
- if (res !== wnd[0]) {
- res = this.sqr(res);
- }
- if (bit === 0 && current === 0) {
- currentLen = 0;
- continue;
- }
- current <<= 1;
- current |= bit;
- currentLen++;
- if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
- res = this.mul(res, wnd[current]);
- currentLen = 0;
- current = 0;
- }
- start = 26;
- }
- return res;
- };
- Red.prototype.convertTo = function convertTo (num) {
- var r = num.umod(this.m);
- return r === num ? r.clone() : r;
- };
- Red.prototype.convertFrom = function convertFrom (num) {
- var res = num.clone();
- res.red = null;
- return res;
- };
- //
- // Montgomery method engine
- //
- BN.mont = function mont (num) {
- return new Mont(num);
- };
- function Mont (m) {
- Red.call(this, m);
- this.shift = this.m.bitLength();
- if (this.shift % 26 !== 0) {
- this.shift += 26 - (this.shift % 26);
- }
- this.r = new BN(1).iushln(this.shift);
- this.r2 = this.imod(this.r.sqr());
- this.rinv = this.r._invmp(this.m);
- this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
- this.minv = this.minv.umod(this.r);
- this.minv = this.r.sub(this.minv);
- }
- inherits(Mont, Red);
- Mont.prototype.convertTo = function convertTo (num) {
- return this.imod(num.ushln(this.shift));
- };
- Mont.prototype.convertFrom = function convertFrom (num) {
- var r = this.imod(num.mul(this.rinv));
- r.red = null;
- return r;
- };
- Mont.prototype.imul = function imul (a, b) {
- if (a.isZero() || b.isZero()) {
- a.words[0] = 0;
- a.length = 1;
- return a;
- }
- var t = a.imul(b);
- var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
- var u = t.isub(c).iushrn(this.shift);
- var res = u;
- if (u.cmp(this.m) >= 0) {
- res = u.isub(this.m);
- } else if (u.cmpn(0) < 0) {
- res = u.iadd(this.m);
- }
- return res._forceRed(this);
- };
- Mont.prototype.mul = function mul (a, b) {
- if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
- var t = a.mul(b);
- var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
- var u = t.isub(c).iushrn(this.shift);
- var res = u;
- if (u.cmp(this.m) >= 0) {
- res = u.isub(this.m);
- } else if (u.cmpn(0) < 0) {
- res = u.iadd(this.m);
- }
- return res._forceRed(this);
- };
- Mont.prototype.invm = function invm (a) {
- // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
- var res = this.imod(a._invmp(this.m).mul(this.r2));
- return res._forceRed(this);
- };
- })(typeof module === 'undefined' || module, this);
- },{"buffer":149}],148:[function(require,module,exports){
- var r;
- module.exports = function rand(len) {
- if (!r)
- r = new Rand(null);
- return r.generate(len);
- };
- function Rand(rand) {
- this.rand = rand;
- }
- module.exports.Rand = Rand;
- Rand.prototype.generate = function generate(len) {
- return this._rand(len);
- };
- // Emulate crypto API using randy
- Rand.prototype._rand = function _rand(n) {
- if (this.rand.getBytes)
- return this.rand.getBytes(n);
- var res = new Uint8Array(n);
- for (var i = 0; i < res.length; i++)
- res[i] = this.rand.getByte();
- return res;
- };
- if (typeof self === 'object') {
- if (self.crypto && self.crypto.getRandomValues) {
- // Modern browsers
- Rand.prototype._rand = function _rand(n) {
- var arr = new Uint8Array(n);
- self.crypto.getRandomValues(arr);
- return arr;
- };
- } else if (self.msCrypto && self.msCrypto.getRandomValues) {
- // IE
- Rand.prototype._rand = function _rand(n) {
- var arr = new Uint8Array(n);
- self.msCrypto.getRandomValues(arr);
- return arr;
- };
- // Safari's WebWorkers do not have `crypto`
- } else if (typeof window === 'object') {
- // Old junk
- Rand.prototype._rand = function() {
- throw new Error('Not implemented yet');
- };
- }
- } else {
- // Node.js or Web worker with no crypto support
- try {
- var crypto = require('crypto');
- if (typeof crypto.randomBytes !== 'function')
- throw new Error('Not supported');
- Rand.prototype._rand = function _rand(n) {
- return crypto.randomBytes(n);
- };
- } catch (e) {
- }
- }
- },{"crypto":149}],149:[function(require,module,exports){
- },{}],150:[function(require,module,exports){
- // based on the aes implimentation in triple sec
- // https://github.com/keybase/triplesec
- // which is in turn based on the one from crypto-js
- // https://code.google.com/p/crypto-js/
- var Buffer = require('safe-buffer').Buffer
- function asUInt32Array (buf) {
- if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
- var len = (buf.length / 4) | 0
- var out = new Array(len)
- for (var i = 0; i < len; i++) {
- out[i] = buf.readUInt32BE(i * 4)
- }
- return out
- }
- function scrubVec (v) {
- for (var i = 0; i < v.length; v++) {
- v[i] = 0
- }
- }
- function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
- var SUB_MIX0 = SUB_MIX[0]
- var SUB_MIX1 = SUB_MIX[1]
- var SUB_MIX2 = SUB_MIX[2]
- var SUB_MIX3 = SUB_MIX[3]
- var s0 = M[0] ^ keySchedule[0]
- var s1 = M[1] ^ keySchedule[1]
- var s2 = M[2] ^ keySchedule[2]
- var s3 = M[3] ^ keySchedule[3]
- var t0, t1, t2, t3
- var ksRow = 4
- for (var round = 1; round < nRounds; round++) {
- t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
- t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
- t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
- t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
- s0 = t0
- s1 = t1
- s2 = t2
- s3 = t3
- }
- t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
- t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
- t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
- t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
- t0 = t0 >>> 0
- t1 = t1 >>> 0
- t2 = t2 >>> 0
- t3 = t3 >>> 0
- return [t0, t1, t2, t3]
- }
- // AES constants
- var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
- var G = (function () {
- // Compute double table
- var d = new Array(256)
- for (var j = 0; j < 256; j++) {
- if (j < 128) {
- d[j] = j << 1
- } else {
- d[j] = (j << 1) ^ 0x11b
- }
- }
- var SBOX = []
- var INV_SBOX = []
- var SUB_MIX = [[], [], [], []]
- var INV_SUB_MIX = [[], [], [], []]
- // Walk GF(2^8)
- var x = 0
- var xi = 0
- for (var i = 0; i < 256; ++i) {
- // Compute sbox
- var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
- sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
- SBOX[x] = sx
- INV_SBOX[sx] = x
- // Compute multiplication
- var x2 = d[x]
- var x4 = d[x2]
- var x8 = d[x4]
- // Compute sub bytes, mix columns tables
- var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
- SUB_MIX[0][x] = (t << 24) | (t >>> 8)
- SUB_MIX[1][x] = (t << 16) | (t >>> 16)
- SUB_MIX[2][x] = (t << 8) | (t >>> 24)
- SUB_MIX[3][x] = t
- // Compute inv sub bytes, inv mix columns tables
- t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
- INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
- INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
- INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
- INV_SUB_MIX[3][sx] = t
- if (x === 0) {
- x = xi = 1
- } else {
- x = x2 ^ d[d[d[x8 ^ x2]]]
- xi ^= d[d[xi]]
- }
- }
- return {
- SBOX: SBOX,
- INV_SBOX: INV_SBOX,
- SUB_MIX: SUB_MIX,
- INV_SUB_MIX: INV_SUB_MIX
- }
- })()
- function AES (key) {
- this._key = asUInt32Array(key)
- this._reset()
- }
- AES.blockSize = 4 * 4
- AES.keySize = 256 / 8
- AES.prototype.blockSize = AES.blockSize
- AES.prototype.keySize = AES.keySize
- AES.prototype._reset = function () {
- var keyWords = this._key
- var keySize = keyWords.length
- var nRounds = keySize + 6
- var ksRows = (nRounds + 1) * 4
- var keySchedule = []
- for (var k = 0; k < keySize; k++) {
- keySchedule[k] = keyWords[k]
- }
- for (k = keySize; k < ksRows; k++) {
- var t = keySchedule[k - 1]
- if (k % keySize === 0) {
- t = (t << 8) | (t >>> 24)
- t =
- (G.SBOX[t >>> 24] << 24) |
- (G.SBOX[(t >>> 16) & 0xff] << 16) |
- (G.SBOX[(t >>> 8) & 0xff] << 8) |
- (G.SBOX[t & 0xff])
- t ^= RCON[(k / keySize) | 0] << 24
- } else if (keySize > 6 && k % keySize === 4) {
- t =
- (G.SBOX[t >>> 24] << 24) |
- (G.SBOX[(t >>> 16) & 0xff] << 16) |
- (G.SBOX[(t >>> 8) & 0xff] << 8) |
- (G.SBOX[t & 0xff])
- }
- keySchedule[k] = keySchedule[k - keySize] ^ t
- }
- var invKeySchedule = []
- for (var ik = 0; ik < ksRows; ik++) {
- var ksR = ksRows - ik
- var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
- if (ik < 4 || ksR <= 4) {
- invKeySchedule[ik] = tt
- } else {
- invKeySchedule[ik] =
- G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
- G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
- G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
- G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
- }
- }
- this._nRounds = nRounds
- this._keySchedule = keySchedule
- this._invKeySchedule = invKeySchedule
- }
- AES.prototype.encryptBlockRaw = function (M) {
- M = asUInt32Array(M)
- return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
- }
- AES.prototype.encryptBlock = function (M) {
- var out = this.encryptBlockRaw(M)
- var buf = Buffer.allocUnsafe(16)
- buf.writeUInt32BE(out[0], 0)
- buf.writeUInt32BE(out[1], 4)
- buf.writeUInt32BE(out[2], 8)
- buf.writeUInt32BE(out[3], 12)
- return buf
- }
- AES.prototype.decryptBlock = function (M) {
- M = asUInt32Array(M)
- // swap
- var m1 = M[1]
- M[1] = M[3]
- M[3] = m1
- var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
- var buf = Buffer.allocUnsafe(16)
- buf.writeUInt32BE(out[0], 0)
- buf.writeUInt32BE(out[3], 4)
- buf.writeUInt32BE(out[2], 8)
- buf.writeUInt32BE(out[1], 12)
- return buf
- }
- AES.prototype.scrub = function () {
- scrubVec(this._keySchedule)
- scrubVec(this._invKeySchedule)
- scrubVec(this._key)
- }
- module.exports.AES = AES
- },{"safe-buffer":318}],151:[function(require,module,exports){
- var aes = require('./aes')
- var Buffer = require('safe-buffer').Buffer
- var Transform = require('cipher-base')
- var inherits = require('inherits')
- var GHASH = require('./ghash')
- var xor = require('buffer-xor')
- var incr32 = require('./incr32')
- function xorTest (a, b) {
- var out = 0
- if (a.length !== b.length) out++
- var len = Math.min(a.length, b.length)
- for (var i = 0; i < len; ++i) {
- out += (a[i] ^ b[i])
- }
- return out
- }
- function calcIv (self, iv, ck) {
- if (iv.length === 12) {
- self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])
- return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])
- }
- var ghash = new GHASH(ck)
- var len = iv.length
- var toPad = len % 16
- ghash.update(iv)
- if (toPad) {
- toPad = 16 - toPad
- ghash.update(Buffer.alloc(toPad, 0))
- }
- ghash.update(Buffer.alloc(8, 0))
- var ivBits = len * 8
- var tail = Buffer.alloc(8)
- tail.writeUIntBE(ivBits, 0, 8)
- ghash.update(tail)
- self._finID = ghash.state
- var out = Buffer.from(self._finID)
- incr32(out)
- return out
- }
- function StreamCipher (mode, key, iv, decrypt) {
- Transform.call(this)
- var h = Buffer.alloc(4, 0)
- this._cipher = new aes.AES(key)
- var ck = this._cipher.encryptBlock(h)
- this._ghash = new GHASH(ck)
- iv = calcIv(this, iv, ck)
- this._prev = Buffer.from(iv)
- this._cache = Buffer.allocUnsafe(0)
- this._secCache = Buffer.allocUnsafe(0)
- this._decrypt = decrypt
- this._alen = 0
- this._len = 0
- this._mode = mode
- this._authTag = null
- this._called = false
- }
- inherits(StreamCipher, Transform)
- StreamCipher.prototype._update = function (chunk) {
- if (!this._called && this._alen) {
- var rump = 16 - (this._alen % 16)
- if (rump < 16) {
- rump = Buffer.alloc(rump, 0)
- this._ghash.update(rump)
- }
- }
- this._called = true
- var out = this._mode.encrypt(this, chunk)
- if (this._decrypt) {
- this._ghash.update(chunk)
- } else {
- this._ghash.update(out)
- }
- this._len += chunk.length
- return out
- }
- StreamCipher.prototype._final = function () {
- if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')
- var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
- if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')
- this._authTag = tag
- this._cipher.scrub()
- }
- StreamCipher.prototype.getAuthTag = function getAuthTag () {
- if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')
- return this._authTag
- }
- StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
- if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')
- this._authTag = tag
- }
- StreamCipher.prototype.setAAD = function setAAD (buf) {
- if (this._called) throw new Error('Attempting to set AAD in unsupported state')
- this._ghash.update(buf)
- this._alen += buf.length
- }
- module.exports = StreamCipher
- },{"./aes":150,"./ghash":155,"./incr32":156,"buffer-xor":181,"cipher-base":184,"inherits":262,"safe-buffer":318}],152:[function(require,module,exports){
- var ciphers = require('./encrypter')
- var deciphers = require('./decrypter')
- var modes = require('./modes/list.json')
- function getCiphers () {
- return Object.keys(modes)
- }
- exports.createCipher = exports.Cipher = ciphers.createCipher
- exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
- exports.createDecipher = exports.Decipher = deciphers.createDecipher
- exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
- exports.listCiphers = exports.getCiphers = getCiphers
- },{"./decrypter":153,"./encrypter":154,"./modes/list.json":164}],153:[function(require,module,exports){
- var AuthCipher = require('./authCipher')
- var Buffer = require('safe-buffer').Buffer
- var MODES = require('./modes')
- var StreamCipher = require('./streamCipher')
- var Transform = require('cipher-base')
- var aes = require('./aes')
- var ebtk = require('evp_bytestokey')
- var inherits = require('inherits')
- function Decipher (mode, key, iv) {
- Transform.call(this)
- this._cache = new Splitter()
- this._last = void 0
- this._cipher = new aes.AES(key)
- this._prev = Buffer.from(iv)
- this._mode = mode
- this._autopadding = true
- }
- inherits(Decipher, Transform)
- Decipher.prototype._update = function (data) {
- this._cache.add(data)
- var chunk
- var thing
- var out = []
- while ((chunk = this._cache.get(this._autopadding))) {
- thing = this._mode.decrypt(this, chunk)
- out.push(thing)
- }
- return Buffer.concat(out)
- }
- Decipher.prototype._final = function () {
- var chunk = this._cache.flush()
- if (this._autopadding) {
- return unpad(this._mode.decrypt(this, chunk))
- } else if (chunk) {
- throw new Error('data not multiple of block length')
- }
- }
- Decipher.prototype.setAutoPadding = function (setTo) {
- this._autopadding = !!setTo
- return this
- }
- function Splitter () {
- this.cache = Buffer.allocUnsafe(0)
- }
- Splitter.prototype.add = function (data) {
- this.cache = Buffer.concat([this.cache, data])
- }
- Splitter.prototype.get = function (autoPadding) {
- var out
- if (autoPadding) {
- if (this.cache.length > 16) {
- out = this.cache.slice(0, 16)
- this.cache = this.cache.slice(16)
- return out
- }
- } else {
- if (this.cache.length >= 16) {
- out = this.cache.slice(0, 16)
- this.cache = this.cache.slice(16)
- return out
- }
- }
- return null
- }
- Splitter.prototype.flush = function () {
- if (this.cache.length) return this.cache
- }
- function unpad (last) {
- var padded = last[15]
- if (padded < 1 || padded > 16) {
- throw new Error('unable to decrypt data')
- }
- var i = -1
- while (++i < padded) {
- if (last[(i + (16 - padded))] !== padded) {
- throw new Error('unable to decrypt data')
- }
- }
- if (padded === 16) return
- return last.slice(0, 16 - padded)
- }
- function createDecipheriv (suite, password, iv) {
- var config = MODES[suite.toLowerCase()]
- if (!config) throw new TypeError('invalid suite type')
- if (typeof iv === 'string') iv = Buffer.from(iv)
- if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
- if (typeof password === 'string') password = Buffer.from(password)
- if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
- if (config.type === 'stream') {
- return new StreamCipher(config.module, password, iv, true)
- } else if (config.type === 'auth') {
- return new AuthCipher(config.module, password, iv, true)
- }
- return new Decipher(config.module, password, iv)
- }
- function createDecipher (suite, password) {
- var config = MODES[suite.toLowerCase()]
- if (!config) throw new TypeError('invalid suite type')
- var keys = ebtk(password, false, config.key, config.iv)
- return createDecipheriv(suite, keys.key, keys.iv)
- }
- exports.createDecipher = createDecipher
- exports.createDecipheriv = createDecipheriv
- },{"./aes":150,"./authCipher":151,"./modes":163,"./streamCipher":166,"cipher-base":184,"evp_bytestokey":222,"inherits":262,"safe-buffer":318}],154:[function(require,module,exports){
- var MODES = require('./modes')
- var AuthCipher = require('./authCipher')
- var Buffer = require('safe-buffer').Buffer
- var StreamCipher = require('./streamCipher')
- var Transform = require('cipher-base')
- var aes = require('./aes')
- var ebtk = require('evp_bytestokey')
- var inherits = require('inherits')
- function Cipher (mode, key, iv) {
- Transform.call(this)
- this._cache = new Splitter()
- this._cipher = new aes.AES(key)
- this._prev = Buffer.from(iv)
- this._mode = mode
- this._autopadding = true
- }
- inherits(Cipher, Transform)
- Cipher.prototype._update = function (data) {
- this._cache.add(data)
- var chunk
- var thing
- var out = []
- while ((chunk = this._cache.get())) {
- thing = this._mode.encrypt(this, chunk)
- out.push(thing)
- }
- return Buffer.concat(out)
- }
- var PADDING = Buffer.alloc(16, 0x10)
- Cipher.prototype._final = function () {
- var chunk = this._cache.flush()
- if (this._autopadding) {
- chunk = this._mode.encrypt(this, chunk)
- this._cipher.scrub()
- return chunk
- }
- if (!chunk.equals(PADDING)) {
- this._cipher.scrub()
- throw new Error('data not multiple of block length')
- }
- }
- Cipher.prototype.setAutoPadding = function (setTo) {
- this._autopadding = !!setTo
- return this
- }
- function Splitter () {
- this.cache = Buffer.allocUnsafe(0)
- }
- Splitter.prototype.add = function (data) {
- this.cache = Buffer.concat([this.cache, data])
- }
- Splitter.prototype.get = function () {
- if (this.cache.length > 15) {
- var out = this.cache.slice(0, 16)
- this.cache = this.cache.slice(16)
- return out
- }
- return null
- }
- Splitter.prototype.flush = function () {
- var len = 16 - this.cache.length
- var padBuff = Buffer.allocUnsafe(len)
- var i = -1
- while (++i < len) {
- padBuff.writeUInt8(len, i)
- }
- return Buffer.concat([this.cache, padBuff])
- }
- function createCipheriv (suite, password, iv) {
- var config = MODES[suite.toLowerCase()]
- if (!config) throw new TypeError('invalid suite type')
- if (typeof password === 'string') password = Buffer.from(password)
- if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
- if (typeof iv === 'string') iv = Buffer.from(iv)
- if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
- if (config.type === 'stream') {
- return new StreamCipher(config.module, password, iv)
- } else if (config.type === 'auth') {
- return new AuthCipher(config.module, password, iv)
- }
- return new Cipher(config.module, password, iv)
- }
- function createCipher (suite, password) {
- var config = MODES[suite.toLowerCase()]
- if (!config) throw new TypeError('invalid suite type')
- var keys = ebtk(password, false, config.key, config.iv)
- return createCipheriv(suite, keys.key, keys.iv)
- }
- exports.createCipheriv = createCipheriv
- exports.createCipher = createCipher
- },{"./aes":150,"./authCipher":151,"./modes":163,"./streamCipher":166,"cipher-base":184,"evp_bytestokey":222,"inherits":262,"safe-buffer":318}],155:[function(require,module,exports){
- var Buffer = require('safe-buffer').Buffer
- var ZEROES = Buffer.alloc(16, 0)
- function toArray (buf) {
- return [
- buf.readUInt32BE(0),
- buf.readUInt32BE(4),
- buf.readUInt32BE(8),
- buf.readUInt32BE(12)
- ]
- }
- function fromArray (out) {
- var buf = Buffer.allocUnsafe(16)
- buf.writeUInt32BE(out[0] >>> 0, 0)
- buf.writeUInt32BE(out[1] >>> 0, 4)
- buf.writeUInt32BE(out[2] >>> 0, 8)
- buf.writeUInt32BE(out[3] >>> 0, 12)
- return buf
- }
- function GHASH (key) {
- this.h = key
- this.state = Buffer.alloc(16, 0)
- this.cache = Buffer.allocUnsafe(0)
- }
- // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
- // by Juho Vähä-Herttua
- GHASH.prototype.ghash = function (block) {
- var i = -1
- while (++i < block.length) {
- this.state[i] ^= block[i]
- }
- this._multiply()
- }
- GHASH.prototype._multiply = function () {
- var Vi = toArray(this.h)
- var Zi = [0, 0, 0, 0]
- var j, xi, lsbVi
- var i = -1
- while (++i < 128) {
- xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0
- if (xi) {
- // Z_i+1 = Z_i ^ V_i
- Zi[0] ^= Vi[0]
- Zi[1] ^= Vi[1]
- Zi[2] ^= Vi[2]
- Zi[3] ^= Vi[3]
- }
- // Store the value of LSB(V_i)
- lsbVi = (Vi[3] & 1) !== 0
- // V_i+1 = V_i >> 1
- for (j = 3; j > 0; j--) {
- Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
- }
- Vi[0] = Vi[0] >>> 1
- // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
- if (lsbVi) {
- Vi[0] = Vi[0] ^ (0xe1 << 24)
- }
- }
- this.state = fromArray(Zi)
- }
- GHASH.prototype.update = function (buf) {
- this.cache = Buffer.concat([this.cache, buf])
- var chunk
- while (this.cache.length >= 16) {
- chunk = this.cache.slice(0, 16)
- this.cache = this.cache.slice(16)
- this.ghash(chunk)
- }
- }
- GHASH.prototype.final = function (abl, bl) {
- if (this.cache.length) {
- this.ghash(Buffer.concat([this.cache, ZEROES], 16))
- }
- this.ghash(fromArray([0, abl, 0, bl]))
- return this.state
- }
- module.exports = GHASH
- },{"safe-buffer":318}],156:[function(require,module,exports){
- function incr32 (iv) {
- var len = iv.length
- var item
- while (len--) {
- item = iv.readUInt8(len)
- if (item === 255) {
- iv.writeUInt8(0, len)
- } else {
- item++
- iv.writeUInt8(item, len)
- break
- }
- }
- }
- module.exports = incr32
- },{}],157:[function(require,module,exports){
- var xor = require('buffer-xor')
- exports.encrypt = function (self, block) {
- var data = xor(block, self._prev)
- self._prev = self._cipher.encryptBlock(data)
- return self._prev
- }
- exports.decrypt = function (self, block) {
- var pad = self._prev
- self._prev = block
- var out = self._cipher.decryptBlock(block)
- return xor(out, pad)
- }
- },{"buffer-xor":181}],158:[function(require,module,exports){
- var Buffer = require('safe-buffer').Buffer
- var xor = require('buffer-xor')
- function encryptStart (self, data, decrypt) {
- var len = data.length
- var out = xor(data, self._cache)
- self._cache = self._cache.slice(len)
- self._prev = Buffer.concat([self._prev, decrypt ? data : out])
- return out
- }
- exports.encrypt = function (self, data, decrypt) {
- var out = Buffer.allocUnsafe(0)
- var len
- while (data.length) {
- if (self._cache.length === 0) {
- self._cache = self._cipher.encryptBlock(self._prev)
- self._prev = Buffer.allocUnsafe(0)
- }
- if (self._cache.length <= data.length) {
- len = self._cache.length
- out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
- data = data.slice(len)
- } else {
- out = Buffer.concat([out, encryptStart(self, data, decrypt)])
- break
- }
- }
- return out
- }
- },{"buffer-xor":181,"safe-buffer":318}],159:[function(require,module,exports){
- var Buffer = require('safe-buffer').Buffer
- function encryptByte (self, byteParam, decrypt) {
- var pad
- var i = -1
- var len = 8
- var out = 0
- var bit, value
- while (++i < len) {
- pad = self._cipher.encryptBlock(self._prev)
- bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
- value = pad[0] ^ bit
- out += ((value & 0x80) >> (i % 8))
- self._prev = shiftIn(self._prev, decrypt ? bit : value)
- }
- return out
- }
- function shiftIn (buffer, value) {
- var len = buffer.length
- var i = -1
- var out = Buffer.allocUnsafe(buffer.length)
- buffer = Buffer.concat([buffer, Buffer.from([value])])
- while (++i < len) {
- out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
- }
- return out
- }
- exports.encrypt = function (self, chunk, decrypt) {
- var len = chunk.length
- var out = Buffer.allocUnsafe(len)
- var i = -1
- while (++i < len) {
- out[i] = encryptByte(self, chunk[i], decrypt)
- }
- return out
- }
- },{"safe-buffer":318}],160:[function(require,module,exports){
- var Buffer = require('safe-buffer').Buffer
- function encryptByte (self, byteParam, decrypt) {
- var pad = self._cipher.encryptBlock(self._prev)
- var out = pad[0] ^ byteParam
- self._prev = Buffer.concat([
- self._prev.slice(1),
- Buffer.from([decrypt ? byteParam : out])
- ])
- return out
- }
- exports.encrypt = function (self, chunk, decrypt) {
- var len = chunk.length
- var out = Buffer.allocUnsafe(len)
- var i = -1
- while (++i < len) {
- out[i] = encryptByte(self, chunk[i], decrypt)
- }
- return out
- }
- },{"safe-buffer":318}],161:[function(require,module,exports){
- var xor = require('buffer-xor')
- var Buffer = require('safe-buffer').Buffer
- var incr32 = require('../incr32')
- function getBlock (self) {
- var out = self._cipher.encryptBlockRaw(self._prev)
- incr32(self._prev)
- return out
- }
- var blockSize = 16
- exports.encrypt = function (self, chunk) {
- var chunkNum = Math.ceil(chunk.length / blockSize)
- var start = self._cache.length
- self._cache = Buffer.concat([
- self._cache,
- Buffer.allocUnsafe(chunkNum * blockSize)
- ])
- for (var i = 0; i < chunkNum; i++) {
- var out = getBlock(self)
- var offset = start + i * blockSize
- self._cache.writeUInt32BE(out[0], offset + 0)
- self._cache.writeUInt32BE(out[1], offset + 4)
- self._cache.writeUInt32BE(out[2], offset + 8)
- self._cache.writeUInt32BE(out[3], offset + 12)
- }
- var pad = self._cache.slice(0, chunk.length)
- self._cache = self._cache.slice(chunk.length)
- return xor(chunk, pad)
- }
- },{"../incr32":156,"buffer-xor":181,"safe-buffer":318}],162:[function(require,module,exports){
- exports.encrypt = function (self, block) {
- return self._cipher.encryptBlock(block)
- }
- exports.decrypt = function (self, block) {
- return self._cipher.decryptBlock(block)
- }
- },{}],163:[function(require,module,exports){
- var modeModules = {
- ECB: require('./ecb'),
- CBC: require('./cbc'),
- CFB: require('./cfb'),
- CFB8: require('./cfb8'),
- CFB1: require('./cfb1'),
- OFB: require('./ofb'),
- CTR: require('./ctr'),
- GCM: require('./ctr')
- }
- var modes = require('./list.json')
- for (var key in modes) {
- modes[key].module = modeModules[modes[key].mode]
- }
- module.exports = modes
- },{"./cbc":157,"./cfb":158,"./cfb1":159,"./cfb8":160,"./ctr":161,"./ecb":162,"./list.json":164,"./ofb":165}],164:[function(require,module,exports){
- module.exports={
- "aes-128-ecb": {
- "cipher": "AES",
- "key": 128,
- "iv": 0,
- "mode": "ECB",
- "type": "block"
- },
- "aes-192-ecb": {
- "cipher": "AES",
- "key": 192,
- "iv": 0,
- "mode": "ECB",
- "type": "block"
- },
- "aes-256-ecb": {
- "cipher": "AES",
- "key": 256,
- "iv": 0,
- "mode": "ECB",
- "type": "block"
- },
- "aes-128-cbc": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes-192-cbc": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes-256-cbc": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes128": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes192": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes256": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CBC",
- "type": "block"
- },
- "aes-128-cfb": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CFB",
- "type": "stream"
- },
- "aes-192-cfb": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CFB",
- "type": "stream"
- },
- "aes-256-cfb": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CFB",
- "type": "stream"
- },
- "aes-128-cfb8": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CFB8",
- "type": "stream"
- },
- "aes-192-cfb8": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CFB8",
- "type": "stream"
- },
- "aes-256-cfb8": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CFB8",
- "type": "stream"
- },
- "aes-128-cfb1": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CFB1",
- "type": "stream"
- },
- "aes-192-cfb1": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CFB1",
- "type": "stream"
- },
- "aes-256-cfb1": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CFB1",
- "type": "stream"
- },
- "aes-128-ofb": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "OFB",
- "type": "stream"
- },
- "aes-192-ofb": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "OFB",
- "type": "stream"
- },
- "aes-256-ofb": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "OFB",
- "type": "stream"
- },
- "aes-128-ctr": {
- "cipher": "AES",
- "key": 128,
- "iv": 16,
- "mode": "CTR",
- "type": "stream"
- },
- "aes-192-ctr": {
- "cipher": "AES",
- "key": 192,
- "iv": 16,
- "mode": "CTR",
- "type": "stream"
- },
- "aes-256-ctr": {
- "cipher": "AES",
- "key": 256,
- "iv": 16,
- "mode": "CTR",
- "type": "stream"
- },
- "aes-128-gcm": {
- "cipher": "AES",
- "key": 128,
- "iv": 12,
- "mode": "GCM",
- "type": "auth"
- },
- "aes-192-gcm": {
- "cipher": "AES",
- "key": 192,
- "iv": 12,
- "mode": "GCM",
- "type": "auth"
- },
- "aes-256-gcm": {
- "cipher": "AES",
- "key": 256,
- "iv": 12,
- "mode": "GCM",
- "type": "auth"
- }
- }
- },{}],165:[function(require,module,exports){
- (function (Buffer){
- var xor = require('buffer-xor')
- function getBlock (self) {
- self._prev = self._cipher.encryptBlock(self._prev)
- return self._prev
- }
- exports.encrypt = function (self, chunk) {
- while (self._cache.length < chunk.length) {
- self._cache = Buffer.concat([self._cache, getBlock(self)])
- }
- var pad = self._cache.slice(0, chunk.length)
- self._cache = self._cache.slice(chunk.length)
- return xor(chunk, pad)
- }
- }).call(this,require("buffer").Buffer)
- },{"buffer":182,"buffer-xor":181}],166:[function(require,module,exports){
- var aes = require('./aes')
- var Buffer = require('safe-buffer').Buffer
- var Transform = require('cipher-base')
- var inherits = require('inherits')
- function StreamCipher (mode, key, iv, decrypt) {
- Transform.call(this)
- this._cipher = new aes.AES(key)
- this._prev = Buffer.from(iv)
- this._cache = Buffer.allocUnsafe(0)
- this._secCache = Buffer.allocUnsafe(0)
- this._decrypt = decrypt
- this._mode = mode
- }
- inherits(StreamCipher, Transform)
- StreamCipher.prototype._update = function (chunk) {
- return this._mode.encrypt(this, chunk, this._decrypt)
- }
- StreamCipher.prototype._final = function () {
- this._cipher.scrub()
- }
- module.exports = StreamCipher
- },{"./aes":150,"cipher-base":184,"inherits":262,"safe-buffer":318}],167:[function(require,module,exports){
- var DES = require('browserify-des')
- var aes = require('browserify-aes/browser')
- var aesModes = require('browserify-aes/modes')
- var desModes = require('browserify-des/modes')
- var ebtk = require('evp_bytestokey')
- function createCipher (suite, password) {
- suite = suite.toLowerCase()
- var keyLen, ivLen
- if (aesModes[suite]) {
- keyLen = aesModes[suite].key
- ivLen = aesModes[suite].iv
- } else if (desModes[suite]) {
- keyLen = desModes[suite].key * 8
- ivLen = desModes[suite].iv
- } else {
- throw new TypeError('invalid suite type')
- }
- var keys = ebtk(password, false, keyLen, ivLen)
- return createCipheriv(suite, keys.key, keys.iv)
- }
- function createDecipher (suite, password) {
- suite = suite.toLowerCase()
- var keyLen, ivLen
- if (aesModes[suite]) {
- keyLen = aesModes[suite].key
- ivLen = aesModes[suite].iv
- } else if (desModes[suite]) {
- keyLen = desModes[suite].key * 8
- ivLen = desModes[suite].iv
- } else {
- throw new TypeError('invalid suite type')
- }
- var keys = ebtk(password, false, keyLen, ivLen)
- return createDecipheriv(suite, keys.key, keys.iv)
- }
- function createCipheriv (suite, key, iv) {
- suite = suite.toLowerCase()
- if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)
- if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })
- throw new TypeError('invalid suite type')
- }
- function createDecipheriv (suite, key, iv) {
- suite = suite.toLowerCase()
- if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)
- if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })
- throw new TypeError('invalid suite type')
- }
- function getCiphers () {
- return Object.keys(desModes).concat(aes.getCiphers())
- }
- exports.createCipher = exports.Cipher = createCipher
- exports.createCipheriv = exports.Cipheriv = createCipheriv
- exports.createDecipher = exports.Decipher = createDecipher
- exports.createDecipheriv = exports.Decipheriv = createDecipheriv
- exports.listCiphers = exports.getCiphers = getCiphers
- },{"browserify-aes/browser":152,"browserify-aes/modes":163,"browserify-des":168,"browserify-des/modes":169,"evp_bytestokey":222}],168:[function(require,module,exports){
- var CipherBase = require('cipher-base')
- var des = require('des.js')
- var inherits = require('inherits')
- var Buffer = require('safe-buffer').Buffer
- var modes = {
- 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
- 'des-ede3': des.EDE,
- 'des-ede-cbc': des.CBC.instantiate(des.EDE),
- 'des-ede': des.EDE,
- 'des-cbc': des.CBC.instantiate(des.DES),
- 'des-ecb': des.DES
- }
- modes.des = modes['des-cbc']
- modes.des3 = modes['des-ede3-cbc']
- module.exports = DES
- inherits(DES, CipherBase)
- function DES (opts) {
- CipherBase.call(this)
- var modeName = opts.mode.toLowerCase()
- var mode = modes[modeName]
- var type
- if (opts.decrypt) {
- type = 'decrypt'
- } else {
- type = 'encrypt'
- }
- var key = opts.key
- if (!Buffer.isBuffer(key)) {
- key = Buffer.from(key)
- }
- if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
- key = Buffer.concat([key, key.slice(0, 8)])
- }
- var iv = opts.iv
- if (!Buffer.isBuffer(iv)) {
- iv = Buffer.from(iv)
- }
- this._des = mode.create({
- key: key,
- iv: iv,
- type: type
- })
- }
- DES.prototype._update = function (data) {
- return Buffer.from(this._des.update(data))
- }
- DES.prototype._final = function () {
- return Buffer.from(this._des.final())
- }
- },{"cipher-base":184,"des.js":195,"inherits":262,"safe-buffer":318}],169:[function(require,module,exports){
- exports['des-ecb'] = {
- key: 8,
- iv: 0
- }
- exports['des-cbc'] = exports.des = {
- key: 8,
- iv: 8
- }
- exports['des-ede3-cbc'] = exports.des3 = {
- key: 24,
- iv: 8
- }
- exports['des-ede3'] = {
- key: 24,
- iv: 0
- }
- exports['des-ede-cbc'] = {
- key: 16,
- iv: 8
- }
- exports['des-ede'] = {
- key: 16,
- iv: 0
- }
- },{}],170:[function(require,module,exports){
- (function (Buffer){
- var bn = require('bn.js');
- var randomBytes = require('randombytes');
- module.exports = crt;
- function blind(priv) {
- var r = getr(priv);
- var blinder = r.toRed(bn.mont(priv.modulus))
- .redPow(new bn(priv.publicExponent)).fromRed();
- return {
- blinder: blinder,
- unblinder:r.invm(priv.modulus)
- };
- }
- function crt(msg, priv) {
- var blinds = blind(priv);
- var len = priv.modulus.byteLength();
- var mod = bn.mont(priv.modulus);
- var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
- var c1 = blinded.toRed(bn.mont(priv.prime1));
- var c2 = blinded.toRed(bn.mont(priv.prime2));
- var qinv = priv.coefficient;
- var p = priv.prime1;
- var q = priv.prime2;
- var m1 = c1.redPow(priv.exponent1);
- var m2 = c2.redPow(priv.exponent2);
- m1 = m1.fromRed();
- m2 = m2.fromRed();
- var h = m1.isub(m2).imul(qinv).umod(p);
- h.imul(q);
- m2.iadd(h);
- return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
- }
- crt.getr = getr;
- function getr(priv) {
- var len = priv.modulus.byteLength();
- var r = new bn(randomBytes(len));
- while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
- r = new bn(randomBytes(len));
- }
- return r;
- }
- }).call(this,require("buffer").Buffer)
- },{"bn.js":147,"buffer":182,"randombytes":298}],171:[function(require,module,exports){
- module.exports = require('./browser/algorithms.json')
- },{"./browser/algorithms.json":172}],172:[function(require,module,exports){
- module.exports={
- "sha224WithRSAEncryption": {
- "sign": "rsa",
- "hash": "sha224",
- "id": "302d300d06096086480165030402040500041c"
- },
- "RSA-SHA224": {
- "sign": "ecdsa/rsa",
- "hash": "sha224",
- "id": "302d300d06096086480165030402040500041c"
- },
- "sha256WithRSAEncryption": {
- "sign": "rsa",
- "hash": "sha256",
- "id": "3031300d060960864801650304020105000420"
- },
- "RSA-SHA256": {
- "sign": "ecdsa/rsa",
- "hash": "sha256",
- "id": "3031300d060960864801650304020105000420"
- },
- "sha384WithRSAEncryption": {
- "sign": "rsa",
- "hash": "sha384",
- "id": "3041300d060960864801650304020205000430"
- },
- "RSA-SHA384": {
- "sign": "ecdsa/rsa",
- "hash": "sha384",
- "id": "3041300d060960864801650304020205000430"
- },
- "sha512WithRSAEncryption": {
- "sign": "rsa",
- "hash": "sha512",
- "id": "3051300d060960864801650304020305000440"
- },
- "RSA-SHA512": {
- "sign": "ecdsa/rsa",
- "hash": "sha512",
- "id": "3051300d060960864801650304020305000440"
- },
- "RSA-SHA1": {
- "sign": "rsa",
- "hash": "sha1",
- "id": "3021300906052b0e03021a05000414"
- },
- "ecdsa-with-SHA1": {
- "sign": "ecdsa",
- "hash": "sha1",
- "id": ""
- },
- "sha256": {
- "sign": "ecdsa",
- "hash": "sha256",
- "id": ""
- },
- "sha224": {
- "sign": "ecdsa",
- "hash": "sha224",
- "id": ""
- },
- "sha384": {
- "sign": "ecdsa",
- "hash": "sha384",
- "id": ""
- },
- "sha512": {
- "sign": "ecdsa",
- "hash": "sha512",
- "id": ""
- },
- "DSA-SHA": {
- "sign": "dsa",
- "hash": "sha1",
- "id": ""
- },
- "DSA-SHA1": {
- "sign": "dsa",
- "hash": "sha1",
- "id": ""
- },
- "DSA": {
- "sign": "dsa",
- "hash": "sha1",
- "id": ""
- },
- "DSA-WITH-SHA224": {
- "sign": "dsa",
- "hash": "sha224",
- "id": ""
- },
- "DSA-SHA224": {
- "sign": "dsa",
- "hash": "sha224",
- "id": ""
- },
- "DSA-WITH-SHA256": {
- "sign": "dsa",
- "hash": "sha256",
- "id": ""
- },
- "DSA-SHA256": {
- "sign": "dsa",
- "hash": "sha256",
- "id": ""
- },
- "DSA-WITH-SHA384": {
- "sign": "dsa",
- "hash": "sha384",
- "id": ""
- },
- "DSA-SHA384": {
- "sign": "dsa",
- "hash": "sha384",
- "id": ""
- },
- "DSA-WITH-SHA512": {
- "sign": "dsa",
- "hash": "sha512",
- "id": ""
- },
- "DSA-SHA512": {
- "sign": "dsa",
- "hash": "sha512",
- "id": ""
- },
- "DSA-RIPEMD160": {
- "sign": "dsa",
- "hash": "rmd160",
- "id": ""
- },
- "ripemd160WithRSA": {
- "sign": "rsa",
- "hash": "rmd160",
- "id": "3021300906052b2403020105000414"
- },
- "RSA-RIPEMD160": {
- "sign": "rsa",
- "hash": "rmd160",
- "id": "3021300906052b2403020105000414"
- },
- "md5WithRSAEncryption": {
- "sign": "rsa",
- "hash": "md5",
- "id": "3020300c06082a864886f70d020505000410"
- },
- "RSA-MD5": {
- "sign": "rsa",
- "hash": "md5",
- "id": "3020300c06082a864886f70d020505000410"
- }
- }
- },{}],173:[function(require,module,exports){
- module.exports={
- "1.3.132.0.10": "secp256k1",
- "1.3.132.0.33": "p224",
- "1.2.840.10045.3.1.1": "p192",
- "1.2.840.10045.3.1.7": "p256",
- "1.3.132.0.34": "p384",
- "1.3.132.0.35": "p521"
- }
- },{}],174:[function(require,module,exports){
- (function (Buffer){
- var createHash = require('create-hash')
- var stream = require('stream')
- var inherits = require('inherits')
- var sign = require('./sign')
- var verify = require('./verify')
- var algorithms = require('./algorithms.json')
- Object.keys(algorithms).forEach(function (key) {
- algorithms[key].id = new Buffer(algorithms[key].id, 'hex')
- algorithms[key.toLowerCase()] = algorithms[key]
- })
- function Sign (algorithm) {
- stream.Writable.call(this)
- var data = algorithms[algorithm]
- if (!data) throw new Error('Unknown message digest')
- this._hashType = data.hash
- this._hash = createHash(data.hash)
- this._tag = data.id
- this._signType = data.sign
- }
- inherits(Sign, stream.Writable)
- Sign.prototype._write = function _write (data, _, done) {
- this._hash.update(data)
- done()
- }
- Sign.prototype.update = function update (data, enc) {
- if (typeof data === 'string') data = new Buffer(data, enc)
- this._hash.update(data)
- return this
- }
- Sign.prototype.sign = function signMethod (key, enc) {
- this.end()
- var hash = this._hash.digest()
- var sig = sign(hash, key, this._hashType, this._signType, this._tag)
- return enc ? sig.toString(enc) : sig
- }
- function Verify (algorithm) {
- stream.Writable.call(this)
- var data = algorithms[algorithm]
- if (!data) throw new Error('Unknown message digest')
- this._hash = createHash(data.hash)
- this._tag = data.id
- this._signType = data.sign
- }
- inherits(Verify, stream.Writable)
- Verify.prototype._write = function _write (data, _, done) {
- this._hash.update(data)
- done()
- }
- Verify.prototype.update = function update (data, enc) {
- if (typeof data === 'string') data = new Buffer(data, enc)
- this._hash.update(data)
- return this
- }
- Verify.prototype.verify = function verifyMethod (key, sig, enc) {
- if (typeof sig === 'string') sig = new Buffer(sig, enc)
- this.end()
- var hash = this._hash.digest()
- return verify(sig, hash, key, this._signType, this._tag)
- }
- function createSign (algorithm) {
- return new Sign(algorithm)
- }
- function createVerify (algorithm) {
- return new Verify(algorithm)
- }
- module.exports = {
- Sign: createSign,
- Verify: createVerify,
- createSign: createSign,
- createVerify: createVerify
- }
- }).call(this,require("buffer").Buffer)
- },{"./algorithms.json":172,"./sign":175,"./verify":176,"buffer":182,"create-hash":188,"inherits":262,"stream":328}],175:[function(require,module,exports){
- (function (Buffer){
- // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
- var createHmac = require('create-hmac')
- var crt = require('browserify-rsa')
- var EC = require('elliptic').ec
- var BN = require('bn.js')
- var parseKeys = require('parse-asn1')
- var curves = require('./curves.json')
- function sign (hash, key, hashType, signType, tag) {
- var priv = parseKeys(key)
- if (priv.curve) {
- // rsa keys can be interpreted as ecdsa ones in openssl
- if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
- return ecSign(hash, priv)
- } else if (priv.type === 'dsa') {
- if (signType !== 'dsa') throw new Error('wrong private key type')
- return dsaSign(hash, priv, hashType)
- } else {
- if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
- }
- hash = Buffer.concat([tag, hash])
- var len = priv.modulus.byteLength()
- var pad = [ 0, 1 ]
- while (hash.length + pad.length + 1 < len) pad.push(0xff)
- pad.push(0x00)
- var i = -1
- while (++i < hash.length) pad.push(hash[i])
- var out = crt(pad, priv)
- return out
- }
- function ecSign (hash, priv) {
- var curveId = curves[priv.curve.join('.')]
- if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))
- var curve = new EC(curveId)
- var key = curve.keyFromPrivate(priv.privateKey)
- var out = key.sign(hash)
- return new Buffer(out.toDER())
- }
- function dsaSign (hash, priv, algo) {
- var x = priv.params.priv_key
- var p = priv.params.p
- var q = priv.params.q
- var g = priv.params.g
- var r = new BN(0)
- var k
- var H = bits2int(hash, q).mod(q)
- var s = false
- var kv = getKey(x, q, hash, algo)
- while (s === false) {
- k = makeKey(q, kv, algo)
- r = makeR(g, k, p, q)
- s = k.invm(q).imul(H.add(x.mul(r))).mod(q)
- if (s.cmpn(0) === 0) {
- s = false
- r = new BN(0)
- }
- }
- return toDER(r, s)
- }
- function toDER (r, s) {
- r = r.toArray()
- s = s.toArray()
- // Pad values
- if (r[0] & 0x80) r = [ 0 ].concat(r)
- if (s[0] & 0x80) s = [ 0 ].concat(s)
- var total = r.length + s.length + 4
- var res = [ 0x30, total, 0x02, r.length ]
- res = res.concat(r, [ 0x02, s.length ], s)
- return new Buffer(res)
- }
- function getKey (x, q, hash, algo) {
- x = new Buffer(x.toArray())
- if (x.length < q.byteLength()) {
- var zeros = new Buffer(q.byteLength() - x.length)
- zeros.fill(0)
- x = Buffer.concat([ zeros, x ])
- }
- var hlen = hash.length
- var hbits = bits2octets(hash, q)
- var v = new Buffer(hlen)
- v.fill(1)
- var k = new Buffer(hlen)
- k.fill(0)
- k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()
- v = createHmac(algo, k).update(v).digest()
- k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()
- v = createHmac(algo, k).update(v).digest()
- return { k: k, v: v }
- }
- function bits2int (obits, q) {
- var bits = new BN(obits)
- var shift = (obits.length << 3) - q.bitLength()
- if (shift > 0) bits.ishrn(shift)
- return bits
- }
- function bits2octets (bits, q) {
- bits = bits2int(bits, q)
- bits = bits.mod(q)
- var out = new Buffer(bits.toArray())
- if (out.length < q.byteLength()) {
- var zeros = new Buffer(q.byteLength() - out.length)
- zeros.fill(0)
- out = Buffer.concat([ zeros, out ])
- }
- return out
- }
- function makeKey (q, kv, algo) {
- var t
- var k
- do {
- t = new Buffer(0)
- while (t.length * 8 < q.bitLength()) {
- kv.v = createHmac(algo, kv.k).update(kv.v).digest()
- t = Buffer.concat([ t, kv.v ])
- }
- k = bits2int(t, q)
- kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()
- kv.v = createHmac(algo, kv.k).update(kv.v).digest()
- } while (k.cmp(q) !== -1)
- return k
- }
- function makeR (g, k, p, q) {
- return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)
- }
- module.exports = sign
- module.exports.getKey = getKey
- module.exports.makeKey = makeKey
- }).call(this,require("buffer").Buffer)
- },{"./curves.json":173,"bn.js":147,"browserify-rsa":170,"buffer":182,"create-hmac":190,"elliptic":205,"parse-asn1":275}],176:[function(require,module,exports){
- (function (Buffer){
- // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
- var BN = require('bn.js')
- var EC = require('elliptic').ec
- var parseKeys = require('parse-asn1')
- var curves = require('./curves.json')
- function verify (sig, hash, key, signType, tag) {
- var pub = parseKeys(key)
- if (pub.type === 'ec') {
- // rsa keys can be interpreted as ecdsa ones in openssl
- if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
- return ecVerify(sig, hash, pub)
- } else if (pub.type === 'dsa') {
- if (signType !== 'dsa') throw new Error('wrong public key type')
- return dsaVerify(sig, hash, pub)
- } else {
- if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
- }
- hash = Buffer.concat([tag, hash])
- var len = pub.modulus.byteLength()
- var pad = [ 1 ]
- var padNum = 0
- while (hash.length + pad.length + 2 < len) {
- pad.push(0xff)
- padNum++
- }
- pad.push(0x00)
- var i = -1
- while (++i < hash.length) {
- pad.push(hash[i])
- }
- pad = new Buffer(pad)
- var red = BN.mont(pub.modulus)
- sig = new BN(sig).toRed(red)
- sig = sig.redPow(new BN(pub.publicExponent))
- sig = new Buffer(sig.fromRed().toArray())
- var out = padNum < 8 ? 1 : 0
- len = Math.min(sig.length, pad.length)
- if (sig.length !== pad.length) out = 1
- i = -1
- while (++i < len) out |= sig[i] ^ pad[i]
- return out === 0
- }
- function ecVerify (sig, hash, pub) {
- var curveId = curves[pub.data.algorithm.curve.join('.')]
- if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))
- var curve = new EC(curveId)
- var pubkey = pub.data.subjectPrivateKey.data
- return curve.verify(hash, sig, pubkey)
- }
- function dsaVerify (sig, hash, pub) {
- var p = pub.data.p
- var q = pub.data.q
- var g = pub.data.g
- var y = pub.data.pub_key
- var unpacked = parseKeys.signature.decode(sig, 'der')
- var s = unpacked.s
- var r = unpacked.r
- checkValue(s, q)
- checkValue(r, q)
- var montp = BN.mont(p)
- var w = s.invm(q)
- var v = g.toRed(montp)
- .redPow(new BN(hash).mul(w).mod(q))
- .fromRed()
- .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())
- .mod(p)
- .mod(q)
- return v.cmp(r) === 0
- }
- function checkValue (b, q) {
- if (b.cmpn(0) <= 0) throw new Error('invalid sig')
- if (b.cmp(q) >= q) throw new Error('invalid sig')
- }
- module.exports = verify
- }).call(this,require("buffer").Buffer)
- },{"./curves.json":173,"bn.js":147,"buffer":182,"elliptic":205,"parse-asn1":275}],177:[function(require,module,exports){
- arguments[4][149][0].apply(exports,arguments)
- },{"dup":149}],178:[function(require,module,exports){
- /* eslint-disable node/no-deprecated-api */
- var buffer = require('buffer')
- var Buffer = buffer.Buffer
- // alternative to using Object.keys for old browsers
- function copyProps (src, dst) {
- for (var key in src) {
- dst[key] = src[key]
- }
- }
- if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
- module.exports = buffer
- } else {
- // Copy properties from require('buffer')
- copyProps(buffer, exports)
- exports.Buffer = SafeBuffer
- }
- function SafeBuffer (arg, encodingOrOffset, length) {
- return Buffer(arg, encodingOrOffset, length)
- }
- // Copy static methods from Buffer
- copyProps(Buffer, SafeBuffer)
- SafeBuffer.from = function (arg, encodingOrOffset, length) {
- if (typeof arg === 'number') {
- throw new TypeError('Argument must not be a number')
- }
- return Buffer(arg, encodingOrOffset, length)
- }
- SafeBuffer.alloc = function (size, fill, encoding) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- var buf = Buffer(size)
- if (fill !== undefined) {
- if (typeof encoding === 'string') {
- buf.fill(fill, encoding)
- } else {
- buf.fill(fill)
- }
- } else {
- buf.fill(0)
- }
- return buf
- }
- SafeBuffer.allocUnsafe = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return Buffer(size)
- }
- SafeBuffer.allocUnsafeSlow = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return buffer.SlowBuffer(size)
- }
- },{"buffer":182}],179:[function(require,module,exports){
- 'use strict';
- var Buffer = require('safe-buffer').Buffer;
- var isEncoding = Buffer.isEncoding || function (encoding) {
- encoding = '' + encoding;
- switch (encoding && encoding.toLowerCase()) {
- case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
- return true;
- default:
- return false;
- }
- };
- function _normalizeEncoding(enc) {
- if (!enc) return 'utf8';
- var retried;
- while (true) {
- switch (enc) {
- case 'utf8':
- case 'utf-8':
- return 'utf8';
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return 'utf16le';
- case 'latin1':
- case 'binary':
- return 'latin1';
- case 'base64':
- case 'ascii':
- case 'hex':
- return enc;
- default:
- if (retried) return; // undefined
- enc = ('' + enc).toLowerCase();
- retried = true;
- }
- }
- };
- // Do not cache `Buffer.isEncoding` when checking encoding names as some
- // modules monkey-patch it to support additional encodings
- function normalizeEncoding(enc) {
- var nenc = _normalizeEncoding(enc);
- if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
- return nenc || enc;
- }
- // StringDecoder provides an interface for efficiently splitting a series of
- // buffers into a series of JS strings without breaking apart multi-byte
- // characters.
- exports.StringDecoder = StringDecoder;
- function StringDecoder(encoding) {
- this.encoding = normalizeEncoding(encoding);
- var nb;
- switch (this.encoding) {
- case 'utf16le':
- this.text = utf16Text;
- this.end = utf16End;
- nb = 4;
- break;
- case 'utf8':
- this.fillLast = utf8FillLast;
- nb = 4;
- break;
- case 'base64':
- this.text = base64Text;
- this.end = base64End;
- nb = 3;
- break;
- default:
- this.write = simpleWrite;
- this.end = simpleEnd;
- return;
- }
- this.lastNeed = 0;
- this.lastTotal = 0;
- this.lastChar = Buffer.allocUnsafe(nb);
- }
- StringDecoder.prototype.write = function (buf) {
- if (buf.length === 0) return '';
- var r;
- var i;
- if (this.lastNeed) {
- r = this.fillLast(buf);
- if (r === undefined) return '';
- i = this.lastNeed;
- this.lastNeed = 0;
- } else {
- i = 0;
- }
- if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
- return r || '';
- };
- StringDecoder.prototype.end = utf8End;
- // Returns only complete characters in a Buffer
- StringDecoder.prototype.text = utf8Text;
- // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
- StringDecoder.prototype.fillLast = function (buf) {
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
- this.lastNeed -= buf.length;
- };
- // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
- // continuation byte.
- function utf8CheckByte(byte) {
- if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
- return -1;
- }
- // Checks at most 3 bytes at the end of a Buffer in order to detect an
- // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
- // needed to complete the UTF-8 character (if applicable) are returned.
- function utf8CheckIncomplete(self, buf, i) {
- var j = buf.length - 1;
- if (j < i) return 0;
- var nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 1;
- return nb;
- }
- if (--j < i) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 2;
- return nb;
- }
- if (--j < i) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) {
- if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
- }
- return nb;
- }
- return 0;
- }
- // Validates as many continuation bytes for a multi-byte UTF-8 character as
- // needed or are available. If we see a non-continuation byte where we expect
- // one, we "replace" the validated continuation bytes we've seen so far with
- // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
- // behavior. The continuation byte check is included three times in the case
- // where all of the continuation bytes for a character exist in the same buffer.
- // It is also done this way as a slight performance increase instead of using a
- // loop.
- function utf8CheckExtraBytes(self, buf, p) {
- if ((buf[0] & 0xC0) !== 0x80) {
- self.lastNeed = 0;
- return '\ufffd'.repeat(p);
- }
- if (self.lastNeed > 1 && buf.length > 1) {
- if ((buf[1] & 0xC0) !== 0x80) {
- self.lastNeed = 1;
- return '\ufffd'.repeat(p + 1);
- }
- if (self.lastNeed > 2 && buf.length > 2) {
- if ((buf[2] & 0xC0) !== 0x80) {
- self.lastNeed = 2;
- return '\ufffd'.repeat(p + 2);
- }
- }
- }
- }
- // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
- function utf8FillLast(buf) {
- var p = this.lastTotal - this.lastNeed;
- var r = utf8CheckExtraBytes(this, buf, p);
- if (r !== undefined) return r;
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, p, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, p, 0, buf.length);
- this.lastNeed -= buf.length;
- }
- // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
- // partial character, the character's bytes are buffered until the required
- // number of bytes are available.
- function utf8Text(buf, i) {
- var total = utf8CheckIncomplete(this, buf, i);
- if (!this.lastNeed) return buf.toString('utf8', i);
- this.lastTotal = total;
- var end = buf.length - (total - this.lastNeed);
- buf.copy(this.lastChar, 0, end);
- return buf.toString('utf8', i, end);
- }
- // For UTF-8, a replacement character for each buffered byte of a (partial)
- // character needs to be added to the output.
- function utf8End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
- return r;
- }
- // UTF-16LE typically needs two bytes per character, but even if we have an even
- // number of bytes available, we need to check if we end on a leading/high
- // surrogate. In that case, we need to wait for the next two bytes in order to
- // decode the last character properly.
- function utf16Text(buf, i) {
- if ((buf.length - i) % 2 === 0) {
- var r = buf.toString('utf16le', i);
- if (r) {
- var c = r.charCodeAt(r.length - 1);
- if (c >= 0xD800 && c <= 0xDBFF) {
- this.lastNeed = 2;
- this.lastTotal = 4;
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- return r.slice(0, -1);
- }
- }
- return r;
- }
- this.lastNeed = 1;
- this.lastTotal = 2;
- this.lastChar[0] = buf[buf.length - 1];
- return buf.toString('utf16le', i, buf.length - 1);
- }
- // For UTF-16LE we do not explicitly append special replacement characters if we
- // end on a partial character, we simply let v8 handle that.
- function utf16End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) {
- var end = this.lastTotal - this.lastNeed;
- return r + this.lastChar.toString('utf16le', 0, end);
- }
- return r;
- }
- function base64Text(buf, i) {
- var n = (buf.length - i) % 3;
- if (n === 0) return buf.toString('base64', i);
- this.lastNeed = 3 - n;
- this.lastTotal = 3;
- if (n === 1) {
- this.lastChar[0] = buf[buf.length - 1];
- } else {
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- }
- return buf.toString('base64', i, buf.length - n);
- }
- function base64End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
- return r;
- }
- // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
- function simpleWrite(buf) {
- return buf.toString(this.encoding);
- }
- function simpleEnd(buf) {
- return buf && buf.length ? this.write(buf) : '';
- }
- },{"safe-buffer":178}],180:[function(require,module,exports){
- (function (Buffer){
- var toString = Object.prototype.toString
- var isModern = (
- typeof Buffer.alloc === 'function' &&
- typeof Buffer.allocUnsafe === 'function' &&
- typeof Buffer.from === 'function'
- )
- function isArrayBuffer (input) {
- return toString.call(input).slice(8, -1) === 'ArrayBuffer'
- }
- function fromArrayBuffer (obj, byteOffset, length) {
- byteOffset >>>= 0
- var maxLength = obj.byteLength - byteOffset
- if (maxLength < 0) {
- throw new RangeError("'offset' is out of bounds")
- }
- if (length === undefined) {
- length = maxLength
- } else {
- length >>>= 0
- if (length > maxLength) {
- throw new RangeError("'length' is out of bounds")
- }
- }
- return isModern
- ? Buffer.from(obj.slice(byteOffset, byteOffset + length))
- : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))
- }
- function fromString (string, encoding) {
- if (typeof encoding !== 'string' || encoding === '') {
- encoding = 'utf8'
- }
- if (!Buffer.isEncoding(encoding)) {
- throw new TypeError('"encoding" must be a valid string encoding')
- }
- return isModern
- ? Buffer.from(string, encoding)
- : new Buffer(string, encoding)
- }
- function bufferFrom (value, encodingOrOffset, length) {
- if (typeof value === 'number') {
- throw new TypeError('"value" argument must not be a number')
- }
- if (isArrayBuffer(value)) {
- return fromArrayBuffer(value, encodingOrOffset, length)
- }
- if (typeof value === 'string') {
- return fromString(value, encodingOrOffset)
- }
- return isModern
- ? Buffer.from(value)
- : new Buffer(value)
- }
- module.exports = bufferFrom
- }).call(this,require("buffer").Buffer)
- },{"buffer":182}],181:[function(require,module,exports){
- (function (Buffer){
- module.exports = function xor (a, b) {
- var length = Math.min(a.length, b.length)
- var buffer = new Buffer(length)
- for (var i = 0; i < length; ++i) {
- buffer[i] = a[i] ^ b[i]
- }
- return buffer
- }
- }).call(this,require("buffer").Buffer)
- },{"buffer":182}],182:[function(require,module,exports){
- (function (Buffer){
- /*!
- * The buffer module from node.js, for the browser.
- *
- * @author Feross Aboukhadijeh <https://feross.org>
- * @license MIT
- */
- /* eslint-disable no-proto */
- 'use strict'
- var base64 = require('base64-js')
- var ieee754 = require('ieee754')
- var customInspectSymbol =
- (typeof Symbol === 'function' && typeof Symbol.for === 'function')
- ? Symbol.for('nodejs.util.inspect.custom')
- : null
- exports.Buffer = Buffer
- exports.SlowBuffer = SlowBuffer
- exports.INSPECT_MAX_BYTES = 50
- var K_MAX_LENGTH = 0x7fffffff
- exports.kMaxLength = K_MAX_LENGTH
- /**
- * If `Buffer.TYPED_ARRAY_SUPPORT`:
- * === true Use Uint8Array implementation (fastest)
- * === false Print warning and recommend using `buffer` v4.x which has an Object
- * implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * We report that the browser does not support typed arrays if the are not subclassable
- * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
- * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
- * for __proto__ and has a buggy typed array implementation.
- */
- Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
- if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
- typeof console.error === 'function') {
- console.error(
- 'This browser lacks typed array (Uint8Array) support which is required by ' +
- '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
- )
- }
- function typedArraySupport () {
- // Can typed array instances can be augmented?
- try {
- var arr = new Uint8Array(1)
- var proto = { foo: function () { return 42 } }
- Object.setPrototypeOf(proto, Uint8Array.prototype)
- Object.setPrototypeOf(arr, proto)
- return arr.foo() === 42
- } catch (e) {
- return false
- }
- }
- Object.defineProperty(Buffer.prototype, 'parent', {
- enumerable: true,
- get: function () {
- if (!Buffer.isBuffer(this)) return undefined
- return this.buffer
- }
- })
- Object.defineProperty(Buffer.prototype, 'offset', {
- enumerable: true,
- get: function () {
- if (!Buffer.isBuffer(this)) return undefined
- return this.byteOffset
- }
- })
- function createBuffer (length) {
- if (length > K_MAX_LENGTH) {
- throw new RangeError('The value "' + length + '" is invalid for option "size"')
- }
- // Return an augmented `Uint8Array` instance
- var buf = new Uint8Array(length)
- Object.setPrototypeOf(buf, Buffer.prototype)
- return buf
- }
- /**
- * The Buffer constructor returns instances of `Uint8Array` that have their
- * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
- * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
- * and the `Uint8Array` methods. Square bracket notation works as expected -- it
- * returns a single octet.
- *
- * The `Uint8Array` prototype remains unmodified.
- */
- function Buffer (arg, encodingOrOffset, length) {
- // Common case.
- if (typeof arg === 'number') {
- if (typeof encodingOrOffset === 'string') {
- throw new TypeError(
- 'The "string" argument must be of type string. Received type number'
- )
- }
- return allocUnsafe(arg)
- }
- return from(arg, encodingOrOffset, length)
- }
- // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
- if (typeof Symbol !== 'undefined' && Symbol.species != null &&
- Buffer[Symbol.species] === Buffer) {
- Object.defineProperty(Buffer, Symbol.species, {
- value: null,
- configurable: true,
- enumerable: false,
- writable: false
- })
- }
- Buffer.poolSize = 8192 // not used by this implementation
- function from (value, encodingOrOffset, length) {
- if (typeof value === 'string') {
- return fromString(value, encodingOrOffset)
- }
- if (ArrayBuffer.isView(value)) {
- return fromArrayLike(value)
- }
- if (value == null) {
- throw new TypeError(
- 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
- 'or Array-like Object. Received type ' + (typeof value)
- )
- }
- if (isInstance(value, ArrayBuffer) ||
- (value && isInstance(value.buffer, ArrayBuffer))) {
- return fromArrayBuffer(value, encodingOrOffset, length)
- }
- if (typeof value === 'number') {
- throw new TypeError(
- 'The "value" argument must not be of type number. Received type number'
- )
- }
- var valueOf = value.valueOf && value.valueOf()
- if (valueOf != null && valueOf !== value) {
- return Buffer.from(valueOf, encodingOrOffset, length)
- }
- var b = fromObject(value)
- if (b) return b
- if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
- typeof value[Symbol.toPrimitive] === 'function') {
- return Buffer.from(
- value[Symbol.toPrimitive]('string'), encodingOrOffset, length
- )
- }
- throw new TypeError(
- 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
- 'or Array-like Object. Received type ' + (typeof value)
- )
- }
- /**
- * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
- * if value is a number.
- * Buffer.from(str[, encoding])
- * Buffer.from(array)
- * Buffer.from(buffer)
- * Buffer.from(arrayBuffer[, byteOffset[, length]])
- **/
- Buffer.from = function (value, encodingOrOffset, length) {
- return from(value, encodingOrOffset, length)
- }
- // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
- // https://github.com/feross/buffer/pull/148
- Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)
- Object.setPrototypeOf(Buffer, Uint8Array)
- function assertSize (size) {
- if (typeof size !== 'number') {
- throw new TypeError('"size" argument must be of type number')
- } else if (size < 0) {
- throw new RangeError('The value "' + size + '" is invalid for option "size"')
- }
- }
- function alloc (size, fill, encoding) {
- assertSize(size)
- if (size <= 0) {
- return createBuffer(size)
- }
- if (fill !== undefined) {
- // Only pay attention to encoding if it's a string. This
- // prevents accidentally sending in a number that would
- // be interpretted as a start offset.
- return typeof encoding === 'string'
- ? createBuffer(size).fill(fill, encoding)
- : createBuffer(size).fill(fill)
- }
- return createBuffer(size)
- }
- /**
- * Creates a new filled Buffer instance.
- * alloc(size[, fill[, encoding]])
- **/
- Buffer.alloc = function (size, fill, encoding) {
- return alloc(size, fill, encoding)
- }
- function allocUnsafe (size) {
- assertSize(size)
- return createBuffer(size < 0 ? 0 : checked(size) | 0)
- }
- /**
- * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
- * */
- Buffer.allocUnsafe = function (size) {
- return allocUnsafe(size)
- }
- /**
- * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
- */
- Buffer.allocUnsafeSlow = function (size) {
- return allocUnsafe(size)
- }
- function fromString (string, encoding) {
- if (typeof encoding !== 'string' || encoding === '') {
- encoding = 'utf8'
- }
- if (!Buffer.isEncoding(encoding)) {
- throw new TypeError('Unknown encoding: ' + encoding)
- }
- var length = byteLength(string, encoding) | 0
- var buf = createBuffer(length)
- var actual = buf.write(string, encoding)
- if (actual !== length) {
- // Writing a hex string, for example, that contains invalid characters will
- // cause everything after the first invalid character to be ignored. (e.g.
- // 'abxxcd' will be treated as 'ab')
- buf = buf.slice(0, actual)
- }
- return buf
- }
- function fromArrayLike (array) {
- var length = array.length < 0 ? 0 : checked(array.length) | 0
- var buf = createBuffer(length)
- for (var i = 0; i < length; i += 1) {
- buf[i] = array[i] & 255
- }
- return buf
- }
- function fromArrayBuffer (array, byteOffset, length) {
- if (byteOffset < 0 || array.byteLength < byteOffset) {
- throw new RangeError('"offset" is outside of buffer bounds')
- }
- if (array.byteLength < byteOffset + (length || 0)) {
- throw new RangeError('"length" is outside of buffer bounds')
- }
- var buf
- if (byteOffset === undefined && length === undefined) {
- buf = new Uint8Array(array)
- } else if (length === undefined) {
- buf = new Uint8Array(array, byteOffset)
- } else {
- buf = new Uint8Array(array, byteOffset, length)
- }
- // Return an augmented `Uint8Array` instance
- Object.setPrototypeOf(buf, Buffer.prototype)
- return buf
- }
- function fromObject (obj) {
- if (Buffer.isBuffer(obj)) {
- var len = checked(obj.length) | 0
- var buf = createBuffer(len)
- if (buf.length === 0) {
- return buf
- }
- obj.copy(buf, 0, 0, len)
- return buf
- }
- if (obj.length !== undefined) {
- if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
- return createBuffer(0)
- }
- return fromArrayLike(obj)
- }
- if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
- return fromArrayLike(obj.data)
- }
- }
- function checked (length) {
- // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
- // length is NaN (which is otherwise coerced to zero.)
- if (length >= K_MAX_LENGTH) {
- throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
- 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
- }
- return length | 0
- }
- function SlowBuffer (length) {
- if (+length != length) { // eslint-disable-line eqeqeq
- length = 0
- }
- return Buffer.alloc(+length)
- }
- Buffer.isBuffer = function isBuffer (b) {
- return b != null && b._isBuffer === true &&
- b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
- }
- Buffer.compare = function compare (a, b) {
- if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
- if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
- if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
- throw new TypeError(
- 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
- )
- }
- if (a === b) return 0
- var x = a.length
- var y = b.length
- for (var i = 0, len = Math.min(x, y); i < len; ++i) {
- if (a[i] !== b[i]) {
- x = a[i]
- y = b[i]
- break
- }
- }
- if (x < y) return -1
- if (y < x) return 1
- return 0
- }
- Buffer.isEncoding = function isEncoding (encoding) {
- switch (String(encoding).toLowerCase()) {
- case 'hex':
- case 'utf8':
- case 'utf-8':
- case 'ascii':
- case 'latin1':
- case 'binary':
- case 'base64':
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return true
- default:
- return false
- }
- }
- Buffer.concat = function concat (list, length) {
- if (!Array.isArray(list)) {
- throw new TypeError('"list" argument must be an Array of Buffers')
- }
- if (list.length === 0) {
- return Buffer.alloc(0)
- }
- var i
- if (length === undefined) {
- length = 0
- for (i = 0; i < list.length; ++i) {
- length += list[i].length
- }
- }
- var buffer = Buffer.allocUnsafe(length)
- var pos = 0
- for (i = 0; i < list.length; ++i) {
- var buf = list[i]
- if (isInstance(buf, Uint8Array)) {
- buf = Buffer.from(buf)
- }
- if (!Buffer.isBuffer(buf)) {
- throw new TypeError('"list" argument must be an Array of Buffers')
- }
- buf.copy(buffer, pos)
- pos += buf.length
- }
- return buffer
- }
- function byteLength (string, encoding) {
- if (Buffer.isBuffer(string)) {
- return string.length
- }
- if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
- return string.byteLength
- }
- if (typeof string !== 'string') {
- throw new TypeError(
- 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
- 'Received type ' + typeof string
- )
- }
- var len = string.length
- var mustMatch = (arguments.length > 2 && arguments[2] === true)
- if (!mustMatch && len === 0) return 0
- // Use a for loop to avoid recursion
- var loweredCase = false
- for (;;) {
- switch (encoding) {
- case 'ascii':
- case 'latin1':
- case 'binary':
- return len
- case 'utf8':
- case 'utf-8':
- return utf8ToBytes(string).length
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return len * 2
- case 'hex':
- return len >>> 1
- case 'base64':
- return base64ToBytes(string).length
- default:
- if (loweredCase) {
- return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
- }
- encoding = ('' + encoding).toLowerCase()
- loweredCase = true
- }
- }
- }
- Buffer.byteLength = byteLength
- function slowToString (encoding, start, end) {
- var loweredCase = false
- // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
- // property of a typed array.
- // This behaves neither like String nor Uint8Array in that we set start/end
- // to their upper/lower bounds if the value passed is out of range.
- // undefined is handled specially as per ECMA-262 6th Edition,
- // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
- if (start === undefined || start < 0) {
- start = 0
- }
- // Return early if start > this.length. Done here to prevent potential uint32
- // coercion fail below.
- if (start > this.length) {
- return ''
- }
- if (end === undefined || end > this.length) {
- end = this.length
- }
- if (end <= 0) {
- return ''
- }
- // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
- end >>>= 0
- start >>>= 0
- if (end <= start) {
- return ''
- }
- if (!encoding) encoding = 'utf8'
- while (true) {
- switch (encoding) {
- case 'hex':
- return hexSlice(this, start, end)
- case 'utf8':
- case 'utf-8':
- return utf8Slice(this, start, end)
- case 'ascii':
- return asciiSlice(this, start, end)
- case 'latin1':
- case 'binary':
- return latin1Slice(this, start, end)
- case 'base64':
- return base64Slice(this, start, end)
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return utf16leSlice(this, start, end)
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
- encoding = (encoding + '').toLowerCase()
- loweredCase = true
- }
- }
- }
- // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
- // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
- // reliably in a browserify context because there could be multiple different
- // copies of the 'buffer' package in use. This method works even for Buffer
- // instances that were created from another copy of the `buffer` package.
- // See: https://github.com/feross/buffer/issues/154
- Buffer.prototype._isBuffer = true
- function swap (b, n, m) {
- var i = b[n]
- b[n] = b[m]
- b[m] = i
- }
- Buffer.prototype.swap16 = function swap16 () {
- var len = this.length
- if (len % 2 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 16-bits')
- }
- for (var i = 0; i < len; i += 2) {
- swap(this, i, i + 1)
- }
- return this
- }
- Buffer.prototype.swap32 = function swap32 () {
- var len = this.length
- if (len % 4 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 32-bits')
- }
- for (var i = 0; i < len; i += 4) {
- swap(this, i, i + 3)
- swap(this, i + 1, i + 2)
- }
- return this
- }
- Buffer.prototype.swap64 = function swap64 () {
- var len = this.length
- if (len % 8 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 64-bits')
- }
- for (var i = 0; i < len; i += 8) {
- swap(this, i, i + 7)
- swap(this, i + 1, i + 6)
- swap(this, i + 2, i + 5)
- swap(this, i + 3, i + 4)
- }
- return this
- }
- Buffer.prototype.toString = function toString () {
- var length = this.length
- if (length === 0) return ''
- if (arguments.length === 0) return utf8Slice(this, 0, length)
- return slowToString.apply(this, arguments)
- }
- Buffer.prototype.toLocaleString = Buffer.prototype.toString
- Buffer.prototype.equals = function equals (b) {
- if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
- if (this === b) return true
- return Buffer.compare(this, b) === 0
- }
- Buffer.prototype.inspect = function inspect () {
- var str = ''
- var max = exports.INSPECT_MAX_BYTES
- str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
- if (this.length > max) str += ' ... '
- return '<Buffer ' + str + '>'
- }
- if (customInspectSymbol) {
- Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect
- }
- Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
- if (isInstance(target, Uint8Array)) {
- target = Buffer.from(target, target.offset, target.byteLength)
- }
- if (!Buffer.isBuffer(target)) {
- throw new TypeError(
- 'The "target" argument must be one of type Buffer or Uint8Array. ' +
- 'Received type ' + (typeof target)
- )
- }
- if (start === undefined) {
- start = 0
- }
- if (end === undefined) {
- end = target ? target.length : 0
- }
- if (thisStart === undefined) {
- thisStart = 0
- }
- if (thisEnd === undefined) {
- thisEnd = this.length
- }
- if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
- throw new RangeError('out of range index')
- }
- if (thisStart >= thisEnd && start >= end) {
- return 0
- }
- if (thisStart >= thisEnd) {
- return -1
- }
- if (start >= end) {
- return 1
- }
- start >>>= 0
- end >>>= 0
- thisStart >>>= 0
- thisEnd >>>= 0
- if (this === target) return 0
- var x = thisEnd - thisStart
- var y = end - start
- var len = Math.min(x, y)
- var thisCopy = this.slice(thisStart, thisEnd)
- var targetCopy = target.slice(start, end)
- for (var i = 0; i < len; ++i) {
- if (thisCopy[i] !== targetCopy[i]) {
- x = thisCopy[i]
- y = targetCopy[i]
- break
- }
- }
- if (x < y) return -1
- if (y < x) return 1
- return 0
- }
- // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
- // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
- //
- // Arguments:
- // - buffer - a Buffer to search
- // - val - a string, Buffer, or number
- // - byteOffset - an index into `buffer`; will be clamped to an int32
- // - encoding - an optional encoding, relevant is val is a string
- // - dir - true for indexOf, false for lastIndexOf
- function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
- // Empty buffer means no match
- if (buffer.length === 0) return -1
- // Normalize byteOffset
- if (typeof byteOffset === 'string') {
- encoding = byteOffset
- byteOffset = 0
- } else if (byteOffset > 0x7fffffff) {
- byteOffset = 0x7fffffff
- } else if (byteOffset < -0x80000000) {
- byteOffset = -0x80000000
- }
- byteOffset = +byteOffset // Coerce to Number.
- if (numberIsNaN(byteOffset)) {
- // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
- byteOffset = dir ? 0 : (buffer.length - 1)
- }
- // Normalize byteOffset: negative offsets start from the end of the buffer
- if (byteOffset < 0) byteOffset = buffer.length + byteOffset
- if (byteOffset >= buffer.length) {
- if (dir) return -1
- else byteOffset = buffer.length - 1
- } else if (byteOffset < 0) {
- if (dir) byteOffset = 0
- else return -1
- }
- // Normalize val
- if (typeof val === 'string') {
- val = Buffer.from(val, encoding)
- }
- // Finally, search either indexOf (if dir is true) or lastIndexOf
- if (Buffer.isBuffer(val)) {
- // Special case: looking for empty string/buffer always fails
- if (val.length === 0) {
- return -1
- }
- return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
- } else if (typeof val === 'number') {
- val = val & 0xFF // Search for a byte value [0-255]
- if (typeof Uint8Array.prototype.indexOf === 'function') {
- if (dir) {
- return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
- } else {
- return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
- }
- }
- return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)
- }
- throw new TypeError('val must be string, number or Buffer')
- }
- function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
- var indexSize = 1
- var arrLength = arr.length
- var valLength = val.length
- if (encoding !== undefined) {
- encoding = String(encoding).toLowerCase()
- if (encoding === 'ucs2' || encoding === 'ucs-2' ||
- encoding === 'utf16le' || encoding === 'utf-16le') {
- if (arr.length < 2 || val.length < 2) {
- return -1
- }
- indexSize = 2
- arrLength /= 2
- valLength /= 2
- byteOffset /= 2
- }
- }
- function read (buf, i) {
- if (indexSize === 1) {
- return buf[i]
- } else {
- return buf.readUInt16BE(i * indexSize)
- }
- }
- var i
- if (dir) {
- var foundIndex = -1
- for (i = byteOffset; i < arrLength; i++) {
- if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
- if (foundIndex === -1) foundIndex = i
- if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
- } else {
- if (foundIndex !== -1) i -= i - foundIndex
- foundIndex = -1
- }
- }
- } else {
- if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
- for (i = byteOffset; i >= 0; i--) {
- var found = true
- for (var j = 0; j < valLength; j++) {
- if (read(arr, i + j) !== read(val, j)) {
- found = false
- break
- }
- }
- if (found) return i
- }
- }
- return -1
- }
- Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
- return this.indexOf(val, byteOffset, encoding) !== -1
- }
- Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
- }
- Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
- }
- function hexWrite (buf, string, offset, length) {
- offset = Number(offset) || 0
- var remaining = buf.length - offset
- if (!length) {
- length = remaining
- } else {
- length = Number(length)
- if (length > remaining) {
- length = remaining
- }
- }
- var strLen = string.length
- if (length > strLen / 2) {
- length = strLen / 2
- }
- for (var i = 0; i < length; ++i) {
- var parsed = parseInt(string.substr(i * 2, 2), 16)
- if (numberIsNaN(parsed)) return i
- buf[offset + i] = parsed
- }
- return i
- }
- function utf8Write (buf, string, offset, length) {
- return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
- }
- function asciiWrite (buf, string, offset, length) {
- return blitBuffer(asciiToBytes(string), buf, offset, length)
- }
- function latin1Write (buf, string, offset, length) {
- return asciiWrite(buf, string, offset, length)
- }
- function base64Write (buf, string, offset, length) {
- return blitBuffer(base64ToBytes(string), buf, offset, length)
- }
- function ucs2Write (buf, string, offset, length) {
- return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
- }
- Buffer.prototype.write = function write (string, offset, length, encoding) {
- // Buffer#write(string)
- if (offset === undefined) {
- encoding = 'utf8'
- length = this.length
- offset = 0
- // Buffer#write(string, encoding)
- } else if (length === undefined && typeof offset === 'string') {
- encoding = offset
- length = this.length
- offset = 0
- // Buffer#write(string, offset[, length][, encoding])
- } else if (isFinite(offset)) {
- offset = offset >>> 0
- if (isFinite(length)) {
- length = length >>> 0
- if (encoding === undefined) encoding = 'utf8'
- } else {
- encoding = length
- length = undefined
- }
- } else {
- throw new Error(
- 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
- )
- }
- var remaining = this.length - offset
- if (length === undefined || length > remaining) length = remaining
- if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
- throw new RangeError('Attempt to write outside buffer bounds')
- }
- if (!encoding) encoding = 'utf8'
- var loweredCase = false
- for (;;) {
- switch (encoding) {
- case 'hex':
- return hexWrite(this, string, offset, length)
- case 'utf8':
- case 'utf-8':
- return utf8Write(this, string, offset, length)
- case 'ascii':
- return asciiWrite(this, string, offset, length)
- case 'latin1':
- case 'binary':
- return latin1Write(this, string, offset, length)
- case 'base64':
- // Warning: maxLength not taken into account in base64Write
- return base64Write(this, string, offset, length)
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return ucs2Write(this, string, offset, length)
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
- encoding = ('' + encoding).toLowerCase()
- loweredCase = true
- }
- }
- }
- Buffer.prototype.toJSON = function toJSON () {
- return {
- type: 'Buffer',
- data: Array.prototype.slice.call(this._arr || this, 0)
- }
- }
- function base64Slice (buf, start, end) {
- if (start === 0 && end === buf.length) {
- return base64.fromByteArray(buf)
- } else {
- return base64.fromByteArray(buf.slice(start, end))
- }
- }
- function utf8Slice (buf, start, end) {
- end = Math.min(buf.length, end)
- var res = []
- var i = start
- while (i < end) {
- var firstByte = buf[i]
- var codePoint = null
- var bytesPerSequence = (firstByte > 0xEF) ? 4
- : (firstByte > 0xDF) ? 3
- : (firstByte > 0xBF) ? 2
- : 1
- if (i + bytesPerSequence <= end) {
- var secondByte, thirdByte, fourthByte, tempCodePoint
- switch (bytesPerSequence) {
- case 1:
- if (firstByte < 0x80) {
- codePoint = firstByte
- }
- break
- case 2:
- secondByte = buf[i + 1]
- if ((secondByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
- if (tempCodePoint > 0x7F) {
- codePoint = tempCodePoint
- }
- }
- break
- case 3:
- secondByte = buf[i + 1]
- thirdByte = buf[i + 2]
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
- if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
- codePoint = tempCodePoint
- }
- }
- break
- case 4:
- secondByte = buf[i + 1]
- thirdByte = buf[i + 2]
- fourthByte = buf[i + 3]
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
- if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
- codePoint = tempCodePoint
- }
- }
- }
- }
- if (codePoint === null) {
- // we did not generate a valid codePoint so insert a
- // replacement char (U+FFFD) and advance only 1 byte
- codePoint = 0xFFFD
- bytesPerSequence = 1
- } else if (codePoint > 0xFFFF) {
- // encode to utf16 (surrogate pair dance)
- codePoint -= 0x10000
- res.push(codePoint >>> 10 & 0x3FF | 0xD800)
- codePoint = 0xDC00 | codePoint & 0x3FF
- }
- res.push(codePoint)
- i += bytesPerSequence
- }
- return decodeCodePointsArray(res)
- }
- // Based on http://stackoverflow.com/a/22747272/680742, the browser with
- // the lowest limit is Chrome, with 0x10000 args.
- // We go 1 magnitude less, for safety
- var MAX_ARGUMENTS_LENGTH = 0x1000
- function decodeCodePointsArray (codePoints) {
- var len = codePoints.length
- if (len <= MAX_ARGUMENTS_LENGTH) {
- return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
- }
- // Decode in chunks to avoid "call stack size exceeded".
- var res = ''
- var i = 0
- while (i < len) {
- res += String.fromCharCode.apply(
- String,
- codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
- )
- }
- return res
- }
- function asciiSlice (buf, start, end) {
- var ret = ''
- end = Math.min(buf.length, end)
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i] & 0x7F)
- }
- return ret
- }
- function latin1Slice (buf, start, end) {
- var ret = ''
- end = Math.min(buf.length, end)
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i])
- }
- return ret
- }
- function hexSlice (buf, start, end) {
- var len = buf.length
- if (!start || start < 0) start = 0
- if (!end || end < 0 || end > len) end = len
- var out = ''
- for (var i = start; i < end; ++i) {
- out += hexSliceLookupTable[buf[i]]
- }
- return out
- }
- function utf16leSlice (buf, start, end) {
- var bytes = buf.slice(start, end)
- var res = ''
- for (var i = 0; i < bytes.length; i += 2) {
- res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
- }
- return res
- }
- Buffer.prototype.slice = function slice (start, end) {
- var len = this.length
- start = ~~start
- end = end === undefined ? len : ~~end
- if (start < 0) {
- start += len
- if (start < 0) start = 0
- } else if (start > len) {
- start = len
- }
- if (end < 0) {
- end += len
- if (end < 0) end = 0
- } else if (end > len) {
- end = len
- }
- if (end < start) end = start
- var newBuf = this.subarray(start, end)
- // Return an augmented `Uint8Array` instance
- Object.setPrototypeOf(newBuf, Buffer.prototype)
- return newBuf
- }
- /*
- * Need to make sure that buffer isn't trying to write out of bounds.
- */
- function checkOffset (offset, ext, length) {
- if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
- if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
- }
- Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
- var val = this[offset]
- var mul = 1
- var i = 0
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul
- }
- return val
- }
- Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) {
- checkOffset(offset, byteLength, this.length)
- }
- var val = this[offset + --byteLength]
- var mul = 1
- while (byteLength > 0 && (mul *= 0x100)) {
- val += this[offset + --byteLength] * mul
- }
- return val
- }
- Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 1, this.length)
- return this[offset]
- }
- Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 2, this.length)
- return this[offset] | (this[offset + 1] << 8)
- }
- Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 2, this.length)
- return (this[offset] << 8) | this[offset + 1]
- }
- Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
- return ((this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16)) +
- (this[offset + 3] * 0x1000000)
- }
- Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
- return (this[offset] * 0x1000000) +
- ((this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- this[offset + 3])
- }
- Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
- var val = this[offset]
- var mul = 1
- var i = 0
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul
- }
- mul *= 0x80
- if (val >= mul) val -= Math.pow(2, 8 * byteLength)
- return val
- }
- Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
- var i = byteLength
- var mul = 1
- var val = this[offset + --i]
- while (i > 0 && (mul *= 0x100)) {
- val += this[offset + --i] * mul
- }
- mul *= 0x80
- if (val >= mul) val -= Math.pow(2, 8 * byteLength)
- return val
- }
- Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 1, this.length)
- if (!(this[offset] & 0x80)) return (this[offset])
- return ((0xff - this[offset] + 1) * -1)
- }
- Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 2, this.length)
- var val = this[offset] | (this[offset + 1] << 8)
- return (val & 0x8000) ? val | 0xFFFF0000 : val
- }
- Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 2, this.length)
- var val = this[offset + 1] | (this[offset] << 8)
- return (val & 0x8000) ? val | 0xFFFF0000 : val
- }
- Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
- return (this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16) |
- (this[offset + 3] << 24)
- }
- Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
- return (this[offset] << 24) |
- (this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- (this[offset + 3])
- }
- Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
- return ieee754.read(this, offset, true, 23, 4)
- }
- Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
- return ieee754.read(this, offset, false, 23, 4)
- }
- Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 8, this.length)
- return ieee754.read(this, offset, true, 52, 8)
- }
- Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 8, this.length)
- return ieee754.read(this, offset, false, 52, 8)
- }
- function checkInt (buf, value, offset, ext, max, min) {
- if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
- if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
- if (offset + ext > buf.length) throw new RangeError('Index out of range')
- }
- Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1
- checkInt(this, value, offset, byteLength, maxBytes, 0)
- }
- var mul = 1
- var i = 0
- this[offset] = value & 0xFF
- while (++i < byteLength && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF
- }
- return offset + byteLength
- }
- Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1
- checkInt(this, value, offset, byteLength, maxBytes, 0)
- }
- var i = byteLength - 1
- var mul = 1
- this[offset + i] = value & 0xFF
- while (--i >= 0 && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF
- }
- return offset + byteLength
- }
- Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
- this[offset] = (value & 0xff)
- return offset + 1
- }
- Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- return offset + 2
- }
- Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
- this[offset] = (value >>> 8)
- this[offset + 1] = (value & 0xff)
- return offset + 2
- }
- Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
- this[offset + 3] = (value >>> 24)
- this[offset + 2] = (value >>> 16)
- this[offset + 1] = (value >>> 8)
- this[offset] = (value & 0xff)
- return offset + 4
- }
- Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
- this[offset] = (value >>> 24)
- this[offset + 1] = (value >>> 16)
- this[offset + 2] = (value >>> 8)
- this[offset + 3] = (value & 0xff)
- return offset + 4
- }
- Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) {
- var limit = Math.pow(2, (8 * byteLength) - 1)
- checkInt(this, value, offset, byteLength, limit - 1, -limit)
- }
- var i = 0
- var mul = 1
- var sub = 0
- this[offset] = value & 0xFF
- while (++i < byteLength && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
- sub = 1
- }
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
- }
- return offset + byteLength
- }
- Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) {
- var limit = Math.pow(2, (8 * byteLength) - 1)
- checkInt(this, value, offset, byteLength, limit - 1, -limit)
- }
- var i = byteLength - 1
- var mul = 1
- var sub = 0
- this[offset + i] = value & 0xFF
- while (--i >= 0 && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
- sub = 1
- }
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
- }
- return offset + byteLength
- }
- Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
- if (value < 0) value = 0xff + value + 1
- this[offset] = (value & 0xff)
- return offset + 1
- }
- Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- return offset + 2
- }
- Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
- this[offset] = (value >>> 8)
- this[offset + 1] = (value & 0xff)
- return offset + 2
- }
- Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- this[offset + 2] = (value >>> 16)
- this[offset + 3] = (value >>> 24)
- return offset + 4
- }
- Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
- if (value < 0) value = 0xffffffff + value + 1
- this[offset] = (value >>> 24)
- this[offset + 1] = (value >>> 16)
- this[offset + 2] = (value >>> 8)
- this[offset + 3] = (value & 0xff)
- return offset + 4
- }
- function checkIEEE754 (buf, value, offset, ext, max, min) {
- if (offset + ext > buf.length) throw new RangeError('Index out of range')
- if (offset < 0) throw new RangeError('Index out of range')
- }
- function writeFloat (buf, value, offset, littleEndian, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
- }
- ieee754.write(buf, value, offset, littleEndian, 23, 4)
- return offset + 4
- }
- Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
- return writeFloat(this, value, offset, true, noAssert)
- }
- Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
- return writeFloat(this, value, offset, false, noAssert)
- }
- function writeDouble (buf, value, offset, littleEndian, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
- }
- ieee754.write(buf, value, offset, littleEndian, 52, 8)
- return offset + 8
- }
- Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
- return writeDouble(this, value, offset, true, noAssert)
- }
- Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
- return writeDouble(this, value, offset, false, noAssert)
- }
- // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
- Buffer.prototype.copy = function copy (target, targetStart, start, end) {
- if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
- if (!start) start = 0
- if (!end && end !== 0) end = this.length
- if (targetStart >= target.length) targetStart = target.length
- if (!targetStart) targetStart = 0
- if (end > 0 && end < start) end = start
- // Copy 0 bytes; we're done
- if (end === start) return 0
- if (target.length === 0 || this.length === 0) return 0
- // Fatal error conditions
- if (targetStart < 0) {
- throw new RangeError('targetStart out of bounds')
- }
- if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
- if (end < 0) throw new RangeError('sourceEnd out of bounds')
- // Are we oob?
- if (end > this.length) end = this.length
- if (target.length - targetStart < end - start) {
- end = target.length - targetStart + start
- }
- var len = end - start
- if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
- // Use built-in when available, missing from IE11
- this.copyWithin(targetStart, start, end)
- } else if (this === target && start < targetStart && targetStart < end) {
- // descending copy from end
- for (var i = len - 1; i >= 0; --i) {
- target[i + targetStart] = this[i + start]
- }
- } else {
- Uint8Array.prototype.set.call(
- target,
- this.subarray(start, end),
- targetStart
- )
- }
- return len
- }
- // Usage:
- // buffer.fill(number[, offset[, end]])
- // buffer.fill(buffer[, offset[, end]])
- // buffer.fill(string[, offset[, end]][, encoding])
- Buffer.prototype.fill = function fill (val, start, end, encoding) {
- // Handle string cases:
- if (typeof val === 'string') {
- if (typeof start === 'string') {
- encoding = start
- start = 0
- end = this.length
- } else if (typeof end === 'string') {
- encoding = end
- end = this.length
- }
- if (encoding !== undefined && typeof encoding !== 'string') {
- throw new TypeError('encoding must be a string')
- }
- if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
- throw new TypeError('Unknown encoding: ' + encoding)
- }
- if (val.length === 1) {
- var code = val.charCodeAt(0)
- if ((encoding === 'utf8' && code < 128) ||
- encoding === 'latin1') {
- // Fast path: If `val` fits into a single byte, use that numeric value.
- val = code
- }
- }
- } else if (typeof val === 'number') {
- val = val & 255
- } else if (typeof val === 'boolean') {
- val = Number(val)
- }
- // Invalid ranges are not set to a default, so can range check early.
- if (start < 0 || this.length < start || this.length < end) {
- throw new RangeError('Out of range index')
- }
- if (end <= start) {
- return this
- }
- start = start >>> 0
- end = end === undefined ? this.length : end >>> 0
- if (!val) val = 0
- var i
- if (typeof val === 'number') {
- for (i = start; i < end; ++i) {
- this[i] = val
- }
- } else {
- var bytes = Buffer.isBuffer(val)
- ? val
- : Buffer.from(val, encoding)
- var len = bytes.length
- if (len === 0) {
- throw new TypeError('The value "' + val +
- '" is invalid for argument "value"')
- }
- for (i = 0; i < end - start; ++i) {
- this[i + start] = bytes[i % len]
- }
- }
- return this
- }
- // HELPER FUNCTIONS
- // ================
- var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
- function base64clean (str) {
- // Node takes equal signs as end of the Base64 encoding
- str = str.split('=')[0]
- // Node strips out invalid characters like \n and \t from the string, base64-js does not
- str = str.trim().replace(INVALID_BASE64_RE, '')
- // Node converts strings with length < 2 to ''
- if (str.length < 2) return ''
- // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
- while (str.length % 4 !== 0) {
- str = str + '='
- }
- return str
- }
- function utf8ToBytes (string, units) {
- units = units || Infinity
- var codePoint
- var length = string.length
- var leadSurrogate = null
- var bytes = []
- for (var i = 0; i < length; ++i) {
- codePoint = string.charCodeAt(i)
- // is surrogate component
- if (codePoint > 0xD7FF && codePoint < 0xE000) {
- // last char was a lead
- if (!leadSurrogate) {
- // no lead yet
- if (codePoint > 0xDBFF) {
- // unexpected trail
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- continue
- } else if (i + 1 === length) {
- // unpaired lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- continue
- }
- // valid lead
- leadSurrogate = codePoint
- continue
- }
- // 2 leads in a row
- if (codePoint < 0xDC00) {
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- leadSurrogate = codePoint
- continue
- }
- // valid surrogate pair
- codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
- } else if (leadSurrogate) {
- // valid bmp char, but last char was a lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- }
- leadSurrogate = null
- // encode utf8
- if (codePoint < 0x80) {
- if ((units -= 1) < 0) break
- bytes.push(codePoint)
- } else if (codePoint < 0x800) {
- if ((units -= 2) < 0) break
- bytes.push(
- codePoint >> 0x6 | 0xC0,
- codePoint & 0x3F | 0x80
- )
- } else if (codePoint < 0x10000) {
- if ((units -= 3) < 0) break
- bytes.push(
- codePoint >> 0xC | 0xE0,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- )
- } else if (codePoint < 0x110000) {
- if ((units -= 4) < 0) break
- bytes.push(
- codePoint >> 0x12 | 0xF0,
- codePoint >> 0xC & 0x3F | 0x80,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- )
- } else {
- throw new Error('Invalid code point')
- }
- }
- return bytes
- }
- function asciiToBytes (str) {
- var byteArray = []
- for (var i = 0; i < str.length; ++i) {
- // Node's code seems to be doing this and not & 0x7F..
- byteArray.push(str.charCodeAt(i) & 0xFF)
- }
- return byteArray
- }
- function utf16leToBytes (str, units) {
- var c, hi, lo
- var byteArray = []
- for (var i = 0; i < str.length; ++i) {
- if ((units -= 2) < 0) break
- c = str.charCodeAt(i)
- hi = c >> 8
- lo = c % 256
- byteArray.push(lo)
- byteArray.push(hi)
- }
- return byteArray
- }
- function base64ToBytes (str) {
- return base64.toByteArray(base64clean(str))
- }
- function blitBuffer (src, dst, offset, length) {
- for (var i = 0; i < length; ++i) {
- if ((i + offset >= dst.length) || (i >= src.length)) break
- dst[i + offset] = src[i]
- }
- return i
- }
- // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
- // the `instanceof` check but they should be treated as of that type.
- // See: https://github.com/feross/buffer/issues/166
- function isInstance (obj, type) {
- return obj instanceof type ||
- (obj != null && obj.constructor != null && obj.constructor.name != null &&
- obj.constructor.name === type.name)
- }
- function numberIsNaN (obj) {
- // For IE11 support
- return obj !== obj // eslint-disable-line no-self-compare
- }
- // Create lookup table for `toString('hex')`
- // See: https://github.com/feross/buffer/issues/219
- var hexSliceLookupTable = (function () {
- var alphabet = '0123456789abcdef'
- var table = new Array(256)
- for (var i = 0; i < 16; ++i) {
- var i16 = i * 16
- for (var j = 0; j < 16; ++j) {
- table[i16 + j] = alphabet[i] + alphabet[j]
- }
- }
- return table
- })()
- }).call(this,require("buffer").Buffer)
- },{"base64-js":146,"buffer":182,"ieee754":241}],183:[function(require,module,exports){
- module.exports = {
- "100": "Continue",
- "101": "Switching Protocols",
- "102": "Processing",
- "200": "OK",
- "201": "Created",
- "202": "Accepted",
- "203": "Non-Authoritative Information",
- "204": "No Content",
- "205": "Reset Content",
- "206": "Partial Content",
- "207": "Multi-Status",
- "208": "Already Reported",
- "226": "IM Used",
- "300": "Multiple Choices",
- "301": "Moved Permanently",
- "302": "Found",
- "303": "See Other",
- "304": "Not Modified",
- "305": "Use Proxy",
- "307": "Temporary Redirect",
- "308": "Permanent Redirect",
- "400": "Bad Request",
- "401": "Unauthorized",
- "402": "Payment Required",
- "403": "Forbidden",
- "404": "Not Found",
- "405": "Method Not Allowed",
- "406": "Not Acceptable",
- "407": "Proxy Authentication Required",
- "408": "Request Timeout",
- "409": "Conflict",
- "410": "Gone",
- "411": "Length Required",
- "412": "Precondition Failed",
- "413": "Payload Too Large",
- "414": "URI Too Long",
- "415": "Unsupported Media Type",
- "416": "Range Not Satisfiable",
- "417": "Expectation Failed",
- "418": "I'm a teapot",
- "421": "Misdirected Request",
- "422": "Unprocessable Entity",
- "423": "Locked",
- "424": "Failed Dependency",
- "425": "Unordered Collection",
- "426": "Upgrade Required",
- "428": "Precondition Required",
- "429": "Too Many Requests",
- "431": "Request Header Fields Too Large",
- "451": "Unavailable For Legal Reasons",
- "500": "Internal Server Error",
- "501": "Not Implemented",
- "502": "Bad Gateway",
- "503": "Service Unavailable",
- "504": "Gateway Timeout",
- "505": "HTTP Version Not Supported",
- "506": "Variant Also Negotiates",
- "507": "Insufficient Storage",
- "508": "Loop Detected",
- "509": "Bandwidth Limit Exceeded",
- "510": "Not Extended",
- "511": "Network Authentication Required"
- }
- },{}],184:[function(require,module,exports){
- var Buffer = require('safe-buffer').Buffer
- var Transform = require('stream').Transform
- var StringDecoder = require('string_decoder').StringDecoder
- var inherits = require('inherits')
- function CipherBase (hashMode) {
- Transform.call(this)
- this.hashMode = typeof hashMode === 'string'
- if (this.hashMode) {
- this[hashMode] = this._finalOrDigest
- } else {
- this.final = this._finalOrDigest
- }
- if (this._final) {
- this.__final = this._final
- this._final = null
- }
- this._decoder = null
- this._encoding = null
- }
- inherits(CipherBase, Transform)
- CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
- if (typeof data === 'string') {
- data = Buffer.from(data, inputEnc)
- }
- var outData = this._update(data)
- if (this.hashMode) return this
- if (outputEnc) {
- outData = this._toString(outData, outputEnc)
- }
- return outData
- }
- CipherBase.prototype.setAutoPadding = function () {}
- CipherBase.prototype.getAuthTag = function () {
- throw new Error('trying to get auth tag in unsupported state')
- }
- CipherBase.prototype.setAuthTag = function () {
- throw new Error('trying to set auth tag in unsupported state')
- }
- CipherBase.prototype.setAAD = function () {
- throw new Error('trying to set aad in unsupported state')
- }
- CipherBase.prototype._transform = function (data, _, next) {
- var err
- try {
- if (this.hashMode) {
- this._update(data)
- } else {
- this.push(this._update(data))
- }
- } catch (e) {
- err = e
- } finally {
- next(err)
- }
- }
- CipherBase.prototype._flush = function (done) {
- var err
- try {
- this.push(this.__final())
- } catch (e) {
- err = e
- }
- done(err)
- }
- CipherBase.prototype._finalOrDigest = function (outputEnc) {
- var outData = this.__final() || Buffer.alloc(0)
- if (outputEnc) {
- outData = this._toString(outData, outputEnc, true)
- }
- return outData
- }
- CipherBase.prototype._toString = function (value, enc, fin) {
- if (!this._decoder) {
- this._decoder = new StringDecoder(enc)
- this._encoding = enc
- }
- if (this._encoding !== enc) throw new Error('can\'t switch encodings')
- var out = this._decoder.write(value)
- if (fin) {
- out += this._decoder.end()
- }
- return out
- }
- module.exports = CipherBase
- },{"inherits":262,"safe-buffer":318,"stream":328,"string_decoder":179}],185:[function(require,module,exports){
- (function (Buffer){
- var Writable = require('readable-stream').Writable
- var inherits = require('inherits')
- var bufferFrom = require('buffer-from')
- if (typeof Uint8Array === 'undefined') {
- var U8 = require('typedarray').Uint8Array
- } else {
- var U8 = Uint8Array
- }
- function ConcatStream(opts, cb) {
- if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)
- if (typeof opts === 'function') {
- cb = opts
- opts = {}
- }
- if (!opts) opts = {}
- var encoding = opts.encoding
- var shouldInferEncoding = false
- if (!encoding) {
- shouldInferEncoding = true
- } else {
- encoding = String(encoding).toLowerCase()
- if (encoding === 'u8' || encoding === 'uint8') {
- encoding = 'uint8array'
- }
- }
- Writable.call(this, { objectMode: true })
- this.encoding = encoding
- this.shouldInferEncoding = shouldInferEncoding
- if (cb) this.on('finish', function () { cb(this.getBody()) })
- this.body = []
- }
- module.exports = ConcatStream
- inherits(ConcatStream, Writable)
- ConcatStream.prototype._write = function(chunk, enc, next) {
- this.body.push(chunk)
- next()
- }
- ConcatStream.prototype.inferEncoding = function (buff) {
- var firstBuffer = buff === undefined ? this.body[0] : buff;
- if (Buffer.isBuffer(firstBuffer)) return 'buffer'
- if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'
- if (Array.isArray(firstBuffer)) return 'array'
- if (typeof firstBuffer === 'string') return 'string'
- if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object'
- return 'buffer'
- }
- ConcatStream.prototype.getBody = function () {
- if (!this.encoding && this.body.length === 0) return []
- if (this.shouldInferEncoding) this.encoding = this.inferEncoding()
- if (this.encoding === 'array') return arrayConcat(this.body)
- if (this.encoding === 'string') return stringConcat(this.body)
- if (this.encoding === 'buffer') return bufferConcat(this.body)
- if (this.encoding === 'uint8array') return u8Concat(this.body)
- return this.body
- }
- var isArray = Array.isArray || function (arr) {
- return Object.prototype.toString.call(arr) == '[object Array]'
- }
- function isArrayish (arr) {
- return /Array\]$/.test(Object.prototype.toString.call(arr))
- }
- function isBufferish (p) {
- return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function')
- }
- function stringConcat (parts) {
- var strings = []
- var needsToString = false
- for (var i = 0; i < parts.length; i++) {
- var p = parts[i]
- if (typeof p === 'string') {
- strings.push(p)
- } else if (Buffer.isBuffer(p)) {
- strings.push(p)
- } else if (isBufferish(p)) {
- strings.push(bufferFrom(p))
- } else {
- strings.push(bufferFrom(String(p)))
- }
- }
- if (Buffer.isBuffer(parts[0])) {
- strings = Buffer.concat(strings)
- strings = strings.toString('utf8')
- } else {
- strings = strings.join('')
- }
- return strings
- }
- function bufferConcat (parts) {
- var bufs = []
- for (var i = 0; i < parts.length; i++) {
- var p = parts[i]
- if (Buffer.isBuffer(p)) {
- bufs.push(p)
- } else if (isBufferish(p)) {
- bufs.push(bufferFrom(p))
- } else {
- bufs.push(bufferFrom(String(p)))
- }
- }
- return Buffer.concat(bufs)
- }
- function arrayConcat (parts) {
- var res = []
- for (var i = 0; i < parts.length; i++) {
- res.push.apply(res, parts[i])
- }
- return res
- }
- function u8Concat (parts) {
- var len = 0
- for (var i = 0; i < parts.length; i++) {
- if (typeof parts[i] === 'string') {
- parts[i] = bufferFrom(parts[i])
- }
- len += parts[i].length
- }
- var u8 = new U8(len)
- for (var i = 0, offset = 0; i < parts.length; i++) {
- var part = parts[i]
- for (var j = 0; j < part.length; j++) {
- u8[offset++] = part[j]
- }
- }
- return u8
- }
- }).call(this,require("buffer").Buffer)
- },{"buffer":182,"buffer-from":180,"inherits":262,"readable-stream":312,"typedarray":337}],186:[function(require,module,exports){
- (function (Buffer){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // NOTE: These type checking functions intentionally don't use `instanceof`
- // because it is fragile and can be easily faked with `Object.create()`.
- function isArray(arg) {
- if (Array.isArray) {
- return Array.isArray(arg);
- }
- return objectToString(arg) === '[object Array]';
- }
- exports.isArray = isArray;
- function isBoolean(arg) {
- return typeof arg === 'boolean';
- }
- exports.isBoolean = isBoolean;
- function isNull(arg) {
- return arg === null;
- }
- exports.isNull = isNull;
- function isNullOrUndefined(arg) {
- return arg == null;
- }
- exports.isNullOrUndefined = isNullOrUndefined;
- function isNumber(arg) {
- return typeof arg === 'number';
- }
- exports.isNumber = isNumber;
- function isString(arg) {
- return typeof arg === 'string';
- }
- exports.isString = isString;
- function isSymbol(arg) {
- return typeof arg === 'symbol';
- }
- exports.isSymbol = isSymbol;
- function isUndefined(arg) {
- return arg === void 0;
- }
- exports.isUndefined = isUndefined;
- function isRegExp(re) {
- return objectToString(re) === '[object RegExp]';
- }
- exports.isRegExp = isRegExp;
- function isObject(arg) {
- return typeof arg === 'object' && arg !== null;
- }
- exports.isObject = isObject;
- function isDate(d) {
- return objectToString(d) === '[object Date]';
- }
- exports.isDate = isDate;
- function isError(e) {
- return (objectToString(e) === '[object Error]' || e instanceof Error);
- }
- exports.isError = isError;
- function isFunction(arg) {
- return typeof arg === 'function';
- }
- exports.isFunction = isFunction;
- function isPrimitive(arg) {
- return arg === null ||
- typeof arg === 'boolean' ||
- typeof arg === 'number' ||
- typeof arg === 'string' ||
- typeof arg === 'symbol' || // ES6 symbol
- typeof arg === 'undefined';
- }
- exports.isPrimitive = isPrimitive;
- exports.isBuffer = Buffer.isBuffer;
- function objectToString(o) {
- return Object.prototype.toString.call(o);
- }
- }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
- },{"../../is-buffer/index.js":263}],187:[function(require,module,exports){
- (function (Buffer){
- var elliptic = require('elliptic')
- var BN = require('bn.js')
- module.exports = function createECDH (curve) {
- return new ECDH(curve)
- }
- var aliases = {
- secp256k1: {
- name: 'secp256k1',
- byteLength: 32
- },
- secp224r1: {
- name: 'p224',
- byteLength: 28
- },
- prime256v1: {
- name: 'p256',
- byteLength: 32
- },
- prime192v1: {
- name: 'p192',
- byteLength: 24
- },
- ed25519: {
- name: 'ed25519',
- byteLength: 32
- },
- secp384r1: {
- name: 'p384',
- byteLength: 48
- },
- secp521r1: {
- name: 'p521',
- byteLength: 66
- }
- }
- aliases.p224 = aliases.secp224r1
- aliases.p256 = aliases.secp256r1 = aliases.prime256v1
- aliases.p192 = aliases.secp192r1 = aliases.prime192v1
- aliases.p384 = aliases.secp384r1
- aliases.p521 = aliases.secp521r1
- function ECDH (curve) {
- this.curveType = aliases[curve]
- if (!this.curveType) {
- this.curveType = {
- name: curve
- }
- }
- this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap
- this.keys = void 0
- }
- ECDH.prototype.generateKeys = function (enc, format) {
- this.keys = this.curve.genKeyPair()
- return this.getPublicKey(enc, format)
- }
- ECDH.prototype.computeSecret = function (other, inenc, enc) {
- inenc = inenc || 'utf8'
- if (!Buffer.isBuffer(other)) {
- other = new Buffer(other, inenc)
- }
- var otherPub = this.curve.keyFromPublic(other).getPublic()
- var out = otherPub.mul(this.keys.getPrivate()).getX()
- return formatReturnValue(out, enc, this.curveType.byteLength)
- }
- ECDH.prototype.getPublicKey = function (enc, format) {
- var key = this.keys.getPublic(format === 'compressed', true)
- if (format === 'hybrid') {
- if (key[key.length - 1] % 2) {
- key[0] = 7
- } else {
- key[0] = 6
- }
- }
- return formatReturnValue(key, enc)
- }
- ECDH.prototype.getPrivateKey = function (enc) {
- return formatReturnValue(this.keys.getPrivate(), enc)
- }
- ECDH.prototype.setPublicKey = function (pub, enc) {
- enc = enc || 'utf8'
- if (!Buffer.isBuffer(pub)) {
- pub = new Buffer(pub, enc)
- }
- this.keys._importPublic(pub)
- return this
- }
- ECDH.prototype.setPrivateKey = function (priv, enc) {
- enc = enc || 'utf8'
- if (!Buffer.isBuffer(priv)) {
- priv = new Buffer(priv, enc)
- }
- var _priv = new BN(priv)
- _priv = _priv.toString(16)
- this.keys = this.curve.genKeyPair()
- this.keys._importPrivate(_priv)
- return this
- }
- function formatReturnValue (bn, enc, len) {
- if (!Array.isArray(bn)) {
- bn = bn.toArray()
- }
- var buf = new Buffer(bn)
- if (len && buf.length < len) {
- var zeros = new Buffer(len - buf.length)
- zeros.fill(0)
- buf = Buffer.concat([zeros, buf])
- }
- if (!enc) {
- return buf
- } else {
- return buf.toString(enc)
- }
- }
- }).call(this,require("buffer").Buffer)
- },{"bn.js":147,"buffer":182,"elliptic":205}],188:[function(require,module,exports){
- 'use strict'
- var inherits = require('inherits')
- var MD5 = require('md5.js')
- var RIPEMD160 = require('ripemd160')
- var sha = require('sha.js')
- var Base = require('cipher-base')
- function Hash (hash) {
- Base.call(this, 'digest')
- this._hash = hash
- }
- inherits(Hash, Base)
- Hash.prototype._update = function (data) {
- this._hash.update(data)
- }
- Hash.prototype._final = function () {
- return this._hash.digest()
- }
- module.exports = function createHash (alg) {
- alg = alg.toLowerCase()
- if (alg === 'md5') return new MD5()
- if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()
- return new Hash(sha(alg))
- }
- },{"cipher-base":184,"inherits":262,"md5.js":266,"ripemd160":317,"sha.js":320}],189:[function(require,module,exports){
- var MD5 = require('md5.js')
- module.exports = function (buffer) {
- return new MD5().update(buffer).digest()
- }
- },{"md5.js":266}],190:[function(require,module,exports){
- 'use strict'
- var inherits = require('inherits')
- var Legacy = require('./legacy')
- var Base = require('cipher-base')
- var Buffer = require('safe-buffer').Buffer
- var md5 = require('create-hash/md5')
- var RIPEMD160 = require('ripemd160')
- var sha = require('sha.js')
- var ZEROS = Buffer.alloc(128)
- function Hmac (alg, key) {
- Base.call(this, 'digest')
- if (typeof key === 'string') {
- key = Buffer.from(key)
- }
- var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
- this._alg = alg
- this._key = key
- if (key.length > blocksize) {
- var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
- key = hash.update(key).digest()
- } else if (key.length < blocksize) {
- key = Buffer.concat([key, ZEROS], blocksize)
- }
- var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
- var opad = this._opad = Buffer.allocUnsafe(blocksize)
- for (var i = 0; i < blocksize; i++) {
- ipad[i] = key[i] ^ 0x36
- opad[i] = key[i] ^ 0x5C
- }
- this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
- this._hash.update(ipad)
- }
- inherits(Hmac, Base)
- Hmac.prototype._update = function (data) {
- this._hash.update(data)
- }
- Hmac.prototype._final = function () {
- var h = this._hash.digest()
- var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
- return hash.update(this._opad).update(h).digest()
- }
- module.exports = function createHmac (alg, key) {
- alg = alg.toLowerCase()
- if (alg === 'rmd160' || alg === 'ripemd160') {
- return new Hmac('rmd160', key)
- }
- if (alg === 'md5') {
- return new Legacy(md5, key)
- }
- return new Hmac(alg, key)
- }
- },{"./legacy":191,"cipher-base":184,"create-hash/md5":189,"inherits":262,"ripemd160":317,"safe-buffer":318,"sha.js":320}],191:[function(require,module,exports){
- 'use strict'
- var inherits = require('inherits')
- var Buffer = require('safe-buffer').Buffer
- var Base = require('cipher-base')
- var ZEROS = Buffer.alloc(128)
- var blocksize = 64
- function Hmac (alg, key) {
- Base.call(this, 'digest')
- if (typeof key === 'string') {
- key = Buffer.from(key)
- }
- this._alg = alg
- this._key = key
- if (key.length > blocksize) {
- key = alg(key)
- } else if (key.length < blocksize) {
- key = Buffer.concat([key, ZEROS], blocksize)
- }
- var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
- var opad = this._opad = Buffer.allocUnsafe(blocksize)
- for (var i = 0; i < blocksize; i++) {
- ipad[i] = key[i] ^ 0x36
- opad[i] = key[i] ^ 0x5C
- }
- this._hash = [ipad]
- }
- inherits(Hmac, Base)
- Hmac.prototype._update = function (data) {
- this._hash.push(data)
- }
- Hmac.prototype._final = function () {
- var h = this._alg(Buffer.concat(this._hash))
- return this._alg(Buffer.concat([this._opad, h]))
- }
- module.exports = Hmac
- },{"cipher-base":184,"inherits":262,"safe-buffer":318}],192:[function(require,module,exports){
- 'use strict'
- exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')
- exports.createHash = exports.Hash = require('create-hash')
- exports.createHmac = exports.Hmac = require('create-hmac')
- var algos = require('browserify-sign/algos')
- var algoKeys = Object.keys(algos)
- var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)
- exports.getHashes = function () {
- return hashes
- }
- var p = require('pbkdf2')
- exports.pbkdf2 = p.pbkdf2
- exports.pbkdf2Sync = p.pbkdf2Sync
- var aes = require('browserify-cipher')
- exports.Cipher = aes.Cipher
- exports.createCipher = aes.createCipher
- exports.Cipheriv = aes.Cipheriv
- exports.createCipheriv = aes.createCipheriv
- exports.Decipher = aes.Decipher
- exports.createDecipher = aes.createDecipher
- exports.Decipheriv = aes.Decipheriv
- exports.createDecipheriv = aes.createDecipheriv
- exports.getCiphers = aes.getCiphers
- exports.listCiphers = aes.listCiphers
- var dh = require('diffie-hellman')
- exports.DiffieHellmanGroup = dh.DiffieHellmanGroup
- exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup
- exports.getDiffieHellman = dh.getDiffieHellman
- exports.createDiffieHellman = dh.createDiffieHellman
- exports.DiffieHellman = dh.DiffieHellman
- var sign = require('browserify-sign')
- exports.createSign = sign.createSign
- exports.Sign = sign.Sign
- exports.createVerify = sign.createVerify
- exports.Verify = sign.Verify
- exports.createECDH = require('create-ecdh')
- var publicEncrypt = require('public-encrypt')
- exports.publicEncrypt = publicEncrypt.publicEncrypt
- exports.privateEncrypt = publicEncrypt.privateEncrypt
- exports.publicDecrypt = publicEncrypt.publicDecrypt
- exports.privateDecrypt = publicEncrypt.privateDecrypt
- // the least I can do is make error messages for the rest of the node.js/crypto api.
- // ;[
- // 'createCredentials'
- // ].forEach(function (name) {
- // exports[name] = function () {
- // throw new Error([
- // 'sorry, ' + name + ' is not implemented yet',
- // 'we accept pull requests',
- // 'https://github.com/crypto-browserify/crypto-browserify'
- // ].join('\n'))
- // }
- // })
- var rf = require('randomfill')
- exports.randomFill = rf.randomFill
- exports.randomFillSync = rf.randomFillSync
- exports.createCredentials = function () {
- throw new Error([
- 'sorry, createCredentials is not implemented yet',
- 'we accept pull requests',
- 'https://github.com/crypto-browserify/crypto-browserify'
- ].join('\n'))
- }
- exports.constants = {
- 'DH_CHECK_P_NOT_SAFE_PRIME': 2,
- 'DH_CHECK_P_NOT_PRIME': 1,
- 'DH_UNABLE_TO_CHECK_GENERATOR': 4,
- 'DH_NOT_SUITABLE_GENERATOR': 8,
- 'NPN_ENABLED': 1,
- 'ALPN_ENABLED': 1,
- 'RSA_PKCS1_PADDING': 1,
- 'RSA_SSLV23_PADDING': 2,
- 'RSA_NO_PADDING': 3,
- 'RSA_PKCS1_OAEP_PADDING': 4,
- 'RSA_X931_PADDING': 5,
- 'RSA_PKCS1_PSS_PADDING': 6,
- 'POINT_CONVERSION_COMPRESSED': 2,
- 'POINT_CONVERSION_UNCOMPRESSED': 4,
- 'POINT_CONVERSION_HYBRID': 6
- }
- },{"browserify-cipher":167,"browserify-sign":174,"browserify-sign/algos":171,"create-ecdh":187,"create-hash":188,"create-hmac":190,"diffie-hellman":201,"pbkdf2":278,"public-encrypt":286,"randombytes":298,"randomfill":299}],193:[function(require,module,exports){
- // https://d3js.org/d3-array/ v1.2.4 Copyright 2018 Mike Bostock
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (factory((global.d3 = global.d3 || {})));
- }(this, (function (exports) { 'use strict';
- function ascending(a, b) {
- return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
- }
- function bisector(compare) {
- if (compare.length === 1) compare = ascendingComparator(compare);
- return {
- left: function(a, x, lo, hi) {
- if (lo == null) lo = 0;
- if (hi == null) hi = a.length;
- while (lo < hi) {
- var mid = lo + hi >>> 1;
- if (compare(a[mid], x) < 0) lo = mid + 1;
- else hi = mid;
- }
- return lo;
- },
- right: function(a, x, lo, hi) {
- if (lo == null) lo = 0;
- if (hi == null) hi = a.length;
- while (lo < hi) {
- var mid = lo + hi >>> 1;
- if (compare(a[mid], x) > 0) hi = mid;
- else lo = mid + 1;
- }
- return lo;
- }
- };
- }
- function ascendingComparator(f) {
- return function(d, x) {
- return ascending(f(d), x);
- };
- }
- var ascendingBisect = bisector(ascending);
- var bisectRight = ascendingBisect.right;
- var bisectLeft = ascendingBisect.left;
- function pairs(array, f) {
- if (f == null) f = pair;
- var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
- while (i < n) pairs[i] = f(p, p = array[++i]);
- return pairs;
- }
- function pair(a, b) {
- return [a, b];
- }
- function cross(values0, values1, reduce) {
- var n0 = values0.length,
- n1 = values1.length,
- values = new Array(n0 * n1),
- i0,
- i1,
- i,
- value0;
- if (reduce == null) reduce = pair;
- for (i0 = i = 0; i0 < n0; ++i0) {
- for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {
- values[i] = reduce(value0, values1[i1]);
- }
- }
- return values;
- }
- function descending(a, b) {
- return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
- }
- function number(x) {
- return x === null ? NaN : +x;
- }
- function variance(values, valueof) {
- var n = values.length,
- m = 0,
- i = -1,
- mean = 0,
- value,
- delta,
- sum = 0;
- if (valueof == null) {
- while (++i < n) {
- if (!isNaN(value = number(values[i]))) {
- delta = value - mean;
- mean += delta / ++m;
- sum += delta * (value - mean);
- }
- }
- }
- else {
- while (++i < n) {
- if (!isNaN(value = number(valueof(values[i], i, values)))) {
- delta = value - mean;
- mean += delta / ++m;
- sum += delta * (value - mean);
- }
- }
- }
- if (m > 1) return sum / (m - 1);
- }
- function deviation(array, f) {
- var v = variance(array, f);
- return v ? Math.sqrt(v) : v;
- }
- function extent(values, valueof) {
- var n = values.length,
- i = -1,
- value,
- min,
- max;
- if (valueof == null) {
- while (++i < n) { // Find the first comparable value.
- if ((value = values[i]) != null && value >= value) {
- min = max = value;
- while (++i < n) { // Compare the remaining values.
- if ((value = values[i]) != null) {
- if (min > value) min = value;
- if (max < value) max = value;
- }
- }
- }
- }
- }
- else {
- while (++i < n) { // Find the first comparable value.
- if ((value = valueof(values[i], i, values)) != null && value >= value) {
- min = max = value;
- while (++i < n) { // Compare the remaining values.
- if ((value = valueof(values[i], i, values)) != null) {
- if (min > value) min = value;
- if (max < value) max = value;
- }
- }
- }
- }
- }
- return [min, max];
- }
- var array = Array.prototype;
- var slice = array.slice;
- var map = array.map;
- function constant(x) {
- return function() {
- return x;
- };
- }
- function identity(x) {
- return x;
- }
- function range(start, stop, step) {
- start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
- var i = -1,
- n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
- range = new Array(n);
- while (++i < n) {
- range[i] = start + i * step;
- }
- return range;
- }
- var e10 = Math.sqrt(50),
- e5 = Math.sqrt(10),
- e2 = Math.sqrt(2);
- function ticks(start, stop, count) {
- var reverse,
- i = -1,
- n,
- ticks,
- step;
- stop = +stop, start = +start, count = +count;
- if (start === stop && count > 0) return [start];
- if (reverse = stop < start) n = start, start = stop, stop = n;
- if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];
- if (step > 0) {
- start = Math.ceil(start / step);
- stop = Math.floor(stop / step);
- ticks = new Array(n = Math.ceil(stop - start + 1));
- while (++i < n) ticks[i] = (start + i) * step;
- } else {
- start = Math.floor(start * step);
- stop = Math.ceil(stop * step);
- ticks = new Array(n = Math.ceil(start - stop + 1));
- while (++i < n) ticks[i] = (start - i) / step;
- }
- if (reverse) ticks.reverse();
- return ticks;
- }
- function tickIncrement(start, stop, count) {
- var step = (stop - start) / Math.max(0, count),
- power = Math.floor(Math.log(step) / Math.LN10),
- error = step / Math.pow(10, power);
- return power >= 0
- ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
- : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
- }
- function tickStep(start, stop, count) {
- var step0 = Math.abs(stop - start) / Math.max(0, count),
- step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
- error = step0 / step1;
- if (error >= e10) step1 *= 10;
- else if (error >= e5) step1 *= 5;
- else if (error >= e2) step1 *= 2;
- return stop < start ? -step1 : step1;
- }
- function sturges(values) {
- return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
- }
- function histogram() {
- var value = identity,
- domain = extent,
- threshold = sturges;
- function histogram(data) {
- var i,
- n = data.length,
- x,
- values = new Array(n);
- for (i = 0; i < n; ++i) {
- values[i] = value(data[i], i, data);
- }
- var xz = domain(values),
- x0 = xz[0],
- x1 = xz[1],
- tz = threshold(values, x0, x1);
- // Convert number of thresholds into uniform thresholds.
- if (!Array.isArray(tz)) {
- tz = tickStep(x0, x1, tz);
- tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive
- }
- // Remove any thresholds outside the domain.
- var m = tz.length;
- while (tz[0] <= x0) tz.shift(), --m;
- while (tz[m - 1] > x1) tz.pop(), --m;
- var bins = new Array(m + 1),
- bin;
- // Initialize bins.
- for (i = 0; i <= m; ++i) {
- bin = bins[i] = [];
- bin.x0 = i > 0 ? tz[i - 1] : x0;
- bin.x1 = i < m ? tz[i] : x1;
- }
- // Assign data to bins by value, ignoring any outside the domain.
- for (i = 0; i < n; ++i) {
- x = values[i];
- if (x0 <= x && x <= x1) {
- bins[bisectRight(tz, x, 0, m)].push(data[i]);
- }
- }
- return bins;
- }
- histogram.value = function(_) {
- return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
- };
- histogram.domain = function(_) {
- return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
- };
- histogram.thresholds = function(_) {
- return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;
- };
- return histogram;
- }
- function quantile(values, p, valueof) {
- if (valueof == null) valueof = number;
- if (!(n = values.length)) return;
- if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);
- if (p >= 1) return +valueof(values[n - 1], n - 1, values);
- var n,
- i = (n - 1) * p,
- i0 = Math.floor(i),
- value0 = +valueof(values[i0], i0, values),
- value1 = +valueof(values[i0 + 1], i0 + 1, values);
- return value0 + (value1 - value0) * (i - i0);
- }
- function freedmanDiaconis(values, min, max) {
- values = map.call(values, number).sort(ascending);
- return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));
- }
- function scott(values, min, max) {
- return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
- }
- function max(values, valueof) {
- var n = values.length,
- i = -1,
- value,
- max;
- if (valueof == null) {
- while (++i < n) { // Find the first comparable value.
- if ((value = values[i]) != null && value >= value) {
- max = value;
- while (++i < n) { // Compare the remaining values.
- if ((value = values[i]) != null && value > max) {
- max = value;
- }
- }
- }
- }
- }
- else {
- while (++i < n) { // Find the first comparable value.
- if ((value = valueof(values[i], i, values)) != null && value >= value) {
- max = value;
- while (++i < n) { // Compare the remaining values.
- if ((value = valueof(values[i], i, values)) != null && value > max) {
- max = value;
- }
- }
- }
- }
- }
- return max;
- }
- function mean(values, valueof) {
- var n = values.length,
- m = n,
- i = -1,
- value,
- sum = 0;
- if (valueof == null) {
- while (++i < n) {
- if (!isNaN(value = number(values[i]))) sum += value;
- else --m;
- }
- }
- else {
- while (++i < n) {
- if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;
- else --m;
- }
- }
- if (m) return sum / m;
- }
- function median(values, valueof) {
- var n = values.length,
- i = -1,
- value,
- numbers = [];
- if (valueof == null) {
- while (++i < n) {
- if (!isNaN(value = number(values[i]))) {
- numbers.push(value);
- }
- }
- }
- else {
- while (++i < n) {
- if (!isNaN(value = number(valueof(values[i], i, values)))) {
- numbers.push(value);
- }
- }
- }
- return quantile(numbers.sort(ascending), 0.5);
- }
- function merge(arrays) {
- var n = arrays.length,
- m,
- i = -1,
- j = 0,
- merged,
- array;
- while (++i < n) j += arrays[i].length;
- merged = new Array(j);
- while (--n >= 0) {
- array = arrays[n];
- m = array.length;
- while (--m >= 0) {
- merged[--j] = array[m];
- }
- }
- return merged;
- }
- function min(values, valueof) {
- var n = values.length,
- i = -1,
- value,
- min;
- if (valueof == null) {
- while (++i < n) { // Find the first comparable value.
- if ((value = values[i]) != null && value >= value) {
- min = value;
- while (++i < n) { // Compare the remaining values.
- if ((value = values[i]) != null && min > value) {
- min = value;
- }
- }
- }
- }
- }
- else {
- while (++i < n) { // Find the first comparable value.
- if ((value = valueof(values[i], i, values)) != null && value >= value) {
- min = value;
- while (++i < n) { // Compare the remaining values.
- if ((value = valueof(values[i], i, values)) != null && min > value) {
- min = value;
- }
- }
- }
- }
- }
- return min;
- }
- function permute(array, indexes) {
- var i = indexes.length, permutes = new Array(i);
- while (i--) permutes[i] = array[indexes[i]];
- return permutes;
- }
- function scan(values, compare) {
- if (!(n = values.length)) return;
- var n,
- i = 0,
- j = 0,
- xi,
- xj = values[j];
- if (compare == null) compare = ascending;
- while (++i < n) {
- if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {
- xj = xi, j = i;
- }
- }
- if (compare(xj, xj) === 0) return j;
- }
- function shuffle(array, i0, i1) {
- var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
- t,
- i;
- while (m) {
- i = Math.random() * m-- | 0;
- t = array[m + i0];
- array[m + i0] = array[i + i0];
- array[i + i0] = t;
- }
- return array;
- }
- function sum(values, valueof) {
- var n = values.length,
- i = -1,
- value,
- sum = 0;
- if (valueof == null) {
- while (++i < n) {
- if (value = +values[i]) sum += value; // Note: zero and null are equivalent.
- }
- }
- else {
- while (++i < n) {
- if (value = +valueof(values[i], i, values)) sum += value;
- }
- }
- return sum;
- }
- function transpose(matrix) {
- if (!(n = matrix.length)) return [];
- for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
- for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
- row[j] = matrix[j][i];
- }
- }
- return transpose;
- }
- function length(d) {
- return d.length;
- }
- function zip() {
- return transpose(arguments);
- }
- exports.bisect = bisectRight;
- exports.bisectRight = bisectRight;
- exports.bisectLeft = bisectLeft;
- exports.ascending = ascending;
- exports.bisector = bisector;
- exports.cross = cross;
- exports.descending = descending;
- exports.deviation = deviation;
- exports.extent = extent;
- exports.histogram = histogram;
- exports.thresholdFreedmanDiaconis = freedmanDiaconis;
- exports.thresholdScott = scott;
- exports.thresholdSturges = sturges;
- exports.max = max;
- exports.mean = mean;
- exports.median = median;
- exports.merge = merge;
- exports.min = min;
- exports.pairs = pairs;
- exports.permute = permute;
- exports.quantile = quantile;
- exports.range = range;
- exports.scan = scan;
- exports.shuffle = shuffle;
- exports.sum = sum;
- exports.ticks = ticks;
- exports.tickIncrement = tickIncrement;
- exports.tickStep = tickStep;
- exports.transpose = transpose;
- exports.variance = variance;
- exports.zip = zip;
- Object.defineProperty(exports, '__esModule', { value: true });
- })));
- },{}],194:[function(require,module,exports){
- // https://d3js.org/d3-geo/ v1.11.6 Copyright 2019 Mike Bostock
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) :
- typeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) :
- (factory((global.d3 = global.d3 || {}),global.d3));
- }(this, (function (exports,d3Array) { 'use strict';
- // Adds floating point numbers with twice the normal precision.
- // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
- // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
- // 305–363 (1997).
- // Code adapted from GeographicLib by Charles F. F. Karney,
- // http://geographiclib.sourceforge.net/
- function adder() {
- return new Adder;
- }
- function Adder() {
- this.reset();
- }
- Adder.prototype = {
- constructor: Adder,
- reset: function() {
- this.s = // rounded value
- this.t = 0; // exact error
- },
- add: function(y) {
- add(temp, y, this.t);
- add(this, temp.s, this.s);
- if (this.s) this.t += temp.t;
- else this.s = temp.t;
- },
- valueOf: function() {
- return this.s;
- }
- };
- var temp = new Adder;
- function add(adder, a, b) {
- var x = adder.s = a + b,
- bv = x - a,
- av = x - bv;
- adder.t = (a - av) + (b - bv);
- }
- var epsilon = 1e-6;
- var epsilon2 = 1e-12;
- var pi = Math.PI;
- var halfPi = pi / 2;
- var quarterPi = pi / 4;
- var tau = pi * 2;
- var degrees = 180 / pi;
- var radians = pi / 180;
- var abs = Math.abs;
- var atan = Math.atan;
- var atan2 = Math.atan2;
- var cos = Math.cos;
- var ceil = Math.ceil;
- var exp = Math.exp;
- var log = Math.log;
- var pow = Math.pow;
- var sin = Math.sin;
- var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
- var sqrt = Math.sqrt;
- var tan = Math.tan;
- function acos(x) {
- return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);
- }
- function asin(x) {
- return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);
- }
- function haversin(x) {
- return (x = sin(x / 2)) * x;
- }
- function noop() {}
- function streamGeometry(geometry, stream) {
- if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
- streamGeometryType[geometry.type](geometry, stream);
- }
- }
- var streamObjectType = {
- Feature: function(object, stream) {
- streamGeometry(object.geometry, stream);
- },
- FeatureCollection: function(object, stream) {
- var features = object.features, i = -1, n = features.length;
- while (++i < n) streamGeometry(features[i].geometry, stream);
- }
- };
- var streamGeometryType = {
- Sphere: function(object, stream) {
- stream.sphere();
- },
- Point: function(object, stream) {
- object = object.coordinates;
- stream.point(object[0], object[1], object[2]);
- },
- MultiPoint: function(object, stream) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length;
- while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
- },
- LineString: function(object, stream) {
- streamLine(object.coordinates, stream, 0);
- },
- MultiLineString: function(object, stream) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length;
- while (++i < n) streamLine(coordinates[i], stream, 0);
- },
- Polygon: function(object, stream) {
- streamPolygon(object.coordinates, stream);
- },
- MultiPolygon: function(object, stream) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length;
- while (++i < n) streamPolygon(coordinates[i], stream);
- },
- GeometryCollection: function(object, stream) {
- var geometries = object.geometries, i = -1, n = geometries.length;
- while (++i < n) streamGeometry(geometries[i], stream);
- }
- };
- function streamLine(coordinates, stream, closed) {
- var i = -1, n = coordinates.length - closed, coordinate;
- stream.lineStart();
- while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
- stream.lineEnd();
- }
- function streamPolygon(coordinates, stream) {
- var i = -1, n = coordinates.length;
- stream.polygonStart();
- while (++i < n) streamLine(coordinates[i], stream, 1);
- stream.polygonEnd();
- }
- function geoStream(object, stream) {
- if (object && streamObjectType.hasOwnProperty(object.type)) {
- streamObjectType[object.type](object, stream);
- } else {
- streamGeometry(object, stream);
- }
- }
- var areaRingSum = adder();
- var areaSum = adder(),
- lambda00,
- phi00,
- lambda0,
- cosPhi0,
- sinPhi0;
- var areaStream = {
- point: noop,
- lineStart: noop,
- lineEnd: noop,
- polygonStart: function() {
- areaRingSum.reset();
- areaStream.lineStart = areaRingStart;
- areaStream.lineEnd = areaRingEnd;
- },
- polygonEnd: function() {
- var areaRing = +areaRingSum;
- areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);
- this.lineStart = this.lineEnd = this.point = noop;
- },
- sphere: function() {
- areaSum.add(tau);
- }
- };
- function areaRingStart() {
- areaStream.point = areaPointFirst;
- }
- function areaRingEnd() {
- areaPoint(lambda00, phi00);
- }
- function areaPointFirst(lambda, phi) {
- areaStream.point = areaPoint;
- lambda00 = lambda, phi00 = phi;
- lambda *= radians, phi *= radians;
- lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);
- }
- function areaPoint(lambda, phi) {
- lambda *= radians, phi *= radians;
- phi = phi / 2 + quarterPi; // half the angular distance from south pole
- // Spherical excess E for a spherical triangle with vertices: south pole,
- // previous point, current point. Uses a formula derived from Cagnoli’s
- // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
- var dLambda = lambda - lambda0,
- sdLambda = dLambda >= 0 ? 1 : -1,
- adLambda = sdLambda * dLambda,
- cosPhi = cos(phi),
- sinPhi = sin(phi),
- k = sinPhi0 * sinPhi,
- u = cosPhi0 * cosPhi + k * cos(adLambda),
- v = k * sdLambda * sin(adLambda);
- areaRingSum.add(atan2(v, u));
- // Advance the previous points.
- lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
- }
- function area(object) {
- areaSum.reset();
- geoStream(object, areaStream);
- return areaSum * 2;
- }
- function spherical(cartesian) {
- return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
- }
- function cartesian(spherical) {
- var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);
- return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];
- }
- function cartesianDot(a, b) {
- return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
- }
- function cartesianCross(a, b) {
- return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
- }
- // TODO return a
- function cartesianAddInPlace(a, b) {
- a[0] += b[0], a[1] += b[1], a[2] += b[2];
- }
- function cartesianScale(vector, k) {
- return [vector[0] * k, vector[1] * k, vector[2] * k];
- }
- // TODO return d
- function cartesianNormalizeInPlace(d) {
- var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
- d[0] /= l, d[1] /= l, d[2] /= l;
- }
- var lambda0$1, phi0, lambda1, phi1, // bounds
- lambda2, // previous lambda-coordinate
- lambda00$1, phi00$1, // first point
- p0, // previous 3D point
- deltaSum = adder(),
- ranges,
- range;
- var boundsStream = {
- point: boundsPoint,
- lineStart: boundsLineStart,
- lineEnd: boundsLineEnd,
- polygonStart: function() {
- boundsStream.point = boundsRingPoint;
- boundsStream.lineStart = boundsRingStart;
- boundsStream.lineEnd = boundsRingEnd;
- deltaSum.reset();
- areaStream.polygonStart();
- },
- polygonEnd: function() {
- areaStream.polygonEnd();
- boundsStream.point = boundsPoint;
- boundsStream.lineStart = boundsLineStart;
- boundsStream.lineEnd = boundsLineEnd;
- if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
- else if (deltaSum > epsilon) phi1 = 90;
- else if (deltaSum < -epsilon) phi0 = -90;
- range[0] = lambda0$1, range[1] = lambda1;
- },
- sphere: function() {
- lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
- }
- };
- function boundsPoint(lambda, phi) {
- ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
- if (phi < phi0) phi0 = phi;
- if (phi > phi1) phi1 = phi;
- }
- function linePoint(lambda, phi) {
- var p = cartesian([lambda * radians, phi * radians]);
- if (p0) {
- var normal = cartesianCross(p0, p),
- equatorial = [normal[1], -normal[0], 0],
- inflection = cartesianCross(equatorial, normal);
- cartesianNormalizeInPlace(inflection);
- inflection = spherical(inflection);
- var delta = lambda - lambda2,
- sign$$1 = delta > 0 ? 1 : -1,
- lambdai = inflection[0] * degrees * sign$$1,
- phii,
- antimeridian = abs(delta) > 180;
- if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
- phii = inflection[1] * degrees;
- if (phii > phi1) phi1 = phii;
- } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
- phii = -inflection[1] * degrees;
- if (phii < phi0) phi0 = phii;
- } else {
- if (phi < phi0) phi0 = phi;
- if (phi > phi1) phi1 = phi;
- }
- if (antimeridian) {
- if (lambda < lambda2) {
- if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
- } else {
- if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
- }
- } else {
- if (lambda1 >= lambda0$1) {
- if (lambda < lambda0$1) lambda0$1 = lambda;
- if (lambda > lambda1) lambda1 = lambda;
- } else {
- if (lambda > lambda2) {
- if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
- } else {
- if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
- }
- }
- }
- } else {
- ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
- }
- if (phi < phi0) phi0 = phi;
- if (phi > phi1) phi1 = phi;
- p0 = p, lambda2 = lambda;
- }
- function boundsLineStart() {
- boundsStream.point = linePoint;
- }
- function boundsLineEnd() {
- range[0] = lambda0$1, range[1] = lambda1;
- boundsStream.point = boundsPoint;
- p0 = null;
- }
- function boundsRingPoint(lambda, phi) {
- if (p0) {
- var delta = lambda - lambda2;
- deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
- } else {
- lambda00$1 = lambda, phi00$1 = phi;
- }
- areaStream.point(lambda, phi);
- linePoint(lambda, phi);
- }
- function boundsRingStart() {
- areaStream.lineStart();
- }
- function boundsRingEnd() {
- boundsRingPoint(lambda00$1, phi00$1);
- areaStream.lineEnd();
- if (abs(deltaSum) > epsilon) lambda0$1 = -(lambda1 = 180);
- range[0] = lambda0$1, range[1] = lambda1;
- p0 = null;
- }
- // Finds the left-right distance between two longitudes.
- // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
- // the distance between ±180° to be 360°.
- function angle(lambda0, lambda1) {
- return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
- }
- function rangeCompare(a, b) {
- return a[0] - b[0];
- }
- function rangeContains(range, x) {
- return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
- }
- function bounds(feature) {
- var i, n, a, b, merged, deltaMax, delta;
- phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
- ranges = [];
- geoStream(feature, boundsStream);
- // First, sort ranges by their minimum longitudes.
- if (n = ranges.length) {
- ranges.sort(rangeCompare);
- // Then, merge any ranges that overlap.
- for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
- b = ranges[i];
- if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
- if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
- if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
- } else {
- merged.push(a = b);
- }
- }
- // Finally, find the largest gap between the merged ranges.
- // The final bounding box will be the inverse of this gap.
- for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
- b = merged[i];
- if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
- }
- }
- ranges = range = null;
- return lambda0$1 === Infinity || phi0 === Infinity
- ? [[NaN, NaN], [NaN, NaN]]
- : [[lambda0$1, phi0], [lambda1, phi1]];
- }
- var W0, W1,
- X0, Y0, Z0,
- X1, Y1, Z1,
- X2, Y2, Z2,
- lambda00$2, phi00$2, // first point
- x0, y0, z0; // previous point
- var centroidStream = {
- sphere: noop,
- point: centroidPoint,
- lineStart: centroidLineStart,
- lineEnd: centroidLineEnd,
- polygonStart: function() {
- centroidStream.lineStart = centroidRingStart;
- centroidStream.lineEnd = centroidRingEnd;
- },
- polygonEnd: function() {
- centroidStream.lineStart = centroidLineStart;
- centroidStream.lineEnd = centroidLineEnd;
- }
- };
- // Arithmetic mean of Cartesian vectors.
- function centroidPoint(lambda, phi) {
- lambda *= radians, phi *= radians;
- var cosPhi = cos(phi);
- centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));
- }
- function centroidPointCartesian(x, y, z) {
- ++W0;
- X0 += (x - X0) / W0;
- Y0 += (y - Y0) / W0;
- Z0 += (z - Z0) / W0;
- }
- function centroidLineStart() {
- centroidStream.point = centroidLinePointFirst;
- }
- function centroidLinePointFirst(lambda, phi) {
- lambda *= radians, phi *= radians;
- var cosPhi = cos(phi);
- x0 = cosPhi * cos(lambda);
- y0 = cosPhi * sin(lambda);
- z0 = sin(phi);
- centroidStream.point = centroidLinePoint;
- centroidPointCartesian(x0, y0, z0);
- }
- function centroidLinePoint(lambda, phi) {
- lambda *= radians, phi *= radians;
- var cosPhi = cos(phi),
- x = cosPhi * cos(lambda),
- y = cosPhi * sin(lambda),
- z = sin(phi),
- w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
- W1 += w;
- X1 += w * (x0 + (x0 = x));
- Y1 += w * (y0 + (y0 = y));
- Z1 += w * (z0 + (z0 = z));
- centroidPointCartesian(x0, y0, z0);
- }
- function centroidLineEnd() {
- centroidStream.point = centroidPoint;
- }
- // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
- // J. Applied Mechanics 42, 239 (1975).
- function centroidRingStart() {
- centroidStream.point = centroidRingPointFirst;
- }
- function centroidRingEnd() {
- centroidRingPoint(lambda00$2, phi00$2);
- centroidStream.point = centroidPoint;
- }
- function centroidRingPointFirst(lambda, phi) {
- lambda00$2 = lambda, phi00$2 = phi;
- lambda *= radians, phi *= radians;
- centroidStream.point = centroidRingPoint;
- var cosPhi = cos(phi);
- x0 = cosPhi * cos(lambda);
- y0 = cosPhi * sin(lambda);
- z0 = sin(phi);
- centroidPointCartesian(x0, y0, z0);
- }
- function centroidRingPoint(lambda, phi) {
- lambda *= radians, phi *= radians;
- var cosPhi = cos(phi),
- x = cosPhi * cos(lambda),
- y = cosPhi * sin(lambda),
- z = sin(phi),
- cx = y0 * z - z0 * y,
- cy = z0 * x - x0 * z,
- cz = x0 * y - y0 * x,
- m = sqrt(cx * cx + cy * cy + cz * cz),
- w = asin(m), // line weight = angle
- v = m && -w / m; // area weight multiplier
- X2 += v * cx;
- Y2 += v * cy;
- Z2 += v * cz;
- W1 += w;
- X1 += w * (x0 + (x0 = x));
- Y1 += w * (y0 + (y0 = y));
- Z1 += w * (z0 + (z0 = z));
- centroidPointCartesian(x0, y0, z0);
- }
- function centroid(object) {
- W0 = W1 =
- X0 = Y0 = Z0 =
- X1 = Y1 = Z1 =
- X2 = Y2 = Z2 = 0;
- geoStream(object, centroidStream);
- var x = X2,
- y = Y2,
- z = Z2,
- m = x * x + y * y + z * z;
- // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
- if (m < epsilon2) {
- x = X1, y = Y1, z = Z1;
- // If the feature has zero length, fall back to arithmetic mean of point vectors.
- if (W1 < epsilon) x = X0, y = Y0, z = Z0;
- m = x * x + y * y + z * z;
- // If the feature still has an undefined ccentroid, then return.
- if (m < epsilon2) return [NaN, NaN];
- }
- return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];
- }
- function constant(x) {
- return function() {
- return x;
- };
- }
- function compose(a, b) {
- function compose(x, y) {
- return x = a(x, y), b(x[0], x[1]);
- }
- if (a.invert && b.invert) compose.invert = function(x, y) {
- return x = b.invert(x, y), x && a.invert(x[0], x[1]);
- };
- return compose;
- }
- function rotationIdentity(lambda, phi) {
- return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];
- }
- rotationIdentity.invert = rotationIdentity;
- function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
- return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
- : rotationLambda(deltaLambda))
- : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
- : rotationIdentity);
- }
- function forwardRotationLambda(deltaLambda) {
- return function(lambda, phi) {
- return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];
- };
- }
- function rotationLambda(deltaLambda) {
- var rotation = forwardRotationLambda(deltaLambda);
- rotation.invert = forwardRotationLambda(-deltaLambda);
- return rotation;
- }
- function rotationPhiGamma(deltaPhi, deltaGamma) {
- var cosDeltaPhi = cos(deltaPhi),
- sinDeltaPhi = sin(deltaPhi),
- cosDeltaGamma = cos(deltaGamma),
- sinDeltaGamma = sin(deltaGamma);
- function rotation(lambda, phi) {
- var cosPhi = cos(phi),
- x = cos(lambda) * cosPhi,
- y = sin(lambda) * cosPhi,
- z = sin(phi),
- k = z * cosDeltaPhi + x * sinDeltaPhi;
- return [
- atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
- asin(k * cosDeltaGamma + y * sinDeltaGamma)
- ];
- }
- rotation.invert = function(lambda, phi) {
- var cosPhi = cos(phi),
- x = cos(lambda) * cosPhi,
- y = sin(lambda) * cosPhi,
- z = sin(phi),
- k = z * cosDeltaGamma - y * sinDeltaGamma;
- return [
- atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
- asin(k * cosDeltaPhi - x * sinDeltaPhi)
- ];
- };
- return rotation;
- }
- function rotation(rotate) {
- rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
- function forward(coordinates) {
- coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
- return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;
- }
- forward.invert = function(coordinates) {
- coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
- return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;
- };
- return forward;
- }
- // Generates a circle centered at [0°, 0°], with a given radius and precision.
- function circleStream(stream, radius, delta, direction, t0, t1) {
- if (!delta) return;
- var cosRadius = cos(radius),
- sinRadius = sin(radius),
- step = direction * delta;
- if (t0 == null) {
- t0 = radius + direction * tau;
- t1 = radius - step / 2;
- } else {
- t0 = circleRadius(cosRadius, t0);
- t1 = circleRadius(cosRadius, t1);
- if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;
- }
- for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
- point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);
- stream.point(point[0], point[1]);
- }
- }
- // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
- function circleRadius(cosRadius, point) {
- point = cartesian(point), point[0] -= cosRadius;
- cartesianNormalizeInPlace(point);
- var radius = acos(-point[1]);
- return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;
- }
- function circle() {
- var center = constant([0, 0]),
- radius = constant(90),
- precision = constant(6),
- ring,
- rotate,
- stream = {point: point};
- function point(x, y) {
- ring.push(x = rotate(x, y));
- x[0] *= degrees, x[1] *= degrees;
- }
- function circle() {
- var c = center.apply(this, arguments),
- r = radius.apply(this, arguments) * radians,
- p = precision.apply(this, arguments) * radians;
- ring = [];
- rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
- circleStream(stream, r, p, 1);
- c = {type: "Polygon", coordinates: [ring]};
- ring = rotate = null;
- return c;
- }
- circle.center = function(_) {
- return arguments.length ? (center = typeof _ === "function" ? _ : constant([+_[0], +_[1]]), circle) : center;
- };
- circle.radius = function(_) {
- return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), circle) : radius;
- };
- circle.precision = function(_) {
- return arguments.length ? (precision = typeof _ === "function" ? _ : constant(+_), circle) : precision;
- };
- return circle;
- }
- function clipBuffer() {
- var lines = [],
- line;
- return {
- point: function(x, y) {
- line.push([x, y]);
- },
- lineStart: function() {
- lines.push(line = []);
- },
- lineEnd: noop,
- rejoin: function() {
- if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
- },
- result: function() {
- var result = lines;
- lines = [];
- line = null;
- return result;
- }
- };
- }
- function pointEqual(a, b) {
- return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;
- }
- function Intersection(point, points, other, entry) {
- this.x = point;
- this.z = points;
- this.o = other; // another intersection
- this.e = entry; // is an entry?
- this.v = false; // visited
- this.n = this.p = null; // next & previous
- }
- // A generalized polygon clipping algorithm: given a polygon that has been cut
- // into its visible line segments, and rejoins the segments by interpolating
- // along the clip edge.
- function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {
- var subject = [],
- clip = [],
- i,
- n;
- segments.forEach(function(segment) {
- if ((n = segment.length - 1) <= 0) return;
- var n, p0 = segment[0], p1 = segment[n], x;
- // If the first and last points of a segment are coincident, then treat as a
- // closed ring. TODO if all rings are closed, then the winding order of the
- // exterior ring should be checked.
- if (pointEqual(p0, p1)) {
- stream.lineStart();
- for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
- stream.lineEnd();
- return;
- }
- subject.push(x = new Intersection(p0, segment, null, true));
- clip.push(x.o = new Intersection(p0, null, x, false));
- subject.push(x = new Intersection(p1, segment, null, false));
- clip.push(x.o = new Intersection(p1, null, x, true));
- });
- if (!subject.length) return;
- clip.sort(compareIntersection);
- link(subject);
- link(clip);
- for (i = 0, n = clip.length; i < n; ++i) {
- clip[i].e = startInside = !startInside;
- }
- var start = subject[0],
- points,
- point;
- while (1) {
- // Find first unvisited intersection.
- var current = start,
- isSubject = true;
- while (current.v) if ((current = current.n) === start) return;
- points = current.z;
- stream.lineStart();
- do {
- current.v = current.o.v = true;
- if (current.e) {
- if (isSubject) {
- for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
- } else {
- interpolate(current.x, current.n.x, 1, stream);
- }
- current = current.n;
- } else {
- if (isSubject) {
- points = current.p.z;
- for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
- } else {
- interpolate(current.x, current.p.x, -1, stream);
- }
- current = current.p;
- }
- current = current.o;
- points = current.z;
- isSubject = !isSubject;
- } while (!current.v);
- stream.lineEnd();
- }
- }
- function link(array) {
- if (!(n = array.length)) return;
- var n,
- i = 0,
- a = array[0],
- b;
- while (++i < n) {
- a.n = b = array[i];
- b.p = a;
- a = b;
- }
- a.n = b = array[0];
- b.p = a;
- }
- var sum = adder();
- function longitude(point) {
- if (abs(point[0]) <= pi)
- return point[0];
- else
- return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);
- }
- function polygonContains(polygon, point) {
- var lambda = longitude(point),
- phi = point[1],
- sinPhi = sin(phi),
- normal = [sin(lambda), -cos(lambda), 0],
- angle = 0,
- winding = 0;
- sum.reset();
- if (sinPhi === 1) phi = halfPi + epsilon;
- else if (sinPhi === -1) phi = -halfPi - epsilon;
- for (var i = 0, n = polygon.length; i < n; ++i) {
- if (!(m = (ring = polygon[i]).length)) continue;
- var ring,
- m,
- point0 = ring[m - 1],
- lambda0 = longitude(point0),
- phi0 = point0[1] / 2 + quarterPi,
- sinPhi0 = sin(phi0),
- cosPhi0 = cos(phi0);
- for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
- var point1 = ring[j],
- lambda1 = longitude(point1),
- phi1 = point1[1] / 2 + quarterPi,
- sinPhi1 = sin(phi1),
- cosPhi1 = cos(phi1),
- delta = lambda1 - lambda0,
- sign$$1 = delta >= 0 ? 1 : -1,
- absDelta = sign$$1 * delta,
- antimeridian = absDelta > pi,
- k = sinPhi0 * sinPhi1;
- sum.add(atan2(k * sign$$1 * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));
- angle += antimeridian ? delta + sign$$1 * tau : delta;
- // Are the longitudes either side of the point’s meridian (lambda),
- // and are the latitudes smaller than the parallel (phi)?
- if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
- var arc = cartesianCross(cartesian(point0), cartesian(point1));
- cartesianNormalizeInPlace(arc);
- var intersection = cartesianCross(normal, arc);
- cartesianNormalizeInPlace(intersection);
- var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
- if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
- winding += antimeridian ^ delta >= 0 ? 1 : -1;
- }
- }
- }
- }
- // First, determine whether the South pole is inside or outside:
- //
- // It is inside if:
- // * the polygon winds around it in a clockwise direction.
- // * the polygon does not (cumulatively) wind around it, but has a negative
- // (counter-clockwise) area.
- //
- // Second, count the (signed) number of times a segment crosses a lambda
- // from the point to the South pole. If it is zero, then the point is the
- // same side as the South pole.
- return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);
- }
- function clip(pointVisible, clipLine, interpolate, start) {
- return function(sink) {
- var line = clipLine(sink),
- ringBuffer = clipBuffer(),
- ringSink = clipLine(ringBuffer),
- polygonStarted = false,
- polygon,
- segments,
- ring;
- var clip = {
- point: point,
- lineStart: lineStart,
- lineEnd: lineEnd,
- polygonStart: function() {
- clip.point = pointRing;
- clip.lineStart = ringStart;
- clip.lineEnd = ringEnd;
- segments = [];
- polygon = [];
- },
- polygonEnd: function() {
- clip.point = point;
- clip.lineStart = lineStart;
- clip.lineEnd = lineEnd;
- segments = d3Array.merge(segments);
- var startInside = polygonContains(polygon, start);
- if (segments.length) {
- if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
- clipRejoin(segments, compareIntersection, startInside, interpolate, sink);
- } else if (startInside) {
- if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
- sink.lineStart();
- interpolate(null, null, 1, sink);
- sink.lineEnd();
- }
- if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
- segments = polygon = null;
- },
- sphere: function() {
- sink.polygonStart();
- sink.lineStart();
- interpolate(null, null, 1, sink);
- sink.lineEnd();
- sink.polygonEnd();
- }
- };
- function point(lambda, phi) {
- if (pointVisible(lambda, phi)) sink.point(lambda, phi);
- }
- function pointLine(lambda, phi) {
- line.point(lambda, phi);
- }
- function lineStart() {
- clip.point = pointLine;
- line.lineStart();
- }
- function lineEnd() {
- clip.point = point;
- line.lineEnd();
- }
- function pointRing(lambda, phi) {
- ring.push([lambda, phi]);
- ringSink.point(lambda, phi);
- }
- function ringStart() {
- ringSink.lineStart();
- ring = [];
- }
- function ringEnd() {
- pointRing(ring[0][0], ring[0][1]);
- ringSink.lineEnd();
- var clean = ringSink.clean(),
- ringSegments = ringBuffer.result(),
- i, n = ringSegments.length, m,
- segment,
- point;
- ring.pop();
- polygon.push(ring);
- ring = null;
- if (!n) return;
- // No intersections.
- if (clean & 1) {
- segment = ringSegments[0];
- if ((m = segment.length - 1) > 0) {
- if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
- sink.lineStart();
- for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
- sink.lineEnd();
- }
- return;
- }
- // Rejoin connected segments.
- // TODO reuse ringBuffer.rejoin()?
- if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
- segments.push(ringSegments.filter(validSegment));
- }
- return clip;
- };
- }
- function validSegment(segment) {
- return segment.length > 1;
- }
- // Intersections are sorted along the clip edge. For both antimeridian cutting
- // and circle clipping, the same comparison is used.
- function compareIntersection(a, b) {
- return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])
- - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);
- }
- var clipAntimeridian = clip(
- function() { return true; },
- clipAntimeridianLine,
- clipAntimeridianInterpolate,
- [-pi, -halfPi]
- );
- // Takes a line and cuts into visible segments. Return values: 0 - there were
- // intersections or the line was empty; 1 - no intersections; 2 - there were
- // intersections, and the first and last segments should be rejoined.
- function clipAntimeridianLine(stream) {
- var lambda0 = NaN,
- phi0 = NaN,
- sign0 = NaN,
- clean; // no intersections
- return {
- lineStart: function() {
- stream.lineStart();
- clean = 1;
- },
- point: function(lambda1, phi1) {
- var sign1 = lambda1 > 0 ? pi : -pi,
- delta = abs(lambda1 - lambda0);
- if (abs(delta - pi) < epsilon) { // line crosses a pole
- stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);
- stream.point(sign0, phi0);
- stream.lineEnd();
- stream.lineStart();
- stream.point(sign1, phi0);
- stream.point(lambda1, phi0);
- clean = 0;
- } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian
- if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies
- if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;
- phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
- stream.point(sign0, phi0);
- stream.lineEnd();
- stream.lineStart();
- stream.point(sign1, phi0);
- clean = 0;
- }
- stream.point(lambda0 = lambda1, phi0 = phi1);
- sign0 = sign1;
- },
- lineEnd: function() {
- stream.lineEnd();
- lambda0 = phi0 = NaN;
- },
- clean: function() {
- return 2 - clean; // if intersections, rejoin first and last segments
- }
- };
- }
- function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
- var cosPhi0,
- cosPhi1,
- sinLambda0Lambda1 = sin(lambda0 - lambda1);
- return abs(sinLambda0Lambda1) > epsilon
- ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)
- - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))
- / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
- : (phi0 + phi1) / 2;
- }
- function clipAntimeridianInterpolate(from, to, direction, stream) {
- var phi;
- if (from == null) {
- phi = direction * halfPi;
- stream.point(-pi, phi);
- stream.point(0, phi);
- stream.point(pi, phi);
- stream.point(pi, 0);
- stream.point(pi, -phi);
- stream.point(0, -phi);
- stream.point(-pi, -phi);
- stream.point(-pi, 0);
- stream.point(-pi, phi);
- } else if (abs(from[0] - to[0]) > epsilon) {
- var lambda = from[0] < to[0] ? pi : -pi;
- phi = direction * lambda / 2;
- stream.point(-lambda, phi);
- stream.point(0, phi);
- stream.point(lambda, phi);
- } else {
- stream.point(to[0], to[1]);
- }
- }
- function clipCircle(radius) {
- var cr = cos(radius),
- delta = 6 * radians,
- smallRadius = cr > 0,
- notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case
- function interpolate(from, to, direction, stream) {
- circleStream(stream, radius, delta, direction, from, to);
- }
- function visible(lambda, phi) {
- return cos(lambda) * cos(phi) > cr;
- }
- // Takes a line and cuts into visible segments. Return values used for polygon
- // clipping: 0 - there were intersections or the line was empty; 1 - no
- // intersections 2 - there were intersections, and the first and last segments
- // should be rejoined.
- function clipLine(stream) {
- var point0, // previous point
- c0, // code for previous point
- v0, // visibility of previous point
- v00, // visibility of first point
- clean; // no intersections
- return {
- lineStart: function() {
- v00 = v0 = false;
- clean = 1;
- },
- point: function(lambda, phi) {
- var point1 = [lambda, phi],
- point2,
- v = visible(lambda, phi),
- c = smallRadius
- ? v ? 0 : code(lambda, phi)
- : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;
- if (!point0 && (v00 = v0 = v)) stream.lineStart();
- // Handle degeneracies.
- // TODO ignore if not clipping polygons.
- if (v !== v0) {
- point2 = intersect(point0, point1);
- if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {
- point1[0] += epsilon;
- point1[1] += epsilon;
- v = visible(point1[0], point1[1]);
- }
- }
- if (v !== v0) {
- clean = 0;
- if (v) {
- // outside going in
- stream.lineStart();
- point2 = intersect(point1, point0);
- stream.point(point2[0], point2[1]);
- } else {
- // inside going out
- point2 = intersect(point0, point1);
- stream.point(point2[0], point2[1]);
- stream.lineEnd();
- }
- point0 = point2;
- } else if (notHemisphere && point0 && smallRadius ^ v) {
- var t;
- // If the codes for two points are different, or are both zero,
- // and there this segment intersects with the small circle.
- if (!(c & c0) && (t = intersect(point1, point0, true))) {
- clean = 0;
- if (smallRadius) {
- stream.lineStart();
- stream.point(t[0][0], t[0][1]);
- stream.point(t[1][0], t[1][1]);
- stream.lineEnd();
- } else {
- stream.point(t[1][0], t[1][1]);
- stream.lineEnd();
- stream.lineStart();
- stream.point(t[0][0], t[0][1]);
- }
- }
- }
- if (v && (!point0 || !pointEqual(point0, point1))) {
- stream.point(point1[0], point1[1]);
- }
- point0 = point1, v0 = v, c0 = c;
- },
- lineEnd: function() {
- if (v0) stream.lineEnd();
- point0 = null;
- },
- // Rejoin first and last segments if there were intersections and the first
- // and last points were visible.
- clean: function() {
- return clean | ((v00 && v0) << 1);
- }
- };
- }
- // Intersects the great circle between a and b with the clip circle.
- function intersect(a, b, two) {
- var pa = cartesian(a),
- pb = cartesian(b);
- // We have two planes, n1.p = d1 and n2.p = d2.
- // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
- var n1 = [1, 0, 0], // normal
- n2 = cartesianCross(pa, pb),
- n2n2 = cartesianDot(n2, n2),
- n1n2 = n2[0], // cartesianDot(n1, n2),
- determinant = n2n2 - n1n2 * n1n2;
- // Two polar points.
- if (!determinant) return !two && a;
- var c1 = cr * n2n2 / determinant,
- c2 = -cr * n1n2 / determinant,
- n1xn2 = cartesianCross(n1, n2),
- A = cartesianScale(n1, c1),
- B = cartesianScale(n2, c2);
- cartesianAddInPlace(A, B);
- // Solve |p(t)|^2 = 1.
- var u = n1xn2,
- w = cartesianDot(A, u),
- uu = cartesianDot(u, u),
- t2 = w * w - uu * (cartesianDot(A, A) - 1);
- if (t2 < 0) return;
- var t = sqrt(t2),
- q = cartesianScale(u, (-w - t) / uu);
- cartesianAddInPlace(q, A);
- q = spherical(q);
- if (!two) return q;
- // Two intersection points.
- var lambda0 = a[0],
- lambda1 = b[0],
- phi0 = a[1],
- phi1 = b[1],
- z;
- if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
- var delta = lambda1 - lambda0,
- polar = abs(delta - pi) < epsilon,
- meridian = polar || delta < epsilon;
- if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
- // Check that the first point is between a and b.
- if (meridian
- ? polar
- ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)
- : phi0 <= q[1] && q[1] <= phi1
- : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
- var q1 = cartesianScale(u, (-w + t) / uu);
- cartesianAddInPlace(q1, A);
- return [q, spherical(q1)];
- }
- }
- // Generates a 4-bit vector representing the location of a point relative to
- // the small circle's bounding box.
- function code(lambda, phi) {
- var r = smallRadius ? radius : pi - radius,
- code = 0;
- if (lambda < -r) code |= 1; // left
- else if (lambda > r) code |= 2; // right
- if (phi < -r) code |= 4; // below
- else if (phi > r) code |= 8; // above
- return code;
- }
- return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);
- }
- function clipLine(a, b, x0, y0, x1, y1) {
- var ax = a[0],
- ay = a[1],
- bx = b[0],
- by = b[1],
- t0 = 0,
- t1 = 1,
- dx = bx - ax,
- dy = by - ay,
- r;
- r = x0 - ax;
- if (!dx && r > 0) return;
- r /= dx;
- if (dx < 0) {
- if (r < t0) return;
- if (r < t1) t1 = r;
- } else if (dx > 0) {
- if (r > t1) return;
- if (r > t0) t0 = r;
- }
- r = x1 - ax;
- if (!dx && r < 0) return;
- r /= dx;
- if (dx < 0) {
- if (r > t1) return;
- if (r > t0) t0 = r;
- } else if (dx > 0) {
- if (r < t0) return;
- if (r < t1) t1 = r;
- }
- r = y0 - ay;
- if (!dy && r > 0) return;
- r /= dy;
- if (dy < 0) {
- if (r < t0) return;
- if (r < t1) t1 = r;
- } else if (dy > 0) {
- if (r > t1) return;
- if (r > t0) t0 = r;
- }
- r = y1 - ay;
- if (!dy && r < 0) return;
- r /= dy;
- if (dy < 0) {
- if (r > t1) return;
- if (r > t0) t0 = r;
- } else if (dy > 0) {
- if (r < t0) return;
- if (r < t1) t1 = r;
- }
- if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
- if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
- return true;
- }
- var clipMax = 1e9, clipMin = -clipMax;
- // TODO Use d3-polygon’s polygonContains here for the ring check?
- // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
- function clipRectangle(x0, y0, x1, y1) {
- function visible(x, y) {
- return x0 <= x && x <= x1 && y0 <= y && y <= y1;
- }
- function interpolate(from, to, direction, stream) {
- var a = 0, a1 = 0;
- if (from == null
- || (a = corner(from, direction)) !== (a1 = corner(to, direction))
- || comparePoint(from, to) < 0 ^ direction > 0) {
- do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
- while ((a = (a + direction + 4) % 4) !== a1);
- } else {
- stream.point(to[0], to[1]);
- }
- }
- function corner(p, direction) {
- return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3
- : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1
- : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0
- : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
- }
- function compareIntersection(a, b) {
- return comparePoint(a.x, b.x);
- }
- function comparePoint(a, b) {
- var ca = corner(a, 1),
- cb = corner(b, 1);
- return ca !== cb ? ca - cb
- : ca === 0 ? b[1] - a[1]
- : ca === 1 ? a[0] - b[0]
- : ca === 2 ? a[1] - b[1]
- : b[0] - a[0];
- }
- return function(stream) {
- var activeStream = stream,
- bufferStream = clipBuffer(),
- segments,
- polygon,
- ring,
- x__, y__, v__, // first point
- x_, y_, v_, // previous point
- first,
- clean;
- var clipStream = {
- point: point,
- lineStart: lineStart,
- lineEnd: lineEnd,
- polygonStart: polygonStart,
- polygonEnd: polygonEnd
- };
- function point(x, y) {
- if (visible(x, y)) activeStream.point(x, y);
- }
- function polygonInside() {
- var winding = 0;
- for (var i = 0, n = polygon.length; i < n; ++i) {
- for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
- a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
- if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
- else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
- }
- }
- return winding;
- }
- // Buffer geometry within a polygon and then clip it en masse.
- function polygonStart() {
- activeStream = bufferStream, segments = [], polygon = [], clean = true;
- }
- function polygonEnd() {
- var startInside = polygonInside(),
- cleanInside = clean && startInside,
- visible = (segments = d3Array.merge(segments)).length;
- if (cleanInside || visible) {
- stream.polygonStart();
- if (cleanInside) {
- stream.lineStart();
- interpolate(null, null, 1, stream);
- stream.lineEnd();
- }
- if (visible) {
- clipRejoin(segments, compareIntersection, startInside, interpolate, stream);
- }
- stream.polygonEnd();
- }
- activeStream = stream, segments = polygon = ring = null;
- }
- function lineStart() {
- clipStream.point = linePoint;
- if (polygon) polygon.push(ring = []);
- first = true;
- v_ = false;
- x_ = y_ = NaN;
- }
- // TODO rather than special-case polygons, simply handle them separately.
- // Ideally, coincident intersection points should be jittered to avoid
- // clipping issues.
- function lineEnd() {
- if (segments) {
- linePoint(x__, y__);
- if (v__ && v_) bufferStream.rejoin();
- segments.push(bufferStream.result());
- }
- clipStream.point = point;
- if (v_) activeStream.lineEnd();
- }
- function linePoint(x, y) {
- var v = visible(x, y);
- if (polygon) ring.push([x, y]);
- if (first) {
- x__ = x, y__ = y, v__ = v;
- first = false;
- if (v) {
- activeStream.lineStart();
- activeStream.point(x, y);
- }
- } else {
- if (v && v_) activeStream.point(x, y);
- else {
- var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
- b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
- if (clipLine(a, b, x0, y0, x1, y1)) {
- if (!v_) {
- activeStream.lineStart();
- activeStream.point(a[0], a[1]);
- }
- activeStream.point(b[0], b[1]);
- if (!v) activeStream.lineEnd();
- clean = false;
- } else if (v) {
- activeStream.lineStart();
- activeStream.point(x, y);
- clean = false;
- }
- }
- }
- x_ = x, y_ = y, v_ = v;
- }
- return clipStream;
- };
- }
- function extent() {
- var x0 = 0,
- y0 = 0,
- x1 = 960,
- y1 = 500,
- cache,
- cacheStream,
- clip;
- return clip = {
- stream: function(stream) {
- return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);
- },
- extent: function(_) {
- return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
- }
- };
- }
- var lengthSum = adder(),
- lambda0$2,
- sinPhi0$1,
- cosPhi0$1;
- var lengthStream = {
- sphere: noop,
- point: noop,
- lineStart: lengthLineStart,
- lineEnd: noop,
- polygonStart: noop,
- polygonEnd: noop
- };
- function lengthLineStart() {
- lengthStream.point = lengthPointFirst;
- lengthStream.lineEnd = lengthLineEnd;
- }
- function lengthLineEnd() {
- lengthStream.point = lengthStream.lineEnd = noop;
- }
- function lengthPointFirst(lambda, phi) {
- lambda *= radians, phi *= radians;
- lambda0$2 = lambda, sinPhi0$1 = sin(phi), cosPhi0$1 = cos(phi);
- lengthStream.point = lengthPoint;
- }
- function lengthPoint(lambda, phi) {
- lambda *= radians, phi *= radians;
- var sinPhi = sin(phi),
- cosPhi = cos(phi),
- delta = abs(lambda - lambda0$2),
- cosDelta = cos(delta),
- sinDelta = sin(delta),
- x = cosPhi * sinDelta,
- y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
- z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
- lengthSum.add(atan2(sqrt(x * x + y * y), z));
- lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
- }
- function length(object) {
- lengthSum.reset();
- geoStream(object, lengthStream);
- return +lengthSum;
- }
- var coordinates = [null, null],
- object = {type: "LineString", coordinates: coordinates};
- function distance(a, b) {
- coordinates[0] = a;
- coordinates[1] = b;
- return length(object);
- }
- var containsObjectType = {
- Feature: function(object, point) {
- return containsGeometry(object.geometry, point);
- },
- FeatureCollection: function(object, point) {
- var features = object.features, i = -1, n = features.length;
- while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;
- return false;
- }
- };
- var containsGeometryType = {
- Sphere: function() {
- return true;
- },
- Point: function(object, point) {
- return containsPoint(object.coordinates, point);
- },
- MultiPoint: function(object, point) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length;
- while (++i < n) if (containsPoint(coordinates[i], point)) return true;
- return false;
- },
- LineString: function(object, point) {
- return containsLine(object.coordinates, point);
- },
- MultiLineString: function(object, point) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length;
- while (++i < n) if (containsLine(coordinates[i], point)) return true;
- return false;
- },
- Polygon: function(object, point) {
- return containsPolygon(object.coordinates, point);
- },
- MultiPolygon: function(object, point) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length;
- while (++i < n) if (containsPolygon(coordinates[i], point)) return true;
- return false;
- },
- GeometryCollection: function(object, point) {
- var geometries = object.geometries, i = -1, n = geometries.length;
- while (++i < n) if (containsGeometry(geometries[i], point)) return true;
- return false;
- }
- };
- function containsGeometry(geometry, point) {
- return geometry && containsGeometryType.hasOwnProperty(geometry.type)
- ? containsGeometryType[geometry.type](geometry, point)
- : false;
- }
- function containsPoint(coordinates, point) {
- return distance(coordinates, point) === 0;
- }
- function containsLine(coordinates, point) {
- var ao, bo, ab;
- for (var i = 0, n = coordinates.length; i < n; i++) {
- bo = distance(coordinates[i], point);
- if (bo === 0) return true;
- if (i > 0) {
- ab = distance(coordinates[i], coordinates[i - 1]);
- if (
- ab > 0 &&
- ao <= ab &&
- bo <= ab &&
- (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab
- )
- return true;
- }
- ao = bo;
- }
- return false;
- }
- function containsPolygon(coordinates, point) {
- return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));
- }
- function ringRadians(ring) {
- return ring = ring.map(pointRadians), ring.pop(), ring;
- }
- function pointRadians(point) {
- return [point[0] * radians, point[1] * radians];
- }
- function contains(object, point) {
- return (object && containsObjectType.hasOwnProperty(object.type)
- ? containsObjectType[object.type]
- : containsGeometry)(object, point);
- }
- function graticuleX(y0, y1, dy) {
- var y = d3Array.range(y0, y1 - epsilon, dy).concat(y1);
- return function(x) { return y.map(function(y) { return [x, y]; }); };
- }
- function graticuleY(x0, x1, dx) {
- var x = d3Array.range(x0, x1 - epsilon, dx).concat(x1);
- return function(y) { return x.map(function(x) { return [x, y]; }); };
- }
- function graticule() {
- var x1, x0, X1, X0,
- y1, y0, Y1, Y0,
- dx = 10, dy = dx, DX = 90, DY = 360,
- x, y, X, Y,
- precision = 2.5;
- function graticule() {
- return {type: "MultiLineString", coordinates: lines()};
- }
- function lines() {
- return d3Array.range(ceil(X0 / DX) * DX, X1, DX).map(X)
- .concat(d3Array.range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
- .concat(d3Array.range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))
- .concat(d3Array.range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));
- }
- graticule.lines = function() {
- return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });
- };
- graticule.outline = function() {
- return {
- type: "Polygon",
- coordinates: [
- X(X0).concat(
- Y(Y1).slice(1),
- X(X1).reverse().slice(1),
- Y(Y0).reverse().slice(1))
- ]
- };
- };
- graticule.extent = function(_) {
- if (!arguments.length) return graticule.extentMinor();
- return graticule.extentMajor(_).extentMinor(_);
- };
- graticule.extentMajor = function(_) {
- if (!arguments.length) return [[X0, Y0], [X1, Y1]];
- X0 = +_[0][0], X1 = +_[1][0];
- Y0 = +_[0][1], Y1 = +_[1][1];
- if (X0 > X1) _ = X0, X0 = X1, X1 = _;
- if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
- return graticule.precision(precision);
- };
- graticule.extentMinor = function(_) {
- if (!arguments.length) return [[x0, y0], [x1, y1]];
- x0 = +_[0][0], x1 = +_[1][0];
- y0 = +_[0][1], y1 = +_[1][1];
- if (x0 > x1) _ = x0, x0 = x1, x1 = _;
- if (y0 > y1) _ = y0, y0 = y1, y1 = _;
- return graticule.precision(precision);
- };
- graticule.step = function(_) {
- if (!arguments.length) return graticule.stepMinor();
- return graticule.stepMajor(_).stepMinor(_);
- };
- graticule.stepMajor = function(_) {
- if (!arguments.length) return [DX, DY];
- DX = +_[0], DY = +_[1];
- return graticule;
- };
- graticule.stepMinor = function(_) {
- if (!arguments.length) return [dx, dy];
- dx = +_[0], dy = +_[1];
- return graticule;
- };
- graticule.precision = function(_) {
- if (!arguments.length) return precision;
- precision = +_;
- x = graticuleX(y0, y1, 90);
- y = graticuleY(x0, x1, precision);
- X = graticuleX(Y0, Y1, 90);
- Y = graticuleY(X0, X1, precision);
- return graticule;
- };
- return graticule
- .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])
- .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);
- }
- function graticule10() {
- return graticule()();
- }
- function interpolate(a, b) {
- var x0 = a[0] * radians,
- y0 = a[1] * radians,
- x1 = b[0] * radians,
- y1 = b[1] * radians,
- cy0 = cos(y0),
- sy0 = sin(y0),
- cy1 = cos(y1),
- sy1 = sin(y1),
- kx0 = cy0 * cos(x0),
- ky0 = cy0 * sin(x0),
- kx1 = cy1 * cos(x1),
- ky1 = cy1 * sin(x1),
- d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
- k = sin(d);
- var interpolate = d ? function(t) {
- var B = sin(t *= d) / k,
- A = sin(d - t) / k,
- x = A * kx0 + B * kx1,
- y = A * ky0 + B * ky1,
- z = A * sy0 + B * sy1;
- return [
- atan2(y, x) * degrees,
- atan2(z, sqrt(x * x + y * y)) * degrees
- ];
- } : function() {
- return [x0 * degrees, y0 * degrees];
- };
- interpolate.distance = d;
- return interpolate;
- }
- function identity(x) {
- return x;
- }
- var areaSum$1 = adder(),
- areaRingSum$1 = adder(),
- x00,
- y00,
- x0$1,
- y0$1;
- var areaStream$1 = {
- point: noop,
- lineStart: noop,
- lineEnd: noop,
- polygonStart: function() {
- areaStream$1.lineStart = areaRingStart$1;
- areaStream$1.lineEnd = areaRingEnd$1;
- },
- polygonEnd: function() {
- areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop;
- areaSum$1.add(abs(areaRingSum$1));
- areaRingSum$1.reset();
- },
- result: function() {
- var area = areaSum$1 / 2;
- areaSum$1.reset();
- return area;
- }
- };
- function areaRingStart$1() {
- areaStream$1.point = areaPointFirst$1;
- }
- function areaPointFirst$1(x, y) {
- areaStream$1.point = areaPoint$1;
- x00 = x0$1 = x, y00 = y0$1 = y;
- }
- function areaPoint$1(x, y) {
- areaRingSum$1.add(y0$1 * x - x0$1 * y);
- x0$1 = x, y0$1 = y;
- }
- function areaRingEnd$1() {
- areaPoint$1(x00, y00);
- }
- var x0$2 = Infinity,
- y0$2 = x0$2,
- x1 = -x0$2,
- y1 = x1;
- var boundsStream$1 = {
- point: boundsPoint$1,
- lineStart: noop,
- lineEnd: noop,
- polygonStart: noop,
- polygonEnd: noop,
- result: function() {
- var bounds = [[x0$2, y0$2], [x1, y1]];
- x1 = y1 = -(y0$2 = x0$2 = Infinity);
- return bounds;
- }
- };
- function boundsPoint$1(x, y) {
- if (x < x0$2) x0$2 = x;
- if (x > x1) x1 = x;
- if (y < y0$2) y0$2 = y;
- if (y > y1) y1 = y;
- }
- // TODO Enforce positive area for exterior, negative area for interior?
- var X0$1 = 0,
- Y0$1 = 0,
- Z0$1 = 0,
- X1$1 = 0,
- Y1$1 = 0,
- Z1$1 = 0,
- X2$1 = 0,
- Y2$1 = 0,
- Z2$1 = 0,
- x00$1,
- y00$1,
- x0$3,
- y0$3;
- var centroidStream$1 = {
- point: centroidPoint$1,
- lineStart: centroidLineStart$1,
- lineEnd: centroidLineEnd$1,
- polygonStart: function() {
- centroidStream$1.lineStart = centroidRingStart$1;
- centroidStream$1.lineEnd = centroidRingEnd$1;
- },
- polygonEnd: function() {
- centroidStream$1.point = centroidPoint$1;
- centroidStream$1.lineStart = centroidLineStart$1;
- centroidStream$1.lineEnd = centroidLineEnd$1;
- },
- result: function() {
- var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
- : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
- : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
- : [NaN, NaN];
- X0$1 = Y0$1 = Z0$1 =
- X1$1 = Y1$1 = Z1$1 =
- X2$1 = Y2$1 = Z2$1 = 0;
- return centroid;
- }
- };
- function centroidPoint$1(x, y) {
- X0$1 += x;
- Y0$1 += y;
- ++Z0$1;
- }
- function centroidLineStart$1() {
- centroidStream$1.point = centroidPointFirstLine;
- }
- function centroidPointFirstLine(x, y) {
- centroidStream$1.point = centroidPointLine;
- centroidPoint$1(x0$3 = x, y0$3 = y);
- }
- function centroidPointLine(x, y) {
- var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);
- X1$1 += z * (x0$3 + x) / 2;
- Y1$1 += z * (y0$3 + y) / 2;
- Z1$1 += z;
- centroidPoint$1(x0$3 = x, y0$3 = y);
- }
- function centroidLineEnd$1() {
- centroidStream$1.point = centroidPoint$1;
- }
- function centroidRingStart$1() {
- centroidStream$1.point = centroidPointFirstRing;
- }
- function centroidRingEnd$1() {
- centroidPointRing(x00$1, y00$1);
- }
- function centroidPointFirstRing(x, y) {
- centroidStream$1.point = centroidPointRing;
- centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
- }
- function centroidPointRing(x, y) {
- var dx = x - x0$3,
- dy = y - y0$3,
- z = sqrt(dx * dx + dy * dy);
- X1$1 += z * (x0$3 + x) / 2;
- Y1$1 += z * (y0$3 + y) / 2;
- Z1$1 += z;
- z = y0$3 * x - x0$3 * y;
- X2$1 += z * (x0$3 + x);
- Y2$1 += z * (y0$3 + y);
- Z2$1 += z * 3;
- centroidPoint$1(x0$3 = x, y0$3 = y);
- }
- function PathContext(context) {
- this._context = context;
- }
- PathContext.prototype = {
- _radius: 4.5,
- pointRadius: function(_) {
- return this._radius = _, this;
- },
- polygonStart: function() {
- this._line = 0;
- },
- polygonEnd: function() {
- this._line = NaN;
- },
- lineStart: function() {
- this._point = 0;
- },
- lineEnd: function() {
- if (this._line === 0) this._context.closePath();
- this._point = NaN;
- },
- point: function(x, y) {
- switch (this._point) {
- case 0: {
- this._context.moveTo(x, y);
- this._point = 1;
- break;
- }
- case 1: {
- this._context.lineTo(x, y);
- break;
- }
- default: {
- this._context.moveTo(x + this._radius, y);
- this._context.arc(x, y, this._radius, 0, tau);
- break;
- }
- }
- },
- result: noop
- };
- var lengthSum$1 = adder(),
- lengthRing,
- x00$2,
- y00$2,
- x0$4,
- y0$4;
- var lengthStream$1 = {
- point: noop,
- lineStart: function() {
- lengthStream$1.point = lengthPointFirst$1;
- },
- lineEnd: function() {
- if (lengthRing) lengthPoint$1(x00$2, y00$2);
- lengthStream$1.point = noop;
- },
- polygonStart: function() {
- lengthRing = true;
- },
- polygonEnd: function() {
- lengthRing = null;
- },
- result: function() {
- var length = +lengthSum$1;
- lengthSum$1.reset();
- return length;
- }
- };
- function lengthPointFirst$1(x, y) {
- lengthStream$1.point = lengthPoint$1;
- x00$2 = x0$4 = x, y00$2 = y0$4 = y;
- }
- function lengthPoint$1(x, y) {
- x0$4 -= x, y0$4 -= y;
- lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));
- x0$4 = x, y0$4 = y;
- }
- function PathString() {
- this._string = [];
- }
- PathString.prototype = {
- _radius: 4.5,
- _circle: circle$1(4.5),
- pointRadius: function(_) {
- if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;
- return this;
- },
- polygonStart: function() {
- this._line = 0;
- },
- polygonEnd: function() {
- this._line = NaN;
- },
- lineStart: function() {
- this._point = 0;
- },
- lineEnd: function() {
- if (this._line === 0) this._string.push("Z");
- this._point = NaN;
- },
- point: function(x, y) {
- switch (this._point) {
- case 0: {
- this._string.push("M", x, ",", y);
- this._point = 1;
- break;
- }
- case 1: {
- this._string.push("L", x, ",", y);
- break;
- }
- default: {
- if (this._circle == null) this._circle = circle$1(this._radius);
- this._string.push("M", x, ",", y, this._circle);
- break;
- }
- }
- },
- result: function() {
- if (this._string.length) {
- var result = this._string.join("");
- this._string = [];
- return result;
- } else {
- return null;
- }
- }
- };
- function circle$1(radius) {
- return "m0," + radius
- + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
- + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
- + "z";
- }
- function index(projection, context) {
- var pointRadius = 4.5,
- projectionStream,
- contextStream;
- function path(object) {
- if (object) {
- if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
- geoStream(object, projectionStream(contextStream));
- }
- return contextStream.result();
- }
- path.area = function(object) {
- geoStream(object, projectionStream(areaStream$1));
- return areaStream$1.result();
- };
- path.measure = function(object) {
- geoStream(object, projectionStream(lengthStream$1));
- return lengthStream$1.result();
- };
- path.bounds = function(object) {
- geoStream(object, projectionStream(boundsStream$1));
- return boundsStream$1.result();
- };
- path.centroid = function(object) {
- geoStream(object, projectionStream(centroidStream$1));
- return centroidStream$1.result();
- };
- path.projection = function(_) {
- return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;
- };
- path.context = function(_) {
- if (!arguments.length) return context;
- contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);
- if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
- return path;
- };
- path.pointRadius = function(_) {
- if (!arguments.length) return pointRadius;
- pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
- return path;
- };
- return path.projection(projection).context(context);
- }
- function transform(methods) {
- return {
- stream: transformer(methods)
- };
- }
- function transformer(methods) {
- return function(stream) {
- var s = new TransformStream;
- for (var key in methods) s[key] = methods[key];
- s.stream = stream;
- return s;
- };
- }
- function TransformStream() {}
- TransformStream.prototype = {
- constructor: TransformStream,
- point: function(x, y) { this.stream.point(x, y); },
- sphere: function() { this.stream.sphere(); },
- lineStart: function() { this.stream.lineStart(); },
- lineEnd: function() { this.stream.lineEnd(); },
- polygonStart: function() { this.stream.polygonStart(); },
- polygonEnd: function() { this.stream.polygonEnd(); }
- };
- function fit(projection, fitBounds, object) {
- var clip = projection.clipExtent && projection.clipExtent();
- projection.scale(150).translate([0, 0]);
- if (clip != null) projection.clipExtent(null);
- geoStream(object, projection.stream(boundsStream$1));
- fitBounds(boundsStream$1.result());
- if (clip != null) projection.clipExtent(clip);
- return projection;
- }
- function fitExtent(projection, extent, object) {
- return fit(projection, function(b) {
- var w = extent[1][0] - extent[0][0],
- h = extent[1][1] - extent[0][1],
- k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
- x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
- y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
- projection.scale(150 * k).translate([x, y]);
- }, object);
- }
- function fitSize(projection, size, object) {
- return fitExtent(projection, [[0, 0], size], object);
- }
- function fitWidth(projection, width, object) {
- return fit(projection, function(b) {
- var w = +width,
- k = w / (b[1][0] - b[0][0]),
- x = (w - k * (b[1][0] + b[0][0])) / 2,
- y = -k * b[0][1];
- projection.scale(150 * k).translate([x, y]);
- }, object);
- }
- function fitHeight(projection, height, object) {
- return fit(projection, function(b) {
- var h = +height,
- k = h / (b[1][1] - b[0][1]),
- x = -k * b[0][0],
- y = (h - k * (b[1][1] + b[0][1])) / 2;
- projection.scale(150 * k).translate([x, y]);
- }, object);
- }
- var maxDepth = 16, // maximum depth of subdivision
- cosMinDistance = cos(30 * radians); // cos(minimum angular distance)
- function resample(project, delta2) {
- return +delta2 ? resample$1(project, delta2) : resampleNone(project);
- }
- function resampleNone(project) {
- return transformer({
- point: function(x, y) {
- x = project(x, y);
- this.stream.point(x[0], x[1]);
- }
- });
- }
- function resample$1(project, delta2) {
- function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
- var dx = x1 - x0,
- dy = y1 - y0,
- d2 = dx * dx + dy * dy;
- if (d2 > 4 * delta2 && depth--) {
- var a = a0 + a1,
- b = b0 + b1,
- c = c0 + c1,
- m = sqrt(a * a + b * b + c * c),
- phi2 = asin(c /= m),
- lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),
- p = project(lambda2, phi2),
- x2 = p[0],
- y2 = p[1],
- dx2 = x2 - x0,
- dy2 = y2 - y0,
- dz = dy * dx2 - dx * dy2;
- if (dz * dz / d2 > delta2 // perpendicular projected distance
- || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
- || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
- resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
- stream.point(x2, y2);
- resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
- }
- }
- }
- return function(stream) {
- var lambda00, x00, y00, a00, b00, c00, // first point
- lambda0, x0, y0, a0, b0, c0; // previous point
- var resampleStream = {
- point: point,
- lineStart: lineStart,
- lineEnd: lineEnd,
- polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
- polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
- };
- function point(x, y) {
- x = project(x, y);
- stream.point(x[0], x[1]);
- }
- function lineStart() {
- x0 = NaN;
- resampleStream.point = linePoint;
- stream.lineStart();
- }
- function linePoint(lambda, phi) {
- var c = cartesian([lambda, phi]), p = project(lambda, phi);
- resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
- stream.point(x0, y0);
- }
- function lineEnd() {
- resampleStream.point = point;
- stream.lineEnd();
- }
- function ringStart() {
- lineStart();
- resampleStream.point = ringPoint;
- resampleStream.lineEnd = ringEnd;
- }
- function ringPoint(lambda, phi) {
- linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
- resampleStream.point = linePoint;
- }
- function ringEnd() {
- resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
- resampleStream.lineEnd = lineEnd;
- lineEnd();
- }
- return resampleStream;
- };
- }
- var transformRadians = transformer({
- point: function(x, y) {
- this.stream.point(x * radians, y * radians);
- }
- });
- function transformRotate(rotate) {
- return transformer({
- point: function(x, y) {
- var r = rotate(x, y);
- return this.stream.point(r[0], r[1]);
- }
- });
- }
- function scaleTranslate(k, dx, dy) {
- function transform$$1(x, y) {
- return [dx + k * x, dy - k * y];
- }
- transform$$1.invert = function(x, y) {
- return [(x - dx) / k, (dy - y) / k];
- };
- return transform$$1;
- }
- function scaleTranslateRotate(k, dx, dy, alpha) {
- var cosAlpha = cos(alpha),
- sinAlpha = sin(alpha),
- a = cosAlpha * k,
- b = sinAlpha * k,
- ai = cosAlpha / k,
- bi = sinAlpha / k,
- ci = (sinAlpha * dy - cosAlpha * dx) / k,
- fi = (sinAlpha * dx + cosAlpha * dy) / k;
- function transform$$1(x, y) {
- return [a * x - b * y + dx, dy - b * x - a * y];
- }
- transform$$1.invert = function(x, y) {
- return [ai * x - bi * y + ci, fi - bi * x - ai * y];
- };
- return transform$$1;
- }
- function projection(project) {
- return projectionMutator(function() { return project; })();
- }
- function projectionMutator(projectAt) {
- var project,
- k = 150, // scale
- x = 480, y = 250, // translate
- lambda = 0, phi = 0, // center
- deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate
- alpha = 0, // post-rotate
- theta = null, preclip = clipAntimeridian, // pre-clip angle
- x0 = null, y0, x1, y1, postclip = identity, // post-clip extent
- delta2 = 0.5, // precision
- projectResample,
- projectTransform,
- projectRotateTransform,
- cache,
- cacheStream;
- function projection(point) {
- return projectRotateTransform(point[0] * radians, point[1] * radians);
- }
- function invert(point) {
- point = projectRotateTransform.invert(point[0], point[1]);
- return point && [point[0] * degrees, point[1] * degrees];
- }
- projection.stream = function(stream) {
- return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));
- };
- projection.preclip = function(_) {
- return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;
- };
- projection.postclip = function(_) {
- return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
- };
- projection.clipAngle = function(_) {
- return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;
- };
- projection.clipExtent = function(_) {
- return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
- };
- projection.scale = function(_) {
- return arguments.length ? (k = +_, recenter()) : k;
- };
- projection.translate = function(_) {
- return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
- };
- projection.center = function(_) {
- return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];
- };
- projection.rotate = function(_) {
- return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];
- };
- projection.angle = function(_) {
- return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;
- };
- projection.precision = function(_) {
- return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);
- };
- projection.fitExtent = function(extent, object) {
- return fitExtent(projection, extent, object);
- };
- projection.fitSize = function(size, object) {
- return fitSize(projection, size, object);
- };
- projection.fitWidth = function(width, object) {
- return fitWidth(projection, width, object);
- };
- projection.fitHeight = function(height, object) {
- return fitHeight(projection, height, object);
- };
- function recenter() {
- var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),
- transform$$1 = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);
- rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);
- projectTransform = compose(project, transform$$1);
- projectRotateTransform = compose(rotate, projectTransform);
- projectResample = resample(projectTransform, delta2);
- return reset();
- }
- function reset() {
- cache = cacheStream = null;
- return projection;
- }
- return function() {
- project = projectAt.apply(this, arguments);
- projection.invert = project.invert && invert;
- return recenter();
- };
- }
- function conicProjection(projectAt) {
- var phi0 = 0,
- phi1 = pi / 3,
- m = projectionMutator(projectAt),
- p = m(phi0, phi1);
- p.parallels = function(_) {
- return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];
- };
- return p;
- }
- function cylindricalEqualAreaRaw(phi0) {
- var cosPhi0 = cos(phi0);
- function forward(lambda, phi) {
- return [lambda * cosPhi0, sin(phi) / cosPhi0];
- }
- forward.invert = function(x, y) {
- return [x / cosPhi0, asin(y * cosPhi0)];
- };
- return forward;
- }
- function conicEqualAreaRaw(y0, y1) {
- var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;
- // Are the parallels symmetrical around the Equator?
- if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);
- var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;
- function project(x, y) {
- var r = sqrt(c - 2 * n * sin(y)) / n;
- return [r * sin(x *= n), r0 - r * cos(x)];
- }
- project.invert = function(x, y) {
- var r0y = r0 - y;
- return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
- };
- return project;
- }
- function conicEqualArea() {
- return conicProjection(conicEqualAreaRaw)
- .scale(155.424)
- .center([0, 33.6442]);
- }
- function albers() {
- return conicEqualArea()
- .parallels([29.5, 45.5])
- .scale(1070)
- .translate([480, 250])
- .rotate([96, 0])
- .center([-0.6, 38.7]);
- }
- // The projections must have mutually exclusive clip regions on the sphere,
- // as this will avoid emitting interleaving lines and polygons.
- function multiplex(streams) {
- var n = streams.length;
- return {
- point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
- sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
- lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
- lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
- polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
- polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
- };
- }
- // A composite projection for the United States, configured by default for
- // 960×500. The projection also works quite well at 960×600 if you change the
- // scale to 1285 and adjust the translate accordingly. The set of standard
- // parallels for each region comes from USGS, which is published here:
- // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
- function albersUsa() {
- var cache,
- cacheStream,
- lower48 = albers(), lower48Point,
- alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
- hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
- point, pointStream = {point: function(x, y) { point = [x, y]; }};
- function albersUsa(coordinates) {
- var x = coordinates[0], y = coordinates[1];
- return point = null,
- (lower48Point.point(x, y), point)
- || (alaskaPoint.point(x, y), point)
- || (hawaiiPoint.point(x, y), point);
- }
- albersUsa.invert = function(coordinates) {
- var k = lower48.scale(),
- t = lower48.translate(),
- x = (coordinates[0] - t[0]) / k,
- y = (coordinates[1] - t[1]) / k;
- return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
- : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
- : lower48).invert(coordinates);
- };
- albersUsa.stream = function(stream) {
- return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
- };
- albersUsa.precision = function(_) {
- if (!arguments.length) return lower48.precision();
- lower48.precision(_), alaska.precision(_), hawaii.precision(_);
- return reset();
- };
- albersUsa.scale = function(_) {
- if (!arguments.length) return lower48.scale();
- lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
- return albersUsa.translate(lower48.translate());
- };
- albersUsa.translate = function(_) {
- if (!arguments.length) return lower48.translate();
- var k = lower48.scale(), x = +_[0], y = +_[1];
- lower48Point = lower48
- .translate(_)
- .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
- .stream(pointStream);
- alaskaPoint = alaska
- .translate([x - 0.307 * k, y + 0.201 * k])
- .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])
- .stream(pointStream);
- hawaiiPoint = hawaii
- .translate([x - 0.205 * k, y + 0.212 * k])
- .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])
- .stream(pointStream);
- return reset();
- };
- albersUsa.fitExtent = function(extent, object) {
- return fitExtent(albersUsa, extent, object);
- };
- albersUsa.fitSize = function(size, object) {
- return fitSize(albersUsa, size, object);
- };
- albersUsa.fitWidth = function(width, object) {
- return fitWidth(albersUsa, width, object);
- };
- albersUsa.fitHeight = function(height, object) {
- return fitHeight(albersUsa, height, object);
- };
- function reset() {
- cache = cacheStream = null;
- return albersUsa;
- }
- return albersUsa.scale(1070);
- }
- function azimuthalRaw(scale) {
- return function(x, y) {
- var cx = cos(x),
- cy = cos(y),
- k = scale(cx * cy);
- return [
- k * cy * sin(x),
- k * sin(y)
- ];
- }
- }
- function azimuthalInvert(angle) {
- return function(x, y) {
- var z = sqrt(x * x + y * y),
- c = angle(z),
- sc = sin(c),
- cc = cos(c);
- return [
- atan2(x * sc, z * cc),
- asin(z && y * sc / z)
- ];
- }
- }
- var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
- return sqrt(2 / (1 + cxcy));
- });
- azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
- return 2 * asin(z / 2);
- });
- function azimuthalEqualArea() {
- return projection(azimuthalEqualAreaRaw)
- .scale(124.75)
- .clipAngle(180 - 1e-3);
- }
- var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
- return (c = acos(c)) && c / sin(c);
- });
- azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
- return z;
- });
- function azimuthalEquidistant() {
- return projection(azimuthalEquidistantRaw)
- .scale(79.4188)
- .clipAngle(180 - 1e-3);
- }
- function mercatorRaw(lambda, phi) {
- return [lambda, log(tan((halfPi + phi) / 2))];
- }
- mercatorRaw.invert = function(x, y) {
- return [x, 2 * atan(exp(y)) - halfPi];
- };
- function mercator() {
- return mercatorProjection(mercatorRaw)
- .scale(961 / tau);
- }
- function mercatorProjection(project) {
- var m = projection(project),
- center = m.center,
- scale = m.scale,
- translate = m.translate,
- clipExtent = m.clipExtent,
- x0 = null, y0, x1, y1; // clip extent
- m.scale = function(_) {
- return arguments.length ? (scale(_), reclip()) : scale();
- };
- m.translate = function(_) {
- return arguments.length ? (translate(_), reclip()) : translate();
- };
- m.center = function(_) {
- return arguments.length ? (center(_), reclip()) : center();
- };
- m.clipExtent = function(_) {
- return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];
- };
- function reclip() {
- var k = pi * scale(),
- t = m(rotation(m.rotate()).invert([0, 0]));
- return clipExtent(x0 == null
- ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw
- ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]
- : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);
- }
- return reclip();
- }
- function tany(y) {
- return tan((halfPi + y) / 2);
- }
- function conicConformalRaw(y0, y1) {
- var cy0 = cos(y0),
- n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),
- f = cy0 * pow(tany(y0), n) / n;
- if (!n) return mercatorRaw;
- function project(x, y) {
- if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }
- else { if (y > halfPi - epsilon) y = halfPi - epsilon; }
- var r = f / pow(tany(y), n);
- return [r * sin(n * x), f - r * cos(n * x)];
- }
- project.invert = function(x, y) {
- var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);
- return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];
- };
- return project;
- }
- function conicConformal() {
- return conicProjection(conicConformalRaw)
- .scale(109.5)
- .parallels([30, 30]);
- }
- function equirectangularRaw(lambda, phi) {
- return [lambda, phi];
- }
- equirectangularRaw.invert = equirectangularRaw;
- function equirectangular() {
- return projection(equirectangularRaw)
- .scale(152.63);
- }
- function conicEquidistantRaw(y0, y1) {
- var cy0 = cos(y0),
- n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),
- g = cy0 / n + y0;
- if (abs(n) < epsilon) return equirectangularRaw;
- function project(x, y) {
- var gy = g - y, nx = n * x;
- return [gy * sin(nx), g - gy * cos(nx)];
- }
- project.invert = function(x, y) {
- var gy = g - y;
- return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];
- };
- return project;
- }
- function conicEquidistant() {
- return conicProjection(conicEquidistantRaw)
- .scale(131.154)
- .center([0, 13.9389]);
- }
- var A1 = 1.340264,
- A2 = -0.081106,
- A3 = 0.000893,
- A4 = 0.003796,
- M = sqrt(3) / 2,
- iterations = 12;
- function equalEarthRaw(lambda, phi) {
- var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;
- return [
- lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),
- l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))
- ];
- }
- equalEarthRaw.invert = function(x, y) {
- var l = y, l2 = l * l, l6 = l2 * l2 * l2;
- for (var i = 0, delta, fy, fpy; i < iterations; ++i) {
- fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;
- fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);
- l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;
- if (abs(delta) < epsilon2) break;
- }
- return [
- M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),
- asin(sin(l) / M)
- ];
- };
- function equalEarth() {
- return projection(equalEarthRaw)
- .scale(177.158);
- }
- function gnomonicRaw(x, y) {
- var cy = cos(y), k = cos(x) * cy;
- return [cy * sin(x) / k, sin(y) / k];
- }
- gnomonicRaw.invert = azimuthalInvert(atan);
- function gnomonic() {
- return projection(gnomonicRaw)
- .scale(144.049)
- .clipAngle(60);
- }
- function scaleTranslate$1(kx, ky, tx, ty) {
- return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({
- point: function(x, y) {
- this.stream.point(x * kx + tx, y * ky + ty);
- }
- });
- }
- function identity$1() {
- var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform$$1 = identity, // scale, translate and reflect
- x0 = null, y0, x1, y1, // clip extent
- postclip = identity,
- cache,
- cacheStream,
- projection;
- function reset() {
- cache = cacheStream = null;
- return projection;
- }
- return projection = {
- stream: function(stream) {
- return cache && cacheStream === stream ? cache : cache = transform$$1(postclip(cacheStream = stream));
- },
- postclip: function(_) {
- return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
- },
- clipExtent: function(_) {
- return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
- },
- scale: function(_) {
- return arguments.length ? (transform$$1 = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;
- },
- translate: function(_) {
- return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
- },
- reflectX: function(_) {
- return arguments.length ? (transform$$1 = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
- },
- reflectY: function(_) {
- return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
- },
- fitExtent: function(extent, object) {
- return fitExtent(projection, extent, object);
- },
- fitSize: function(size, object) {
- return fitSize(projection, size, object);
- },
- fitWidth: function(width, object) {
- return fitWidth(projection, width, object);
- },
- fitHeight: function(height, object) {
- return fitHeight(projection, height, object);
- }
- };
- }
- function naturalEarth1Raw(lambda, phi) {
- var phi2 = phi * phi, phi4 = phi2 * phi2;
- return [
- lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),
- phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))
- ];
- }
- naturalEarth1Raw.invert = function(x, y) {
- var phi = y, i = 25, delta;
- do {
- var phi2 = phi * phi, phi4 = phi2 * phi2;
- phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /
- (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));
- } while (abs(delta) > epsilon && --i > 0);
- return [
- x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),
- phi
- ];
- };
- function naturalEarth1() {
- return projection(naturalEarth1Raw)
- .scale(175.295);
- }
- function orthographicRaw(x, y) {
- return [cos(y) * sin(x), sin(y)];
- }
- orthographicRaw.invert = azimuthalInvert(asin);
- function orthographic() {
- return projection(orthographicRaw)
- .scale(249.5)
- .clipAngle(90 + epsilon);
- }
- function stereographicRaw(x, y) {
- var cy = cos(y), k = 1 + cos(x) * cy;
- return [cy * sin(x) / k, sin(y) / k];
- }
- stereographicRaw.invert = azimuthalInvert(function(z) {
- return 2 * atan(z);
- });
- function stereographic() {
- return projection(stereographicRaw)
- .scale(250)
- .clipAngle(142);
- }
- function transverseMercatorRaw(lambda, phi) {
- return [log(tan((halfPi + phi) / 2)), -lambda];
- }
- transverseMercatorRaw.invert = function(x, y) {
- return [-y, 2 * atan(exp(x)) - halfPi];
- };
- function transverseMercator() {
- var m = mercatorProjection(transverseMercatorRaw),
- center = m.center,
- rotate = m.rotate;
- m.center = function(_) {
- return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
- };
- m.rotate = function(_) {
- return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
- };
- return rotate([0, 0, 90])
- .scale(159.155);
- }
- exports.geoArea = area;
- exports.geoBounds = bounds;
- exports.geoCentroid = centroid;
- exports.geoCircle = circle;
- exports.geoClipAntimeridian = clipAntimeridian;
- exports.geoClipCircle = clipCircle;
- exports.geoClipExtent = extent;
- exports.geoClipRectangle = clipRectangle;
- exports.geoContains = contains;
- exports.geoDistance = distance;
- exports.geoGraticule = graticule;
- exports.geoGraticule10 = graticule10;
- exports.geoInterpolate = interpolate;
- exports.geoLength = length;
- exports.geoPath = index;
- exports.geoAlbers = albers;
- exports.geoAlbersUsa = albersUsa;
- exports.geoAzimuthalEqualArea = azimuthalEqualArea;
- exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;
- exports.geoAzimuthalEquidistant = azimuthalEquidistant;
- exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;
- exports.geoConicConformal = conicConformal;
- exports.geoConicConformalRaw = conicConformalRaw;
- exports.geoConicEqualArea = conicEqualArea;
- exports.geoConicEqualAreaRaw = conicEqualAreaRaw;
- exports.geoConicEquidistant = conicEquidistant;
- exports.geoConicEquidistantRaw = conicEquidistantRaw;
- exports.geoEqualEarth = equalEarth;
- exports.geoEqualEarthRaw = equalEarthRaw;
- exports.geoEquirectangular = equirectangular;
- exports.geoEquirectangularRaw = equirectangularRaw;
- exports.geoGnomonic = gnomonic;
- exports.geoGnomonicRaw = gnomonicRaw;
- exports.geoIdentity = identity$1;
- exports.geoProjection = projection;
- exports.geoProjectionMutator = projectionMutator;
- exports.geoMercator = mercator;
- exports.geoMercatorRaw = mercatorRaw;
- exports.geoNaturalEarth1 = naturalEarth1;
- exports.geoNaturalEarth1Raw = naturalEarth1Raw;
- exports.geoOrthographic = orthographic;
- exports.geoOrthographicRaw = orthographicRaw;
- exports.geoStereographic = stereographic;
- exports.geoStereographicRaw = stereographicRaw;
- exports.geoTransverseMercator = transverseMercator;
- exports.geoTransverseMercatorRaw = transverseMercatorRaw;
- exports.geoRotation = rotation;
- exports.geoStream = geoStream;
- exports.geoTransform = transform;
- Object.defineProperty(exports, '__esModule', { value: true });
- })));
- },{"d3-array":193}],195:[function(require,module,exports){
- 'use strict';
- exports.utils = require('./des/utils');
- exports.Cipher = require('./des/cipher');
- exports.DES = require('./des/des');
- exports.CBC = require('./des/cbc');
- exports.EDE = require('./des/ede');
- },{"./des/cbc":196,"./des/cipher":197,"./des/des":198,"./des/ede":199,"./des/utils":200}],196:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- var inherits = require('inherits');
- var proto = {};
- function CBCState(iv) {
- assert.equal(iv.length, 8, 'Invalid IV length');
- this.iv = new Array(8);
- for (var i = 0; i < this.iv.length; i++)
- this.iv[i] = iv[i];
- }
- function instantiate(Base) {
- function CBC(options) {
- Base.call(this, options);
- this._cbcInit();
- }
- inherits(CBC, Base);
- var keys = Object.keys(proto);
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- CBC.prototype[key] = proto[key];
- }
- CBC.create = function create(options) {
- return new CBC(options);
- };
- return CBC;
- }
- exports.instantiate = instantiate;
- proto._cbcInit = function _cbcInit() {
- var state = new CBCState(this.options.iv);
- this._cbcState = state;
- };
- proto._update = function _update(inp, inOff, out, outOff) {
- var state = this._cbcState;
- var superProto = this.constructor.super_.prototype;
- var iv = state.iv;
- if (this.type === 'encrypt') {
- for (var i = 0; i < this.blockSize; i++)
- iv[i] ^= inp[inOff + i];
- superProto._update.call(this, iv, 0, out, outOff);
- for (var i = 0; i < this.blockSize; i++)
- iv[i] = out[outOff + i];
- } else {
- superProto._update.call(this, inp, inOff, out, outOff);
- for (var i = 0; i < this.blockSize; i++)
- out[outOff + i] ^= iv[i];
- for (var i = 0; i < this.blockSize; i++)
- iv[i] = inp[inOff + i];
- }
- };
- },{"inherits":262,"minimalistic-assert":268}],197:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- function Cipher(options) {
- this.options = options;
- this.type = this.options.type;
- this.blockSize = 8;
- this._init();
- this.buffer = new Array(this.blockSize);
- this.bufferOff = 0;
- }
- module.exports = Cipher;
- Cipher.prototype._init = function _init() {
- // Might be overrided
- };
- Cipher.prototype.update = function update(data) {
- if (data.length === 0)
- return [];
- if (this.type === 'decrypt')
- return this._updateDecrypt(data);
- else
- return this._updateEncrypt(data);
- };
- Cipher.prototype._buffer = function _buffer(data, off) {
- // Append data to buffer
- var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
- for (var i = 0; i < min; i++)
- this.buffer[this.bufferOff + i] = data[off + i];
- this.bufferOff += min;
- // Shift next
- return min;
- };
- Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
- this._update(this.buffer, 0, out, off);
- this.bufferOff = 0;
- return this.blockSize;
- };
- Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
- var inputOff = 0;
- var outputOff = 0;
- var count = ((this.bufferOff + data.length) / this.blockSize) | 0;
- var out = new Array(count * this.blockSize);
- if (this.bufferOff !== 0) {
- inputOff += this._buffer(data, inputOff);
- if (this.bufferOff === this.buffer.length)
- outputOff += this._flushBuffer(out, outputOff);
- }
- // Write blocks
- var max = data.length - ((data.length - inputOff) % this.blockSize);
- for (; inputOff < max; inputOff += this.blockSize) {
- this._update(data, inputOff, out, outputOff);
- outputOff += this.blockSize;
- }
- // Queue rest
- for (; inputOff < data.length; inputOff++, this.bufferOff++)
- this.buffer[this.bufferOff] = data[inputOff];
- return out;
- };
- Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
- var inputOff = 0;
- var outputOff = 0;
- var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
- var out = new Array(count * this.blockSize);
- // TODO(indutny): optimize it, this is far from optimal
- for (; count > 0; count--) {
- inputOff += this._buffer(data, inputOff);
- outputOff += this._flushBuffer(out, outputOff);
- }
- // Buffer rest of the input
- inputOff += this._buffer(data, inputOff);
- return out;
- };
- Cipher.prototype.final = function final(buffer) {
- var first;
- if (buffer)
- first = this.update(buffer);
- var last;
- if (this.type === 'encrypt')
- last = this._finalEncrypt();
- else
- last = this._finalDecrypt();
- if (first)
- return first.concat(last);
- else
- return last;
- };
- Cipher.prototype._pad = function _pad(buffer, off) {
- if (off === 0)
- return false;
- while (off < buffer.length)
- buffer[off++] = 0;
- return true;
- };
- Cipher.prototype._finalEncrypt = function _finalEncrypt() {
- if (!this._pad(this.buffer, this.bufferOff))
- return [];
- var out = new Array(this.blockSize);
- this._update(this.buffer, 0, out, 0);
- return out;
- };
- Cipher.prototype._unpad = function _unpad(buffer) {
- return buffer;
- };
- Cipher.prototype._finalDecrypt = function _finalDecrypt() {
- assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
- var out = new Array(this.blockSize);
- this._flushBuffer(out, 0);
- return this._unpad(out);
- };
- },{"minimalistic-assert":268}],198:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- var inherits = require('inherits');
- var des = require('../des');
- var utils = des.utils;
- var Cipher = des.Cipher;
- function DESState() {
- this.tmp = new Array(2);
- this.keys = null;
- }
- function DES(options) {
- Cipher.call(this, options);
- var state = new DESState();
- this._desState = state;
- this.deriveKeys(state, options.key);
- }
- inherits(DES, Cipher);
- module.exports = DES;
- DES.create = function create(options) {
- return new DES(options);
- };
- var shiftTable = [
- 1, 1, 2, 2, 2, 2, 2, 2,
- 1, 2, 2, 2, 2, 2, 2, 1
- ];
- DES.prototype.deriveKeys = function deriveKeys(state, key) {
- state.keys = new Array(16 * 2);
- assert.equal(key.length, this.blockSize, 'Invalid key length');
- var kL = utils.readUInt32BE(key, 0);
- var kR = utils.readUInt32BE(key, 4);
- utils.pc1(kL, kR, state.tmp, 0);
- kL = state.tmp[0];
- kR = state.tmp[1];
- for (var i = 0; i < state.keys.length; i += 2) {
- var shift = shiftTable[i >>> 1];
- kL = utils.r28shl(kL, shift);
- kR = utils.r28shl(kR, shift);
- utils.pc2(kL, kR, state.keys, i);
- }
- };
- DES.prototype._update = function _update(inp, inOff, out, outOff) {
- var state = this._desState;
- var l = utils.readUInt32BE(inp, inOff);
- var r = utils.readUInt32BE(inp, inOff + 4);
- // Initial Permutation
- utils.ip(l, r, state.tmp, 0);
- l = state.tmp[0];
- r = state.tmp[1];
- if (this.type === 'encrypt')
- this._encrypt(state, l, r, state.tmp, 0);
- else
- this._decrypt(state, l, r, state.tmp, 0);
- l = state.tmp[0];
- r = state.tmp[1];
- utils.writeUInt32BE(out, l, outOff);
- utils.writeUInt32BE(out, r, outOff + 4);
- };
- DES.prototype._pad = function _pad(buffer, off) {
- var value = buffer.length - off;
- for (var i = off; i < buffer.length; i++)
- buffer[i] = value;
- return true;
- };
- DES.prototype._unpad = function _unpad(buffer) {
- var pad = buffer[buffer.length - 1];
- for (var i = buffer.length - pad; i < buffer.length; i++)
- assert.equal(buffer[i], pad);
- return buffer.slice(0, buffer.length - pad);
- };
- DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
- var l = lStart;
- var r = rStart;
- // Apply f() x16 times
- for (var i = 0; i < state.keys.length; i += 2) {
- var keyL = state.keys[i];
- var keyR = state.keys[i + 1];
- // f(r, k)
- utils.expand(r, state.tmp, 0);
- keyL ^= state.tmp[0];
- keyR ^= state.tmp[1];
- var s = utils.substitute(keyL, keyR);
- var f = utils.permute(s);
- var t = r;
- r = (l ^ f) >>> 0;
- l = t;
- }
- // Reverse Initial Permutation
- utils.rip(r, l, out, off);
- };
- DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
- var l = rStart;
- var r = lStart;
- // Apply f() x16 times
- for (var i = state.keys.length - 2; i >= 0; i -= 2) {
- var keyL = state.keys[i];
- var keyR = state.keys[i + 1];
- // f(r, k)
- utils.expand(l, state.tmp, 0);
- keyL ^= state.tmp[0];
- keyR ^= state.tmp[1];
- var s = utils.substitute(keyL, keyR);
- var f = utils.permute(s);
- var t = l;
- l = (r ^ f) >>> 0;
- r = t;
- }
- // Reverse Initial Permutation
- utils.rip(l, r, out, off);
- };
- },{"../des":195,"inherits":262,"minimalistic-assert":268}],199:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- var inherits = require('inherits');
- var des = require('../des');
- var Cipher = des.Cipher;
- var DES = des.DES;
- function EDEState(type, key) {
- assert.equal(key.length, 24, 'Invalid key length');
- var k1 = key.slice(0, 8);
- var k2 = key.slice(8, 16);
- var k3 = key.slice(16, 24);
- if (type === 'encrypt') {
- this.ciphers = [
- DES.create({ type: 'encrypt', key: k1 }),
- DES.create({ type: 'decrypt', key: k2 }),
- DES.create({ type: 'encrypt', key: k3 })
- ];
- } else {
- this.ciphers = [
- DES.create({ type: 'decrypt', key: k3 }),
- DES.create({ type: 'encrypt', key: k2 }),
- DES.create({ type: 'decrypt', key: k1 })
- ];
- }
- }
- function EDE(options) {
- Cipher.call(this, options);
- var state = new EDEState(this.type, this.options.key);
- this._edeState = state;
- }
- inherits(EDE, Cipher);
- module.exports = EDE;
- EDE.create = function create(options) {
- return new EDE(options);
- };
- EDE.prototype._update = function _update(inp, inOff, out, outOff) {
- var state = this._edeState;
- state.ciphers[0]._update(inp, inOff, out, outOff);
- state.ciphers[1]._update(out, outOff, out, outOff);
- state.ciphers[2]._update(out, outOff, out, outOff);
- };
- EDE.prototype._pad = DES.prototype._pad;
- EDE.prototype._unpad = DES.prototype._unpad;
- },{"../des":195,"inherits":262,"minimalistic-assert":268}],200:[function(require,module,exports){
- 'use strict';
- exports.readUInt32BE = function readUInt32BE(bytes, off) {
- var res = (bytes[0 + off] << 24) |
- (bytes[1 + off] << 16) |
- (bytes[2 + off] << 8) |
- bytes[3 + off];
- return res >>> 0;
- };
- exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
- bytes[0 + off] = value >>> 24;
- bytes[1 + off] = (value >>> 16) & 0xff;
- bytes[2 + off] = (value >>> 8) & 0xff;
- bytes[3 + off] = value & 0xff;
- };
- exports.ip = function ip(inL, inR, out, off) {
- var outL = 0;
- var outR = 0;
- for (var i = 6; i >= 0; i -= 2) {
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= (inR >>> (j + i)) & 1;
- }
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= (inL >>> (j + i)) & 1;
- }
- }
- for (var i = 6; i >= 0; i -= 2) {
- for (var j = 1; j <= 25; j += 8) {
- outR <<= 1;
- outR |= (inR >>> (j + i)) & 1;
- }
- for (var j = 1; j <= 25; j += 8) {
- outR <<= 1;
- outR |= (inL >>> (j + i)) & 1;
- }
- }
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- exports.rip = function rip(inL, inR, out, off) {
- var outL = 0;
- var outR = 0;
- for (var i = 0; i < 4; i++) {
- for (var j = 24; j >= 0; j -= 8) {
- outL <<= 1;
- outL |= (inR >>> (j + i)) & 1;
- outL <<= 1;
- outL |= (inL >>> (j + i)) & 1;
- }
- }
- for (var i = 4; i < 8; i++) {
- for (var j = 24; j >= 0; j -= 8) {
- outR <<= 1;
- outR |= (inR >>> (j + i)) & 1;
- outR <<= 1;
- outR |= (inL >>> (j + i)) & 1;
- }
- }
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- exports.pc1 = function pc1(inL, inR, out, off) {
- var outL = 0;
- var outR = 0;
- // 7, 15, 23, 31, 39, 47, 55, 63
- // 6, 14, 22, 30, 39, 47, 55, 63
- // 5, 13, 21, 29, 39, 47, 55, 63
- // 4, 12, 20, 28
- for (var i = 7; i >= 5; i--) {
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= (inR >> (j + i)) & 1;
- }
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= (inL >> (j + i)) & 1;
- }
- }
- for (var j = 0; j <= 24; j += 8) {
- outL <<= 1;
- outL |= (inR >> (j + i)) & 1;
- }
- // 1, 9, 17, 25, 33, 41, 49, 57
- // 2, 10, 18, 26, 34, 42, 50, 58
- // 3, 11, 19, 27, 35, 43, 51, 59
- // 36, 44, 52, 60
- for (var i = 1; i <= 3; i++) {
- for (var j = 0; j <= 24; j += 8) {
- outR <<= 1;
- outR |= (inR >> (j + i)) & 1;
- }
- for (var j = 0; j <= 24; j += 8) {
- outR <<= 1;
- outR |= (inL >> (j + i)) & 1;
- }
- }
- for (var j = 0; j <= 24; j += 8) {
- outR <<= 1;
- outR |= (inL >> (j + i)) & 1;
- }
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- exports.r28shl = function r28shl(num, shift) {
- return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));
- };
- var pc2table = [
- // inL => outL
- 14, 11, 17, 4, 27, 23, 25, 0,
- 13, 22, 7, 18, 5, 9, 16, 24,
- 2, 20, 12, 21, 1, 8, 15, 26,
- // inR => outR
- 15, 4, 25, 19, 9, 1, 26, 16,
- 5, 11, 23, 8, 12, 7, 17, 0,
- 22, 3, 10, 14, 6, 20, 27, 24
- ];
- exports.pc2 = function pc2(inL, inR, out, off) {
- var outL = 0;
- var outR = 0;
- var len = pc2table.length >>> 1;
- for (var i = 0; i < len; i++) {
- outL <<= 1;
- outL |= (inL >>> pc2table[i]) & 0x1;
- }
- for (var i = len; i < pc2table.length; i++) {
- outR <<= 1;
- outR |= (inR >>> pc2table[i]) & 0x1;
- }
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- exports.expand = function expand(r, out, off) {
- var outL = 0;
- var outR = 0;
- outL = ((r & 1) << 5) | (r >>> 27);
- for (var i = 23; i >= 15; i -= 4) {
- outL <<= 6;
- outL |= (r >>> i) & 0x3f;
- }
- for (var i = 11; i >= 3; i -= 4) {
- outR |= (r >>> i) & 0x3f;
- outR <<= 6;
- }
- outR |= ((r & 0x1f) << 1) | (r >>> 31);
- out[off + 0] = outL >>> 0;
- out[off + 1] = outR >>> 0;
- };
- var sTable = [
- 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
- 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
- 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
- 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,
- 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
- 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
- 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
- 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,
- 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
- 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
- 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
- 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,
- 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
- 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
- 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
- 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,
- 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
- 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
- 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
- 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,
- 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
- 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
- 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
- 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,
- 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
- 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
- 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
- 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,
- 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
- 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
- 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
- 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
- ];
- exports.substitute = function substitute(inL, inR) {
- var out = 0;
- for (var i = 0; i < 4; i++) {
- var b = (inL >>> (18 - i * 6)) & 0x3f;
- var sb = sTable[i * 0x40 + b];
- out <<= 4;
- out |= sb;
- }
- for (var i = 0; i < 4; i++) {
- var b = (inR >>> (18 - i * 6)) & 0x3f;
- var sb = sTable[4 * 0x40 + i * 0x40 + b];
- out <<= 4;
- out |= sb;
- }
- return out >>> 0;
- };
- var permuteTable = [
- 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,
- 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7
- ];
- exports.permute = function permute(num) {
- var out = 0;
- for (var i = 0; i < permuteTable.length; i++) {
- out <<= 1;
- out |= (num >>> permuteTable[i]) & 0x1;
- }
- return out >>> 0;
- };
- exports.padSplit = function padSplit(num, size, group) {
- var str = num.toString(2);
- while (str.length < size)
- str = '0' + str;
- var out = [];
- for (var i = 0; i < size; i += group)
- out.push(str.slice(i, i + group));
- return out.join(' ');
- };
- },{}],201:[function(require,module,exports){
- (function (Buffer){
- var generatePrime = require('./lib/generatePrime')
- var primes = require('./lib/primes.json')
- var DH = require('./lib/dh')
- function getDiffieHellman (mod) {
- var prime = new Buffer(primes[mod].prime, 'hex')
- var gen = new Buffer(primes[mod].gen, 'hex')
- return new DH(prime, gen)
- }
- var ENCODINGS = {
- 'binary': true, 'hex': true, 'base64': true
- }
- function createDiffieHellman (prime, enc, generator, genc) {
- if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
- return createDiffieHellman(prime, 'binary', enc, generator)
- }
- enc = enc || 'binary'
- genc = genc || 'binary'
- generator = generator || new Buffer([2])
- if (!Buffer.isBuffer(generator)) {
- generator = new Buffer(generator, genc)
- }
- if (typeof prime === 'number') {
- return new DH(generatePrime(prime, generator), generator, true)
- }
- if (!Buffer.isBuffer(prime)) {
- prime = new Buffer(prime, enc)
- }
- return new DH(prime, generator, true)
- }
- exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman
- exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman
- }).call(this,require("buffer").Buffer)
- },{"./lib/dh":202,"./lib/generatePrime":203,"./lib/primes.json":204,"buffer":182}],202:[function(require,module,exports){
- (function (Buffer){
- var BN = require('bn.js');
- var MillerRabin = require('miller-rabin');
- var millerRabin = new MillerRabin();
- var TWENTYFOUR = new BN(24);
- var ELEVEN = new BN(11);
- var TEN = new BN(10);
- var THREE = new BN(3);
- var SEVEN = new BN(7);
- var primes = require('./generatePrime');
- var randomBytes = require('randombytes');
- module.exports = DH;
- function setPublicKey(pub, enc) {
- enc = enc || 'utf8';
- if (!Buffer.isBuffer(pub)) {
- pub = new Buffer(pub, enc);
- }
- this._pub = new BN(pub);
- return this;
- }
- function setPrivateKey(priv, enc) {
- enc = enc || 'utf8';
- if (!Buffer.isBuffer(priv)) {
- priv = new Buffer(priv, enc);
- }
- this._priv = new BN(priv);
- return this;
- }
- var primeCache = {};
- function checkPrime(prime, generator) {
- var gen = generator.toString('hex');
- var hex = [gen, prime.toString(16)].join('_');
- if (hex in primeCache) {
- return primeCache[hex];
- }
- var error = 0;
- if (prime.isEven() ||
- !primes.simpleSieve ||
- !primes.fermatTest(prime) ||
- !millerRabin.test(prime)) {
- //not a prime so +1
- error += 1;
- if (gen === '02' || gen === '05') {
- // we'd be able to check the generator
- // it would fail so +8
- error += 8;
- } else {
- //we wouldn't be able to test the generator
- // so +4
- error += 4;
- }
- primeCache[hex] = error;
- return error;
- }
- if (!millerRabin.test(prime.shrn(1))) {
- //not a safe prime
- error += 2;
- }
- var rem;
- switch (gen) {
- case '02':
- if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
- // unsuidable generator
- error += 8;
- }
- break;
- case '05':
- rem = prime.mod(TEN);
- if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
- // prime mod 10 needs to equal 3 or 7
- error += 8;
- }
- break;
- default:
- error += 4;
- }
- primeCache[hex] = error;
- return error;
- }
- function DH(prime, generator, malleable) {
- this.setGenerator(generator);
- this.__prime = new BN(prime);
- this._prime = BN.mont(this.__prime);
- this._primeLen = prime.length;
- this._pub = undefined;
- this._priv = undefined;
- this._primeCode = undefined;
- if (malleable) {
- this.setPublicKey = setPublicKey;
- this.setPrivateKey = setPrivateKey;
- } else {
- this._primeCode = 8;
- }
- }
- Object.defineProperty(DH.prototype, 'verifyError', {
- enumerable: true,
- get: function () {
- if (typeof this._primeCode !== 'number') {
- this._primeCode = checkPrime(this.__prime, this.__gen);
- }
- return this._primeCode;
- }
- });
- DH.prototype.generateKeys = function () {
- if (!this._priv) {
- this._priv = new BN(randomBytes(this._primeLen));
- }
- this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
- return this.getPublicKey();
- };
- DH.prototype.computeSecret = function (other) {
- other = new BN(other);
- other = other.toRed(this._prime);
- var secret = other.redPow(this._priv).fromRed();
- var out = new Buffer(secret.toArray());
- var prime = this.getPrime();
- if (out.length < prime.length) {
- var front = new Buffer(prime.length - out.length);
- front.fill(0);
- out = Buffer.concat([front, out]);
- }
- return out;
- };
- DH.prototype.getPublicKey = function getPublicKey(enc) {
- return formatReturnValue(this._pub, enc);
- };
- DH.prototype.getPrivateKey = function getPrivateKey(enc) {
- return formatReturnValue(this._priv, enc);
- };
- DH.prototype.getPrime = function (enc) {
- return formatReturnValue(this.__prime, enc);
- };
- DH.prototype.getGenerator = function (enc) {
- return formatReturnValue(this._gen, enc);
- };
- DH.prototype.setGenerator = function (gen, enc) {
- enc = enc || 'utf8';
- if (!Buffer.isBuffer(gen)) {
- gen = new Buffer(gen, enc);
- }
- this.__gen = gen;
- this._gen = new BN(gen);
- return this;
- };
- function formatReturnValue(bn, enc) {
- var buf = new Buffer(bn.toArray());
- if (!enc) {
- return buf;
- } else {
- return buf.toString(enc);
- }
- }
- }).call(this,require("buffer").Buffer)
- },{"./generatePrime":203,"bn.js":147,"buffer":182,"miller-rabin":267,"randombytes":298}],203:[function(require,module,exports){
- var randomBytes = require('randombytes');
- module.exports = findPrime;
- findPrime.simpleSieve = simpleSieve;
- findPrime.fermatTest = fermatTest;
- var BN = require('bn.js');
- var TWENTYFOUR = new BN(24);
- var MillerRabin = require('miller-rabin');
- var millerRabin = new MillerRabin();
- var ONE = new BN(1);
- var TWO = new BN(2);
- var FIVE = new BN(5);
- var SIXTEEN = new BN(16);
- var EIGHT = new BN(8);
- var TEN = new BN(10);
- var THREE = new BN(3);
- var SEVEN = new BN(7);
- var ELEVEN = new BN(11);
- var FOUR = new BN(4);
- var TWELVE = new BN(12);
- var primes = null;
- function _getPrimes() {
- if (primes !== null)
- return primes;
- var limit = 0x100000;
- var res = [];
- res[0] = 2;
- for (var i = 1, k = 3; k < limit; k += 2) {
- var sqrt = Math.ceil(Math.sqrt(k));
- for (var j = 0; j < i && res[j] <= sqrt; j++)
- if (k % res[j] === 0)
- break;
- if (i !== j && res[j] <= sqrt)
- continue;
- res[i++] = k;
- }
- primes = res;
- return res;
- }
- function simpleSieve(p) {
- var primes = _getPrimes();
- for (var i = 0; i < primes.length; i++)
- if (p.modn(primes[i]) === 0) {
- if (p.cmpn(primes[i]) === 0) {
- return true;
- } else {
- return false;
- }
- }
- return true;
- }
- function fermatTest(p) {
- var red = BN.mont(p);
- return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
- }
- function findPrime(bits, gen) {
- if (bits < 16) {
- // this is what openssl does
- if (gen === 2 || gen === 5) {
- return new BN([0x8c, 0x7b]);
- } else {
- return new BN([0x8c, 0x27]);
- }
- }
- gen = new BN(gen);
- var num, n2;
- while (true) {
- num = new BN(randomBytes(Math.ceil(bits / 8)));
- while (num.bitLength() > bits) {
- num.ishrn(1);
- }
- if (num.isEven()) {
- num.iadd(ONE);
- }
- if (!num.testn(1)) {
- num.iadd(TWO);
- }
- if (!gen.cmp(TWO)) {
- while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
- num.iadd(FOUR);
- }
- } else if (!gen.cmp(FIVE)) {
- while (num.mod(TEN).cmp(THREE)) {
- num.iadd(FOUR);
- }
- }
- n2 = num.shrn(1);
- if (simpleSieve(n2) && simpleSieve(num) &&
- fermatTest(n2) && fermatTest(num) &&
- millerRabin.test(n2) && millerRabin.test(num)) {
- return num;
- }
- }
- }
- },{"bn.js":147,"miller-rabin":267,"randombytes":298}],204:[function(require,module,exports){
- module.exports={
- "modp1": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"
- },
- "modp2": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"
- },
- "modp5": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"
- },
- "modp14": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"
- },
- "modp15": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"
- },
- "modp16": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
- },
- "modp17": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"
- },
- "modp18": {
- "gen": "02",
- "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"
- }
- }
- },{}],205:[function(require,module,exports){
- 'use strict';
- var elliptic = exports;
- elliptic.version = require('../package.json').version;
- elliptic.utils = require('./elliptic/utils');
- elliptic.rand = require('brorand');
- elliptic.curve = require('./elliptic/curve');
- elliptic.curves = require('./elliptic/curves');
- // Protocols
- elliptic.ec = require('./elliptic/ec');
- elliptic.eddsa = require('./elliptic/eddsa');
- },{"../package.json":220,"./elliptic/curve":208,"./elliptic/curves":211,"./elliptic/ec":212,"./elliptic/eddsa":215,"./elliptic/utils":219,"brorand":148}],206:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var utils = require('../utils');
- var getNAF = utils.getNAF;
- var getJSF = utils.getJSF;
- var assert = utils.assert;
- function BaseCurve(type, conf) {
- this.type = type;
- this.p = new BN(conf.p, 16);
- // Use Montgomery, when there is no fast reduction for the prime
- this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
- // Useful for many curves
- this.zero = new BN(0).toRed(this.red);
- this.one = new BN(1).toRed(this.red);
- this.two = new BN(2).toRed(this.red);
- // Curve configuration, optional
- this.n = conf.n && new BN(conf.n, 16);
- this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
- // Temporary arrays
- this._wnafT1 = new Array(4);
- this._wnafT2 = new Array(4);
- this._wnafT3 = new Array(4);
- this._wnafT4 = new Array(4);
- // Generalized Greg Maxwell's trick
- var adjustCount = this.n && this.p.div(this.n);
- if (!adjustCount || adjustCount.cmpn(100) > 0) {
- this.redN = null;
- } else {
- this._maxwellTrick = true;
- this.redN = this.n.toRed(this.red);
- }
- }
- module.exports = BaseCurve;
- BaseCurve.prototype.point = function point() {
- throw new Error('Not implemented');
- };
- BaseCurve.prototype.validate = function validate() {
- throw new Error('Not implemented');
- };
- BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
- assert(p.precomputed);
- var doubles = p._getDoubles();
- var naf = getNAF(k, 1);
- var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
- I /= 3;
- // Translate into more windowed form
- var repr = [];
- for (var j = 0; j < naf.length; j += doubles.step) {
- var nafW = 0;
- for (var k = j + doubles.step - 1; k >= j; k--)
- nafW = (nafW << 1) + naf[k];
- repr.push(nafW);
- }
- var a = this.jpoint(null, null, null);
- var b = this.jpoint(null, null, null);
- for (var i = I; i > 0; i--) {
- for (var j = 0; j < repr.length; j++) {
- var nafW = repr[j];
- if (nafW === i)
- b = b.mixedAdd(doubles.points[j]);
- else if (nafW === -i)
- b = b.mixedAdd(doubles.points[j].neg());
- }
- a = a.add(b);
- }
- return a.toP();
- };
- BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
- var w = 4;
- // Precompute window
- var nafPoints = p._getNAFPoints(w);
- w = nafPoints.wnd;
- var wnd = nafPoints.points;
- // Get NAF form
- var naf = getNAF(k, w);
- // Add `this`*(N+1) for every w-NAF index
- var acc = this.jpoint(null, null, null);
- for (var i = naf.length - 1; i >= 0; i--) {
- // Count zeroes
- for (var k = 0; i >= 0 && naf[i] === 0; i--)
- k++;
- if (i >= 0)
- k++;
- acc = acc.dblp(k);
- if (i < 0)
- break;
- var z = naf[i];
- assert(z !== 0);
- if (p.type === 'affine') {
- // J +- P
- if (z > 0)
- acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
- else
- acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
- } else {
- // J +- J
- if (z > 0)
- acc = acc.add(wnd[(z - 1) >> 1]);
- else
- acc = acc.add(wnd[(-z - 1) >> 1].neg());
- }
- }
- return p.type === 'affine' ? acc.toP() : acc;
- };
- BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
- points,
- coeffs,
- len,
- jacobianResult) {
- var wndWidth = this._wnafT1;
- var wnd = this._wnafT2;
- var naf = this._wnafT3;
- // Fill all arrays
- var max = 0;
- for (var i = 0; i < len; i++) {
- var p = points[i];
- var nafPoints = p._getNAFPoints(defW);
- wndWidth[i] = nafPoints.wnd;
- wnd[i] = nafPoints.points;
- }
- // Comb small window NAFs
- for (var i = len - 1; i >= 1; i -= 2) {
- var a = i - 1;
- var b = i;
- if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
- naf[a] = getNAF(coeffs[a], wndWidth[a]);
- naf[b] = getNAF(coeffs[b], wndWidth[b]);
- max = Math.max(naf[a].length, max);
- max = Math.max(naf[b].length, max);
- continue;
- }
- var comb = [
- points[a], /* 1 */
- null, /* 3 */
- null, /* 5 */
- points[b] /* 7 */
- ];
- // Try to avoid Projective points, if possible
- if (points[a].y.cmp(points[b].y) === 0) {
- comb[1] = points[a].add(points[b]);
- comb[2] = points[a].toJ().mixedAdd(points[b].neg());
- } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
- comb[1] = points[a].toJ().mixedAdd(points[b]);
- comb[2] = points[a].add(points[b].neg());
- } else {
- comb[1] = points[a].toJ().mixedAdd(points[b]);
- comb[2] = points[a].toJ().mixedAdd(points[b].neg());
- }
- var index = [
- -3, /* -1 -1 */
- -1, /* -1 0 */
- -5, /* -1 1 */
- -7, /* 0 -1 */
- 0, /* 0 0 */
- 7, /* 0 1 */
- 5, /* 1 -1 */
- 1, /* 1 0 */
- 3 /* 1 1 */
- ];
- var jsf = getJSF(coeffs[a], coeffs[b]);
- max = Math.max(jsf[0].length, max);
- naf[a] = new Array(max);
- naf[b] = new Array(max);
- for (var j = 0; j < max; j++) {
- var ja = jsf[0][j] | 0;
- var jb = jsf[1][j] | 0;
- naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
- naf[b][j] = 0;
- wnd[a] = comb;
- }
- }
- var acc = this.jpoint(null, null, null);
- var tmp = this._wnafT4;
- for (var i = max; i >= 0; i--) {
- var k = 0;
- while (i >= 0) {
- var zero = true;
- for (var j = 0; j < len; j++) {
- tmp[j] = naf[j][i] | 0;
- if (tmp[j] !== 0)
- zero = false;
- }
- if (!zero)
- break;
- k++;
- i--;
- }
- if (i >= 0)
- k++;
- acc = acc.dblp(k);
- if (i < 0)
- break;
- for (var j = 0; j < len; j++) {
- var z = tmp[j];
- var p;
- if (z === 0)
- continue;
- else if (z > 0)
- p = wnd[j][(z - 1) >> 1];
- else if (z < 0)
- p = wnd[j][(-z - 1) >> 1].neg();
- if (p.type === 'affine')
- acc = acc.mixedAdd(p);
- else
- acc = acc.add(p);
- }
- }
- // Zeroify references
- for (var i = 0; i < len; i++)
- wnd[i] = null;
- if (jacobianResult)
- return acc;
- else
- return acc.toP();
- };
- function BasePoint(curve, type) {
- this.curve = curve;
- this.type = type;
- this.precomputed = null;
- }
- BaseCurve.BasePoint = BasePoint;
- BasePoint.prototype.eq = function eq(/*other*/) {
- throw new Error('Not implemented');
- };
- BasePoint.prototype.validate = function validate() {
- return this.curve.validate(this);
- };
- BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
- bytes = utils.toArray(bytes, enc);
- var len = this.p.byteLength();
- // uncompressed, hybrid-odd, hybrid-even
- if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
- bytes.length - 1 === 2 * len) {
- if (bytes[0] === 0x06)
- assert(bytes[bytes.length - 1] % 2 === 0);
- else if (bytes[0] === 0x07)
- assert(bytes[bytes.length - 1] % 2 === 1);
- var res = this.point(bytes.slice(1, 1 + len),
- bytes.slice(1 + len, 1 + 2 * len));
- return res;
- } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
- bytes.length - 1 === len) {
- return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
- }
- throw new Error('Unknown point format');
- };
- BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
- return this.encode(enc, true);
- };
- BasePoint.prototype._encode = function _encode(compact) {
- var len = this.curve.p.byteLength();
- var x = this.getX().toArray('be', len);
- if (compact)
- return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
- return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
- };
- BasePoint.prototype.encode = function encode(enc, compact) {
- return utils.encode(this._encode(compact), enc);
- };
- BasePoint.prototype.precompute = function precompute(power) {
- if (this.precomputed)
- return this;
- var precomputed = {
- doubles: null,
- naf: null,
- beta: null
- };
- precomputed.naf = this._getNAFPoints(8);
- precomputed.doubles = this._getDoubles(4, power);
- precomputed.beta = this._getBeta();
- this.precomputed = precomputed;
- return this;
- };
- BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
- if (!this.precomputed)
- return false;
- var doubles = this.precomputed.doubles;
- if (!doubles)
- return false;
- return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
- };
- BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
- if (this.precomputed && this.precomputed.doubles)
- return this.precomputed.doubles;
- var doubles = [ this ];
- var acc = this;
- for (var i = 0; i < power; i += step) {
- for (var j = 0; j < step; j++)
- acc = acc.dbl();
- doubles.push(acc);
- }
- return {
- step: step,
- points: doubles
- };
- };
- BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
- if (this.precomputed && this.precomputed.naf)
- return this.precomputed.naf;
- var res = [ this ];
- var max = (1 << wnd) - 1;
- var dbl = max === 1 ? null : this.dbl();
- for (var i = 1; i < max; i++)
- res[i] = res[i - 1].add(dbl);
- return {
- wnd: wnd,
- points: res
- };
- };
- BasePoint.prototype._getBeta = function _getBeta() {
- return null;
- };
- BasePoint.prototype.dblp = function dblp(k) {
- var r = this;
- for (var i = 0; i < k; i++)
- r = r.dbl();
- return r;
- };
- },{"../utils":219,"bn.js":147}],207:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var BN = require('bn.js');
- var inherits = require('inherits');
- var Base = require('./base');
- var assert = utils.assert;
- function EdwardsCurve(conf) {
- // NOTE: Important as we are creating point in Base.call()
- this.twisted = (conf.a | 0) !== 1;
- this.mOneA = this.twisted && (conf.a | 0) === -1;
- this.extended = this.mOneA;
- Base.call(this, 'edwards', conf);
- this.a = new BN(conf.a, 16).umod(this.red.m);
- this.a = this.a.toRed(this.red);
- this.c = new BN(conf.c, 16).toRed(this.red);
- this.c2 = this.c.redSqr();
- this.d = new BN(conf.d, 16).toRed(this.red);
- this.dd = this.d.redAdd(this.d);
- assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
- this.oneC = (conf.c | 0) === 1;
- }
- inherits(EdwardsCurve, Base);
- module.exports = EdwardsCurve;
- EdwardsCurve.prototype._mulA = function _mulA(num) {
- if (this.mOneA)
- return num.redNeg();
- else
- return this.a.redMul(num);
- };
- EdwardsCurve.prototype._mulC = function _mulC(num) {
- if (this.oneC)
- return num;
- else
- return this.c.redMul(num);
- };
- // Just for compatibility with Short curve
- EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
- return this.point(x, y, z, t);
- };
- EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
- x = new BN(x, 16);
- if (!x.red)
- x = x.toRed(this.red);
- var x2 = x.redSqr();
- var rhs = this.c2.redSub(this.a.redMul(x2));
- var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
- var y2 = rhs.redMul(lhs.redInvm());
- var y = y2.redSqrt();
- if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
- throw new Error('invalid point');
- var isOdd = y.fromRed().isOdd();
- if (odd && !isOdd || !odd && isOdd)
- y = y.redNeg();
- return this.point(x, y);
- };
- EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
- y = new BN(y, 16);
- if (!y.red)
- y = y.toRed(this.red);
- // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)
- var y2 = y.redSqr();
- var lhs = y2.redSub(this.c2);
- var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);
- var x2 = lhs.redMul(rhs.redInvm());
- if (x2.cmp(this.zero) === 0) {
- if (odd)
- throw new Error('invalid point');
- else
- return this.point(this.zero, y);
- }
- var x = x2.redSqrt();
- if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
- throw new Error('invalid point');
- if (x.fromRed().isOdd() !== odd)
- x = x.redNeg();
- return this.point(x, y);
- };
- EdwardsCurve.prototype.validate = function validate(point) {
- if (point.isInfinity())
- return true;
- // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
- point.normalize();
- var x2 = point.x.redSqr();
- var y2 = point.y.redSqr();
- var lhs = x2.redMul(this.a).redAdd(y2);
- var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
- return lhs.cmp(rhs) === 0;
- };
- function Point(curve, x, y, z, t) {
- Base.BasePoint.call(this, curve, 'projective');
- if (x === null && y === null && z === null) {
- this.x = this.curve.zero;
- this.y = this.curve.one;
- this.z = this.curve.one;
- this.t = this.curve.zero;
- this.zOne = true;
- } else {
- this.x = new BN(x, 16);
- this.y = new BN(y, 16);
- this.z = z ? new BN(z, 16) : this.curve.one;
- this.t = t && new BN(t, 16);
- if (!this.x.red)
- this.x = this.x.toRed(this.curve.red);
- if (!this.y.red)
- this.y = this.y.toRed(this.curve.red);
- if (!this.z.red)
- this.z = this.z.toRed(this.curve.red);
- if (this.t && !this.t.red)
- this.t = this.t.toRed(this.curve.red);
- this.zOne = this.z === this.curve.one;
- // Use extended coordinates
- if (this.curve.extended && !this.t) {
- this.t = this.x.redMul(this.y);
- if (!this.zOne)
- this.t = this.t.redMul(this.z.redInvm());
- }
- }
- }
- inherits(Point, Base.BasePoint);
- EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
- return Point.fromJSON(this, obj);
- };
- EdwardsCurve.prototype.point = function point(x, y, z, t) {
- return new Point(this, x, y, z, t);
- };
- Point.fromJSON = function fromJSON(curve, obj) {
- return new Point(curve, obj[0], obj[1], obj[2]);
- };
- Point.prototype.inspect = function inspect() {
- if (this.isInfinity())
- return '<EC Point Infinity>';
- return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
- ' y: ' + this.y.fromRed().toString(16, 2) +
- ' z: ' + this.z.fromRed().toString(16, 2) + '>';
- };
- Point.prototype.isInfinity = function isInfinity() {
- // XXX This code assumes that zero is always zero in red
- return this.x.cmpn(0) === 0 &&
- (this.y.cmp(this.z) === 0 ||
- (this.zOne && this.y.cmp(this.curve.c) === 0));
- };
- Point.prototype._extDbl = function _extDbl() {
- // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
- // #doubling-dbl-2008-hwcd
- // 4M + 4S
- // A = X1^2
- var a = this.x.redSqr();
- // B = Y1^2
- var b = this.y.redSqr();
- // C = 2 * Z1^2
- var c = this.z.redSqr();
- c = c.redIAdd(c);
- // D = a * A
- var d = this.curve._mulA(a);
- // E = (X1 + Y1)^2 - A - B
- var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
- // G = D + B
- var g = d.redAdd(b);
- // F = G - C
- var f = g.redSub(c);
- // H = D - B
- var h = d.redSub(b);
- // X3 = E * F
- var nx = e.redMul(f);
- // Y3 = G * H
- var ny = g.redMul(h);
- // T3 = E * H
- var nt = e.redMul(h);
- // Z3 = F * G
- var nz = f.redMul(g);
- return this.curve.point(nx, ny, nz, nt);
- };
- Point.prototype._projDbl = function _projDbl() {
- // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
- // #doubling-dbl-2008-bbjlp
- // #doubling-dbl-2007-bl
- // and others
- // Generally 3M + 4S or 2M + 4S
- // B = (X1 + Y1)^2
- var b = this.x.redAdd(this.y).redSqr();
- // C = X1^2
- var c = this.x.redSqr();
- // D = Y1^2
- var d = this.y.redSqr();
- var nx;
- var ny;
- var nz;
- if (this.curve.twisted) {
- // E = a * C
- var e = this.curve._mulA(c);
- // F = E + D
- var f = e.redAdd(d);
- if (this.zOne) {
- // X3 = (B - C - D) * (F - 2)
- nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
- // Y3 = F * (E - D)
- ny = f.redMul(e.redSub(d));
- // Z3 = F^2 - 2 * F
- nz = f.redSqr().redSub(f).redSub(f);
- } else {
- // H = Z1^2
- var h = this.z.redSqr();
- // J = F - 2 * H
- var j = f.redSub(h).redISub(h);
- // X3 = (B-C-D)*J
- nx = b.redSub(c).redISub(d).redMul(j);
- // Y3 = F * (E - D)
- ny = f.redMul(e.redSub(d));
- // Z3 = F * J
- nz = f.redMul(j);
- }
- } else {
- // E = C + D
- var e = c.redAdd(d);
- // H = (c * Z1)^2
- var h = this.curve._mulC(this.z).redSqr();
- // J = E - 2 * H
- var j = e.redSub(h).redSub(h);
- // X3 = c * (B - E) * J
- nx = this.curve._mulC(b.redISub(e)).redMul(j);
- // Y3 = c * E * (C - D)
- ny = this.curve._mulC(e).redMul(c.redISub(d));
- // Z3 = E * J
- nz = e.redMul(j);
- }
- return this.curve.point(nx, ny, nz);
- };
- Point.prototype.dbl = function dbl() {
- if (this.isInfinity())
- return this;
- // Double in extended coordinates
- if (this.curve.extended)
- return this._extDbl();
- else
- return this._projDbl();
- };
- Point.prototype._extAdd = function _extAdd(p) {
- // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
- // #addition-add-2008-hwcd-3
- // 8M
- // A = (Y1 - X1) * (Y2 - X2)
- var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
- // B = (Y1 + X1) * (Y2 + X2)
- var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
- // C = T1 * k * T2
- var c = this.t.redMul(this.curve.dd).redMul(p.t);
- // D = Z1 * 2 * Z2
- var d = this.z.redMul(p.z.redAdd(p.z));
- // E = B - A
- var e = b.redSub(a);
- // F = D - C
- var f = d.redSub(c);
- // G = D + C
- var g = d.redAdd(c);
- // H = B + A
- var h = b.redAdd(a);
- // X3 = E * F
- var nx = e.redMul(f);
- // Y3 = G * H
- var ny = g.redMul(h);
- // T3 = E * H
- var nt = e.redMul(h);
- // Z3 = F * G
- var nz = f.redMul(g);
- return this.curve.point(nx, ny, nz, nt);
- };
- Point.prototype._projAdd = function _projAdd(p) {
- // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
- // #addition-add-2008-bbjlp
- // #addition-add-2007-bl
- // 10M + 1S
- // A = Z1 * Z2
- var a = this.z.redMul(p.z);
- // B = A^2
- var b = a.redSqr();
- // C = X1 * X2
- var c = this.x.redMul(p.x);
- // D = Y1 * Y2
- var d = this.y.redMul(p.y);
- // E = d * C * D
- var e = this.curve.d.redMul(c).redMul(d);
- // F = B - E
- var f = b.redSub(e);
- // G = B + E
- var g = b.redAdd(e);
- // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
- var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
- var nx = a.redMul(f).redMul(tmp);
- var ny;
- var nz;
- if (this.curve.twisted) {
- // Y3 = A * G * (D - a * C)
- ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
- // Z3 = F * G
- nz = f.redMul(g);
- } else {
- // Y3 = A * G * (D - C)
- ny = a.redMul(g).redMul(d.redSub(c));
- // Z3 = c * F * G
- nz = this.curve._mulC(f).redMul(g);
- }
- return this.curve.point(nx, ny, nz);
- };
- Point.prototype.add = function add(p) {
- if (this.isInfinity())
- return p;
- if (p.isInfinity())
- return this;
- if (this.curve.extended)
- return this._extAdd(p);
- else
- return this._projAdd(p);
- };
- Point.prototype.mul = function mul(k) {
- if (this._hasDoubles(k))
- return this.curve._fixedNafMul(this, k);
- else
- return this.curve._wnafMul(this, k);
- };
- Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
- return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
- };
- Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
- return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
- };
- Point.prototype.normalize = function normalize() {
- if (this.zOne)
- return this;
- // Normalize coordinates
- var zi = this.z.redInvm();
- this.x = this.x.redMul(zi);
- this.y = this.y.redMul(zi);
- if (this.t)
- this.t = this.t.redMul(zi);
- this.z = this.curve.one;
- this.zOne = true;
- return this;
- };
- Point.prototype.neg = function neg() {
- return this.curve.point(this.x.redNeg(),
- this.y,
- this.z,
- this.t && this.t.redNeg());
- };
- Point.prototype.getX = function getX() {
- this.normalize();
- return this.x.fromRed();
- };
- Point.prototype.getY = function getY() {
- this.normalize();
- return this.y.fromRed();
- };
- Point.prototype.eq = function eq(other) {
- return this === other ||
- this.getX().cmp(other.getX()) === 0 &&
- this.getY().cmp(other.getY()) === 0;
- };
- Point.prototype.eqXToP = function eqXToP(x) {
- var rx = x.toRed(this.curve.red).redMul(this.z);
- if (this.x.cmp(rx) === 0)
- return true;
- var xc = x.clone();
- var t = this.curve.redN.redMul(this.z);
- for (;;) {
- xc.iadd(this.curve.n);
- if (xc.cmp(this.curve.p) >= 0)
- return false;
- rx.redIAdd(t);
- if (this.x.cmp(rx) === 0)
- return true;
- }
- };
- // Compatibility with BaseCurve
- Point.prototype.toP = Point.prototype.normalize;
- Point.prototype.mixedAdd = Point.prototype.add;
- },{"../utils":219,"./base":206,"bn.js":147,"inherits":262}],208:[function(require,module,exports){
- 'use strict';
- var curve = exports;
- curve.base = require('./base');
- curve.short = require('./short');
- curve.mont = require('./mont');
- curve.edwards = require('./edwards');
- },{"./base":206,"./edwards":207,"./mont":209,"./short":210}],209:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var inherits = require('inherits');
- var Base = require('./base');
- var utils = require('../utils');
- function MontCurve(conf) {
- Base.call(this, 'mont', conf);
- this.a = new BN(conf.a, 16).toRed(this.red);
- this.b = new BN(conf.b, 16).toRed(this.red);
- this.i4 = new BN(4).toRed(this.red).redInvm();
- this.two = new BN(2).toRed(this.red);
- this.a24 = this.i4.redMul(this.a.redAdd(this.two));
- }
- inherits(MontCurve, Base);
- module.exports = MontCurve;
- MontCurve.prototype.validate = function validate(point) {
- var x = point.normalize().x;
- var x2 = x.redSqr();
- var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
- var y = rhs.redSqrt();
- return y.redSqr().cmp(rhs) === 0;
- };
- function Point(curve, x, z) {
- Base.BasePoint.call(this, curve, 'projective');
- if (x === null && z === null) {
- this.x = this.curve.one;
- this.z = this.curve.zero;
- } else {
- this.x = new BN(x, 16);
- this.z = new BN(z, 16);
- if (!this.x.red)
- this.x = this.x.toRed(this.curve.red);
- if (!this.z.red)
- this.z = this.z.toRed(this.curve.red);
- }
- }
- inherits(Point, Base.BasePoint);
- MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
- return this.point(utils.toArray(bytes, enc), 1);
- };
- MontCurve.prototype.point = function point(x, z) {
- return new Point(this, x, z);
- };
- MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
- return Point.fromJSON(this, obj);
- };
- Point.prototype.precompute = function precompute() {
- // No-op
- };
- Point.prototype._encode = function _encode() {
- return this.getX().toArray('be', this.curve.p.byteLength());
- };
- Point.fromJSON = function fromJSON(curve, obj) {
- return new Point(curve, obj[0], obj[1] || curve.one);
- };
- Point.prototype.inspect = function inspect() {
- if (this.isInfinity())
- return '<EC Point Infinity>';
- return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
- ' z: ' + this.z.fromRed().toString(16, 2) + '>';
- };
- Point.prototype.isInfinity = function isInfinity() {
- // XXX This code assumes that zero is always zero in red
- return this.z.cmpn(0) === 0;
- };
- Point.prototype.dbl = function dbl() {
- // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
- // 2M + 2S + 4A
- // A = X1 + Z1
- var a = this.x.redAdd(this.z);
- // AA = A^2
- var aa = a.redSqr();
- // B = X1 - Z1
- var b = this.x.redSub(this.z);
- // BB = B^2
- var bb = b.redSqr();
- // C = AA - BB
- var c = aa.redSub(bb);
- // X3 = AA * BB
- var nx = aa.redMul(bb);
- // Z3 = C * (BB + A24 * C)
- var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
- return this.curve.point(nx, nz);
- };
- Point.prototype.add = function add() {
- throw new Error('Not supported on Montgomery curve');
- };
- Point.prototype.diffAdd = function diffAdd(p, diff) {
- // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
- // 4M + 2S + 6A
- // A = X2 + Z2
- var a = this.x.redAdd(this.z);
- // B = X2 - Z2
- var b = this.x.redSub(this.z);
- // C = X3 + Z3
- var c = p.x.redAdd(p.z);
- // D = X3 - Z3
- var d = p.x.redSub(p.z);
- // DA = D * A
- var da = d.redMul(a);
- // CB = C * B
- var cb = c.redMul(b);
- // X5 = Z1 * (DA + CB)^2
- var nx = diff.z.redMul(da.redAdd(cb).redSqr());
- // Z5 = X1 * (DA - CB)^2
- var nz = diff.x.redMul(da.redISub(cb).redSqr());
- return this.curve.point(nx, nz);
- };
- Point.prototype.mul = function mul(k) {
- var t = k.clone();
- var a = this; // (N / 2) * Q + Q
- var b = this.curve.point(null, null); // (N / 2) * Q
- var c = this; // Q
- for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
- bits.push(t.andln(1));
- for (var i = bits.length - 1; i >= 0; i--) {
- if (bits[i] === 0) {
- // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
- a = a.diffAdd(b, c);
- // N * Q = 2 * ((N / 2) * Q + Q))
- b = b.dbl();
- } else {
- // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
- b = a.diffAdd(b, c);
- // N * Q + Q = 2 * ((N / 2) * Q + Q)
- a = a.dbl();
- }
- }
- return b;
- };
- Point.prototype.mulAdd = function mulAdd() {
- throw new Error('Not supported on Montgomery curve');
- };
- Point.prototype.jumlAdd = function jumlAdd() {
- throw new Error('Not supported on Montgomery curve');
- };
- Point.prototype.eq = function eq(other) {
- return this.getX().cmp(other.getX()) === 0;
- };
- Point.prototype.normalize = function normalize() {
- this.x = this.x.redMul(this.z.redInvm());
- this.z = this.curve.one;
- return this;
- };
- Point.prototype.getX = function getX() {
- // Normalize coordinates
- this.normalize();
- return this.x.fromRed();
- };
- },{"../utils":219,"./base":206,"bn.js":147,"inherits":262}],210:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var BN = require('bn.js');
- var inherits = require('inherits');
- var Base = require('./base');
- var assert = utils.assert;
- function ShortCurve(conf) {
- Base.call(this, 'short', conf);
- this.a = new BN(conf.a, 16).toRed(this.red);
- this.b = new BN(conf.b, 16).toRed(this.red);
- this.tinv = this.two.redInvm();
- this.zeroA = this.a.fromRed().cmpn(0) === 0;
- this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
- // If the curve is endomorphic, precalculate beta and lambda
- this.endo = this._getEndomorphism(conf);
- this._endoWnafT1 = new Array(4);
- this._endoWnafT2 = new Array(4);
- }
- inherits(ShortCurve, Base);
- module.exports = ShortCurve;
- ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
- // No efficient endomorphism
- if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
- return;
- // Compute beta and lambda, that lambda * P = (beta * Px; Py)
- var beta;
- var lambda;
- if (conf.beta) {
- beta = new BN(conf.beta, 16).toRed(this.red);
- } else {
- var betas = this._getEndoRoots(this.p);
- // Choose the smallest beta
- beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
- beta = beta.toRed(this.red);
- }
- if (conf.lambda) {
- lambda = new BN(conf.lambda, 16);
- } else {
- // Choose the lambda that is matching selected beta
- var lambdas = this._getEndoRoots(this.n);
- if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
- lambda = lambdas[0];
- } else {
- lambda = lambdas[1];
- assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
- }
- }
- // Get basis vectors, used for balanced length-two representation
- var basis;
- if (conf.basis) {
- basis = conf.basis.map(function(vec) {
- return {
- a: new BN(vec.a, 16),
- b: new BN(vec.b, 16)
- };
- });
- } else {
- basis = this._getEndoBasis(lambda);
- }
- return {
- beta: beta,
- lambda: lambda,
- basis: basis
- };
- };
- ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
- // Find roots of for x^2 + x + 1 in F
- // Root = (-1 +- Sqrt(-3)) / 2
- //
- var red = num === this.p ? this.red : BN.mont(num);
- var tinv = new BN(2).toRed(red).redInvm();
- var ntinv = tinv.redNeg();
- var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
- var l1 = ntinv.redAdd(s).fromRed();
- var l2 = ntinv.redSub(s).fromRed();
- return [ l1, l2 ];
- };
- ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
- // aprxSqrt >= sqrt(this.n)
- var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
- // 3.74
- // Run EGCD, until r(L + 1) < aprxSqrt
- var u = lambda;
- var v = this.n.clone();
- var x1 = new BN(1);
- var y1 = new BN(0);
- var x2 = new BN(0);
- var y2 = new BN(1);
- // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
- var a0;
- var b0;
- // First vector
- var a1;
- var b1;
- // Second vector
- var a2;
- var b2;
- var prevR;
- var i = 0;
- var r;
- var x;
- while (u.cmpn(0) !== 0) {
- var q = v.div(u);
- r = v.sub(q.mul(u));
- x = x2.sub(q.mul(x1));
- var y = y2.sub(q.mul(y1));
- if (!a1 && r.cmp(aprxSqrt) < 0) {
- a0 = prevR.neg();
- b0 = x1;
- a1 = r.neg();
- b1 = x;
- } else if (a1 && ++i === 2) {
- break;
- }
- prevR = r;
- v = u;
- u = r;
- x2 = x1;
- x1 = x;
- y2 = y1;
- y1 = y;
- }
- a2 = r.neg();
- b2 = x;
- var len1 = a1.sqr().add(b1.sqr());
- var len2 = a2.sqr().add(b2.sqr());
- if (len2.cmp(len1) >= 0) {
- a2 = a0;
- b2 = b0;
- }
- // Normalize signs
- if (a1.negative) {
- a1 = a1.neg();
- b1 = b1.neg();
- }
- if (a2.negative) {
- a2 = a2.neg();
- b2 = b2.neg();
- }
- return [
- { a: a1, b: b1 },
- { a: a2, b: b2 }
- ];
- };
- ShortCurve.prototype._endoSplit = function _endoSplit(k) {
- var basis = this.endo.basis;
- var v1 = basis[0];
- var v2 = basis[1];
- var c1 = v2.b.mul(k).divRound(this.n);
- var c2 = v1.b.neg().mul(k).divRound(this.n);
- var p1 = c1.mul(v1.a);
- var p2 = c2.mul(v2.a);
- var q1 = c1.mul(v1.b);
- var q2 = c2.mul(v2.b);
- // Calculate answer
- var k1 = k.sub(p1).sub(p2);
- var k2 = q1.add(q2).neg();
- return { k1: k1, k2: k2 };
- };
- ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
- x = new BN(x, 16);
- if (!x.red)
- x = x.toRed(this.red);
- var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
- var y = y2.redSqrt();
- if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
- throw new Error('invalid point');
- // XXX Is there any way to tell if the number is odd without converting it
- // to non-red form?
- var isOdd = y.fromRed().isOdd();
- if (odd && !isOdd || !odd && isOdd)
- y = y.redNeg();
- return this.point(x, y);
- };
- ShortCurve.prototype.validate = function validate(point) {
- if (point.inf)
- return true;
- var x = point.x;
- var y = point.y;
- var ax = this.a.redMul(x);
- var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
- return y.redSqr().redISub(rhs).cmpn(0) === 0;
- };
- ShortCurve.prototype._endoWnafMulAdd =
- function _endoWnafMulAdd(points, coeffs, jacobianResult) {
- var npoints = this._endoWnafT1;
- var ncoeffs = this._endoWnafT2;
- for (var i = 0; i < points.length; i++) {
- var split = this._endoSplit(coeffs[i]);
- var p = points[i];
- var beta = p._getBeta();
- if (split.k1.negative) {
- split.k1.ineg();
- p = p.neg(true);
- }
- if (split.k2.negative) {
- split.k2.ineg();
- beta = beta.neg(true);
- }
- npoints[i * 2] = p;
- npoints[i * 2 + 1] = beta;
- ncoeffs[i * 2] = split.k1;
- ncoeffs[i * 2 + 1] = split.k2;
- }
- var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
- // Clean-up references to points and coefficients
- for (var j = 0; j < i * 2; j++) {
- npoints[j] = null;
- ncoeffs[j] = null;
- }
- return res;
- };
- function Point(curve, x, y, isRed) {
- Base.BasePoint.call(this, curve, 'affine');
- if (x === null && y === null) {
- this.x = null;
- this.y = null;
- this.inf = true;
- } else {
- this.x = new BN(x, 16);
- this.y = new BN(y, 16);
- // Force redgomery representation when loading from JSON
- if (isRed) {
- this.x.forceRed(this.curve.red);
- this.y.forceRed(this.curve.red);
- }
- if (!this.x.red)
- this.x = this.x.toRed(this.curve.red);
- if (!this.y.red)
- this.y = this.y.toRed(this.curve.red);
- this.inf = false;
- }
- }
- inherits(Point, Base.BasePoint);
- ShortCurve.prototype.point = function point(x, y, isRed) {
- return new Point(this, x, y, isRed);
- };
- ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
- return Point.fromJSON(this, obj, red);
- };
- Point.prototype._getBeta = function _getBeta() {
- if (!this.curve.endo)
- return;
- var pre = this.precomputed;
- if (pre && pre.beta)
- return pre.beta;
- var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
- if (pre) {
- var curve = this.curve;
- var endoMul = function(p) {
- return curve.point(p.x.redMul(curve.endo.beta), p.y);
- };
- pre.beta = beta;
- beta.precomputed = {
- beta: null,
- naf: pre.naf && {
- wnd: pre.naf.wnd,
- points: pre.naf.points.map(endoMul)
- },
- doubles: pre.doubles && {
- step: pre.doubles.step,
- points: pre.doubles.points.map(endoMul)
- }
- };
- }
- return beta;
- };
- Point.prototype.toJSON = function toJSON() {
- if (!this.precomputed)
- return [ this.x, this.y ];
- return [ this.x, this.y, this.precomputed && {
- doubles: this.precomputed.doubles && {
- step: this.precomputed.doubles.step,
- points: this.precomputed.doubles.points.slice(1)
- },
- naf: this.precomputed.naf && {
- wnd: this.precomputed.naf.wnd,
- points: this.precomputed.naf.points.slice(1)
- }
- } ];
- };
- Point.fromJSON = function fromJSON(curve, obj, red) {
- if (typeof obj === 'string')
- obj = JSON.parse(obj);
- var res = curve.point(obj[0], obj[1], red);
- if (!obj[2])
- return res;
- function obj2point(obj) {
- return curve.point(obj[0], obj[1], red);
- }
- var pre = obj[2];
- res.precomputed = {
- beta: null,
- doubles: pre.doubles && {
- step: pre.doubles.step,
- points: [ res ].concat(pre.doubles.points.map(obj2point))
- },
- naf: pre.naf && {
- wnd: pre.naf.wnd,
- points: [ res ].concat(pre.naf.points.map(obj2point))
- }
- };
- return res;
- };
- Point.prototype.inspect = function inspect() {
- if (this.isInfinity())
- return '<EC Point Infinity>';
- return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
- ' y: ' + this.y.fromRed().toString(16, 2) + '>';
- };
- Point.prototype.isInfinity = function isInfinity() {
- return this.inf;
- };
- Point.prototype.add = function add(p) {
- // O + P = P
- if (this.inf)
- return p;
- // P + O = P
- if (p.inf)
- return this;
- // P + P = 2P
- if (this.eq(p))
- return this.dbl();
- // P + (-P) = O
- if (this.neg().eq(p))
- return this.curve.point(null, null);
- // P + Q = O
- if (this.x.cmp(p.x) === 0)
- return this.curve.point(null, null);
- var c = this.y.redSub(p.y);
- if (c.cmpn(0) !== 0)
- c = c.redMul(this.x.redSub(p.x).redInvm());
- var nx = c.redSqr().redISub(this.x).redISub(p.x);
- var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
- return this.curve.point(nx, ny);
- };
- Point.prototype.dbl = function dbl() {
- if (this.inf)
- return this;
- // 2P = O
- var ys1 = this.y.redAdd(this.y);
- if (ys1.cmpn(0) === 0)
- return this.curve.point(null, null);
- var a = this.curve.a;
- var x2 = this.x.redSqr();
- var dyinv = ys1.redInvm();
- var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
- var nx = c.redSqr().redISub(this.x.redAdd(this.x));
- var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
- return this.curve.point(nx, ny);
- };
- Point.prototype.getX = function getX() {
- return this.x.fromRed();
- };
- Point.prototype.getY = function getY() {
- return this.y.fromRed();
- };
- Point.prototype.mul = function mul(k) {
- k = new BN(k, 16);
- if (this.isInfinity())
- return this;
- else if (this._hasDoubles(k))
- return this.curve._fixedNafMul(this, k);
- else if (this.curve.endo)
- return this.curve._endoWnafMulAdd([ this ], [ k ]);
- else
- return this.curve._wnafMul(this, k);
- };
- Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
- var points = [ this, p2 ];
- var coeffs = [ k1, k2 ];
- if (this.curve.endo)
- return this.curve._endoWnafMulAdd(points, coeffs);
- else
- return this.curve._wnafMulAdd(1, points, coeffs, 2);
- };
- Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
- var points = [ this, p2 ];
- var coeffs = [ k1, k2 ];
- if (this.curve.endo)
- return this.curve._endoWnafMulAdd(points, coeffs, true);
- else
- return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
- };
- Point.prototype.eq = function eq(p) {
- return this === p ||
- this.inf === p.inf &&
- (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
- };
- Point.prototype.neg = function neg(_precompute) {
- if (this.inf)
- return this;
- var res = this.curve.point(this.x, this.y.redNeg());
- if (_precompute && this.precomputed) {
- var pre = this.precomputed;
- var negate = function(p) {
- return p.neg();
- };
- res.precomputed = {
- naf: pre.naf && {
- wnd: pre.naf.wnd,
- points: pre.naf.points.map(negate)
- },
- doubles: pre.doubles && {
- step: pre.doubles.step,
- points: pre.doubles.points.map(negate)
- }
- };
- }
- return res;
- };
- Point.prototype.toJ = function toJ() {
- if (this.inf)
- return this.curve.jpoint(null, null, null);
- var res = this.curve.jpoint(this.x, this.y, this.curve.one);
- return res;
- };
- function JPoint(curve, x, y, z) {
- Base.BasePoint.call(this, curve, 'jacobian');
- if (x === null && y === null && z === null) {
- this.x = this.curve.one;
- this.y = this.curve.one;
- this.z = new BN(0);
- } else {
- this.x = new BN(x, 16);
- this.y = new BN(y, 16);
- this.z = new BN(z, 16);
- }
- if (!this.x.red)
- this.x = this.x.toRed(this.curve.red);
- if (!this.y.red)
- this.y = this.y.toRed(this.curve.red);
- if (!this.z.red)
- this.z = this.z.toRed(this.curve.red);
- this.zOne = this.z === this.curve.one;
- }
- inherits(JPoint, Base.BasePoint);
- ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
- return new JPoint(this, x, y, z);
- };
- JPoint.prototype.toP = function toP() {
- if (this.isInfinity())
- return this.curve.point(null, null);
- var zinv = this.z.redInvm();
- var zinv2 = zinv.redSqr();
- var ax = this.x.redMul(zinv2);
- var ay = this.y.redMul(zinv2).redMul(zinv);
- return this.curve.point(ax, ay);
- };
- JPoint.prototype.neg = function neg() {
- return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
- };
- JPoint.prototype.add = function add(p) {
- // O + P = P
- if (this.isInfinity())
- return p;
- // P + O = P
- if (p.isInfinity())
- return this;
- // 12M + 4S + 7A
- var pz2 = p.z.redSqr();
- var z2 = this.z.redSqr();
- var u1 = this.x.redMul(pz2);
- var u2 = p.x.redMul(z2);
- var s1 = this.y.redMul(pz2.redMul(p.z));
- var s2 = p.y.redMul(z2.redMul(this.z));
- var h = u1.redSub(u2);
- var r = s1.redSub(s2);
- if (h.cmpn(0) === 0) {
- if (r.cmpn(0) !== 0)
- return this.curve.jpoint(null, null, null);
- else
- return this.dbl();
- }
- var h2 = h.redSqr();
- var h3 = h2.redMul(h);
- var v = u1.redMul(h2);
- var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
- var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
- var nz = this.z.redMul(p.z).redMul(h);
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype.mixedAdd = function mixedAdd(p) {
- // O + P = P
- if (this.isInfinity())
- return p.toJ();
- // P + O = P
- if (p.isInfinity())
- return this;
- // 8M + 3S + 7A
- var z2 = this.z.redSqr();
- var u1 = this.x;
- var u2 = p.x.redMul(z2);
- var s1 = this.y;
- var s2 = p.y.redMul(z2).redMul(this.z);
- var h = u1.redSub(u2);
- var r = s1.redSub(s2);
- if (h.cmpn(0) === 0) {
- if (r.cmpn(0) !== 0)
- return this.curve.jpoint(null, null, null);
- else
- return this.dbl();
- }
- var h2 = h.redSqr();
- var h3 = h2.redMul(h);
- var v = u1.redMul(h2);
- var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
- var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
- var nz = this.z.redMul(h);
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype.dblp = function dblp(pow) {
- if (pow === 0)
- return this;
- if (this.isInfinity())
- return this;
- if (!pow)
- return this.dbl();
- if (this.curve.zeroA || this.curve.threeA) {
- var r = this;
- for (var i = 0; i < pow; i++)
- r = r.dbl();
- return r;
- }
- // 1M + 2S + 1A + N * (4S + 5M + 8A)
- // N = 1 => 6M + 6S + 9A
- var a = this.curve.a;
- var tinv = this.curve.tinv;
- var jx = this.x;
- var jy = this.y;
- var jz = this.z;
- var jz4 = jz.redSqr().redSqr();
- // Reuse results
- var jyd = jy.redAdd(jy);
- for (var i = 0; i < pow; i++) {
- var jx2 = jx.redSqr();
- var jyd2 = jyd.redSqr();
- var jyd4 = jyd2.redSqr();
- var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
- var t1 = jx.redMul(jyd2);
- var nx = c.redSqr().redISub(t1.redAdd(t1));
- var t2 = t1.redISub(nx);
- var dny = c.redMul(t2);
- dny = dny.redIAdd(dny).redISub(jyd4);
- var nz = jyd.redMul(jz);
- if (i + 1 < pow)
- jz4 = jz4.redMul(jyd4);
- jx = nx;
- jz = nz;
- jyd = dny;
- }
- return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
- };
- JPoint.prototype.dbl = function dbl() {
- if (this.isInfinity())
- return this;
- if (this.curve.zeroA)
- return this._zeroDbl();
- else if (this.curve.threeA)
- return this._threeDbl();
- else
- return this._dbl();
- };
- JPoint.prototype._zeroDbl = function _zeroDbl() {
- var nx;
- var ny;
- var nz;
- // Z = 1
- if (this.zOne) {
- // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
- // #doubling-mdbl-2007-bl
- // 1M + 5S + 14A
- // XX = X1^2
- var xx = this.x.redSqr();
- // YY = Y1^2
- var yy = this.y.redSqr();
- // YYYY = YY^2
- var yyyy = yy.redSqr();
- // S = 2 * ((X1 + YY)^2 - XX - YYYY)
- var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
- s = s.redIAdd(s);
- // M = 3 * XX + a; a = 0
- var m = xx.redAdd(xx).redIAdd(xx);
- // T = M ^ 2 - 2*S
- var t = m.redSqr().redISub(s).redISub(s);
- // 8 * YYYY
- var yyyy8 = yyyy.redIAdd(yyyy);
- yyyy8 = yyyy8.redIAdd(yyyy8);
- yyyy8 = yyyy8.redIAdd(yyyy8);
- // X3 = T
- nx = t;
- // Y3 = M * (S - T) - 8 * YYYY
- ny = m.redMul(s.redISub(t)).redISub(yyyy8);
- // Z3 = 2*Y1
- nz = this.y.redAdd(this.y);
- } else {
- // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
- // #doubling-dbl-2009-l
- // 2M + 5S + 13A
- // A = X1^2
- var a = this.x.redSqr();
- // B = Y1^2
- var b = this.y.redSqr();
- // C = B^2
- var c = b.redSqr();
- // D = 2 * ((X1 + B)^2 - A - C)
- var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
- d = d.redIAdd(d);
- // E = 3 * A
- var e = a.redAdd(a).redIAdd(a);
- // F = E^2
- var f = e.redSqr();
- // 8 * C
- var c8 = c.redIAdd(c);
- c8 = c8.redIAdd(c8);
- c8 = c8.redIAdd(c8);
- // X3 = F - 2 * D
- nx = f.redISub(d).redISub(d);
- // Y3 = E * (D - X3) - 8 * C
- ny = e.redMul(d.redISub(nx)).redISub(c8);
- // Z3 = 2 * Y1 * Z1
- nz = this.y.redMul(this.z);
- nz = nz.redIAdd(nz);
- }
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype._threeDbl = function _threeDbl() {
- var nx;
- var ny;
- var nz;
- // Z = 1
- if (this.zOne) {
- // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
- // #doubling-mdbl-2007-bl
- // 1M + 5S + 15A
- // XX = X1^2
- var xx = this.x.redSqr();
- // YY = Y1^2
- var yy = this.y.redSqr();
- // YYYY = YY^2
- var yyyy = yy.redSqr();
- // S = 2 * ((X1 + YY)^2 - XX - YYYY)
- var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
- s = s.redIAdd(s);
- // M = 3 * XX + a
- var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
- // T = M^2 - 2 * S
- var t = m.redSqr().redISub(s).redISub(s);
- // X3 = T
- nx = t;
- // Y3 = M * (S - T) - 8 * YYYY
- var yyyy8 = yyyy.redIAdd(yyyy);
- yyyy8 = yyyy8.redIAdd(yyyy8);
- yyyy8 = yyyy8.redIAdd(yyyy8);
- ny = m.redMul(s.redISub(t)).redISub(yyyy8);
- // Z3 = 2 * Y1
- nz = this.y.redAdd(this.y);
- } else {
- // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
- // 3M + 5S
- // delta = Z1^2
- var delta = this.z.redSqr();
- // gamma = Y1^2
- var gamma = this.y.redSqr();
- // beta = X1 * gamma
- var beta = this.x.redMul(gamma);
- // alpha = 3 * (X1 - delta) * (X1 + delta)
- var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
- alpha = alpha.redAdd(alpha).redIAdd(alpha);
- // X3 = alpha^2 - 8 * beta
- var beta4 = beta.redIAdd(beta);
- beta4 = beta4.redIAdd(beta4);
- var beta8 = beta4.redAdd(beta4);
- nx = alpha.redSqr().redISub(beta8);
- // Z3 = (Y1 + Z1)^2 - gamma - delta
- nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
- // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
- var ggamma8 = gamma.redSqr();
- ggamma8 = ggamma8.redIAdd(ggamma8);
- ggamma8 = ggamma8.redIAdd(ggamma8);
- ggamma8 = ggamma8.redIAdd(ggamma8);
- ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
- }
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype._dbl = function _dbl() {
- var a = this.curve.a;
- // 4M + 6S + 10A
- var jx = this.x;
- var jy = this.y;
- var jz = this.z;
- var jz4 = jz.redSqr().redSqr();
- var jx2 = jx.redSqr();
- var jy2 = jy.redSqr();
- var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
- var jxd4 = jx.redAdd(jx);
- jxd4 = jxd4.redIAdd(jxd4);
- var t1 = jxd4.redMul(jy2);
- var nx = c.redSqr().redISub(t1.redAdd(t1));
- var t2 = t1.redISub(nx);
- var jyd8 = jy2.redSqr();
- jyd8 = jyd8.redIAdd(jyd8);
- jyd8 = jyd8.redIAdd(jyd8);
- jyd8 = jyd8.redIAdd(jyd8);
- var ny = c.redMul(t2).redISub(jyd8);
- var nz = jy.redAdd(jy).redMul(jz);
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype.trpl = function trpl() {
- if (!this.curve.zeroA)
- return this.dbl().add(this);
- // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
- // 5M + 10S + ...
- // XX = X1^2
- var xx = this.x.redSqr();
- // YY = Y1^2
- var yy = this.y.redSqr();
- // ZZ = Z1^2
- var zz = this.z.redSqr();
- // YYYY = YY^2
- var yyyy = yy.redSqr();
- // M = 3 * XX + a * ZZ2; a = 0
- var m = xx.redAdd(xx).redIAdd(xx);
- // MM = M^2
- var mm = m.redSqr();
- // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
- var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
- e = e.redIAdd(e);
- e = e.redAdd(e).redIAdd(e);
- e = e.redISub(mm);
- // EE = E^2
- var ee = e.redSqr();
- // T = 16*YYYY
- var t = yyyy.redIAdd(yyyy);
- t = t.redIAdd(t);
- t = t.redIAdd(t);
- t = t.redIAdd(t);
- // U = (M + E)^2 - MM - EE - T
- var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
- // X3 = 4 * (X1 * EE - 4 * YY * U)
- var yyu4 = yy.redMul(u);
- yyu4 = yyu4.redIAdd(yyu4);
- yyu4 = yyu4.redIAdd(yyu4);
- var nx = this.x.redMul(ee).redISub(yyu4);
- nx = nx.redIAdd(nx);
- nx = nx.redIAdd(nx);
- // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
- var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
- ny = ny.redIAdd(ny);
- ny = ny.redIAdd(ny);
- ny = ny.redIAdd(ny);
- // Z3 = (Z1 + E)^2 - ZZ - EE
- var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
- return this.curve.jpoint(nx, ny, nz);
- };
- JPoint.prototype.mul = function mul(k, kbase) {
- k = new BN(k, kbase);
- return this.curve._wnafMul(this, k);
- };
- JPoint.prototype.eq = function eq(p) {
- if (p.type === 'affine')
- return this.eq(p.toJ());
- if (this === p)
- return true;
- // x1 * z2^2 == x2 * z1^2
- var z2 = this.z.redSqr();
- var pz2 = p.z.redSqr();
- if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
- return false;
- // y1 * z2^3 == y2 * z1^3
- var z3 = z2.redMul(this.z);
- var pz3 = pz2.redMul(p.z);
- return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
- };
- JPoint.prototype.eqXToP = function eqXToP(x) {
- var zs = this.z.redSqr();
- var rx = x.toRed(this.curve.red).redMul(zs);
- if (this.x.cmp(rx) === 0)
- return true;
- var xc = x.clone();
- var t = this.curve.redN.redMul(zs);
- for (;;) {
- xc.iadd(this.curve.n);
- if (xc.cmp(this.curve.p) >= 0)
- return false;
- rx.redIAdd(t);
- if (this.x.cmp(rx) === 0)
- return true;
- }
- };
- JPoint.prototype.inspect = function inspect() {
- if (this.isInfinity())
- return '<EC JPoint Infinity>';
- return '<EC JPoint x: ' + this.x.toString(16, 2) +
- ' y: ' + this.y.toString(16, 2) +
- ' z: ' + this.z.toString(16, 2) + '>';
- };
- JPoint.prototype.isInfinity = function isInfinity() {
- // XXX This code assumes that zero is always zero in red
- return this.z.cmpn(0) === 0;
- };
- },{"../utils":219,"./base":206,"bn.js":147,"inherits":262}],211:[function(require,module,exports){
- 'use strict';
- var curves = exports;
- var hash = require('hash.js');
- var curve = require('./curve');
- var utils = require('./utils');
- var assert = utils.assert;
- function PresetCurve(options) {
- if (options.type === 'short')
- this.curve = new curve.short(options);
- else if (options.type === 'edwards')
- this.curve = new curve.edwards(options);
- else
- this.curve = new curve.mont(options);
- this.g = this.curve.g;
- this.n = this.curve.n;
- this.hash = options.hash;
- assert(this.g.validate(), 'Invalid curve');
- assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
- }
- curves.PresetCurve = PresetCurve;
- function defineCurve(name, options) {
- Object.defineProperty(curves, name, {
- configurable: true,
- enumerable: true,
- get: function() {
- var curve = new PresetCurve(options);
- Object.defineProperty(curves, name, {
- configurable: true,
- enumerable: true,
- value: curve
- });
- return curve;
- }
- });
- }
- defineCurve('p192', {
- type: 'short',
- prime: 'p192',
- p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
- a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
- b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
- n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
- hash: hash.sha256,
- gRed: false,
- g: [
- '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
- '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
- ]
- });
- defineCurve('p224', {
- type: 'short',
- prime: 'p224',
- p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
- a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
- b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
- n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
- hash: hash.sha256,
- gRed: false,
- g: [
- 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
- 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
- ]
- });
- defineCurve('p256', {
- type: 'short',
- prime: null,
- p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
- a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
- b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
- n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
- hash: hash.sha256,
- gRed: false,
- g: [
- '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
- '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
- ]
- });
- defineCurve('p384', {
- type: 'short',
- prime: null,
- p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
- 'fffffffe ffffffff 00000000 00000000 ffffffff',
- a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
- 'fffffffe ffffffff 00000000 00000000 fffffffc',
- b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
- '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
- n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
- 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
- hash: hash.sha384,
- gRed: false,
- g: [
- 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
- '5502f25d bf55296c 3a545e38 72760ab7',
- '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
- '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
- ]
- });
- defineCurve('p521', {
- type: 'short',
- prime: null,
- p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
- 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
- 'ffffffff ffffffff ffffffff ffffffff ffffffff',
- a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
- 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
- 'ffffffff ffffffff ffffffff ffffffff fffffffc',
- b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
- '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
- '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
- n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
- 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
- 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
- hash: hash.sha512,
- gRed: false,
- g: [
- '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
- '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
- 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
- '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
- '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
- '3fad0761 353c7086 a272c240 88be9476 9fd16650'
- ]
- });
- defineCurve('curve25519', {
- type: 'mont',
- prime: 'p25519',
- p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
- a: '76d06',
- b: '1',
- n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
- hash: hash.sha256,
- gRed: false,
- g: [
- '9'
- ]
- });
- defineCurve('ed25519', {
- type: 'edwards',
- prime: 'p25519',
- p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
- a: '-1',
- c: '1',
- // -121665 * (121666^(-1)) (mod P)
- d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
- n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
- hash: hash.sha256,
- gRed: false,
- g: [
- '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
- // 4/5
- '6666666666666666666666666666666666666666666666666666666666666658'
- ]
- });
- var pre;
- try {
- pre = require('./precomputed/secp256k1');
- } catch (e) {
- pre = undefined;
- }
- defineCurve('secp256k1', {
- type: 'short',
- prime: 'k256',
- p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
- a: '0',
- b: '7',
- n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
- h: '1',
- hash: hash.sha256,
- // Precomputed endomorphism
- beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
- lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
- basis: [
- {
- a: '3086d221a7d46bcde86c90e49284eb15',
- b: '-e4437ed6010e88286f547fa90abfe4c3'
- },
- {
- a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
- b: '3086d221a7d46bcde86c90e49284eb15'
- }
- ],
- gRed: false,
- g: [
- '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
- '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
- pre
- ]
- });
- },{"./curve":208,"./precomputed/secp256k1":218,"./utils":219,"hash.js":228}],212:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var HmacDRBG = require('hmac-drbg');
- var utils = require('../utils');
- var curves = require('../curves');
- var rand = require('brorand');
- var assert = utils.assert;
- var KeyPair = require('./key');
- var Signature = require('./signature');
- function EC(options) {
- if (!(this instanceof EC))
- return new EC(options);
- // Shortcut `elliptic.ec(curve-name)`
- if (typeof options === 'string') {
- assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);
- options = curves[options];
- }
- // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
- if (options instanceof curves.PresetCurve)
- options = { curve: options };
- this.curve = options.curve.curve;
- this.n = this.curve.n;
- this.nh = this.n.ushrn(1);
- this.g = this.curve.g;
- // Point on curve
- this.g = options.curve.g;
- this.g.precompute(options.curve.n.bitLength() + 1);
- // Hash for function for DRBG
- this.hash = options.hash || options.curve.hash;
- }
- module.exports = EC;
- EC.prototype.keyPair = function keyPair(options) {
- return new KeyPair(this, options);
- };
- EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
- return KeyPair.fromPrivate(this, priv, enc);
- };
- EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
- return KeyPair.fromPublic(this, pub, enc);
- };
- EC.prototype.genKeyPair = function genKeyPair(options) {
- if (!options)
- options = {};
- // Instantiate Hmac_DRBG
- var drbg = new HmacDRBG({
- hash: this.hash,
- pers: options.pers,
- persEnc: options.persEnc || 'utf8',
- entropy: options.entropy || rand(this.hash.hmacStrength),
- entropyEnc: options.entropy && options.entropyEnc || 'utf8',
- nonce: this.n.toArray()
- });
- var bytes = this.n.byteLength();
- var ns2 = this.n.sub(new BN(2));
- do {
- var priv = new BN(drbg.generate(bytes));
- if (priv.cmp(ns2) > 0)
- continue;
- priv.iaddn(1);
- return this.keyFromPrivate(priv);
- } while (true);
- };
- EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
- var delta = msg.byteLength() * 8 - this.n.bitLength();
- if (delta > 0)
- msg = msg.ushrn(delta);
- if (!truncOnly && msg.cmp(this.n) >= 0)
- return msg.sub(this.n);
- else
- return msg;
- };
- EC.prototype.sign = function sign(msg, key, enc, options) {
- if (typeof enc === 'object') {
- options = enc;
- enc = null;
- }
- if (!options)
- options = {};
- key = this.keyFromPrivate(key, enc);
- msg = this._truncateToN(new BN(msg, 16));
- // Zero-extend key to provide enough entropy
- var bytes = this.n.byteLength();
- var bkey = key.getPrivate().toArray('be', bytes);
- // Zero-extend nonce to have the same byte size as N
- var nonce = msg.toArray('be', bytes);
- // Instantiate Hmac_DRBG
- var drbg = new HmacDRBG({
- hash: this.hash,
- entropy: bkey,
- nonce: nonce,
- pers: options.pers,
- persEnc: options.persEnc || 'utf8'
- });
- // Number of bytes to generate
- var ns1 = this.n.sub(new BN(1));
- for (var iter = 0; true; iter++) {
- var k = options.k ?
- options.k(iter) :
- new BN(drbg.generate(this.n.byteLength()));
- k = this._truncateToN(k, true);
- if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
- continue;
- var kp = this.g.mul(k);
- if (kp.isInfinity())
- continue;
- var kpX = kp.getX();
- var r = kpX.umod(this.n);
- if (r.cmpn(0) === 0)
- continue;
- var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
- s = s.umod(this.n);
- if (s.cmpn(0) === 0)
- continue;
- var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
- (kpX.cmp(r) !== 0 ? 2 : 0);
- // Use complement of `s`, if it is > `n / 2`
- if (options.canonical && s.cmp(this.nh) > 0) {
- s = this.n.sub(s);
- recoveryParam ^= 1;
- }
- return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
- }
- };
- EC.prototype.verify = function verify(msg, signature, key, enc) {
- msg = this._truncateToN(new BN(msg, 16));
- key = this.keyFromPublic(key, enc);
- signature = new Signature(signature, 'hex');
- // Perform primitive values validation
- var r = signature.r;
- var s = signature.s;
- if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
- return false;
- if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
- return false;
- // Validate signature
- var sinv = s.invm(this.n);
- var u1 = sinv.mul(msg).umod(this.n);
- var u2 = sinv.mul(r).umod(this.n);
- if (!this.curve._maxwellTrick) {
- var p = this.g.mulAdd(u1, key.getPublic(), u2);
- if (p.isInfinity())
- return false;
- return p.getX().umod(this.n).cmp(r) === 0;
- }
- // NOTE: Greg Maxwell's trick, inspired by:
- // https://git.io/vad3K
- var p = this.g.jmulAdd(u1, key.getPublic(), u2);
- if (p.isInfinity())
- return false;
- // Compare `p.x` of Jacobian point with `r`,
- // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
- // inverse of `p.z^2`
- return p.eqXToP(r);
- };
- EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
- assert((3 & j) === j, 'The recovery param is more than two bits');
- signature = new Signature(signature, enc);
- var n = this.n;
- var e = new BN(msg);
- var r = signature.r;
- var s = signature.s;
- // A set LSB signifies that the y-coordinate is odd
- var isYOdd = j & 1;
- var isSecondKey = j >> 1;
- if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
- throw new Error('Unable to find sencond key candinate');
- // 1.1. Let x = r + jn.
- if (isSecondKey)
- r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
- else
- r = this.curve.pointFromX(r, isYOdd);
- var rInv = signature.r.invm(n);
- var s1 = n.sub(e).mul(rInv).umod(n);
- var s2 = s.mul(rInv).umod(n);
- // 1.6.1 Compute Q = r^-1 (sR - eG)
- // Q = r^-1 (sR + -eG)
- return this.g.mulAdd(s1, r, s2);
- };
- EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
- signature = new Signature(signature, enc);
- if (signature.recoveryParam !== null)
- return signature.recoveryParam;
- for (var i = 0; i < 4; i++) {
- var Qprime;
- try {
- Qprime = this.recoverPubKey(e, signature, i);
- } catch (e) {
- continue;
- }
- if (Qprime.eq(Q))
- return i;
- }
- throw new Error('Unable to find valid recovery factor');
- };
- },{"../curves":211,"../utils":219,"./key":213,"./signature":214,"bn.js":147,"brorand":148,"hmac-drbg":240}],213:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var utils = require('../utils');
- var assert = utils.assert;
- function KeyPair(ec, options) {
- this.ec = ec;
- this.priv = null;
- this.pub = null;
- // KeyPair(ec, { priv: ..., pub: ... })
- if (options.priv)
- this._importPrivate(options.priv, options.privEnc);
- if (options.pub)
- this._importPublic(options.pub, options.pubEnc);
- }
- module.exports = KeyPair;
- KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
- if (pub instanceof KeyPair)
- return pub;
- return new KeyPair(ec, {
- pub: pub,
- pubEnc: enc
- });
- };
- KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
- if (priv instanceof KeyPair)
- return priv;
- return new KeyPair(ec, {
- priv: priv,
- privEnc: enc
- });
- };
- KeyPair.prototype.validate = function validate() {
- var pub = this.getPublic();
- if (pub.isInfinity())
- return { result: false, reason: 'Invalid public key' };
- if (!pub.validate())
- return { result: false, reason: 'Public key is not a point' };
- if (!pub.mul(this.ec.curve.n).isInfinity())
- return { result: false, reason: 'Public key * N != O' };
- return { result: true, reason: null };
- };
- KeyPair.prototype.getPublic = function getPublic(compact, enc) {
- // compact is optional argument
- if (typeof compact === 'string') {
- enc = compact;
- compact = null;
- }
- if (!this.pub)
- this.pub = this.ec.g.mul(this.priv);
- if (!enc)
- return this.pub;
- return this.pub.encode(enc, compact);
- };
- KeyPair.prototype.getPrivate = function getPrivate(enc) {
- if (enc === 'hex')
- return this.priv.toString(16, 2);
- else
- return this.priv;
- };
- KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
- this.priv = new BN(key, enc || 16);
- // Ensure that the priv won't be bigger than n, otherwise we may fail
- // in fixed multiplication method
- this.priv = this.priv.umod(this.ec.curve.n);
- };
- KeyPair.prototype._importPublic = function _importPublic(key, enc) {
- if (key.x || key.y) {
- // Montgomery points only have an `x` coordinate.
- // Weierstrass/Edwards points on the other hand have both `x` and
- // `y` coordinates.
- if (this.ec.curve.type === 'mont') {
- assert(key.x, 'Need x coordinate');
- } else if (this.ec.curve.type === 'short' ||
- this.ec.curve.type === 'edwards') {
- assert(key.x && key.y, 'Need both x and y coordinate');
- }
- this.pub = this.ec.curve.point(key.x, key.y);
- return;
- }
- this.pub = this.ec.curve.decodePoint(key, enc);
- };
- // ECDH
- KeyPair.prototype.derive = function derive(pub) {
- return pub.mul(this.priv).getX();
- };
- // ECDSA
- KeyPair.prototype.sign = function sign(msg, enc, options) {
- return this.ec.sign(msg, this, enc, options);
- };
- KeyPair.prototype.verify = function verify(msg, signature) {
- return this.ec.verify(msg, signature, this);
- };
- KeyPair.prototype.inspect = function inspect() {
- return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
- ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
- };
- },{"../utils":219,"bn.js":147}],214:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var utils = require('../utils');
- var assert = utils.assert;
- function Signature(options, enc) {
- if (options instanceof Signature)
- return options;
- if (this._importDER(options, enc))
- return;
- assert(options.r && options.s, 'Signature without r or s');
- this.r = new BN(options.r, 16);
- this.s = new BN(options.s, 16);
- if (options.recoveryParam === undefined)
- this.recoveryParam = null;
- else
- this.recoveryParam = options.recoveryParam;
- }
- module.exports = Signature;
- function Position() {
- this.place = 0;
- }
- function getLength(buf, p) {
- var initial = buf[p.place++];
- if (!(initial & 0x80)) {
- return initial;
- }
- var octetLen = initial & 0xf;
- var val = 0;
- for (var i = 0, off = p.place; i < octetLen; i++, off++) {
- val <<= 8;
- val |= buf[off];
- }
- p.place = off;
- return val;
- }
- function rmPadding(buf) {
- var i = 0;
- var len = buf.length - 1;
- while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
- i++;
- }
- if (i === 0) {
- return buf;
- }
- return buf.slice(i);
- }
- Signature.prototype._importDER = function _importDER(data, enc) {
- data = utils.toArray(data, enc);
- var p = new Position();
- if (data[p.place++] !== 0x30) {
- return false;
- }
- var len = getLength(data, p);
- if ((len + p.place) !== data.length) {
- return false;
- }
- if (data[p.place++] !== 0x02) {
- return false;
- }
- var rlen = getLength(data, p);
- var r = data.slice(p.place, rlen + p.place);
- p.place += rlen;
- if (data[p.place++] !== 0x02) {
- return false;
- }
- var slen = getLength(data, p);
- if (data.length !== slen + p.place) {
- return false;
- }
- var s = data.slice(p.place, slen + p.place);
- if (r[0] === 0 && (r[1] & 0x80)) {
- r = r.slice(1);
- }
- if (s[0] === 0 && (s[1] & 0x80)) {
- s = s.slice(1);
- }
- this.r = new BN(r);
- this.s = new BN(s);
- this.recoveryParam = null;
- return true;
- };
- function constructLength(arr, len) {
- if (len < 0x80) {
- arr.push(len);
- return;
- }
- var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
- arr.push(octets | 0x80);
- while (--octets) {
- arr.push((len >>> (octets << 3)) & 0xff);
- }
- arr.push(len);
- }
- Signature.prototype.toDER = function toDER(enc) {
- var r = this.r.toArray();
- var s = this.s.toArray();
- // Pad values
- if (r[0] & 0x80)
- r = [ 0 ].concat(r);
- // Pad values
- if (s[0] & 0x80)
- s = [ 0 ].concat(s);
- r = rmPadding(r);
- s = rmPadding(s);
- while (!s[0] && !(s[1] & 0x80)) {
- s = s.slice(1);
- }
- var arr = [ 0x02 ];
- constructLength(arr, r.length);
- arr = arr.concat(r);
- arr.push(0x02);
- constructLength(arr, s.length);
- var backHalf = arr.concat(s);
- var res = [ 0x30 ];
- constructLength(res, backHalf.length);
- res = res.concat(backHalf);
- return utils.encode(res, enc);
- };
- },{"../utils":219,"bn.js":147}],215:[function(require,module,exports){
- 'use strict';
- var hash = require('hash.js');
- var curves = require('../curves');
- var utils = require('../utils');
- var assert = utils.assert;
- var parseBytes = utils.parseBytes;
- var KeyPair = require('./key');
- var Signature = require('./signature');
- function EDDSA(curve) {
- assert(curve === 'ed25519', 'only tested with ed25519 so far');
- if (!(this instanceof EDDSA))
- return new EDDSA(curve);
- var curve = curves[curve].curve;
- this.curve = curve;
- this.g = curve.g;
- this.g.precompute(curve.n.bitLength() + 1);
- this.pointClass = curve.point().constructor;
- this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
- this.hash = hash.sha512;
- }
- module.exports = EDDSA;
- /**
- * @param {Array|String} message - message bytes
- * @param {Array|String|KeyPair} secret - secret bytes or a keypair
- * @returns {Signature} - signature
- */
- EDDSA.prototype.sign = function sign(message, secret) {
- message = parseBytes(message);
- var key = this.keyFromSecret(secret);
- var r = this.hashInt(key.messagePrefix(), message);
- var R = this.g.mul(r);
- var Rencoded = this.encodePoint(R);
- var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
- .mul(key.priv());
- var S = r.add(s_).umod(this.curve.n);
- return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
- };
- /**
- * @param {Array} message - message bytes
- * @param {Array|String|Signature} sig - sig bytes
- * @param {Array|String|Point|KeyPair} pub - public key
- * @returns {Boolean} - true if public key matches sig of message
- */
- EDDSA.prototype.verify = function verify(message, sig, pub) {
- message = parseBytes(message);
- sig = this.makeSignature(sig);
- var key = this.keyFromPublic(pub);
- var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
- var SG = this.g.mul(sig.S());
- var RplusAh = sig.R().add(key.pub().mul(h));
- return RplusAh.eq(SG);
- };
- EDDSA.prototype.hashInt = function hashInt() {
- var hash = this.hash();
- for (var i = 0; i < arguments.length; i++)
- hash.update(arguments[i]);
- return utils.intFromLE(hash.digest()).umod(this.curve.n);
- };
- EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
- return KeyPair.fromPublic(this, pub);
- };
- EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
- return KeyPair.fromSecret(this, secret);
- };
- EDDSA.prototype.makeSignature = function makeSignature(sig) {
- if (sig instanceof Signature)
- return sig;
- return new Signature(this, sig);
- };
- /**
- * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
- *
- * EDDSA defines methods for encoding and decoding points and integers. These are
- * helper convenience methods, that pass along to utility functions implied
- * parameters.
- *
- */
- EDDSA.prototype.encodePoint = function encodePoint(point) {
- var enc = point.getY().toArray('le', this.encodingLength);
- enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
- return enc;
- };
- EDDSA.prototype.decodePoint = function decodePoint(bytes) {
- bytes = utils.parseBytes(bytes);
- var lastIx = bytes.length - 1;
- var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
- var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
- var y = utils.intFromLE(normed);
- return this.curve.pointFromY(y, xIsOdd);
- };
- EDDSA.prototype.encodeInt = function encodeInt(num) {
- return num.toArray('le', this.encodingLength);
- };
- EDDSA.prototype.decodeInt = function decodeInt(bytes) {
- return utils.intFromLE(bytes);
- };
- EDDSA.prototype.isPoint = function isPoint(val) {
- return val instanceof this.pointClass;
- };
- },{"../curves":211,"../utils":219,"./key":216,"./signature":217,"hash.js":228}],216:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var assert = utils.assert;
- var parseBytes = utils.parseBytes;
- var cachedProperty = utils.cachedProperty;
- /**
- * @param {EDDSA} eddsa - instance
- * @param {Object} params - public/private key parameters
- *
- * @param {Array<Byte>} [params.secret] - secret seed bytes
- * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
- * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
- *
- */
- function KeyPair(eddsa, params) {
- this.eddsa = eddsa;
- this._secret = parseBytes(params.secret);
- if (eddsa.isPoint(params.pub))
- this._pub = params.pub;
- else
- this._pubBytes = parseBytes(params.pub);
- }
- KeyPair.fromPublic = function fromPublic(eddsa, pub) {
- if (pub instanceof KeyPair)
- return pub;
- return new KeyPair(eddsa, { pub: pub });
- };
- KeyPair.fromSecret = function fromSecret(eddsa, secret) {
- if (secret instanceof KeyPair)
- return secret;
- return new KeyPair(eddsa, { secret: secret });
- };
- KeyPair.prototype.secret = function secret() {
- return this._secret;
- };
- cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
- return this.eddsa.encodePoint(this.pub());
- });
- cachedProperty(KeyPair, 'pub', function pub() {
- if (this._pubBytes)
- return this.eddsa.decodePoint(this._pubBytes);
- return this.eddsa.g.mul(this.priv());
- });
- cachedProperty(KeyPair, 'privBytes', function privBytes() {
- var eddsa = this.eddsa;
- var hash = this.hash();
- var lastIx = eddsa.encodingLength - 1;
- var a = hash.slice(0, eddsa.encodingLength);
- a[0] &= 248;
- a[lastIx] &= 127;
- a[lastIx] |= 64;
- return a;
- });
- cachedProperty(KeyPair, 'priv', function priv() {
- return this.eddsa.decodeInt(this.privBytes());
- });
- cachedProperty(KeyPair, 'hash', function hash() {
- return this.eddsa.hash().update(this.secret()).digest();
- });
- cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
- return this.hash().slice(this.eddsa.encodingLength);
- });
- KeyPair.prototype.sign = function sign(message) {
- assert(this._secret, 'KeyPair can only verify');
- return this.eddsa.sign(message, this);
- };
- KeyPair.prototype.verify = function verify(message, sig) {
- return this.eddsa.verify(message, sig, this);
- };
- KeyPair.prototype.getSecret = function getSecret(enc) {
- assert(this._secret, 'KeyPair is public only');
- return utils.encode(this.secret(), enc);
- };
- KeyPair.prototype.getPublic = function getPublic(enc) {
- return utils.encode(this.pubBytes(), enc);
- };
- module.exports = KeyPair;
- },{"../utils":219}],217:[function(require,module,exports){
- 'use strict';
- var BN = require('bn.js');
- var utils = require('../utils');
- var assert = utils.assert;
- var cachedProperty = utils.cachedProperty;
- var parseBytes = utils.parseBytes;
- /**
- * @param {EDDSA} eddsa - eddsa instance
- * @param {Array<Bytes>|Object} sig -
- * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
- * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
- * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
- * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
- */
- function Signature(eddsa, sig) {
- this.eddsa = eddsa;
- if (typeof sig !== 'object')
- sig = parseBytes(sig);
- if (Array.isArray(sig)) {
- sig = {
- R: sig.slice(0, eddsa.encodingLength),
- S: sig.slice(eddsa.encodingLength)
- };
- }
- assert(sig.R && sig.S, 'Signature without R or S');
- if (eddsa.isPoint(sig.R))
- this._R = sig.R;
- if (sig.S instanceof BN)
- this._S = sig.S;
- this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
- this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
- }
- cachedProperty(Signature, 'S', function S() {
- return this.eddsa.decodeInt(this.Sencoded());
- });
- cachedProperty(Signature, 'R', function R() {
- return this.eddsa.decodePoint(this.Rencoded());
- });
- cachedProperty(Signature, 'Rencoded', function Rencoded() {
- return this.eddsa.encodePoint(this.R());
- });
- cachedProperty(Signature, 'Sencoded', function Sencoded() {
- return this.eddsa.encodeInt(this.S());
- });
- Signature.prototype.toBytes = function toBytes() {
- return this.Rencoded().concat(this.Sencoded());
- };
- Signature.prototype.toHex = function toHex() {
- return utils.encode(this.toBytes(), 'hex').toUpperCase();
- };
- module.exports = Signature;
- },{"../utils":219,"bn.js":147}],218:[function(require,module,exports){
- module.exports = {
- doubles: {
- step: 4,
- points: [
- [
- 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
- 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
- ],
- [
- '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
- '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
- ],
- [
- '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
- 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
- ],
- [
- '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
- '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
- ],
- [
- '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
- '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
- ],
- [
- '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
- '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
- ],
- [
- 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
- '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
- ],
- [
- '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
- 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
- ],
- [
- 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
- '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
- ],
- [
- 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
- 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
- ],
- [
- 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
- '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
- ],
- [
- '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
- '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
- ],
- [
- '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
- '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
- ],
- [
- '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
- '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
- ],
- [
- '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
- '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
- ],
- [
- '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
- '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
- ],
- [
- '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
- '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
- ],
- [
- '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
- '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
- ],
- [
- '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
- 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
- ],
- [
- 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
- '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
- ],
- [
- 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
- '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
- ],
- [
- '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
- '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
- ],
- [
- '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
- '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
- ],
- [
- 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
- '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
- ],
- [
- '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
- 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
- ],
- [
- 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
- '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
- ],
- [
- 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
- 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
- ],
- [
- 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
- '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
- ],
- [
- 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
- 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
- ],
- [
- 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
- '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
- ],
- [
- '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
- 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
- ],
- [
- '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
- '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
- ],
- [
- 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
- '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
- ],
- [
- '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
- 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
- ],
- [
- 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
- '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
- ],
- [
- 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
- '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
- ],
- [
- 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
- 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
- ],
- [
- '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
- '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
- ],
- [
- '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
- '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
- ],
- [
- '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
- 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
- ],
- [
- '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
- '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
- ],
- [
- 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
- '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
- ],
- [
- '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
- '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
- ],
- [
- '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
- 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
- ],
- [
- '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
- '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
- ],
- [
- 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
- '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
- ],
- [
- '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
- 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
- ],
- [
- 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
- 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
- ],
- [
- 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
- '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
- ],
- [
- '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
- 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
- ],
- [
- '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
- 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
- ],
- [
- 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
- '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
- ],
- [
- 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
- '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
- ],
- [
- 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
- '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
- ],
- [
- '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
- 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
- ],
- [
- '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
- '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
- ],
- [
- 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
- 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
- ],
- [
- '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
- 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
- ],
- [
- '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
- '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
- ],
- [
- '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
- '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
- ],
- [
- 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
- 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
- ],
- [
- '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
- '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
- ],
- [
- '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
- '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
- ],
- [
- 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
- '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
- ],
- [
- 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
- 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
- ]
- ]
- },
- naf: {
- wnd: 7,
- points: [
- [
- 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
- '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
- ],
- [
- '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
- 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
- ],
- [
- '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
- '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
- ],
- [
- 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
- 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
- ],
- [
- '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
- 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
- ],
- [
- 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
- 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
- ],
- [
- 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
- '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
- ],
- [
- 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
- '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
- ],
- [
- '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
- '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
- ],
- [
- '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
- '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
- ],
- [
- '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
- '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
- ],
- [
- '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
- '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
- ],
- [
- 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
- 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
- ],
- [
- 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
- '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
- ],
- [
- '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
- 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
- ],
- [
- '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
- 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
- ],
- [
- '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
- '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
- ],
- [
- '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
- '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
- ],
- [
- '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
- '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
- ],
- [
- '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
- 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
- ],
- [
- 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
- 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
- ],
- [
- '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
- '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
- ],
- [
- '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
- '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
- ],
- [
- 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
- 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
- ],
- [
- '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
- '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
- ],
- [
- 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
- 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
- ],
- [
- 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
- 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
- ],
- [
- '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
- '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
- ],
- [
- '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
- '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
- ],
- [
- '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
- '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
- ],
- [
- 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
- '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
- ],
- [
- '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
- '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
- ],
- [
- 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
- '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
- ],
- [
- '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
- 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
- ],
- [
- '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
- 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
- ],
- [
- 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
- 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
- ],
- [
- '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
- '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
- ],
- [
- '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
- 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
- ],
- [
- 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
- 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
- ],
- [
- '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
- '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
- ],
- [
- '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
- 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
- ],
- [
- '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
- '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
- ],
- [
- '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
- 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
- ],
- [
- 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
- '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
- ],
- [
- '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
- '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
- ],
- [
- '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
- 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
- ],
- [
- '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
- 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
- ],
- [
- 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
- 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
- ],
- [
- 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
- 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
- ],
- [
- '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
- '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
- ],
- [
- '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
- '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
- ],
- [
- 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
- '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
- ],
- [
- 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
- 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
- ],
- [
- '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
- '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
- ],
- [
- '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
- '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
- ],
- [
- 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
- '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
- ],
- [
- '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
- '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
- ],
- [
- 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
- 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
- ],
- [
- '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
- 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
- ],
- [
- '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
- '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
- ],
- [
- 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
- '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
- ],
- [
- 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
- '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
- ],
- [
- '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
- '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
- ],
- [
- '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
- '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
- ],
- [
- '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
- 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
- ],
- [
- '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
- 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
- ],
- [
- '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
- '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
- ],
- [
- '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
- '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
- ],
- [
- '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
- '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
- ],
- [
- '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
- 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
- ],
- [
- 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
- 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
- ],
- [
- '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
- 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
- ],
- [
- 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
- '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
- ],
- [
- 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
- '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
- ],
- [
- 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
- '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
- ],
- [
- 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
- '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
- ],
- [
- '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
- 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
- ],
- [
- '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
- '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
- ],
- [
- '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
- 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
- ],
- [
- 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
- 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
- ],
- [
- 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
- '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
- ],
- [
- 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
- 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
- ],
- [
- 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
- '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
- ],
- [
- '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
- '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
- ],
- [
- 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
- '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
- ],
- [
- 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
- '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
- ],
- [
- '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
- '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
- ],
- [
- '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
- 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
- ],
- [
- 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
- '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
- ],
- [
- 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
- '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
- ],
- [
- 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
- '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
- ],
- [
- '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
- '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
- ],
- [
- 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
- 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
- ],
- [
- '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
- 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
- ],
- [
- 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
- 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
- ],
- [
- 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
- '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
- ],
- [
- '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
- 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
- ],
- [
- 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
- '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
- ],
- [
- 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
- '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
- ],
- [
- 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
- '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
- ],
- [
- '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
- 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
- ],
- [
- '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
- 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
- ],
- [
- 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
- '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
- ],
- [
- '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
- 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
- ],
- [
- '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
- '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
- ],
- [
- '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
- 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
- ],
- [
- 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
- 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
- ],
- [
- '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
- 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
- ],
- [
- '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
- '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
- ],
- [
- '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
- 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
- ],
- [
- '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
- '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
- ],
- [
- 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
- 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
- ],
- [
- '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
- '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
- ],
- [
- 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
- '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
- ],
- [
- '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
- '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
- ],
- [
- 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
- 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
- ],
- [
- 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
- '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
- ],
- [
- 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
- 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
- ],
- [
- '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
- 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
- ],
- [
- '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
- '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
- ],
- [
- '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
- 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
- ],
- [
- '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
- '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
- ],
- [
- '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
- '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
- ],
- [
- '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
- 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
- ],
- [
- '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
- '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
- ],
- [
- '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
- '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
- ],
- [
- '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
- '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
- ]
- ]
- }
- };
- },{}],219:[function(require,module,exports){
- 'use strict';
- var utils = exports;
- var BN = require('bn.js');
- var minAssert = require('minimalistic-assert');
- var minUtils = require('minimalistic-crypto-utils');
- utils.assert = minAssert;
- utils.toArray = minUtils.toArray;
- utils.zero2 = minUtils.zero2;
- utils.toHex = minUtils.toHex;
- utils.encode = minUtils.encode;
- // Represent num in a w-NAF form
- function getNAF(num, w) {
- var naf = [];
- var ws = 1 << (w + 1);
- var k = num.clone();
- while (k.cmpn(1) >= 0) {
- var z;
- if (k.isOdd()) {
- var mod = k.andln(ws - 1);
- if (mod > (ws >> 1) - 1)
- z = (ws >> 1) - mod;
- else
- z = mod;
- k.isubn(z);
- } else {
- z = 0;
- }
- naf.push(z);
- // Optimization, shift by word if possible
- var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
- for (var i = 1; i < shift; i++)
- naf.push(0);
- k.iushrn(shift);
- }
- return naf;
- }
- utils.getNAF = getNAF;
- // Represent k1, k2 in a Joint Sparse Form
- function getJSF(k1, k2) {
- var jsf = [
- [],
- []
- ];
- k1 = k1.clone();
- k2 = k2.clone();
- var d1 = 0;
- var d2 = 0;
- while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
- // First phase
- var m14 = (k1.andln(3) + d1) & 3;
- var m24 = (k2.andln(3) + d2) & 3;
- if (m14 === 3)
- m14 = -1;
- if (m24 === 3)
- m24 = -1;
- var u1;
- if ((m14 & 1) === 0) {
- u1 = 0;
- } else {
- var m8 = (k1.andln(7) + d1) & 7;
- if ((m8 === 3 || m8 === 5) && m24 === 2)
- u1 = -m14;
- else
- u1 = m14;
- }
- jsf[0].push(u1);
- var u2;
- if ((m24 & 1) === 0) {
- u2 = 0;
- } else {
- var m8 = (k2.andln(7) + d2) & 7;
- if ((m8 === 3 || m8 === 5) && m14 === 2)
- u2 = -m24;
- else
- u2 = m24;
- }
- jsf[1].push(u2);
- // Second phase
- if (2 * d1 === u1 + 1)
- d1 = 1 - d1;
- if (2 * d2 === u2 + 1)
- d2 = 1 - d2;
- k1.iushrn(1);
- k2.iushrn(1);
- }
- return jsf;
- }
- utils.getJSF = getJSF;
- function cachedProperty(obj, name, computer) {
- var key = '_' + name;
- obj.prototype[name] = function cachedProperty() {
- return this[key] !== undefined ? this[key] :
- this[key] = computer.call(this);
- };
- }
- utils.cachedProperty = cachedProperty;
- function parseBytes(bytes) {
- return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
- bytes;
- }
- utils.parseBytes = parseBytes;
- function intFromLE(bytes) {
- return new BN(bytes, 'hex', 'le');
- }
- utils.intFromLE = intFromLE;
- },{"bn.js":147,"minimalistic-assert":268,"minimalistic-crypto-utils":269}],220:[function(require,module,exports){
- module.exports={
- "_args": [
- [
- "elliptic@6.5.1",
- "/Users/caldwell/geopackage-js"
- ]
- ],
- "_development": true,
- "_from": "elliptic@6.5.1",
- "_id": "elliptic@6.5.1",
- "_inBundle": false,
- "_integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==",
- "_location": "/elliptic",
- "_phantomChildren": {},
- "_requested": {
- "type": "version",
- "registry": true,
- "raw": "elliptic@6.5.1",
- "name": "elliptic",
- "escapedName": "elliptic",
- "rawSpec": "6.5.1",
- "saveSpec": null,
- "fetchSpec": "6.5.1"
- },
- "_requiredBy": [
- "/browserify-sign",
- "/create-ecdh"
- ],
- "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz",
- "_spec": "6.5.1",
- "_where": "/Users/caldwell/geopackage-js",
- "author": {
- "name": "Fedor Indutny",
- "email": "fedor@indutny.com"
- },
- "bugs": {
- "url": "https://github.com/indutny/elliptic/issues"
- },
- "dependencies": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
- },
- "description": "EC cryptography",
- "devDependencies": {
- "brfs": "^1.4.3",
- "coveralls": "^3.0.4",
- "grunt": "^1.0.4",
- "grunt-browserify": "^5.0.0",
- "grunt-cli": "^1.2.0",
- "grunt-contrib-connect": "^1.0.0",
- "grunt-contrib-copy": "^1.0.0",
- "grunt-contrib-uglify": "^1.0.1",
- "grunt-mocha-istanbul": "^3.0.1",
- "grunt-saucelabs": "^9.0.1",
- "istanbul": "^0.4.2",
- "jscs": "^3.0.7",
- "jshint": "^2.6.0",
- "mocha": "^6.1.4"
- },
- "files": [
- "lib"
- ],
- "homepage": "https://github.com/indutny/elliptic",
- "keywords": [
- "EC",
- "Elliptic",
- "curve",
- "Cryptography"
- ],
- "license": "MIT",
- "main": "lib/elliptic.js",
- "name": "elliptic",
- "repository": {
- "type": "git",
- "url": "git+ssh://git@github.com/indutny/elliptic.git"
- },
- "scripts": {
- "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
- "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
- "lint": "npm run jscs && npm run jshint",
- "test": "npm run lint && npm run unit",
- "unit": "istanbul test _mocha --reporter=spec test/index.js",
- "version": "grunt dist && git add dist/"
- },
- "version": "6.5.1"
- }
- },{}],221:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- function EventEmitter() {
- this._events = this._events || {};
- this._maxListeners = this._maxListeners || undefined;
- }
- module.exports = EventEmitter;
- // Backwards-compat with node 0.10.x
- EventEmitter.EventEmitter = EventEmitter;
- EventEmitter.prototype._events = undefined;
- EventEmitter.prototype._maxListeners = undefined;
- // By default EventEmitters will print a warning if more than 10 listeners are
- // added to it. This is a useful default which helps finding memory leaks.
- EventEmitter.defaultMaxListeners = 10;
- // Obviously not all Emitters should be limited to 10. This function allows
- // that to be increased. Set to zero for unlimited.
- EventEmitter.prototype.setMaxListeners = function(n) {
- if (!isNumber(n) || n < 0 || isNaN(n))
- throw TypeError('n must be a positive number');
- this._maxListeners = n;
- return this;
- };
- EventEmitter.prototype.emit = function(type) {
- var er, handler, len, args, i, listeners;
- if (!this._events)
- this._events = {};
- // If there is no 'error' event listener then throw.
- if (type === 'error') {
- if (!this._events.error ||
- (isObject(this._events.error) && !this._events.error.length)) {
- er = arguments[1];
- if (er instanceof Error) {
- throw er; // Unhandled 'error' event
- } else {
- // At least give some kind of context to the user
- var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
- err.context = er;
- throw err;
- }
- }
- }
- handler = this._events[type];
- if (isUndefined(handler))
- return false;
- if (isFunction(handler)) {
- switch (arguments.length) {
- // fast cases
- case 1:
- handler.call(this);
- break;
- case 2:
- handler.call(this, arguments[1]);
- break;
- case 3:
- handler.call(this, arguments[1], arguments[2]);
- break;
- // slower
- default:
- args = Array.prototype.slice.call(arguments, 1);
- handler.apply(this, args);
- }
- } else if (isObject(handler)) {
- args = Array.prototype.slice.call(arguments, 1);
- listeners = handler.slice();
- len = listeners.length;
- for (i = 0; i < len; i++)
- listeners[i].apply(this, args);
- }
- return true;
- };
- EventEmitter.prototype.addListener = function(type, listener) {
- var m;
- if (!isFunction(listener))
- throw TypeError('listener must be a function');
- if (!this._events)
- this._events = {};
- // To avoid recursion in the case that type === "newListener"! Before
- // adding it to the listeners, first emit "newListener".
- if (this._events.newListener)
- this.emit('newListener', type,
- isFunction(listener.listener) ?
- listener.listener : listener);
- if (!this._events[type])
- // Optimize the case of one listener. Don't need the extra array object.
- this._events[type] = listener;
- else if (isObject(this._events[type]))
- // If we've already got an array, just append.
- this._events[type].push(listener);
- else
- // Adding the second element, need to change to array.
- this._events[type] = [this._events[type], listener];
- // Check for listener leak
- if (isObject(this._events[type]) && !this._events[type].warned) {
- if (!isUndefined(this._maxListeners)) {
- m = this._maxListeners;
- } else {
- m = EventEmitter.defaultMaxListeners;
- }
- if (m && m > 0 && this._events[type].length > m) {
- this._events[type].warned = true;
- console.error('(node) warning: possible EventEmitter memory ' +
- 'leak detected. %d listeners added. ' +
- 'Use emitter.setMaxListeners() to increase limit.',
- this._events[type].length);
- if (typeof console.trace === 'function') {
- // not supported in IE 10
- console.trace();
- }
- }
- }
- return this;
- };
- EventEmitter.prototype.on = EventEmitter.prototype.addListener;
- EventEmitter.prototype.once = function(type, listener) {
- if (!isFunction(listener))
- throw TypeError('listener must be a function');
- var fired = false;
- function g() {
- this.removeListener(type, g);
- if (!fired) {
- fired = true;
- listener.apply(this, arguments);
- }
- }
- g.listener = listener;
- this.on(type, g);
- return this;
- };
- // emits a 'removeListener' event iff the listener was removed
- EventEmitter.prototype.removeListener = function(type, listener) {
- var list, position, length, i;
- if (!isFunction(listener))
- throw TypeError('listener must be a function');
- if (!this._events || !this._events[type])
- return this;
- list = this._events[type];
- length = list.length;
- position = -1;
- if (list === listener ||
- (isFunction(list.listener) && list.listener === listener)) {
- delete this._events[type];
- if (this._events.removeListener)
- this.emit('removeListener', type, listener);
- } else if (isObject(list)) {
- for (i = length; i-- > 0;) {
- if (list[i] === listener ||
- (list[i].listener && list[i].listener === listener)) {
- position = i;
- break;
- }
- }
- if (position < 0)
- return this;
- if (list.length === 1) {
- list.length = 0;
- delete this._events[type];
- } else {
- list.splice(position, 1);
- }
- if (this._events.removeListener)
- this.emit('removeListener', type, listener);
- }
- return this;
- };
- EventEmitter.prototype.removeAllListeners = function(type) {
- var key, listeners;
- if (!this._events)
- return this;
- // not listening for removeListener, no need to emit
- if (!this._events.removeListener) {
- if (arguments.length === 0)
- this._events = {};
- else if (this._events[type])
- delete this._events[type];
- return this;
- }
- // emit removeListener for all listeners on all events
- if (arguments.length === 0) {
- for (key in this._events) {
- if (key === 'removeListener') continue;
- this.removeAllListeners(key);
- }
- this.removeAllListeners('removeListener');
- this._events = {};
- return this;
- }
- listeners = this._events[type];
- if (isFunction(listeners)) {
- this.removeListener(type, listeners);
- } else if (listeners) {
- // LIFO order
- while (listeners.length)
- this.removeListener(type, listeners[listeners.length - 1]);
- }
- delete this._events[type];
- return this;
- };
- EventEmitter.prototype.listeners = function(type) {
- var ret;
- if (!this._events || !this._events[type])
- ret = [];
- else if (isFunction(this._events[type]))
- ret = [this._events[type]];
- else
- ret = this._events[type].slice();
- return ret;
- };
- EventEmitter.prototype.listenerCount = function(type) {
- if (this._events) {
- var evlistener = this._events[type];
- if (isFunction(evlistener))
- return 1;
- else if (evlistener)
- return evlistener.length;
- }
- return 0;
- };
- EventEmitter.listenerCount = function(emitter, type) {
- return emitter.listenerCount(type);
- };
- function isFunction(arg) {
- return typeof arg === 'function';
- }
- function isNumber(arg) {
- return typeof arg === 'number';
- }
- function isObject(arg) {
- return typeof arg === 'object' && arg !== null;
- }
- function isUndefined(arg) {
- return arg === void 0;
- }
- },{}],222:[function(require,module,exports){
- var Buffer = require('safe-buffer').Buffer
- var MD5 = require('md5.js')
- /* eslint-disable camelcase */
- function EVP_BytesToKey (password, salt, keyBits, ivLen) {
- if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
- if (salt) {
- if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
- if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
- }
- var keyLen = keyBits / 8
- var key = Buffer.alloc(keyLen)
- var iv = Buffer.alloc(ivLen || 0)
- var tmp = Buffer.alloc(0)
- while (keyLen > 0 || ivLen > 0) {
- var hash = new MD5()
- hash.update(tmp)
- hash.update(password)
- if (salt) hash.update(salt)
- tmp = hash.digest()
- var used = 0
- if (keyLen > 0) {
- var keyStart = key.length - keyLen
- used = Math.min(keyLen, tmp.length)
- tmp.copy(key, keyStart, 0, used)
- keyLen -= used
- }
- if (used < tmp.length && ivLen > 0) {
- var ivStart = iv.length - ivLen
- var length = Math.min(ivLen, tmp.length - used)
- tmp.copy(iv, ivStart, used, used + length)
- ivLen -= length
- }
- }
- tmp.fill(0)
- return { key: key, iv: iv }
- }
- module.exports = EVP_BytesToKey
- },{"md5.js":266,"safe-buffer":318}],223:[function(require,module,exports){
- 'use strict';
- const toBytes = s => [...s].map(c => c.charCodeAt(0));
- const xpiZipFilename = toBytes('META-INF/mozilla.rsa');
- const oxmlContentTypes = toBytes('[Content_Types].xml');
- const oxmlRels = toBytes('_rels/.rels');
- module.exports = input => {
- const buf = input instanceof Uint8Array ? input : new Uint8Array(input);
- if (!(buf && buf.length > 1)) {
- return null;
- }
- const check = (header, options) => {
- options = Object.assign({
- offset: 0
- }, options);
- for (let i = 0; i < header.length; i++) {
- // If a bitmask is set
- if (options.mask) {
- // If header doesn't equal `buf` with bits masked off
- if (header[i] !== (options.mask[i] & buf[i + options.offset])) {
- return false;
- }
- } else if (header[i] !== buf[i + options.offset]) {
- return false;
- }
- }
- return true;
- };
- const checkString = (header, options) => check(toBytes(header), options);
- if (check([0xFF, 0xD8, 0xFF])) {
- return {
- ext: 'jpg',
- mime: 'image/jpeg'
- };
- }
- if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {
- return {
- ext: 'png',
- mime: 'image/png'
- };
- }
- if (check([0x47, 0x49, 0x46])) {
- return {
- ext: 'gif',
- mime: 'image/gif'
- };
- }
- if (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) {
- return {
- ext: 'webp',
- mime: 'image/webp'
- };
- }
- if (check([0x46, 0x4C, 0x49, 0x46])) {
- return {
- ext: 'flif',
- mime: 'image/flif'
- };
- }
- // Needs to be before `tif` check
- if (
- (check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) &&
- check([0x43, 0x52], {offset: 8})
- ) {
- return {
- ext: 'cr2',
- mime: 'image/x-canon-cr2'
- };
- }
- if (
- check([0x49, 0x49, 0x2A, 0x0]) ||
- check([0x4D, 0x4D, 0x0, 0x2A])
- ) {
- return {
- ext: 'tif',
- mime: 'image/tiff'
- };
- }
- if (check([0x42, 0x4D])) {
- return {
- ext: 'bmp',
- mime: 'image/bmp'
- };
- }
- if (check([0x49, 0x49, 0xBC])) {
- return {
- ext: 'jxr',
- mime: 'image/vnd.ms-photo'
- };
- }
- if (check([0x38, 0x42, 0x50, 0x53])) {
- return {
- ext: 'psd',
- mime: 'image/vnd.adobe.photoshop'
- };
- }
- // Zip-based file formats
- // Need to be before the `zip` check
- if (check([0x50, 0x4B, 0x3, 0x4])) {
- if (
- check([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30})
- ) {
- return {
- ext: 'epub',
- mime: 'application/epub+zip'
- };
- }
- // Assumes signed `.xpi` from addons.mozilla.org
- if (check(xpiZipFilename, {offset: 30})) {
- return {
- ext: 'xpi',
- mime: 'application/x-xpinstall'
- };
- }
- if (checkString('mimetypeapplication/vnd.oasis.opendocument.text', {offset: 30})) {
- return {
- ext: 'odt',
- mime: 'application/vnd.oasis.opendocument.text'
- };
- }
- if (checkString('mimetypeapplication/vnd.oasis.opendocument.spreadsheet', {offset: 30})) {
- return {
- ext: 'ods',
- mime: 'application/vnd.oasis.opendocument.spreadsheet'
- };
- }
- if (checkString('mimetypeapplication/vnd.oasis.opendocument.presentation', {offset: 30})) {
- return {
- ext: 'odp',
- mime: 'application/vnd.oasis.opendocument.presentation'
- };
- }
- // https://github.com/file/file/blob/master/magic/Magdir/msooxml
- if (check(oxmlContentTypes, {offset: 30}) || check(oxmlRels, {offset: 30})) {
- const sliced = buf.subarray(4, 4 + 2000);
- const nextZipHeaderIndex = arr => arr.findIndex((el, i, arr) => arr[i] === 0x50 && arr[i + 1] === 0x4B && arr[i + 2] === 0x3 && arr[i + 3] === 0x4);
- const header2Pos = nextZipHeaderIndex(sliced);
- if (header2Pos !== -1) {
- const slicedAgain = buf.subarray(header2Pos + 8, header2Pos + 8 + 1000);
- const header3Pos = nextZipHeaderIndex(slicedAgain);
- if (header3Pos !== -1) {
- const offset = 8 + header2Pos + header3Pos + 30;
- if (checkString('word/', {offset})) {
- return {
- ext: 'docx',
- mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
- };
- }
- if (checkString('ppt/', {offset})) {
- return {
- ext: 'pptx',
- mime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
- };
- }
- if (checkString('xl/', {offset})) {
- return {
- ext: 'xlsx',
- mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
- };
- }
- }
- }
- }
- }
- if (
- check([0x50, 0x4B]) &&
- (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) &&
- (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)
- ) {
- return {
- ext: 'zip',
- mime: 'application/zip'
- };
- }
- if (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) {
- return {
- ext: 'tar',
- mime: 'application/x-tar'
- };
- }
- if (
- check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&
- (buf[6] === 0x0 || buf[6] === 0x1)
- ) {
- return {
- ext: 'rar',
- mime: 'application/x-rar-compressed'
- };
- }
- if (check([0x1F, 0x8B, 0x8])) {
- return {
- ext: 'gz',
- mime: 'application/gzip'
- };
- }
- if (check([0x42, 0x5A, 0x68])) {
- return {
- ext: 'bz2',
- mime: 'application/x-bzip2'
- };
- }
- if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {
- return {
- ext: '7z',
- mime: 'application/x-7z-compressed'
- };
- }
- if (check([0x78, 0x01])) {
- return {
- ext: 'dmg',
- mime: 'application/x-apple-diskimage'
- };
- }
- if (check([0x33, 0x67, 0x70, 0x35]) || // 3gp5
- (
- check([0x0, 0x0, 0x0]) && check([0x66, 0x74, 0x79, 0x70], {offset: 4}) &&
- (
- check([0x6D, 0x70, 0x34, 0x31], {offset: 8}) || // MP41
- check([0x6D, 0x70, 0x34, 0x32], {offset: 8}) || // MP42
- check([0x69, 0x73, 0x6F, 0x6D], {offset: 8}) || // ISOM
- check([0x69, 0x73, 0x6F, 0x32], {offset: 8}) || // ISO2
- check([0x6D, 0x6D, 0x70, 0x34], {offset: 8}) || // MMP4
- check([0x4D, 0x34, 0x56], {offset: 8}) || // M4V
- check([0x64, 0x61, 0x73, 0x68], {offset: 8}) // DASH
- )
- )) {
- return {
- ext: 'mp4',
- mime: 'video/mp4'
- };
- }
- if (check([0x4D, 0x54, 0x68, 0x64])) {
- return {
- ext: 'mid',
- mime: 'audio/midi'
- };
- }
- // https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska
- if (check([0x1A, 0x45, 0xDF, 0xA3])) {
- const sliced = buf.subarray(4, 4 + 4096);
- const idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82);
- if (idPos !== -1) {
- const docTypePos = idPos + 3;
- const findDocType = type => [...type].every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0));
- if (findDocType('matroska')) {
- return {
- ext: 'mkv',
- mime: 'video/x-matroska'
- };
- }
- if (findDocType('webm')) {
- return {
- ext: 'webm',
- mime: 'video/webm'
- };
- }
- }
- }
- if (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) ||
- check([0x66, 0x72, 0x65, 0x65], {offset: 4}) ||
- check([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) ||
- check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG
- check([0x77, 0x69, 0x64, 0x65], {offset: 4})) {
- return {
- ext: 'mov',
- mime: 'video/quicktime'
- };
- }
- // RIFF file format which might be AVI, WAV, QCP, etc
- if (check([0x52, 0x49, 0x46, 0x46])) {
- if (check([0x41, 0x56, 0x49], {offset: 8})) {
- return {
- ext: 'avi',
- mime: 'video/x-msvideo'
- };
- }
- if (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {
- return {
- ext: 'wav',
- mime: 'audio/x-wav'
- };
- }
- // QLCM, QCP file
- if (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {
- return {
- ext: 'qcp',
- mime: 'audio/qcelp'
- };
- }
- }
- if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {
- return {
- ext: 'wmv',
- mime: 'video/x-ms-wmv'
- };
- }
- if (
- check([0x0, 0x0, 0x1, 0xBA]) ||
- check([0x0, 0x0, 0x1, 0xB3])
- ) {
- return {
- ext: 'mpg',
- mime: 'video/mpeg'
- };
- }
- if (check([0x66, 0x74, 0x79, 0x70, 0x33, 0x67], {offset: 4})) {
- return {
- ext: '3gp',
- mime: 'video/3gpp'
- };
- }
- // Check for MPEG header at different starting offsets
- for (let start = 0; start < 2 && start < (buf.length - 16); start++) {
- if (
- check([0x49, 0x44, 0x33], {offset: start}) || // ID3 header
- check([0xFF, 0xE2], {offset: start, mask: [0xFF, 0xE2]}) // MPEG 1 or 2 Layer 3 header
- ) {
- return {
- ext: 'mp3',
- mime: 'audio/mpeg'
- };
- }
- if (
- check([0xFF, 0xE4], {offset: start, mask: [0xFF, 0xE4]}) // MPEG 1 or 2 Layer 2 header
- ) {
- return {
- ext: 'mp2',
- mime: 'audio/mpeg'
- };
- }
- if (
- check([0xFF, 0xF8], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 2 layer 0 using ADTS
- ) {
- return {
- ext: 'mp2',
- mime: 'audio/mpeg'
- };
- }
- if (
- check([0xFF, 0xF0], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 4 layer 0 using ADTS
- ) {
- return {
- ext: 'mp4',
- mime: 'audio/mpeg'
- };
- }
- }
- if (
- check([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) ||
- check([0x4D, 0x34, 0x41, 0x20])
- ) {
- return {
- ext: 'm4a',
- mime: 'audio/m4a'
- };
- }
- // Needs to be before `ogg` check
- if (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) {
- return {
- ext: 'opus',
- mime: 'audio/opus'
- };
- }
- // If 'OggS' in first bytes, then OGG container
- if (check([0x4F, 0x67, 0x67, 0x53])) {
- // This is a OGG container
- // If ' theora' in header.
- if (check([0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61], {offset: 28})) {
- return {
- ext: 'ogv',
- mime: 'video/ogg'
- };
- }
- // If '\x01video' in header.
- if (check([0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00], {offset: 28})) {
- return {
- ext: 'ogm',
- mime: 'video/ogg'
- };
- }
- // If ' FLAC' in header https://xiph.org/flac/faq.html
- if (check([0x7F, 0x46, 0x4C, 0x41, 0x43], {offset: 28})) {
- return {
- ext: 'oga',
- mime: 'audio/ogg'
- };
- }
- // 'Speex ' in header https://en.wikipedia.org/wiki/Speex
- if (check([0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20], {offset: 28})) {
- return {
- ext: 'spx',
- mime: 'audio/ogg'
- };
- }
- // If '\x01vorbis' in header
- if (check([0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73], {offset: 28})) {
- return {
- ext: 'ogg',
- mime: 'audio/ogg'
- };
- }
- // Default OGG container https://www.iana.org/assignments/media-types/application/ogg
- return {
- ext: 'ogx',
- mime: 'application/ogg'
- };
- }
- if (check([0x66, 0x4C, 0x61, 0x43])) {
- return {
- ext: 'flac',
- mime: 'audio/x-flac'
- };
- }
- if (check([0x4D, 0x41, 0x43, 0x20])) {
- return {
- ext: 'ape',
- mime: 'audio/ape'
- };
- }
- if (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) {
- return {
- ext: 'amr',
- mime: 'audio/amr'
- };
- }
- if (check([0x25, 0x50, 0x44, 0x46])) {
- return {
- ext: 'pdf',
- mime: 'application/pdf'
- };
- }
- if (check([0x4D, 0x5A])) {
- return {
- ext: 'exe',
- mime: 'application/x-msdownload'
- };
- }
- if (
- (buf[0] === 0x43 || buf[0] === 0x46) &&
- check([0x57, 0x53], {offset: 1})
- ) {
- return {
- ext: 'swf',
- mime: 'application/x-shockwave-flash'
- };
- }
- if (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) {
- return {
- ext: 'rtf',
- mime: 'application/rtf'
- };
- }
- if (check([0x00, 0x61, 0x73, 0x6D])) {
- return {
- ext: 'wasm',
- mime: 'application/wasm'
- };
- }
- if (
- check([0x77, 0x4F, 0x46, 0x46]) &&
- (
- check([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||
- check([0x4F, 0x54, 0x54, 0x4F], {offset: 4})
- )
- ) {
- return {
- ext: 'woff',
- mime: 'font/woff'
- };
- }
- if (
- check([0x77, 0x4F, 0x46, 0x32]) &&
- (
- check([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||
- check([0x4F, 0x54, 0x54, 0x4F], {offset: 4})
- )
- ) {
- return {
- ext: 'woff2',
- mime: 'font/woff2'
- };
- }
- if (
- check([0x4C, 0x50], {offset: 34}) &&
- (
- check([0x00, 0x00, 0x01], {offset: 8}) ||
- check([0x01, 0x00, 0x02], {offset: 8}) ||
- check([0x02, 0x00, 0x02], {offset: 8})
- )
- ) {
- return {
- ext: 'eot',
- mime: 'application/octet-stream'
- };
- }
- if (check([0x00, 0x01, 0x00, 0x00, 0x00])) {
- return {
- ext: 'ttf',
- mime: 'font/ttf'
- };
- }
- if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {
- return {
- ext: 'otf',
- mime: 'font/otf'
- };
- }
- if (check([0x00, 0x00, 0x01, 0x00])) {
- return {
- ext: 'ico',
- mime: 'image/x-icon'
- };
- }
- if (check([0x00, 0x00, 0x02, 0x00])) {
- return {
- ext: 'cur',
- mime: 'image/x-icon'
- };
- }
- if (check([0x46, 0x4C, 0x56, 0x01])) {
- return {
- ext: 'flv',
- mime: 'video/x-flv'
- };
- }
- if (check([0x25, 0x21])) {
- return {
- ext: 'ps',
- mime: 'application/postscript'
- };
- }
- if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {
- return {
- ext: 'xz',
- mime: 'application/x-xz'
- };
- }
- if (check([0x53, 0x51, 0x4C, 0x69])) {
- return {
- ext: 'sqlite',
- mime: 'application/x-sqlite3'
- };
- }
- if (check([0x4E, 0x45, 0x53, 0x1A])) {
- return {
- ext: 'nes',
- mime: 'application/x-nintendo-nes-rom'
- };
- }
- if (check([0x43, 0x72, 0x32, 0x34])) {
- return {
- ext: 'crx',
- mime: 'application/x-google-chrome-extension'
- };
- }
- if (
- check([0x4D, 0x53, 0x43, 0x46]) ||
- check([0x49, 0x53, 0x63, 0x28])
- ) {
- return {
- ext: 'cab',
- mime: 'application/vnd.ms-cab-compressed'
- };
- }
- // Needs to be before `ar` check
- if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) {
- return {
- ext: 'deb',
- mime: 'application/x-deb'
- };
- }
- if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) {
- return {
- ext: 'ar',
- mime: 'application/x-unix-archive'
- };
- }
- if (check([0xED, 0xAB, 0xEE, 0xDB])) {
- return {
- ext: 'rpm',
- mime: 'application/x-rpm'
- };
- }
- if (
- check([0x1F, 0xA0]) ||
- check([0x1F, 0x9D])
- ) {
- return {
- ext: 'Z',
- mime: 'application/x-compress'
- };
- }
- if (check([0x4C, 0x5A, 0x49, 0x50])) {
- return {
- ext: 'lz',
- mime: 'application/x-lzip'
- };
- }
- if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {
- return {
- ext: 'msi',
- mime: 'application/x-msi'
- };
- }
- if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {
- return {
- ext: 'mxf',
- mime: 'application/mxf'
- };
- }
- if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {
- return {
- ext: 'mts',
- mime: 'video/mp2t'
- };
- }
- if (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) {
- return {
- ext: 'blend',
- mime: 'application/x-blender'
- };
- }
- if (check([0x42, 0x50, 0x47, 0xFB])) {
- return {
- ext: 'bpg',
- mime: 'image/bpg'
- };
- }
- if (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {
- // JPEG-2000 family
- if (check([0x6A, 0x70, 0x32, 0x20], {offset: 20})) {
- return {
- ext: 'jp2',
- mime: 'image/jp2'
- };
- }
- if (check([0x6A, 0x70, 0x78, 0x20], {offset: 20})) {
- return {
- ext: 'jpx',
- mime: 'image/jpx'
- };
- }
- if (check([0x6A, 0x70, 0x6D, 0x20], {offset: 20})) {
- return {
- ext: 'jpm',
- mime: 'image/jpm'
- };
- }
- if (check([0x6D, 0x6A, 0x70, 0x32], {offset: 20})) {
- return {
- ext: 'mj2',
- mime: 'image/mj2'
- };
- }
- }
- if (check([0x46, 0x4F, 0x52, 0x4D, 0x00])) {
- return {
- ext: 'aif',
- mime: 'audio/aiff'
- };
- }
- if (checkString('<?xml ')) {
- return {
- ext: 'xml',
- mime: 'application/xml'
- };
- }
- if (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {
- return {
- ext: 'mobi',
- mime: 'application/x-mobipocket-ebook'
- };
- }
- // File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)
- if (check([0x66, 0x74, 0x79, 0x70], {offset: 4})) {
- if (check([0x6D, 0x69, 0x66, 0x31], {offset: 8})) {
- return {
- ext: 'heic',
- mime: 'image/heif'
- };
- }
- if (check([0x6D, 0x73, 0x66, 0x31], {offset: 8})) {
- return {
- ext: 'heic',
- mime: 'image/heif-sequence'
- };
- }
- if (check([0x68, 0x65, 0x69, 0x63], {offset: 8}) || check([0x68, 0x65, 0x69, 0x78], {offset: 8})) {
- return {
- ext: 'heic',
- mime: 'image/heic'
- };
- }
- if (check([0x68, 0x65, 0x76, 0x63], {offset: 8}) || check([0x68, 0x65, 0x76, 0x78], {offset: 8})) {
- return {
- ext: 'heic',
- mime: 'image/heic-sequence'
- };
- }
- }
- if (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {
- return {
- ext: 'ktx',
- mime: 'image/ktx'
- };
- }
- return null;
- };
- },{}],224:[function(require,module,exports){
- var rbush = require('rbush');
- var helpers = require('@turf/helpers');
- var meta = require('@turf/meta');
- var turfBBox = require('@turf/bbox').default;
- var featureEach = meta.featureEach;
- var coordEach = meta.coordEach;
- var polygon = helpers.polygon;
- var featureCollection = helpers.featureCollection;
- /**
- * GeoJSON implementation of [RBush](https://github.com/mourner/rbush#rbush) spatial index.
- *
- * @name rbush
- * @param {number} [maxEntries=9] defines the maximum number of entries in a tree node. 9 (used by default) is a
- * reasonable choice for most applications. Higher value means faster insertion and slower search, and vice versa.
- * @returns {RBush} GeoJSON RBush
- * @example
- * var geojsonRbush = require('geojson-rbush').default;
- * var tree = geojsonRbush();
- */
- function geojsonRbush(maxEntries) {
- var tree = rbush(maxEntries);
- /**
- * [insert](https://github.com/mourner/rbush#data-format)
- *
- * @param {Feature} feature insert single GeoJSON Feature
- * @returns {RBush} GeoJSON RBush
- * @example
- * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);
- * tree.insert(poly)
- */
- tree.insert = function (feature) {
- if (feature.type !== 'Feature') throw new Error('invalid feature');
- feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);
- return rbush.prototype.insert.call(this, feature);
- };
- /**
- * [load](https://github.com/mourner/rbush#bulk-inserting-data)
- *
- * @param {FeatureCollection|Array<Feature>} features load entire GeoJSON FeatureCollection
- * @returns {RBush} GeoJSON RBush
- * @example
- * var polys = turf.polygons([
- * [[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]],
- * [[[-93, 32], [-83, 32], [-83, 39], [-93, 39], [-93, 32]]]
- * ]);
- * tree.load(polys);
- */
- tree.load = function (features) {
- var load = [];
- // Load an Array of Features
- if (Array.isArray(features)) {
- features.forEach(function (feature) {
- if (feature.type !== 'Feature') throw new Error('invalid features');
- feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);
- load.push(feature);
- });
- } else {
- // Load a FeatureCollection
- featureEach(features, function (feature) {
- if (feature.type !== 'Feature') throw new Error('invalid features');
- feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);
- load.push(feature);
- });
- }
- return rbush.prototype.load.call(this, load);
- };
- /**
- * [remove](https://github.com/mourner/rbush#removing-data)
- *
- * @param {Feature} feature remove single GeoJSON Feature
- * @param {Function} equals Pass a custom equals function to compare by value for removal.
- * @returns {RBush} GeoJSON RBush
- * @example
- * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);
- *
- * tree.remove(poly);
- */
- tree.remove = function (feature, equals) {
- if (feature.type !== 'Feature') throw new Error('invalid feature');
- feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);
- return rbush.prototype.remove.call(this, feature, equals);
- };
- /**
- * [clear](https://github.com/mourner/rbush#removing-data)
- *
- * @returns {RBush} GeoJSON Rbush
- * @example
- * tree.clear()
- */
- tree.clear = function () {
- return rbush.prototype.clear.call(this);
- };
- /**
- * [search](https://github.com/mourner/rbush#search)
- *
- * @param {BBox|FeatureCollection|Feature} geojson search with GeoJSON
- * @returns {FeatureCollection} all features that intersects with the given GeoJSON.
- * @example
- * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);
- *
- * tree.search(poly);
- */
- tree.search = function (geojson) {
- var features = rbush.prototype.search.call(this, this.toBBox(geojson));
- return featureCollection(features);
- };
- /**
- * [collides](https://github.com/mourner/rbush#collisions)
- *
- * @param {BBox|FeatureCollection|Feature} geojson collides with GeoJSON
- * @returns {boolean} true if there are any items intersecting the given GeoJSON, otherwise false.
- * @example
- * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);
- *
- * tree.collides(poly);
- */
- tree.collides = function (geojson) {
- return rbush.prototype.collides.call(this, this.toBBox(geojson));
- };
- /**
- * [all](https://github.com/mourner/rbush#search)
- *
- * @returns {FeatureCollection} all the features in RBush
- * @example
- * tree.all()
- */
- tree.all = function () {
- var features = rbush.prototype.all.call(this);
- return featureCollection(features);
- };
- /**
- * [toJSON](https://github.com/mourner/rbush#export-and-import)
- *
- * @returns {any} export data as JSON object
- * @example
- * var exported = tree.toJSON()
- */
- tree.toJSON = function () {
- return rbush.prototype.toJSON.call(this);
- };
- /**
- * [fromJSON](https://github.com/mourner/rbush#export-and-import)
- *
- * @param {any} json import previously exported data
- * @returns {RBush} GeoJSON RBush
- * @example
- * var exported = {
- * "children": [
- * {
- * "type": "Feature",
- * "geometry": {
- * "type": "Point",
- * "coordinates": [110, 50]
- * },
- * "properties": {},
- * "bbox": [110, 50, 110, 50]
- * }
- * ],
- * "height": 1,
- * "leaf": true,
- * "minX": 110,
- * "minY": 50,
- * "maxX": 110,
- * "maxY": 50
- * }
- * tree.fromJSON(exported)
- */
- tree.fromJSON = function (json) {
- return rbush.prototype.fromJSON.call(this, json);
- };
- /**
- * Converts GeoJSON to {minX, minY, maxX, maxY} schema
- *
- * @private
- * @param {BBox|FeatureCollection|Feature} geojson feature(s) to retrieve BBox from
- * @returns {Object} converted to {minX, minY, maxX, maxY}
- */
- tree.toBBox = function (geojson) {
- var bbox;
- if (geojson.bbox) bbox = geojson.bbox;
- else if (Array.isArray(geojson) && geojson.length === 4) bbox = geojson;
- else if (Array.isArray(geojson) && geojson.length === 6) bbox = [geojson[0], geojson[1], geojson[3], geojson[4]];
- else if (geojson.type === 'Feature') bbox = turfBBox(geojson);
- else if (geojson.type === 'FeatureCollection') bbox = turfBBox(geojson);
- else throw new Error('invalid geojson')
- return {
- minX: bbox[0],
- minY: bbox[1],
- maxX: bbox[2],
- maxY: bbox[3]
- };
- };
- return tree;
- }
- module.exports = geojsonRbush;
- module.exports.default = geojsonRbush;
- },{"@turf/bbox":117,"@turf/helpers":123,"@turf/meta":225,"rbush":300}],225:[function(require,module,exports){
- arguments[4][122][0].apply(exports,arguments)
- },{"@turf/helpers":123,"dup":122}],226:[function(require,module,exports){
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global.geojsonvt = factory());
- }(this, (function () { 'use strict';
- // calculate simplification data using optimized Douglas-Peucker algorithm
- function simplify(coords, first, last, sqTolerance) {
- var maxSqDist = sqTolerance;
- var mid = (last - first) >> 1;
- var minPosToMid = last - first;
- var index;
- var ax = coords[first];
- var ay = coords[first + 1];
- var bx = coords[last];
- var by = coords[last + 1];
- for (var i = first + 3; i < last; i += 3) {
- var d = getSqSegDist(coords[i], coords[i + 1], ax, ay, bx, by);
- if (d > maxSqDist) {
- index = i;
- maxSqDist = d;
- } else if (d === maxSqDist) {
- // a workaround to ensure we choose a pivot close to the middle of the list,
- // reducing recursion depth, for certain degenerate inputs
- // https://github.com/mapbox/geojson-vt/issues/104
- var posToMid = Math.abs(i - mid);
- if (posToMid < minPosToMid) {
- index = i;
- minPosToMid = posToMid;
- }
- }
- }
- if (maxSqDist > sqTolerance) {
- if (index - first > 3) simplify(coords, first, index, sqTolerance);
- coords[index + 2] = maxSqDist;
- if (last - index > 3) simplify(coords, index, last, sqTolerance);
- }
- }
- // square distance from a point to a segment
- function getSqSegDist(px, py, x, y, bx, by) {
- var dx = bx - x;
- var dy = by - y;
- if (dx !== 0 || dy !== 0) {
- var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);
- if (t > 1) {
- x = bx;
- y = by;
- } else if (t > 0) {
- x += dx * t;
- y += dy * t;
- }
- }
- dx = px - x;
- dy = py - y;
- return dx * dx + dy * dy;
- }
- function createFeature(id, type, geom, tags) {
- var feature = {
- id: typeof id === 'undefined' ? null : id,
- type: type,
- geometry: geom,
- tags: tags,
- minX: Infinity,
- minY: Infinity,
- maxX: -Infinity,
- maxY: -Infinity
- };
- calcBBox(feature);
- return feature;
- }
- function calcBBox(feature) {
- var geom = feature.geometry;
- var type = feature.type;
- if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {
- calcLineBBox(feature, geom);
- } else if (type === 'Polygon' || type === 'MultiLineString') {
- for (var i = 0; i < geom.length; i++) {
- calcLineBBox(feature, geom[i]);
- }
- } else if (type === 'MultiPolygon') {
- for (i = 0; i < geom.length; i++) {
- for (var j = 0; j < geom[i].length; j++) {
- calcLineBBox(feature, geom[i][j]);
- }
- }
- }
- }
- function calcLineBBox(feature, geom) {
- for (var i = 0; i < geom.length; i += 3) {
- feature.minX = Math.min(feature.minX, geom[i]);
- feature.minY = Math.min(feature.minY, geom[i + 1]);
- feature.maxX = Math.max(feature.maxX, geom[i]);
- feature.maxY = Math.max(feature.maxY, geom[i + 1]);
- }
- }
- // converts GeoJSON feature into an intermediate projected JSON vector format with simplification data
- function convert(data, options) {
- var features = [];
- if (data.type === 'FeatureCollection') {
- for (var i = 0; i < data.features.length; i++) {
- convertFeature(features, data.features[i], options, i);
- }
- } else if (data.type === 'Feature') {
- convertFeature(features, data, options);
- } else {
- // single geometry or a geometry collection
- convertFeature(features, {geometry: data}, options);
- }
- return features;
- }
- function convertFeature(features, geojson, options, index) {
- if (!geojson.geometry) return;
- var coords = geojson.geometry.coordinates;
- var type = geojson.geometry.type;
- var tolerance = Math.pow(options.tolerance / ((1 << options.maxZoom) * options.extent), 2);
- var geometry = [];
- var id = geojson.id;
- if (options.promoteId) {
- id = geojson.properties[options.promoteId];
- } else if (options.generateId) {
- id = index || 0;
- }
- if (type === 'Point') {
- convertPoint(coords, geometry);
- } else if (type === 'MultiPoint') {
- for (var i = 0; i < coords.length; i++) {
- convertPoint(coords[i], geometry);
- }
- } else if (type === 'LineString') {
- convertLine(coords, geometry, tolerance, false);
- } else if (type === 'MultiLineString') {
- if (options.lineMetrics) {
- // explode into linestrings to be able to track metrics
- for (i = 0; i < coords.length; i++) {
- geometry = [];
- convertLine(coords[i], geometry, tolerance, false);
- features.push(createFeature(id, 'LineString', geometry, geojson.properties));
- }
- return;
- } else {
- convertLines(coords, geometry, tolerance, false);
- }
- } else if (type === 'Polygon') {
- convertLines(coords, geometry, tolerance, true);
- } else if (type === 'MultiPolygon') {
- for (i = 0; i < coords.length; i++) {
- var polygon = [];
- convertLines(coords[i], polygon, tolerance, true);
- geometry.push(polygon);
- }
- } else if (type === 'GeometryCollection') {
- for (i = 0; i < geojson.geometry.geometries.length; i++) {
- convertFeature(features, {
- id: id,
- geometry: geojson.geometry.geometries[i],
- properties: geojson.properties
- }, options, index);
- }
- return;
- } else {
- throw new Error('Input data is not a valid GeoJSON object.');
- }
- features.push(createFeature(id, type, geometry, geojson.properties));
- }
- function convertPoint(coords, out) {
- out.push(projectX(coords[0]));
- out.push(projectY(coords[1]));
- out.push(0);
- }
- function convertLine(ring, out, tolerance, isPolygon) {
- var x0, y0;
- var size = 0;
- for (var j = 0; j < ring.length; j++) {
- var x = projectX(ring[j][0]);
- var y = projectY(ring[j][1]);
- out.push(x);
- out.push(y);
- out.push(0);
- if (j > 0) {
- if (isPolygon) {
- size += (x0 * y - x * y0) / 2; // area
- } else {
- size += Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)); // length
- }
- }
- x0 = x;
- y0 = y;
- }
- var last = out.length - 3;
- out[2] = 1;
- simplify(out, 0, last, tolerance);
- out[last + 2] = 1;
- out.size = Math.abs(size);
- out.start = 0;
- out.end = out.size;
- }
- function convertLines(rings, out, tolerance, isPolygon) {
- for (var i = 0; i < rings.length; i++) {
- var geom = [];
- convertLine(rings[i], geom, tolerance, isPolygon);
- out.push(geom);
- }
- }
- function projectX(x) {
- return x / 360 + 0.5;
- }
- function projectY(y) {
- var sin = Math.sin(y * Math.PI / 180);
- var y2 = 0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI;
- return y2 < 0 ? 0 : y2 > 1 ? 1 : y2;
- }
- /* clip features between two axis-parallel lines:
- * | |
- * ___|___ | /
- * / | \____|____/
- * | |
- */
- function clip(features, scale, k1, k2, axis, minAll, maxAll, options) {
- k1 /= scale;
- k2 /= scale;
- if (minAll >= k1 && maxAll < k2) return features; // trivial accept
- else if (maxAll < k1 || minAll >= k2) return null; // trivial reject
- var clipped = [];
- for (var i = 0; i < features.length; i++) {
- var feature = features[i];
- var geometry = feature.geometry;
- var type = feature.type;
- var min = axis === 0 ? feature.minX : feature.minY;
- var max = axis === 0 ? feature.maxX : feature.maxY;
- if (min >= k1 && max < k2) { // trivial accept
- clipped.push(feature);
- continue;
- } else if (max < k1 || min >= k2) { // trivial reject
- continue;
- }
- var newGeometry = [];
- if (type === 'Point' || type === 'MultiPoint') {
- clipPoints(geometry, newGeometry, k1, k2, axis);
- } else if (type === 'LineString') {
- clipLine(geometry, newGeometry, k1, k2, axis, false, options.lineMetrics);
- } else if (type === 'MultiLineString') {
- clipLines(geometry, newGeometry, k1, k2, axis, false);
- } else if (type === 'Polygon') {
- clipLines(geometry, newGeometry, k1, k2, axis, true);
- } else if (type === 'MultiPolygon') {
- for (var j = 0; j < geometry.length; j++) {
- var polygon = [];
- clipLines(geometry[j], polygon, k1, k2, axis, true);
- if (polygon.length) {
- newGeometry.push(polygon);
- }
- }
- }
- if (newGeometry.length) {
- if (options.lineMetrics && type === 'LineString') {
- for (j = 0; j < newGeometry.length; j++) {
- clipped.push(createFeature(feature.id, type, newGeometry[j], feature.tags));
- }
- continue;
- }
- if (type === 'LineString' || type === 'MultiLineString') {
- if (newGeometry.length === 1) {
- type = 'LineString';
- newGeometry = newGeometry[0];
- } else {
- type = 'MultiLineString';
- }
- }
- if (type === 'Point' || type === 'MultiPoint') {
- type = newGeometry.length === 3 ? 'Point' : 'MultiPoint';
- }
- clipped.push(createFeature(feature.id, type, newGeometry, feature.tags));
- }
- }
- return clipped.length ? clipped : null;
- }
- function clipPoints(geom, newGeom, k1, k2, axis) {
- for (var i = 0; i < geom.length; i += 3) {
- var a = geom[i + axis];
- if (a >= k1 && a <= k2) {
- newGeom.push(geom[i]);
- newGeom.push(geom[i + 1]);
- newGeom.push(geom[i + 2]);
- }
- }
- }
- function clipLine(geom, newGeom, k1, k2, axis, isPolygon, trackMetrics) {
- var slice = newSlice(geom);
- var intersect = axis === 0 ? intersectX : intersectY;
- var len = geom.start;
- var segLen, t;
- for (var i = 0; i < geom.length - 3; i += 3) {
- var ax = geom[i];
- var ay = geom[i + 1];
- var az = geom[i + 2];
- var bx = geom[i + 3];
- var by = geom[i + 4];
- var a = axis === 0 ? ax : ay;
- var b = axis === 0 ? bx : by;
- var exited = false;
- if (trackMetrics) segLen = Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2));
- if (a < k1) {
- // ---|--> | (line enters the clip region from the left)
- if (b > k1) {
- t = intersect(slice, ax, ay, bx, by, k1);
- if (trackMetrics) slice.start = len + segLen * t;
- }
- } else if (a > k2) {
- // | <--|--- (line enters the clip region from the right)
- if (b < k2) {
- t = intersect(slice, ax, ay, bx, by, k2);
- if (trackMetrics) slice.start = len + segLen * t;
- }
- } else {
- addPoint(slice, ax, ay, az);
- }
- if (b < k1 && a >= k1) {
- // <--|--- | or <--|-----|--- (line exits the clip region on the left)
- t = intersect(slice, ax, ay, bx, by, k1);
- exited = true;
- }
- if (b > k2 && a <= k2) {
- // | ---|--> or ---|-----|--> (line exits the clip region on the right)
- t = intersect(slice, ax, ay, bx, by, k2);
- exited = true;
- }
- if (!isPolygon && exited) {
- if (trackMetrics) slice.end = len + segLen * t;
- newGeom.push(slice);
- slice = newSlice(geom);
- }
- if (trackMetrics) len += segLen;
- }
- // add the last point
- var last = geom.length - 3;
- ax = geom[last];
- ay = geom[last + 1];
- az = geom[last + 2];
- a = axis === 0 ? ax : ay;
- if (a >= k1 && a <= k2) addPoint(slice, ax, ay, az);
- // close the polygon if its endpoints are not the same after clipping
- last = slice.length - 3;
- if (isPolygon && last >= 3 && (slice[last] !== slice[0] || slice[last + 1] !== slice[1])) {
- addPoint(slice, slice[0], slice[1], slice[2]);
- }
- // add the final slice
- if (slice.length) {
- newGeom.push(slice);
- }
- }
- function newSlice(line) {
- var slice = [];
- slice.size = line.size;
- slice.start = line.start;
- slice.end = line.end;
- return slice;
- }
- function clipLines(geom, newGeom, k1, k2, axis, isPolygon) {
- for (var i = 0; i < geom.length; i++) {
- clipLine(geom[i], newGeom, k1, k2, axis, isPolygon, false);
- }
- }
- function addPoint(out, x, y, z) {
- out.push(x);
- out.push(y);
- out.push(z);
- }
- function intersectX(out, ax, ay, bx, by, x) {
- var t = (x - ax) / (bx - ax);
- out.push(x);
- out.push(ay + (by - ay) * t);
- out.push(1);
- return t;
- }
- function intersectY(out, ax, ay, bx, by, y) {
- var t = (y - ay) / (by - ay);
- out.push(ax + (bx - ax) * t);
- out.push(y);
- out.push(1);
- return t;
- }
- function wrap(features, options) {
- var buffer = options.buffer / options.extent;
- var merged = features;
- var left = clip(features, 1, -1 - buffer, buffer, 0, -1, 2, options); // left world copy
- var right = clip(features, 1, 1 - buffer, 2 + buffer, 0, -1, 2, options); // right world copy
- if (left || right) {
- merged = clip(features, 1, -buffer, 1 + buffer, 0, -1, 2, options) || []; // center world copy
- if (left) merged = shiftFeatureCoords(left, 1).concat(merged); // merge left into center
- if (right) merged = merged.concat(shiftFeatureCoords(right, -1)); // merge right into center
- }
- return merged;
- }
- function shiftFeatureCoords(features, offset) {
- var newFeatures = [];
- for (var i = 0; i < features.length; i++) {
- var feature = features[i],
- type = feature.type;
- var newGeometry;
- if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {
- newGeometry = shiftCoords(feature.geometry, offset);
- } else if (type === 'MultiLineString' || type === 'Polygon') {
- newGeometry = [];
- for (var j = 0; j < feature.geometry.length; j++) {
- newGeometry.push(shiftCoords(feature.geometry[j], offset));
- }
- } else if (type === 'MultiPolygon') {
- newGeometry = [];
- for (j = 0; j < feature.geometry.length; j++) {
- var newPolygon = [];
- for (var k = 0; k < feature.geometry[j].length; k++) {
- newPolygon.push(shiftCoords(feature.geometry[j][k], offset));
- }
- newGeometry.push(newPolygon);
- }
- }
- newFeatures.push(createFeature(feature.id, type, newGeometry, feature.tags));
- }
- return newFeatures;
- }
- function shiftCoords(points, offset) {
- var newPoints = [];
- newPoints.size = points.size;
- if (points.start !== undefined) {
- newPoints.start = points.start;
- newPoints.end = points.end;
- }
- for (var i = 0; i < points.length; i += 3) {
- newPoints.push(points[i] + offset, points[i + 1], points[i + 2]);
- }
- return newPoints;
- }
- // Transforms the coordinates of each feature in the given tile from
- // mercator-projected space into (extent x extent) tile space.
- function transformTile(tile, extent) {
- if (tile.transformed) return tile;
- var z2 = 1 << tile.z,
- tx = tile.x,
- ty = tile.y,
- i, j, k;
- for (i = 0; i < tile.features.length; i++) {
- var feature = tile.features[i],
- geom = feature.geometry,
- type = feature.type;
- feature.geometry = [];
- if (type === 1) {
- for (j = 0; j < geom.length; j += 2) {
- feature.geometry.push(transformPoint(geom[j], geom[j + 1], extent, z2, tx, ty));
- }
- } else {
- for (j = 0; j < geom.length; j++) {
- var ring = [];
- for (k = 0; k < geom[j].length; k += 2) {
- ring.push(transformPoint(geom[j][k], geom[j][k + 1], extent, z2, tx, ty));
- }
- feature.geometry.push(ring);
- }
- }
- }
- tile.transformed = true;
- return tile;
- }
- function transformPoint(x, y, extent, z2, tx, ty) {
- return [
- Math.round(extent * (x * z2 - tx)),
- Math.round(extent * (y * z2 - ty))];
- }
- function createTile(features, z, tx, ty, options) {
- var tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent);
- var tile = {
- features: [],
- numPoints: 0,
- numSimplified: 0,
- numFeatures: 0,
- source: null,
- x: tx,
- y: ty,
- z: z,
- transformed: false,
- minX: 2,
- minY: 1,
- maxX: -1,
- maxY: 0
- };
- for (var i = 0; i < features.length; i++) {
- tile.numFeatures++;
- addFeature(tile, features[i], tolerance, options);
- var minX = features[i].minX;
- var minY = features[i].minY;
- var maxX = features[i].maxX;
- var maxY = features[i].maxY;
- if (minX < tile.minX) tile.minX = minX;
- if (minY < tile.minY) tile.minY = minY;
- if (maxX > tile.maxX) tile.maxX = maxX;
- if (maxY > tile.maxY) tile.maxY = maxY;
- }
- return tile;
- }
- function addFeature(tile, feature, tolerance, options) {
- var geom = feature.geometry,
- type = feature.type,
- simplified = [];
- if (type === 'Point' || type === 'MultiPoint') {
- for (var i = 0; i < geom.length; i += 3) {
- simplified.push(geom[i]);
- simplified.push(geom[i + 1]);
- tile.numPoints++;
- tile.numSimplified++;
- }
- } else if (type === 'LineString') {
- addLine(simplified, geom, tile, tolerance, false, false);
- } else if (type === 'MultiLineString' || type === 'Polygon') {
- for (i = 0; i < geom.length; i++) {
- addLine(simplified, geom[i], tile, tolerance, type === 'Polygon', i === 0);
- }
- } else if (type === 'MultiPolygon') {
- for (var k = 0; k < geom.length; k++) {
- var polygon = geom[k];
- for (i = 0; i < polygon.length; i++) {
- addLine(simplified, polygon[i], tile, tolerance, true, i === 0);
- }
- }
- }
- if (simplified.length) {
- var tags = feature.tags || null;
- if (type === 'LineString' && options.lineMetrics) {
- tags = {};
- for (var key in feature.tags) tags[key] = feature.tags[key];
- tags['mapbox_clip_start'] = geom.start / geom.size;
- tags['mapbox_clip_end'] = geom.end / geom.size;
- }
- var tileFeature = {
- geometry: simplified,
- type: type === 'Polygon' || type === 'MultiPolygon' ? 3 :
- type === 'LineString' || type === 'MultiLineString' ? 2 : 1,
- tags: tags
- };
- if (feature.id !== null) {
- tileFeature.id = feature.id;
- }
- tile.features.push(tileFeature);
- }
- }
- function addLine(result, geom, tile, tolerance, isPolygon, isOuter) {
- var sqTolerance = tolerance * tolerance;
- if (tolerance > 0 && (geom.size < (isPolygon ? sqTolerance : tolerance))) {
- tile.numPoints += geom.length / 3;
- return;
- }
- var ring = [];
- for (var i = 0; i < geom.length; i += 3) {
- if (tolerance === 0 || geom[i + 2] > sqTolerance) {
- tile.numSimplified++;
- ring.push(geom[i]);
- ring.push(geom[i + 1]);
- }
- tile.numPoints++;
- }
- if (isPolygon) rewind(ring, isOuter);
- result.push(ring);
- }
- function rewind(ring, clockwise) {
- var area = 0;
- for (var i = 0, len = ring.length, j = len - 2; i < len; j = i, i += 2) {
- area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]);
- }
- if (area > 0 === clockwise) {
- for (i = 0, len = ring.length; i < len / 2; i += 2) {
- var x = ring[i];
- var y = ring[i + 1];
- ring[i] = ring[len - 2 - i];
- ring[i + 1] = ring[len - 1 - i];
- ring[len - 2 - i] = x;
- ring[len - 1 - i] = y;
- }
- }
- }
- function geojsonvt(data, options) {
- return new GeoJSONVT(data, options);
- }
- function GeoJSONVT(data, options) {
- options = this.options = extend(Object.create(this.options), options);
- var debug = options.debug;
- if (debug) console.time('preprocess data');
- if (options.maxZoom < 0 || options.maxZoom > 24) throw new Error('maxZoom should be in the 0-24 range');
- if (options.promoteId && options.generateId) throw new Error('promoteId and generateId cannot be used together.');
- var features = convert(data, options);
- this.tiles = {};
- this.tileCoords = [];
- if (debug) {
- console.timeEnd('preprocess data');
- console.log('index: maxZoom: %d, maxPoints: %d', options.indexMaxZoom, options.indexMaxPoints);
- console.time('generate tiles');
- this.stats = {};
- this.total = 0;
- }
- features = wrap(features, options);
- // start slicing from the top tile down
- if (features.length) this.splitTile(features, 0, 0, 0);
- if (debug) {
- if (features.length) console.log('features: %d, points: %d', this.tiles[0].numFeatures, this.tiles[0].numPoints);
- console.timeEnd('generate tiles');
- console.log('tiles generated:', this.total, JSON.stringify(this.stats));
- }
- }
- GeoJSONVT.prototype.options = {
- maxZoom: 14, // max zoom to preserve detail on
- indexMaxZoom: 5, // max zoom in the tile index
- indexMaxPoints: 100000, // max number of points per tile in the tile index
- tolerance: 3, // simplification tolerance (higher means simpler)
- extent: 4096, // tile extent
- buffer: 64, // tile buffer on each side
- lineMetrics: false, // whether to calculate line metrics
- promoteId: null, // name of a feature property to be promoted to feature.id
- generateId: false, // whether to generate feature ids. Cannot be used with promoteId
- debug: 0 // logging level (0, 1 or 2)
- };
- GeoJSONVT.prototype.splitTile = function (features, z, x, y, cz, cx, cy) {
- var stack = [features, z, x, y],
- options = this.options,
- debug = options.debug;
- // avoid recursion by using a processing queue
- while (stack.length) {
- y = stack.pop();
- x = stack.pop();
- z = stack.pop();
- features = stack.pop();
- var z2 = 1 << z,
- id = toID(z, x, y),
- tile = this.tiles[id];
- if (!tile) {
- if (debug > 1) console.time('creation');
- tile = this.tiles[id] = createTile(features, z, x, y, options);
- this.tileCoords.push({z: z, x: x, y: y});
- if (debug) {
- if (debug > 1) {
- console.log('tile z%d-%d-%d (features: %d, points: %d, simplified: %d)',
- z, x, y, tile.numFeatures, tile.numPoints, tile.numSimplified);
- console.timeEnd('creation');
- }
- var key = 'z' + z;
- this.stats[key] = (this.stats[key] || 0) + 1;
- this.total++;
- }
- }
- // save reference to original geometry in tile so that we can drill down later if we stop now
- tile.source = features;
- // if it's the first-pass tiling
- if (!cz) {
- // stop tiling if we reached max zoom, or if the tile is too simple
- if (z === options.indexMaxZoom || tile.numPoints <= options.indexMaxPoints) continue;
- // if a drilldown to a specific tile
- } else {
- // stop tiling if we reached base zoom or our target tile zoom
- if (z === options.maxZoom || z === cz) continue;
- // stop tiling if it's not an ancestor of the target tile
- var m = 1 << (cz - z);
- if (x !== Math.floor(cx / m) || y !== Math.floor(cy / m)) continue;
- }
- // if we slice further down, no need to keep source geometry
- tile.source = null;
- if (features.length === 0) continue;
- if (debug > 1) console.time('clipping');
- // values we'll use for clipping
- var k1 = 0.5 * options.buffer / options.extent,
- k2 = 0.5 - k1,
- k3 = 0.5 + k1,
- k4 = 1 + k1,
- tl, bl, tr, br, left, right;
- tl = bl = tr = br = null;
- left = clip(features, z2, x - k1, x + k3, 0, tile.minX, tile.maxX, options);
- right = clip(features, z2, x + k2, x + k4, 0, tile.minX, tile.maxX, options);
- features = null;
- if (left) {
- tl = clip(left, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);
- bl = clip(left, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);
- left = null;
- }
- if (right) {
- tr = clip(right, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);
- br = clip(right, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);
- right = null;
- }
- if (debug > 1) console.timeEnd('clipping');
- stack.push(tl || [], z + 1, x * 2, y * 2);
- stack.push(bl || [], z + 1, x * 2, y * 2 + 1);
- stack.push(tr || [], z + 1, x * 2 + 1, y * 2);
- stack.push(br || [], z + 1, x * 2 + 1, y * 2 + 1);
- }
- };
- GeoJSONVT.prototype.getTile = function (z, x, y) {
- var options = this.options,
- extent = options.extent,
- debug = options.debug;
- if (z < 0 || z > 24) return null;
- var z2 = 1 << z;
- x = ((x % z2) + z2) % z2; // wrap tile x coordinate
- var id = toID(z, x, y);
- if (this.tiles[id]) return transformTile(this.tiles[id], extent);
- if (debug > 1) console.log('drilling down to z%d-%d-%d', z, x, y);
- var z0 = z,
- x0 = x,
- y0 = y,
- parent;
- while (!parent && z0 > 0) {
- z0--;
- x0 = Math.floor(x0 / 2);
- y0 = Math.floor(y0 / 2);
- parent = this.tiles[toID(z0, x0, y0)];
- }
- if (!parent || !parent.source) return null;
- // if we found a parent tile containing the original geometry, we can drill down from it
- if (debug > 1) console.log('found parent tile z%d-%d-%d', z0, x0, y0);
- if (debug > 1) console.time('drilling down');
- this.splitTile(parent.source, z0, x0, y0, z, x, y);
- if (debug > 1) console.timeEnd('drilling down');
- return this.tiles[id] ? transformTile(this.tiles[id], extent) : null;
- };
- function toID(z, x, y) {
- return (((1 << z) * y + x) * 32) + z;
- }
- function extend(dest, src) {
- for (var i in src) dest[i] = src[i];
- return dest;
- }
- return geojsonvt;
- })));
- },{}],227:[function(require,module,exports){
- 'use strict'
- var Buffer = require('safe-buffer').Buffer
- var Transform = require('stream').Transform
- var inherits = require('inherits')
- function throwIfNotStringOrBuffer (val, prefix) {
- if (!Buffer.isBuffer(val) && typeof val !== 'string') {
- throw new TypeError(prefix + ' must be a string or a buffer')
- }
- }
- function HashBase (blockSize) {
- Transform.call(this)
- this._block = Buffer.allocUnsafe(blockSize)
- this._blockSize = blockSize
- this._blockOffset = 0
- this._length = [0, 0, 0, 0]
- this._finalized = false
- }
- inherits(HashBase, Transform)
- HashBase.prototype._transform = function (chunk, encoding, callback) {
- var error = null
- try {
- this.update(chunk, encoding)
- } catch (err) {
- error = err
- }
- callback(error)
- }
- HashBase.prototype._flush = function (callback) {
- var error = null
- try {
- this.push(this.digest())
- } catch (err) {
- error = err
- }
- callback(error)
- }
- HashBase.prototype.update = function (data, encoding) {
- throwIfNotStringOrBuffer(data, 'Data')
- if (this._finalized) throw new Error('Digest already called')
- if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
- // consume data
- var block = this._block
- var offset = 0
- while (this._blockOffset + data.length - offset >= this._blockSize) {
- for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
- this._update()
- this._blockOffset = 0
- }
- while (offset < data.length) block[this._blockOffset++] = data[offset++]
- // update length
- for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
- this._length[j] += carry
- carry = (this._length[j] / 0x0100000000) | 0
- if (carry > 0) this._length[j] -= 0x0100000000 * carry
- }
- return this
- }
- HashBase.prototype._update = function () {
- throw new Error('_update is not implemented')
- }
- HashBase.prototype.digest = function (encoding) {
- if (this._finalized) throw new Error('Digest already called')
- this._finalized = true
- var digest = this._digest()
- if (encoding !== undefined) digest = digest.toString(encoding)
- // reset state
- this._block.fill(0)
- this._blockOffset = 0
- for (var i = 0; i < 4; ++i) this._length[i] = 0
- return digest
- }
- HashBase.prototype._digest = function () {
- throw new Error('_digest is not implemented')
- }
- module.exports = HashBase
- },{"inherits":262,"safe-buffer":318,"stream":328}],228:[function(require,module,exports){
- var hash = exports;
- hash.utils = require('./hash/utils');
- hash.common = require('./hash/common');
- hash.sha = require('./hash/sha');
- hash.ripemd = require('./hash/ripemd');
- hash.hmac = require('./hash/hmac');
- // Proxy hash functions to the main object
- hash.sha1 = hash.sha.sha1;
- hash.sha256 = hash.sha.sha256;
- hash.sha224 = hash.sha.sha224;
- hash.sha384 = hash.sha.sha384;
- hash.sha512 = hash.sha.sha512;
- hash.ripemd160 = hash.ripemd.ripemd160;
- },{"./hash/common":229,"./hash/hmac":230,"./hash/ripemd":231,"./hash/sha":232,"./hash/utils":239}],229:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- var assert = require('minimalistic-assert');
- function BlockHash() {
- this.pending = null;
- this.pendingTotal = 0;
- this.blockSize = this.constructor.blockSize;
- this.outSize = this.constructor.outSize;
- this.hmacStrength = this.constructor.hmacStrength;
- this.padLength = this.constructor.padLength / 8;
- this.endian = 'big';
- this._delta8 = this.blockSize / 8;
- this._delta32 = this.blockSize / 32;
- }
- exports.BlockHash = BlockHash;
- BlockHash.prototype.update = function update(msg, enc) {
- // Convert message to array, pad it, and join into 32bit blocks
- msg = utils.toArray(msg, enc);
- if (!this.pending)
- this.pending = msg;
- else
- this.pending = this.pending.concat(msg);
- this.pendingTotal += msg.length;
- // Enough data, try updating
- if (this.pending.length >= this._delta8) {
- msg = this.pending;
- // Process pending data in blocks
- var r = msg.length % this._delta8;
- this.pending = msg.slice(msg.length - r, msg.length);
- if (this.pending.length === 0)
- this.pending = null;
- msg = utils.join32(msg, 0, msg.length - r, this.endian);
- for (var i = 0; i < msg.length; i += this._delta32)
- this._update(msg, i, i + this._delta32);
- }
- return this;
- };
- BlockHash.prototype.digest = function digest(enc) {
- this.update(this._pad());
- assert(this.pending === null);
- return this._digest(enc);
- };
- BlockHash.prototype._pad = function pad() {
- var len = this.pendingTotal;
- var bytes = this._delta8;
- var k = bytes - ((len + this.padLength) % bytes);
- var res = new Array(k + this.padLength);
- res[0] = 0x80;
- for (var i = 1; i < k; i++)
- res[i] = 0;
- // Append length
- len <<= 3;
- if (this.endian === 'big') {
- for (var t = 8; t < this.padLength; t++)
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = (len >>> 24) & 0xff;
- res[i++] = (len >>> 16) & 0xff;
- res[i++] = (len >>> 8) & 0xff;
- res[i++] = len & 0xff;
- } else {
- res[i++] = len & 0xff;
- res[i++] = (len >>> 8) & 0xff;
- res[i++] = (len >>> 16) & 0xff;
- res[i++] = (len >>> 24) & 0xff;
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = 0;
- res[i++] = 0;
- for (t = 8; t < this.padLength; t++)
- res[i++] = 0;
- }
- return res;
- };
- },{"./utils":239,"minimalistic-assert":268}],230:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- var assert = require('minimalistic-assert');
- function Hmac(hash, key, enc) {
- if (!(this instanceof Hmac))
- return new Hmac(hash, key, enc);
- this.Hash = hash;
- this.blockSize = hash.blockSize / 8;
- this.outSize = hash.outSize / 8;
- this.inner = null;
- this.outer = null;
- this._init(utils.toArray(key, enc));
- }
- module.exports = Hmac;
- Hmac.prototype._init = function init(key) {
- // Shorten key, if needed
- if (key.length > this.blockSize)
- key = new this.Hash().update(key).digest();
- assert(key.length <= this.blockSize);
- // Add padding to key
- for (var i = key.length; i < this.blockSize; i++)
- key.push(0);
- for (i = 0; i < key.length; i++)
- key[i] ^= 0x36;
- this.inner = new this.Hash().update(key);
- // 0x36 ^ 0x5c = 0x6a
- for (i = 0; i < key.length; i++)
- key[i] ^= 0x6a;
- this.outer = new this.Hash().update(key);
- };
- Hmac.prototype.update = function update(msg, enc) {
- this.inner.update(msg, enc);
- return this;
- };
- Hmac.prototype.digest = function digest(enc) {
- this.outer.update(this.inner.digest());
- return this.outer.digest(enc);
- };
- },{"./utils":239,"minimalistic-assert":268}],231:[function(require,module,exports){
- 'use strict';
- var utils = require('./utils');
- var common = require('./common');
- var rotl32 = utils.rotl32;
- var sum32 = utils.sum32;
- var sum32_3 = utils.sum32_3;
- var sum32_4 = utils.sum32_4;
- var BlockHash = common.BlockHash;
- function RIPEMD160() {
- if (!(this instanceof RIPEMD160))
- return new RIPEMD160();
- BlockHash.call(this);
- this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
- this.endian = 'little';
- }
- utils.inherits(RIPEMD160, BlockHash);
- exports.ripemd160 = RIPEMD160;
- RIPEMD160.blockSize = 512;
- RIPEMD160.outSize = 160;
- RIPEMD160.hmacStrength = 192;
- RIPEMD160.padLength = 64;
- RIPEMD160.prototype._update = function update(msg, start) {
- var A = this.h[0];
- var B = this.h[1];
- var C = this.h[2];
- var D = this.h[3];
- var E = this.h[4];
- var Ah = A;
- var Bh = B;
- var Ch = C;
- var Dh = D;
- var Eh = E;
- for (var j = 0; j < 80; j++) {
- var T = sum32(
- rotl32(
- sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
- s[j]),
- E);
- A = E;
- E = D;
- D = rotl32(C, 10);
- C = B;
- B = T;
- T = sum32(
- rotl32(
- sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
- sh[j]),
- Eh);
- Ah = Eh;
- Eh = Dh;
- Dh = rotl32(Ch, 10);
- Ch = Bh;
- Bh = T;
- }
- T = sum32_3(this.h[1], C, Dh);
- this.h[1] = sum32_3(this.h[2], D, Eh);
- this.h[2] = sum32_3(this.h[3], E, Ah);
- this.h[3] = sum32_3(this.h[4], A, Bh);
- this.h[4] = sum32_3(this.h[0], B, Ch);
- this.h[0] = T;
- };
- RIPEMD160.prototype._digest = function digest(enc) {
- if (enc === 'hex')
- return utils.toHex32(this.h, 'little');
- else
- return utils.split32(this.h, 'little');
- };
- function f(j, x, y, z) {
- if (j <= 15)
- return x ^ y ^ z;
- else if (j <= 31)
- return (x & y) | ((~x) & z);
- else if (j <= 47)
- return (x | (~y)) ^ z;
- else if (j <= 63)
- return (x & z) | (y & (~z));
- else
- return x ^ (y | (~z));
- }
- function K(j) {
- if (j <= 15)
- return 0x00000000;
- else if (j <= 31)
- return 0x5a827999;
- else if (j <= 47)
- return 0x6ed9eba1;
- else if (j <= 63)
- return 0x8f1bbcdc;
- else
- return 0xa953fd4e;
- }
- function Kh(j) {
- if (j <= 15)
- return 0x50a28be6;
- else if (j <= 31)
- return 0x5c4dd124;
- else if (j <= 47)
- return 0x6d703ef3;
- else if (j <= 63)
- return 0x7a6d76e9;
- else
- return 0x00000000;
- }
- var r = [
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
- 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
- 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
- 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
- ];
- var rh = [
- 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
- 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
- 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
- 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
- 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
- ];
- var s = [
- 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
- 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
- 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
- 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
- 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
- ];
- var sh = [
- 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
- 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
- 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
- 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
- 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
- ];
- },{"./common":229,"./utils":239}],232:[function(require,module,exports){
- 'use strict';
- exports.sha1 = require('./sha/1');
- exports.sha224 = require('./sha/224');
- exports.sha256 = require('./sha/256');
- exports.sha384 = require('./sha/384');
- exports.sha512 = require('./sha/512');
- },{"./sha/1":233,"./sha/224":234,"./sha/256":235,"./sha/384":236,"./sha/512":237}],233:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var common = require('../common');
- var shaCommon = require('./common');
- var rotl32 = utils.rotl32;
- var sum32 = utils.sum32;
- var sum32_5 = utils.sum32_5;
- var ft_1 = shaCommon.ft_1;
- var BlockHash = common.BlockHash;
- var sha1_K = [
- 0x5A827999, 0x6ED9EBA1,
- 0x8F1BBCDC, 0xCA62C1D6
- ];
- function SHA1() {
- if (!(this instanceof SHA1))
- return new SHA1();
- BlockHash.call(this);
- this.h = [
- 0x67452301, 0xefcdab89, 0x98badcfe,
- 0x10325476, 0xc3d2e1f0 ];
- this.W = new Array(80);
- }
- utils.inherits(SHA1, BlockHash);
- module.exports = SHA1;
- SHA1.blockSize = 512;
- SHA1.outSize = 160;
- SHA1.hmacStrength = 80;
- SHA1.padLength = 64;
- SHA1.prototype._update = function _update(msg, start) {
- var W = this.W;
- for (var i = 0; i < 16; i++)
- W[i] = msg[start + i];
- for(; i < W.length; i++)
- W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
- var a = this.h[0];
- var b = this.h[1];
- var c = this.h[2];
- var d = this.h[3];
- var e = this.h[4];
- for (i = 0; i < W.length; i++) {
- var s = ~~(i / 20);
- var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
- e = d;
- d = c;
- c = rotl32(b, 30);
- b = a;
- a = t;
- }
- this.h[0] = sum32(this.h[0], a);
- this.h[1] = sum32(this.h[1], b);
- this.h[2] = sum32(this.h[2], c);
- this.h[3] = sum32(this.h[3], d);
- this.h[4] = sum32(this.h[4], e);
- };
- SHA1.prototype._digest = function digest(enc) {
- if (enc === 'hex')
- return utils.toHex32(this.h, 'big');
- else
- return utils.split32(this.h, 'big');
- };
- },{"../common":229,"../utils":239,"./common":238}],234:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var SHA256 = require('./256');
- function SHA224() {
- if (!(this instanceof SHA224))
- return new SHA224();
- SHA256.call(this);
- this.h = [
- 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
- 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
- }
- utils.inherits(SHA224, SHA256);
- module.exports = SHA224;
- SHA224.blockSize = 512;
- SHA224.outSize = 224;
- SHA224.hmacStrength = 192;
- SHA224.padLength = 64;
- SHA224.prototype._digest = function digest(enc) {
- // Just truncate output
- if (enc === 'hex')
- return utils.toHex32(this.h.slice(0, 7), 'big');
- else
- return utils.split32(this.h.slice(0, 7), 'big');
- };
- },{"../utils":239,"./256":235}],235:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var common = require('../common');
- var shaCommon = require('./common');
- var assert = require('minimalistic-assert');
- var sum32 = utils.sum32;
- var sum32_4 = utils.sum32_4;
- var sum32_5 = utils.sum32_5;
- var ch32 = shaCommon.ch32;
- var maj32 = shaCommon.maj32;
- var s0_256 = shaCommon.s0_256;
- var s1_256 = shaCommon.s1_256;
- var g0_256 = shaCommon.g0_256;
- var g1_256 = shaCommon.g1_256;
- var BlockHash = common.BlockHash;
- var sha256_K = [
- 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
- 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
- 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
- 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
- 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
- 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
- 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
- 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
- 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
- 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
- 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
- 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
- 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
- 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
- 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
- ];
- function SHA256() {
- if (!(this instanceof SHA256))
- return new SHA256();
- BlockHash.call(this);
- this.h = [
- 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
- 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
- ];
- this.k = sha256_K;
- this.W = new Array(64);
- }
- utils.inherits(SHA256, BlockHash);
- module.exports = SHA256;
- SHA256.blockSize = 512;
- SHA256.outSize = 256;
- SHA256.hmacStrength = 192;
- SHA256.padLength = 64;
- SHA256.prototype._update = function _update(msg, start) {
- var W = this.W;
- for (var i = 0; i < 16; i++)
- W[i] = msg[start + i];
- for (; i < W.length; i++)
- W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
- var a = this.h[0];
- var b = this.h[1];
- var c = this.h[2];
- var d = this.h[3];
- var e = this.h[4];
- var f = this.h[5];
- var g = this.h[6];
- var h = this.h[7];
- assert(this.k.length === W.length);
- for (i = 0; i < W.length; i++) {
- var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
- var T2 = sum32(s0_256(a), maj32(a, b, c));
- h = g;
- g = f;
- f = e;
- e = sum32(d, T1);
- d = c;
- c = b;
- b = a;
- a = sum32(T1, T2);
- }
- this.h[0] = sum32(this.h[0], a);
- this.h[1] = sum32(this.h[1], b);
- this.h[2] = sum32(this.h[2], c);
- this.h[3] = sum32(this.h[3], d);
- this.h[4] = sum32(this.h[4], e);
- this.h[5] = sum32(this.h[5], f);
- this.h[6] = sum32(this.h[6], g);
- this.h[7] = sum32(this.h[7], h);
- };
- SHA256.prototype._digest = function digest(enc) {
- if (enc === 'hex')
- return utils.toHex32(this.h, 'big');
- else
- return utils.split32(this.h, 'big');
- };
- },{"../common":229,"../utils":239,"./common":238,"minimalistic-assert":268}],236:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var SHA512 = require('./512');
- function SHA384() {
- if (!(this instanceof SHA384))
- return new SHA384();
- SHA512.call(this);
- this.h = [
- 0xcbbb9d5d, 0xc1059ed8,
- 0x629a292a, 0x367cd507,
- 0x9159015a, 0x3070dd17,
- 0x152fecd8, 0xf70e5939,
- 0x67332667, 0xffc00b31,
- 0x8eb44a87, 0x68581511,
- 0xdb0c2e0d, 0x64f98fa7,
- 0x47b5481d, 0xbefa4fa4 ];
- }
- utils.inherits(SHA384, SHA512);
- module.exports = SHA384;
- SHA384.blockSize = 1024;
- SHA384.outSize = 384;
- SHA384.hmacStrength = 192;
- SHA384.padLength = 128;
- SHA384.prototype._digest = function digest(enc) {
- if (enc === 'hex')
- return utils.toHex32(this.h.slice(0, 12), 'big');
- else
- return utils.split32(this.h.slice(0, 12), 'big');
- };
- },{"../utils":239,"./512":237}],237:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var common = require('../common');
- var assert = require('minimalistic-assert');
- var rotr64_hi = utils.rotr64_hi;
- var rotr64_lo = utils.rotr64_lo;
- var shr64_hi = utils.shr64_hi;
- var shr64_lo = utils.shr64_lo;
- var sum64 = utils.sum64;
- var sum64_hi = utils.sum64_hi;
- var sum64_lo = utils.sum64_lo;
- var sum64_4_hi = utils.sum64_4_hi;
- var sum64_4_lo = utils.sum64_4_lo;
- var sum64_5_hi = utils.sum64_5_hi;
- var sum64_5_lo = utils.sum64_5_lo;
- var BlockHash = common.BlockHash;
- var sha512_K = [
- 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
- 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
- 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
- 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
- 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
- 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
- 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
- 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
- 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
- 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
- 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
- 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
- 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
- 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
- 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
- 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
- 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
- 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
- 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
- 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
- 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
- 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
- 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
- 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
- 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
- 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
- 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
- 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
- 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
- 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
- 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
- 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
- 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
- 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
- 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
- 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
- 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
- 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
- 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
- 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
- ];
- function SHA512() {
- if (!(this instanceof SHA512))
- return new SHA512();
- BlockHash.call(this);
- this.h = [
- 0x6a09e667, 0xf3bcc908,
- 0xbb67ae85, 0x84caa73b,
- 0x3c6ef372, 0xfe94f82b,
- 0xa54ff53a, 0x5f1d36f1,
- 0x510e527f, 0xade682d1,
- 0x9b05688c, 0x2b3e6c1f,
- 0x1f83d9ab, 0xfb41bd6b,
- 0x5be0cd19, 0x137e2179 ];
- this.k = sha512_K;
- this.W = new Array(160);
- }
- utils.inherits(SHA512, BlockHash);
- module.exports = SHA512;
- SHA512.blockSize = 1024;
- SHA512.outSize = 512;
- SHA512.hmacStrength = 192;
- SHA512.padLength = 128;
- SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
- var W = this.W;
- // 32 x 32bit words
- for (var i = 0; i < 32; i++)
- W[i] = msg[start + i];
- for (; i < W.length; i += 2) {
- var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
- var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
- var c1_hi = W[i - 14]; // i - 7
- var c1_lo = W[i - 13];
- var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
- var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
- var c3_hi = W[i - 32]; // i - 16
- var c3_lo = W[i - 31];
- W[i] = sum64_4_hi(
- c0_hi, c0_lo,
- c1_hi, c1_lo,
- c2_hi, c2_lo,
- c3_hi, c3_lo);
- W[i + 1] = sum64_4_lo(
- c0_hi, c0_lo,
- c1_hi, c1_lo,
- c2_hi, c2_lo,
- c3_hi, c3_lo);
- }
- };
- SHA512.prototype._update = function _update(msg, start) {
- this._prepareBlock(msg, start);
- var W = this.W;
- var ah = this.h[0];
- var al = this.h[1];
- var bh = this.h[2];
- var bl = this.h[3];
- var ch = this.h[4];
- var cl = this.h[5];
- var dh = this.h[6];
- var dl = this.h[7];
- var eh = this.h[8];
- var el = this.h[9];
- var fh = this.h[10];
- var fl = this.h[11];
- var gh = this.h[12];
- var gl = this.h[13];
- var hh = this.h[14];
- var hl = this.h[15];
- assert(this.k.length === W.length);
- for (var i = 0; i < W.length; i += 2) {
- var c0_hi = hh;
- var c0_lo = hl;
- var c1_hi = s1_512_hi(eh, el);
- var c1_lo = s1_512_lo(eh, el);
- var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
- var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
- var c3_hi = this.k[i];
- var c3_lo = this.k[i + 1];
- var c4_hi = W[i];
- var c4_lo = W[i + 1];
- var T1_hi = sum64_5_hi(
- c0_hi, c0_lo,
- c1_hi, c1_lo,
- c2_hi, c2_lo,
- c3_hi, c3_lo,
- c4_hi, c4_lo);
- var T1_lo = sum64_5_lo(
- c0_hi, c0_lo,
- c1_hi, c1_lo,
- c2_hi, c2_lo,
- c3_hi, c3_lo,
- c4_hi, c4_lo);
- c0_hi = s0_512_hi(ah, al);
- c0_lo = s0_512_lo(ah, al);
- c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
- c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
- var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
- var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
- hh = gh;
- hl = gl;
- gh = fh;
- gl = fl;
- fh = eh;
- fl = el;
- eh = sum64_hi(dh, dl, T1_hi, T1_lo);
- el = sum64_lo(dl, dl, T1_hi, T1_lo);
- dh = ch;
- dl = cl;
- ch = bh;
- cl = bl;
- bh = ah;
- bl = al;
- ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
- al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
- }
- sum64(this.h, 0, ah, al);
- sum64(this.h, 2, bh, bl);
- sum64(this.h, 4, ch, cl);
- sum64(this.h, 6, dh, dl);
- sum64(this.h, 8, eh, el);
- sum64(this.h, 10, fh, fl);
- sum64(this.h, 12, gh, gl);
- sum64(this.h, 14, hh, hl);
- };
- SHA512.prototype._digest = function digest(enc) {
- if (enc === 'hex')
- return utils.toHex32(this.h, 'big');
- else
- return utils.split32(this.h, 'big');
- };
- function ch64_hi(xh, xl, yh, yl, zh) {
- var r = (xh & yh) ^ ((~xh) & zh);
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function ch64_lo(xh, xl, yh, yl, zh, zl) {
- var r = (xl & yl) ^ ((~xl) & zl);
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function maj64_hi(xh, xl, yh, yl, zh) {
- var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function maj64_lo(xh, xl, yh, yl, zh, zl) {
- var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function s0_512_hi(xh, xl) {
- var c0_hi = rotr64_hi(xh, xl, 28);
- var c1_hi = rotr64_hi(xl, xh, 2); // 34
- var c2_hi = rotr64_hi(xl, xh, 7); // 39
- var r = c0_hi ^ c1_hi ^ c2_hi;
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function s0_512_lo(xh, xl) {
- var c0_lo = rotr64_lo(xh, xl, 28);
- var c1_lo = rotr64_lo(xl, xh, 2); // 34
- var c2_lo = rotr64_lo(xl, xh, 7); // 39
- var r = c0_lo ^ c1_lo ^ c2_lo;
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function s1_512_hi(xh, xl) {
- var c0_hi = rotr64_hi(xh, xl, 14);
- var c1_hi = rotr64_hi(xh, xl, 18);
- var c2_hi = rotr64_hi(xl, xh, 9); // 41
- var r = c0_hi ^ c1_hi ^ c2_hi;
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function s1_512_lo(xh, xl) {
- var c0_lo = rotr64_lo(xh, xl, 14);
- var c1_lo = rotr64_lo(xh, xl, 18);
- var c2_lo = rotr64_lo(xl, xh, 9); // 41
- var r = c0_lo ^ c1_lo ^ c2_lo;
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function g0_512_hi(xh, xl) {
- var c0_hi = rotr64_hi(xh, xl, 1);
- var c1_hi = rotr64_hi(xh, xl, 8);
- var c2_hi = shr64_hi(xh, xl, 7);
- var r = c0_hi ^ c1_hi ^ c2_hi;
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function g0_512_lo(xh, xl) {
- var c0_lo = rotr64_lo(xh, xl, 1);
- var c1_lo = rotr64_lo(xh, xl, 8);
- var c2_lo = shr64_lo(xh, xl, 7);
- var r = c0_lo ^ c1_lo ^ c2_lo;
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function g1_512_hi(xh, xl) {
- var c0_hi = rotr64_hi(xh, xl, 19);
- var c1_hi = rotr64_hi(xl, xh, 29); // 61
- var c2_hi = shr64_hi(xh, xl, 6);
- var r = c0_hi ^ c1_hi ^ c2_hi;
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- function g1_512_lo(xh, xl) {
- var c0_lo = rotr64_lo(xh, xl, 19);
- var c1_lo = rotr64_lo(xl, xh, 29); // 61
- var c2_lo = shr64_lo(xh, xl, 6);
- var r = c0_lo ^ c1_lo ^ c2_lo;
- if (r < 0)
- r += 0x100000000;
- return r;
- }
- },{"../common":229,"../utils":239,"minimalistic-assert":268}],238:[function(require,module,exports){
- 'use strict';
- var utils = require('../utils');
- var rotr32 = utils.rotr32;
- function ft_1(s, x, y, z) {
- if (s === 0)
- return ch32(x, y, z);
- if (s === 1 || s === 3)
- return p32(x, y, z);
- if (s === 2)
- return maj32(x, y, z);
- }
- exports.ft_1 = ft_1;
- function ch32(x, y, z) {
- return (x & y) ^ ((~x) & z);
- }
- exports.ch32 = ch32;
- function maj32(x, y, z) {
- return (x & y) ^ (x & z) ^ (y & z);
- }
- exports.maj32 = maj32;
- function p32(x, y, z) {
- return x ^ y ^ z;
- }
- exports.p32 = p32;
- function s0_256(x) {
- return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
- }
- exports.s0_256 = s0_256;
- function s1_256(x) {
- return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
- }
- exports.s1_256 = s1_256;
- function g0_256(x) {
- return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
- }
- exports.g0_256 = g0_256;
- function g1_256(x) {
- return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
- }
- exports.g1_256 = g1_256;
- },{"../utils":239}],239:[function(require,module,exports){
- 'use strict';
- var assert = require('minimalistic-assert');
- var inherits = require('inherits');
- exports.inherits = inherits;
- function isSurrogatePair(msg, i) {
- if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {
- return false;
- }
- if (i < 0 || i + 1 >= msg.length) {
- return false;
- }
- return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;
- }
- function toArray(msg, enc) {
- if (Array.isArray(msg))
- return msg.slice();
- if (!msg)
- return [];
- var res = [];
- if (typeof msg === 'string') {
- if (!enc) {
- // Inspired by stringToUtf8ByteArray() in closure-library by Google
- // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143
- // Apache License 2.0
- // https://github.com/google/closure-library/blob/master/LICENSE
- var p = 0;
- for (var i = 0; i < msg.length; i++) {
- var c = msg.charCodeAt(i);
- if (c < 128) {
- res[p++] = c;
- } else if (c < 2048) {
- res[p++] = (c >> 6) | 192;
- res[p++] = (c & 63) | 128;
- } else if (isSurrogatePair(msg, i)) {
- c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);
- res[p++] = (c >> 18) | 240;
- res[p++] = ((c >> 12) & 63) | 128;
- res[p++] = ((c >> 6) & 63) | 128;
- res[p++] = (c & 63) | 128;
- } else {
- res[p++] = (c >> 12) | 224;
- res[p++] = ((c >> 6) & 63) | 128;
- res[p++] = (c & 63) | 128;
- }
- }
- } else if (enc === 'hex') {
- msg = msg.replace(/[^a-z0-9]+/ig, '');
- if (msg.length % 2 !== 0)
- msg = '0' + msg;
- for (i = 0; i < msg.length; i += 2)
- res.push(parseInt(msg[i] + msg[i + 1], 16));
- }
- } else {
- for (i = 0; i < msg.length; i++)
- res[i] = msg[i] | 0;
- }
- return res;
- }
- exports.toArray = toArray;
- function toHex(msg) {
- var res = '';
- for (var i = 0; i < msg.length; i++)
- res += zero2(msg[i].toString(16));
- return res;
- }
- exports.toHex = toHex;
- function htonl(w) {
- var res = (w >>> 24) |
- ((w >>> 8) & 0xff00) |
- ((w << 8) & 0xff0000) |
- ((w & 0xff) << 24);
- return res >>> 0;
- }
- exports.htonl = htonl;
- function toHex32(msg, endian) {
- var res = '';
- for (var i = 0; i < msg.length; i++) {
- var w = msg[i];
- if (endian === 'little')
- w = htonl(w);
- res += zero8(w.toString(16));
- }
- return res;
- }
- exports.toHex32 = toHex32;
- function zero2(word) {
- if (word.length === 1)
- return '0' + word;
- else
- return word;
- }
- exports.zero2 = zero2;
- function zero8(word) {
- if (word.length === 7)
- return '0' + word;
- else if (word.length === 6)
- return '00' + word;
- else if (word.length === 5)
- return '000' + word;
- else if (word.length === 4)
- return '0000' + word;
- else if (word.length === 3)
- return '00000' + word;
- else if (word.length === 2)
- return '000000' + word;
- else if (word.length === 1)
- return '0000000' + word;
- else
- return word;
- }
- exports.zero8 = zero8;
- function join32(msg, start, end, endian) {
- var len = end - start;
- assert(len % 4 === 0);
- var res = new Array(len / 4);
- for (var i = 0, k = start; i < res.length; i++, k += 4) {
- var w;
- if (endian === 'big')
- w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
- else
- w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
- res[i] = w >>> 0;
- }
- return res;
- }
- exports.join32 = join32;
- function split32(msg, endian) {
- var res = new Array(msg.length * 4);
- for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
- var m = msg[i];
- if (endian === 'big') {
- res[k] = m >>> 24;
- res[k + 1] = (m >>> 16) & 0xff;
- res[k + 2] = (m >>> 8) & 0xff;
- res[k + 3] = m & 0xff;
- } else {
- res[k + 3] = m >>> 24;
- res[k + 2] = (m >>> 16) & 0xff;
- res[k + 1] = (m >>> 8) & 0xff;
- res[k] = m & 0xff;
- }
- }
- return res;
- }
- exports.split32 = split32;
- function rotr32(w, b) {
- return (w >>> b) | (w << (32 - b));
- }
- exports.rotr32 = rotr32;
- function rotl32(w, b) {
- return (w << b) | (w >>> (32 - b));
- }
- exports.rotl32 = rotl32;
- function sum32(a, b) {
- return (a + b) >>> 0;
- }
- exports.sum32 = sum32;
- function sum32_3(a, b, c) {
- return (a + b + c) >>> 0;
- }
- exports.sum32_3 = sum32_3;
- function sum32_4(a, b, c, d) {
- return (a + b + c + d) >>> 0;
- }
- exports.sum32_4 = sum32_4;
- function sum32_5(a, b, c, d, e) {
- return (a + b + c + d + e) >>> 0;
- }
- exports.sum32_5 = sum32_5;
- function sum64(buf, pos, ah, al) {
- var bh = buf[pos];
- var bl = buf[pos + 1];
- var lo = (al + bl) >>> 0;
- var hi = (lo < al ? 1 : 0) + ah + bh;
- buf[pos] = hi >>> 0;
- buf[pos + 1] = lo;
- }
- exports.sum64 = sum64;
- function sum64_hi(ah, al, bh, bl) {
- var lo = (al + bl) >>> 0;
- var hi = (lo < al ? 1 : 0) + ah + bh;
- return hi >>> 0;
- }
- exports.sum64_hi = sum64_hi;
- function sum64_lo(ah, al, bh, bl) {
- var lo = al + bl;
- return lo >>> 0;
- }
- exports.sum64_lo = sum64_lo;
- function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
- var carry = 0;
- var lo = al;
- lo = (lo + bl) >>> 0;
- carry += lo < al ? 1 : 0;
- lo = (lo + cl) >>> 0;
- carry += lo < cl ? 1 : 0;
- lo = (lo + dl) >>> 0;
- carry += lo < dl ? 1 : 0;
- var hi = ah + bh + ch + dh + carry;
- return hi >>> 0;
- }
- exports.sum64_4_hi = sum64_4_hi;
- function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
- var lo = al + bl + cl + dl;
- return lo >>> 0;
- }
- exports.sum64_4_lo = sum64_4_lo;
- function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
- var carry = 0;
- var lo = al;
- lo = (lo + bl) >>> 0;
- carry += lo < al ? 1 : 0;
- lo = (lo + cl) >>> 0;
- carry += lo < cl ? 1 : 0;
- lo = (lo + dl) >>> 0;
- carry += lo < dl ? 1 : 0;
- lo = (lo + el) >>> 0;
- carry += lo < el ? 1 : 0;
- var hi = ah + bh + ch + dh + eh + carry;
- return hi >>> 0;
- }
- exports.sum64_5_hi = sum64_5_hi;
- function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
- var lo = al + bl + cl + dl + el;
- return lo >>> 0;
- }
- exports.sum64_5_lo = sum64_5_lo;
- function rotr64_hi(ah, al, num) {
- var r = (al << (32 - num)) | (ah >>> num);
- return r >>> 0;
- }
- exports.rotr64_hi = rotr64_hi;
- function rotr64_lo(ah, al, num) {
- var r = (ah << (32 - num)) | (al >>> num);
- return r >>> 0;
- }
- exports.rotr64_lo = rotr64_lo;
- function shr64_hi(ah, al, num) {
- return ah >>> num;
- }
- exports.shr64_hi = shr64_hi;
- function shr64_lo(ah, al, num) {
- var r = (ah << (32 - num)) | (al >>> num);
- return r >>> 0;
- }
- exports.shr64_lo = shr64_lo;
- },{"inherits":262,"minimalistic-assert":268}],240:[function(require,module,exports){
- 'use strict';
- var hash = require('hash.js');
- var utils = require('minimalistic-crypto-utils');
- var assert = require('minimalistic-assert');
- function HmacDRBG(options) {
- if (!(this instanceof HmacDRBG))
- return new HmacDRBG(options);
- this.hash = options.hash;
- this.predResist = !!options.predResist;
- this.outLen = this.hash.outSize;
- this.minEntropy = options.minEntropy || this.hash.hmacStrength;
- this._reseed = null;
- this.reseedInterval = null;
- this.K = null;
- this.V = null;
- var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
- var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
- var pers = utils.toArray(options.pers, options.persEnc || 'hex');
- assert(entropy.length >= (this.minEntropy / 8),
- 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
- this._init(entropy, nonce, pers);
- }
- module.exports = HmacDRBG;
- HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
- var seed = entropy.concat(nonce).concat(pers);
- this.K = new Array(this.outLen / 8);
- this.V = new Array(this.outLen / 8);
- for (var i = 0; i < this.V.length; i++) {
- this.K[i] = 0x00;
- this.V[i] = 0x01;
- }
- this._update(seed);
- this._reseed = 1;
- this.reseedInterval = 0x1000000000000; // 2^48
- };
- HmacDRBG.prototype._hmac = function hmac() {
- return new hash.hmac(this.hash, this.K);
- };
- HmacDRBG.prototype._update = function update(seed) {
- var kmac = this._hmac()
- .update(this.V)
- .update([ 0x00 ]);
- if (seed)
- kmac = kmac.update(seed);
- this.K = kmac.digest();
- this.V = this._hmac().update(this.V).digest();
- if (!seed)
- return;
- this.K = this._hmac()
- .update(this.V)
- .update([ 0x01 ])
- .update(seed)
- .digest();
- this.V = this._hmac().update(this.V).digest();
- };
- HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
- // Optional entropy enc
- if (typeof entropyEnc !== 'string') {
- addEnc = add;
- add = entropyEnc;
- entropyEnc = null;
- }
- entropy = utils.toArray(entropy, entropyEnc);
- add = utils.toArray(add, addEnc);
- assert(entropy.length >= (this.minEntropy / 8),
- 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
- this._update(entropy.concat(add || []));
- this._reseed = 1;
- };
- HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
- if (this._reseed > this.reseedInterval)
- throw new Error('Reseed is required');
- // Optional encoding
- if (typeof enc !== 'string') {
- addEnc = add;
- add = enc;
- enc = null;
- }
- // Optional additional data
- if (add) {
- add = utils.toArray(add, addEnc || 'hex');
- this._update(add);
- }
- var temp = [];
- while (temp.length < len) {
- this.V = this._hmac().update(this.V).digest();
- temp = temp.concat(this.V);
- }
- var res = temp.slice(0, len);
- this._update(add);
- this._reseed++;
- return utils.encode(res, enc);
- };
- },{"hash.js":228,"minimalistic-assert":268,"minimalistic-crypto-utils":269}],241:[function(require,module,exports){
- exports.read = function (buffer, offset, isLE, mLen, nBytes) {
- var e, m
- var eLen = (nBytes * 8) - mLen - 1
- var eMax = (1 << eLen) - 1
- var eBias = eMax >> 1
- var nBits = -7
- var i = isLE ? (nBytes - 1) : 0
- var d = isLE ? -1 : 1
- var s = buffer[offset + i]
- i += d
- e = s & ((1 << (-nBits)) - 1)
- s >>= (-nBits)
- nBits += eLen
- for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
- m = e & ((1 << (-nBits)) - 1)
- e >>= (-nBits)
- nBits += mLen
- for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
- if (e === 0) {
- e = 1 - eBias
- } else if (e === eMax) {
- return m ? NaN : ((s ? -1 : 1) * Infinity)
- } else {
- m = m + Math.pow(2, mLen)
- e = e - eBias
- }
- return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
- }
- exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
- var e, m, c
- var eLen = (nBytes * 8) - mLen - 1
- var eMax = (1 << eLen) - 1
- var eBias = eMax >> 1
- var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
- var i = isLE ? 0 : (nBytes - 1)
- var d = isLE ? 1 : -1
- var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
- value = Math.abs(value)
- if (isNaN(value) || value === Infinity) {
- m = isNaN(value) ? 1 : 0
- e = eMax
- } else {
- e = Math.floor(Math.log(value) / Math.LN2)
- if (value * (c = Math.pow(2, -e)) < 1) {
- e--
- c *= 2
- }
- if (e + eBias >= 1) {
- value += rt / c
- } else {
- value += rt * Math.pow(2, 1 - eBias)
- }
- if (value * c >= 2) {
- e++
- c /= 2
- }
- if (e + eBias >= eMax) {
- m = 0
- e = eMax
- } else if (e + eBias >= 1) {
- m = ((value * c) - 1) * Math.pow(2, mLen)
- e = e + eBias
- } else {
- m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
- e = 0
- }
- }
- for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
- e = (e << mLen) | m
- eLen += mLen
- for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
- buffer[offset + i - d] |= s * 128
- }
- },{}],242:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const types_1 = require("./types");
- const keys = Object.keys(types_1.typeHandlers);
- // This map helps avoid validating for every single image type
- const firstBytes = {
- 0x38: 'psd',
- 0x42: 'bmp',
- 0x44: 'dds',
- 0x47: 'gif',
- 0x49: 'tiff',
- 0x4d: 'tiff',
- 0x52: 'webp',
- 0x69: 'icns',
- 0x89: 'png',
- 0xff: 'jpg'
- };
- function detector(buffer) {
- const byte = buffer[0];
- if (byte in firstBytes) {
- const type = firstBytes[byte];
- if (types_1.typeHandlers[type].validate(buffer)) {
- return type;
- }
- }
- const finder = (key) => types_1.typeHandlers[key].validate(buffer);
- return keys.find(finder);
- }
- exports.detector = detector;
- },{"./types":246}],243:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const fs = require("fs");
- // fs.promises polyfill for node 8.x
- if (!('promises' in fs)) {
- class FileHandle {
- constructor(fd) {
- this.fd = fd;
- }
- stat() {
- return new Promise((resolve, reject) => {
- fs.fstat(this.fd, (err, stats) => {
- if (err) {
- reject(err);
- }
- else {
- resolve(stats);
- }
- });
- });
- }
- read(buffer, offset, length, position) {
- return new Promise((resolve, reject) => {
- fs.read(this.fd, buffer, offset, length, position, (err) => {
- if (err) {
- reject(err);
- }
- else {
- resolve();
- }
- });
- });
- }
- close() {
- return new Promise((resolve, reject) => {
- fs.close(this.fd, (err) => {
- if (err) {
- reject(err);
- }
- else {
- resolve();
- }
- });
- });
- }
- }
- Object.defineProperty(fs, 'promises', {
- value: {
- open: (filepath, flags) => (new Promise((resolve, reject) => {
- fs.open(filepath, flags, (err, fd) => {
- if (err) {
- reject(err);
- }
- else {
- resolve(new FileHandle(fd));
- }
- });
- })),
- },
- writable: false
- });
- }
- },{"fs":177}],244:[function(require,module,exports){
- (function (process,Buffer){
- "use strict";
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- const fs = require("fs");
- const path = require("path");
- const queue_1 = require("queue");
- const types_1 = require("./types");
- const detector_1 = require("./detector");
- require("./fs.promises");
- // Maximum buffer size, with a default of 512 kilobytes.
- // TO-DO: make this adaptive based on the initial signature of the image
- const MaxBufferSize = 512 * 1024;
- // This queue is for async `fs` operations, to avoid reaching file-descriptor limits
- const queue = new queue_1.default({ concurrency: 100, autostart: true });
- /**
- * Return size information based on a buffer
- *
- * @param {Buffer} buffer
- * @param {String} filepath
- * @returns {Object}
- */
- function lookup(buffer, filepath) {
- // detect the file type.. don't rely on the extension
- const type = detector_1.detector(buffer);
- // find an appropriate handler for this file type
- if (type && type in types_1.typeHandlers) {
- const size = types_1.typeHandlers[type].calculate(buffer, filepath);
- if (size !== undefined) {
- size.type = type;
- return size;
- }
- }
- // throw up, if we don't understand the file
- throw new TypeError('unsupported file type: ' + type + ' (file: ' + filepath + ')');
- }
- /**
- * Reads a file into a buffer.
- * @param {String} filepath
- * @returns {Promise<Buffer>}
- */
- function asyncFileToBuffer(filepath) {
- return __awaiter(this, void 0, void 0, function* () {
- const handle = yield fs.promises.open(filepath, 'r');
- const { size } = yield handle.stat();
- if (size <= 0) {
- throw new Error('Empty file');
- }
- const bufferSize = Math.min(size, MaxBufferSize);
- const buffer = Buffer.alloc(bufferSize);
- yield handle.read(buffer, 0, bufferSize, 0);
- yield handle.close();
- return buffer;
- });
- }
- /**
- * Synchronously reads a file into a buffer, blocking the nodejs process.
- *
- * @param {String} filepath
- * @returns {Buffer}
- */
- function syncFileToBuffer(filepath) {
- // read from the file, synchronously
- const descriptor = fs.openSync(filepath, 'r');
- const size = fs.fstatSync(descriptor).size;
- const bufferSize = Math.min(size, MaxBufferSize);
- const buffer = Buffer.alloc(bufferSize);
- fs.readSync(descriptor, buffer, 0, bufferSize, 0);
- fs.closeSync(descriptor);
- return buffer;
- }
- module.exports = exports = imageSize; // backwards compatibility
- /**
- * @param {Buffer|string} input - buffer or relative/absolute path of the image file
- * @param {Function=} [callback] - optional function for async detection
- */
- function imageSize(input, callback) {
- // Handle buffer input
- if (Buffer.isBuffer(input)) {
- return lookup(input);
- }
- // input should be a string at this point
- if (typeof input !== 'string') {
- throw new TypeError('invalid invocation');
- }
- // resolve the file path
- const filepath = path.resolve(input);
- if (typeof callback === 'function') {
- queue.push(() => asyncFileToBuffer(filepath)
- .then((buffer) => process.nextTick(callback, null, lookup(buffer, filepath)))
- .catch(callback));
- }
- else {
- const buffer = syncFileToBuffer(filepath);
- return lookup(buffer, filepath);
- }
- }
- exports.imageSize = imageSize;
- exports.setConcurrency = (c) => { queue.concurrency = c; };
- exports.types = Object.keys(types_1.typeHandlers);
- }).call(this,require('_process'),require("buffer").Buffer)
- },{"./detector":242,"./fs.promises":243,"./types":246,"_process":284,"buffer":182,"fs":177,"path":276,"queue":296}],245:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- // Abstract reading multi-byte unsigned integers
- function readUInt(buffer, bits, offset, isBigEndian) {
- offset = offset || 0;
- const endian = isBigEndian ? 'BE' : 'LE';
- const methodName = ('readUInt' + bits + endian);
- const method = buffer[methodName];
- return method.call(buffer, offset);
- }
- exports.readUInt = readUInt;
- },{}],246:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const bmp_1 = require("./types/bmp");
- const cur_1 = require("./types/cur");
- const dds_1 = require("./types/dds");
- const gif_1 = require("./types/gif");
- const icns_1 = require("./types/icns");
- const ico_1 = require("./types/ico");
- const jpg_1 = require("./types/jpg");
- const ktx_1 = require("./types/ktx");
- const png_1 = require("./types/png");
- const pnm_1 = require("./types/pnm");
- const psd_1 = require("./types/psd");
- const svg_1 = require("./types/svg");
- const tiff_1 = require("./types/tiff");
- const webp_1 = require("./types/webp");
- exports.typeHandlers = {
- bmp: bmp_1.BMP,
- cur: cur_1.CUR,
- dds: dds_1.DDS,
- gif: gif_1.GIF,
- icns: icns_1.ICNS,
- ico: ico_1.ICO,
- jpg: jpg_1.JPG,
- ktx: ktx_1.KTX,
- png: png_1.PNG,
- pnm: pnm_1.PNM,
- psd: psd_1.PSD,
- svg: svg_1.SVG,
- tiff: tiff_1.TIFF,
- webp: webp_1.WEBP,
- };
- },{"./types/bmp":247,"./types/cur":248,"./types/dds":249,"./types/gif":250,"./types/icns":251,"./types/ico":252,"./types/jpg":253,"./types/ktx":254,"./types/png":255,"./types/pnm":256,"./types/psd":257,"./types/svg":258,"./types/tiff":259,"./types/webp":260}],247:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.BMP = {
- validate(buffer) {
- return ('BM' === buffer.toString('ascii', 0, 2));
- },
- calculate(buffer) {
- return {
- height: Math.abs(buffer.readInt32LE(22)),
- width: buffer.readUInt32LE(18)
- };
- }
- };
- },{}],248:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const ico_1 = require("./ico");
- const TYPE_CURSOR = 2;
- exports.CUR = {
- validate(buffer) {
- if (buffer.readUInt16LE(0) !== 0) {
- return false;
- }
- return buffer.readUInt16LE(2) === TYPE_CURSOR;
- },
- calculate(buffer) {
- return ico_1.ICO.calculate(buffer);
- }
- };
- },{"./ico":252}],249:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.DDS = {
- validate(buffer) {
- return buffer.readUInt32LE(0) === 0x20534444;
- },
- calculate(buffer) {
- return {
- height: buffer.readUInt32LE(12),
- width: buffer.readUInt32LE(16)
- };
- }
- };
- },{}],250:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const gifRegexp = /^GIF8[79]a/;
- exports.GIF = {
- validate(buffer) {
- const signature = buffer.toString('ascii', 0, 6);
- return (gifRegexp.test(signature));
- },
- calculate(buffer) {
- return {
- height: buffer.readUInt16LE(8),
- width: buffer.readUInt16LE(6)
- };
- }
- };
- },{}],251:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- /**
- * ICNS Header
- *
- * | Offset | Size | Purpose |
- * | 0 | 4 | Magic literal, must be "icns" (0x69, 0x63, 0x6e, 0x73) |
- * | 4 | 4 | Length of file, in bytes, msb first. |
- *
- */
- const SIZE_HEADER = 4 + 4; // 8
- const FILE_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN
- /**
- * Image Entry
- *
- * | Offset | Size | Purpose |
- * | 0 | 4 | Icon type, see OSType below. |
- * | 4 | 4 | Length of data, in bytes (including type and length), msb first. |
- * | 8 | n | Icon data |
- */
- const ENTRY_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN
- /* tslint:disable:object-literal-sort-keys */
- const ICON_TYPE_SIZE = {
- ICON: 32,
- 'ICN#': 32,
- // m => 16 x 16
- 'icm#': 16,
- icm4: 16,
- icm8: 16,
- // s => 16 x 16
- 'ics#': 16,
- ics4: 16,
- ics8: 16,
- is32: 16,
- s8mk: 16,
- icp4: 16,
- // l => 32 x 32
- icl4: 32,
- icl8: 32,
- il32: 32,
- l8mk: 32,
- icp5: 32,
- ic11: 32,
- // h => 48 x 48
- ich4: 48,
- ich8: 48,
- ih32: 48,
- h8mk: 48,
- // . => 64 x 64
- icp6: 64,
- ic12: 32,
- // t => 128 x 128
- it32: 128,
- t8mk: 128,
- ic07: 128,
- // . => 256 x 256
- ic08: 256,
- ic13: 256,
- // . => 512 x 512
- ic09: 512,
- ic14: 512,
- // . => 1024 x 1024
- ic10: 1024,
- };
- /* tslint:enable:object-literal-sort-keys */
- function readImageHeader(buffer, imageOffset) {
- const imageLengthOffset = imageOffset + ENTRY_LENGTH_OFFSET;
- return [
- buffer.toString('ascii', imageOffset, imageLengthOffset),
- buffer.readUInt32BE(imageLengthOffset)
- ];
- }
- function getImageSize(type) {
- const size = ICON_TYPE_SIZE[type];
- return { width: size, height: size, type };
- }
- exports.ICNS = {
- validate(buffer) {
- return ('icns' === buffer.toString('ascii', 0, 4));
- },
- calculate(buffer) {
- const bufferLength = buffer.length;
- const fileLength = buffer.readUInt32BE(FILE_LENGTH_OFFSET);
- let imageOffset = SIZE_HEADER;
- let imageHeader = readImageHeader(buffer, imageOffset);
- let imageSize = getImageSize(imageHeader[0]);
- imageOffset += imageHeader[1];
- if (imageOffset === fileLength) {
- return imageSize;
- }
- const result = {
- height: imageSize.height,
- images: [imageSize],
- width: imageSize.width
- };
- while (imageOffset < fileLength && imageOffset < bufferLength) {
- imageHeader = readImageHeader(buffer, imageOffset);
- imageSize = getImageSize(imageHeader[0]);
- imageOffset += imageHeader[1];
- result.images.push(imageSize);
- }
- return result;
- }
- };
- },{}],252:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const TYPE_ICON = 1;
- /**
- * ICON Header
- *
- * | Offset | Size | Purpose |
- * | 0 | 2 | Reserved. Must always be 0. |
- * | 2 | 2 | Image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image. Other values are invalid. |
- * | 4 | 2 | Number of images in the file. |
- *
- */
- const SIZE_HEADER = 2 + 2 + 2; // 6
- /**
- * Image Entry
- *
- * | Offset | Size | Purpose |
- * | 0 | 1 | Image width in pixels. Can be any number between 0 and 255. Value 0 means width is 256 pixels. |
- * | 1 | 1 | Image height in pixels. Can be any number between 0 and 255. Value 0 means height is 256 pixels. |
- * | 2 | 1 | Number of colors in the color palette. Should be 0 if the image does not use a color palette. |
- * | 3 | 1 | Reserved. Should be 0. |
- * | 4 | 2 | ICO format: Color planes. Should be 0 or 1. |
- * | | | CUR format: The horizontal coordinates of the hotspot in number of pixels from the left. |
- * | 6 | 2 | ICO format: Bits per pixel. |
- * | | | CUR format: The vertical coordinates of the hotspot in number of pixels from the top. |
- * | 8 | 4 | The size of the image's data in bytes |
- * | 12 | 4 | The offset of BMP or PNG data from the beginning of the ICO/CUR file |
- *
- */
- const SIZE_IMAGE_ENTRY = 1 + 1 + 1 + 1 + 2 + 2 + 4 + 4; // 16
- function getSizeFromOffset(buffer, offset) {
- const value = buffer.readUInt8(offset);
- return value === 0 ? 256 : value;
- }
- function getImageSize(buffer, imageIndex) {
- const offset = SIZE_HEADER + (imageIndex * SIZE_IMAGE_ENTRY);
- return {
- height: getSizeFromOffset(buffer, offset + 1),
- width: getSizeFromOffset(buffer, offset)
- };
- }
- exports.ICO = {
- validate(buffer) {
- if (buffer.readUInt16LE(0) !== 0) {
- return false;
- }
- return buffer.readUInt16LE(2) === TYPE_ICON;
- },
- calculate(buffer) {
- const nbImages = buffer.readUInt16LE(4);
- const imageSize = getImageSize(buffer, 0);
- if (nbImages === 1) {
- return imageSize;
- }
- const result = {
- height: imageSize.height,
- images: [imageSize],
- width: imageSize.width
- };
- for (let imageIndex = 1; imageIndex < nbImages; imageIndex += 1) {
- result.images.push(getImageSize(buffer, imageIndex));
- }
- return result;
- }
- };
- },{}],253:[function(require,module,exports){
- "use strict";
- // NOTE: we only support baseline and progressive JPGs here
- // due to the structure of the loader class, we only get a buffer
- // with a maximum size of 4096 bytes. so if the SOF marker is outside
- // if this range we can't detect the file size correctly.
- Object.defineProperty(exports, "__esModule", { value: true });
- const readUInt_1 = require("../readUInt");
- const EXIF_MARKER = '45786966';
- const APP1_DATA_SIZE_BYTES = 2;
- const EXIF_HEADER_BYTES = 6;
- const TIFF_BYTE_ALIGN_BYTES = 2;
- const BIG_ENDIAN_BYTE_ALIGN = '4d4d';
- const LITTLE_ENDIAN_BYTE_ALIGN = '4949';
- // Each entry is exactly 12 bytes
- const IDF_ENTRY_BYTES = 12;
- const NUM_DIRECTORY_ENTRIES_BYTES = 2;
- function isEXIF(buffer) {
- return (buffer.toString('hex', 2, 6) === EXIF_MARKER);
- }
- function extractSize(buffer, index) {
- return {
- height: buffer.readUInt16BE(index),
- width: buffer.readUInt16BE(index + 2)
- };
- }
- function validateExifBlock(buffer, index) {
- // Skip APP1 Data Size
- const exifBlock = buffer.slice(APP1_DATA_SIZE_BYTES, index);
- // Consider byte alignment
- const byteAlign = exifBlock.toString('hex', EXIF_HEADER_BYTES, EXIF_HEADER_BYTES + TIFF_BYTE_ALIGN_BYTES);
- // Ignore Empty EXIF. Validate byte alignment
- const isBigEndian = byteAlign === BIG_ENDIAN_BYTE_ALIGN;
- const isLittleEndian = byteAlign === LITTLE_ENDIAN_BYTE_ALIGN;
- if (isBigEndian || isLittleEndian) {
- return extractOrientation(exifBlock, isBigEndian);
- }
- }
- function extractOrientation(exifBlock, isBigEndian) {
- // TODO: assert that this contains 0x002A
- // let STATIC_MOTOROLA_TIFF_HEADER_BYTES = 2
- // let TIFF_IMAGE_FILE_DIRECTORY_BYTES = 4
- // TODO: derive from TIFF_IMAGE_FILE_DIRECTORY_BYTES
- const idfOffset = 8;
- // IDF osset works from right after the header bytes
- // (so the offset includes the tiff byte align)
- const offset = EXIF_HEADER_BYTES + idfOffset;
- const idfDirectoryEntries = readUInt_1.readUInt(exifBlock, 16, offset, isBigEndian);
- for (let directoryEntryNumber = 0; directoryEntryNumber < idfDirectoryEntries; directoryEntryNumber++) {
- const start = offset + NUM_DIRECTORY_ENTRIES_BYTES + (directoryEntryNumber * IDF_ENTRY_BYTES);
- const end = start + IDF_ENTRY_BYTES;
- // Skip on corrupt EXIF blocks
- if (start > exifBlock.length) {
- return;
- }
- const block = exifBlock.slice(start, end);
- const tagNumber = readUInt_1.readUInt(block, 16, 0, isBigEndian);
- // 0x0112 (decimal: 274) is the `orientation` tag ID
- if (tagNumber === 274) {
- const dataFormat = readUInt_1.readUInt(block, 16, 2, isBigEndian);
- if (dataFormat !== 3) {
- return;
- }
- // unsinged int has 2 bytes per component
- // if there would more than 4 bytes in total it's a pointer
- const numberOfComponents = readUInt_1.readUInt(block, 32, 4, isBigEndian);
- if (numberOfComponents !== 1) {
- return;
- }
- return readUInt_1.readUInt(block, 16, 8, isBigEndian);
- }
- }
- }
- function validateBuffer(buffer, index) {
- // index should be within buffer limits
- if (index > buffer.length) {
- throw new TypeError('Corrupt JPG, exceeded buffer limits');
- }
- // Every JPEG block must begin with a 0xFF
- if (buffer[index] !== 0xFF) {
- throw new TypeError('Invalid JPG, marker table corrupted');
- }
- }
- exports.JPG = {
- validate(buffer) {
- const SOIMarker = buffer.toString('hex', 0, 2);
- return ('ffd8' === SOIMarker);
- },
- calculate(buffer) {
- // Skip 4 chars, they are for signature
- buffer = buffer.slice(4);
- let orientation;
- let next;
- while (buffer.length) {
- // read length of the next block
- const i = buffer.readUInt16BE(0);
- if (isEXIF(buffer)) {
- orientation = validateExifBlock(buffer, i);
- }
- // ensure correct format
- validateBuffer(buffer, i);
- // 0xFFC0 is baseline standard(SOF)
- // 0xFFC1 is baseline optimized(SOF)
- // 0xFFC2 is progressive(SOF2)
- next = buffer[i + 1];
- if (next === 0xC0 || next === 0xC1 || next === 0xC2) {
- const size = extractSize(buffer, i + 5);
- // TODO: is orientation=0 a valid answer here?
- if (!orientation) {
- return size;
- }
- return {
- height: size.height,
- orientation,
- width: size.width
- };
- }
- // move to the next block
- buffer = buffer.slice(i + 2);
- }
- throw new TypeError('Invalid JPG, no size found');
- }
- };
- },{"../readUInt":245}],254:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const SIGNATURE = 'KTX 11';
- exports.KTX = {
- validate(buffer) {
- return SIGNATURE === buffer.toString('ascii', 1, 7);
- },
- calculate(buffer) {
- return {
- height: buffer.readUInt32LE(40),
- width: buffer.readUInt32LE(36),
- };
- }
- };
- },{}],255:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const pngSignature = 'PNG\r\n\x1a\n';
- const pngImageHeaderChunkName = 'IHDR';
- // Used to detect "fried" png's: http://www.jongware.com/pngdefry.html
- const pngFriedChunkName = 'CgBI';
- exports.PNG = {
- validate(buffer) {
- if (pngSignature === buffer.toString('ascii', 1, 8)) {
- let chunkName = buffer.toString('ascii', 12, 16);
- if (chunkName === pngFriedChunkName) {
- chunkName = buffer.toString('ascii', 28, 32);
- }
- if (chunkName !== pngImageHeaderChunkName) {
- throw new TypeError('Invalid PNG');
- }
- return true;
- }
- return false;
- },
- calculate(buffer) {
- if (buffer.toString('ascii', 12, 16) === pngFriedChunkName) {
- return {
- height: buffer.readUInt32BE(36),
- width: buffer.readUInt32BE(32)
- };
- }
- return {
- height: buffer.readUInt32BE(20),
- width: buffer.readUInt32BE(16)
- };
- }
- };
- },{}],256:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const PNMTypes = {
- P1: 'pbm/ascii',
- P2: 'pgm/ascii',
- P3: 'ppm/ascii',
- P4: 'pbm',
- P5: 'pgm',
- P6: 'ppm',
- P7: 'pam',
- PF: 'pfm'
- };
- const Signatures = Object.keys(PNMTypes);
- const handlers = {
- default: (lines) => {
- let dimensions = [];
- while (lines.length > 0) {
- const line = lines.shift();
- if (line[0] === '#') {
- continue;
- }
- dimensions = line.split(' ');
- break;
- }
- if (dimensions.length === 2) {
- return {
- height: parseInt(dimensions[1], 10),
- width: parseInt(dimensions[0], 10),
- };
- }
- else {
- throw new TypeError('Invalid PNM');
- }
- },
- pam: (lines) => {
- const size = {};
- while (lines.length > 0) {
- const line = lines.shift();
- if (line.length > 16 || line.charCodeAt(0) > 128) {
- continue;
- }
- const [key, value] = line.split(' ');
- if (key && value) {
- size[key.toLowerCase()] = parseInt(value, 10);
- }
- if (size.height && size.width) {
- break;
- }
- }
- if (size.height && size.width) {
- return {
- height: size.height,
- width: size.width
- };
- }
- else {
- throw new TypeError('Invalid PAM');
- }
- }
- };
- exports.PNM = {
- validate(buffer) {
- const signature = buffer.toString('ascii', 0, 2);
- return Signatures.includes(signature);
- },
- calculate(buffer) {
- const signature = buffer.toString('ascii', 0, 2);
- const type = PNMTypes[signature];
- // TODO: this probably generates garbage. move to a stream based parser
- const lines = buffer.toString('ascii', 3).split(/[\r\n]+/);
- const handler = handlers[type] || handlers.default;
- return handler(lines);
- }
- };
- },{}],257:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.PSD = {
- validate(buffer) {
- return ('8BPS' === buffer.toString('ascii', 0, 4));
- },
- calculate(buffer) {
- return {
- height: buffer.readUInt32BE(14),
- width: buffer.readUInt32BE(18)
- };
- }
- };
- },{}],258:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const svgReg = /<svg\s([^>"']|"[^"]*"|'[^']*')*>/;
- const extractorRegExps = {
- height: /\sheight=(['"])([^%]+?)\1/,
- root: svgReg,
- viewbox: /\sviewBox=(['"])(.+?)\1/,
- width: /\swidth=(['"])([^%]+?)\1/,
- };
- const INCH_CM = 2.54;
- const units = {
- cm: 96 / INCH_CM,
- em: 16,
- ex: 8,
- m: 96 / INCH_CM * 100,
- mm: 96 / INCH_CM / 10,
- pc: 96 / 72 / 12,
- pt: 96 / 72,
- };
- function parseLength(len) {
- const m = /([0-9.]+)([a-z]*)/.exec(len);
- if (!m) {
- return undefined;
- }
- return Math.round(parseFloat(m[1]) * (units[m[2]] || 1));
- }
- function parseViewbox(viewbox) {
- const bounds = viewbox.split(' ');
- return {
- height: parseLength(bounds[3]),
- width: parseLength(bounds[2])
- };
- }
- function parseAttributes(root) {
- const width = root.match(extractorRegExps.width);
- const height = root.match(extractorRegExps.height);
- const viewbox = root.match(extractorRegExps.viewbox);
- return {
- height: height && parseLength(height[2]),
- viewbox: viewbox && parseViewbox(viewbox[2]),
- width: width && parseLength(width[2]),
- };
- }
- function calculateByDimensions(attrs) {
- return {
- height: attrs.height,
- width: attrs.width,
- };
- }
- function calculateByViewbox(attrs) {
- const viewbox = attrs && attrs.viewbox;
- if (!viewbox) {
- return;
- }
- const ratio = viewbox.width / viewbox.height;
- if (attrs.width) {
- return {
- height: Math.floor(attrs.width / ratio),
- width: attrs.width,
- };
- }
- if (attrs.height) {
- return {
- height: attrs.height,
- width: Math.floor(attrs.height * ratio),
- };
- }
- return {
- height: viewbox.height,
- width: viewbox.width,
- };
- }
- exports.SVG = {
- validate(buffer) {
- const str = String(buffer);
- return svgReg.test(str);
- },
- calculate(buffer) {
- const root = buffer.toString('utf8').match(extractorRegExps.root);
- if (root) {
- const attrs = parseAttributes(root[0]);
- if (attrs.width && attrs.height) {
- return calculateByDimensions(attrs);
- }
- if (attrs.viewbox) {
- return calculateByViewbox(attrs);
- }
- }
- throw new TypeError('Invalid SVG');
- }
- };
- },{}],259:[function(require,module,exports){
- (function (Buffer){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- // based on http://www.compix.com/fileformattif.htm
- // TO-DO: support big-endian as well
- const fs = require("fs");
- const readUInt_1 = require("../readUInt");
- // Read IFD (image-file-directory) into a buffer
- function readIFD(buffer, filepath, isBigEndian) {
- const ifdOffset = readUInt_1.readUInt(buffer, 32, 4, isBigEndian);
- // read only till the end of the file
- let bufferSize = 1024;
- const fileSize = fs.statSync(filepath).size;
- if (ifdOffset + bufferSize > fileSize) {
- bufferSize = fileSize - ifdOffset - 10;
- }
- // populate the buffer
- const endBuffer = Buffer.alloc(bufferSize);
- const descriptor = fs.openSync(filepath, 'r');
- fs.readSync(descriptor, endBuffer, 0, bufferSize, ifdOffset);
- return endBuffer.slice(2);
- }
- // TIFF values seem to be messed up on Big-Endian, this helps
- function readValue(buffer, isBigEndian) {
- const low = readUInt_1.readUInt(buffer, 16, 8, isBigEndian);
- const high = readUInt_1.readUInt(buffer, 16, 10, isBigEndian);
- return (high << 16) + low;
- }
- // move to the next tag
- function nextTag(buffer) {
- if (buffer.length > 24) {
- return buffer.slice(12);
- }
- }
- // Extract IFD tags from TIFF metadata
- function extractTags(buffer, isBigEndian) {
- const tags = {};
- let temp = buffer;
- while (temp && temp.length) {
- const code = readUInt_1.readUInt(temp, 16, 0, isBigEndian);
- const type = readUInt_1.readUInt(temp, 16, 2, isBigEndian);
- const length = readUInt_1.readUInt(temp, 32, 4, isBigEndian);
- // 0 means end of IFD
- if (code === 0) {
- break;
- }
- else {
- // 256 is width, 257 is height
- // if (code === 256 || code === 257) {
- if (length === 1 && (type === 3 || type === 4)) {
- tags[code] = readValue(temp, isBigEndian);
- }
- // move to the next tag
- temp = nextTag(temp);
- }
- }
- return tags;
- }
- // Test if the TIFF is Big Endian or Little Endian
- function determineEndianness(buffer) {
- const signature = buffer.toString('ascii', 0, 2);
- if ('II' === signature) {
- return 'LE';
- }
- else if ('MM' === signature) {
- return 'BE';
- }
- }
- const signatures = [
- // '492049', // currently not supported
- '49492a00',
- '4d4d002a',
- ];
- exports.TIFF = {
- validate(buffer) {
- return signatures.includes(buffer.toString('hex', 0, 4));
- },
- calculate(buffer, filepath) {
- if (!filepath) {
- throw new TypeError('Tiff doesn\'t support buffer');
- }
- // Determine BE/LE
- const isBigEndian = determineEndianness(buffer) === 'BE';
- // read the IFD
- const ifdBuffer = readIFD(buffer, filepath, isBigEndian);
- // extract the tags from the IFD
- const tags = extractTags(ifdBuffer, isBigEndian);
- const width = tags[256];
- const height = tags[257];
- if (!width || !height) {
- throw new TypeError('Invalid Tiff. Missing tags');
- }
- return { height, width };
- }
- };
- }).call(this,require("buffer").Buffer)
- },{"../readUInt":245,"buffer":182,"fs":177}],260:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- function calculateExtended(buffer) {
- return {
- height: 1 + buffer.readUIntLE(7, 3),
- width: 1 + buffer.readUIntLE(4, 3)
- };
- }
- function calculateLossless(buffer) {
- return {
- height: 1 + (((buffer[4] & 0xF) << 10) | (buffer[3] << 2) | ((buffer[2] & 0xC0) >> 6)),
- width: 1 + (((buffer[2] & 0x3F) << 8) | buffer[1])
- };
- }
- function calculateLossy(buffer) {
- // `& 0x3fff` returns the last 14 bits
- // TO-DO: include webp scaling in the calculations
- return {
- height: buffer.readInt16LE(8) & 0x3fff,
- width: buffer.readInt16LE(6) & 0x3fff
- };
- }
- exports.WEBP = {
- validate(buffer) {
- const riffHeader = 'RIFF' === buffer.toString('ascii', 0, 4);
- const webpHeader = 'WEBP' === buffer.toString('ascii', 8, 12);
- const vp8Header = 'VP8' === buffer.toString('ascii', 12, 15);
- return (riffHeader && webpHeader && vp8Header);
- },
- calculate(buffer) {
- const chunkHeader = buffer.toString('ascii', 12, 16);
- buffer = buffer.slice(20, 30);
- // Extended webp stream signature
- if (chunkHeader === 'VP8X') {
- const extendedHeader = buffer[0];
- const validStart = (extendedHeader & 0xc0) === 0;
- const validEnd = (extendedHeader & 0x01) === 0;
- if (validStart && validEnd) {
- return calculateExtended(buffer);
- }
- else {
- // TODO: breaking change
- throw new TypeError('Invalid WebP');
- }
- }
- // Lossless webp stream signature
- if (chunkHeader === 'VP8 ' && buffer[0] !== 0x2f) {
- return calculateLossy(buffer);
- }
- // Lossy webp stream signature
- const signature = buffer.toString('hex', 3, 6);
- if (chunkHeader === 'VP8L' && signature !== '9d012a') {
- return calculateLossless(buffer);
- }
- throw new TypeError('Invalid WebP');
- }
- };
- },{}],261:[function(require,module,exports){
- var indexOf = [].indexOf;
- module.exports = function(arr, obj){
- if (indexOf) return arr.indexOf(obj);
- for (var i = 0; i < arr.length; ++i) {
- if (arr[i] === obj) return i;
- }
- return -1;
- };
- },{}],262:[function(require,module,exports){
- if (typeof Object.create === 'function') {
- // implementation from standard node.js 'util' module
- module.exports = function inherits(ctor, superCtor) {
- if (superCtor) {
- ctor.super_ = superCtor
- ctor.prototype = Object.create(superCtor.prototype, {
- constructor: {
- value: ctor,
- enumerable: false,
- writable: true,
- configurable: true
- }
- })
- }
- };
- } else {
- // old school shim for old browsers
- module.exports = function inherits(ctor, superCtor) {
- if (superCtor) {
- ctor.super_ = superCtor
- var TempCtor = function () {}
- TempCtor.prototype = superCtor.prototype
- ctor.prototype = new TempCtor()
- ctor.prototype.constructor = ctor
- }
- }
- }
- },{}],263:[function(require,module,exports){
- /*!
- * Determine if an object is a Buffer
- *
- * @author Feross Aboukhadijeh <https://feross.org>
- * @license MIT
- */
- // The _isBuffer check is for Safari 5-7 support, because it's missing
- // Object.prototype.constructor. Remove this eventually
- module.exports = function (obj) {
- return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
- }
- function isBuffer (obj) {
- return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
- }
- // For Node v0.10 support. Remove this eventually.
- function isSlowBuffer (obj) {
- return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
- }
- },{}],264:[function(require,module,exports){
- var toString = {}.toString;
- module.exports = Array.isArray || function (arr) {
- return toString.call(arr) == '[object Array]';
- };
- },{}],265:[function(require,module,exports){
- /**
- * martinez v0.4.3
- * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor
- *
- * @author Alex Milevski <info@w8r.name>
- * @license MIT
- * @preserve
- */
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (factory((global.martinez = {})));
- }(this, (function (exports) { 'use strict';
- function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }
- var SplayTree = function SplayTree(compare, noDuplicates) {
- if ( compare === void 0 ) compare = DEFAULT_COMPARE;
- if ( noDuplicates === void 0 ) noDuplicates = false;
- this._compare = compare;
- this._root = null;
- this._size = 0;
- this._noDuplicates = !!noDuplicates;
- };
- var prototypeAccessors = { size: { configurable: true } };
- SplayTree.prototype.rotateLeft = function rotateLeft (x) {
- var y = x.right;
- if (y) {
- x.right = y.left;
- if (y.left) { y.left.parent = x; }
- y.parent = x.parent;
- }
- if (!x.parent) { this._root = y; }
- else if (x === x.parent.left) { x.parent.left = y; }
- else { x.parent.right = y; }
- if (y) { y.left = x; }
- x.parent = y;
- };
- SplayTree.prototype.rotateRight = function rotateRight (x) {
- var y = x.left;
- if (y) {
- x.left = y.right;
- if (y.right) { y.right.parent = x; }
- y.parent = x.parent;
- }
- if (!x.parent) { this._root = y; }
- else if(x === x.parent.left) { x.parent.left = y; }
- else { x.parent.right = y; }
- if (y) { y.right = x; }
- x.parent = y;
- };
- SplayTree.prototype._splay = function _splay (x) {
- var this$1 = this;
- while (x.parent) {
- var p = x.parent;
- if (!p.parent) {
- if (p.left === x) { this$1.rotateRight(p); }
- else { this$1.rotateLeft(p); }
- } else if (p.left === x && p.parent.left === p) {
- this$1.rotateRight(p.parent);
- this$1.rotateRight(p);
- } else if (p.right === x && p.parent.right === p) {
- this$1.rotateLeft(p.parent);
- this$1.rotateLeft(p);
- } else if (p.left === x && p.parent.right === p) {
- this$1.rotateRight(p);
- this$1.rotateLeft(p);
- } else {
- this$1.rotateLeft(p);
- this$1.rotateRight(p);
- }
- }
- };
- SplayTree.prototype.splay = function splay (x) {
- var this$1 = this;
- var p, gp, ggp, l, r;
- while (x.parent) {
- p = x.parent;
- gp = p.parent;
- if (gp && gp.parent) {
- ggp = gp.parent;
- if (ggp.left === gp) { ggp.left= x; }
- else { ggp.right = x; }
- x.parent = ggp;
- } else {
- x.parent = null;
- this$1._root = x;
- }
- l = x.left; r = x.right;
- if (x === p.left) { // left
- if (gp) {
- if (gp.left === p) {
- /* zig-zig */
- if (p.right) {
- gp.left = p.right;
- gp.left.parent = gp;
- } else { gp.left = null; }
- p.right = gp;
- gp.parent = p;
- } else {
- /* zig-zag */
- if (l) {
- gp.right = l;
- l.parent = gp;
- } else { gp.right = null; }
- x.left = gp;
- gp.parent = x;
- }
- }
- if (r) {
- p.left = r;
- r.parent = p;
- } else { p.left = null; }
- x.right= p;
- p.parent = x;
- } else { // right
- if (gp) {
- if (gp.right === p) {
- /* zig-zig */
- if (p.left) {
- gp.right = p.left;
- gp.right.parent = gp;
- } else { gp.right = null; }
- p.left = gp;
- gp.parent = p;
- } else {
- /* zig-zag */
- if (r) {
- gp.left = r;
- r.parent = gp;
- } else { gp.left = null; }
- x.right = gp;
- gp.parent = x;
- }
- }
- if (l) {
- p.right = l;
- l.parent = p;
- } else { p.right = null; }
- x.left = p;
- p.parent = x;
- }
- }
- };
- SplayTree.prototype.replace = function replace (u, v) {
- if (!u.parent) { this._root = v; }
- else if (u === u.parent.left) { u.parent.left = v; }
- else { u.parent.right = v; }
- if (v) { v.parent = u.parent; }
- };
- SplayTree.prototype.minNode = function minNode (u) {
- if ( u === void 0 ) u = this._root;
- if (u) { while (u.left) { u = u.left; } }
- return u;
- };
- SplayTree.prototype.maxNode = function maxNode (u) {
- if ( u === void 0 ) u = this._root;
- if (u) { while (u.right) { u = u.right; } }
- return u;
- };
- SplayTree.prototype.insert = function insert (key, data) {
- var z = this._root;
- var p = null;
- var comp = this._compare;
- var cmp;
- if (this._noDuplicates) {
- while (z) {
- p = z;
- cmp = comp(z.key, key);
- if (cmp === 0) { return; }
- else if (comp(z.key, key) < 0) { z = z.right; }
- else { z = z.left; }
- }
- } else {
- while (z) {
- p = z;
- if (comp(z.key, key) < 0) { z = z.right; }
- else { z = z.left; }
- }
- }
- z = { key: key, data: data, left: null, right: null, parent: p };
- if (!p) { this._root = z; }
- else if (comp(p.key, z.key) < 0) { p.right = z; }
- else { p.left= z; }
- this.splay(z);
- this._size++;
- return z;
- };
- SplayTree.prototype.find = function find (key) {
- var z = this._root;
- var comp = this._compare;
- while (z) {
- var cmp = comp(z.key, key);
- if (cmp < 0) { z = z.right; }
- else if (cmp > 0) { z = z.left; }
- else { return z; }
- }
- return null;
- };
- /**
- * Whether the tree contains a node with the given key
- * @param{Key} key
- * @return {boolean} true/false
- */
- SplayTree.prototype.contains = function contains (key) {
- var node = this._root;
- var comparator = this._compare;
- while (node){
- var cmp = comparator(key, node.key);
- if (cmp === 0) { return true; }
- else if (cmp < 0) { node = node.left; }
- else { node = node.right; }
- }
- return false;
- };
- SplayTree.prototype.remove = function remove (key) {
- var z = this.find(key);
- if (!z) { return false; }
- this.splay(z);
- if (!z.left) { this.replace(z, z.right); }
- else if (!z.right) { this.replace(z, z.left); }
- else {
- var y = this.minNode(z.right);
- if (y.parent !== z) {
- this.replace(y, y.right);
- y.right = z.right;
- y.right.parent = y;
- }
- this.replace(z, y);
- y.left = z.left;
- y.left.parent = y;
- }
- this._size--;
- return true;
- };
- SplayTree.prototype.removeNode = function removeNode (z) {
- if (!z) { return false; }
- this.splay(z);
- if (!z.left) { this.replace(z, z.right); }
- else if (!z.right) { this.replace(z, z.left); }
- else {
- var y = this.minNode(z.right);
- if (y.parent !== z) {
- this.replace(y, y.right);
- y.right = z.right;
- y.right.parent = y;
- }
- this.replace(z, y);
- y.left = z.left;
- y.left.parent = y;
- }
- this._size--;
- return true;
- };
- SplayTree.prototype.erase = function erase (key) {
- var z = this.find(key);
- if (!z) { return; }
- this.splay(z);
- var s = z.left;
- var t = z.right;
- var sMax = null;
- if (s) {
- s.parent = null;
- sMax = this.maxNode(s);
- this.splay(sMax);
- this._root = sMax;
- }
- if (t) {
- if (s) { sMax.right = t; }
- else { this._root = t; }
- t.parent = sMax;
- }
- this._size--;
- };
- /**
- * Removes and returns the node with smallest key
- * @return {?Node}
- */
- SplayTree.prototype.pop = function pop () {
- var node = this._root, returnValue = null;
- if (node) {
- while (node.left) { node = node.left; }
- returnValue = { key: node.key, data: node.data };
- this.remove(node.key);
- }
- return returnValue;
- };
- /* eslint-disable class-methods-use-this */
- /**
- * Successor node
- * @param{Node} node
- * @return {?Node}
- */
- SplayTree.prototype.next = function next (node) {
- var successor = node;
- if (successor) {
- if (successor.right) {
- successor = successor.right;
- while (successor && successor.left) { successor = successor.left; }
- } else {
- successor = node.parent;
- while (successor && successor.right === node) {
- node = successor; successor = successor.parent;
- }
- }
- }
- return successor;
- };
- /**
- * Predecessor node
- * @param{Node} node
- * @return {?Node}
- */
- SplayTree.prototype.prev = function prev (node) {
- var predecessor = node;
- if (predecessor) {
- if (predecessor.left) {
- predecessor = predecessor.left;
- while (predecessor && predecessor.right) { predecessor = predecessor.right; }
- } else {
- predecessor = node.parent;
- while (predecessor && predecessor.left === node) {
- node = predecessor;
- predecessor = predecessor.parent;
- }
- }
- }
- return predecessor;
- };
- /* eslint-enable class-methods-use-this */
- /**
- * @param{forEachCallback} callback
- * @return {SplayTree}
- */
- SplayTree.prototype.forEach = function forEach (callback) {
- var current = this._root;
- var s = [], done = false, i = 0;
- while (!done) {
- // Reach the left most Node of the current Node
- if (current) {
- // Place pointer to a tree node on the stack
- // before traversing the node's left subtree
- s.push(current);
- current = current.left;
- } else {
- // BackTrack from the empty subtree and visit the Node
- // at the top of the stack; however, if the stack is
- // empty you are done
- if (s.length > 0) {
- current = s.pop();
- callback(current, i++);
- // We have visited the node and its left
- // subtree. Now, it's right subtree's turn
- current = current.right;
- } else { done = true; }
- }
- }
- return this;
- };
- /**
- * Walk key range from `low` to `high`. Stops if `fn` returns a value.
- * @param{Key} low
- * @param{Key} high
- * @param{Function} fn
- * @param{*?} ctx
- * @return {SplayTree}
- */
- SplayTree.prototype.range = function range (low, high, fn, ctx) {
- var this$1 = this;
- var Q = [];
- var compare = this._compare;
- var node = this._root, cmp;
- while (Q.length !== 0 || node) {
- if (node) {
- Q.push(node);
- node = node.left;
- } else {
- node = Q.pop();
- cmp = compare(node.key, high);
- if (cmp > 0) {
- break;
- } else if (compare(node.key, low) >= 0) {
- if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned
- }
- node = node.right;
- }
- }
- return this;
- };
- /**
- * Returns all keys in order
- * @return {Array<Key>}
- */
- SplayTree.prototype.keys = function keys () {
- var current = this._root;
- var s = [], r = [], done = false;
- while (!done) {
- if (current) {
- s.push(current);
- current = current.left;
- } else {
- if (s.length > 0) {
- current = s.pop();
- r.push(current.key);
- current = current.right;
- } else { done = true; }
- }
- }
- return r;
- };
- /**
- * Returns `data` fields of all nodes in order.
- * @return {Array<Value>}
- */
- SplayTree.prototype.values = function values () {
- var current = this._root;
- var s = [], r = [], done = false;
- while (!done) {
- if (current) {
- s.push(current);
- current = current.left;
- } else {
- if (s.length > 0) {
- current = s.pop();
- r.push(current.data);
- current = current.right;
- } else { done = true; }
- }
- }
- return r;
- };
- /**
- * Returns node at given index
- * @param{number} index
- * @return {?Node}
- */
- SplayTree.prototype.at = function at (index) {
- // removed after a consideration, more misleading than useful
- // index = index % this.size;
- // if (index < 0) index = this.size - index;
- var current = this._root;
- var s = [], done = false, i = 0;
- while (!done) {
- if (current) {
- s.push(current);
- current = current.left;
- } else {
- if (s.length > 0) {
- current = s.pop();
- if (i === index) { return current; }
- i++;
- current = current.right;
- } else { done = true; }
- }
- }
- return null;
- };
- /**
- * Bulk-load items. Both array have to be same size
- * @param{Array<Key>} keys
- * @param{Array<Value>}[values]
- * @param{Boolean} [presort=false] Pre-sort keys and values, using
- * tree's comparator. Sorting is done
- * in-place
- * @return {AVLTree}
- */
- SplayTree.prototype.load = function load (keys, values, presort) {
- if ( keys === void 0 ) keys = [];
- if ( values === void 0 ) values = [];
- if ( presort === void 0 ) presort = false;
- if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }
- var size = keys.length;
- if (presort) { sort(keys, values, 0, size - 1, this._compare); }
- this._root = loadRecursive(null, keys, values, 0, size);
- this._size = size;
- return this;
- };
- SplayTree.prototype.min = function min () {
- var node = this.minNode(this._root);
- if (node) { return node.key; }
- else { return null; }
- };
- SplayTree.prototype.max = function max () {
- var node = this.maxNode(this._root);
- if (node) { return node.key; }
- else { return null; }
- };
- SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };
- prototypeAccessors.size.get = function () { return this._size; };
- /**
- * Create a tree and load it with items
- * @param{Array<Key>} keys
- * @param{Array<Value>?} [values]
- * @param{Function?} [comparator]
- * @param{Boolean?} [presort=false] Pre-sort keys and values, using
- * tree's comparator. Sorting is done
- * in-place
- * @param{Boolean?} [noDuplicates=false] Allow duplicates
- * @return {SplayTree}
- */
- SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {
- return new SplayTree(comparator, noDuplicates).load(keys, values, presort);
- };
- Object.defineProperties( SplayTree.prototype, prototypeAccessors );
- function loadRecursive (parent, keys, values, start, end) {
- var size = end - start;
- if (size > 0) {
- var middle = start + Math.floor(size / 2);
- var key = keys[middle];
- var data = values[middle];
- var node = { key: key, data: data, parent: parent };
- node.left = loadRecursive(node, keys, values, start, middle);
- node.right = loadRecursive(node, keys, values, middle + 1, end);
- return node;
- }
- return null;
- }
- function sort(keys, values, left, right, compare) {
- if (left >= right) { return; }
- var pivot = keys[(left + right) >> 1];
- var i = left - 1;
- var j = right + 1;
- while (true) {
- do { i++; } while (compare(keys[i], pivot) < 0);
- do { j--; } while (compare(keys[j], pivot) > 0);
- if (i >= j) { break; }
- var tmp = keys[i];
- keys[i] = keys[j];
- keys[j] = tmp;
- tmp = values[i];
- values[i] = values[j];
- values[j] = tmp;
- }
- sort(keys, values, left, j, compare);
- sort(keys, values, j + 1, right, compare);
- }
- var NORMAL = 0;
- var NON_CONTRIBUTING = 1;
- var SAME_TRANSITION = 2;
- var DIFFERENT_TRANSITION = 3;
- var INTERSECTION = 0;
- var UNION = 1;
- var DIFFERENCE = 2;
- var XOR = 3;
- /**
- * @param {SweepEvent} event
- * @param {SweepEvent} prev
- * @param {Operation} operation
- */
- function computeFields (event, prev, operation) {
- // compute inOut and otherInOut fields
- if (prev === null) {
- event.inOut = false;
- event.otherInOut = true;
- // previous line segment in sweepline belongs to the same polygon
- } else {
- if (event.isSubject === prev.isSubject) {
- event.inOut = !prev.inOut;
- event.otherInOut = prev.otherInOut;
- // previous line segment in sweepline belongs to the clipping polygon
- } else {
- event.inOut = !prev.otherInOut;
- event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;
- }
- // compute prevInResult field
- if (prev) {
- event.prevInResult = (!inResult(prev, operation) || prev.isVertical())
- ? prev.prevInResult : prev;
- }
- }
- // check if the line segment belongs to the Boolean operation
- event.inResult = inResult(event, operation);
- }
- /* eslint-disable indent */
- function inResult(event, operation) {
- switch (event.type) {
- case NORMAL:
- switch (operation) {
- case INTERSECTION:
- return !event.otherInOut;
- case UNION:
- return event.otherInOut;
- case DIFFERENCE:
- // return (event.isSubject && !event.otherInOut) ||
- // (!event.isSubject && event.otherInOut);
- return (event.isSubject && event.otherInOut) ||
- (!event.isSubject && !event.otherInOut);
- case XOR:
- return true;
- }
- break;
- case SAME_TRANSITION:
- return operation === INTERSECTION || operation === UNION;
- case DIFFERENT_TRANSITION:
- return operation === DIFFERENCE;
- case NON_CONTRIBUTING:
- return false;
- }
- return false;
- }
- /* eslint-enable indent */
- var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {
- /**
- * Is left endpoint?
- * @type {Boolean}
- */
- this.left = left;
- /**
- * @type {Array.<Number>}
- */
- this.point = point;
- /**
- * Other edge reference
- * @type {SweepEvent}
- */
- this.otherEvent = otherEvent;
- /**
- * Belongs to source or clipping polygon
- * @type {Boolean}
- */
- this.isSubject = isSubject;
- /**
- * Edge contribution type
- * @type {Number}
- */
- this.type = edgeType || NORMAL;
- /**
- * In-out transition for the sweepline crossing polygon
- * @type {Boolean}
- */
- this.inOut = false;
- /**
- * @type {Boolean}
- */
- this.otherInOut = false;
- /**
- * Previous event in result?
- * @type {SweepEvent}
- */
- this.prevInResult = null;
- /**
- * Does event belong to result?
- * @type {Boolean}
- */
- this.inResult = false;
- // connection step
- /**
- * @type {Boolean}
- */
- this.resultInOut = false;
- this.isExteriorRing = true;
- };
- /**
- * @param{Array.<Number>}p
- * @return {Boolean}
- */
- SweepEvent.prototype.isBelow = function isBelow (p) {
- var p0 = this.point, p1 = this.otherEvent.point;
- return this.left
- ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0
- // signedArea(this.point, this.otherEvent.point, p) > 0 :
- : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;
- //signedArea(this.otherEvent.point, this.point, p) > 0;
- };
- /**
- * @param{Array.<Number>}p
- * @return {Boolean}
- */
- SweepEvent.prototype.isAbove = function isAbove (p) {
- return !this.isBelow(p);
- };
- /**
- * @return {Boolean}
- */
- SweepEvent.prototype.isVertical = function isVertical () {
- return this.point[0] === this.otherEvent.point[0];
- };
- SweepEvent.prototype.clone = function clone () {
- var copy = new SweepEvent(
- this.point, this.left, this.otherEvent, this.isSubject, this.type);
- copy.inResult = this.inResult;
- copy.prevInResult = this.prevInResult;
- copy.isExteriorRing = this.isExteriorRing;
- copy.inOut = this.inOut;
- copy.otherInOut = this.otherInOut;
- return copy;
- };
- function equals(p1, p2) {
- if (p1[0] === p2[0]) {
- if (p1[1] === p2[1]) {
- return true;
- } else {
- return false;
- }
- }
- return false;
- }
- // const EPSILON = 1e-9;
- // const abs = Math.abs;
- // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164
- // Precision problem.
- //
- // module.exports = function equals(p1, p2) {
- // return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;
- // };
- /**
- * Signed area of the triangle (p0, p1, p2)
- * @param {Array.<Number>} p0
- * @param {Array.<Number>} p1
- * @param {Array.<Number>} p2
- * @return {Number}
- */
- function signedArea(p0, p1, p2) {
- return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);
- }
- /**
- * @param {SweepEvent} e1
- * @param {SweepEvent} e2
- * @return {Number}
- */
- function compareEvents(e1, e2) {
- var p1 = e1.point;
- var p2 = e2.point;
- // Different x-coordinate
- if (p1[0] > p2[0]) { return 1; }
- if (p1[0] < p2[0]) { return -1; }
- // Different points, but same x-coordinate
- // Event with lower y-coordinate is processed first
- if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }
- return specialCases(e1, e2, p1, p2);
- }
- /* eslint-disable no-unused-vars */
- function specialCases(e1, e2, p1, p2) {
- // Same coordinates, but one is a left endpoint and the other is
- // a right endpoint. The right endpoint is processed first
- if (e1.left !== e2.left)
- { return e1.left ? 1 : -1; }
- // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;
- // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])
- // Same coordinates, both events
- // are left endpoints or right endpoints.
- // not collinear
- if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {
- // the event associate to the bottom segment is processed first
- return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;
- }
- return (!e1.isSubject && e2.isSubject) ? 1 : -1;
- }
- /* eslint-enable no-unused-vars */
- /**
- * @param {SweepEvent} se
- * @param {Array.<Number>} p
- * @param {Queue} queue
- * @return {Queue}
- */
- function divideSegment(se, p, queue) {
- var r = new SweepEvent(p, false, se, se.isSubject);
- var l = new SweepEvent(p, true, se.otherEvent, se.isSubject);
- /* eslint-disable no-console */
- if (equals(se.point, se.otherEvent.point)) {
- console.warn('what is that, a collapsed segment?', se);
- }
- /* eslint-enable no-console */
- r.contourId = l.contourId = se.contourId;
- // avoid a rounding error. The left event would be processed after the right event
- if (compareEvents(l, se.otherEvent) > 0) {
- se.otherEvent.left = true;
- l.left = false;
- }
- // avoid a rounding error. The left event would be processed after the right event
- // if (compareEvents(se, r) > 0) {}
- se.otherEvent.otherEvent = l;
- se.otherEvent = r;
- queue.push(l);
- queue.push(r);
- return queue;
- }
- //const EPS = 1e-9;
- /**
- * Finds the magnitude of the cross product of two vectors (if we pretend
- * they're in three dimensions)
- *
- * @param {Object} a First vector
- * @param {Object} b Second vector
- * @private
- * @returns {Number} The magnitude of the cross product
- */
- function crossProduct(a, b) {
- return (a[0] * b[1]) - (a[1] * b[0]);
- }
- /**
- * Finds the dot product of two vectors.
- *
- * @param {Object} a First vector
- * @param {Object} b Second vector
- * @private
- * @returns {Number} The dot product
- */
- function dotProduct(a, b) {
- return (a[0] * b[0]) + (a[1] * b[1]);
- }
- /**
- * Finds the intersection (if any) between two line segments a and b, given the
- * line segments' end points a1, a2 and b1, b2.
- *
- * This algorithm is based on Schneider and Eberly.
- * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf
- * Page 244.
- *
- * @param {Array.<Number>} a1 point of first line
- * @param {Array.<Number>} a2 point of first line
- * @param {Array.<Number>} b1 point of second line
- * @param {Array.<Number>} b2 point of second line
- * @param {Boolean=} noEndpointTouch whether to skip single touchpoints
- * (meaning connected segments) as
- * intersections
- * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of
- * intersection. If they overlap, the two end points of the overlapping segment.
- * Otherwise, null.
- */
- function intersection (a1, a2, b1, b2, noEndpointTouch) {
- // The algorithm expects our lines in the form P + sd, where P is a point,
- // s is on the interval [0, 1], and d is a vector.
- // We are passed two points. P can be the first point of each pair. The
- // vector, then, could be thought of as the distance (in x and y components)
- // from the first point to the second point.
- // So first, let's make our vectors:
- var va = [a2[0] - a1[0], a2[1] - a1[1]];
- var vb = [b2[0] - b1[0], b2[1] - b1[1]];
- // We also define a function to convert back to regular point form:
- /* eslint-disable arrow-body-style */
- function toPoint(p, s, d) {
- return [
- p[0] + s * d[0],
- p[1] + s * d[1]
- ];
- }
- /* eslint-enable arrow-body-style */
- // The rest is pretty much a straight port of the algorithm.
- var e = [b1[0] - a1[0], b1[1] - a1[1]];
- var kross = crossProduct(va, vb);
- var sqrKross = kross * kross;
- var sqrLenA = dotProduct(va, va);
- //const sqrLenB = dotProduct(vb, vb);
- // Check for line intersection. This works because of the properties of the
- // cross product -- specifically, two vectors are parallel if and only if the
- // cross product is the 0 vector. The full calculation involves relative error
- // to account for possible very small line segments. See Schneider & Eberly
- // for details.
- if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {
- // If they're not parallel, then (because these are line segments) they
- // still might not actually intersect. This code checks that the
- // intersection point of the lines is actually on both line segments.
- var s = crossProduct(e, vb) / kross;
- if (s < 0 || s > 1) {
- // not on line segment a
- return null;
- }
- var t = crossProduct(e, va) / kross;
- if (t < 0 || t > 1) {
- // not on line segment b
- return null;
- }
- if (s === 0 || s === 1) {
- // on an endpoint of line segment a
- return noEndpointTouch ? null : [toPoint(a1, s, va)];
- }
- if (t === 0 || t === 1) {
- // on an endpoint of line segment b
- return noEndpointTouch ? null : [toPoint(b1, t, vb)];
- }
- return [toPoint(a1, s, va)];
- }
- // If we've reached this point, then the lines are either parallel or the
- // same, but the segments could overlap partially or fully, or not at all.
- // So we need to find the overlap, if any. To do that, we can use e, which is
- // the (vector) difference between the two initial points. If this is parallel
- // with the line itself, then the two lines are the same line, and there will
- // be overlap.
- //const sqrLenE = dotProduct(e, e);
- kross = crossProduct(e, va);
- sqrKross = kross * kross;
- if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {
- // Lines are just parallel, not the same. No overlap.
- return null;
- }
- var sa = dotProduct(va, e) / sqrLenA;
- var sb = sa + dotProduct(va, vb) / sqrLenA;
- var smin = Math.min(sa, sb);
- var smax = Math.max(sa, sb);
- // this is, essentially, the FindIntersection acting on floats from
- // Schneider & Eberly, just inlined into this function.
- if (smin <= 1 && smax >= 0) {
- // overlap on an end point
- if (smin === 1) {
- return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];
- }
- if (smax === 0) {
- return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];
- }
- if (noEndpointTouch && smin === 0 && smax === 1) { return null; }
- // There's overlap on a segment -- two points of intersection. Return both.
- return [
- toPoint(a1, smin > 0 ? smin : 0, va),
- toPoint(a1, smax < 1 ? smax : 1, va)
- ];
- }
- return null;
- }
- /**
- * @param {SweepEvent} se1
- * @param {SweepEvent} se2
- * @param {Queue} queue
- * @return {Number}
- */
- function possibleIntersection (se1, se2, queue) {
- // that disallows self-intersecting polygons,
- // did cost us half a day, so I'll leave it
- // out of respect
- // if (se1.isSubject === se2.isSubject) return;
- var inter = intersection(
- se1.point, se1.otherEvent.point,
- se2.point, se2.otherEvent.point
- );
- var nintersections = inter ? inter.length : 0;
- if (nintersections === 0) { return 0; } // no intersection
- // the line segments intersect at an endpoint of both line segments
- if ((nintersections === 1) &&
- (equals(se1.point, se2.point) ||
- equals(se1.otherEvent.point, se2.otherEvent.point))) {
- return 0;
- }
- if (nintersections === 2 && se1.isSubject === se2.isSubject) {
- // if(se1.contourId === se2.contourId){
- // console.warn('Edges of the same polygon overlap',
- // se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);
- // }
- //throw new Error('Edges of the same polygon overlap');
- return 0;
- }
- // The line segments associated to se1 and se2 intersect
- if (nintersections === 1) {
- // if the intersection point is not an endpoint of se1
- if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {
- divideSegment(se1, inter[0], queue);
- }
- // if the intersection point is not an endpoint of se2
- if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {
- divideSegment(se2, inter[0], queue);
- }
- return 1;
- }
- // The line segments associated to se1 and se2 overlap
- var events = [];
- var leftCoincide = false;
- var rightCoincide = false;
- if (equals(se1.point, se2.point)) {
- leftCoincide = true; // linked
- } else if (compareEvents(se1, se2) === 1) {
- events.push(se2, se1);
- } else {
- events.push(se1, se2);
- }
- if (equals(se1.otherEvent.point, se2.otherEvent.point)) {
- rightCoincide = true;
- } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {
- events.push(se2.otherEvent, se1.otherEvent);
- } else {
- events.push(se1.otherEvent, se2.otherEvent);
- }
- if ((leftCoincide && rightCoincide) || leftCoincide) {
- // both line segments are equal or share the left endpoint
- se2.type = NON_CONTRIBUTING;
- se1.type = (se2.inOut === se1.inOut)
- ? SAME_TRANSITION : DIFFERENT_TRANSITION;
- if (leftCoincide && !rightCoincide) {
- // honestly no idea, but changing events selection from [2, 1]
- // to [0, 1] fixes the overlapping self-intersecting polygons issue
- divideSegment(events[1].otherEvent, events[0].point, queue);
- }
- return 2;
- }
- // the line segments share the right endpoint
- if (rightCoincide) {
- divideSegment(events[0], events[1].point, queue);
- return 3;
- }
- // no line segment includes totally the other one
- if (events[0] !== events[3].otherEvent) {
- divideSegment(events[0], events[1].point, queue);
- divideSegment(events[1], events[2].point, queue);
- return 3;
- }
- // one line segment includes the other one
- divideSegment(events[0], events[1].point, queue);
- divideSegment(events[3].otherEvent, events[2].point, queue);
- return 3;
- }
- /**
- * @param {SweepEvent} le1
- * @param {SweepEvent} le2
- * @return {Number}
- */
- function compareSegments(le1, le2) {
- if (le1 === le2) { return 0; }
- // Segments are not collinear
- if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||
- signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {
- // If they share their left endpoint use the right endpoint to sort
- if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }
- // Different left endpoint: use the left endpoint to sort
- if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }
- // has the line segment associated to e1 been inserted
- // into S after the line segment associated to e2 ?
- if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }
- // The line segment associated to e2 has been inserted
- // into S after the line segment associated to e1
- return le1.isBelow(le2.point) ? -1 : 1;
- }
- if (le1.isSubject === le2.isSubject) { // same polygon
- var p1 = le1.point, p2 = le2.point;
- if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {
- p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;
- if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }
- else { return le1.contourId > le2.contourId ? 1 : -1; }
- }
- } else { // Segments are collinear, but belong to separate polygons
- return le1.isSubject ? -1 : 1;
- }
- return compareEvents(le1, le2) === 1 ? 1 : -1;
- }
- function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {
- var sweepLine = new SplayTree(compareSegments);
- var sortedEvents = [];
- var rightbound = Math.min(sbbox[2], cbbox[2]);
- var prev, next, begin;
- while (eventQueue.length !== 0) {
- var event = eventQueue.pop();
- sortedEvents.push(event);
- // optimization by bboxes for intersection and difference goes here
- if ((operation === INTERSECTION && event.point[0] > rightbound) ||
- (operation === DIFFERENCE && event.point[0] > sbbox[2])) {
- break;
- }
- if (event.left) {
- next = prev = sweepLine.insert(event);
- begin = sweepLine.minNode();
- if (prev !== begin) { prev = sweepLine.prev(prev); }
- else { prev = null; }
- next = sweepLine.next(next);
- var prevEvent = prev ? prev.key : null;
- var prevprevEvent = (void 0);
- computeFields(event, prevEvent, operation);
- if (next) {
- if (possibleIntersection(event, next.key, eventQueue) === 2) {
- computeFields(event, prevEvent, operation);
- computeFields(event, next.key, operation);
- }
- }
- if (prev) {
- if (possibleIntersection(prev.key, event, eventQueue) === 2) {
- var prevprev = prev;
- if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }
- else { prevprev = null; }
- prevprevEvent = prevprev ? prevprev.key : null;
- computeFields(prevEvent, prevprevEvent, operation);
- computeFields(event, prevEvent, operation);
- }
- }
- } else {
- event = event.otherEvent;
- next = prev = sweepLine.find(event);
- if (prev && next) {
- if (prev !== begin) { prev = sweepLine.prev(prev); }
- else { prev = null; }
- next = sweepLine.next(next);
- sweepLine.remove(event);
- if (next && prev) {
- possibleIntersection(prev.key, next.key, eventQueue);
- }
- }
- }
- }
- return sortedEvents;
- }
- /**
- * @param {Array.<SweepEvent>} sortedEvents
- * @return {Array.<SweepEvent>}
- */
- function orderEvents(sortedEvents) {
- var event, i, len, tmp;
- var resultEvents = [];
- for (i = 0, len = sortedEvents.length; i < len; i++) {
- event = sortedEvents[i];
- if ((event.left && event.inResult) ||
- (!event.left && event.otherEvent.inResult)) {
- resultEvents.push(event);
- }
- }
- // Due to overlapping edges the resultEvents array can be not wholly sorted
- var sorted = false;
- while (!sorted) {
- sorted = true;
- for (i = 0, len = resultEvents.length; i < len; i++) {
- if ((i + 1) < len &&
- compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {
- tmp = resultEvents[i];
- resultEvents[i] = resultEvents[i + 1];
- resultEvents[i + 1] = tmp;
- sorted = false;
- }
- }
- }
- for (i = 0, len = resultEvents.length; i < len; i++) {
- event = resultEvents[i];
- event.pos = i;
- }
- // imagine, the right event is found in the beginning of the queue,
- // when his left counterpart is not marked yet
- for (i = 0, len = resultEvents.length; i < len; i++) {
- event = resultEvents[i];
- if (!event.left) {
- tmp = event.pos;
- event.pos = event.otherEvent.pos;
- event.otherEvent.pos = tmp;
- }
- }
- return resultEvents;
- }
- /**
- * @param {Number} pos
- * @param {Array.<SweepEvent>} resultEvents
- * @param {Object>} processed
- * @return {Number}
- */
- function nextPos(pos, resultEvents, processed, origIndex) {
- var newPos = pos + 1;
- var length = resultEvents.length;
- if (newPos > length - 1) { return pos - 1; }
- var p = resultEvents[pos].point;
- var p1 = resultEvents[newPos].point;
- // while in range and not the current one by value
- while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {
- if (!processed[newPos]) {
- return newPos;
- } else {
- newPos++;
- }
- p1 = resultEvents[newPos].point;
- }
- newPos = pos - 1;
- while (processed[newPos] && newPos >= origIndex) {
- newPos--;
- }
- return newPos;
- }
- /**
- * @param {Array.<SweepEvent>} sortedEvents
- * @return {Array.<*>} polygons
- */
- function connectEdges(sortedEvents, operation) {
- var i, len;
- var resultEvents = orderEvents(sortedEvents);
- // "false"-filled array
- var processed = {};
- var result = [];
- var event;
- for (i = 0, len = resultEvents.length; i < len; i++) {
- if (processed[i]) { continue; }
- var contour = [[]];
- if (!resultEvents[i].isExteriorRing) {
- if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {
- result.push(contour);
- } else if (result.length === 0) {
- result.push([[contour]]);
- } else {
- result[result.length - 1].push(contour[0]);
- }
- } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {
- result[result.length - 1].push(contour[0]);
- } else {
- result.push(contour);
- }
- var ringId = result.length - 1;
- var pos = i;
- var initial = resultEvents[i].point;
- contour[0].push(initial);
- while (pos >= i) {
- event = resultEvents[pos];
- processed[pos] = true;
- if (event.left) {
- event.resultInOut = false;
- event.contourId = ringId;
- } else {
- event.otherEvent.resultInOut = true;
- event.otherEvent.contourId = ringId;
- }
- pos = event.pos;
- processed[pos] = true;
- contour[0].push(resultEvents[pos].point);
- pos = nextPos(pos, resultEvents, processed, i);
- }
- pos = pos === -1 ? i : pos;
- event = resultEvents[pos];
- processed[pos] = processed[event.pos] = true;
- event.otherEvent.resultInOut = true;
- event.otherEvent.contourId = ringId;
- }
- // Handle if the result is a polygon (eg not multipoly)
- // Commented it again, let's see what do we mean by that
- // if (result.length === 1) result = result[0];
- return result;
- }
- var tinyqueue = TinyQueue;
- var default_1 = TinyQueue;
- function TinyQueue(data, compare) {
- var this$1 = this;
- if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }
- this.data = data || [];
- this.length = this.data.length;
- this.compare = compare || defaultCompare;
- if (this.length > 0) {
- for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }
- }
- }
- function defaultCompare(a, b) {
- return a < b ? -1 : a > b ? 1 : 0;
- }
- TinyQueue.prototype = {
- push: function (item) {
- this.data.push(item);
- this.length++;
- this._up(this.length - 1);
- },
- pop: function () {
- if (this.length === 0) { return undefined; }
- var top = this.data[0];
- this.length--;
- if (this.length > 0) {
- this.data[0] = this.data[this.length];
- this._down(0);
- }
- this.data.pop();
- return top;
- },
- peek: function () {
- return this.data[0];
- },
- _up: function (pos) {
- var data = this.data;
- var compare = this.compare;
- var item = data[pos];
- while (pos > 0) {
- var parent = (pos - 1) >> 1;
- var current = data[parent];
- if (compare(item, current) >= 0) { break; }
- data[pos] = current;
- pos = parent;
- }
- data[pos] = item;
- },
- _down: function (pos) {
- var this$1 = this;
- var data = this.data;
- var compare = this.compare;
- var halfLength = this.length >> 1;
- var item = data[pos];
- while (pos < halfLength) {
- var left = (pos << 1) + 1;
- var right = left + 1;
- var best = data[left];
- if (right < this$1.length && compare(data[right], best) < 0) {
- left = right;
- best = data[right];
- }
- if (compare(best, item) >= 0) { break; }
- data[pos] = best;
- pos = left;
- }
- data[pos] = item;
- }
- };
- tinyqueue.default = default_1;
- var max = Math.max;
- var min = Math.min;
- var contourId = 0;
- function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
- var i, len, s1, s2, e1, e2;
- for (i = 0, len = contourOrHole.length - 1; i < len; i++) {
- s1 = contourOrHole[i];
- s2 = contourOrHole[i + 1];
- e1 = new SweepEvent(s1, false, undefined, isSubject);
- e2 = new SweepEvent(s2, false, e1, isSubject);
- e1.otherEvent = e2;
- if (s1[0] === s2[0] && s1[1] === s2[1]) {
- continue; // skip collapsed edges, or it breaks
- }
- e1.contourId = e2.contourId = depth;
- if (!isExteriorRing) {
- e1.isExteriorRing = false;
- e2.isExteriorRing = false;
- }
- if (compareEvents(e1, e2) > 0) {
- e2.left = true;
- } else {
- e1.left = true;
- }
- var x = s1[0], y = s1[1];
- bbox[0] = min(bbox[0], x);
- bbox[1] = min(bbox[1], y);
- bbox[2] = max(bbox[2], x);
- bbox[3] = max(bbox[3], y);
- // Pushing it so the queue is sorted from left to right,
- // with object on the left having the highest priority.
- Q.push(e1);
- Q.push(e2);
- }
- }
- function fillQueue(subject, clipping, sbbox, cbbox, operation) {
- var eventQueue = new tinyqueue(null, compareEvents);
- var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;
- for (i = 0, ii = subject.length; i < ii; i++) {
- polygonSet = subject[i];
- for (j = 0, jj = polygonSet.length; j < jj; j++) {
- isExteriorRing = j === 0;
- if (isExteriorRing) { contourId++; }
- processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);
- }
- }
- for (i = 0, ii = clipping.length; i < ii; i++) {
- polygonSet = clipping[i];
- for (j = 0, jj = polygonSet.length; j < jj; j++) {
- isExteriorRing = j === 0;
- if (operation === DIFFERENCE) { isExteriorRing = false; }
- if (isExteriorRing) { contourId++; }
- processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);
- }
- }
- return eventQueue;
- }
- var EMPTY = [];
- function trivialOperation(subject, clipping, operation) {
- var result = null;
- if (subject.length * clipping.length === 0) {
- if (operation === INTERSECTION) {
- result = EMPTY;
- } else if (operation === DIFFERENCE) {
- result = subject;
- } else if (operation === UNION ||
- operation === XOR) {
- result = (subject.length === 0) ? clipping : subject;
- }
- }
- return result;
- }
- function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {
- var result = null;
- if (sbbox[0] > cbbox[2] ||
- cbbox[0] > sbbox[2] ||
- sbbox[1] > cbbox[3] ||
- cbbox[1] > sbbox[3]) {
- if (operation === INTERSECTION) {
- result = EMPTY;
- } else if (operation === DIFFERENCE) {
- result = subject;
- } else if (operation === UNION ||
- operation === XOR) {
- result = subject.concat(clipping);
- }
- }
- return result;
- }
- function boolean(subject, clipping, operation) {
- if (typeof subject[0][0][0] === 'number') {
- subject = [subject];
- }
- if (typeof clipping[0][0][0] === 'number') {
- clipping = [clipping];
- }
- var trivial = trivialOperation(subject, clipping, operation);
- if (trivial) {
- return trivial === EMPTY ? null : trivial;
- }
- var sbbox = [Infinity, Infinity, -Infinity, -Infinity];
- var cbbox = [Infinity, Infinity, -Infinity, -Infinity];
- //console.time('fill queue');
- var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);
- //console.timeEnd('fill queue');
- trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);
- if (trivial) {
- return trivial === EMPTY ? null : trivial;
- }
- //console.time('subdivide edges');
- var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);
- //console.timeEnd('subdivide edges');
- //console.time('connect vertices');
- var result = connectEdges(sortedEvents, operation);
- //console.timeEnd('connect vertices');
- return result;
- }
- function union (subject, clipping) {
- return boolean(subject, clipping, UNION);
- }
- function diff (subject, clipping) {
- return boolean(subject, clipping, DIFFERENCE);
- }
- function xor (subject, clipping){
- return boolean(subject, clipping, XOR);
- }
- function intersection$1 (subject, clipping) {
- return boolean(subject, clipping, INTERSECTION);
- }
- /**
- * @enum {Number}
- */
- var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };
- exports.union = union;
- exports.diff = diff;
- exports.xor = xor;
- exports.intersection = intersection$1;
- exports.operations = operations;
- Object.defineProperty(exports, '__esModule', { value: true });
- })));
- },{}],266:[function(require,module,exports){
- 'use strict'
- var inherits = require('inherits')
- var HashBase = require('hash-base')
- var Buffer = require('safe-buffer').Buffer
- var ARRAY16 = new Array(16)
- function MD5 () {
- HashBase.call(this, 64)
- // state
- this._a = 0x67452301
- this._b = 0xefcdab89
- this._c = 0x98badcfe
- this._d = 0x10325476
- }
- inherits(MD5, HashBase)
- MD5.prototype._update = function () {
- var M = ARRAY16
- for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
- var a = this._a
- var b = this._b
- var c = this._c
- var d = this._d
- a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
- d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
- c = fnF(c, d, a, b, M[2], 0x242070db, 17)
- b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
- a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
- d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
- c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
- b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
- a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
- d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
- c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
- b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
- a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
- d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
- c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
- b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
- a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
- d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
- c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
- b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
- a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
- d = fnG(d, a, b, c, M[10], 0x02441453, 9)
- c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
- b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
- a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
- d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
- c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
- b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
- a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
- d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
- c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
- b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
- a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
- d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
- c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
- b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
- a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
- d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
- c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
- b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
- a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
- d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
- c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
- b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
- a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
- d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
- c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
- b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
- a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
- d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
- c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
- b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
- a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
- d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
- c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
- b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
- a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
- d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
- c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
- b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
- a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
- d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
- c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
- b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
- this._a = (this._a + a) | 0
- this._b = (this._b + b) | 0
- this._c = (this._c + c) | 0
- this._d = (this._d + d) | 0
- }
- MD5.prototype._digest = function () {
- // create padding and handle blocks
- this._block[this._blockOffset++] = 0x80
- if (this._blockOffset > 56) {
- this._block.fill(0, this._blockOffset, 64)
- this._update()
- this._blockOffset = 0
- }
- this._block.fill(0, this._blockOffset, 56)
- this._block.writeUInt32LE(this._length[0], 56)
- this._block.writeUInt32LE(this._length[1], 60)
- this._update()
- // produce result
- var buffer = Buffer.allocUnsafe(16)
- buffer.writeInt32LE(this._a, 0)
- buffer.writeInt32LE(this._b, 4)
- buffer.writeInt32LE(this._c, 8)
- buffer.writeInt32LE(this._d, 12)
- return buffer
- }
- function rotl (x, n) {
- return (x << n) | (x >>> (32 - n))
- }
- function fnF (a, b, c, d, m, k, s) {
- return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
- }
- function fnG (a, b, c, d, m, k, s) {
- return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
- }
- function fnH (a, b, c, d, m, k, s) {
- return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
- }
- function fnI (a, b, c, d, m, k, s) {
- return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
- }
- module.exports = MD5
- },{"hash-base":227,"inherits":262,"safe-buffer":318}],267:[function(require,module,exports){
- var bn = require('bn.js');
- var brorand = require('brorand');
- function MillerRabin(rand) {
- this.rand = rand || new brorand.Rand();
- }
- module.exports = MillerRabin;
- MillerRabin.create = function create(rand) {
- return new MillerRabin(rand);
- };
- MillerRabin.prototype._randbelow = function _randbelow(n) {
- var len = n.bitLength();
- var min_bytes = Math.ceil(len / 8);
- // Generage random bytes until a number less than n is found.
- // This ensures that 0..n-1 have an equal probability of being selected.
- do
- var a = new bn(this.rand.generate(min_bytes));
- while (a.cmp(n) >= 0);
- return a;
- };
- MillerRabin.prototype._randrange = function _randrange(start, stop) {
- // Generate a random number greater than or equal to start and less than stop.
- var size = stop.sub(start);
- return start.add(this._randbelow(size));
- };
- MillerRabin.prototype.test = function test(n, k, cb) {
- var len = n.bitLength();
- var red = bn.mont(n);
- var rone = new bn(1).toRed(red);
- if (!k)
- k = Math.max(1, (len / 48) | 0);
- // Find d and s, (n - 1) = (2 ^ s) * d;
- var n1 = n.subn(1);
- for (var s = 0; !n1.testn(s); s++) {}
- var d = n.shrn(s);
- var rn1 = n1.toRed(red);
- var prime = true;
- for (; k > 0; k--) {
- var a = this._randrange(new bn(2), n1);
- if (cb)
- cb(a);
- var x = a.toRed(red).redPow(d);
- if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
- continue;
- for (var i = 1; i < s; i++) {
- x = x.redSqr();
- if (x.cmp(rone) === 0)
- return false;
- if (x.cmp(rn1) === 0)
- break;
- }
- if (i === s)
- return false;
- }
- return prime;
- };
- MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
- var len = n.bitLength();
- var red = bn.mont(n);
- var rone = new bn(1).toRed(red);
- if (!k)
- k = Math.max(1, (len / 48) | 0);
- // Find d and s, (n - 1) = (2 ^ s) * d;
- var n1 = n.subn(1);
- for (var s = 0; !n1.testn(s); s++) {}
- var d = n.shrn(s);
- var rn1 = n1.toRed(red);
- for (; k > 0; k--) {
- var a = this._randrange(new bn(2), n1);
- var g = n.gcd(a);
- if (g.cmpn(1) !== 0)
- return g;
- var x = a.toRed(red).redPow(d);
- if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
- continue;
- for (var i = 1; i < s; i++) {
- x = x.redSqr();
- if (x.cmp(rone) === 0)
- return x.fromRed().subn(1).gcd(n);
- if (x.cmp(rn1) === 0)
- break;
- }
- if (i === s) {
- x = x.redSqr();
- return x.fromRed().subn(1).gcd(n);
- }
- }
- return false;
- };
- },{"bn.js":147,"brorand":148}],268:[function(require,module,exports){
- module.exports = assert;
- function assert(val, msg) {
- if (!val)
- throw new Error(msg || 'Assertion failed');
- }
- assert.equal = function assertEqual(l, r, msg) {
- if (l != r)
- throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
- };
- },{}],269:[function(require,module,exports){
- 'use strict';
- var utils = exports;
- function toArray(msg, enc) {
- if (Array.isArray(msg))
- return msg.slice();
- if (!msg)
- return [];
- var res = [];
- if (typeof msg !== 'string') {
- for (var i = 0; i < msg.length; i++)
- res[i] = msg[i] | 0;
- return res;
- }
- if (enc === 'hex') {
- msg = msg.replace(/[^a-z0-9]+/ig, '');
- if (msg.length % 2 !== 0)
- msg = '0' + msg;
- for (var i = 0; i < msg.length; i += 2)
- res.push(parseInt(msg[i] + msg[i + 1], 16));
- } else {
- for (var i = 0; i < msg.length; i++) {
- var c = msg.charCodeAt(i);
- var hi = c >> 8;
- var lo = c & 0xff;
- if (hi)
- res.push(hi, lo);
- else
- res.push(lo);
- }
- }
- return res;
- }
- utils.toArray = toArray;
- function zero2(word) {
- if (word.length === 1)
- return '0' + word;
- else
- return word;
- }
- utils.zero2 = zero2;
- function toHex(msg) {
- var res = '';
- for (var i = 0; i < msg.length; i++)
- res += zero2(msg[i].toString(16));
- return res;
- }
- utils.toHex = toHex;
- utils.encode = function encode(arr, enc) {
- if (enc === 'hex')
- return toHex(arr);
- else
- return arr;
- };
- },{}],270:[function(require,module,exports){
- exports.endianness = function () { return 'LE' };
- exports.hostname = function () {
- if (typeof location !== 'undefined') {
- return location.hostname
- }
- else return '';
- };
- exports.loadavg = function () { return [] };
- exports.uptime = function () { return 0 };
- exports.freemem = function () {
- return Number.MAX_VALUE;
- };
- exports.totalmem = function () {
- return Number.MAX_VALUE;
- };
- exports.cpus = function () { return [] };
- exports.type = function () { return 'Browser' };
- exports.release = function () {
- if (typeof navigator !== 'undefined') {
- return navigator.appVersion;
- }
- return '';
- };
- exports.networkInterfaces
- = exports.getNetworkInterfaces
- = function () { return {} };
- exports.arch = function () { return 'javascript' };
- exports.platform = function () { return 'browser' };
- exports.tmpdir = exports.tmpDir = function () {
- return '/tmp';
- };
- exports.EOL = '\n';
- exports.homedir = function () {
- return '/'
- };
- },{}],271:[function(require,module,exports){
- module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
- "2.16.840.1.101.3.4.1.2": "aes-128-cbc",
- "2.16.840.1.101.3.4.1.3": "aes-128-ofb",
- "2.16.840.1.101.3.4.1.4": "aes-128-cfb",
- "2.16.840.1.101.3.4.1.21": "aes-192-ecb",
- "2.16.840.1.101.3.4.1.22": "aes-192-cbc",
- "2.16.840.1.101.3.4.1.23": "aes-192-ofb",
- "2.16.840.1.101.3.4.1.24": "aes-192-cfb",
- "2.16.840.1.101.3.4.1.41": "aes-256-ecb",
- "2.16.840.1.101.3.4.1.42": "aes-256-cbc",
- "2.16.840.1.101.3.4.1.43": "aes-256-ofb",
- "2.16.840.1.101.3.4.1.44": "aes-256-cfb"
- }
- },{}],272:[function(require,module,exports){
- // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
- // Fedor, you are amazing.
- 'use strict'
- var asn1 = require('asn1.js')
- exports.certificate = require('./certificate')
- var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
- this.seq().obj(
- this.key('version').int(),
- this.key('modulus').int(),
- this.key('publicExponent').int(),
- this.key('privateExponent').int(),
- this.key('prime1').int(),
- this.key('prime2').int(),
- this.key('exponent1').int(),
- this.key('exponent2').int(),
- this.key('coefficient').int()
- )
- })
- exports.RSAPrivateKey = RSAPrivateKey
- var RSAPublicKey = asn1.define('RSAPublicKey', function () {
- this.seq().obj(
- this.key('modulus').int(),
- this.key('publicExponent').int()
- )
- })
- exports.RSAPublicKey = RSAPublicKey
- var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
- this.seq().obj(
- this.key('algorithm').use(AlgorithmIdentifier),
- this.key('subjectPublicKey').bitstr()
- )
- })
- exports.PublicKey = PublicKey
- var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
- this.seq().obj(
- this.key('algorithm').objid(),
- this.key('none').null_().optional(),
- this.key('curve').objid().optional(),
- this.key('params').seq().obj(
- this.key('p').int(),
- this.key('q').int(),
- this.key('g').int()
- ).optional()
- )
- })
- var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
- this.seq().obj(
- this.key('version').int(),
- this.key('algorithm').use(AlgorithmIdentifier),
- this.key('subjectPrivateKey').octstr()
- )
- })
- exports.PrivateKey = PrivateKeyInfo
- var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
- this.seq().obj(
- this.key('algorithm').seq().obj(
- this.key('id').objid(),
- this.key('decrypt').seq().obj(
- this.key('kde').seq().obj(
- this.key('id').objid(),
- this.key('kdeparams').seq().obj(
- this.key('salt').octstr(),
- this.key('iters').int()
- )
- ),
- this.key('cipher').seq().obj(
- this.key('algo').objid(),
- this.key('iv').octstr()
- )
- )
- ),
- this.key('subjectPrivateKey').octstr()
- )
- })
- exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo
- var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
- this.seq().obj(
- this.key('version').int(),
- this.key('p').int(),
- this.key('q').int(),
- this.key('g').int(),
- this.key('pub_key').int(),
- this.key('priv_key').int()
- )
- })
- exports.DSAPrivateKey = DSAPrivateKey
- exports.DSAparam = asn1.define('DSAparam', function () {
- this.int()
- })
- var ECPrivateKey = asn1.define('ECPrivateKey', function () {
- this.seq().obj(
- this.key('version').int(),
- this.key('privateKey').octstr(),
- this.key('parameters').optional().explicit(0).use(ECParameters),
- this.key('publicKey').optional().explicit(1).bitstr()
- )
- })
- exports.ECPrivateKey = ECPrivateKey
- var ECParameters = asn1.define('ECParameters', function () {
- this.choice({
- namedCurve: this.objid()
- })
- })
- exports.signature = asn1.define('signature', function () {
- this.seq().obj(
- this.key('r').int(),
- this.key('s').int()
- )
- })
- },{"./certificate":273,"asn1.js":132}],273:[function(require,module,exports){
- // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
- // thanks to @Rantanen
- 'use strict'
- var asn = require('asn1.js')
- var Time = asn.define('Time', function () {
- this.choice({
- utcTime: this.utctime(),
- generalTime: this.gentime()
- })
- })
- var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
- this.seq().obj(
- this.key('type').objid(),
- this.key('value').any()
- )
- })
- var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
- this.seq().obj(
- this.key('algorithm').objid(),
- this.key('parameters').optional(),
- this.key('curve').objid().optional()
- )
- })
- var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
- this.seq().obj(
- this.key('algorithm').use(AlgorithmIdentifier),
- this.key('subjectPublicKey').bitstr()
- )
- })
- var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
- this.setof(AttributeTypeValue)
- })
- var RDNSequence = asn.define('RDNSequence', function () {
- this.seqof(RelativeDistinguishedName)
- })
- var Name = asn.define('Name', function () {
- this.choice({
- rdnSequence: this.use(RDNSequence)
- })
- })
- var Validity = asn.define('Validity', function () {
- this.seq().obj(
- this.key('notBefore').use(Time),
- this.key('notAfter').use(Time)
- )
- })
- var Extension = asn.define('Extension', function () {
- this.seq().obj(
- this.key('extnID').objid(),
- this.key('critical').bool().def(false),
- this.key('extnValue').octstr()
- )
- })
- var TBSCertificate = asn.define('TBSCertificate', function () {
- this.seq().obj(
- this.key('version').explicit(0).int().optional(),
- this.key('serialNumber').int(),
- this.key('signature').use(AlgorithmIdentifier),
- this.key('issuer').use(Name),
- this.key('validity').use(Validity),
- this.key('subject').use(Name),
- this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
- this.key('issuerUniqueID').implicit(1).bitstr().optional(),
- this.key('subjectUniqueID').implicit(2).bitstr().optional(),
- this.key('extensions').explicit(3).seqof(Extension).optional()
- )
- })
- var X509Certificate = asn.define('X509Certificate', function () {
- this.seq().obj(
- this.key('tbsCertificate').use(TBSCertificate),
- this.key('signatureAlgorithm').use(AlgorithmIdentifier),
- this.key('signatureValue').bitstr()
- )
- })
- module.exports = X509Certificate
- },{"asn1.js":132}],274:[function(require,module,exports){
- // adapted from https://github.com/apatil/pemstrip
- var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r\+\/\=]+)[\n\r]+/m
- var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m
- var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m
- var evp = require('evp_bytestokey')
- var ciphers = require('browserify-aes')
- var Buffer = require('safe-buffer').Buffer
- module.exports = function (okey, password) {
- var key = okey.toString()
- var match = key.match(findProc)
- var decrypted
- if (!match) {
- var match2 = key.match(fullRegex)
- decrypted = new Buffer(match2[2].replace(/[\r\n]/g, ''), 'base64')
- } else {
- var suite = 'aes' + match[1]
- var iv = Buffer.from(match[2], 'hex')
- var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64')
- var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
- var out = []
- var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
- out.push(cipher.update(cipherText))
- out.push(cipher.final())
- decrypted = Buffer.concat(out)
- }
- var tag = key.match(startRegex)[1]
- return {
- tag: tag,
- data: decrypted
- }
- }
- },{"browserify-aes":152,"evp_bytestokey":222,"safe-buffer":318}],275:[function(require,module,exports){
- var asn1 = require('./asn1')
- var aesid = require('./aesid.json')
- var fixProc = require('./fixProc')
- var ciphers = require('browserify-aes')
- var compat = require('pbkdf2')
- var Buffer = require('safe-buffer').Buffer
- module.exports = parseKeys
- function parseKeys (buffer) {
- var password
- if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
- password = buffer.passphrase
- buffer = buffer.key
- }
- if (typeof buffer === 'string') {
- buffer = Buffer.from(buffer)
- }
- var stripped = fixProc(buffer, password)
- var type = stripped.tag
- var data = stripped.data
- var subtype, ndata
- switch (type) {
- case 'CERTIFICATE':
- ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
- // falls through
- case 'PUBLIC KEY':
- if (!ndata) {
- ndata = asn1.PublicKey.decode(data, 'der')
- }
- subtype = ndata.algorithm.algorithm.join('.')
- switch (subtype) {
- case '1.2.840.113549.1.1.1':
- return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
- case '1.2.840.10045.2.1':
- ndata.subjectPrivateKey = ndata.subjectPublicKey
- return {
- type: 'ec',
- data: ndata
- }
- case '1.2.840.10040.4.1':
- ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
- return {
- type: 'dsa',
- data: ndata.algorithm.params
- }
- default: throw new Error('unknown key id ' + subtype)
- }
- throw new Error('unknown key type ' + type)
- case 'ENCRYPTED PRIVATE KEY':
- data = asn1.EncryptedPrivateKey.decode(data, 'der')
- data = decrypt(data, password)
- // falls through
- case 'PRIVATE KEY':
- ndata = asn1.PrivateKey.decode(data, 'der')
- subtype = ndata.algorithm.algorithm.join('.')
- switch (subtype) {
- case '1.2.840.113549.1.1.1':
- return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
- case '1.2.840.10045.2.1':
- return {
- curve: ndata.algorithm.curve,
- privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
- }
- case '1.2.840.10040.4.1':
- ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
- return {
- type: 'dsa',
- params: ndata.algorithm.params
- }
- default: throw new Error('unknown key id ' + subtype)
- }
- throw new Error('unknown key type ' + type)
- case 'RSA PUBLIC KEY':
- return asn1.RSAPublicKey.decode(data, 'der')
- case 'RSA PRIVATE KEY':
- return asn1.RSAPrivateKey.decode(data, 'der')
- case 'DSA PRIVATE KEY':
- return {
- type: 'dsa',
- params: asn1.DSAPrivateKey.decode(data, 'der')
- }
- case 'EC PRIVATE KEY':
- data = asn1.ECPrivateKey.decode(data, 'der')
- return {
- curve: data.parameters.value,
- privateKey: data.privateKey
- }
- default: throw new Error('unknown key type ' + type)
- }
- }
- parseKeys.signature = asn1.signature
- function decrypt (data, password) {
- var salt = data.algorithm.decrypt.kde.kdeparams.salt
- var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
- var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
- var iv = data.algorithm.decrypt.cipher.iv
- var cipherText = data.subjectPrivateKey
- var keylen = parseInt(algo.split('-')[1], 10) / 8
- var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')
- var cipher = ciphers.createDecipheriv(algo, key, iv)
- var out = []
- out.push(cipher.update(cipherText))
- out.push(cipher.final())
- return Buffer.concat(out)
- }
- },{"./aesid.json":271,"./asn1":272,"./fixProc":274,"browserify-aes":152,"pbkdf2":278,"safe-buffer":318}],276:[function(require,module,exports){
- (function (process){
- // .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,
- // backported and transplited with Babel, with backwards-compat fixes
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // resolves . and .. elements in a path array with directory names there
- // must be no slashes, empty elements, or device names (c:\) in the array
- // (so also no leading and trailing slashes - it does not distinguish
- // relative and absolute paths)
- function normalizeArray(parts, allowAboveRoot) {
- // if the path tries to go above the root, `up` ends up > 0
- 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 the path is allowed to go above the root, restore leading ..s
- if (allowAboveRoot) {
- for (; up--; up) {
- parts.unshift('..');
- }
- }
- return parts;
- }
- // path.resolve([from ...], to)
- // posix version
- exports.resolve = function() {
- var resolvedPath = '',
- resolvedAbsolute = false;
- for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
- var path = (i >= 0) ? arguments[i] : process.cwd();
- // Skip empty and invalid entries
- if (typeof path !== 'string') {
- throw new TypeError('Arguments to path.resolve must be strings');
- } else if (!path) {
- continue;
- }
- resolvedPath = path + '/' + resolvedPath;
- resolvedAbsolute = path.charAt(0) === '/';
- }
- // At this point the path should be resolved to a full absolute path, but
- // handle relative paths to be safe (might happen when process.cwd() fails)
- // Normalize the path
- resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
- return !!p;
- }), !resolvedAbsolute).join('/');
- return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
- };
- // path.normalize(path)
- // posix version
- exports.normalize = function(path) {
- var isAbsolute = exports.isAbsolute(path),
- trailingSlash = substr(path, -1) === '/';
- // Normalize the path
- path = normalizeArray(filter(path.split('/'), function(p) {
- return !!p;
- }), !isAbsolute).join('/');
- if (!path && !isAbsolute) {
- path = '.';
- }
- if (path && trailingSlash) {
- path += '/';
- }
- return (isAbsolute ? '/' : '') + path;
- };
- // posix version
- exports.isAbsolute = function(path) {
- return path.charAt(0) === '/';
- };
- // posix version
- exports.join = function() {
- var paths = Array.prototype.slice.call(arguments, 0);
- return exports.normalize(filter(paths, function(p, index) {
- if (typeof p !== 'string') {
- throw new TypeError('Arguments to path.join must be strings');
- }
- return p;
- }).join('/'));
- };
- // path.relative(from, to)
- // posix version
- exports.relative = function(from, to) {
- from = exports.resolve(from).substr(1);
- to = exports.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('/');
- };
- exports.sep = '/';
- exports.delimiter = ':';
- exports.dirname = function (path) {
- if (typeof path !== 'string') path = path + '';
- if (path.length === 0) return '.';
- var code = path.charCodeAt(0);
- var hasRoot = code === 47 /*/*/;
- var end = -1;
- var matchedSlash = true;
- for (var i = path.length - 1; i >= 1; --i) {
- code = path.charCodeAt(i);
- if (code === 47 /*/*/) {
- if (!matchedSlash) {
- end = i;
- break;
- }
- } else {
- // We saw the first non-path separator
- matchedSlash = false;
- }
- }
- if (end === -1) return hasRoot ? '/' : '.';
- if (hasRoot && end === 1) {
- // return '//';
- // Backwards-compat fix:
- return '/';
- }
- return path.slice(0, end);
- };
- function basename(path) {
- if (typeof path !== 'string') path = path + '';
- var start = 0;
- var end = -1;
- var matchedSlash = true;
- var i;
- for (i = path.length - 1; i >= 0; --i) {
- if (path.charCodeAt(i) === 47 /*/*/) {
- // If we reached a path separator that was not part of a set of path
- // separators at the end of the string, stop now
- if (!matchedSlash) {
- start = i + 1;
- break;
- }
- } else if (end === -1) {
- // We saw the first non-path separator, mark this as the end of our
- // path component
- matchedSlash = false;
- end = i + 1;
- }
- }
- if (end === -1) return '';
- return path.slice(start, end);
- }
- // Uses a mixed approach for backwards-compatibility, as ext behavior changed
- // in new Node.js versions, so only basename() above is backported here
- exports.basename = function (path, ext) {
- var f = basename(path);
- if (ext && f.substr(-1 * ext.length) === ext) {
- f = f.substr(0, f.length - ext.length);
- }
- return f;
- };
- exports.extname = function (path) {
- if (typeof path !== 'string') path = path + '';
- var startDot = -1;
- var startPart = 0;
- var end = -1;
- var matchedSlash = true;
- // Track the state of characters (if any) we see before our first dot and
- // after any path separator we find
- var preDotState = 0;
- for (var i = path.length - 1; i >= 0; --i) {
- var code = path.charCodeAt(i);
- if (code === 47 /*/*/) {
- // If we reached a path separator that was not part of a set of path
- // separators at the end of the string, stop now
- if (!matchedSlash) {
- startPart = i + 1;
- break;
- }
- continue;
- }
- if (end === -1) {
- // We saw the first non-path separator, mark this as the end of our
- // extension
- matchedSlash = false;
- end = i + 1;
- }
- if (code === 46 /*.*/) {
- // If this is our first dot, mark it as the start of our extension
- if (startDot === -1)
- startDot = i;
- else if (preDotState !== 1)
- preDotState = 1;
- } else if (startDot !== -1) {
- // We saw a non-dot and non-path separator before our dot, so we should
- // have a good chance at having a non-empty extension
- preDotState = -1;
- }
- }
- if (startDot === -1 || end === -1 ||
- // We saw a non-dot character immediately before the dot
- preDotState === 0 ||
- // The (right-most) trimmed path component is exactly '..'
- preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
- return '';
- }
- return path.slice(startDot, end);
- };
- function filter (xs, f) {
- if (xs.filter) return xs.filter(f);
- var res = [];
- for (var i = 0; i < xs.length; i++) {
- if (f(xs[i], i, xs)) res.push(xs[i]);
- }
- return res;
- }
- // String.prototype.substr - negative index don't work in IE8
- var substr = 'ab'.substr(-1) === 'b'
- ? function (str, start, len) { return str.substr(start, len) }
- : function (str, start, len) {
- if (start < 0) start = str.length + start;
- return str.substr(start, len);
- }
- ;
- }).call(this,require('_process'))
- },{"_process":284}],277:[function(require,module,exports){
- 'use strict';
- module.exports = Pbf;
- var ieee754 = require('ieee754');
- function Pbf(buf) {
- this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
- this.pos = 0;
- this.type = 0;
- this.length = this.buf.length;
- }
- Pbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
- Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
- Pbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
- Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
- var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
- SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
- Pbf.prototype = {
- destroy: function() {
- this.buf = null;
- },
- // === READING =================================================================
- readFields: function(readField, result, end) {
- end = end || this.length;
- while (this.pos < end) {
- var val = this.readVarint(),
- tag = val >> 3,
- startPos = this.pos;
- this.type = val & 0x7;
- readField(tag, result, this);
- if (this.pos === startPos) this.skip(val);
- }
- return result;
- },
- readMessage: function(readField, result) {
- return this.readFields(readField, result, this.readVarint() + this.pos);
- },
- readFixed32: function() {
- var val = readUInt32(this.buf, this.pos);
- this.pos += 4;
- return val;
- },
- readSFixed32: function() {
- var val = readInt32(this.buf, this.pos);
- this.pos += 4;
- return val;
- },
- // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
- readFixed64: function() {
- var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
- this.pos += 8;
- return val;
- },
- readSFixed64: function() {
- var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
- this.pos += 8;
- return val;
- },
- readFloat: function() {
- var val = ieee754.read(this.buf, this.pos, true, 23, 4);
- this.pos += 4;
- return val;
- },
- readDouble: function() {
- var val = ieee754.read(this.buf, this.pos, true, 52, 8);
- this.pos += 8;
- return val;
- },
- readVarint: function(isSigned) {
- var buf = this.buf,
- val, b;
- b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val;
- b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val;
- b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;
- b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;
- b = buf[this.pos]; val |= (b & 0x0f) << 28;
- return readVarintRemainder(val, isSigned, this);
- },
- readVarint64: function() { // for compatibility with v2.0.1
- return this.readVarint(true);
- },
- readSVarint: function() {
- var num = this.readVarint();
- return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
- },
- readBoolean: function() {
- return Boolean(this.readVarint());
- },
- readString: function() {
- var end = this.readVarint() + this.pos,
- str = readUtf8(this.buf, this.pos, end);
- this.pos = end;
- return str;
- },
- readBytes: function() {
- var end = this.readVarint() + this.pos,
- buffer = this.buf.subarray(this.pos, end);
- this.pos = end;
- return buffer;
- },
- // verbose for performance reasons; doesn't affect gzipped size
- readPackedVarint: function(arr, isSigned) {
- if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));
- var end = readPackedEnd(this);
- arr = arr || [];
- while (this.pos < end) arr.push(this.readVarint(isSigned));
- return arr;
- },
- readPackedSVarint: function(arr) {
- if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());
- var end = readPackedEnd(this);
- arr = arr || [];
- while (this.pos < end) arr.push(this.readSVarint());
- return arr;
- },
- readPackedBoolean: function(arr) {
- if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());
- var end = readPackedEnd(this);
- arr = arr || [];
- while (this.pos < end) arr.push(this.readBoolean());
- return arr;
- },
- readPackedFloat: function(arr) {
- if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());
- var end = readPackedEnd(this);
- arr = arr || [];
- while (this.pos < end) arr.push(this.readFloat());
- return arr;
- },
- readPackedDouble: function(arr) {
- if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());
- var end = readPackedEnd(this);
- arr = arr || [];
- while (this.pos < end) arr.push(this.readDouble());
- return arr;
- },
- readPackedFixed32: function(arr) {
- if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());
- var end = readPackedEnd(this);
- arr = arr || [];
- while (this.pos < end) arr.push(this.readFixed32());
- return arr;
- },
- readPackedSFixed32: function(arr) {
- if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());
- var end = readPackedEnd(this);
- arr = arr || [];
- while (this.pos < end) arr.push(this.readSFixed32());
- return arr;
- },
- readPackedFixed64: function(arr) {
- if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());
- var end = readPackedEnd(this);
- arr = arr || [];
- while (this.pos < end) arr.push(this.readFixed64());
- return arr;
- },
- readPackedSFixed64: function(arr) {
- if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());
- var end = readPackedEnd(this);
- arr = arr || [];
- while (this.pos < end) arr.push(this.readSFixed64());
- return arr;
- },
- skip: function(val) {
- var type = val & 0x7;
- if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}
- else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;
- else if (type === Pbf.Fixed32) this.pos += 4;
- else if (type === Pbf.Fixed64) this.pos += 8;
- else throw new Error('Unimplemented type: ' + type);
- },
- // === WRITING =================================================================
- writeTag: function(tag, type) {
- this.writeVarint((tag << 3) | type);
- },
- realloc: function(min) {
- var length = this.length || 16;
- while (length < this.pos + min) length *= 2;
- if (length !== this.length) {
- var buf = new Uint8Array(length);
- buf.set(this.buf);
- this.buf = buf;
- this.length = length;
- }
- },
- finish: function() {
- this.length = this.pos;
- this.pos = 0;
- return this.buf.subarray(0, this.length);
- },
- writeFixed32: function(val) {
- this.realloc(4);
- writeInt32(this.buf, val, this.pos);
- this.pos += 4;
- },
- writeSFixed32: function(val) {
- this.realloc(4);
- writeInt32(this.buf, val, this.pos);
- this.pos += 4;
- },
- writeFixed64: function(val) {
- this.realloc(8);
- writeInt32(this.buf, val & -1, this.pos);
- writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
- this.pos += 8;
- },
- writeSFixed64: function(val) {
- this.realloc(8);
- writeInt32(this.buf, val & -1, this.pos);
- writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
- this.pos += 8;
- },
- writeVarint: function(val) {
- val = +val || 0;
- if (val > 0xfffffff || val < 0) {
- writeBigVarint(val, this);
- return;
- }
- this.realloc(4);
- this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
- this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
- this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
- this.buf[this.pos++] = (val >>> 7) & 0x7f;
- },
- writeSVarint: function(val) {
- this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
- },
- writeBoolean: function(val) {
- this.writeVarint(Boolean(val));
- },
- writeString: function(str) {
- str = String(str);
- this.realloc(str.length * 4);
- this.pos++; // reserve 1 byte for short string length
- var startPos = this.pos;
- // write the string directly to the buffer and see how much was written
- this.pos = writeUtf8(this.buf, str, this.pos);
- var len = this.pos - startPos;
- if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
- // finally, write the message length in the reserved place and restore the position
- this.pos = startPos - 1;
- this.writeVarint(len);
- this.pos += len;
- },
- writeFloat: function(val) {
- this.realloc(4);
- ieee754.write(this.buf, val, this.pos, true, 23, 4);
- this.pos += 4;
- },
- writeDouble: function(val) {
- this.realloc(8);
- ieee754.write(this.buf, val, this.pos, true, 52, 8);
- this.pos += 8;
- },
- writeBytes: function(buffer) {
- var len = buffer.length;
- this.writeVarint(len);
- this.realloc(len);
- for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];
- },
- writeRawMessage: function(fn, obj) {
- this.pos++; // reserve 1 byte for short message length
- // write the message directly to the buffer and see how much was written
- var startPos = this.pos;
- fn(obj, this);
- var len = this.pos - startPos;
- if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
- // finally, write the message length in the reserved place and restore the position
- this.pos = startPos - 1;
- this.writeVarint(len);
- this.pos += len;
- },
- writeMessage: function(tag, fn, obj) {
- this.writeTag(tag, Pbf.Bytes);
- this.writeRawMessage(fn, obj);
- },
- writePackedVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr); },
- writePackedSVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr); },
- writePackedBoolean: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr); },
- writePackedFloat: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr); },
- writePackedDouble: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr); },
- writePackedFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr); },
- writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },
- writePackedFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr); },
- writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },
- writeBytesField: function(tag, buffer) {
- this.writeTag(tag, Pbf.Bytes);
- this.writeBytes(buffer);
- },
- writeFixed32Field: function(tag, val) {
- this.writeTag(tag, Pbf.Fixed32);
- this.writeFixed32(val);
- },
- writeSFixed32Field: function(tag, val) {
- this.writeTag(tag, Pbf.Fixed32);
- this.writeSFixed32(val);
- },
- writeFixed64Field: function(tag, val) {
- this.writeTag(tag, Pbf.Fixed64);
- this.writeFixed64(val);
- },
- writeSFixed64Field: function(tag, val) {
- this.writeTag(tag, Pbf.Fixed64);
- this.writeSFixed64(val);
- },
- writeVarintField: function(tag, val) {
- this.writeTag(tag, Pbf.Varint);
- this.writeVarint(val);
- },
- writeSVarintField: function(tag, val) {
- this.writeTag(tag, Pbf.Varint);
- this.writeSVarint(val);
- },
- writeStringField: function(tag, str) {
- this.writeTag(tag, Pbf.Bytes);
- this.writeString(str);
- },
- writeFloatField: function(tag, val) {
- this.writeTag(tag, Pbf.Fixed32);
- this.writeFloat(val);
- },
- writeDoubleField: function(tag, val) {
- this.writeTag(tag, Pbf.Fixed64);
- this.writeDouble(val);
- },
- writeBooleanField: function(tag, val) {
- this.writeVarintField(tag, Boolean(val));
- }
- };
- function readVarintRemainder(l, s, p) {
- var buf = p.buf,
- h, b;
- b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) return toNum(l, h, s);
- b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) return toNum(l, h, s);
- b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);
- b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);
- b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);
- b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);
- throw new Error('Expected varint not more than 10 bytes');
- }
- function readPackedEnd(pbf) {
- return pbf.type === Pbf.Bytes ?
- pbf.readVarint() + pbf.pos : pbf.pos + 1;
- }
- function toNum(low, high, isSigned) {
- if (isSigned) {
- return high * 0x100000000 + (low >>> 0);
- }
- return ((high >>> 0) * 0x100000000) + (low >>> 0);
- }
- function writeBigVarint(val, pbf) {
- var low, high;
- if (val >= 0) {
- low = (val % 0x100000000) | 0;
- high = (val / 0x100000000) | 0;
- } else {
- low = ~(-val % 0x100000000);
- high = ~(-val / 0x100000000);
- if (low ^ 0xffffffff) {
- low = (low + 1) | 0;
- } else {
- low = 0;
- high = (high + 1) | 0;
- }
- }
- if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
- throw new Error('Given varint doesn\'t fit into 10 bytes');
- }
- pbf.realloc(10);
- writeBigVarintLow(low, high, pbf);
- writeBigVarintHigh(high, pbf);
- }
- function writeBigVarintLow(low, high, pbf) {
- pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
- pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
- pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
- pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
- pbf.buf[pbf.pos] = low & 0x7f;
- }
- function writeBigVarintHigh(high, pbf) {
- var lsb = (high & 0x07) << 4;
- pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) return;
- pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
- pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
- pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
- pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
- pbf.buf[pbf.pos++] = high & 0x7f;
- }
- function makeRoomForExtraLength(startPos, len, pbf) {
- var extraLen =
- len <= 0x3fff ? 1 :
- len <= 0x1fffff ? 2 :
- len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));
- // if 1 byte isn't enough for encoding message length, shift the data to the right
- pbf.realloc(extraLen);
- for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];
- }
- function writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]); }
- function writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]); }
- function writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]); }
- function writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]); }
- function writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]); }
- function writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]); }
- function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }
- function writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]); }
- function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }
- // Buffer code below from https://github.com/feross/buffer, MIT-licensed
- function readUInt32(buf, pos) {
- return ((buf[pos]) |
- (buf[pos + 1] << 8) |
- (buf[pos + 2] << 16)) +
- (buf[pos + 3] * 0x1000000);
- }
- function writeInt32(buf, val, pos) {
- buf[pos] = val;
- buf[pos + 1] = (val >>> 8);
- buf[pos + 2] = (val >>> 16);
- buf[pos + 3] = (val >>> 24);
- }
- function readInt32(buf, pos) {
- return ((buf[pos]) |
- (buf[pos + 1] << 8) |
- (buf[pos + 2] << 16)) +
- (buf[pos + 3] << 24);
- }
- function readUtf8(buf, pos, end) {
- var str = '';
- var i = pos;
- while (i < end) {
- var b0 = buf[i];
- var c = null; // codepoint
- var bytesPerSequence =
- b0 > 0xEF ? 4 :
- b0 > 0xDF ? 3 :
- b0 > 0xBF ? 2 : 1;
- if (i + bytesPerSequence > end) break;
- var b1, b2, b3;
- if (bytesPerSequence === 1) {
- if (b0 < 0x80) {
- c = b0;
- }
- } else if (bytesPerSequence === 2) {
- b1 = buf[i + 1];
- if ((b1 & 0xC0) === 0x80) {
- c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
- if (c <= 0x7F) {
- c = null;
- }
- }
- } else if (bytesPerSequence === 3) {
- b1 = buf[i + 1];
- b2 = buf[i + 2];
- if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
- c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
- if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
- c = null;
- }
- }
- } else if (bytesPerSequence === 4) {
- b1 = buf[i + 1];
- b2 = buf[i + 2];
- b3 = buf[i + 3];
- if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
- c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
- if (c <= 0xFFFF || c >= 0x110000) {
- c = null;
- }
- }
- }
- if (c === null) {
- c = 0xFFFD;
- bytesPerSequence = 1;
- } else if (c > 0xFFFF) {
- c -= 0x10000;
- str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
- c = 0xDC00 | c & 0x3FF;
- }
- str += String.fromCharCode(c);
- i += bytesPerSequence;
- }
- return str;
- }
- function writeUtf8(buf, str, pos) {
- for (var i = 0, c, lead; i < str.length; i++) {
- c = str.charCodeAt(i); // code point
- if (c > 0xD7FF && c < 0xE000) {
- if (lead) {
- if (c < 0xDC00) {
- buf[pos++] = 0xEF;
- buf[pos++] = 0xBF;
- buf[pos++] = 0xBD;
- lead = c;
- continue;
- } else {
- c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
- lead = null;
- }
- } else {
- if (c > 0xDBFF || (i + 1 === str.length)) {
- buf[pos++] = 0xEF;
- buf[pos++] = 0xBF;
- buf[pos++] = 0xBD;
- } else {
- lead = c;
- }
- continue;
- }
- } else if (lead) {
- buf[pos++] = 0xEF;
- buf[pos++] = 0xBF;
- buf[pos++] = 0xBD;
- lead = null;
- }
- if (c < 0x80) {
- buf[pos++] = c;
- } else {
- if (c < 0x800) {
- buf[pos++] = c >> 0x6 | 0xC0;
- } else {
- if (c < 0x10000) {
- buf[pos++] = c >> 0xC | 0xE0;
- } else {
- buf[pos++] = c >> 0x12 | 0xF0;
- buf[pos++] = c >> 0xC & 0x3F | 0x80;
- }
- buf[pos++] = c >> 0x6 & 0x3F | 0x80;
- }
- buf[pos++] = c & 0x3F | 0x80;
- }
- }
- return pos;
- }
- },{"ieee754":241}],278:[function(require,module,exports){
- exports.pbkdf2 = require('./lib/async')
- exports.pbkdf2Sync = require('./lib/sync')
- },{"./lib/async":279,"./lib/sync":282}],279:[function(require,module,exports){
- (function (process,global){
- var checkParameters = require('./precondition')
- var defaultEncoding = require('./default-encoding')
- var sync = require('./sync')
- var Buffer = require('safe-buffer').Buffer
- var ZERO_BUF
- var subtle = global.crypto && global.crypto.subtle
- var toBrowser = {
- 'sha': 'SHA-1',
- 'sha-1': 'SHA-1',
- 'sha1': 'SHA-1',
- 'sha256': 'SHA-256',
- 'sha-256': 'SHA-256',
- 'sha384': 'SHA-384',
- 'sha-384': 'SHA-384',
- 'sha-512': 'SHA-512',
- 'sha512': 'SHA-512'
- }
- var checks = []
- function checkNative (algo) {
- if (global.process && !global.process.browser) {
- return Promise.resolve(false)
- }
- if (!subtle || !subtle.importKey || !subtle.deriveBits) {
- return Promise.resolve(false)
- }
- if (checks[algo] !== undefined) {
- return checks[algo]
- }
- ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
- var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
- .then(function () {
- return true
- }).catch(function () {
- return false
- })
- checks[algo] = prom
- return prom
- }
- function browserPbkdf2 (password, salt, iterations, length, algo) {
- return subtle.importKey(
- 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']
- ).then(function (key) {
- return subtle.deriveBits({
- name: 'PBKDF2',
- salt: salt,
- iterations: iterations,
- hash: {
- name: algo
- }
- }, key, length << 3)
- }).then(function (res) {
- return Buffer.from(res)
- })
- }
- function resolvePromise (promise, callback) {
- promise.then(function (out) {
- process.nextTick(function () {
- callback(null, out)
- })
- }, function (e) {
- process.nextTick(function () {
- callback(e)
- })
- })
- }
- module.exports = function (password, salt, iterations, keylen, digest, callback) {
- if (typeof digest === 'function') {
- callback = digest
- digest = undefined
- }
- digest = digest || 'sha1'
- var algo = toBrowser[digest.toLowerCase()]
- if (!algo || typeof global.Promise !== 'function') {
- return process.nextTick(function () {
- var out
- try {
- out = sync(password, salt, iterations, keylen, digest)
- } catch (e) {
- return callback(e)
- }
- callback(null, out)
- })
- }
- checkParameters(password, salt, iterations, keylen)
- if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
- if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
- if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
- resolvePromise(checkNative(algo).then(function (resp) {
- if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)
- return sync(password, salt, iterations, keylen, digest)
- }), callback)
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"./default-encoding":280,"./precondition":281,"./sync":282,"_process":284,"safe-buffer":318}],280:[function(require,module,exports){
- (function (process){
- var defaultEncoding
- /* istanbul ignore next */
- if (process.browser) {
- defaultEncoding = 'utf-8'
- } else {
- var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
- defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
- }
- module.exports = defaultEncoding
- }).call(this,require('_process'))
- },{"_process":284}],281:[function(require,module,exports){
- (function (Buffer){
- var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
- function checkBuffer (buf, name) {
- if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {
- throw new TypeError(name + ' must be a buffer or string')
- }
- }
- module.exports = function (password, salt, iterations, keylen) {
- checkBuffer(password, 'Password')
- checkBuffer(salt, 'Salt')
- if (typeof iterations !== 'number') {
- throw new TypeError('Iterations not a number')
- }
- if (iterations < 0) {
- throw new TypeError('Bad iterations')
- }
- if (typeof keylen !== 'number') {
- throw new TypeError('Key length not a number')
- }
- if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
- throw new TypeError('Bad key length')
- }
- }
- }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
- },{"../../is-buffer/index.js":263}],282:[function(require,module,exports){
- var md5 = require('create-hash/md5')
- var RIPEMD160 = require('ripemd160')
- var sha = require('sha.js')
- var checkParameters = require('./precondition')
- var defaultEncoding = require('./default-encoding')
- var Buffer = require('safe-buffer').Buffer
- var ZEROS = Buffer.alloc(128)
- var sizes = {
- md5: 16,
- sha1: 20,
- sha224: 28,
- sha256: 32,
- sha384: 48,
- sha512: 64,
- rmd160: 20,
- ripemd160: 20
- }
- function Hmac (alg, key, saltLen) {
- var hash = getDigest(alg)
- var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
- if (key.length > blocksize) {
- key = hash(key)
- } else if (key.length < blocksize) {
- key = Buffer.concat([key, ZEROS], blocksize)
- }
- var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
- var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
- for (var i = 0; i < blocksize; i++) {
- ipad[i] = key[i] ^ 0x36
- opad[i] = key[i] ^ 0x5C
- }
- var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
- ipad.copy(ipad1, 0, 0, blocksize)
- this.ipad1 = ipad1
- this.ipad2 = ipad
- this.opad = opad
- this.alg = alg
- this.blocksize = blocksize
- this.hash = hash
- this.size = sizes[alg]
- }
- Hmac.prototype.run = function (data, ipad) {
- data.copy(ipad, this.blocksize)
- var h = this.hash(ipad)
- h.copy(this.opad, this.blocksize)
- return this.hash(this.opad)
- }
- function getDigest (alg) {
- function shaFunc (data) {
- return sha(alg).update(data).digest()
- }
- function rmd160Func (data) {
- return new RIPEMD160().update(data).digest()
- }
- if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func
- if (alg === 'md5') return md5
- return shaFunc
- }
- function pbkdf2 (password, salt, iterations, keylen, digest) {
- checkParameters(password, salt, iterations, keylen)
- if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
- if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
- digest = digest || 'sha1'
- var hmac = new Hmac(digest, password, salt.length)
- var DK = Buffer.allocUnsafe(keylen)
- var block1 = Buffer.allocUnsafe(salt.length + 4)
- salt.copy(block1, 0, 0, salt.length)
- var destPos = 0
- var hLen = sizes[digest]
- var l = Math.ceil(keylen / hLen)
- for (var i = 1; i <= l; i++) {
- block1.writeUInt32BE(i, salt.length)
- var T = hmac.run(block1, hmac.ipad1)
- var U = T
- for (var j = 1; j < iterations; j++) {
- U = hmac.run(U, hmac.ipad2)
- for (var k = 0; k < hLen; k++) T[k] ^= U[k]
- }
- T.copy(DK, destPos)
- destPos += hLen
- }
- return DK
- }
- module.exports = pbkdf2
- },{"./default-encoding":280,"./precondition":281,"create-hash/md5":189,"ripemd160":317,"safe-buffer":318,"sha.js":320}],283:[function(require,module,exports){
- (function (process){
- 'use strict';
- if (typeof process === 'undefined' ||
- !process.version ||
- process.version.indexOf('v0.') === 0 ||
- process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
- module.exports = { nextTick: nextTick };
- } else {
- module.exports = process
- }
- function nextTick(fn, arg1, arg2, arg3) {
- if (typeof fn !== 'function') {
- throw new TypeError('"callback" argument must be a function');
- }
- var len = arguments.length;
- var args, i;
- switch (len) {
- case 0:
- case 1:
- return process.nextTick(fn);
- case 2:
- return process.nextTick(function afterTickOne() {
- fn.call(null, arg1);
- });
- case 3:
- return process.nextTick(function afterTickTwo() {
- fn.call(null, arg1, arg2);
- });
- case 4:
- return process.nextTick(function afterTickThree() {
- fn.call(null, arg1, arg2, arg3);
- });
- default:
- args = new Array(len - 1);
- i = 0;
- while (i < args.length) {
- args[i++] = arguments[i];
- }
- return process.nextTick(function afterTick() {
- fn.apply(null, args);
- });
- }
- }
- }).call(this,require('_process'))
- },{"_process":284}],284:[function(require,module,exports){
- // shim for using process in browser
- var process = module.exports = {};
- // cached from whatever global is present so that test runners that stub it
- // don't break things. But we need to wrap it in a try catch in case it is
- // wrapped in strict mode code which doesn't define any globals. It's inside a
- // function because try/catches deoptimize in certain engines.
- var cachedSetTimeout;
- var cachedClearTimeout;
- function defaultSetTimout() {
- throw new Error('setTimeout has not been defined');
- }
- function defaultClearTimeout () {
- throw new Error('clearTimeout has not been defined');
- }
- (function () {
- try {
- if (typeof setTimeout === 'function') {
- cachedSetTimeout = setTimeout;
- } else {
- cachedSetTimeout = defaultSetTimout;
- }
- } catch (e) {
- cachedSetTimeout = defaultSetTimout;
- }
- try {
- if (typeof clearTimeout === 'function') {
- cachedClearTimeout = clearTimeout;
- } else {
- cachedClearTimeout = defaultClearTimeout;
- }
- } catch (e) {
- cachedClearTimeout = defaultClearTimeout;
- }
- } ())
- function runTimeout(fun) {
- if (cachedSetTimeout === setTimeout) {
- //normal enviroments in sane situations
- return setTimeout(fun, 0);
- }
- // if setTimeout wasn't available but was latter defined
- if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
- cachedSetTimeout = setTimeout;
- return setTimeout(fun, 0);
- }
- try {
- // when when somebody has screwed with setTimeout but no I.E. maddness
- return cachedSetTimeout(fun, 0);
- } catch(e){
- try {
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
- return cachedSetTimeout.call(null, fun, 0);
- } catch(e){
- // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
- return cachedSetTimeout.call(this, fun, 0);
- }
- }
- }
- function runClearTimeout(marker) {
- if (cachedClearTimeout === clearTimeout) {
- //normal enviroments in sane situations
- return clearTimeout(marker);
- }
- // if clearTimeout wasn't available but was latter defined
- if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
- cachedClearTimeout = clearTimeout;
- return clearTimeout(marker);
- }
- try {
- // when when somebody has screwed with setTimeout but no I.E. maddness
- return cachedClearTimeout(marker);
- } catch (e){
- try {
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
- return cachedClearTimeout.call(null, marker);
- } catch (e){
- // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
- // Some versions of I.E. have different rules for clearTimeout vs setTimeout
- return cachedClearTimeout.call(this, marker);
- }
- }
- }
- var queue = [];
- var draining = false;
- var currentQueue;
- var queueIndex = -1;
- function cleanUpNextTick() {
- if (!draining || !currentQueue) {
- return;
- }
- draining = false;
- if (currentQueue.length) {
- queue = currentQueue.concat(queue);
- } else {
- queueIndex = -1;
- }
- if (queue.length) {
- drainQueue();
- }
- }
- function drainQueue() {
- if (draining) {
- return;
- }
- var timeout = runTimeout(cleanUpNextTick);
- draining = true;
- var len = queue.length;
- while(len) {
- currentQueue = queue;
- queue = [];
- while (++queueIndex < len) {
- if (currentQueue) {
- currentQueue[queueIndex].run();
- }
- }
- queueIndex = -1;
- len = queue.length;
- }
- currentQueue = null;
- draining = false;
- runClearTimeout(timeout);
- }
- process.nextTick = function (fun) {
- var args = new Array(arguments.length - 1);
- if (arguments.length > 1) {
- for (var i = 1; i < arguments.length; i++) {
- args[i - 1] = arguments[i];
- }
- }
- queue.push(new Item(fun, args));
- if (queue.length === 1 && !draining) {
- runTimeout(drainQueue);
- }
- };
- // v8 likes predictible objects
- function Item(fun, array) {
- this.fun = fun;
- this.array = array;
- }
- Item.prototype.run = function () {
- this.fun.apply(null, this.array);
- };
- process.title = 'browser';
- process.browser = true;
- process.env = {};
- process.argv = [];
- process.version = ''; // empty string to avoid regexp issues
- process.versions = {};
- function noop() {}
- process.on = noop;
- process.addListener = noop;
- process.once = noop;
- process.off = noop;
- process.removeListener = noop;
- process.removeAllListeners = noop;
- process.emit = noop;
- process.prependListener = noop;
- process.prependOnceListener = noop;
- process.listeners = function (name) { return [] }
- process.binding = function (name) {
- throw new Error('process.binding is not supported');
- };
- process.cwd = function () { return '/' };
- process.chdir = function (dir) {
- throw new Error('process.chdir is not supported');
- };
- process.umask = function() { return 0; };
- },{}],285:[function(require,module,exports){
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global.proj4 = factory());
- }(this, (function () { 'use strict';
- var globals = function(defs) {
- defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees");
- defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees");
- defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");
- defs.WGS84 = defs['EPSG:4326'];
- defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857
- defs.GOOGLE = defs['EPSG:3857'];
- defs['EPSG:900913'] = defs['EPSG:3857'];
- defs['EPSG:102113'] = defs['EPSG:3857'];
- };
- var PJD_3PARAM = 1;
- var PJD_7PARAM = 2;
- var PJD_WGS84 = 4; // WGS84 or equivalent
- var PJD_NODATUM = 5; // WGS84 or equivalent
- var SEC_TO_RAD = 4.84813681109535993589914102357e-6;
- var HALF_PI = Math.PI/2;
- // ellipoid pj_set_ell.c
- var SIXTH = 0.1666666666666666667;
- /* 1/6 */
- var RA4 = 0.04722222222222222222;
- /* 17/360 */
- var RA6 = 0.02215608465608465608;
- var EPSLN = (typeof Number.EPSILON === 'undefined') ? 1.0e-10 : Number.EPSILON;
- var D2R = 0.01745329251994329577;
- var R2D = 57.29577951308232088;
- var FORTPI = Math.PI/4;
- var TWO_PI = Math.PI * 2;
- // SPI is slightly greater than Math.PI, so values that exceed the -180..180
- // degree range by a tiny amount don't get wrapped. This prevents points that
- // have drifted from their original location along the 180th meridian (due to
- // floating point error) from changing their sign.
- var SPI = 3.14159265359;
- var exports$1 = {};
- exports$1.greenwich = 0.0; //"0dE",
- exports$1.lisbon = -9.131906111111; //"9d07'54.862\"W",
- exports$1.paris = 2.337229166667; //"2d20'14.025\"E",
- exports$1.bogota = -74.080916666667; //"74d04'51.3\"W",
- exports$1.madrid = -3.687938888889; //"3d41'16.58\"W",
- exports$1.rome = 12.452333333333; //"12d27'8.4\"E",
- exports$1.bern = 7.439583333333; //"7d26'22.5\"E",
- exports$1.jakarta = 106.807719444444; //"106d48'27.79\"E",
- exports$1.ferro = -17.666666666667; //"17d40'W",
- exports$1.brussels = 4.367975; //"4d22'4.71\"E",
- exports$1.stockholm = 18.058277777778; //"18d3'29.8\"E",
- exports$1.athens = 23.7163375; //"23d42'58.815\"E",
- exports$1.oslo = 10.722916666667; //"10d43'22.5\"E"
- var units = {
- ft: {to_meter: 0.3048},
- 'us-ft': {to_meter: 1200 / 3937}
- };
- var ignoredChar = /[\s_\-\/\(\)]/g;
- function match(obj, key) {
- if (obj[key]) {
- return obj[key];
- }
- var keys = Object.keys(obj);
- var lkey = key.toLowerCase().replace(ignoredChar, '');
- var i = -1;
- var testkey, processedKey;
- while (++i < keys.length) {
- testkey = keys[i];
- processedKey = testkey.toLowerCase().replace(ignoredChar, '');
- if (processedKey === lkey) {
- return obj[testkey];
- }
- }
- }
- var parseProj = function(defData) {
- var self = {};
- var paramObj = defData.split('+').map(function(v) {
- return v.trim();
- }).filter(function(a) {
- return a;
- }).reduce(function(p, a) {
- var split = a.split('=');
- split.push(true);
- p[split[0].toLowerCase()] = split[1];
- return p;
- }, {});
- var paramName, paramVal, paramOutname;
- var params = {
- proj: 'projName',
- datum: 'datumCode',
- rf: function(v) {
- self.rf = parseFloat(v);
- },
- lat_0: function(v) {
- self.lat0 = v * D2R;
- },
- lat_1: function(v) {
- self.lat1 = v * D2R;
- },
- lat_2: function(v) {
- self.lat2 = v * D2R;
- },
- lat_ts: function(v) {
- self.lat_ts = v * D2R;
- },
- lon_0: function(v) {
- self.long0 = v * D2R;
- },
- lon_1: function(v) {
- self.long1 = v * D2R;
- },
- lon_2: function(v) {
- self.long2 = v * D2R;
- },
- alpha: function(v) {
- self.alpha = parseFloat(v) * D2R;
- },
- lonc: function(v) {
- self.longc = v * D2R;
- },
- x_0: function(v) {
- self.x0 = parseFloat(v);
- },
- y_0: function(v) {
- self.y0 = parseFloat(v);
- },
- k_0: function(v) {
- self.k0 = parseFloat(v);
- },
- k: function(v) {
- self.k0 = parseFloat(v);
- },
- a: function(v) {
- self.a = parseFloat(v);
- },
- b: function(v) {
- self.b = parseFloat(v);
- },
- r_a: function() {
- self.R_A = true;
- },
- zone: function(v) {
- self.zone = parseInt(v, 10);
- },
- south: function() {
- self.utmSouth = true;
- },
- towgs84: function(v) {
- self.datum_params = v.split(",").map(function(a) {
- return parseFloat(a);
- });
- },
- to_meter: function(v) {
- self.to_meter = parseFloat(v);
- },
- units: function(v) {
- self.units = v;
- var unit = match(units, v);
- if (unit) {
- self.to_meter = unit.to_meter;
- }
- },
- from_greenwich: function(v) {
- self.from_greenwich = v * D2R;
- },
- pm: function(v) {
- var pm = match(exports$1, v);
- self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;
- },
- nadgrids: function(v) {
- if (v === '@null') {
- self.datumCode = 'none';
- }
- else {
- self.nadgrids = v;
- }
- },
- axis: function(v) {
- var legalAxis = "ewnsud";
- if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {
- self.axis = v;
- }
- }
- };
- for (paramName in paramObj) {
- paramVal = paramObj[paramName];
- if (paramName in params) {
- paramOutname = params[paramName];
- if (typeof paramOutname === 'function') {
- paramOutname(paramVal);
- }
- else {
- self[paramOutname] = paramVal;
- }
- }
- else {
- self[paramName] = paramVal;
- }
- }
- if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){
- self.datumCode = self.datumCode.toLowerCase();
- }
- return self;
- };
- var NEUTRAL = 1;
- var KEYWORD = 2;
- var NUMBER = 3;
- var QUOTED = 4;
- var AFTERQUOTE = 5;
- var ENDED = -1;
- var whitespace = /\s/;
- var latin = /[A-Za-z]/;
- var keyword = /[A-Za-z84]/;
- var endThings = /[,\]]/;
- var digets = /[\d\.E\-\+]/;
- // const ignoredChar = /[\s_\-\/\(\)]/g;
- function Parser(text) {
- if (typeof text !== 'string') {
- throw new Error('not a string');
- }
- this.text = text.trim();
- this.level = 0;
- this.place = 0;
- this.root = null;
- this.stack = [];
- this.currentObject = null;
- this.state = NEUTRAL;
- }
- Parser.prototype.readCharicter = function() {
- var char = this.text[this.place++];
- if (this.state !== QUOTED) {
- while (whitespace.test(char)) {
- if (this.place >= this.text.length) {
- return;
- }
- char = this.text[this.place++];
- }
- }
- switch (this.state) {
- case NEUTRAL:
- return this.neutral(char);
- case KEYWORD:
- return this.keyword(char)
- case QUOTED:
- return this.quoted(char);
- case AFTERQUOTE:
- return this.afterquote(char);
- case NUMBER:
- return this.number(char);
- case ENDED:
- return;
- }
- };
- Parser.prototype.afterquote = function(char) {
- if (char === '"') {
- this.word += '"';
- this.state = QUOTED;
- return;
- }
- if (endThings.test(char)) {
- this.word = this.word.trim();
- this.afterItem(char);
- return;
- }
- throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place);
- };
- Parser.prototype.afterItem = function(char) {
- if (char === ',') {
- if (this.word !== null) {
- this.currentObject.push(this.word);
- }
- this.word = null;
- this.state = NEUTRAL;
- return;
- }
- if (char === ']') {
- this.level--;
- if (this.word !== null) {
- this.currentObject.push(this.word);
- this.word = null;
- }
- this.state = NEUTRAL;
- this.currentObject = this.stack.pop();
- if (!this.currentObject) {
- this.state = ENDED;
- }
- return;
- }
- };
- Parser.prototype.number = function(char) {
- if (digets.test(char)) {
- this.word += char;
- return;
- }
- if (endThings.test(char)) {
- this.word = parseFloat(this.word);
- this.afterItem(char);
- return;
- }
- throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place);
- };
- Parser.prototype.quoted = function(char) {
- if (char === '"') {
- this.state = AFTERQUOTE;
- return;
- }
- this.word += char;
- return;
- };
- Parser.prototype.keyword = function(char) {
- if (keyword.test(char)) {
- this.word += char;
- return;
- }
- if (char === '[') {
- var newObjects = [];
- newObjects.push(this.word);
- this.level++;
- if (this.root === null) {
- this.root = newObjects;
- } else {
- this.currentObject.push(newObjects);
- }
- this.stack.push(this.currentObject);
- this.currentObject = newObjects;
- this.state = NEUTRAL;
- return;
- }
- if (endThings.test(char)) {
- this.afterItem(char);
- return;
- }
- throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place);
- };
- Parser.prototype.neutral = function(char) {
- if (latin.test(char)) {
- this.word = char;
- this.state = KEYWORD;
- return;
- }
- if (char === '"') {
- this.word = '';
- this.state = QUOTED;
- return;
- }
- if (digets.test(char)) {
- this.word = char;
- this.state = NUMBER;
- return;
- }
- if (endThings.test(char)) {
- this.afterItem(char);
- return;
- }
- throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place);
- };
- Parser.prototype.output = function() {
- while (this.place < this.text.length) {
- this.readCharicter();
- }
- if (this.state === ENDED) {
- return this.root;
- }
- throw new Error('unable to parse string "' +this.text + '". State is ' + this.state);
- };
- function parseString(txt) {
- var parser = new Parser(txt);
- return parser.output();
- }
- function mapit(obj, key, value) {
- if (Array.isArray(key)) {
- value.unshift(key);
- key = null;
- }
- var thing = key ? {} : obj;
- var out = value.reduce(function(newObj, item) {
- sExpr(item, newObj);
- return newObj
- }, thing);
- if (key) {
- obj[key] = out;
- }
- }
- function sExpr(v, obj) {
- if (!Array.isArray(v)) {
- obj[v] = true;
- return;
- }
- var key = v.shift();
- if (key === 'PARAMETER') {
- key = v.shift();
- }
- if (v.length === 1) {
- if (Array.isArray(v[0])) {
- obj[key] = {};
- sExpr(v[0], obj[key]);
- return;
- }
- obj[key] = v[0];
- return;
- }
- if (!v.length) {
- obj[key] = true;
- return;
- }
- if (key === 'TOWGS84') {
- obj[key] = v;
- return;
- }
- if (!Array.isArray(key)) {
- obj[key] = {};
- }
- var i;
- switch (key) {
- case 'UNIT':
- case 'PRIMEM':
- case 'VERT_DATUM':
- obj[key] = {
- name: v[0].toLowerCase(),
- convert: v[1]
- };
- if (v.length === 3) {
- sExpr(v[2], obj[key]);
- }
- return;
- case 'SPHEROID':
- case 'ELLIPSOID':
- obj[key] = {
- name: v[0],
- a: v[1],
- rf: v[2]
- };
- if (v.length === 4) {
- sExpr(v[3], obj[key]);
- }
- return;
- case 'PROJECTEDCRS':
- case 'PROJCRS':
- case 'GEOGCS':
- case 'GEOCCS':
- case 'PROJCS':
- case 'LOCAL_CS':
- case 'GEODCRS':
- case 'GEODETICCRS':
- case 'GEODETICDATUM':
- case 'EDATUM':
- case 'ENGINEERINGDATUM':
- case 'VERT_CS':
- case 'VERTCRS':
- case 'VERTICALCRS':
- case 'COMPD_CS':
- case 'COMPOUNDCRS':
- case 'ENGINEERINGCRS':
- case 'ENGCRS':
- case 'FITTED_CS':
- case 'LOCAL_DATUM':
- case 'DATUM':
- v[0] = ['name', v[0]];
- mapit(obj, key, v);
- return;
- default:
- i = -1;
- while (++i < v.length) {
- if (!Array.isArray(v[i])) {
- return sExpr(v, obj[key]);
- }
- }
- return mapit(obj, key, v);
- }
- }
- var D2R$1 = 0.01745329251994329577;
- function rename(obj, params) {
- var outName = params[0];
- var inName = params[1];
- if (!(outName in obj) && (inName in obj)) {
- obj[outName] = obj[inName];
- if (params.length === 3) {
- obj[outName] = params[2](obj[outName]);
- }
- }
- }
- function d2r(input) {
- return input * D2R$1;
- }
- function cleanWKT(wkt) {
- if (wkt.type === 'GEOGCS') {
- wkt.projName = 'longlat';
- } else if (wkt.type === 'LOCAL_CS') {
- wkt.projName = 'identity';
- wkt.local = true;
- } else {
- if (typeof wkt.PROJECTION === 'object') {
- wkt.projName = Object.keys(wkt.PROJECTION)[0];
- } else {
- wkt.projName = wkt.PROJECTION;
- }
- }
- if (wkt.UNIT) {
- wkt.units = wkt.UNIT.name.toLowerCase();
- if (wkt.units === 'metre') {
- wkt.units = 'meter';
- }
- if (wkt.UNIT.convert) {
- if (wkt.type === 'GEOGCS') {
- if (wkt.DATUM && wkt.DATUM.SPHEROID) {
- wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;
- }
- } else {
- wkt.to_meter = wkt.UNIT.convert, 10;
- }
- }
- }
- var geogcs = wkt.GEOGCS;
- if (wkt.type === 'GEOGCS') {
- geogcs = wkt;
- }
- if (geogcs) {
- //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){
- // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;
- //}
- if (geogcs.DATUM) {
- wkt.datumCode = geogcs.DATUM.name.toLowerCase();
- } else {
- wkt.datumCode = geogcs.name.toLowerCase();
- }
- if (wkt.datumCode.slice(0, 2) === 'd_') {
- wkt.datumCode = wkt.datumCode.slice(2);
- }
- if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {
- wkt.datumCode = 'nzgd49';
- }
- if (wkt.datumCode === 'wgs_1984') {
- if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {
- wkt.sphere = true;
- }
- wkt.datumCode = 'wgs84';
- }
- if (wkt.datumCode.slice(-6) === '_ferro') {
- wkt.datumCode = wkt.datumCode.slice(0, - 6);
- }
- if (wkt.datumCode.slice(-8) === '_jakarta') {
- wkt.datumCode = wkt.datumCode.slice(0, - 8);
- }
- if (~wkt.datumCode.indexOf('belge')) {
- wkt.datumCode = 'rnb72';
- }
- if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {
- wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk');
- if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {
- wkt.ellps = 'intl';
- }
- wkt.a = geogcs.DATUM.SPHEROID.a;
- wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);
- }
- if (~wkt.datumCode.indexOf('osgb_1936')) {
- wkt.datumCode = 'osgb36';
- }
- }
- if (wkt.b && !isFinite(wkt.b)) {
- wkt.b = wkt.a;
- }
- function toMeter(input) {
- var ratio = wkt.to_meter || 1;
- return input * ratio;
- }
- var renamer = function(a) {
- return rename(wkt, a);
- };
- var list = [
- ['standard_parallel_1', 'Standard_Parallel_1'],
- ['standard_parallel_2', 'Standard_Parallel_2'],
- ['false_easting', 'False_Easting'],
- ['false_northing', 'False_Northing'],
- ['central_meridian', 'Central_Meridian'],
- ['latitude_of_origin', 'Latitude_Of_Origin'],
- ['latitude_of_origin', 'Central_Parallel'],
- ['scale_factor', 'Scale_Factor'],
- ['k0', 'scale_factor'],
- ['latitude_of_center', 'Latitude_of_center'],
- ['lat0', 'latitude_of_center', d2r],
- ['longitude_of_center', 'Longitude_Of_Center'],
- ['longc', 'longitude_of_center', d2r],
- ['x0', 'false_easting', toMeter],
- ['y0', 'false_northing', toMeter],
- ['long0', 'central_meridian', d2r],
- ['lat0', 'latitude_of_origin', d2r],
- ['lat0', 'standard_parallel_1', d2r],
- ['lat1', 'standard_parallel_1', d2r],
- ['lat2', 'standard_parallel_2', d2r],
- ['alpha', 'azimuth', d2r],
- ['srsCode', 'name']
- ];
- list.forEach(renamer);
- if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {
- wkt.long0 = wkt.longc;
- }
- if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {
- wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);
- wkt.lat_ts = wkt.lat1;
- }
- }
- var wkt = function(wkt) {
- var lisp = parseString(wkt);
- var type = lisp.shift();
- var name = lisp.shift();
- lisp.unshift(['name', name]);
- lisp.unshift(['type', type]);
- var obj = {};
- sExpr(lisp, obj);
- cleanWKT(obj);
- return obj;
- };
- function defs(name) {
- /*global console*/
- var that = this;
- if (arguments.length === 2) {
- var def = arguments[1];
- if (typeof def === 'string') {
- if (def.charAt(0) === '+') {
- defs[name] = parseProj(arguments[1]);
- }
- else {
- defs[name] = wkt(arguments[1]);
- }
- } else {
- defs[name] = def;
- }
- }
- else if (arguments.length === 1) {
- if (Array.isArray(name)) {
- return name.map(function(v) {
- if (Array.isArray(v)) {
- defs.apply(that, v);
- }
- else {
- defs(v);
- }
- });
- }
- else if (typeof name === 'string') {
- if (name in defs) {
- return defs[name];
- }
- }
- else if ('EPSG' in name) {
- defs['EPSG:' + name.EPSG] = name;
- }
- else if ('ESRI' in name) {
- defs['ESRI:' + name.ESRI] = name;
- }
- else if ('IAU2000' in name) {
- defs['IAU2000:' + name.IAU2000] = name;
- }
- else {
- console.log(name);
- }
- return;
- }
- }
- globals(defs);
- function testObj(code){
- return typeof code === 'string';
- }
- function testDef(code){
- return code in defs;
- }
- var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];
- function testWKT(code){
- return codeWords.some(function (word) {
- return code.indexOf(word) > -1;
- });
- }
- function testProj(code){
- return code[0] === '+';
- }
- function parse(code){
- if (testObj(code)) {
- //check to see if this is a WKT string
- if (testDef(code)) {
- return defs[code];
- }
- if (testWKT(code)) {
- return wkt(code);
- }
- if (testProj(code)) {
- return parseProj(code);
- }
- }else{
- return code;
- }
- }
- var extend = function(destination, source) {
- destination = destination || {};
- var value, property;
- if (!source) {
- return destination;
- }
- for (property in source) {
- value = source[property];
- if (value !== undefined) {
- destination[property] = value;
- }
- }
- return destination;
- };
- var msfnz = function(eccent, sinphi, cosphi) {
- var con = eccent * sinphi;
- return cosphi / (Math.sqrt(1 - con * con));
- };
- var sign = function(x) {
- return x<0 ? -1 : 1;
- };
- var adjust_lon = function(x) {
- return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));
- };
- var tsfnz = function(eccent, phi, sinphi) {
- var con = eccent * sinphi;
- var com = 0.5 * eccent;
- con = Math.pow(((1 - con) / (1 + con)), com);
- return (Math.tan(0.5 * (HALF_PI - phi)) / con);
- };
- var phi2z = function(eccent, ts) {
- var eccnth = 0.5 * eccent;
- var con, dphi;
- var phi = HALF_PI - 2 * Math.atan(ts);
- for (var i = 0; i <= 15; i++) {
- con = eccent * Math.sin(phi);
- dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;
- phi += dphi;
- if (Math.abs(dphi) <= 0.0000000001) {
- return phi;
- }
- }
- //console.log("phi2z has NoConvergence");
- return -9999;
- };
- function init() {
- var con = this.b / this.a;
- this.es = 1 - con * con;
- if(!('x0' in this)){
- this.x0 = 0;
- }
- if(!('y0' in this)){
- this.y0 = 0;
- }
- this.e = Math.sqrt(this.es);
- if (this.lat_ts) {
- if (this.sphere) {
- this.k0 = Math.cos(this.lat_ts);
- }
- else {
- this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
- }
- }
- else {
- if (!this.k0) {
- if (this.k) {
- this.k0 = this.k;
- }
- else {
- this.k0 = 1;
- }
- }
- }
- }
- /* Mercator forward equations--mapping lat,long to x,y
- --------------------------------------------------*/
- function forward(p) {
- var lon = p.x;
- var lat = p.y;
- // convert to radians
- if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {
- return null;
- }
- var x, y;
- if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {
- return null;
- }
- else {
- if (this.sphere) {
- x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
- y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));
- }
- else {
- var sinphi = Math.sin(lat);
- var ts = tsfnz(this.e, lat, sinphi);
- x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
- y = this.y0 - this.a * this.k0 * Math.log(ts);
- }
- p.x = x;
- p.y = y;
- return p;
- }
- }
- /* Mercator inverse equations--mapping x,y to lat/long
- --------------------------------------------------*/
- function inverse(p) {
- var x = p.x - this.x0;
- var y = p.y - this.y0;
- var lon, lat;
- if (this.sphere) {
- lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));
- }
- else {
- var ts = Math.exp(-y / (this.a * this.k0));
- lat = phi2z(this.e, ts);
- if (lat === -9999) {
- return null;
- }
- }
- lon = adjust_lon(this.long0 + x / (this.a * this.k0));
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$1 = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"];
- var merc = {
- init: init,
- forward: forward,
- inverse: inverse,
- names: names$1
- };
- function init$1() {
- //no-op for longlat
- }
- function identity(pt) {
- return pt;
- }
- var names$2 = ["longlat", "identity"];
- var longlat = {
- init: init$1,
- forward: identity,
- inverse: identity,
- names: names$2
- };
- var projs = [merc, longlat];
- var names$$1 = {};
- var projStore = [];
- function add(proj, i) {
- var len = projStore.length;
- if (!proj.names) {
- console.log(i);
- return true;
- }
- projStore[len] = proj;
- proj.names.forEach(function(n) {
- names$$1[n.toLowerCase()] = len;
- });
- return this;
- }
- function get(name) {
- if (!name) {
- return false;
- }
- var n = name.toLowerCase();
- if (typeof names$$1[n] !== 'undefined' && projStore[names$$1[n]]) {
- return projStore[names$$1[n]];
- }
- }
- function start() {
- projs.forEach(add);
- }
- var projections = {
- start: start,
- add: add,
- get: get
- };
- var exports$2 = {};
- exports$2.MERIT = {
- a: 6378137.0,
- rf: 298.257,
- ellipseName: "MERIT 1983"
- };
- exports$2.SGS85 = {
- a: 6378136.0,
- rf: 298.257,
- ellipseName: "Soviet Geodetic System 85"
- };
- exports$2.GRS80 = {
- a: 6378137.0,
- rf: 298.257222101,
- ellipseName: "GRS 1980(IUGG, 1980)"
- };
- exports$2.IAU76 = {
- a: 6378140.0,
- rf: 298.257,
- ellipseName: "IAU 1976"
- };
- exports$2.airy = {
- a: 6377563.396,
- b: 6356256.910,
- ellipseName: "Airy 1830"
- };
- exports$2.APL4 = {
- a: 6378137,
- rf: 298.25,
- ellipseName: "Appl. Physics. 1965"
- };
- exports$2.NWL9D = {
- a: 6378145.0,
- rf: 298.25,
- ellipseName: "Naval Weapons Lab., 1965"
- };
- exports$2.mod_airy = {
- a: 6377340.189,
- b: 6356034.446,
- ellipseName: "Modified Airy"
- };
- exports$2.andrae = {
- a: 6377104.43,
- rf: 300.0,
- ellipseName: "Andrae 1876 (Den., Iclnd.)"
- };
- exports$2.aust_SA = {
- a: 6378160.0,
- rf: 298.25,
- ellipseName: "Australian Natl & S. Amer. 1969"
- };
- exports$2.GRS67 = {
- a: 6378160.0,
- rf: 298.2471674270,
- ellipseName: "GRS 67(IUGG 1967)"
- };
- exports$2.bessel = {
- a: 6377397.155,
- rf: 299.1528128,
- ellipseName: "Bessel 1841"
- };
- exports$2.bess_nam = {
- a: 6377483.865,
- rf: 299.1528128,
- ellipseName: "Bessel 1841 (Namibia)"
- };
- exports$2.clrk66 = {
- a: 6378206.4,
- b: 6356583.8,
- ellipseName: "Clarke 1866"
- };
- exports$2.clrk80 = {
- a: 6378249.145,
- rf: 293.4663,
- ellipseName: "Clarke 1880 mod."
- };
- exports$2.clrk58 = {
- a: 6378293.645208759,
- rf: 294.2606763692654,
- ellipseName: "Clarke 1858"
- };
- exports$2.CPM = {
- a: 6375738.7,
- rf: 334.29,
- ellipseName: "Comm. des Poids et Mesures 1799"
- };
- exports$2.delmbr = {
- a: 6376428.0,
- rf: 311.5,
- ellipseName: "Delambre 1810 (Belgium)"
- };
- exports$2.engelis = {
- a: 6378136.05,
- rf: 298.2566,
- ellipseName: "Engelis 1985"
- };
- exports$2.evrst30 = {
- a: 6377276.345,
- rf: 300.8017,
- ellipseName: "Everest 1830"
- };
- exports$2.evrst48 = {
- a: 6377304.063,
- rf: 300.8017,
- ellipseName: "Everest 1948"
- };
- exports$2.evrst56 = {
- a: 6377301.243,
- rf: 300.8017,
- ellipseName: "Everest 1956"
- };
- exports$2.evrst69 = {
- a: 6377295.664,
- rf: 300.8017,
- ellipseName: "Everest 1969"
- };
- exports$2.evrstSS = {
- a: 6377298.556,
- rf: 300.8017,
- ellipseName: "Everest (Sabah & Sarawak)"
- };
- exports$2.fschr60 = {
- a: 6378166.0,
- rf: 298.3,
- ellipseName: "Fischer (Mercury Datum) 1960"
- };
- exports$2.fschr60m = {
- a: 6378155.0,
- rf: 298.3,
- ellipseName: "Fischer 1960"
- };
- exports$2.fschr68 = {
- a: 6378150.0,
- rf: 298.3,
- ellipseName: "Fischer 1968"
- };
- exports$2.helmert = {
- a: 6378200.0,
- rf: 298.3,
- ellipseName: "Helmert 1906"
- };
- exports$2.hough = {
- a: 6378270.0,
- rf: 297.0,
- ellipseName: "Hough"
- };
- exports$2.intl = {
- a: 6378388.0,
- rf: 297.0,
- ellipseName: "International 1909 (Hayford)"
- };
- exports$2.kaula = {
- a: 6378163.0,
- rf: 298.24,
- ellipseName: "Kaula 1961"
- };
- exports$2.lerch = {
- a: 6378139.0,
- rf: 298.257,
- ellipseName: "Lerch 1979"
- };
- exports$2.mprts = {
- a: 6397300.0,
- rf: 191.0,
- ellipseName: "Maupertius 1738"
- };
- exports$2.new_intl = {
- a: 6378157.5,
- b: 6356772.2,
- ellipseName: "New International 1967"
- };
- exports$2.plessis = {
- a: 6376523.0,
- rf: 6355863.0,
- ellipseName: "Plessis 1817 (France)"
- };
- exports$2.krass = {
- a: 6378245.0,
- rf: 298.3,
- ellipseName: "Krassovsky, 1942"
- };
- exports$2.SEasia = {
- a: 6378155.0,
- b: 6356773.3205,
- ellipseName: "Southeast Asia"
- };
- exports$2.walbeck = {
- a: 6376896.0,
- b: 6355834.8467,
- ellipseName: "Walbeck"
- };
- exports$2.WGS60 = {
- a: 6378165.0,
- rf: 298.3,
- ellipseName: "WGS 60"
- };
- exports$2.WGS66 = {
- a: 6378145.0,
- rf: 298.25,
- ellipseName: "WGS 66"
- };
- exports$2.WGS7 = {
- a: 6378135.0,
- rf: 298.26,
- ellipseName: "WGS 72"
- };
- var WGS84 = exports$2.WGS84 = {
- a: 6378137.0,
- rf: 298.257223563,
- ellipseName: "WGS 84"
- };
- exports$2.sphere = {
- a: 6370997.0,
- b: 6370997.0,
- ellipseName: "Normal Sphere (r=6370997)"
- };
- function eccentricity(a, b, rf, R_A) {
- var a2 = a * a; // used in geocentric
- var b2 = b * b; // used in geocentric
- var es = (a2 - b2) / a2; // e ^ 2
- var e = 0;
- if (R_A) {
- a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));
- a2 = a * a;
- es = 0;
- } else {
- e = Math.sqrt(es); // eccentricity
- }
- var ep2 = (a2 - b2) / b2; // used in geocentric
- return {
- es: es,
- e: e,
- ep2: ep2
- };
- }
- function sphere(a, b, rf, ellps, sphere) {
- if (!a) { // do we have an ellipsoid?
- var ellipse = match(exports$2, ellps);
- if (!ellipse) {
- ellipse = WGS84;
- }
- a = ellipse.a;
- b = ellipse.b;
- rf = ellipse.rf;
- }
- if (rf && !b) {
- b = (1.0 - 1.0 / rf) * a;
- }
- if (rf === 0 || Math.abs(a - b) < EPSLN) {
- sphere = true;
- b = a;
- }
- return {
- a: a,
- b: b,
- rf: rf,
- sphere: sphere
- };
- }
- var exports$3 = {};
- exports$3.wgs84 = {
- towgs84: "0,0,0",
- ellipse: "WGS84",
- datumName: "WGS84"
- };
- exports$3.ch1903 = {
- towgs84: "674.374,15.056,405.346",
- ellipse: "bessel",
- datumName: "swiss"
- };
- exports$3.ggrs87 = {
- towgs84: "-199.87,74.79,246.62",
- ellipse: "GRS80",
- datumName: "Greek_Geodetic_Reference_System_1987"
- };
- exports$3.nad83 = {
- towgs84: "0,0,0",
- ellipse: "GRS80",
- datumName: "North_American_Datum_1983"
- };
- exports$3.nad27 = {
- nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",
- ellipse: "clrk66",
- datumName: "North_American_Datum_1927"
- };
- exports$3.potsdam = {
- towgs84: "606.0,23.0,413.0",
- ellipse: "bessel",
- datumName: "Potsdam Rauenberg 1950 DHDN"
- };
- exports$3.carthage = {
- towgs84: "-263.0,6.0,431.0",
- ellipse: "clark80",
- datumName: "Carthage 1934 Tunisia"
- };
- exports$3.hermannskogel = {
- towgs84: "653.0,-212.0,449.0",
- ellipse: "bessel",
- datumName: "Hermannskogel"
- };
- exports$3.ire65 = {
- towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
- ellipse: "mod_airy",
- datumName: "Ireland 1965"
- };
- exports$3.rassadiran = {
- towgs84: "-133.63,-157.5,-158.62",
- ellipse: "intl",
- datumName: "Rassadiran"
- };
- exports$3.nzgd49 = {
- towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",
- ellipse: "intl",
- datumName: "New Zealand Geodetic Datum 1949"
- };
- exports$3.osgb36 = {
- towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",
- ellipse: "airy",
- datumName: "Airy 1830"
- };
- exports$3.s_jtsk = {
- towgs84: "589,76,480",
- ellipse: 'bessel',
- datumName: 'S-JTSK (Ferro)'
- };
- exports$3.beduaram = {
- towgs84: '-106,-87,188',
- ellipse: 'clrk80',
- datumName: 'Beduaram'
- };
- exports$3.gunung_segara = {
- towgs84: '-403,684,41',
- ellipse: 'bessel',
- datumName: 'Gunung Segara Jakarta'
- };
- exports$3.rnb72 = {
- towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",
- ellipse: "intl",
- datumName: "Reseau National Belge 1972"
- };
- function datum(datumCode, datum_params, a, b, es, ep2) {
- var out = {};
- if (datumCode === undefined || datumCode === 'none') {
- out.datum_type = PJD_NODATUM;
- } else {
- out.datum_type = PJD_WGS84;
- }
- if (datum_params) {
- out.datum_params = datum_params.map(parseFloat);
- if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {
- out.datum_type = PJD_3PARAM;
- }
- if (out.datum_params.length > 3) {
- if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {
- out.datum_type = PJD_7PARAM;
- out.datum_params[3] *= SEC_TO_RAD;
- out.datum_params[4] *= SEC_TO_RAD;
- out.datum_params[5] *= SEC_TO_RAD;
- out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;
- }
- }
- }
- out.a = a; //datum object also uses these values
- out.b = b;
- out.es = es;
- out.ep2 = ep2;
- return out;
- }
- function Projection$1(srsCode,callback) {
- if (!(this instanceof Projection$1)) {
- return new Projection$1(srsCode);
- }
- callback = callback || function(error){
- if(error){
- throw error;
- }
- };
- var json = parse(srsCode);
- if(typeof json !== 'object'){
- callback(srsCode);
- return;
- }
- var ourProj = Projection$1.projections.get(json.projName);
- if(!ourProj){
- callback(srsCode);
- return;
- }
- if (json.datumCode && json.datumCode !== 'none') {
- var datumDef = match(exports$3, json.datumCode);
- if (datumDef) {
- json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;
- json.ellps = datumDef.ellipse;
- json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;
- }
- }
- json.k0 = json.k0 || 1.0;
- json.axis = json.axis || 'enu';
- json.ellps = json.ellps || 'wgs84';
- var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere);
- var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);
- var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);
- extend(this, json); // transfer everything over from the projection because we don't know what we'll need
- extend(this, ourProj); // transfer all the methods from the projection
- // copy the 4 things over we calulated in deriveConstants.sphere
- this.a = sphere_.a;
- this.b = sphere_.b;
- this.rf = sphere_.rf;
- this.sphere = sphere_.sphere;
- // copy the 3 things we calculated in deriveConstants.eccentricity
- this.es = ecc.es;
- this.e = ecc.e;
- this.ep2 = ecc.ep2;
- // add in the datum object
- this.datum = datumObj;
- // init the projection
- this.init();
- // legecy callback from back in the day when it went to spatialreference.org
- callback(null, this);
- }
- Projection$1.projections = projections;
- Projection$1.projections.start();
- function compareDatums(source, dest) {
- if (source.datum_type !== dest.datum_type) {
- return false; // false, datums are not equal
- } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {
- // the tolerance for es is to ensure that GRS80 and WGS84
- // are considered identical
- return false;
- } else if (source.datum_type === PJD_3PARAM) {
- return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);
- } else if (source.datum_type === PJD_7PARAM) {
- return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);
- } else {
- return true; // datums are equal
- }
- } // cs_compare_datums()
- /*
- * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
- * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
- * according to the current ellipsoid parameters.
- *
- * Latitude : Geodetic latitude in radians (input)
- * Longitude : Geodetic longitude in radians (input)
- * Height : Geodetic height, in meters (input)
- * X : Calculated Geocentric X coordinate, in meters (output)
- * Y : Calculated Geocentric Y coordinate, in meters (output)
- * Z : Calculated Geocentric Z coordinate, in meters (output)
- *
- */
- function geodeticToGeocentric(p, es, a) {
- var Longitude = p.x;
- var Latitude = p.y;
- var Height = p.z ? p.z : 0; //Z value not always supplied
- var Rn; /* Earth radius at location */
- var Sin_Lat; /* Math.sin(Latitude) */
- var Sin2_Lat; /* Square of Math.sin(Latitude) */
- var Cos_Lat; /* Math.cos(Latitude) */
- /*
- ** Don't blow up if Latitude is just a little out of the value
- ** range as it may just be a rounding issue. Also removed longitude
- ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.
- */
- if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {
- Latitude = -HALF_PI;
- } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {
- Latitude = HALF_PI;
- } else if ((Latitude < -HALF_PI) || (Latitude > HALF_PI)) {
- /* Latitude out of range */
- //..reportError('geocent:lat out of range:' + Latitude);
- return null;
- }
- if (Longitude > Math.PI) {
- Longitude -= (2 * Math.PI);
- }
- Sin_Lat = Math.sin(Latitude);
- Cos_Lat = Math.cos(Latitude);
- Sin2_Lat = Sin_Lat * Sin_Lat;
- Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));
- return {
- x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),
- y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),
- z: ((Rn * (1 - es)) + Height) * Sin_Lat
- };
- } // cs_geodetic_to_geocentric()
- function geocentricToGeodetic(p, es, a, b) {
- /* local defintions and variables */
- /* end-criterium of loop, accuracy of sin(Latitude) */
- var genau = 1e-12;
- var genau2 = (genau * genau);
- var maxiter = 30;
- var P; /* distance between semi-minor axis and location */
- var RR; /* distance between center and location */
- var CT; /* sin of geocentric latitude */
- var ST; /* cos of geocentric latitude */
- var RX;
- var RK;
- var RN; /* Earth radius at location */
- var CPHI0; /* cos of start or old geodetic latitude in iterations */
- var SPHI0; /* sin of start or old geodetic latitude in iterations */
- var CPHI; /* cos of searched geodetic latitude */
- var SPHI; /* sin of searched geodetic latitude */
- var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */
- var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */
- var X = p.x;
- var Y = p.y;
- var Z = p.z ? p.z : 0.0; //Z value not always supplied
- var Longitude;
- var Latitude;
- var Height;
- P = Math.sqrt(X * X + Y * Y);
- RR = Math.sqrt(X * X + Y * Y + Z * Z);
- /* special cases for latitude and longitude */
- if (P / a < genau) {
- /* special case, if P=0. (X=0., Y=0.) */
- Longitude = 0.0;
- /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis
- * of ellipsoid (=center of mass), Latitude becomes PI/2 */
- if (RR / a < genau) {
- Latitude = HALF_PI;
- Height = -b;
- return {
- x: p.x,
- y: p.y,
- z: p.z
- };
- }
- } else {
- /* ellipsoidal (geodetic) longitude
- * interval: -PI < Longitude <= +PI */
- Longitude = Math.atan2(Y, X);
- }
- /* --------------------------------------------------------------
- * Following iterative algorithm was developped by
- * "Institut for Erdmessung", University of Hannover, July 1988.
- * Internet: www.ife.uni-hannover.de
- * Iterative computation of CPHI,SPHI and Height.
- * Iteration of CPHI and SPHI to 10**-12 radian resp.
- * 2*10**-7 arcsec.
- * --------------------------------------------------------------
- */
- CT = Z / RR;
- ST = P / RR;
- RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);
- CPHI0 = ST * (1.0 - es) * RX;
- SPHI0 = CT * RX;
- iter = 0;
- /* loop to find sin(Latitude) resp. Latitude
- * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */
- do {
- iter++;
- RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);
- /* ellipsoidal (geodetic) height */
- Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);
- RK = es * RN / (RN + Height);
- RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);
- CPHI = ST * (1.0 - RK) * RX;
- SPHI = CT * RX;
- SDPHI = SPHI * CPHI0 - CPHI * SPHI0;
- CPHI0 = CPHI;
- SPHI0 = SPHI;
- }
- while (SDPHI * SDPHI > genau2 && iter < maxiter);
- /* ellipsoidal (geodetic) latitude */
- Latitude = Math.atan(SPHI / Math.abs(CPHI));
- return {
- x: Longitude,
- y: Latitude,
- z: Height
- };
- } // cs_geocentric_to_geodetic()
- /****************************************************************/
- // pj_geocentic_to_wgs84( p )
- // p = point to transform in geocentric coordinates (x,y,z)
- /** point object, nothing fancy, just allows values to be
- passed back and forth by reference rather than by value.
- Other point classes may be used as long as they have
- x and y properties, which will get modified in the transform method.
- */
- function geocentricToWgs84(p, datum_type, datum_params) {
- if (datum_type === PJD_3PARAM) {
- // if( x[io] === HUGE_VAL )
- // continue;
- return {
- x: p.x + datum_params[0],
- y: p.y + datum_params[1],
- z: p.z + datum_params[2],
- };
- } else if (datum_type === PJD_7PARAM) {
- var Dx_BF = datum_params[0];
- var Dy_BF = datum_params[1];
- var Dz_BF = datum_params[2];
- var Rx_BF = datum_params[3];
- var Ry_BF = datum_params[4];
- var Rz_BF = datum_params[5];
- var M_BF = datum_params[6];
- // if( x[io] === HUGE_VAL )
- // continue;
- return {
- x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,
- y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,
- z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF
- };
- }
- } // cs_geocentric_to_wgs84
- /****************************************************************/
- // pj_geocentic_from_wgs84()
- // coordinate system definition,
- // point to transform in geocentric coordinates (x,y,z)
- function geocentricFromWgs84(p, datum_type, datum_params) {
- if (datum_type === PJD_3PARAM) {
- //if( x[io] === HUGE_VAL )
- // continue;
- return {
- x: p.x - datum_params[0],
- y: p.y - datum_params[1],
- z: p.z - datum_params[2],
- };
- } else if (datum_type === PJD_7PARAM) {
- var Dx_BF = datum_params[0];
- var Dy_BF = datum_params[1];
- var Dz_BF = datum_params[2];
- var Rx_BF = datum_params[3];
- var Ry_BF = datum_params[4];
- var Rz_BF = datum_params[5];
- var M_BF = datum_params[6];
- var x_tmp = (p.x - Dx_BF) / M_BF;
- var y_tmp = (p.y - Dy_BF) / M_BF;
- var z_tmp = (p.z - Dz_BF) / M_BF;
- //if( x[io] === HUGE_VAL )
- // continue;
- return {
- x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,
- y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,
- z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp
- };
- } //cs_geocentric_from_wgs84()
- }
- function checkParams(type) {
- return (type === PJD_3PARAM || type === PJD_7PARAM);
- }
- var datum_transform = function(source, dest, point) {
- // Short cut if the datums are identical.
- if (compareDatums(source, dest)) {
- return point; // in this case, zero is sucess,
- // whereas cs_compare_datums returns 1 to indicate TRUE
- // confusing, should fix this
- }
- // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest
- if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {
- return point;
- }
- // If this datum requires grid shifts, then apply it to geodetic coordinates.
- // Do we need to go through geocentric coordinates?
- if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {
- return point;
- }
- // Convert to geocentric coordinates.
- point = geodeticToGeocentric(point, source.es, source.a);
- // Convert between datums
- if (checkParams(source.datum_type)) {
- point = geocentricToWgs84(point, source.datum_type, source.datum_params);
- }
- if (checkParams(dest.datum_type)) {
- point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);
- }
- return geocentricToGeodetic(point, dest.es, dest.a, dest.b);
- };
- var adjust_axis = function(crs, denorm, point) {
- var xin = point.x,
- yin = point.y,
- zin = point.z || 0.0;
- var v, t, i;
- var out = {};
- for (i = 0; i < 3; i++) {
- if (denorm && i === 2 && point.z === undefined) {
- continue;
- }
- if (i === 0) {
- v = xin;
- t = 'x';
- }
- else if (i === 1) {
- v = yin;
- t = 'y';
- }
- else {
- v = zin;
- t = 'z';
- }
- switch (crs.axis[i]) {
- case 'e':
- out[t] = v;
- break;
- case 'w':
- out[t] = -v;
- break;
- case 'n':
- out[t] = v;
- break;
- case 's':
- out[t] = -v;
- break;
- case 'u':
- if (point[t] !== undefined) {
- out.z = v;
- }
- break;
- case 'd':
- if (point[t] !== undefined) {
- out.z = -v;
- }
- break;
- default:
- //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName);
- return null;
- }
- }
- return out;
- };
- var toPoint = function (array){
- var out = {
- x: array[0],
- y: array[1]
- };
- if (array.length>2) {
- out.z = array[2];
- }
- if (array.length>3) {
- out.m = array[3];
- }
- return out;
- };
- function checkNotWGS(source, dest) {
- return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');
- }
- function transform(source, dest, point) {
- var wgs84;
- if (Array.isArray(point)) {
- point = toPoint(point);
- }
- // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84
- if (source.datum && dest.datum && checkNotWGS(source, dest)) {
- wgs84 = new Projection$1('WGS84');
- point = transform(source, wgs84, point);
- source = wgs84;
- }
- // DGR, 2010/11/12
- if (source.axis !== 'enu') {
- point = adjust_axis(source, false, point);
- }
- // Transform source points to long/lat, if they aren't already.
- if (source.projName === 'longlat') {
- point = {
- x: point.x * D2R,
- y: point.y * D2R
- };
- }
- else {
- if (source.to_meter) {
- point = {
- x: point.x * source.to_meter,
- y: point.y * source.to_meter
- };
- }
- point = source.inverse(point); // Convert Cartesian to longlat
- }
- // Adjust for the prime meridian if necessary
- if (source.from_greenwich) {
- point.x += source.from_greenwich;
- }
- // Convert datums if needed, and if possible.
- point = datum_transform(source.datum, dest.datum, point);
- // Adjust for the prime meridian if necessary
- if (dest.from_greenwich) {
- point = {
- x: point.x - dest.from_greenwich,
- y: point.y
- };
- }
- if (dest.projName === 'longlat') {
- // convert radians to decimal degrees
- point = {
- x: point.x * R2D,
- y: point.y * R2D
- };
- } else { // else project
- point = dest.forward(point);
- if (dest.to_meter) {
- point = {
- x: point.x / dest.to_meter,
- y: point.y / dest.to_meter
- };
- }
- }
- // DGR, 2010/11/12
- if (dest.axis !== 'enu') {
- return adjust_axis(dest, true, point);
- }
- return point;
- }
- var wgs84 = Projection$1('WGS84');
- function transformer(from, to, coords) {
- var transformedArray;
- if (Array.isArray(coords)) {
- transformedArray = transform(from, to, coords);
- if (coords.length === 3) {
- return [transformedArray.x, transformedArray.y, transformedArray.z];
- }
- else {
- return [transformedArray.x, transformedArray.y];
- }
- }
- else {
- return transform(from, to, coords);
- }
- }
- function checkProj(item) {
- if (item instanceof Projection$1) {
- return item;
- }
- if (item.oProj) {
- return item.oProj;
- }
- return Projection$1(item);
- }
- function proj4$1(fromProj, toProj, coord) {
- fromProj = checkProj(fromProj);
- var single = false;
- var obj;
- if (typeof toProj === 'undefined') {
- toProj = fromProj;
- fromProj = wgs84;
- single = true;
- }
- else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {
- coord = toProj;
- toProj = fromProj;
- fromProj = wgs84;
- single = true;
- }
- toProj = checkProj(toProj);
- if (coord) {
- return transformer(fromProj, toProj, coord);
- }
- else {
- obj = {
- forward: function(coords) {
- return transformer(fromProj, toProj, coords);
- },
- inverse: function(coords) {
- return transformer(toProj, fromProj, coords);
- }
- };
- if (single) {
- obj.oProj = toProj;
- }
- return obj;
- }
- }
- /**
- * UTM zones are grouped, and assigned to one of a group of 6
- * sets.
- *
- * {int} @private
- */
- var NUM_100K_SETS = 6;
- /**
- * The column letters (for easting) of the lower left value, per
- * set.
- *
- * {string} @private
- */
- var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';
- /**
- * The row letters (for northing) of the lower left value, per
- * set.
- *
- * {string} @private
- */
- var SET_ORIGIN_ROW_LETTERS = 'AFAFAF';
- var A = 65; // A
- var I = 73; // I
- var O = 79; // O
- var V = 86; // V
- var Z = 90; // Z
- var mgrs = {
- forward: forward$1,
- inverse: inverse$1,
- toPoint: toPoint$1
- };
- /**
- * Conversion of lat/lon to MGRS.
- *
- * @param {object} ll Object literal with lat and lon properties on a
- * WGS84 ellipsoid.
- * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for
- * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.
- * @return {string} the MGRS string for the given location and accuracy.
- */
- function forward$1(ll, accuracy) {
- accuracy = accuracy || 5; // default accuracy 1m
- return encode(LLtoUTM({
- lat: ll[1],
- lon: ll[0]
- }), accuracy);
- }
- /**
- * Conversion of MGRS to lat/lon.
- *
- * @param {string} mgrs MGRS string.
- * @return {array} An array with left (longitude), bottom (latitude), right
- * (longitude) and top (latitude) values in WGS84, representing the
- * bounding box for the provided MGRS reference.
- */
- function inverse$1(mgrs) {
- var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
- if (bbox.lat && bbox.lon) {
- return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];
- }
- return [bbox.left, bbox.bottom, bbox.right, bbox.top];
- }
- function toPoint$1(mgrs) {
- var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
- if (bbox.lat && bbox.lon) {
- return [bbox.lon, bbox.lat];
- }
- return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];
- }
- /**
- * Conversion from degrees to radians.
- *
- * @private
- * @param {number} deg the angle in degrees.
- * @return {number} the angle in radians.
- */
- function degToRad(deg) {
- return (deg * (Math.PI / 180.0));
- }
- /**
- * Conversion from radians to degrees.
- *
- * @private
- * @param {number} rad the angle in radians.
- * @return {number} the angle in degrees.
- */
- function radToDeg(rad) {
- return (180.0 * (rad / Math.PI));
- }
- /**
- * Converts a set of Longitude and Latitude co-ordinates to UTM
- * using the WGS84 ellipsoid.
- *
- * @private
- * @param {object} ll Object literal with lat and lon properties
- * representing the WGS84 coordinate to be converted.
- * @return {object} Object literal containing the UTM value with easting,
- * northing, zoneNumber and zoneLetter properties, and an optional
- * accuracy property in digits. Returns null if the conversion failed.
- */
- function LLtoUTM(ll) {
- var Lat = ll.lat;
- var Long = ll.lon;
- var a = 6378137.0; //ellip.radius;
- var eccSquared = 0.00669438; //ellip.eccsq;
- var k0 = 0.9996;
- var LongOrigin;
- var eccPrimeSquared;
- var N, T, C, A, M;
- var LatRad = degToRad(Lat);
- var LongRad = degToRad(Long);
- var LongOriginRad;
- var ZoneNumber;
- // (int)
- ZoneNumber = Math.floor((Long + 180) / 6) + 1;
- //Make sure the longitude 180.00 is in Zone 60
- if (Long === 180) {
- ZoneNumber = 60;
- }
- // Special zone for Norway
- if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {
- ZoneNumber = 32;
- }
- // Special zones for Svalbard
- if (Lat >= 72.0 && Lat < 84.0) {
- if (Long >= 0.0 && Long < 9.0) {
- ZoneNumber = 31;
- }
- else if (Long >= 9.0 && Long < 21.0) {
- ZoneNumber = 33;
- }
- else if (Long >= 21.0 && Long < 33.0) {
- ZoneNumber = 35;
- }
- else if (Long >= 33.0 && Long < 42.0) {
- ZoneNumber = 37;
- }
- }
- LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin
- // in middle of
- // zone
- LongOriginRad = degToRad(LongOrigin);
- eccPrimeSquared = (eccSquared) / (1 - eccSquared);
- N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));
- T = Math.tan(LatRad) * Math.tan(LatRad);
- C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);
- A = Math.cos(LatRad) * (LongRad - LongOriginRad);
- M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));
- var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);
- var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));
- if (Lat < 0.0) {
- UTMNorthing += 10000000.0; //10000000 meter offset for
- // southern hemisphere
- }
- return {
- northing: Math.round(UTMNorthing),
- easting: Math.round(UTMEasting),
- zoneNumber: ZoneNumber,
- zoneLetter: getLetterDesignator(Lat)
- };
- }
- /**
- * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience
- * class where the Zone can be specified as a single string eg."60N" which
- * is then broken down into the ZoneNumber and ZoneLetter.
- *
- * @private
- * @param {object} utm An object literal with northing, easting, zoneNumber
- * and zoneLetter properties. If an optional accuracy property is
- * provided (in meters), a bounding box will be returned instead of
- * latitude and longitude.
- * @return {object} An object literal containing either lat and lon values
- * (if no accuracy was provided), or top, right, bottom and left values
- * for the bounding box calculated according to the provided accuracy.
- * Returns null if the conversion failed.
- */
- function UTMtoLL(utm) {
- var UTMNorthing = utm.northing;
- var UTMEasting = utm.easting;
- var zoneLetter = utm.zoneLetter;
- var zoneNumber = utm.zoneNumber;
- // check the ZoneNummber is valid
- if (zoneNumber < 0 || zoneNumber > 60) {
- return null;
- }
- var k0 = 0.9996;
- var a = 6378137.0; //ellip.radius;
- var eccSquared = 0.00669438; //ellip.eccsq;
- var eccPrimeSquared;
- var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));
- var N1, T1, C1, R1, D, M;
- var LongOrigin;
- var mu, phi1Rad;
- // remove 500,000 meter offset for longitude
- var x = UTMEasting - 500000.0;
- var y = UTMNorthing;
- // We must know somehow if we are in the Northern or Southern
- // hemisphere, this is the only time we use the letter So even
- // if the Zone letter isn't exactly correct it should indicate
- // the hemisphere correctly
- if (zoneLetter < 'N') {
- y -= 10000000.0; // remove 10,000,000 meter offset used
- // for southern hemisphere
- }
- // There are 60 zones with zone 1 being at West -180 to -174
- LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin
- // in middle of
- // zone
- eccPrimeSquared = (eccSquared) / (1 - eccSquared);
- M = y / k0;
- mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));
- phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);
- // double phi1 = ProjMath.radToDeg(phi1Rad);
- N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));
- T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);
- C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);
- R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);
- D = x / (N1 * k0);
- var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);
- lat = radToDeg(lat);
- var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);
- lon = LongOrigin + radToDeg(lon);
- var result;
- if (utm.accuracy) {
- var topRight = UTMtoLL({
- northing: utm.northing + utm.accuracy,
- easting: utm.easting + utm.accuracy,
- zoneLetter: utm.zoneLetter,
- zoneNumber: utm.zoneNumber
- });
- result = {
- top: topRight.lat,
- right: topRight.lon,
- bottom: lat,
- left: lon
- };
- }
- else {
- result = {
- lat: lat,
- lon: lon
- };
- }
- return result;
- }
- /**
- * Calculates the MGRS letter designator for the given latitude.
- *
- * @private
- * @param {number} lat The latitude in WGS84 to get the letter designator
- * for.
- * @return {char} The letter designator.
- */
- function getLetterDesignator(lat) {
- //This is here as an error flag to show that the Latitude is
- //outside MGRS limits
- var LetterDesignator = 'Z';
- if ((84 >= lat) && (lat >= 72)) {
- LetterDesignator = 'X';
- }
- else if ((72 > lat) && (lat >= 64)) {
- LetterDesignator = 'W';
- }
- else if ((64 > lat) && (lat >= 56)) {
- LetterDesignator = 'V';
- }
- else if ((56 > lat) && (lat >= 48)) {
- LetterDesignator = 'U';
- }
- else if ((48 > lat) && (lat >= 40)) {
- LetterDesignator = 'T';
- }
- else if ((40 > lat) && (lat >= 32)) {
- LetterDesignator = 'S';
- }
- else if ((32 > lat) && (lat >= 24)) {
- LetterDesignator = 'R';
- }
- else if ((24 > lat) && (lat >= 16)) {
- LetterDesignator = 'Q';
- }
- else if ((16 > lat) && (lat >= 8)) {
- LetterDesignator = 'P';
- }
- else if ((8 > lat) && (lat >= 0)) {
- LetterDesignator = 'N';
- }
- else if ((0 > lat) && (lat >= -8)) {
- LetterDesignator = 'M';
- }
- else if ((-8 > lat) && (lat >= -16)) {
- LetterDesignator = 'L';
- }
- else if ((-16 > lat) && (lat >= -24)) {
- LetterDesignator = 'K';
- }
- else if ((-24 > lat) && (lat >= -32)) {
- LetterDesignator = 'J';
- }
- else if ((-32 > lat) && (lat >= -40)) {
- LetterDesignator = 'H';
- }
- else if ((-40 > lat) && (lat >= -48)) {
- LetterDesignator = 'G';
- }
- else if ((-48 > lat) && (lat >= -56)) {
- LetterDesignator = 'F';
- }
- else if ((-56 > lat) && (lat >= -64)) {
- LetterDesignator = 'E';
- }
- else if ((-64 > lat) && (lat >= -72)) {
- LetterDesignator = 'D';
- }
- else if ((-72 > lat) && (lat >= -80)) {
- LetterDesignator = 'C';
- }
- return LetterDesignator;
- }
- /**
- * Encodes a UTM location as MGRS string.
- *
- * @private
- * @param {object} utm An object literal with easting, northing,
- * zoneLetter, zoneNumber
- * @param {number} accuracy Accuracy in digits (1-5).
- * @return {string} MGRS string for the given UTM location.
- */
- function encode(utm, accuracy) {
- // prepend with leading zeroes
- var seasting = "00000" + utm.easting,
- snorthing = "00000" + utm.northing;
- return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);
- }
- /**
- * Get the two letter 100k designator for a given UTM easting,
- * northing and zone number value.
- *
- * @private
- * @param {number} easting
- * @param {number} northing
- * @param {number} zoneNumber
- * @return the two letter 100k designator for the given UTM location.
- */
- function get100kID(easting, northing, zoneNumber) {
- var setParm = get100kSetForZone(zoneNumber);
- var setColumn = Math.floor(easting / 100000);
- var setRow = Math.floor(northing / 100000) % 20;
- return getLetter100kID(setColumn, setRow, setParm);
- }
- /**
- * Given a UTM zone number, figure out the MGRS 100K set it is in.
- *
- * @private
- * @param {number} i An UTM zone number.
- * @return {number} the 100k set the UTM zone is in.
- */
- function get100kSetForZone(i) {
- var setParm = i % NUM_100K_SETS;
- if (setParm === 0) {
- setParm = NUM_100K_SETS;
- }
- return setParm;
- }
- /**
- * Get the two-letter MGRS 100k designator given information
- * translated from the UTM northing, easting and zone number.
- *
- * @private
- * @param {number} column the column index as it relates to the MGRS
- * 100k set spreadsheet, created from the UTM easting.
- * Values are 1-8.
- * @param {number} row the row index as it relates to the MGRS 100k set
- * spreadsheet, created from the UTM northing value. Values
- * are from 0-19.
- * @param {number} parm the set block, as it relates to the MGRS 100k set
- * spreadsheet, created from the UTM zone. Values are from
- * 1-60.
- * @return two letter MGRS 100k code.
- */
- function getLetter100kID(column, row, parm) {
- // colOrigin and rowOrigin are the letters at the origin of the set
- var index = parm - 1;
- var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);
- var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);
- // colInt and rowInt are the letters to build to return
- var colInt = colOrigin + column - 1;
- var rowInt = rowOrigin + row;
- var rollover = false;
- if (colInt > Z) {
- colInt = colInt - Z + A - 1;
- rollover = true;
- }
- if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {
- colInt++;
- }
- if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {
- colInt++;
- if (colInt === I) {
- colInt++;
- }
- }
- if (colInt > Z) {
- colInt = colInt - Z + A - 1;
- }
- if (rowInt > V) {
- rowInt = rowInt - V + A - 1;
- rollover = true;
- }
- else {
- rollover = false;
- }
- if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {
- rowInt++;
- }
- if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {
- rowInt++;
- if (rowInt === I) {
- rowInt++;
- }
- }
- if (rowInt > V) {
- rowInt = rowInt - V + A - 1;
- }
- var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);
- return twoLetter;
- }
- /**
- * Decode the UTM parameters from a MGRS string.
- *
- * @private
- * @param {string} mgrsString an UPPERCASE coordinate string is expected.
- * @return {object} An object literal with easting, northing, zoneLetter,
- * zoneNumber and accuracy (in meters) properties.
- */
- function decode(mgrsString) {
- if (mgrsString && mgrsString.length === 0) {
- throw ("MGRSPoint coverting from nothing");
- }
- var length = mgrsString.length;
- var hunK = null;
- var sb = "";
- var testChar;
- var i = 0;
- // get Zone number
- while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {
- if (i >= 2) {
- throw ("MGRSPoint bad conversion from: " + mgrsString);
- }
- sb += testChar;
- i++;
- }
- var zoneNumber = parseInt(sb, 10);
- if (i === 0 || i + 3 > length) {
- // A good MGRS string has to be 4-5 digits long,
- // ##AAA/#AAA at least.
- throw ("MGRSPoint bad conversion from: " + mgrsString);
- }
- var zoneLetter = mgrsString.charAt(i++);
- // Should we check the zone letter here? Why not.
- if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {
- throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString);
- }
- hunK = mgrsString.substring(i, i += 2);
- var set = get100kSetForZone(zoneNumber);
- var east100k = getEastingFromChar(hunK.charAt(0), set);
- var north100k = getNorthingFromChar(hunK.charAt(1), set);
- // We have a bug where the northing may be 2000000 too low.
- // How
- // do we know when to roll over?
- while (north100k < getMinNorthing(zoneLetter)) {
- north100k += 2000000;
- }
- // calculate the char index for easting/northing separator
- var remainder = length - i;
- if (remainder % 2 !== 0) {
- throw ("MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters" + mgrsString);
- }
- var sep = remainder / 2;
- var sepEasting = 0.0;
- var sepNorthing = 0.0;
- var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;
- if (sep > 0) {
- accuracyBonus = 100000.0 / Math.pow(10, sep);
- sepEastingString = mgrsString.substring(i, i + sep);
- sepEasting = parseFloat(sepEastingString) * accuracyBonus;
- sepNorthingString = mgrsString.substring(i + sep);
- sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;
- }
- easting = sepEasting + east100k;
- northing = sepNorthing + north100k;
- return {
- easting: easting,
- northing: northing,
- zoneLetter: zoneLetter,
- zoneNumber: zoneNumber,
- accuracy: accuracyBonus
- };
- }
- /**
- * Given the first letter from a two-letter MGRS 100k zone, and given the
- * MGRS table set for the zone number, figure out the easting value that
- * should be added to the other, secondary easting value.
- *
- * @private
- * @param {char} e The first letter from a two-letter MGRS 100´k zone.
- * @param {number} set The MGRS table set for the zone number.
- * @return {number} The easting value for the given letter and set.
- */
- function getEastingFromChar(e, set) {
- // colOrigin is the letter at the origin of the set for the
- // column
- var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);
- var eastingValue = 100000.0;
- var rewindMarker = false;
- while (curCol !== e.charCodeAt(0)) {
- curCol++;
- if (curCol === I) {
- curCol++;
- }
- if (curCol === O) {
- curCol++;
- }
- if (curCol > Z) {
- if (rewindMarker) {
- throw ("Bad character: " + e);
- }
- curCol = A;
- rewindMarker = true;
- }
- eastingValue += 100000.0;
- }
- return eastingValue;
- }
- /**
- * Given the second letter from a two-letter MGRS 100k zone, and given the
- * MGRS table set for the zone number, figure out the northing value that
- * should be added to the other, secondary northing value. You have to
- * remember that Northings are determined from the equator, and the vertical
- * cycle of letters mean a 2000000 additional northing meters. This happens
- * approx. every 18 degrees of latitude. This method does *NOT* count any
- * additional northings. You have to figure out how many 2000000 meters need
- * to be added for the zone letter of the MGRS coordinate.
- *
- * @private
- * @param {char} n Second letter of the MGRS 100k zone
- * @param {number} set The MGRS table set number, which is dependent on the
- * UTM zone number.
- * @return {number} The northing value for the given letter and set.
- */
- function getNorthingFromChar(n, set) {
- if (n > 'V') {
- throw ("MGRSPoint given invalid Northing " + n);
- }
- // rowOrigin is the letter at the origin of the set for the
- // column
- var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);
- var northingValue = 0.0;
- var rewindMarker = false;
- while (curRow !== n.charCodeAt(0)) {
- curRow++;
- if (curRow === I) {
- curRow++;
- }
- if (curRow === O) {
- curRow++;
- }
- // fixing a bug making whole application hang in this loop
- // when 'n' is a wrong character
- if (curRow > V) {
- if (rewindMarker) { // making sure that this loop ends
- throw ("Bad character: " + n);
- }
- curRow = A;
- rewindMarker = true;
- }
- northingValue += 100000.0;
- }
- return northingValue;
- }
- /**
- * The function getMinNorthing returns the minimum northing value of a MGRS
- * zone.
- *
- * Ported from Geotrans' c Lattitude_Band_Value structure table.
- *
- * @private
- * @param {char} zoneLetter The MGRS zone to get the min northing for.
- * @return {number}
- */
- function getMinNorthing(zoneLetter) {
- var northing;
- switch (zoneLetter) {
- case 'C':
- northing = 1100000.0;
- break;
- case 'D':
- northing = 2000000.0;
- break;
- case 'E':
- northing = 2800000.0;
- break;
- case 'F':
- northing = 3700000.0;
- break;
- case 'G':
- northing = 4600000.0;
- break;
- case 'H':
- northing = 5500000.0;
- break;
- case 'J':
- northing = 6400000.0;
- break;
- case 'K':
- northing = 7300000.0;
- break;
- case 'L':
- northing = 8200000.0;
- break;
- case 'M':
- northing = 9100000.0;
- break;
- case 'N':
- northing = 0.0;
- break;
- case 'P':
- northing = 800000.0;
- break;
- case 'Q':
- northing = 1700000.0;
- break;
- case 'R':
- northing = 2600000.0;
- break;
- case 'S':
- northing = 3500000.0;
- break;
- case 'T':
- northing = 4400000.0;
- break;
- case 'U':
- northing = 5300000.0;
- break;
- case 'V':
- northing = 6200000.0;
- break;
- case 'W':
- northing = 7000000.0;
- break;
- case 'X':
- northing = 7900000.0;
- break;
- default:
- northing = -1.0;
- }
- if (northing >= 0.0) {
- return northing;
- }
- else {
- throw ("Invalid zone letter: " + zoneLetter);
- }
- }
- function Point(x, y, z) {
- if (!(this instanceof Point)) {
- return new Point(x, y, z);
- }
- if (Array.isArray(x)) {
- this.x = x[0];
- this.y = x[1];
- this.z = x[2] || 0.0;
- } else if(typeof x === 'object') {
- this.x = x.x;
- this.y = x.y;
- this.z = x.z || 0.0;
- } else if (typeof x === 'string' && typeof y === 'undefined') {
- var coords = x.split(',');
- this.x = parseFloat(coords[0], 10);
- this.y = parseFloat(coords[1], 10);
- this.z = parseFloat(coords[2], 10) || 0.0;
- } else {
- this.x = x;
- this.y = y;
- this.z = z || 0.0;
- }
- console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');
- }
- Point.fromMGRS = function(mgrsStr) {
- return new Point(toPoint$1(mgrsStr));
- };
- Point.prototype.toMGRS = function(accuracy) {
- return forward$1([this.x, this.y], accuracy);
- };
- var version = "2.4.3";
- var C00 = 1;
- var C02 = 0.25;
- var C04 = 0.046875;
- var C06 = 0.01953125;
- var C08 = 0.01068115234375;
- var C22 = 0.75;
- var C44 = 0.46875;
- var C46 = 0.01302083333333333333;
- var C48 = 0.00712076822916666666;
- var C66 = 0.36458333333333333333;
- var C68 = 0.00569661458333333333;
- var C88 = 0.3076171875;
- var pj_enfn = function(es) {
- var en = [];
- en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));
- en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));
- var t = es * es;
- en[2] = t * (C44 - es * (C46 + es * C48));
- t *= es;
- en[3] = t * (C66 - es * C68);
- en[4] = t * es * C88;
- return en;
- };
- var pj_mlfn = function(phi, sphi, cphi, en) {
- cphi *= sphi;
- sphi *= sphi;
- return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));
- };
- var MAX_ITER = 20;
- var pj_inv_mlfn = function(arg, es, en) {
- var k = 1 / (1 - es);
- var phi = arg;
- for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */
- var s = Math.sin(phi);
- var t = 1 - es * s * s;
- //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;
- //phi -= t * (t * Math.sqrt(t)) * k;
- t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;
- phi -= t;
- if (Math.abs(t) < EPSLN) {
- return phi;
- }
- }
- //..reportError("cass:pj_inv_mlfn: Convergence error");
- return phi;
- };
- // Heavily based on this tmerc projection implementation
- // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js
- function init$2() {
- this.x0 = this.x0 !== undefined ? this.x0 : 0;
- this.y0 = this.y0 !== undefined ? this.y0 : 0;
- this.long0 = this.long0 !== undefined ? this.long0 : 0;
- this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
- if (this.es) {
- this.en = pj_enfn(this.es);
- this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);
- }
- }
- /**
- Transverse Mercator Forward - long/lat to x/y
- long/lat in radians
- */
- function forward$2(p) {
- var lon = p.x;
- var lat = p.y;
- var delta_lon = adjust_lon(lon - this.long0);
- var con;
- var x, y;
- var sin_phi = Math.sin(lat);
- var cos_phi = Math.cos(lat);
- if (!this.es) {
- var b = cos_phi * Math.sin(delta_lon);
- if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {
- return (93);
- }
- else {
- x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;
- y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));
- b = Math.abs(y);
- if (b >= 1) {
- if ((b - 1) > EPSLN) {
- return (93);
- }
- else {
- y = 0;
- }
- }
- else {
- y = Math.acos(y);
- }
- if (lat < 0) {
- y = -y;
- }
- y = this.a * this.k0 * (y - this.lat0) + this.y0;
- }
- }
- else {
- var al = cos_phi * delta_lon;
- var als = Math.pow(al, 2);
- var c = this.ep2 * Math.pow(cos_phi, 2);
- var cs = Math.pow(c, 2);
- var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;
- var t = Math.pow(tq, 2);
- var ts = Math.pow(t, 2);
- con = 1 - this.es * Math.pow(sin_phi, 2);
- al = al / Math.sqrt(con);
- var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);
- x = this.a * (this.k0 * al * (1 +
- als / 6 * (1 - t + c +
- als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +
- als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +
- this.x0;
- y = this.a * (this.k0 * (ml - this.ml0 +
- sin_phi * delta_lon * al / 2 * (1 +
- als / 12 * (5 - t + 9 * c + 4 * cs +
- als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +
- als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +
- this.y0;
- }
- p.x = x;
- p.y = y;
- return p;
- }
- /**
- Transverse Mercator Inverse - x/y to long/lat
- */
- function inverse$2(p) {
- var con, phi;
- var lat, lon;
- var x = (p.x - this.x0) * (1 / this.a);
- var y = (p.y - this.y0) * (1 / this.a);
- if (!this.es) {
- var f = Math.exp(x / this.k0);
- var g = 0.5 * (f - 1 / f);
- var temp = this.lat0 + y / this.k0;
- var h = Math.cos(temp);
- con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));
- lat = Math.asin(con);
- if (y < 0) {
- lat = -lat;
- }
- if ((g === 0) && (h === 0)) {
- lon = 0;
- }
- else {
- lon = adjust_lon(Math.atan2(g, h) + this.long0);
- }
- }
- else { // ellipsoidal form
- con = this.ml0 + y / this.k0;
- phi = pj_inv_mlfn(con, this.es, this.en);
- if (Math.abs(phi) < HALF_PI) {
- var sin_phi = Math.sin(phi);
- var cos_phi = Math.cos(phi);
- var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;
- var c = this.ep2 * Math.pow(cos_phi, 2);
- var cs = Math.pow(c, 2);
- var t = Math.pow(tan_phi, 2);
- var ts = Math.pow(t, 2);
- con = 1 - this.es * Math.pow(sin_phi, 2);
- var d = x * Math.sqrt(con) / this.k0;
- var ds = Math.pow(d, 2);
- con = con * tan_phi;
- lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -
- ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -
- ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -
- ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));
- lon = adjust_lon(this.long0 + (d * (1 -
- ds / 6 * (1 + 2 * t + c -
- ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -
- ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));
- }
- else {
- lat = HALF_PI * sign(y);
- lon = 0;
- }
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$3 = ["Transverse_Mercator", "Transverse Mercator", "tmerc"];
- var tmerc = {
- init: init$2,
- forward: forward$2,
- inverse: inverse$2,
- names: names$3
- };
- var sinh = function(x) {
- var r = Math.exp(x);
- r = (r - 1 / r) / 2;
- return r;
- };
- var hypot = function(x, y) {
- x = Math.abs(x);
- y = Math.abs(y);
- var a = Math.max(x, y);
- var b = Math.min(x, y) / (a ? a : 1);
- return a * Math.sqrt(1 + Math.pow(b, 2));
- };
- var log1py = function(x) {
- var y = 1 + x;
- var z = y - 1;
- return z === 0 ? x : x * Math.log(y) / z;
- };
- var asinhy = function(x) {
- var y = Math.abs(x);
- y = log1py(y * (1 + y / (hypot(1, y) + 1)));
- return x < 0 ? -y : y;
- };
- var gatg = function(pp, B) {
- var cos_2B = 2 * Math.cos(2 * B);
- var i = pp.length - 1;
- var h1 = pp[i];
- var h2 = 0;
- var h;
- while (--i >= 0) {
- h = -h2 + cos_2B * h1 + pp[i];
- h2 = h1;
- h1 = h;
- }
- return (B + h * Math.sin(2 * B));
- };
- var clens = function(pp, arg_r) {
- var r = 2 * Math.cos(arg_r);
- var i = pp.length - 1;
- var hr1 = pp[i];
- var hr2 = 0;
- var hr;
- while (--i >= 0) {
- hr = -hr2 + r * hr1 + pp[i];
- hr2 = hr1;
- hr1 = hr;
- }
- return Math.sin(arg_r) * hr;
- };
- var cosh = function(x) {
- var r = Math.exp(x);
- r = (r + 1 / r) / 2;
- return r;
- };
- var clens_cmplx = function(pp, arg_r, arg_i) {
- var sin_arg_r = Math.sin(arg_r);
- var cos_arg_r = Math.cos(arg_r);
- var sinh_arg_i = sinh(arg_i);
- var cosh_arg_i = cosh(arg_i);
- var r = 2 * cos_arg_r * cosh_arg_i;
- var i = -2 * sin_arg_r * sinh_arg_i;
- var j = pp.length - 1;
- var hr = pp[j];
- var hi1 = 0;
- var hr1 = 0;
- var hi = 0;
- var hr2;
- var hi2;
- while (--j >= 0) {
- hr2 = hr1;
- hi2 = hi1;
- hr1 = hr;
- hi1 = hi;
- hr = -hr2 + r * hr1 - i * hi1 + pp[j];
- hi = -hi2 + i * hr1 + r * hi1;
- }
- r = sin_arg_r * cosh_arg_i;
- i = cos_arg_r * sinh_arg_i;
- return [r * hr - i * hi, r * hi + i * hr];
- };
- // Heavily based on this etmerc projection implementation
- // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js
- function init$3() {
- if (this.es === undefined || this.es <= 0) {
- throw new Error('incorrect elliptical usage');
- }
- this.x0 = this.x0 !== undefined ? this.x0 : 0;
- this.y0 = this.y0 !== undefined ? this.y0 : 0;
- this.long0 = this.long0 !== undefined ? this.long0 : 0;
- this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
- this.cgb = [];
- this.cbg = [];
- this.utg = [];
- this.gtu = [];
- var f = this.es / (1 + Math.sqrt(1 - this.es));
- var n = f / (2 - f);
- var np = n;
- this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));
- this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));
- np = np * n;
- this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));
- this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));
- np = np * n;
- this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));
- this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));
- np = np * n;
- this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));
- this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));
- np = np * n;
- this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));
- this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));
- np = np * n;
- this.cgb[5] = np * (601676 / 22275);
- this.cbg[5] = np * (444337 / 155925);
- np = Math.pow(n, 2);
- this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));
- this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));
- this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));
- this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));
- this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));
- np = np * n;
- this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));
- this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));
- np = np * n;
- this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));
- this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));
- np = np * n;
- this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));
- this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));
- np = np * n;
- this.utg[5] = np * (-20648693 / 638668800);
- this.gtu[5] = np * (212378941 / 319334400);
- var Z = gatg(this.cbg, this.lat0);
- this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));
- }
- function forward$3(p) {
- var Ce = adjust_lon(p.x - this.long0);
- var Cn = p.y;
- Cn = gatg(this.cbg, Cn);
- var sin_Cn = Math.sin(Cn);
- var cos_Cn = Math.cos(Cn);
- var sin_Ce = Math.sin(Ce);
- var cos_Ce = Math.cos(Ce);
- Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);
- Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));
- Ce = asinhy(Math.tan(Ce));
- var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);
- Cn = Cn + tmp[0];
- Ce = Ce + tmp[1];
- var x;
- var y;
- if (Math.abs(Ce) <= 2.623395162778) {
- x = this.a * (this.Qn * Ce) + this.x0;
- y = this.a * (this.Qn * Cn + this.Zb) + this.y0;
- }
- else {
- x = Infinity;
- y = Infinity;
- }
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$3(p) {
- var Ce = (p.x - this.x0) * (1 / this.a);
- var Cn = (p.y - this.y0) * (1 / this.a);
- Cn = (Cn - this.Zb) / this.Qn;
- Ce = Ce / this.Qn;
- var lon;
- var lat;
- if (Math.abs(Ce) <= 2.623395162778) {
- var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);
- Cn = Cn + tmp[0];
- Ce = Ce + tmp[1];
- Ce = Math.atan(sinh(Ce));
- var sin_Cn = Math.sin(Cn);
- var cos_Cn = Math.cos(Cn);
- var sin_Ce = Math.sin(Ce);
- var cos_Ce = Math.cos(Ce);
- Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));
- Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);
- lon = adjust_lon(Ce + this.long0);
- lat = gatg(this.cgb, Cn);
- }
- else {
- lon = Infinity;
- lat = Infinity;
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$4 = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc"];
- var etmerc = {
- init: init$3,
- forward: forward$3,
- inverse: inverse$3,
- names: names$4
- };
- var adjust_zone = function(zone, lon) {
- if (zone === undefined) {
- zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;
- if (zone < 0) {
- return 0;
- } else if (zone > 60) {
- return 60;
- }
- }
- return zone;
- };
- var dependsOn = 'etmerc';
- function init$4() {
- var zone = adjust_zone(this.zone, this.long0);
- if (zone === undefined) {
- throw new Error('unknown utm zone');
- }
- this.lat0 = 0;
- this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;
- this.x0 = 500000;
- this.y0 = this.utmSouth ? 10000000 : 0;
- this.k0 = 0.9996;
- etmerc.init.apply(this);
- this.forward = etmerc.forward;
- this.inverse = etmerc.inverse;
- }
- var names$5 = ["Universal Transverse Mercator System", "utm"];
- var utm = {
- init: init$4,
- names: names$5,
- dependsOn: dependsOn
- };
- var srat = function(esinp, exp) {
- return (Math.pow((1 - esinp) / (1 + esinp), exp));
- };
- var MAX_ITER$1 = 20;
- function init$6() {
- var sphi = Math.sin(this.lat0);
- var cphi = Math.cos(this.lat0);
- cphi *= cphi;
- this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);
- this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));
- this.phic0 = Math.asin(sphi / this.C);
- this.ratexp = 0.5 * this.C * this.e;
- this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));
- }
- function forward$5(p) {
- var lon = p.x;
- var lat = p.y;
- p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;
- p.x = this.C * lon;
- return p;
- }
- function inverse$5(p) {
- var DEL_TOL = 1e-14;
- var lon = p.x / this.C;
- var lat = p.y;
- var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);
- for (var i = MAX_ITER$1; i > 0; --i) {
- lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;
- if (Math.abs(lat - p.y) < DEL_TOL) {
- break;
- }
- p.y = lat;
- }
- /* convergence failed */
- if (!i) {
- return null;
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$7 = ["gauss"];
- var gauss = {
- init: init$6,
- forward: forward$5,
- inverse: inverse$5,
- names: names$7
- };
- function init$5() {
- gauss.init.apply(this);
- if (!this.rc) {
- return;
- }
- this.sinc0 = Math.sin(this.phic0);
- this.cosc0 = Math.cos(this.phic0);
- this.R2 = 2 * this.rc;
- if (!this.title) {
- this.title = "Oblique Stereographic Alternative";
- }
- }
- function forward$4(p) {
- var sinc, cosc, cosl, k;
- p.x = adjust_lon(p.x - this.long0);
- gauss.forward.apply(this, [p]);
- sinc = Math.sin(p.y);
- cosc = Math.cos(p.y);
- cosl = Math.cos(p.x);
- k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);
- p.x = k * cosc * Math.sin(p.x);
- p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);
- p.x = this.a * p.x + this.x0;
- p.y = this.a * p.y + this.y0;
- return p;
- }
- function inverse$4(p) {
- var sinc, cosc, lon, lat, rho;
- p.x = (p.x - this.x0) / this.a;
- p.y = (p.y - this.y0) / this.a;
- p.x /= this.k0;
- p.y /= this.k0;
- if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {
- var c = 2 * Math.atan2(rho, this.R2);
- sinc = Math.sin(c);
- cosc = Math.cos(c);
- lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);
- lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);
- }
- else {
- lat = this.phic0;
- lon = 0;
- }
- p.x = lon;
- p.y = lat;
- gauss.inverse.apply(this, [p]);
- p.x = adjust_lon(p.x + this.long0);
- return p;
- }
- var names$6 = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereographic", "sterea","Oblique Stereographic Alternative"];
- var sterea = {
- init: init$5,
- forward: forward$4,
- inverse: inverse$4,
- names: names$6
- };
- function ssfn_(phit, sinphi, eccen) {
- sinphi *= eccen;
- return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));
- }
- function init$7() {
- this.coslat0 = Math.cos(this.lat0);
- this.sinlat0 = Math.sin(this.lat0);
- if (this.sphere) {
- if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {
- this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));
- }
- }
- else {
- if (Math.abs(this.coslat0) <= EPSLN) {
- if (this.lat0 > 0) {
- //North pole
- //trace('stere:north pole');
- this.con = 1;
- }
- else {
- //South pole
- //trace('stere:south pole');
- this.con = -1;
- }
- }
- this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));
- if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {
- this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));
- }
- this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);
- this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;
- this.cosX0 = Math.cos(this.X0);
- this.sinX0 = Math.sin(this.X0);
- }
- }
- // Stereographic forward equations--mapping lat,long to x,y
- function forward$6(p) {
- var lon = p.x;
- var lat = p.y;
- var sinlat = Math.sin(lat);
- var coslat = Math.cos(lat);
- var A, X, sinX, cosX, ts, rh;
- var dlon = adjust_lon(lon - this.long0);
- if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {
- //case of the origine point
- //trace('stere:this is the origin point');
- p.x = NaN;
- p.y = NaN;
- return p;
- }
- if (this.sphere) {
- //trace('stere:sphere case');
- A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));
- p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;
- p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;
- return p;
- }
- else {
- X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;
- cosX = Math.cos(X);
- sinX = Math.sin(X);
- if (Math.abs(this.coslat0) <= EPSLN) {
- ts = tsfnz(this.e, lat * this.con, this.con * sinlat);
- rh = 2 * this.a * this.k0 * ts / this.cons;
- p.x = this.x0 + rh * Math.sin(lon - this.long0);
- p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);
- //trace(p.toString());
- return p;
- }
- else if (Math.abs(this.sinlat0) < EPSLN) {
- //Eq
- //trace('stere:equateur');
- A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));
- p.y = A * sinX;
- }
- else {
- //other case
- //trace('stere:normal case');
- A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));
- p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;
- }
- p.x = A * cosX * Math.sin(dlon) + this.x0;
- }
- //trace(p.toString());
- return p;
- }
- //* Stereographic inverse equations--mapping x,y to lat/long
- function inverse$6(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var lon, lat, ts, ce, Chi;
- var rh = Math.sqrt(p.x * p.x + p.y * p.y);
- if (this.sphere) {
- var c = 2 * Math.atan(rh / (0.5 * this.a * this.k0));
- lon = this.long0;
- lat = this.lat0;
- if (rh <= EPSLN) {
- p.x = lon;
- p.y = lat;
- return p;
- }
- lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);
- if (Math.abs(this.coslat0) < EPSLN) {
- if (this.lat0 > 0) {
- lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
- }
- else {
- lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
- }
- }
- else {
- lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- else {
- if (Math.abs(this.coslat0) <= EPSLN) {
- if (rh <= EPSLN) {
- lat = this.lat0;
- lon = this.long0;
- p.x = lon;
- p.y = lat;
- //trace(p.toString());
- return p;
- }
- p.x *= this.con;
- p.y *= this.con;
- ts = rh * this.cons / (2 * this.a * this.k0);
- lat = this.con * phi2z(this.e, ts);
- lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));
- }
- else {
- ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));
- lon = this.long0;
- if (rh <= EPSLN) {
- Chi = this.X0;
- }
- else {
- Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);
- lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));
- }
- lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));
- }
- }
- p.x = lon;
- p.y = lat;
- //trace(p.toString());
- return p;
- }
- var names$8 = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)"];
- var stere = {
- init: init$7,
- forward: forward$6,
- inverse: inverse$6,
- names: names$8,
- ssfn_: ssfn_
- };
- /*
- references:
- Formules et constantes pour le Calcul pour la
- projection cylindrique conforme à axe oblique et pour la transformation entre
- des systèmes de référence.
- http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf
- */
- function init$8() {
- var phy0 = this.lat0;
- this.lambda0 = this.long0;
- var sinPhy0 = Math.sin(phy0);
- var semiMajorAxis = this.a;
- var invF = this.rf;
- var flattening = 1 / invF;
- var e2 = 2 * flattening - Math.pow(flattening, 2);
- var e = this.e = Math.sqrt(e2);
- this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));
- this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));
- this.b0 = Math.asin(sinPhy0 / this.alpha);
- var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));
- var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));
- var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));
- this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;
- }
- function forward$7(p) {
- var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));
- var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));
- var S = -this.alpha * (Sa1 + Sa2) + this.K;
- // spheric latitude
- var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);
- // spheric longitude
- var I = this.alpha * (p.x - this.lambda0);
- // psoeudo equatorial rotation
- var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));
- var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));
- p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;
- p.x = this.R * rotI + this.x0;
- return p;
- }
- function inverse$7(p) {
- var Y = p.x - this.x0;
- var X = p.y - this.y0;
- var rotI = Y / this.R;
- var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);
- var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));
- var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));
- var lambda = this.lambda0 + I / this.alpha;
- var S = 0;
- var phy = b;
- var prevPhy = -1000;
- var iteration = 0;
- while (Math.abs(phy - prevPhy) > 0.0000001) {
- if (++iteration > 20) {
- //...reportError("omercFwdInfinity");
- return;
- }
- //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));
- S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));
- prevPhy = phy;
- phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;
- }
- p.x = lambda;
- p.y = phy;
- return p;
- }
- var names$9 = ["somerc"];
- var somerc = {
- init: init$8,
- forward: forward$7,
- inverse: inverse$7,
- names: names$9
- };
- /* Initialize the Oblique Mercator projection
- ------------------------------------------*/
- function init$9() {
- this.no_off = this.no_off || false;
- this.no_rot = this.no_rot || false;
- if (isNaN(this.k0)) {
- this.k0 = 1;
- }
- var sinlat = Math.sin(this.lat0);
- var coslat = Math.cos(this.lat0);
- var con = this.e * sinlat;
- this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));
- this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);
- var t0 = tsfnz(this.e, this.lat0, sinlat);
- var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));
- if (dl * dl < 1) {
- dl = 1;
- }
- var fl;
- var gl;
- if (!isNaN(this.longc)) {
- //Central point and azimuth method
- if (this.lat0 >= 0) {
- fl = dl + Math.sqrt(dl * dl - 1);
- }
- else {
- fl = dl - Math.sqrt(dl * dl - 1);
- }
- this.el = fl * Math.pow(t0, this.bl);
- gl = 0.5 * (fl - 1 / fl);
- this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);
- this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;
- }
- else {
- //2 points method
- var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));
- var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));
- if (this.lat0 >= 0) {
- this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);
- }
- else {
- this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);
- }
- var hl = Math.pow(t1, this.bl);
- var ll = Math.pow(t2, this.bl);
- fl = this.el / hl;
- gl = 0.5 * (fl - 1 / fl);
- var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);
- var pl = (ll - hl) / (ll + hl);
- var dlon12 = adjust_lon(this.long1 - this.long2);
- this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;
- this.long0 = adjust_lon(this.long0);
- var dlon10 = adjust_lon(this.long1 - this.long0);
- this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);
- this.alpha = Math.asin(dl * Math.sin(this.gamma0));
- }
- if (this.no_off) {
- this.uc = 0;
- }
- else {
- if (this.lat0 >= 0) {
- this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));
- }
- else {
- this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));
- }
- }
- }
- /* Oblique Mercator forward equations--mapping lat,long to x,y
- ----------------------------------------------------------*/
- function forward$8(p) {
- var lon = p.x;
- var lat = p.y;
- var dlon = adjust_lon(lon - this.long0);
- var us, vs;
- var con;
- if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {
- if (lat > 0) {
- con = -1;
- }
- else {
- con = 1;
- }
- vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));
- us = -1 * con * HALF_PI * this.al / this.bl;
- }
- else {
- var t = tsfnz(this.e, lat, Math.sin(lat));
- var ql = this.el / Math.pow(t, this.bl);
- var sl = 0.5 * (ql - 1 / ql);
- var tl = 0.5 * (ql + 1 / ql);
- var vl = Math.sin(this.bl * (dlon));
- var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;
- if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {
- vs = Number.POSITIVE_INFINITY;
- }
- else {
- vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;
- }
- if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {
- us = this.al * this.bl * (dlon);
- }
- else {
- us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;
- }
- }
- if (this.no_rot) {
- p.x = this.x0 + us;
- p.y = this.y0 + vs;
- }
- else {
- us -= this.uc;
- p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);
- p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);
- }
- return p;
- }
- function inverse$8(p) {
- var us, vs;
- if (this.no_rot) {
- vs = p.y - this.y0;
- us = p.x - this.x0;
- }
- else {
- vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);
- us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);
- us += this.uc;
- }
- var qp = Math.exp(-1 * this.bl * vs / this.al);
- var sp = 0.5 * (qp - 1 / qp);
- var tp = 0.5 * (qp + 1 / qp);
- var vp = Math.sin(this.bl * us / this.al);
- var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;
- var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);
- if (Math.abs(up - 1) < EPSLN) {
- p.x = this.long0;
- p.y = HALF_PI;
- }
- else if (Math.abs(up + 1) < EPSLN) {
- p.x = this.long0;
- p.y = -1 * HALF_PI;
- }
- else {
- p.y = phi2z(this.e, ts);
- p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);
- }
- return p;
- }
- var names$10 = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "omerc"];
- var omerc = {
- init: init$9,
- forward: forward$8,
- inverse: inverse$8,
- names: names$10
- };
- function init$10() {
- // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north
- //double c_lat; /* center latitude */
- //double c_lon; /* center longitude */
- //double lat1; /* first standard parallel */
- //double lat2; /* second standard parallel */
- //double r_maj; /* major axis */
- //double r_min; /* minor axis */
- //double false_east; /* x offset in meters */
- //double false_north; /* y offset in meters */
- if (!this.lat2) {
- this.lat2 = this.lat1;
- } //if lat2 is not defined
- if (!this.k0) {
- this.k0 = 1;
- }
- this.x0 = this.x0 || 0;
- this.y0 = this.y0 || 0;
- // Standard Parallels cannot be equal and on opposite sides of the equator
- if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
- return;
- }
- var temp = this.b / this.a;
- this.e = Math.sqrt(1 - temp * temp);
- var sin1 = Math.sin(this.lat1);
- var cos1 = Math.cos(this.lat1);
- var ms1 = msfnz(this.e, sin1, cos1);
- var ts1 = tsfnz(this.e, this.lat1, sin1);
- var sin2 = Math.sin(this.lat2);
- var cos2 = Math.cos(this.lat2);
- var ms2 = msfnz(this.e, sin2, cos2);
- var ts2 = tsfnz(this.e, this.lat2, sin2);
- var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));
- if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
- this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);
- }
- else {
- this.ns = sin1;
- }
- if (isNaN(this.ns)) {
- this.ns = sin1;
- }
- this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));
- this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);
- if (!this.title) {
- this.title = "Lambert Conformal Conic";
- }
- }
- // Lambert Conformal conic forward equations--mapping lat,long to x,y
- // -----------------------------------------------------------------
- function forward$9(p) {
- var lon = p.x;
- var lat = p.y;
- // singular cases :
- if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {
- lat = sign(lat) * (HALF_PI - 2 * EPSLN);
- }
- var con = Math.abs(Math.abs(lat) - HALF_PI);
- var ts, rh1;
- if (con > EPSLN) {
- ts = tsfnz(this.e, lat, Math.sin(lat));
- rh1 = this.a * this.f0 * Math.pow(ts, this.ns);
- }
- else {
- con = lat * this.ns;
- if (con <= 0) {
- return null;
- }
- rh1 = 0;
- }
- var theta = this.ns * adjust_lon(lon - this.long0);
- p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;
- p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;
- return p;
- }
- // Lambert Conformal Conic inverse equations--mapping x,y to lat/long
- // -----------------------------------------------------------------
- function inverse$9(p) {
- var rh1, con, ts;
- var lat, lon;
- var x = (p.x - this.x0) / this.k0;
- var y = (this.rh - (p.y - this.y0) / this.k0);
- if (this.ns > 0) {
- rh1 = Math.sqrt(x * x + y * y);
- con = 1;
- }
- else {
- rh1 = -Math.sqrt(x * x + y * y);
- con = -1;
- }
- var theta = 0;
- if (rh1 !== 0) {
- theta = Math.atan2((con * x), (con * y));
- }
- if ((rh1 !== 0) || (this.ns > 0)) {
- con = 1 / this.ns;
- ts = Math.pow((rh1 / (this.a * this.f0)), con);
- lat = phi2z(this.e, ts);
- if (lat === -9999) {
- return null;
- }
- }
- else {
- lat = -HALF_PI;
- }
- lon = adjust_lon(theta / this.ns + this.long0);
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$11 = ["Lambert Tangential Conformal Conic Projection", "Lambert_Conformal_Conic", "Lambert_Conformal_Conic_2SP", "lcc"];
- var lcc = {
- init: init$10,
- forward: forward$9,
- inverse: inverse$9,
- names: names$11
- };
- function init$11() {
- this.a = 6377397.155;
- this.es = 0.006674372230614;
- this.e = Math.sqrt(this.es);
- if (!this.lat0) {
- this.lat0 = 0.863937979737193;
- }
- if (!this.long0) {
- this.long0 = 0.7417649320975901 - 0.308341501185665;
- }
- /* if scale not set default to 0.9999 */
- if (!this.k0) {
- this.k0 = 0.9999;
- }
- this.s45 = 0.785398163397448; /* 45 */
- this.s90 = 2 * this.s45;
- this.fi0 = this.lat0;
- this.e2 = this.es;
- this.e = Math.sqrt(this.e2);
- this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));
- this.uq = 1.04216856380474;
- this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);
- this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);
- this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;
- this.k1 = this.k0;
- this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));
- this.s0 = 1.37008346281555;
- this.n = Math.sin(this.s0);
- this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);
- this.ad = this.s90 - this.uq;
- }
- /* ellipsoid */
- /* calculate xy from lat/lon */
- /* Constants, identical to inverse transform function */
- function forward$10(p) {
- var gfi, u, deltav, s, d, eps, ro;
- var lon = p.x;
- var lat = p.y;
- var delta_lon = adjust_lon(lon - this.long0);
- /* Transformation */
- gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));
- u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);
- deltav = -delta_lon * this.alfa;
- s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));
- d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));
- eps = this.n * d;
- ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);
- p.y = ro * Math.cos(eps) / 1;
- p.x = ro * Math.sin(eps) / 1;
- if (!this.czech) {
- p.y *= -1;
- p.x *= -1;
- }
- return (p);
- }
- /* calculate lat/lon from xy */
- function inverse$10(p) {
- var u, deltav, s, d, eps, ro, fi1;
- var ok;
- /* Transformation */
- /* revert y, x*/
- var tmp = p.x;
- p.x = p.y;
- p.y = tmp;
- if (!this.czech) {
- p.y *= -1;
- p.x *= -1;
- }
- ro = Math.sqrt(p.x * p.x + p.y * p.y);
- eps = Math.atan2(p.y, p.x);
- d = eps / Math.sin(this.s0);
- s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);
- u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));
- deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));
- p.x = this.long0 - deltav / this.alfa;
- fi1 = u;
- ok = 0;
- var iter = 0;
- do {
- p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);
- if (Math.abs(fi1 - p.y) < 0.0000000001) {
- ok = 1;
- }
- fi1 = p.y;
- iter += 1;
- } while (ok === 0 && iter < 15);
- if (iter >= 15) {
- return null;
- }
- return (p);
- }
- var names$12 = ["Krovak", "krovak"];
- var krovak = {
- init: init$11,
- forward: forward$10,
- inverse: inverse$10,
- names: names$12
- };
- var mlfn = function(e0, e1, e2, e3, phi) {
- return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));
- };
- var e0fn = function(x) {
- return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));
- };
- var e1fn = function(x) {
- return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));
- };
- var e2fn = function(x) {
- return (0.05859375 * x * x * (1 + 0.75 * x));
- };
- var e3fn = function(x) {
- return (x * x * x * (35 / 3072));
- };
- var gN = function(a, e, sinphi) {
- var temp = e * sinphi;
- return a / Math.sqrt(1 - temp * temp);
- };
- var adjust_lat = function(x) {
- return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));
- };
- var imlfn = function(ml, e0, e1, e2, e3) {
- var phi;
- var dphi;
- phi = ml / e0;
- for (var i = 0; i < 15; i++) {
- dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));
- phi += dphi;
- if (Math.abs(dphi) <= 0.0000000001) {
- return phi;
- }
- }
- //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations");
- return NaN;
- };
- function init$12() {
- if (!this.sphere) {
- this.e0 = e0fn(this.es);
- this.e1 = e1fn(this.es);
- this.e2 = e2fn(this.es);
- this.e3 = e3fn(this.es);
- this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
- }
- }
- /* Cassini forward equations--mapping lat,long to x,y
- -----------------------------------------------------------------------*/
- function forward$11(p) {
- /* Forward equations
- -----------------*/
- var x, y;
- var lam = p.x;
- var phi = p.y;
- lam = adjust_lon(lam - this.long0);
- if (this.sphere) {
- x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));
- y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);
- }
- else {
- //ellipsoid
- var sinphi = Math.sin(phi);
- var cosphi = Math.cos(phi);
- var nl = gN(this.a, this.e, sinphi);
- var tl = Math.tan(phi) * Math.tan(phi);
- var al = lam * Math.cos(phi);
- var asq = al * al;
- var cl = this.es * cosphi * cosphi / (1 - this.es);
- var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
- x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));
- y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);
- }
- p.x = x + this.x0;
- p.y = y + this.y0;
- return p;
- }
- /* Inverse equations
- -----------------*/
- function inverse$11(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var x = p.x / this.a;
- var y = p.y / this.a;
- var phi, lam;
- if (this.sphere) {
- var dd = y + this.lat0;
- phi = Math.asin(Math.sin(dd) * Math.cos(x));
- lam = Math.atan2(Math.tan(x), Math.cos(dd));
- }
- else {
- /* ellipsoid */
- var ml1 = this.ml0 / this.a + y;
- var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);
- if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {
- p.x = this.long0;
- p.y = HALF_PI;
- if (y < 0) {
- p.y *= -1;
- }
- return p;
- }
- var nl1 = gN(this.a, this.e, Math.sin(phi1));
- var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);
- var tl1 = Math.pow(Math.tan(phi1), 2);
- var dl = x * this.a / nl1;
- var dsq = dl * dl;
- phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);
- lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);
- }
- p.x = adjust_lon(lam + this.long0);
- p.y = adjust_lat(phi);
- return p;
- }
- var names$13 = ["Cassini", "Cassini_Soldner", "cass"];
- var cass = {
- init: init$12,
- forward: forward$11,
- inverse: inverse$11,
- names: names$13
- };
- var qsfnz = function(eccent, sinphi) {
- var con;
- if (eccent > 1.0e-7) {
- con = eccent * sinphi;
- return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));
- }
- else {
- return (2 * sinphi);
- }
- };
- /*
- reference
- "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
- The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
- */
- var S_POLE = 1;
- var N_POLE = 2;
- var EQUIT = 3;
- var OBLIQ = 4;
- /* Initialize the Lambert Azimuthal Equal Area projection
- ------------------------------------------------------*/
- function init$13() {
- var t = Math.abs(this.lat0);
- if (Math.abs(t - HALF_PI) < EPSLN) {
- this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;
- }
- else if (Math.abs(t) < EPSLN) {
- this.mode = this.EQUIT;
- }
- else {
- this.mode = this.OBLIQ;
- }
- if (this.es > 0) {
- var sinphi;
- this.qp = qsfnz(this.e, 1);
- this.mmf = 0.5 / (1 - this.es);
- this.apa = authset(this.es);
- switch (this.mode) {
- case this.N_POLE:
- this.dd = 1;
- break;
- case this.S_POLE:
- this.dd = 1;
- break;
- case this.EQUIT:
- this.rq = Math.sqrt(0.5 * this.qp);
- this.dd = 1 / this.rq;
- this.xmf = 1;
- this.ymf = 0.5 * this.qp;
- break;
- case this.OBLIQ:
- this.rq = Math.sqrt(0.5 * this.qp);
- sinphi = Math.sin(this.lat0);
- this.sinb1 = qsfnz(this.e, sinphi) / this.qp;
- this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);
- this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);
- this.ymf = (this.xmf = this.rq) / this.dd;
- this.xmf *= this.dd;
- break;
- }
- }
- else {
- if (this.mode === this.OBLIQ) {
- this.sinph0 = Math.sin(this.lat0);
- this.cosph0 = Math.cos(this.lat0);
- }
- }
- }
- /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y
- -----------------------------------------------------------------------*/
- function forward$12(p) {
- /* Forward equations
- -----------------*/
- var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;
- var lam = p.x;
- var phi = p.y;
- lam = adjust_lon(lam - this.long0);
- if (this.sphere) {
- sinphi = Math.sin(phi);
- cosphi = Math.cos(phi);
- coslam = Math.cos(lam);
- if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
- y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;
- if (y <= EPSLN) {
- return null;
- }
- y = Math.sqrt(2 / y);
- x = y * cosphi * Math.sin(lam);
- y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;
- }
- else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
- if (this.mode === this.N_POLE) {
- coslam = -coslam;
- }
- if (Math.abs(phi + this.phi0) < EPSLN) {
- return null;
- }
- y = FORTPI - phi * 0.5;
- y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));
- x = y * Math.sin(lam);
- y *= coslam;
- }
- }
- else {
- sinb = 0;
- cosb = 0;
- b = 0;
- coslam = Math.cos(lam);
- sinlam = Math.sin(lam);
- sinphi = Math.sin(phi);
- q = qsfnz(this.e, sinphi);
- if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
- sinb = q / this.qp;
- cosb = Math.sqrt(1 - sinb * sinb);
- }
- switch (this.mode) {
- case this.OBLIQ:
- b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;
- break;
- case this.EQUIT:
- b = 1 + cosb * coslam;
- break;
- case this.N_POLE:
- b = HALF_PI + phi;
- q = this.qp - q;
- break;
- case this.S_POLE:
- b = phi - HALF_PI;
- q = this.qp + q;
- break;
- }
- if (Math.abs(b) < EPSLN) {
- return null;
- }
- switch (this.mode) {
- case this.OBLIQ:
- case this.EQUIT:
- b = Math.sqrt(2 / b);
- if (this.mode === this.OBLIQ) {
- y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);
- }
- else {
- y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;
- }
- x = this.xmf * b * cosb * sinlam;
- break;
- case this.N_POLE:
- case this.S_POLE:
- if (q >= 0) {
- x = (b = Math.sqrt(q)) * sinlam;
- y = coslam * ((this.mode === this.S_POLE) ? b : -b);
- }
- else {
- x = y = 0;
- }
- break;
- }
- }
- p.x = this.a * x + this.x0;
- p.y = this.a * y + this.y0;
- return p;
- }
- /* Inverse equations
- -----------------*/
- function inverse$12(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var x = p.x / this.a;
- var y = p.y / this.a;
- var lam, phi, cCe, sCe, q, rho, ab;
- if (this.sphere) {
- var cosz = 0,
- rh, sinz = 0;
- rh = Math.sqrt(x * x + y * y);
- phi = rh * 0.5;
- if (phi > 1) {
- return null;
- }
- phi = 2 * Math.asin(phi);
- if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
- sinz = Math.sin(phi);
- cosz = Math.cos(phi);
- }
- switch (this.mode) {
- case this.EQUIT:
- phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);
- x *= sinz;
- y = cosz * rh;
- break;
- case this.OBLIQ:
- phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);
- x *= sinz * this.cosph0;
- y = (cosz - Math.sin(phi) * this.sinph0) * rh;
- break;
- case this.N_POLE:
- y = -y;
- phi = HALF_PI - phi;
- break;
- case this.S_POLE:
- phi -= HALF_PI;
- break;
- }
- lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);
- }
- else {
- ab = 0;
- if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
- x /= this.dd;
- y *= this.dd;
- rho = Math.sqrt(x * x + y * y);
- if (rho < EPSLN) {
- p.x = 0;
- p.y = this.phi0;
- return p;
- }
- sCe = 2 * Math.asin(0.5 * rho / this.rq);
- cCe = Math.cos(sCe);
- x *= (sCe = Math.sin(sCe));
- if (this.mode === this.OBLIQ) {
- ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;
- q = this.qp * ab;
- y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;
- }
- else {
- ab = y * sCe / rho;
- q = this.qp * ab;
- y = rho * cCe;
- }
- }
- else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
- if (this.mode === this.N_POLE) {
- y = -y;
- }
- q = (x * x + y * y);
- if (!q) {
- p.x = 0;
- p.y = this.phi0;
- return p;
- }
- ab = 1 - q / this.qp;
- if (this.mode === this.S_POLE) {
- ab = -ab;
- }
- }
- lam = Math.atan2(x, y);
- phi = authlat(Math.asin(ab), this.apa);
- }
- p.x = adjust_lon(this.long0 + lam);
- p.y = phi;
- return p;
- }
- /* determine latitude from authalic latitude */
- var P00 = 0.33333333333333333333;
- var P01 = 0.17222222222222222222;
- var P02 = 0.10257936507936507936;
- var P10 = 0.06388888888888888888;
- var P11 = 0.06640211640211640211;
- var P20 = 0.01641501294219154443;
- function authset(es) {
- var t;
- var APA = [];
- APA[0] = es * P00;
- t = es * es;
- APA[0] += t * P01;
- APA[1] = t * P10;
- t *= es;
- APA[0] += t * P02;
- APA[1] += t * P11;
- APA[2] = t * P20;
- return APA;
- }
- function authlat(beta, APA) {
- var t = beta + beta;
- return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));
- }
- var names$14 = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"];
- var laea = {
- init: init$13,
- forward: forward$12,
- inverse: inverse$12,
- names: names$14,
- S_POLE: S_POLE,
- N_POLE: N_POLE,
- EQUIT: EQUIT,
- OBLIQ: OBLIQ
- };
- var asinz = function(x) {
- if (Math.abs(x) > 1) {
- x = (x > 1) ? 1 : -1;
- }
- return Math.asin(x);
- };
- function init$14() {
- if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
- return;
- }
- this.temp = this.b / this.a;
- this.es = 1 - Math.pow(this.temp, 2);
- this.e3 = Math.sqrt(this.es);
- this.sin_po = Math.sin(this.lat1);
- this.cos_po = Math.cos(this.lat1);
- this.t1 = this.sin_po;
- this.con = this.sin_po;
- this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);
- this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);
- this.sin_po = Math.sin(this.lat2);
- this.cos_po = Math.cos(this.lat2);
- this.t2 = this.sin_po;
- this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);
- this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);
- this.sin_po = Math.sin(this.lat0);
- this.cos_po = Math.cos(this.lat0);
- this.t3 = this.sin_po;
- this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);
- if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
- this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);
- }
- else {
- this.ns0 = this.con;
- }
- this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;
- this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;
- }
- /* Albers Conical Equal Area forward equations--mapping lat,long to x,y
- -------------------------------------------------------------------*/
- function forward$13(p) {
- var lon = p.x;
- var lat = p.y;
- this.sin_phi = Math.sin(lat);
- this.cos_phi = Math.cos(lat);
- var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);
- var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;
- var theta = this.ns0 * adjust_lon(lon - this.long0);
- var x = rh1 * Math.sin(theta) + this.x0;
- var y = this.rh - rh1 * Math.cos(theta) + this.y0;
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$13(p) {
- var rh1, qs, con, theta, lon, lat;
- p.x -= this.x0;
- p.y = this.rh - p.y + this.y0;
- if (this.ns0 >= 0) {
- rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
- con = 1;
- }
- else {
- rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
- con = -1;
- }
- theta = 0;
- if (rh1 !== 0) {
- theta = Math.atan2(con * p.x, con * p.y);
- }
- con = rh1 * this.ns0 / this.a;
- if (this.sphere) {
- lat = Math.asin((this.c - con * con) / (2 * this.ns0));
- }
- else {
- qs = (this.c - con * con) / this.ns0;
- lat = this.phi1z(this.e3, qs);
- }
- lon = adjust_lon(theta / this.ns0 + this.long0);
- p.x = lon;
- p.y = lat;
- return p;
- }
- /* Function to compute phi1, the latitude for the inverse of the
- Albers Conical Equal-Area projection.
- -------------------------------------------*/
- function phi1z(eccent, qs) {
- var sinphi, cosphi, con, com, dphi;
- var phi = asinz(0.5 * qs);
- if (eccent < EPSLN) {
- return phi;
- }
- var eccnts = eccent * eccent;
- for (var i = 1; i <= 25; i++) {
- sinphi = Math.sin(phi);
- cosphi = Math.cos(phi);
- con = eccent * sinphi;
- com = 1 - con * con;
- dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
- phi = phi + dphi;
- if (Math.abs(dphi) <= 1e-7) {
- return phi;
- }
- }
- return null;
- }
- var names$15 = ["Albers_Conic_Equal_Area", "Albers", "aea"];
- var aea = {
- init: init$14,
- forward: forward$13,
- inverse: inverse$13,
- names: names$15,
- phi1z: phi1z
- };
- /*
- reference:
- Wolfram Mathworld "Gnomonic Projection"
- http://mathworld.wolfram.com/GnomonicProjection.html
- Accessed: 12th November 2009
- */
- function init$15() {
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- this.sin_p14 = Math.sin(this.lat0);
- this.cos_p14 = Math.cos(this.lat0);
- // Approximation for projecting points to the horizon (infinity)
- this.infinity_dist = 1000 * this.a;
- this.rc = 1;
- }
- /* Gnomonic forward equations--mapping lat,long to x,y
- ---------------------------------------------------*/
- function forward$14(p) {
- var sinphi, cosphi; /* sin and cos value */
- var dlon; /* delta longitude value */
- var coslon; /* cos of longitude */
- var ksp; /* scale factor */
- var g;
- var x, y;
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- dlon = adjust_lon(lon - this.long0);
- sinphi = Math.sin(lat);
- cosphi = Math.cos(lat);
- coslon = Math.cos(dlon);
- g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
- ksp = 1;
- if ((g > 0) || (Math.abs(g) <= EPSLN)) {
- x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;
- y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;
- }
- else {
- // Point is in the opposing hemisphere and is unprojectable
- // We still need to return a reasonable point, so we project
- // to infinity, on a bearing
- // equivalent to the northern hemisphere equivalent
- // This is a reasonable approximation for short shapes and lines that
- // straddle the horizon.
- x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);
- y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
- }
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$14(p) {
- var rh; /* Rho */
- var sinc, cosc;
- var c;
- var lon, lat;
- /* Inverse equations
- -----------------*/
- p.x = (p.x - this.x0) / this.a;
- p.y = (p.y - this.y0) / this.a;
- p.x /= this.k0;
- p.y /= this.k0;
- if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {
- c = Math.atan2(rh, this.rc);
- sinc = Math.sin(c);
- cosc = Math.cos(c);
- lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);
- lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);
- lon = adjust_lon(this.long0 + lon);
- }
- else {
- lat = this.phic0;
- lon = 0;
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$16 = ["gnom"];
- var gnom = {
- init: init$15,
- forward: forward$14,
- inverse: inverse$14,
- names: names$16
- };
- var iqsfnz = function(eccent, q) {
- var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));
- if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {
- if (q < 0) {
- return (-1 * HALF_PI);
- }
- else {
- return HALF_PI;
- }
- }
- //var phi = 0.5* q/(1-eccent*eccent);
- var phi = Math.asin(0.5 * q);
- var dphi;
- var sin_phi;
- var cos_phi;
- var con;
- for (var i = 0; i < 30; i++) {
- sin_phi = Math.sin(phi);
- cos_phi = Math.cos(phi);
- con = eccent * sin_phi;
- dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
- phi += dphi;
- if (Math.abs(dphi) <= 0.0000000001) {
- return phi;
- }
- }
- //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations");
- return NaN;
- };
- /*
- reference:
- "Cartographic Projection Procedures for the UNIX Environment-
- A User's Manual" by Gerald I. Evenden,
- USGS Open File Report 90-284and Release 4 Interim Reports (2003)
- */
- function init$16() {
- //no-op
- if (!this.sphere) {
- this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
- }
- }
- /* Cylindrical Equal Area forward equations--mapping lat,long to x,y
- ------------------------------------------------------------*/
- function forward$15(p) {
- var lon = p.x;
- var lat = p.y;
- var x, y;
- /* Forward equations
- -----------------*/
- var dlon = adjust_lon(lon - this.long0);
- if (this.sphere) {
- x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);
- y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);
- }
- else {
- var qs = qsfnz(this.e, Math.sin(lat));
- x = this.x0 + this.a * this.k0 * dlon;
- y = this.y0 + this.a * qs * 0.5 / this.k0;
- }
- p.x = x;
- p.y = y;
- return p;
- }
- /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long
- ------------------------------------------------------------*/
- function inverse$15(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var lon, lat;
- if (this.sphere) {
- lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));
- lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));
- }
- else {
- lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);
- lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$17 = ["cea"];
- var cea = {
- init: init$16,
- forward: forward$15,
- inverse: inverse$15,
- names: names$17
- };
- function init$17() {
- this.x0 = this.x0 || 0;
- this.y0 = this.y0 || 0;
- this.lat0 = this.lat0 || 0;
- this.long0 = this.long0 || 0;
- this.lat_ts = this.lat_ts || 0;
- this.title = this.title || "Equidistant Cylindrical (Plate Carre)";
- this.rc = Math.cos(this.lat_ts);
- }
- // forward equations--mapping lat,long to x,y
- // -----------------------------------------------------------------
- function forward$16(p) {
- var lon = p.x;
- var lat = p.y;
- var dlon = adjust_lon(lon - this.long0);
- var dlat = adjust_lat(lat - this.lat0);
- p.x = this.x0 + (this.a * dlon * this.rc);
- p.y = this.y0 + (this.a * dlat);
- return p;
- }
- // inverse equations--mapping x,y to lat/long
- // -----------------------------------------------------------------
- function inverse$16(p) {
- var x = p.x;
- var y = p.y;
- p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));
- p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));
- return p;
- }
- var names$18 = ["Equirectangular", "Equidistant_Cylindrical", "eqc"];
- var eqc = {
- init: init$17,
- forward: forward$16,
- inverse: inverse$16,
- names: names$18
- };
- var MAX_ITER$2 = 20;
- function init$18() {
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- this.temp = this.b / this.a;
- this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles
- this.e = Math.sqrt(this.es);
- this.e0 = e0fn(this.es);
- this.e1 = e1fn(this.es);
- this.e2 = e2fn(this.es);
- this.e3 = e3fn(this.es);
- this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas
- }
- /* Polyconic forward equations--mapping lat,long to x,y
- ---------------------------------------------------*/
- function forward$17(p) {
- var lon = p.x;
- var lat = p.y;
- var x, y, el;
- var dlon = adjust_lon(lon - this.long0);
- el = dlon * Math.sin(lat);
- if (this.sphere) {
- if (Math.abs(lat) <= EPSLN) {
- x = this.a * dlon;
- y = -1 * this.a * this.lat0;
- }
- else {
- x = this.a * Math.sin(el) / Math.tan(lat);
- y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));
- }
- }
- else {
- if (Math.abs(lat) <= EPSLN) {
- x = this.a * dlon;
- y = -1 * this.ml0;
- }
- else {
- var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);
- x = nl * Math.sin(el);
- y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));
- }
- }
- p.x = x + this.x0;
- p.y = y + this.y0;
- return p;
- }
- /* Inverse equations
- -----------------*/
- function inverse$17(p) {
- var lon, lat, x, y, i;
- var al, bl;
- var phi, dphi;
- x = p.x - this.x0;
- y = p.y - this.y0;
- if (this.sphere) {
- if (Math.abs(y + this.a * this.lat0) <= EPSLN) {
- lon = adjust_lon(x / this.a + this.long0);
- lat = 0;
- }
- else {
- al = this.lat0 + y / this.a;
- bl = x * x / this.a / this.a + al * al;
- phi = al;
- var tanphi;
- for (i = MAX_ITER$2; i; --i) {
- tanphi = Math.tan(phi);
- dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);
- phi += dphi;
- if (Math.abs(dphi) <= EPSLN) {
- lat = phi;
- break;
- }
- }
- lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));
- }
- }
- else {
- if (Math.abs(y + this.ml0) <= EPSLN) {
- lat = 0;
- lon = adjust_lon(this.long0 + x / this.a);
- }
- else {
- al = (this.ml0 + y) / this.a;
- bl = x * x / this.a / this.a + al * al;
- phi = al;
- var cl, mln, mlnp, ma;
- var con;
- for (i = MAX_ITER$2; i; --i) {
- con = this.e * Math.sin(phi);
- cl = Math.sqrt(1 - con * con) * Math.tan(phi);
- mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
- mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);
- ma = mln / this.a;
- dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);
- phi -= dphi;
- if (Math.abs(dphi) <= EPSLN) {
- lat = phi;
- break;
- }
- }
- //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);
- cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);
- lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));
- }
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$19 = ["Polyconic", "poly"];
- var poly = {
- init: init$18,
- forward: forward$17,
- inverse: inverse$17,
- names: names$19
- };
- /*
- reference
- Department of Land and Survey Technical Circular 1973/32
- http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf
- OSG Technical Report 4.1
- http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf
- */
- /**
- * iterations: Number of iterations to refine inverse transform.
- * 0 -> km accuracy
- * 1 -> m accuracy -- suitable for most mapping applications
- * 2 -> mm accuracy
- */
- function init$19() {
- this.A = [];
- this.A[1] = 0.6399175073;
- this.A[2] = -0.1358797613;
- this.A[3] = 0.063294409;
- this.A[4] = -0.02526853;
- this.A[5] = 0.0117879;
- this.A[6] = -0.0055161;
- this.A[7] = 0.0026906;
- this.A[8] = -0.001333;
- this.A[9] = 0.00067;
- this.A[10] = -0.00034;
- this.B_re = [];
- this.B_im = [];
- this.B_re[1] = 0.7557853228;
- this.B_im[1] = 0;
- this.B_re[2] = 0.249204646;
- this.B_im[2] = 0.003371507;
- this.B_re[3] = -0.001541739;
- this.B_im[3] = 0.041058560;
- this.B_re[4] = -0.10162907;
- this.B_im[4] = 0.01727609;
- this.B_re[5] = -0.26623489;
- this.B_im[5] = -0.36249218;
- this.B_re[6] = -0.6870983;
- this.B_im[6] = -1.1651967;
- this.C_re = [];
- this.C_im = [];
- this.C_re[1] = 1.3231270439;
- this.C_im[1] = 0;
- this.C_re[2] = -0.577245789;
- this.C_im[2] = -0.007809598;
- this.C_re[3] = 0.508307513;
- this.C_im[3] = -0.112208952;
- this.C_re[4] = -0.15094762;
- this.C_im[4] = 0.18200602;
- this.C_re[5] = 1.01418179;
- this.C_im[5] = 1.64497696;
- this.C_re[6] = 1.9660549;
- this.C_im[6] = 2.5127645;
- this.D = [];
- this.D[1] = 1.5627014243;
- this.D[2] = 0.5185406398;
- this.D[3] = -0.03333098;
- this.D[4] = -0.1052906;
- this.D[5] = -0.0368594;
- this.D[6] = 0.007317;
- this.D[7] = 0.01220;
- this.D[8] = 0.00394;
- this.D[9] = -0.0013;
- }
- /**
- New Zealand Map Grid Forward - long/lat to x/y
- long/lat in radians
- */
- function forward$18(p) {
- var n;
- var lon = p.x;
- var lat = p.y;
- var delta_lat = lat - this.lat0;
- var delta_lon = lon - this.long0;
- // 1. Calculate d_phi and d_psi ... // and d_lambda
- // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.
- var d_phi = delta_lat / SEC_TO_RAD * 1E-5;
- var d_lambda = delta_lon;
- var d_phi_n = 1; // d_phi^0
- var d_psi = 0;
- for (n = 1; n <= 10; n++) {
- d_phi_n = d_phi_n * d_phi;
- d_psi = d_psi + this.A[n] * d_phi_n;
- }
- // 2. Calculate theta
- var th_re = d_psi;
- var th_im = d_lambda;
- // 3. Calculate z
- var th_n_re = 1;
- var th_n_im = 0; // theta^0
- var th_n_re1;
- var th_n_im1;
- var z_re = 0;
- var z_im = 0;
- for (n = 1; n <= 6; n++) {
- th_n_re1 = th_n_re * th_re - th_n_im * th_im;
- th_n_im1 = th_n_im * th_re + th_n_re * th_im;
- th_n_re = th_n_re1;
- th_n_im = th_n_im1;
- z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;
- z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;
- }
- // 4. Calculate easting and northing
- p.x = (z_im * this.a) + this.x0;
- p.y = (z_re * this.a) + this.y0;
- return p;
- }
- /**
- New Zealand Map Grid Inverse - x/y to long/lat
- */
- function inverse$18(p) {
- var n;
- var x = p.x;
- var y = p.y;
- var delta_x = x - this.x0;
- var delta_y = y - this.y0;
- // 1. Calculate z
- var z_re = delta_y / this.a;
- var z_im = delta_x / this.a;
- // 2a. Calculate theta - first approximation gives km accuracy
- var z_n_re = 1;
- var z_n_im = 0; // z^0
- var z_n_re1;
- var z_n_im1;
- var th_re = 0;
- var th_im = 0;
- for (n = 1; n <= 6; n++) {
- z_n_re1 = z_n_re * z_re - z_n_im * z_im;
- z_n_im1 = z_n_im * z_re + z_n_re * z_im;
- z_n_re = z_n_re1;
- z_n_im = z_n_im1;
- th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;
- th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;
- }
- // 2b. Iterate to refine the accuracy of the calculation
- // 0 iterations gives km accuracy
- // 1 iteration gives m accuracy -- good enough for most mapping applications
- // 2 iterations bives mm accuracy
- for (var i = 0; i < this.iterations; i++) {
- var th_n_re = th_re;
- var th_n_im = th_im;
- var th_n_re1;
- var th_n_im1;
- var num_re = z_re;
- var num_im = z_im;
- for (n = 2; n <= 6; n++) {
- th_n_re1 = th_n_re * th_re - th_n_im * th_im;
- th_n_im1 = th_n_im * th_re + th_n_re * th_im;
- th_n_re = th_n_re1;
- th_n_im = th_n_im1;
- num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
- num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
- }
- th_n_re = 1;
- th_n_im = 0;
- var den_re = this.B_re[1];
- var den_im = this.B_im[1];
- for (n = 2; n <= 6; n++) {
- th_n_re1 = th_n_re * th_re - th_n_im * th_im;
- th_n_im1 = th_n_im * th_re + th_n_re * th_im;
- th_n_re = th_n_re1;
- th_n_im = th_n_im1;
- den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
- den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
- }
- // Complex division
- var den2 = den_re * den_re + den_im * den_im;
- th_re = (num_re * den_re + num_im * den_im) / den2;
- th_im = (num_im * den_re - num_re * den_im) / den2;
- }
- // 3. Calculate d_phi ... // and d_lambda
- var d_psi = th_re;
- var d_lambda = th_im;
- var d_psi_n = 1; // d_psi^0
- var d_phi = 0;
- for (n = 1; n <= 9; n++) {
- d_psi_n = d_psi_n * d_psi;
- d_phi = d_phi + this.D[n] * d_psi_n;
- }
- // 4. Calculate latitude and longitude
- // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.
- var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);
- var lon = this.long0 + d_lambda;
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$20 = ["New_Zealand_Map_Grid", "nzmg"];
- var nzmg = {
- init: init$19,
- forward: forward$18,
- inverse: inverse$18,
- names: names$20
- };
- /*
- reference
- "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
- The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
- */
- /* Initialize the Miller Cylindrical projection
- -------------------------------------------*/
- function init$20() {
- //no-op
- }
- /* Miller Cylindrical forward equations--mapping lat,long to x,y
- ------------------------------------------------------------*/
- function forward$19(p) {
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- var dlon = adjust_lon(lon - this.long0);
- var x = this.x0 + this.a * dlon;
- var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;
- p.x = x;
- p.y = y;
- return p;
- }
- /* Miller Cylindrical inverse equations--mapping x,y to lat/long
- ------------------------------------------------------------*/
- function inverse$19(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var lon = adjust_lon(this.long0 + p.x / this.a);
- var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$21 = ["Miller_Cylindrical", "mill"];
- var mill = {
- init: init$20,
- forward: forward$19,
- inverse: inverse$19,
- names: names$21
- };
- var MAX_ITER$3 = 20;
- function init$21() {
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- if (!this.sphere) {
- this.en = pj_enfn(this.es);
- }
- else {
- this.n = 1;
- this.m = 0;
- this.es = 0;
- this.C_y = Math.sqrt((this.m + 1) / this.n);
- this.C_x = this.C_y / (this.m + 1);
- }
- }
- /* Sinusoidal forward equations--mapping lat,long to x,y
- -----------------------------------------------------*/
- function forward$20(p) {
- var x, y;
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- lon = adjust_lon(lon - this.long0);
- if (this.sphere) {
- if (!this.m) {
- lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;
- }
- else {
- var k = this.n * Math.sin(lat);
- for (var i = MAX_ITER$3; i; --i) {
- var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));
- lat -= V;
- if (Math.abs(V) < EPSLN) {
- break;
- }
- }
- }
- x = this.a * this.C_x * lon * (this.m + Math.cos(lat));
- y = this.a * this.C_y * lat;
- }
- else {
- var s = Math.sin(lat);
- var c = Math.cos(lat);
- y = this.a * pj_mlfn(lat, s, c, this.en);
- x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);
- }
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$20(p) {
- var lat, temp, lon, s;
- p.x -= this.x0;
- lon = p.x / this.a;
- p.y -= this.y0;
- lat = p.y / this.a;
- if (this.sphere) {
- lat /= this.C_y;
- lon = lon / (this.C_x * (this.m + Math.cos(lat)));
- if (this.m) {
- lat = asinz((this.m * lat + Math.sin(lat)) / this.n);
- }
- else if (this.n !== 1) {
- lat = asinz(Math.sin(lat) / this.n);
- }
- lon = adjust_lon(lon + this.long0);
- lat = adjust_lat(lat);
- }
- else {
- lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);
- s = Math.abs(lat);
- if (s < HALF_PI) {
- s = Math.sin(lat);
- temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));
- //temp = this.long0 + p.x / (this.a * Math.cos(lat));
- lon = adjust_lon(temp);
- }
- else if ((s - EPSLN) < HALF_PI) {
- lon = this.long0;
- }
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$22 = ["Sinusoidal", "sinu"];
- var sinu = {
- init: init$21,
- forward: forward$20,
- inverse: inverse$20,
- names: names$22
- };
- function init$22() {}
- /* Mollweide forward equations--mapping lat,long to x,y
- ----------------------------------------------------*/
- function forward$21(p) {
- /* Forward equations
- -----------------*/
- var lon = p.x;
- var lat = p.y;
- var delta_lon = adjust_lon(lon - this.long0);
- var theta = lat;
- var con = Math.PI * Math.sin(lat);
- /* Iterate using the Newton-Raphson method to find theta
- -----------------------------------------------------*/
- for (var i = 0; true; i++) {
- var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));
- theta += delta_theta;
- if (Math.abs(delta_theta) < EPSLN) {
- break;
- }
- }
- theta /= 2;
- /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting"
- this is done here because of precision problems with "cos(theta)"
- --------------------------------------------------------------------------*/
- if (Math.PI / 2 - Math.abs(lat) < EPSLN) {
- delta_lon = 0;
- }
- var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;
- var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$21(p) {
- var theta;
- var arg;
- /* Inverse equations
- -----------------*/
- p.x -= this.x0;
- p.y -= this.y0;
- arg = p.y / (1.4142135623731 * this.a);
- /* Because of division by zero problems, 'arg' can not be 1. Therefore
- a number very close to one is used instead.
- -------------------------------------------------------------------*/
- if (Math.abs(arg) > 0.999999999999) {
- arg = 0.999999999999;
- }
- theta = Math.asin(arg);
- var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));
- if (lon < (-Math.PI)) {
- lon = -Math.PI;
- }
- if (lon > Math.PI) {
- lon = Math.PI;
- }
- arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;
- if (Math.abs(arg) > 1) {
- arg = 1;
- }
- var lat = Math.asin(arg);
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$23 = ["Mollweide", "moll"];
- var moll = {
- init: init$22,
- forward: forward$21,
- inverse: inverse$21,
- names: names$23
- };
- function init$23() {
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- // Standard Parallels cannot be equal and on opposite sides of the equator
- if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
- return;
- }
- this.lat2 = this.lat2 || this.lat1;
- this.temp = this.b / this.a;
- this.es = 1 - Math.pow(this.temp, 2);
- this.e = Math.sqrt(this.es);
- this.e0 = e0fn(this.es);
- this.e1 = e1fn(this.es);
- this.e2 = e2fn(this.es);
- this.e3 = e3fn(this.es);
- this.sinphi = Math.sin(this.lat1);
- this.cosphi = Math.cos(this.lat1);
- this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);
- this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);
- if (Math.abs(this.lat1 - this.lat2) < EPSLN) {
- this.ns = this.sinphi;
- }
- else {
- this.sinphi = Math.sin(this.lat2);
- this.cosphi = Math.cos(this.lat2);
- this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);
- this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);
- this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);
- }
- this.g = this.ml1 + this.ms1 / this.ns;
- this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
- this.rh = this.a * (this.g - this.ml0);
- }
- /* Equidistant Conic forward equations--mapping lat,long to x,y
- -----------------------------------------------------------*/
- function forward$22(p) {
- var lon = p.x;
- var lat = p.y;
- var rh1;
- /* Forward equations
- -----------------*/
- if (this.sphere) {
- rh1 = this.a * (this.g - lat);
- }
- else {
- var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);
- rh1 = this.a * (this.g - ml);
- }
- var theta = this.ns * adjust_lon(lon - this.long0);
- var x = this.x0 + rh1 * Math.sin(theta);
- var y = this.y0 + this.rh - rh1 * Math.cos(theta);
- p.x = x;
- p.y = y;
- return p;
- }
- /* Inverse equations
- -----------------*/
- function inverse$22(p) {
- p.x -= this.x0;
- p.y = this.rh - p.y + this.y0;
- var con, rh1, lat, lon;
- if (this.ns >= 0) {
- rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
- con = 1;
- }
- else {
- rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
- con = -1;
- }
- var theta = 0;
- if (rh1 !== 0) {
- theta = Math.atan2(con * p.x, con * p.y);
- }
- if (this.sphere) {
- lon = adjust_lon(this.long0 + theta / this.ns);
- lat = adjust_lat(this.g - rh1 / this.a);
- p.x = lon;
- p.y = lat;
- return p;
- }
- else {
- var ml = this.g - rh1 / this.a;
- lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);
- lon = adjust_lon(this.long0 + theta / this.ns);
- p.x = lon;
- p.y = lat;
- return p;
- }
- }
- var names$24 = ["Equidistant_Conic", "eqdc"];
- var eqdc = {
- init: init$23,
- forward: forward$22,
- inverse: inverse$22,
- names: names$24
- };
- /* Initialize the Van Der Grinten projection
- ----------------------------------------*/
- function init$24() {
- //this.R = 6370997; //Radius of earth
- this.R = this.a;
- }
- function forward$23(p) {
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- var dlon = adjust_lon(lon - this.long0);
- var x, y;
- if (Math.abs(lat) <= EPSLN) {
- x = this.x0 + this.R * dlon;
- y = this.y0;
- }
- var theta = asinz(2 * Math.abs(lat / Math.PI));
- if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {
- x = this.x0;
- if (lat >= 0) {
- y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);
- }
- else {
- y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);
- }
- // return(OK);
- }
- var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));
- var asq = al * al;
- var sinth = Math.sin(theta);
- var costh = Math.cos(theta);
- var g = costh / (sinth + costh - 1);
- var gsq = g * g;
- var m = g * (2 / sinth - 1);
- var msq = m * m;
- var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);
- if (dlon < 0) {
- con = -con;
- }
- x = this.x0 + con;
- //con = Math.abs(con / (Math.PI * this.R));
- var q = asq + g;
- con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);
- if (lat >= 0) {
- //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
- y = this.y0 + con;
- }
- else {
- //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
- y = this.y0 - con;
- }
- p.x = x;
- p.y = y;
- return p;
- }
- /* Van Der Grinten inverse equations--mapping x,y to lat/long
- ---------------------------------------------------------*/
- function inverse$23(p) {
- var lon, lat;
- var xx, yy, xys, c1, c2, c3;
- var a1;
- var m1;
- var con;
- var th1;
- var d;
- /* inverse equations
- -----------------*/
- p.x -= this.x0;
- p.y -= this.y0;
- con = Math.PI * this.R;
- xx = p.x / con;
- yy = p.y / con;
- xys = xx * xx + yy * yy;
- c1 = -Math.abs(yy) * (1 + xys);
- c2 = c1 - 2 * yy * yy + xx * xx;
- c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;
- d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;
- a1 = (c1 - c2 * c2 / 3 / c3) / c3;
- m1 = 2 * Math.sqrt(-a1 / 3);
- con = ((3 * d) / a1) / m1;
- if (Math.abs(con) > 1) {
- if (con >= 0) {
- con = 1;
- }
- else {
- con = -1;
- }
- }
- th1 = Math.acos(con) / 3;
- if (p.y >= 0) {
- lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
- }
- else {
- lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
- }
- if (Math.abs(xx) < EPSLN) {
- lon = this.long0;
- }
- else {
- lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$25 = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"];
- var vandg = {
- init: init$24,
- forward: forward$23,
- inverse: inverse$23,
- names: names$25
- };
- function init$25() {
- this.sin_p12 = Math.sin(this.lat0);
- this.cos_p12 = Math.cos(this.lat0);
- }
- function forward$24(p) {
- var lon = p.x;
- var lat = p.y;
- var sinphi = Math.sin(p.y);
- var cosphi = Math.cos(p.y);
- var dlon = adjust_lon(lon - this.long0);
- var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;
- if (this.sphere) {
- if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
- //North Pole case
- p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);
- p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);
- return p;
- }
- else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
- //South Pole case
- p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);
- p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);
- return p;
- }
- else {
- //default case
- cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);
- c = Math.acos(cos_c);
- kp = c / Math.sin(c);
- p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);
- p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));
- return p;
- }
- }
- else {
- e0 = e0fn(this.es);
- e1 = e1fn(this.es);
- e2 = e2fn(this.es);
- e3 = e3fn(this.es);
- if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
- //North Pole case
- Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
- Ml = this.a * mlfn(e0, e1, e2, e3, lat);
- p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);
- p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);
- return p;
- }
- else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
- //South Pole case
- Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
- Ml = this.a * mlfn(e0, e1, e2, e3, lat);
- p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);
- p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);
- return p;
- }
- else {
- //Default case
- tanphi = sinphi / cosphi;
- Nl1 = gN(this.a, this.e, this.sin_p12);
- Nl = gN(this.a, this.e, sinphi);
- psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));
- Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));
- if (Az === 0) {
- s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
- }
- else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {
- s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
- }
- else {
- s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));
- }
- G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);
- H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);
- GH = G * H;
- Hs = H * H;
- s2 = s * s;
- s3 = s2 * s;
- s4 = s3 * s;
- s5 = s4 * s;
- c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);
- p.x = this.x0 + c * Math.sin(Az);
- p.y = this.y0 + c * Math.cos(Az);
- return p;
- }
- }
- }
- function inverse$24(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F;
- if (this.sphere) {
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- if (rh > (2 * HALF_PI * this.a)) {
- return;
- }
- z = rh / this.a;
- sinz = Math.sin(z);
- cosz = Math.cos(z);
- lon = this.long0;
- if (Math.abs(rh) <= EPSLN) {
- lat = this.lat0;
- }
- else {
- lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);
- con = Math.abs(this.lat0) - HALF_PI;
- if (Math.abs(con) <= EPSLN) {
- if (this.lat0 >= 0) {
- lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
- }
- else {
- lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
- }
- }
- else {
- /*con = cosz - this.sin_p12 * Math.sin(lat);
- if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {
- //no-op, just keep the lon value as is
- } else {
- var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));
- lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));
- }*/
- lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));
- }
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- else {
- e0 = e0fn(this.es);
- e1 = e1fn(this.es);
- e2 = e2fn(this.es);
- e3 = e3fn(this.es);
- if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
- //North pole case
- Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- M = Mlp - rh;
- lat = imlfn(M / this.a, e0, e1, e2, e3);
- lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
- p.x = lon;
- p.y = lat;
- return p;
- }
- else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
- //South pole case
- Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- M = rh - Mlp;
- lat = imlfn(M / this.a, e0, e1, e2, e3);
- lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
- p.x = lon;
- p.y = lat;
- return p;
- }
- else {
- //default case
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- Az = Math.atan2(p.x, p.y);
- N1 = gN(this.a, this.e, this.sin_p12);
- cosAz = Math.cos(Az);
- tmp = this.e * this.cos_p12 * cosAz;
- A = -tmp * tmp / (1 - this.es);
- B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);
- D = rh / N1;
- Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;
- F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;
- psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);
- lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));
- lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es));
- p.x = lon;
- p.y = lat;
- return p;
- }
- }
- }
- var names$26 = ["Azimuthal_Equidistant", "aeqd"];
- var aeqd = {
- init: init$25,
- forward: forward$24,
- inverse: inverse$24,
- names: names$26
- };
- function init$26() {
- //double temp; /* temporary variable */
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- this.sin_p14 = Math.sin(this.lat0);
- this.cos_p14 = Math.cos(this.lat0);
- }
- /* Orthographic forward equations--mapping lat,long to x,y
- ---------------------------------------------------*/
- function forward$25(p) {
- var sinphi, cosphi; /* sin and cos value */
- var dlon; /* delta longitude value */
- var coslon; /* cos of longitude */
- var ksp; /* scale factor */
- var g, x, y;
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- dlon = adjust_lon(lon - this.long0);
- sinphi = Math.sin(lat);
- cosphi = Math.cos(lat);
- coslon = Math.cos(dlon);
- g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
- ksp = 1;
- if ((g > 0) || (Math.abs(g) <= EPSLN)) {
- x = this.a * ksp * cosphi * Math.sin(dlon);
- y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
- }
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$25(p) {
- var rh; /* height above ellipsoid */
- var z; /* angle */
- var sinz, cosz; /* sin of z and cos of z */
- var con;
- var lon, lat;
- /* Inverse equations
- -----------------*/
- p.x -= this.x0;
- p.y -= this.y0;
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- z = asinz(rh / this.a);
- sinz = Math.sin(z);
- cosz = Math.cos(z);
- lon = this.long0;
- if (Math.abs(rh) <= EPSLN) {
- lat = this.lat0;
- p.x = lon;
- p.y = lat;
- return p;
- }
- lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);
- con = Math.abs(this.lat0) - HALF_PI;
- if (Math.abs(con) <= EPSLN) {
- if (this.lat0 >= 0) {
- lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
- }
- else {
- lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$27 = ["ortho"];
- var ortho = {
- init: init$26,
- forward: forward$25,
- inverse: inverse$25,
- names: names$27
- };
- var includedProjections = function(proj4){
- proj4.Proj.projections.add(tmerc);
- proj4.Proj.projections.add(etmerc);
- proj4.Proj.projections.add(utm);
- proj4.Proj.projections.add(sterea);
- proj4.Proj.projections.add(stere);
- proj4.Proj.projections.add(somerc);
- proj4.Proj.projections.add(omerc);
- proj4.Proj.projections.add(lcc);
- proj4.Proj.projections.add(krovak);
- proj4.Proj.projections.add(cass);
- proj4.Proj.projections.add(laea);
- proj4.Proj.projections.add(aea);
- proj4.Proj.projections.add(gnom);
- proj4.Proj.projections.add(cea);
- proj4.Proj.projections.add(eqc);
- proj4.Proj.projections.add(poly);
- proj4.Proj.projections.add(nzmg);
- proj4.Proj.projections.add(mill);
- proj4.Proj.projections.add(sinu);
- proj4.Proj.projections.add(moll);
- proj4.Proj.projections.add(eqdc);
- proj4.Proj.projections.add(vandg);
- proj4.Proj.projections.add(aeqd);
- proj4.Proj.projections.add(ortho);
- };
- proj4$1.defaultDatum = 'WGS84'; //default datum
- proj4$1.Proj = Projection$1;
- proj4$1.WGS84 = new proj4$1.Proj('WGS84');
- proj4$1.Point = Point;
- proj4$1.toPoint = toPoint;
- proj4$1.defs = defs;
- proj4$1.transform = transform;
- proj4$1.mgrs = mgrs;
- proj4$1.version = version;
- includedProjections(proj4$1);
- return proj4$1;
- })));
- },{}],286:[function(require,module,exports){
- exports.publicEncrypt = require('./publicEncrypt')
- exports.privateDecrypt = require('./privateDecrypt')
- exports.privateEncrypt = function privateEncrypt (key, buf) {
- return exports.publicEncrypt(key, buf, true)
- }
- exports.publicDecrypt = function publicDecrypt (key, buf) {
- return exports.privateDecrypt(key, buf, true)
- }
- },{"./privateDecrypt":288,"./publicEncrypt":289}],287:[function(require,module,exports){
- var createHash = require('create-hash')
- var Buffer = require('safe-buffer').Buffer
- module.exports = function (seed, len) {
- var t = Buffer.alloc(0)
- var i = 0
- var c
- while (t.length < len) {
- c = i2ops(i++)
- t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])
- }
- return t.slice(0, len)
- }
- function i2ops (c) {
- var out = Buffer.allocUnsafe(4)
- out.writeUInt32BE(c, 0)
- return out
- }
- },{"create-hash":188,"safe-buffer":318}],288:[function(require,module,exports){
- var parseKeys = require('parse-asn1')
- var mgf = require('./mgf')
- var xor = require('./xor')
- var BN = require('bn.js')
- var crt = require('browserify-rsa')
- var createHash = require('create-hash')
- var withPublic = require('./withPublic')
- var Buffer = require('safe-buffer').Buffer
- module.exports = function privateDecrypt (privateKey, enc, reverse) {
- var padding
- if (privateKey.padding) {
- padding = privateKey.padding
- } else if (reverse) {
- padding = 1
- } else {
- padding = 4
- }
- var key = parseKeys(privateKey)
- var k = key.modulus.byteLength()
- if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {
- throw new Error('decryption error')
- }
- var msg
- if (reverse) {
- msg = withPublic(new BN(enc), key)
- } else {
- msg = crt(enc, key)
- }
- var zBuffer = Buffer.alloc(k - msg.length)
- msg = Buffer.concat([zBuffer, msg], k)
- if (padding === 4) {
- return oaep(key, msg)
- } else if (padding === 1) {
- return pkcs1(key, msg, reverse)
- } else if (padding === 3) {
- return msg
- } else {
- throw new Error('unknown padding')
- }
- }
- function oaep (key, msg) {
- var k = key.modulus.byteLength()
- var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()
- var hLen = iHash.length
- if (msg[0] !== 0) {
- throw new Error('decryption error')
- }
- var maskedSeed = msg.slice(1, hLen + 1)
- var maskedDb = msg.slice(hLen + 1)
- var seed = xor(maskedSeed, mgf(maskedDb, hLen))
- var db = xor(maskedDb, mgf(seed, k - hLen - 1))
- if (compare(iHash, db.slice(0, hLen))) {
- throw new Error('decryption error')
- }
- var i = hLen
- while (db[i] === 0) {
- i++
- }
- if (db[i++] !== 1) {
- throw new Error('decryption error')
- }
- return db.slice(i)
- }
- function pkcs1 (key, msg, reverse) {
- var p1 = msg.slice(0, 2)
- var i = 2
- var status = 0
- while (msg[i++] !== 0) {
- if (i >= msg.length) {
- status++
- break
- }
- }
- var ps = msg.slice(2, i - 1)
- if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {
- status++
- }
- if (ps.length < 8) {
- status++
- }
- if (status) {
- throw new Error('decryption error')
- }
- return msg.slice(i)
- }
- function compare (a, b) {
- a = Buffer.from(a)
- b = Buffer.from(b)
- var dif = 0
- var len = a.length
- if (a.length !== b.length) {
- dif++
- len = Math.min(a.length, b.length)
- }
- var i = -1
- while (++i < len) {
- dif += (a[i] ^ b[i])
- }
- return dif
- }
- },{"./mgf":287,"./withPublic":290,"./xor":291,"bn.js":147,"browserify-rsa":170,"create-hash":188,"parse-asn1":275,"safe-buffer":318}],289:[function(require,module,exports){
- var parseKeys = require('parse-asn1')
- var randomBytes = require('randombytes')
- var createHash = require('create-hash')
- var mgf = require('./mgf')
- var xor = require('./xor')
- var BN = require('bn.js')
- var withPublic = require('./withPublic')
- var crt = require('browserify-rsa')
- var Buffer = require('safe-buffer').Buffer
- module.exports = function publicEncrypt (publicKey, msg, reverse) {
- var padding
- if (publicKey.padding) {
- padding = publicKey.padding
- } else if (reverse) {
- padding = 1
- } else {
- padding = 4
- }
- var key = parseKeys(publicKey)
- var paddedMsg
- if (padding === 4) {
- paddedMsg = oaep(key, msg)
- } else if (padding === 1) {
- paddedMsg = pkcs1(key, msg, reverse)
- } else if (padding === 3) {
- paddedMsg = new BN(msg)
- if (paddedMsg.cmp(key.modulus) >= 0) {
- throw new Error('data too long for modulus')
- }
- } else {
- throw new Error('unknown padding')
- }
- if (reverse) {
- return crt(paddedMsg, key)
- } else {
- return withPublic(paddedMsg, key)
- }
- }
- function oaep (key, msg) {
- var k = key.modulus.byteLength()
- var mLen = msg.length
- var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()
- var hLen = iHash.length
- var hLen2 = 2 * hLen
- if (mLen > k - hLen2 - 2) {
- throw new Error('message too long')
- }
- var ps = Buffer.alloc(k - mLen - hLen2 - 2)
- var dblen = k - hLen - 1
- var seed = randomBytes(hLen)
- var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))
- var maskedSeed = xor(seed, mgf(maskedDb, hLen))
- return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))
- }
- function pkcs1 (key, msg, reverse) {
- var mLen = msg.length
- var k = key.modulus.byteLength()
- if (mLen > k - 11) {
- throw new Error('message too long')
- }
- var ps
- if (reverse) {
- ps = Buffer.alloc(k - mLen - 3, 0xff)
- } else {
- ps = nonZero(k - mLen - 3)
- }
- return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))
- }
- function nonZero (len) {
- var out = Buffer.allocUnsafe(len)
- var i = 0
- var cache = randomBytes(len * 2)
- var cur = 0
- var num
- while (i < len) {
- if (cur === cache.length) {
- cache = randomBytes(len * 2)
- cur = 0
- }
- num = cache[cur++]
- if (num) {
- out[i++] = num
- }
- }
- return out
- }
- },{"./mgf":287,"./withPublic":290,"./xor":291,"bn.js":147,"browserify-rsa":170,"create-hash":188,"parse-asn1":275,"randombytes":298,"safe-buffer":318}],290:[function(require,module,exports){
- var BN = require('bn.js')
- var Buffer = require('safe-buffer').Buffer
- function withPublic (paddedMsg, key) {
- return Buffer.from(paddedMsg
- .toRed(BN.mont(key.modulus))
- .redPow(new BN(key.publicExponent))
- .fromRed()
- .toArray())
- }
- module.exports = withPublic
- },{"bn.js":147,"safe-buffer":318}],291:[function(require,module,exports){
- module.exports = function xor (a, b) {
- var len = a.length
- var i = -1
- while (++i < len) {
- a[i] ^= b[i]
- }
- return a
- }
- },{}],292:[function(require,module,exports){
- (function (global){
- /*! https://mths.be/punycode v1.4.1 by @mathias */
- ;(function(root) {
- /** Detect free variables */
- var freeExports = typeof exports == 'object' && exports &&
- !exports.nodeType && exports;
- var freeModule = typeof module == 'object' && module &&
- !module.nodeType && module;
- var freeGlobal = typeof global == 'object' && global;
- if (
- freeGlobal.global === freeGlobal ||
- freeGlobal.window === freeGlobal ||
- freeGlobal.self === freeGlobal
- ) {
- root = freeGlobal;
- }
- /**
- * The `punycode` object.
- * @name punycode
- * @type Object
- */
- var punycode,
- /** Highest positive signed 32-bit float value */
- maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
- /** Bootstring parameters */
- base = 36,
- tMin = 1,
- tMax = 26,
- skew = 38,
- damp = 700,
- initialBias = 72,
- initialN = 128, // 0x80
- delimiter = '-', // '\x2D'
- /** Regular expressions */
- regexPunycode = /^xn--/,
- regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
- regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
- /** Error messages */
- errors = {
- 'overflow': 'Overflow: input needs wider integers to process',
- 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
- 'invalid-input': 'Invalid input'
- },
- /** Convenience shortcuts */
- baseMinusTMin = base - tMin,
- floor = Math.floor,
- stringFromCharCode = String.fromCharCode,
- /** Temporary variable */
- key;
- /*--------------------------------------------------------------------------*/
- /**
- * A generic error utility function.
- * @private
- * @param {String} type The error type.
- * @returns {Error} Throws a `RangeError` with the applicable error message.
- */
- function error(type) {
- throw new RangeError(errors[type]);
- }
- /**
- * A generic `Array#map` utility function.
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} callback The function that gets called for every array
- * item.
- * @returns {Array} A new array of values returned by the callback function.
- */
- function map(array, fn) {
- var length = array.length;
- var result = [];
- while (length--) {
- result[length] = fn(array[length]);
- }
- return result;
- }
- /**
- * A simple `Array#map`-like wrapper to work with domain name strings or email
- * addresses.
- * @private
- * @param {String} domain The domain name or email address.
- * @param {Function} callback The function that gets called for every
- * character.
- * @returns {Array} A new string of characters returned by the callback
- * function.
- */
- function mapDomain(string, fn) {
- var parts = string.split('@');
- var result = '';
- if (parts.length > 1) {
- // In email addresses, only the domain name should be punycoded. Leave
- // the local part (i.e. everything up to `@`) intact.
- result = parts[0] + '@';
- string = parts[1];
- }
- // Avoid `split(regex)` for IE8 compatibility. See #17.
- string = string.replace(regexSeparators, '\x2E');
- var labels = string.split('.');
- var encoded = map(labels, fn).join('.');
- return result + encoded;
- }
- /**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see <https://mathiasbynens.be/notes/javascript-encoding>
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
- function ucs2decode(string) {
- var output = [],
- counter = 0,
- length = string.length,
- value,
- extra;
- while (counter < length) {
- value = string.charCodeAt(counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // high surrogate, and there is a next character
- extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) { // low surrogate
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // unmatched surrogate; only append this code unit, in case the next
- // code unit is the high surrogate of a surrogate pair
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
- }
- /**
- * Creates a string based on an array of numeric code points.
- * @see `punycode.ucs2.decode`
- * @memberOf punycode.ucs2
- * @name encode
- * @param {Array} codePoints The array of numeric code points.
- * @returns {String} The new Unicode string (UCS-2).
- */
- function ucs2encode(array) {
- return map(array, function(value) {
- var output = '';
- if (value > 0xFFFF) {
- value -= 0x10000;
- output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
- value = 0xDC00 | value & 0x3FF;
- }
- output += stringFromCharCode(value);
- return output;
- }).join('');
- }
- /**
- * Converts a basic code point into a digit/integer.
- * @see `digitToBasic()`
- * @private
- * @param {Number} codePoint The basic numeric code point value.
- * @returns {Number} The numeric value of a basic code point (for use in
- * representing integers) in the range `0` to `base - 1`, or `base` if
- * the code point does not represent a value.
- */
- function basicToDigit(codePoint) {
- if (codePoint - 48 < 10) {
- return codePoint - 22;
- }
- if (codePoint - 65 < 26) {
- return codePoint - 65;
- }
- if (codePoint - 97 < 26) {
- return codePoint - 97;
- }
- return base;
- }
- /**
- * Converts a digit/integer into a basic code point.
- * @see `basicToDigit()`
- * @private
- * @param {Number} digit The numeric value of a basic code point.
- * @returns {Number} The basic code point whose value (when used for
- * representing integers) is `digit`, which needs to be in the range
- * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
- * used; else, the lowercase form is used. The behavior is undefined
- * if `flag` is non-zero and `digit` has no uppercase form.
- */
- function digitToBasic(digit, flag) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
- }
- /**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- * @private
- */
- function adapt(delta, numPoints, firstTime) {
- var k = 0;
- delta = firstTime ? floor(delta / damp) : delta >> 1;
- delta += floor(delta / numPoints);
- for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
- delta = floor(delta / baseMinusTMin);
- }
- return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
- }
- /**
- * Converts a Punycode string of ASCII-only symbols to a string of Unicode
- * symbols.
- * @memberOf punycode
- * @param {String} input The Punycode string of ASCII-only symbols.
- * @returns {String} The resulting string of Unicode symbols.
- */
- function decode(input) {
- // Don't use UCS-2
- var output = [],
- inputLength = input.length,
- out,
- i = 0,
- n = initialN,
- bias = initialBias,
- basic,
- j,
- index,
- oldi,
- w,
- k,
- digit,
- t,
- /** Cached calculation results */
- baseMinusT;
- // Handle the basic code points: let `basic` be the number of input code
- // points before the last delimiter, or `0` if there is none, then copy
- // the first basic code points to the output.
- basic = input.lastIndexOf(delimiter);
- if (basic < 0) {
- basic = 0;
- }
- for (j = 0; j < basic; ++j) {
- // if it's not a basic code point
- if (input.charCodeAt(j) >= 0x80) {
- error('not-basic');
- }
- output.push(input.charCodeAt(j));
- }
- // Main decoding loop: start just after the last delimiter if any basic code
- // points were copied; start at the beginning otherwise.
- for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
- // `index` is the index of the next character to be consumed.
- // Decode a generalized variable-length integer into `delta`,
- // which gets added to `i`. The overflow checking is easier
- // if we increase `i` as we go, then subtract off its starting
- // value at the end to obtain `delta`.
- for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
- if (index >= inputLength) {
- error('invalid-input');
- }
- digit = basicToDigit(input.charCodeAt(index++));
- if (digit >= base || digit > floor((maxInt - i) / w)) {
- error('overflow');
- }
- i += digit * w;
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (digit < t) {
- break;
- }
- baseMinusT = base - t;
- if (w > floor(maxInt / baseMinusT)) {
- error('overflow');
- }
- w *= baseMinusT;
- }
- out = output.length + 1;
- bias = adapt(i - oldi, out, oldi == 0);
- // `i` was supposed to wrap around from `out` to `0`,
- // incrementing `n` each time, so we'll fix that now:
- if (floor(i / out) > maxInt - n) {
- error('overflow');
- }
- n += floor(i / out);
- i %= out;
- // Insert `n` at position `i` of the output
- output.splice(i++, 0, n);
- }
- return ucs2encode(output);
- }
- /**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- * @memberOf punycode
- * @param {String} input The string of Unicode symbols.
- * @returns {String} The resulting Punycode string of ASCII-only symbols.
- */
- function encode(input) {
- var n,
- delta,
- handledCPCount,
- basicLength,
- bias,
- j,
- m,
- q,
- k,
- t,
- currentValue,
- output = [],
- /** `inputLength` will hold the number of code points in `input`. */
- inputLength,
- /** Cached calculation results */
- handledCPCountPlusOne,
- baseMinusT,
- qMinusT;
- // Convert the input in UCS-2 to Unicode
- input = ucs2decode(input);
- // Cache the length
- inputLength = input.length;
- // Initialize the state
- n = initialN;
- delta = 0;
- bias = initialBias;
- // Handle the basic code points
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue < 0x80) {
- output.push(stringFromCharCode(currentValue));
- }
- }
- handledCPCount = basicLength = output.length;
- // `handledCPCount` is the number of code points that have been handled;
- // `basicLength` is the number of basic code points.
- // Finish the basic string - if it is not empty - with a delimiter
- if (basicLength) {
- output.push(delimiter);
- }
- // Main encoding loop:
- while (handledCPCount < inputLength) {
- // All non-basic code points < n have been handled already. Find the next
- // larger one:
- for (m = maxInt, j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue >= n && currentValue < m) {
- m = currentValue;
- }
- }
- // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
- // but guard against overflow
- handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
- error('overflow');
- }
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue < n && ++delta > maxInt) {
- error('overflow');
- }
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer
- for (q = delta, k = base; /* no condition */; k += base) {
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (q < t) {
- break;
- }
- qMinusT = q - t;
- baseMinusT = base - t;
- output.push(
- stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
- );
- q = floor(qMinusT / baseMinusT);
- }
- output.push(stringFromCharCode(digitToBasic(q, 0)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- ++handledCPCount;
- }
- }
- ++delta;
- ++n;
- }
- return output.join('');
- }
- /**
- * Converts a Punycode string representing a domain name or an email address
- * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
- * it doesn't matter if you call it on a string that has already been
- * converted to Unicode.
- * @memberOf punycode
- * @param {String} input The Punycoded domain name or email address to
- * convert to Unicode.
- * @returns {String} The Unicode representation of the given Punycode
- * string.
- */
- function toUnicode(input) {
- return mapDomain(input, function(string) {
- return regexPunycode.test(string)
- ? decode(string.slice(4).toLowerCase())
- : string;
- });
- }
- /**
- * Converts a Unicode string representing a domain name or an email address to
- * Punycode. Only the non-ASCII parts of the domain name will be converted,
- * i.e. it doesn't matter if you call it with a domain that's already in
- * ASCII.
- * @memberOf punycode
- * @param {String} input The domain name or email address to convert, as a
- * Unicode string.
- * @returns {String} The Punycode representation of the given domain name or
- * email address.
- */
- function toASCII(input) {
- return mapDomain(input, function(string) {
- return regexNonASCII.test(string)
- ? 'xn--' + encode(string)
- : string;
- });
- }
- /*--------------------------------------------------------------------------*/
- /** Define the public API */
- punycode = {
- /**
- * A string representing the current Punycode.js version number.
- * @memberOf punycode
- * @type String
- */
- 'version': '1.4.1',
- /**
- * An object of methods to convert from JavaScript's internal character
- * representation (UCS-2) to Unicode code points, and back.
- * @see <https://mathiasbynens.be/notes/javascript-encoding>
- * @memberOf punycode
- * @type Object
- */
- 'ucs2': {
- 'decode': ucs2decode,
- 'encode': ucs2encode
- },
- 'decode': decode,
- 'encode': encode,
- 'toASCII': toASCII,
- 'toUnicode': toUnicode
- };
- /** Expose `punycode` */
- // Some AMD build optimizers, like r.js, check for specific condition patterns
- // like the following:
- if (
- typeof define == 'function' &&
- typeof define.amd == 'object' &&
- define.amd
- ) {
- define('punycode', function() {
- return punycode;
- });
- } else if (freeExports && freeModule) {
- if (module.exports == freeExports) {
- // in Node.js, io.js, or RingoJS v0.8.0+
- freeModule.exports = punycode;
- } else {
- // in Narwhal or RingoJS v0.7.0-
- for (key in punycode) {
- punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
- }
- }
- } else {
- // in Rhino or a web browser
- root.punycode = punycode;
- }
- }(this));
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],293:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- 'use strict';
- // If obj.hasOwnProperty has been overridden, then calling
- // obj.hasOwnProperty(prop) will break.
- // See: https://github.com/joyent/node/issues/1707
- function hasOwnProperty(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
- }
- module.exports = function(qs, sep, eq, options) {
- sep = sep || '&';
- eq = eq || '=';
- var obj = {};
- if (typeof qs !== 'string' || qs.length === 0) {
- return obj;
- }
- var regexp = /\+/g;
- qs = qs.split(sep);
- var maxKeys = 1000;
- if (options && typeof options.maxKeys === 'number') {
- maxKeys = options.maxKeys;
- }
- var len = qs.length;
- // maxKeys <= 0 means that we should not limit keys count
- if (maxKeys > 0 && len > maxKeys) {
- len = maxKeys;
- }
- for (var i = 0; i < len; ++i) {
- var x = qs[i].replace(regexp, '%20'),
- idx = x.indexOf(eq),
- kstr, vstr, k, v;
- if (idx >= 0) {
- kstr = x.substr(0, idx);
- vstr = x.substr(idx + 1);
- } else {
- kstr = x;
- vstr = '';
- }
- k = decodeURIComponent(kstr);
- v = decodeURIComponent(vstr);
- if (!hasOwnProperty(obj, k)) {
- obj[k] = v;
- } else if (isArray(obj[k])) {
- obj[k].push(v);
- } else {
- obj[k] = [obj[k], v];
- }
- }
- return obj;
- };
- var isArray = Array.isArray || function (xs) {
- return Object.prototype.toString.call(xs) === '[object Array]';
- };
- },{}],294:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- 'use strict';
- var stringifyPrimitive = function(v) {
- switch (typeof v) {
- case 'string':
- return v;
- case 'boolean':
- return v ? 'true' : 'false';
- case 'number':
- return isFinite(v) ? v : '';
- default:
- return '';
- }
- };
- module.exports = function(obj, sep, eq, name) {
- sep = sep || '&';
- eq = eq || '=';
- if (obj === null) {
- obj = undefined;
- }
- if (typeof obj === 'object') {
- return map(objectKeys(obj), function(k) {
- var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
- if (isArray(obj[k])) {
- return map(obj[k], function(v) {
- return ks + encodeURIComponent(stringifyPrimitive(v));
- }).join(sep);
- } else {
- return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
- }
- }).join(sep);
- }
- if (!name) return '';
- return encodeURIComponent(stringifyPrimitive(name)) + eq +
- encodeURIComponent(stringifyPrimitive(obj));
- };
- var isArray = Array.isArray || function (xs) {
- return Object.prototype.toString.call(xs) === '[object Array]';
- };
- function map (xs, f) {
- if (xs.map) return xs.map(f);
- var res = [];
- for (var i = 0; i < xs.length; i++) {
- res.push(f(xs[i], i));
- }
- return res;
- }
- var objectKeys = Object.keys || function (obj) {
- var res = [];
- for (var key in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
- }
- return res;
- };
- },{}],295:[function(require,module,exports){
- 'use strict';
- exports.decode = exports.parse = require('./decode');
- exports.encode = exports.stringify = require('./encode');
- },{"./decode":293,"./encode":294}],296:[function(require,module,exports){
- var inherits = require('inherits')
- var EventEmitter = require('events').EventEmitter
- module.exports = Queue
- module.exports.default = Queue
- function Queue (options) {
- if (!(this instanceof Queue)) {
- return new Queue(options)
- }
- EventEmitter.call(this)
- options = options || {}
- this.concurrency = options.concurrency || Infinity
- this.timeout = options.timeout || 0
- this.autostart = options.autostart || false
- this.results = options.results || null
- this.pending = 0
- this.session = 0
- this.running = false
- this.jobs = []
- this.timers = {}
- }
- inherits(Queue, EventEmitter)
- var arrayMethods = [
- 'pop',
- 'shift',
- 'indexOf',
- 'lastIndexOf'
- ]
- arrayMethods.forEach(function (method) {
- Queue.prototype[method] = function () {
- return Array.prototype[method].apply(this.jobs, arguments)
- }
- })
- Queue.prototype.slice = function (begin, end) {
- this.jobs = this.jobs.slice(begin, end)
- return this
- }
- Queue.prototype.reverse = function () {
- this.jobs.reverse()
- return this
- }
- var arrayAddMethods = [
- 'push',
- 'unshift',
- 'splice'
- ]
- arrayAddMethods.forEach(function (method) {
- Queue.prototype[method] = function () {
- var methodResult = Array.prototype[method].apply(this.jobs, arguments)
- if (this.autostart) {
- this.start()
- }
- return methodResult
- }
- })
- Object.defineProperty(Queue.prototype, 'length', {
- get: function () {
- return this.pending + this.jobs.length
- }
- })
- Queue.prototype.start = function (cb) {
- if (cb) {
- callOnErrorOrEnd.call(this, cb)
- }
- this.running = true
- if (this.pending >= this.concurrency) {
- return
- }
- if (this.jobs.length === 0) {
- if (this.pending === 0) {
- done.call(this)
- }
- return
- }
- var self = this
- var job = this.jobs.shift()
- var once = true
- var session = this.session
- var timeoutId = null
- var didTimeout = false
- var resultIndex = null
- var timeout = job.timeout || this.timeout
- function next (err, result) {
- if (once && self.session === session) {
- once = false
- self.pending--
- if (timeoutId !== null) {
- delete self.timers[timeoutId]
- clearTimeout(timeoutId)
- }
- if (err) {
- self.emit('error', err, job)
- } else if (didTimeout === false) {
- if (resultIndex !== null) {
- self.results[resultIndex] = Array.prototype.slice.call(arguments, 1)
- }
- self.emit('success', result, job)
- }
- if (self.session === session) {
- if (self.pending === 0 && self.jobs.length === 0) {
- done.call(self)
- } else if (self.running) {
- self.start()
- }
- }
- }
- }
- if (timeout) {
- timeoutId = setTimeout(function () {
- didTimeout = true
- if (self.listeners('timeout').length > 0) {
- self.emit('timeout', next, job)
- } else {
- next()
- }
- }, timeout)
- this.timers[timeoutId] = timeoutId
- }
- if (this.results) {
- resultIndex = this.results.length
- this.results[resultIndex] = null
- }
- this.pending++
- self.emit('start', job)
- var promise = job(next)
- if (promise && promise.then && typeof promise.then === 'function') {
- promise.then(function (result) {
- return next(null, result)
- }).catch(function (err) {
- return next(err || true)
- })
- }
- if (this.running && this.jobs.length > 0) {
- this.start()
- }
- }
- Queue.prototype.stop = function () {
- this.running = false
- }
- Queue.prototype.end = function (err) {
- clearTimers.call(this)
- this.jobs.length = 0
- this.pending = 0
- done.call(this, err)
- }
- function clearTimers () {
- for (var key in this.timers) {
- var timeoutId = this.timers[key]
- delete this.timers[key]
- clearTimeout(timeoutId)
- }
- }
- function callOnErrorOrEnd (cb) {
- var self = this
- this.on('error', onerror)
- this.on('end', onend)
- function onerror (err) { self.end(err) }
- function onend (err) {
- self.removeListener('error', onerror)
- self.removeListener('end', onend)
- cb(err, this.results)
- }
- }
- function done (err) {
- this.session++
- this.running = false
- this.emit('end', err)
- }
- },{"events":221,"inherits":262}],297:[function(require,module,exports){
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global.quickselect = factory());
- }(this, (function () { 'use strict';
- function quickselect(arr, k, left, right, compare) {
- quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
- }
- function quickselectStep(arr, k, left, right, compare) {
- while (right > left) {
- if (right - left > 600) {
- var n = right - left + 1;
- var m = k - left + 1;
- var z = Math.log(n);
- var s = 0.5 * Math.exp(2 * z / 3);
- var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
- var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
- var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
- quickselectStep(arr, k, newLeft, newRight, compare);
- }
- var t = arr[k];
- var i = left;
- var j = right;
- swap(arr, left, k);
- if (compare(arr[right], t) > 0) swap(arr, left, right);
- while (i < j) {
- swap(arr, i, j);
- i++;
- j--;
- while (compare(arr[i], t) < 0) i++;
- while (compare(arr[j], t) > 0) j--;
- }
- if (compare(arr[left], t) === 0) swap(arr, left, j);
- else {
- j++;
- swap(arr, j, right);
- }
- if (j <= k) left = j + 1;
- if (k <= j) right = j - 1;
- }
- }
- function swap(arr, i, j) {
- var tmp = arr[i];
- arr[i] = arr[j];
- arr[j] = tmp;
- }
- function defaultCompare(a, b) {
- return a < b ? -1 : a > b ? 1 : 0;
- }
- return quickselect;
- })));
- },{}],298:[function(require,module,exports){
- (function (process,global){
- 'use strict'
- // limit of Crypto.getRandomValues()
- // https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues
- var MAX_BYTES = 65536
- // Node supports requesting up to this number of bytes
- // https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48
- var MAX_UINT32 = 4294967295
- function oldBrowser () {
- throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11')
- }
- var Buffer = require('safe-buffer').Buffer
- var crypto = global.crypto || global.msCrypto
- if (crypto && crypto.getRandomValues) {
- module.exports = randomBytes
- } else {
- module.exports = oldBrowser
- }
- function randomBytes (size, cb) {
- // phantomjs needs to throw
- if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')
- var bytes = Buffer.allocUnsafe(size)
- if (size > 0) { // getRandomValues fails on IE if size == 0
- if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues
- // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
- for (var generated = 0; generated < size; generated += MAX_BYTES) {
- // buffer.slice automatically checks if the end is past the end of
- // the buffer so we don't have to here
- crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))
- }
- } else {
- crypto.getRandomValues(bytes)
- }
- }
- if (typeof cb === 'function') {
- return process.nextTick(function () {
- cb(null, bytes)
- })
- }
- return bytes
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"_process":284,"safe-buffer":318}],299:[function(require,module,exports){
- (function (process,global){
- 'use strict'
- function oldBrowser () {
- throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
- }
- var safeBuffer = require('safe-buffer')
- var randombytes = require('randombytes')
- var Buffer = safeBuffer.Buffer
- var kBufferMaxLength = safeBuffer.kMaxLength
- var crypto = global.crypto || global.msCrypto
- var kMaxUint32 = Math.pow(2, 32) - 1
- function assertOffset (offset, length) {
- if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare
- throw new TypeError('offset must be a number')
- }
- if (offset > kMaxUint32 || offset < 0) {
- throw new TypeError('offset must be a uint32')
- }
- if (offset > kBufferMaxLength || offset > length) {
- throw new RangeError('offset out of range')
- }
- }
- function assertSize (size, offset, length) {
- if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare
- throw new TypeError('size must be a number')
- }
- if (size > kMaxUint32 || size < 0) {
- throw new TypeError('size must be a uint32')
- }
- if (size + offset > length || size > kBufferMaxLength) {
- throw new RangeError('buffer too small')
- }
- }
- if ((crypto && crypto.getRandomValues) || !process.browser) {
- exports.randomFill = randomFill
- exports.randomFillSync = randomFillSync
- } else {
- exports.randomFill = oldBrowser
- exports.randomFillSync = oldBrowser
- }
- function randomFill (buf, offset, size, cb) {
- if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {
- throw new TypeError('"buf" argument must be a Buffer or Uint8Array')
- }
- if (typeof offset === 'function') {
- cb = offset
- offset = 0
- size = buf.length
- } else if (typeof size === 'function') {
- cb = size
- size = buf.length - offset
- } else if (typeof cb !== 'function') {
- throw new TypeError('"cb" argument must be a function')
- }
- assertOffset(offset, buf.length)
- assertSize(size, offset, buf.length)
- return actualFill(buf, offset, size, cb)
- }
- function actualFill (buf, offset, size, cb) {
- if (process.browser) {
- var ourBuf = buf.buffer
- var uint = new Uint8Array(ourBuf, offset, size)
- crypto.getRandomValues(uint)
- if (cb) {
- process.nextTick(function () {
- cb(null, buf)
- })
- return
- }
- return buf
- }
- if (cb) {
- randombytes(size, function (err, bytes) {
- if (err) {
- return cb(err)
- }
- bytes.copy(buf, offset)
- cb(null, buf)
- })
- return
- }
- var bytes = randombytes(size)
- bytes.copy(buf, offset)
- return buf
- }
- function randomFillSync (buf, offset, size) {
- if (typeof offset === 'undefined') {
- offset = 0
- }
- if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {
- throw new TypeError('"buf" argument must be a Buffer or Uint8Array')
- }
- assertOffset(offset, buf.length)
- if (size === undefined) size = buf.length - offset
- assertSize(size, offset, buf.length)
- return actualFill(buf, offset, size)
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"_process":284,"randombytes":298,"safe-buffer":318}],300:[function(require,module,exports){
- 'use strict';
- module.exports = rbush;
- module.exports.default = rbush;
- var quickselect = require('quickselect');
- function rbush(maxEntries, format) {
- if (!(this instanceof rbush)) return new rbush(maxEntries, format);
- // max entries in a node is 9 by default; min node fill is 40% for best performance
- this._maxEntries = Math.max(4, maxEntries || 9);
- this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
- if (format) {
- this._initFormat(format);
- }
- this.clear();
- }
- rbush.prototype = {
- all: function () {
- return this._all(this.data, []);
- },
- search: function (bbox) {
- var node = this.data,
- result = [],
- toBBox = this.toBBox;
- if (!intersects(bbox, node)) return result;
- var nodesToSearch = [],
- i, len, child, childBBox;
- while (node) {
- for (i = 0, len = node.children.length; i < len; i++) {
- child = node.children[i];
- childBBox = node.leaf ? toBBox(child) : child;
- if (intersects(bbox, childBBox)) {
- if (node.leaf) result.push(child);
- else if (contains(bbox, childBBox)) this._all(child, result);
- else nodesToSearch.push(child);
- }
- }
- node = nodesToSearch.pop();
- }
- return result;
- },
- collides: function (bbox) {
- var node = this.data,
- toBBox = this.toBBox;
- if (!intersects(bbox, node)) return false;
- var nodesToSearch = [],
- i, len, child, childBBox;
- while (node) {
- for (i = 0, len = node.children.length; i < len; i++) {
- child = node.children[i];
- childBBox = node.leaf ? toBBox(child) : child;
- if (intersects(bbox, childBBox)) {
- if (node.leaf || contains(bbox, childBBox)) return true;
- nodesToSearch.push(child);
- }
- }
- node = nodesToSearch.pop();
- }
- return false;
- },
- load: function (data) {
- if (!(data && data.length)) return this;
- if (data.length < this._minEntries) {
- for (var i = 0, len = data.length; i < len; i++) {
- this.insert(data[i]);
- }
- return this;
- }
- // recursively build the tree with the given data from scratch using OMT algorithm
- var node = this._build(data.slice(), 0, data.length - 1, 0);
- if (!this.data.children.length) {
- // save as is if tree is empty
- this.data = node;
- } else if (this.data.height === node.height) {
- // split root if trees have the same height
- this._splitRoot(this.data, node);
- } else {
- if (this.data.height < node.height) {
- // swap trees if inserted one is bigger
- var tmpNode = this.data;
- this.data = node;
- node = tmpNode;
- }
- // insert the small tree into the large tree at appropriate level
- this._insert(node, this.data.height - node.height - 1, true);
- }
- return this;
- },
- insert: function (item) {
- if (item) this._insert(item, this.data.height - 1);
- return this;
- },
- clear: function () {
- this.data = createNode([]);
- return this;
- },
- remove: function (item, equalsFn) {
- if (!item) return this;
- var node = this.data,
- bbox = this.toBBox(item),
- path = [],
- indexes = [],
- i, parent, index, goingUp;
- // depth-first iterative tree traversal
- while (node || path.length) {
- if (!node) { // go up
- node = path.pop();
- parent = path[path.length - 1];
- i = indexes.pop();
- goingUp = true;
- }
- if (node.leaf) { // check current node
- index = findItem(item, node.children, equalsFn);
- if (index !== -1) {
- // item found, remove the item and condense tree upwards
- node.children.splice(index, 1);
- path.push(node);
- this._condense(path);
- return this;
- }
- }
- if (!goingUp && !node.leaf && contains(node, bbox)) { // go down
- path.push(node);
- indexes.push(i);
- i = 0;
- parent = node;
- node = node.children[0];
- } else if (parent) { // go right
- i++;
- node = parent.children[i];
- goingUp = false;
- } else node = null; // nothing found
- }
- return this;
- },
- toBBox: function (item) { return item; },
- compareMinX: compareNodeMinX,
- compareMinY: compareNodeMinY,
- toJSON: function () { return this.data; },
- fromJSON: function (data) {
- this.data = data;
- return this;
- },
- _all: function (node, result) {
- var nodesToSearch = [];
- while (node) {
- if (node.leaf) result.push.apply(result, node.children);
- else nodesToSearch.push.apply(nodesToSearch, node.children);
- node = nodesToSearch.pop();
- }
- return result;
- },
- _build: function (items, left, right, height) {
- var N = right - left + 1,
- M = this._maxEntries,
- node;
- if (N <= M) {
- // reached leaf level; return leaf
- node = createNode(items.slice(left, right + 1));
- calcBBox(node, this.toBBox);
- return node;
- }
- if (!height) {
- // target height of the bulk-loaded tree
- height = Math.ceil(Math.log(N) / Math.log(M));
- // target number of root entries to maximize storage utilization
- M = Math.ceil(N / Math.pow(M, height - 1));
- }
- node = createNode([]);
- node.leaf = false;
- node.height = height;
- // split the items into M mostly square tiles
- var N2 = Math.ceil(N / M),
- N1 = N2 * Math.ceil(Math.sqrt(M)),
- i, j, right2, right3;
- multiSelect(items, left, right, N1, this.compareMinX);
- for (i = left; i <= right; i += N1) {
- right2 = Math.min(i + N1 - 1, right);
- multiSelect(items, i, right2, N2, this.compareMinY);
- for (j = i; j <= right2; j += N2) {
- right3 = Math.min(j + N2 - 1, right2);
- // pack each entry recursively
- node.children.push(this._build(items, j, right3, height - 1));
- }
- }
- calcBBox(node, this.toBBox);
- return node;
- },
- _chooseSubtree: function (bbox, node, level, path) {
- var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;
- while (true) {
- path.push(node);
- if (node.leaf || path.length - 1 === level) break;
- minArea = minEnlargement = Infinity;
- for (i = 0, len = node.children.length; i < len; i++) {
- child = node.children[i];
- area = bboxArea(child);
- enlargement = enlargedArea(bbox, child) - area;
- // choose entry with the least area enlargement
- if (enlargement < minEnlargement) {
- minEnlargement = enlargement;
- minArea = area < minArea ? area : minArea;
- targetNode = child;
- } else if (enlargement === minEnlargement) {
- // otherwise choose one with the smallest area
- if (area < minArea) {
- minArea = area;
- targetNode = child;
- }
- }
- }
- node = targetNode || node.children[0];
- }
- return node;
- },
- _insert: function (item, level, isNode) {
- var toBBox = this.toBBox,
- bbox = isNode ? item : toBBox(item),
- insertPath = [];
- // find the best node for accommodating the item, saving all nodes along the path too
- var node = this._chooseSubtree(bbox, this.data, level, insertPath);
- // put the item into the node
- node.children.push(item);
- extend(node, bbox);
- // split on node overflow; propagate upwards if necessary
- while (level >= 0) {
- if (insertPath[level].children.length > this._maxEntries) {
- this._split(insertPath, level);
- level--;
- } else break;
- }
- // adjust bboxes along the insertion path
- this._adjustParentBBoxes(bbox, insertPath, level);
- },
- // split overflowed node into two
- _split: function (insertPath, level) {
- var node = insertPath[level],
- M = node.children.length,
- m = this._minEntries;
- this._chooseSplitAxis(node, m, M);
- var splitIndex = this._chooseSplitIndex(node, m, M);
- var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));
- newNode.height = node.height;
- newNode.leaf = node.leaf;
- calcBBox(node, this.toBBox);
- calcBBox(newNode, this.toBBox);
- if (level) insertPath[level - 1].children.push(newNode);
- else this._splitRoot(node, newNode);
- },
- _splitRoot: function (node, newNode) {
- // split root node
- this.data = createNode([node, newNode]);
- this.data.height = node.height + 1;
- this.data.leaf = false;
- calcBBox(this.data, this.toBBox);
- },
- _chooseSplitIndex: function (node, m, M) {
- var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
- minOverlap = minArea = Infinity;
- for (i = m; i <= M - m; i++) {
- bbox1 = distBBox(node, 0, i, this.toBBox);
- bbox2 = distBBox(node, i, M, this.toBBox);
- overlap = intersectionArea(bbox1, bbox2);
- area = bboxArea(bbox1) + bboxArea(bbox2);
- // choose distribution with minimum overlap
- if (overlap < minOverlap) {
- minOverlap = overlap;
- index = i;
- minArea = area < minArea ? area : minArea;
- } else if (overlap === minOverlap) {
- // otherwise choose distribution with minimum area
- if (area < minArea) {
- minArea = area;
- index = i;
- }
- }
- }
- return index;
- },
- // sorts node children by the best axis for split
- _chooseSplitAxis: function (node, m, M) {
- var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,
- compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,
- xMargin = this._allDistMargin(node, m, M, compareMinX),
- yMargin = this._allDistMargin(node, m, M, compareMinY);
- // if total distributions margin value is minimal for x, sort by minX,
- // otherwise it's already sorted by minY
- if (xMargin < yMargin) node.children.sort(compareMinX);
- },
- // total margin of all possible split distributions where each node is at least m full
- _allDistMargin: function (node, m, M, compare) {
- node.children.sort(compare);
- var toBBox = this.toBBox,
- leftBBox = distBBox(node, 0, m, toBBox),
- rightBBox = distBBox(node, M - m, M, toBBox),
- margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),
- i, child;
- for (i = m; i < M - m; i++) {
- child = node.children[i];
- extend(leftBBox, node.leaf ? toBBox(child) : child);
- margin += bboxMargin(leftBBox);
- }
- for (i = M - m - 1; i >= m; i--) {
- child = node.children[i];
- extend(rightBBox, node.leaf ? toBBox(child) : child);
- margin += bboxMargin(rightBBox);
- }
- return margin;
- },
- _adjustParentBBoxes: function (bbox, path, level) {
- // adjust bboxes along the given tree path
- for (var i = level; i >= 0; i--) {
- extend(path[i], bbox);
- }
- },
- _condense: function (path) {
- // go through the path, removing empty nodes and updating bboxes
- for (var i = path.length - 1, siblings; i >= 0; i--) {
- if (path[i].children.length === 0) {
- if (i > 0) {
- siblings = path[i - 1].children;
- siblings.splice(siblings.indexOf(path[i]), 1);
- } else this.clear();
- } else calcBBox(path[i], this.toBBox);
- }
- },
- _initFormat: function (format) {
- // data format (minX, minY, maxX, maxY accessors)
- // uses eval-type function compilation instead of just accepting a toBBox function
- // because the algorithms are very sensitive to sorting functions performance,
- // so they should be dead simple and without inner calls
- var compareArr = ['return a', ' - b', ';'];
- this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));
- this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));
- this.toBBox = new Function('a',
- 'return {minX: a' + format[0] +
- ', minY: a' + format[1] +
- ', maxX: a' + format[2] +
- ', maxY: a' + format[3] + '};');
- }
- };
- function findItem(item, items, equalsFn) {
- if (!equalsFn) return items.indexOf(item);
- for (var i = 0; i < items.length; i++) {
- if (equalsFn(item, items[i])) return i;
- }
- return -1;
- }
- // calculate node's bbox from bboxes of its children
- function calcBBox(node, toBBox) {
- distBBox(node, 0, node.children.length, toBBox, node);
- }
- // min bounding rectangle of node children from k to p-1
- function distBBox(node, k, p, toBBox, destNode) {
- if (!destNode) destNode = createNode(null);
- destNode.minX = Infinity;
- destNode.minY = Infinity;
- destNode.maxX = -Infinity;
- destNode.maxY = -Infinity;
- for (var i = k, child; i < p; i++) {
- child = node.children[i];
- extend(destNode, node.leaf ? toBBox(child) : child);
- }
- return destNode;
- }
- function extend(a, b) {
- a.minX = Math.min(a.minX, b.minX);
- a.minY = Math.min(a.minY, b.minY);
- a.maxX = Math.max(a.maxX, b.maxX);
- a.maxY = Math.max(a.maxY, b.maxY);
- return a;
- }
- function compareNodeMinX(a, b) { return a.minX - b.minX; }
- function compareNodeMinY(a, b) { return a.minY - b.minY; }
- function bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }
- function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
- function enlargedArea(a, b) {
- return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
- (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
- }
- function intersectionArea(a, b) {
- var minX = Math.max(a.minX, b.minX),
- minY = Math.max(a.minY, b.minY),
- maxX = Math.min(a.maxX, b.maxX),
- maxY = Math.min(a.maxY, b.maxY);
- return Math.max(0, maxX - minX) *
- Math.max(0, maxY - minY);
- }
- function contains(a, b) {
- return a.minX <= b.minX &&
- a.minY <= b.minY &&
- b.maxX <= a.maxX &&
- b.maxY <= a.maxY;
- }
- function intersects(a, b) {
- return b.minX <= a.maxX &&
- b.minY <= a.maxY &&
- b.maxX >= a.minX &&
- b.maxY >= a.minY;
- }
- function createNode(children) {
- return {
- children: children,
- height: 1,
- leaf: true,
- minX: Infinity,
- minY: Infinity,
- maxX: -Infinity,
- maxY: -Infinity
- };
- }
- // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
- // combines selection algorithm with binary divide & conquer approach
- function multiSelect(arr, left, right, n, compare) {
- var stack = [left, right],
- mid;
- while (stack.length) {
- right = stack.pop();
- left = stack.pop();
- if (right - left <= n) continue;
- mid = left + Math.ceil((right - left) / n / 2) * n;
- quickselect(arr, mid, left, right, compare);
- stack.push(left, mid, mid, right);
- }
- }
- },{"quickselect":297}],301:[function(require,module,exports){
- module.exports = require('./lib/_stream_duplex.js');
- },{"./lib/_stream_duplex.js":302}],302:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // a duplex stream is just a stream that is both readable and writable.
- // Since JS doesn't have multiple prototypal inheritance, this class
- // prototypally inherits from Readable, and then parasitically from
- // Writable.
- 'use strict';
- /*<replacement>*/
- var pna = require('process-nextick-args');
- /*</replacement>*/
- /*<replacement>*/
- var objectKeys = Object.keys || function (obj) {
- var keys = [];
- for (var key in obj) {
- keys.push(key);
- }return keys;
- };
- /*</replacement>*/
- module.exports = Duplex;
- /*<replacement>*/
- var util = require('core-util-is');
- util.inherits = require('inherits');
- /*</replacement>*/
- var Readable = require('./_stream_readable');
- var Writable = require('./_stream_writable');
- util.inherits(Duplex, Readable);
- {
- // avoid scope creep, the keys array can then be collected
- var keys = objectKeys(Writable.prototype);
- for (var v = 0; v < keys.length; v++) {
- var method = keys[v];
- if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
- }
- }
- function Duplex(options) {
- if (!(this instanceof Duplex)) return new Duplex(options);
- Readable.call(this, options);
- Writable.call(this, options);
- if (options && options.readable === false) this.readable = false;
- if (options && options.writable === false) this.writable = false;
- this.allowHalfOpen = true;
- if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
- this.once('end', onend);
- }
- Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function () {
- return this._writableState.highWaterMark;
- }
- });
- // the no-half-open enforcer
- function onend() {
- // if we allow half-open state, or if the writable side ended,
- // then we're ok.
- if (this.allowHalfOpen || this._writableState.ended) return;
- // no more data can be written.
- // But allow more writes to happen in this tick.
- pna.nextTick(onEndNT, this);
- }
- function onEndNT(self) {
- self.end();
- }
- Object.defineProperty(Duplex.prototype, 'destroyed', {
- get: function () {
- if (this._readableState === undefined || this._writableState === undefined) {
- return false;
- }
- return this._readableState.destroyed && this._writableState.destroyed;
- },
- set: function (value) {
- // we ignore the value if the stream
- // has not been initialized yet
- if (this._readableState === undefined || this._writableState === undefined) {
- return;
- }
- // backward compatibility, the user is explicitly
- // managing destroyed
- this._readableState.destroyed = value;
- this._writableState.destroyed = value;
- }
- });
- Duplex.prototype._destroy = function (err, cb) {
- this.push(null);
- this.end();
- pna.nextTick(cb, err);
- };
- },{"./_stream_readable":304,"./_stream_writable":306,"core-util-is":186,"inherits":262,"process-nextick-args":283}],303:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // a passthrough stream.
- // basically just the most minimal sort of Transform stream.
- // Every written chunk gets output as-is.
- 'use strict';
- module.exports = PassThrough;
- var Transform = require('./_stream_transform');
- /*<replacement>*/
- var util = require('core-util-is');
- util.inherits = require('inherits');
- /*</replacement>*/
- util.inherits(PassThrough, Transform);
- function PassThrough(options) {
- if (!(this instanceof PassThrough)) return new PassThrough(options);
- Transform.call(this, options);
- }
- PassThrough.prototype._transform = function (chunk, encoding, cb) {
- cb(null, chunk);
- };
- },{"./_stream_transform":305,"core-util-is":186,"inherits":262}],304:[function(require,module,exports){
- (function (process,global){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- 'use strict';
- /*<replacement>*/
- var pna = require('process-nextick-args');
- /*</replacement>*/
- module.exports = Readable;
- /*<replacement>*/
- var isArray = require('isarray');
- /*</replacement>*/
- /*<replacement>*/
- var Duplex;
- /*</replacement>*/
- Readable.ReadableState = ReadableState;
- /*<replacement>*/
- var EE = require('events').EventEmitter;
- var EElistenerCount = function (emitter, type) {
- return emitter.listeners(type).length;
- };
- /*</replacement>*/
- /*<replacement>*/
- var Stream = require('./internal/streams/stream');
- /*</replacement>*/
- /*<replacement>*/
- var Buffer = require('safe-buffer').Buffer;
- var OurUint8Array = global.Uint8Array || function () {};
- function _uint8ArrayToBuffer(chunk) {
- return Buffer.from(chunk);
- }
- function _isUint8Array(obj) {
- return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
- }
- /*</replacement>*/
- /*<replacement>*/
- var util = require('core-util-is');
- util.inherits = require('inherits');
- /*</replacement>*/
- /*<replacement>*/
- var debugUtil = require('util');
- var debug = void 0;
- if (debugUtil && debugUtil.debuglog) {
- debug = debugUtil.debuglog('stream');
- } else {
- debug = function () {};
- }
- /*</replacement>*/
- var BufferList = require('./internal/streams/BufferList');
- var destroyImpl = require('./internal/streams/destroy');
- var StringDecoder;
- util.inherits(Readable, Stream);
- var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
- function prependListener(emitter, event, fn) {
- // Sadly this is not cacheable as some libraries bundle their own
- // event emitter implementation with them.
- if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
- // This is a hack to make sure that our error handler is attached before any
- // userland ones. NEVER DO THIS. This is here only because this code needs
- // to continue to work with older versions of Node.js that do not include
- // the prependListener() method. The goal is to eventually remove this hack.
- if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
- }
- function ReadableState(options, stream) {
- Duplex = Duplex || require('./_stream_duplex');
- options = options || {};
- // Duplex streams are both readable and writable, but share
- // the same options object.
- // However, some cases require setting options to different
- // values for the readable and the writable sides of the duplex stream.
- // These options can be provided separately as readableXXX and writableXXX.
- var isDuplex = stream instanceof Duplex;
- // object stream flag. Used to make read(n) ignore n and to
- // make all the buffer merging and length checks go away
- this.objectMode = !!options.objectMode;
- if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
- // the point at which it stops calling _read() to fill the buffer
- // Note: 0 is a valid value, means "don't call _read preemptively ever"
- var hwm = options.highWaterMark;
- var readableHwm = options.readableHighWaterMark;
- var defaultHwm = this.objectMode ? 16 : 16 * 1024;
- if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
- // cast to ints.
- this.highWaterMark = Math.floor(this.highWaterMark);
- // A linked list is used to store data chunks instead of an array because the
- // linked list can remove elements from the beginning faster than
- // array.shift()
- this.buffer = new BufferList();
- this.length = 0;
- this.pipes = null;
- this.pipesCount = 0;
- this.flowing = null;
- this.ended = false;
- this.endEmitted = false;
- this.reading = false;
- // a flag to be able to tell if the event 'readable'/'data' is emitted
- // immediately, or on a later tick. We set this to true at first, because
- // any actions that shouldn't happen until "later" should generally also
- // not happen before the first read call.
- this.sync = true;
- // whenever we return null, then we set a flag to say
- // that we're awaiting a 'readable' event emission.
- this.needReadable = false;
- this.emittedReadable = false;
- this.readableListening = false;
- this.resumeScheduled = false;
- // has it been destroyed
- this.destroyed = false;
- // Crypto is kind of old and crusty. Historically, its default string
- // encoding is 'binary' so we have to make this configurable.
- // Everything else in the universe uses 'utf8', though.
- this.defaultEncoding = options.defaultEncoding || 'utf8';
- // the number of writers that are awaiting a drain event in .pipe()s
- this.awaitDrain = 0;
- // if true, a maybeReadMore has been scheduled
- this.readingMore = false;
- this.decoder = null;
- this.encoding = null;
- if (options.encoding) {
- if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
- this.decoder = new StringDecoder(options.encoding);
- this.encoding = options.encoding;
- }
- }
- function Readable(options) {
- Duplex = Duplex || require('./_stream_duplex');
- if (!(this instanceof Readable)) return new Readable(options);
- this._readableState = new ReadableState(options, this);
- // legacy
- this.readable = true;
- if (options) {
- if (typeof options.read === 'function') this._read = options.read;
- if (typeof options.destroy === 'function') this._destroy = options.destroy;
- }
- Stream.call(this);
- }
- Object.defineProperty(Readable.prototype, 'destroyed', {
- get: function () {
- if (this._readableState === undefined) {
- return false;
- }
- return this._readableState.destroyed;
- },
- set: function (value) {
- // we ignore the value if the stream
- // has not been initialized yet
- if (!this._readableState) {
- return;
- }
- // backward compatibility, the user is explicitly
- // managing destroyed
- this._readableState.destroyed = value;
- }
- });
- Readable.prototype.destroy = destroyImpl.destroy;
- Readable.prototype._undestroy = destroyImpl.undestroy;
- Readable.prototype._destroy = function (err, cb) {
- this.push(null);
- cb(err);
- };
- // Manually shove something into the read() buffer.
- // This returns true if the highWaterMark has not been hit yet,
- // similar to how Writable.write() returns true if you should
- // write() some more.
- Readable.prototype.push = function (chunk, encoding) {
- var state = this._readableState;
- var skipChunkCheck;
- if (!state.objectMode) {
- if (typeof chunk === 'string') {
- encoding = encoding || state.defaultEncoding;
- if (encoding !== state.encoding) {
- chunk = Buffer.from(chunk, encoding);
- encoding = '';
- }
- skipChunkCheck = true;
- }
- } else {
- skipChunkCheck = true;
- }
- return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
- };
- // Unshift should *always* be something directly out of read()
- Readable.prototype.unshift = function (chunk) {
- return readableAddChunk(this, chunk, null, true, false);
- };
- function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
- var state = stream._readableState;
- if (chunk === null) {
- state.reading = false;
- onEofChunk(stream, state);
- } else {
- var er;
- if (!skipChunkCheck) er = chunkInvalid(state, chunk);
- if (er) {
- stream.emit('error', er);
- } else if (state.objectMode || chunk && chunk.length > 0) {
- if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
- chunk = _uint8ArrayToBuffer(chunk);
- }
- if (addToFront) {
- if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
- } else if (state.ended) {
- stream.emit('error', new Error('stream.push() after EOF'));
- } else {
- state.reading = false;
- if (state.decoder && !encoding) {
- chunk = state.decoder.write(chunk);
- if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
- } else {
- addChunk(stream, state, chunk, false);
- }
- }
- } else if (!addToFront) {
- state.reading = false;
- }
- }
- return needMoreData(state);
- }
- function addChunk(stream, state, chunk, addToFront) {
- if (state.flowing && state.length === 0 && !state.sync) {
- stream.emit('data', chunk);
- stream.read(0);
- } else {
- // update the buffer info.
- state.length += state.objectMode ? 1 : chunk.length;
- if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
- if (state.needReadable) emitReadable(stream);
- }
- maybeReadMore(stream, state);
- }
- function chunkInvalid(state, chunk) {
- var er;
- if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
- er = new TypeError('Invalid non-string/buffer chunk');
- }
- return er;
- }
- // if it's past the high water mark, we can push in some more.
- // Also, if we have no data yet, we can stand some
- // more bytes. This is to work around cases where hwm=0,
- // such as the repl. Also, if the push() triggered a
- // readable event, and the user called read(largeNumber) such that
- // needReadable was set, then we ought to push more, so that another
- // 'readable' event will be triggered.
- function needMoreData(state) {
- return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
- }
- Readable.prototype.isPaused = function () {
- return this._readableState.flowing === false;
- };
- // backwards compatibility.
- Readable.prototype.setEncoding = function (enc) {
- if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
- this._readableState.decoder = new StringDecoder(enc);
- this._readableState.encoding = enc;
- return this;
- };
- // Don't raise the hwm > 8MB
- var MAX_HWM = 0x800000;
- function computeNewHighWaterMark(n) {
- if (n >= MAX_HWM) {
- n = MAX_HWM;
- } else {
- // Get the next highest power of 2 to prevent increasing hwm excessively in
- // tiny amounts
- n--;
- n |= n >>> 1;
- n |= n >>> 2;
- n |= n >>> 4;
- n |= n >>> 8;
- n |= n >>> 16;
- n++;
- }
- return n;
- }
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function howMuchToRead(n, state) {
- if (n <= 0 || state.length === 0 && state.ended) return 0;
- if (state.objectMode) return 1;
- if (n !== n) {
- // Only flow one buffer at a time
- if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
- }
- // If we're asking for more than the current hwm, then raise the hwm.
- if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
- if (n <= state.length) return n;
- // Don't have enough
- if (!state.ended) {
- state.needReadable = true;
- return 0;
- }
- return state.length;
- }
- // you can override either this method, or the async _read(n) below.
- Readable.prototype.read = function (n) {
- debug('read', n);
- n = parseInt(n, 10);
- var state = this._readableState;
- var nOrig = n;
- if (n !== 0) state.emittedReadable = false;
- // if we're doing read(0) to trigger a readable event, but we
- // already have a bunch of data in the buffer, then just trigger
- // the 'readable' event and move on.
- if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
- debug('read: emitReadable', state.length, state.ended);
- if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
- return null;
- }
- n = howMuchToRead(n, state);
- // if we've ended, and we're now clear, then finish it up.
- if (n === 0 && state.ended) {
- if (state.length === 0) endReadable(this);
- return null;
- }
- // All the actual chunk generation logic needs to be
- // *below* the call to _read. The reason is that in certain
- // synthetic stream cases, such as passthrough streams, _read
- // may be a completely synchronous operation which may change
- // the state of the read buffer, providing enough data when
- // before there was *not* enough.
- //
- // So, the steps are:
- // 1. Figure out what the state of things will be after we do
- // a read from the buffer.
- //
- // 2. If that resulting state will trigger a _read, then call _read.
- // Note that this may be asynchronous, or synchronous. Yes, it is
- // deeply ugly to write APIs this way, but that still doesn't mean
- // that the Readable class should behave improperly, as streams are
- // designed to be sync/async agnostic.
- // Take note if the _read call is sync or async (ie, if the read call
- // has returned yet), so that we know whether or not it's safe to emit
- // 'readable' etc.
- //
- // 3. Actually pull the requested chunks out of the buffer and return.
- // if we need a readable event, then we need to do some reading.
- var doRead = state.needReadable;
- debug('need readable', doRead);
- // if we currently have less than the highWaterMark, then also read some
- if (state.length === 0 || state.length - n < state.highWaterMark) {
- doRead = true;
- debug('length less than watermark', doRead);
- }
- // however, if we've ended, then there's no point, and if we're already
- // reading, then it's unnecessary.
- if (state.ended || state.reading) {
- doRead = false;
- debug('reading or ended', doRead);
- } else if (doRead) {
- debug('do read');
- state.reading = true;
- state.sync = true;
- // if the length is currently zero, then we *need* a readable event.
- if (state.length === 0) state.needReadable = true;
- // call internal read method
- this._read(state.highWaterMark);
- state.sync = false;
- // If _read pushed data synchronously, then `reading` will be false,
- // and we need to re-evaluate how much data we can return to the user.
- if (!state.reading) n = howMuchToRead(nOrig, state);
- }
- var ret;
- if (n > 0) ret = fromList(n, state);else ret = null;
- if (ret === null) {
- state.needReadable = true;
- n = 0;
- } else {
- state.length -= n;
- }
- if (state.length === 0) {
- // If we have nothing in the buffer, then we want to know
- // as soon as we *do* get something into the buffer.
- if (!state.ended) state.needReadable = true;
- // If we tried to read() past the EOF, then emit end on the next tick.
- if (nOrig !== n && state.ended) endReadable(this);
- }
- if (ret !== null) this.emit('data', ret);
- return ret;
- };
- function onEofChunk(stream, state) {
- if (state.ended) return;
- if (state.decoder) {
- var chunk = state.decoder.end();
- if (chunk && chunk.length) {
- state.buffer.push(chunk);
- state.length += state.objectMode ? 1 : chunk.length;
- }
- }
- state.ended = true;
- // emit 'readable' now to make sure it gets picked up.
- emitReadable(stream);
- }
- // Don't emit readable right away in sync mode, because this can trigger
- // another read() call => stack overflow. This way, it might trigger
- // a nextTick recursion warning, but that's not so bad.
- function emitReadable(stream) {
- var state = stream._readableState;
- state.needReadable = false;
- if (!state.emittedReadable) {
- debug('emitReadable', state.flowing);
- state.emittedReadable = true;
- if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
- }
- }
- function emitReadable_(stream) {
- debug('emit readable');
- stream.emit('readable');
- flow(stream);
- }
- // at this point, the user has presumably seen the 'readable' event,
- // and called read() to consume some data. that may have triggered
- // in turn another _read(n) call, in which case reading = true if
- // it's in progress.
- // However, if we're not ended, or reading, and the length < hwm,
- // then go ahead and try to read some more preemptively.
- function maybeReadMore(stream, state) {
- if (!state.readingMore) {
- state.readingMore = true;
- pna.nextTick(maybeReadMore_, stream, state);
- }
- }
- function maybeReadMore_(stream, state) {
- var len = state.length;
- while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
- debug('maybeReadMore read 0');
- stream.read(0);
- if (len === state.length)
- // didn't get any data, stop spinning.
- break;else len = state.length;
- }
- state.readingMore = false;
- }
- // abstract method. to be overridden in specific implementation classes.
- // call cb(er, data) where data is <= n in length.
- // for virtual (non-string, non-buffer) streams, "length" is somewhat
- // arbitrary, and perhaps not very meaningful.
- Readable.prototype._read = function (n) {
- this.emit('error', new Error('_read() is not implemented'));
- };
- Readable.prototype.pipe = function (dest, pipeOpts) {
- var src = this;
- var state = this._readableState;
- switch (state.pipesCount) {
- case 0:
- state.pipes = dest;
- break;
- case 1:
- state.pipes = [state.pipes, dest];
- break;
- default:
- state.pipes.push(dest);
- break;
- }
- state.pipesCount += 1;
- debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
- var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
- var endFn = doEnd ? onend : unpipe;
- if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
- dest.on('unpipe', onunpipe);
- function onunpipe(readable, unpipeInfo) {
- debug('onunpipe');
- if (readable === src) {
- if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
- unpipeInfo.hasUnpiped = true;
- cleanup();
- }
- }
- }
- function onend() {
- debug('onend');
- dest.end();
- }
- // when the dest drains, it reduces the awaitDrain counter
- // on the source. This would be more elegant with a .once()
- // handler in flow(), but adding and removing repeatedly is
- // too slow.
- var ondrain = pipeOnDrain(src);
- dest.on('drain', ondrain);
- var cleanedUp = false;
- function cleanup() {
- debug('cleanup');
- // cleanup event handlers once the pipe is broken
- dest.removeListener('close', onclose);
- dest.removeListener('finish', onfinish);
- dest.removeListener('drain', ondrain);
- dest.removeListener('error', onerror);
- dest.removeListener('unpipe', onunpipe);
- src.removeListener('end', onend);
- src.removeListener('end', unpipe);
- src.removeListener('data', ondata);
- cleanedUp = true;
- // if the reader is waiting for a drain event from this
- // specific writer, then it would cause it to never start
- // flowing again.
- // So, if this is awaiting a drain, then we just call it now.
- // If we don't know, then assume that we are waiting for one.
- if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
- }
- // If the user pushes more data while we're writing to dest then we'll end up
- // in ondata again. However, we only want to increase awaitDrain once because
- // dest will only emit one 'drain' event for the multiple writes.
- // => Introduce a guard on increasing awaitDrain.
- var increasedAwaitDrain = false;
- src.on('data', ondata);
- function ondata(chunk) {
- debug('ondata');
- increasedAwaitDrain = false;
- var ret = dest.write(chunk);
- if (false === ret && !increasedAwaitDrain) {
- // If the user unpiped during `dest.write()`, it is possible
- // to get stuck in a permanently paused state if that write
- // also returned false.
- // => Check whether `dest` is still a piping destination.
- if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
- debug('false write response, pause', src._readableState.awaitDrain);
- src._readableState.awaitDrain++;
- increasedAwaitDrain = true;
- }
- src.pause();
- }
- }
- // if the dest has an error, then stop piping into it.
- // however, don't suppress the throwing behavior for this.
- function onerror(er) {
- debug('onerror', er);
- unpipe();
- dest.removeListener('error', onerror);
- if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
- }
- // Make sure our error handler is attached before userland ones.
- prependListener(dest, 'error', onerror);
- // Both close and finish should trigger unpipe, but only once.
- function onclose() {
- dest.removeListener('finish', onfinish);
- unpipe();
- }
- dest.once('close', onclose);
- function onfinish() {
- debug('onfinish');
- dest.removeListener('close', onclose);
- unpipe();
- }
- dest.once('finish', onfinish);
- function unpipe() {
- debug('unpipe');
- src.unpipe(dest);
- }
- // tell the dest that it's being piped to
- dest.emit('pipe', src);
- // start the flow if it hasn't been started already.
- if (!state.flowing) {
- debug('pipe resume');
- src.resume();
- }
- return dest;
- };
- function pipeOnDrain(src) {
- return function () {
- var state = src._readableState;
- debug('pipeOnDrain', state.awaitDrain);
- if (state.awaitDrain) state.awaitDrain--;
- if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
- state.flowing = true;
- flow(src);
- }
- };
- }
- Readable.prototype.unpipe = function (dest) {
- var state = this._readableState;
- var unpipeInfo = { hasUnpiped: false };
- // if we're not piping anywhere, then do nothing.
- if (state.pipesCount === 0) return this;
- // just one destination. most common case.
- if (state.pipesCount === 1) {
- // passed in one, but it's not the right one.
- if (dest && dest !== state.pipes) return this;
- if (!dest) dest = state.pipes;
- // got a match.
- state.pipes = null;
- state.pipesCount = 0;
- state.flowing = false;
- if (dest) dest.emit('unpipe', this, unpipeInfo);
- return this;
- }
- // slow case. multiple pipe destinations.
- if (!dest) {
- // remove all.
- var dests = state.pipes;
- var len = state.pipesCount;
- state.pipes = null;
- state.pipesCount = 0;
- state.flowing = false;
- for (var i = 0; i < len; i++) {
- dests[i].emit('unpipe', this, unpipeInfo);
- }return this;
- }
- // try to find the right one.
- var index = indexOf(state.pipes, dest);
- if (index === -1) return this;
- state.pipes.splice(index, 1);
- state.pipesCount -= 1;
- if (state.pipesCount === 1) state.pipes = state.pipes[0];
- dest.emit('unpipe', this, unpipeInfo);
- return this;
- };
- // set up data events if they are asked for
- // Ensure readable listeners eventually get something
- Readable.prototype.on = function (ev, fn) {
- var res = Stream.prototype.on.call(this, ev, fn);
- if (ev === 'data') {
- // Start flowing on next tick if stream isn't explicitly paused
- if (this._readableState.flowing !== false) this.resume();
- } else if (ev === 'readable') {
- var state = this._readableState;
- if (!state.endEmitted && !state.readableListening) {
- state.readableListening = state.needReadable = true;
- state.emittedReadable = false;
- if (!state.reading) {
- pna.nextTick(nReadingNextTick, this);
- } else if (state.length) {
- emitReadable(this);
- }
- }
- }
- return res;
- };
- Readable.prototype.addListener = Readable.prototype.on;
- function nReadingNextTick(self) {
- debug('readable nexttick read 0');
- self.read(0);
- }
- // pause() and resume() are remnants of the legacy readable stream API
- // If the user uses them, then switch into old mode.
- Readable.prototype.resume = function () {
- var state = this._readableState;
- if (!state.flowing) {
- debug('resume');
- state.flowing = true;
- resume(this, state);
- }
- return this;
- };
- function resume(stream, state) {
- if (!state.resumeScheduled) {
- state.resumeScheduled = true;
- pna.nextTick(resume_, stream, state);
- }
- }
- function resume_(stream, state) {
- if (!state.reading) {
- debug('resume read 0');
- stream.read(0);
- }
- state.resumeScheduled = false;
- state.awaitDrain = 0;
- stream.emit('resume');
- flow(stream);
- if (state.flowing && !state.reading) stream.read(0);
- }
- Readable.prototype.pause = function () {
- debug('call pause flowing=%j', this._readableState.flowing);
- if (false !== this._readableState.flowing) {
- debug('pause');
- this._readableState.flowing = false;
- this.emit('pause');
- }
- return this;
- };
- function flow(stream) {
- var state = stream._readableState;
- debug('flow', state.flowing);
- while (state.flowing && stream.read() !== null) {}
- }
- // wrap an old-style stream as the async data source.
- // This is *not* part of the readable stream interface.
- // It is an ugly unfortunate mess of history.
- Readable.prototype.wrap = function (stream) {
- var _this = this;
- var state = this._readableState;
- var paused = false;
- stream.on('end', function () {
- debug('wrapped end');
- if (state.decoder && !state.ended) {
- var chunk = state.decoder.end();
- if (chunk && chunk.length) _this.push(chunk);
- }
- _this.push(null);
- });
- stream.on('data', function (chunk) {
- debug('wrapped data');
- if (state.decoder) chunk = state.decoder.write(chunk);
- // don't skip over falsy values in objectMode
- if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
- var ret = _this.push(chunk);
- if (!ret) {
- paused = true;
- stream.pause();
- }
- });
- // proxy all the other methods.
- // important when wrapping filters and duplexes.
- for (var i in stream) {
- if (this[i] === undefined && typeof stream[i] === 'function') {
- this[i] = function (method) {
- return function () {
- return stream[method].apply(stream, arguments);
- };
- }(i);
- }
- }
- // proxy certain important events.
- for (var n = 0; n < kProxyEvents.length; n++) {
- stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
- }
- // when we try to consume some more bytes, simply unpause the
- // underlying stream.
- this._read = function (n) {
- debug('wrapped _read', n);
- if (paused) {
- paused = false;
- stream.resume();
- }
- };
- return this;
- };
- Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function () {
- return this._readableState.highWaterMark;
- }
- });
- // exposed for testing purposes only.
- Readable._fromList = fromList;
- // Pluck off n bytes from an array of buffers.
- // Length is the combined lengths of all the buffers in the list.
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function fromList(n, state) {
- // nothing buffered
- if (state.length === 0) return null;
- var ret;
- if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
- // read it all, truncate the list
- if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
- state.buffer.clear();
- } else {
- // read part of list
- ret = fromListPartial(n, state.buffer, state.decoder);
- }
- return ret;
- }
- // Extracts only enough buffered data to satisfy the amount requested.
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function fromListPartial(n, list, hasStrings) {
- var ret;
- if (n < list.head.data.length) {
- // slice is the same for buffers and strings
- ret = list.head.data.slice(0, n);
- list.head.data = list.head.data.slice(n);
- } else if (n === list.head.data.length) {
- // first chunk is a perfect match
- ret = list.shift();
- } else {
- // result spans more than one buffer
- ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
- }
- return ret;
- }
- // Copies a specified amount of characters from the list of buffered data
- // chunks.
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function copyFromBufferString(n, list) {
- var p = list.head;
- var c = 1;
- var ret = p.data;
- n -= ret.length;
- while (p = p.next) {
- var str = p.data;
- var nb = n > str.length ? str.length : n;
- if (nb === str.length) ret += str;else ret += str.slice(0, n);
- n -= nb;
- if (n === 0) {
- if (nb === str.length) {
- ++c;
- if (p.next) list.head = p.next;else list.head = list.tail = null;
- } else {
- list.head = p;
- p.data = str.slice(nb);
- }
- break;
- }
- ++c;
- }
- list.length -= c;
- return ret;
- }
- // Copies a specified amount of bytes from the list of buffered data chunks.
- // This function is designed to be inlinable, so please take care when making
- // changes to the function body.
- function copyFromBuffer(n, list) {
- var ret = Buffer.allocUnsafe(n);
- var p = list.head;
- var c = 1;
- p.data.copy(ret);
- n -= p.data.length;
- while (p = p.next) {
- var buf = p.data;
- var nb = n > buf.length ? buf.length : n;
- buf.copy(ret, ret.length - n, 0, nb);
- n -= nb;
- if (n === 0) {
- if (nb === buf.length) {
- ++c;
- if (p.next) list.head = p.next;else list.head = list.tail = null;
- } else {
- list.head = p;
- p.data = buf.slice(nb);
- }
- break;
- }
- ++c;
- }
- list.length -= c;
- return ret;
- }
- function endReadable(stream) {
- var state = stream._readableState;
- // If we get here before consuming all the bytes, then that is a
- // bug in node. Should never happen.
- if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
- if (!state.endEmitted) {
- state.ended = true;
- pna.nextTick(endReadableNT, state, stream);
- }
- }
- function endReadableNT(state, stream) {
- // Check that we didn't get one last unshift.
- if (!state.endEmitted && state.length === 0) {
- state.endEmitted = true;
- stream.readable = false;
- stream.emit('end');
- }
- }
- function indexOf(xs, x) {
- for (var i = 0, l = xs.length; i < l; i++) {
- if (xs[i] === x) return i;
- }
- return -1;
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"./_stream_duplex":302,"./internal/streams/BufferList":307,"./internal/streams/destroy":308,"./internal/streams/stream":309,"_process":284,"core-util-is":186,"events":221,"inherits":262,"isarray":264,"process-nextick-args":283,"safe-buffer":310,"string_decoder/":333,"util":149}],305:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // a transform stream is a readable/writable stream where you do
- // something with the data. Sometimes it's called a "filter",
- // but that's not a great name for it, since that implies a thing where
- // some bits pass through, and others are simply ignored. (That would
- // be a valid example of a transform, of course.)
- //
- // While the output is causally related to the input, it's not a
- // necessarily symmetric or synchronous transformation. For example,
- // a zlib stream might take multiple plain-text writes(), and then
- // emit a single compressed chunk some time in the future.
- //
- // Here's how this works:
- //
- // The Transform stream has all the aspects of the readable and writable
- // stream classes. When you write(chunk), that calls _write(chunk,cb)
- // internally, and returns false if there's a lot of pending writes
- // buffered up. When you call read(), that calls _read(n) until
- // there's enough pending readable data buffered up.
- //
- // In a transform stream, the written data is placed in a buffer. When
- // _read(n) is called, it transforms the queued up data, calling the
- // buffered _write cb's as it consumes chunks. If consuming a single
- // written chunk would result in multiple output chunks, then the first
- // outputted bit calls the readcb, and subsequent chunks just go into
- // the read buffer, and will cause it to emit 'readable' if necessary.
- //
- // This way, back-pressure is actually determined by the reading side,
- // since _read has to be called to start processing a new chunk. However,
- // a pathological inflate type of transform can cause excessive buffering
- // here. For example, imagine a stream where every byte of input is
- // interpreted as an integer from 0-255, and then results in that many
- // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
- // 1kb of data being output. In this case, you could write a very small
- // amount of input, and end up with a very large amount of output. In
- // such a pathological inflating mechanism, there'd be no way to tell
- // the system to stop doing the transform. A single 4MB write could
- // cause the system to run out of memory.
- //
- // However, even in such a pathological case, only a single written chunk
- // would be consumed, and then the rest would wait (un-transformed) until
- // the results of the previous transformed chunk were consumed.
- 'use strict';
- module.exports = Transform;
- var Duplex = require('./_stream_duplex');
- /*<replacement>*/
- var util = require('core-util-is');
- util.inherits = require('inherits');
- /*</replacement>*/
- util.inherits(Transform, Duplex);
- function afterTransform(er, data) {
- var ts = this._transformState;
- ts.transforming = false;
- var cb = ts.writecb;
- if (!cb) {
- return this.emit('error', new Error('write callback called multiple times'));
- }
- ts.writechunk = null;
- ts.writecb = null;
- if (data != null) // single equals check for both `null` and `undefined`
- this.push(data);
- cb(er);
- var rs = this._readableState;
- rs.reading = false;
- if (rs.needReadable || rs.length < rs.highWaterMark) {
- this._read(rs.highWaterMark);
- }
- }
- function Transform(options) {
- if (!(this instanceof Transform)) return new Transform(options);
- Duplex.call(this, options);
- this._transformState = {
- afterTransform: afterTransform.bind(this),
- needTransform: false,
- transforming: false,
- writecb: null,
- writechunk: null,
- writeencoding: null
- };
- // start out asking for a readable event once data is transformed.
- this._readableState.needReadable = true;
- // we have implemented the _read method, and done the other things
- // that Readable wants before the first _read call, so unset the
- // sync guard flag.
- this._readableState.sync = false;
- if (options) {
- if (typeof options.transform === 'function') this._transform = options.transform;
- if (typeof options.flush === 'function') this._flush = options.flush;
- }
- // When the writable side finishes, then flush out anything remaining.
- this.on('prefinish', prefinish);
- }
- function prefinish() {
- var _this = this;
- if (typeof this._flush === 'function') {
- this._flush(function (er, data) {
- done(_this, er, data);
- });
- } else {
- done(this, null, null);
- }
- }
- Transform.prototype.push = function (chunk, encoding) {
- this._transformState.needTransform = false;
- return Duplex.prototype.push.call(this, chunk, encoding);
- };
- // This is the part where you do stuff!
- // override this function in implementation classes.
- // 'chunk' is an input chunk.
- //
- // Call `push(newChunk)` to pass along transformed output
- // to the readable side. You may call 'push' zero or more times.
- //
- // Call `cb(err)` when you are done with this chunk. If you pass
- // an error, then that'll put the hurt on the whole operation. If you
- // never call cb(), then you'll never get another chunk.
- Transform.prototype._transform = function (chunk, encoding, cb) {
- throw new Error('_transform() is not implemented');
- };
- Transform.prototype._write = function (chunk, encoding, cb) {
- var ts = this._transformState;
- ts.writecb = cb;
- ts.writechunk = chunk;
- ts.writeencoding = encoding;
- if (!ts.transforming) {
- var rs = this._readableState;
- if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
- }
- };
- // Doesn't matter what the args are here.
- // _transform does all the work.
- // That we got here means that the readable side wants more data.
- Transform.prototype._read = function (n) {
- var ts = this._transformState;
- if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
- ts.transforming = true;
- this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
- } else {
- // mark that we need a transform, so that any data that comes in
- // will get processed, now that we've asked for it.
- ts.needTransform = true;
- }
- };
- Transform.prototype._destroy = function (err, cb) {
- var _this2 = this;
- Duplex.prototype._destroy.call(this, err, function (err2) {
- cb(err2);
- _this2.emit('close');
- });
- };
- function done(stream, er, data) {
- if (er) return stream.emit('error', er);
- if (data != null) // single equals check for both `null` and `undefined`
- stream.push(data);
- // if there's nothing in the write buffer, then that means
- // that nothing more will ever be provided
- if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
- if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
- return stream.push(null);
- }
- },{"./_stream_duplex":302,"core-util-is":186,"inherits":262}],306:[function(require,module,exports){
- (function (process,global,setImmediate){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // A bit simpler than readable streams.
- // Implement an async ._write(chunk, encoding, cb), and it'll handle all
- // the drain event emission and buffering.
- 'use strict';
- /*<replacement>*/
- var pna = require('process-nextick-args');
- /*</replacement>*/
- module.exports = Writable;
- /* <replacement> */
- function WriteReq(chunk, encoding, cb) {
- this.chunk = chunk;
- this.encoding = encoding;
- this.callback = cb;
- this.next = null;
- }
- // It seems a linked list but it is not
- // there will be only 2 of these for each stream
- function CorkedRequest(state) {
- var _this = this;
- this.next = null;
- this.entry = null;
- this.finish = function () {
- onCorkedFinish(_this, state);
- };
- }
- /* </replacement> */
- /*<replacement>*/
- var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
- /*</replacement>*/
- /*<replacement>*/
- var Duplex;
- /*</replacement>*/
- Writable.WritableState = WritableState;
- /*<replacement>*/
- var util = require('core-util-is');
- util.inherits = require('inherits');
- /*</replacement>*/
- /*<replacement>*/
- var internalUtil = {
- deprecate: require('util-deprecate')
- };
- /*</replacement>*/
- /*<replacement>*/
- var Stream = require('./internal/streams/stream');
- /*</replacement>*/
- /*<replacement>*/
- var Buffer = require('safe-buffer').Buffer;
- var OurUint8Array = global.Uint8Array || function () {};
- function _uint8ArrayToBuffer(chunk) {
- return Buffer.from(chunk);
- }
- function _isUint8Array(obj) {
- return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
- }
- /*</replacement>*/
- var destroyImpl = require('./internal/streams/destroy');
- util.inherits(Writable, Stream);
- function nop() {}
- function WritableState(options, stream) {
- Duplex = Duplex || require('./_stream_duplex');
- options = options || {};
- // Duplex streams are both readable and writable, but share
- // the same options object.
- // However, some cases require setting options to different
- // values for the readable and the writable sides of the duplex stream.
- // These options can be provided separately as readableXXX and writableXXX.
- var isDuplex = stream instanceof Duplex;
- // object stream flag to indicate whether or not this stream
- // contains buffers or objects.
- this.objectMode = !!options.objectMode;
- if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
- // the point at which write() starts returning false
- // Note: 0 is a valid value, means that we always return false if
- // the entire buffer is not flushed immediately on write()
- var hwm = options.highWaterMark;
- var writableHwm = options.writableHighWaterMark;
- var defaultHwm = this.objectMode ? 16 : 16 * 1024;
- if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;
- // cast to ints.
- this.highWaterMark = Math.floor(this.highWaterMark);
- // if _final has been called
- this.finalCalled = false;
- // drain event flag.
- this.needDrain = false;
- // at the start of calling end()
- this.ending = false;
- // when end() has been called, and returned
- this.ended = false;
- // when 'finish' is emitted
- this.finished = false;
- // has it been destroyed
- this.destroyed = false;
- // should we decode strings into buffers before passing to _write?
- // this is here so that some node-core streams can optimize string
- // handling at a lower level.
- var noDecode = options.decodeStrings === false;
- this.decodeStrings = !noDecode;
- // Crypto is kind of old and crusty. Historically, its default string
- // encoding is 'binary' so we have to make this configurable.
- // Everything else in the universe uses 'utf8', though.
- this.defaultEncoding = options.defaultEncoding || 'utf8';
- // not an actual buffer we keep track of, but a measurement
- // of how much we're waiting to get pushed to some underlying
- // socket or file.
- this.length = 0;
- // a flag to see when we're in the middle of a write.
- this.writing = false;
- // when true all writes will be buffered until .uncork() call
- this.corked = 0;
- // a flag to be able to tell if the onwrite cb is called immediately,
- // or on a later tick. We set this to true at first, because any
- // actions that shouldn't happen until "later" should generally also
- // not happen before the first write call.
- this.sync = true;
- // a flag to know if we're processing previously buffered items, which
- // may call the _write() callback in the same tick, so that we don't
- // end up in an overlapped onwrite situation.
- this.bufferProcessing = false;
- // the callback that's passed to _write(chunk,cb)
- this.onwrite = function (er) {
- onwrite(stream, er);
- };
- // the callback that the user supplies to write(chunk,encoding,cb)
- this.writecb = null;
- // the amount that is being written when _write is called.
- this.writelen = 0;
- this.bufferedRequest = null;
- this.lastBufferedRequest = null;
- // number of pending user-supplied write callbacks
- // this must be 0 before 'finish' can be emitted
- this.pendingcb = 0;
- // emit prefinish if the only thing we're waiting for is _write cbs
- // This is relevant for synchronous Transform streams
- this.prefinished = false;
- // True if the error was already emitted and should not be thrown again
- this.errorEmitted = false;
- // count buffered requests
- this.bufferedRequestCount = 0;
- // allocate the first CorkedRequest, there is always
- // one allocated and free to use, and we maintain at most two
- this.corkedRequestsFree = new CorkedRequest(this);
- }
- WritableState.prototype.getBuffer = function getBuffer() {
- var current = this.bufferedRequest;
- var out = [];
- while (current) {
- out.push(current);
- current = current.next;
- }
- return out;
- };
- (function () {
- try {
- Object.defineProperty(WritableState.prototype, 'buffer', {
- get: internalUtil.deprecate(function () {
- return this.getBuffer();
- }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
- });
- } catch (_) {}
- })();
- // Test _writableState for inheritance to account for Duplex streams,
- // whose prototype chain only points to Readable.
- var realHasInstance;
- if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
- realHasInstance = Function.prototype[Symbol.hasInstance];
- Object.defineProperty(Writable, Symbol.hasInstance, {
- value: function (object) {
- if (realHasInstance.call(this, object)) return true;
- if (this !== Writable) return false;
- return object && object._writableState instanceof WritableState;
- }
- });
- } else {
- realHasInstance = function (object) {
- return object instanceof this;
- };
- }
- function Writable(options) {
- Duplex = Duplex || require('./_stream_duplex');
- // Writable ctor is applied to Duplexes, too.
- // `realHasInstance` is necessary because using plain `instanceof`
- // would return false, as no `_writableState` property is attached.
- // Trying to use the custom `instanceof` for Writable here will also break the
- // Node.js LazyTransform implementation, which has a non-trivial getter for
- // `_writableState` that would lead to infinite recursion.
- if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
- return new Writable(options);
- }
- this._writableState = new WritableState(options, this);
- // legacy.
- this.writable = true;
- if (options) {
- if (typeof options.write === 'function') this._write = options.write;
- if (typeof options.writev === 'function') this._writev = options.writev;
- if (typeof options.destroy === 'function') this._destroy = options.destroy;
- if (typeof options.final === 'function') this._final = options.final;
- }
- Stream.call(this);
- }
- // Otherwise people can pipe Writable streams, which is just wrong.
- Writable.prototype.pipe = function () {
- this.emit('error', new Error('Cannot pipe, not readable'));
- };
- function writeAfterEnd(stream, cb) {
- var er = new Error('write after end');
- // TODO: defer error events consistently everywhere, not just the cb
- stream.emit('error', er);
- pna.nextTick(cb, er);
- }
- // Checks that a user-supplied chunk is valid, especially for the particular
- // mode the stream is in. Currently this means that `null` is never accepted
- // and undefined/non-string values are only allowed in object mode.
- function validChunk(stream, state, chunk, cb) {
- var valid = true;
- var er = false;
- if (chunk === null) {
- er = new TypeError('May not write null values to stream');
- } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
- er = new TypeError('Invalid non-string/buffer chunk');
- }
- if (er) {
- stream.emit('error', er);
- pna.nextTick(cb, er);
- valid = false;
- }
- return valid;
- }
- Writable.prototype.write = function (chunk, encoding, cb) {
- var state = this._writableState;
- var ret = false;
- var isBuf = !state.objectMode && _isUint8Array(chunk);
- if (isBuf && !Buffer.isBuffer(chunk)) {
- chunk = _uint8ArrayToBuffer(chunk);
- }
- if (typeof encoding === 'function') {
- cb = encoding;
- encoding = null;
- }
- if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
- if (typeof cb !== 'function') cb = nop;
- if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
- state.pendingcb++;
- ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
- }
- return ret;
- };
- Writable.prototype.cork = function () {
- var state = this._writableState;
- state.corked++;
- };
- Writable.prototype.uncork = function () {
- var state = this._writableState;
- if (state.corked) {
- state.corked--;
- if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
- }
- };
- Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
- // node::ParseEncoding() requires lower case.
- if (typeof encoding === 'string') encoding = encoding.toLowerCase();
- if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
- this._writableState.defaultEncoding = encoding;
- return this;
- };
- function decodeChunk(state, chunk, encoding) {
- if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
- chunk = Buffer.from(chunk, encoding);
- }
- return chunk;
- }
- Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
- // making it explicit this property is not enumerable
- // because otherwise some prototype manipulation in
- // userland will fail
- enumerable: false,
- get: function () {
- return this._writableState.highWaterMark;
- }
- });
- // if we're already writing something, then just put this
- // in the queue, and wait our turn. Otherwise, call _write
- // If we return false, then we need a drain event, so set that flag.
- function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
- if (!isBuf) {
- var newChunk = decodeChunk(state, chunk, encoding);
- if (chunk !== newChunk) {
- isBuf = true;
- encoding = 'buffer';
- chunk = newChunk;
- }
- }
- var len = state.objectMode ? 1 : chunk.length;
- state.length += len;
- var ret = state.length < state.highWaterMark;
- // we must ensure that previous needDrain will not be reset to false.
- if (!ret) state.needDrain = true;
- if (state.writing || state.corked) {
- var last = state.lastBufferedRequest;
- state.lastBufferedRequest = {
- chunk: chunk,
- encoding: encoding,
- isBuf: isBuf,
- callback: cb,
- next: null
- };
- if (last) {
- last.next = state.lastBufferedRequest;
- } else {
- state.bufferedRequest = state.lastBufferedRequest;
- }
- state.bufferedRequestCount += 1;
- } else {
- doWrite(stream, state, false, len, chunk, encoding, cb);
- }
- return ret;
- }
- function doWrite(stream, state, writev, len, chunk, encoding, cb) {
- state.writelen = len;
- state.writecb = cb;
- state.writing = true;
- state.sync = true;
- if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
- state.sync = false;
- }
- function onwriteError(stream, state, sync, er, cb) {
- --state.pendingcb;
- if (sync) {
- // defer the callback if we are being called synchronously
- // to avoid piling up things on the stack
- pna.nextTick(cb, er);
- // this can emit finish, and it will always happen
- // after error
- pna.nextTick(finishMaybe, stream, state);
- stream._writableState.errorEmitted = true;
- stream.emit('error', er);
- } else {
- // the caller expect this to happen before if
- // it is async
- cb(er);
- stream._writableState.errorEmitted = true;
- stream.emit('error', er);
- // this can emit finish, but finish must
- // always follow error
- finishMaybe(stream, state);
- }
- }
- function onwriteStateUpdate(state) {
- state.writing = false;
- state.writecb = null;
- state.length -= state.writelen;
- state.writelen = 0;
- }
- function onwrite(stream, er) {
- var state = stream._writableState;
- var sync = state.sync;
- var cb = state.writecb;
- onwriteStateUpdate(state);
- if (er) onwriteError(stream, state, sync, er, cb);else {
- // Check if we're actually ready to finish, but don't emit yet
- var finished = needFinish(state);
- if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
- clearBuffer(stream, state);
- }
- if (sync) {
- /*<replacement>*/
- asyncWrite(afterWrite, stream, state, finished, cb);
- /*</replacement>*/
- } else {
- afterWrite(stream, state, finished, cb);
- }
- }
- }
- function afterWrite(stream, state, finished, cb) {
- if (!finished) onwriteDrain(stream, state);
- state.pendingcb--;
- cb();
- finishMaybe(stream, state);
- }
- // Must force callback to be called on nextTick, so that we don't
- // emit 'drain' before the write() consumer gets the 'false' return
- // value, and has a chance to attach a 'drain' listener.
- function onwriteDrain(stream, state) {
- if (state.length === 0 && state.needDrain) {
- state.needDrain = false;
- stream.emit('drain');
- }
- }
- // if there's something in the buffer waiting, then process it
- function clearBuffer(stream, state) {
- state.bufferProcessing = true;
- var entry = state.bufferedRequest;
- if (stream._writev && entry && entry.next) {
- // Fast case, write everything using _writev()
- var l = state.bufferedRequestCount;
- var buffer = new Array(l);
- var holder = state.corkedRequestsFree;
- holder.entry = entry;
- var count = 0;
- var allBuffers = true;
- while (entry) {
- buffer[count] = entry;
- if (!entry.isBuf) allBuffers = false;
- entry = entry.next;
- count += 1;
- }
- buffer.allBuffers = allBuffers;
- doWrite(stream, state, true, state.length, buffer, '', holder.finish);
- // doWrite is almost always async, defer these to save a bit of time
- // as the hot path ends with doWrite
- state.pendingcb++;
- state.lastBufferedRequest = null;
- if (holder.next) {
- state.corkedRequestsFree = holder.next;
- holder.next = null;
- } else {
- state.corkedRequestsFree = new CorkedRequest(state);
- }
- state.bufferedRequestCount = 0;
- } else {
- // Slow case, write chunks one-by-one
- while (entry) {
- var chunk = entry.chunk;
- var encoding = entry.encoding;
- var cb = entry.callback;
- var len = state.objectMode ? 1 : chunk.length;
- doWrite(stream, state, false, len, chunk, encoding, cb);
- entry = entry.next;
- state.bufferedRequestCount--;
- // if we didn't call the onwrite immediately, then
- // it means that we need to wait until it does.
- // also, that means that the chunk and cb are currently
- // being processed, so move the buffer counter past them.
- if (state.writing) {
- break;
- }
- }
- if (entry === null) state.lastBufferedRequest = null;
- }
- state.bufferedRequest = entry;
- state.bufferProcessing = false;
- }
- Writable.prototype._write = function (chunk, encoding, cb) {
- cb(new Error('_write() is not implemented'));
- };
- Writable.prototype._writev = null;
- Writable.prototype.end = function (chunk, encoding, cb) {
- var state = this._writableState;
- if (typeof chunk === 'function') {
- cb = chunk;
- chunk = null;
- encoding = null;
- } else if (typeof encoding === 'function') {
- cb = encoding;
- encoding = null;
- }
- if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
- // .end() fully uncorks
- if (state.corked) {
- state.corked = 1;
- this.uncork();
- }
- // ignore unnecessary end() calls.
- if (!state.ending && !state.finished) endWritable(this, state, cb);
- };
- function needFinish(state) {
- return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
- }
- function callFinal(stream, state) {
- stream._final(function (err) {
- state.pendingcb--;
- if (err) {
- stream.emit('error', err);
- }
- state.prefinished = true;
- stream.emit('prefinish');
- finishMaybe(stream, state);
- });
- }
- function prefinish(stream, state) {
- if (!state.prefinished && !state.finalCalled) {
- if (typeof stream._final === 'function') {
- state.pendingcb++;
- state.finalCalled = true;
- pna.nextTick(callFinal, stream, state);
- } else {
- state.prefinished = true;
- stream.emit('prefinish');
- }
- }
- }
- function finishMaybe(stream, state) {
- var need = needFinish(state);
- if (need) {
- prefinish(stream, state);
- if (state.pendingcb === 0) {
- state.finished = true;
- stream.emit('finish');
- }
- }
- return need;
- }
- function endWritable(stream, state, cb) {
- state.ending = true;
- finishMaybe(stream, state);
- if (cb) {
- if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
- }
- state.ended = true;
- stream.writable = false;
- }
- function onCorkedFinish(corkReq, state, err) {
- var entry = corkReq.entry;
- corkReq.entry = null;
- while (entry) {
- var cb = entry.callback;
- state.pendingcb--;
- cb(err);
- entry = entry.next;
- }
- if (state.corkedRequestsFree) {
- state.corkedRequestsFree.next = corkReq;
- } else {
- state.corkedRequestsFree = corkReq;
- }
- }
- Object.defineProperty(Writable.prototype, 'destroyed', {
- get: function () {
- if (this._writableState === undefined) {
- return false;
- }
- return this._writableState.destroyed;
- },
- set: function (value) {
- // we ignore the value if the stream
- // has not been initialized yet
- if (!this._writableState) {
- return;
- }
- // backward compatibility, the user is explicitly
- // managing destroyed
- this._writableState.destroyed = value;
- }
- });
- Writable.prototype.destroy = destroyImpl.destroy;
- Writable.prototype._undestroy = destroyImpl.undestroy;
- Writable.prototype._destroy = function (err, cb) {
- this.end();
- cb(err);
- };
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate)
- },{"./_stream_duplex":302,"./internal/streams/destroy":308,"./internal/streams/stream":309,"_process":284,"core-util-is":186,"inherits":262,"process-nextick-args":283,"safe-buffer":310,"timers":335,"util-deprecate":340}],307:[function(require,module,exports){
- 'use strict';
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- var Buffer = require('safe-buffer').Buffer;
- var util = require('util');
- function copyBuffer(src, target, offset) {
- src.copy(target, offset);
- }
- module.exports = function () {
- function BufferList() {
- _classCallCheck(this, BufferList);
- this.head = null;
- this.tail = null;
- this.length = 0;
- }
- BufferList.prototype.push = function push(v) {
- var entry = { data: v, next: null };
- if (this.length > 0) this.tail.next = entry;else this.head = entry;
- this.tail = entry;
- ++this.length;
- };
- BufferList.prototype.unshift = function unshift(v) {
- var entry = { data: v, next: this.head };
- if (this.length === 0) this.tail = entry;
- this.head = entry;
- ++this.length;
- };
- BufferList.prototype.shift = function shift() {
- if (this.length === 0) return;
- var ret = this.head.data;
- if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
- --this.length;
- return ret;
- };
- BufferList.prototype.clear = function clear() {
- this.head = this.tail = null;
- this.length = 0;
- };
- BufferList.prototype.join = function join(s) {
- if (this.length === 0) return '';
- var p = this.head;
- var ret = '' + p.data;
- while (p = p.next) {
- ret += s + p.data;
- }return ret;
- };
- BufferList.prototype.concat = function concat(n) {
- if (this.length === 0) return Buffer.alloc(0);
- if (this.length === 1) return this.head.data;
- var ret = Buffer.allocUnsafe(n >>> 0);
- var p = this.head;
- var i = 0;
- while (p) {
- copyBuffer(p.data, ret, i);
- i += p.data.length;
- p = p.next;
- }
- return ret;
- };
- return BufferList;
- }();
- if (util && util.inspect && util.inspect.custom) {
- module.exports.prototype[util.inspect.custom] = function () {
- var obj = util.inspect({ length: this.length });
- return this.constructor.name + ' ' + obj;
- };
- }
- },{"safe-buffer":310,"util":149}],308:[function(require,module,exports){
- 'use strict';
- /*<replacement>*/
- var pna = require('process-nextick-args');
- /*</replacement>*/
- // undocumented cb() API, needed for core, not for public API
- function destroy(err, cb) {
- var _this = this;
- var readableDestroyed = this._readableState && this._readableState.destroyed;
- var writableDestroyed = this._writableState && this._writableState.destroyed;
- if (readableDestroyed || writableDestroyed) {
- if (cb) {
- cb(err);
- } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
- pna.nextTick(emitErrorNT, this, err);
- }
- return this;
- }
- // we set destroyed to true before firing error callbacks in order
- // to make it re-entrance safe in case destroy() is called within callbacks
- if (this._readableState) {
- this._readableState.destroyed = true;
- }
- // if this is a duplex stream mark the writable part as destroyed as well
- if (this._writableState) {
- this._writableState.destroyed = true;
- }
- this._destroy(err || null, function (err) {
- if (!cb && err) {
- pna.nextTick(emitErrorNT, _this, err);
- if (_this._writableState) {
- _this._writableState.errorEmitted = true;
- }
- } else if (cb) {
- cb(err);
- }
- });
- return this;
- }
- function undestroy() {
- if (this._readableState) {
- this._readableState.destroyed = false;
- this._readableState.reading = false;
- this._readableState.ended = false;
- this._readableState.endEmitted = false;
- }
- if (this._writableState) {
- this._writableState.destroyed = false;
- this._writableState.ended = false;
- this._writableState.ending = false;
- this._writableState.finished = false;
- this._writableState.errorEmitted = false;
- }
- }
- function emitErrorNT(self, err) {
- self.emit('error', err);
- }
- module.exports = {
- destroy: destroy,
- undestroy: undestroy
- };
- },{"process-nextick-args":283}],309:[function(require,module,exports){
- module.exports = require('events').EventEmitter;
- },{"events":221}],310:[function(require,module,exports){
- arguments[4][178][0].apply(exports,arguments)
- },{"buffer":182,"dup":178}],311:[function(require,module,exports){
- module.exports = require('./readable').PassThrough
- },{"./readable":312}],312:[function(require,module,exports){
- exports = module.exports = require('./lib/_stream_readable.js');
- exports.Stream = exports;
- exports.Readable = exports;
- exports.Writable = require('./lib/_stream_writable.js');
- exports.Duplex = require('./lib/_stream_duplex.js');
- exports.Transform = require('./lib/_stream_transform.js');
- exports.PassThrough = require('./lib/_stream_passthrough.js');
- },{"./lib/_stream_duplex.js":302,"./lib/_stream_passthrough.js":303,"./lib/_stream_readable.js":304,"./lib/_stream_transform.js":305,"./lib/_stream_writable.js":306}],313:[function(require,module,exports){
- module.exports = require('./readable').Transform
- },{"./readable":312}],314:[function(require,module,exports){
- module.exports = require('./lib/_stream_writable.js');
- },{"./lib/_stream_writable.js":306}],315:[function(require,module,exports){
- 'use strict';
- var proj4 = require('proj4').hasOwnProperty('default') ? require('proj4').default : require('proj4');
- // Checks if `list` looks like a `[x, y]`.
- function isXY(list) {
- return list.length >= 2 &&
- typeof list[0] === 'number' &&
- typeof list[1] === 'number';
- }
- function traverseCoords(coordinates, callback) {
- if (isXY(coordinates)) return callback(coordinates);
- return coordinates.map(function(coord){return traverseCoords(coord, callback);});
- }
- // Simplistic shallow clone that will work for a normal GeoJSON object.
- function clone(obj) {
- if (null == obj || 'object' !== typeof obj) return obj;
- var copy = obj.constructor();
- for (var attr in obj) {
- if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
- }
- return copy;
- }
- function traverseGeoJson(geometryCb, nodeCb, geojson) {
- if (geojson == null) return geojson;
- var r = clone(geojson);
- var self = traverseGeoJson.bind(this, geometryCb, nodeCb);
- switch (geojson.type) {
- case 'Feature':
- r.geometry = self(geojson.geometry);
- break;
- case 'FeatureCollection':
- r.features = r.features.map(self);
- break;
- case 'GeometryCollection':
- r.geometries = r.geometries.map(self);
- break;
- default:
- geometryCb(r);
- break;
- }
- if (nodeCb) nodeCb(r);
- return r;
- }
- function detectCrs(geojson, projs) {
- var crsInfo = geojson.crs,
- crs;
- if (crsInfo === undefined) {
- throw new Error('Unable to detect CRS, GeoJSON has no "crs" property.');
- }
- if (crsInfo.type === 'name') {
- crs = projs[crsInfo.properties.name];
- } else if (crsInfo.type === 'EPSG') {
- crs = projs['EPSG:' + crsInfo.properties.code];
- }
- if (!crs) {
- throw new Error('CRS defined in crs section could not be identified: ' + JSON.stringify(crsInfo));
- }
- return crs;
- }
- function determineCrs(crs, projs) {
- if (typeof crs === 'string' || crs instanceof String) {
- return projs[crs] || proj4.Proj(crs);
- }
- return crs;
- }
- function calcBbox(geojson) {
- var min = [Number.MAX_VALUE, Number.MAX_VALUE],
- max = [-Number.MAX_VALUE, -Number.MAX_VALUE];
- traverseGeoJson(function(_gj) {
- traverseCoords(_gj.coordinates, function(xy) {
- min[0] = Math.min(min[0], xy[0]);
- min[1] = Math.min(min[1], xy[1]);
- max[0] = Math.max(max[0], xy[0]);
- max[1] = Math.max(max[1], xy[1]);
- });
- }, null, geojson);
- return [min[0], min[1], max[0], max[1]];
- }
- function reproject(geojson, from, to, projs) {
- projs = projs || {};
- if (!from) {
- from = detectCrs(geojson, projs);
- } else {
- from = determineCrs(from, projs);
- }
- to = determineCrs(to, projs);
- var transform = proj4(from, to).forward.bind(transform);
- var transformGeometryCoords = function(gj) {
- // No easy way to put correct CRS info into the GeoJSON,
- // and definitely wrong to keep the old, so delete it.
- if (gj.crs) {
- delete gj.crs;
- }
- gj.coordinates = traverseCoords(gj.coordinates, transform);
- }
- var transformBbox = function(gj) {
- if (gj.bbox) {
- gj.bbox = calcBbox(gj);
- }
- }
- return traverseGeoJson(transformGeometryCoords, transformBbox, geojson);
- }
- module.exports = {
- detectCrs: detectCrs,
- reproject: reproject,
- reverse: function(geojson) {
- return traverseGeoJson(function(gj) {
- gj.coordinates = traverseCoords(gj.coordinates, function(xy) {
- return [ xy[1], xy[0] ];
- });
- }, null, geojson);
- },
- toWgs84: function(geojson, from, projs) {
- return reproject(geojson, from, proj4.WGS84, projs);
- }
- };
- },{"proj4":316}],316:[function(require,module,exports){
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global.proj4 = factory());
- }(this, (function () { 'use strict';
- var globals = function(defs) {
- defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees");
- defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees");
- defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");
- defs.WGS84 = defs['EPSG:4326'];
- defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857
- defs.GOOGLE = defs['EPSG:3857'];
- defs['EPSG:900913'] = defs['EPSG:3857'];
- defs['EPSG:102113'] = defs['EPSG:3857'];
- };
- var PJD_3PARAM = 1;
- var PJD_7PARAM = 2;
- var PJD_WGS84 = 4; // WGS84 or equivalent
- var PJD_NODATUM = 5; // WGS84 or equivalent
- var SEC_TO_RAD = 4.84813681109535993589914102357e-6;
- var HALF_PI = Math.PI/2;
- // ellipoid pj_set_ell.c
- var SIXTH = 0.1666666666666666667;
- /* 1/6 */
- var RA4 = 0.04722222222222222222;
- /* 17/360 */
- var RA6 = 0.02215608465608465608;
- var EPSLN = 1.0e-10;
- // you'd think you could use Number.EPSILON above but that makes
- // Mollweide get into an infinate loop.
- var D2R = 0.01745329251994329577;
- var R2D = 57.29577951308232088;
- var FORTPI = Math.PI/4;
- var TWO_PI = Math.PI * 2;
- // SPI is slightly greater than Math.PI, so values that exceed the -180..180
- // degree range by a tiny amount don't get wrapped. This prevents points that
- // have drifted from their original location along the 180th meridian (due to
- // floating point error) from changing their sign.
- var SPI = 3.14159265359;
- var exports$1 = {};
- exports$1.greenwich = 0.0; //"0dE",
- exports$1.lisbon = -9.131906111111; //"9d07'54.862\"W",
- exports$1.paris = 2.337229166667; //"2d20'14.025\"E",
- exports$1.bogota = -74.080916666667; //"74d04'51.3\"W",
- exports$1.madrid = -3.687938888889; //"3d41'16.58\"W",
- exports$1.rome = 12.452333333333; //"12d27'8.4\"E",
- exports$1.bern = 7.439583333333; //"7d26'22.5\"E",
- exports$1.jakarta = 106.807719444444; //"106d48'27.79\"E",
- exports$1.ferro = -17.666666666667; //"17d40'W",
- exports$1.brussels = 4.367975; //"4d22'4.71\"E",
- exports$1.stockholm = 18.058277777778; //"18d3'29.8\"E",
- exports$1.athens = 23.7163375; //"23d42'58.815\"E",
- exports$1.oslo = 10.722916666667; //"10d43'22.5\"E"
- var units = {
- ft: {to_meter: 0.3048},
- 'us-ft': {to_meter: 1200 / 3937}
- };
- var ignoredChar = /[\s_\-\/\(\)]/g;
- function match(obj, key) {
- if (obj[key]) {
- return obj[key];
- }
- var keys = Object.keys(obj);
- var lkey = key.toLowerCase().replace(ignoredChar, '');
- var i = -1;
- var testkey, processedKey;
- while (++i < keys.length) {
- testkey = keys[i];
- processedKey = testkey.toLowerCase().replace(ignoredChar, '');
- if (processedKey === lkey) {
- return obj[testkey];
- }
- }
- }
- var parseProj = function(defData) {
- var self = {};
- var paramObj = defData.split('+').map(function(v) {
- return v.trim();
- }).filter(function(a) {
- return a;
- }).reduce(function(p, a) {
- var split = a.split('=');
- split.push(true);
- p[split[0].toLowerCase()] = split[1];
- return p;
- }, {});
- var paramName, paramVal, paramOutname;
- var params = {
- proj: 'projName',
- datum: 'datumCode',
- rf: function(v) {
- self.rf = parseFloat(v);
- },
- lat_0: function(v) {
- self.lat0 = v * D2R;
- },
- lat_1: function(v) {
- self.lat1 = v * D2R;
- },
- lat_2: function(v) {
- self.lat2 = v * D2R;
- },
- lat_ts: function(v) {
- self.lat_ts = v * D2R;
- },
- lon_0: function(v) {
- self.long0 = v * D2R;
- },
- lon_1: function(v) {
- self.long1 = v * D2R;
- },
- lon_2: function(v) {
- self.long2 = v * D2R;
- },
- alpha: function(v) {
- self.alpha = parseFloat(v) * D2R;
- },
- lonc: function(v) {
- self.longc = v * D2R;
- },
- x_0: function(v) {
- self.x0 = parseFloat(v);
- },
- y_0: function(v) {
- self.y0 = parseFloat(v);
- },
- k_0: function(v) {
- self.k0 = parseFloat(v);
- },
- k: function(v) {
- self.k0 = parseFloat(v);
- },
- a: function(v) {
- self.a = parseFloat(v);
- },
- b: function(v) {
- self.b = parseFloat(v);
- },
- r_a: function() {
- self.R_A = true;
- },
- zone: function(v) {
- self.zone = parseInt(v, 10);
- },
- south: function() {
- self.utmSouth = true;
- },
- towgs84: function(v) {
- self.datum_params = v.split(",").map(function(a) {
- return parseFloat(a);
- });
- },
- to_meter: function(v) {
- self.to_meter = parseFloat(v);
- },
- units: function(v) {
- self.units = v;
- var unit = match(units, v);
- if (unit) {
- self.to_meter = unit.to_meter;
- }
- },
- from_greenwich: function(v) {
- self.from_greenwich = v * D2R;
- },
- pm: function(v) {
- var pm = match(exports$1, v);
- self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;
- },
- nadgrids: function(v) {
- if (v === '@null') {
- self.datumCode = 'none';
- }
- else {
- self.nadgrids = v;
- }
- },
- axis: function(v) {
- var legalAxis = "ewnsud";
- if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {
- self.axis = v;
- }
- }
- };
- for (paramName in paramObj) {
- paramVal = paramObj[paramName];
- if (paramName in params) {
- paramOutname = params[paramName];
- if (typeof paramOutname === 'function') {
- paramOutname(paramVal);
- }
- else {
- self[paramOutname] = paramVal;
- }
- }
- else {
- self[paramName] = paramVal;
- }
- }
- if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){
- self.datumCode = self.datumCode.toLowerCase();
- }
- return self;
- };
- var NEUTRAL = 1;
- var KEYWORD = 2;
- var NUMBER = 3;
- var QUOTED = 4;
- var AFTERQUOTE = 5;
- var ENDED = -1;
- var whitespace = /\s/;
- var latin = /[A-Za-z]/;
- var keyword = /[A-Za-z84]/;
- var endThings = /[,\]]/;
- var digets = /[\d\.E\-\+]/;
- // const ignoredChar = /[\s_\-\/\(\)]/g;
- function Parser(text) {
- if (typeof text !== 'string') {
- throw new Error('not a string');
- }
- this.text = text.trim();
- this.level = 0;
- this.place = 0;
- this.root = null;
- this.stack = [];
- this.currentObject = null;
- this.state = NEUTRAL;
- }
- Parser.prototype.readCharicter = function() {
- var char = this.text[this.place++];
- if (this.state !== QUOTED) {
- while (whitespace.test(char)) {
- if (this.place >= this.text.length) {
- return;
- }
- char = this.text[this.place++];
- }
- }
- switch (this.state) {
- case NEUTRAL:
- return this.neutral(char);
- case KEYWORD:
- return this.keyword(char)
- case QUOTED:
- return this.quoted(char);
- case AFTERQUOTE:
- return this.afterquote(char);
- case NUMBER:
- return this.number(char);
- case ENDED:
- return;
- }
- };
- Parser.prototype.afterquote = function(char) {
- if (char === '"') {
- this.word += '"';
- this.state = QUOTED;
- return;
- }
- if (endThings.test(char)) {
- this.word = this.word.trim();
- this.afterItem(char);
- return;
- }
- throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place);
- };
- Parser.prototype.afterItem = function(char) {
- if (char === ',') {
- if (this.word !== null) {
- this.currentObject.push(this.word);
- }
- this.word = null;
- this.state = NEUTRAL;
- return;
- }
- if (char === ']') {
- this.level--;
- if (this.word !== null) {
- this.currentObject.push(this.word);
- this.word = null;
- }
- this.state = NEUTRAL;
- this.currentObject = this.stack.pop();
- if (!this.currentObject) {
- this.state = ENDED;
- }
- return;
- }
- };
- Parser.prototype.number = function(char) {
- if (digets.test(char)) {
- this.word += char;
- return;
- }
- if (endThings.test(char)) {
- this.word = parseFloat(this.word);
- this.afterItem(char);
- return;
- }
- throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place);
- };
- Parser.prototype.quoted = function(char) {
- if (char === '"') {
- this.state = AFTERQUOTE;
- return;
- }
- this.word += char;
- return;
- };
- Parser.prototype.keyword = function(char) {
- if (keyword.test(char)) {
- this.word += char;
- return;
- }
- if (char === '[') {
- var newObjects = [];
- newObjects.push(this.word);
- this.level++;
- if (this.root === null) {
- this.root = newObjects;
- } else {
- this.currentObject.push(newObjects);
- }
- this.stack.push(this.currentObject);
- this.currentObject = newObjects;
- this.state = NEUTRAL;
- return;
- }
- if (endThings.test(char)) {
- this.afterItem(char);
- return;
- }
- throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place);
- };
- Parser.prototype.neutral = function(char) {
- if (latin.test(char)) {
- this.word = char;
- this.state = KEYWORD;
- return;
- }
- if (char === '"') {
- this.word = '';
- this.state = QUOTED;
- return;
- }
- if (digets.test(char)) {
- this.word = char;
- this.state = NUMBER;
- return;
- }
- if (endThings.test(char)) {
- this.afterItem(char);
- return;
- }
- throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place);
- };
- Parser.prototype.output = function() {
- while (this.place < this.text.length) {
- this.readCharicter();
- }
- if (this.state === ENDED) {
- return this.root;
- }
- throw new Error('unable to parse string "' +this.text + '". State is ' + this.state);
- };
- function parseString(txt) {
- var parser = new Parser(txt);
- return parser.output();
- }
- function mapit(obj, key, value) {
- if (Array.isArray(key)) {
- value.unshift(key);
- key = null;
- }
- var thing = key ? {} : obj;
- var out = value.reduce(function(newObj, item) {
- sExpr(item, newObj);
- return newObj
- }, thing);
- if (key) {
- obj[key] = out;
- }
- }
- function sExpr(v, obj) {
- if (!Array.isArray(v)) {
- obj[v] = true;
- return;
- }
- var key = v.shift();
- if (key === 'PARAMETER') {
- key = v.shift();
- }
- if (v.length === 1) {
- if (Array.isArray(v[0])) {
- obj[key] = {};
- sExpr(v[0], obj[key]);
- return;
- }
- obj[key] = v[0];
- return;
- }
- if (!v.length) {
- obj[key] = true;
- return;
- }
- if (key === 'TOWGS84') {
- obj[key] = v;
- return;
- }
- if (!Array.isArray(key)) {
- obj[key] = {};
- }
- var i;
- switch (key) {
- case 'UNIT':
- case 'PRIMEM':
- case 'VERT_DATUM':
- obj[key] = {
- name: v[0].toLowerCase(),
- convert: v[1]
- };
- if (v.length === 3) {
- sExpr(v[2], obj[key]);
- }
- return;
- case 'SPHEROID':
- case 'ELLIPSOID':
- obj[key] = {
- name: v[0],
- a: v[1],
- rf: v[2]
- };
- if (v.length === 4) {
- sExpr(v[3], obj[key]);
- }
- return;
- case 'PROJECTEDCRS':
- case 'PROJCRS':
- case 'GEOGCS':
- case 'GEOCCS':
- case 'PROJCS':
- case 'LOCAL_CS':
- case 'GEODCRS':
- case 'GEODETICCRS':
- case 'GEODETICDATUM':
- case 'EDATUM':
- case 'ENGINEERINGDATUM':
- case 'VERT_CS':
- case 'VERTCRS':
- case 'VERTICALCRS':
- case 'COMPD_CS':
- case 'COMPOUNDCRS':
- case 'ENGINEERINGCRS':
- case 'ENGCRS':
- case 'FITTED_CS':
- case 'LOCAL_DATUM':
- case 'DATUM':
- v[0] = ['name', v[0]];
- mapit(obj, key, v);
- return;
- default:
- i = -1;
- while (++i < v.length) {
- if (!Array.isArray(v[i])) {
- return sExpr(v, obj[key]);
- }
- }
- return mapit(obj, key, v);
- }
- }
- var D2R$1 = 0.01745329251994329577;
- function rename(obj, params) {
- var outName = params[0];
- var inName = params[1];
- if (!(outName in obj) && (inName in obj)) {
- obj[outName] = obj[inName];
- if (params.length === 3) {
- obj[outName] = params[2](obj[outName]);
- }
- }
- }
- function d2r(input) {
- return input * D2R$1;
- }
- function cleanWKT(wkt) {
- if (wkt.type === 'GEOGCS') {
- wkt.projName = 'longlat';
- } else if (wkt.type === 'LOCAL_CS') {
- wkt.projName = 'identity';
- wkt.local = true;
- } else {
- if (typeof wkt.PROJECTION === 'object') {
- wkt.projName = Object.keys(wkt.PROJECTION)[0];
- } else {
- wkt.projName = wkt.PROJECTION;
- }
- }
- if (wkt.UNIT) {
- wkt.units = wkt.UNIT.name.toLowerCase();
- if (wkt.units === 'metre') {
- wkt.units = 'meter';
- }
- if (wkt.UNIT.convert) {
- if (wkt.type === 'GEOGCS') {
- if (wkt.DATUM && wkt.DATUM.SPHEROID) {
- wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;
- }
- } else {
- wkt.to_meter = wkt.UNIT.convert, 10;
- }
- }
- }
- var geogcs = wkt.GEOGCS;
- if (wkt.type === 'GEOGCS') {
- geogcs = wkt;
- }
- if (geogcs) {
- //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){
- // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;
- //}
- if (geogcs.DATUM) {
- wkt.datumCode = geogcs.DATUM.name.toLowerCase();
- } else {
- wkt.datumCode = geogcs.name.toLowerCase();
- }
- if (wkt.datumCode.slice(0, 2) === 'd_') {
- wkt.datumCode = wkt.datumCode.slice(2);
- }
- if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {
- wkt.datumCode = 'nzgd49';
- }
- if (wkt.datumCode === 'wgs_1984') {
- if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {
- wkt.sphere = true;
- }
- wkt.datumCode = 'wgs84';
- }
- if (wkt.datumCode.slice(-6) === '_ferro') {
- wkt.datumCode = wkt.datumCode.slice(0, - 6);
- }
- if (wkt.datumCode.slice(-8) === '_jakarta') {
- wkt.datumCode = wkt.datumCode.slice(0, - 8);
- }
- if (~wkt.datumCode.indexOf('belge')) {
- wkt.datumCode = 'rnb72';
- }
- if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {
- wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk');
- if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {
- wkt.ellps = 'intl';
- }
- wkt.a = geogcs.DATUM.SPHEROID.a;
- wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);
- }
- if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {
- wkt.datum_params = geogcs.DATUM.TOWGS84;
- }
- if (~wkt.datumCode.indexOf('osgb_1936')) {
- wkt.datumCode = 'osgb36';
- }
- if (~wkt.datumCode.indexOf('osni_1952')) {
- wkt.datumCode = 'osni52';
- }
- if (~wkt.datumCode.indexOf('tm65')
- || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {
- wkt.datumCode = 'ire65';
- }
- if (wkt.datumCode === 'ch1903+') {
- wkt.datumCode = 'ch1903';
- }
- if (~wkt.datumCode.indexOf('israel')) {
- wkt.datumCode = 'isr93';
- }
- }
- if (wkt.b && !isFinite(wkt.b)) {
- wkt.b = wkt.a;
- }
- function toMeter(input) {
- var ratio = wkt.to_meter || 1;
- return input * ratio;
- }
- var renamer = function(a) {
- return rename(wkt, a);
- };
- var list = [
- ['standard_parallel_1', 'Standard_Parallel_1'],
- ['standard_parallel_2', 'Standard_Parallel_2'],
- ['false_easting', 'False_Easting'],
- ['false_northing', 'False_Northing'],
- ['central_meridian', 'Central_Meridian'],
- ['latitude_of_origin', 'Latitude_Of_Origin'],
- ['latitude_of_origin', 'Central_Parallel'],
- ['scale_factor', 'Scale_Factor'],
- ['k0', 'scale_factor'],
- ['latitude_of_center', 'Latitude_Of_Center'],
- ['latitude_of_center', 'Latitude_of_center'],
- ['lat0', 'latitude_of_center', d2r],
- ['longitude_of_center', 'Longitude_Of_Center'],
- ['longitude_of_center', 'Longitude_of_center'],
- ['longc', 'longitude_of_center', d2r],
- ['x0', 'false_easting', toMeter],
- ['y0', 'false_northing', toMeter],
- ['long0', 'central_meridian', d2r],
- ['lat0', 'latitude_of_origin', d2r],
- ['lat0', 'standard_parallel_1', d2r],
- ['lat1', 'standard_parallel_1', d2r],
- ['lat2', 'standard_parallel_2', d2r],
- ['azimuth', 'Azimuth'],
- ['alpha', 'azimuth', d2r],
- ['srsCode', 'name']
- ];
- list.forEach(renamer);
- if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {
- wkt.long0 = wkt.longc;
- }
- if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {
- wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);
- wkt.lat_ts = wkt.lat1;
- }
- }
- var wkt = function(wkt) {
- var lisp = parseString(wkt);
- var type = lisp.shift();
- var name = lisp.shift();
- lisp.unshift(['name', name]);
- lisp.unshift(['type', type]);
- var obj = {};
- sExpr(lisp, obj);
- cleanWKT(obj);
- return obj;
- };
- function defs(name) {
- /*global console*/
- var that = this;
- if (arguments.length === 2) {
- var def = arguments[1];
- if (typeof def === 'string') {
- if (def.charAt(0) === '+') {
- defs[name] = parseProj(arguments[1]);
- }
- else {
- defs[name] = wkt(arguments[1]);
- }
- } else {
- defs[name] = def;
- }
- }
- else if (arguments.length === 1) {
- if (Array.isArray(name)) {
- return name.map(function(v) {
- if (Array.isArray(v)) {
- defs.apply(that, v);
- }
- else {
- defs(v);
- }
- });
- }
- else if (typeof name === 'string') {
- if (name in defs) {
- return defs[name];
- }
- }
- else if ('EPSG' in name) {
- defs['EPSG:' + name.EPSG] = name;
- }
- else if ('ESRI' in name) {
- defs['ESRI:' + name.ESRI] = name;
- }
- else if ('IAU2000' in name) {
- defs['IAU2000:' + name.IAU2000] = name;
- }
- else {
- console.log(name);
- }
- return;
- }
- }
- globals(defs);
- function testObj(code){
- return typeof code === 'string';
- }
- function testDef(code){
- return code in defs;
- }
- var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];
- function testWKT(code){
- return codeWords.some(function (word) {
- return code.indexOf(word) > -1;
- });
- }
- var codes = ['3857', '900913', '3785', '102113'];
- function checkMercator(item) {
- var auth = match(item, 'authority');
- if (!auth) {
- return;
- }
- var code = match(auth, 'epsg');
- return code && codes.indexOf(code) > -1;
- }
- function checkProjStr(item) {
- var ext = match(item, 'extension');
- if (!ext) {
- return;
- }
- return match(ext, 'proj4');
- }
- function testProj(code){
- return code[0] === '+';
- }
- function parse(code){
- if (testObj(code)) {
- //check to see if this is a WKT string
- if (testDef(code)) {
- return defs[code];
- }
- if (testWKT(code)) {
- var out = wkt(code);
- // test of spetial case, due to this being a very common and often malformed
- if (checkMercator(out)) {
- return defs['EPSG:3857'];
- }
- var maybeProjStr = checkProjStr(out);
- if (maybeProjStr) {
- return parseProj(maybeProjStr);
- }
- return out;
- }
- if (testProj(code)) {
- return parseProj(code);
- }
- }else{
- return code;
- }
- }
- var extend = function(destination, source) {
- destination = destination || {};
- var value, property;
- if (!source) {
- return destination;
- }
- for (property in source) {
- value = source[property];
- if (value !== undefined) {
- destination[property] = value;
- }
- }
- return destination;
- };
- var msfnz = function(eccent, sinphi, cosphi) {
- var con = eccent * sinphi;
- return cosphi / (Math.sqrt(1 - con * con));
- };
- var sign = function(x) {
- return x<0 ? -1 : 1;
- };
- var adjust_lon = function(x) {
- return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));
- };
- var tsfnz = function(eccent, phi, sinphi) {
- var con = eccent * sinphi;
- var com = 0.5 * eccent;
- con = Math.pow(((1 - con) / (1 + con)), com);
- return (Math.tan(0.5 * (HALF_PI - phi)) / con);
- };
- var phi2z = function(eccent, ts) {
- var eccnth = 0.5 * eccent;
- var con, dphi;
- var phi = HALF_PI - 2 * Math.atan(ts);
- for (var i = 0; i <= 15; i++) {
- con = eccent * Math.sin(phi);
- dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;
- phi += dphi;
- if (Math.abs(dphi) <= 0.0000000001) {
- return phi;
- }
- }
- //console.log("phi2z has NoConvergence");
- return -9999;
- };
- function init() {
- var con = this.b / this.a;
- this.es = 1 - con * con;
- if(!('x0' in this)){
- this.x0 = 0;
- }
- if(!('y0' in this)){
- this.y0 = 0;
- }
- this.e = Math.sqrt(this.es);
- if (this.lat_ts) {
- if (this.sphere) {
- this.k0 = Math.cos(this.lat_ts);
- }
- else {
- this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
- }
- }
- else {
- if (!this.k0) {
- if (this.k) {
- this.k0 = this.k;
- }
- else {
- this.k0 = 1;
- }
- }
- }
- }
- /* Mercator forward equations--mapping lat,long to x,y
- --------------------------------------------------*/
- function forward(p) {
- var lon = p.x;
- var lat = p.y;
- // convert to radians
- if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {
- return null;
- }
- var x, y;
- if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {
- return null;
- }
- else {
- if (this.sphere) {
- x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
- y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));
- }
- else {
- var sinphi = Math.sin(lat);
- var ts = tsfnz(this.e, lat, sinphi);
- x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
- y = this.y0 - this.a * this.k0 * Math.log(ts);
- }
- p.x = x;
- p.y = y;
- return p;
- }
- }
- /* Mercator inverse equations--mapping x,y to lat/long
- --------------------------------------------------*/
- function inverse(p) {
- var x = p.x - this.x0;
- var y = p.y - this.y0;
- var lon, lat;
- if (this.sphere) {
- lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));
- }
- else {
- var ts = Math.exp(-y / (this.a * this.k0));
- lat = phi2z(this.e, ts);
- if (lat === -9999) {
- return null;
- }
- }
- lon = adjust_lon(this.long0 + x / (this.a * this.k0));
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$1 = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"];
- var merc = {
- init: init,
- forward: forward,
- inverse: inverse,
- names: names$1
- };
- function init$1() {
- //no-op for longlat
- }
- function identity(pt) {
- return pt;
- }
- var names$2 = ["longlat", "identity"];
- var longlat = {
- init: init$1,
- forward: identity,
- inverse: identity,
- names: names$2
- };
- var projs = [merc, longlat];
- var names = {};
- var projStore = [];
- function add(proj, i) {
- var len = projStore.length;
- if (!proj.names) {
- console.log(i);
- return true;
- }
- projStore[len] = proj;
- proj.names.forEach(function(n) {
- names[n.toLowerCase()] = len;
- });
- return this;
- }
- function get(name) {
- if (!name) {
- return false;
- }
- var n = name.toLowerCase();
- if (typeof names[n] !== 'undefined' && projStore[names[n]]) {
- return projStore[names[n]];
- }
- }
- function start() {
- projs.forEach(add);
- }
- var projections = {
- start: start,
- add: add,
- get: get
- };
- var exports$2 = {};
- exports$2.MERIT = {
- a: 6378137.0,
- rf: 298.257,
- ellipseName: "MERIT 1983"
- };
- exports$2.SGS85 = {
- a: 6378136.0,
- rf: 298.257,
- ellipseName: "Soviet Geodetic System 85"
- };
- exports$2.GRS80 = {
- a: 6378137.0,
- rf: 298.257222101,
- ellipseName: "GRS 1980(IUGG, 1980)"
- };
- exports$2.IAU76 = {
- a: 6378140.0,
- rf: 298.257,
- ellipseName: "IAU 1976"
- };
- exports$2.airy = {
- a: 6377563.396,
- b: 6356256.910,
- ellipseName: "Airy 1830"
- };
- exports$2.APL4 = {
- a: 6378137,
- rf: 298.25,
- ellipseName: "Appl. Physics. 1965"
- };
- exports$2.NWL9D = {
- a: 6378145.0,
- rf: 298.25,
- ellipseName: "Naval Weapons Lab., 1965"
- };
- exports$2.mod_airy = {
- a: 6377340.189,
- b: 6356034.446,
- ellipseName: "Modified Airy"
- };
- exports$2.andrae = {
- a: 6377104.43,
- rf: 300.0,
- ellipseName: "Andrae 1876 (Den., Iclnd.)"
- };
- exports$2.aust_SA = {
- a: 6378160.0,
- rf: 298.25,
- ellipseName: "Australian Natl & S. Amer. 1969"
- };
- exports$2.GRS67 = {
- a: 6378160.0,
- rf: 298.2471674270,
- ellipseName: "GRS 67(IUGG 1967)"
- };
- exports$2.bessel = {
- a: 6377397.155,
- rf: 299.1528128,
- ellipseName: "Bessel 1841"
- };
- exports$2.bess_nam = {
- a: 6377483.865,
- rf: 299.1528128,
- ellipseName: "Bessel 1841 (Namibia)"
- };
- exports$2.clrk66 = {
- a: 6378206.4,
- b: 6356583.8,
- ellipseName: "Clarke 1866"
- };
- exports$2.clrk80 = {
- a: 6378249.145,
- rf: 293.4663,
- ellipseName: "Clarke 1880 mod."
- };
- exports$2.clrk58 = {
- a: 6378293.645208759,
- rf: 294.2606763692654,
- ellipseName: "Clarke 1858"
- };
- exports$2.CPM = {
- a: 6375738.7,
- rf: 334.29,
- ellipseName: "Comm. des Poids et Mesures 1799"
- };
- exports$2.delmbr = {
- a: 6376428.0,
- rf: 311.5,
- ellipseName: "Delambre 1810 (Belgium)"
- };
- exports$2.engelis = {
- a: 6378136.05,
- rf: 298.2566,
- ellipseName: "Engelis 1985"
- };
- exports$2.evrst30 = {
- a: 6377276.345,
- rf: 300.8017,
- ellipseName: "Everest 1830"
- };
- exports$2.evrst48 = {
- a: 6377304.063,
- rf: 300.8017,
- ellipseName: "Everest 1948"
- };
- exports$2.evrst56 = {
- a: 6377301.243,
- rf: 300.8017,
- ellipseName: "Everest 1956"
- };
- exports$2.evrst69 = {
- a: 6377295.664,
- rf: 300.8017,
- ellipseName: "Everest 1969"
- };
- exports$2.evrstSS = {
- a: 6377298.556,
- rf: 300.8017,
- ellipseName: "Everest (Sabah & Sarawak)"
- };
- exports$2.fschr60 = {
- a: 6378166.0,
- rf: 298.3,
- ellipseName: "Fischer (Mercury Datum) 1960"
- };
- exports$2.fschr60m = {
- a: 6378155.0,
- rf: 298.3,
- ellipseName: "Fischer 1960"
- };
- exports$2.fschr68 = {
- a: 6378150.0,
- rf: 298.3,
- ellipseName: "Fischer 1968"
- };
- exports$2.helmert = {
- a: 6378200.0,
- rf: 298.3,
- ellipseName: "Helmert 1906"
- };
- exports$2.hough = {
- a: 6378270.0,
- rf: 297.0,
- ellipseName: "Hough"
- };
- exports$2.intl = {
- a: 6378388.0,
- rf: 297.0,
- ellipseName: "International 1909 (Hayford)"
- };
- exports$2.kaula = {
- a: 6378163.0,
- rf: 298.24,
- ellipseName: "Kaula 1961"
- };
- exports$2.lerch = {
- a: 6378139.0,
- rf: 298.257,
- ellipseName: "Lerch 1979"
- };
- exports$2.mprts = {
- a: 6397300.0,
- rf: 191.0,
- ellipseName: "Maupertius 1738"
- };
- exports$2.new_intl = {
- a: 6378157.5,
- b: 6356772.2,
- ellipseName: "New International 1967"
- };
- exports$2.plessis = {
- a: 6376523.0,
- rf: 6355863.0,
- ellipseName: "Plessis 1817 (France)"
- };
- exports$2.krass = {
- a: 6378245.0,
- rf: 298.3,
- ellipseName: "Krassovsky, 1942"
- };
- exports$2.SEasia = {
- a: 6378155.0,
- b: 6356773.3205,
- ellipseName: "Southeast Asia"
- };
- exports$2.walbeck = {
- a: 6376896.0,
- b: 6355834.8467,
- ellipseName: "Walbeck"
- };
- exports$2.WGS60 = {
- a: 6378165.0,
- rf: 298.3,
- ellipseName: "WGS 60"
- };
- exports$2.WGS66 = {
- a: 6378145.0,
- rf: 298.25,
- ellipseName: "WGS 66"
- };
- exports$2.WGS7 = {
- a: 6378135.0,
- rf: 298.26,
- ellipseName: "WGS 72"
- };
- var WGS84 = exports$2.WGS84 = {
- a: 6378137.0,
- rf: 298.257223563,
- ellipseName: "WGS 84"
- };
- exports$2.sphere = {
- a: 6370997.0,
- b: 6370997.0,
- ellipseName: "Normal Sphere (r=6370997)"
- };
- function eccentricity(a, b, rf, R_A) {
- var a2 = a * a; // used in geocentric
- var b2 = b * b; // used in geocentric
- var es = (a2 - b2) / a2; // e ^ 2
- var e = 0;
- if (R_A) {
- a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));
- a2 = a * a;
- es = 0;
- } else {
- e = Math.sqrt(es); // eccentricity
- }
- var ep2 = (a2 - b2) / b2; // used in geocentric
- return {
- es: es,
- e: e,
- ep2: ep2
- };
- }
- function sphere(a, b, rf, ellps, sphere) {
- if (!a) { // do we have an ellipsoid?
- var ellipse = match(exports$2, ellps);
- if (!ellipse) {
- ellipse = WGS84;
- }
- a = ellipse.a;
- b = ellipse.b;
- rf = ellipse.rf;
- }
- if (rf && !b) {
- b = (1.0 - 1.0 / rf) * a;
- }
- if (rf === 0 || Math.abs(a - b) < EPSLN) {
- sphere = true;
- b = a;
- }
- return {
- a: a,
- b: b,
- rf: rf,
- sphere: sphere
- };
- }
- var exports$3 = {};
- exports$3.wgs84 = {
- towgs84: "0,0,0",
- ellipse: "WGS84",
- datumName: "WGS84"
- };
- exports$3.ch1903 = {
- towgs84: "674.374,15.056,405.346",
- ellipse: "bessel",
- datumName: "swiss"
- };
- exports$3.ggrs87 = {
- towgs84: "-199.87,74.79,246.62",
- ellipse: "GRS80",
- datumName: "Greek_Geodetic_Reference_System_1987"
- };
- exports$3.nad83 = {
- towgs84: "0,0,0",
- ellipse: "GRS80",
- datumName: "North_American_Datum_1983"
- };
- exports$3.nad27 = {
- nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",
- ellipse: "clrk66",
- datumName: "North_American_Datum_1927"
- };
- exports$3.potsdam = {
- towgs84: "606.0,23.0,413.0",
- ellipse: "bessel",
- datumName: "Potsdam Rauenberg 1950 DHDN"
- };
- exports$3.carthage = {
- towgs84: "-263.0,6.0,431.0",
- ellipse: "clark80",
- datumName: "Carthage 1934 Tunisia"
- };
- exports$3.hermannskogel = {
- towgs84: "653.0,-212.0,449.0",
- ellipse: "bessel",
- datumName: "Hermannskogel"
- };
- exports$3.osni52 = {
- towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
- ellipse: "airy",
- datumName: "Irish National"
- };
- exports$3.ire65 = {
- towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
- ellipse: "mod_airy",
- datumName: "Ireland 1965"
- };
- exports$3.rassadiran = {
- towgs84: "-133.63,-157.5,-158.62",
- ellipse: "intl",
- datumName: "Rassadiran"
- };
- exports$3.nzgd49 = {
- towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",
- ellipse: "intl",
- datumName: "New Zealand Geodetic Datum 1949"
- };
- exports$3.osgb36 = {
- towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",
- ellipse: "airy",
- datumName: "Airy 1830"
- };
- exports$3.s_jtsk = {
- towgs84: "589,76,480",
- ellipse: 'bessel',
- datumName: 'S-JTSK (Ferro)'
- };
- exports$3.beduaram = {
- towgs84: '-106,-87,188',
- ellipse: 'clrk80',
- datumName: 'Beduaram'
- };
- exports$3.gunung_segara = {
- towgs84: '-403,684,41',
- ellipse: 'bessel',
- datumName: 'Gunung Segara Jakarta'
- };
- exports$3.rnb72 = {
- towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",
- ellipse: "intl",
- datumName: "Reseau National Belge 1972"
- };
- function datum(datumCode, datum_params, a, b, es, ep2) {
- var out = {};
- if (datumCode === undefined || datumCode === 'none') {
- out.datum_type = PJD_NODATUM;
- } else {
- out.datum_type = PJD_WGS84;
- }
- if (datum_params) {
- out.datum_params = datum_params.map(parseFloat);
- if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {
- out.datum_type = PJD_3PARAM;
- }
- if (out.datum_params.length > 3) {
- if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {
- out.datum_type = PJD_7PARAM;
- out.datum_params[3] *= SEC_TO_RAD;
- out.datum_params[4] *= SEC_TO_RAD;
- out.datum_params[5] *= SEC_TO_RAD;
- out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;
- }
- }
- }
- out.a = a; //datum object also uses these values
- out.b = b;
- out.es = es;
- out.ep2 = ep2;
- return out;
- }
- function Projection(srsCode,callback) {
- if (!(this instanceof Projection)) {
- return new Projection(srsCode);
- }
- callback = callback || function(error){
- if(error){
- throw error;
- }
- };
- var json = parse(srsCode);
- if(typeof json !== 'object'){
- callback(srsCode);
- return;
- }
- var ourProj = Projection.projections.get(json.projName);
- if(!ourProj){
- callback(srsCode);
- return;
- }
- if (json.datumCode && json.datumCode !== 'none') {
- var datumDef = match(exports$3, json.datumCode);
- if (datumDef) {
- json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;
- json.ellps = datumDef.ellipse;
- json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;
- }
- }
- json.k0 = json.k0 || 1.0;
- json.axis = json.axis || 'enu';
- json.ellps = json.ellps || 'wgs84';
- var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere);
- var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);
- var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);
- extend(this, json); // transfer everything over from the projection because we don't know what we'll need
- extend(this, ourProj); // transfer all the methods from the projection
- // copy the 4 things over we calulated in deriveConstants.sphere
- this.a = sphere_.a;
- this.b = sphere_.b;
- this.rf = sphere_.rf;
- this.sphere = sphere_.sphere;
- // copy the 3 things we calculated in deriveConstants.eccentricity
- this.es = ecc.es;
- this.e = ecc.e;
- this.ep2 = ecc.ep2;
- // add in the datum object
- this.datum = datumObj;
- // init the projection
- this.init();
- // legecy callback from back in the day when it went to spatialreference.org
- callback(null, this);
- }
- Projection.projections = projections;
- Projection.projections.start();
- 'use strict';
- function compareDatums(source, dest) {
- if (source.datum_type !== dest.datum_type) {
- return false; // false, datums are not equal
- } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {
- // the tolerance for es is to ensure that GRS80 and WGS84
- // are considered identical
- return false;
- } else if (source.datum_type === PJD_3PARAM) {
- return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);
- } else if (source.datum_type === PJD_7PARAM) {
- return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);
- } else {
- return true; // datums are equal
- }
- } // cs_compare_datums()
- /*
- * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
- * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
- * according to the current ellipsoid parameters.
- *
- * Latitude : Geodetic latitude in radians (input)
- * Longitude : Geodetic longitude in radians (input)
- * Height : Geodetic height, in meters (input)
- * X : Calculated Geocentric X coordinate, in meters (output)
- * Y : Calculated Geocentric Y coordinate, in meters (output)
- * Z : Calculated Geocentric Z coordinate, in meters (output)
- *
- */
- function geodeticToGeocentric(p, es, a) {
- var Longitude = p.x;
- var Latitude = p.y;
- var Height = p.z ? p.z : 0; //Z value not always supplied
- var Rn; /* Earth radius at location */
- var Sin_Lat; /* Math.sin(Latitude) */
- var Sin2_Lat; /* Square of Math.sin(Latitude) */
- var Cos_Lat; /* Math.cos(Latitude) */
- /*
- ** Don't blow up if Latitude is just a little out of the value
- ** range as it may just be a rounding issue. Also removed longitude
- ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.
- */
- if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {
- Latitude = -HALF_PI;
- } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {
- Latitude = HALF_PI;
- } else if (Latitude < -HALF_PI) {
- /* Latitude out of range */
- //..reportError('geocent:lat out of range:' + Latitude);
- return { x: -Infinity, y: -Infinity, z: p.z };
- } else if (Latitude > HALF_PI) {
- /* Latitude out of range */
- return { x: Infinity, y: Infinity, z: p.z };
- }
- if (Longitude > Math.PI) {
- Longitude -= (2 * Math.PI);
- }
- Sin_Lat = Math.sin(Latitude);
- Cos_Lat = Math.cos(Latitude);
- Sin2_Lat = Sin_Lat * Sin_Lat;
- Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));
- return {
- x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),
- y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),
- z: ((Rn * (1 - es)) + Height) * Sin_Lat
- };
- } // cs_geodetic_to_geocentric()
- function geocentricToGeodetic(p, es, a, b) {
- /* local defintions and variables */
- /* end-criterium of loop, accuracy of sin(Latitude) */
- var genau = 1e-12;
- var genau2 = (genau * genau);
- var maxiter = 30;
- var P; /* distance between semi-minor axis and location */
- var RR; /* distance between center and location */
- var CT; /* sin of geocentric latitude */
- var ST; /* cos of geocentric latitude */
- var RX;
- var RK;
- var RN; /* Earth radius at location */
- var CPHI0; /* cos of start or old geodetic latitude in iterations */
- var SPHI0; /* sin of start or old geodetic latitude in iterations */
- var CPHI; /* cos of searched geodetic latitude */
- var SPHI; /* sin of searched geodetic latitude */
- var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */
- var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */
- var X = p.x;
- var Y = p.y;
- var Z = p.z ? p.z : 0.0; //Z value not always supplied
- var Longitude;
- var Latitude;
- var Height;
- P = Math.sqrt(X * X + Y * Y);
- RR = Math.sqrt(X * X + Y * Y + Z * Z);
- /* special cases for latitude and longitude */
- if (P / a < genau) {
- /* special case, if P=0. (X=0., Y=0.) */
- Longitude = 0.0;
- /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis
- * of ellipsoid (=center of mass), Latitude becomes PI/2 */
- if (RR / a < genau) {
- Latitude = HALF_PI;
- Height = -b;
- return {
- x: p.x,
- y: p.y,
- z: p.z
- };
- }
- } else {
- /* ellipsoidal (geodetic) longitude
- * interval: -PI < Longitude <= +PI */
- Longitude = Math.atan2(Y, X);
- }
- /* --------------------------------------------------------------
- * Following iterative algorithm was developped by
- * "Institut for Erdmessung", University of Hannover, July 1988.
- * Internet: www.ife.uni-hannover.de
- * Iterative computation of CPHI,SPHI and Height.
- * Iteration of CPHI and SPHI to 10**-12 radian resp.
- * 2*10**-7 arcsec.
- * --------------------------------------------------------------
- */
- CT = Z / RR;
- ST = P / RR;
- RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);
- CPHI0 = ST * (1.0 - es) * RX;
- SPHI0 = CT * RX;
- iter = 0;
- /* loop to find sin(Latitude) resp. Latitude
- * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */
- do {
- iter++;
- RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);
- /* ellipsoidal (geodetic) height */
- Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);
- RK = es * RN / (RN + Height);
- RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);
- CPHI = ST * (1.0 - RK) * RX;
- SPHI = CT * RX;
- SDPHI = SPHI * CPHI0 - CPHI * SPHI0;
- CPHI0 = CPHI;
- SPHI0 = SPHI;
- }
- while (SDPHI * SDPHI > genau2 && iter < maxiter);
- /* ellipsoidal (geodetic) latitude */
- Latitude = Math.atan(SPHI / Math.abs(CPHI));
- return {
- x: Longitude,
- y: Latitude,
- z: Height
- };
- } // cs_geocentric_to_geodetic()
- /****************************************************************/
- // pj_geocentic_to_wgs84( p )
- // p = point to transform in geocentric coordinates (x,y,z)
- /** point object, nothing fancy, just allows values to be
- passed back and forth by reference rather than by value.
- Other point classes may be used as long as they have
- x and y properties, which will get modified in the transform method.
- */
- function geocentricToWgs84(p, datum_type, datum_params) {
- if (datum_type === PJD_3PARAM) {
- // if( x[io] === HUGE_VAL )
- // continue;
- return {
- x: p.x + datum_params[0],
- y: p.y + datum_params[1],
- z: p.z + datum_params[2],
- };
- } else if (datum_type === PJD_7PARAM) {
- var Dx_BF = datum_params[0];
- var Dy_BF = datum_params[1];
- var Dz_BF = datum_params[2];
- var Rx_BF = datum_params[3];
- var Ry_BF = datum_params[4];
- var Rz_BF = datum_params[5];
- var M_BF = datum_params[6];
- // if( x[io] === HUGE_VAL )
- // continue;
- return {
- x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,
- y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,
- z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF
- };
- }
- } // cs_geocentric_to_wgs84
- /****************************************************************/
- // pj_geocentic_from_wgs84()
- // coordinate system definition,
- // point to transform in geocentric coordinates (x,y,z)
- function geocentricFromWgs84(p, datum_type, datum_params) {
- if (datum_type === PJD_3PARAM) {
- //if( x[io] === HUGE_VAL )
- // continue;
- return {
- x: p.x - datum_params[0],
- y: p.y - datum_params[1],
- z: p.z - datum_params[2],
- };
- } else if (datum_type === PJD_7PARAM) {
- var Dx_BF = datum_params[0];
- var Dy_BF = datum_params[1];
- var Dz_BF = datum_params[2];
- var Rx_BF = datum_params[3];
- var Ry_BF = datum_params[4];
- var Rz_BF = datum_params[5];
- var M_BF = datum_params[6];
- var x_tmp = (p.x - Dx_BF) / M_BF;
- var y_tmp = (p.y - Dy_BF) / M_BF;
- var z_tmp = (p.z - Dz_BF) / M_BF;
- //if( x[io] === HUGE_VAL )
- // continue;
- return {
- x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,
- y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,
- z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp
- };
- } //cs_geocentric_from_wgs84()
- }
- function checkParams(type) {
- return (type === PJD_3PARAM || type === PJD_7PARAM);
- }
- var datum_transform = function(source, dest, point) {
- // Short cut if the datums are identical.
- if (compareDatums(source, dest)) {
- return point; // in this case, zero is sucess,
- // whereas cs_compare_datums returns 1 to indicate TRUE
- // confusing, should fix this
- }
- // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest
- if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {
- return point;
- }
- // If this datum requires grid shifts, then apply it to geodetic coordinates.
- // Do we need to go through geocentric coordinates?
- if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {
- return point;
- }
- // Convert to geocentric coordinates.
- point = geodeticToGeocentric(point, source.es, source.a);
- // Convert between datums
- if (checkParams(source.datum_type)) {
- point = geocentricToWgs84(point, source.datum_type, source.datum_params);
- }
- if (checkParams(dest.datum_type)) {
- point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);
- }
- return geocentricToGeodetic(point, dest.es, dest.a, dest.b);
- };
- var adjust_axis = function(crs, denorm, point) {
- var xin = point.x,
- yin = point.y,
- zin = point.z || 0.0;
- var v, t, i;
- var out = {};
- for (i = 0; i < 3; i++) {
- if (denorm && i === 2 && point.z === undefined) {
- continue;
- }
- if (i === 0) {
- v = xin;
- t = 'x';
- }
- else if (i === 1) {
- v = yin;
- t = 'y';
- }
- else {
- v = zin;
- t = 'z';
- }
- switch (crs.axis[i]) {
- case 'e':
- out[t] = v;
- break;
- case 'w':
- out[t] = -v;
- break;
- case 'n':
- out[t] = v;
- break;
- case 's':
- out[t] = -v;
- break;
- case 'u':
- if (point[t] !== undefined) {
- out.z = v;
- }
- break;
- case 'd':
- if (point[t] !== undefined) {
- out.z = -v;
- }
- break;
- default:
- //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName);
- return null;
- }
- }
- return out;
- };
- var toPoint = function (array){
- var out = {
- x: array[0],
- y: array[1]
- };
- if (array.length>2) {
- out.z = array[2];
- }
- if (array.length>3) {
- out.m = array[3];
- }
- return out;
- };
- var checkSanity = function (point) {
- checkCoord(point.x);
- checkCoord(point.y);
- };
- function checkCoord(num) {
- if (typeof Number.isFinite === 'function') {
- if (Number.isFinite(num)) {
- return;
- }
- throw new TypeError('coordinates must be finite numbers');
- }
- if (typeof num !== 'number' || num !== num || !isFinite(num)) {
- throw new TypeError('coordinates must be finite numbers');
- }
- }
- function checkNotWGS(source, dest) {
- return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');
- }
- function transform(source, dest, point) {
- var wgs84;
- if (Array.isArray(point)) {
- point = toPoint(point);
- }
- checkSanity(point);
- // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84
- if (source.datum && dest.datum && checkNotWGS(source, dest)) {
- wgs84 = new Projection('WGS84');
- point = transform(source, wgs84, point);
- source = wgs84;
- }
- // DGR, 2010/11/12
- if (source.axis !== 'enu') {
- point = adjust_axis(source, false, point);
- }
- // Transform source points to long/lat, if they aren't already.
- if (source.projName === 'longlat') {
- point = {
- x: point.x * D2R,
- y: point.y * D2R
- };
- }
- else {
- if (source.to_meter) {
- point = {
- x: point.x * source.to_meter,
- y: point.y * source.to_meter
- };
- }
- point = source.inverse(point); // Convert Cartesian to longlat
- }
- // Adjust for the prime meridian if necessary
- if (source.from_greenwich) {
- point.x += source.from_greenwich;
- }
- // Convert datums if needed, and if possible.
- point = datum_transform(source.datum, dest.datum, point);
- // Adjust for the prime meridian if necessary
- if (dest.from_greenwich) {
- point = {
- x: point.x - dest.from_greenwich,
- y: point.y
- };
- }
- if (dest.projName === 'longlat') {
- // convert radians to decimal degrees
- point = {
- x: point.x * R2D,
- y: point.y * R2D
- };
- } else { // else project
- point = dest.forward(point);
- if (dest.to_meter) {
- point = {
- x: point.x / dest.to_meter,
- y: point.y / dest.to_meter
- };
- }
- }
- // DGR, 2010/11/12
- if (dest.axis !== 'enu') {
- return adjust_axis(dest, true, point);
- }
- return point;
- }
- var wgs84 = Projection('WGS84');
- function transformer(from, to, coords) {
- var transformedArray, out, keys;
- if (Array.isArray(coords)) {
- transformedArray = transform(from, to, coords);
- if (coords.length === 3) {
- return [transformedArray.x, transformedArray.y, transformedArray.z];
- }
- else {
- return [transformedArray.x, transformedArray.y];
- }
- }
- else {
- out = transform(from, to, coords);
- keys = Object.keys(coords);
- if (keys.length === 2) {
- return out;
- }
- keys.forEach(function (key) {
- if (key === 'x' || key === 'y') {
- return;
- }
- out[key] = coords[key];
- });
- return out;
- }
- }
- function checkProj(item) {
- if (item instanceof Projection) {
- return item;
- }
- if (item.oProj) {
- return item.oProj;
- }
- return Projection(item);
- }
- function proj4$1(fromProj, toProj, coord) {
- fromProj = checkProj(fromProj);
- var single = false;
- var obj;
- if (typeof toProj === 'undefined') {
- toProj = fromProj;
- fromProj = wgs84;
- single = true;
- }
- else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {
- coord = toProj;
- toProj = fromProj;
- fromProj = wgs84;
- single = true;
- }
- toProj = checkProj(toProj);
- if (coord) {
- return transformer(fromProj, toProj, coord);
- }
- else {
- obj = {
- forward: function(coords) {
- return transformer(fromProj, toProj, coords);
- },
- inverse: function(coords) {
- return transformer(toProj, fromProj, coords);
- }
- };
- if (single) {
- obj.oProj = toProj;
- }
- return obj;
- }
- }
- /**
- * UTM zones are grouped, and assigned to one of a group of 6
- * sets.
- *
- * {int} @private
- */
- var NUM_100K_SETS = 6;
- /**
- * The column letters (for easting) of the lower left value, per
- * set.
- *
- * {string} @private
- */
- var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';
- /**
- * The row letters (for northing) of the lower left value, per
- * set.
- *
- * {string} @private
- */
- var SET_ORIGIN_ROW_LETTERS = 'AFAFAF';
- var A = 65; // A
- var I = 73; // I
- var O = 79; // O
- var V = 86; // V
- var Z = 90; // Z
- var mgrs = {
- forward: forward$1,
- inverse: inverse$1,
- toPoint: toPoint$1
- };
- /**
- * Conversion of lat/lon to MGRS.
- *
- * @param {object} ll Object literal with lat and lon properties on a
- * WGS84 ellipsoid.
- * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for
- * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.
- * @return {string} the MGRS string for the given location and accuracy.
- */
- function forward$1(ll, accuracy) {
- accuracy = accuracy || 5; // default accuracy 1m
- return encode(LLtoUTM({
- lat: ll[1],
- lon: ll[0]
- }), accuracy);
- }
- /**
- * Conversion of MGRS to lat/lon.
- *
- * @param {string} mgrs MGRS string.
- * @return {array} An array with left (longitude), bottom (latitude), right
- * (longitude) and top (latitude) values in WGS84, representing the
- * bounding box for the provided MGRS reference.
- */
- function inverse$1(mgrs) {
- var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
- if (bbox.lat && bbox.lon) {
- return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];
- }
- return [bbox.left, bbox.bottom, bbox.right, bbox.top];
- }
- function toPoint$1(mgrs) {
- var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
- if (bbox.lat && bbox.lon) {
- return [bbox.lon, bbox.lat];
- }
- return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];
- }
- /**
- * Conversion from degrees to radians.
- *
- * @private
- * @param {number} deg the angle in degrees.
- * @return {number} the angle in radians.
- */
- function degToRad(deg) {
- return (deg * (Math.PI / 180.0));
- }
- /**
- * Conversion from radians to degrees.
- *
- * @private
- * @param {number} rad the angle in radians.
- * @return {number} the angle in degrees.
- */
- function radToDeg(rad) {
- return (180.0 * (rad / Math.PI));
- }
- /**
- * Converts a set of Longitude and Latitude co-ordinates to UTM
- * using the WGS84 ellipsoid.
- *
- * @private
- * @param {object} ll Object literal with lat and lon properties
- * representing the WGS84 coordinate to be converted.
- * @return {object} Object literal containing the UTM value with easting,
- * northing, zoneNumber and zoneLetter properties, and an optional
- * accuracy property in digits. Returns null if the conversion failed.
- */
- function LLtoUTM(ll) {
- var Lat = ll.lat;
- var Long = ll.lon;
- var a = 6378137.0; //ellip.radius;
- var eccSquared = 0.00669438; //ellip.eccsq;
- var k0 = 0.9996;
- var LongOrigin;
- var eccPrimeSquared;
- var N, T, C, A, M;
- var LatRad = degToRad(Lat);
- var LongRad = degToRad(Long);
- var LongOriginRad;
- var ZoneNumber;
- // (int)
- ZoneNumber = Math.floor((Long + 180) / 6) + 1;
- //Make sure the longitude 180.00 is in Zone 60
- if (Long === 180) {
- ZoneNumber = 60;
- }
- // Special zone for Norway
- if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {
- ZoneNumber = 32;
- }
- // Special zones for Svalbard
- if (Lat >= 72.0 && Lat < 84.0) {
- if (Long >= 0.0 && Long < 9.0) {
- ZoneNumber = 31;
- }
- else if (Long >= 9.0 && Long < 21.0) {
- ZoneNumber = 33;
- }
- else if (Long >= 21.0 && Long < 33.0) {
- ZoneNumber = 35;
- }
- else if (Long >= 33.0 && Long < 42.0) {
- ZoneNumber = 37;
- }
- }
- LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin
- // in middle of
- // zone
- LongOriginRad = degToRad(LongOrigin);
- eccPrimeSquared = (eccSquared) / (1 - eccSquared);
- N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));
- T = Math.tan(LatRad) * Math.tan(LatRad);
- C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);
- A = Math.cos(LatRad) * (LongRad - LongOriginRad);
- M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));
- var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);
- var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));
- if (Lat < 0.0) {
- UTMNorthing += 10000000.0; //10000000 meter offset for
- // southern hemisphere
- }
- return {
- northing: Math.round(UTMNorthing),
- easting: Math.round(UTMEasting),
- zoneNumber: ZoneNumber,
- zoneLetter: getLetterDesignator(Lat)
- };
- }
- /**
- * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience
- * class where the Zone can be specified as a single string eg."60N" which
- * is then broken down into the ZoneNumber and ZoneLetter.
- *
- * @private
- * @param {object} utm An object literal with northing, easting, zoneNumber
- * and zoneLetter properties. If an optional accuracy property is
- * provided (in meters), a bounding box will be returned instead of
- * latitude and longitude.
- * @return {object} An object literal containing either lat and lon values
- * (if no accuracy was provided), or top, right, bottom and left values
- * for the bounding box calculated according to the provided accuracy.
- * Returns null if the conversion failed.
- */
- function UTMtoLL(utm) {
- var UTMNorthing = utm.northing;
- var UTMEasting = utm.easting;
- var zoneLetter = utm.zoneLetter;
- var zoneNumber = utm.zoneNumber;
- // check the ZoneNummber is valid
- if (zoneNumber < 0 || zoneNumber > 60) {
- return null;
- }
- var k0 = 0.9996;
- var a = 6378137.0; //ellip.radius;
- var eccSquared = 0.00669438; //ellip.eccsq;
- var eccPrimeSquared;
- var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));
- var N1, T1, C1, R1, D, M;
- var LongOrigin;
- var mu, phi1Rad;
- // remove 500,000 meter offset for longitude
- var x = UTMEasting - 500000.0;
- var y = UTMNorthing;
- // We must know somehow if we are in the Northern or Southern
- // hemisphere, this is the only time we use the letter So even
- // if the Zone letter isn't exactly correct it should indicate
- // the hemisphere correctly
- if (zoneLetter < 'N') {
- y -= 10000000.0; // remove 10,000,000 meter offset used
- // for southern hemisphere
- }
- // There are 60 zones with zone 1 being at West -180 to -174
- LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin
- // in middle of
- // zone
- eccPrimeSquared = (eccSquared) / (1 - eccSquared);
- M = y / k0;
- mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));
- phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);
- // double phi1 = ProjMath.radToDeg(phi1Rad);
- N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));
- T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);
- C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);
- R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);
- D = x / (N1 * k0);
- var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);
- lat = radToDeg(lat);
- var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);
- lon = LongOrigin + radToDeg(lon);
- var result;
- if (utm.accuracy) {
- var topRight = UTMtoLL({
- northing: utm.northing + utm.accuracy,
- easting: utm.easting + utm.accuracy,
- zoneLetter: utm.zoneLetter,
- zoneNumber: utm.zoneNumber
- });
- result = {
- top: topRight.lat,
- right: topRight.lon,
- bottom: lat,
- left: lon
- };
- }
- else {
- result = {
- lat: lat,
- lon: lon
- };
- }
- return result;
- }
- /**
- * Calculates the MGRS letter designator for the given latitude.
- *
- * @private
- * @param {number} lat The latitude in WGS84 to get the letter designator
- * for.
- * @return {char} The letter designator.
- */
- function getLetterDesignator(lat) {
- //This is here as an error flag to show that the Latitude is
- //outside MGRS limits
- var LetterDesignator = 'Z';
- if ((84 >= lat) && (lat >= 72)) {
- LetterDesignator = 'X';
- }
- else if ((72 > lat) && (lat >= 64)) {
- LetterDesignator = 'W';
- }
- else if ((64 > lat) && (lat >= 56)) {
- LetterDesignator = 'V';
- }
- else if ((56 > lat) && (lat >= 48)) {
- LetterDesignator = 'U';
- }
- else if ((48 > lat) && (lat >= 40)) {
- LetterDesignator = 'T';
- }
- else if ((40 > lat) && (lat >= 32)) {
- LetterDesignator = 'S';
- }
- else if ((32 > lat) && (lat >= 24)) {
- LetterDesignator = 'R';
- }
- else if ((24 > lat) && (lat >= 16)) {
- LetterDesignator = 'Q';
- }
- else if ((16 > lat) && (lat >= 8)) {
- LetterDesignator = 'P';
- }
- else if ((8 > lat) && (lat >= 0)) {
- LetterDesignator = 'N';
- }
- else if ((0 > lat) && (lat >= -8)) {
- LetterDesignator = 'M';
- }
- else if ((-8 > lat) && (lat >= -16)) {
- LetterDesignator = 'L';
- }
- else if ((-16 > lat) && (lat >= -24)) {
- LetterDesignator = 'K';
- }
- else if ((-24 > lat) && (lat >= -32)) {
- LetterDesignator = 'J';
- }
- else if ((-32 > lat) && (lat >= -40)) {
- LetterDesignator = 'H';
- }
- else if ((-40 > lat) && (lat >= -48)) {
- LetterDesignator = 'G';
- }
- else if ((-48 > lat) && (lat >= -56)) {
- LetterDesignator = 'F';
- }
- else if ((-56 > lat) && (lat >= -64)) {
- LetterDesignator = 'E';
- }
- else if ((-64 > lat) && (lat >= -72)) {
- LetterDesignator = 'D';
- }
- else if ((-72 > lat) && (lat >= -80)) {
- LetterDesignator = 'C';
- }
- return LetterDesignator;
- }
- /**
- * Encodes a UTM location as MGRS string.
- *
- * @private
- * @param {object} utm An object literal with easting, northing,
- * zoneLetter, zoneNumber
- * @param {number} accuracy Accuracy in digits (1-5).
- * @return {string} MGRS string for the given UTM location.
- */
- function encode(utm, accuracy) {
- // prepend with leading zeroes
- var seasting = "00000" + utm.easting,
- snorthing = "00000" + utm.northing;
- return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);
- }
- /**
- * Get the two letter 100k designator for a given UTM easting,
- * northing and zone number value.
- *
- * @private
- * @param {number} easting
- * @param {number} northing
- * @param {number} zoneNumber
- * @return the two letter 100k designator for the given UTM location.
- */
- function get100kID(easting, northing, zoneNumber) {
- var setParm = get100kSetForZone(zoneNumber);
- var setColumn = Math.floor(easting / 100000);
- var setRow = Math.floor(northing / 100000) % 20;
- return getLetter100kID(setColumn, setRow, setParm);
- }
- /**
- * Given a UTM zone number, figure out the MGRS 100K set it is in.
- *
- * @private
- * @param {number} i An UTM zone number.
- * @return {number} the 100k set the UTM zone is in.
- */
- function get100kSetForZone(i) {
- var setParm = i % NUM_100K_SETS;
- if (setParm === 0) {
- setParm = NUM_100K_SETS;
- }
- return setParm;
- }
- /**
- * Get the two-letter MGRS 100k designator given information
- * translated from the UTM northing, easting and zone number.
- *
- * @private
- * @param {number} column the column index as it relates to the MGRS
- * 100k set spreadsheet, created from the UTM easting.
- * Values are 1-8.
- * @param {number} row the row index as it relates to the MGRS 100k set
- * spreadsheet, created from the UTM northing value. Values
- * are from 0-19.
- * @param {number} parm the set block, as it relates to the MGRS 100k set
- * spreadsheet, created from the UTM zone. Values are from
- * 1-60.
- * @return two letter MGRS 100k code.
- */
- function getLetter100kID(column, row, parm) {
- // colOrigin and rowOrigin are the letters at the origin of the set
- var index = parm - 1;
- var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);
- var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);
- // colInt and rowInt are the letters to build to return
- var colInt = colOrigin + column - 1;
- var rowInt = rowOrigin + row;
- var rollover = false;
- if (colInt > Z) {
- colInt = colInt - Z + A - 1;
- rollover = true;
- }
- if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {
- colInt++;
- }
- if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {
- colInt++;
- if (colInt === I) {
- colInt++;
- }
- }
- if (colInt > Z) {
- colInt = colInt - Z + A - 1;
- }
- if (rowInt > V) {
- rowInt = rowInt - V + A - 1;
- rollover = true;
- }
- else {
- rollover = false;
- }
- if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {
- rowInt++;
- }
- if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {
- rowInt++;
- if (rowInt === I) {
- rowInt++;
- }
- }
- if (rowInt > V) {
- rowInt = rowInt - V + A - 1;
- }
- var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);
- return twoLetter;
- }
- /**
- * Decode the UTM parameters from a MGRS string.
- *
- * @private
- * @param {string} mgrsString an UPPERCASE coordinate string is expected.
- * @return {object} An object literal with easting, northing, zoneLetter,
- * zoneNumber and accuracy (in meters) properties.
- */
- function decode(mgrsString) {
- if (mgrsString && mgrsString.length === 0) {
- throw ("MGRSPoint coverting from nothing");
- }
- var length = mgrsString.length;
- var hunK = null;
- var sb = "";
- var testChar;
- var i = 0;
- // get Zone number
- while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {
- if (i >= 2) {
- throw ("MGRSPoint bad conversion from: " + mgrsString);
- }
- sb += testChar;
- i++;
- }
- var zoneNumber = parseInt(sb, 10);
- if (i === 0 || i + 3 > length) {
- // A good MGRS string has to be 4-5 digits long,
- // ##AAA/#AAA at least.
- throw ("MGRSPoint bad conversion from: " + mgrsString);
- }
- var zoneLetter = mgrsString.charAt(i++);
- // Should we check the zone letter here? Why not.
- if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {
- throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString);
- }
- hunK = mgrsString.substring(i, i += 2);
- var set = get100kSetForZone(zoneNumber);
- var east100k = getEastingFromChar(hunK.charAt(0), set);
- var north100k = getNorthingFromChar(hunK.charAt(1), set);
- // We have a bug where the northing may be 2000000 too low.
- // How
- // do we know when to roll over?
- while (north100k < getMinNorthing(zoneLetter)) {
- north100k += 2000000;
- }
- // calculate the char index for easting/northing separator
- var remainder = length - i;
- if (remainder % 2 !== 0) {
- throw ("MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters" + mgrsString);
- }
- var sep = remainder / 2;
- var sepEasting = 0.0;
- var sepNorthing = 0.0;
- var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;
- if (sep > 0) {
- accuracyBonus = 100000.0 / Math.pow(10, sep);
- sepEastingString = mgrsString.substring(i, i + sep);
- sepEasting = parseFloat(sepEastingString) * accuracyBonus;
- sepNorthingString = mgrsString.substring(i + sep);
- sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;
- }
- easting = sepEasting + east100k;
- northing = sepNorthing + north100k;
- return {
- easting: easting,
- northing: northing,
- zoneLetter: zoneLetter,
- zoneNumber: zoneNumber,
- accuracy: accuracyBonus
- };
- }
- /**
- * Given the first letter from a two-letter MGRS 100k zone, and given the
- * MGRS table set for the zone number, figure out the easting value that
- * should be added to the other, secondary easting value.
- *
- * @private
- * @param {char} e The first letter from a two-letter MGRS 100´k zone.
- * @param {number} set The MGRS table set for the zone number.
- * @return {number} The easting value for the given letter and set.
- */
- function getEastingFromChar(e, set) {
- // colOrigin is the letter at the origin of the set for the
- // column
- var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);
- var eastingValue = 100000.0;
- var rewindMarker = false;
- while (curCol !== e.charCodeAt(0)) {
- curCol++;
- if (curCol === I) {
- curCol++;
- }
- if (curCol === O) {
- curCol++;
- }
- if (curCol > Z) {
- if (rewindMarker) {
- throw ("Bad character: " + e);
- }
- curCol = A;
- rewindMarker = true;
- }
- eastingValue += 100000.0;
- }
- return eastingValue;
- }
- /**
- * Given the second letter from a two-letter MGRS 100k zone, and given the
- * MGRS table set for the zone number, figure out the northing value that
- * should be added to the other, secondary northing value. You have to
- * remember that Northings are determined from the equator, and the vertical
- * cycle of letters mean a 2000000 additional northing meters. This happens
- * approx. every 18 degrees of latitude. This method does *NOT* count any
- * additional northings. You have to figure out how many 2000000 meters need
- * to be added for the zone letter of the MGRS coordinate.
- *
- * @private
- * @param {char} n Second letter of the MGRS 100k zone
- * @param {number} set The MGRS table set number, which is dependent on the
- * UTM zone number.
- * @return {number} The northing value for the given letter and set.
- */
- function getNorthingFromChar(n, set) {
- if (n > 'V') {
- throw ("MGRSPoint given invalid Northing " + n);
- }
- // rowOrigin is the letter at the origin of the set for the
- // column
- var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);
- var northingValue = 0.0;
- var rewindMarker = false;
- while (curRow !== n.charCodeAt(0)) {
- curRow++;
- if (curRow === I) {
- curRow++;
- }
- if (curRow === O) {
- curRow++;
- }
- // fixing a bug making whole application hang in this loop
- // when 'n' is a wrong character
- if (curRow > V) {
- if (rewindMarker) { // making sure that this loop ends
- throw ("Bad character: " + n);
- }
- curRow = A;
- rewindMarker = true;
- }
- northingValue += 100000.0;
- }
- return northingValue;
- }
- /**
- * The function getMinNorthing returns the minimum northing value of a MGRS
- * zone.
- *
- * Ported from Geotrans' c Lattitude_Band_Value structure table.
- *
- * @private
- * @param {char} zoneLetter The MGRS zone to get the min northing for.
- * @return {number}
- */
- function getMinNorthing(zoneLetter) {
- var northing;
- switch (zoneLetter) {
- case 'C':
- northing = 1100000.0;
- break;
- case 'D':
- northing = 2000000.0;
- break;
- case 'E':
- northing = 2800000.0;
- break;
- case 'F':
- northing = 3700000.0;
- break;
- case 'G':
- northing = 4600000.0;
- break;
- case 'H':
- northing = 5500000.0;
- break;
- case 'J':
- northing = 6400000.0;
- break;
- case 'K':
- northing = 7300000.0;
- break;
- case 'L':
- northing = 8200000.0;
- break;
- case 'M':
- northing = 9100000.0;
- break;
- case 'N':
- northing = 0.0;
- break;
- case 'P':
- northing = 800000.0;
- break;
- case 'Q':
- northing = 1700000.0;
- break;
- case 'R':
- northing = 2600000.0;
- break;
- case 'S':
- northing = 3500000.0;
- break;
- case 'T':
- northing = 4400000.0;
- break;
- case 'U':
- northing = 5300000.0;
- break;
- case 'V':
- northing = 6200000.0;
- break;
- case 'W':
- northing = 7000000.0;
- break;
- case 'X':
- northing = 7900000.0;
- break;
- default:
- northing = -1.0;
- }
- if (northing >= 0.0) {
- return northing;
- }
- else {
- throw ("Invalid zone letter: " + zoneLetter);
- }
- }
- function Point(x, y, z) {
- if (!(this instanceof Point)) {
- return new Point(x, y, z);
- }
- if (Array.isArray(x)) {
- this.x = x[0];
- this.y = x[1];
- this.z = x[2] || 0.0;
- } else if(typeof x === 'object') {
- this.x = x.x;
- this.y = x.y;
- this.z = x.z || 0.0;
- } else if (typeof x === 'string' && typeof y === 'undefined') {
- var coords = x.split(',');
- this.x = parseFloat(coords[0], 10);
- this.y = parseFloat(coords[1], 10);
- this.z = parseFloat(coords[2], 10) || 0.0;
- } else {
- this.x = x;
- this.y = y;
- this.z = z || 0.0;
- }
- console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');
- }
- Point.fromMGRS = function(mgrsStr) {
- return new Point(toPoint$1(mgrsStr));
- };
- Point.prototype.toMGRS = function(accuracy) {
- return forward$1([this.x, this.y], accuracy);
- };
- var version = "2.5.0";
- var C00 = 1;
- var C02 = 0.25;
- var C04 = 0.046875;
- var C06 = 0.01953125;
- var C08 = 0.01068115234375;
- var C22 = 0.75;
- var C44 = 0.46875;
- var C46 = 0.01302083333333333333;
- var C48 = 0.00712076822916666666;
- var C66 = 0.36458333333333333333;
- var C68 = 0.00569661458333333333;
- var C88 = 0.3076171875;
- var pj_enfn = function(es) {
- var en = [];
- en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));
- en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));
- var t = es * es;
- en[2] = t * (C44 - es * (C46 + es * C48));
- t *= es;
- en[3] = t * (C66 - es * C68);
- en[4] = t * es * C88;
- return en;
- };
- var pj_mlfn = function(phi, sphi, cphi, en) {
- cphi *= sphi;
- sphi *= sphi;
- return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));
- };
- var MAX_ITER = 20;
- var pj_inv_mlfn = function(arg, es, en) {
- var k = 1 / (1 - es);
- var phi = arg;
- for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */
- var s = Math.sin(phi);
- var t = 1 - es * s * s;
- //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;
- //phi -= t * (t * Math.sqrt(t)) * k;
- t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;
- phi -= t;
- if (Math.abs(t) < EPSLN) {
- return phi;
- }
- }
- //..reportError("cass:pj_inv_mlfn: Convergence error");
- return phi;
- };
- // Heavily based on this tmerc projection implementation
- // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js
- function init$2() {
- this.x0 = this.x0 !== undefined ? this.x0 : 0;
- this.y0 = this.y0 !== undefined ? this.y0 : 0;
- this.long0 = this.long0 !== undefined ? this.long0 : 0;
- this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
- if (this.es) {
- this.en = pj_enfn(this.es);
- this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);
- }
- }
- /**
- Transverse Mercator Forward - long/lat to x/y
- long/lat in radians
- */
- function forward$2(p) {
- var lon = p.x;
- var lat = p.y;
- var delta_lon = adjust_lon(lon - this.long0);
- var con;
- var x, y;
- var sin_phi = Math.sin(lat);
- var cos_phi = Math.cos(lat);
- if (!this.es) {
- var b = cos_phi * Math.sin(delta_lon);
- if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {
- return (93);
- }
- else {
- x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;
- y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));
- b = Math.abs(y);
- if (b >= 1) {
- if ((b - 1) > EPSLN) {
- return (93);
- }
- else {
- y = 0;
- }
- }
- else {
- y = Math.acos(y);
- }
- if (lat < 0) {
- y = -y;
- }
- y = this.a * this.k0 * (y - this.lat0) + this.y0;
- }
- }
- else {
- var al = cos_phi * delta_lon;
- var als = Math.pow(al, 2);
- var c = this.ep2 * Math.pow(cos_phi, 2);
- var cs = Math.pow(c, 2);
- var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;
- var t = Math.pow(tq, 2);
- var ts = Math.pow(t, 2);
- con = 1 - this.es * Math.pow(sin_phi, 2);
- al = al / Math.sqrt(con);
- var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);
- x = this.a * (this.k0 * al * (1 +
- als / 6 * (1 - t + c +
- als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +
- als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +
- this.x0;
- y = this.a * (this.k0 * (ml - this.ml0 +
- sin_phi * delta_lon * al / 2 * (1 +
- als / 12 * (5 - t + 9 * c + 4 * cs +
- als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +
- als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +
- this.y0;
- }
- p.x = x;
- p.y = y;
- return p;
- }
- /**
- Transverse Mercator Inverse - x/y to long/lat
- */
- function inverse$2(p) {
- var con, phi;
- var lat, lon;
- var x = (p.x - this.x0) * (1 / this.a);
- var y = (p.y - this.y0) * (1 / this.a);
- if (!this.es) {
- var f = Math.exp(x / this.k0);
- var g = 0.5 * (f - 1 / f);
- var temp = this.lat0 + y / this.k0;
- var h = Math.cos(temp);
- con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));
- lat = Math.asin(con);
- if (y < 0) {
- lat = -lat;
- }
- if ((g === 0) && (h === 0)) {
- lon = 0;
- }
- else {
- lon = adjust_lon(Math.atan2(g, h) + this.long0);
- }
- }
- else { // ellipsoidal form
- con = this.ml0 + y / this.k0;
- phi = pj_inv_mlfn(con, this.es, this.en);
- if (Math.abs(phi) < HALF_PI) {
- var sin_phi = Math.sin(phi);
- var cos_phi = Math.cos(phi);
- var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;
- var c = this.ep2 * Math.pow(cos_phi, 2);
- var cs = Math.pow(c, 2);
- var t = Math.pow(tan_phi, 2);
- var ts = Math.pow(t, 2);
- con = 1 - this.es * Math.pow(sin_phi, 2);
- var d = x * Math.sqrt(con) / this.k0;
- var ds = Math.pow(d, 2);
- con = con * tan_phi;
- lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -
- ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -
- ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -
- ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));
- lon = adjust_lon(this.long0 + (d * (1 -
- ds / 6 * (1 + 2 * t + c -
- ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -
- ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));
- }
- else {
- lat = HALF_PI * sign(y);
- lon = 0;
- }
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$3 = ["Transverse_Mercator", "Transverse Mercator", "tmerc"];
- var tmerc = {
- init: init$2,
- forward: forward$2,
- inverse: inverse$2,
- names: names$3
- };
- var sinh = function(x) {
- var r = Math.exp(x);
- r = (r - 1 / r) / 2;
- return r;
- };
- var hypot = function(x, y) {
- x = Math.abs(x);
- y = Math.abs(y);
- var a = Math.max(x, y);
- var b = Math.min(x, y) / (a ? a : 1);
- return a * Math.sqrt(1 + Math.pow(b, 2));
- };
- var log1py = function(x) {
- var y = 1 + x;
- var z = y - 1;
- return z === 0 ? x : x * Math.log(y) / z;
- };
- var asinhy = function(x) {
- var y = Math.abs(x);
- y = log1py(y * (1 + y / (hypot(1, y) + 1)));
- return x < 0 ? -y : y;
- };
- var gatg = function(pp, B) {
- var cos_2B = 2 * Math.cos(2 * B);
- var i = pp.length - 1;
- var h1 = pp[i];
- var h2 = 0;
- var h;
- while (--i >= 0) {
- h = -h2 + cos_2B * h1 + pp[i];
- h2 = h1;
- h1 = h;
- }
- return (B + h * Math.sin(2 * B));
- };
- var clens = function(pp, arg_r) {
- var r = 2 * Math.cos(arg_r);
- var i = pp.length - 1;
- var hr1 = pp[i];
- var hr2 = 0;
- var hr;
- while (--i >= 0) {
- hr = -hr2 + r * hr1 + pp[i];
- hr2 = hr1;
- hr1 = hr;
- }
- return Math.sin(arg_r) * hr;
- };
- var cosh = function(x) {
- var r = Math.exp(x);
- r = (r + 1 / r) / 2;
- return r;
- };
- var clens_cmplx = function(pp, arg_r, arg_i) {
- var sin_arg_r = Math.sin(arg_r);
- var cos_arg_r = Math.cos(arg_r);
- var sinh_arg_i = sinh(arg_i);
- var cosh_arg_i = cosh(arg_i);
- var r = 2 * cos_arg_r * cosh_arg_i;
- var i = -2 * sin_arg_r * sinh_arg_i;
- var j = pp.length - 1;
- var hr = pp[j];
- var hi1 = 0;
- var hr1 = 0;
- var hi = 0;
- var hr2;
- var hi2;
- while (--j >= 0) {
- hr2 = hr1;
- hi2 = hi1;
- hr1 = hr;
- hi1 = hi;
- hr = -hr2 + r * hr1 - i * hi1 + pp[j];
- hi = -hi2 + i * hr1 + r * hi1;
- }
- r = sin_arg_r * cosh_arg_i;
- i = cos_arg_r * sinh_arg_i;
- return [r * hr - i * hi, r * hi + i * hr];
- };
- // Heavily based on this etmerc projection implementation
- // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js
- function init$3() {
- if (this.es === undefined || this.es <= 0) {
- throw new Error('incorrect elliptical usage');
- }
- this.x0 = this.x0 !== undefined ? this.x0 : 0;
- this.y0 = this.y0 !== undefined ? this.y0 : 0;
- this.long0 = this.long0 !== undefined ? this.long0 : 0;
- this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
- this.cgb = [];
- this.cbg = [];
- this.utg = [];
- this.gtu = [];
- var f = this.es / (1 + Math.sqrt(1 - this.es));
- var n = f / (2 - f);
- var np = n;
- this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));
- this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));
- np = np * n;
- this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));
- this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));
- np = np * n;
- this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));
- this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));
- np = np * n;
- this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));
- this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));
- np = np * n;
- this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));
- this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));
- np = np * n;
- this.cgb[5] = np * (601676 / 22275);
- this.cbg[5] = np * (444337 / 155925);
- np = Math.pow(n, 2);
- this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));
- this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));
- this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));
- this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));
- this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));
- np = np * n;
- this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));
- this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));
- np = np * n;
- this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));
- this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));
- np = np * n;
- this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));
- this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));
- np = np * n;
- this.utg[5] = np * (-20648693 / 638668800);
- this.gtu[5] = np * (212378941 / 319334400);
- var Z = gatg(this.cbg, this.lat0);
- this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));
- }
- function forward$3(p) {
- var Ce = adjust_lon(p.x - this.long0);
- var Cn = p.y;
- Cn = gatg(this.cbg, Cn);
- var sin_Cn = Math.sin(Cn);
- var cos_Cn = Math.cos(Cn);
- var sin_Ce = Math.sin(Ce);
- var cos_Ce = Math.cos(Ce);
- Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);
- Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));
- Ce = asinhy(Math.tan(Ce));
- var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);
- Cn = Cn + tmp[0];
- Ce = Ce + tmp[1];
- var x;
- var y;
- if (Math.abs(Ce) <= 2.623395162778) {
- x = this.a * (this.Qn * Ce) + this.x0;
- y = this.a * (this.Qn * Cn + this.Zb) + this.y0;
- }
- else {
- x = Infinity;
- y = Infinity;
- }
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$3(p) {
- var Ce = (p.x - this.x0) * (1 / this.a);
- var Cn = (p.y - this.y0) * (1 / this.a);
- Cn = (Cn - this.Zb) / this.Qn;
- Ce = Ce / this.Qn;
- var lon;
- var lat;
- if (Math.abs(Ce) <= 2.623395162778) {
- var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);
- Cn = Cn + tmp[0];
- Ce = Ce + tmp[1];
- Ce = Math.atan(sinh(Ce));
- var sin_Cn = Math.sin(Cn);
- var cos_Cn = Math.cos(Cn);
- var sin_Ce = Math.sin(Ce);
- var cos_Ce = Math.cos(Ce);
- Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));
- Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);
- lon = adjust_lon(Ce + this.long0);
- lat = gatg(this.cgb, Cn);
- }
- else {
- lon = Infinity;
- lat = Infinity;
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$4 = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc"];
- var etmerc = {
- init: init$3,
- forward: forward$3,
- inverse: inverse$3,
- names: names$4
- };
- var adjust_zone = function(zone, lon) {
- if (zone === undefined) {
- zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;
- if (zone < 0) {
- return 0;
- } else if (zone > 60) {
- return 60;
- }
- }
- return zone;
- };
- var dependsOn = 'etmerc';
- function init$4() {
- var zone = adjust_zone(this.zone, this.long0);
- if (zone === undefined) {
- throw new Error('unknown utm zone');
- }
- this.lat0 = 0;
- this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;
- this.x0 = 500000;
- this.y0 = this.utmSouth ? 10000000 : 0;
- this.k0 = 0.9996;
- etmerc.init.apply(this);
- this.forward = etmerc.forward;
- this.inverse = etmerc.inverse;
- }
- var names$5 = ["Universal Transverse Mercator System", "utm"];
- var utm = {
- init: init$4,
- names: names$5,
- dependsOn: dependsOn
- };
- var srat = function(esinp, exp) {
- return (Math.pow((1 - esinp) / (1 + esinp), exp));
- };
- var MAX_ITER$1 = 20;
- function init$6() {
- var sphi = Math.sin(this.lat0);
- var cphi = Math.cos(this.lat0);
- cphi *= cphi;
- this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);
- this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));
- this.phic0 = Math.asin(sphi / this.C);
- this.ratexp = 0.5 * this.C * this.e;
- this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));
- }
- function forward$5(p) {
- var lon = p.x;
- var lat = p.y;
- p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;
- p.x = this.C * lon;
- return p;
- }
- function inverse$5(p) {
- var DEL_TOL = 1e-14;
- var lon = p.x / this.C;
- var lat = p.y;
- var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);
- for (var i = MAX_ITER$1; i > 0; --i) {
- lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;
- if (Math.abs(lat - p.y) < DEL_TOL) {
- break;
- }
- p.y = lat;
- }
- /* convergence failed */
- if (!i) {
- return null;
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$7 = ["gauss"];
- var gauss = {
- init: init$6,
- forward: forward$5,
- inverse: inverse$5,
- names: names$7
- };
- function init$5() {
- gauss.init.apply(this);
- if (!this.rc) {
- return;
- }
- this.sinc0 = Math.sin(this.phic0);
- this.cosc0 = Math.cos(this.phic0);
- this.R2 = 2 * this.rc;
- if (!this.title) {
- this.title = "Oblique Stereographic Alternative";
- }
- }
- function forward$4(p) {
- var sinc, cosc, cosl, k;
- p.x = adjust_lon(p.x - this.long0);
- gauss.forward.apply(this, [p]);
- sinc = Math.sin(p.y);
- cosc = Math.cos(p.y);
- cosl = Math.cos(p.x);
- k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);
- p.x = k * cosc * Math.sin(p.x);
- p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);
- p.x = this.a * p.x + this.x0;
- p.y = this.a * p.y + this.y0;
- return p;
- }
- function inverse$4(p) {
- var sinc, cosc, lon, lat, rho;
- p.x = (p.x - this.x0) / this.a;
- p.y = (p.y - this.y0) / this.a;
- p.x /= this.k0;
- p.y /= this.k0;
- if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {
- var c = 2 * Math.atan2(rho, this.R2);
- sinc = Math.sin(c);
- cosc = Math.cos(c);
- lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);
- lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);
- }
- else {
- lat = this.phic0;
- lon = 0;
- }
- p.x = lon;
- p.y = lat;
- gauss.inverse.apply(this, [p]);
- p.x = adjust_lon(p.x + this.long0);
- return p;
- }
- var names$6 = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereographic", "sterea","Oblique Stereographic Alternative","Double_Stereographic"];
- var sterea = {
- init: init$5,
- forward: forward$4,
- inverse: inverse$4,
- names: names$6
- };
- function ssfn_(phit, sinphi, eccen) {
- sinphi *= eccen;
- return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));
- }
- function init$7() {
- this.coslat0 = Math.cos(this.lat0);
- this.sinlat0 = Math.sin(this.lat0);
- if (this.sphere) {
- if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {
- this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));
- }
- }
- else {
- if (Math.abs(this.coslat0) <= EPSLN) {
- if (this.lat0 > 0) {
- //North pole
- //trace('stere:north pole');
- this.con = 1;
- }
- else {
- //South pole
- //trace('stere:south pole');
- this.con = -1;
- }
- }
- this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));
- if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {
- this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));
- }
- this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);
- this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;
- this.cosX0 = Math.cos(this.X0);
- this.sinX0 = Math.sin(this.X0);
- }
- }
- // Stereographic forward equations--mapping lat,long to x,y
- function forward$6(p) {
- var lon = p.x;
- var lat = p.y;
- var sinlat = Math.sin(lat);
- var coslat = Math.cos(lat);
- var A, X, sinX, cosX, ts, rh;
- var dlon = adjust_lon(lon - this.long0);
- if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {
- //case of the origine point
- //trace('stere:this is the origin point');
- p.x = NaN;
- p.y = NaN;
- return p;
- }
- if (this.sphere) {
- //trace('stere:sphere case');
- A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));
- p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;
- p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;
- return p;
- }
- else {
- X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;
- cosX = Math.cos(X);
- sinX = Math.sin(X);
- if (Math.abs(this.coslat0) <= EPSLN) {
- ts = tsfnz(this.e, lat * this.con, this.con * sinlat);
- rh = 2 * this.a * this.k0 * ts / this.cons;
- p.x = this.x0 + rh * Math.sin(lon - this.long0);
- p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);
- //trace(p.toString());
- return p;
- }
- else if (Math.abs(this.sinlat0) < EPSLN) {
- //Eq
- //trace('stere:equateur');
- A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));
- p.y = A * sinX;
- }
- else {
- //other case
- //trace('stere:normal case');
- A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));
- p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;
- }
- p.x = A * cosX * Math.sin(dlon) + this.x0;
- }
- //trace(p.toString());
- return p;
- }
- //* Stereographic inverse equations--mapping x,y to lat/long
- function inverse$6(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var lon, lat, ts, ce, Chi;
- var rh = Math.sqrt(p.x * p.x + p.y * p.y);
- if (this.sphere) {
- var c = 2 * Math.atan(rh / (2 * this.a * this.k0));
- lon = this.long0;
- lat = this.lat0;
- if (rh <= EPSLN) {
- p.x = lon;
- p.y = lat;
- return p;
- }
- lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);
- if (Math.abs(this.coslat0) < EPSLN) {
- if (this.lat0 > 0) {
- lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
- }
- else {
- lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
- }
- }
- else {
- lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- else {
- if (Math.abs(this.coslat0) <= EPSLN) {
- if (rh <= EPSLN) {
- lat = this.lat0;
- lon = this.long0;
- p.x = lon;
- p.y = lat;
- //trace(p.toString());
- return p;
- }
- p.x *= this.con;
- p.y *= this.con;
- ts = rh * this.cons / (2 * this.a * this.k0);
- lat = this.con * phi2z(this.e, ts);
- lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));
- }
- else {
- ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));
- lon = this.long0;
- if (rh <= EPSLN) {
- Chi = this.X0;
- }
- else {
- Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);
- lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));
- }
- lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));
- }
- }
- p.x = lon;
- p.y = lat;
- //trace(p.toString());
- return p;
- }
- var names$8 = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)"];
- var stere = {
- init: init$7,
- forward: forward$6,
- inverse: inverse$6,
- names: names$8,
- ssfn_: ssfn_
- };
- /*
- references:
- Formules et constantes pour le Calcul pour la
- projection cylindrique conforme à axe oblique et pour la transformation entre
- des systèmes de référence.
- http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf
- */
- function init$8() {
- var phy0 = this.lat0;
- this.lambda0 = this.long0;
- var sinPhy0 = Math.sin(phy0);
- var semiMajorAxis = this.a;
- var invF = this.rf;
- var flattening = 1 / invF;
- var e2 = 2 * flattening - Math.pow(flattening, 2);
- var e = this.e = Math.sqrt(e2);
- this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));
- this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));
- this.b0 = Math.asin(sinPhy0 / this.alpha);
- var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));
- var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));
- var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));
- this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;
- }
- function forward$7(p) {
- var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));
- var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));
- var S = -this.alpha * (Sa1 + Sa2) + this.K;
- // spheric latitude
- var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);
- // spheric longitude
- var I = this.alpha * (p.x - this.lambda0);
- // psoeudo equatorial rotation
- var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));
- var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));
- p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;
- p.x = this.R * rotI + this.x0;
- return p;
- }
- function inverse$7(p) {
- var Y = p.x - this.x0;
- var X = p.y - this.y0;
- var rotI = Y / this.R;
- var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);
- var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));
- var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));
- var lambda = this.lambda0 + I / this.alpha;
- var S = 0;
- var phy = b;
- var prevPhy = -1000;
- var iteration = 0;
- while (Math.abs(phy - prevPhy) > 0.0000001) {
- if (++iteration > 20) {
- //...reportError("omercFwdInfinity");
- return;
- }
- //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));
- S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));
- prevPhy = phy;
- phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;
- }
- p.x = lambda;
- p.y = phy;
- return p;
- }
- var names$9 = ["somerc"];
- var somerc = {
- init: init$8,
- forward: forward$7,
- inverse: inverse$7,
- names: names$9
- };
- /* Initialize the Oblique Mercator projection
- ------------------------------------------*/
- function init$9() {
- this.no_off = this.no_off || false;
- this.no_rot = this.no_rot || false;
- if (isNaN(this.k0)) {
- this.k0 = 1;
- }
- var sinlat = Math.sin(this.lat0);
- var coslat = Math.cos(this.lat0);
- var con = this.e * sinlat;
- this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));
- this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);
- var t0 = tsfnz(this.e, this.lat0, sinlat);
- var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));
- if (dl * dl < 1) {
- dl = 1;
- }
- var fl;
- var gl;
- if (!isNaN(this.longc)) {
- //Central point and azimuth method
- if (this.lat0 >= 0) {
- fl = dl + Math.sqrt(dl * dl - 1);
- }
- else {
- fl = dl - Math.sqrt(dl * dl - 1);
- }
- this.el = fl * Math.pow(t0, this.bl);
- gl = 0.5 * (fl - 1 / fl);
- this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);
- this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;
- }
- else {
- //2 points method
- var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));
- var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));
- if (this.lat0 >= 0) {
- this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);
- }
- else {
- this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);
- }
- var hl = Math.pow(t1, this.bl);
- var ll = Math.pow(t2, this.bl);
- fl = this.el / hl;
- gl = 0.5 * (fl - 1 / fl);
- var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);
- var pl = (ll - hl) / (ll + hl);
- var dlon12 = adjust_lon(this.long1 - this.long2);
- this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;
- this.long0 = adjust_lon(this.long0);
- var dlon10 = adjust_lon(this.long1 - this.long0);
- this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);
- this.alpha = Math.asin(dl * Math.sin(this.gamma0));
- }
- if (this.no_off) {
- this.uc = 0;
- }
- else {
- if (this.lat0 >= 0) {
- this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));
- }
- else {
- this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));
- }
- }
- }
- /* Oblique Mercator forward equations--mapping lat,long to x,y
- ----------------------------------------------------------*/
- function forward$8(p) {
- var lon = p.x;
- var lat = p.y;
- var dlon = adjust_lon(lon - this.long0);
- var us, vs;
- var con;
- if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {
- if (lat > 0) {
- con = -1;
- }
- else {
- con = 1;
- }
- vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));
- us = -1 * con * HALF_PI * this.al / this.bl;
- }
- else {
- var t = tsfnz(this.e, lat, Math.sin(lat));
- var ql = this.el / Math.pow(t, this.bl);
- var sl = 0.5 * (ql - 1 / ql);
- var tl = 0.5 * (ql + 1 / ql);
- var vl = Math.sin(this.bl * (dlon));
- var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;
- if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {
- vs = Number.POSITIVE_INFINITY;
- }
- else {
- vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;
- }
- if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {
- us = this.al * this.bl * (dlon);
- }
- else {
- us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;
- }
- }
- if (this.no_rot) {
- p.x = this.x0 + us;
- p.y = this.y0 + vs;
- }
- else {
- us -= this.uc;
- p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);
- p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);
- }
- return p;
- }
- function inverse$8(p) {
- var us, vs;
- if (this.no_rot) {
- vs = p.y - this.y0;
- us = p.x - this.x0;
- }
- else {
- vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);
- us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);
- us += this.uc;
- }
- var qp = Math.exp(-1 * this.bl * vs / this.al);
- var sp = 0.5 * (qp - 1 / qp);
- var tp = 0.5 * (qp + 1 / qp);
- var vp = Math.sin(this.bl * us / this.al);
- var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;
- var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);
- if (Math.abs(up - 1) < EPSLN) {
- p.x = this.long0;
- p.y = HALF_PI;
- }
- else if (Math.abs(up + 1) < EPSLN) {
- p.x = this.long0;
- p.y = -1 * HALF_PI;
- }
- else {
- p.y = phi2z(this.e, ts);
- p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);
- }
- return p;
- }
- var names$10 = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "omerc"];
- var omerc = {
- init: init$9,
- forward: forward$8,
- inverse: inverse$8,
- names: names$10
- };
- function init$10() {
- // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north
- //double c_lat; /* center latitude */
- //double c_lon; /* center longitude */
- //double lat1; /* first standard parallel */
- //double lat2; /* second standard parallel */
- //double r_maj; /* major axis */
- //double r_min; /* minor axis */
- //double false_east; /* x offset in meters */
- //double false_north; /* y offset in meters */
- if (!this.lat2) {
- this.lat2 = this.lat1;
- } //if lat2 is not defined
- if (!this.k0) {
- this.k0 = 1;
- }
- this.x0 = this.x0 || 0;
- this.y0 = this.y0 || 0;
- // Standard Parallels cannot be equal and on opposite sides of the equator
- if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
- return;
- }
- var temp = this.b / this.a;
- this.e = Math.sqrt(1 - temp * temp);
- var sin1 = Math.sin(this.lat1);
- var cos1 = Math.cos(this.lat1);
- var ms1 = msfnz(this.e, sin1, cos1);
- var ts1 = tsfnz(this.e, this.lat1, sin1);
- var sin2 = Math.sin(this.lat2);
- var cos2 = Math.cos(this.lat2);
- var ms2 = msfnz(this.e, sin2, cos2);
- var ts2 = tsfnz(this.e, this.lat2, sin2);
- var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));
- if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
- this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);
- }
- else {
- this.ns = sin1;
- }
- if (isNaN(this.ns)) {
- this.ns = sin1;
- }
- this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));
- this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);
- if (!this.title) {
- this.title = "Lambert Conformal Conic";
- }
- }
- // Lambert Conformal conic forward equations--mapping lat,long to x,y
- // -----------------------------------------------------------------
- function forward$9(p) {
- var lon = p.x;
- var lat = p.y;
- // singular cases :
- if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {
- lat = sign(lat) * (HALF_PI - 2 * EPSLN);
- }
- var con = Math.abs(Math.abs(lat) - HALF_PI);
- var ts, rh1;
- if (con > EPSLN) {
- ts = tsfnz(this.e, lat, Math.sin(lat));
- rh1 = this.a * this.f0 * Math.pow(ts, this.ns);
- }
- else {
- con = lat * this.ns;
- if (con <= 0) {
- return null;
- }
- rh1 = 0;
- }
- var theta = this.ns * adjust_lon(lon - this.long0);
- p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;
- p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;
- return p;
- }
- // Lambert Conformal Conic inverse equations--mapping x,y to lat/long
- // -----------------------------------------------------------------
- function inverse$9(p) {
- var rh1, con, ts;
- var lat, lon;
- var x = (p.x - this.x0) / this.k0;
- var y = (this.rh - (p.y - this.y0) / this.k0);
- if (this.ns > 0) {
- rh1 = Math.sqrt(x * x + y * y);
- con = 1;
- }
- else {
- rh1 = -Math.sqrt(x * x + y * y);
- con = -1;
- }
- var theta = 0;
- if (rh1 !== 0) {
- theta = Math.atan2((con * x), (con * y));
- }
- if ((rh1 !== 0) || (this.ns > 0)) {
- con = 1 / this.ns;
- ts = Math.pow((rh1 / (this.a * this.f0)), con);
- lat = phi2z(this.e, ts);
- if (lat === -9999) {
- return null;
- }
- }
- else {
- lat = -HALF_PI;
- }
- lon = adjust_lon(theta / this.ns + this.long0);
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$11 = ["Lambert Tangential Conformal Conic Projection", "Lambert_Conformal_Conic", "Lambert_Conformal_Conic_2SP", "lcc"];
- var lcc = {
- init: init$10,
- forward: forward$9,
- inverse: inverse$9,
- names: names$11
- };
- function init$11() {
- this.a = 6377397.155;
- this.es = 0.006674372230614;
- this.e = Math.sqrt(this.es);
- if (!this.lat0) {
- this.lat0 = 0.863937979737193;
- }
- if (!this.long0) {
- this.long0 = 0.7417649320975901 - 0.308341501185665;
- }
- /* if scale not set default to 0.9999 */
- if (!this.k0) {
- this.k0 = 0.9999;
- }
- this.s45 = 0.785398163397448; /* 45 */
- this.s90 = 2 * this.s45;
- this.fi0 = this.lat0;
- this.e2 = this.es;
- this.e = Math.sqrt(this.e2);
- this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));
- this.uq = 1.04216856380474;
- this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);
- this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);
- this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;
- this.k1 = this.k0;
- this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));
- this.s0 = 1.37008346281555;
- this.n = Math.sin(this.s0);
- this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);
- this.ad = this.s90 - this.uq;
- }
- /* ellipsoid */
- /* calculate xy from lat/lon */
- /* Constants, identical to inverse transform function */
- function forward$10(p) {
- var gfi, u, deltav, s, d, eps, ro;
- var lon = p.x;
- var lat = p.y;
- var delta_lon = adjust_lon(lon - this.long0);
- /* Transformation */
- gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));
- u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);
- deltav = -delta_lon * this.alfa;
- s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));
- d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));
- eps = this.n * d;
- ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);
- p.y = ro * Math.cos(eps) / 1;
- p.x = ro * Math.sin(eps) / 1;
- if (!this.czech) {
- p.y *= -1;
- p.x *= -1;
- }
- return (p);
- }
- /* calculate lat/lon from xy */
- function inverse$10(p) {
- var u, deltav, s, d, eps, ro, fi1;
- var ok;
- /* Transformation */
- /* revert y, x*/
- var tmp = p.x;
- p.x = p.y;
- p.y = tmp;
- if (!this.czech) {
- p.y *= -1;
- p.x *= -1;
- }
- ro = Math.sqrt(p.x * p.x + p.y * p.y);
- eps = Math.atan2(p.y, p.x);
- d = eps / Math.sin(this.s0);
- s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);
- u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));
- deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));
- p.x = this.long0 - deltav / this.alfa;
- fi1 = u;
- ok = 0;
- var iter = 0;
- do {
- p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);
- if (Math.abs(fi1 - p.y) < 0.0000000001) {
- ok = 1;
- }
- fi1 = p.y;
- iter += 1;
- } while (ok === 0 && iter < 15);
- if (iter >= 15) {
- return null;
- }
- return (p);
- }
- var names$12 = ["Krovak", "krovak"];
- var krovak = {
- init: init$11,
- forward: forward$10,
- inverse: inverse$10,
- names: names$12
- };
- var mlfn = function(e0, e1, e2, e3, phi) {
- return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));
- };
- var e0fn = function(x) {
- return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));
- };
- var e1fn = function(x) {
- return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));
- };
- var e2fn = function(x) {
- return (0.05859375 * x * x * (1 + 0.75 * x));
- };
- var e3fn = function(x) {
- return (x * x * x * (35 / 3072));
- };
- var gN = function(a, e, sinphi) {
- var temp = e * sinphi;
- return a / Math.sqrt(1 - temp * temp);
- };
- var adjust_lat = function(x) {
- return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));
- };
- var imlfn = function(ml, e0, e1, e2, e3) {
- var phi;
- var dphi;
- phi = ml / e0;
- for (var i = 0; i < 15; i++) {
- dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));
- phi += dphi;
- if (Math.abs(dphi) <= 0.0000000001) {
- return phi;
- }
- }
- //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations");
- return NaN;
- };
- function init$12() {
- if (!this.sphere) {
- this.e0 = e0fn(this.es);
- this.e1 = e1fn(this.es);
- this.e2 = e2fn(this.es);
- this.e3 = e3fn(this.es);
- this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
- }
- }
- /* Cassini forward equations--mapping lat,long to x,y
- -----------------------------------------------------------------------*/
- function forward$11(p) {
- /* Forward equations
- -----------------*/
- var x, y;
- var lam = p.x;
- var phi = p.y;
- lam = adjust_lon(lam - this.long0);
- if (this.sphere) {
- x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));
- y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);
- }
- else {
- //ellipsoid
- var sinphi = Math.sin(phi);
- var cosphi = Math.cos(phi);
- var nl = gN(this.a, this.e, sinphi);
- var tl = Math.tan(phi) * Math.tan(phi);
- var al = lam * Math.cos(phi);
- var asq = al * al;
- var cl = this.es * cosphi * cosphi / (1 - this.es);
- var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
- x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));
- y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);
- }
- p.x = x + this.x0;
- p.y = y + this.y0;
- return p;
- }
- /* Inverse equations
- -----------------*/
- function inverse$11(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var x = p.x / this.a;
- var y = p.y / this.a;
- var phi, lam;
- if (this.sphere) {
- var dd = y + this.lat0;
- phi = Math.asin(Math.sin(dd) * Math.cos(x));
- lam = Math.atan2(Math.tan(x), Math.cos(dd));
- }
- else {
- /* ellipsoid */
- var ml1 = this.ml0 / this.a + y;
- var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);
- if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {
- p.x = this.long0;
- p.y = HALF_PI;
- if (y < 0) {
- p.y *= -1;
- }
- return p;
- }
- var nl1 = gN(this.a, this.e, Math.sin(phi1));
- var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);
- var tl1 = Math.pow(Math.tan(phi1), 2);
- var dl = x * this.a / nl1;
- var dsq = dl * dl;
- phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);
- lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);
- }
- p.x = adjust_lon(lam + this.long0);
- p.y = adjust_lat(phi);
- return p;
- }
- var names$13 = ["Cassini", "Cassini_Soldner", "cass"];
- var cass = {
- init: init$12,
- forward: forward$11,
- inverse: inverse$11,
- names: names$13
- };
- var qsfnz = function(eccent, sinphi) {
- var con;
- if (eccent > 1.0e-7) {
- con = eccent * sinphi;
- return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));
- }
- else {
- return (2 * sinphi);
- }
- };
- /*
- reference
- "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
- The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
- */
- var S_POLE = 1;
- var N_POLE = 2;
- var EQUIT = 3;
- var OBLIQ = 4;
- /* Initialize the Lambert Azimuthal Equal Area projection
- ------------------------------------------------------*/
- function init$13() {
- var t = Math.abs(this.lat0);
- if (Math.abs(t - HALF_PI) < EPSLN) {
- this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;
- }
- else if (Math.abs(t) < EPSLN) {
- this.mode = this.EQUIT;
- }
- else {
- this.mode = this.OBLIQ;
- }
- if (this.es > 0) {
- var sinphi;
- this.qp = qsfnz(this.e, 1);
- this.mmf = 0.5 / (1 - this.es);
- this.apa = authset(this.es);
- switch (this.mode) {
- case this.N_POLE:
- this.dd = 1;
- break;
- case this.S_POLE:
- this.dd = 1;
- break;
- case this.EQUIT:
- this.rq = Math.sqrt(0.5 * this.qp);
- this.dd = 1 / this.rq;
- this.xmf = 1;
- this.ymf = 0.5 * this.qp;
- break;
- case this.OBLIQ:
- this.rq = Math.sqrt(0.5 * this.qp);
- sinphi = Math.sin(this.lat0);
- this.sinb1 = qsfnz(this.e, sinphi) / this.qp;
- this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);
- this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);
- this.ymf = (this.xmf = this.rq) / this.dd;
- this.xmf *= this.dd;
- break;
- }
- }
- else {
- if (this.mode === this.OBLIQ) {
- this.sinph0 = Math.sin(this.lat0);
- this.cosph0 = Math.cos(this.lat0);
- }
- }
- }
- /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y
- -----------------------------------------------------------------------*/
- function forward$12(p) {
- /* Forward equations
- -----------------*/
- var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;
- var lam = p.x;
- var phi = p.y;
- lam = adjust_lon(lam - this.long0);
- if (this.sphere) {
- sinphi = Math.sin(phi);
- cosphi = Math.cos(phi);
- coslam = Math.cos(lam);
- if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
- y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;
- if (y <= EPSLN) {
- return null;
- }
- y = Math.sqrt(2 / y);
- x = y * cosphi * Math.sin(lam);
- y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;
- }
- else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
- if (this.mode === this.N_POLE) {
- coslam = -coslam;
- }
- if (Math.abs(phi + this.phi0) < EPSLN) {
- return null;
- }
- y = FORTPI - phi * 0.5;
- y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));
- x = y * Math.sin(lam);
- y *= coslam;
- }
- }
- else {
- sinb = 0;
- cosb = 0;
- b = 0;
- coslam = Math.cos(lam);
- sinlam = Math.sin(lam);
- sinphi = Math.sin(phi);
- q = qsfnz(this.e, sinphi);
- if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
- sinb = q / this.qp;
- cosb = Math.sqrt(1 - sinb * sinb);
- }
- switch (this.mode) {
- case this.OBLIQ:
- b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;
- break;
- case this.EQUIT:
- b = 1 + cosb * coslam;
- break;
- case this.N_POLE:
- b = HALF_PI + phi;
- q = this.qp - q;
- break;
- case this.S_POLE:
- b = phi - HALF_PI;
- q = this.qp + q;
- break;
- }
- if (Math.abs(b) < EPSLN) {
- return null;
- }
- switch (this.mode) {
- case this.OBLIQ:
- case this.EQUIT:
- b = Math.sqrt(2 / b);
- if (this.mode === this.OBLIQ) {
- y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);
- }
- else {
- y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;
- }
- x = this.xmf * b * cosb * sinlam;
- break;
- case this.N_POLE:
- case this.S_POLE:
- if (q >= 0) {
- x = (b = Math.sqrt(q)) * sinlam;
- y = coslam * ((this.mode === this.S_POLE) ? b : -b);
- }
- else {
- x = y = 0;
- }
- break;
- }
- }
- p.x = this.a * x + this.x0;
- p.y = this.a * y + this.y0;
- return p;
- }
- /* Inverse equations
- -----------------*/
- function inverse$12(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var x = p.x / this.a;
- var y = p.y / this.a;
- var lam, phi, cCe, sCe, q, rho, ab;
- if (this.sphere) {
- var cosz = 0,
- rh, sinz = 0;
- rh = Math.sqrt(x * x + y * y);
- phi = rh * 0.5;
- if (phi > 1) {
- return null;
- }
- phi = 2 * Math.asin(phi);
- if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
- sinz = Math.sin(phi);
- cosz = Math.cos(phi);
- }
- switch (this.mode) {
- case this.EQUIT:
- phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);
- x *= sinz;
- y = cosz * rh;
- break;
- case this.OBLIQ:
- phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);
- x *= sinz * this.cosph0;
- y = (cosz - Math.sin(phi) * this.sinph0) * rh;
- break;
- case this.N_POLE:
- y = -y;
- phi = HALF_PI - phi;
- break;
- case this.S_POLE:
- phi -= HALF_PI;
- break;
- }
- lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);
- }
- else {
- ab = 0;
- if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
- x /= this.dd;
- y *= this.dd;
- rho = Math.sqrt(x * x + y * y);
- if (rho < EPSLN) {
- p.x = 0;
- p.y = this.phi0;
- return p;
- }
- sCe = 2 * Math.asin(0.5 * rho / this.rq);
- cCe = Math.cos(sCe);
- x *= (sCe = Math.sin(sCe));
- if (this.mode === this.OBLIQ) {
- ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;
- q = this.qp * ab;
- y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;
- }
- else {
- ab = y * sCe / rho;
- q = this.qp * ab;
- y = rho * cCe;
- }
- }
- else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
- if (this.mode === this.N_POLE) {
- y = -y;
- }
- q = (x * x + y * y);
- if (!q) {
- p.x = 0;
- p.y = this.phi0;
- return p;
- }
- ab = 1 - q / this.qp;
- if (this.mode === this.S_POLE) {
- ab = -ab;
- }
- }
- lam = Math.atan2(x, y);
- phi = authlat(Math.asin(ab), this.apa);
- }
- p.x = adjust_lon(this.long0 + lam);
- p.y = phi;
- return p;
- }
- /* determine latitude from authalic latitude */
- var P00 = 0.33333333333333333333;
- var P01 = 0.17222222222222222222;
- var P02 = 0.10257936507936507936;
- var P10 = 0.06388888888888888888;
- var P11 = 0.06640211640211640211;
- var P20 = 0.01641501294219154443;
- function authset(es) {
- var t;
- var APA = [];
- APA[0] = es * P00;
- t = es * es;
- APA[0] += t * P01;
- APA[1] = t * P10;
- t *= es;
- APA[0] += t * P02;
- APA[1] += t * P11;
- APA[2] = t * P20;
- return APA;
- }
- function authlat(beta, APA) {
- var t = beta + beta;
- return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));
- }
- var names$14 = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"];
- var laea = {
- init: init$13,
- forward: forward$12,
- inverse: inverse$12,
- names: names$14,
- S_POLE: S_POLE,
- N_POLE: N_POLE,
- EQUIT: EQUIT,
- OBLIQ: OBLIQ
- };
- var asinz = function(x) {
- if (Math.abs(x) > 1) {
- x = (x > 1) ? 1 : -1;
- }
- return Math.asin(x);
- };
- function init$14() {
- if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
- return;
- }
- this.temp = this.b / this.a;
- this.es = 1 - Math.pow(this.temp, 2);
- this.e3 = Math.sqrt(this.es);
- this.sin_po = Math.sin(this.lat1);
- this.cos_po = Math.cos(this.lat1);
- this.t1 = this.sin_po;
- this.con = this.sin_po;
- this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);
- this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);
- this.sin_po = Math.sin(this.lat2);
- this.cos_po = Math.cos(this.lat2);
- this.t2 = this.sin_po;
- this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);
- this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);
- this.sin_po = Math.sin(this.lat0);
- this.cos_po = Math.cos(this.lat0);
- this.t3 = this.sin_po;
- this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);
- if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
- this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);
- }
- else {
- this.ns0 = this.con;
- }
- this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;
- this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;
- }
- /* Albers Conical Equal Area forward equations--mapping lat,long to x,y
- -------------------------------------------------------------------*/
- function forward$13(p) {
- var lon = p.x;
- var lat = p.y;
- this.sin_phi = Math.sin(lat);
- this.cos_phi = Math.cos(lat);
- var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);
- var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;
- var theta = this.ns0 * adjust_lon(lon - this.long0);
- var x = rh1 * Math.sin(theta) + this.x0;
- var y = this.rh - rh1 * Math.cos(theta) + this.y0;
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$13(p) {
- var rh1, qs, con, theta, lon, lat;
- p.x -= this.x0;
- p.y = this.rh - p.y + this.y0;
- if (this.ns0 >= 0) {
- rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
- con = 1;
- }
- else {
- rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
- con = -1;
- }
- theta = 0;
- if (rh1 !== 0) {
- theta = Math.atan2(con * p.x, con * p.y);
- }
- con = rh1 * this.ns0 / this.a;
- if (this.sphere) {
- lat = Math.asin((this.c - con * con) / (2 * this.ns0));
- }
- else {
- qs = (this.c - con * con) / this.ns0;
- lat = this.phi1z(this.e3, qs);
- }
- lon = adjust_lon(theta / this.ns0 + this.long0);
- p.x = lon;
- p.y = lat;
- return p;
- }
- /* Function to compute phi1, the latitude for the inverse of the
- Albers Conical Equal-Area projection.
- -------------------------------------------*/
- function phi1z(eccent, qs) {
- var sinphi, cosphi, con, com, dphi;
- var phi = asinz(0.5 * qs);
- if (eccent < EPSLN) {
- return phi;
- }
- var eccnts = eccent * eccent;
- for (var i = 1; i <= 25; i++) {
- sinphi = Math.sin(phi);
- cosphi = Math.cos(phi);
- con = eccent * sinphi;
- com = 1 - con * con;
- dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
- phi = phi + dphi;
- if (Math.abs(dphi) <= 1e-7) {
- return phi;
- }
- }
- return null;
- }
- var names$15 = ["Albers_Conic_Equal_Area", "Albers", "aea"];
- var aea = {
- init: init$14,
- forward: forward$13,
- inverse: inverse$13,
- names: names$15,
- phi1z: phi1z
- };
- /*
- reference:
- Wolfram Mathworld "Gnomonic Projection"
- http://mathworld.wolfram.com/GnomonicProjection.html
- Accessed: 12th November 2009
- */
- function init$15() {
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- this.sin_p14 = Math.sin(this.lat0);
- this.cos_p14 = Math.cos(this.lat0);
- // Approximation for projecting points to the horizon (infinity)
- this.infinity_dist = 1000 * this.a;
- this.rc = 1;
- }
- /* Gnomonic forward equations--mapping lat,long to x,y
- ---------------------------------------------------*/
- function forward$14(p) {
- var sinphi, cosphi; /* sin and cos value */
- var dlon; /* delta longitude value */
- var coslon; /* cos of longitude */
- var ksp; /* scale factor */
- var g;
- var x, y;
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- dlon = adjust_lon(lon - this.long0);
- sinphi = Math.sin(lat);
- cosphi = Math.cos(lat);
- coslon = Math.cos(dlon);
- g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
- ksp = 1;
- if ((g > 0) || (Math.abs(g) <= EPSLN)) {
- x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;
- y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;
- }
- else {
- // Point is in the opposing hemisphere and is unprojectable
- // We still need to return a reasonable point, so we project
- // to infinity, on a bearing
- // equivalent to the northern hemisphere equivalent
- // This is a reasonable approximation for short shapes and lines that
- // straddle the horizon.
- x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);
- y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
- }
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$14(p) {
- var rh; /* Rho */
- var sinc, cosc;
- var c;
- var lon, lat;
- /* Inverse equations
- -----------------*/
- p.x = (p.x - this.x0) / this.a;
- p.y = (p.y - this.y0) / this.a;
- p.x /= this.k0;
- p.y /= this.k0;
- if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {
- c = Math.atan2(rh, this.rc);
- sinc = Math.sin(c);
- cosc = Math.cos(c);
- lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);
- lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);
- lon = adjust_lon(this.long0 + lon);
- }
- else {
- lat = this.phic0;
- lon = 0;
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$16 = ["gnom"];
- var gnom = {
- init: init$15,
- forward: forward$14,
- inverse: inverse$14,
- names: names$16
- };
- var iqsfnz = function(eccent, q) {
- var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));
- if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {
- if (q < 0) {
- return (-1 * HALF_PI);
- }
- else {
- return HALF_PI;
- }
- }
- //var phi = 0.5* q/(1-eccent*eccent);
- var phi = Math.asin(0.5 * q);
- var dphi;
- var sin_phi;
- var cos_phi;
- var con;
- for (var i = 0; i < 30; i++) {
- sin_phi = Math.sin(phi);
- cos_phi = Math.cos(phi);
- con = eccent * sin_phi;
- dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
- phi += dphi;
- if (Math.abs(dphi) <= 0.0000000001) {
- return phi;
- }
- }
- //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations");
- return NaN;
- };
- /*
- reference:
- "Cartographic Projection Procedures for the UNIX Environment-
- A User's Manual" by Gerald I. Evenden,
- USGS Open File Report 90-284and Release 4 Interim Reports (2003)
- */
- function init$16() {
- //no-op
- if (!this.sphere) {
- this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
- }
- }
- /* Cylindrical Equal Area forward equations--mapping lat,long to x,y
- ------------------------------------------------------------*/
- function forward$15(p) {
- var lon = p.x;
- var lat = p.y;
- var x, y;
- /* Forward equations
- -----------------*/
- var dlon = adjust_lon(lon - this.long0);
- if (this.sphere) {
- x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);
- y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);
- }
- else {
- var qs = qsfnz(this.e, Math.sin(lat));
- x = this.x0 + this.a * this.k0 * dlon;
- y = this.y0 + this.a * qs * 0.5 / this.k0;
- }
- p.x = x;
- p.y = y;
- return p;
- }
- /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long
- ------------------------------------------------------------*/
- function inverse$15(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var lon, lat;
- if (this.sphere) {
- lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));
- lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));
- }
- else {
- lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);
- lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$17 = ["cea"];
- var cea = {
- init: init$16,
- forward: forward$15,
- inverse: inverse$15,
- names: names$17
- };
- function init$17() {
- this.x0 = this.x0 || 0;
- this.y0 = this.y0 || 0;
- this.lat0 = this.lat0 || 0;
- this.long0 = this.long0 || 0;
- this.lat_ts = this.lat_ts || 0;
- this.title = this.title || "Equidistant Cylindrical (Plate Carre)";
- this.rc = Math.cos(this.lat_ts);
- }
- // forward equations--mapping lat,long to x,y
- // -----------------------------------------------------------------
- function forward$16(p) {
- var lon = p.x;
- var lat = p.y;
- var dlon = adjust_lon(lon - this.long0);
- var dlat = adjust_lat(lat - this.lat0);
- p.x = this.x0 + (this.a * dlon * this.rc);
- p.y = this.y0 + (this.a * dlat);
- return p;
- }
- // inverse equations--mapping x,y to lat/long
- // -----------------------------------------------------------------
- function inverse$16(p) {
- var x = p.x;
- var y = p.y;
- p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));
- p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));
- return p;
- }
- var names$18 = ["Equirectangular", "Equidistant_Cylindrical", "eqc"];
- var eqc = {
- init: init$17,
- forward: forward$16,
- inverse: inverse$16,
- names: names$18
- };
- var MAX_ITER$2 = 20;
- function init$18() {
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- this.temp = this.b / this.a;
- this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles
- this.e = Math.sqrt(this.es);
- this.e0 = e0fn(this.es);
- this.e1 = e1fn(this.es);
- this.e2 = e2fn(this.es);
- this.e3 = e3fn(this.es);
- this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas
- }
- /* Polyconic forward equations--mapping lat,long to x,y
- ---------------------------------------------------*/
- function forward$17(p) {
- var lon = p.x;
- var lat = p.y;
- var x, y, el;
- var dlon = adjust_lon(lon - this.long0);
- el = dlon * Math.sin(lat);
- if (this.sphere) {
- if (Math.abs(lat) <= EPSLN) {
- x = this.a * dlon;
- y = -1 * this.a * this.lat0;
- }
- else {
- x = this.a * Math.sin(el) / Math.tan(lat);
- y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));
- }
- }
- else {
- if (Math.abs(lat) <= EPSLN) {
- x = this.a * dlon;
- y = -1 * this.ml0;
- }
- else {
- var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);
- x = nl * Math.sin(el);
- y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));
- }
- }
- p.x = x + this.x0;
- p.y = y + this.y0;
- return p;
- }
- /* Inverse equations
- -----------------*/
- function inverse$17(p) {
- var lon, lat, x, y, i;
- var al, bl;
- var phi, dphi;
- x = p.x - this.x0;
- y = p.y - this.y0;
- if (this.sphere) {
- if (Math.abs(y + this.a * this.lat0) <= EPSLN) {
- lon = adjust_lon(x / this.a + this.long0);
- lat = 0;
- }
- else {
- al = this.lat0 + y / this.a;
- bl = x * x / this.a / this.a + al * al;
- phi = al;
- var tanphi;
- for (i = MAX_ITER$2; i; --i) {
- tanphi = Math.tan(phi);
- dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);
- phi += dphi;
- if (Math.abs(dphi) <= EPSLN) {
- lat = phi;
- break;
- }
- }
- lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));
- }
- }
- else {
- if (Math.abs(y + this.ml0) <= EPSLN) {
- lat = 0;
- lon = adjust_lon(this.long0 + x / this.a);
- }
- else {
- al = (this.ml0 + y) / this.a;
- bl = x * x / this.a / this.a + al * al;
- phi = al;
- var cl, mln, mlnp, ma;
- var con;
- for (i = MAX_ITER$2; i; --i) {
- con = this.e * Math.sin(phi);
- cl = Math.sqrt(1 - con * con) * Math.tan(phi);
- mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
- mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);
- ma = mln / this.a;
- dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);
- phi -= dphi;
- if (Math.abs(dphi) <= EPSLN) {
- lat = phi;
- break;
- }
- }
- //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);
- cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);
- lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));
- }
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$19 = ["Polyconic", "poly"];
- var poly = {
- init: init$18,
- forward: forward$17,
- inverse: inverse$17,
- names: names$19
- };
- /*
- reference
- Department of Land and Survey Technical Circular 1973/32
- http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf
- OSG Technical Report 4.1
- http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf
- */
- /**
- * iterations: Number of iterations to refine inverse transform.
- * 0 -> km accuracy
- * 1 -> m accuracy -- suitable for most mapping applications
- * 2 -> mm accuracy
- */
- function init$19() {
- this.A = [];
- this.A[1] = 0.6399175073;
- this.A[2] = -0.1358797613;
- this.A[3] = 0.063294409;
- this.A[4] = -0.02526853;
- this.A[5] = 0.0117879;
- this.A[6] = -0.0055161;
- this.A[7] = 0.0026906;
- this.A[8] = -0.001333;
- this.A[9] = 0.00067;
- this.A[10] = -0.00034;
- this.B_re = [];
- this.B_im = [];
- this.B_re[1] = 0.7557853228;
- this.B_im[1] = 0;
- this.B_re[2] = 0.249204646;
- this.B_im[2] = 0.003371507;
- this.B_re[3] = -0.001541739;
- this.B_im[3] = 0.041058560;
- this.B_re[4] = -0.10162907;
- this.B_im[4] = 0.01727609;
- this.B_re[5] = -0.26623489;
- this.B_im[5] = -0.36249218;
- this.B_re[6] = -0.6870983;
- this.B_im[6] = -1.1651967;
- this.C_re = [];
- this.C_im = [];
- this.C_re[1] = 1.3231270439;
- this.C_im[1] = 0;
- this.C_re[2] = -0.577245789;
- this.C_im[2] = -0.007809598;
- this.C_re[3] = 0.508307513;
- this.C_im[3] = -0.112208952;
- this.C_re[4] = -0.15094762;
- this.C_im[4] = 0.18200602;
- this.C_re[5] = 1.01418179;
- this.C_im[5] = 1.64497696;
- this.C_re[6] = 1.9660549;
- this.C_im[6] = 2.5127645;
- this.D = [];
- this.D[1] = 1.5627014243;
- this.D[2] = 0.5185406398;
- this.D[3] = -0.03333098;
- this.D[4] = -0.1052906;
- this.D[5] = -0.0368594;
- this.D[6] = 0.007317;
- this.D[7] = 0.01220;
- this.D[8] = 0.00394;
- this.D[9] = -0.0013;
- }
- /**
- New Zealand Map Grid Forward - long/lat to x/y
- long/lat in radians
- */
- function forward$18(p) {
- var n;
- var lon = p.x;
- var lat = p.y;
- var delta_lat = lat - this.lat0;
- var delta_lon = lon - this.long0;
- // 1. Calculate d_phi and d_psi ... // and d_lambda
- // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.
- var d_phi = delta_lat / SEC_TO_RAD * 1E-5;
- var d_lambda = delta_lon;
- var d_phi_n = 1; // d_phi^0
- var d_psi = 0;
- for (n = 1; n <= 10; n++) {
- d_phi_n = d_phi_n * d_phi;
- d_psi = d_psi + this.A[n] * d_phi_n;
- }
- // 2. Calculate theta
- var th_re = d_psi;
- var th_im = d_lambda;
- // 3. Calculate z
- var th_n_re = 1;
- var th_n_im = 0; // theta^0
- var th_n_re1;
- var th_n_im1;
- var z_re = 0;
- var z_im = 0;
- for (n = 1; n <= 6; n++) {
- th_n_re1 = th_n_re * th_re - th_n_im * th_im;
- th_n_im1 = th_n_im * th_re + th_n_re * th_im;
- th_n_re = th_n_re1;
- th_n_im = th_n_im1;
- z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;
- z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;
- }
- // 4. Calculate easting and northing
- p.x = (z_im * this.a) + this.x0;
- p.y = (z_re * this.a) + this.y0;
- return p;
- }
- /**
- New Zealand Map Grid Inverse - x/y to long/lat
- */
- function inverse$18(p) {
- var n;
- var x = p.x;
- var y = p.y;
- var delta_x = x - this.x0;
- var delta_y = y - this.y0;
- // 1. Calculate z
- var z_re = delta_y / this.a;
- var z_im = delta_x / this.a;
- // 2a. Calculate theta - first approximation gives km accuracy
- var z_n_re = 1;
- var z_n_im = 0; // z^0
- var z_n_re1;
- var z_n_im1;
- var th_re = 0;
- var th_im = 0;
- for (n = 1; n <= 6; n++) {
- z_n_re1 = z_n_re * z_re - z_n_im * z_im;
- z_n_im1 = z_n_im * z_re + z_n_re * z_im;
- z_n_re = z_n_re1;
- z_n_im = z_n_im1;
- th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;
- th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;
- }
- // 2b. Iterate to refine the accuracy of the calculation
- // 0 iterations gives km accuracy
- // 1 iteration gives m accuracy -- good enough for most mapping applications
- // 2 iterations bives mm accuracy
- for (var i = 0; i < this.iterations; i++) {
- var th_n_re = th_re;
- var th_n_im = th_im;
- var th_n_re1;
- var th_n_im1;
- var num_re = z_re;
- var num_im = z_im;
- for (n = 2; n <= 6; n++) {
- th_n_re1 = th_n_re * th_re - th_n_im * th_im;
- th_n_im1 = th_n_im * th_re + th_n_re * th_im;
- th_n_re = th_n_re1;
- th_n_im = th_n_im1;
- num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
- num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
- }
- th_n_re = 1;
- th_n_im = 0;
- var den_re = this.B_re[1];
- var den_im = this.B_im[1];
- for (n = 2; n <= 6; n++) {
- th_n_re1 = th_n_re * th_re - th_n_im * th_im;
- th_n_im1 = th_n_im * th_re + th_n_re * th_im;
- th_n_re = th_n_re1;
- th_n_im = th_n_im1;
- den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
- den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
- }
- // Complex division
- var den2 = den_re * den_re + den_im * den_im;
- th_re = (num_re * den_re + num_im * den_im) / den2;
- th_im = (num_im * den_re - num_re * den_im) / den2;
- }
- // 3. Calculate d_phi ... // and d_lambda
- var d_psi = th_re;
- var d_lambda = th_im;
- var d_psi_n = 1; // d_psi^0
- var d_phi = 0;
- for (n = 1; n <= 9; n++) {
- d_psi_n = d_psi_n * d_psi;
- d_phi = d_phi + this.D[n] * d_psi_n;
- }
- // 4. Calculate latitude and longitude
- // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.
- var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);
- var lon = this.long0 + d_lambda;
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$20 = ["New_Zealand_Map_Grid", "nzmg"];
- var nzmg = {
- init: init$19,
- forward: forward$18,
- inverse: inverse$18,
- names: names$20
- };
- /*
- reference
- "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
- The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
- */
- /* Initialize the Miller Cylindrical projection
- -------------------------------------------*/
- function init$20() {
- //no-op
- }
- /* Miller Cylindrical forward equations--mapping lat,long to x,y
- ------------------------------------------------------------*/
- function forward$19(p) {
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- var dlon = adjust_lon(lon - this.long0);
- var x = this.x0 + this.a * dlon;
- var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;
- p.x = x;
- p.y = y;
- return p;
- }
- /* Miller Cylindrical inverse equations--mapping x,y to lat/long
- ------------------------------------------------------------*/
- function inverse$19(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var lon = adjust_lon(this.long0 + p.x / this.a);
- var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$21 = ["Miller_Cylindrical", "mill"];
- var mill = {
- init: init$20,
- forward: forward$19,
- inverse: inverse$19,
- names: names$21
- };
- var MAX_ITER$3 = 20;
- function init$21() {
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- if (!this.sphere) {
- this.en = pj_enfn(this.es);
- }
- else {
- this.n = 1;
- this.m = 0;
- this.es = 0;
- this.C_y = Math.sqrt((this.m + 1) / this.n);
- this.C_x = this.C_y / (this.m + 1);
- }
- }
- /* Sinusoidal forward equations--mapping lat,long to x,y
- -----------------------------------------------------*/
- function forward$20(p) {
- var x, y;
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- lon = adjust_lon(lon - this.long0);
- if (this.sphere) {
- if (!this.m) {
- lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;
- }
- else {
- var k = this.n * Math.sin(lat);
- for (var i = MAX_ITER$3; i; --i) {
- var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));
- lat -= V;
- if (Math.abs(V) < EPSLN) {
- break;
- }
- }
- }
- x = this.a * this.C_x * lon * (this.m + Math.cos(lat));
- y = this.a * this.C_y * lat;
- }
- else {
- var s = Math.sin(lat);
- var c = Math.cos(lat);
- y = this.a * pj_mlfn(lat, s, c, this.en);
- x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);
- }
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$20(p) {
- var lat, temp, lon, s;
- p.x -= this.x0;
- lon = p.x / this.a;
- p.y -= this.y0;
- lat = p.y / this.a;
- if (this.sphere) {
- lat /= this.C_y;
- lon = lon / (this.C_x * (this.m + Math.cos(lat)));
- if (this.m) {
- lat = asinz((this.m * lat + Math.sin(lat)) / this.n);
- }
- else if (this.n !== 1) {
- lat = asinz(Math.sin(lat) / this.n);
- }
- lon = adjust_lon(lon + this.long0);
- lat = adjust_lat(lat);
- }
- else {
- lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);
- s = Math.abs(lat);
- if (s < HALF_PI) {
- s = Math.sin(lat);
- temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));
- //temp = this.long0 + p.x / (this.a * Math.cos(lat));
- lon = adjust_lon(temp);
- }
- else if ((s - EPSLN) < HALF_PI) {
- lon = this.long0;
- }
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$22 = ["Sinusoidal", "sinu"];
- var sinu = {
- init: init$21,
- forward: forward$20,
- inverse: inverse$20,
- names: names$22
- };
- function init$22() {}
- /* Mollweide forward equations--mapping lat,long to x,y
- ----------------------------------------------------*/
- function forward$21(p) {
- /* Forward equations
- -----------------*/
- var lon = p.x;
- var lat = p.y;
- var delta_lon = adjust_lon(lon - this.long0);
- var theta = lat;
- var con = Math.PI * Math.sin(lat);
- /* Iterate using the Newton-Raphson method to find theta
- -----------------------------------------------------*/
- while (true) {
- var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));
- theta += delta_theta;
- if (Math.abs(delta_theta) < EPSLN) {
- break;
- }
- }
- theta /= 2;
- /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting"
- this is done here because of precision problems with "cos(theta)"
- --------------------------------------------------------------------------*/
- if (Math.PI / 2 - Math.abs(lat) < EPSLN) {
- delta_lon = 0;
- }
- var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;
- var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$21(p) {
- var theta;
- var arg;
- /* Inverse equations
- -----------------*/
- p.x -= this.x0;
- p.y -= this.y0;
- arg = p.y / (1.4142135623731 * this.a);
- /* Because of division by zero problems, 'arg' can not be 1. Therefore
- a number very close to one is used instead.
- -------------------------------------------------------------------*/
- if (Math.abs(arg) > 0.999999999999) {
- arg = 0.999999999999;
- }
- theta = Math.asin(arg);
- var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));
- if (lon < (-Math.PI)) {
- lon = -Math.PI;
- }
- if (lon > Math.PI) {
- lon = Math.PI;
- }
- arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;
- if (Math.abs(arg) > 1) {
- arg = 1;
- }
- var lat = Math.asin(arg);
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$23 = ["Mollweide", "moll"];
- var moll = {
- init: init$22,
- forward: forward$21,
- inverse: inverse$21,
- names: names$23
- };
- function init$23() {
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- // Standard Parallels cannot be equal and on opposite sides of the equator
- if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
- return;
- }
- this.lat2 = this.lat2 || this.lat1;
- this.temp = this.b / this.a;
- this.es = 1 - Math.pow(this.temp, 2);
- this.e = Math.sqrt(this.es);
- this.e0 = e0fn(this.es);
- this.e1 = e1fn(this.es);
- this.e2 = e2fn(this.es);
- this.e3 = e3fn(this.es);
- this.sinphi = Math.sin(this.lat1);
- this.cosphi = Math.cos(this.lat1);
- this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);
- this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);
- if (Math.abs(this.lat1 - this.lat2) < EPSLN) {
- this.ns = this.sinphi;
- }
- else {
- this.sinphi = Math.sin(this.lat2);
- this.cosphi = Math.cos(this.lat2);
- this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);
- this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);
- this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);
- }
- this.g = this.ml1 + this.ms1 / this.ns;
- this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
- this.rh = this.a * (this.g - this.ml0);
- }
- /* Equidistant Conic forward equations--mapping lat,long to x,y
- -----------------------------------------------------------*/
- function forward$22(p) {
- var lon = p.x;
- var lat = p.y;
- var rh1;
- /* Forward equations
- -----------------*/
- if (this.sphere) {
- rh1 = this.a * (this.g - lat);
- }
- else {
- var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);
- rh1 = this.a * (this.g - ml);
- }
- var theta = this.ns * adjust_lon(lon - this.long0);
- var x = this.x0 + rh1 * Math.sin(theta);
- var y = this.y0 + this.rh - rh1 * Math.cos(theta);
- p.x = x;
- p.y = y;
- return p;
- }
- /* Inverse equations
- -----------------*/
- function inverse$22(p) {
- p.x -= this.x0;
- p.y = this.rh - p.y + this.y0;
- var con, rh1, lat, lon;
- if (this.ns >= 0) {
- rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
- con = 1;
- }
- else {
- rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
- con = -1;
- }
- var theta = 0;
- if (rh1 !== 0) {
- theta = Math.atan2(con * p.x, con * p.y);
- }
- if (this.sphere) {
- lon = adjust_lon(this.long0 + theta / this.ns);
- lat = adjust_lat(this.g - rh1 / this.a);
- p.x = lon;
- p.y = lat;
- return p;
- }
- else {
- var ml = this.g - rh1 / this.a;
- lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);
- lon = adjust_lon(this.long0 + theta / this.ns);
- p.x = lon;
- p.y = lat;
- return p;
- }
- }
- var names$24 = ["Equidistant_Conic", "eqdc"];
- var eqdc = {
- init: init$23,
- forward: forward$22,
- inverse: inverse$22,
- names: names$24
- };
- /* Initialize the Van Der Grinten projection
- ----------------------------------------*/
- function init$24() {
- //this.R = 6370997; //Radius of earth
- this.R = this.a;
- }
- function forward$23(p) {
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- var dlon = adjust_lon(lon - this.long0);
- var x, y;
- if (Math.abs(lat) <= EPSLN) {
- x = this.x0 + this.R * dlon;
- y = this.y0;
- }
- var theta = asinz(2 * Math.abs(lat / Math.PI));
- if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {
- x = this.x0;
- if (lat >= 0) {
- y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);
- }
- else {
- y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);
- }
- // return(OK);
- }
- var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));
- var asq = al * al;
- var sinth = Math.sin(theta);
- var costh = Math.cos(theta);
- var g = costh / (sinth + costh - 1);
- var gsq = g * g;
- var m = g * (2 / sinth - 1);
- var msq = m * m;
- var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);
- if (dlon < 0) {
- con = -con;
- }
- x = this.x0 + con;
- //con = Math.abs(con / (Math.PI * this.R));
- var q = asq + g;
- con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);
- if (lat >= 0) {
- //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
- y = this.y0 + con;
- }
- else {
- //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
- y = this.y0 - con;
- }
- p.x = x;
- p.y = y;
- return p;
- }
- /* Van Der Grinten inverse equations--mapping x,y to lat/long
- ---------------------------------------------------------*/
- function inverse$23(p) {
- var lon, lat;
- var xx, yy, xys, c1, c2, c3;
- var a1;
- var m1;
- var con;
- var th1;
- var d;
- /* inverse equations
- -----------------*/
- p.x -= this.x0;
- p.y -= this.y0;
- con = Math.PI * this.R;
- xx = p.x / con;
- yy = p.y / con;
- xys = xx * xx + yy * yy;
- c1 = -Math.abs(yy) * (1 + xys);
- c2 = c1 - 2 * yy * yy + xx * xx;
- c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;
- d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;
- a1 = (c1 - c2 * c2 / 3 / c3) / c3;
- m1 = 2 * Math.sqrt(-a1 / 3);
- con = ((3 * d) / a1) / m1;
- if (Math.abs(con) > 1) {
- if (con >= 0) {
- con = 1;
- }
- else {
- con = -1;
- }
- }
- th1 = Math.acos(con) / 3;
- if (p.y >= 0) {
- lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
- }
- else {
- lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
- }
- if (Math.abs(xx) < EPSLN) {
- lon = this.long0;
- }
- else {
- lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$25 = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"];
- var vandg = {
- init: init$24,
- forward: forward$23,
- inverse: inverse$23,
- names: names$25
- };
- function init$25() {
- this.sin_p12 = Math.sin(this.lat0);
- this.cos_p12 = Math.cos(this.lat0);
- }
- function forward$24(p) {
- var lon = p.x;
- var lat = p.y;
- var sinphi = Math.sin(p.y);
- var cosphi = Math.cos(p.y);
- var dlon = adjust_lon(lon - this.long0);
- var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;
- if (this.sphere) {
- if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
- //North Pole case
- p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);
- p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);
- return p;
- }
- else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
- //South Pole case
- p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);
- p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);
- return p;
- }
- else {
- //default case
- cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);
- c = Math.acos(cos_c);
- kp = c / Math.sin(c);
- p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);
- p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));
- return p;
- }
- }
- else {
- e0 = e0fn(this.es);
- e1 = e1fn(this.es);
- e2 = e2fn(this.es);
- e3 = e3fn(this.es);
- if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
- //North Pole case
- Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
- Ml = this.a * mlfn(e0, e1, e2, e3, lat);
- p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);
- p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);
- return p;
- }
- else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
- //South Pole case
- Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
- Ml = this.a * mlfn(e0, e1, e2, e3, lat);
- p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);
- p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);
- return p;
- }
- else {
- //Default case
- tanphi = sinphi / cosphi;
- Nl1 = gN(this.a, this.e, this.sin_p12);
- Nl = gN(this.a, this.e, sinphi);
- psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));
- Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));
- if (Az === 0) {
- s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
- }
- else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {
- s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
- }
- else {
- s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));
- }
- G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);
- H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);
- GH = G * H;
- Hs = H * H;
- s2 = s * s;
- s3 = s2 * s;
- s4 = s3 * s;
- s5 = s4 * s;
- c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);
- p.x = this.x0 + c * Math.sin(Az);
- p.y = this.y0 + c * Math.cos(Az);
- return p;
- }
- }
- }
- function inverse$24(p) {
- p.x -= this.x0;
- p.y -= this.y0;
- var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F;
- if (this.sphere) {
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- if (rh > (2 * HALF_PI * this.a)) {
- return;
- }
- z = rh / this.a;
- sinz = Math.sin(z);
- cosz = Math.cos(z);
- lon = this.long0;
- if (Math.abs(rh) <= EPSLN) {
- lat = this.lat0;
- }
- else {
- lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);
- con = Math.abs(this.lat0) - HALF_PI;
- if (Math.abs(con) <= EPSLN) {
- if (this.lat0 >= 0) {
- lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
- }
- else {
- lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
- }
- }
- else {
- /*con = cosz - this.sin_p12 * Math.sin(lat);
- if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {
- //no-op, just keep the lon value as is
- } else {
- var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));
- lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));
- }*/
- lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));
- }
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- else {
- e0 = e0fn(this.es);
- e1 = e1fn(this.es);
- e2 = e2fn(this.es);
- e3 = e3fn(this.es);
- if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
- //North pole case
- Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- M = Mlp - rh;
- lat = imlfn(M / this.a, e0, e1, e2, e3);
- lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
- p.x = lon;
- p.y = lat;
- return p;
- }
- else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
- //South pole case
- Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- M = rh - Mlp;
- lat = imlfn(M / this.a, e0, e1, e2, e3);
- lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
- p.x = lon;
- p.y = lat;
- return p;
- }
- else {
- //default case
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- Az = Math.atan2(p.x, p.y);
- N1 = gN(this.a, this.e, this.sin_p12);
- cosAz = Math.cos(Az);
- tmp = this.e * this.cos_p12 * cosAz;
- A = -tmp * tmp / (1 - this.es);
- B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);
- D = rh / N1;
- Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;
- F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;
- psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);
- lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));
- lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es));
- p.x = lon;
- p.y = lat;
- return p;
- }
- }
- }
- var names$26 = ["Azimuthal_Equidistant", "aeqd"];
- var aeqd = {
- init: init$25,
- forward: forward$24,
- inverse: inverse$24,
- names: names$26
- };
- function init$26() {
- //double temp; /* temporary variable */
- /* Place parameters in static storage for common use
- -------------------------------------------------*/
- this.sin_p14 = Math.sin(this.lat0);
- this.cos_p14 = Math.cos(this.lat0);
- }
- /* Orthographic forward equations--mapping lat,long to x,y
- ---------------------------------------------------*/
- function forward$25(p) {
- var sinphi, cosphi; /* sin and cos value */
- var dlon; /* delta longitude value */
- var coslon; /* cos of longitude */
- var ksp; /* scale factor */
- var g, x, y;
- var lon = p.x;
- var lat = p.y;
- /* Forward equations
- -----------------*/
- dlon = adjust_lon(lon - this.long0);
- sinphi = Math.sin(lat);
- cosphi = Math.cos(lat);
- coslon = Math.cos(dlon);
- g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
- ksp = 1;
- if ((g > 0) || (Math.abs(g) <= EPSLN)) {
- x = this.a * ksp * cosphi * Math.sin(dlon);
- y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
- }
- p.x = x;
- p.y = y;
- return p;
- }
- function inverse$25(p) {
- var rh; /* height above ellipsoid */
- var z; /* angle */
- var sinz, cosz; /* sin of z and cos of z */
- var con;
- var lon, lat;
- /* Inverse equations
- -----------------*/
- p.x -= this.x0;
- p.y -= this.y0;
- rh = Math.sqrt(p.x * p.x + p.y * p.y);
- z = asinz(rh / this.a);
- sinz = Math.sin(z);
- cosz = Math.cos(z);
- lon = this.long0;
- if (Math.abs(rh) <= EPSLN) {
- lat = this.lat0;
- p.x = lon;
- p.y = lat;
- return p;
- }
- lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);
- con = Math.abs(this.lat0) - HALF_PI;
- if (Math.abs(con) <= EPSLN) {
- if (this.lat0 >= 0) {
- lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
- }
- else {
- lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
- }
- p.x = lon;
- p.y = lat;
- return p;
- }
- lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));
- p.x = lon;
- p.y = lat;
- return p;
- }
- var names$27 = ["ortho"];
- var ortho = {
- init: init$26,
- forward: forward$25,
- inverse: inverse$25,
- names: names$27
- };
- // QSC projection rewritten from the original PROJ4
- // https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c
- /* constants */
- var FACE_ENUM = {
- FRONT: 1,
- RIGHT: 2,
- BACK: 3,
- LEFT: 4,
- TOP: 5,
- BOTTOM: 6
- };
- var AREA_ENUM = {
- AREA_0: 1,
- AREA_1: 2,
- AREA_2: 3,
- AREA_3: 4
- };
- function init$27() {
- this.x0 = this.x0 || 0;
- this.y0 = this.y0 || 0;
- this.lat0 = this.lat0 || 0;
- this.long0 = this.long0 || 0;
- this.lat_ts = this.lat_ts || 0;
- this.title = this.title || "Quadrilateralized Spherical Cube";
- /* Determine the cube face from the center of projection. */
- if (this.lat0 >= HALF_PI - FORTPI / 2.0) {
- this.face = FACE_ENUM.TOP;
- } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {
- this.face = FACE_ENUM.BOTTOM;
- } else if (Math.abs(this.long0) <= FORTPI) {
- this.face = FACE_ENUM.FRONT;
- } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {
- this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;
- } else {
- this.face = FACE_ENUM.BACK;
- }
- /* Fill in useful values for the ellipsoid <-> sphere shift
- * described in [LK12]. */
- if (this.es !== 0) {
- this.one_minus_f = 1 - (this.a - this.b) / this.a;
- this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;
- }
- }
- // QSC forward equations--mapping lat,long to x,y
- // -----------------------------------------------------------------
- function forward$26(p) {
- var xy = {x: 0, y: 0};
- var lat, lon;
- var theta, phi;
- var t, mu;
- /* nu; */
- var area = {value: 0};
- // move lon according to projection's lon
- p.x -= this.long0;
- /* Convert the geodetic latitude to a geocentric latitude.
- * This corresponds to the shift from the ellipsoid to the sphere
- * described in [LK12]. */
- if (this.es !== 0) {//if (P->es != 0) {
- lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));
- } else {
- lat = p.y;
- }
- /* Convert the input lat, lon into theta, phi as used by QSC.
- * This depends on the cube face and the area on it.
- * For the top and bottom face, we can compute theta and phi
- * directly from phi, lam. For the other faces, we must use
- * unit sphere cartesian coordinates as an intermediate step. */
- lon = p.x; //lon = lp.lam;
- if (this.face === FACE_ENUM.TOP) {
- phi = HALF_PI - lat;
- if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {
- area.value = AREA_ENUM.AREA_0;
- theta = lon - HALF_PI;
- } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {
- area.value = AREA_ENUM.AREA_1;
- theta = (lon > 0.0 ? lon - SPI : lon + SPI);
- } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {
- area.value = AREA_ENUM.AREA_2;
- theta = lon + HALF_PI;
- } else {
- area.value = AREA_ENUM.AREA_3;
- theta = lon;
- }
- } else if (this.face === FACE_ENUM.BOTTOM) {
- phi = HALF_PI + lat;
- if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {
- area.value = AREA_ENUM.AREA_0;
- theta = -lon + HALF_PI;
- } else if (lon < FORTPI && lon >= -FORTPI) {
- area.value = AREA_ENUM.AREA_1;
- theta = -lon;
- } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {
- area.value = AREA_ENUM.AREA_2;
- theta = -lon - HALF_PI;
- } else {
- area.value = AREA_ENUM.AREA_3;
- theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);
- }
- } else {
- var q, r, s;
- var sinlat, coslat;
- var sinlon, coslon;
- if (this.face === FACE_ENUM.RIGHT) {
- lon = qsc_shift_lon_origin(lon, +HALF_PI);
- } else if (this.face === FACE_ENUM.BACK) {
- lon = qsc_shift_lon_origin(lon, +SPI);
- } else if (this.face === FACE_ENUM.LEFT) {
- lon = qsc_shift_lon_origin(lon, -HALF_PI);
- }
- sinlat = Math.sin(lat);
- coslat = Math.cos(lat);
- sinlon = Math.sin(lon);
- coslon = Math.cos(lon);
- q = coslat * coslon;
- r = coslat * sinlon;
- s = sinlat;
- if (this.face === FACE_ENUM.FRONT) {
- phi = Math.acos(q);
- theta = qsc_fwd_equat_face_theta(phi, s, r, area);
- } else if (this.face === FACE_ENUM.RIGHT) {
- phi = Math.acos(r);
- theta = qsc_fwd_equat_face_theta(phi, s, -q, area);
- } else if (this.face === FACE_ENUM.BACK) {
- phi = Math.acos(-q);
- theta = qsc_fwd_equat_face_theta(phi, s, -r, area);
- } else if (this.face === FACE_ENUM.LEFT) {
- phi = Math.acos(-r);
- theta = qsc_fwd_equat_face_theta(phi, s, q, area);
- } else {
- /* Impossible */
- phi = theta = 0;
- area.value = AREA_ENUM.AREA_0;
- }
- }
- /* Compute mu and nu for the area of definition.
- * For mu, see Eq. (3-21) in [OL76], but note the typos:
- * compare with Eq. (3-14). For nu, see Eq. (3-38). */
- mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));
- t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));
- /* Apply the result to the real area. */
- if (area.value === AREA_ENUM.AREA_1) {
- mu += HALF_PI;
- } else if (area.value === AREA_ENUM.AREA_2) {
- mu += SPI;
- } else if (area.value === AREA_ENUM.AREA_3) {
- mu += 1.5 * SPI;
- }
- /* Now compute x, y from mu and nu */
- xy.x = t * Math.cos(mu);
- xy.y = t * Math.sin(mu);
- xy.x = xy.x * this.a + this.x0;
- xy.y = xy.y * this.a + this.y0;
- p.x = xy.x;
- p.y = xy.y;
- return p;
- }
- // QSC inverse equations--mapping x,y to lat/long
- // -----------------------------------------------------------------
- function inverse$26(p) {
- var lp = {lam: 0, phi: 0};
- var mu, nu, cosmu, tannu;
- var tantheta, theta, cosphi, phi;
- var t;
- var area = {value: 0};
- /* de-offset */
- p.x = (p.x - this.x0) / this.a;
- p.y = (p.y - this.y0) / this.a;
- /* Convert the input x, y to the mu and nu angles as used by QSC.
- * This depends on the area of the cube face. */
- nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));
- mu = Math.atan2(p.y, p.x);
- if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {
- area.value = AREA_ENUM.AREA_0;
- } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {
- area.value = AREA_ENUM.AREA_1;
- mu -= HALF_PI;
- } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {
- area.value = AREA_ENUM.AREA_2;
- mu = (mu < 0.0 ? mu + SPI : mu - SPI);
- } else {
- area.value = AREA_ENUM.AREA_3;
- mu += HALF_PI;
- }
- /* Compute phi and theta for the area of definition.
- * The inverse projection is not described in the original paper, but some
- * good hints can be found here (as of 2011-12-14):
- * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302
- * (search for "Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>") */
- t = (SPI / 12) * Math.tan(mu);
- tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));
- theta = Math.atan(tantheta);
- cosmu = Math.cos(mu);
- tannu = Math.tan(nu);
- cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));
- if (cosphi < -1) {
- cosphi = -1;
- } else if (cosphi > +1) {
- cosphi = +1;
- }
- /* Apply the result to the real area on the cube face.
- * For the top and bottom face, we can compute phi and lam directly.
- * For the other faces, we must use unit sphere cartesian coordinates
- * as an intermediate step. */
- if (this.face === FACE_ENUM.TOP) {
- phi = Math.acos(cosphi);
- lp.phi = HALF_PI - phi;
- if (area.value === AREA_ENUM.AREA_0) {
- lp.lam = theta + HALF_PI;
- } else if (area.value === AREA_ENUM.AREA_1) {
- lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);
- } else if (area.value === AREA_ENUM.AREA_2) {
- lp.lam = theta - HALF_PI;
- } else /* area.value == AREA_ENUM.AREA_3 */ {
- lp.lam = theta;
- }
- } else if (this.face === FACE_ENUM.BOTTOM) {
- phi = Math.acos(cosphi);
- lp.phi = phi - HALF_PI;
- if (area.value === AREA_ENUM.AREA_0) {
- lp.lam = -theta + HALF_PI;
- } else if (area.value === AREA_ENUM.AREA_1) {
- lp.lam = -theta;
- } else if (area.value === AREA_ENUM.AREA_2) {
- lp.lam = -theta - HALF_PI;
- } else /* area.value == AREA_ENUM.AREA_3 */ {
- lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);
- }
- } else {
- /* Compute phi and lam via cartesian unit sphere coordinates. */
- var q, r, s;
- q = cosphi;
- t = q * q;
- if (t >= 1) {
- s = 0;
- } else {
- s = Math.sqrt(1 - t) * Math.sin(theta);
- }
- t += s * s;
- if (t >= 1) {
- r = 0;
- } else {
- r = Math.sqrt(1 - t);
- }
- /* Rotate q,r,s into the correct area. */
- if (area.value === AREA_ENUM.AREA_1) {
- t = r;
- r = -s;
- s = t;
- } else if (area.value === AREA_ENUM.AREA_2) {
- r = -r;
- s = -s;
- } else if (area.value === AREA_ENUM.AREA_3) {
- t = r;
- r = s;
- s = -t;
- }
- /* Rotate q,r,s into the correct cube face. */
- if (this.face === FACE_ENUM.RIGHT) {
- t = q;
- q = -r;
- r = t;
- } else if (this.face === FACE_ENUM.BACK) {
- q = -q;
- r = -r;
- } else if (this.face === FACE_ENUM.LEFT) {
- t = q;
- q = r;
- r = -t;
- }
- /* Now compute phi and lam from the unit sphere coordinates. */
- lp.phi = Math.acos(-s) - HALF_PI;
- lp.lam = Math.atan2(r, q);
- if (this.face === FACE_ENUM.RIGHT) {
- lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);
- } else if (this.face === FACE_ENUM.BACK) {
- lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);
- } else if (this.face === FACE_ENUM.LEFT) {
- lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);
- }
- }
- /* Apply the shift from the sphere to the ellipsoid as described
- * in [LK12]. */
- if (this.es !== 0) {
- var invert_sign;
- var tanphi, xa;
- invert_sign = (lp.phi < 0 ? 1 : 0);
- tanphi = Math.tan(lp.phi);
- xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);
- lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));
- if (invert_sign) {
- lp.phi = -lp.phi;
- }
- }
- lp.lam += this.long0;
- p.x = lp.lam;
- p.y = lp.phi;
- return p;
- }
- /* Helper function for forward projection: compute the theta angle
- * and determine the area number. */
- function qsc_fwd_equat_face_theta(phi, y, x, area) {
- var theta;
- if (phi < EPSLN) {
- area.value = AREA_ENUM.AREA_0;
- theta = 0.0;
- } else {
- theta = Math.atan2(y, x);
- if (Math.abs(theta) <= FORTPI) {
- area.value = AREA_ENUM.AREA_0;
- } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {
- area.value = AREA_ENUM.AREA_1;
- theta -= HALF_PI;
- } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {
- area.value = AREA_ENUM.AREA_2;
- theta = (theta >= 0.0 ? theta - SPI : theta + SPI);
- } else {
- area.value = AREA_ENUM.AREA_3;
- theta += HALF_PI;
- }
- }
- return theta;
- }
- /* Helper function: shift the longitude. */
- function qsc_shift_lon_origin(lon, offset) {
- var slon = lon + offset;
- if (slon < -SPI) {
- slon += TWO_PI;
- } else if (slon > +SPI) {
- slon -= TWO_PI;
- }
- return slon;
- }
- var names$28 = ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cube", "qsc"];
- var qsc = {
- init: init$27,
- forward: forward$26,
- inverse: inverse$26,
- names: names$28
- };
- // Robinson projection
- // Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c
- // Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039
- var COEFS_X = [
- [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],
- [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],
- [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],
- [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],
- [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],
- [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],
- [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],
- [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],
- [0.9216, -0.00467746, -0.00010457, 4.81243e-06],
- [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],
- [0.8679, -0.00609363, -0.000113898, 3.32484e-06],
- [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],
- [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],
- [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],
- [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],
- [0.6732, -0.00986209, -0.000199569, 1.91974e-05],
- [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],
- [0.5722, -0.00906601, 0.000182, 6.24051e-06],
- [0.5322, -0.00677797, 0.000275608, 6.24051e-06]
- ];
- var COEFS_Y = [
- [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],
- [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],
- [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],
- [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],
- [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],
- [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],
- [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],
- [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],
- [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],
- [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],
- [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],
- [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],
- [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],
- [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],
- [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],
- [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],
- [0.9394, 0.00840947, -0.000192841, -4.2106e-06],
- [0.9761, 0.00616527, -0.000256, -4.2106e-06],
- [1.0000, 0.00328947, -0.000319159, -4.2106e-06]
- ];
- var FXC = 0.8487;
- var FYC = 1.3523;
- var C1 = R2D/5; // rad to 5-degree interval
- var RC1 = 1/C1;
- var NODES = 18;
- var poly3_val = function(coefs, x) {
- return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));
- };
- var poly3_der = function(coefs, x) {
- return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);
- };
- function newton_rapshon(f_df, start, max_err, iters) {
- var x = start;
- for (; iters; --iters) {
- var upd = f_df(x);
- x -= upd;
- if (Math.abs(upd) < max_err) {
- break;
- }
- }
- return x;
- }
- function init$28() {
- this.x0 = this.x0 || 0;
- this.y0 = this.y0 || 0;
- this.long0 = this.long0 || 0;
- this.es = 0;
- this.title = this.title || "Robinson";
- }
- function forward$27(ll) {
- var lon = adjust_lon(ll.x - this.long0);
- var dphi = Math.abs(ll.y);
- var i = Math.floor(dphi * C1);
- if (i < 0) {
- i = 0;
- } else if (i >= NODES) {
- i = NODES - 1;
- }
- dphi = R2D * (dphi - RC1 * i);
- var xy = {
- x: poly3_val(COEFS_X[i], dphi) * lon,
- y: poly3_val(COEFS_Y[i], dphi)
- };
- if (ll.y < 0) {
- xy.y = -xy.y;
- }
- xy.x = xy.x * this.a * FXC + this.x0;
- xy.y = xy.y * this.a * FYC + this.y0;
- return xy;
- }
- function inverse$27(xy) {
- var ll = {
- x: (xy.x - this.x0) / (this.a * FXC),
- y: Math.abs(xy.y - this.y0) / (this.a * FYC)
- };
- if (ll.y >= 1) { // pathologic case
- ll.x /= COEFS_X[NODES][0];
- ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;
- } else {
- // find table interval
- var i = Math.floor(ll.y * NODES);
- if (i < 0) {
- i = 0;
- } else if (i >= NODES) {
- i = NODES - 1;
- }
- for (;;) {
- if (COEFS_Y[i][0] > ll.y) {
- --i;
- } else if (COEFS_Y[i+1][0] <= ll.y) {
- ++i;
- } else {
- break;
- }
- }
- // linear interpolation in 5 degree interval
- var coefs = COEFS_Y[i];
- var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);
- // find t so that poly3_val(coefs, t) = ll.y
- t = newton_rapshon(function(x) {
- return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);
- }, t, EPSLN, 100);
- ll.x /= poly3_val(COEFS_X[i], t);
- ll.y = (5 * i + t) * D2R;
- if (xy.y < 0) {
- ll.y = -ll.y;
- }
- }
- ll.x = adjust_lon(ll.x + this.long0);
- return ll;
- }
- var names$29 = ["Robinson", "robin"];
- var robin = {
- init: init$28,
- forward: forward$27,
- inverse: inverse$27,
- names: names$29
- };
- var includedProjections = function(proj4){
- proj4.Proj.projections.add(tmerc);
- proj4.Proj.projections.add(etmerc);
- proj4.Proj.projections.add(utm);
- proj4.Proj.projections.add(sterea);
- proj4.Proj.projections.add(stere);
- proj4.Proj.projections.add(somerc);
- proj4.Proj.projections.add(omerc);
- proj4.Proj.projections.add(lcc);
- proj4.Proj.projections.add(krovak);
- proj4.Proj.projections.add(cass);
- proj4.Proj.projections.add(laea);
- proj4.Proj.projections.add(aea);
- proj4.Proj.projections.add(gnom);
- proj4.Proj.projections.add(cea);
- proj4.Proj.projections.add(eqc);
- proj4.Proj.projections.add(poly);
- proj4.Proj.projections.add(nzmg);
- proj4.Proj.projections.add(mill);
- proj4.Proj.projections.add(sinu);
- proj4.Proj.projections.add(moll);
- proj4.Proj.projections.add(eqdc);
- proj4.Proj.projections.add(vandg);
- proj4.Proj.projections.add(aeqd);
- proj4.Proj.projections.add(ortho);
- proj4.Proj.projections.add(qsc);
- proj4.Proj.projections.add(robin);
- };
- proj4$1.defaultDatum = 'WGS84'; //default datum
- proj4$1.Proj = Projection;
- proj4$1.WGS84 = new proj4$1.Proj('WGS84');
- proj4$1.Point = Point;
- proj4$1.toPoint = toPoint;
- proj4$1.defs = defs;
- proj4$1.transform = transform;
- proj4$1.mgrs = mgrs;
- proj4$1.version = version;
- includedProjections(proj4$1);
- return proj4$1;
- })));
- },{}],317:[function(require,module,exports){
- 'use strict'
- var Buffer = require('buffer').Buffer
- var inherits = require('inherits')
- var HashBase = require('hash-base')
- var ARRAY16 = new Array(16)
- var zl = [
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
- 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
- 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
- 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
- ]
- var zr = [
- 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
- 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
- 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
- 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
- 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
- ]
- var sl = [
- 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
- 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
- 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
- 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
- 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
- ]
- var sr = [
- 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
- 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
- 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
- 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
- 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
- ]
- var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]
- var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]
- function RIPEMD160 () {
- HashBase.call(this, 64)
- // state
- this._a = 0x67452301
- this._b = 0xefcdab89
- this._c = 0x98badcfe
- this._d = 0x10325476
- this._e = 0xc3d2e1f0
- }
- inherits(RIPEMD160, HashBase)
- RIPEMD160.prototype._update = function () {
- var words = ARRAY16
- for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)
- var al = this._a | 0
- var bl = this._b | 0
- var cl = this._c | 0
- var dl = this._d | 0
- var el = this._e | 0
- var ar = this._a | 0
- var br = this._b | 0
- var cr = this._c | 0
- var dr = this._d | 0
- var er = this._e | 0
- // computation
- for (var i = 0; i < 80; i += 1) {
- var tl
- var tr
- if (i < 16) {
- tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])
- tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])
- } else if (i < 32) {
- tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])
- tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])
- } else if (i < 48) {
- tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])
- tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])
- } else if (i < 64) {
- tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])
- tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])
- } else { // if (i<80) {
- tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])
- tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])
- }
- al = el
- el = dl
- dl = rotl(cl, 10)
- cl = bl
- bl = tl
- ar = er
- er = dr
- dr = rotl(cr, 10)
- cr = br
- br = tr
- }
- // update state
- var t = (this._b + cl + dr) | 0
- this._b = (this._c + dl + er) | 0
- this._c = (this._d + el + ar) | 0
- this._d = (this._e + al + br) | 0
- this._e = (this._a + bl + cr) | 0
- this._a = t
- }
- RIPEMD160.prototype._digest = function () {
- // create padding and handle blocks
- this._block[this._blockOffset++] = 0x80
- if (this._blockOffset > 56) {
- this._block.fill(0, this._blockOffset, 64)
- this._update()
- this._blockOffset = 0
- }
- this._block.fill(0, this._blockOffset, 56)
- this._block.writeUInt32LE(this._length[0], 56)
- this._block.writeUInt32LE(this._length[1], 60)
- this._update()
- // produce result
- var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)
- buffer.writeInt32LE(this._a, 0)
- buffer.writeInt32LE(this._b, 4)
- buffer.writeInt32LE(this._c, 8)
- buffer.writeInt32LE(this._d, 12)
- buffer.writeInt32LE(this._e, 16)
- return buffer
- }
- function rotl (x, n) {
- return (x << n) | (x >>> (32 - n))
- }
- function fn1 (a, b, c, d, e, m, k, s) {
- return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
- }
- function fn2 (a, b, c, d, e, m, k, s) {
- return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
- }
- function fn3 (a, b, c, d, e, m, k, s) {
- return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
- }
- function fn4 (a, b, c, d, e, m, k, s) {
- return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
- }
- function fn5 (a, b, c, d, e, m, k, s) {
- return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
- }
- module.exports = RIPEMD160
- },{"buffer":182,"hash-base":227,"inherits":262}],318:[function(require,module,exports){
- /* eslint-disable node/no-deprecated-api */
- var buffer = require('buffer')
- var Buffer = buffer.Buffer
- // alternative to using Object.keys for old browsers
- function copyProps (src, dst) {
- for (var key in src) {
- dst[key] = src[key]
- }
- }
- if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
- module.exports = buffer
- } else {
- // Copy properties from require('buffer')
- copyProps(buffer, exports)
- exports.Buffer = SafeBuffer
- }
- function SafeBuffer (arg, encodingOrOffset, length) {
- return Buffer(arg, encodingOrOffset, length)
- }
- SafeBuffer.prototype = Object.create(Buffer.prototype)
- // Copy static methods from Buffer
- copyProps(Buffer, SafeBuffer)
- SafeBuffer.from = function (arg, encodingOrOffset, length) {
- if (typeof arg === 'number') {
- throw new TypeError('Argument must not be a number')
- }
- return Buffer(arg, encodingOrOffset, length)
- }
- SafeBuffer.alloc = function (size, fill, encoding) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- var buf = Buffer(size)
- if (fill !== undefined) {
- if (typeof encoding === 'string') {
- buf.fill(fill, encoding)
- } else {
- buf.fill(fill)
- }
- } else {
- buf.fill(0)
- }
- return buf
- }
- SafeBuffer.allocUnsafe = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return Buffer(size)
- }
- SafeBuffer.allocUnsafeSlow = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return buffer.SlowBuffer(size)
- }
- },{"buffer":182}],319:[function(require,module,exports){
- var Buffer = require('safe-buffer').Buffer
- // prototype class for hash functions
- function Hash (blockSize, finalSize) {
- this._block = Buffer.alloc(blockSize)
- this._finalSize = finalSize
- this._blockSize = blockSize
- this._len = 0
- }
- Hash.prototype.update = function (data, enc) {
- if (typeof data === 'string') {
- enc = enc || 'utf8'
- data = Buffer.from(data, enc)
- }
- var block = this._block
- var blockSize = this._blockSize
- var length = data.length
- var accum = this._len
- for (var offset = 0; offset < length;) {
- var assigned = accum % blockSize
- var remainder = Math.min(length - offset, blockSize - assigned)
- for (var i = 0; i < remainder; i++) {
- block[assigned + i] = data[offset + i]
- }
- accum += remainder
- offset += remainder
- if ((accum % blockSize) === 0) {
- this._update(block)
- }
- }
- this._len += length
- return this
- }
- Hash.prototype.digest = function (enc) {
- var rem = this._len % this._blockSize
- this._block[rem] = 0x80
- // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
- // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
- this._block.fill(0, rem + 1)
- if (rem >= this._finalSize) {
- this._update(this._block)
- this._block.fill(0)
- }
- var bits = this._len * 8
- // uint32
- if (bits <= 0xffffffff) {
- this._block.writeUInt32BE(bits, this._blockSize - 4)
- // uint64
- } else {
- var lowBits = (bits & 0xffffffff) >>> 0
- var highBits = (bits - lowBits) / 0x100000000
- this._block.writeUInt32BE(highBits, this._blockSize - 8)
- this._block.writeUInt32BE(lowBits, this._blockSize - 4)
- }
- this._update(this._block)
- var hash = this._hash()
- return enc ? hash.toString(enc) : hash
- }
- Hash.prototype._update = function () {
- throw new Error('_update must be implemented by subclass')
- }
- module.exports = Hash
- },{"safe-buffer":318}],320:[function(require,module,exports){
- var exports = module.exports = function SHA (algorithm) {
- algorithm = algorithm.toLowerCase()
- var Algorithm = exports[algorithm]
- if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
- return new Algorithm()
- }
- exports.sha = require('./sha')
- exports.sha1 = require('./sha1')
- exports.sha224 = require('./sha224')
- exports.sha256 = require('./sha256')
- exports.sha384 = require('./sha384')
- exports.sha512 = require('./sha512')
- },{"./sha":321,"./sha1":322,"./sha224":323,"./sha256":324,"./sha384":325,"./sha512":326}],321:[function(require,module,exports){
- /*
- * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
- * in FIPS PUB 180-1
- * This source code is derived from sha1.js of the same repository.
- * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
- * operation was added.
- */
- var inherits = require('inherits')
- var Hash = require('./hash')
- var Buffer = require('safe-buffer').Buffer
- var K = [
- 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
- ]
- var W = new Array(80)
- function Sha () {
- this.init()
- this._w = W
- Hash.call(this, 64, 56)
- }
- inherits(Sha, Hash)
- Sha.prototype.init = function () {
- this._a = 0x67452301
- this._b = 0xefcdab89
- this._c = 0x98badcfe
- this._d = 0x10325476
- this._e = 0xc3d2e1f0
- return this
- }
- function rotl5 (num) {
- return (num << 5) | (num >>> 27)
- }
- function rotl30 (num) {
- return (num << 30) | (num >>> 2)
- }
- function ft (s, b, c, d) {
- if (s === 0) return (b & c) | ((~b) & d)
- if (s === 2) return (b & c) | (b & d) | (c & d)
- return b ^ c ^ d
- }
- Sha.prototype._update = function (M) {
- var W = this._w
- var a = this._a | 0
- var b = this._b | 0
- var c = this._c | 0
- var d = this._d | 0
- var e = this._e | 0
- for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
- for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
- for (var j = 0; j < 80; ++j) {
- var s = ~~(j / 20)
- var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
- e = d
- d = c
- c = rotl30(b)
- b = a
- a = t
- }
- this._a = (a + this._a) | 0
- this._b = (b + this._b) | 0
- this._c = (c + this._c) | 0
- this._d = (d + this._d) | 0
- this._e = (e + this._e) | 0
- }
- Sha.prototype._hash = function () {
- var H = Buffer.allocUnsafe(20)
- H.writeInt32BE(this._a | 0, 0)
- H.writeInt32BE(this._b | 0, 4)
- H.writeInt32BE(this._c | 0, 8)
- H.writeInt32BE(this._d | 0, 12)
- H.writeInt32BE(this._e | 0, 16)
- return H
- }
- module.exports = Sha
- },{"./hash":319,"inherits":262,"safe-buffer":318}],322:[function(require,module,exports){
- /*
- * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
- * in FIPS PUB 180-1
- * Version 2.1a Copyright Paul Johnston 2000 - 2002.
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- * Distributed under the BSD License
- * See http://pajhome.org.uk/crypt/md5 for details.
- */
- var inherits = require('inherits')
- var Hash = require('./hash')
- var Buffer = require('safe-buffer').Buffer
- var K = [
- 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
- ]
- var W = new Array(80)
- function Sha1 () {
- this.init()
- this._w = W
- Hash.call(this, 64, 56)
- }
- inherits(Sha1, Hash)
- Sha1.prototype.init = function () {
- this._a = 0x67452301
- this._b = 0xefcdab89
- this._c = 0x98badcfe
- this._d = 0x10325476
- this._e = 0xc3d2e1f0
- return this
- }
- function rotl1 (num) {
- return (num << 1) | (num >>> 31)
- }
- function rotl5 (num) {
- return (num << 5) | (num >>> 27)
- }
- function rotl30 (num) {
- return (num << 30) | (num >>> 2)
- }
- function ft (s, b, c, d) {
- if (s === 0) return (b & c) | ((~b) & d)
- if (s === 2) return (b & c) | (b & d) | (c & d)
- return b ^ c ^ d
- }
- Sha1.prototype._update = function (M) {
- var W = this._w
- var a = this._a | 0
- var b = this._b | 0
- var c = this._c | 0
- var d = this._d | 0
- var e = this._e | 0
- for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
- for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
- for (var j = 0; j < 80; ++j) {
- var s = ~~(j / 20)
- var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
- e = d
- d = c
- c = rotl30(b)
- b = a
- a = t
- }
- this._a = (a + this._a) | 0
- this._b = (b + this._b) | 0
- this._c = (c + this._c) | 0
- this._d = (d + this._d) | 0
- this._e = (e + this._e) | 0
- }
- Sha1.prototype._hash = function () {
- var H = Buffer.allocUnsafe(20)
- H.writeInt32BE(this._a | 0, 0)
- H.writeInt32BE(this._b | 0, 4)
- H.writeInt32BE(this._c | 0, 8)
- H.writeInt32BE(this._d | 0, 12)
- H.writeInt32BE(this._e | 0, 16)
- return H
- }
- module.exports = Sha1
- },{"./hash":319,"inherits":262,"safe-buffer":318}],323:[function(require,module,exports){
- /**
- * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
- * in FIPS 180-2
- * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- *
- */
- var inherits = require('inherits')
- var Sha256 = require('./sha256')
- var Hash = require('./hash')
- var Buffer = require('safe-buffer').Buffer
- var W = new Array(64)
- function Sha224 () {
- this.init()
- this._w = W // new Array(64)
- Hash.call(this, 64, 56)
- }
- inherits(Sha224, Sha256)
- Sha224.prototype.init = function () {
- this._a = 0xc1059ed8
- this._b = 0x367cd507
- this._c = 0x3070dd17
- this._d = 0xf70e5939
- this._e = 0xffc00b31
- this._f = 0x68581511
- this._g = 0x64f98fa7
- this._h = 0xbefa4fa4
- return this
- }
- Sha224.prototype._hash = function () {
- var H = Buffer.allocUnsafe(28)
- H.writeInt32BE(this._a, 0)
- H.writeInt32BE(this._b, 4)
- H.writeInt32BE(this._c, 8)
- H.writeInt32BE(this._d, 12)
- H.writeInt32BE(this._e, 16)
- H.writeInt32BE(this._f, 20)
- H.writeInt32BE(this._g, 24)
- return H
- }
- module.exports = Sha224
- },{"./hash":319,"./sha256":324,"inherits":262,"safe-buffer":318}],324:[function(require,module,exports){
- /**
- * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
- * in FIPS 180-2
- * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- *
- */
- var inherits = require('inherits')
- var Hash = require('./hash')
- var Buffer = require('safe-buffer').Buffer
- var K = [
- 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
- 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
- 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
- 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
- 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
- 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
- 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
- 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
- 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
- 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
- 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
- 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
- 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
- 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
- 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
- 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
- ]
- var W = new Array(64)
- function Sha256 () {
- this.init()
- this._w = W // new Array(64)
- Hash.call(this, 64, 56)
- }
- inherits(Sha256, Hash)
- Sha256.prototype.init = function () {
- this._a = 0x6a09e667
- this._b = 0xbb67ae85
- this._c = 0x3c6ef372
- this._d = 0xa54ff53a
- this._e = 0x510e527f
- this._f = 0x9b05688c
- this._g = 0x1f83d9ab
- this._h = 0x5be0cd19
- return this
- }
- function ch (x, y, z) {
- return z ^ (x & (y ^ z))
- }
- function maj (x, y, z) {
- return (x & y) | (z & (x | y))
- }
- function sigma0 (x) {
- return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
- }
- function sigma1 (x) {
- return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
- }
- function gamma0 (x) {
- return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
- }
- function gamma1 (x) {
- return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
- }
- Sha256.prototype._update = function (M) {
- var W = this._w
- var a = this._a | 0
- var b = this._b | 0
- var c = this._c | 0
- var d = this._d | 0
- var e = this._e | 0
- var f = this._f | 0
- var g = this._g | 0
- var h = this._h | 0
- for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
- for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
- for (var j = 0; j < 64; ++j) {
- var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
- var T2 = (sigma0(a) + maj(a, b, c)) | 0
- h = g
- g = f
- f = e
- e = (d + T1) | 0
- d = c
- c = b
- b = a
- a = (T1 + T2) | 0
- }
- this._a = (a + this._a) | 0
- this._b = (b + this._b) | 0
- this._c = (c + this._c) | 0
- this._d = (d + this._d) | 0
- this._e = (e + this._e) | 0
- this._f = (f + this._f) | 0
- this._g = (g + this._g) | 0
- this._h = (h + this._h) | 0
- }
- Sha256.prototype._hash = function () {
- var H = Buffer.allocUnsafe(32)
- H.writeInt32BE(this._a, 0)
- H.writeInt32BE(this._b, 4)
- H.writeInt32BE(this._c, 8)
- H.writeInt32BE(this._d, 12)
- H.writeInt32BE(this._e, 16)
- H.writeInt32BE(this._f, 20)
- H.writeInt32BE(this._g, 24)
- H.writeInt32BE(this._h, 28)
- return H
- }
- module.exports = Sha256
- },{"./hash":319,"inherits":262,"safe-buffer":318}],325:[function(require,module,exports){
- var inherits = require('inherits')
- var SHA512 = require('./sha512')
- var Hash = require('./hash')
- var Buffer = require('safe-buffer').Buffer
- var W = new Array(160)
- function Sha384 () {
- this.init()
- this._w = W
- Hash.call(this, 128, 112)
- }
- inherits(Sha384, SHA512)
- Sha384.prototype.init = function () {
- this._ah = 0xcbbb9d5d
- this._bh = 0x629a292a
- this._ch = 0x9159015a
- this._dh = 0x152fecd8
- this._eh = 0x67332667
- this._fh = 0x8eb44a87
- this._gh = 0xdb0c2e0d
- this._hh = 0x47b5481d
- this._al = 0xc1059ed8
- this._bl = 0x367cd507
- this._cl = 0x3070dd17
- this._dl = 0xf70e5939
- this._el = 0xffc00b31
- this._fl = 0x68581511
- this._gl = 0x64f98fa7
- this._hl = 0xbefa4fa4
- return this
- }
- Sha384.prototype._hash = function () {
- var H = Buffer.allocUnsafe(48)
- function writeInt64BE (h, l, offset) {
- H.writeInt32BE(h, offset)
- H.writeInt32BE(l, offset + 4)
- }
- writeInt64BE(this._ah, this._al, 0)
- writeInt64BE(this._bh, this._bl, 8)
- writeInt64BE(this._ch, this._cl, 16)
- writeInt64BE(this._dh, this._dl, 24)
- writeInt64BE(this._eh, this._el, 32)
- writeInt64BE(this._fh, this._fl, 40)
- return H
- }
- module.exports = Sha384
- },{"./hash":319,"./sha512":326,"inherits":262,"safe-buffer":318}],326:[function(require,module,exports){
- var inherits = require('inherits')
- var Hash = require('./hash')
- var Buffer = require('safe-buffer').Buffer
- var K = [
- 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
- 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
- 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
- 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
- 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
- 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
- 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
- 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
- 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
- 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
- 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
- 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
- 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
- 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
- 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
- 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
- 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
- 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
- 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
- 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
- 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
- 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
- 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
- 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
- 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
- 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
- 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
- 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
- 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
- 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
- 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
- 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
- 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
- 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
- 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
- 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
- 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
- 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
- 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
- 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
- ]
- var W = new Array(160)
- function Sha512 () {
- this.init()
- this._w = W
- Hash.call(this, 128, 112)
- }
- inherits(Sha512, Hash)
- Sha512.prototype.init = function () {
- this._ah = 0x6a09e667
- this._bh = 0xbb67ae85
- this._ch = 0x3c6ef372
- this._dh = 0xa54ff53a
- this._eh = 0x510e527f
- this._fh = 0x9b05688c
- this._gh = 0x1f83d9ab
- this._hh = 0x5be0cd19
- this._al = 0xf3bcc908
- this._bl = 0x84caa73b
- this._cl = 0xfe94f82b
- this._dl = 0x5f1d36f1
- this._el = 0xade682d1
- this._fl = 0x2b3e6c1f
- this._gl = 0xfb41bd6b
- this._hl = 0x137e2179
- return this
- }
- function Ch (x, y, z) {
- return z ^ (x & (y ^ z))
- }
- function maj (x, y, z) {
- return (x & y) | (z & (x | y))
- }
- function sigma0 (x, xl) {
- return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
- }
- function sigma1 (x, xl) {
- return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
- }
- function Gamma0 (x, xl) {
- return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
- }
- function Gamma0l (x, xl) {
- return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
- }
- function Gamma1 (x, xl) {
- return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
- }
- function Gamma1l (x, xl) {
- return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
- }
- function getCarry (a, b) {
- return (a >>> 0) < (b >>> 0) ? 1 : 0
- }
- Sha512.prototype._update = function (M) {
- var W = this._w
- var ah = this._ah | 0
- var bh = this._bh | 0
- var ch = this._ch | 0
- var dh = this._dh | 0
- var eh = this._eh | 0
- var fh = this._fh | 0
- var gh = this._gh | 0
- var hh = this._hh | 0
- var al = this._al | 0
- var bl = this._bl | 0
- var cl = this._cl | 0
- var dl = this._dl | 0
- var el = this._el | 0
- var fl = this._fl | 0
- var gl = this._gl | 0
- var hl = this._hl | 0
- for (var i = 0; i < 32; i += 2) {
- W[i] = M.readInt32BE(i * 4)
- W[i + 1] = M.readInt32BE(i * 4 + 4)
- }
- for (; i < 160; i += 2) {
- var xh = W[i - 15 * 2]
- var xl = W[i - 15 * 2 + 1]
- var gamma0 = Gamma0(xh, xl)
- var gamma0l = Gamma0l(xl, xh)
- xh = W[i - 2 * 2]
- xl = W[i - 2 * 2 + 1]
- var gamma1 = Gamma1(xh, xl)
- var gamma1l = Gamma1l(xl, xh)
- // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
- var Wi7h = W[i - 7 * 2]
- var Wi7l = W[i - 7 * 2 + 1]
- var Wi16h = W[i - 16 * 2]
- var Wi16l = W[i - 16 * 2 + 1]
- var Wil = (gamma0l + Wi7l) | 0
- var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
- Wil = (Wil + gamma1l) | 0
- Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
- Wil = (Wil + Wi16l) | 0
- Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
- W[i] = Wih
- W[i + 1] = Wil
- }
- for (var j = 0; j < 160; j += 2) {
- Wih = W[j]
- Wil = W[j + 1]
- var majh = maj(ah, bh, ch)
- var majl = maj(al, bl, cl)
- var sigma0h = sigma0(ah, al)
- var sigma0l = sigma0(al, ah)
- var sigma1h = sigma1(eh, el)
- var sigma1l = sigma1(el, eh)
- // t1 = h + sigma1 + ch + K[j] + W[j]
- var Kih = K[j]
- var Kil = K[j + 1]
- var chh = Ch(eh, fh, gh)
- var chl = Ch(el, fl, gl)
- var t1l = (hl + sigma1l) | 0
- var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
- t1l = (t1l + chl) | 0
- t1h = (t1h + chh + getCarry(t1l, chl)) | 0
- t1l = (t1l + Kil) | 0
- t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
- t1l = (t1l + Wil) | 0
- t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
- // t2 = sigma0 + maj
- var t2l = (sigma0l + majl) | 0
- var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
- hh = gh
- hl = gl
- gh = fh
- gl = fl
- fh = eh
- fl = el
- el = (dl + t1l) | 0
- eh = (dh + t1h + getCarry(el, dl)) | 0
- dh = ch
- dl = cl
- ch = bh
- cl = bl
- bh = ah
- bl = al
- al = (t1l + t2l) | 0
- ah = (t1h + t2h + getCarry(al, t1l)) | 0
- }
- this._al = (this._al + al) | 0
- this._bl = (this._bl + bl) | 0
- this._cl = (this._cl + cl) | 0
- this._dl = (this._dl + dl) | 0
- this._el = (this._el + el) | 0
- this._fl = (this._fl + fl) | 0
- this._gl = (this._gl + gl) | 0
- this._hl = (this._hl + hl) | 0
- this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
- this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
- this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
- this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
- this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
- this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
- this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
- this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
- }
- Sha512.prototype._hash = function () {
- var H = Buffer.allocUnsafe(64)
- function writeInt64BE (h, l, offset) {
- H.writeInt32BE(h, offset)
- H.writeInt32BE(l, offset + 4)
- }
- writeInt64BE(this._ah, this._al, 0)
- writeInt64BE(this._bh, this._bl, 8)
- writeInt64BE(this._ch, this._cl, 16)
- writeInt64BE(this._dh, this._dl, 24)
- writeInt64BE(this._eh, this._el, 32)
- writeInt64BE(this._fh, this._fl, 40)
- writeInt64BE(this._gh, this._gl, 48)
- writeInt64BE(this._hh, this._hl, 56)
- return H
- }
- module.exports = Sha512
- },{"./hash":319,"inherits":262,"safe-buffer":318}],327:[function(require,module,exports){
- (function (process,Buffer,__dirname){
- // We are modularizing this manually because the current modularize setting in Emscripten has some issues:
- // https://github.com/kripken/emscripten/issues/5820
- // In addition, When you use emcc's modularization, it still expects to export a global object called `Module`,
- // which is able to be used/called before the WASM is loaded.
- // The modularization below exports a promise that loads and resolves to the actual sql.js module.
- // That way, this module can't be used before the WASM is finished loading.
- // We are going to define a function that a user will call to start loading initializing our Sql.js library
- // However, that function might be called multiple times, and on subsequent calls, we don't actually want it to instantiate a new instance of the Module
- // Instead, we want to return the previously loaded module
- // TODO: Make this not declare a global if used in the browser
- var initSqlJsPromise = undefined;
- var initSqlJs = function (moduleConfig) {
- if (initSqlJsPromise){
- return initSqlJsPromise;
- }
- // If we're here, we've never called this function before
- initSqlJsPromise = new Promise((resolveModule, reject) => {
- // We are modularizing this manually because the current modularize setting in Emscripten has some issues:
- // https://github.com/kripken/emscripten/issues/5820
- // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add
- // properties to it, like `preRun`, `postRun`, etc
- // We are using that to get notified when the WASM has finished loading.
- // Only then will we return our promise
- // If they passed in a moduleConfig object, use that
- // Otherwise, initialize Module to the empty object
- var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {};
- // EMCC only allows for a single onAbort function (not an array of functions)
- // So if the user defined their own onAbort function, we remember it and call it
- var originalOnAbortFunction = Module['onAbort'];
- Module['onAbort'] = function (errorThatCausedAbort) {
- reject(new Error(errorThatCausedAbort));
- if (originalOnAbortFunction){
- originalOnAbortFunction(errorThatCausedAbort);
- }
- };
- Module['postRun'] = Module['postRun'] || [];
- Module['postRun'].push(function () {
- // When Emscripted calls postRun, this promise resolves with the built Module
- resolveModule(Module);
- });
- // There is a section of code in the emcc-generated code below that looks like this:
- // (Note that this is lowercase `module`)
- // if (typeof module !== 'undefined') {
- // module['exports'] = Module;
- // }
- // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js!
- // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags,
- // but that carries with it additional unnecessary baggage/bugs we don't want either.
- // So, we have three options:
- // 1) We undefine `module`
- // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later
- // 3) We write a script to remove those lines of code as part of the Make process.
- //
- // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward
- // of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future.
- // That's a nice side effect since we're handling the modularization efforts ourselves
- module = undefined;
-
- // The emcc-generated code and shell-post.js code goes below,
- // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort
- var aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {});
- var wa=function(){var a;var b=h(4);var c={};var d=function(){function a(a,b){this.ga=a;this.db=b;this.oa=1;this.Ha=[]}a.prototype.bind=function(a){if(!this.ga)throw"Statement closed";this.reset();return Array.isArray(a)?this.pb(a):this.qb(a)};a.prototype.step=function(){var a;if(!this.ga)throw"Statement closed";this.oa=1;switch(a=fc(this.ga)){case c.lb:return!0;case c.DONE:return!1;default:return this.db.handleError(a)}};a.prototype.wb=function(a){null==a&&(a=this.oa++);return hc(this.ga,a)};a.prototype.xb=
- function(a){null==a&&(a=this.oa++);return ic(this.ga,a)};a.prototype.getBlob=function(a){var b;null==a&&(a=this.oa++);var c=jc(this.ga,a);var d=kc(this.ga,a);var e=new Uint8Array(c);for(a=b=0;0<=c?b<c:b>c;a=0<=c?++b:--b)e[a]=l[d+a];return e};a.prototype.get=function(a){var b,d;null!=a&&this.bind(a)&&this.step();var e=[];a=b=0;for(d=pb(this.ga);0<=d?b<d:b>d;a=0<=d?++b:--b)switch(lc(this.ga,a)){case c.kb:case c.FLOAT:e.push(this.wb(a));break;case c.mb:e.push(this.xb(a));break;case c.cb:e.push(this.getBlob(a));
- break;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,b;var c=[];var d=a=0;for(b=pb(this.ga);0<=b?a<b:a>b;d=0<=b?++a:--a)c.push(mc(this.ga,d));return c};a.prototype.getAsObject=function(a){var b,c;var d=this.get(a);var e=this.getColumnNames();var g={};a=b=0;for(c=e.length;b<c;a=++b){var Oa=e[a];g[Oa]=d[a]}return g};a.prototype.run=function(a){null!=a&&this.bind(a);this.step();return this.reset()};a.prototype.tb=function(a,b){var c;null==b&&(b=this.oa++);a=ba(a);this.Ha.push(c=
- ca(a));this.db.handleError(da(this.ga,b,c,a.length-1,0))};a.prototype.ob=function(a,b){var c;null==b&&(b=this.oa++);this.Ha.push(c=ca(a));this.db.handleError(Pa(this.ga,b,c,a.length,0))};a.prototype.sb=function(a,b){null==b&&(b=this.oa++);this.db.handleError((a===(a|0)?nc:oc)(this.ga,b,a))};a.prototype.rb=function(a){null==a&&(a=this.oa++);Pa(this.ga,a,0,0,0)};a.prototype.Ta=function(a,b){null==b&&(b=this.oa++);switch(typeof a){case "string":this.tb(a,b);break;case "number":case "boolean":this.sb(a+
- 0,b);break;case "object":if(null===a)this.rb(b);else if(null!=a.length)this.ob(a,b);else throw"Wrong API use : tried to bind a value of an unknown type ("+a+").";}};a.prototype.qb=function(a){var b;for(b in a){var c=a[b];var d=pc(this.ga,b);0!==d&&this.Ta(c,d)}return!0};a.prototype.pb=function(a){var b,c;var d=b=0;for(c=a.length;b<c;d=++b){var e=a[d];this.Ta(e,d+1)}return!0};a.prototype.reset=function(){this.freemem();return qc(this.ga)===c.Aa&&rc(this.ga)===c.Aa};a.prototype.freemem=function(){for(var a;a=
- this.Ha.pop();)fa(a);return null};a.prototype.free=function(){this.freemem();var a=sc(this.ga)===c.Aa;delete this.db.Ea[this.ga];this.ga=ea;return a};return a}();var e=function(){function a(a){this.filename="dbfile_"+(4294967295*Math.random()>>>0);if(null!=a){var c=this.filename,d=c?m("/",c):"/";c=ia(!0,!0);d=ja(d,(void 0!==c?c:438)&4095|32768,0);if(a){if("string"===typeof a){for(var e=Array(a.length),k=0,Oa=a.length;k<Oa;++k)e[k]=a.charCodeAt(k);a=e}ka(d,c|146);e=p(d,"w");la(e,a,0,a.length,0,void 0);
- ma(e);ka(d,c)}}this.handleError(g(this.filename,b));this.db=q(b,"i32");tc(this.db);this.Ea={};this.qa={}}a.prototype.run=function(a,c){if(!this.db)throw"Database closed";c?(a=this.prepare(a,c),a.step(),a.free()):this.handleError(n(this.db,a,0,0,b));return this};a.prototype.exec=function(a){if(!this.db)throw"Database closed";var c=na();var e=oa(a)+1;var g=h(e);r(a,l,g,e);a=g;e=h(4);for(g=[];q(a,"i8")!==ea;){pa(b);pa(e);this.handleError(ha(this.db,a,-1,b,e));var k=q(b,"i32");a=q(e,"i32");if(k!==ea){var n=
- new d(k,this);for(k=null;n.step();)null===k&&(k={columns:n.getColumnNames(),values:[]},g.push(k)),k.values.push(n.get());n.free()}}qa(c);return g};a.prototype.each=function(a,b,c,d){"function"===typeof b&&(d=c,c=b,b=void 0);for(a=this.prepare(a,b);a.step();)c(a.getAsObject());a.free();if("function"===typeof d)return d()};a.prototype.prepare=function(a,c){pa(b);this.handleError(A(this.db,a,-1,b,ea));a=q(b,"i32");if(a===ea)throw"Nothing to prepare";var e=new d(a,this);null!=c&&e.bind(c);return this.Ea[a]=
- e};a.prototype["export"]=function(){var a;var c=this.Ea;for(e in c){var d=c[e];d.free()}d=this.qa;for(e in d)c=d[e],t[c-ra]=null;this.qa={};this.handleError(k(this.db));d=this.filename;var e=e={encoding:"binary"};e.flags=e.flags||"r";e.encoding=e.encoding||"binary";if("utf8"!==e.encoding&&"binary"!==e.encoding)throw Error('Invalid encoding type "'+e.encoding+'"');c=p(d,e.flags);d=sa(d).size;var n=new Uint8Array(d);ta(c,n,0,d,0);"utf8"===e.encoding?a=u(n,0):"binary"===e.encoding&&(a=n);ma(c);this.handleError(g(this.filename,
- b));this.db=q(b,"i32");return a};a.prototype.close=function(){var a;var b=this.Ea;for(a in b){var c=b[a];c.free()}c=this.qa;for(a in c)b=c[a],t[b-ra]=null;this.qa={};this.handleError(k(this.db));ua("/"+this.filename);return this.db=null};a.prototype.handleError=function(a){if(a===c.Aa)return null;a=uc(this.db);throw Error(a);};a.prototype.getRowsModified=function(){return v(this.db)};a.prototype.create_function=function(a,b){a in this.qa&&(t[this.qa[a]-ra]=null,delete this.qa[a]);var d=va(function(a,
- c,d){var e,g;var k=[];for(e=g=0;0<=c?g<c:g>c;e=0<=c?++g:--g){var n=q(d+4*e,"i32");var A=wc(n);e=function(){switch(!1){case 1!==A:return ub;case 2!==A:return ub;case 3!==A:return xc;case 4!==A:return function(a){var b,c;var d=zc(a);var e=Ac(a);a=new Uint8Array(d);for(b=c=0;0<=d?c<d:c>d;b=0<=d?++c:--c)a[b]=l[e+b];return a};default:return function(){return null}}}();e=e(n);k.push(e)}try{var v=b.apply(null,k)}catch(yc){v=yc;vb(a,v,-1);return}switch(typeof v){case "boolean":Bc(a,v?1:0);break;case "number":Cc(a,
- v);break;case "string":Dc(a,v,-1,-1);break;case "object":null===v?wb(a):null!=v.length?(c=ca(v),Ec(a,c,v.length,-1),fa(c)):vb(a,"Wrong API use : tried to return a value of an unknown type ("+v+").",-1);break;default:wb(a)}});this.qa[a]=d;this.handleError(Fc(this.db,a,b.length,c.nb,0,d,0,0,0));return this};return a}();var g=f.cwrap("sqlite3_open","number",["string","number"]);var k=f.cwrap("sqlite3_close_v2","number",["number"]);var n=f.cwrap("sqlite3_exec","number",["number","string","number","number",
- "number"]);f.cwrap("sqlite3_free","",["number"]);var v=f.cwrap("sqlite3_changes","number",["number"]);var A=f.cwrap("sqlite3_prepare_v2","number",["number","string","number","number","number"]);var ha=f.cwrap("sqlite3_prepare_v2","number",["number","number","number","number","number"]);var da=f.cwrap("sqlite3_bind_text","number",["number","number","number","number","number"]);var Pa=f.cwrap("sqlite3_bind_blob","number",["number","number","number","number","number"]);var oc=f.cwrap("sqlite3_bind_double",
- "number",["number","number","number"]);var nc=f.cwrap("sqlite3_bind_int","number",["number","number","number"]);var pc=f.cwrap("sqlite3_bind_parameter_index","number",["number","string"]);var fc=f.cwrap("sqlite3_step","number",["number"]);var uc=f.cwrap("sqlite3_errmsg","string",["number"]);var pb=f.cwrap("sqlite3_data_count","number",["number"]);var hc=f.cwrap("sqlite3_column_double","number",["number","number"]);var ic=f.cwrap("sqlite3_column_text","string",["number","number"]);var kc=f.cwrap("sqlite3_column_blob",
- "number",["number","number"]);var jc=f.cwrap("sqlite3_column_bytes","number",["number","number"]);var lc=f.cwrap("sqlite3_column_type","number",["number","number"]);var mc=f.cwrap("sqlite3_column_name","string",["number","number"]);var rc=f.cwrap("sqlite3_reset","number",["number"]);var qc=f.cwrap("sqlite3_clear_bindings","number",["number"]);var sc=f.cwrap("sqlite3_finalize","number",["number"]);var Fc=f.cwrap("sqlite3_create_function_v2","number","number string number number number number number number number".split(" "));
- var wc=f.cwrap("sqlite3_value_type","number",["number"]);var zc=f.cwrap("sqlite3_value_bytes","number",["number"]);var xc=f.cwrap("sqlite3_value_text","string",["number"]);f.cwrap("sqlite3_value_int","number",["number"]);var Ac=f.cwrap("sqlite3_value_blob","number",["number"]);var ub=f.cwrap("sqlite3_value_double","number",["number"]);var Cc=f.cwrap("sqlite3_result_double","",["number","number"]);var wb=f.cwrap("sqlite3_result_null","",["number"]);var Dc=f.cwrap("sqlite3_result_text","",["number",
- "string","number","number"]);var Ec=f.cwrap("sqlite3_result_blob","",["number","number","number","number"]);var Bc=f.cwrap("sqlite3_result_int","",["number","number"]);f.cwrap("sqlite3_result_int64","",["number","number"]);var vb=f.cwrap("sqlite3_result_error","",["number","string","number"]);var tc=f.cwrap("RegisterExtensionFunctions","number",["number"]);this.SQL={Database:e};for(a in this.SQL)f[a]=this.SQL[a];var ea=0;c.Aa=0;c.Dd=1;c.Wd=2;c.ge=3;c.Gb=4;c.Ib=5;c.Zd=6;c.NOMEM=7;c.je=8;c.Xd=9;c.Yd=
- 10;c.Lb=11;c.NOTFOUND=12;c.Vd=13;c.Jb=14;c.he=15;c.EMPTY=16;c.ke=17;c.le=18;c.Kb=19;c.$d=20;c.be=21;c.ce=22;c.Hb=23;c.Ud=24;c.ie=25;c.de=26;c.ee=27;c.me=28;c.lb=100;c.DONE=101;c.kb=1;c.FLOAT=2;c.mb=3;c.cb=4;c.fe=5;c.nb=1}.bind(this);f.preRun=f.preRun||[];f.preRun.push(wa);var xa={},w;for(w in f)f.hasOwnProperty(w)&&(xa[w]=f[w]);f.arguments=[];f.thisProgram="./this.program";f.quit=function(a,b){throw b;};f.preRun=[];f.postRun=[];var ya=!1,x=!1,y=!1,za=!1;ya="object"===typeof window;
- x="function"===typeof importScripts;y="object"===typeof process&&"function"===typeof require&&!ya&&!x;za=!ya&&!y&&!x;var z="";
- if(y){z=__dirname+"/";var Aa,Ba;f.read=function(a,b){var c=B(a);c||(Aa||(Aa=require("fs")),Ba||(Ba=require("path")),a=Ba.normalize(a),c=Aa.readFileSync(a));return b?c:c.toString()};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1<process.argv.length&&(f.thisProgram=process.argv[1].replace(/\\/g,"/"));f.arguments=process.argv.slice(2);"undefined"!==typeof module&&(module.exports=f);process.on("unhandledRejection",C);f.quit=function(a){process.exit(a)};
- f.inspect=function(){return"[Emscripten Module object]"}}else if(za)"undefined"!=typeof read&&(f.read=function(a){var b=B(a);return b?Ca(b):read(a)}),f.readBinary=function(a){var b;if(b=B(a))return b;if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));b=read(a,"binary");assert("object"===typeof b);return b},"undefined"!=typeof scriptArgs?f.arguments=scriptArgs:"undefined"!=typeof arguments&&(f.arguments=arguments),"function"===typeof quit&&(f.quit=function(a){quit(a)});else if(ya||
- x)x?z=self.location.href:document.currentScript&&(z=document.currentScript.src),z=0!==z.indexOf("blob:")?z.substr(0,z.lastIndexOf("/")+1):"",f.read=function(a){try{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText}catch(c){if(a=B(a))return Ca(a);throw c;}},x&&(f.readBinary=function(a){try{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}catch(c){if(a=B(a))return a;throw c;}}),f.readAsync=function(a,
- b,c){var d=new XMLHttpRequest;d.open("GET",a,!0);d.responseType="arraybuffer";d.onload=function(){if(200==d.status||0==d.status&&d.response)b(d.response);else{var e=B(a);e?b(e.buffer):c()}};d.onerror=c;d.send(null)},f.setWindowTitle=function(a){document.title=a};var Da=f.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),Ea=f.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||Da);
- for(w in xa)xa.hasOwnProperty(w)&&(f[w]=xa[w]);xa=void 0;function Fa(a){var b=D[Ga>>2];a=b+a+15&-16;if(a<=Ha())D[Ga>>2]=a;else if(!Ia(a))return 0;return b}var ra=1,t=Array(64);function va(a){for(var b=0;64>b;b++)if(!t[b])return t[b]=a,ra+b;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.";}var Ja=0;
- function q(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":return l[a>>0];case "i8":return l[a>>0];case "i16":return Ka[a>>1];case "i32":return D[a>>2];case "i64":return D[a>>2];case "float":return La[a>>2];case "double":return Ma[a>>3];default:C("invalid type for getValue: "+b)}return null}var Na=!1;function assert(a,b){a||C("Assertion failed: "+b)}function Qa(a){var b=f["_"+a];assert(b,"Cannot call unknown function "+a+", make sure it is exported");return b}
- function Ra(a,b,c,d){var e={string:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=(a.length<<2)+1;b=h(c);r(a,E,b,c)}return b},array:function(a){var b=h(a.length);l.set(a,b);return b}},g=Qa(a),k=[];a=0;if(d)for(var n=0;n<d.length;n++){var v=e[c[n]];v?(0===a&&(a=na()),k[n]=v(d[n])):k[n]=d[n]}c=g.apply(null,k);c=function(a){return"string"===b?F(a):"boolean"===b?!!a:a}(c);0!==a&&qa(a);return c}
- function pa(a){var b="i32";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":l[a>>0]=0;break;case "i8":l[a>>0]=0;break;case "i16":Ka[a>>1]=0;break;case "i32":D[a>>2]=0;break;case "i64":aa=[0,1<=+Sa(0)?~~+Ta(0)>>>0:0];D[a>>2]=aa[0];D[a+4>>2]=aa[1];break;case "float":La[a>>2]=0;break;case "double":Ma[a>>3]=0;break;default:C("invalid type for setValue: "+b)}}var Ua=0,Va=3;
- function ca(a){var b=Ua;if("number"===typeof a){var c=!0;var d=a}else c=!1,d=a.length;var e;b==Va?e=g:e=[Wa,h,Fa][b](Math.max(d,1));if(c){var g=e;assert(0==(e&3));for(a=e+(d&-4);g<a;g+=4)D[g>>2]=0;for(a=e+d;g<a;)l[g++>>0]=0;return e}a.subarray||a.slice?E.set(a,e):E.set(new Uint8Array(a),e);return e}var Xa="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;
- function u(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.subarray&&Xa)return Xa.decode(a.subarray(b,c));for(d="";b<c;){var e=a[b++];if(e&128){var g=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|g);else{var k=a[b++]&63;e=224==(e&240)?(e&15)<<12|g<<6|k:(e&7)<<18|g<<12|k<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function F(a){return a?u(E,a,void 0):""}
- function r(a,b,c,d){if(!(0<d))return 0;var e=c;d=c+d-1;for(var g=0;g<a.length;++g){var k=a.charCodeAt(g);if(55296<=k&&57343>=k){var n=a.charCodeAt(++g);k=65536+((k&1023)<<10)|n&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e}
- function oa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");function Ya(a){return a.replace(/__Z[\w\d_]+/g,function(a){return a===a?a:a+" ["+a+"]"})}function Za(a){0<a%16777216&&(a+=16777216-a%16777216);return a}var buffer,l,E,Ka,D,La,Ma;
- function $a(){f.HEAP8=l=new Int8Array(buffer);f.HEAP16=Ka=new Int16Array(buffer);f.HEAP32=D=new Int32Array(buffer);f.HEAPU8=E=new Uint8Array(buffer);f.HEAPU16=new Uint16Array(buffer);f.HEAPU32=new Uint32Array(buffer);f.HEAPF32=La=new Float32Array(buffer);f.HEAPF64=Ma=new Float64Array(buffer)}var Ga=60240,ab=f.TOTAL_MEMORY||16777216;5242880>ab&&Ea("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+ab+"! (TOTAL_STACK=5242880)");f.buffer?buffer=f.buffer:buffer=new ArrayBuffer(ab);$a();D[Ga>>2]=5303376;
- function bb(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b();else{var c=b.vb;"number"===typeof c?void 0===b.Ia?f.dynCall_v(c):f.dynCall_vi(c,b.Ia):c(void 0===b.Ia?null:b.Ia)}}}var cb=[],db=[],eb=[],fb=[],gb=!1;function hb(){var a=f.preRun.shift();cb.unshift(a)}var Sa=Math.abs,Ta=Math.ceil,G=0,ib=null,jb=null;f.preloadedImages={};f.preloadedAudios={};var H=null,kb="data:application/octet-stream;base64,";db.push({vb:function(){lb()}});H="data:application/octet-stream;base64,AAAAAAAAAABkCgEQAABzAAQFAABnAAEDHgB6AAQGAABxAAQJAABRAAQKAAB3AAQOAABjAAAIAABvCAAAAAJ1CgAQAAB4EAAAEAFYEAAAAARmAAEBAABlAAECHgBFAAECDgBHAAEDDgBpCgEQAABuAAAEAAAlAAAHAABwEAANAAFUAAALAABTAAAMAAByCgEPAAAAAAAAAAAwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OWFiY2RlZgAAAAAAAAAAAAAAAAAAAAAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6W1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AwAAADQAAAAAAgAAAAAAANF5AADYcwAAQQAAAEEAAABBAAAAQgAAAAAAAAAAAAAAAAAAAAAAAABCAAAAQQAAAEIAAABDAAAAQwAAAEQAAABEAAAARQAAAAMAAAA0AAAAAAIAAAAAAADWeQAA3HMAAEEAAABBAAAAQQAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAQgAAAEEAAABCAAAAQwAAAEMAAABEAAAARAAAAEUAAAADAAAANAAAAAACAAAAAAAA4HkAAOBzAABBAAAAQQAAAEEAAABCAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABBAAAAQgAAAEMAAABDAAAARAAAAEQAAABFAAAAAwAAADQAAAAAAgAAAAAAAO15AADYcwAAQQAAAEEAAABBAAAAQgAAAAAAAAAAAAAAAAAAAAAAAABCAAAAQQAAAEIAAABDAAAAQwAAAEQAAABEAAAARQAAAAQFAwUBBQEFAgUCBQEFAQUEBQMFAQUBBQIFAgUBBQEFnwAAAGwAAAAfAAUBWgAAAVEBAABFAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAEAgABAAACAAAAAAAAAAAAMDAwMDAwMDAwMAAAAAAAAAAoKCgoKCgICAgICAgICAgICAgICAgICAgICgAAAAECAKioqKioqIiIiIiIiIiIiIiIiIiIiIiIiIiIAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAUkVJTkRFWEVERVNDQVBFQUNIRUNLRVlCRUZPUkVJR05PUkVHRVhQTEFJTlNURUFEREFUQUJBU0VMRUNUQUJMRUZUSEVOREVGRVJSQUJMRUxTRVhDTFVERUxFVEVNUE9SQVJZQ09OU1RSQUlOVEVSU0VDVElFU0FWRVBPSU5UT0ZGU0VUUkFOU0FDVElPTkFUVVJBTFRFUkFJU0VYQ0VQVFJJR0dFUkVGRVJFTkNFU1VOSVFVRVJZV0lUSE9VVEVSRUxFQVNFWENMVVNJVkVYSVNUU0FUVEFDSEFWSU5HTE9CRUdJTk5FUkFOR0VCRVRXRUVOT1RISU5HUk9VUFNDQVNDQURFVEFDSENBU0VDT0xMQVRFQ1JFQVRFQ1VSUkVOVF9EQVRFSU1NRURJQVRFSk9JTlNFUlRMSUtFTUFUQ0hQTEFOQUxZWkVQUkFHTUFCT1JUVVBEQVRFVkFMVUVTVklSVFVBTElNSVRXSEVOT1ROVUxMV0hFUkVDVVJTSVZFQUZURVJFTkFNRUFOREVGQVVMVEFVVE9JTkNSRU1FTlRDQVNUQ09MVU1OQ09NTUlUQ09ORkxJQ1RDUk9TU0NVUlJFTlRfVElNRVNUQU1QQVJUSVRJT05ERUZFUlJFRElTVElOQ1REUk9QUkVDRURJTkdGQUlMRklMVEVSRVBMQUNFRk9MTE9XSU5HRlJPTUZVTExJRklTTlVMTE9SREVSRVNUUklDVE9USEVSU09WRVJJR0hUUk9MTEJBQ0tST1dTVU5CT1VOREVEVU5JT05VU0lOR1ZBQ1VVTVZJRVdJTkRPV0JZSU5JVElBTExZUFJJTUFSWQAAAAAAAAAAAAAAAAAAAgACAAgACQAOABAAFAAXABkAGQAdACEAJAApAC4AMAA1ADYAOwA+AEEAQwBFAE4AUQBWAFoAWgBeAGMAagByAHUAewB+AH4AgQCDAIgAjACNAJIAlgCaAJ8ApQCvALIAtwC3ALsAvwDFAM0A0wDYAN0A4ADjAOcA7ADyAPgA+AD+AP8AAwEJAQ0BFAEaASYBLwExATcBOwFAAUIBSQFOAVMBWQFfAWUBagFtAW0BbQFwAXQBdwGAAYQBigGMAZMBlQGXAaABpAGqAbABuAG9Ab0BvQHNAdYB3QHeAeUB6AHxAfUB+gEBAgoCDgISAhQCGgIeAiYCLAIvAjQCPAI8AkACSQJOAlMCWQJcAl8CYgJkAmkCbQIAAAAAAAAAAAcHBQQGBAUDBgcDBgYHBwMIAgYFBAQDCgQHBgkEAgoJBAkEBgIDCwYCBwUFBgcKBgUHBAUHCQYGBgQFBQUHBwYFBwMGBAcGDAkEBgQFBAcGBQYGBwUEBwMCBAUJBQYDBw0CAgQGBggFEQwHCQgIAgQJBAYHCQQEAgYFCAYEBQgEAwkFBQYEBgICCQMHAAAAAOoDAAAAQAAA6wMAAAAABADsAwAAAABAAO0DAAAAAAEA7gMAAAAIAADvAwAAAACAAPADAAAAAAAB8QMAAAAAAALyAwAAAAAAEPMDAAABAAAIAMqaOwDKmjvQBwAA6AMAAPQBAACAsuYOfwAAAAoAAABQwwAA5wMAAOgDAAAAAAAAynsAAEcAAAAAAAAAz3sAAEQAAAAAAAAA1XsAAE8AAAAAAAAA3HsAAFAAAAAAAAAA43sAAFEAAAAAAAAA6HsAAFIAAAAAAAAA7nsAAFMAAAAAAAAA+HsAAEgAAAAAAAAA/nsAAEkAAAAAAAAAA3wAAAAAAAAAAAAACXwAAAAAAAAAAAAAEXwAAEoAAAAAAAAAF3wAAAAAAAAAAAAAHnwAAAAAAAAAAAAAJ3wAAFQAAAAAAAAALnwAAAAAAAAAAAAAOHwAAEUAAAAAAAAAP3wAAFUAAAAAAAAATXwAAFYAAAAAAAAAU3wAAEYAAAAAAAAAWXwAAEsAAAAAAAAAYHwAAEEAAAAAAAAAaHwAAEEAAAAAAAAAbXwAAFcAAAAAAAAAdHwAAAAAAAAAAAAAe3wAAEIAAAAAAAAAh3wAAEwAAAAAAAAAkHwAAFgAAAAAAAAAlnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAANn0AAD99AABIfQAAz3kAAAAAAAAAAAAAU1FMaXRlIGZvcm1hdCAzAAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fAAECAwQFBgcICQoLDA0ODwABAgMEBQYHAAECAwABAABYfwAAYn8AAG1/AAB5fwAAhH8AAIl/AACOfwAAmX8AAKV/AACsfwAAtH8AALx/AADBfwAAx38AANV/AADbfwAA5X8AAOp/AADvfwAA8n8AAPZ/AAD8fwAABoAAAA2AAAAUgAAAG4AAACKAAAArgAAANoAAAD+AAABFgAAAT4AAAFmAAABegAAAaIAAAHOAAAB4gAAAf4AAAIWAAACLgAAAkYAAAJeAAACigAAArYAAALCAAAC0gAAAvIAAAMWAAADLgAAA1YAAAOKAAADpgAAA8YAAAPSAAAD3gAAA+oAAAP2AAAAAgQAAA4EAAA2BAAAYgQAAHoEAACOBAAAtgQAAN4EAAECBAABJgQAAUIEAAF2BAABogQAAbYEAAHWBAAB7gQAAgoEAAIeBAACQgQAAlYEAAJ6BAACjgQAAqIEAAK6BAAC2gQAAwIEAAMiBAADPgQAA3IEAAOGBAADtgQAA9YEAAPyBAAADggAACoIAABOCAAAeggAAJIIAAC+CAAA5ggAAQIIAAEaCAABQggAAW4IAAF+CAABoggAAcYIAAHiCAACCggAAiYIAAJOCAACaggAAo4IAAK2CAAC1ggAAvYIAAMuCAADZggAA5IIAAPGCAAD8ggAAAoMAAA6DAAAWgwAAH4MAACiDAAAvgwAANoMAAEGDAABPgwAAWoMAAGKDAABogwAAcIMAAHiDAACFgwAAj4MAAJmDAACmgwAAr4MAALeDAAC9gwAAyYMAANWDAADdgwAA6YMAAPaDAAAAhAAACoQAAA+EAAAbhAAAJ4QAADGEAAA3hAAAQYQAAEiEAABUhAAAX4QAAGeEAABwhAAAeYQAAIKEAACJhAAAk4QAAJqEAACihAAAq4QAALGEAAC5hAAAwYQAAMuEAADUhAAA2oQAAOWEAADqhAAA8oQAAAAAAAAAAAAAAAAAAEmFAABShQAAWYUAAF+FAAAAAQIDBAYICAAAAAAAAAEBAgIDAwQEBQUGBgcHCAgJCQoKCwsMDA0NDg4PDxAQERESEhMTFBQVFRYWFxcYGBkZGhobGxwcHR0eHh8fICAhISIiIyMkJCUlJiYnJygoKSkqKisrLCwtLS4uLy8wMDExMjIzMzQ0NTU2Njc3ODg5OQAAAgADAAUABgAHAAgACQDBjAAAyIwAANCMAADUjAAA3YwAAOSMAAAAAAAAAAAAABwbGxsbGxsbGwcHGwcHGxsbGxsbGxsbGxsbGxsbGxsbBw8IBQQWGAgREhUUFwsaEAMDAwMDAwMDAwMFEwwODQYFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEJGxsbAQgBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABARsKGxkbAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJLb39JbB0AAFMATT8AJSFODwB+Vjl4gBMAAIUAg3sAFmIACQAAdUcARQYAMV+MAIFqAAA2AG0YABEAhjgXGgU6h2UAAItwPoo7c0EAYABpLQBoAAAAZGFma3cOH3YAUQCIdIk9fIRQeVgeVQAAYyN9egCCAAApAFtZWgAUV3FSAFxtmSc6KXVDIX0+Py8CQZsmGIMQb5cLfJhYeRUVK3CCWw2PRUR7Bhxsb5pHgU12dAMZUW8OCRQgjC8Fb1YwkFmLIx8olWoRXgiIeC8uBB5GG3qEUI2WMxNCco5IHV0scXcPMSQ8CiVvXl5SVAeFLX5VKp5JU4dvEjKKSlqdbwxMS1d/iU5PnD0iQIBzAAAAAAAAAAAEAAAAAAAAAAAAAgAAAAAAAA0AAAAAAAAAFQAADAAAAAAAAAcAAAAAAAAAAAAAAAAzHAAAJgAAACwAAAADAABDAUIAAAAkAC8AAAAAADAyTAAAKgA8AAAAKwAQNwoAAAAAAAAAC0hdAAAIAG4AZyg1RgByAEo0AABcJy4ARCBUACIbGRJeAEBPAAAAAAAAAAEBAQAQAAEAAQEBAwMBAQMSAwEJCQkJCQkJCQkJAQEBAQEBAQEBIwsmJgEBAwMDAwMLCwsLCwsBAQEBAAAAAAICCAAQEBAQABAQAAAQEAAAAgICAAASIAAAABAQACYmJiYmJiYmJiYAEgAAEAAAAAAAAAAAABAQAAAAAAAAEAAABAQAABAQAAAQAAAAAAAQAAAGEAAEGgAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAo5AAAAAUAAAIAAAAAAAAALKQAAABlQAAAAAAAAAAAAC+kAAAAhQAAACAAAAAAAAAzpAAAAMQLgEAAAAAAAAAANuQAAAElQAAAAAAAAAAAADmkAAABZQAAAAAAAAAAAAA8pAAAAYCAAAAAAAAAAAAAAaRAAACFAAAAAAgAAAAAAAWkQAAAhQAABAAAAAAAAAAK5EAAAcQGgIAAAAAAAAAADqRAAAIEAAAAAAAAAAAAABKkQAAAhQAAIAAAAAAAAAAWJEAAAAYAAAPAAAAAAAAAGWRAAAKESMDAAAAAAAAAABzkQAAC5UtAQAAAAAAAAAAhpEAAAIUAAAAAAgAAAAAAJmRAAACFAAAAAEAAAAAAACwkQAADBQAAAAAAAAAAAAAuZEAAA0RHwQAAAAAAAAAAMuRAAAOYQAIAAAAAAAAAADckQAAAhQAAABAAAAAAAAA6ZEAAAAYAAAAAAAAAAAAAPiRAAACFAAABAAAAAAAAAAKkgAAAhQAAAgAAAAAAAAAFJIAAAIUAAAAAgAAAAAAAC2SAAAQAwAAAAAAAAAAAABAkgAAEWEPAwAAAAAAAAAAS5IAABJhGgUAAAAAAAAAAFaSAAARYQ8GAQAAAAAAAABikgAAEzEAAAAAAAAAAAAAcpIAABSRAAAAAAAAAAAAAH+SAAAVkAAAAAAAAAAAAACSkgAAAhQAAAAAAAQAAAAApZIAAAIUAAACAAAAAAAAALiSAAAXkAAAAAAAAAAAAADFkgAAGJEAAAAAAAAAAAAA1JIAABkAAAAAAAAAAAAAAN6SAAAbIQAAAAAAAAAAAADnkgAAGJEAAAAAAAAAAAAA8pIAAByUAAAAAAAAAAAAAPySAAACFAAAAAAQAAAAAAAHkwAAEzEAAAAAAAAAAAAAE5MAAAIUAAAABAAAAAAAACSTAAACFAAAACAAAAAAAAA3kwAAAhQAAAAQAAAAAAAAUZMAAAAUAAABAAAAAAAAAGCTAAAeEAAAAAAAAAAAAABukwAAAhQAAEAAAAAAAAAAgZMAAB8CAAAAAAAAAAAAAI+TAAAgEAAAAAAAAAAAAACfkwAAIZUAAAAAAAAAAAAAq5MAACJhCAYAAAAAAAAAALaTAAAiYQgHAQAAAAAAAADCkwAAIxQAAAAAAAAAAAAAzZMAACQEAAAAAAAAAAAAAOKTAAAlEAAAAAAAAAAAAADqkwAAABQAAAYAAAAAAAAA95MAACYAAAAAAAAAAAAAAAqUAAAnASYDAAAAAAAAAAAZlAAAAhQAAAEAAAgAAAAAYJQAAGOUAABnlAAAbZQAAHKUAAB1lAAAf5QAAImUAACPlAAAk5QAAJiUAACdlAAApZQAALCUAADbjwAAs5QAAI+UAACTlAAAuZQAAL6UAADDlAAAx5QAAMuUAADPlAAA1JQAANmUAABjlAAAk5QAAN6UAADllAAA7JQAAGeUAAD0lAAA+pQAAAGVAABjlAAAk5QAAAaVAAALlQAAWOQAABCVAACTlAAAHZUAACWVAAAulQAA25AAADWVAAAAAAAAy5UAANCVAADXlQAA2pUAAN2VAADglQAA45UAAOaVAABglAAA+pQAAO6VAAD2lQAAAAAAADsAOwA7ADsAAAA7ADsAOwAAADsAOwA7ADsAAAAAAAAAOwAAAAAAOwAAAAAAAAA7AAAAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwAAAAAAAAA7ADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7AAAAFgdgBsMHkgWSBYAAygVhBqcGVQdVB1UHVwAAAAAACAFSBFUHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB1UH4gDiAH0BfQEoAcEAgACAAIAAgACAAIAAYQDCAEwBrQEOAm8C0AIxA5IDpgM+BNYEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIE6gRSBEsFXwVfBRkHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB5EHVQdVB1UHVQdVB1UHVQdVB1UHVQdVB1UHVQcgAIEAgQCBAIEAgQAVAJgAKQHuAdYCQQDuAQICAgLuATACMAIwAjACQgFXAjIAXgheCJsAmwCbADkBiAGCAYgBiAHhAeEByADgAawC9gLuAe4B7gHuAe4B7gHuAe4B7gHuAe4B7gHuAe4B7gHuAe4B7gHuAe4B7gEAAwAD7gGmAHkBeQF7AkMDQwN7AuwC2wNeCF4IXgjAAS0ALQCTAeQB9gFqAA0C/AEQAhoC7gHuAe4B7gHuAe4B7gHuAe4BVADuAe4B7gHuAe4B7gHuAe4B7gHuAe4B7gELAQsBCwHuAe4B7gHuAQED7gHuAe4BBADdAe4B7gEUA+4B7gHuAe4B7gHuAe4B7gHXAgUAhwDZA9kD2QPZAwoChwCHAB0DRgFrA9oDyAMMBAwEDgTIA8gDDgTMAzkEXgSqBKoEqgQMBPUC9QKyAwkDSwROBDUFAgUCBWUFZQUCBREFNgWOBX4FKgWoBagFqAWoBQIFqwUqBSoFNgWOBX4FfgUqBQIFqwVBBZoFAgWrBcsFAgWrBQIFqwXLBXwFfAV8BawFywV8BX0FfAWsBXwFfAXLBY8FjwXLBX8FnQV/BZ0FfwWdBX8FnQUCBbYFtgWDBYoFAQYCBYgFgwWUBZcFKgUTBhgGJwYnBjAGMAYwBl4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IPQDVAnYBOATGAAMDGwGoBJoEpgRTBMUEtgTKBMsE0ATRBNgE2gSlBGkE5QTYALoE3wTgBOEEawR/BPoEDQXEBL4ERQZIBjcGswVABvUFRgY+BkIG1gXUBekFTgbgBVQG5gVZBm8G6wXjBfsFOwZVBuoFRwZKBkwGTQYABhAGYgb9BYUGggZzBh4G8gVJBnIGSwZDBmcGCwYmBnsGgAaDBhkGIQaEBlYGhwaIBoEGiQZYBoYGigZeBn4GjQYXBpEGkgYNBpQGlQaTBpgGmgacBpsGnwaeBjEGogapBlEGoAarBjwGrQahBqYGqAavBnQGiwZ6BqwGjAZ4BrIGvgbDBsIGwQbFBroGxgatBskGygbOBs8GzQbRBtMG3wbVBtYG2AbZBtcG2wbdBnwGdQZ3BnkGfQbhBvEGAAcAAAAAAAC4ALgAAwEEAQUBAwEEAQUBsACxALIAswC0ALUAuADQANQA1QC6ABMAvADNAM4AGAHNAN0AFgDDABgAwwDQAB8AwwDNAB0AzQDOAP8AIQAnAMgAyQDKACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AM0A4wDkAOMA5AA7AOMA5AADAQQBBQH8AEEA8QDwALgA8ADfAOAA8AD0APUA+gADAQQBBQETAP0ANgA3ADgAOQA6ALgA/wC4AM0AzgBgAGEAYgBjAGQAZQBmAGcAaABpAGoALgAvADAAMQAuACgBKQFuABsBEwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAYABhAGIAYwBkAGUAZgBnAGgAaQBqAF4AKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAbgBqAEkA+wByAEkAsgCzALQAtQA7ALgAJAFRALoAJwG8ANoAbAATAHIAuAALAMMAuABTALgAVQA2ADcAOAA5AM0AzgB8AJEAkgCTAGAAYQBiAGMAZABlAGYAZwBoAGkAagB4AHkAegB4AGYAUQDjAOQA3AATABAAbQBuAG8AgwCEABoAuAC4APAA5QBgAGEAYgBjAGQAZQBmAGcAaABpAGoA/QArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQBkAGUAZgBnAGgAaQBqAIMAhABqAH8ARQCBAIIAGwFwAHEAcgBzAHQAdQB2AFEATQBMAE8AKAF8ACoBywC4ABMAVAA7AFYAeQB6AFkAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAIwDNAM4AFgBxACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AM0AzgCDAIQAZABlACMBJAFyAEMAJwFCAGwAbQBuAG8AigBxAHwASgA7ALMAuAC1ALgAeQAWAA8BugATALwAuAAUATsAGAC4APEAwwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAkQA7AJMAuAArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQB7AOMA5ABuACgBKQEWABcAuABmAGcAaABpAGoA8ABtAG4AbwBwAMMAzABzAHQAdQAWALgA4gD9ANQAzQDOAH0AbQBuAG8AFgBkAGUAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAOwDjAOQAeQB6ADsAFQEbARMAIQEiATsAFwBMAPAA8QCPAEwASAC9AM0AzgA7AFYA+gBUAFkAVgDLAF8AWQAZASsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AOMA5AC4AG0AbgBvAAwAuABtAG4AbwC4ALgA8ABtAG4AbwC4AMMA1gA7ABsAuADNAM4AbQBuAG8AzQDOALgABwGKAM0AzgC4ACoAFgBgAGEAYgBjAGQAZQBmAGcAaABpAGoACgHjAOQAOwAOARQBXgBCAD8AEwDxABYAGgAXAPAA8QBIADsASQD6APEAbQBuAFIAFgA7AHIA3wDgAPoA/AA7AFsAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOwC4ABoAOwAMAW0AbgBvALgAkQCSAJMAcAA7AMsAcwB0AHUAFQFtAG4AbwDNAM4AwwB9ABUBbQBuAG8AZABlAIsAbQBuAG8A2wC4AGAAYQBiAGMAZABlAGYAZwBoAGkAagBvAG0AbgBvAG0AbgBvAOMA5AATALgAiAC4ABcAbQBuAG8AyADJAMoA8AADAQQBBQHDAIgAkQC4AJMAuAC4AIgA1gArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDNAM4AzQDOAOMA5AC4AOUA4wDkAIMAhAC4ADsA2wC4ANsA8AAjASQBuADwACcBaQBqABYAFwDNAM4AGgC4APsAuADNAM4AuADNAM4AYABhAGIAYwBkAGUAZgBnAGgAaQBqAPsA2wDNAM4AzQDOALgAzQDOABMAuAAQALgAFwDxAG4A2wAVANsAuADxANsAHgEfAcMAuADDAM0AzgDJAMoAzQDOACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ALgAXwAWABcAuAAaABoA3ADjAOQA4wDkAMQAuAAXAPEAGgAaAMMA8QC4APAADADwAE0AGgBPAMMAUAAiAckAygDYALgA2gDDALgAGwBgAGEAYgBjAGQAZQBmAGcAaABpAGoADQHjAOQAKgC4AM0AzgC4ALgAEwDjAOQAwAAXAPAAdADEAEwA4wDkAHgAeQB6APAAPwD+AF8AVgDNAM4AWQDwALgAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAuAANAbgAmQCZAG8AuAAHAAgACQC4AIoAuAC4AMQAuAB4AHkAegC4AIoAzQDOALgAZgC4ALgAzQDOAJwAiADNAM4AzQDOAMYAxwCHAGAAYQBiAGMAZABlAGYAZwBoAGkAagC4AIAAuAC4ALgA/gCFALgA7QATAO8A5QDiABcAJAG4AOIAJwHiAOIAuADNAM4AzQDOAM0AzgC4ACQBEwC4ACcB/AArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDNAM4AuADNAM4AKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAnQCeABoAzQDOAP4AGgD8ALgADwC4ALgAuAAkAbgA/AAnARgAYABhAGIAYwBkAGUAZgBnAGgAaQBqAM0AzgDNAM4AzQDOAM0AzgC4AGAAYQBiAGMAZABlAGYAZwBoAGkAagC4ALgAuAA7ALgAPAC4AOUAuADNAM4AuAACAbgAEwC4ABMAuAD2ALgAAgHNAM4AzQDOAM0AzgDNAM4AzQDOALgAzQDOAM0AzgDNAM4AzQDOAM0AzgAkAeIAlwAnAbgA5AAmAbgAdwC4AM0AzgBuAJYAJgGYALgA8AC4ABYAFwAXABMAuAAaAM0AzgCOAM0AzgDNAM4AuADGAMcAgwCEAM0AzgDNAM4AFgATABgAzQDOACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ALgAbQC4AG0AuAArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQAuAM0AzgDNAM4AzQDOAOgAuAC4ALgAXwC4ABwBHQH0APUA8gBgAGEAYgBjAGQAZQBmAGcAaABpAGoAzQDOAM0AzgDNAM4AuAAWALgAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAGAAXALgAuAAaALgAzQDOAM0AzgC4AB8AbACAABYAegC4ADUAhQAnAM0AzgAWAJcAzQDOAM0AzgBxAHIAFwDNAM4AGgA7ABcAFwCQABoAGgC4ABcAFwATABoAGgAHAAgAGAAXANYAFwAaAD0AGgA7ABcAFwAXABoAGgAaAJEAEwCTADsAuAArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQCRABcAkwBuABoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAFwC4ALgAGgBuALgAuAC4AIYAuAC4ALgAuAC4AG4AuAC4ALgAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAuAC4AIYALAG4APMAuAC4AGAAYQBiAGMAZABlAGYAZwBoAGkAagC4ALgAuAC4ALgA4AC4ABoBEQETABABywC2APMA8wDmANEAFgHzAOcA0AAJARYB6gDqAOoA2QDVADwAEwDzANAA7QDpACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDQAPcAuwCGAPcA9wAmAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkA7QDnAL8AvwAXARcBGgGPAL8AbAAMARYAEwAUAAABFgArAAEBYABhAGIAYwBkAGUAZgBnAGgAaQBqACQA3gCOAOoAEgC/AOEAEgC+AGAAYQBiAGMAZABlAGYAZwBoAGkAagDhAL8A4QA7AOEAAQHqAOoAAAHeAN4AvgDqAJYAPgBHABMBEgG/ABMAFAC+ABYAFgDSAFEAvwC+ANIAvwBsAL4AzwDPAEAAzwAkANcAXgDSAM8A0QB3AM8AZABlAM8AagAwANcAzwBrANIAbQBuAG8ACwELAXIAOwDSAPkAiQBsAPgAvwD5APgAWAD5AI0ARwD4ACsBigCDAIQAFgC/APkAKwHtAFIA7gCWAAYBjABXAIsAkQCSAJMAlACVAF4A+ADuAOwAGQDrAGQAZQDqAMIAGgDBAA0AawAGAG0AbgBvAAgBuQByALkAtwDFALcAywC3AMsAywDFAMsA0wDTAAQAxQADAMsAFgCbAA8AIAHLAF0AIAEdARcAEADLAMsAFwCEAJEAkgCTAJQAlQAAAAEAAgCPAHsABQAYAIcAFAAQAAoACwAMAA0ADgCJAAEAEQCHAJAAEwAUAHsAFgA9AI8AJQB7ADUAbQAeADUAIAA1ADUAhgAiACQAAQAFACgAFgBsAJkAGgBEAEsARAApAIYAbAAYABQAfAATAHYAFwBDABYAQwA7ABYAFgAWABYAQwAcACUAFwCOAEYAFgBHABcAnQAXABcAGgBOABcAFgBRABcAUgAYABYAGACGAFcAFwATABQAXAAWAG0AXgAXABYAIgAiAIgAZABlABoAIgBVACIAJABrAFMAbQBuAG8AIgBaAHIAIgAXAEsASwAsABYAGAAaACIAFwB+ABoAFwAXADsAgwCEABcAFwAaABcAFgALABYAFgAWAEcAFwAXABYAkQCSAJMAlACVABoAFwBSAJoAhgCAAIYAVwCGAA8AAQAtAYYALQFeAC0BLQEtAS0BLQFkAGUALQEtAS0BLQEtAWsALQFtAG4AbwABAAIAcgAtAQUALQEtAS0BLQEKAAsADAANAA4ALQEtAREALQEtAS0BLQETABQALQEWAC0BLQEtAS0BHgAtASAALQGRAJIAkwCUAJUAJAAoAC0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtATsALQEtAS0BLQEtAS0BLQFGAC0BLQEtAUcALQEtAS0BTgAtAS0BUQATABQALQEWAC0BLQEtAS0BLQEtAVwALQEtAS0BLQFeAC0BJAAtAS0BLQFkAGUAZgAtAS0BLQEtAWsALQFtAG4AbwAtAS0BcgAtAS0BLQEtATsALQEtAS0BfgAtAS0BLQEtAYMAhAAtAUcALQEtAS0BLQEtAS0BLQETABQALQEWAC0BLQGRAJIAkwCUAJUALQGaAC0BLQFeAC0BJAAtAS0BLQFkAGUALQEtAS0BLQEtAWsALQFtAG4AbwAtAS0BcgAFAC0BLQEtATsACgALAAwADQAOAC0BLQERAC0BLQEtAUcALQEtAS0BLQEtAS0BLQEtAR4ALQEgAC0BLQGRAJIAkwCUAJUAKAAtAS0BLQFeAC0BLQEtAS0BLQFkAGUALQEtAS0BLQEtAWsALQFtAG4AbwAtAS0BcgAtAS0BLQEtAS0BRgAtAS0BLQEtAS0BLQEtAU4ALQEtAVEALQEtAS0BLQEtAS0BLQEtAS0BLQFcAC0BLQGRAJIAkwCUAJUALQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAX4ALQEtAS0BLQGDAIQALQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BmgAtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEAAAAAAAAAAAAAAAAAABcCKwVwAG0A0QBwAG0A0QCIBAEAAQAcAgIAjAQXAgwFzAS3BCEBgAGGACoAKgCTBX4BzAQJANkE8gDsAQsFkwN1AXsBAgRGAEYAqwECBJQDEQIRAhECdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAfAEIAQgBCAEIAW4ECAEIAXAAbQDRAI0BxgEFAhQC6wEUAtEE0QQUAu8AzgDtAXAAbQDRANAB2wB2AHYAdgB2AG8AiQG4AbwBEAAQAHQAdAB0AHQAcwBzAHIAcgByAHEAnwHLA8sD1gPZA+sAtwVfAW4EowGAAXQAdAB0AHQAcwBzAHIAcgByAHEAnwF0AHQAdAB0AHMAcwByAHIAcgBxAJ8BwQN3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgC4A58BrQMqAbcDrQPIBRwCAgCMBFsEFwKyBaAAIQEGAIYA4AWFAZYBzwNSAQAE2QRRAUEExAVBBHYAdgB2AHYAKgAqAEkBtwO3A7kDdAB0AHQAdABzAHMAcgByAHIAcQCfATcBrgErATcBcQOgAAgBCAGRAYABRAFbBFwEXQQgAQ4CYACfAKEFFAKNAHQAdAB0AHQAcwBzAHIAcgByAHEAnwHbAHcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AHMAcwByAHIAcgBxAJ8BIAEOApMBFQJ5AGYDZgOjAfoACwFQAdsBSwHaAewAoAA/ATwEQgG5BUkBXgEMABcCgAH2AVsEPASzATgBPAR0AHQAdAB0AHMAcwByAHIAcgBxAJ8BFwJEAyoAKgCKAKoBdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYARgBGACABDgKcAZsB4AGxBU8BTwAGANkBdARbBFwEXQT1AXYETgFFAysDzAUAAowEFgJ1BHsAuwAhAYABhgDAAbIBWwRQAF0B8gHZBHQAdAB0AHQAcwBzAHIAcgByAHEAnwF3BFsEdwTLAXcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AJQBCAEIASsDtwX6AXABhAQXAnIAcgByAHEAnwEUAlsEXARdBOcABgLcBdgB1QHUAa8A8QGmAdsAsgRGAEYA0wFbBFwEXQSwAMkAyAB0AHQAdAB0AHMAcwByAHIAcgBxAJ8BFwJbBAgBCAGzATgBWwQRAaMBgAEBAqoFWwRGATwEFAIFAlIAPASnAIQBRQBFAFsEPAQHAv0BPAQ8BAwAhQQ8BKQBdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAAgECARcCWwRcBF0EFQQXAlsEXARdBCsFFwIUAlsEXARdBCgB4wG7BDIDFgTAAUYARgBbBFwEXQQyADIAwAFkAfQBRgBGAM8AFwQgAHQAdAB0AHQAcwBzAHIAcgByAHEAnwHFAQgBCAFbBMIBwQHBA/wBWAOAAQUCBQCEAzYDFALkAbUAWwRZAwQCBQIyA7gD+wEDAFsEtwPPBM8E4gGOAVsERwR3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgBbBBcC7gBbBG8FWwRcBF0EnwC3A7cDuQPnAFsEAwHYAdUB1AE2AVsEXARdBA0ADQApAdMBFAFbBFwEXQScAZsBRwRbBFwEXQSLAWMBdAB0AHQAdABzAHMAcgByAHIAcQCfAdAAWwRcBF0EWwRcBF0ECAEIAYABUQGGA4kBLwNbBFwEXQSdAZ0BnQEUAnAAbQDRADUBhAN3BBcCdwQXAokBhQO6BHcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AA0ADQANAA0ACQEJARcCjwAIAQgBIAEOAhcCXwSQARcCkgEUAv4BsQUAAhQCBgBxAJ8BKwT6BUYARgD6BRcCDwEXAkYARgAXAg0ADQB0AHQAdAB0AHMAcwByAHIAcgBxAJ8BEAEVAQ0ADQANAA0AFwINAA0AgAEXAjABqQFMBBwBXwS4ACEDuQBSAR0BAgL8BXEB1wSeBZ4ERgBGAKkBqAFGAEYAdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAvgApBCsE+wW6AWsA+wWYAQgBCAEIAQgBfwF0BQUBmgFfAIQD5QGeAaUBFAIVBBQCLQFtBC8B6AGxAasFdAV2BRYBFwIWAQgCmwUWBHQAdAB0AHQAcwBzAHIAcgByAHEAnwGpAQgBCAEXBL4ANgA2ABcCIwGAAQgBCAFqAcIDFALsA3gBPAQIAQgBBQQFBMgBFAILAg4BKQQ8BDcANwA8BBQCugF3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgAXAnQFvgAuAWcF0AAXAhUDFgMXAxcCAwIXAisFcwFRAeoA6QDoAMsBAwIPAA8AywHdAcsBywEsACwAiACEAzgAOAA5ADkAoQSGAcUAdAB0AHQAdABzAHMAcgByAHIAcQCfARcCbAMXAroBFwISAWsDKwVlAYABYQGMAJIFsgOvBSsFbgUGANgE1AQkAToAOgA7ADsAPAA8ABcCsAWAARcCBgCPAXcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AD0APQAXAi0ALQB3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgDFBd8BygAuAC4AEwFfAMcBFwLUABcCUQEXAq4FFwKZAQYA8gB0AHQAdAB0AHMAcwByAHIAcgBxAJ8BMAAwADEAMQA+AD4APwA/ABcCdAB0AHQAdABzAHMAcgByAHIAcQCfARcCywEXAm4EFwJ/BBcCjgAXAkAAQAAXAjoFFwLuARcCvgEXAvAEFwI5BQ4ADgBBAEEAfQB9AEIAQgAzADMAFwJDAEMARABEADQANACTAJMAlACUAK0FPQFiAAYAFwLdBOEBFwI7AxcCSwBLAG4EZgDhAWQAFwIUAhcCcAEqBN8FgAEXAk0DNQA1AF0ARwBHAH4AfgAnARAChgEgAQ4CSABIAH8AfwCLAIABJgCAAIAAdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAFwLvARcCvwEXAncAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AOsAfAB8AJIAkgCRAJEAHwEXAv0EFwKFBBcChwGhAAcBzgB9AXQAdAB0AHQAcwBzAHIAcgByAHEAnwGEAIQAgwCDAIEAgQAXAh4AFwJ0AHQAdAB0AHMAcwByAHIAcgBxAJ8BFwLYACYE/AQXAnIBFwKCAIIASgBKABcCkwOFAWwDEQC1Aa0BHwBrA5QDTABMAAoBZQBJAEkAKwArAEMDQgM0AS8ALwBfADkDrwO5AaoD8QDxADEBuwE5AYAB8QBfAEoDSwPBANEBuQRHAe0AtAFfAPMD7wONA2kD7QDxAGsA/wOAAf8DuwOHBXcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AP4DKQP+AzkDiQB3AGwAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgBqA4YFwwFrAPMDOgH5BD4B2gBBAUMBRQHIBLgEuwNKAVMBVAF0AHQAdAB0AHMAcwByAHIAcgBxAJ8BBQUqBewE1QW+BfcEGwEJAjAFdAB0AHQAdABzAHMAcgByAHIAcQCfAacEoASVBJQElgQKAs8F0wDMAYABAAHHAG8B6QRWAcMA1gEzAVgBCwBNAQ0CvQEbBSMFdwHLALcEfwSAAVoBawW8AGgBeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AGoFrAHSBfUALAFcAXwEbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgC9AMYAmgWYBU4AUQCjAFIAiAG3AXAFrQBpAA8CIwAEAJ0AIAV0AHQAdAB0AHMAcwByAHIAcgBxAJ8BEgKlAF0AGAWvAbABqADPAd0AdAB0AHQAdABzAHMAcgByAHIAcQCfAakAxAGqAKABqwB2AXQBtgEkACYFsQDhAGUFVwDKAQwCewU8AQEBaQAPAuMABAC2AM0BoABAAeQAeQGXBNwB5QDLBMoElQHJBBICwgTBA3oBrwSuBDsDTAFnAGcArQSXAQgAwQTeBWgA5wGgARkCGAIZARoBtwOgAeoB9ATwAVwAVQHzAPUEVwH0APMEegAMAlkBtQUDAiABDgIKAGIB8gS0BWAB+AHiBGMAVwVeAPcB8wG3A7cDuQO6AxsAwQNbAeEEwgD7AGYBZwBnAGcBnQQiABoCVgRoAP8AoAEZAhgCHgH8ALcD/gAbApUAkgSLBY0EjAWKBZYAiQWHABcBEQOXAKEBqwTEACIB0gCCAaoEDQGDAaIA/QOFAE0AqAT7A6cDtwO3A7kDugMbAMcFUASiAaQAmQAMAdkApgBbAzIBbgFuAW0B/QBrAdwACwQeA6wAqwNpAA8CmwAEAIoBrgCMAZwAUwAOBNUAVAAmAVUAVgDfAN4AEgIKBJAAJQESAOAAOwHxAAMEeQSyAMkB4gCzACUAIANOAc4B5gBIAdIBtADXAaABWAATABQAWQAYAUYDngC/AFoA1wDeAQwCSQTMAMAA2wNbAJgALgQnAJoALwT4AeYBKADpAc0A+QEEAWkADwLWAAQAjAPBAwYBtwDwABUAhwNnAGcAawAWAD4EFwASAmgAQASgARkCGAIYAEUEtwMZADIEQgRGBAcAIQD/AboAGgDqA4EBXwDcA9oDoAEgAQ4C3gMUBPYAEwT3AN8DHAApAGoADAK8AyoDHQC3A7cDuQO6AxsAEwJpAfgBpwH4AGUD+QD3AdcFbAFRBIkE1gWJBMEDiQSJBIkEiQSJBGcAZwCJBIkEiQSJBIkEaACJBKABGQIYAlAEogG3A4kEDAGJBIkEiQSJBG4BbgFtAf0AawGJBIkEHgOJBIkEiQSJBGkADwKJBAQAiQSJBIkEiQTVAIkEJgGJBLcDtwO5A7oDGwASAiUBiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEoAGJBIkEiQSJBIkEiQSJBNcAiQSJBIkEDAKJBIkEiQSYAIkEiQSaAGkADwKJBAQAiQSJBIkEiQSJBIkE1gCJBIkEiQSJBMEDiQQSAokEiQSJBGcAZwBwA4kEiQSJBIkEaACJBKABGQIYAokEiQS3A4kEiQSJBIkEoAGJBIkEiQSBAYkEiQSJBIkEIAEOAokEDAKJBIkEiQSJBIkEiQSJBGEADwKJBAQAiQSJBLcDtwO5A7oDGwCJBKcBiQSJBMEDiQQSAokEiQSJBGcAZwCJBIkEiQSJBIkEaACJBKABGQIYAokEiQS3AwwBiQSJBIkEoAFuAW4BbQH9AGsBiQSJBB4DiQSJBIkEDAKJBIkEiQSJBIkEiQSJBIkE1QCJBCYBiQSJBLcDtwO5A7oDGwAlAYkEiQSJBMEDiQSJBIkEiQSJBGcAZwCJBIkEiQSJBIkEaACJBKABGQIYAokEiQS3A4kEiQSJBIkEiQTXAIkEiQSJBIkEiQSJBIkEmACJBIkEmgCJBIkEiQSJBIkEiQSJBIkEiQSJBNYAiQSJBLcDtwO5A7oDGwCJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEgQGJBIkEiQSJBCABDgKJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSnAQAAAAAABgAGAAZgBYcE8QSHBIcEhwRgBWAFYAWHBA8FDwWVBaYEhwSHBIcEhwSHBIcEhwSHBIcEhwRfBYcEhwSHBIcEswWzBYcEhwSHBIcEhwSHBIcEhwSHBBUFhwSHBIcEhwSHBGEFYgWHBIcEhwSUBZYFcQUfBR4FHQUcBYMFAgUaBRMFFwVbBVwFWgVeBWIFYQWHBBYFPgVMBT0FhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBEYFSwVRBUoFRwVABT8FQQVCBYcEnATNBIcEhwSHBIcEpwWmBYcEhwSmBEMFRAVOBU0FnAXUBdMFcgWHBIcEhwSHBIcEhwSzBYcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBLMFswWHBKYEswWzBaIEOAU3BaIECQWHBKIF8QToBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSZBZcFhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwTtBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwTOBYcEfgXbBO0E7QTtBO0E7wTcBNoE5wSmBI4E+AUZBQQFBAX1BRkFGQX1BbQE4gWxBA8FDwUPBQQFCQUJBV0F7gTnBIcE+AX2BPYE9wX3BfYEcgUiBSgF0AQZBdYE1gTWBNYE9gSZBBkFGQUiBSgF0ATQBBkF9gSZBIIF8gX2BJkEaAX2BJkE9gSZBGgFzgTOBM4EwwRoBc4EtATOBMMEzgTOBGgFbAVsBWgFCAUDBQgFAwUIBQMFCAUDBfYEvQW9BRQFCQVjBfYEhwQUBRIFEAUZBZ8ExgTRBdEFzQXNBc0F/QX9BaIF3QWmBKYEpgSmBN0FtgS2BKYEpgSmBKYE3QWHBIcEhwSHBIcEhwTYBYcEcwX6BIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcELQWHBIoEnwWHBIcEnQWHBIcEhwSHBIcEhwT7BIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBPQFhwSHBIcEhwSHBIcEgQWABYcEhwT4BIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwQRBYcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwTCBQoFhwSHBOsFhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBOYF3gQvBYcELgUyBYcEkwSHBAAAAAAAAP/9//0A/////v7+/fv6/wD9/wD7/gD+/gD8+v4A/vz8/Pz9/fv+/Pz//gD/AP7+/f39/v7///79/gD+/gD//vn7+/YAAP0A/v///P4A9/z//fz//f/+//f2/Pv//wAA+/37/gAA/v4A+ff5+QD+//3//fv9//79/P4AAP3+/AAA/fz+//8AAP0A/gD+/Pz6AP74+/n9+/n5APX4/P7/AP39//3///37//////36+/z6+//7/f39/f39/f3+/fv+/f38/v7+//77//77/fv7/Pv7/P4A/wAA/f8A/fT/AAD9+/0A/vz+/f4A/fv6+/r+/vv1//4A///9AP79/v39/vj4+v38+v////z6/QD+//3//fr5//j//PgA//3//v36+P/9+/v6/Pv//gD9+v///v/+/v4A/v7+//77/QD7//7///7+AP/+/wD+/P7//////////gD+/v3/AP/////+/////////////wD9/wD/AAD///3+APz+AAAAAAAAAAAAAJSwAAABAAAAOogAAAEAAAC0ALQAswC1ALYAtgC2ALYAtQC1ALUAtQC1ALoAvAC+AL4AvQC9ALsAuwDCAMIAxADGAMYAxgDHAMsAzADMAMwAzADMAMwAzADMAMwAzADMAMwAzADRANEA0wDTANUA1QDVANUA1gDWANYA1gDWANQA1ADXANcA1wDBANkA2gDaANoA2gDaAN0AzwDPAN4A3gDfAN8AtQDhAOEAtQC1ALUAwwDDAMMA4wDmAOYA5gDkAOQA8ADwAOcA5wDnAPIA6ADoAOgA8wDzAOkA6QD1APUA9AD0APQA9AC/AL8A4gDiAPsA+wD7APsA9gD2APYA9gD4APgA9wD3APcA+QD5AO0A7QDbANsA0ADQANAA6wDrAOwA7ADuAO4A7gDuALUA6gDqALUA/gD+AP4A/gC1ALUAAQEBAQEBAQH/AP8AAAEAAfwA/ADOAM4AzgDOAM4AzQDNAM0AzgDOAM4AzgDOAM4AzgDNAM4AzgDOAM4AzgDOAM4AzgDOAAMBzgDOAM4AzgDOAM4AzgDOAM4ABAEEAc4ABQEFAc4AzgDOAM4AzgDOAAgBCAEJAQkBBwEHAfoA8QDxAAYBBgG1AAoBCgHSANIA3ADcAAsBCwG1ALUAtQAMAQwBtQC1ALUAtQC1AMkAygC1AA4BEAEQARABEQERAREBEwETAQ8BDwEVARYBFgEUARQBFAEUAc4AzgDgAOAA4AC1ALUAtQAYARgBtQC1ALUAtQC1ALUAGQG1ALUAtQAbAR0BHgEeAR8B/QD9AOUA5QAhASEBIgEjASMBIwEjASMBIwEkASQBJAEnASkBKQEqASoBKAEoASsBKwEsASwBLAHvAAIBAgEmASYBsACxALEAsgCyALIAtwC3ALcAuQC5ALUAwADAALgAuAC4AMYAxwDIAMgAxQDFAMwAwQDYANgA2QDdAN8A4wDkAPIA8wDOAAMB+gANAQ0BDQENAQ0ByQASARIBFQEWARcBFwEaARoBHAEcAR0BIAEgASAB/QAAAEkAAAAkAAoAWgAAADQACQCAAAAAWgABAFMAAABOAAAACwALAAUAAgBGAAAAdQAAAFOeAABMAAAAVwAAAFIAAABengAAVgAAAFcAAABSAAAAaZ4AAFYAAABXAAAAUgAAAG6eAABZAAAAUgAAAFcAAAB7ngAAWQAAAFMAAABXAAAAhZ4AAEwAAABSAAAAVwAAAIueAABMAAAAVwAAAFcAAACQngAATAAAAFcAAABSAAAAMOoAAPGiAAD3ogAA/KIAAAGjAAAAAAAAAAAAAAAAAAAKCgkJCAgHBwcGBgYFBQUEBAQEAwMDAwMDAgICAgICAomUAABAAAAAWaoAAEIAAABeqgAAQQAAAGOqAABDAAAAEawAAEasAAB5rAAAsawAAOWsAAAAAAAAAAAAAAAAAAA5AAAAOQAAADYAAAA5AAAAOQAAAAAAAAAAAAAAAAAAAG5hdHVyYWxlZnRvdXRlcmlnaHRmdWxsaW5uZXJjcm9zcwAAAAAAAAAAAAAAAAAAAAAHBAYEKAoFIA4FMBMEOBcFARwFAwAAAAAAAAAAAAAAMwACAHkAAABcAAIAegAAAHUAAAAAAAAAAAAAAAAAAAACAAAAXgABAy8BCABGAAIAZQECAS8BCABGAAEAqgAAAFEBAQAAAAAAAAAAAAAAAAACAAEAXgABBBIBAABFAAIAXwAHAAAAAAAAAAAAAAAAAFMBAAAwAQQAbgADAFEDAQBFAAAAbgADAAsAAwAAAAAAi7IAAAEAAACQsgAAAQAAAJayAAACAAAAn7IAAAMAAACosgAAAgAAALCyAAADAAAAuLIAAAAAAAC/sgAAAAAAAAAAAAAAAAAAAAAAAAAAAABvbm9mZmFsc2V5ZXN0cnVleHRyYWZ1bGwAAAAAAAAAABK2AAAAAAIAGbYAAAAABAAAAAAAAAAAAAAAAAAAAAAAIbYAAAEAAAAktgAAAgAAACe2AAAGAAAA3YwAAIAAAAAAAAAAAAAAAAAAAAAAAAAAWP/v/6QA1gA2AVr/SP/u/2IAVv8xATsBXf8//07///6LAZEB3AHeAQACdQAPAhEC9wH9ARQC/wAoAiwCLgJfAiUAmAFSAp0BzgEvAjECWQJiAmoCAv8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/5H/cwKKArMCuQK9Ar8C5ALmAugC/wICAxYDMAMyAzQDNgNNA1kDWwNdA18DYQNkA2YDaANqA2wDeAOHA4oDjAOTA5UDmgPAA8IDxAPcA94D4AP3A/kDBQQJBAsEEAQC/wL/Av8C/wL/Av8C/wL/Av++AA4BPP+gAGD/wgGHAgQBygEEAcoBTgAC/wL/Av8C/84AzgDOAEABVgL7/6MC5wJs/1QBg//LAdIB0gG1AqP/zQHfAcICxgLKAswCzQKpAEn/RQE6AcACTQHrAloD+P8zAzUC8wKGApQCBQIJAckCFwPIAhsDIwOWA7cCXAN9A6cDqwNL/1T/bf+l/9L//f+iAK0A5wBSAbUBOwJmAnYCiwL4AqMD3QMIBBYEJv8mAC4ESARtBG4EcQRyBHMEdQR2BHcEeAQkAcMBGgR5BHsEfAR9BC0DiQSKBIsEVAQZBI4EkAR6BJEEogCdBJ4EnwSgBKEEowRMBE8EfgRvBHAEdASABC0DfgR+BIEElQSrBEIEggSPBJIEUASDBIQEVQSUBJYEmwSZBKQEtQSTBIgErARhBI0EswTMBIUE3ATdBIYEhwTiBJcEqQSnBNkEzwTbBOkE6wTtBPwEAAXmBOcEzgTSBPUE9gTsBAwFFwXHBMkEHQUhBRAFJQUnBSgFKwUUBRsFHAUeBRgFHwUjBSIFJgUkBSkFLQUsBfcE+AQ0BQ4FEgUTBRUFFgUaBSAFMQVMBegE7wQvBS4FGQVZBTIFPAU/BUIFRgVvBXIFggWEBYcFiQWLBTAFMwU3BXoFdgV4BXkFewWABXQFdQWBBYYFjAWNBYUFAQAAAAEgAAAAAAAAAAAAAEYAAAAAAAAAAAAAAAAAAAANwAAAAAAAAAEAAAABIAAAAAAAAAAAAABHAAAAAAAAAAAAAAAAAAAAJ8AAAAAAAAABAAAAAQwAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAEDAAAAAAAAAAgAAAAEMAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAABJwAAAAAAAAAEAAAABDAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAVMAAAAAAAAABAAAAAQgAAAEAAAAAAAAASQAAAAAAAAAAAAAAAAAAAFvAAAAAAAAAAgAAAAEIAAABAAAAAAAAAEkAAAAAAAAAAAAAAAAAAABbwAAAAAAAAAEAAAABCAAAAgAAAAAAAABJAAAAAAAAAAAAAAAAAAAAYcAAAAAAAAACAAAAAQgAAAIAAAAAAAAASQAAAAAAAAAAAAAAAAAAAGHAAAAAAAAAAQAAAAEIAAADAAAAAAAAAEkAAAAAAAAAAAAAAAAAAABnwAAAAAAAAAIAAAABCAAAAwAAAAAAAABJAAAAAAAAAAAAAAAAAAAAZ8AAAAAAAAD/AAAAIQgAAAAAAAAAAAAASgAAAAAAAAAAAAAAAAAAABetAAAAAAAAAAAAACEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXrQAAAAAAAAEAAAAhEAAAAAAAAAAAAABLAAAAQgAAAEMAAAAAAAAAF60AAAAAAAD/AAAAIQgAAAEAAAAAAAAASgAAAAAAAAAAAAAAAAAAAButAAAAAAAAAAAAACEIAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbrQAAAAAAAAEAAAAhEAAAAQAAAAAAAABLAAAAQgAAAEMAAAAAAAAAG60AAAAAAAABAAAAgQgAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAGzAAAAAAAAAAQAAAEEIAAAAAAAAAAAAAE0AAAAAAAAAAAAAAAAAAABzwAAAAAAAAAIAAAABCAAAAAAAAAAAAABOAAAAAAAAAAAAAAAAAAAAesAAAAAAAAD/AAAAAQgAAAAAAAAAAAAATwAAAAAAAAAAAAAAAAAAAIDAAAAAAAAAAQAAAAEIAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAACHwAAAAAAAAP8AAAABCAAAAAAAAAAAAABRAAAAAAAAAAAAAAAAAAAAj8AAAAAAAAABAAAAAQgAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAJTAAAAAAAAAAQAAAAEIAAAAAAAAAAAAAFMAAAAAAAAAAAAAAAAAAACYwAAAAAAAAAIAAAABCAAAAAAAAAAAAABTAAAAAAAAAAAAAAAAAAAAmMAAAAAAAAABAAAAAQgAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAJ7AAAAAAAAAAQAAAAEIAAAAAAAAAAAAAFUAAAAAAAAAAAAAAAAAAACkwAAAAAAAAAEAAAABCAAAAAAAAAAAAABWAAAAAAAAAAAAAAAAAAAAqsAAAAAAAAACAAAAAQoAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAK7AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFcAAAAAAAAAAAAAAAAAAAC1wAAAAAAAAAEAAAABAAAAAAAAAAAAAABYAAAAAAAAAAAAAAAAAAAAvMAAAAAAAAACAAAAIQgAAAAAAAAAAAAAWQAAAAAAAAAAAAAAAAAAAMfAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAADOwAAAAAAAAAAAAAABIAAAAAAAAAAAAABaAAAAAAAAAAAAAAAAAAAA3cAAAAAAAAACAAAAAQgAAAAAAAAAAAAAWwAAAAAAAAAAAAAAAAAAAO7AAAAAAAAAAQAAAAEIAAAAAAAAAAAAAFwAAAAAAAAAAAAAAAAAAAD5wAAAAAAAAAAAAAABAAAAAAAAAAAAAABdAAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAQAAAAAAAAAAAAAAXgAAAAAAAAAAAAAAAAAAABHBAAAAAAAAAAAAAAEAAAAAAAAAAAAAAF8AAAAAAAAAAAAAAAAAAAAZwQAAAAAAAAMAAAABCAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAJ8EAAAAAAAABAAAAAQgAAAAAAAAAAAAAYQAAAAAAAAAAAAAAAAAAAC/BAAAAAAAAAgAAAAEIAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAA4wQAAAAAAAAMAAAABCAAAAAAAAAAAAABiAAAAAAAAAAAAAAAAAAAAOMEAAAAAAAABAAAAAQAAAAAAAAAAAAAAYwAAAEQAAABEAAAAZAAAAD/BAAAAAAAAAQAAAAEAAAAAAAAAAAAAAGMAAABFAAAARQAAAGQAAABDwQAAAAAAAAEAAAABAAAAAAAAAAAAAABjAAAARgAAAEYAAABkAAAAScEAAAAAAAAAAAAAAQEAAAAAAAAAAAAAZQAAAEcAAABHAAAAZgAAAE3BAAAAAAAAAQAAAAEAAAAAAAAAAAAAAGUAAABHAAAARwAAAGYAAABNwQAAAAAAAAEAAAABAAAAAAAAAAAAAABnAAAASAAAAEkAAABoAAAAU8EAAAAAAAACAAAAAQAAAAAAAAAAAAAAZwAAAEgAAABJAAAAaAAAAFPBAAAAAAAAAgAAAA0IAACzegAAAAAAAGkAAAAAAAAAAAAAAAAAAABZqgAAAAAAAAIAAAAFCAAAt3oAAAAAAABpAAAAAAAAAAAAAAAAAAAAXqoAAAAAAAADAAAABQgAALd6AAAAAAAAaQAAAAAAAAAAAAAAAAAAAF6qAAAAAAAAAQAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgwQAAAAAAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYMEAAAAAAAD/AAAAAQoAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAGDBAAAAAAAAAAAAAAAAAABTkAAATpAAAGrBAABvwQAASZAAAAAAAAAAAAAAAAAAADAxMjM0NTY3ODlBQkNERUYJAAAAAQgEAAAAAAAAAAAAagAAAAAAAAAAAAAAAAAAAJHBAAAAAAAABwAAAAEIBAAAAAAAAAAAAGsAAAAAAAAAAAAAAAAAAACmwQAAAAAAAAUAAAABCAQAAAAAAAAAAABsAAAAAAAAAAAAAAAAAAAAusEAAAAAAAAAAAAAAAAAAAAAAAABAAEAAAAAAAAAAABtAAAASgAAAEoAAABuAAAAU54AAAAAAAAAAAAAAQABAAAAAAAAAAAAbwAAAEsAAABLAAAAbgAAAF6eAAAAAAAAAAAAAAEAAQAAAAAAAAAAAHAAAABMAAAATAAAAG4AAABpngAAAAAAAAAAAAABAAEAAAAAAAAAAABxAAAATQAAAE0AAAByAAAAbp4AAAAAAAAAAAAAAQABAAAAAAAAAAAAcwAAAE4AAABOAAAAdAAAAHueAAAAAAAAAQAAAAEAAQAAAAAAAAAAAHUAAABPAAAATwAAAHYAAACFngAAAAAAAAEAAAABAAEAAAAAAAAAAAB3AAAAUAAAAFEAAAB4AAAA9cEAAAAAAAACAAAAAQABAAAAAAAAAAAAeQAAAFIAAABTAAAAbgAAAMGpAAAAAAAAAQAAAAEAAQAAAAAAAAAAAHoAAABUAAAAUwAAAG4AAADLqQAAAAAAAAEAAAABAAEAAAAAAAAAAABuAAAAUwAAAFMAAABuAAAAi54AAAAAAAACAAAAAQABAAAAAAAAAAAAbgAAAFMAAABTAAAAbgAAAIueAAAAAAAAAwAAAAEAAQAAAAAAAAAAAG4AAABTAAAAUwAAAG4AAACLngAAAAAAAAEAAAABAAEAAAAAAAAAAABuAAAAUwAAAFMAAABuAAAAkJ4AAAAAAAACAAAAAQABAAAAAAAAAAAAbgAAAFMAAABTAAAAbgAAAJCeAAAAAAAAAwAAAAEAAQAAAAAAAAAAAG4AAABTAAAAUwAAAG4AAACQngAAAAAAAAAAAAAAAAAA/wAAAAEoAABwcgAAAAAAAHsAAAAAAAAAAAAAAAAAAAAtwgAAAAAAAP8AAAABKAAAcHIAAAAAAAB8AAAAAAAAAAAAAAAAAAAAN8IAAAAAAAD/AAAAASgAAHByAAAAAAAAfQAAAAAAAAAAAAAAAAAAADzCAAAAAAAA/wAAAAEoAABwcgAAAAAAAH4AAAAAAAAAAAAAAAAAAABBwgAAAAAAAP8AAAABKAAAcHIAAAAAAAB/AAAAAAAAAAAAAAAAAAAASsIAAAAAAAAAAAAAASAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAFPCAAAAAAAAAAAAAAEgAAAAAAAAAAAAAIEAAAAAAAAAAAAAAAAAAABgwgAAAAAAAAAAAAABIAAAAAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAcsIAAAAAAAAABgAAN8MAAAAAsOolBltCAAAAAABAj0AABgAAPsMAAAAAAKVb0/xBAAAAAABM7UAABAAARcMAAAAAALBQv55BAAAAAEB3S0EAAwAAHMMAAAAAAECLf1RBAAAAAHCZlEEBBQAAEcMAAAAAAAAQjQVBAAAAANlP40ECBAAAF8MAAAAAAACAvMxAAAAAsMReHUIqxAAAN8QAAAAAAABHxAAAYMQAAG7EAACBxAAAD4gAAJrEAAC/xAAAy8QAANrEAAD7xAAADcUAACbFAABDxQAAAAAAAP2GAAD3eQAAVMUAAGbFAAB4xQAAmsUAALnFAAAAAAAAzsUAAOjFAAD/xQAAFMYAAAAAAAAAAAAAAAAAADAAAAAH6AAABmwBAC/sAQAHrAIAAdACAAPYAgAB7AIAAfwCAAFcAwAB3AMABAgLAA5ICwAHlAsAAbQLAIG8CwAB1A0AAfgNAAIQDgABHA4AAdgPAAgIEgAGaBUAAiQWAAE8FgA3RBYAAswXAAUAGAAWGBgAAngYABUsGQAEqBkAAcAZAAFQGwAPWBsAB5wbAAL0GwAOABwAATwcAAFEHAAbwBwAC5geAAmsHwAE2B8ABFggAAlsIAADlCAABaQgAA/AIAADZCEAAXghABuQIwAEACQAA+gkABL4JAAHRCUABIglAAHAJQADBCYAAfAmAAf4JgACHCcAAywnAAFcJwACiCcAAsgnAALoJwADBCgAAfAoAAX4KAACHCkAAywpAAFEKQACwCkAAdQpAAMEKgAB8CoACPgqAAMcKwADLCsAAogrAALAKwADBCwAAfAsAAf4LAACHC0AAywtAAJYLQACiC0AAcAtAAEILgAF+C4AAxgvAAQoLwABXC8ACMwvAAMEMAAH+DAAAxgxAAQoMQACVDEAAogxAAH8MQACCDIAAfAyAAf4MgADGDMABCgzAAJUMwACiDMAAgg0AAf4NAADGDUABCg1AAFcNQACiDUAAeQ1AAIINgABKDcABjw3AAFYNwAIYDcAA8g3AAHEOAAH0DgAAfw4AAkcOQACaDkAAcQ6AAbQOgAC7DoABiA7AB8EPAAM0DwAF8Q9AAs0PgAkZD4AD/g+AA04PwAUrEAABihBAARYQQADeEEAA4hBAAecQQAExEEADAhCAAE8QgAGaEIAAexDAAx0TQAKQE4AAQBQAAK0WQABAFoAAmxaAAOsWwADSFwABchcAAJIXQACyF0AI9BeAARgXwABdF8ADwBgAAGkYgAMgGQADMBkAAEAZQACEGUAEcBmAAIgZwAieGcABVxoAAJ4aAAKVGkAHYBpAAH8aQAHgGoABqBqAAUAbAAR0GwAI2htAAMAbgANhG4ADphvAATwbwAUkHAABexwAAL4cQAIAHMAGUBzAAG0cwADyHMAJwB3AATwdwAB9H4AA/x+AAM0fwADdH8AA7R/AAL0fwBlAIAABqiBAAXogQAFKIIAGoCCACFAgwACAIQABAyEAAIghAABUIQAA1iEAAZ4hAABlIQAAZyEAAGkhAABuIQAAuiEAAUAhQAEKIUAATyFAGRChgAnAJAACwCRAE5wkgAAApQAdQScALlTngAKQK0ABpSzAAO8swAE5LMAAvizAAHAtQAB/LUAT4C3AAzAuAAaALoAWWy6ANYAvAAMwL8ABQDAABkgwAAHqMAAAtjAAAP0wAAEZMIAAYDCAAHswwACQMYACljGACQAxwAfAMgAHqjIAAFAyQAggMkAJyjKAD8AywAAAcwAQAA3ATdAkgIC+JMCAzSYAhC8mQIBfJoCCMCbAhcAnAICgJwCAiSeAgEIoAIBGKACASygAgmMoAIE2KACBNChAgIAogIR0KICAjijAhKAowID4KMCCpikAg0cpQIBfKUCBACmAhvMpgICeKcCDqSoAgEMqQICMKkCBHCpAgPcqQIB7KkCAcCqAgPIqgIC3KoCAviqAgEEqwICeKsCB6yrAgLUqwILjK8CAQBgAwL8bQMC/G8DAfx/AwF47AMBpOwDEMjuAwL49AMC8PcDGgD4AweA+AMjwPgDE1D5AwSg+QMB/PsDDwT8Awdo/AMG7PwDC2z9AweA/wMHoP8DBeT/AwMABAQJ3AQEEeQFBAxABgQuQAcEAXwOBAFADwQBXCEEAXwkBAH8JAQDBCgEAhQoBAQwKAQD4CgEAfwoBAlAKQQB/CkEB+QsBAMAQAQW4EAEAwBCBBLAQgQDAEQEDpxEBAQARQQDAEYEDsxGBAQURwQNrFoEBMCRBC5EvQUEPL4F9gBABycARAe1pEQHRgBIB1cATAcBBFsHAWxbBwHsWwcBVFwHAdRcBwE8XQcBvF0HASReBwGkXgcBDF8HAsC7BywAwAdkwMAHD4DCBw7EwgcPBMMHD0TDBx9AxAc8wMQHK8DFBx2YxwcrQMgHCQDJBwJAyQchAMwHBsDMB0bczAcUAM4HJYDOBwUYzwcRgM8HPwDQBwEA0Qe2CNEHBOTTBz4A1AcEANUHGEDVB0bs1wcLFNkHRgDaB3QA3AcBBAA4YIAAOPAABDgAAAAAAAAAAP///////wD8AQAA+AEAAPhBAA4atQBAAcAADhfYAA4HAAEBMDIBAQY5AQEQSgEBLngBdAF5AQEGfwFoAYEBMgGCAQEEhgEsAYcBAAGJASoCiwEAAY4BIAGPASYBkAEoAZEBAAGTASoBlAEuAZYBNAGXATABmAEAAZwBNAGdATYBnwE4AaABAQamATwBpwEAAakBPAGsAQABrgE8Aa8BAAGxAToCswEBBLcBPgG4AQABvAEAAcQBAgHFAQABxwECAcgBAAHKAQIBywEBEt4BARLxAQIB8gEBBPYBegH3AYYB+AEBKCACbgEiAgESOgJGATsCAAE9AmwBPgJEAUECAAFDAmoBRAIcAUUCHgFGAgEKRQMkAXADAQR2AwABhgMSAYgDEAOMAxoBjgMYApEDDhGjAw4JwgMAAc8DBAHQA4wB0QOOAdUDkgHWA5AB2AMBGPADiAHxA4oB9AOCAfUDgAH3AwAB+QOYAfoDAAH9A24DAAQiEBAEDiBgBAEiigQBNsAEBgHBBAEO0AQBWDEFFiagEEImxxBCAc0QQgEAHgGWmx6EAZ4eYAGgHgFgCB+WCBgflgYoH5YIOB+WCEgflgZZH5cIaB+WCIgflgiYH5YIqB+WCLgflgK6H34CvB+UAb4fZAHIH3wEzB+UAdgflgLaH3gC6B+WAuofdgLsH5gB+B9wAvofcgL8H5QBJiFiASohXAErIV4BMiEMAWAhCBCDIQABtiQKGgAsFi9gLAABYixYAWMsZgFkLFoBZywBBm0sVAFuLFYBbyxQAXAsUgFyLAABdSwAAX4sTgKALAFk6ywBBPIsAAFApgEugKYBGCKnAQ4ypwE+eacBBH2nTAF+pwEKi6cAAY2nSgGQpwEEoKcBCqqnSAEh/w4aAAAAAAEAAgAIAA8AEAAaABwAIAAlACYAKAAwAD8AQABFAEcATwBQAHQAygDLAM0AzgDPANEA0gDTANUA1gDZANoA2wAHA2AcKCorKrxa2Fr8dcHV4dXi1eTVA9YJ1hnWQd+630Hio+L74xrx9P49/13/fv+A/4L/h/+Q/5z/n/+q/7b/wP/E/8b/yP/K/9D/4v/n/+r/8f/3//j/+f8AAAAAAAAAAAUHOAdDB2MHiAeUB8sH6Af4BwwIPgh4CJ4I2AjuCCgJTwmoCbgJ1AkkCmwKrAreChoLTguKC6gLuAvUCwgNgA1wDoAOkA6gDrYO+A44D0gPWA9oD4APqA/ID9gPChAqEEoQahCKEKoQyBDYEPgQOBFIEVoReBGIEZgRBBg2GHgYiBjYGB0ZaRmBGQjwHPBI8F7wmPCq8Mrw6PD48AjxHvFY8WjxePGM8bjxyPHa8fzxLvJu8qryyvLo8vjyCvMs817znPPK8+rzDvRI9Fr0ePSM9LD0uPTA9Mj0CvUu9W71qvXM9f71OPZK9mr2jvbO9gr3KvdO94j3nvcAAAAAAGFjZWlub3V5eWFjZGVlZ2hpamtsbm9yc3R1dXd5em91YWlvdfXhZ2tv72pnbuFhZWlvcnVzdGhhZe9v73kAAAAAAAAAAGFi42Rk5WXlZmdoaGnpa2zsbG1u73By8nJz83R19XZ3d3h5emh0d3lh4eHhZeXlaW/v7+919fV5AAA8yAAAaMgAAKzIAADIyAAA5cgAAADJAAAcyQAANckAAE3JAACOyQAAyckAAA3KAAA9ygAArcoAADTLAABoywAAqssAANXLAAAQzAAAN8wAAGPMAACMzAAAu8wAAOXMAAAw6gAAMOoAAAvNAABCzQAAf80AAPbNAABdzgAAlM4AAM7OAAA5zwAAiM8AAMnPAAAF0AAANdAAAJ/QAADo0AAAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAQEBAAEBAQABAQEBAQABAQEBAQABAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAcNYAAAIABABz1gAAAwEDAHfWAAADAQIAe9YAAAQAAQBOxwAAhAAAAFbHAACFAAAA3pIAAIYAAABexwAAhwAAAAAAAACK3AAAtdwAANjcAAD83AAAAAAAAAAAAAAAAAAAlt0AAMvdAAD43QAALN4AAGLeAACP3gAAyd4AAADfAADi4gAA9+IAAAPjAAAP4wAAJ+MAADTjAABI4wAAAAAAAOnjAAABAAEAiAAAAO7jAAABAAEAiQAAAPPjAAABAAEAigAAAPjjAAACAAEAiwAAAP3jAAACAAEAiwAAAAPkAAABAAEAjAAAAAnkAAABAAEAjQAAAA/kAAABAAEAjgAAABXkAAACAAEAjwAAACDkAAABAAEAkAAAACjkAAABAAEAkQAAADDkAAABAAEAkgAAADTkAAABAAEAkwAAADjkAAABAAEAlAAAADzkAAABAAEAlQAAAEDkAAABAAEAlgAAAEXkAAABAAEAlwAAAErkAAABAAEAmAAAAE/kAAABAAEAmQAAAFTkAAABAAEAmgAAAFjkAAABAAEAmwAAAFzkAAABAAEAnAAAAGLkAAACAAEAnQAAAGjkAAABAAEAngAAAG3kAAABAAEAnwAAAHLkAAABAAEAoAAAAHnkAAABAAEAoQAAAH7kAAABAAEAogAAAITkAAAAAAEBowAAAIfkAAACAAEApAAAAJHkAAACAAEApQAAAJHkAAADAAEApQAAAJvkAAACAAEApgAAAKPkAAACAAEApwAAAKzkAAABAAEAqAAAALTkAAABAAEAqQAAALvkAAACAAEAqgAAAMDkAAACAAEAqwAAAMXkAAACAAEArAAAAMrkAAACAAEArQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgMDAwMDAwMDBAQEBAQEBAQAAAAAgDAAAIAgDgCAIMgDAAAAAID///8A+P//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwABAgAAAgIEBQUAAQIGAgMAAQACAAIAAAAAAAAAAQIDAAECAAACAgQFBQABAgYCAwABAAIAAgAAAAAAVCEiGQ0BAgMRSxwMEAQLHRIeJ2hub3BxYiAFBg8TFBUaCBYHKCQXGAkKDhsfJSODgn0mKis8PT4/Q0dKTVhZWltcXV5fYGFjZGVmZ2lqa2xyc3R5ent8AAAAAAAAAAAASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAAAAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAD+//9/AAAAALAEAABkAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//3////9/AAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPqcAAADAAAA9pwAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABGAAAARwAAAEgAAAADAAAAQQAAAEIAAABDAAAARQAAAEkAAABKAAAASwAAAEwAAABNAAAARgAAAEIAAABDAAAARAAAAEMAAABBAAAATgAAAEUAAABEAAAAAwAAAEcAAABCAAAAQwAAAEUAAABJAAAASgAAAFkAAABaAAAAWwAAAEYAAABCAAAAQwAAAAAAAABDAAAAQQAAAE4AAABFAAAARAAAAAEAAABIAAAAQgAAAEMAAABFAAAASQAAAEoAAABcAAAAXQAAAF4AAABGAAAAQgAAAEMAAAAAAAAAQwAAAEEAAABOAAAARQAAAEQAAAABAAAASQAAAEYAAABHAAAATQAAAF8AAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAYQAAAEoAAAAAAAAAYgAAAEsAAABIAAAATAAAAE0AAABOAAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAybEAAMuxAACwlAAAAwAAAAEAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAABStQAAAAAAAAEAAAABAAAAAAAAAAAAAABCAAAAAAAAAAAAAAAAAAAAZ7YAAAAAAAACAAAAAQAAAAAAAAAAAAAAQwAAAAAAAAAAAAAAAAAAADS3AAAAAAAAAgAAAAEAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAA+twAAAAAAAAEAAAABAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAASLcAAAAAAADhrQAATgAAAFUAAABkAAAATwAAAFAAAABRAAAAVgAAAAAAAAABAAAAAAAAAFIAAABXAAAATwAAAEEAAABTAAAAUAAAAIMAAABBAAAAQgAAAFgAAABZAAAAAwAAAEMAAABEAAAAZQAAAFQAAABVAAAAZgAAAFYAAABJAAAAVwAAAFgAAABRAAAAZwAAAEUAAABZAAAAWgAAAFsAAABcAAAASgAAAGgAAABpAAAAagAAAGsAAABdAAAAAAAAAFIAAABeAAAARgAAAF8AAABFAAAAAAAAAAAAAABGAAAARgAAAGwAAABgAAAAYAAAAG0AAABhAAAASwAAAGIAAABjAAAAUwAAAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAZAAAAEcAAABlAAAARwAAAAAAAAAAAAAAVQAAAGYAAABIAAAAZwAAAEgAAAAAAAAAAAAAAEkAAABJAAAAbwAAAGgAAABoAAAAcAAAAGkAAABMAAAAagAAAGsAAABWAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEoAAABLAAAAcgAAAGwAAABtAAAAcwAAAG4AAABNAAAAbwAAAHAAAABXAAAAdAAAAEkAAABxAAAAcgAAAHIAAAByAAAAAAAAAHUAAAB2AAAAAAAAAAAAAABzAAAAStsAAIDbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAACAhAQAhAhACAAHgAcABoADAAOABgAHwA7AA8nMy4yOC4wACUAdGhzdG5kcmQALXgwAFgwAE5hTgBOVUxMAChOVUxMKQAuAHVuaXgAdW5peC1ub25lAHVuaXgtZG90ZmlsZQB1bml4LWV4Y2wAc3RyaW5nIG9yIGJsb2IgdG9vIGJpZwBjYW5ub3Qgb3BlbiB2aXJ0dWFsIHRhYmxlOiAlcwBjYW5ub3Qgb3BlbiB0YWJsZSB3aXRob3V0IHJvd2lkOiAlcwBjYW5ub3Qgb3BlbiB2aWV3OiAlcwBubyBzdWNoIGNvbHVtbjogIiVzIgBmb3JlaWduIGtleQBpbmRleGVkAGNhbm5vdCBvcGVuICVzIGNvbHVtbiBmb3Igd3JpdGluZwAlcwAqP1sAJV8AAXRyaWdnZXIAdGVtcAB1bmtub3duIGRhdGFiYXNlOiAlcwBJTlRFR0VSAG5vIHN1Y2ggdGFibGUgY29sdW1uOiAlcy4lcwBTUUxJVEVfADIwMTktMDQtMTYgMTk6NDk6NTMgODg0YjRiN2U1MDJiNGU5OTE2NzdiNTM5NzEyNzdhZGZhZjBhMDRhMjg0ZjhlNDgzZTI1NTNkMGY4MzE1NmI1MABjYW5ub3QgZnN0YXQgZGIgZmlsZSAlcwBmaWxlIHVubGlua2VkIHdoaWxlIG9wZW46ICVzAG11bHRpcGxlIGxpbmtzIHRvIGZpbGU6ICVzAGZpbGUgcmVuYW1lZCB3aGlsZSBvcGVuOiAlcwBvcGVuAGNsb3NlAGFjY2VzcwBnZXRjd2QAc3RhdABmc3RhdABmdHJ1bmNhdGUAZmNudGwAcmVhZABwcmVhZABwcmVhZDY0AHdyaXRlAHB3cml0ZQBwd3JpdGU2NABmY2htb2QAZmFsbG9jYXRlAHVubGluawBvcGVuRGlyZWN0b3J5AG1rZGlyAHJtZGlyAGZjaG93bgBnZXRldWlkAG1tYXAAbXVubWFwAG1yZW1hcABnZXRwYWdlc2l6ZQByZWFkbGluawBsc3RhdABpb2N0bABhdHRlbXB0IHRvIG9wZW4gIiVzIiBhcyBmaWxlIGRlc2NyaXB0b3IgJWQAL2Rldi9udWxsAG9zX3VuaXguYzolZDogKCVkKSAlcyglcykgLSAlcwBjYW5ub3Qgb3BlbiBmaWxlACVzIGF0IGxpbmUgJWQgb2YgWyUuMTBzXQBmdWxsX2ZzeW5jACVzL2V0aWxxc18lbGx4JWMAL3Zhci90bXAAL3Vzci90bXAAL3RtcABTUUxJVEVfVE1QRElSAFRNUERJUgAlcy1zaG0AcmVhZG9ubHlfc2htAG1vZGVvZgBwc293ACVzLmxvY2sAZnN5bmMAL2Rldi91cmFuZG9tAHVuYWJsZSB0byBvcGVuIGEgdGVtcG9yYXJ5IGRhdGFiYXNlIGZpbGUgZm9yIHN0b3JpbmcgdGVtcG9yYXJ5IHRhYmxlcwA6bWVtb3J5OgAtam91cm5hbAAALXdhbAAAbm9sb2NrAGltbXV0YWJsZQByZWNvdmVyZWQgJWQgZnJhbWVzIGZyb20gV0FMIGZpbGUgJXMAZGF0YWJhc2UgY29ycnVwdGlvbgBjYW5ub3QgbGltaXQgV0FMIHNpemU6ICVzANnVBfkgoWPXcmVjb3ZlcmVkICVkIHBhZ2VzIGZyb20gJXMAQCAgAEFQSSBjYWxsZWQgd2l0aCBmaW5hbGl6ZWQgcHJlcGFyZWQgc3RhdGVtZW50AEZPUkVJR04gS0VZIGNvbnN0cmFpbnQgZmFpbGVkACVzLW1qWFhYWFhYOVhYegBNSiBkZWxldGU6ICVzAE1KIGNvbGxpZGU6ICVzAC1taiUwNlg5JTAyWAAlbGxkACUhLjE1ZwA5MjIzMzcyMDM2ODU0Nzc1ODAAQVBJIGNhbGxlZCB3aXRoIE5VTEwgcHJlcGFyZWQgc3RhdGVtZW50ACUuMngAU2F2ZXBvaW50AEF1dG9Db21taXQAVHJhbnNhY3Rpb24AU29ydGVyTmV4dABQcmV2AE5leHQAQ2hlY2twb2ludABKb3VybmFsTW9kZQBWYWN1dW0AVkZpbHRlcgBWVXBkYXRlAEdvdG8AR29zdWIASW5pdENvcm91dGluZQBZaWVsZABNdXN0QmVJbnQASnVtcABPbmNlAElmAE5vdABJZk5vdABJZk51bGxSb3cAU2Vla0xUAFNlZWtMRQBTZWVrR0UAU2Vla0dUAElmTm9Ib3BlAE5vQ29uZmxpY3QATm90Rm91bmQARm91bmQAU2Vla1Jvd2lkAE5vdEV4aXN0cwBMYXN0AElmU21hbGxlcgBTb3J0ZXJTb3J0AFNvcnQAUmV3aW5kAElkeExFAElkeEdUAElkeExUAElkeEdFAFJvd1NldFJlYWQAUm93U2V0VGVzdABPcgBBbmQAUHJvZ3JhbQBGa0lmWmVybwBJZlBvcwBJZk5vdFplcm8ARGVjckp1bXBaZXJvAElzTnVsbABOb3ROdWxsAE5lAEVxAEd0AExlAEx0AEdlAEVsc2VOb3RFcQBJbmNyVmFjdXVtAFZOZXh0AEluaXQAUHVyZUZ1bmMwAEZ1bmN0aW9uMABQdXJlRnVuYwBGdW5jdGlvbgBSZXR1cm4ARW5kQ29yb3V0aW5lAEhhbHRJZk51bGwASGFsdABJbnRlZ2VyAEludDY0AFN0cmluZwBOdWxsAFNvZnROdWxsAEJsb2IAVmFyaWFibGUATW92ZQBDb3B5AFNDb3B5AEludENvcHkAUmVzdWx0Um93AENvbGxTZXEAQWRkSW1tAFJlYWxBZmZpbml0eQBDYXN0AFBlcm11dGF0aW9uAENvbXBhcmUASXNUcnVlAE9mZnNldABDb2x1bW4AQWZmaW5pdHkATWFrZVJlY29yZABDb3VudABSZWFkQ29va2llAFNldENvb2tpZQBCaXRBbmQAQml0T3IAU2hpZnRMZWZ0AFNoaWZ0UmlnaHQAQWRkAFN1YnRyYWN0AE11bHRpcGx5AERpdmlkZQBSZW1haW5kZXIAQ29uY2F0AFJlb3BlbklkeABCaXROb3QAT3BlblJlYWQAT3BlbldyaXRlAFN0cmluZzgAT3BlbkR1cABPcGVuQXV0b2luZGV4AE9wZW5FcGhlbWVyYWwAU29ydGVyT3BlbgBTZXF1ZW5jZVRlc3QAT3BlblBzZXVkbwBDbG9zZQBDb2x1bW5zVXNlZABTZWVrSGl0AFNlcXVlbmNlAE5ld1Jvd2lkAEluc2VydABEZWxldGUAUmVzZXRDb3VudABTb3J0ZXJDb21wYXJlAFNvcnRlckRhdGEAUm93RGF0YQBSb3dpZABOdWxsUm93AFNlZWtFbmQAU29ydGVySW5zZXJ0AElkeEluc2VydABJZHhEZWxldGUARGVmZXJyZWRTZWVrAElkeFJvd2lkAERlc3Ryb3kAQ2xlYXIAUmVzZXRTb3J0ZXIAQ3JlYXRlQnRyZWUAU3FsRXhlYwBQYXJzZVNjaGVtYQBMb2FkQW5hbHlzaXMARHJvcFRhYmxlAERyb3BJbmRleABSZWFsAERyb3BUcmlnZ2VyAEludGVncml0eUNrAFJvd1NldEFkZABQYXJhbQBGa0NvdW50ZXIATWVtTWF4AE9mZnNldExpbWl0AEFnZ0ludmVyc2UAQWdnU3RlcABBZ2dTdGVwMQBBZ2dWYWx1ZQBBZ2dGaW5hbABFeHBpcmUAVGFibGVMb2NrAFZCZWdpbgBWQ3JlYXRlAFZEZXN0cm95AFZPcGVuAFZDb2x1bW4AVlJlbmFtZQBQYWdlY291bnQATWF4UGdjbnQAVHJhY2UAQ3Vyc29ySGludABOb29wAEV4cGxhaW4AQWJvcnRhYmxlAGsoJWQAQklOQVJZAEIALCVzJXMALQApACglLjIwcykAJXMoJWQpACVkACUuMTZnAChibG9iKQB2dGFiOiVwACwlZABdAHByb2dyYW0ATk9UIE5VTEwAVU5JUVVFAENIRUNLAEZPUkVJR04gS0VZACVzIGNvbnN0cmFpbnQgZmFpbGVkACV6OiAlcwBhYm9ydCBhdCAlZCBpbiBbJXNdOiAlcwABAAABAQAAAQABAAEBAAEAAAEAAAAAAQIAAgIAAQIBAQECAQJjYW5ub3Qgb3BlbiBzYXZlcG9pbnQgLSBTUUwgc3RhdGVtZW50cyBpbiBwcm9ncmVzcwBubyBzdWNoIHNhdmVwb2ludDogJXMAY2Fubm90IHJlbGVhc2Ugc2F2ZXBvaW50IC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAY2Fubm90IGNvbW1pdCB0cmFuc2FjdGlvbiAtIFNRTCBzdGF0ZW1lbnRzIGluIHByb2dyZXNzAGNhbm5vdCBzdGFydCBhIHRyYW5zYWN0aW9uIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGNhbm5vdCByb2xsYmFjayAtIG5vIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZQBjYW5ub3QgY29tbWl0IC0gbm8gdHJhbnNhY3Rpb24gaXMgYWN0aXZlAGRhdGFiYXNlIHNjaGVtYSBoYXMgY2hhbmdlZABzcWxpdGVfbWFzdGVyAFNFTEVDVCBuYW1lLCByb290cGFnZSwgc3FsIEZST00gJyVxJy4lcyBXSEVSRSAlcyBPUkRFUiBCWSByb3dpZAB0b28gbWFueSBsZXZlbHMgb2YgdHJpZ2dlciByZWN1cnNpb24AY2Fubm90IGNoYW5nZSAlcyB3YWwgbW9kZSBmcm9tIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGludG8Ab3V0IG9mAGRhdGFiYXNlIHRhYmxlIGlzIGxvY2tlZDogJXMALS0gJXMAc3RhdGVtZW50IGFib3J0cyBhdCAlZDogWyVzXSAlcwBvdXQgb2YgbWVtb3J5AAABAgMEBggAAABzcWxpdGVfdGVtcF9tYXN0ZXIAMQBDUkVBVEUgVEFCTEUgeCh0eXBlIHRleHQsbmFtZSB0ZXh0LHRibF9uYW1lIHRleHQscm9vdHBhZ2UgaW50LHNxbCB0ZXh0KQBhdHRhY2hlZCBkYXRhYmFzZXMgbXVzdCB1c2UgdGhlIHNhbWUgdGV4dCBlbmNvZGluZyBhcyBtYWluIGRhdGFiYXNlAHVuc3VwcG9ydGVkIGZpbGUgZm9ybWF0AFNFTEVDVCBuYW1lLCByb290cGFnZSwgc3FsIEZST00gIiV3Ii4lcyBPUkRFUiBCWSByb3dpZABjcmVhdGUgAGludmFsaWQgcm9vdHBhZ2UAb3JwaGFuIGluZGV4AD8AbWFsZm9ybWVkIGRhdGFiYXNlIHNjaGVtYSAoJXMpACV6IC0gJXMAc3FsaXRlX3N0YXQxAFNFTEVDVCB0YmwsaWR4LHN0YXQgRlJPTSAlUS5zcWxpdGVfc3RhdDEAdW5vcmRlcmVkKgBzej1bMC05XSoAbm9za2lwc2NhbioATWFpbiBmcmVlbGlzdDogAG1heCByb290cGFnZSAoJWQpIGRpc2FncmVlcyB3aXRoIGhlYWRlciAoJWQpAGluY3JlbWVudGFsX3ZhY3V1bSBlbmFibGVkIHdpdGggYSBtYXggcm9vdHBhZ2Ugb2YgemVybwBQYWdlICVkIGlzIG5ldmVyIHVzZWQAUG9pbnRlciBtYXAgcGFnZSAlZCBpcyByZWZlcmVuY2VkAGZhaWxlZCB0byBnZXQgcGFnZSAlZABmcmVlbGlzdCBsZWFmIGNvdW50IHRvbyBiaWcgb24gcGFnZSAlZAAlcyBpcyAlZCBidXQgc2hvdWxkIGJlICVkAHNpemUAb3ZlcmZsb3cgbGlzdCBsZW5ndGgAaW52YWxpZCBwYWdlIG51bWJlciAlZAAybmQgcmVmZXJlbmNlIHRvIHBhZ2UgJWQACgBGYWlsZWQgdG8gcmVhZCBwdHJtYXAga2V5PSVkAEJhZCBwdHIgbWFwIGVudHJ5IGtleT0lZCBleHBlY3RlZD0oJWQsJWQpIGdvdD0oJWQsJWQpAFBhZ2UgJWQ6IAB1bmFibGUgdG8gZ2V0IHRoZSBwYWdlLiBlcnJvciBjb2RlPSVkAGJ0cmVlSW5pdFBhZ2UoKSByZXR1cm5zIGVycm9yIGNvZGUgJWQAZnJlZSBzcGFjZSBjb3JydXB0aW9uAE9uIHRyZWUgcGFnZSAlZCBjZWxsICVkOiAAT24gcGFnZSAlZCBhdCByaWdodCBjaGlsZDogAE9mZnNldCAlZCBvdXQgb2YgcmFuZ2UgJWQuLiVkAEV4dGVuZHMgb2ZmIGVuZCBvZiBwYWdlAFJvd2lkICVsbGQgb3V0IG9mIG9yZGVyAENoaWxkIHBhZ2UgZGVwdGggZGlmZmVycwBNdWx0aXBsZSB1c2VzIGZvciBieXRlICV1IG9mIHBhZ2UgJWQARnJhZ21lbnRhdGlvbiBvZiAlZCBieXRlcyByZXBvcnRlZCBhcyAlZCBvbiBwYWdlICVkAGRlbGV0ZQBwZXJzaXN0AG9mZgB0cnVuY2F0ZQBtZW1vcnkAd2FsAGNhbm5vdCBWQUNVVU0gZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbgBjYW5ub3QgVkFDVVVNIC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAbm9uLXRleHQgZmlsZW5hbWUAQVRUQUNIICVRIEFTIHZhY3V1bV9kYgBvdXRwdXQgZmlsZSBhbHJlYWR5IGV4aXN0cwBCRUdJTgBTRUxFQ1Qgc3FsIEZST00gIiV3Ii5zcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJ0FORCBuYW1lPD4nc3FsaXRlX3NlcXVlbmNlJyBBTkQgY29hbGVzY2Uocm9vdHBhZ2UsMSk+MABTRUxFQ1Qgc3FsIEZST00gIiV3Ii5zcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J2luZGV4JwBTRUxFQ1QnSU5TRVJUIElOVE8gdmFjdXVtX2RiLid8fHF1b3RlKG5hbWUpfHwnIFNFTEVDVCpGUk9NIiV3Ii4nfHxxdW90ZShuYW1lKUZST00gdmFjdXVtX2RiLnNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnQU5EIGNvYWxlc2NlKHJvb3RwYWdlLDEpPjAASU5TRVJUIElOVE8gdmFjdXVtX2RiLnNxbGl0ZV9tYXN0ZXIgU0VMRUNUKkZST00gIiV3Ii5zcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgSU4oJ3ZpZXcnLCd0cmlnZ2VyJykgT1IodHlwZT0ndGFibGUnQU5EIHJvb3RwYWdlPTApAAEBAwAFAAYACABDUkUASU5TAG5vIHN1Y2ggbW9kdWxlOiAlcwB2dGFibGUgY29uc3RydWN0b3IgY2FsbGVkIHJlY3Vyc2l2ZWx5OiAlcwB2dGFibGUgY29uc3RydWN0b3IgZmFpbGVkOiAlcwB2dGFibGUgY29uc3RydWN0b3IgZGlkIG5vdCBkZWNsYXJlIHNjaGVtYTogJXMAaGlkZGVuAGJpbmQgb24gYSBidXN5IHByZXBhcmVkIHN0YXRlbWVudDogWyVzXQAtLSAAJyUuKnEnAHplcm9ibG9iKCVkKQB4JwAlMDJ4ACcAY2Fubm90IG9wZW4gdmFsdWUgb2YgdHlwZSAlcwBudWxsAHJlYWwAaW50ZWdlcgBubyBzdWNoIHJvd2lkOiAlbGxkAHByYWdtYV8Abm8gc3VjaCB2aWV3AG5vIHN1Y2ggdGFibGUAJXM6ICVzLiVzACVzOiAlcwBhcHBsaWNhdGlvbl9pZABhdXRvX3ZhY3V1bQBhdXRvbWF0aWNfaW5kZXgAYnVzeV90aW1lb3V0AGNhY2hlX3NpemUAY2FjaGVfc3BpbGwAY2FzZV9zZW5zaXRpdmVfbGlrZQBjZWxsX3NpemVfY2hlY2sAY2hlY2twb2ludF9mdWxsZnN5bmMAY29sbGF0aW9uX2xpc3QAY29tcGlsZV9vcHRpb25zAGNvdW50X2NoYW5nZXMAZGF0YV92ZXJzaW9uAGRhdGFiYXNlX2xpc3QAZGVmYXVsdF9jYWNoZV9zaXplAGRlZmVyX2ZvcmVpZ25fa2V5cwBlbXB0eV9yZXN1bHRfY2FsbGJhY2tzAGVuY29kaW5nAGZvcmVpZ25fa2V5X2NoZWNrAGZvcmVpZ25fa2V5X2xpc3QAZm9yZWlnbl9rZXlzAGZyZWVsaXN0X2NvdW50AGZ1bGxfY29sdW1uX25hbWVzAGZ1bGxmc3luYwBpZ25vcmVfY2hlY2tfY29uc3RyYWludHMAaW5jcmVtZW50YWxfdmFjdXVtAGluZGV4X2luZm8AaW5kZXhfbGlzdABpbmRleF94aW5mbwBpbnRlZ3JpdHlfY2hlY2sAam91cm5hbF9tb2RlAGpvdXJuYWxfc2l6ZV9saW1pdABsZWdhY3lfYWx0ZXJfdGFibGUAbGVnYWN5X2ZpbGVfZm9ybWF0AGxvY2tpbmdfbW9kZQBtYXhfcGFnZV9jb3VudABtbWFwX3NpemUAb3B0aW1pemUAcGFnZV9jb3VudABwYWdlX3NpemUAcXVlcnlfb25seQBxdWlja19jaGVjawByZWFkX3VuY29tbWl0dGVkAHJlY3Vyc2l2ZV90cmlnZ2VycwByZXZlcnNlX3Vub3JkZXJlZF9zZWxlY3RzAHNjaGVtYV92ZXJzaW9uAHNlY3VyZV9kZWxldGUAc2hvcnRfY29sdW1uX25hbWVzAHNocmlua19tZW1vcnkAc29mdF9oZWFwX2xpbWl0AHN5bmNocm9ub3VzAHRhYmxlX2luZm8AdGFibGVfeGluZm8AdGVtcF9zdG9yZQB0ZW1wX3N0b3JlX2RpcmVjdG9yeQB0aHJlYWRzAHVzZXJfdmVyc2lvbgB3YWxfYXV0b2NoZWNrcG9pbnQAd2FsX2NoZWNrcG9pbnQAd3JpdGFibGVfc2NoZW1hAENSRUFURSBUQUJMRSB4ACVjIiVzIgAoIiVzIgAsYXJnIEhJRERFTgAsc2NoZW1hIEhJRERFTgBpZABzZXEAdGFibGUAZnJvbQB0bwBvbl91cGRhdGUAb25fZGVsZXRlAG1hdGNoAGNpZABuYW1lAHR5cGUAbm90bnVsbABkZmx0X3ZhbHVlAHBrAHNlcW5vAGRlc2MAY29sbABrZXkAdGJsAGlkeAB3ZHRoAGhnaHQAZmxncwB1bmlxdWUAb3JpZ2luAHBhcnRpYWwAcm93aWQAcGFyZW50AGZraWQAZmlsZQBidXN5AGNoZWNrcG9pbnRlZABidWlsdGluAGRhdGFiYXNlAHN0YXR1cwB0aW1lb3V0AFBSQUdNQSAAJVEuAD0lUQB0b28gbWFueSBjb2x1bW5zIG9uICVzAHVub3BlbmVkAEFQSSBjYWxsIHdpdGggJXMgZGF0YWJhc2UgY29ubmVjdGlvbiBwb2ludGVyAGRhdGFiYXNlIHNjaGVtYSBpcyBsb2NrZWQ6ICVzAHN0YXRlbWVudCB0b28gbG9uZwBhZGRyAG9wY29kZQBwMQBwMgBwMwBwNABwNQBjb21tZW50AG5vdHVzZWQAZGV0YWlsAG5vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlOiAlcwB1bnJlY29nbml6ZWQgdG9rZW46ICIlLipzIgAlcyBpbiAiJXMiAHVua25vd24gdGFibGUgb3B0aW9uOiAlLipzAHNldCBsaXN0AG5lYXIgIiVUIjogc3ludGF4IGVycm9yAHF1YWxpZmllZCB0YWJsZSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgb24gSU5TRVJULCBVUERBVEUsIGFuZCBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAdGhlIElOREVYRUQgQlkgY2xhdXNlIGlzIG5vdCBhbGxvd2VkIG9uIFVQREFURSBvciBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAdGhlIE5PVCBJTkRFWEVEIGNsYXVzZSBpcyBub3QgYWxsb3dlZCBvbiBVUERBVEUgb3IgREVMRVRFIHN0YXRlbWVudHMgd2l0aGluIHRyaWdnZXJzAHBhcnNlciBzdGFjayBvdmVyZmxvdwBCAEMARABFAG1pc3VzZSBvZiBhZ2dyZWdhdGU6ICVzKCkAdW5rbm93biBmdW5jdGlvbjogJXMoKQAlZCBjb2x1bW5zIGFzc2lnbmVkICVkIHZhbHVlcwByb3cgdmFsdWUgbWlzdXNlZABSQUlTRSgpIG1heSBvbmx5IGJlIHVzZWQgd2l0aGluIGEgdHJpZ2dlci1wcm9ncmFtACVzJXMAMHgAaGV4IGxpdGVyYWwgdG9vIGJpZzogJXMlcwBzdWItc2VsZWN0IHJldHVybnMgJWQgY29sdW1ucyAtIGV4cGVjdGVkICVkAFJFVVNFIFNVQlFVRVJZICVkACVzU0NBTEFSIFNVQlFVRVJZICVkAENPUlJFTEFURUQgAFVTSU5HIFJPV0lEIFNFQVJDSCBPTiBUQUJMRSAlcyBGT1IgSU4tT1BFUkFUT1IAVVNJTkcgSU5ERVggJXMgRk9SIElOLU9QRVJBVE9SAFJFVVNFIExJU1QgU1VCUVVFUlkgJWQAJXNMSVNUIFNVQlFVRVJZICVkAG5vdCBhdXRob3JpemVkAGF1dGhvcml6ZXIgbWFsZnVuY3Rpb24AUk9MTEJBQ0sAQ09NTUlUAFJFTEVBU0UAdGVtcG9yYXJ5IHRhYmxlIG5hbWUgbXVzdCBiZSB1bnF1YWxpZmllZAACBAgGdGFibGUgJVQgYWxyZWFkeSBleGlzdHMAdGhlcmUgaXMgYWxyZWFkeSBhbiBpbmRleCBuYW1lZCAlcwBzcWxpdGVfc2VxdWVuY2UABgAAAAAAY29ycnVwdCBkYXRhYmFzZQB1bmtub3duIGRhdGFiYXNlICVUAHNxbGl0ZV8Ab2JqZWN0IG5hbWUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZTogJXMAQVVUT0lOQ1JFTUVOVCBub3QgYWxsb3dlZCBvbiBXSVRIT1VUIFJPV0lEIHRhYmxlcwBQUklNQVJZIEtFWSBtaXNzaW5nIG9uIHRhYmxlICVzAFRBQkxFAHZpZXcAVklFVwBDUkVBVEUgJXMgJS4qcwBVUERBVEUgJVEuJXMgU0VUIHR5cGU9JyVzJywgbmFtZT0lUSwgdGJsX25hbWU9JVEsIHJvb3RwYWdlPSMlZCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZABDUkVBVEUgVEFCTEUgJVEuc3FsaXRlX3NlcXVlbmNlKG5hbWUsc2VxKQB0YmxfbmFtZT0nJXEnIEFORCB0eXBlIT0ndHJpZ2dlcicAdGhlICIuIiBvcGVyYXRvcgBzZWNvbmQgYXJndW1lbnQgdG8gbGlrZWxpaG9vZCgpIG11c3QgYmUgYSBjb25zdGFudCBiZXR3ZWVuIDAuMCBhbmQgMS4wAG5vdCBhdXRob3JpemVkIHRvIHVzZSBmdW5jdGlvbjogJXMAbm9uLWRldGVybWluaXN0aWMgZnVuY3Rpb25zACUuKnMoKSBtYXkgbm90IGJlIHVzZWQgYXMgYSB3aW5kb3cgZnVuY3Rpb24Ad2luZG93AGFnZ3JlZ2F0ZQBtaXN1c2Ugb2YgJXMgZnVuY3Rpb24gJS4qcygpAG5vIHN1Y2ggZnVuY3Rpb246ICUuKnMAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiAlLipzKCkAc3VicXVlcmllcwBwYXJhbWV0ZXJzAHBhcnRpYWwgaW5kZXggV0hFUkUgY2xhdXNlcwBpbmRleCBleHByZXNzaW9ucwBDSEVDSyBjb25zdHJhaW50cwAlcyBwcm9oaWJpdGVkIGluICVzAG5ldwBvbGQAZXhjbHVkZWQAbWlzdXNlIG9mIGFsaWFzZWQgYWdncmVnYXRlICVzAG1pc3VzZSBvZiBhbGlhc2VkIHdpbmRvdyBmdW5jdGlvbiAlcwBkb3VibGUtcXVvdGVkIHN0cmluZyBsaXRlcmFsOiAiJXciAG5vIHN1Y2ggY29sdW1uAGFtYmlndW91cyBjb2x1bW4gbmFtZQAlczogJXMuJXMuJXMAUk9XSUQAJXMuJXMAJXMuJXoAYWNjZXNzIHRvICV6IGlzIHByb2hpYml0ZWQAUkFOR0Ugd2l0aCBvZmZzZXQgUFJFQ0VESU5HL0ZPTExPV0lORyByZXF1aXJlcyBvbmUgT1JERVIgQlkgZXhwcmVzc2lvbgBGSUxURVIgY2xhdXNlIG1heSBvbmx5IGJlIHVzZWQgd2l0aCBhZ2dyZWdhdGUgd2luZG93IGZ1bmN0aW9ucwByb3dfbnVtYmVyAGRlbnNlX3JhbmsAcmFuawBwZXJjZW50X3JhbmsAY3VtZV9kaXN0AG50aWxlAGxlYWQAbGFnAG5vIHN1Y2ggd2luZG93OiAlcwBhIEdST1VQIEJZIGNsYXVzZSBpcyByZXF1aXJlZCBiZWZvcmUgSEFWSU5HAE9SREVSAEdST1VQAGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBHUk9VUCBCWSBjbGF1c2UAdG9vIG1hbnkgcmVmZXJlbmNlcyB0byAiJXMiOiBtYXggNjU1MzUAKgAlcy4lcy4lcwBubyBzdWNoIHRhYmxlOiAlcwBubyB0YWJsZXMgc3BlY2lmaWVkAHRvbyBtYW55IGNvbHVtbnMgaW4gcmVzdWx0IHNldABtdWx0aXBsZSByZWZlcmVuY2VzIHRvIHJlY3Vyc2l2ZSB0YWJsZTogJXMAY2lyY3VsYXIgcmVmZXJlbmNlOiAlcwB0YWJsZSAlcyBoYXMgJWQgdmFsdWVzIGZvciAlZCBjb2x1bW5zAG11bHRpcGxlIHJlY3Vyc2l2ZSByZWZlcmVuY2VzOiAlcwByZWN1cnNpdmUgcmVmZXJlbmNlIGluIGEgc3VicXVlcnk6ICVzAGNvbHVtbiVkACUuKno6JXUAc3VicXVlcnlfJXUAJyVzJyBpcyBub3QgYSBmdW5jdGlvbgB2aWV3ICVzIGlzIGNpcmN1bGFybHkgZGVmaW5lZABubyBzdWNoIGluZGV4OiAlcwBhIE5BVFVSQUwgam9pbiBtYXkgbm90IGhhdmUgYW4gT04gb3IgVVNJTkcgY2xhdXNlAGNhbm5vdCBoYXZlIGJvdGggT04gYW5kIFVTSU5HIGNsYXVzZXMgaW4gdGhlIHNhbWUgam9pbgBjYW5ub3Qgam9pbiB1c2luZyBjb2x1bW4gJXMgLSBjb2x1bW4gbm90IHByZXNlbnQgaW4gYm90aCB0YWJsZXMAJXIgJXMgQlkgdGVybSBvdXQgb2YgcmFuZ2UgLSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAlZAB0b28gbWFueSB0ZXJtcyBpbiAlcyBCWSBjbGF1c2UAYWxsIFZBTFVFUyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHRlcm1zAFNFTEVDVHMgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mICVzIGRvIG5vdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiByZXN1bHQgY29sdW1ucwBVTklPTiBBTEwASU5URVJTRUNUAEVYQ0VQVABVTklPTgB0b28gbWFueSB0ZXJtcyBpbiBPUkRFUiBCWSBjbGF1c2UAJXIgT1JERVIgQlkgdGVybSBkb2VzIG5vdCBtYXRjaCBhbnkgY29sdW1uIGluIHRoZSByZXN1bHQgc2V0AEV4cHJlc3Npb24gdHJlZSBpcyB0b28gbGFyZ2UgKG1heGltdW0gZGVwdGggJWQpACwACiAgACwKICAACikAQ1JFQVRFIFRBQkxFIAAgVEVYVAAgTlVNACBJTlQAIFJFQUwAZHVwbGljYXRlIGNvbHVtbiBuYW1lOiAlcwBkZWZhdWx0IHZhbHVlIG9mIGNvbHVtbiBbJXNdIGlzIG5vdCBjb25zdGFudAB0cnVlAGZhbHNlAHRhYmxlICIlcyIgaGFzIG1vcmUgdGhhbiBvbmUgcHJpbWFyeSBrZXkAQVVUT0lOQ1JFTUVOVCBpcyBvbmx5IGFsbG93ZWQgb24gYW4gSU5URUdFUiBQUklNQVJZIEtFWQBpbmRleABjYW5ub3QgY3JlYXRlIGEgVEVNUCBpbmRleCBvbiBub24tVEVNUCB0YWJsZSAiJXMiAHRhYmxlICVzIG1heSBub3QgYmUgaW5kZXhlZAB2aWV3cyBtYXkgbm90IGJlIGluZGV4ZWQAdmlydHVhbCB0YWJsZXMgbWF5IG5vdCBiZSBpbmRleGVkAHRoZXJlIGlzIGFscmVhZHkgYSB0YWJsZSBuYW1lZCAlcwBpbmRleCAlcyBhbHJlYWR5IGV4aXN0cwBzcWxpdGVfYXV0b2luZGV4XyVzXyVkAGV4cHJlc3Npb25zIHByb2hpYml0ZWQgaW4gUFJJTUFSWSBLRVkgYW5kIFVOSVFVRSBjb25zdHJhaW50cwBjb25mbGljdGluZyBPTiBDT05GTElDVCBjbGF1c2VzIHNwZWNpZmllZABDUkVBVEUlcyBJTkRFWCAlLipzACBVTklRVUUASU5TRVJUIElOVE8gJVEuJXMgVkFMVUVTKCdpbmRleCcsJVEsJVEsIyVkLCVRKTsAbmFtZT0nJXEnIEFORCB0eXBlPSdpbmRleCcAJXMgJVQgY2Fubm90IHJlZmVyZW5jZSBvYmplY3RzIGluIGRhdGFiYXNlICVzACVzIGNhbm5vdCB1c2UgdmFyaWFibGVzAGluZGV4ICclcScALCAAZm9yZWlnbiBrZXkgb24gJXMgc2hvdWxkIHJlZmVyZW5jZSBvbmx5IG9uZSBjb2x1bW4gb2YgdGFibGUgJVQAbnVtYmVyIG9mIGNvbHVtbnMgaW4gZm9yZWlnbiBrZXkgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSByZWZlcmVuY2VkIHRhYmxlAHVua25vd24gY29sdW1uICIlcyIgaW4gZm9yZWlnbiBrZXkgZGVmaW5pdGlvbgBzcWxpdGVfc3RhdAB0YWJsZSAlcyBtYXkgbm90IGJlIGRyb3BwZWQAdXNlIERST1AgVEFCTEUgdG8gZGVsZXRlIHRhYmxlICVzAHVzZSBEUk9QIFZJRVcgdG8gZGVsZXRlIHZpZXcgJXMAc3FsaXRlX3N0YXQlZABERUxFVEUgRlJPTSAlUS4lcyBXSEVSRSAlcz0lUQBERUxFVEUgRlJPTSAlUS5zcWxpdGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0lUQBERUxFVEUgRlJPTSAlUS4lcyBXSEVSRSB0YmxfbmFtZT0lUSBhbmQgdHlwZSE9J3RyaWdnZXInAERFTEVURSBGUk9NICVRLiVzIFdIRVJFIG5hbWU9JVEgQU5EIHR5cGU9J3RyaWdnZXInAGNvcnJ1cHQgc2NoZW1hAFVQREFURSAlUS4lcyBTRVQgcm9vdHBhZ2U9JWQgV0hFUkUgIyVkIEFORCByb290cGFnZT0jJWQAcGFyYW1ldGVycyBhcmUgbm90IGFsbG93ZWQgaW4gdmlld3MAZXhwZWN0ZWQgJWQgY29sdW1ucyBmb3IgJyVzJyBidXQgZ290ICVkAENPLVJPVVRJTkUgJXUATUFURVJJQUxJWkUgJXUARElTVElOQ1QAR1JPVVAgQlkAUklHSFQgUEFSVCBPRiBPUkRFUiBCWQBPUkRFUiBCWQB0b28gbWFueSBGUk9NIGNsYXVzZSB0ZXJtcywgbWF4OiAlZAAlcyBjbGF1c2Ugc2hvdWxkIGNvbWUgYWZ0ZXIgJXMgbm90IGJlZm9yZQBMSU1JVABDT01QT1VORCBRVUVSWQBMRUZULU1PU1QgU1VCUVVFUlkAJXMgVVNJTkcgVEVNUCBCLVRSRUUAU0NBTiAlZCBDT05TVEFOVCBST1clcwBTAGNhbm5vdCB1c2Ugd2luZG93IGZ1bmN0aW9ucyBpbiByZWN1cnNpdmUgcXVlcmllcwBTRVRVUAByZWN1cnNpdmUgYWdncmVnYXRlIHF1ZXJpZXMgbm90IHN1cHBvcnRlZABSRUNVUlNJVkUgU1RFUABNRVJHRSAoJXMpAExFRlQAUklHSFQAbnRoX3ZhbHVlAGZpcnN0X3ZhbHVlAGF0IG1vc3QgJWQgdGFibGVzIGluIGEgam9pbgBTQ0FOIENPTlNUQU5UIFJPVwB0b28gbWFueSBhcmd1bWVudHMgb24gJXMoKSAtIG1heCAlZABPTiBjbGF1c2UgcmVmZXJlbmNlcyB0YWJsZXMgdG8gaXRzIHJpZ2h0AE5PQ0FTRQBnbG9iAGxpa2UAcmVnZXhwAGFiYnJldmlhdGVkIHF1ZXJ5IGFsZ29yaXRobSBzZWFyY2gAJXMueEJlc3RJbmRleCBtYWxmdW5jdGlvbgBubyBxdWVyeSBzb2x1dGlvbgBhdXRvbWF0aWMgaW5kZXggb24gJXMoJXMpAGF1dG8taW5kZXgAU0VBUkNIAFNDQU4AIFNVQlFVRVJZICV1ACBUQUJMRSAlcwAgQVMgJXMAUFJJTUFSWSBLRVkAQVVUT01BVElDIFBBUlRJQUwgQ09WRVJJTkcgSU5ERVgAQVVUT01BVElDIENPVkVSSU5HIElOREVYAENPVkVSSU5HIElOREVYICVzAElOREVYICVzACBVU0lORyAAPQA+PyBBTkQgcm93aWQ8AD4APAAgVVNJTkcgSU5URUdFUiBQUklNQVJZIEtFWSAocm93aWQlcz8pACBWSVJUVUFMIFRBQkxFIElOREVYICVkOiVzACAoACBBTkQgACVzPT8AQU5ZKCVzKQA8ZXhwcj4AKAAZFxYYAAAkIBkWGBcoJiUnTVVMVEktSU5ERVggT1IASU5ERVggJWQABQQkIGZyYW1lIHN0YXJ0aW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIAZnJhbWUgZW5kaW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIAc2Vjb25kIGFyZ3VtZW50IHRvIG50aF92YWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcgBmcmFtZSBzdGFydGluZyBvZmZzZXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIAZnJhbWUgZW5kaW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcgBtaW4AbWF4AFVTRSBURU1QIEItVFJFRSBGT1IgJXMARElTVElOQ1QgYWdncmVnYXRlcyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgYXJndW1lbnQAU0NBTiBUQUJMRSAlcyVzJXMAIFVTSU5HIENPVkVSSU5HIElOREVYIAB0b28gbWFueSB0ZXJtcyBpbiBjb21wb3VuZCBTRUxFQ1QAYSBKT0lOIGNsYXVzZSBpcyByZXF1aXJlZCBiZWZvcmUgJXMAT04AVVNJTkcAIAB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGpvaW4gdHlwZTogJVQgJVQlcyVUAFJJR0hUIGFuZCBGVUxMIE9VVEVSIEpPSU5zIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZAByb3dzIGRlbGV0ZWQAdGFibGUgJXMgbWF5IG5vdCBiZSBtb2RpZmllZABjYW5ub3QgbW9kaWZ5ICVzIGJlY2F1c2UgaXQgaXMgYSB2aWV3AC0tIFRSSUdHRVIgJXMAZm9yZWlnbiBrZXkgbWlzbWF0Y2ggLSAiJXciIHJlZmVyZW5jaW5nICIldyIAdG9vIG1hbnkgY29sdW1ucyBpbiAlcwBubyBzdWNoIGNvbHVtbjogJXMAcm93cyB1cGRhdGVkACVzLnJvd2lkAHRhYmxlICVTIGhhcyBubyBjb2x1bW4gbmFtZWQgJXMAdGFibGUgJVMgaGFzICVkIGNvbHVtbnMgYnV0ICVkIHZhbHVlcyB3ZXJlIHN1cHBsaWVkACVkIHZhbHVlcyBmb3IgJWQgY29sdW1ucwBVUFNFUlQgbm90IGltcGxlbWVudGVkIGZvciB2aXJ0dWFsIHRhYmxlICIlcyIAcm93cyBpbnNlcnRlZABPTiBDT05GTElDVCBjbGF1c2UgZG9lcyBub3QgbWF0Y2ggYW55IFBSSU1BUlkgS0VZIG9yIFVOSVFVRSBjb25zdHJhaW50AHZhcmlhYmxlIG51bWJlciBtdXN0IGJlIGJldHdlZW4gPzEgYW5kID8lZAB0b28gbWFueSBTUUwgdmFyaWFibGVzAHRvbyBtYW55IGFyZ3VtZW50cyBvbiBmdW5jdGlvbiAlVABESVNUSU5DVCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3aW5kb3cgZnVuY3Rpb25zADAAc3ludGF4IGVycm9yIGFmdGVyIGNvbHVtbiBuYW1lICIlLipzIgBubyBzdWNoIGluZGV4OiAlUwBpbmRleCBhc3NvY2lhdGVkIHdpdGggVU5JUVVFIG9yIFBSSU1BUlkgS0VZIGNvbnN0cmFpbnQgY2Fubm90IGJlIGRyb3BwZWQAREVMRVRFIEZST00gJVEuJXMgV0hFUkUgbmFtZT0lUSBBTkQgdHlwZT0naW5kZXgnAC0lVABmYXN0AG5vcm1hbABleGNsdXNpdmUAbm90IGEgd3JpdGFibGUgZGlyZWN0b3J5AFNhZmV0eSBsZXZlbCBtYXkgbm90IGJlIGNoYW5nZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24AaXNzaXNpaQBpc3Npc2kAaWlzWABpc2lYAGMAdQBpc2lzaQBpc3MAaXMAaWlzc3Nzc3MATk9ORQBzaVgAKioqIGluIGRhdGFiYXNlICVzICoqKgoATlVMTCB2YWx1ZSBpbiAlcy4lcwBDSEVDSyBjb25zdHJhaW50IGZhaWxlZCBpbiAlcwByb3cgACBtaXNzaW5nIGZyb20gaW5kZXggAG5vbi11bmlxdWUgZW50cnkgaW4gaW5kZXggAHdyb25nICMgb2YgZW50cmllcyBpbiBpbmRleCAAb2sAVVRGOABVVEYtOABVVEYtMTZsZQBVVEYtMTZiZQBVVEYxNmxlAFVURjE2YmUAVVRGLTE2AFVURjE2AHVuc3VwcG9ydGVkIGVuY29kaW5nOiAlcwACAAEAXwAAAAIAAABeAAEAUQEBAGZ1bGwAcmVzdGFydABBTkFMWVpFICIldyIuIiV3IgBub25lAGluY3JlbWVudGFsAHRlbXBvcmFyeSBzdG9yYWdlIGNhbm5vdCBiZSBjaGFuZ2VkIGZyb20gd2l0aGluIGEgdHJhbnNhY3Rpb24AAQAAAAEBAwJTRVQgTlVMTABTRVQgREVGQVVMVABDQVNDQURFAFJFU1RSSUNUAE5PIEFDVElPTgAlXwAATElLRSBvciBHTE9CIHBhdHRlcm4gdG9vIGNvbXBsZXgARVNDQVBFIGV4cHJlc3Npb24gbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIASU5TRVJUIElOVE8gJVEuJXMgVkFMVUVTKCd0cmlnZ2VyJywlUSwlUSwwLCdDUkVBVEUgVFJJR0dFUiAlcScpAHR5cGU9J3RyaWdnZXInIEFORCBuYW1lPSclcScAdGVtcG9yYXJ5IHRyaWdnZXIgbWF5IG5vdCBoYXZlIHF1YWxpZmllZCBuYW1lAGNhbm5vdCBjcmVhdGUgdHJpZ2dlcnMgb24gdmlydHVhbCB0YWJsZXMAdHJpZ2dlciAlVCBhbHJlYWR5IGV4aXN0cwBjYW5ub3QgY3JlYXRlIHRyaWdnZXIgb24gc3lzdGVtIHRhYmxlAGNhbm5vdCBjcmVhdGUgJXMgdHJpZ2dlciBvbiB2aWV3OiAlUwBCRUZPUkUAQUZURVIAY2Fubm90IGNyZWF0ZSBJTlNURUFEIE9GIHRyaWdnZXIgb24gdGFibGU6ICVTAG5vIHN1Y2ggdHJpZ2dlcjogJVMAc3FsaXRlX2F0dGFjaAB0b28gbWFueSBhdHRhY2hlZCBkYXRhYmFzZXMgLSBtYXggJWQAZGF0YWJhc2UgJXMgaXMgYWxyZWFkeSBpbiB1c2UAZGF0YWJhc2UgaXMgYWxyZWFkeSBhdHRhY2hlZAB1bmFibGUgdG8gb3BlbiBkYXRhYmFzZTogJXMAZmlsZToAbG9jYWxob3N0AGludmFsaWQgdXJpIGF1dGhvcml0eTogJS4qcwB2ZnMAY2FjaGUAc2hhcmVkAHByaXZhdGUAcm8AcncAcndjAG5vIHN1Y2ggJXMgbW9kZTogJXMAJXMgbW9kZSBub3QgYWxsb3dlZDogJXMAbm8gc3VjaCB2ZnM6ICVzAHNxbGl0ZV9kZXRhY2gAbm8gc3VjaCBkYXRhYmFzZTogJXMAY2Fubm90IGRldGFjaCBkYXRhYmFzZSAlcwBkYXRhYmFzZSAlcyBpcyBsb2NrZWQAdW5hYmxlIHRvIGlkZW50aWZ5IHRoZSBvYmplY3QgdG8gYmUgcmVpbmRleGVkAHRibCxpZHgsc3RhdABzcWxpdGVfc3RhdDMAc3FsaXRlX3N0YXQ0AENSRUFURSBUQUJMRSAlUS4lcyglcykAc3FsaXRlXF8lAEJCQgBzdGF0X2luaXQAc3RhdF9wdXNoAHN0YXRfZ2V0ACVsbHUAICVsbHUAdGhlcmUgaXMgYWxyZWFkeSBhbm90aGVyIHRhYmxlIG9yIGluZGV4IHdpdGggdGhpcyBuYW1lOiAlcwB2aWV3ICVzIG1heSBub3QgYmUgYWx0ZXJlZABVUERBVEUgIiV3Ii4lcyBTRVQgc3FsID0gc3FsaXRlX3JlbmFtZV90YWJsZSglUSwgdHlwZSwgbmFtZSwgc3FsLCAlUSwgJVEsICVkKSBXSEVSRSAodHlwZSE9J2luZGV4JyBPUiB0YmxfbmFtZT0lUSBDT0xMQVRFIG5vY2FzZSlBTkQgICBuYW1lIE5PVCBMSUtFICdzcWxpdGVfJSUnAFVQREFURSAlUS4lcyBTRVQgdGJsX25hbWUgPSAlUSwgbmFtZSA9IENBU0UgV0hFTiB0eXBlPSd0YWJsZScgVEhFTiAlUSBXSEVOIG5hbWUgTElLRSAnc3FsaXRlX2F1dG9pbmRleCUlJyBBTkQgdHlwZT0naW5kZXgnIFRIRU4gJ3NxbGl0ZV9hdXRvaW5kZXhfJyB8fCAlUSB8fCBzdWJzdHIobmFtZSwlZCsxOCkgRUxTRSBuYW1lIEVORCBXSEVSRSB0YmxfbmFtZT0lUSBDT0xMQVRFIG5vY2FzZSBBTkQgKHR5cGU9J3RhYmxlJyBPUiB0eXBlPSdpbmRleCcgT1IgdHlwZT0ndHJpZ2dlcicpOwBVUERBVEUgIiV3Ii5zcWxpdGVfc2VxdWVuY2Ugc2V0IG5hbWUgPSAlUSBXSEVSRSBuYW1lID0gJVEAVVBEQVRFIHNxbGl0ZV90ZW1wX21hc3RlciBTRVQgc3FsID0gc3FsaXRlX3JlbmFtZV90YWJsZSglUSwgdHlwZSwgbmFtZSwgc3FsLCAlUSwgJVEsIDEpLCB0YmxfbmFtZSA9IENBU0UgV0hFTiB0YmxfbmFtZT0lUSBDT0xMQVRFIG5vY2FzZSBBTkQgICAgICAgICAgIHNxbGl0ZV9yZW5hbWVfdGVzdCglUSwgc3FsLCB0eXBlLCBuYW1lLCAxKSBUSEVOICVRIEVMU0UgdGJsX25hbWUgRU5EIFdIRVJFIHR5cGUgSU4gKCd2aWV3JywgJ3RyaWdnZXInKQB0YWJsZSAlcyBtYXkgbm90IGJlIGFsdGVyZWQAU0VMRUNUIDEgRlJPTSAiJXciLiVzIFdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZV8lJScgQU5EIHNxbCBOT1QgTElLRSAnY3JlYXRlIHZpcnR1YWwlJScgQU5EIHNxbGl0ZV9yZW5hbWVfdGVzdCglUSwgc3FsLCB0eXBlLCBuYW1lLCAlZCk9TlVMTCAAU0VMRUNUIDEgRlJPTSB0ZW1wLiVzIFdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZV8lJScgQU5EIHNxbCBOT1QgTElLRSAnY3JlYXRlIHZpcnR1YWwlJScgQU5EIHNxbGl0ZV9yZW5hbWVfdGVzdCglUSwgc3FsLCB0eXBlLCBuYW1lLCAxKT1OVUxMIABDYW5ub3QgYWRkIGEgUFJJTUFSWSBLRVkgY29sdW1uAENhbm5vdCBhZGQgYSBVTklRVUUgY29sdW1uAENhbm5vdCBhZGQgYSBSRUZFUkVOQ0VTIGNvbHVtbiB3aXRoIG5vbi1OVUxMIGRlZmF1bHQgdmFsdWUAQ2Fubm90IGFkZCBhIE5PVCBOVUxMIGNvbHVtbiB3aXRoIGRlZmF1bHQgdmFsdWUgTlVMTABDYW5ub3QgYWRkIGEgY29sdW1uIHdpdGggbm9uLWNvbnN0YW50IGRlZmF1bHQAVVBEQVRFICIldyIuJXMgU0VUIHNxbCA9IHN1YnN0cihzcWwsMSwlZCkgfHwgJywgJyB8fCAlUSB8fCBzdWJzdHIoc3FsLCVkKSBXSEVSRSB0eXBlID0gJ3RhYmxlJyBBTkQgbmFtZSA9ICVRAHZpcnR1YWwgdGFibGVzIG1heSBub3QgYmUgYWx0ZXJlZABDYW5ub3QgYWRkIGEgY29sdW1uIHRvIGEgdmlldwBzcWxpdGVfYWx0ZXJ0YWJfJXMAVVBEQVRFICIldyIuJXMgU0VUIHNxbCA9IHNxbGl0ZV9yZW5hbWVfY29sdW1uKHNxbCwgdHlwZSwgbmFtZSwgJVEsICVRLCAlZCwgJVEsICVkLCAlZCkgV0hFUkUgbmFtZSBOT1QgTElLRSAnc3FsaXRlXyUlJyBBTkQgKHR5cGUgIT0gJ2luZGV4JyBPUiB0YmxfbmFtZSA9ICVRKSBBTkQgc3FsIE5PVCBMSUtFICdjcmVhdGUgdmlydHVhbCUlJwBVUERBVEUgdGVtcC4lcyBTRVQgc3FsID0gc3FsaXRlX3JlbmFtZV9jb2x1bW4oc3FsLCB0eXBlLCBuYW1lLCAlUSwgJVEsICVkLCAlUSwgJWQsIDEpIFdIRVJFIHR5cGUgSU4gKCd0cmlnZ2VyJywgJ3ZpZXcnKQB2aXJ0dWFsIHRhYmxlAGNhbm5vdCByZW5hbWUgY29sdW1ucyBvZiAlcyAiJXMiAENSRUFURSBWSVJUVUFMIFRBQkxFICVUAFVQREFURSAlUS4lcyBTRVQgdHlwZT0ndGFibGUnLCBuYW1lPSVRLCB0YmxfbmFtZT0lUSwgcm9vdHBhZ2U9MCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZABuYW1lPSclcScgQU5EIHR5cGU9J3RhYmxlJwBkdXBsaWNhdGUgV0lUSCB0YWJsZSBuYW1lOiAlcwBQQVJUSVRJT04gY2xhdXNlAE9SREVSIEJZIGNsYXVzZQBmcmFtZSBzcGVjaWZpY2F0aW9uAGNhbm5vdCBvdmVycmlkZSAlcyBvZiB3aW5kb3c6ICVzAHVuc3VwcG9ydGVkIGZyYW1lIHNwZWNpZmljYXRpb24AaW5jb21wbGV0ZSBpbnB1dABzcWxpdGVfY29tcGlsZW9wdGlvbl91c2VkAHNxbGl0ZV9jb21waWxlb3B0aW9uX2dldAB1bmxpa2VseQBsaWtlbGlob29kAGxpa2VseQBsdHJpbQBydHJpbQB0cmltAHR5cGVvZgBsZW5ndGgAaW5zdHIAcHJpbnRmAHVuaWNvZGUAY2hhcgBhYnMAcm91bmQAdXBwZXIAbG93ZXIAaGV4AGlmbnVsbAByYW5kb20AcmFuZG9tYmxvYgBudWxsaWYAc3FsaXRlX3ZlcnNpb24Ac3FsaXRlX3NvdXJjZV9pZABzcWxpdGVfbG9nAHF1b3RlAGxhc3RfaW5zZXJ0X3Jvd2lkAGNoYW5nZXMAdG90YWxfY2hhbmdlcwByZXBsYWNlAHplcm9ibG9iAHN1YnN0cgBzdW0AdG90YWwAYXZnAGNvdW50AGdyb3VwX2NvbmNhdABjb2FsZXNjZQABdGV4dABibG9iAGludGVnZXIgb3ZlcmZsb3cAJS4qZgAlIS4yMGUAc3FsaXRlX3JlbmFtZV9jb2x1bW4Ac3FsaXRlX3JlbmFtZV90YWJsZQBzcWxpdGVfcmVuYW1lX3Rlc3QAIiV3IgBlcnJvciBpbiAlcyAlcyVzOiAlcwAgYWZ0ZXIgcmVuYW1lAGxhc3RfdmFsdWUAYXJndW1lbnQgb2YgbnRpbGUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIAanVsaWFuZGF5AGRhdGUAdGltZQBkYXRldGltZQBzdHJmdGltZQBjdXJyZW50X3RpbWUAY3VycmVudF90aW1lc3RhbXAAY3VycmVudF9kYXRlAG5vdwA0MGYtMjFhLTIxZAAyMGM6MjBlADIwZQAyMGI6MjBlAG5vbi1kZXRlcm1pbmlzdGljIGZ1bmN0aW9uIGluIGluZGV4IGV4cHJlc3Npb24gb3IgQ0hFQ0sgY29uc3RyYWludABsb2NhbHRpbWUAdW5peGVwb2NoAHV0YwB3ZWVrZGF5IABzdGFydCBvZiAAbW9udGgAeWVhcgBkYXkAbG9jYWwgdGltZSB1bmF2YWlsYWJsZQBzZWNvbmQAbWludXRlAGhvdXIAJTA0ZC0lMDJkLSUwMmQAJTAyZDolMDJkOiUwMmQAJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQAJTAyZAAlMDYuM2YAJTAzZAAlMDRkAGZhaWxlZCB0byBhbGxvY2F0ZSAldSBieXRlcyBvZiBtZW1vcnkAZmFpbGVkIG1lbW9yeSByZXNpemUgJXUgdG8gJXUgYnl0ZXMAdW5hYmxlIHRvIGNsb3NlIGR1ZSB0byB1bmZpbmFsaXplZCBzdGF0ZW1lbnRzIG9yIHVuZmluaXNoZWQgYmFja3VwcwBub3QgYW4gZXJyb3IAU1FMIGxvZ2ljIGVycm9yAGFjY2VzcyBwZXJtaXNzaW9uIGRlbmllZABxdWVyeSBhYm9ydGVkAGRhdGFiYXNlIGlzIGxvY2tlZABkYXRhYmFzZSB0YWJsZSBpcyBsb2NrZWQAYXR0ZW1wdCB0byB3cml0ZSBhIHJlYWRvbmx5IGRhdGFiYXNlAGludGVycnVwdGVkAGRpc2sgSS9PIGVycm9yAGRhdGFiYXNlIGRpc2sgaW1hZ2UgaXMgbWFsZm9ybWVkAHVua25vd24gb3BlcmF0aW9uAGRhdGFiYXNlIG9yIGRpc2sgaXMgZnVsbAB1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSBmaWxlAGxvY2tpbmcgcHJvdG9jb2wAY29uc3RyYWludCBmYWlsZWQAZGF0YXR5cGUgbWlzbWF0Y2gAYmFkIHBhcmFtZXRlciBvciBvdGhlciBBUEkgbWlzdXNlAGxhcmdlIGZpbGUgc3VwcG9ydCBpcyBkaXNhYmxlZABhdXRob3JpemF0aW9uIGRlbmllZABjb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlAGZpbGUgaXMgbm90IGEgZGF0YWJhc2UAbm90aWZpY2F0aW9uIG1lc3NhZ2UAd2FybmluZyBtZXNzYWdlAHVua25vd24gZXJyb3IAYWJvcnQgZHVlIHRvIFJPTExCQUNLAGFub3RoZXIgcm93IGF2YWlsYWJsZQBubyBtb3JlIHJvd3MgYXZhaWxhYmxlAHVuYWJsZSB0byBkZWxldGUvbW9kaWZ5IHVzZXItZnVuY3Rpb24gZHVlIHRvIGFjdGl2ZSBzdGF0ZW1lbnRzAHVuYWJsZSB0byB1c2UgZnVuY3Rpb24gJXMgaW4gdGhlIHJlcXVlc3RlZCBjb250ZXh0AG1haW4AaW52YWxpZABSVFJJTQBNQVRDSABhdXRvbWF0aWMgZXh0ZW5zaW9uIGxvYWRpbmcgZmFpbGVkOiAlcwBzaW1wbGUAcG9ydGVyAHVuaWNvZGU2MQBmdHMzX3Rva2VuaXplcgBzbmlwcGV0AG9mZnNldHMAbWF0Y2hpbmZvAGZ0czMAZnRzNAByZW1vdmVfZGlhY3JpdGljcz0xAHJlbW92ZV9kaWFjcml0aWNzPTAAcmVtb3ZlX2RpYWNyaXRpY3M9MgB0b2tlbmNoYXJzPQBzZXBhcmF0b3JzPQBmdHM0YXV4AENSRUFURSBUQUJMRSB4KHRlcm0sIGNvbCwgZG9jdW1lbnRzLCBvY2N1cnJlbmNlcywgbGFuZ3VhZ2VpZCBISURERU4pAGludmFsaWQgYXJndW1lbnRzIHRvIGZ0czRhdXggY29uc3RydWN0b3IAREVMRVRFIEZST00gJVEuJyVxX2NvbnRlbnQnIFdIRVJFIHJvd2lkID0gPwBTRUxFQ1QgTk9UIEVYSVNUUyhTRUxFQ1QgZG9jaWQgRlJPTSAlUS4nJXFfY29udGVudCcgV0hFUkUgcm93aWQhPT8pAERFTEVURSBGUk9NICVRLiclcV9jb250ZW50JwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnbWVudHMnAERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInAERFTEVURSBGUk9NICVRLiclcV9kb2NzaXplJwBERUxFVEUgRlJPTSAlUS4nJXFfc3RhdCcAU0VMRUNUICVzIFdIRVJFIHJvd2lkPT8AU0VMRUNUIChTRUxFQ1QgbWF4KGlkeCkgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8pICsgMQBSRVBMQUNFIElOVE8gJVEuJyVxX3NlZ21lbnRzJyhibG9ja2lkLCBibG9jaykgVkFMVUVTKD8sID8pAFNFTEVDVCBjb2FsZXNjZSgoU0VMRUNUIG1heChibG9ja2lkKSBGUk9NICVRLiclcV9zZWdtZW50cycpICsgMSwgMSkAUkVQTEFDRSBJTlRPICVRLiclcV9zZWdkaXInIFZBTFVFUyg/LD8sPyw/LD8sPykAU0VMRUNUIGlkeCwgc3RhcnRfYmxvY2ssIGxlYXZlc19lbmRfYmxvY2ssIGVuZF9ibG9jaywgcm9vdCBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPyBPUkRFUiBCWSBpZHggQVNDAFNFTEVDVCBpZHgsIHN0YXJ0X2Jsb2NrLCBsZWF2ZXNfZW5kX2Jsb2NrLCBlbmRfYmxvY2ssIHJvb3QgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID9PUkRFUiBCWSBsZXZlbCBERVNDLCBpZHggQVNDAFNFTEVDVCBjb3VudCgqKSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPwBTRUxFQ1QgbWF4KGxldmVsKSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8AREVMRVRFIEZST00gJVEuJyVxX3NlZ21lbnRzJyBXSEVSRSBibG9ja2lkIEJFVFdFRU4gPyBBTkQgPwBJTlNFUlQgSU5UTyAlUS4nJXFfY29udGVudCcgVkFMVUVTKCVzKQBERUxFVEUgRlJPTSAlUS4nJXFfZG9jc2l6ZScgV0hFUkUgZG9jaWQgPSA/AFJFUExBQ0UgSU5UTyAlUS4nJXFfZG9jc2l6ZScgVkFMVUVTKD8sPykAU0VMRUNUIHNpemUgRlJPTSAlUS4nJXFfZG9jc2l6ZScgV0hFUkUgZG9jaWQ9PwBTRUxFQ1QgdmFsdWUgRlJPTSAlUS4nJXFfc3RhdCcgV0hFUkUgaWQ9PwBSRVBMQUNFIElOVE8gJVEuJyVxX3N0YXQnIFZBTFVFUyg/LD8pAERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBTRUxFQ1QgPyBVTklPTiBTRUxFQ1QgbGV2ZWwgLyAoMTAyNCAqID8pIEZST00gJVEuJyVxX3NlZ2RpcicAU0VMRUNUIGxldmVsLCBjb3VudCgqKSBBUyBjbnQgRlJPTSAlUS4nJXFfc2VnZGlyJyAgIEdST1VQIEJZIGxldmVsIEhBVklORyBjbnQ+PT8gIE9SREVSIEJZIChsZXZlbCAlJSAxMDI0KSBBU0MgTElNSVQgMQBTRUxFQ1QgMiAqIHRvdGFsKDEgKyBsZWF2ZXNfZW5kX2Jsb2NrIC0gc3RhcnRfYmxvY2spICAgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8gQU5EIGlkeCA8ID8AREVMRVRFIEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/IEFORCBpZHggPSA/AFVQREFURSAlUS4nJXFfc2VnZGlyJyBTRVQgaWR4ID0gPyBXSEVSRSBsZXZlbD0/IEFORCBpZHg9PwBTRUxFQ1QgaWR4LCBzdGFydF9ibG9jaywgbGVhdmVzX2VuZF9ibG9jaywgZW5kX2Jsb2NrLCByb290IEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/IEFORCBpZHggPSA/AFVQREFURSAlUS4nJXFfc2VnZGlyJyBTRVQgc3RhcnRfYmxvY2sgPSA/LCByb290ID0gP1dIRVJFIGxldmVsID0gPyBBTkQgaWR4ID0gPwBTRUxFQ1QgMSBGUk9NICVRLiclcV9zZWdtZW50cycgV0hFUkUgYmxvY2tpZD0/IEFORCBibG9jayBJUyBOVUxMAFNFTEVDVCBpZHggRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbD0/IE9SREVSIEJZIDEgQVNDAFNFTEVDVCBtYXgoIGxldmVsICUlIDEwMjQgKSBGUk9NICVRLiclcV9zZWdkaXInAFNFTEVDVCBsZXZlbCwgaWR4LCBlbmRfYmxvY2sgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID8gT1JERVIgQlkgbGV2ZWwgREVTQywgaWR4IEFTQwBVUERBVEUgT1IgRkFJTCAlUS4nJXFfc2VnZGlyJyBTRVQgbGV2ZWw9LTEsaWR4PT8gV0hFUkUgbGV2ZWw9PyBBTkQgaWR4PT8AVVBEQVRFIE9SIEZBSUwgJVEuJyVxX3NlZ2RpcicgU0VUIGxldmVsPT8gV0hFUkUgbGV2ZWw9LTEAJXNfc2VnbWVudHMAYmxvY2sAYXJndW1lbnQgdHlwZSBtaXNtYXRjaABmdHMzdG9rZW5pemUgZGlzYWJsZWQAdW5rbm93biB0b2tlbml6ZXI6ICVzAHRva2VuaXplAHByZWZpeABjb21wcmVzcwB1bmNvbXByZXNzAG9yZGVyAGNvbnRlbnQAbGFuZ3VhZ2VpZABub3RpbmRleGVkAHVucmVjb2duaXplZCBtYXRjaGluZm86ICVzAGFzYwB1bnJlY29nbml6ZWQgb3JkZXI6ICVzAHVucmVjb2duaXplZCBwYXJhbWV0ZXI6ICVzAGVycm9yIHBhcnNpbmcgcHJlZml4IHBhcmFtZXRlcjogJXMAbWlzc2luZyAlcyBwYXJhbWV0ZXIgaW4gZnRzNCBjb25zdHJ1Y3RvcgB1bmtub3duIHRva2VuaXplcgBTRUxFQ1QgKiBGUk9NICVRLiVRAGRvY2lkACwlcyh4LidjJWQlcScpACwgeC4lUQBsYW5naWQALCB4LiclcScAIEZST00gJyVxJy4nJXElcycgQVMgeABfY29udGVudAAsJXMoPykALCA/AGRvY2lkIElOVEVHRVIgUFJJTUFSWSBLRVkAJXosICdjJWQlcScAJXosIGxhbmdpZABDUkVBVEUgVEFCTEUgJVEuJyVxX2NvbnRlbnQnKCVzKQBDUkVBVEUgVEFCTEUgJVEuJyVxX3NlZ21lbnRzJyhibG9ja2lkIElOVEVHRVIgUFJJTUFSWSBLRVksIGJsb2NrIEJMT0IpOwBDUkVBVEUgVEFCTEUgJVEuJyVxX3NlZ2RpcicobGV2ZWwgSU5URUdFUixpZHggSU5URUdFUixzdGFydF9ibG9jayBJTlRFR0VSLGxlYXZlc19lbmRfYmxvY2sgSU5URUdFUixlbmRfYmxvY2sgSU5URUdFUixyb290IEJMT0IsUFJJTUFSWSBLRVkobGV2ZWwsIGlkeCkpOwBDUkVBVEUgVEFCTEUgJVEuJyVxX2RvY3NpemUnKGRvY2lkIElOVEVHRVIgUFJJTUFSWSBLRVksIHNpemUgQkxPQik7AENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICVRLiclcV9zdGF0JyhpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCB2YWx1ZSBCTE9CKTsAUFJBR01BICVRLnBhZ2Vfc2l6ZQBfX2xhbmdpZAAlUSwgACV6JVEsIABDUkVBVEUgVEFCTEUgeCglcyAlUSBISURERU4sIGRvY2lkIEhJRERFTiwgJVEgSElEREVOKQBERVNDAEFTQwBEUk9QIFRBQkxFIElGIEVYSVNUUyAlUS4nJXFfc2VnbWVudHMnO0RST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9zZWdkaXInO0RST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9kb2NzaXplJztEUk9QIFRBQkxFIElGIEVYSVNUUyAlUS4nJXFfc3RhdCc7JXMgRFJPUCBUQUJMRSBJRiBFWElTVFMgJVEuJyVxX2NvbnRlbnQnOwAtLQBTRUxFQ1QgJXMgV0hFUkUgcm93aWQgQkVUV0VFTiAlbGxkIEFORCAlbGxkIE9SREVSIEJZIHJvd2lkICVzAFNFTEVDVCAlcyBPUkRFUiBCWSByb3dpZCAlcwBGVFMgZXhwcmVzc2lvbiB0cmVlIGlzIHRvbyBsYXJnZSAobWF4aW11bSBkZXB0aCAlZCkAbWFsZm9ybWVkIE1BVENIIGV4cHJlc3Npb246IFslc10AT1IAQU5EAE5PVABORUFSAFNFTEVDVCAlcyBXSEVSRSByb3dpZCA9ID8AZnRzM2N1cnNvcgByZWJ1aWxkAGludGVncml0eS1jaGVjawBtZXJnZT0AYXV0b21lcmdlPQAlbGxkICVsbGQAU0VMRUNUICVzACVzX3N0YXQAPGI+ADwvYj4APGI+Li4uPC9iPgB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGZ1bmN0aW9uIHNuaXBwZXQoKQBpbGxlZ2FsIGZpcnN0IGFyZ3VtZW50IHRvICVzACVkICVkICVkICVkIABJbmRleCBvcHRpbWl6ZWQASW5kZXggYWxyZWFkeSBvcHRpbWFsAFNBVkVQT0lOVCBmdHMzAFJFTEVBU0UgZnRzMwBST0xMQkFDSyBUTyBmdHMzAHBjeAB1bnJlY29nbml6ZWQgbWF0Y2hpbmZvIHJlcXVlc3Q6ICVjAEFMVEVSIFRBQkxFICVRLiclcV9jb250ZW50JyAgUkVOQU1FIFRPICclcV9jb250ZW50JzsAQUxURVIgVEFCTEUgJVEuJyVxX2RvY3NpemUnICBSRU5BTUUgVE8gJyVxX2RvY3NpemUnOwBBTFRFUiBUQUJMRSAlUS4nJXFfc3RhdCcgIFJFTkFNRSBUTyAnJXFfc3RhdCc7AEFMVEVSIFRBQkxFICVRLiclcV9zZWdtZW50cycgUkVOQU1FIFRPICclcV9zZWdtZW50cyc7AEFMVEVSIFRBQkxFICVRLiclcV9zZWdkaXInICAgUkVOQU1FIFRPICclcV9zZWdkaXInOwBkb2NzaXplAHNlZ2RpcgBzZWdtZW50cwBmdHMzdG9rZW5pemUAQ1JFQVRFIFRBQkxFIHgoaW5wdXQsIHRva2VuLCBzdGFydCwgZW5kLCBwb3NpdGlvbikAcnRyZWVub2RlAHJ0cmVlZGVwdGgAcnRyZWVjaGVjawBydHJlZQBydHJlZV9pMzIAeyVsbGQAICVnAH0ASW52YWxpZCBhcmd1bWVudCB0byBydHJlZWRlcHRoKCkAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiBydHJlZWNoZWNrKCkAU0VMRUNUICogRlJPTSAlUS4nJXFfcm93aWQnAFNjaGVtYSBjb3JydXB0IG9yIG5vdCBhbiBydHJlZQBfcm93aWQAX3BhcmVudABFTkQAJXolcyV6AE5vZGUgJWxsZCBpcyB0b28gc21hbGwgKCVkIGJ5dGVzKQBSdHJlZSBkZXB0aCBvdXQgb2YgcmFuZ2UgKCVkKQBOb2RlICVsbGQgaXMgdG9vIHNtYWxsIGZvciBjZWxsIGNvdW50IG9mICVkICglZCBieXRlcykAU0VMRUNUIGRhdGEgRlJPTSAlUS4nJXFfbm9kZScgV0hFUkUgbm9kZW5vPT8ATm9kZSAlbGxkIG1pc3NpbmcgZnJvbSBkYXRhYmFzZQBEaW1lbnNpb24gJWQgb2YgY2VsbCAlZCBvbiBub2RlICVsbGQgaXMgY29ycnVwdABEaW1lbnNpb24gJWQgb2YgY2VsbCAlZCBvbiBub2RlICVsbGQgaXMgY29ycnVwdCByZWxhdGl2ZSB0byBwYXJlbnQAU0VMRUNUIHBhcmVudG5vZGUgRlJPTSAlUS4nJXFfcGFyZW50JyBXSEVSRSBub2Rlbm89PzEAU0VMRUNUIG5vZGVubyBGUk9NICVRLiclcV9yb3dpZCcgV0hFUkUgcm93aWQ9PzEATWFwcGluZyAoJWxsZCAtPiAlbGxkKSBtaXNzaW5nIGZyb20gJXMgdGFibGUAJV9yb3dpZAAlX3BhcmVudABGb3VuZCAoJWxsZCAtPiAlbGxkKSBpbiAlcyB0YWJsZSwgZXhwZWN0ZWQgKCVsbGQgLT4gJWxsZCkAU0VMRUNUIGNvdW50KCopIEZST00gJVEuJyVxJXMnAFdyb25nIG51bWJlciBvZiBlbnRyaWVzIGluICUlJXMgdGFibGUgLSBleHBlY3RlZCAlbGxkLCBhY3R1YWwgJWxsZABXcm9uZyBudW1iZXIgb2YgY29sdW1ucyBmb3IgYW4gcnRyZWUgdGFibGUAVG9vIGZldyBjb2x1bW5zIGZvciBhbiBydHJlZSB0YWJsZQBUb28gbWFueSBjb2x1bW5zIGZvciBhbiBydHJlZSB0YWJsZQBBdXhpbGlhcnkgcnRyZWUgY29sdW1ucyBtdXN0IGJlIGxhc3QAQ1JFQVRFIFRBQkxFIHgoJXMALCVzACk7AFNFTEVDVCBsZW5ndGgoZGF0YSkgRlJPTSAnJXEnLiclcV9ub2RlJyBXSEVSRSBub2Rlbm8gPSAxAHVuZGVyc2l6ZSBSVHJlZSBibG9icyBpbiAiJXFfbm9kZSIASU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnJXEnLiclcV9ub2RlJyBWQUxVRVMoPzEsID8yKQBERUxFVEUgRlJPTSAnJXEnLiclcV9ub2RlJyBXSEVSRSBub2Rlbm8gPSA/MQBTRUxFQ1Qgbm9kZW5vIEZST00gJyVxJy4nJXFfcm93aWQnIFdIRVJFIHJvd2lkID0gPzEASU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnJXEnLiclcV9yb3dpZCcgVkFMVUVTKD8xLCA/MikAREVMRVRFIEZST00gJyVxJy4nJXFfcm93aWQnIFdIRVJFIHJvd2lkID0gPzEAU0VMRUNUIHBhcmVudG5vZGUgRlJPTSAnJXEnLiclcV9wYXJlbnQnIFdIRVJFIG5vZGVubyA9ID8xAElOU0VSVCBPUiBSRVBMQUNFIElOVE8gJyVxJy4nJXFfcGFyZW50JyBWQUxVRVMoPzEsID8yKQBERUxFVEUgRlJPTSAnJXEnLiclcV9wYXJlbnQnIFdIRVJFIG5vZGVubyA9ID8xAENSRUFURSBUQUJMRSAiJXciLiIld19yb3dpZCIocm93aWQgSU5URUdFUiBQUklNQVJZIEtFWSxub2Rlbm8ALGElZAApO0NSRUFURSBUQUJMRSAiJXciLiIld19ub2RlIihub2Rlbm8gSU5URUdFUiBQUklNQVJZIEtFWSxkYXRhKTsAQ1JFQVRFIFRBQkxFICIldyIuIiV3X3BhcmVudCIobm9kZW5vIElOVEVHRVIgUFJJTUFSWSBLRVkscGFyZW50bm9kZSk7AElOU0VSVCBJTlRPICIldyIuIiV3X25vZGUiVkFMVUVTKDEsemVyb2Jsb2IoJWQpKQBJTlNFUlQgSU5UTyIldyIuIiV3X3Jvd2lkIihyb3dpZCxub2Rlbm8pVkFMVUVTKD8xLD8yKU9OIENPTkZMSUNUKHJvd2lkKURPIFVQREFURSBTRVQgbm9kZW5vPWV4Y2x1ZGVkLm5vZGVubwBTRUxFQ1QgKiBGUk9NICIldyIuIiV3X3Jvd2lkIiBXSEVSRSByb3dpZD0/MQBVUERBVEUgIiV3Ii4iJXdfcm93aWQiU0VUIABhJWQ9Y29hbGVzY2UoPyVkLGElZCkAYSVkPT8lZAAgV0hFUkUgcm93aWQ9PzEAU0VMRUNUIHN0YXQgRlJPTSAlUS5zcWxpdGVfc3RhdDEgV0hFUkUgdGJsID0gJyVxX3Jvd2lkJwBEUk9QIFRBQkxFICclcScuJyVxX25vZGUnO0RST1AgVEFCTEUgJyVxJy4nJXFfcm93aWQnO0RST1AgVEFCTEUgJyVxJy4nJXFfcGFyZW50JzsAJXNfbm9kZQBkYXRhAFJ0cmVlTWF0Y2hBcmcAVU5JUVVFIGNvbnN0cmFpbnQgZmFpbGVkOiAlcy4lcwBydHJlZSBjb25zdHJhaW50IGZhaWxlZDogJXMuKCVzPD0lcykAQUxURVIgVEFCTEUgJVEuJyVxX25vZGUnICAgUkVOQU1FIFRPICIld19ub2RlIjtBTFRFUiBUQUJMRSAlUS4nJXFfcGFyZW50JyBSRU5BTUUgVE8gIiV3X3BhcmVudCI7QUxURVIgVEFCTEUgJVEuJyVxX3Jvd2lkJyAgUkVOQU1FIFRPICIld19yb3dpZCI7AG5vZGUAdW5hYmxlIHRvIGRlbGV0ZS9tb2RpZnkgY29sbGF0aW9uIHNlcXVlbmNlIGR1ZSB0byBhY3RpdmUgc3RhdGVtZW50cwBtaXN1c2UAX1JPV0lEXwBPSUQAQ09NUElMRVI9Y2xhbmctNi4wLjEARElTQUJMRV9MRlMARU5BQkxFX0ZUUzMARU5BQkxFX0ZUUzNfUEFSRU5USEVTSVMARU5BQkxFX1JUUkVFAE9NSVRfTE9BRF9FWFRFTlNJT04AVEhSRUFEU0FGRT0wAHN0ZGV2AHZhcmlhbmNlAG1vZGUAbWVkaWFuAGxvd2VyX3F1YXJ0aWxlAHVwcGVyX3F1YXJ0aWxlAGFyZ2M9PTEAc3FsaXRlLXNyYy9zcWxpdGUtYW1hbGdhbWF0aW9uLTMyODAwMDAvZXh0ZW5zaW9uLWZ1bmN0aW9ucy5jAG1vZGVTdGVwAHZhcmlhbmNlU3RlcABhY29zAGFzaW4AYXRhbgBhdG4yAGF0YW4yAGFjb3NoAGFzaW5oAGF0YW5oAGRpZmZlcmVuY2UAZGVncmVlcwByYWRpYW5zAGNvcwBzaW4AdGFuAGNvdABjb3NoAHNpbmgAdGFuaABjb3RoAGV4cABsb2cAbG9nMTAAcG93ZXIAc2lnbgBzcXJ0AHNxdWFyZQBjZWlsAGZsb29yAHBpAHJlcGxpY2F0ZQBjaGFyaW5kZXgAbGVmdHN0cgByaWdodHN0cgByZXZlcnNlAHByb3BlcgBwYWRsAHBhZHIAcGFkYwBzdHJmaWx0ZXIAYXJnYz09MgBzdHJmaWx0ZXJGdW5jAHBhZGNGdW5jAGRvbWFpbiBlcnJvcgBwYWRyRnVuYwBwYWRsRnVuYwBwcm9wZXJGdW5jADE9PWFyZ2MAcmV2ZXJzZUZ1bmMAcmlnaHRGdW5jAGxlZnRGdW5jAGFyZ2M9PTMgfHxhcmdjPT0yAGNoYXJpbmRleEZ1bmMAZmxvb3JGdW5jAGNlaWxGdW5jAHNxdWFyZUZ1bmMAc3FydEZ1bmMAc2lnbkZ1bmMAcG93ZXJGdW5jAGxvZzEwRnVuYwBsb2dGdW5jAGV4cEZ1bmMAY290aEZ1bmMAdGFuaEZ1bmMAc2luaEZ1bmMAY29zaEZ1bmMAY290RnVuYwB0YW5GdW5jAHNpbkZ1bmMAY29zRnVuYwBkZWcycmFkRnVuYwByYWQyZGVnRnVuYwBkaWZmZXJlbmNlRnVuYwA/MDAwAGF0YW5oRnVuYwBhc2luaEZ1bmMAYWNvc2hGdW5jAGF0bjJGdW5jAGF0YW5GdW5jAGFzaW5GdW5jAGFjb3NGdW5jAC9wcm9jL3NlbGYvZmQv";
- var I={};
- function mb(a){if(mb.pa){var b=D[a>>2];var c=D[b>>2]}else mb.pa=!0,I.USER=I.LOGNAME="web_user",I.PATH="/",I.PWD="/",I.HOME="/home/web_user",I.LANG="C.UTF-8",I._=f.thisProgram,c=gb?Wa(1024):Fa(1024),b=gb?Wa(256):Fa(256),D[b>>2]=c,D[a>>2]=b;a=[];var d=0,e;for(e in I)if("string"===typeof I[e]){var g=e+"="+I[e];a.push(g);d+=g.length}if(1024<d)throw Error("Environment size exceeded TOTAL_ENV_SIZE!");for(e=0;e<a.length;e++){d=g=a[e];for(var k=c,n=0;n<d.length;++n)l[k++>>0]=d.charCodeAt(n);l[k>>0]=0;D[b+
- 4*e>>2]=c;c+=g.length+1}D[b+4*a.length>>2]=0}function nb(a){f.___errno_location&&(D[f.___errno_location()>>2]=a);return a}function ob(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a}function qb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=ob(a.split("/").filter(function(a){return!!a}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a}
- function rb(a){var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b}function sb(a){if("/"===a)return"/";var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}function tb(){var a=Array.prototype.slice.call(arguments,0);return qb(a.join("/"))}function m(a,b){return qb(a+"/"+b)}
- function xb(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:"/";if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=ob(a.split("/").filter(function(a){return!!a}),!b).join("/");return(b?"/":"")+a||"."}var yb=[];function zb(a,b){yb[a]={input:[],output:[],wa:b};Ab(a,Bb)}
- var Bb={open:function(a){var b=yb[a.node.rdev];if(!b)throw new J(K.Fa);a.tty=b;a.seekable=!1},close:function(a){a.tty.wa.flush(a.tty)},flush:function(a){a.tty.wa.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.wa.$a)throw new J(K.Ra);for(var e=0,g=0;g<d;g++){try{var k=a.tty.wa.$a(a.tty)}catch(n){throw new J(K.Oa);}if(void 0===k&&0===e)throw new J(K.fb);if(null===k||void 0===k)break;e++;b[c+g]=k}e&&(a.node.timestamp=Date.now());return e},write:function(a,b,c,d){if(!a.tty||!a.tty.wa.La)throw new J(K.Ra);
- try{for(var e=0;e<d;e++)a.tty.wa.La(a.tty,b[c+e])}catch(g){throw new J(K.Oa);}d&&(a.node.timestamp=Date.now());return e}},Cb={$a:function(a){if(!a.input.length){var b=null;if(y){var c=new Buffer(256),d=0,e=process.stdin.fd;if("win32"!=process.platform){var g=!1;try{e=fs.openSync("/dev/stdin","r"),g=!0}catch(k){}}try{d=fs.readSync(e,c,0,256,null)}catch(k){if(-1!=k.toString().indexOf("EOF"))d=0;else throw k;}g&&fs.closeSync(e);0<d?b=c.slice(0,d).toString("utf-8"):b=null}else"undefined"!=typeof window&&
- "function"==typeof window.prompt?(b=window.prompt("Input: "),null!==b&&(b+="\n")):"function"==typeof readline&&(b=readline(),null!==b&&(b+="\n"));if(!b)return null;a.input=ba(b,!0)}return a.input.shift()},La:function(a,b){null===b||10===b?(Da(u(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(Da(u(a.output,0)),a.output=[])}},Db={La:function(a,b){null===b||10===b?(Ea(u(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&
- (Ea(u(a.output,0)),a.output=[])}},L={na:null,ka:function(){return L.createNode(null,"/",16895,0)},createNode:function(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new J(K.ib);L.na||(L.na={dir:{node:{ma:L.ba.ma,ia:L.ba.ia,lookup:L.ba.lookup,ya:L.ba.ya,rename:L.ba.rename,unlink:L.ba.unlink,rmdir:L.ba.rmdir,readdir:L.ba.readdir,symlink:L.ba.symlink},stream:{ra:L.ea.ra}},file:{node:{ma:L.ba.ma,ia:L.ba.ia},stream:{ra:L.ea.ra,read:L.ea.read,write:L.ea.write,Sa:L.ea.Sa,Ca:L.ea.Ca,Da:L.ea.Da}},link:{node:{ma:L.ba.ma,
- ia:L.ba.ia,readlink:L.ba.readlink},stream:{}},Va:{node:{ma:L.ba.ma,ia:L.ba.ia},stream:Eb}});c=Fb(a,b,c,d);M(c.mode)?(c.ba=L.na.dir.node,c.ea=L.na.dir.stream,c.da={}):32768===(c.mode&61440)?(c.ba=L.na.file.node,c.ea=L.na.file.stream,c.ha=0,c.da=null):40960===(c.mode&61440)?(c.ba=L.na.link.node,c.ea=L.na.link.stream):8192===(c.mode&61440)&&(c.ba=L.na.Va.node,c.ea=L.na.Va.stream);c.timestamp=Date.now();a&&(a.da[b]=c);return c},ne:function(a){if(a.da&&a.da.subarray){for(var b=[],c=0;c<a.ha;++c)b.push(a.da[c]);
- return b}return a.da},oe:function(a){return a.da?a.da.subarray?a.da.subarray(0,a.ha):new Uint8Array(a.da):new Uint8Array},Wa:function(a,b){var c=a.da?a.da.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.da,a.da=new Uint8Array(b),0<a.ha&&a.da.set(c.subarray(0,a.ha),0))},Cb:function(a,b){if(a.ha!=b)if(0==b)a.da=null,a.ha=0;else{if(!a.da||a.da.subarray){var c=a.da;a.da=new Uint8Array(new ArrayBuffer(b));c&&a.da.set(c.subarray(0,Math.min(b,a.ha)))}else if(a.da||(a.da=
- []),a.da.length>b)a.da.length=b;else for(;a.da.length<b;)a.da.push(0);a.ha=b}},ba:{ma:function(a){var b={};b.dev=8192===(a.mode&61440)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;M(a.mode)?b.size=4096:32768===(a.mode&61440)?b.size=a.ha:40960===(a.mode&61440)?b.size=a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.sa=4096;b.blocks=Math.ceil(b.size/b.sa);return b},ia:function(a,b){void 0!==b.mode&&(a.mode=
- b.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&L.Cb(a,b.size)},lookup:function(){throw Gb[K.gb];},ya:function(a,b,c,d){return L.createNode(a,b,c,d)},rename:function(a,b,c){if(M(a.mode)){try{var d=N(b,c)}catch(g){}if(d)for(var e in d.da)throw new J(K.Qa);}delete a.parent.da[a.name];a.name=c;b.da[c]=a;a.parent=b},unlink:function(a,b){delete a.da[b]},rmdir:function(a,b){var c=N(a,b),d;for(d in c.da)throw new J(K.Qa);delete a.da[b]},readdir:function(a){var b=[".",".."],c;for(c in a.da)a.da.hasOwnProperty(c)&&
- b.push(c);return b},symlink:function(a,b,c){a=L.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(40960!==(a.mode&61440))throw new J(K.ja);return a.link}},ea:{read:function(a,b,c,d,e){var g=a.node.da;if(e>=a.node.ha)return 0;a=Math.min(a.node.ha-e,d);if(8<a&&g.subarray)b.set(g.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=g[e+d];return a},write:function(a,b,c,d,e,g){g=!1;if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.da||a.da.subarray)){if(g)return a.da=b.subarray(c,
- c+d),a.ha=d;if(0===a.ha&&0===e)return a.da=new Uint8Array(b.subarray(c,c+d)),a.ha=d;if(e+d<=a.ha)return a.da.set(b.subarray(c,c+d),e),d}L.Wa(a,e+d);if(a.da.subarray&&b.subarray)a.da.set(b.subarray(c,c+d),e);else for(g=0;g<d;g++)a.da[e+g]=b[c+g];a.ha=Math.max(a.ha,e+d);return d},ra:function(a,b,c){1===c?b+=a.position:2===c&&32768===(a.node.mode&61440)&&(b+=a.node.ha);if(0>b)throw new J(K.ja);return b},Sa:function(a,b,c){L.Wa(a.node,b+c);a.node.ha=Math.max(a.node.ha,b+c)},Ca:function(a,b,c,d,e,g,k){if(32768!==
- (a.node.mode&61440))throw new J(K.Fa);c=a.node.da;if(k&2||c.buffer!==b&&c.buffer!==b.buffer){if(0<e||e+d<a.node.ha)c.subarray?c=c.subarray(e,e+d):c=Array.prototype.slice.call(c,e,e+d);a=!0;d=Wa(d);if(!d)throw new J(K.Pa);b.set(c,d)}else a=!1,d=c.byteOffset;return{Bb:d,Ga:a}},Da:function(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new J(K.Fa);if(e&2)return 0;L.ea.write(a,b,0,d,c,!1);return 0}}},O={Ba:!1,Eb:function(){O.Ba=!!process.platform.match(/^win/);var a=process.binding("constants");a.fs&&
- (a=a.fs);O.Xa={1024:a.O_APPEND,64:a.O_CREAT,128:a.O_EXCL,0:a.O_RDONLY,2:a.O_RDWR,4096:a.O_SYNC,512:a.O_TRUNC,1:a.O_WRONLY}},Ua:function(a){return Buffer.pa?Buffer.from(a):new Buffer(a)},ka:function(a){assert(y);return O.createNode(null,"/",O.Za(a.Ka.root),0)},createNode:function(a,b,c){if(!M(c)&&32768!==(c&61440)&&40960!==(c&61440))throw new J(K.ja);a=Fb(a,b,c);a.ba=O.ba;a.ea=O.ea;return a},Za:function(a){try{var b=fs.lstatSync(a);O.Ba&&(b.mode=b.mode|(b.mode&292)>>2)}catch(c){if(!c.code)throw c;
- throw new J(K[c.code]);}return b.mode},la:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.ka.Ka.root);b.reverse();return tb.apply(null,b)},ub:function(a){a&=-2656257;var b=0,c;for(c in O.Xa)a&c&&(b|=O.Xa[c],a^=c);if(a)throw new J(K.ja);return b},ba:{ma:function(a){a=O.la(a);try{var b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}O.Ba&&!b.sa&&(b.sa=4096);O.Ba&&!b.blocks&&(b.blocks=(b.size+b.sa-1)/b.sa|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink,
- uid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,sa:b.sa,blocks:b.blocks}},ia:function(a,b){var c=O.la(a);try{void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.size&&fs.truncateSync(c,b.size)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},lookup:function(a,b){var c=m(O.la(a),b);c=O.Za(c);return O.createNode(a,b,c)},ya:function(a,b,c,d){a=O.createNode(a,b,c,d);b=O.la(a);try{M(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,"",{mode:a.mode})}catch(e){if(!e.code)throw e;
- throw new J(K[e.code]);}return a},rename:function(a,b,c){a=O.la(a);b=m(O.la(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},unlink:function(a,b){a=m(O.la(a),b);try{fs.unlinkSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},rmdir:function(a,b){a=m(O.la(a),b);try{fs.rmdirSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},readdir:function(a){a=O.la(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new J(K[b.code]);}},symlink:function(a,
- b,c){a=m(O.la(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},readlink:function(a){var b=O.la(a);try{return b=fs.readlinkSync(b),b=Hb.relative(Hb.resolve(a.ka.Ka.root),b)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}}},ea:{open:function(a){var b=O.la(a.node);try{32768===(a.node.mode&61440)&&(a.za=fs.openSync(b,O.ub(a.flags)))}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},close:function(a){try{32768===(a.node.mode&61440)&&a.za&&fs.closeSync(a.za)}catch(b){if(!b.code)throw b;
- throw new J(K[b.code]);}},read:function(a,b,c,d,e){if(0===d)return 0;try{return fs.readSync(a.za,O.Ua(b.buffer),c,d,e)}catch(g){throw new J(K[g.code]);}},write:function(a,b,c,d,e){try{return fs.writeSync(a.za,O.Ua(b.buffer),c,d,e)}catch(g){throw new J(K[g.code]);}},ra:function(a,b,c){if(1===c)b+=a.position;else if(2===c&&32768===(a.node.mode&61440))try{b+=fs.fstatSync(a.za).size}catch(d){throw new J(K[d.code]);}if(0>b)throw new J(K.ja);return b}}},Ib=null,Jb={},P=[],Kb=1,Q=null,Lb=!0,R={},J=null,
- Gb={};function S(a,b){a=xb("/",a);b=b||{};if(!a)return{path:"",node:null};var c={Ya:!0,Ma:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8<b.Ma)throw new J(40);a=ob(a.split("/").filter(function(a){return!!a}),!1);var e=Ib;c="/";for(d=0;d<a.length;d++){var g=d===a.length-1;if(g&&b.parent)break;e=N(e,a[d]);c=m(c,a[d]);e.ua&&(!g||g&&b.Ya)&&(e=e.ua.root);if(!g||b.ta)for(g=0;40960===(e.mode&61440);)if(e=Mb(c),c=xb(rb(c),e),e=S(c,{Ma:b.Ma}).node,40<g++)throw new J(40);}return{path:c,node:e}}
- function Nb(a){for(var b;;){if(a===a.parent)return a=a.ka.bb,b?"/"!==a[a.length-1]?a+"/"+b:a+b:a;b=b?a.name+"/"+b:a.name;a=a.parent}}function Ob(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%Q.length}function Pb(a){var b=Ob(a.parent.id,a.name);a.va=Q[b];Q[b]=a}function Qb(a){var b=Ob(a.parent.id,a.name);if(Q[b]===a)Q[b]=a.va;else for(b=Q[b];b;){if(b.va===a){b.va=a.va;break}b=b.va}}
- function N(a,b){var c;if(c=(c=Rb(a,"x"))?c:a.ba.lookup?0:13)throw new J(c,a);for(c=Q[Ob(a.id,b)];c;c=c.va){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ba.lookup(a,b)}
- function Fb(a,b,c,d){Sb||(Sb=function(a,b,c,d){a||(a=this);this.parent=a;this.ka=a.ka;this.ua=null;this.id=Kb++;this.name=b;this.mode=c;this.ba={};this.ea={};this.rdev=d},Sb.prototype={},Object.defineProperties(Sb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}}));a=new Sb(a,b,c,d);Pb(a);return a}
- function M(a){return 16384===(a&61440)}var Tb={r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218};function Ub(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Rb(a,b){if(Lb)return 0;if(-1===b.indexOf("r")||a.mode&292){if(-1!==b.indexOf("w")&&!(a.mode&146)||-1!==b.indexOf("x")&&!(a.mode&73))return 13}else return 13;return 0}function Vb(a,b){try{return N(a,b),17}catch(c){}return Rb(a,"wx")}
- function Wb(a,b,c){try{var d=N(a,b)}catch(e){return e.fa}if(a=Rb(a,"wx"))return a;if(c){if(!M(d.mode))return 20;if(d===d.parent||"/"===Nb(d))return 16}else if(M(d.mode))return 21;return 0}function Xb(a){var b=4096;for(a=a||0;a<=b;a++)if(!P[a])return a;throw new J(24);}
- function Yb(a,b){Zb||(Zb=function(){},Zb.prototype={},Object.defineProperties(Zb.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}}}));var c=new Zb,d;for(d in a)c[d]=a[d];a=c;b=Xb(b);a.fd=b;return P[b]=a}var Eb={open:function(a){a.ea=Jb[a.node.rdev].ea;a.ea.open&&a.ea.open(a)},ra:function(){throw new J(29);}};function Ab(a,b){Jb[a]={ea:b}}
- function $b(a,b){var c="/"===b,d=!b;if(c&&Ib)throw new J(16);if(!c&&!d){var e=S(b,{Ya:!1});b=e.path;e=e.node;if(e.ua)throw new J(16);if(!M(e.mode))throw new J(20);}b={type:a,Ka:{},bb:b,Ab:[]};a=a.ka(b);a.ka=b;b.root=a;c?Ib=a:e&&(e.ua=b,e.ka&&e.ka.Ab.push(b))}function ja(a,b,c){var d=S(a,{parent:!0}).node;a=sb(a);if(!a||"."===a||".."===a)throw new J(22);var e=Vb(d,a);if(e)throw new J(e);if(!d.ba.ya)throw new J(1);return d.ba.ya(d,a,b,c)}function T(a,b){ja(a,(void 0!==b?b:511)&1023|16384,0)}
- function ac(a,b,c){"undefined"===typeof c&&(c=b,b=438);ja(a,b|8192,c)}function bc(a,b){if(!xb(a))throw new J(2);var c=S(b,{parent:!0}).node;if(!c)throw new J(2);b=sb(b);var d=Vb(c,b);if(d)throw new J(d);if(!c.ba.symlink)throw new J(1);c.ba.symlink(c,b,a)}
- function ua(a){var b=S(a,{parent:!0}).node,c=sb(a),d=N(b,c),e=Wb(b,c,!1);if(e)throw new J(e);if(!b.ba.unlink)throw new J(1);if(d.ua)throw new J(16);try{R.willDeletePath&&R.willDeletePath(a)}catch(g){console.log("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.ba.unlink(b,c);Qb(d);try{if(R.onDeletePath)R.onDeletePath(a)}catch(g){console.log("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+g.message)}}
- function Mb(a){a=S(a).node;if(!a)throw new J(2);if(!a.ba.readlink)throw new J(22);return xb(Nb(a.parent),a.ba.readlink(a))}function sa(a,b){a=S(a,{ta:!b}).node;if(!a)throw new J(2);if(!a.ba.ma)throw new J(1);return a.ba.ma(a)}function cc(a){return sa(a,!0)}function ka(a,b){var c;"string"===typeof a?c=S(a,{ta:!0}).node:c=a;if(!c.ba.ia)throw new J(1);c.ba.ia(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})}
- function dc(a){var b;"string"===typeof a?b=S(a,{ta:!0}).node:b=a;if(!b.ba.ia)throw new J(1);b.ba.ia(b,{timestamp:Date.now()})}function ec(a,b){if(0>b)throw new J(22);var c;"string"===typeof a?c=S(a,{ta:!0}).node:c=a;if(!c.ba.ia)throw new J(1);if(M(c.mode))throw new J(21);if(32768!==(c.mode&61440))throw new J(22);if(a=Rb(c,"w"))throw new J(a);c.ba.ia(c,{size:b,timestamp:Date.now()})}
- function p(a,b,c,d){if(""===a)throw new J(2);if("string"===typeof b){var e=Tb[b];if("undefined"===typeof e)throw Error("Unknown file open mode: "+b);b=e}c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var g=a;else{a=qb(a);try{g=S(a,{ta:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(g){if(b&128)throw new J(17);}else g=ja(a,c,0),e=!0;if(!g)throw new J(2);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!M(g.mode))throw new J(20);if(!e&&(c=g?40960===(g.mode&61440)?40:M(g.mode)&&
- ("r"!==Ub(b)||b&512)?21:Rb(g,Ub(b)):2))throw new J(c);b&512&&ec(g,0);b&=-641;d=Yb({node:g,path:Nb(g),flags:b,seekable:!0,position:0,ea:g.ea,Fb:[],error:!1},d);d.ea.open&&d.ea.open(d);!f.logReadFiles||b&1||(vc||(vc={}),a in vc||(vc[a]=1,console.log("FS.trackingDelegate error on read file: "+a)));try{R.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),R.onOpenFile(a,g))}catch(k){console.log("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+k.message)}return d}
- function ma(a){if(null===a.fd)throw new J(9);a.Ja&&(a.Ja=null);try{a.ea.close&&a.ea.close(a)}catch(b){throw b;}finally{P[a.fd]=null}a.fd=null}function Gc(a,b,c){if(null===a.fd)throw new J(9);if(!a.seekable||!a.ea.ra)throw new J(29);if(0!=c&&1!=c&&2!=c)throw new J(22);a.position=a.ea.ra(a,b,c);a.Fb=[]}
- function ta(a,b,c,d,e){if(0>d||0>e)throw new J(22);if(null===a.fd)throw new J(9);if(1===(a.flags&2097155))throw new J(9);if(M(a.node.mode))throw new J(21);if(!a.ea.read)throw new J(22);var g="undefined"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new J(29);b=a.ea.read(a,b,c,d,e);g||(a.position+=b);return b}
- function la(a,b,c,d,e,g){if(0>d||0>e)throw new J(22);if(null===a.fd)throw new J(9);if(0===(a.flags&2097155))throw new J(9);if(M(a.node.mode))throw new J(21);if(!a.ea.write)throw new J(22);a.flags&1024&&Gc(a,0,2);var k="undefined"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new J(29);b=a.ea.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&R.onWriteToFile)R.onWriteToFile(a.path)}catch(n){console.log("FS.trackingDelegate['onWriteToFile']('"+a.path+"') threw an exception: "+n.message)}return b}
- function Hc(){J||(J=function(a,b){this.node=b;this.Db=function(a){this.fa=a};this.Db(a);this.message="FS error";this.stack&&Object.defineProperty(this,"stack",{value:Error().stack,writable:!0})},J.prototype=Error(),J.prototype.constructor=J,[2].forEach(function(a){Gb[a]=new J(a);Gb[a].stack="<generic error, no stack>"}))}var Ic;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c}
- function Jc(a,b,c){a=m("/dev",a);var d=ia(!!b,!!c);Kc||(Kc=64);var e=Kc++<<8|0;Ab(e,{open:function(a){a.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(a,c,d,e){for(var g=0,k=0;k<e;k++){try{var n=b()}catch(Pa){throw new J(5);}if(void 0===n&&0===g)throw new J(11);if(null===n||void 0===n)break;g++;c[d+k]=n}g&&(a.node.timestamp=Date.now());return g},write:function(a,b,d,e){for(var g=0;g<e;g++)try{c(b[d+g])}catch(ha){throw new J(5);}e&&(a.node.timestamp=Date.now());return g}});
- ac(a,d,e)}
- var Kc,U={},Sb,Zb,vc,K={ib:1,gb:2,Hd:3,wc:4,Oa:5,Ra:6,Mb:7,Xc:8,Na:9,bc:10,fb:11,Rd:11,Pa:12,eb:13,pc:14,ld:15,Zb:16,oc:17,Sd:18,Fa:19,hb:20,yc:21,ja:22,Sc:23,Kc:24,qd:25,Od:26,qc:27,gd:28,Gd:29,Cd:30,Lc:31,wd:32,lc:33,jb:34,bd:42,tc:43,cc:44,Ac:45,Bc:46,Cc:47,Ic:48,Pd:49,Vc:50,zc:51,ic:35,Yc:37,Sb:52,Vb:53,Td:54,Tc:55,Wb:56,Xb:57,jc:35,Yb:59,jd:60,Wc:61,Ld:62,hd:63,cd:64,dd:65,Bd:66,Zc:67,Pb:68,Id:69,dc:70,xd:71,Nc:72,mc:73,Ub:74,rd:76,Tb:77,Ad:78,Dc:79,Ec:80,Hc:81,Gc:82,Fc:83,kd:38,Qa:39,Oc:36,
- Jc:40,sd:95,vd:96,hc:104,Uc:105,Qb:97,zd:91,od:88,ed:92,Ed:108,fc:111,Nb:98,ec:103,Rc:101,Pc:100,Md:110,rc:112,sc:113,vc:115,Rb:114,kc:89,Mc:90,yd:93,Fd:94,Ob:99,Qc:102,xc:106,md:107,Nd:109,Qd:87,nc:122,Jd:116,pd:95,$c:123,uc:84,td:75,$b:125,nd:131,ud:130,Kd:86},Lc={};
- function Mc(a,b,c){try{var d=a(b)}catch(e){if(e&&e.node&&qb(b)!==qb(Nb(e.node)))return-K.hb;throw e;}D[c>>2]=d.dev;D[c+4>>2]=0;D[c+8>>2]=d.ino;D[c+12>>2]=d.mode;D[c+16>>2]=d.nlink;D[c+20>>2]=d.uid;D[c+24>>2]=d.gid;D[c+28>>2]=d.rdev;D[c+32>>2]=0;D[c+36>>2]=d.size;D[c+40>>2]=4096;D[c+44>>2]=d.blocks;D[c+48>>2]=d.atime.getTime()/1E3|0;D[c+52>>2]=0;D[c+56>>2]=d.mtime.getTime()/1E3|0;D[c+60>>2]=0;D[c+64>>2]=d.ctime.getTime()/1E3|0;D[c+68>>2]=0;D[c+72>>2]=d.ino;return 0}var V=0;
- function W(){V+=4;return D[V-4>>2]}function X(){return F(W())}function Y(){var a=P[W()];if(!a)throw new J(K.Na);return a}function Nc(a,b){V=b;return 0}function Ha(){return l.length}
- function Oc(a){try{var b=new ArrayBuffer(a);if(b.byteLength!=a)return!1;(new Int8Array(b)).set(l)}catch(c){return!1}f._emscripten_replace_memory(b);l=new Int8Array(b);Ka=new Int16Array(b);D=new Int32Array(b);E=new Uint8Array(b);new Uint16Array(b);new Uint32Array(b);La=new Float32Array(b);Ma=new Float64Array(b);return buffer=b}
- function Ia(a){if(2130706432<a)return!1;for(var b=Math.max(Ha(),16777216);b<a;)536870912>=b?b=Za(2*b):b=Math.min(Za((3*b+2147483648)/4),2130706432);a=Oc(b);if(!a||a.byteLength!=b)return!1;$a();return!0}function Pc(a){if(0===a)return 0;a=F(a);if(!I.hasOwnProperty(a))return 0;Pc.pa&&fa(Pc.pa);a=I[a];var b=oa(a)+1,c=Wa(b);c&&r(a,l,c,b);Pc.pa=c;return Pc.pa}function Qc(a){return Math.log(a)/Math.LN10}r("GMT",E,60384,4);
- function Rc(){function a(a){return(a=a.toTimeString().match(/\(([A-Za-z ]+)\)$/))?a[1]:"GMT"}if(!Rc.pa){Rc.pa=!0;D[Sc()>>2]=60*(new Date).getTimezoneOffset();var b=new Date(2E3,0,1),c=new Date(2E3,6,1);D[Tc()>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c);d=ca(ba(d));e=ca(ba(e));c.getTimezoneOffset()<b.getTimezoneOffset()?(D[Uc()>>2]=d,D[Uc()+4>>2]=e):(D[Uc()>>2]=e,D[Uc()+4>>2]=d)}}
- function Vc(a,b){Rc();a=new Date(1E3*D[a>>2]);D[b>>2]=a.getSeconds();D[b+4>>2]=a.getMinutes();D[b+8>>2]=a.getHours();D[b+12>>2]=a.getDate();D[b+16>>2]=a.getMonth();D[b+20>>2]=a.getFullYear()-1900;D[b+24>>2]=a.getDay();var c=new Date(a.getFullYear(),0,1);D[b+28>>2]=(a.getTime()-c.getTime())/864E5|0;D[b+36>>2]=-(60*a.getTimezoneOffset());var d=(new Date(2E3,6,1)).getTimezoneOffset();c=c.getTimezoneOffset();a=(d!=c&&a.getTimezoneOffset()==Math.min(c,d))|0;D[b+32>>2]=a;a=D[Uc()+(a?4:0)>>2];D[b+40>>2]=
- a;return b}function Wc(a){a/=1E3;if((ya||x)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b<a;);else for(b=Date.now();Date.now()-b<a;);return 0}f._usleep=Wc;Hc();Q=Array(4096);$b(L,"/");T("/tmp");T("/home");T("/home/web_user");
- (function(){T("/dev");Ab(259,{read:function(){return 0},write:function(a,b,c,k){return k}});ac("/dev/null",259);zb(1280,Cb);zb(1536,Db);ac("/dev/tty",1280);ac("/dev/tty1",1536);if("object"===typeof crypto&&"function"===typeof crypto.getRandomValues){var a=new Uint8Array(1);var b=function(){crypto.getRandomValues(a);return a[0]}}else if(y)try{var c=require("crypto");b=function(){return c.randomBytes(1)[0]}}catch(d){}b||(b=function(){C("random_device")});Jc("random",b);Jc("urandom",b);T("/dev/shm");
- T("/dev/shm/tmp")})();T("/proc");T("/proc/self");T("/proc/self/fd");$b({ka:function(){var a=Fb("/proc/self","fd",16895,73);a.ba={lookup:function(a,c){var b=P[+c];if(!b)throw new J(9);a={parent:null,ka:{bb:"fake"},ba:{readlink:function(){return b.path}}};return a.parent=a}};return a}},"/proc/self/fd");if(y){var fs=require("fs"),Hb=require("path");O.Eb()}var Xc=!1;function ba(a,b){var c=Array(oa(a)+1);a=r(a,c,0,c.length);b&&(c.length=a);return c}
- function Ca(a){for(var b=[],c=0;c<a.length;c++){var d=a[c];255<d&&(Xc&&assert(!1,"Character code "+d+" ("+String.fromCharCode(d)+") at offset "+c+" not in 0x00-0xFF."),d&=255);b.push(String.fromCharCode(d))}return b.join("")}
- var Yc="function"===typeof atob?atob:function(a){var b="",c=0;a=a.replace(/[^A-Za-z0-9\+\/=]/g,"");do{var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));var g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));var k="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));d=d<<2|e>>4;
- e=(e&15)<<4|g>>2;var n=(g&3)<<6|k;b+=String.fromCharCode(d);64!==g&&(b+=String.fromCharCode(e));64!==k&&(b+=String.fromCharCode(n))}while(c<a.length);return b};
- function B(a){if(String.prototype.startsWith?a.startsWith(kb):0===a.indexOf(kb)){a=a.slice(kb.length);if("boolean"===typeof y&&y){try{var b=Buffer.from(a,"base64")}catch(g){b=new Buffer(a,"base64")}var c=new Uint8Array(b.buffer,b.byteOffset,b.byteLength)}else try{var d=Yc(a),e=new Uint8Array(d.length);for(b=0;b<d.length;++b)e[b]=d.charCodeAt(b);c=e}catch(g){throw Error("Converting base64 string to bytes failed.");}return c}}
- var Zc={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Float32Array:Float32Array,Float64Array:Float64Array,Infinity:Infinity},bd={a:C,b:function(a){Ja=a},c:function(){return Ja},d:function(a){return t[a]()},e:function(a,b){return t[a](b)},f:function(a,b,c){return t[a](b,c)},g:function(a,b,c,d){return t[a](b,c,d)},h:function(a,b,c,d,e){return t[a](b,c,d,e)},i:function(a,b,c,d,e,g){return t[a](b,c,d,e,g)},j:function(a,b,c,d,e,
- g,k){return t[a](b,c,d,e,g,k)},k:function(a,b){t[a](b)},l:function(a,b,c){t[a](b,c)},m:function(a,b,c,d){t[a](b,c,d)},n:function(a,b,c,d,e){t[a](b,c,d,e)},o:function(a,b,c,d,e,g,k){t[a](b,c,d,e,g,k)},p:function(a,b,c,d){C("Assertion failed: "+F(a)+", at: "+[b?F(b):"unknown filename",c,d?F(d):"unknown function"])},q:mb,r:nb,s:function(a,b){V=b;try{var c=X();ua(c);return 0}catch(d){return"undefined"!==typeof U&&d instanceof J||C(d),-d.fa}},t:function(a,b){V=b;try{return Y(),0}catch(c){return"undefined"!==
- typeof U&&c instanceof J||C(c),-c.fa}},u:function(a,b){V=b;try{var c=Y();W();var d=W(),e=W(),g=W();Gc(c,d,g);D[e>>2]=c.position;c.Ja&&0===d&&0===g&&(c.Ja=null);return 0}catch(k){return"undefined"!==typeof U&&k instanceof J||C(k),-k.fa}},v:function(a,b){V=b;try{var c=X(),d=W();ka(c,d);return 0}catch(e){return"undefined"!==typeof U&&e instanceof J||C(e),-e.fa}},w:function(a,b){V=b;try{var c=W(),d=W();if(0===d)return-K.ja;if(d<oa("/")+1)return-K.jb;r("/",E,c,d);return c}catch(e){return"undefined"!==
- typeof U&&e instanceof J||C(e),-e.fa}},x:function(a,b){V=b;try{var c=W(),d=W(),e=W(),g=W(),k=W(),n=W();n<<=12;a=!1;if(-1===k){var v=$c(16384,d);if(!v)return-K.Pa;ad(v,0,d);a=!0}else{var A=P[k];if(!A)return-K.Na;b=E;if(1===(A.flags&2097155))throw new J(13);if(!A.ea.Ca)throw new J(19);var ha=A.ea.Ca(A,b,c,d,n,e,g);v=ha.Bb;a=ha.Ga}Lc[v]={zb:v,yb:d,Ga:a,fd:k,flags:g};return v}catch(da){return"undefined"!==typeof U&&da instanceof J||C(da),-da.fa}},y:function(a,b){V=b;try{var c=W();W();var d=W();W();var e=
- P[c];if(!e)throw new J(9);if(0===(e.flags&2097155))throw new J(22);ec(e.node,d);return 0}catch(g){return"undefined"!==typeof U&&g instanceof J||C(g),-g.fa}},z:function(a,b){V=b;try{var c=X(),d=W();return Mc(sa,c,d)}catch(e){return"undefined"!==typeof U&&e instanceof J||C(e),-e.fa}},A:function(a,b){V=b;try{var c=X(),d=W();return Mc(cc,c,d)}catch(e){return"undefined"!==typeof U&&e instanceof J||C(e),-e.fa}},B:function(a,b){V=b;try{var c=Y(),d=W();return Mc(sa,c.path,d)}catch(e){return"undefined"!==
- typeof U&&e instanceof J||C(e),-e.fa}},C:function(a,b){V=b;return 42},D:function(a,b){return Nc(a,b)},E:Nc,F:function(a,b){V=b;try{var c=W();W();W();var d=P[c];if(!d)throw new J(9);dc(d.node);return 0}catch(e){return"undefined"!==typeof U&&e instanceof J||C(e),-e.fa}},G:function(a,b){V=b;try{var c=X();W();W();dc(c);return 0}catch(d){return"undefined"!==typeof U&&d instanceof J||C(d),-d.fa}},H:function(a,b){V=b;try{var c=Y();switch(W()){case 0:var d=W();return 0>d?-K.ja:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0;
- case 3:return c.flags;case 4:return d=W(),c.flags|=d,0;case 12:return d=W(),Ka[d+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-K.ja;case 9:return nb(K.ja),-1;default:return-K.ja}}catch(e){return"undefined"!==typeof U&&e instanceof J||C(e),-e.fa}},I:function(a,b){V=b;try{var c=Y(),d=W(),e=W();return ta(c,l,d,e)}catch(g){return"undefined"!==typeof U&&g instanceof J||C(g),-g.fa}},J:function(a,b){V=b;try{var c=X();var d=W();if(d&-8)var e=-K.ja;else{var g=S(c,{ta:!0}).node;a="";d&4&&(a+="r");
- d&2&&(a+="w");d&1&&(a+="x");e=a&&Rb(g,a)?-K.eb:0}return e}catch(k){return"undefined"!==typeof U&&k instanceof J||C(k),-k.fa}},K:function(a,b){V=b;try{var c=X(),d=W();a=c;a=qb(a);"/"===a[a.length-1]&&(a=a.substr(0,a.length-1));T(a,d);return 0}catch(e){return"undefined"!==typeof U&&e instanceof J||C(e),-e.fa}},L:function(a,b){V=b;try{var c=Y(),d=W(),e=W();return la(c,l,d,e)}catch(g){return"undefined"!==typeof U&&g instanceof J||C(g),-g.fa}},M:function(a,b){V=b;try{var c=X(),d=S(c,{parent:!0}).node,
- e=sb(c),g=N(d,e),k=Wb(d,e,!0);if(k)throw new J(k);if(!d.ba.rmdir)throw new J(1);if(g.ua)throw new J(16);try{R.willDeletePath&&R.willDeletePath(c)}catch(n){console.log("FS.trackingDelegate['willDeletePath']('"+c+"') threw an exception: "+n.message)}d.ba.rmdir(d,e);Qb(g);try{if(R.onDeletePath)R.onDeletePath(c)}catch(n){console.log("FS.trackingDelegate['onDeletePath']('"+c+"') threw an exception: "+n.message)}return 0}catch(n){return"undefined"!==typeof U&&n instanceof J||C(n),-n.fa}},N:function(a,b){V=
- b;try{var c=X(),d=W(),e=W();return p(c,d,e).fd}catch(g){return"undefined"!==typeof U&&g instanceof J||C(g),-g.fa}},O:function(a,b){V=b;try{var c=Y();ma(c);return 0}catch(d){return"undefined"!==typeof U&&d instanceof J||C(d),-d.fa}},P:function(a,b){V=b;try{var c=X(),d=W();var e=W();if(0>=e)var g=-K.ja;else{var k=Mb(c),n=Math.min(e,oa(k)),v=l[d+n];r(k,E,d,e+1);l[d+n]=v;g=n}return g}catch(A){return"undefined"!==typeof U&&A instanceof J||C(A),-A.fa}},Q:function(a,b){V=b;try{var c=W(),d=W(),e=Lc[c];if(!e)return 0;
- if(d===e.yb){var g=P[e.fd],k=e.flags,n=new Uint8Array(E.subarray(c,c+d));g&&g.ea.Da&&g.ea.Da(g,n,0,d,k);Lc[c]=null;e.Ga&&fa(e.zb)}return 0}catch(v){return"undefined"!==typeof U&&v instanceof J||C(v),-v.fa}},R:function(a,b){V=b;try{var c=W(),d=W(),e=P[c];if(!e)throw new J(9);ka(e.node,d);return 0}catch(g){return"undefined"!==typeof U&&g instanceof J||C(g),-g.fa}},S:Ha,T:function(a,b,c){E.set(E.subarray(b,b+c),a)},U:Ia,V:Pc,W:function(a){var b=Date.now();D[a>>2]=b/1E3|0;D[a+4>>2]=b%1E3*1E3|0;return 0},
- X:Qc,Y:function(a){return Qc(a)},Z:function(){C("trap!")},_:function(a){return Vc(a,60336)},$:Vc,aa:function(a,b){var c=D[a>>2];a=D[a+4>>2];0!==b&&(D[b>>2]=0,D[b+4>>2]=0);return Wc(1E6*c+a/1E3)},ab:function(a){switch(a){case 30:return 16384;case 85:return 130048;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;
- case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;
- case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}nb(22);return-1},
- ac:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b},ad:Rc,ae:Wc,af:function(a,b){if(b){var c=1E3*D[b+8>>2];c+=D[b+12>>2]/1E3}else c=Date.now();a=F(a);try{b=c;var d=S(a,{ta:!0}).node;d.ba.ia(d,{timestamp:Math.max(b,c)});return 0}catch(e){a=e;if(!(a instanceof J)){a+=" : ";a:{d=Error();if(!d.stack){try{throw Error(0);}catch(g){d=g}if(!d.stack){d="(no stack trace available)";break a}}d=d.stack.toString()}f.extraStackTrace&&(d+="\n"+f.extraStackTrace());d=Ya(d);throw a+d;}nb(a.fa);return-1}},
- ag:function(){C("OOM")},ah:Oc,ai:60480,aj:Ga};// EMSCRIPTEN_START_ASM
- var Z=(/** @suppress {uselessCode} */ function(global,env,buffer) {
- "almost asm";var a=new global.Int8Array(buffer),b=new global.Int16Array(buffer),c=new global.Int32Array(buffer),d=new global.Uint8Array(buffer),e=new global.Uint16Array(buffer),f=new global.Float32Array(buffer),g=new global.Float64Array(buffer),h=env.ai|0,i=env.aj|0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=global.Infinity,s=global.Math.floor,t=global.Math.abs,u=global.Math.sqrt,v=global.Math.pow,w=global.Math.cos,x=global.Math.sin,y=global.Math.tan,z=global.Math.acos,A=global.Math.asin,B=global.Math.atan,C=global.Math.atan2,D=global.Math.exp,E=global.Math.log,F=global.Math.ceil,G=global.Math.imul,H=global.Math.min,I=global.Math.clz32,J=env.a,K=env.b,L=env.c,M=env.d,N=env.e,O=env.f,P=env.g,Q=env.h,R=env.i,S=env.j,T=env.k,U=env.l,V=env.m,W=env.n,X=env.o,Y=env.p,Z=env.q,_=env.r,$=env.s,aa=env.t,ba=env.u,ca=env.v,da=env.w,ea=env.x,fa=env.y,ga=env.z,ha=env.A,ia=env.B,ja=env.C,ka=env.D,la=env.E,ma=env.F,na=env.G,oa=env.H,pa=env.I,qa=env.J,ra=env.K,sa=env.L,ta=env.M,ua=env.N,va=env.O,wa=env.P,xa=env.Q,ya=env.R,za=env.S,Aa=env.T,Ba=env.U,Ca=env.V,Da=env.W,Ea=env.X,Fa=env.Y,Ga=env.Z,Ha=env._,Ia=env.$,Ja=env.aa,Ka=env.ab,La=env.ac,Ma=env.ad,Na=env.ae,Oa=env.af,Pa=env.ag,Qa=env.ah,Ra=60496,Sa=5303376,Ta=0.0;function Ua(newBuffer){a=new Int8Array(newBuffer);d=new Uint8Array(newBuffer);b=new Int16Array(newBuffer);e=new Uint16Array(newBuffer);c=new Int32Array(newBuffer);f=new Float32Array(newBuffer);g=new Float64Array(newBuffer);buffer=newBuffer;return true}
- // EMSCRIPTEN_START_FUNCS
- function Rg(f){f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,$a=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Eb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,ad=0,bd=0,cd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Od=0,Pd=0,Qd=0,Rd=0,Td=0,Ud=0,Vd=0,Wd=0,Yd=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Ef=0,Ff=0,Gf=0,Hf=0;Hf=Ra;Ra=Ra+864|0;nf=Hf+848|0;yf=Hf+840|0;Be=Hf+832|0;Gf=Hf+816|0;Ff=Hf+800|0;Ef=Hf+792|0;ze=Hf+784|0;ye=Hf+776|0;xe=Hf+768|0;we=Hf+760|0;ve=Hf+752|0;ue=Hf+736|0;te=Hf+728|0;bf=Hf+720|0;Ye=Hf+712|0;Xe=Hf+704|0;We=Hf+696|0;Ue=Hf+688|0;Te=Hf+664|0;Se=Hf+656|0;Re=Hf+648|0;Qe=Hf+640|0;Oe=Hf+624|0;Ne=Hf+608|0;Me=Hf+592|0;Le=Hf+576|0;Ke=Hf+560|0;Je=Hf+544|0;ef=Hf+536|0;df=Hf+528|0;cf=Hf+520|0;Ie=Hf+512|0;He=Hf+504|0;Ge=Hf+496|0;Fe=Hf+488|0;Ee=Hf+472|0;De=Hf+456|0;Ce=Hf+440|0;Ae=Hf+432|0;lf=Hf+416|0;gf=Hf+408|0;kf=Hf+400|0;ff=Hf+392|0;rf=Hf+352|0;Hd=Hf+112|0;Td=Hf+280|0;Yd=Hf;ee=Hf+272|0;je=Hf+852|0;le=f+104|0;q=c[le>>2]|0;Cf=c[f>>2]|0;sd=a[Cf+78>>0]|0;xd=f+88|0;o=c[xd>>2]|0;i=c[f+156>>2]|0;if(i|0?(k=c[Cf+16>>2]|0,l=c[Cf+20>>2]|0,(l|0)>0):0){h=0;do{if(((h|0)!=1?1<<h&i|0:0)?(m=c[k+(h<<4)+4>>2]|0,m|0):0)c[(c[m+4>>2]|0)+4>>2]=c[m>>2];h=h+1|0}while((h|0)!=(l|0))}Af=Cf+320|0;if(!(c[Af>>2]|0))h=-1;else{h=c[Cf+328>>2]|0;h=h-(((c[f+176>>2]|0)>>>0)%(h>>>0)|0)|0}Bf=f+40|0;a:do if((c[Bf>>2]|0)==7){l=q;n=0;k=0;m=q;j=h;i=Cf+81|0;oa=3892}else{Zc=f+56|0;c[Zc>>2]=0;c[Zc+4>>2]=0;Zc=f+120|0;c[Zc>>2]=0;c[Cf+404>>2]=0;lc=Cf+264|0;b:do if(!(c[lc>>2]|0)){xf=f+36|0;mc=f+100|0;qf=Cf+88|0;nc=f+196|0;oc=f+96|0;pc=f+147|0;uf=Cf+16|0;vf=f+149|0;qc=rf+8|0;rc=f+44|0;sc=Cf+100|0;tc=Cf+104|0;uc=f+168|0;vc=Hd+8|0;wc=Hd+10|0;xc=Hd+4|0;zc=Hd+8|0;Ac=Hd+10|0;Bc=Hd+4|0;Cc=Cf+90|0;Dc=Td+4|0;Ec=Td+12|0;Fc=Td+16|0;Gc=Td+20|0;Hc=Td+24|0;Ic=Td+28|0;Jc=Td+8|0;Kc=Td+64|0;Lc=Td+40|0;Mc=Td+44|0;Nc=Td+48|0;Oc=Td+52|0;Pc=Td+56|0;Qc=Td+60|0;Rc=Td+61|0;Sc=Cf+32|0;$c=Cf+272|0;Tc=rf+8|0;Uc=rf+4|0;mf=f+124|0;Vc=Cf+332|0;Wc=rf+32|0;sa=rf+8|0;ad=Cf+184|0;ta=f+92|0;zf=Cf+81|0;ua=f+32|0;bd=Cf+176|0;qd=Cf+444|0;va=f+24|0;wa=Yd+8|0;xa=Yd+10|0;ya=Yd+4|0;za=Yd+14|0;Aa=Hd+8|0;Ba=Hd+4|0;Ca=Cf+232|0;Da=Cf+108|0;Ea=rf+8|0;Fa=rf+32|0;Ga=rf+24|0;Ha=Cf+172|0;hf=Cf+24|0;Ia=rf+8|0;Ja=rf+4|0;Ka=rf+16|0;Ze=Cf+480|0;La=f+204|0;Ma=Cf+148|0;Na=Cf+472|0;Oa=f+64|0;Pa=Cf+464|0;Xc=Cf+276|0;Qa=rf+12|0;Sa=Hd+8|0;Ta=Hd+32|0;Ua=rf+8|0;Va=rf+4|0;$a=Cf+4|0;db=Cf+356|0;fb=Cf+328|0;gb=Cf+324|0;hb=sd<<24>>24==1;ib=f+184|0;_e=Cf+304|0;$e=Cf+308|0;af=Cf+300|0;jb=Hd+8|0;kb=Hd+32|0;lb=Hd+24|0;mb=rf+16|0;nb=rf+12|0;ob=Cf+165|0;pb=rf+12|0;qb=rf+20|0;Yc=Cf+288|0;rb=rf+20|0;tb=rf+8|0;ub=rf+4|0;vb=rf+20|0;wb=f+108|0;hd=f+188|0;Fd=Cf+456|0;Gd=Cf+452|0;xb=rf+16|0;yb=rf+28|0;zb=Cf+40|0;Ab=Hd+8|0;Bb=Hd+20|0;Cb=Hd+24|0;Eb=Hd+16|0;Gb=Hd+12|0;Hb=f+216|0;Ib=f+28|0;cd=Cf+296|0;ed=Cf+284|0;Jb=rf+10|0;Kb=rf+20|0;Lb=Cf+180|0;of=Cf+196|0;pf=Cf+200|0;Mb=rf+8|0;Nb=rf+8|0;fd=Cf+292|0;Ob=rf+16|0;Pb=Cf+348|0;Qb=rf+24|0;Rb=Cf+86|0;gd=Cf+79|0;Sb=rf+32|0;Tb=Cf+228|0;Ub=rf+8|0;Vb=Cf+344|0;Wb=Cf+340|0;Xb=rf+12|0;Yb=Hd+16|0;_b=Hd+8|0;ac=Hd+12|0;bc=f+48|0;ra=Cf+80|0;cc=rf+8|0;dc=Cf+336|0;ec=rf+20|0;Id=Cf+87|0;fc=Hd+24|0;sf=Cf+20|0;jf=Cf+56|0;gc=f+72|0;hc=f+80|0;ic=rf+8|0;Jd=f+146|0;jc=Cf+8|0;kc=rf+4|0;m=q;p=q+((c[xf>>2]|0)*20|0)|0;K=0;k=0;qa=0;n=0;pa=o;c:while(1){n=n+1|0;z=a[p>>0]|0;d:do switch(z<<24>>24){case 81:{oa=153;break c}case 1:{oa=922;break c}case 11:{i=K;oa=20;break}case 12:{i=c[p+4>>2]|0;b[pa+(i*40|0)+8>>1]=4;oa=(p-m|0)/20|0;i=pa+(i*40|0)|0;c[i>>2]=oa;c[i+4>>2]=((oa|0)<0)<<31>>31;i=K;oa=28;break}case 66:{l=c[p+4>>2]|0;p=m+((c[pa+(l*40|0)>>2]|0)*20|0)|0;b[pa+(l*40|0)+8>>1]=128;l=m;q=pa;o=qa;i=K;break}case 13:{na=c[p+4>>2]|0;la=(c[p+12>>2]|0)+-1|0;ma=pa+(na*40|0)|0;c[ma>>2]=la;c[ma+4>>2]=((la|0)<0)<<31>>31;b[pa+(na*40|0)+8>>1]=4;if(!(c[p+8>>2]|0)){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 67:{l=c[p+4>>2]|0;p=m+(((c[m+((c[pa+(l*40|0)>>2]|0)*20|0)+8>>2]|0)+-1|0)*20|0)|0;b[pa+(l*40|0)+8>>1]=128;l=m;q=pa;o=qa;i=K;break}case 14:{l=c[p+4>>2]|0;b[pa+(l*40|0)+8>>1]=4;l=pa+(l*40|0)|0;i=c[l>>2]|0;q=(p-m|0)/20|0;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;p=m+(i*20|0)|0;i=K;break}case 68:{if(!(b[pa+((c[p+12>>2]|0)*40|0)+8>>1]&1)){l=m;q=pa;o=qa;i=K}else oa=34;break}case 69:{oa=34;break}case 70:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;q=c[p+4>>2]|0;l=i;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 71:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=c[p+16>>2]|0;q=c[o+4>>2]|0;l=i;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case -111:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;b[i+8>>1]=8;g[i>>3]=+g[c[p+16>>2]>>3];l=m;q=pa;o=qa;i=K;break}case 110:{oa=c[xd>>2]|0;s=p+8|0;l=c[s>>2]|0;i=oa+(l*40|0)|0;l=oa+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;a[p>>0]=72;q=p+16|0;o=c[q>>2]|0;if(!o)l=0;else l=(Eu(o)|0)&1073741823;r=p+4|0;c[r>>2]=l;if(hb)i=K;else{if(yc(i,o,-1,1,0)|0){oa=3891;break c}o=i+8|0;l=b[o>>1]|0;if((l&2)!=0?(a[i+10>>0]|0)!=sd<<24>>24:0){if(Ig(i,sd)|0){l=p;j=h;i=zf;oa=3892;break a}l=b[o>>1]|0}c[i+24>>2]=0;b[o>>1]=l|2048;l=p+1|0;e:do if((a[l>>0]|0)==-7?(ae=c[q>>2]|0,ae|0):0){if(c[Ze>>2]|0){Xd(Cf,ae);break}o=ae;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;c[ae>>2]=c[af>>2];c[af>>2]=ae;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](ae);break}else{oa=Wa[c[29352>>2]&127](ae)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ae);break}}while(0);a[l>>0]=-7;c[q>>2]=c[i+16>>2];l=c[i+12>>2]|0;c[r>>2]=l;i=0}if((l|0)>(c[Da>>2]|0)){oa=3891;break c}else{l=s;oa=83}break}case 72:{l=p+8|0;i=K;oa=83;break}case 73:{o=c[xd>>2]|0;q=p+8|0;i=c[q>>2]|0;l=o+(i*40|0)|0;o=o+(i*40|0)+8|0;if(!(b[o>>1]&9216))b[o>>1]=4;else{lh(l)|0;i=c[q>>2]|0}i=(c[p+12>>2]|0)-i|0;r=(c[p+4>>2]|0)==0?1:257;b[l+8>>1]=r;c[l+12>>2]=0;if((i|0)>0)while(1){o=l;l=l+40|0;q=o+48|0;if(!(b[q>>1]&9216))b[q>>1]=1;else Dg(l);b[q>>1]=r;c[o+52>>2]=0;if((i|0)<=1){l=m;q=pa;o=qa;i=K;break}else i=i+-1|0}else{l=m;q=pa;o=qa;i=K}break}case 74:{l=pa+((c[p+4>>2]|0)*40|0)+8|0;b[l>>1]=b[l>>1]&-160|1;l=m;q=pa;o=qa;i=K;break}case 75:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;yc(i,c[p+16>>2]|0,c[p+4>>2]|0,0,0)|0;a[i+10>>0]=sd;l=m;q=pa;o=qa;i=K;break}case 76:{o=c[mc>>2]|0;q=(c[p+4>>2]|0)+-1|0;r=o+(q*40|0)|0;l=e[o+(q*40|0)+8>>1]|0;if(l&18|0){i=c[o+(q*40|0)+12>>2]|0;if(l&16384)i=(c[r>>2]|0)+i|0;if((i|0)>(c[(c[o+(q*40|0)+32>>2]|0)+108>>2]|0)){oa=3891;break c}}l=c[p+8>>2]|0;i=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(b[l>>1]&9216)Dg(i);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];c[i+16>>2]=c[r+16>>2];b[l>>1]=b[l>>1]&-7201|2080;l=m;q=pa;o=qa;i=K;break}case 77:{q=pa+((c[p+4>>2]|0)*40|0)|0;r=c[p+12>>2]|0;s=pa+((c[p+8>>2]|0)*40|0)|0;while(1){t=s+8|0;if(!((b[t>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);ea=s;l=q;fa=ea+40|0;do{c[ea>>2]=c[l>>2];ea=ea+4|0;l=l+4|0}while((ea|0)<(fa|0));b[q+8>>1]=1;c[q+24>>2]=0;i=b[t>>1]|0;if(i&4096){l=i&65535;do if(l&18){do if(l&16384){o=s+12|0;l=(c[s>>2]|0)+(c[o>>2]|0)|0;if((l|0)<1)if(!(i&16))break;else i=1;else i=l;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[o>>2]|0)|0,0,c[s>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+(c[s>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}while(0);b[t>>1]=i&-4097}r=r+-1|0;if(!r){l=m;q=pa;o=qa;i=K;break}else{q=q+40|0;s=s+40|0}}break}case 78:{q=c[p+12>>2]|0;r=pa+((c[p+4>>2]|0)*40|0)|0;s=pa+((c[p+8>>2]|0)*40|0)|0;while(1){t=s+8|0;if(!(b[t>>1]&9216)){c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];c[s+16>>2]=c[r+16>>2];if(!(b[r+8>>1]&2048))b[t>>1]=b[t>>1]&-7169|4096}else mh(s,r,4096);i=b[t>>1]|0;if(i&4096){l=i&65535;do if(l&18){do if(l&16384){o=s+12|0;l=(c[s>>2]|0)+(c[o>>2]|0)|0;if((l|0)<1)if(!(i&16))break;else i=1;else i=l;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[o>>2]|0)|0,0,c[s>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+(c[s>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}while(0);b[t>>1]=i&-4097}if(!q){l=m;q=pa;o=qa;i=K;break d}q=q+-1|0;r=r+40|0;s=s+40|0}}case 79:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;q=c[p+8>>2]|0;o=pa+(q*40|0)|0;q=pa+(q*40|0)+8|0;if(b[q>>1]&9216){mh(o,l,4096);l=m;q=pa;o=qa;i=K;break d};c[o>>2]=c[l>>2];c[o+4>>2]=c[l+4>>2];c[o+8>>2]=c[l+8>>2];c[o+12>>2]=c[l+12>>2];c[o+16>>2]=c[l+16>>2];if(!(b[pa+(i*40|0)+8>>1]&2048)){b[q>>1]=b[q>>1]&-7169|4096;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 80:{q=c[p+8>>2]|0;i=pa+(q*40|0)|0;o=pa+((c[p+4>>2]|0)*40|0)|0;l=c[o>>2]|0;o=c[o+4>>2]|0;q=pa+(q*40|0)+8|0;if(!(b[q>>1]&9216)){c[i>>2]=l;c[i+4>>2]=o;b[q>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(i,l,o);l=m;q=pa;o=qa;i=K;break d}}case 105:{z=c[p+4>>2]|0;s=pa+(z*40|0)|0;x=c[p+8>>2]|0;w=pa+(x*40|0)|0;A=c[p+12>>2]|0;y=pa+(A*40|0)|0;r=pa+(z*40|0)+8|0;l=b[r>>1]|0;t=pa+(x*40|0)+8|0;i=b[t>>1]|0;if((i|l)&1){i=pa+(A*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(y);l=m;q=pa;o=qa;i=K;break d}}do if(l&16384){q=pa+(z*40|0)+12|0;o=(c[s>>2]|0)+(c[q>>2]|0)|0;if((o|0)<1)if(!(l&16))break;else i=1;else i=o;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[pa+(z*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[s>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[s>>2]|0);l=b[r>>1]&-16897;b[r>>1]=l;i=b[t>>1]|0}while(0);do if(i&16384){q=pa+(x*40|0)+12|0;o=(c[w>>2]|0)+(c[q>>2]|0)|0;if((o|0)<1)if(!(i&16))break;else i=1;else i=o;if(Eg(w,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[pa+(x*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[w>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i;l=b[r>>1]|0}while(0);if(!(l&18)){if(Hg(s,sd,0)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}if((i&18)==0?Hg(w,sd,0)|0:0){l=p;j=h;i=zf;oa=3892;break a}q=pa+(z*40|0)+12|0;r=pa+(x*40|0)+12|0;s=(c[r>>2]|0)+(c[q>>2]|0)|0;if((s|0)>(c[Da>>2]|0)){oa=3891;break c}l=(A|0)==(x|0);if(Eg(y,s+2|0,l&1)|0){l=p;j=h;i=zf;oa=3892;break a}o=pa+(A*40|0)+8|0;b[o>>1]=b[o>>1]&15904|2;i=pa+(x*40|0)+16|0;if(!l){na=pa+(A*40|0)+16|0;ew(c[na>>2]|0,c[i>>2]|0,c[r>>2]|0)|0;i=na}ew((c[i>>2]|0)+(c[r>>2]|0)|0,c[pa+(z*40|0)+16>>2]|0,c[q>>2]|0)|0;a[(c[i>>2]|0)+s>>0]=0;a[(c[i>>2]|0)+(s+1)>>0]=0;b[o>>1]=b[o>>1]|512;c[pa+(A*40|0)+12>>2]=s;a[pa+(A*40|0)+10>>0]=sd;l=m;q=pa;o=qa;i=K;break}case 104:case 103:case 102:case 101:case 100:{s=c[p+4>>2]|0;t=pa+(s*40|0)|0;r=pa+(s*40|0)+8|0;i=e[r>>1]|0;l=i&12;if(!l)if(!(i&18))B=0;else B=nh(t)|0;else B=l&65535;x=c[p+8>>2]|0;y=pa+(x*40|0)|0;w=pa+(x*40|0)+8|0;i=e[w>>1]|0;l=i&12;if(!l)if(!(i&18))A=0;else A=nh(y)|0;else A=l&65535;C=c[p+12>>2]|0;D=pa+(C*40|0)|0;f:do if(!((B&4&A)<<16>>16)){if(!((b[w>>1]|b[r>>1])&1)){z=0;oa=245}}else{i=t;o=c[i>>2]|0;i=c[i+4>>2]|0;q=y;l=c[q>>2]|0;q=c[q+4>>2]|0;g:do switch(a[p>>0]|0){case 100:{if((i|0)>-1|(i|0)==-1&o>>>0>4294967295){na=Tv(-1,2147483647,l|0,q|0)|0;ma=L()|0;if(((q|0)>0|(q|0)==0&l>>>0>0)&((ma|0)<(i|0)|(ma|0)==(i|0)&na>>>0<o>>>0)){z=1;oa=245;break f}}else if((q|0)<0?(ma=Tv(1,-2147483648,l|0,q|0)|0,ka=L()|0,na=Sv(o|0,i|0,1,0)|0,la=L()|0,(ka|0)>(la|0)|(ka|0)==(la|0)&ma>>>0>na>>>0):0){z=1;oa=245;break f}l=Sv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 101:{if((o|0)==0&(i|0)==-2147483648)if((q|0)>-1|(q|0)==-1&l>>>0>4294967295){z=1;oa=245;break f}else{i=q^-2147483648;break g}if((i|0)<0|(i|0)==0&o>>>0<1){na=Tv(0,0,o|0,i|0)|0;la=L()|0;ma=Tv(-1,2147483647,l|0,q|0)|0;ka=L()|0;if(((q|0)>0|(q|0)==0&l>>>0>0)&((ka|0)<(la|0)|(ka|0)==(la|0)&ma>>>0<na>>>0)){z=1;oa=245;break f}}else if((q|0)<0?(ma=Tv(1,-2147483648,l|0,q|0)|0,ka=L()|0,na=Tv(1,0,o|0,i|0)|0,la=L()|0,(ka|0)>(la|0)|(ka|0)==(la|0)&ma>>>0>na>>>0):0){z=1;oa=245;break f}l=Tv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 102:{do if((i|0)>0|(i|0)==0&o>>>0>0){na=_v(-1,2147483647,o|0,i|0)|0;ma=L()|0;if((q|0)>(ma|0)|(q|0)==(ma|0)&l>>>0>na>>>0){z=1;oa=245;break f}na=Wv(0,-2147483648,o|0,i|0)|0;ma=L()|0;if((q|0)<(ma|0)|(q|0)==(ma|0)&l>>>0<na>>>0){z=1;oa=245;break f}}else if((i|0)<0){if((q|0)>0|(q|0)==0&l>>>0>0){na=Wv(0,-2147483648,l|0,q|0)|0;ma=L()|0;if((ma|0)>(i|0)|(ma|0)==(i|0)&na>>>0>o>>>0){z=1;oa=245;break f}else break}if((q|0)<0){if((o|0)==0&(i|0)==-2147483648|(l|0)==0&(q|0)==-2147483648){z=1;oa=245;break f}na=Tv(0,0,l|0,q|0)|0;la=L()|0;ma=Tv(0,0,o|0,i|0)|0;ma=Wv(-1,2147483647,ma|0,L()|0)|0;ka=L()|0;if((ka|0)<(la|0)|(ka|0)==(la|0)&ma>>>0<na>>>0){z=1;oa=245;break f}}}while(0);l=Yv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 103:{if((o|0)==0&(i|0)==0)break f;if((o|0)==-1&(i|0)==-1&((l|0)==0&(q|0)==-2147483648)){z=1;oa=245;break f}l=Wv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}default:{switch(o|0){case 0:{if(!i)break f;break}case -1:{if((i|0)==-1){o=1;i=0}break}default:{}}l=Zv(l|0,q|0,o|0,i|0)|0;i=L()|0}}while(0);q=D;c[q>>2]=l;c[q+4>>2]=i;l=pa+(C*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break d}while(0);h:do if((oa|0)==245){oa=0;i=e[r>>1]|0;do if(!(i&8)){if(i&4|0){na=t;v=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(i&18))v=0.0;else v=+Kg(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)}else v=+g[t>>3];while(0);i=e[w>>1]|0;do if(!(i&8)){if(i&4|0){na=y;u=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(i&18))u=0.0;else u=+Kg(a[pa+(x*40|0)+10>>0]|0,c[pa+(x*40|0)+12>>2]|0,c[pa+(x*40|0)+16>>2]|0)}else u=+g[y>>3];while(0);switch(a[p>>0]|0){case 100:{u=v+u;break}case 101:{u=u-v;break}case 102:{u=v*u;break}case 103:{if(v==0.0)break h;u=u/v;break}default:{i=e[r>>1]|0;do if(!(i&4)){if(i&8|0){r=Mg(+g[t>>3])|0;i=L()|0;break}if(!(i&18)){r=0;i=0}else{r=Ng(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)|0;i=L()|0}}else{i=t;r=c[i>>2]|0;i=c[i+4>>2]|0}while(0);l=e[w>>1]|0;do if(!(l&4)){if(l&8|0){o=Mg(+g[y>>3])|0;q=L()|0;break}if(!(l&18)){o=0;q=0}else{o=Ng(a[pa+(x*40|0)+10>>0]|0,c[pa+(x*40|0)+12>>2]|0,c[pa+(x*40|0)+16>>2]|0)|0;q=L()|0}}else{q=y;o=c[q>>2]|0;q=c[q+4>>2]|0}while(0);switch(r|0){case 0:{if(!i)break h;else l=r;break}case -1:{if((i|0)==-1){l=1;i=0}else l=r;break}default:l=r}u=+((Zv(o|0,q|0,l|0,i|0)|0)>>>0)+4294967296.0*+(L()|0)}}g[rf>>3]=u;g[Hd>>3]=+g[rf>>3];if(+g[rf>>3]==+g[Hd>>3]){g[D>>3]=u;o=pa+(C*40|0)+8|0;q=b[o>>1]&15904;b[o>>1]=q|8;if(((A|B)&8)!=0|z<<24>>24!=0){l=m;q=pa;o=qa;i=K;break d}i=Mg(u)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&u==+(i>>>0)+4294967296.0*+(l|0))){l=m;q=pa;o=qa;i=K;break d}na=D;c[na>>2]=i;c[na+4>>2]=l;b[o>>1]=q|4;l=m;q=pa;o=qa;i=K;break d}}while(0);i=pa+(C*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(D);l=m;q=pa;o=qa;i=K;break d}}case 82:{i=c[p+4>>2]|0;if(i){l=pa+(i*40|0)|0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216)){c[l>>2]=0;c[l+4>>2]=0;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(l,0,0);l=m;q=pa;o=qa;i=K;break d}}else{l=m;q=pa;o=qa;i=K}break}case 99:case 98:case 97:case 96:{s=c[p+4>>2]|0;l=c[p+8>>2]|0;w=c[p+12>>2]|0;x=pa+(w*40|0)|0;q=pa+(s*40|0)+8|0;o=b[q>>1]|0;i=b[pa+(l*40|0)+8>>1]|0;if((i|o)&1){i=pa+(w*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(x);l=m;q=pa;o=qa;i=K;break d}}r=pa+(l*40|0)|0;t=pa+(s*40|0)|0;i=i&65535;do if(!(i&4)){if(i&8|0){l=Mg(+g[r>>3])|0;i=L()|0;break}if(!(i&18)){l=0;i=0}else{l=Ng(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0)|0;i=L()|0;o=b[q>>1]|0}}else{i=r;l=c[i>>2]|0;i=c[i+4>>2]|0}while(0);o=o&65535;do if(!(o&4)){if(o&8|0){q=Mg(+g[t>>3])|0;s=L()|0;break}if(!(o&18)){q=0;s=0}else{q=Ng(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)|0;s=L()|0}}else{s=t;q=c[s>>2]|0;s=c[s+4>>2]|0}while(0);o=a[p>>0]|0;i:do switch(o<<24>>24){case 96:{l=q&l;i=s&i;break}case 97:{l=q|l;i=s|i;break}default:if(!((q|0)==0&(s|0)==0)){la=(s|0)<0;ma=(s|0)>-1|(s|0)==-1&q>>>0>4294967232;ka=Tv(0,0,q|0,s|0)|0;na=L()|0;r=la?197-(o&255)&255:o;q=la?(ma?ka:64):q;o=la?(ma?na:0):s;if((o|0)>0|(o|0)==0&q>>>0>63){i=((i|0)<0&r<<24>>24!=98)<<31>>31;l=i;i=((i|0)<0)<<31>>31;break i}if(r<<24>>24==98){l=cw(l|0,i|0,q|0)|0;i=L()|0;break i}else{l=bw(l|0,i|0,q|0)|0;na=L()|0;ma=(i|0)<0;la=Tv(64,0,q|0,o|0)|0;L()|0;la=cw(-1,-1,la|0)|0;i=L()|0;l=(ma?la:0)|l;i=(ma?i:0)|na;break i}}}while(0);q=x;c[q>>2]=l;c[q+4>>2]=i;l=pa+(w*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break}case 83:{i=c[p+4>>2]|0;r=pa+(i*40|0)|0;s=pa+(i*40|0)+8|0;q=b[s>>1]|0;l=q&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[r>>3])|0;o=L()|0;i=q;break}if(!(l&18)){l=0;o=0;i=q}else{l=Ng(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)|0;o=L()|0;i=b[s>>1]|0}}else{o=r;l=c[o>>2]|0;o=c[o+4>>2]|0;i=q}while(0);q=r;c[q>>2]=l;c[q+4>>2]=o;b[s>>1]=i&15904|4;q=c[p+8>>2]|0;o=Sv(l|0,o|0,q|0,((q|0)<0)<<31>>31|0)|0;q=L()|0;l=r;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case 15:{q=c[p+4>>2]|0;s=pa+(q*40|0)+8|0;i=b[s>>1]|0;if(!(i&4)){r=pa+(q*40|0)|0;l=i&65535;do if(!(l&4)){if(l&8|0){v=+g[r>>3];l=Mg(v)|0;o=L()|0;na=Sv(l|0,o|0,1,-2147483648)|0;ma=L()|0;q=i&15904|4;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(l>>>0)+4294967296.0*+(o|0)))break;i=r;c[i>>2]=l;c[i+4>>2]=o;b[s>>1]=q;i=q;break}if(l&2){l=a[pa+(q*40|0)+10>>0]|0;o=pa+(q*40|0)+16|0;i=pa+(q*40|0)+12|0;if(!(Lg(c[o>>2]|0,rf,c[i>>2]|0,l)|0))i=b[s>>1]|0;else{if(Og(c[o>>2]|0,Hd,c[i>>2]|0,l)|0){v=+g[rf>>3];g[r>>3]=v;l=b[s>>1]|0;i=l|8;b[s>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)){i=r;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=334}}else{na=Hd;oa=c[na+4>>2]|0;i=r;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[s>>1]|0;oa=334}if((oa|0)==334){oa=0;i=i|4;b[s>>1]=i}i=i&-3;b[s>>1]=i}}}while(0);if(!(i&4))if(!(c[p+8>>2]|0)){i=20;oa=3855;break c}else{i=K;oa=28;break d}}b[s>>1]=i&15904|4;l=m;q=pa;o=qa;i=K;break}case 84:{l=c[p+4>>2]|0;q=pa+(l*40|0)+8|0;i=b[q>>1]|0;if(!(i&4)){l=m;q=pa;o=qa;i=K}else{r=pa+(l*40|0)|0;o=i&65535;do if(!(o&8)){if(o&4|0){na=r;u=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(o&18))u=0.0;else{u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);i=b[q>>1]|0}}else u=+g[r>>3];while(0);g[r>>3]=u;b[q>>1]=i&15904|8;l=m;q=pa;o=qa;i=K}break}case 85:{o=c[p+4>>2]|0;s=pa+(o*40|0)|0;q=pa+(o*40|0)+8|0;l=b[q>>1]|0;do if(l&16384){r=pa+(o*40|0)+12|0;i=(c[s>>2]|0)+(c[r>>2]|0)|0;if((i|0)<1)if(!(l&16)){i=0;break}else i=1;if(!(Eg(s,i,1)|0)){gw((c[pa+(o*40|0)+16>>2]|0)+(c[r>>2]|0)|0,0,c[s>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[s>>2]|0);b[q>>1]=b[q>>1]&-16897;i=0}else i=7}else i=0;while(0);Sg(s,c[p+8>>2]&255,sd);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 57:case 54:case 55:case 56:case 52:case 53:{s=c[p+4>>2]|0;y=pa+(s*40|0)|0;w=c[p+12>>2]|0;x=pa+(w*40|0)|0;A=pa+(s*40|0)+8|0;i=b[A>>1]|0;B=pa+(w*40|0)+8|0;l=b[B>>1]|0;q=i&65535;t=l&65535;r=(l|i)&65535;C=p+2|0;o=e[C>>1]|0;do if(r&1){if(o&128|0){if(!((i&1&l)<<16>>16!=0&(t&256|0)==0)){r=(t<<1&2^2)+-1|0;oa=389;break}q=z;o=(z&255)+-52|0;oa=392;break}if(!(o&32))if(!(o&16)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}else{l=pa+((c[p+8>>2]|0)*40|0)+8|0;b[l>>1]=b[l>>1]&15904|1;l=m;q=pa;o=1;i=K;break d}}else{o=o&71;if(o>>>0>66){if(r&2){if((q&14|0)==2){o=a[pa+(s*40|0)+10>>0]|0;q=pa+(s*40|0)+16|0;l=pa+(s*40|0)+12|0;if(Lg(c[q>>2]|0,rf,c[l>>2]|0,o)|0){if(!(Og(c[q>>2]|0,Hd,c[l>>2]|0,o)|0)){na=Hd;oa=c[na+4>>2]|0;l=y;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=4}else{g[y>>3]=+g[rf>>3];l=8}b[A>>1]=b[A>>1]&-3|l}r=b[B>>1]|0}else r=l;if((r&14)==2){o=a[pa+(w*40|0)+10>>0]|0;q=pa+(w*40|0)+16|0;l=pa+(w*40|0)+12|0;if(!(Lg(c[q>>2]|0,rf,c[l>>2]|0,o)|0))l=b[B>>1]|0;else{if(!(Og(c[q>>2]|0,Hd,c[l>>2]|0,o)|0)){na=Hd;oa=c[na+4>>2]|0;l=x;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=4}else{g[x>>3]=+g[rf>>3];l=8}l=b[B>>1]&-3|l;b[B>>1]=l}s=r}else{s=r;l=r}}else s=l;if(!((l&4&b[A>>1])<<16>>16))l=s;else{r=x;q=c[r>>2]|0;r=c[r+4>>2]|0;o=y;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((r|0)>(o|0)|(r|0)==(o|0)&q>>>0>l>>>0)){r=((r|0)<(o|0)|(r|0)==(o|0)&q>>>0<l>>>0)<<31>>31;l=s;oa=389;break}o=a[p>>0]|0;r=1;l=s;q=o;o=(o&255)+-52|0;oa=393;break}}else if((o|0)==66){if(!((q&2|0)!=0|(q&12|0)==0)){Hg(y,sd,1)|0;i=(q&49631|b[A>>1]&15904)&65535}if(!((t&2|0)!=0|(t&12|0)==0)){Hg(x,sd,1)|0;l=(t&49631|b[B>>1]&15904)&65535}}r=Tg(x,y,c[p+16>>2]|0)|0;oa=389}while(0);do if((oa|0)==389){oa=0;if((r|0)>=0){q=a[p>>0]|0;o=(q&255)+-52|0;if(!r){oa=392;break}else{oa=393;break}}else{na=a[p>>0]|0;s=r;o=34207+((na&255)+-52)|0;r=na;break}}while(0);if((oa|0)==392){oa=0;s=0;o=34213+o|0;r=q}else if((oa|0)==393){oa=0;s=r;o=34219+o|0;r=q}o=a[o>>0]|0;q=o&255;b[A>>1]=i;b[B>>1]=l;l=e[C>>1]|0;if(!(l&32))if(!(o<<24>>24)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}i=c[p+8>>2]|0;if(l&8|0?(q|0)==(r<<24>>24==53|0):0){l=m;q=pa;o=s;i=K;break d}l=pa+(i*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=pa+(i*40|0)|0;c[l>>2]=o&255;c[l+4>>2]=0;l=m;q=pa;o=s;i=K;break}case 58:{if(!qa){l=m;q=pa;o=0;i=K}else{i=K;oa=28}break}case -88:case 61:{l=a[qf>>0]|0;do if(l&65?((d[vf>>0]|d[vf+1>>0]<<8)&16)==0:0){i=c[p+16>>2]|0;if(!i){i=c[hd>>2]|0;if(!i)break}if(l&64){na=c[of>>2]|0;i=_c(f,i)|0;bb[na&127](c[pf>>2]|0,i);if(!i)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}if((c[Lb>>2]|0)<=1){Za[c[of>>2]&127](1,c[pf>>2]|0,f,i)|0;break}c[ze>>2]=i;i=dd(Cf,34793,ze)|0;Za[c[of>>2]&127](1,c[pf>>2]|0,f,i)|0;if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);q=p+4|0;i=c[q>>2]|0;if((i|0)>=(c[7392]|0)){if((a[p>>0]|0)==-88){l=m;q=pa;o=qa;i=K;break d}l=c[wb>>2]|0;if((l|0)>1){o=c[le>>2]|0;i=1;do{if((a[o+(i*20|0)>>0]|0)==17)c[o+(i*20|0)+4>>2]=0;i=i+1|0}while((i|0)!=(l|0))}c[q>>2]=0;i=0}c[q>>2]=i+1;c[ib>>2]=(c[ib>>2]|0)+1;i=K;oa=28;break}case 87:{if(!(b[p+2>>1]&1))q=0;else q=(c[p+-4>>2]|0)+4|0;s=c[p+12>>2]|0;t=c[p+16>>2]|0;w=c[p+4>>2]|0;x=c[p+8>>2]|0;if((s|0)>0){r=t+16|0;j:do if(!q){l=0;while(1){i=a[(c[r>>2]|0)+l>>0]|0;o=Tg(pa+((l+w|0)*40|0)|0,pa+((l+x|0)*40|0)|0,c[t+20+(l<<2)>>2]|0)|0;l=l+1|0;if(o|0)break j;if((l|0)>=(s|0)){l=m;q=pa;o=0;i=K;break d}}}else{l=0;while(1){o=c[q+(l<<2)>>2]|0;i=a[(c[r>>2]|0)+l>>0]|0;o=Tg(pa+((o+w|0)*40|0)|0,pa+((o+x|0)*40|0)|0,c[t+20+(l<<2)>>2]|0)|0;l=l+1|0;if(o|0)break j;if((l|0)>=(s|0)){l=m;q=pa;o=0;i=K;break d}}}while(0);l=m;q=pa;o=i<<24>>24==0?o:0-o|0;i=K}else{l=m;q=pa;o=qa;i=K}break}case 16:{if((qa|0)<0){l=m;q=pa;o=qa;p=m+(((c[p+4>>2]|0)+-1|0)*20|0)|0;i=K;break d}if(!qa){l=m;q=pa;o=0;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0;i=K;break d}else{l=m;q=pa;o=qa;p=m+(((c[p+12>>2]|0)+-1|0)*20|0)|0;i=K;break d}}case 43:case 44:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(!(o&4))if(!(o&1)){if(!(o&8))if(!(o&18))u=0.0;else u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0);else u=+g[l>>3];q=u!=0.0&1}else q=2;else{q=l;q=((c[q>>2]|0)!=0|(c[q+4>>2]|0)!=0)&1}i=c[p+8>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(!(o&4))if(!(o&1)){if(!(o&8))if(!(o&18))u=0.0;else u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0);else u=+g[l>>3];i=u!=0.0&1}else i=2;else{i=l;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}i=a[((a[p>>0]|0)==44?34225:34234)+(i+(q*3|0))>>0]|0;l=c[p+12>>2]|0;if(i<<24>>24==2){l=pa+(l*40|0)+8|0;b[l>>1]=b[l>>1]&15904|1;l=m;q=pa;o=qa;i=K;break d}else{q=pa+(l*40|0)|0;c[q>>2]=i&255;c[q+4>>2]=0;l=pa+(l*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break d}}case 88:{r=c[p+8>>2]|0;s=pa+(r*40|0)|0;l=c[p+4>>2]|0;o=pa+(l*40|0)|0;q=e[pa+(l*40|0)+8>>1]|0;if(!(q&4)){i=c[p+12>>2]|0;if(!(q&1)){if(!(q&8))if(!(q&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0&1}}else{i=o;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}l=c[p+16>>2]^i;o=((l|0)<0)<<31>>31;i=pa+(r*40|0)+8|0;if(!(b[i>>1]&9216)){q=s;c[q>>2]=l;c[q+4>>2]=o;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(s,l,o);l=m;q=pa;o=qa;i=K;break d}}case 19:{l=c[p+4>>2]|0;q=c[p+8>>2]|0;r=pa+(q*40|0)|0;i=b[pa+(l*40|0)+8>>1]|0;if(i&1){i=pa+(q*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(r);l=m;q=pa;o=qa;i=K;break d}}o=pa+(l*40|0)|0;i=i&65535;if(!(i&4))if(!(i&1)){if(!(i&8))if(!(i&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0}else i=0;else{i=o;i=(c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0}l=(i^1)&1;i=pa+(q*40|0)+8|0;if(!(b[i>>1]&9216)){q=r;c[q>>2]=l;c[q+4>>2]=0;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(r,l,0);l=m;q=pa;o=qa;i=K;break d}}case 107:{o=c[p+4>>2]|0;i=c[p+8>>2]|0;r=pa+(i*40|0)|0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(r);l=pa+(o*40|0)+8|0;if(!(b[l>>1]&1)){q=pa+(o*40|0)|0;b[i>>1]=4;i=e[l>>1]|0;do if(!(i&4)){if(i&8|0){i=Mg(+g[q>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[pa+(o*40|0)+10>>0]|0,c[pa+(o*40|0)+12>>2]|0,c[pa+(o*40|0)+16>>2]|0)|0;l=L()|0}}else{l=q;i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);q=r;c[q>>2]=~i;c[q+4>>2]=~l;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 17:{i=c[nc>>2]|0;if(!i){l=c[(c[le>>2]|0)+4>>2]|0;i=p+4|0;if((l|0)==(c[i>>2]|0)){i=K;oa=28;break d}}else{o=(p-(c[le>>2]|0)|0)/20|0;i=(c[i+24>>2]|0)+(o>>>3)|0;l=d[i>>0]|0;o=1<<(o&7);if(o&l|0){i=K;oa=28;break d}a[i>>0]=o|l;i=p+4|0;l=c[(c[le>>2]|0)+4>>2]|0}c[i>>2]=l;l=m;q=pa;o=qa;i=K;break}case 18:{l=c[p+4>>2]|0;o=pa+(l*40|0)|0;q=e[pa+(l*40|0)+8>>1]|0;if(!(q&4)){i=c[p+12>>2]|0;if(!(q&1)){if(!(q&8))if(!(q&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0&1}}else{i=o;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}if(!i){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 20:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(o&4|0){na=l;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}if(o&1|0)if(!(c[p+12>>2]|0)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}if(!(o&8)){if(!(o&18)){i=K;oa=28;break d}u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)}else u=+g[l>>3];if(u!=0.0){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 50:{if(!(b[pa+((c[p+4>>2]|0)*40|0)+8>>1]&1)){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 51:{if(!(b[pa+((c[p+4>>2]|0)*40|0)+8>>1]&1)){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 21:{if(a[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+2>>0]|0){i=c[p+12>>2]|0;l=pa+(i*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=1;i=K;oa=28;break d}else{Dg(pa+(i*40|0)|0);i=K;oa=28;break d}}else{l=m;q=pa;o=qa;i=K}break}case 90:{o=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=c[p+8>>2]|0;do if(!(a[o+3>>0]|0)){if(a[c[o+40>>2]>>0]|0){i=sh(o)|0;oa=508}}else{i=c[o+24>>2]|0;if(i|0?(Kd=c[i+(l+1<<2)>>2]|0,(Kd|0)>0):0){l=Kd+-1|0;o=c[o+36>>2]|0;break}i=rh(o)|0;oa=508}while(0);if((oa|0)==508){oa=0;if(i){oa=601;break c}}F=c[p+12>>2]|0;H=pa+(F*40|0)|0;E=c[o+72>>2]|0;r=o+28|0;i=c[ua>>2]|0;k:do if((c[r>>2]|0)!=(i|0)){do if(a[o+2>>0]|0){if((a[o>>0]|0)==3){q=c[o+32>>2]|0;x=c[pa+(q*40|0)+12>>2]|0;c[o+84>>2]=x;c[o+80>>2]=x;q=c[pa+(q*40|0)+16>>2]|0;x=o+76|0;c[x>>2]=q;break}i=pa+(F*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;break k}else{Dg(H);break k}}else{na=c[o+40>>2]|0;bg(na);oa=c[na+44>>2]|0;c[o+80>>2]=oa;i=e[na+48>>1]|0;q=c[na+40>>2]|0;na=(c[(c[na+116>>2]|0)+60>>2]|0)-q|0;c[o+84>>2]=(na|0)<(i|0)?((na|0)>0?na:0):i;i=o+76|0;c[i>>2]=q;if(oa>>>0>(c[Da>>2]|0)>>>0){oa=518;break c}x=i;i=c[ua>>2]|0}while(0);c[r>>2]=i;oa=a[q>>0]|0;i=oa&255;if(oa<<24>>24>-1){c[E>>2]=i;w=1}else{r=d[q+1>>0]|0;do if(r&128){s=d[q+2>>0]|0;if(!(s&128)){c[E>>2]=(i<<14|s)&2080895|r<<7&16256;i=3;break}else{i=Of(q,rf)|0;na=rf;oa=c[na>>2]|0;c[E>>2]=((oa|0)==(oa|0)?0==(c[na+4>>2]|0):0)?oa:-1;break}}else{c[E>>2]=i<<7&16256|r;i=2}while(0);w=i&255}t=o+48|0;c[t>>2]=w;r=o+58|0;b[r>>1]=0;i=o+84|0;s=c[E>>2]|0;if((c[i>>2]|0)>>>0>=s>>>0){q=c[x>>2]|0;i=0;oa=540;break}c[x>>2]=0;c[i>>2]=0;oa=c[E>>2]|0;if(oa>>>0<=98307?oa>>>0<=(c[o+80>>2]|0)>>>0:0){i=0;oa=532}else oa=597}else{i=o+58|0;r=i;i=b[i>>1]|0;oa=532}while(0);do if((oa|0)==532){if((l|0)<(i&65535|0)){r=c[o+88+(l<<2)>>2]|0;oa=576;break}x=o+48|0;w=c[x>>2]|0;s=c[E>>2]|0;if(w>>>0<s>>>0){q=c[o+76>>2]|0;if(!q){ea=Hd;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));s=c[o+40>>2]|0;t=c[E>>2]|0;oa=e[s+48>>1]|0;q=c[s+40>>2]|0;na=(c[(c[s+116>>2]|0)+60>>2]|0)-q|0;if(t>>>0>((na|0)<(oa|0)?((na|0)>0?na:0):oa)>>>0){i=uh(s,0,t,Hd)|0;if(i|0){oa=601;break c}i=b[r>>1]|0;s=c[x>>2]|0;q=c[Yb>>2]|0}else{c[Yb>>2]=q;b[_b>>1]=4112;c[ac>>2]=t;s=w}t=x;w=s;s=c[E>>2]|0;oa=540}else{t=x;oa=540}}else{q=0;oa=566}}while(0);do if((oa|0)==540){B=i&65535;D=q+s|0;i=B;s=q+w|0;B=c[E+(B<<2)>>2]|0;C=0;do{oa=a[s>>0]|0;w=oa&255;A=o+88+(i<<2)|0;c[A>>2]=w;if(oa<<24>>24>-1){s=s+1|0;y=w;w=d[3520+w>>0]|0;x=0}else{x=d[s>>0]|0;y=d[s+1>>0]|0;do if(y&128){z=d[s+2>>0]|0;if(!(z&128)){w=3;x=(x<<14|z)&2080895|y<<7&16256;oa=549;break}w=Of(s,rf)|0;oa=rf;x=c[oa>>2]|0;if((x|0)==(x|0)?0==(c[oa+4>>2]|0):0)oa=549;else{c[A>>2]=-1;x=-1;s=s+(w&255)|0;oa=550}}else{w=2;x=x<<7&16256|y;oa=549}while(0);if((oa|0)==549){oa=0;s=s+(w&255)|0;c[A>>2]=x;if(x>>>0>127)oa=550;else w=d[3520+x>>0]|0}if((oa|0)==550)w=(x+-12|0)>>>1;y=x;x=0}B=Sv(w|0,x|0,B|0,C|0)|0;C=L()|0;oa=i;i=i+1|0;c[E+(i<<2)>>2]=B;w=s>>>0<D>>>0}while((oa|0)<(l|0)&w);if(!w)if(s>>>0<=D>>>0?((C|0)==0?(B|0)==(c[o+80>>2]|0):0):0){w=C;x=B;oa=558}else oa=559;else{w=0;x=c[o+80>>2]|0;oa=558}if((oa|0)==558){oa=0;if(C>>>0>w>>>0|(C|0)==(w|0)&B>>>0>x>>>0)oa=559}if((oa|0)==559)if(!(c[E>>2]|0)){i=0;s=D}else{if(c[o+76>>2]|0){oa=597;break}if((b[_b>>1]&9216)==0&(c[fc>>2]|0)==0){oa=597;break}Cg(Hd);oa=597;break}i=i&65535;b[r>>1]=i;c[t>>2]=s-q;if((c[o+76>>2]|0)==0?!((b[_b>>1]&9216)==0&(c[fc>>2]|0)==0):0){Cg(Hd);q=y;i=b[r>>1]|0;oa=566}else{q=y;oa=566}}while(0);do if((oa|0)==566){oa=0;if((l|0)>=(i&65535|0)){if((a[p+1>>0]|0)!=-11){i=pa+(F*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;break}else{Dg(H);break}}l=c[p+16>>2]|0;i=pa+(F*40|0)+8|0;if(b[i>>1]&9216){mh(H,l,2048);break};c[H>>2]=c[l>>2];c[H+4>>2]=c[l+4>>2];c[H+8>>2]=c[l+8>>2];c[H+12>>2]=c[l+12>>2];c[H+16>>2]=c[l+16>>2];if(!(b[l+8>>1]&2048))b[i>>1]=b[i>>1]&-7169|2048}else{r=q;oa=576}}else if((oa|0)==597){oa=0;i=c[m+12>>2]|0;if((i|0)<=0){oa=599;break c}p=m+((i+-1|0)*20|0)|0}while(0);l:do if((oa|0)==576){oa=0;s=pa+(F*40|0)+8|0;if(b[s>>1]&9216)Dg(H);if((c[o+84>>2]|0)>>>0>=(c[E+(l+1<<2)>>2]|0)>>>0){o=(c[o+76>>2]|0)+(c[E+(l<<2)>>2]|0)|0;if(r>>>0<12){Ug(o,r,H)|0;break}q=(r+-12|0)>>>1;c[pa+(F*40|0)+12>>2]=q;a[pa+(F*40|0)+10>>0]=sd;i=q+2|0;if((c[pa+(F*40|0)+24>>2]|0)<(i|0)){b[s>>1]=1;if(Eg(H,i,0)|0){oa=602;break c}l=pa+(F*40|0)+16|0;i=l;l=c[l>>2]|0}else{l=c[pa+(F*40|0)+20>>2]|0;i=pa+(F*40|0)+16|0;c[i>>2]=l}ew(l|0,o|0,q|0)|0;a[(c[i>>2]|0)+q>>0]=0;a[(c[i>>2]|0)+(q+1)>>0]=0;b[s>>1]=b[31112+((r&1)<<1)>>1]|0;break}a[pa+(F*40|0)+10>>0]=sd;na=b[p+2>>1]|0;if(!((na&192)!=0?!((r>>>0<12|(r&1|0)!=0)&(na&128)==0):0))oa=588;do if((oa|0)==588){oa=0;if(r>>>0<=127){i=a[3520+r>>0]|0;if(!(i<<24>>24))break;else q=i&255}else q=(r+-12|0)>>>1;o=c[o+40>>2]|0;i=c[E+(l<<2)>>2]|0;na=e[o+48>>1]|0;l=c[o+40>>2]|0;ma=(c[(c[o+116>>2]|0)+60>>2]|0)-l|0;if((i+q|0)>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(o,i,q,H)|0;if(i|0){oa=601;break c}i=c[pa+(F*40|0)+16>>2]|0}else{i=l+i|0;c[pa+(F*40|0)+16>>2]=i;b[s>>1]=4112;c[pa+(F*40|0)+12>>2]=q}Ug(i,r,H)|0;b[s>>1]=b[s>>1]&-4097;break l}while(0);Ug(59040,r,H)|0}while(0);l=m;q=pa;o=qa;i=0;break}case 91:{i=c[p+16>>2]|0;s=i;t=pa+((c[p+4>>2]|0)*40|0)|0;i=a[i>>0]|0;while(1){s=s+1|0;do if(i<<24>>24>66){r=t+8|0;o=b[r>>1]|0;i=o&65535;if(!(i&4)){if(i&8|0){v=+g[t>>3];i=Mg(v)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(i>>>0)+4294967296.0*+(l|0)))break;na=t;c[na>>2]=i;c[na+4>>2]=l;b[r>>1]=o&15904|4;break}if(i&2|0?(Ld=a[t+10>>0]|0,Md=t+16|0,Od=t+12|0,Lg(c[Md>>2]|0,rf,c[Od>>2]|0,Ld)|0):0){if(Og(c[Md>>2]|0,Hd,c[Od>>2]|0,Ld)|0){v=+g[rf>>3];g[t>>3]=v;l=b[r>>1]|0;i=l|8;b[r>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)){i=t;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=613}}else{na=Hd;oa=c[na+4>>2]|0;i=t;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[r>>1]|0;oa=613}if((oa|0)==613){oa=0;i=i|4;b[r>>1]=i}b[r>>1]=i&-3}}}else if(i<<24>>24==66){l=t+8|0;i=b[l>>1]|0;na=i&65535;if(!((na&2|0)!=0|(na&12|0)==0)){Hg(t,sd,1)|0;i=b[l>>1]|0}b[l>>1]=i&-13}while(0);i=a[s>>0]|0;if(!(i<<24>>24)){l=m;q=pa;o=qa;i=K;break}else t=t+40|0}break}case 92:{i=c[p+16>>2]|0;E=pa+((c[p+4>>2]|0)*40|0)|0;F=E+(((c[p+8>>2]|0)+-1|0)*40|0)|0;x=a[pc>>0]|0;H=c[p+12>>2]|0;I=pa+(H*40|0)|0;if(i|0){t=E;w=i;i=a[i>>0]|0;do{s=t;t=t+40|0;w=w+1|0;do if(i<<24>>24>66){r=s+8|0;o=b[r>>1]|0;i=o&65535;if(!(i&4)){if(i&8|0){v=+g[s>>3];i=Mg(v)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(i>>>0)+4294967296.0*+(l|0)))break;na=s;c[na>>2]=i;c[na+4>>2]=l;b[r>>1]=o&15904|4;break}if(i&2|0?(Pd=a[s+10>>0]|0,Qd=s+16|0,Rd=s+12|0,Lg(c[Qd>>2]|0,rf,c[Rd>>2]|0,Pd)|0):0){do if(!(Og(c[Qd>>2]|0,Hd,c[Rd>>2]|0,Pd)|0)){na=Hd;oa=c[na+4>>2]|0;i=s;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[r>>1]|0;oa=634}else{v=+g[rf>>3];g[s>>3]=v;l=b[r>>1]|0;i=l|8;b[r>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)))break;i=s;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=634}while(0);if((oa|0)==634){oa=0;i=i|4;b[r>>1]=i}b[r>>1]=i&-3}}}else if(i<<24>>24==66){l=s+8|0;i=b[l>>1]|0;na=i&65535;if(!((na&2|0)!=0|(na&12|0)==0)){Hg(s,sd,1)|0;i=b[l>>1]|0}b[l>>1]=i&-13}while(0);i=a[w>>0]|0}while(i<<24>>24!=0)}B=(x&255)>3;C=0;A=F;z=0;y=0;s=0;t=0;while(1){w=A+8|0;r=b[w>>1]|0;l=r&65535;do if(!(l&1)){if(!(l&4)){if(l&8|0){o=8;x=7;break}i=c[A+12>>2]|0;if(l&16384)i=(c[A>>2]|0)+i|0;o=i;x=(i<<1)+12|l>>>1&1;break}l=A;i=c[l>>2]|0;l=c[l+4>>2]|0;q=aw(i|0,l|0,63)|0;q=q^i;o=(L()|0)^l;if(o>>>0<0|(o|0)==0&q>>>0<128){if(!(B&((i&1|0)==(i|0)&0==(l|0)))){o=1;x=1;break}o=0;x=q+8|0;break}if(!(o>>>0<0|(o|0)==0&q>>>0<32768))if(o>>>0<0|(o|0)==0&q>>>0<8388608){o=3;x=3}else{na=o>>>0<0|(o|0)==0&q>>>0<2147483648;x=o>>>0<32768|(o|0)==32768&q>>>0<0;o=na?4:x?6:8;x=na?4:x?5:6}else{o=2;x=2}}else{o=0;x=0}while(0);do if(!(r&16384)){i=o;oa=666}else{if(!x){w=Sv(z|0,y|0,o|0,0)|0;i=10;o=1;x=L()|0;D=s;break}if((z|0)==0&(y|0)==0){i=c[A>>2]|0;s=Sv(s|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;i=o-i|0;t=L()|0;oa=666;break}l=A+12|0;i=(c[A>>2]|0)+(c[l>>2]|0)|0;if((i|0)<1)if(!(r&16)){i=o;oa=666;break}else i=1;if(Eg(A,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[A+16>>2]|0)+(c[l>>2]|0)|0,0,c[A>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[A>>2]|0);b[w>>1]=b[w>>1]&-16897;i=o;oa=666}while(0);if((oa|0)==666){oa=0;q=Sv(z|0,y|0,i|0,0)|0;r=L()|0;if(x>>>0<128){i=x;o=1;w=q;x=r;D=s}else{o=1;i=x;l=0;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0){i=x;w=q;x=r;D=s;break}else o=o+1|0}}}C=o+C|0;c[A+28>>2]=i;if((A|0)==(E|0))break;else{A=A+-40|0;z=w;y=x;s=D}}if(C>>>0<127)r=C+1|0;else{r=1;i=C;l=0;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0)break;else r=r+1|0}l=r+C|0;i=1;o=l;q=0;while(1){o=bw(o|0,q|0,7)|0;q=L()|0;if((o|0)==0&(q|0)==0)break;else i=i+1|0}r=l+(r>>>0<i>>>0&1)|0}q=((r|0)<0)<<31>>31;z=Sv(w|0,x|0,r|0,q|0)|0;i=Sv(z|0,L()|0,D|0,t|0)|0;l=L()|0;o=c[pa+(H*40|0)+24>>2]|0;na=((o|0)<0)<<31>>31;do if((l|0)>(na|0)|(l|0)==(na|0)&i>>>0>o>>>0){na=c[Da>>2]|0;ma=((na|0)<0)<<31>>31;if((l|0)>(ma|0)|(l|0)==(ma|0)&i>>>0>na>>>0){oa=3891;break c}if((o|0)>=(z|0)){y=c[pa+(H*40|0)+20>>2]|0;c[pa+(H*40|0)+16>>2]=y;na=pa+(H*40|0)+8|0;b[na>>1]=b[na>>1]&13;break}if(Eg(I,z,0)|0){l=p;j=h;i=zf;oa=3892;break a}y=c[pa+(H*40|0)+16>>2]|0}else{y=c[pa+(H*40|0)+20>>2]|0;c[pa+(H*40|0)+16>>2]=y}while(0);do if(r>>>0>=128)if(r>>>0<16384){i=bw(r|0,q|0,7)|0;L()|0;a[y>>0]=i&255|-128;a[y+1>>0]=r&127;i=2;break}else{i=wh(y,r,q)|0;break}else{a[y>>0]=r;i=1}while(0);o=i&255;x=r;w=E;while(1){l=c[w+28>>2]|0;do if(l>>>0<128){a[y+o>>0]=l;i=o+1|0;o=y+x|0;if((l+-1|0)>>>0>=7)if(l>>>0>11){oa=699;break}else{l=0;break}s=w;l=d[3520+l>>0]|0;q=l;r=c[s>>2]|0;s=c[s+4>>2]|0;do{q=q+-1|0;a[o+q>>0]=r;r=bw(r|0,s|0,8)|0;s=L()|0}while((q|0)!=0)}else{i=y+o|0;if(l>>>0<16384){a[i>>0]=l>>>7&255|-128;a[i+1>>0]=l&127;i=2}else i=wh(i,l,0)|0;i=(i&255)+o|0;o=y+x|0;oa=699}while(0);if((oa|0)==699){oa=0;l=c[w+12>>2]|0;if(!l)l=0;else ew(o|0,c[w+16>>2]|0,l|0)|0}w=w+40|0;if(w>>>0>F>>>0)break;else{o=i;x=l+x|0}}c[pa+(H*40|0)+12>>2]=z;i=pa+(H*40|0)+8|0;b[i>>1]=16;if((D|0)==0&(t|0)==0){l=m;q=pa;o=qa;i=K}else{c[I>>2]=D;b[i>>1]=16400;l=m;q=pa;o=qa;i=K}break}case 93:{F=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;i=xh(F)|0;switch(i|0){case 16:{q=0;o=0;break}case 0:{y=F+116|0;z=F+70|0;A=F+68|0;B=F+50|0;C=F+1|0;D=F+20|0;E=F+2|0;q=0;o=0;m:while(1){l=c[y>>2]|0;if(!(a[l+8>>0]|0)){t=(a[l+2>>0]|0)==0;r=b[l+24>>1]|0;q=Sv((t?r&65535:0)|0,(t?0:0)|0,q|0,o|0)|0;o=L()|0;t=l;x=b[z>>1]|0;s=l}else{q=Sv(q|0,o|0,e[l+24>>1]|0,0)|0;o=L()|0;do{i=a[A>>0]|0;if(!(i<<24>>24))break m;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;s=b[F+72+((i<<24>>24)+-1<<1)>>1]|0;b[z>>1]=s;r=i+-1<<24>>24;a[A>>0]=r;r=c[F+120+(r<<24>>24<<2)>>2]|0;c[y>>2]=r;i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);l=c[y>>2]|0;w=l;i=b[z>>1]|0}else{w=c[i+20>>2]|0;l=w+120|0;c[l>>2]=(c[l>>2]|0)+-1;w=w+136|0;c[i+16>>2]=c[w>>2];c[w>>2]=i;w=r;l=r;i=s}r=b[l+24>>1]|0}while((i&65535)>=(r&65535));x=i+1<<16>>16;b[z>>1]=x;t=l;s=w}i=c[t+56>>2]|0;if(x<<16>>16==r<<16>>16){i=i+((d[t+9>>0]|0)+8)|0;l=a[A>>0]|0;if(l<<24>>24>18){oa=717;break c}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];na=c[D>>2]|0;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;ma=l<<24>>24;b[F+72+(ma<<1)>>1]=x;c[F+120+(ma<<2)>>2]=s;b[z>>1]=0;a[A>>0]=l+1<<24>>24;i=yh(na,i,y,F,d[E>>0]|0)|0}else{l=(c[t+64>>2]|0)+((x&65535)<<1)|0;i=i+((d[l>>0]<<8|d[l+1>>0])&e[t+26>>1])|0;l=a[A>>0]|0;if(l<<24>>24>18){oa=720;break c}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];na=c[D>>2]|0;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;ma=l<<24>>24;b[F+72+(ma<<1)>>1]=x;c[F+120+(ma<<2)>>2]=s;b[z>>1]=0;a[A>>0]=l+1<<24>>24;i=yh(na,i,y,F,d[E>>0]|0)|0}if(i){oa=3845;break c}}i=xh(F)|0;if(i){oa=3855;break c}break}default:{oa=3855;break c}}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=q;c[l+4>>2]=o;l=m;q=pa;o=qa;i=0;break}case 0:{w=c[p+4>>2]|0;A=c[p+16>>2]|0;if(!w){if((c[bd>>2]|0)>0){oa=730;break c}if(!A)z=0;else z=(Eu(A)|0)&1073741823;x=(c[Gd>>2]|0)+(c[Fd>>2]|0)|0;n:do if(c[db>>2]|0){y=x+1|0;w=0;while(1){if((w|0)>=(c[Vc>>2]|0))break n;t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;o:do if((l|0)!=0?(c[i>>2]|0)>1:0){s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=y;if(!i){q=0;i=o}else{q=Xa[i&255](l,x)|0;i=c[s>>2]|0}l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break o}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3846;break c}}}while(0);l=z+33|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=761;else{l=m;q=pa;o=qa;i=0;break d}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<l>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=761}while(0);if((oa|0)==761){oa=0;i=_d(Cf,l,0)|0}if(!i){l=m;q=pa;o=qa;i=0;break d}na=i+32|0;c[i>>2]=na;ew(na|0,A|0,z+1|0)|0;if(!(a[gd>>0]|0))c[Gd>>2]=(c[Gd>>2]|0)+1;else{a[gd>>0]=0;a[Id>>0]=1}c[i+24>>2]=c[qd>>2];c[qd>>2]=i;l=Pa;q=c[l+4>>2]|0;o=i+8|0;c[o>>2]=c[l>>2];c[o+4>>2]=q;o=Na;q=c[o+4>>2]|0;l=i+16|0;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;i=0;break d}i=c[qd>>2]|0;if(!i){oa=774;break c}q=d[208+(d[A>>0]|0)>>0]|0;B=i;r=0;while(1){l=c[B>>2]|0;na=a[l>>0]|0;i=(d[208+(na&255)>>0]|0)-q|0;if(!(na<<24>>24==0|(i|0)!=0)){o=A;do{l=l+1|0;o=o+1|0;na=a[l>>0]|0;i=(d[208+(na&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(i|0)!=0))}if(!i)break;i=c[B+24>>2]|0;if(!i){oa=774;break c}else{B=i;r=r+1|0}}z=(w|0)==1;if(z&(c[bd>>2]|0)>0){oa=776;break c}A=B+24|0;if(!(c[A>>2]|0)){i=(a[Id>>0]|0)!=0;if(z&i){ma=c[f>>2]|0;na=ma+464|0;ma=ma+472|0;na=Sv(c[ma>>2]|0,c[ma+4>>2]|0,c[na>>2]|0,c[na+4>>2]|0)|0;ma=L()|0;if((ma|0)>0|(ma|0)==0&na>>>0>0){oa=780;break c}a[gd>>0]=1;if((pg(f)|0)==5){oa=782;break c}a[Id>>0]=0;y=r;i=c[Bf>>2]|0;q=1}else{q=i;oa=784}}else{q=0;oa=784}if((oa|0)==784){oa=0;s=(c[Gd>>2]|0)-r|0;x=s+-1|0;t=(w|0)==2;if(t){l=c[hf>>2]&1;if((c[sf>>2]|0)>0){o=l^1;i=0;while(1){r=jg(c[(c[uf>>2]|0)+(i<<4)+4>>2]|0,516,o)|0;i=i+1|0;if(r|0){oa=3854;break c}r=c[sf>>2]|0;if((i|0)>=(r|0)){i=0;oa=790;break}}}else i=K}else{l=0;i=K;r=c[sf>>2]|0;oa=790}p:do if((oa|0)==790){oa=0;if((r|0)>0){i=(s|0)<1;if(!t){if(!i){s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=wf(c[r>>2]|0,w,x)|0;if(i|0){oa=3853;break c}i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[r+44>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3853;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=wf(c[r>>2]|0,w,x)|0;if(i|0){oa=3852;break c}o=r+44|0;if(b[r+22>>1]&16)c[o>>2]=0;i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[o>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3852;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}if(!i){s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=c[r+8>>2]|0;if(i|0?(Vd=$f(i,0,0)|0,Vd|0):0){i=Vd;oa=3851;break c}i=wf(c[r>>2]|0,2,x)|0;if(i|0){oa=3851;break c}i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[r+44>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3851;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=c[r+8>>2]|0;if(i|0?(Ud=$f(i,0,0)|0,Ud|0):0){i=Ud;oa=3850;break c}i=wf(c[r>>2]|0,2,x)|0;if(i|0){oa=3850;break c}o=r+44|0;if(b[r+22>>1]&16)c[o>>2]=0;i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[o>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3850;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break}}}}while(0);if(!l)y=x;else{l=c[$a>>2]|0;if(l|0)do{na=l+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|1;a[na>>0]=ma;a[na+1>>0]=ma>>8;l=c[l+8>>2]|0}while((l|0)!=0);$b(Cf);c[hf>>2]=c[hf>>2]|1;y=x}}l=c[qd>>2]|0;if((l|0)!=(B|0))do{c[qd>>2]=c[l+24>>2];q:do if(l|0){if(c[Ze>>2]|0){Xd(Cf,l);break}o=l;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;c[l>>2]=c[af>>2];c[af>>2]=l;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[Gd>>2]=(c[Gd>>2]|0)+-1;l=c[qd>>2]|0}while((l|0)!=(B|0));if(z){c[qd>>2]=c[A>>2];do if(!(c[Ze>>2]|0)){na=B;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[B>>2]=c[af>>2];c[af>>2]=B;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{na=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}else Xd(Cf,B);while(0);if(q){Wd=1;oa=859}else c[Gd>>2]=(c[Gd>>2]|0)+-1}else{Wd=B+8|0;oa=c[Wd+4>>2]|0;na=Pa;c[na>>2]=c[Wd>>2];c[na+4>>2]=oa;na=B+16|0;oa=c[na+4>>2]|0;Wd=Na;c[Wd>>2]=c[na>>2];c[Wd+4>>2]=oa;Wd=q;oa=859}if((oa|0)==859?(oa=0,!((w|0)==2|Wd^1)):0)if(!i){l=m;q=pa;o=qa;i=0;break d}else{oa=3855;break c}if(!(c[db>>2]|0)){l=m;q=pa;o=qa;i=0}else{x=y+1|0;switch(w|0){case 0:while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;r:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=x;if(!i){q=0;i=o}else{q=Xa[i&255](l,y)|0;i=c[s>>2]|0}l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break r}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3848;break c}}case 2:{w=0;while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;s:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+88>>2]|0;do if(!i){q=0;i=o}else{if((c[t+20>>2]|0)<=(y|0)){q=0;i=o;break}q=Xa[i&255](l,y)|0;i=c[s>>2]|0}while(0);l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break s}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3849;break c}}}default:{w=0;while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;t:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+84>>2]|0;do if(!i){q=0;i=o}else{if((c[t+20>>2]|0)<=(y|0)){q=0;i=o;break}q=Xa[i&255](l,y)|0;i=c[s>>2]|0}while(0);l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break t}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3847;break c}}}}}break}case 2:{c[rf>>2]=0;o=p+8|0;i=c[o>>2]|0;if(i|0?!((c[Sc>>2]&1048576|0)==0&0==0):0){l=8;oa=1017;break c}z=p+4|0;y=c[(c[uf>>2]|0)+(c[z>>2]<<4)+4>>2]|0;do if(y){l=Zb(y,i,rf)|0;if(l|0){oa=950;break c}if((c[o>>2]|0)!=0?((d[vf>>0]|d[vf+1>>0]<<8)&128)!=0:0){if(a[gd>>0]|0?(c[Ha>>2]|0)<=1:0){i=0;break}i=c[bc>>2]|0;if(!i){l=(c[Fd>>2]|0)+1|0;c[Fd>>2]=l;l=(c[Gd>>2]|0)+l|0;c[bc>>2]=l}else l=i;x=l+-1|0;u:do if(!(c[db>>2]|0))oa=979;else{w=0;while(1){if((w|0)>=(c[Vc>>2]|0))break;t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;q=c[r>>2]|0;v:do if(q){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=l;if(!i)i=0;else{i=Xa[i&255](q,x)|0;o=c[s>>2]|0}q=c[t>>2]|0;na=o+-1|0;c[s>>2]=na;if(na|0)break;o=c[r>>2]|0;if(o|0)Wa[c[(c[o>>2]|0)+16>>2]&127](o)|0;do if(q|0){if(c[q+480>>2]|0){Xd(q,t);break v}o=t;if((c[q+304>>2]|0)>>>0>o>>>0)break;if((c[q+308>>2]|0)>>>0<=o>>>0)break;na=q+300|0;c[t>>2]=c[na>>2];c[na>>2]=t;break v}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{na=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else i=0;while(0);if(!i)w=w+1|0;else break u}l=c[bc>>2]|0;oa=979}while(0);if((oa|0)==979){oa=0;i=c[y+4>>2]|0;c[i+4>>2]=c[y>>2];i=c[i>>2]|0;if((c[i+96>>2]|0)<(l|0)?(a[i+6>>0]|0)!=0:0)i=Vf(i,l)|0;else i=0}na=Pa;ma=c[na+4>>2]|0;la=gc;c[la>>2]=c[na>>2];c[la+4>>2]=ma;la=Na;ma=c[la+4>>2]|0;na=hc;c[na>>2]=c[la>>2];c[na+4>>2]=ma}else i=0}else i=K;while(0);if(b[p+2>>1]|0){if((c[rf>>2]|0)!=(c[p+12>>2]|0)){oa=986;break c}if((c[(c[(c[uf>>2]|0)+(c[z>>2]<<4)+12>>2]|0)+4>>2]|0)!=(c[p+16>>2]|0)){oa=986;break c}}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 94:{i=c[p+12>>2]|0;l=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;o=c[l+4>>2]|0;c[o+4>>2]=c[l>>2];if((i|0)==15)o=(c[l+20>>2]|0)+(c[(c[o>>2]|0)+100>>2]|0)|0;else{o=(c[(c[o+12>>2]|0)+56>>2]|0)+((i<<2)+36)|0;o=d[o+1>>0]<<16|d[o>>0]<<24|d[o+2>>0]<<8|d[o+3>>0]}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=o;c[l+4>>2]=((o|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 95:{w=c[uf>>2]|0;x=p+4|0;y=c[x>>2]|0;l=c[w+(y<<4)+4>>2]|0;z=p+8|0;s=c[z>>2]|0;A=p+12|0;q=c[A>>2]|0;t=c[l+4>>2]|0;c[t+4>>2]=c[l>>2];l=c[t+12>>2]|0;r=c[l+56>>2]|0;l=c[l+72>>2]|0;o=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[o+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[o+96>>2]|0))oa=1035;else{i=Ve(l)|0;oa=1034}else oa=1030;do if((oa|0)==1030){oa=0;i=c[o+40>>2]|0;if(!i)if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){i=Wf(l)|0;oa=1034;break}else{i=Xf(l)|0;oa=1034;break}else o=0}while(0);if((oa|0)==1034){oa=0;if(!i)oa=1035;else o=0}if((oa|0)==1035){oa=0;na=r+((s<<2)+36)|0;a[na>>0]=q>>>24;a[na+1>>0]=q>>>16;a[na+2>>0]=q>>>8;i=q&255;a[na+3>>0]=i;if((s|0)==7){a[t+18>>0]=i;i=0;o=1}else{i=0;o=1}}switch(c[z>>2]|0){case 1:{c[c[w+(y<<4)+12>>2]>>2]=c[A>>2];c[hf>>2]=c[hf>>2]|1;break}case 2:{a[(c[w+(y<<4)+12>>2]|0)+76>>0]=c[A>>2];break}default:{}}if((c[x>>2]|0)==1){l=c[$a>>2]|0;if(l|0)do{na=l+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|1;a[na>>0]=ma;a[na+1>>0]=ma>>8;l=c[l+8>>2]|0}while((l|0)!=0);na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8}if(o){l=m;q=pa;o=qa}else{oa=3855;break c}break}case 106:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((i|0)!=0?(c[i+52>>2]|0)==(c[p+8>>2]|0):0){o=i;i=K;l=p+2|0;oa=1074}else oa=1049;break}case 109:case 108:{oa=1049;break}case 111:{l=c[oc>>2]|0;w=c[l+(c[p+8>>2]<<2)>>2]|0;q=c[p+4>>2]|0;s=b[w+56>>1]|0;t=s<<16>>16;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;o=t<<3;r=o+96|0;o=o+296|0;l=c[l+(q<<2)>>2]|0;if(l|0){na=l+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(o|0)){if(Eg(i,o,0)|0){l=p;j=h;i=zf;oa=3892;break a}o=i+16|0;l=o;o=c[o>>2]|0}else{o=c[i+20>>2]|0;l=i+16|0;c[l>>2]=o;na=i+8|0;b[na>>1]=b[na>>1]&13}c[(c[oc>>2]|0)+(q<<2)>>2]=o;i=o+1|0;ea=o;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=-1;b[o+56>>1]=s;c[o+72>>2]=o+88+(t<<2);na=(c[l>>2]|0)+r|0;i=o+40|0;c[i>>2]=na;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;if(!o){l=p;j=h;i=zf;oa=3892;break a}a[o+2>>0]=1;l=o+5|0;q=a[l>>0]|1;a[l>>0]=q;na=c[w+44>>2]|0;c[o+44>>2]=na;a[o+4>>0]=a[w+4>>0]|0;ma=c[w+52>>2]|0;c[o+52>>2]=ma;a[l>>0]=a[w+5>>0]&4|q&-5;l=m;q=pa;o=qa;i=Vg(c[w+8>>2]|0,ma,4,na,c[i>>2]|0)|0;break}case 113:case 112:{o=c[p+4>>2]|0;q=(c[oc>>2]|0)+(o<<2)|0;i=c[q>>2]|0;if(!i){s=c[p+8>>2]|0;i=c[xd>>2]|0;if((o|0)>0)i=i+(((c[va>>2]|0)-o|0)*40|0)|0;l=s<<3;r=l+96|0;l=l+296|0;if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}w=i+16|0;l=w;i=(c[oc>>2]|0)+(o<<2)|0;w=c[w>>2]|0}else{w=c[i+20>>2]|0;l=i+16|0;c[l>>2]=w;i=i+8|0;b[i>>1]=b[i>>1]&13;i=q}c[i>>2]=w;i=w+1|0;ea=w;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=-1;b[w+56>>1]=s;c[w+72>>2]=w+88+(s<<2);na=(c[l>>2]|0)+r|0;q=w+40|0;c[q>>2]=na;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;if(!w){l=p;j=h;i=zf;oa=3892;break a}a[w+2>>0]=1;s=w+5|0;a[s>>0]=a[s>>0]|1;r=w+8|0;t=p+2|0;i=Pe(c[Cf>>2]|0,0,Cf,r,(b[t>>1]|5)&65535,1054)|0;do if(!i){i=Zb(c[r>>2]|0,1,0)|0;if(!i){l=c[p+16>>2]|0;c[w+44>>2]=l;if(!l){c[w+52>>2]=1;i=Vg(c[r>>2]|0,1,4,0,c[q>>2]|0)|0;a[w+4>>0]=1;break}o=w+52|0;i=Wg(c[r>>2]|0,o,(b[t>>1]|2)&65535)|0;if(!i)i=Vg(c[r>>2]|0,c[o>>2]|0,4,l,c[q>>2]|0)|0;a[w+4>>0]=0}}while(0);a[s>>0]=((b[t>>1]|0)!=8&1)<<2&255|a[s>>0]&-5}else{l=c[i+8>>2]|0;q=c[i+52>>2]|0;o=l+4|0;r=c[o>>2]|0;c[r+4>>2]=c[l>>2];i=c[r+8>>2]|0;w:do if(i|0){x:do if(q)while(1){if((c[i+64>>2]|0)==(q|0))break x;i=c[i+24>>2]|0;if(!i)break w}while(0);i=$f(i,q,0)|0;if(i|0){oa=3855;break c}}while(0);l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,md=c[(c[o>>2]|0)+8>>2]|0,md|0):0){i=md;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(q|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(r,q,0,0)|0}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 114:{q=c[p+4>>2]|0;r=c[p+8>>2]|0;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;l=(r<<3)+96|0;o=c[(c[oc>>2]|0)+(q<<2)>>2]|0;if(o|0){na=o+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}s=c[i+16>>2]|0}else{s=c[i+20>>2]|0;c[i+16>>2]=s;na=i+8|0;b[na>>1]=b[na>>1]&13}c[(c[oc>>2]|0)+(q<<2)>>2]=s;ea=s;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[s>>0]=1;a[s+1>>0]=-1;b[s+56>>1]=r;c[s+72>>2]=s+88+(r<<2);if(!s){l=p;j=h;i=zf;oa=3892;break a}q=c[p+16>>2]|0;l=s+44|0;c[l>>2]=q;o=c[p+12>>2]|0;q=e[q+6>>1]<<2;r=q+156|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=1133;else{oa=1135;break c}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<r>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;t=i;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;t=i;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=1133}while(0);if((oa|0)==1133){oa=0;t=_d(Cf,r,0)|0}if(!t){oa=1135;break c}gw(t|0,0,r|0)|0;c[s+40>>2]=t;na=t+136|0;c[t+28>>2]=na;ew(na|0,c[l>>2]|0,q+20|0)|0;c[t+148>>2]=0;if(o|0)b[t+142>>1]=o;i=c[uf>>2]|0;l=c[(c[(c[i+4>>2]|0)+4>>2]|0)+32>>2]|0;c[t+12>>2]=l;a[t+59>>0]=1;a[t+58>>0]=-1;a[t+57>>0]=0;c[t+24>>2]=Cf;c[t+72>>2]=t;if((a[ra>>0]|0)!=2?(ma=G(c[7379]|0,l)|0,c[t>>2]=ma,na=c[(c[i+12>>2]|0)+80>>2]|0,la=(na|0)<0,be=((l|0)<0)<<31>>31,na=Yv((la?-1024:l)|0,(la?-1:be)|0,na|0,((na|0)<0)<<31>>31|0)|0,la=L()|0,ka=(la|0)<0|(la|0)==0&na>>>0<536870912,na=ka?na:536870912,ka?la:0,c[t+4>>2]=(ma|0)>(na|0)?ma:na,(c[7329]|0)==0):0){c[t+52>>2]=l;na=Sv(l|0,be|0,-1,-1)|0;ma=L()|0;do if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390)i=0;else{if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;break}o=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(!i){i=0;break}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);c[t+40>>2]=i;i=(i|0)==0?7:0}else i=0;do if((e[t+144>>1]|0)<13){na=c[t+156>>2]|0;if(na|0?(na|0)!=(c[jc>>2]|0):0)break;a[t+60>>0]=3}while(0);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 115:{la=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+16|0;na=la;ma=c[na>>2]|0;na=c[na+4>>2]|0;ja=Sv(ma|0,na|0,1,0)|0;ka=L()|0;c[la>>2]=ja;c[la+4>>2]=ka;if((ma|0)==0&(na|0)==0){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 116:{q=c[p+4>>2]|0;r=c[p+12>>2]|0;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;l=(r<<3)+96|0;o=c[(c[oc>>2]|0)+(q<<2)>>2]|0;if(o|0){na=o+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}i=c[i+16>>2]|0}else{na=c[i+20>>2]|0;c[i+16>>2]=na;i=i+8|0;b[i>>1]=b[i>>1]&13;i=na}c[(c[oc>>2]|0)+(q<<2)>>2]=i;ea=i;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=3;a[i+1>>0]=-1;b[i+56>>1]=r;c[i+72>>2]=i+88+(r<<2);if(!i){l=p;j=h;i=zf;oa=3892;break a}a[i+2>>0]=1;c[i+32>>2]=c[p+8>>2];a[i+4>>0]=1;c[i+40>>2]=59954;l=m;q=pa;o=qa;i=K;break}case 117:{l=p+4|0;tg(f,c[(c[oc>>2]|0)+(c[l>>2]<<2)>>2]|0);c[(c[oc>>2]|0)+(c[l>>2]<<2)>>2]=0;l=m;q=pa;o=qa;i=K;break}case 25:case 24:case 23:case 22:{w=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=z&255;a[w+2>>0]=0;y:do if(!(a[w+4>>0]|0)){i=c[w+40>>2]|0;o=(d[i+3>>0]|0)>>>1&1;oa=c[p+16>>2]|0;c[Yd>>2]=c[w+44>>2];b[wa>>1]=oa;a[xa>>0]=(l<<1&2^2)+255;c[ya>>2]=pa+((c[p+12>>2]|0)*40|0);a[za>>0]=0;i=Xg(i,Yd,0,0,0,Td)|0;if(i|0){oa=1213;break c}i=o&255;if(o<<24>>24!=0&(a[za>>0]|0)==0)if(!(c[Td>>2]|0)){p=p+20|0;oa=1212}else{i=0;oa=1211}else{o=i;oa=1194}}else{r=c[p+12>>2]|0;t=pa+(r*40|0)|0;s=pa+(r*40|0)+8|0;i=b[s>>1]|0;if((i&14)==2){i=a[pa+(r*40|0)+10>>0]|0;o=pa+(r*40|0)+16|0;q=pa+(r*40|0)+12|0;if(!(Lg(c[o>>2]|0,rf,c[q>>2]|0,i)|0))i=b[s>>1]|0;else{if(!(Og(c[o>>2]|0,Hd,c[q>>2]|0,i)|0)){na=Hd;oa=c[na+4>>2]|0;i=t;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=4}else{g[t>>3]=+g[rf>>3];i=8}i=b[s>>1]&-3|i;b[s>>1]=i}}i=i&65535;do if(!(i&4)){if(i&8|0){o=Mg(+g[t>>3])|0;q=L()|0;break}if(!(i&18)){o=0;q=0}else{o=Ng(a[pa+(r*40|0)+10>>0]|0,c[pa+(r*40|0)+12>>2]|0,c[pa+(r*40|0)+16>>2]|0)|0;q=L()|0;i=e[s>>1]|0}}else{q=t;o=c[q>>2]|0;q=c[q+4>>2]|0}while(0);do if(!(i&4)){if(!(i&8)){i=K;oa=1211;break y}u=+g[t>>3];v=+(o>>>0)+4294967296.0*+(q|0);if(u<v){l=(l<<31>>31)+l|0;break}else{l=((l&1|0)==0&u>v&1)+l|0;break}}while(0);i=Xg(c[w+40>>2]|0,0,o,q,0,Td)|0;oa=w+64|0;c[oa>>2]=o;c[oa+4>>2]=q;if(!i){o=0;oa=1194}else{oa=1213;break c}}while(0);z:do if((oa|0)==1194){oa=0;a[w+3>>0]=0;c[w+28>>2]=0;i=c[Td>>2]|0;if((l|0)>23){if((i|0)>=0?!((l|0)==25&(i|0)==0):0)c[Td>>2]=0;else oa=1197;A:do if((oa|0)==1197){c[Td>>2]=0;i=Yg(c[w+40>>2]|0,0)|0;switch(i|0){case 0:break A;case 101:break;default:{oa=1213;break c}}c[Td>>2]=1;i=0;oa=1211;break z}while(0);p=(o|0)==0?p:p+20|0;oa=1212;break}if((i|0)<=0?!((l|0)==22&(i|0)==0):0){oa=(a[c[w+40>>2]>>0]|0)!=0;c[Td>>2]=oa&1;if(oa){i=0;oa=1211;break}else{p=(o|0)==0?p:p+20|0;oa=1212;break}}c[Td>>2]=0;i=c[w+40>>2]|0;na=i+1|0;a[na>>0]=a[na>>0]&-15;b[i+50>>1]=0;if(((a[i>>0]|0)==0?(ce=i+70|0,de=b[ce>>1]|0,de<<16>>16!=0):0)?(a[(c[i+116>>2]|0)+8>>0]|0)!=0:0)b[ce>>1]=de+-1<<16>>16;else oa=1206;B:do if((oa|0)==1206){i=Hh(i)|0;switch(i|0){case 0:break B;case 101:break;default:{oa=1213;break c}}c[Td>>2]=1;i=0;oa=1211;break z}while(0);p=(o|0)==0?p:p+20|0;oa=1212}while(0);if((oa|0)==1211){oa=28;break d}else if((oa|0)==1212){oa=0;l=m;q=pa;o=qa;i=0;break d}break}case 119:{l=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+5|0;a[l>>0]=(c[p+8>>2]&255)<<3&8|a[l>>0]&-9;l=m;q=pa;o=qa;i=K;break}case 26:{if(!(a[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+5>>0]&8))oa=1216;else{l=m;q=pa;o=qa;i=K}break}case 29:case 28:case 27:{oa=1216;break}case 30:{i=p+12|0;o=c[i>>2]|0;t=pa+(o*40|0)+8|0;w=b[t>>1]|0;if(!(w&4)){s=pa+(o*40|0)|0;l=w&65535;do if(!(l&4)){if(l&8|0){v=+g[s>>3];o=Mg(v)|0;q=L()|0;oa=Sv(o|0,q|0,1,-2147483648)|0;na=L()|0;l=w&15904|4;if(!((na>>>0>0|(na|0)==0&oa>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0))){l=w;break}oa=s;c[oa>>2]=o;c[oa+4>>2]=q;b[t>>1]=l;break}if(l&2){q=a[pa+(o*40|0)+10>>0]|0;r=pa+(o*40|0)+16|0;l=pa+(o*40|0)+12|0;if(!(Lg(c[r>>2]|0,rf,c[l>>2]|0,q)|0))l=b[t>>1]|0;else{if(Og(c[r>>2]|0,Hd,c[l>>2]|0,q)|0){v=+g[rf>>3];g[s>>3]=v;o=b[t>>1]|0;l=o|8;b[t>>1]=l;q=Mg(v)|0;r=L()|0;na=Sv(q|0,r|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(q>>>0)+4294967296.0*+(r|0)){l=s;c[l>>2]=q;c[l+4>>2]=r;l=o&15904;oa=1281}}else{na=Hd;oa=c[na+4>>2]|0;l=s;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=b[t>>1]|0;oa=1281}if((oa|0)==1281){l=l|4;b[t>>1]=l}l=l&-3;b[t>>1]=l}}else l=w}else l=w;while(0);b[t>>1]=w;if(!(l&4)){i=K;oa=28}else oa=1287}else oa=1287;break}case 31:{i=p+12|0;oa=1287;break}case 120:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+16|0;q=l;o=c[q>>2]|0;q=c[q+4>>2]|0;ma=Sv(o|0,q|0,1,0)|0;na=L()|0;c[l>>2]=ma;c[l+4>>2]=na;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case 121:{na=rf;c[na>>2]=0;c[na+4>>2]=0;c[Hd>>2]=0;na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;y=i}else{lh(i)|0;y=i}z=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=z+5|0;do if(!(a[x>>0]&2)){l=z+40|0;i=$g(c[l>>2]|0,Hd)|0;if(i|0){oa=1328;break c}if(c[Hd>>2]|0){i=rf;c[i>>2]=1;c[i+4>>2]=0;i=0;break}l=c[l>>2]|0;bg(l);l=l+32|0;i=c[l>>2]|0;l=c[l+4>>2]|0;na=rf;c[na>>2]=i;c[na+4>>2]=l;if((i|0)==-1&(l|0)==2147483647){a[x>>0]=a[x>>0]|2;i=0;break}else{ma=Sv(i|0,l|0,1,0)|0;na=L()|0;i=rf;c[i>>2]=ma;c[i+4>>2]=na;i=0;break}}else i=K;while(0);r=c[p+12>>2]|0;if(r|0){l=c[nc>>2]|0;if(!l)o=pa;else{while(1){o=c[l+4>>2]|0;if(!o)break;else l=o}o=c[l+16>>2]|0}w=o+(r*40|0)|0;s=o+(r*40|0)+8|0;l=b[s>>1]|0;q=l&65535;do if(!(q&4)){if(q&8|0){q=Mg(+g[w>>3])|0;o=L()|0;oa=1317;break}if(!(q&18)){t=w;c[t>>2]=0;c[t+4>>2]=0;b[s>>1]=l&15904|4;t=0;q=0;break}else{q=Ng(a[o+(r*40|0)+10>>0]|0,c[o+(r*40|0)+12>>2]|0,c[o+(r*40|0)+16>>2]|0)|0;o=L()|0;l=b[s>>1]|0;oa=1317;break}}else{o=w;q=c[o>>2]|0;o=c[o+4>>2]|0;oa=1317}while(0);if((oa|0)==1317){oa=0;na=w;c[na>>2]=q;c[na+4>>2]=o;b[s>>1]=l&15904|4;if((q|0)==-1&(o|0)==2147483647){i=13;oa=1328;break c}else t=o}if(a[x>>0]&2){i=13;oa=1328;break c}l=rf;o=c[l>>2]|0;l=c[l+4>>2]|0;r=Sv(q|0,t|0,1,0)|0;s=L()|0;if(!((l|0)>(t|0)|(l|0)==(t|0)&o>>>0>q>>>0)){o=rf;c[o>>2]=r;c[o+4>>2]=s;o=r;l=s}na=w;c[na>>2]=o;c[na+4>>2]=l}if(a[x>>0]&2){o=z+40|0;l=0;do{Fb(8,rf);q=rf;q=Sv(c[q>>2]|0,c[q+4>>2]&1073741823|0,1,0)|0;i=L()|0;na=rf;c[na>>2]=q;c[na+4>>2]=i;i=Xg(c[o>>2]|0,0,q,i,0,Hd)|0;q=c[Hd>>2]|0;if(q|i|0)break;l=l+1|0}while(l>>>0<100);if(i|0){oa=1328;break c}if(!q){i=13;oa=1328;break c}else i=0}a[z+3>>0]=0;c[z+28>>2]=0;o=rf;q=c[o+4>>2]|0;l=y;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;break}case 122:{i=c[p+8>>2]|0;s=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=pa+((c[p+12>>2]|0)*40|0)|0;t=c[w>>2]|0;w=c[w+4>>2]|0;na=qc;c[na>>2]=t;c[na+4>>2]=w;if((a[p+1>>0]|0)==-6?(c[Ca>>2]|0)!=0:0){q=c[(c[uf>>2]|0)+(a[s+1>>0]<<4)>>2]|0;r=c[p+16>>2]|0}else{q=0;r=0}x=p+2|0;l=b[x>>1]|0;if(l&1)c[rc>>2]=(c[rc>>2]|0)+1;if(l&32){na=zb;c[na>>2]=t;c[na+4>>2]=w}c[xb>>2]=c[pa+(i*40|0)+16>>2];c[yb>>2]=c[pa+(i*40|0)+12>>2];if(!(l&16))o=0;else o=c[s+32>>2]|0;if(!(b[pa+(i*40|0)+8>>1]&16384))i=0;else i=c[pa+(i*40|0)>>2]|0;c[Sb>>2]=i;c[rf>>2]=0;i=ah(c[s+40>>2]|0,rf,l&10,o)|0;a[s+3>>0]=0;c[s+28>>2]=0;if(i|0){oa=1345;break c}if(r|0)eb[c[Ca>>2]&127](c[Tb>>2]|0,(b[x>>1]&4)==0?18:23,q,c[r>>2]|0,t,w);l=m;q=pa;o=qa;i=0;break}case 123:{q=c[p+8>>2]|0;r=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((a[p+1>>0]|0)==-6?(c[Ca>>2]|0)!=0:0){i=c[(c[uf>>2]|0)+(a[r+1>>0]<<4)>>2]|0;l=c[p+16>>2]|0;if((b[p+2>>1]&2)!=0?(a[r+4>>0]|0)!=0:0){ma=c[r+40>>2]|0;bg(ma);ma=ma+32|0;na=c[ma+4>>2]|0;o=r+64|0;c[o>>2]=c[ma>>2];c[o+4>>2]=na;o=i}else o=i}else{o=0;l=0}i=bh(c[r+40>>2]|0,b[p+2>>1]&255)|0;c[r+28>>2]=0;c[r+32>>2]=0;if(i|0){oa=3855;break c}if(((q&1|0)!=0?(c[rc>>2]=(c[rc>>2]|0)+1,ge=c[Ca>>2]|0,(ge|0)!=0):0)?(c[l+36>>2]&32|0)==0:0){q=r+64|0;eb[ge&127](c[Tb>>2]|0,9,o,c[l>>2]|0,c[q>>2]|0,c[q+4>>2]|0);l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}break}case 124:{l=c[rc>>2]|0;c[sc>>2]=l;c[tc>>2]=(c[tc>>2]|0)+l;c[rc>>2]=0;l=m;q=pa;o=qa;i=K;break}case 125:{t=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+12>>2]|0;x=c[p+16>>2]|0;s=c[t+40>>2]|0;r=s+32|0;i=c[r>>2]|0;t=c[t+44>>2]|0;if(!i){q=((e[t+6>>1]|0)*40|0)+56|0;o=c[t+12>>2]|0;C:do if(!o){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;oa=1381;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(!i){oa=1382;break c}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){oa=1382;break c}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<q>>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1381;break C}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1381;break C}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,q,0)|0;oa=1381}while(0);if((oa|0)==1381){oa=0;if(!i){oa=1382;break c}}c[i+4>>2]=i+16;c[i>>2]=t;c[r>>2]=i;b[i+8>>1]=x;o=i}else o=i;if(!(a[s+56>>0]|0)){l=c[s+36>>2]|0;i=l+8|0}else{l=c[s+20>>2]|0;na=c[l+12>>2]|0;l=c[(c[l+8>>2]|0)+4>>2]|0;i=c[na+(l*56|0)+32>>2]|0;l=na+(l*56|0)+20|0}_g(t,c[l>>2]|0,i,o);if((x|0)>0){l=c[o+4>>2]|0;i=0;do{if(b[l+(i*40|0)+8>>1]&1){i=0;oa=28;break d}i=i+1|0}while((i|0)<(x|0))}if(!(Fh(c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0,o,0)|0)){l=m;q=pa;o=qa;i=0}else{i=0;oa=28}break}case 126:{s=c[p+8>>2]|0;i=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;if(!(a[i+56>>0]|0)){i=c[i+36>>2]|0;r=i+8|0}else{i=c[i+20>>2]|0;na=c[i+12>>2]|0;i=c[(c[i+8>>2]|0)+4>>2]|0;r=c[na+(i*56|0)+32>>2]|0;i=na+(i*56|0)+20|0}i=c[i>>2]|0;if((c[pa+(s*40|0)+24>>2]|0)<(i|0)){if(Eg(pa+(s*40|0)|0,i,0)|0){i=7;oa=3855;break c}o=pa+(s*40|0)+8|0;l=o;o=b[o>>1]|0;q=c[pa+(s*40|0)+16>>2]|0}else{q=c[pa+(s*40|0)+20>>2]|0;c[pa+(s*40|0)+16>>2]=q;l=pa+(s*40|0)+8|0;o=b[l>>1]&13;b[l>>1]=o}c[pa+(s*40|0)+12>>2]=i;b[l>>1]=o&15904|16;ew(q|0,r|0,i|0)|0;c[(c[(c[oc>>2]|0)+(c[p+12>>2]<<2)>>2]|0)+28>>2]=0;l=m;q=pa;o=qa;i=0;break}case 127:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;q=i}else{lh(i)|0;q=i}i=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;bg(i);l=c[i+44>>2]|0;if(l>>>0>(c[Da>>2]|0)>>>0){oa=3891;break c}na=e[i+48>>1]|0;o=c[i+40>>2]|0;ma=(c[(c[i+116>>2]|0)+60>>2]|0)-o|0;if(l>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(i,0,l,q)|0;if(i|0){oa=3855;break c}}else{c[q+16>>2]=o;b[q+8>>1]=4112;c[q+12>>2]=l}if((c[p+12>>2]|0)==0?(he=q+8|0,ie=b[he>>1]|0,(ie&4096)!=0):0){i=ie&65535;do if(!(i&18))i=ie;else{do if(!(i&16384))i=ie;else{l=q+12|0;i=(c[q>>2]|0)+(c[l>>2]|0)|0;if((i|0)<1)if(!(ie&16)){i=ie;break}else i=1;if(Eg(q,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[q+16>>2]|0)+(c[l>>2]|0)|0,0,c[q>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[q>>2]|0);i=b[he>>1]&-16897;b[he>>1]=i}while(0);if(c[q+24>>2]|0?(c[q+16>>2]|0)==(c[q+20>>2]|0):0)break;if(Jg(q)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[he>>1]|0}while(0);b[he>>1]=i&-4097;l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}break}case -128:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;w=i}else{lh(i)|0;w=i}l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;q=l+2|0;D:do if(!(a[q>>0]|0)){do if(!(a[l+3>>0]|0)){if((a[l>>0]|0)!=2){o=l+40|0;i=c[o>>2]|0;do if(a[i>>0]|0){i=sh(l)|0;if(i|0){oa=1481;break c}if(!(a[q>>0]|0)){i=c[o>>2]|0;break}else{b[w+8>>1]=1;i=0;break D}}while(0);bg(i);o=i+32|0;l=c[o>>2]|0;o=c[o+4>>2]|0;i=rf;c[i>>2]=l;c[i+4>>2]=o;i=0;break}i=c[l+40>>2]|0;t=c[i>>2]|0;i=Xa[c[(c[t>>2]|0)+48>>2]&255](i,rf)|0;t=t+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;E:do if(l|0){do if(q|0){if(c[q+480>>2]|0){Xd(q,l);break E}o=l;if((c[q+304>>2]|0)>>>0>o>>>0)break;if((c[q+308>>2]|0)>>>0<=o>>>0)break;na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break E}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;F:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;G:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break F}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=1464;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break F}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break F}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1464;break G}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1464;break G}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=1464}while(0);if((oa|0)==1464){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=1481;break c}o=rf;i=0;l=c[o>>2]|0;o=c[o+4>>2]|0}else{o=l+64|0;l=c[o>>2]|0;o=c[o+4>>2]|0;i=rf;c[i>>2]=l;c[i+4>>2]=o;i=K}while(0);na=w;c[na>>2]=l;c[na+4>>2]=o}else{b[w+8>>1]=1;i=K}while(0);l=m;q=pa;o=qa;break}case -127:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;a[i+2>>0]=1;c[i+28>>2]=0;if(!(a[i>>0]|0)){i=c[i+40>>2]|0;l=i+16|0;o=c[l>>2]|0;do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[l>>2]=0;a[i>>0]=1;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 32:case -126:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[l+40>>2]|0;c[rf>>2]=0;if(z<<24>>24==-126?(c[l+32>>2]=-1,(a[i>>0]|0)==0):0){l=m;q=pa;o=qa;i=K;break d}r=$g(i,rf)|0;i=c[rf>>2]|0;a[l+2>>0]=i;a[l+3>>0]=0;c[l+28>>2]=0;if(r|0){oa=1492;break c}if((i|0)!=0&(c[p+8>>2]|0)>0){i=0;oa=28}else{l=m;q=pa;o=qa;i=0}break}case 33:{s=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;i=ch(s,rf)|0;if(i|0){oa=1519;break c}do if(!(c[rf>>2]|0)){if((a[s>>0]|0)==0?(ke=c[s+116>>2]|0,a[ke+8>>0]|0):0){i=e[ke+24>>1]|0;l=a[s+68>>0]|0;if(l<<24>>24>0){q=l<<24>>24;o=0;r=0;l=0;do{i=Yv(i|0,l|0,e[(c[s+120+(r<<2)>>2]|0)+24>>1]|0,0)|0;l=L()|0;o=o+1<<24>>24;r=o&255}while((r|0)<(q|0))}else l=0;if(l>>>0<0|(l|0)==0&i>>>0<8)if(l>>>0<0|(l|0)==0&i>>>0<2)i=0;else{o=40;do{o=(o&65535)+65526|0;i=cw(i|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&i>>>0<8);o=o&65535;oa=1514}else{if(l>>>0>0|(l|0)==0&i>>>0>255){o=40;do{o=(o&65535)+40|0;oa=i;i=bw(i|0,l|0,4)|0;na=l;l=L()|0}while(na>>>0>0|(na|0)==0&oa>>>0>4095);o=o&65535}else o=40;if(l>>>0>0|(l|0)==0&i>>>0>15){do{o=(o&65535)+10&65535;oa=i;i=bw(i|0,l|0,1)|0;na=l;l=L()|0}while(na>>>0>0|(na|0)==0&oa>>>0>31);oa=1514}else oa=1514}if((oa|0)==1514){oa=0;i=(o&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)|0}if((c[p+12>>2]|0)>(i<<16>>16|0)){c[rf>>2]=1;break}}l=m;q=pa;o=qa;i=0;break d}while(0);i=0;oa=28;break}case 35:case 34:{c[uc>>2]=(c[uc>>2]|0)+1;oa=1521;break}case 36:{oa=1521;break}case 3:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[l+40>>2]|0;if(a[i+56>>0]|0){c[rf>>2]=0;i=fi(c[i+20>>2]|0,rf)|0;i=(i|0)==0&(c[rf>>2]|0)!=0?101:i;oa=2160;break d}q=i+36|0;o=c[q>>2]|0;oa=o+4|0;c[q>>2]=c[oa>>2];c[oa>>2]=0;do if(!((o|0)==0|(c[i+40>>2]|0)!=0)){if(c[Ze>>2]|0){Xd(Cf,o);break}oa=o;if((c[_e>>2]|0)>>>0<=oa>>>0?(c[$e>>2]|0)>>>0>oa>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{oa=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);i=(c[q>>2]|0)==0?101:0;oa=2160;break}case 5:case 4:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=i;i=Xa[c[p+16>>2]&255](c[i+40>>2]|0,c[p+12>>2]|0)|0;oa=2160;break}case -124:case -125:{t=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+8>>2]|0;o=pa+(w*40|0)|0;s=p+2|0;if(b[s>>1]&1)c[rc>>2]=(c[rc>>2]|0)+1;q=pa+(w*40|0)+8|0;l=b[q>>1]|0;do if(!(l&16384))i=z;else{r=pa+(w*40|0)+12|0;i=(c[o>>2]|0)+(c[r>>2]|0)|0;if((i|0)<1)if(!(l&16)){i=z;break}else i=1;if(Eg(o,i,1)|0){oa=2221;break c}gw((c[pa+(w*40|0)+16>>2]|0)+(c[r>>2]|0)|0,0,c[o>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[o>>2]|0);b[q>>1]=b[q>>1]&-16897;i=a[p>>0]|0}while(0);if(i<<24>>24==-125){t=c[t+40>>2]|0;F=pa+(w*40|0)+16|0;l=c[F>>2]|0;o=l+1|0;na=a[o>>0]|0;i=na&255;do if(na<<24>>24<=-1){q=d[l+2>>0]|0;if(!(q&128)){i=i<<7&16256|q;break}l=d[l+3>>0]|0;if(!(l&128)){i=(i<<14|l)&2080895|q<<7&16256;break}else{Of(o,rf)|0;na=rf;i=c[na>>2]|0;i=((i|0)==(i|0)?0==(c[na+4>>2]|0):0)?i:-1;break}}while(0);do if(!((i|0)!=7&(i+-1|0)>>>0<9)){l=t+60|0;if((i|0)<11|(i&1|0)==0){a[l>>0]=0;break}else{a[l>>0]=a[l>>0]&2;break}}else{na=t+60|0;a[na>>0]=a[na>>0]&1}while(0);E=pa+(w*40|0)+12|0;D=c[E>>2]|0;o=1;i=D;l=((D|0)<0)<<31>>31;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0)break;else o=o+1|0}s=D+8|0;q=o+D|0;B=t+4|0;l=c[B>>2]|0;do if(!l)i=0;else{if(!(c[t+40>>2]|0)){i=t+44|0;na=c[i>>2]|0;if((na|0)<=(l|0)?!(c[14768]|0?(na|0)>(c[t>>2]|0):0):0){i=0;break}}else{na=c[t+48>>2]|0;if((na|0)==0|(na+s|0)<=(l|0)){i=0;break}i=t+44|0}na=Vh(t)|0;c[i>>2]=0;c[t+48>>2]=0;i=na}while(0);o=t+36|0;l=t+44|0;c[l>>2]=(c[l>>2]|0)+q;l=t+8|0;if((q|0)>(c[l>>2]|0))c[l>>2]=q;A=t+40|0;l=c[A>>2]|0;r=l;if(l){C=t+48|0;q=c[C>>2]|0;y=q+s|0;z=t+52|0;s=c[z>>2]|0;if((y|0)>(s|0)){q=c[o>>2]|0;x=((y|0)<0)<<31>>31;w=s;t=((s|0)<0)<<31>>31;do{w=cw(w|0,t|0,1)|0;t=L()|0}while((t|0)<(x|0)|(t|0)==(x|0)&w>>>0<y>>>0);s=(q|0)==0?-1:q-r|0;q=c[B>>2]|0;r=((q|0)<0)<<31>>31;na=(t|0)>(r|0)|(t|0)==(r|0)&w>>>0>q>>>0;q=na?q:w;r=na?r:t;na=(r|0)<(x|0)|(r|0)==(x|0)&q>>>0<y>>>0;q=na?y:q;r=sb(l,q,na?x:r)|0;if(!r){oa=2221;break c}if((s|0)>-1)c[o>>2]=r+s;c[A>>2]=r;c[z>>2]=q;l=r;q=c[C>>2]|0}l=l+q|0;c[C>>2]=q+(D+15&-8);q=c[o>>2]|0;if(q)c[l+4>>2]=q-r}else{na=Sv(s|0,((s|0)<0)<<31>>31|0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){oa=2221;break c}do if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;if(!l){oa=2221;break c}}else{r=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;l=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,q|0,r|0,((r|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](r)|0;if(!l){oa=2221;break c}q=Wa[c[29352>>2]&127](l)|0;q=(c[14978]|0)+q|0;c[14978]=q;if(q>>>0>(c[14982]|0)>>>0)c[14982]=q;q=(c[14981]|0)+1|0;c[14981]=q;if(q>>>0<=(c[14987]|0)>>>0)break;c[14987]=q}while(0);c[l+4>>2]=c[o>>2]}ew(l+8|0,c[F>>2]|0,c[E>>2]|0)|0;c[l>>2]=c[E>>2];c[o>>2]=l}else{na=c[pa+(w*40|0)+12>>2]|0;i=Ab;c[i>>2]=na;c[i+4>>2]=((na|0)<0)<<31>>31;c[Hd>>2]=c[pa+(w*40|0)+16>>2];c[Bb>>2]=pa+((c[p+12>>2]|0)*40|0);b[Cb>>1]=c[p+16>>2];i=e[s>>1]|0;if(!(i&16))l=0;else l=c[t+32>>2]|0;i=ah(c[t+40>>2]|0,Hd,i&10,l)|0;c[t+28>>2]=0}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -123:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;o=c[l+40>>2]|0;c[Hd>>2]=c[l+44>>2];b[vc>>1]=c[p+12>>2];a[wc>>0]=0;c[xc>>2]=pa+((c[p+8>>2]|0)*40|0);i=Xg(o,Hd,0,0,0,rf)|0;if(i|0){oa=2226;break c}if((c[rf>>2]|0)==0?(me=bh(o,4)|0,me|0):0){i=me;oa=2226;break c}c[l+28>>2]=0;c[l+32>>2]=0;l=m;q=pa;o=qa;i=0;break}case -121:case -122:{s=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=s+40|0;if(a[c[i>>2]>>0]|0?(ne=sh(s)|0,ne|0):0){i=ne;oa=3855;break c}if(a[s+2>>0]|0){i=c[p+8>>2]|0;l=pa+(i*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=1;l=m;q=pa;o=qa;i=0;break d}else{Dg(pa+(i*40|0)|0);l=m;q=pa;o=qa;i=0;break d}}i=c[i>>2]|0;bg(i);l=c[i+44>>2]|0;b[jb>>1]=0;c[kb>>2]=Cf;c[lb>>2]=0;na=e[i+48>>1]|0;o=c[i+40>>2]|0;ma=(c[(c[i+116>>2]|0)+60>>2]|0)-o|0;if(l>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(i,0,l,Hd)|0;if(i|0){oa=2256;break c}o=c[Eb>>2]|0}else{c[Eb>>2]=o;b[jb>>1]=4112;c[Gb>>2]=l}na=a[o>>0]|0;i=na&255;do if(na<<24>>24<=-1){l=d[o+1>>0]|0;if(!(l&128)){i=i<<7&16256|l;oa=2241;break}q=d[o+2>>0]|0;if(q&128){Of(o,rf)|0;na=rf;i=c[na>>2]|0;if((i|0)==(i|0)?0==(c[na+4>>2]|0):0){oa=2241;break}else{i=-1;break}}else{i=(i<<14|q)&2080895|l<<7&16256;oa=2241;break}}else oa=2241;while(0);if((oa|0)==2241){oa=0;if(i>>>0<3){oa=2253;break c}}if(i>>>0>(c[Gb>>2]|0)>>>0){oa=2253;break c}o=c[Eb>>2]|0;r=o+(i+-1)|0;na=a[r>>0]|0;l=na&255;do if(na<<24>>24<=-1){o=d[o+i>>0]|0;if(!(o&128)){l=l<<7&16256|o;break}q=d[r+2>>0]|0;if(!(q&128)){l=(l<<14|q)&2080895|o<<7&16256;break}else{Of(r,rf)|0;na=rf;l=c[na>>2]|0;l=((l|0)==(l|0)?0==(c[na+4>>2]|0):0)?l:-1;break}}while(0);if((l|0)==7|(l+-1|0)>>>0>8){oa=2253;break c}o=d[3520+l>>0]|0;q=c[Gb>>2]|0;if(q>>>0<(i+o|0)>>>0){oa=2253;break c}Ug((c[Eb>>2]|0)+(q-o)|0,l,Td)|0;q=Td;o=c[q>>2]|0;q=c[q+4>>2]|0;if(!((b[jb>>1]&9216)==0&(c[lb>>2]|0)==0))Cg(Hd);if((a[p>>0]|0)==-122){l=c[(c[oc>>2]|0)+(c[p+12>>2]<<2)>>2]|0;a[l+2>>0]=0;i=l+64|0;c[i>>2]=o;c[i+4>>2]=q;a[l+3>>0]=1;c[l+24>>2]=c[p+16>>2];c[l+36>>2]=s;l=m;q=pa;o=qa;i=0;break d}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=0;break}case 40:case 39:case 38:case 37:{o=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;c[Hd>>2]=c[o+44>>2];b[zc>>1]=c[p+16>>2];a[Ac>>0]=((z&255)<39)<<31>>31;c[Bc>>2]=pa+((c[p+12>>2]|0)*40|0);o=c[o+40>>2]|0;bg(o);i=c[o+44>>2]|0;if((i|0)<1){oa=2267;break c}b[Ea>>1]=0;c[Fa>>2]=Cf;c[Ga>>2]=0;na=e[o+48>>1]|0;l=c[o+40>>2]|0;ma=(c[(c[o+116>>2]|0)+60>>2]|0)-l|0;if(i>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(o,0,i,rf)|0;if(i|0){oa=2274;break c}i=c[nb>>2]|0;l=c[mb>>2]|0}else{c[mb>>2]=l;b[Ea>>1]=4112;c[nb>>2]=i}i=Fh(i,l,Hd,0)|0;if(!((b[Ea>>1]&9216)==0&(c[Ga>>2]|0)==0))Cg(rf);if((((a[p>>0]&1)==0?i+1|0:0-i|0)|0)>0){i=0;oa=28}else{l=m;q=pa;o=qa;i=0}break}case -120:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;A=i}else{lh(i)|0;A=i}B=A+8|0;b[B>>1]=1;if((c[Ha>>2]|0)>((c[ad>>2]|0)+1|0)){oa=2280;break c}C=c[p+12>>2]|0;x=c[(c[uf>>2]|0)+(C<<4)+4>>2]|0;z=p+4|0;s=c[z>>2]|0;y=x+4|0;w=c[y>>2]|0;c[w+4>>2]=c[x>>2];if((c[w+44>>2]|0)>>>0<s>>>0){oa=2282;break c}l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,s,rf,0)|0;if(l|0){oa=2286;break c}i=c[rf>>2]|0;r=c[i+8>>2]|0;q=r+4|0;if((c[q>>2]|0)!=(s|0)){c[r+56>>2]=c[i+4>>2];c[r+72>>2]=i;c[r+52>>2]=w;c[q>>2]=s;a[r+9>>0]=(s|0)==1?100:0}o=c[y>>2]|0;c[o+4>>2]=c[x>>2];i=c[o+8>>2]|0;H:do if(i|0){I:do if(s)while(1){if((c[i+64>>2]|0)==(s|0))break I;i=c[i+24>>2]|0;if(!i)break H}while(0);i=$f(i,s,0)|0;if(i|0){j=i;oa=2301;break c}}while(0);l=x+11|0;if(a[l>>0]|0?(a[l>>0]=0,kd=c[(c[y>>2]|0)+8>>2]|0,kd|0):0){i=kd;do{do if(a[i+1>>0]&16){a[l>>0]=1;if((c[i+64>>2]|0)!=(s|0))break;a[i>>0]=1}while(0);i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(o,s,0,0)|0;if(i|0){j=i;oa=2301;break c}if(!(a[w+17>>0]|0)){i=Bh(c[r+52>>2]|0,r,c[q>>2]|0)|0;do if(r|0){l=c[r+72>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{na=c[l+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[l+16>>2]=c[na>>2];c[na>>2]=l;break}}while(0);b[B>>1]=4;na=A;c[na>>2]=0;c[na+4>>2]=0;if(!i){l=m;q=pa;o=qa;i=0;break d}else{oa=3855;break c}}t=c[y>>2]|0;c[t+4>>2]=c[x>>2];t=c[(c[t+12>>2]|0)+56>>2]|0;t=d[t+53>>0]<<16|d[t+52>>0]<<24|d[t+54>>0]<<8|d[t+55>>0];if((t|0)==(s|0)){l=Bh(c[r+52>>2]|0,r,c[q>>2]|0)|0;do if(r|0){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);if(!l)i=0;else{i=0;j=l;oa=2353;break c}}else{do if(r|0){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,t,rf,0)|0;if(l|0){oa=2319;break c}i=c[rf>>2]|0;o=c[i+8>>2]|0;l=o+4|0;if((c[l>>2]|0)!=(t|0)){c[o+56>>2]=c[i+4>>2];c[o+72>>2]=i;c[o+52>>2]=w;c[l>>2]=t;a[o+9>>0]=(t|0)==1?100:0}l=gg(w,o,1,0,s,0)|0;do if(o|0){i=c[o+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);if(l|0){i=0;j=l;oa=2353;break c}l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,t,rf,0)|0;if(l|0){oa=2329;break c}i=c[rf>>2]|0;o=c[i+8>>2]|0;l=o+4|0;if((c[l>>2]|0)==(t|0)){l=o+72|0;i=c[o+52>>2]|0}else{c[o+56>>2]=c[i+4>>2];na=o+72|0;c[na>>2]=i;c[o+52>>2]=w;c[l>>2]=t;a[o+9>>0]=(t|0)==1?100:0;l=na;i=w}o=Bh(i,o,t)|0;i=c[l>>2]|0;if(!(b[i+28>>1]&32))Df(i);else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i}if(!o)i=t;else{i=0;j=o;oa=2353;break c}}q=1073741824/((c[w+32>>2]|0)>>>0)|0;r=q+1|0;o=w+36|0;l=t;while(1){s=l+-1|0;if((s|0)!=(r|0)){if(s>>>0<2)l=0;else{l=l+-3|0;l=l-((l>>>0)%(((((c[o>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;l=((l+1|0)==(q|0)?3:2)+l|0}if((l|0)!=(s|0))break}l=s}o=c[y>>2]|0;c[o+4>>2]=c[x>>2];o=c[o+12>>2]|0;l=c[o+56>>2]|0;o=c[o+72>>2]|0;q=c[o+20>>2]|0;do if(!(b[o+28>>1]&4))oa=2344;else{if((c[q+24>>2]|0)>>>0<(c[o+24>>2]|0)>>>0){oa=2344;break}if(!(c[q+96>>2]|0))break;j=Ve(o)|0;oa=2348}while(0);do if((oa|0)==2344){j=c[q+40>>2]|0;if(j|0){oa=2353;break c}if((c[q+148>>2]|0)>>>0>(c[q+152>>2]|0)>>>0){j=Wf(o)|0;oa=2348;break}else{j=Xf(o)|0;oa=2348;break}}while(0);if((oa|0)==2348?(oa=0,j|0):0){oa=2353;break c}a[l+52>>0]=s>>>24;a[l+53>>0]=s>>>16;a[l+54>>0]=s>>>8;a[l+55>>0]=s;b[B>>1]=4;na=A;c[na>>2]=i;c[na+4>>2]=((i|0)<0)<<31>>31;if(!i){l=m;q=pa;o=qa;i=0}else{q=c[z>>2]|0;o=c[(c[uf>>2]|0)+(C<<4)+12>>2]|0;k=c[o+16>>2]|0;if(k|0)do{l=(c[k+8>>2]|0)+28|0;if((c[l>>2]|0)==(i|0))c[l>>2]=q;k=c[k>>2]|0}while((k|0)!=0);k=c[o+32>>2]|0;if(k|0)do{l=(c[k+8>>2]|0)+44|0;if((c[l>>2]|0)==(i|0))c[l>>2]=q;k=c[k>>2]|0}while((k|0)!=0);k=C+1&255;l=m;q=pa;o=qa;i=0}break}case -119:{c[rf>>2]=0;l=c[(c[uf>>2]|0)+(c[p+8>>2]<<4)+4>>2]|0;r=c[p+4>>2]|0;t=p+12|0;q=(c[t>>2]|0)==0?0:rf;o=l+4|0;s=c[o>>2]|0;c[s+4>>2]=c[l>>2];i=c[s+8>>2]|0;J:do if(i){K:do if(r)while(1){if((c[i+64>>2]|0)==(r|0))break K;i=c[i+24>>2]|0;if(!i){oa=2373;break J}}while(0);i=$f(i,r,0)|0;if(!i)oa=2373}else oa=2373;while(0);if((oa|0)==2373){oa=0;l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,ld=c[(c[o>>2]|0)+8>>2]|0,ld|0):0){i=ld;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(r|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(s,r,0,q)|0}l=c[t>>2]|0;if(l|0?(oe=c[rf>>2]|0,c[rc>>2]=(c[rc>>2]|0)+oe,pe=pa+(l*40|0)|0,(l|0)>0):0){la=pe;la=Sv(c[la>>2]|0,c[la+4>>2]|0,oe|0,((oe|0)<0)<<31>>31|0)|0;ma=L()|0;na=pe;c[na>>2]=la;c[na+4>>2]=ma}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -118:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((a[i>>0]|0)==1){wg(Cf,c[i+40>>2]|0);l=m;q=pa;o=qa;i=K;break d}q=c[i+40>>2]|0;l=c[q+8>>2]|0;q=c[q+64>>2]|0;o=l+4|0;r=c[o>>2]|0;c[r+4>>2]=c[l>>2];i=c[r+8>>2]|0;L:do if(i|0){M:do if(q)while(1){if((c[i+64>>2]|0)==(q|0))break M;i=c[i+24>>2]|0;if(!i)break L}while(0);i=$f(i,q,0)|0;if(i|0){oa=3855;break c}}while(0);l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,jd=c[(c[o>>2]|0)+8>>2]|0,jd|0):0){i=jd;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(q|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(r,q,0,0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -117:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;c[rf>>2]=0;l=Wg(c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0,rf,c[p+12>>2]|0)|0;if(l|0){oa=2406;break c}q=c[rf>>2]|0;l=i;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;i=0;break}case -116:{a[Cc>>0]=(a[Cc>>0]|0)+1<<24>>24;i=nd(Cf,c[p+16>>2]|0,0,0,0)|0;a[Cc>>0]=(a[Cc>>0]|0)+-1<<24>>24;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -115:{i=c[p+4>>2]|0;l=p+16|0;if(!(c[l>>2]|0)){dh(c[(c[uf>>2]|0)+(i<<4)+12>>2]|0);c[hf>>2]=c[hf>>2]&-17;i=eh(Cf,i,mf,1)|0;c[hf>>2]=c[hf>>2]|1;na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8}else{c[rf>>2]=Cf;c[Ia>>2]=i;c[Ja>>2]=mf;c[Ka>>2]=0;l=c[l>>2]|0;c[Ne>>2]=c[(c[uf>>2]|0)+(i<<4)>>2];c[Ne+4>>2]=34585;c[Ne+8>>2]=l;l=dd(Cf,34599,Ne)|0;if(!l){oa=2424;break c}a[ob>>0]=1;c[pb>>2]=0;c[qb>>2]=0;i=nd(Cf,l,77,rf,0)|0;i=(i|0)==0?c[pb>>2]|0:i;if(!(i|c[qb>>2])){c[Oe>>2]=32306;c[Oe+4>>2]=89378;c[Oe+8>>2]=31517;Db(11,32001,Oe);i=11}do if(!(c[Ze>>2]|0)){na=l;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[l>>2]=c[af>>2];c[af>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(Cf,l);while(0);a[ob>>0]=0}switch(i|0){case 7:{oa=2424;break c}case 0:break;default:{oa=2425;break c}}l=m;q=pa;o=qa;i=0;break}case -114:{i=gh(Cf,c[p+4>>2]|0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -113:{i=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+8|0,c[p+16>>2]|0,0)|0;do if(i|0){if(c[Ze>>2]|0){Vi(Cf,i);break}ma=i+32|0;na=(c[ma>>2]|0)+-1|0;c[ma>>2]=na;if(!na)Vi(Cf,i)}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K;break}case -112:{o=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+24|0,c[p+16>>2]|0,0)|0;do if(o|0){l=(c[o+12>>2]|0)+8|0;i=c[l>>2]|0;if((i|0)==(o|0)){c[l>>2]=c[o+20>>2];i=c[o+36>>2]|0;if(i|0)ni(Cf,i);i=c[o+40>>2]|0;if(i|0)ri(Cf,i);i=c[o+16>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);na=o+55|0;N:do if((d[na>>0]|d[na+1>>0]<<8)&16?(qe=c[o+32>>2]|0,qe|0):0){if(c[Ze>>2]|0){Xd(Cf,qe);break}i=qe;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[qe>>2]=c[af>>2];c[af>>2]=qe;break N}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](qe);break}else{na=Wa[c[29352>>2]&127](qe)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](qe);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,o);break}na=o;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}O:do if(i|0){while(1){l=c[i+20>>2]|0;if((l|0)==(o|0))break;if(!l)break O;else i=l}c[i+20>>2]=c[o+20>>2]}while(0);i=c[o+36>>2]|0;if(i|0)ni(Cf,i);i=c[o+40>>2]|0;if(i|0)ri(Cf,i);i=c[o+16>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);na=o+55|0;P:do if((d[na>>0]|d[na+1>>0]<<8)&16?(re=c[o+32>>2]|0,re|0):0){if(c[Ze>>2]|0){Xd(Cf,re);break}i=re;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[re>>2]=c[af>>2];c[af>>2]=re;break P}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](re);break}else{na=Wa[c[29352>>2]&127](re)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](re);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,o);break}na=o;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K;break}case -110:{x=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+40|0,c[p+16>>2]|0,0)|0;if(!x){l=m;q=pa;o=qa;i=K}else{q=c[x+20>>2]|0;Q:do if((q|0)==(c[x+24>>2]|0)){w=x+4|0;t=c[w>>2]|0;r=c[q+20>>2]|0;if(!r){l=q+12|0;i=q+16|0}else{l=a[t>>0]|0;if(!(l<<24>>24))i=0;else{i=0;o=t;do{o=o+1|0;i=G(i+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[o>>0]|0}while(l<<24>>24!=0)}i=(i>>>0)%((c[q+8>>2]|0)>>>0)|0;l=r+(i<<3)|0;i=r+(i<<3)+4|0}l=c[l>>2]|0;R:do if(!l)i=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;l=l+-1|0;q=c[i+12>>2]|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-s|0;if(!(na<<24>>24==0|(o|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(o|0)!=0))}if(!o)break R;if(!l){i=59292;break}}}while(0);i=(c[i+8>>2]|0)+68|0;while(1){na=c[i>>2]|0;l=na+32|0;if((na|0)==(x|0))break;else i=l}c[i>>2]=c[l>>2];Xi(Cf,c[x+28>>2]|0);i=c[x>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[w>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+12>>2]|0;if(i|0)ni(Cf,i);r=c[x+16>>2]|0;S:do if(r|0){q=r+4|0;i=c[r>>2]|0;if((c[q>>2]|0)>0){o=0;do{i=c[i+(o<<3)>>2]|0;T:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break T}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=o+1|0;i=c[r>>2]|0}while((o|0)<(c[q>>2]|0))}U:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break U}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,r);break}i=r;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[r>>2]=c[af>>2];c[af>>2]=r;break S}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{na=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,x);break}i=x;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[x>>2]=c[af>>2];c[af>>2]=x;break Q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{na=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}else{Xi(Cf,c[x+28>>2]|0);i=c[x>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+4>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+12>>2]|0;if(i|0)ni(Cf,i);r=c[x+16>>2]|0;V:do if(r|0){q=r+4|0;i=c[r>>2]|0;if((c[q>>2]|0)>0){o=0;do{i=c[i+(o<<3)>>2]|0;W:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break W}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=o+1|0;i=c[r>>2]|0}while((o|0)<(c[q>>2]|0))}X:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break X}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,r);break}i=r;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[r>>2]=c[af>>2];c[af>>2]=r;break V}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{na=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,x);break}na=x;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[x>>2]=c[af>>2];c[af>>2]=x;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{na=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K}break}case -109:{w=c[p+8>>2]|0;C=c[p+4>>2]|0;D=pa+(C*40|0)|0;i=c[(c[uf>>2]|0)+(e[p+2>>1]<<4)+4>>2]|0;x=(c[p+16>>2]|0)+4|0;E=pa+((c[p+12>>2]|0)*40|0)|0;na=(c[E>>2]|0)+1|0;z=c[i+4>>2]|0;y=z+4|0;B=(c[y>>2]|0)+32|0;A=c[B>>2]|0;B=c[B+4>>2]|0;c[y>>2]=c[i>>2];c[Td>>2]=z;c[Dc>>2]=c[z>>2];i=c[z+44>>2]|0;c[Ec>>2]=i;c[Fc>>2]=na;c[Jc>>2]=0;c[Kc>>2]=0;c[Gc>>2]=0;c[Gc+4>>2]=0;c[Gc+8>>2]=0;c[Gc+12>>2]=0;c[Gc+16>>2]=0;c[Mc>>2]=Yd;c[Lc>>2]=0;c[Nc>>2]=100;c[Oc>>2]=1e9;c[Pc>>2]=0;a[Qc>>0]=0;a[Rc>>0]=1;Y:do if(i){i=i>>>3;q=i+1|0;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;if(!i)oa=2649}else{o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<=i>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(i){l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else oa=2649}if((oa|0)==2649){c[Jc>>2]=0;c[Hc>>2]=1;oa=2710;break}gw(i|0,0,q|0)|0;c[Jc>>2]=i;t=z+32|0;q=c[t>>2]|0;if((c[14813]|0)>=(q|0)?(se=c[14819]|0,(se|0)!=0):0){c[14819]=c[se>>2];na=c[14820]|0;c[14820]=na+-1;c[14821]=(na|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<q>>>0)c[14986]=q;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0){c[14983]=i;i=se}else i=se}else oa=2656;Z:do if((oa|0)==2656){oa=0;na=Sv(q|0,((q|0)<0)<<31>>31|0,-1,-1)|0;ma=L()|0;_:do if(!(ma>>>0>0|(ma|0)==0&na>>>0>2147483390)){do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;if(!i)break _}else{l=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;i=59064;o=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](l)|0;if(!i)break _;l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);l=Wa[c[29352>>2]&127](i)|0;if((c[14986]|0)>>>0<q>>>0)c[14986]=q;l=(c[14980]|0)+l|0;c[14980]=l;if(l>>>0<=(c[14984]|0)>>>0)break Z;c[14984]=l;break Z}while(0);c[Kc>>2]=0;c[Hc>>2]=1;break Y}while(0);c[Kc>>2]=i;i=(1073741824/((c[t>>2]|0)>>>0)|0)+1|0;if(i>>>0<=(c[Ec>>2]|0)>>>0){na=(c[Jc>>2]|0)+(i>>>3)|0;a[na>>0]=1<<(i&7)|d[na>>0]}c[Ic>>2]=35261;o=z+12|0;s=c[(c[o>>2]|0)+56>>2]|0;si(Td,1,d[s+33>>0]<<16|d[s+32>>0]<<24|d[s+34>>0]<<8|d[s+35>>0],d[s+37>>0]<<16|d[s+36>>0]<<24|d[s+38>>0]<<8|d[s+39>>0]);c[Ic>>2]=0;s=z+17|0;if(!(a[s>>0]|0)){na=c[(c[o>>2]|0)+56>>2]|0;if(d[na+65>>0]<<16|d[na+64>>0]<<24|d[na+66>>0]<<8|d[na+67>>0]|0)ti(Td,35322,Re)}else{if((w|0)>0){i=0;l=0;do{na=c[x+(i<<2)>>2]|0;l=(l|0)<(na|0)?na:l;i=i+1|0}while((i|0)!=(w|0))}else l=0;i=c[(c[o>>2]|0)+56>>2]|0;i=d[i+53>>0]<<16|d[i+52>>0]<<24|d[i+54>>0]<<8|d[i+55>>0];if((l|0)!=(i|0)){c[Qe>>2]=l;c[Qe+4>>2]=i;ti(Td,35277,Qe)}}l=(c[y>>2]|0)+32|0;ma=l;na=c[ma+4>>2]|0;i=l;c[i>>2]=c[ma>>2]&-2097153;c[i+4>>2]=na;i=c[Fc>>2]|0;if((w|0)>0&(i|0)!=0){r=0;do{o=x+(r<<2)|0;q=c[o>>2]|0;if(q){if((q|0)>1&(a[s>>0]|0)!=0){i=eg(c[Td>>2]|0,q,rf,Hd)|0;$:do if((i|0)<7){switch(i|0){case 0:break;default:{oa=2689;break $}}i=a[rf>>0]|0;l=c[Hd>>2]|0;if(i<<24>>24==1&(l|0)==0)break;c[Te>>2]=q;c[Te+4>>2]=1;c[Te+8>>2]=0;c[Te+12>>2]=i&255;c[Te+16>>2]=l;ti(Td,35625,Te)}else{if((i|0)<3082)switch(i|0){case 7:break;default:{oa=2689;break $}}else switch(i|0){case 3082:break;default:{oa=2689;break $}}c[Hc>>2]=1;oa=2689}while(0);if((oa|0)==2689){oa=0;c[Se>>2]=q;ti(Td,35596,Se)}i=c[o>>2]|0}else i=q;ui(Td,i,ee,-1,2147483647)|0;i=c[Fc>>2]|0}r=r+1|0}while((r|0)<(w|0)&(i|0)!=0);l=(c[y>>2]|0)+32|0}na=l;c[na>>2]=A;c[na+4>>2]=B;if((i|0)!=0&(c[Ec>>2]|0)!=0){r=z+36|0;q=1;do{l=q>>>3;o=1<<(q&7);do if(!(o&d[(c[Jc>>2]|0)+l>>0])){if(q>>>0<2)i=0;else{i=q+-2|0;i=i-((i>>>0)%(((((c[r>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[t>>2]|0)>>>0)|0|0)?3:2)+i|0}if((i|0)==(q|0)?a[s>>0]|0:0)break;c[Ue>>2]=q;ti(Td,35377,Ue);if(o&d[(c[Jc>>2]|0)+l>>0]|0)oa=2704}else oa=2704;while(0);do if((oa|0)==2704){oa=0;if(q>>>0<2)i=0;else{i=q+-2|0;i=i-((i>>>0)%(((((c[r>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[t>>2]|0)>>>0)|0|0)?3:2)+i|0}if((i|0)!=(q|0))break;if(!(a[s>>0]|0))break;c[We>>2]=q;ti(Td,35399,We)}while(0);q=q+1|0}while(c[Fc>>2]|0?q>>>0<=(c[Ec>>2]|0)>>>0:0);oa=2710}else oa=2710}else oa=2710;while(0);aa:do if((oa|0)==2710?(oa=0,pd=c[Kc>>2]|0,pd|0):0){i=pd;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[pd>>2]=c[14819];c[14819]=pd;na=(c[14820]|0)+1|0;c[14820]=na;c[14821]=(na|0)<(c[14815]|0)&1;break aa}else{i=Wa[c[29352>>2]&127](pd)|0;break}else i=Wa[c[29352>>2]&127](pd)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](pd);break}else{na=Wa[c[29352>>2]&127](pd)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](pd);break}}while(0);i=c[Jc>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);if(!(c[Hc>>2]|0))r=c[Gc>>2]|0;else{if(a[Rc>>0]&4){i=c[Lc>>2]|0;l=c[Mc>>2]|0;ba:do if(l|0){do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break ba}o=l;if((c[i+304>>2]|0)>>>0<=o>>>0){if((c[i+308>>2]|0)>>>0<=o>>>0)break;na=i+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break ba}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);a[Rc>>0]=a[Rc>>0]&-5}c[Nc>>2]=0;c[Pc>>2]=0;c[Mc>>2]=0;r=(c[Gc>>2]|0)+1|0;c[Gc>>2]=r}q=(r|0)==0;if(!q){i=c[Mc>>2]|0;if(((i|0)!=0?(a[i+(c[Pc>>2]|0)>>0]=0,(c[Oc>>2]|0)!=0):0)?(a[Rc>>0]&4)==0:0)i=$d(Lc)|0;else oa=2756}else{if(a[Rc>>0]&4){i=c[Lc>>2]|0;l=c[Mc>>2]|0;ca:do if(l|0){do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break ca}o=l;if((c[i+304>>2]|0)>>>0>o>>>0)break;if((c[i+308>>2]|0)>>>0<=o>>>0)break;oa=i+300|0;c[l>>2]=c[oa>>2];c[oa>>2]=l;break ca}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);a[Rc>>0]=a[Rc>>0]&-5}c[Nc>>2]=0;c[Pc>>2]=0;c[Mc>>2]=0;oa=2756}if((oa|0)==2756){oa=0;i=c[Mc>>2]|0}l=pa+(C*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=1;else Dg(D);if(!q){if(!i){l=p;j=h;i=zf;oa=3892;break a}la=r+-1|0;ma=E;la=Tv(c[ma>>2]|0,c[ma+4>>2]|0,la|0,((la|0)<0)<<31>>31|0)|0;ma=L()|0;na=E;c[na>>2]=la;c[na+4>>2]=ma;yc(D,i,-1,1,90)|0}if((b[l>>1]&2)!=0?(a[pa+(C*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(D,sd)|0;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case -108:{i=c[p+4>>2]|0;l=c[p+8>>2]|0;if((b[pa+(i*40|0)+8>>1]&16)==0?hh(pa+(i*40|0)|0)|0:0){l=p;j=h;i=zf;oa=3892;break a}t=c[pa+(i*40|0)+16>>2]|0;s=pa+(l*40|0)|0;r=c[s>>2]|0;s=c[s+4>>2]|0;q=t+24|0;l=b[q>>1]|0;if(l<<16>>16){na=t+16|0;i=c[na>>2]|0;b[q>>1]=l+-1<<16>>16;c[na>>2]=i+16;if(!i){l=m;q=pa;o=qa;i=K;break d}}else{o=c[t+4>>2]|0;da:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))oa=2779;else{l=m;q=pa;o=qa;i=K;break d}else{do if((e[o+276>>1]|0)>=1016){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break da}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break da}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;oa=2779}while(0);if((oa|0)==2779){oa=0;i=_d(o,1016,0)|0}if(!i){l=m;q=pa;o=qa;i=K;break d}c[i>>2]=c[t>>2];c[t>>2]=i;b[q>>1]=62;c[t+16>>2]=i+24;i=i+8|0}l=i;c[l>>2]=r;c[l+4>>2]=s;c[i+8>>2]=0;l=t+12|0;o=c[l>>2]|0;if(!o)c[t+8>>2]=i;else{na=o;ma=c[na+4>>2]|0;if(!((ma|0)<(s|0)|((ma|0)==(s|0)?(c[na>>2]|0)>>>0<r>>>0:0))){na=t+26|0;b[na>>1]=b[na>>1]&-2}c[o+8>>2]=i}c[l>>2]=i;l=m;q=pa;o=qa;i=K;break}case 41:{l=c[p+4>>2]|0;B=pa+(l*40|0)|0;C=pa+(l*40|0)+8|0;i=b[C>>1]|0;do if(i&16){D=c[pa+(l*40|0)+16>>2]|0;E=D+26|0;A=b[E>>1]|0;i=A&65535;if(!(i&2)){if(!(i&1)){z=D+8|0;i=c[z>>2]|0;gw(Hd|0,0,160)|0;if(!i)i=0;else{l=0;while(1){na=i+8|0;o=i;i=c[na>>2]|0;c[na>>2]=0;if(!l)l=Hd;else{y=0;x=Hd;while(1){q=rf;ea:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=o;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[q+8>>2]=o;q=c[o+8>>2]|0;if(!q){q=o;break ea}else{na=o;o=q;q=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0<r>>>0){c[q+8>>2]=l;q=l}l=c[l+8>>2]|0;if(!l){l=o;break}}c[q+8>>2]=l;o=c[Nb>>2]|0;c[x>>2]=0;y=y+1|0;q=Hd+(y<<2)|0;l=c[q>>2]|0;if(!l){l=q;break}else x=q}}c[l>>2]=o;l=c[Hd>>2]|0;if(!i){i=l;break}}}w=1;do{o=c[Hd+(w<<2)>>2]|0;if(o)if(!i)i=o;else{l=rf;fa:while(1){t=i;s=c[t>>2]|0;t=c[t+4>>2]|0;while(1){r=o;q=c[r>>2]|0;r=c[r+4>>2]|0;if(!((t|0)>(r|0)|(t|0)==(r|0)&s>>>0>q>>>0))break;c[l+8>>2]=o;l=c[o+8>>2]|0;if(!l){l=o;break fa}else{na=o;o=l;l=na}}if((t|0)<(r|0)|(t|0)==(r|0)&s>>>0<q>>>0){c[l+8>>2]=i;l=i}i=c[i+8>>2]|0;if(!i){i=o;break}}c[l+8>>2]=i;i=c[Mb>>2]|0}w=w+1|0}while((w|0)!=40);c[z>>2]=i}b[E>>1]=A|3}s=D+8|0;i=c[s>>2]|0;if(!i){i=b[C>>1]|0;break}w=i;t=c[w>>2]|0;w=c[w+4>>2]|0;na=c[i+8>>2]|0;c[s>>2]=na;if(!na){i=c[D>>2]|0;if(i|0){r=D+4|0;do{l=i;i=c[i>>2]|0;o=c[r>>2]|0;do if(!o)oa=2830;else{if(c[o+480>>2]|0){Xd(o,l);break}q=l;if((c[o+304>>2]|0)>>>0>q>>>0){oa=2830;break}if((c[o+308>>2]|0)>>>0<=q>>>0){oa=2830;break}na=o+300|0;c[l>>2]=c[na>>2];c[na>>2]=l}while(0);do if((oa|0)==2830){oa=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0)}while((i|0)!=0)}c[D>>2]=0;b[D+24>>1]=0;c[s>>2]=0;c[D+12>>2]=0;c[D+20>>2]=0;b[E>>1]=1}l=c[p+12>>2]|0;i=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(!(b[l>>1]&9216)){o=i;c[o>>2]=t;c[o+4>>2]=w;b[l>>1]=4;l=m;o=pa;i=K;oa=21;break d}else{Pg(i,t,w);l=m;o=pa;i=K;oa=21;break d}}while(0);if(!(i&9216)){b[C>>1]=1;i=K;oa=20;break d}else{Dg(B);i=K;oa=20;break d}}case 42:{l=c[p+4>>2]|0;i=pa+((c[p+12>>2]|0)*40|0)|0;J=c[p+16>>2]|0;if((b[pa+(l*40|0)+8>>1]&16)==0?hh(pa+(l*40|0)|0)|0:0){l=p;j=h;i=zf;oa=3892;break a}I=pa+(l*40|0)+16|0;if(J){B=c[I>>2]|0;H=i;F=c[H>>2]|0;H=c[H+4>>2]|0;C=B+28|0;if((c[C>>2]|0)!=(J|0)){D=B+8|0;l=c[D>>2]|0;if(l|0){A=B+20|0;E=B+26|0;if(!(b[E>>1]&1)){gw(Hd|0,0,160)|0;z=l;l=0;do{na=z+8|0;o=z;z=c[na>>2]|0;c[na>>2]=0;if(!l)l=Hd;else{y=0;x=Hd;while(1){q=rf;ga:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=o;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[q+8>>2]=o;q=c[o+8>>2]|0;if(!q){q=o;break ga}else{na=o;o=q;q=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0<r>>>0){c[q+8>>2]=l;q=l}l=c[l+8>>2]|0;if(!l){l=o;break}}c[q+8>>2]=l;o=c[Ub>>2]|0;c[x>>2]=0;y=y+1|0;q=Hd+(y<<2)|0;l=c[q>>2]|0;if(!l){l=q;break}else x=q}}c[l>>2]=o;l=c[Hd>>2]|0}while((z|0)!=0);x=1;do{q=c[Hd+(x<<2)>>2]|0;do if(q){if(!l){l=q;break}o=rf;ha:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=q;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[o+8>>2]=q;o=c[q+8>>2]|0;if(!o){o=q;break ha}else{na=q;q=o;o=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0<r>>>0){c[o+8>>2]=l;o=l}l=c[l+8>>2]|0;if(!l){l=q;break}}c[o+8>>2]=l;l=c[ic>>2]|0}while(0);x=x+1|0}while((x|0)!=40)}o=c[A>>2]|0;ia:do if(!o){s=A;oa=2889}else{while(1){x=o+8|0;r=o+12|0;o=c[r>>2]|0;if(!o)break;wi(o,Hd,Td);c[r>>2]=0;o=rf;w=c[Hd>>2]|0;ja:do{t=w;s=c[t>>2]|0;t=c[t+4>>2]|0;while(1){r=l;q=c[r>>2]|0;r=c[r+4>>2]|0;if(!((t|0)>(r|0)|(t|0)==(r|0)&s>>>0>q>>>0))break;c[o+8>>2]=l;o=c[l+8>>2]|0;if(!o){o=l;l=w;break ja}else{na=l;l=o;o=na}}if((t|0)<(r|0)|(t|0)==(r|0)&s>>>0<q>>>0){c[o+8>>2]=w;o=w}w=c[w+8>>2]|0}while((w|0)!=0);c[o+8>>2]=l;l=c[cc>>2]|0;o=c[x>>2]|0;if(!o){s=x;oa=2889;break ia}}na=l+8|0;o=c[na>>2]|0;c[rf>>2]=o;c[na>>2]=0;c[l+12>>2]=0;if(!o){c[r>>2]=l;break}q=1;while(1){na=o+8|0;c[rf>>2]=c[na>>2];c[o+12>>2]=l;l=xi(rf,q)|0;c[na>>2]=l;l=c[rf>>2]|0;if(!l)break;else{na=o;q=q+1|0;o=l;l=na}}c[r>>2]=o}while(0);ka:do if((oa|0)==2889){oa=0;t=B+24|0;q=b[t>>1]|0;la:do if(q<<16>>16){na=B+16|0;o=c[na>>2]|0;b[t>>1]=q+-1<<16>>16;c[na>>2]=o+16;c[s>>2]=o;if(!o)break ka}else{r=c[B+4>>2]|0;ma:do if(c[r+272>>2]|0){if(!(a[r+81>>0]|0))oa=2900}else{do if((e[r+276>>1]|0)>=1016){q=r+300|0;o=c[q>>2]|0;if(o|0){c[q>>2]=c[o>>2];oa=r+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=2901;break ma}q=r+296|0;o=c[q>>2]|0;if(!o){o=r+292|0;break}else{c[q>>2]=c[o>>2];oa=r+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=2901;break ma}}else o=r+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;oa=2900}while(0);if((oa|0)==2900){o=_d(r,1016,0)|0;oa=2901}do if((oa|0)==2901){oa=0;if(!o)break;c[o>>2]=c[B>>2];c[B>>2]=o;na=o+8|0;b[t>>1]=62;c[B+16>>2]=o+24;c[s>>2]=na;o=na;break la}while(0);c[s>>2]=0;break ka}while(0);na=o;c[na>>2]=0;c[na+4>>2]=0;c[o+8>>2]=0;na=l+8|0;q=c[na>>2]|0;c[rf>>2]=q;c[na>>2]=0;c[l+12>>2]=0;if(q){r=1;while(1){na=q+8|0;c[rf>>2]=c[na>>2];c[q+12>>2]=l;l=xi(rf,r)|0;c[na>>2]=l;l=c[rf>>2]|0;if(!l){l=q;break}else{na=q;r=r+1|0;q=l;l=na}}}c[o+12>>2]=l}while(0);c[D>>2]=0;c[B+12>>2]=0;b[E>>1]=b[E>>1]|1}c[C>>2]=J}l=c[B+20>>2]|0;if(l|0)do{o=c[l+12>>2]|0;if(o|0)do{r=o;q=c[r>>2]|0;r=c[r+4>>2]|0;if((r|0)<(H|0)|(r|0)==(H|0)&q>>>0<F>>>0)o=o+8|0;else{if(!((r|0)>(H|0)|(r|0)==(H|0)&q>>>0>F>>>0)){i=K;oa=28;break d}o=o+12|0}o=c[o>>2]|0}while((o|0)!=0);l=c[l+8>>2]|0}while((l|0)!=0);if((J|0)<=-1){l=m;q=pa;o=qa;i=K;break d}}t=c[I>>2]|0;s=i;r=c[s>>2]|0;s=c[s+4>>2]|0;q=t+24|0;l=b[q>>1]|0;if(l<<16>>16){na=t+16|0;i=c[na>>2]|0;b[q>>1]=l+-1<<16>>16;c[na>>2]=i+16;if(!i){l=m;q=pa;o=qa;i=K;break d}}else{o=c[t+4>>2]|0;na:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))oa=2933;else{l=m;q=pa;o=qa;i=K;break d}else{do if((e[o+276>>1]|0)>=1016){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break na}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break na}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;oa=2933}while(0);if((oa|0)==2933){oa=0;i=_d(o,1016,0)|0}if(!i){l=m;q=pa;o=qa;i=K;break d}c[i>>2]=c[t>>2];c[t>>2]=i;b[q>>1]=62;c[t+16>>2]=i+24;i=i+8|0}l=i;c[l>>2]=r;c[l+4>>2]=s;c[i+8>>2]=0;l=t+12|0;o=c[l>>2]|0;if(!o)c[t+8>>2]=i;else{na=o;ma=c[na+4>>2]|0;if(!((ma|0)<(s|0)|((ma|0)==(s|0)?(c[na>>2]|0)>>>0<r>>>0:0))){na=t+26|0;b[na>>1]=b[na>>1]&-2}c[o+8>>2]=i}c[l>>2]=i;l=m;q=pa;o=qa;i=K;break}case 45:{z=c[p+16>>2]|0;s=c[p+12>>2]|0;t=pa+(s*40|0)|0;if(b[p+2>>1]|0?(rd=c[z+20>>2]|0,od=c[nc>>2]|0,od|0):0){i=od;do{if((c[i+28>>2]|0)==(rd|0)){l=m;q=pa;o=qa;i=K;break d}i=c[i+4>>2]|0}while((i|0)!=0)}if((c[La>>2]|0)>=(c[Ma>>2]|0)){oa=2968;break c}o=pa+(s*40|0)+8|0;if(!(b[o>>1]&16)){q=z+12|0;r=c[q>>2]|0;w=r+(c[z+8>>2]|0)+((r|0)==0&1)|0;y=z+4|0;r=(r<<2)+80+(((c[y>>2]|0)+7|0)/8|0)+(w*40|0)|0;l=((r|0)<0)<<31>>31;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=2958;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<l>>>0|(0==(l|0)?(e[Xc>>1]|0)>>>0<r>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;x=i;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;x=i;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=2958}while(0);if((oa|0)==2958)x=_d(Cf,r,l)|0;if(!x){l=p;j=h;i=zf;oa=3892;break a}gw(x|0,0,r|0)|0;if(!((b[o>>1]&9216)==0?!(c[pa+(s*40|0)+24>>2]|0):0))Cg(t);b[o>>1]=1040;c[pa+(s*40|0)+16>>2]=x;c[pa+(s*40|0)+12>>2]=r;c[pa+(s*40|0)+36>>2]=93;c[x>>2]=f;c[x+60>>2]=w;r=c[q>>2]|0;c[x+64>>2]=r;c[x+48>>2]=(p-m|0)/20|0;c[x+16>>2]=c[xd>>2];c[x+56>>2]=c[va>>2];c[x+20>>2]=c[oc>>2];c[x+44>>2]=c[Ib>>2];c[x+8>>2]=c[le>>2];c[x+52>>2]=c[wb>>2];c[x+28>>2]=c[z+20>>2];m=x+80|0;l=m+(w*40|0)|0;if((l|0)==(m|0)){o=x;p=m;q=m;m=y;l=x;i=r}else{i=m;do{b[i+8>>1]=128;c[i+32>>2]=Cf;i=i+40|0}while((i|0)!=(l|0));o=x;p=m;q=m;m=y;l=x;i=r}}else{l=c[pa+(s*40|0)+16>>2]|0;q=l+80|0;o=l;p=q;m=z+4|0;i=c[z+12>>2]|0}c[La>>2]=(c[La>>2]|0)+1;c[o+4>>2]=c[nc>>2];na=zb;pa=c[na+4>>2]|0;oa=o+32|0;c[oa>>2]=c[na>>2];c[oa+4>>2]=pa;c[o+68>>2]=c[rc>>2];c[o+72>>2]=c[(c[f>>2]|0)+100>>2];c[o+40>>2]=c[Hb>>2];c[Hb>>2]=0;c[rc>>2]=0;c[nc>>2]=l;c[xd>>2]=p;p=c[o+60>>2]|0;c[va>>2]=p;c[Ib>>2]=c[o+64>>2]&65535;p=q+(p*40|0)|0;c[oc>>2]=p;p=p+(i<<2)|0;c[o+24>>2]=p;gw(p|0,0,((c[m>>2]|0)+7|0)/8|0|0)|0;p=c[z>>2]|0;c[le>>2]=p;c[wb>>2]=c[m>>2];l=p;p=p+-20|0;o=q;i=K;oa=21;break}case -107:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=c[nc>>2]|0;l=c[o+16>>2]|0;o=(c[(c[o+8>>2]|0)+((c[o+48>>2]|0)*20|0)+4>>2]|0)+(c[p+4>>2]|0)|0;q=l+(o*40|0)|0;r=i+8|0;if(b[r>>1]&9216){mh(i,q,4096);l=m;q=pa;o=qa;i=K;break d};c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];c[i+12>>2]=c[q+12>>2];c[i+16>>2]=c[q+16>>2];if(!(b[l+(o*40|0)+8>>1]&2048)){b[r>>1]=b[r>>1]&-7169|4096;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case -106:{if(!((c[Sc>>2]&524288|0)==0&0==0)){o=c[p+8>>2]|0;q=Na;o=Sv(c[q>>2]|0,c[q+4>>2]|0,o|0,((o|0)<0)<<31>>31|0)|0;q=L()|0;l=Na;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}i=c[p+8>>2]|0;l=((i|0)<0)<<31>>31;if(!(c[p+4>>2]|0)){o=Oa;o=Sv(c[o>>2]|0,c[o+4>>2]|0,i|0,l|0)|0;q=L()|0;l=Oa;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}else{o=Pa;o=Sv(c[o>>2]|0,c[o+4>>2]|0,i|0,l|0)|0;q=L()|0;l=Pa;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}}case 46:if(!(c[p+4>>2]|0)){na=Oa;if(!((c[na>>2]|0)==0&(c[na+4>>2]|0)==0)){l=m;q=pa;o=qa;i=K;break d}na=Na;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}else{na=Pa;if(!((c[na>>2]|0)==0&(c[na+4>>2]|0)==0)){l=m;q=pa;o=qa;i=K;break d}na=Na;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}case -105:{i=c[nc>>2]|0;if(!i)l=pa;else{while(1){l=c[i+4>>2]|0;if(!l)break;else i=l}l=c[i+16>>2]|0}o=c[p+4>>2]|0;t=l+(o*40|0)|0;r=l+(o*40|0)+8|0;i=b[r>>1]|0;q=i&65535;do if(!(q&4)){if(q&8|0){l=Mg(+g[t>>3])|0;o=L()|0;break}if(!(q&18)){l=0;o=0}else{l=Ng(a[l+(o*40|0)+10>>0]|0,c[l+(o*40|0)+12>>2]|0,c[l+(o*40|0)+16>>2]|0)|0;o=L()|0;i=b[r>>1]|0}}else{o=t;l=c[o>>2]|0;o=c[o+4>>2]|0}while(0);s=t;c[s>>2]=l;c[s+4>>2]=o;b[r>>1]=i&15904|4;i=c[p+8>>2]|0;r=pa+(i*40|0)|0;s=pa+(i*40|0)+8|0;q=b[s>>1]|0;l=q&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[r>>3])|0;o=L()|0;i=q;break}if(!(l&18)){l=0;o=0;i=q}else{l=Ng(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)|0;o=L()|0;i=b[s>>1]|0}}else{o=r;l=c[o>>2]|0;o=c[o+4>>2]|0;i=q}while(0);na=r;c[na>>2]=l;c[na+4>>2]=o;b[s>>1]=i&15904|4;na=t;ma=c[na+4>>2]|0;if((ma|0)<(o|0)|((ma|0)==(o|0)?(c[na>>2]|0)>>>0<l>>>0:0)){q=t;c[q>>2]=l;c[q+4>>2]=o;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 47:{i=pa+((c[p+4>>2]|0)*40|0)|0;o=i;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[p+12>>2]|0;na=Tv(l|0,o|0,na|0,((na|0)<0)<<31>>31|0)|0;oa=L()|0;c[i>>2]=na;c[i+4>>2]=oa;i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case -104:{o=c[p+4>>2]|0;q=c[p+12>>2]|0;na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=pa+(o*40|0)|0;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((o|0)<0|(o|0)==0&l>>>0<1)?(ud=pa+(q*40|0)|0,td=c[ud>>2]|0,ud=c[ud+4>>2]|0,na=(ud|0)>0|(ud|0)==0&td>>>0>0,td=na?td:0,ud=na?ud:0,na=Tv(-1,2147483647,l|0,o|0)|0,ma=L()|0,!(((ud|0)>-1|(ud|0)==-1&td>>>0>4294967295)&((ma|0)<(ud|0)|(ma|0)==(ud|0)&na>>>0<td>>>0))):0){o=Sv(td|0,ud|0,l|0,o|0)|0;q=L()|0;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}l=i;c[l>>2]=-1;c[l+4>>2]=-1;l=m;q=pa;o=qa;i=K;break}case 48:{i=pa+((c[p+4>>2]|0)*40|0)|0;o=i;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((l|0)==0&(o|0)==0))if((o|0)>0|(o|0)==0&l>>>0>0){na=Sv(l|0,o|0,-1,-1)|0;oa=L()|0;c[i>>2]=na;c[i+4>>2]=oa;i=K;oa=28}else{i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 49:{i=pa+((c[p+4>>2]|0)*40|0)|0;na=i;ma=c[na>>2]|0;na=c[na+4>>2]|0;l=Sv(ma|0,na|0,-1,-1)|0;o=L()|0;if(!((ma|0)==0&(na|0)==-2147483648)?(na=i,c[na>>2]=l,c[na+4>>2]=o,(l|0)==0&(o|0)==0):0){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case -102:case -103:{o=b[p+2>>1]|0;q=o&65535;l=(q<<2)+68|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=3026;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<l>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=3026}while(0);if((oa|0)==3026)i=_d(Cf,l,0)|0;if(!i){l=p;j=h;i=zf;oa=3892;break a}c[i+8>>2]=0;s=i+28+(q<<2)|0;c[i>>2]=s;b[s+8>>1]=1;c[s+32>>2]=Cf;c[s+24>>2]=0;s=p+16|0;c[i+4>>2]=c[s>>2];c[i+16>>2]=(p-m|0)/20|0;c[i+12>>2]=f;a[i+24>>0]=0;c[i+20>>2]=0;a[i+25>>0]=o;a[p+1>>0]=-16;c[s>>2]=i;a[p>>0]=-101;s=i;oa=3029;break}case -101:{s=c[p+16>>2]|0;oa=3029;break}case -99:case -100:{o=c[p+4>>2]|0;r=pa+(o*40|0)|0;q=p+12|0;i=c[q>>2]|0;if(!i){l=c[p+16>>2]|0;c[Qa>>2]=0;c[Qa+4>>2]=0;c[Qa+8>>2]=0;c[Qa+12>>2]=0;c[Qa+16>>2]=0;ea=Hd;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));b[Sa>>1]=1;i=pa+(o*40|0)+32|0;c[Ta>>2]=c[i>>2];c[rf>>2]=Hd;c[Ua>>2]=r;c[Va>>2]=l;ab[c[l+20>>2]&127](rf);do if((c[pa+(o*40|0)+24>>2]|0)>0){l=c[i>>2]|0;i=c[pa+(o*40|0)+20>>2]|0;if(l|0){if(c[l+480>>2]|0){Xd(l,i);break}na=i;if((c[l+304>>2]|0)>>>0<=na>>>0?(c[l+308>>2]|0)>>>0>na>>>0:0){na=l+300|0;c[i>>2]=c[na>>2];c[na>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=r;l=Hd;fa=ea+40|0;do{c[ea>>2]=c[l>>2];ea=ea+4|0;l=l+4|0}while((ea|0)<(fa|0));o=r;l=c[rb>>2]|0}else{l=pa+(i*40|0)|0;o=c[p+16>>2]|0;c[rf>>2]=0;c[rf+4>>2]=0;c[rf+8>>2]=0;c[rf+12>>2]=0;c[rf+16>>2]=0;c[rf+20>>2]=0;c[rf+24>>2]=0;c[rf+28>>2]=0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(l);c[rf>>2]=l;c[tb>>2]=r;c[ub>>2]=o;ab[c[o+24>>2]&127](rf);o=pa+((c[q>>2]|0)*40|0)|0;l=c[vb>>2]|0}if(l|0){oa=3073;break c}l=o+8|0;i=b[l>>1]|0;if((i&2)!=0?(a[o+10>>0]|0)!=sd<<24>>24:0){Ig(o,sd)|0;i=b[l>>1]|0}l=i&65535;if(l&18){i=c[o+12>>2]|0;if(l&16384)i=(c[o>>2]|0)+i|0;if((i|0)>(c[(c[o+32>>2]|0)+108>>2]|0)){oa=3891;break c}else{l=m;q=pa;o=qa;i=0}}else{l=m;q=pa;o=qa;i=0}break}case 6:{c[rf>>2]=0;c[Tc>>2]=-1;c[Uc>>2]=-1;i=Nd(Cf,c[p+4>>2]|0,c[p+8>>2]|0,Uc,Tc)|0;switch(i|0){case 0:{l=c[rf>>2]|0;break}case 5:{c[rf>>2]=1;l=1;break}default:{oa=3094;break c}}q=c[p+12>>2]|0;i=pa+(q*40|0)|0;o=((l|0)<0)<<31>>31;q=pa+(q*40|0)+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);i=i+40|0;l=c[Uc>>2]|0;o=((l|0)<0)<<31>>31;q=i+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);i=i+40|0;l=c[Tc>>2]|0;o=((l|0)<0)<<31>>31;q=i+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);l=m;q=pa;o=qa;i=0;break}case 7:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;B=i}else{lh(i)|0;B=i}i=c[p+12>>2]|0;x=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;s=x+4|0;z=c[c[s>>2]>>2]|0;o=a[z+5>>0]|0;A=o&255;i=(i|0)==-1?A:i;if((d[z+16>>0]|0)<=2){if((c[c[z+64>>2]>>2]|0)!=0?(na=z+72|0,ma=c[na+4>>2]|0,(ma|0)>0|(ma|0)==0&(c[na>>2]|0)>>>0>0):0)oa=3101}else oa=3101;if((oa|0)==3101){oa=0;i=A}if(!(a[z+15>>0]|0))l=c[z+168>>2]|0;else l=59952;if((i|0)==5)if(((l|0)!=0?((Eu(l)|0)&1073741823|0)!=0:0)?(wd=c[c[z+60>>2]>>2]|0,(a[z+13>>0]|0)==0):0)if(!(a[z+4>>0]|0))if((c[wd>>2]|0)>1?(c[wd+52>>2]|0)!=0:0){y=5;oa=3111}else{l=A;i=K}else{y=5;oa=3111}else{l=A;i=K}else{y=i;oa=3111}oa:do if((oa|0)==3111){oa=0;if((y|0)!=(A|0)){i=o<<24>>24==5;w=(y|0)==5;if(i|w){if(!(a[gd>>0]|0)){oa=3115;break c}if((c[Ha>>2]|0)>1){oa=3115;break c}if(!i){if(o<<24>>24==4)jh(z,2)|0;if(K|0){l=y;i=K;break}}else{o=z+216|0;i=c[o>>2]|0;if(!i){c[rf>>2]=0;l=z+17|0;i=a[l>>0]|0;pa:do switch(i<<24>>24){case 0:case 5:{do if(!(a[z+13>>0]|0)){i=c[z+60>>2]|0;i=Xa[c[(c[i>>2]|0)+28>>2]&255](i,1)|0;if(!i){i=a[l>>0]|0;break}else{l=y;break oa}}while(0);if(i<<24>>24==5)break pa;a[l>>0]=1;break}default:{}}while(0);i=c[z>>2]|0;i=Za[c[i+32>>2]&127](i,c[z+220>>2]|0,0,rf)|0;if((i|0)==0&(c[rf>>2]|0)!=0)i=Uf(z)|0;if(i|0){l=y;break}i=c[o>>2]|0;if(i|0){r=l;oa=3130}}else{r=z+17|0;oa=3130}do if((oa|0)==3130){oa=0;switch(a[r>>0]|0){case 0:case 1:case 2:case 3:case 5:{q=z+13|0;do if(!(a[q>>0]|0)){l=z+60|0;i=c[l>>2]|0;i=Xa[c[(c[i>>2]|0)+28>>2]&255](i,4)|0;if(!i){i=c[o>>2]|0;break}l=c[l>>2]|0;o=c[l>>2]|0;if(!o){l=y;break oa}if(!(a[q>>0]|0))Xa[c[o+32>>2]&255](l,1)|0;if((a[r>>0]|0)==5){l=y;break oa}a[r>>0]=1;l=y;break oa}while(0);a[r>>0]=4;break}default:{}}i=Pf(i,Cf,d[z+11>>0]|0,c[z+152>>2]|0,c[z+208>>2]|0)|0;c[o>>2]=0;if(!i)break;if(a[z+4>>0]|0){l=y;break oa}l=c[z+60>>2]|0;o=c[l>>2]|0;if(!o){l=y;break oa}if(!(a[z+13>>0]|0))Xa[c[o+32>>2]&255](l,1)|0;if((a[r>>0]|0)==5){l=y;break oa}a[r>>0]=1;l=y;break oa}while(0);jh(z,y)|0}l=c[s>>2]|0;t=l+22|0;i=b[t>>1]|0;b[t>>1]=w?i&-33:i|32;i=Zb(x,0,0)|0;qa:do if(!i){l=l+12|0;r=c[(c[l>>2]|0)+56>>2]|0;s=r+18|0;na=a[s>>0]|0;q=w?2:1;if(na<<24>>24==q<<24>>24?(a[r+19>>0]|0)==na<<24>>24:0){i=0;break}i=Zb(x,2,0)|0;if(i|0)break;l=c[(c[l>>2]|0)+72>>2]|0;o=c[l+20>>2]|0;do if(!(b[l+28>>1]&4))oa=3159;else{if((c[o+24>>2]|0)>>>0<(c[l+24>>2]|0)>>>0){oa=3159;break}if(!(c[o+96>>2]|0))break;id=Ve(l)|0;oa=3163}while(0);do if((oa|0)==3159){oa=0;i=c[o+40>>2]|0;if(i|0)break qa;if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){id=Wf(l)|0;oa=3163;break}else{id=Xf(l)|0;oa=3163;break}}while(0);if((oa|0)==3163?(oa=0,id|0):0){i=id;break}a[s>>0]=q;a[r+19>>0]=q;i=0}while(0);b[t>>1]=b[t>>1]&-33;l=y}else{l=y;i=K}}else{l=A;i=K}}while(0);o=(i|0)!=0;l=jh(z,o?A:l)|0;b[B+8>>1]=2562;if((l|0)==6){c[B+16>>2]=0;l=0}else{l=c[3664+(l<<2)>>2]|0;c[B+16>>2]=l;l=(Eu(l)|0)&1073741823}c[B+12>>2]=l;a[B+10>>0]=1;if(!hb)Ig(B,sd)|0;if(o){oa=3855;break c}else{l=m;q=pa;o=qa;i=0}break}case 8:{i=c[p+8>>2]|0;i=kh(mf,Cf,c[p+4>>2]|0,(i|0)==0?0:pa+(i*40|0)|0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 59:{na=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;w=c[na+4>>2]|0;c[w+4>>2]=c[na>>2];if(a[w+17>>0]|0){x=w+44|0;t=c[x>>2]|0;y=w+12|0;r=c[(c[y>>2]|0)+56>>2]|0;r=d[r+37>>0]<<16|d[r+36>>0]<<24|d[r+38>>0]<<8|d[r+39>>0];l=((c[w+36>>2]|0)>>>0)/5|0;if(t>>>0<2){i=0;o=1073741824/((c[w+32>>2]|0)>>>0)|0;q=l+1|0}else{q=l+1|0;i=t+-2|0;i=i-((i>>>0)%(q>>>0)|0)|0;o=1073741824/((c[w+32>>2]|0)>>>0)|0;i=((i+1|0)==(o|0)?3:2)+i|0}s=t-r-(((l-t+r+i|0)>>>0)/(l>>>0)|0)|0;l=o+1|0;s=s+((l>>>0<t>>>0&s>>>0<l>>>0)<<31>>31)|0;while(1){if(s>>>0<2)i=0;else{i=s+-2|0;i=i-((i>>>0)%(q>>>0)|0)|0;i=((i+1|0)==(o|0)?3:2)+i|0}if((s|0)==(l|0)|(i|0)==(s|0))s=s+-1|0;else break}if(t>>>0<s>>>0){oa=3182;break c}if(r){l=w+8|0;i=c[l>>2]|0;if(i){i=$f(i,0,0)|0;if(!i){i=c[l>>2]|0;if(!i)oa=3189;else{do{oa=i+1|0;a[oa>>0]=a[oa>>0]&-5;i=c[i+24>>2]|0}while((i|0)!=0);oa=3189}}}else oa=3189;if((oa|0)==3189){oa=0;i=_f(w,s,t,0)|0;if(!i){l=c[(c[y>>2]|0)+72>>2]|0;o=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[o+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[o+96>>2]|0))i=0;else i=Ve(l)|0;else oa=3194;do if((oa|0)==3194){oa=0;i=c[o+40>>2]|0;if(!i)if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){i=Wf(l)|0;break}else{i=Xf(l)|0;break}}while(0);na=c[(c[y>>2]|0)+56>>2]|0;ma=c[x>>2]|0;a[na+28>>0]=ma>>>24;a[na+29>>0]=ma>>>16;a[na+30>>0]=ma>>>8;a[na+31>>0]=ma}}switch(i|0){case 101:{i=0;oa=28;break}case 0:{l=m;q=pa;o=qa;break}default:{oa=3855;break c}}}else{i=0;oa=28}}else{i=0;oa=28}break}case -98:{l=c[p+8>>2]|0;if(c[p+4>>2]|0){l=(d[vf>>0]|d[vf+1>>0]<<8)&-4|l+1&3;a[vf>>0]=l;a[vf+1>>0]=l>>8;l=m;q=pa;o=qa;i=K;break d}i=c[$a>>2]|0;if(!i){l=m;q=pa;o=qa;i=K}else{l=l+1&3;do{na=i+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|l;a[na>>0]=ma;a[na+1>>0]=ma>>8;i=c[i+8>>2]|0}while((i|0)!=0);l=m;q=pa;o=qa;i=K}break}case -97:{i=c[p+12>>2]|0;if((i&255|0)==0?!((c[Sc>>2]&1024|0)==0&0==0):0){l=m;q=pa;o=qa;i=K;break d}r=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;s=c[p+8>>2]|0;if(a[r+9>>0]|0){t=i+1&255;o=c[r+4>>2]|0;c[o+4>>2]=c[r>>2];if((c[o+76>>2]|0)!=(r|0)?b[o+22>>1]&64:0){oa=3236;break c}q=o+72|0;i=c[q>>2]|0;ra:do if(!i)oa=3222;else{l=i;do{if(((c[l>>2]|0)!=(r|0)?(c[l+4>>2]|0)==(s|0):0)?(a[l+8>>0]|0)!=t<<24>>24:0){oa=3215;break c}l=c[l+12>>2]|0}while((l|0)!=0);while(1){if((c[i+4>>2]|0)==(s|0)?(c[i>>2]|0)==(r|0):0)break ra;i=c[i+12>>2]|0;if(!i){oa=3222;break}}}while(0);if((oa|0)==3222){oa=0;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;if(!i){i=7;oa=3855;break c}}else{i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=7;oa=3855;break c}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}na=i+8|0;a[na>>0]=0;a[na+1>>0]=0;a[na+2>>0]=0;a[na+3>>0]=0;c[i+4>>2]=s;c[i>>2]=r;c[i+12>>2]=c[q>>2];c[q>>2]=i}i=i+8|0;if((d[i>>0]|0)<(t&255)){a[i>>0]=t;l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}}else{l=m;q=pa;o=qa;i=0}break}case -96:{x=c[p+16>>2]|0;s=c[Vc>>2]|0;q=(s|0)>0;if(q?(c[db>>2]|0)==0:0){i=6;oa=3268}else oa=3239;sa:do if((oa|0)==3239){oa=0;if(!x){l=m;q=pa;o=qa;i=0;break d}l=x+8|0;i=c[l>>2]|0;w=c[i>>2]|0;t=w+56|0;o=c[t>>2]|0;if(o){if(q){r=c[db>>2]|0;q=0;do{if((c[r+(q<<2)>>2]|0)==(x|0)){i=0;oa=3268;break sa}q=q+1|0}while((q|0)<(s|0))}if(!((s|0)%5|0)){o=cw(s|0,((s|0)<0)<<31>>31|0,2)|0;o=Sv(o|0,L()|0,20,0)|0;q=L()|0;i=c[db>>2]|0;ta:do if(!i){if(c[$c>>2]|0){if(a[zf>>0]|0){i=7;oa=3268;break sa}}else{do if(q>>>0>0|((q|0)==0?o>>>0>(e[Xc>>1]|0)>>>0:0))i=Yc;else{i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3261;break ta}i=c[cd>>2]|0;if(!i){i=fd;break}c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3261;break ta}while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(Cf,o,q)|0;oa=3261}else{na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){if(!(q>>>0>0|((q|0)==0?o>>>0>(e[Xc>>1]|0)>>>0:0))){o=s;break}i=Zd(Cf,i,o,q)|0;oa=3261;break}i=Zd(Cf,i,o,q)|0;oa=3261}while(0);if((oa|0)==3261){if(!i){i=7;oa=3268;break}o=c[Vc>>2]|0}o=i+(o<<2)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[db>>2]=i;o=c[t>>2]|0;i=c[l>>2]|0}i=Wa[o&127](i)|0;if(!i){i=(c[Gd>>2]|0)+(c[Fd>>2]|0)|0;na=c[db>>2]|0;oa=c[Vc>>2]|0;c[Vc>>2]=oa+1;c[na+(oa<<2)>>2]=x;oa=x+12|0;c[oa>>2]=(c[oa>>2]|0)+1;if((i|0)!=0?(yd=c[w+80>>2]|0,(yd|0)!=0):0){c[x+20>>2]=i;i=Xa[yd&255](c[l>>2]|0,i+-1|0)|0;oa=3270}else{i=0;oa=3270}}else oa=3268}else{i=0;oa=3270}}while(0);if((oa|0)==3268){oa=0;if(x){l=x+8|0;oa=3270}}if((oa|0)==3270){oa=0;t=(c[l>>2]|0)+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;ua:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;va:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break ua}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3306;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break ua}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break ua}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3306;break va}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3306;break va}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3306}while(0);if((oa|0)==3306){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -95:{ea=rf;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));c[Wc>>2]=Cf;na=c[p+8>>2]|0;i=pa+(na*40|0)|0;c[rf>>2]=c[i>>2];c[rf+4>>2]=c[i+4>>2];c[rf+8>>2]=c[i+8>>2];c[rf+12>>2]=c[i+12>>2];c[rf+16>>2]=c[i+16>>2];i=b[sa>>1]&-1025;b[sa>>1]=i;i=i&65535;wa:do if((i&18|0)!=0?(b[pa+(na*40|0)+8>>1]&2048)==0:0){l=(i|4096)&65535;b[sa>>1]=l;do if(i&16384){i=(c[rf>>2]|0)+(c[Xb>>2]|0)|0;if((i|0)<1)if(!(l&16)){oa=3322;break}else i=1;if(Eg(rf,i,1)|0){i=7;break wa}gw((c[Ob>>2]|0)+(c[Xb>>2]|0)|0,0,c[rf>>2]|0)|0;c[Xb>>2]=(c[Xb>>2]|0)+(c[rf>>2]|0);i=b[sa>>1]&-16897;b[sa>>1]=i;if(!((c[Qb>>2]|0)!=0?(c[Ob>>2]|0)==(c[ec>>2]|0):0))oa=3322}else oa=3322;while(0);if((oa|0)==3322){oa=0;i=Jg(rf)|0;if(i|0)break;i=b[sa>>1]|0}b[sa>>1]=i&-4097;i=0}else i=0;while(0);l=b[sa>>1]|0;if(!((l&514)==514&(a[Jb>>0]|0)==1)){if(!(l&1)){l=Gg(rf,1)|0;oa=3329}}else{l=c[Ob>>2]|0;oa=3329}xa:do if((oa|0)==3329){oa=0;if(l){w=Sd(Cf,l,c[(c[uf>>2]|0)+(c[p+4>>2]<<4)>>2]|0)|0;t=c[c[w+60>>2]>>2]|0;q=c[Pb>>2]|0;if(!q){l=Wb;i=Vb}else{l=a[t>>0]|0;if(!(l<<24>>24))i=0;else{i=0;o=t;do{o=o+1|0;i=G(i+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[o>>0]|0}while(l<<24>>24!=0)}i=(i>>>0)%((c[dc>>2]|0)>>>0)|0;l=q+(i<<3)|0;i=q+(i<<3)+4|0}l=c[l>>2]|0;ya:do if(!l)i=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;l=l+-1|0;q=c[i+12>>2]|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-s|0;if(!(na<<24>>24==0|(o|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(o|0)!=0))}if(!o)break ya;if(!l){i=59292;break}}}while(0);i=c[i+8>>2]|0;if((i|0?(zd=c[i>>2]|0,Ad=c[zd+4>>2]|0,Ad|0):0)?c[zd+20>>2]|0:0){i=Ai(Cf,w,i,Ad,mf)|0;if(i|0)break;s=w+64|0;i=c[s>>2]|0;if(!i){i=0;break}l=i;while(1){if((c[l>>2]|0)==(Cf|0))break;l=c[l+24>>2]|0;if(!l){i=0;break xa}}l=c[Vc>>2]|0;if(!((l|0)%5|0)){q=cw(l|0,((l|0)<0)<<31>>31|0,2)|0;q=Sv(q|0,L()|0,20,0)|0;r=L()|0;i=c[db>>2]|0;za:do if(!i){if(c[$c>>2]|0){if(a[zf>>0]|0){i=7;break xa}}else{do if(r>>>0>0|((r|0)==0?q>>>0>(e[Xc>>1]|0)>>>0:0))i=Yc;else{i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3367;break za}i=c[cd>>2]|0;if(!i){i=fd;break}c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3367;break za}while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(Cf,q,r)|0;oa=3367}else{o=i;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;if(!(r>>>0>0|((r|0)==0?q>>>0>(e[Xc>>1]|0)>>>0:0)))break za;i=Zd(Cf,i,q,r)|0;oa=3367;break za}while(0);i=Zd(Cf,i,q,r)|0;oa=3367}while(0);if((oa|0)==3367){oa=0;if(!i){i=7;break}l=c[Vc>>2]|0}na=i+(l<<2)|0;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;c[db>>2]=i;i=c[s>>2]|0}Aa:do if(!i)i=0;else while(1){if((c[i>>2]|0)==(Cf|0))break Aa;i=c[i+24>>2]|0;if(!i){i=0;break}}while(0);ma=c[db>>2]|0;na=c[Vc>>2]|0;c[Vc>>2]=na+1;c[ma+(na<<2)>>2]=i;i=i+12|0;c[i>>2]=(c[i>>2]|0)+1;i=0;break}c[we>>2]=t;i=dd(Cf,36690,we)|0;c[mf>>2]=i;i=1}}while(0);if(!((b[sa>>1]&9216)==0&(c[Qb>>2]|0)==0))Cg(rf);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -94:{i=(c[ad>>2]|0)+1|0;c[ad>>2]=i;l=Sd(Cf,c[p+16>>2]|0,c[(c[uf>>2]|0)+(c[p+4>>2]<<4)>>2]|0)|0;do if(l|0?(Bd=l+64|0,Cd=c[Bd>>2]|0,Cd|0):0){l=Cd;do{if((c[(c[l+8>>2]|0)+4>>2]|0)>0){j=6;oa=3401;break c}l=c[l+24>>2]|0}while((l|0)!=0);c[Bd>>2]=0;r=Cd;l=0;while(1){o=c[r>>2]|0;q=r+24|0;i=r;r=c[q>>2]|0;if((o|0)==(Cf|0)){c[Bd>>2]=i;c[q>>2]=0;o=i}else{o=o+360|0;c[q>>2]=c[o>>2];c[o>>2]=i;o=l}if(!r)break;else l=o}i=o+8|0;l=Wa[c[(c[c[o+4>>2]>>2]|0)+20>>2]&127](c[i>>2]|0)|0;if(l|0){oa=3400;break c}c[i>>2]=0;c[Bd>>2]=0;i=c[o>>2]|0;ma=o+12|0;na=(c[ma>>2]|0)+-1|0;c[ma>>2]=na;if(!na){if(i|0){if(c[i+480>>2]|0){Xd(i,o);break}na=o;if((c[i+304>>2]|0)>>>0<=na>>>0?(c[i+308>>2]|0)>>>0>na>>>0:0){na=i+300|0;c[o>>2]=c[na>>2];c[na>>2]=o;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}}while(0);c[ad>>2]=(c[ad>>2]|0)+-1;l=m;q=pa;o=qa;i=0;break}case -93:{c[rf>>2]=0;w=c[(c[p+16>>2]|0)+8>>2]|0;if(!w){i=6;oa=3458;break c}x=c[w>>2]|0;if(!x){i=6;oa=3458;break c}i=Xa[c[x+24>>2]&255](w,rf)|0;t=w+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Ba:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ca:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ba}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3440;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ba}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ba}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3440;break Ca}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3440;break Ca}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3440}while(0);if((oa|0)==3440){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=3458;break c}c[c[rf>>2]>>2]=w;o=c[p+4>>2]|0;i=c[xd>>2]|0;if((o|0)>0)i=i+(((c[va>>2]|0)-o|0)*40|0)|0;l=c[(c[oc>>2]|0)+(o<<2)>>2]|0;if(l|0){na=l+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(o<<2)>>2]|0);c[(c[oc>>2]|0)+(o<<2)>>2]=0}if((c[i+24>>2]|0)<96){if(Eg(i,96,0)|0){oa=3459;break c}i=c[i+16>>2]|0}else{na=c[i+20>>2]|0;c[i+16>>2]=na;i=i+8|0;b[i>>1]=b[i>>1]&13;i=na}c[(c[oc>>2]|0)+(o<<2)>>2]=i;ea=i;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=2;a[i+1>>0]=-1;b[i+56>>1]=0;c[i+72>>2]=i+88;if(!i){oa=3459;break c}c[i+40>>2]=c[rf>>2];l=w+4|0;c[l>>2]=(c[l>>2]|0)+1;l=m;q=pa;o=qa;i=0;break}case 9:{q=pa+((c[p+12>>2]|0)*40|0)|0;l=q+40|0;w=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=c[w+40>>2]|0;s=c[x>>2]|0;y=c[s>>2]|0;o=c[l>>2]|0;q=c[q>>2]|0;r=c[ta>>2]|0;if((o|0)>0){i=0;do{na=i;i=i+1|0;c[r+(na<<2)>>2]=l+(i*40|0)}while((i|0)!=(o|0))}i=_a[c[y+32>>2]&127](x,q,c[p+16>>2]|0,o,r)|0;t=s+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Da:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ea:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Da}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3499;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Da}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Da}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3499;break Ea}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3499;break Ea}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3499}while(0);if((oa|0)==3499){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=3855;break c}na=Wa[c[y+40>>2]&127](x)|0;a[w+2>>0]=0;if(!na){l=m;q=pa;o=qa;i=0}else{i=0;oa=28}break}case -92:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=c[p+12>>2]|0;y=pa+(x*40|0)|0;if(a[i+2>>0]|0){i=pa+(x*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(y);l=m;q=pa;o=qa;i=K;break d}i=i+40|0;q=c[c[i>>2]>>2]|0;l=c[q>>2]|0;c[kc>>2]=0;c[kc+4>>2]=0;c[kc+8>>2]=0;c[kc+12>>2]=0;c[kc+16>>2]=0;c[kc+20>>2]=0;c[kc+24>>2]=0;c[rf>>2]=y;w=pa+(x*40|0)+8|0;o=b[w>>1]|0;if(!(b[p+2>>1]&1))b[w>>1]=o&15904|1;else{if(!(o&9216))b[w>>1]=1;else Dg(y);b[w>>1]=16385;c[y>>2]=0}i=Ya[c[l+44>>2]&127](c[i>>2]|0,rf,c[p+8>>2]|0)|0;t=q+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Fa:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ga:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Fa}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3554;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Fa}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Fa}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3554;break Ga}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3554;break Ga}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3554}while(0);if((oa|0)==3554){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if((c[Kb>>2]|0)>0){i=b[w>>1]|0;if((i&514)==514?(a[pa+(x*40|0)+10>>0]|0)==1:0)i=c[pa+(x*40|0)+16>>2]|0;else if(!(i&1))i=Gg(y,1)|0;else i=0;c[xe>>2]=i;Ag(f,31408,xe);i=c[Kb>>2]|0}l=b[w>>1]|0;if((l&2)!=0?(a[pa+(x*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(y,sd)|0;l=b[w>>1]|0}o=l&65535;if(o&18){l=c[pa+(x*40|0)+12>>2]|0;if(o&16384)l=(c[y>>2]|0)+l|0;if((l|0)>(c[(c[pa+(x*40|0)+32>>2]|0)+108>>2]|0)){oa=3576;break c}else l=(i|0)==0?7:12}else l=(i|0)==0?7:12;switch(l&15){case 12:{oa=3855;break c}case 15:{oa=3891;break c}case 7:{l=m;q=pa;o=qa;break}default:{h=0;oa=3900;break c}}break}case 60:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if(!(a[i+2>>0]|0)){t=i+40|0;i=c[t>>2]|0;x=c[i>>2]|0;w=c[x>>2]|0;i=Wa[c[w+36>>2]&127](i)|0;x=x+8|0;if(c[x>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[x>>2]|0;Ha:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ia:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ha}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3616;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ha}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ha}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3616;break Ia}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3616;break Ia}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3616}while(0);if((oa|0)==3616)if(!l){l=0;break}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[x>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[x>>2]=0}if(i|0){oa=3855;break c}if(!(Wa[c[w+40>>2]&127](c[t>>2]|0)|0)){i=0;oa=20}else{l=m;o=pa;i=0;oa=21}}else{l=m;q=pa;o=qa;i=K}break}case -91:{i=Sc;o=c[i>>2]|0;i=c[i+4>>2]|0;q=Sc;c[q>>2]=o|67108864;c[q+4>>2]=i;q=c[(c[p+16>>2]|0)+8>>2]|0;i=c[p+4>>2]|0;l=pa+(i*40|0)|0;if((b[pa+(i*40|0)+8>>1]&2?(a[pa+(i*40|0)+10>>0]|0)!=1:0)?(Dd=Ig(l,1)|0,Dd|0):0){i=Dd;oa=3855;break c}i=Xa[c[(c[q>>2]|0)+76>>2]&255](q,c[pa+(i*40|0)+16>>2]|0)|0;if((o&67108864|0)==0&0==0){la=Sc;ma=c[la+4>>2]|0;na=Sc;c[na>>2]=c[la>>2]&-67108865;c[na+4>>2]=ma}t=q+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Ja:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ka:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ja}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3666;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ja}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ja}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3666;break Ka}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3666;break Ka}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3666}while(0);if((oa|0)==3666){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 10:{if(a[zf>>0]|0){i=2;j=K;break c}y=p+16|0;t=c[(c[y>>2]|0)+8>>2]|0;if(!t){i=12;j=6;break c}i=c[t>>2]|0;if(!i){i=12;j=6;break c}s=c[p+8>>2]|0;o=i+52|0;i=c[o>>2]|0;La:do if(i){r=a[Rb>>0]|0;q=c[ta>>2]|0;if((s|0)>0){i=pa+((c[p+12>>2]|0)*40|0)|0;l=0;while(1){c[q+(l<<2)>>2]=i;l=l+1|0;if((l|0)==(s|0))break;else i=i+40|0}i=c[o>>2]|0}w=p+2|0;a[Rb>>0]=b[w>>1];x=Za[i&127](t,s,q,rf)|0;a[Rb>>0]=r;s=t+8|0;if(c[s>>2]|0){o=c[f>>2]|0;i=c[mf>>2]|0;Ma:do if(i|0){do if(o|0){if(c[o+480>>2]|0){Xd(o,i);break Ma}l=i;if((c[o+304>>2]|0)>>>0>l>>>0)break;if((c[o+308>>2]|0)>>>0<=l>>>0)break;na=o+300|0;c[i>>2]=c[na>>2];c[na>>2]=i;break Ma}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);q=c[s>>2]|0;Na:do if(!q)i=0;else{r=(Eu(q)|0)+1|0;Oa:do if(!o){na=Sv(r|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){i=0;break Na}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](r)|0;oa=3718;break}i=Wa[c[29356>>2]&127](r)|0;if((c[14985]|0)>>>0<r>>>0)c[14985]=r;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break Na}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){i=0;break Na}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<r>>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3718;break Oa}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3718;break Oa}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,r,0)|0;oa=3718}while(0);if((oa|0)==3718){oa=0;if(!i){i=0;break}}ew(i|0,q|0,r|0)|0}while(0);c[mf>>2]=i;i=c[s>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[s>>2]=0}if(!x){if(c[p+4>>2]|0){la=rf;ma=c[la+4>>2]|0;na=zb;c[na>>2]=c[la>>2];c[na+4>>2]=ma}c[rc>>2]=(c[rc>>2]|0)+1;i=0;break}else{if((x&255|0)!=19){oa=3733;break c}if(!(a[(c[y>>2]|0)+16>>0]|0)){oa=3733;break c}i=b[w>>1]|0;switch(i<<16>>16){case 5:{i=2;oa=3732;break c}case 4:{i=0;break La}default:{oa=3731;break c}}}}else i=K;while(0);l=m;q=pa;o=qa;break}case -90:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=c[(c[(c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0)+4>>2]|0)+44>>2];c[l+4>>2]=0;l=m;q=pa;o=qa;i=K;break}case -89:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;q=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;l=c[p+12>>2]|0;o=c[q+4>>2]|0;if(!l)l=0;else{na=c[o+44>>2]|0;l=na>>>0<l>>>0?l:na}c[o+4>>2]=c[q>>2];o=(c[o>>2]|0)+156|0;if((l|0)>0)c[o>>2]=l;else l=c[o>>2]|0;q=i;c[q>>2]=l;c[q+4>>2]=((l|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 63:case 62:{o=b[p+2>>1]|0;l=((o&65535)<<2)+28|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=3758;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<l>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=3758}while(0);if((oa|0)==3758)i=_d(Cf,l,0)|0;if(!i){l=p;j=h;i=zf;oa=3892;break a}c[i>>2]=0;oa=p+16|0;c[i+4>>2]=c[oa>>2];c[i+16>>2]=(p-m|0)/20|0;c[i+12>>2]=f;c[i+20>>2]=0;a[i+25>>0]=o;a[p+1>>0]=-16;c[oa>>2]=i;a[p>>0]=(d[p>>0]|0)+2;oa=3761;break}case 65:case 64:{oa=3761;break}default:{l=m;q=pa;o=qa;i=K}}while(0);Pa:do if((oa|0)==34){oa=0;i=c[p+4>>2]|0;if(i|0){oa=39;break c}i=c[nc>>2]|0;if(!i){oa=38;break c}c[nc>>2]=c[i+4>>2];c[La>>2]=(c[La>>2]|0)+-1;m=c[rc>>2]|0;c[sc>>2]=m;c[tc>>2]=(c[tc>>2]|0)+m;i=sg(i)|0;m=c[le>>2]|0;if((c[p+8>>2]|0)==4)i=(c[m+(i*20|0)+8>>2]|0)+-1|0;l=m;q=c[xd>>2]|0;o=qa;p=m+(i*20|0)|0;i=K}else if((oa|0)==83){oa=0;na=c[xd>>2]|0;o=c[l>>2]|0;l=na+(o*40|0)|0;o=na+(o*40|0)+8|0;if(!(b[o>>1]&9216))b[o>>1]=4;else lh(l)|0;o=l+8|0;b[o>>1]=2562;c[l+16>>2]=c[p+16>>2];c[l+12>>2]=c[p+4>>2];a[l+10>>0]=sd;l=c[p+12>>2]|0;if((l|0)>0?(na=pa+(l*40|0)|0,(c[na+4>>2]|0)==0?(c[na>>2]|0)==(e[p+2>>1]|0):0):0){b[o>>1]=2576;l=m;q=pa;o=qa}else{l=m;q=pa;o=qa}}else if((oa|0)==1049){if(((d[vf>>0]|d[vf+1>>0]<<8)&3)==1){i=516;oa=3855;break c}w=c[p+8>>2]|0;A=c[p+12>>2]|0;i=c[uf>>2]|0;C=c[i+(A<<4)+4>>2]|0;l=p+2|0;q=b[l>>1]|0;if(z<<24>>24==109){o=(q&8|4)&65535;i=a[(c[i+(A<<4)+12>>2]|0)+76>>0]|0;if((i&255)<(d[pc>>0]|0)){a[pc>>0]=i;B=o}else B=o}else B=0;if(q&16){s=pa+(w*40|0)|0;t=pa+(w*40|0)+8|0;r=b[t>>1]|0;i=r&65535;do if(!(i&4)){if(i&8|0){o=Mg(+g[s>>3])|0;q=L()|0;i=r;break}if(!(i&18)){o=0;q=0;i=r}else{o=Ng(a[pa+(w*40|0)+10>>0]|0,c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0)|0;q=L()|0;i=b[t>>1]|0}}else{q=s;o=c[q>>2]|0;q=c[q+4>>2]|0;i=r}while(0);w=s;c[w>>2]=o;c[w+4>>2]=q;b[t>>1]=i&15904|4;w=o}z=p+1|0;switch(a[z>>0]|0){case -9:{y=c[p+16>>2]|0;x=e[y+8>>1]|0;break}case -3:{x=c[p+16>>2]|0;y=0;break}default:{x=0;y=0}}s=c[p+4>>2]|0;i=c[xd>>2]|0;if((s|0)>0)i=i+(((c[va>>2]|0)-s|0)*40|0)|0;o=x<<3;t=o+96|0;o=o+296|0;q=c[(c[oc>>2]|0)+(s<<2)>>2]|0;if(q|0){oa=q+5|0;a[oa>>0]=a[oa>>0]&-2;tg(f,c[(c[oc>>2]|0)+(s<<2)>>2]|0);c[(c[oc>>2]|0)+(s<<2)>>2]=0}if((c[i+24>>2]|0)<(o|0)){if(Eg(i,o,0)|0){l=p;j=h;i=zf;oa=3892;break a}o=i+16|0;r=o;o=c[o>>2]|0}else{o=c[i+20>>2]|0;r=i+16|0;c[r>>2]=o;oa=i+8|0;b[oa>>1]=b[oa>>1]&13}c[(c[oc>>2]|0)+(s<<2)>>2]=o;i=A&255;q=o+1|0;ea=o;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[q>>0]=i;b[o+56>>1]=x;c[o+72>>2]=o+88+(x<<2);oa=(c[r>>2]|0)+t|0;i=o+40|0;c[i>>2]=oa;c[oa>>2]=0;c[oa+4>>2]=0;c[oa+8>>2]=0;c[oa+12>>2]=0;c[oa+16>>2]=0;if(!o){l=p;j=h;i=zf;oa=3892;break a}a[o+2>>0]=1;oa=o+5|0;a[oa>>0]=a[oa>>0]|4;c[o+52>>2]=w;i=Vg(C,w,B,y,c[i>>2]|0)|0;c[o+44>>2]=y;a[o+4>>0]=(a[z>>0]|0)!=-9&1;oa=1074}else if((oa|0)==1216){oa=0;x=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+12>>2]|0;r=pa+(w*40|0)|0;i=c[p+16>>2]|0;if((i|0)>0){c[Hd>>2]=c[x+44>>2];b[Aa>>1]=i;c[Ba>>2]=r;s=0;r=Hd;i=z;q=0}else{o=pa+(w*40|0)+8|0;l=b[o>>1]|0;do if(l&16384){q=pa+(w*40|0)+12|0;i=(c[r>>2]|0)+(c[q>>2]|0)|0;if((i|0)<1)if(!(l&16))break;else i=1;if(Eg(r,i,1)|0){oa=1268;break c}gw((c[pa+(w*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[r>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[r>>2]|0);b[o>>1]=b[o>>1]&-16897}while(0);r=x+44|0;s=c[r>>2]|0;t=s+6|0;q=((e[t>>1]|0)*40|0)+56|0;o=c[s+12>>2]|0;Qa:do if(!o){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;oa=1246;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](o)|0;if(!l){oa=1268;break c}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){oa=1268;break c}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<q>>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1246;break Qa}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1246;break Qa}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,q,0)|0;oa=1246}while(0);if((oa|0)==1246)if(!i){oa=1268;break c}else l=i;c[l+4>>2]=l+16;c[l>>2]=s;b[l+8>>1]=(e[t>>1]|0)+1;_g(c[r>>2]|0,c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0,l);s=l;r=l;i=a[p>>0]|0;q=l}a[r+10>>0]=0;Ra:do if(i<<24>>24==27?(fe=b[r+8>>1]|0,fe<<16>>16!=0):0){l=c[r+4>>2]|0;o=fe&65535;i=0;while(1){if(b[l+(i*40|0)+8>>1]&1){o=1;break Ra}i=i+1|0;if(i>>>0>=o>>>0){o=0;break}}}else o=0;while(0);i=Xg(c[x+40>>2]|0,r,0,0,0,rf)|0;do if(s|0){if(c[Ze>>2]|0){Xd(Cf,q);break}oa=q;if((c[_e>>2]|0)>>>0<=oa>>>0?(c[$e>>2]|0)>>>0>oa>>>0:0){c[q>>2]=c[af>>2];c[af>>2]=q;break}if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{oa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);if(i|0){oa=1270;break c}i=c[rf>>2]|0;c[x+32>>2]=i;l=(i|0)==0;a[x+2>>0]=(l^1)&1;a[x+3>>0]=0;c[x+28>>2]=0;if((a[p>>0]|0)==29)if(l)oa=1269;else oa=1267;else if(!(i|o))oa=1267;else oa=1269;if((oa|0)==1267){oa=0;l=m;q=pa;o=qa;i=0;break}else if((oa|0)==1269){i=0;oa=28;break}}else if((oa|0)==1287){oa=0;la=c[i>>2]|0;ma=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[ma+40>>2]|0;c[je>>2]=0;la=pa+(la*40|0)|0;ka=c[la>>2]|0;la=c[la+4>>2]|0;i=Xg(i,0,ka,la,0,je)|0;na=ma+64|0;c[na>>2]=ka;c[na+4>>2]=la;a[ma+2>>0]=0;c[ma+28>>2]=0;a[ma+3>>0]=0;na=c[je>>2]|0;c[ma+32>>2]=na;if(!na)if(!i){l=m;q=pa;o=qa;i=0;break}else{oa=3855;break c}else if(!(c[p+8>>2]|0)){oa=1289;break c}else{oa=28;break}}else if((oa|0)==1521){oa=0;na=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;c[Yd>>2]=1;do if((a[na>>0]|0)==1){ma=c[na+40>>2]|0;if(!(a[ma+56>>0]|0)){i=ma+36|0;if(!(c[i>>2]|0)){c[Yd>>2]=1;a[na+2>>0]=1;break}else{c[Yd>>2]=0;i=Uh(ma+64|0,i)|0;oa=2142;break}}i=Vh(ma)|0;if(i|0){oa=2145;break c}la=ma+59|0;R=0;ka=0;while(1){if(ka>>>0>=(d[la>>0]|0)>>>0){oa=2138;break}ha=ma+64+(ka*72|0)|0;c[rf>>2]=0;ia=ma+64+(ka*72|0)+28|0;i=c[ia>>2]|0;l=((i|0)<0)<<31>>31;if((i|0)>16){ga=0;o=16;q=0;while(1){o=cw(o|0,q|0,4)|0;q=L()|0;ja=ga+1|0;if(!((q|0)<(l|0)|(q|0)==(l|0)&o>>>0<i>>>0))break;else ga=ja}fa=Hd;c[fa>>2]=0;c[fa+4>>2]=0;if((i|0)>=17){i=c[7389]|0;if((i|0)!=0?(Wa[i&127](100)|0)!=0:0){S=0;U=0}else oa=1537;Sa:do if((oa|0)==1537){oa=0;do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](976)|0;if(!i){S=0;U=0;break Sa}}else{i=Wa[c[29356>>2]&127](976)|0;if((c[14985]|0)>>>0<976)c[14985]=976;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;da=L()|0;c[14768]=((da|0)<0|(da|0)==0&ea>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){S=0;U=0;break Sa}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);S=i+16|0;gw(S|0,0,960)|0;c[i>>2]=16;c[i+4>>2]=0;c[i+12>>2]=S;c[i+8>>2]=i+912;S=i;U=i}while(0);c[rf>>2]=U;fa=(U|0)==0;i=fa?7:0;l=c[ia>>2]|0;if((l|0)>0&(fa^1)){ba=(ga|0)==0;ca=ma+64+(ka*72|0)+8|0;da=ma+64+(ka*72|0)+64|0;o=0;aa=0;do{c[Td>>2]=0;i=l-aa|0;i=$h(ha,(i|0)<16?i:16,Hd,Td)|0;do if(!i){$=o+1|0;Z=c[Td>>2]|0;i=c[7389]|0;if((i|0)!=0?(Wa[i&127](100)|0)!=0:0)oa=1566;else oa=1554;Ta:do if((oa|0)==1554){oa=0;do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](64)|0;if(!i){oa=1566;break Ta}else l=i}else{i=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;q=59064;l=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,q|0,i|0,((i|0)<0)<<31>>31|0)|0;_=L()|0;c[14768]=((_|0)<0|(_|0)==0&ea>>>0<=fa>>>0)&1}l=Wa[c[29340>>2]&127](i)|0;if(!l){oa=1566;break Ta}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0<=(c[14987]|0)>>>0)break;c[14987]=i}while(0);ea=l+8|0;fa=ea+56|0;do{a[ea>>0]=0;ea=ea+1|0}while((ea|0)<(fa|0));c[l+4>>2]=Z;c[l>>2]=ha;_=c[ca>>2]|0;Z=(c[_+8>>2]|0)+9|0;_=(c[_+4>>2]|0)/2|0;_=(Z|0)>(_|0)?Z:_;c[l+16>>2]=_;Z=da;_=Sv(c[Z>>2]|0,c[Z+4>>2]|0,_|0,((_|0)<0)<<31>>31|0)|0;Z=L()|0;i=da;c[i>>2]=_;c[i+4>>2]=Z;i=0;Z=l;_=l}while(0);do if((oa|0)==1566){oa=0;if(!Z){i=7;Z=0;_=0;break}if((c[Z>>2]|0)>0){X=Z+12|0;W=0;do{l=c[X>>2]|0;Y=l+(W*56|0)|0;i=c[l+(W*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(W*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);P=c[l+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{l=c[T>>2]|0;V=l+(O*56|0)|0;i=c[l+(O*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(O*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);J=c[l+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{l=c[M>>2]|0;N=l+(I*56|0)|0;i=c[l+(I*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(I*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);D=c[l+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{l=c[F>>2]|0;H=l+(C*56|0)|0;i=c[l+(C*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(C*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);y=c[l+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{l=c[A>>2]|0;B=l+(x*56|0)|0;i=c[l+(x*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(x*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);s=c[l+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{l=c[w>>2]|0;q=l+(r*56|0)|0;i=c[l+(r*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(r*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(r*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=Y;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[Z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Z);i=7;Z=0;_=0;break}else{i=Wa[c[29352>>2]&127](Z)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Z);i=7;Z=0;_=0;break}}while(0);Ua:do if(ba){if(!i){i=U;oa=1830}}else{q=1;l=1;do{q=q<<4;l=l+1|0}while((l|0)!=(ja|0));if(i|0)break;i=U;w=1;Va:while(1){t=(c[i+12>>2]|0)+((((o|0)/(q|0)|0|0)%16|0)*56|0)+48|0;i=c[t>>2]|0;if(!i){i=c[7389]|0;if(i|0?Wa[i&127](100)|0:0){i=7;break Ua}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](976)|0;if(!i){i=7;break Ua}else l=i}else{i=Wa[c[29356>>2]&127](976)|0;if((c[14985]|0)>>>0<976)c[14985]=976;r=59064;l=c[r>>2]|0;r=c[r+4>>2]|0;if((r|0)>0|(r|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,r|0,i|0,((i|0)<0)<<31>>31|0)|0;Y=L()|0;c[14768]=((Y|0)<0|(Y|0)==0&ea>>>0<=fa>>>0)&1}l=Wa[c[29340>>2]&127](i)|0;if(!l){i=7;break Ua}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0<=(c[14987]|0)>>>0)break;c[14987]=i}while(0);i=l+16|0;gw(i|0,0,960)|0;Y=l+12|0;c[l>>2]=16;c[l+4>>2]=0;c[Y>>2]=i;c[l+8>>2]=l+912;i=c[7389]|0;if(i|0?Wa[i&127](100)|0:0){oa=1702;break}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](64)|0;if(!i){oa=1714;break Va}}else{i=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;s=59064;r=c[s>>2]|0;s=c[s+4>>2]|0;if((s|0)>0|(s|0)==0&r>>>0>0){fa=c[14978]|0;ea=Tv(r|0,s|0,i|0,((i|0)<0)<<31>>31|0)|0;X=L()|0;c[14768]=((X|0)<0|(X|0)==0&ea>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){oa=1714;break Va}r=Wa[c[29352>>2]&127](i)|0;r=(c[14978]|0)+r|0;c[14978]=r;if(r>>>0>(c[14982]|0)>>>0)c[14982]=r;r=(c[14981]|0)+1|0;c[14981]=r;if(r>>>0<=(c[14987]|0)>>>0)break;c[14987]=r}while(0);ea=i+8|0;fa=ea+56|0;do{a[ea>>0]=0;ea=ea+1|0}while((ea|0)<(fa|0));c[t>>2]=i;c[i+4>>2]=l;c[i>>2]=ha;Y=c[ca>>2]|0;ea=(c[Y+8>>2]|0)+9|0;Y=(c[Y+4>>2]|0)/2|0;Y=(ea|0)>(Y|0)?ea:Y;c[i+16>>2]=Y;ea=da;Y=Sv(c[ea>>2]|0,c[ea+4>>2]|0,Y|0,((Y|0)<0)<<31>>31|0)|0;ea=L()|0;fa=da;c[fa>>2]=Y;c[fa+4>>2]=ea}i=c[i+4>>2]|0;if(w>>>0<ga>>>0){q=(q|0)/16|0;w=w+1|0}else{oa=1830;break Ua}}if((oa|0)==1702){oa=0;c[t>>2]=0}else if((oa|0)==1714){oa=0;c[t>>2]=0}if((c[l>>2]|0)>0){W=0;do{o=c[Y>>2]|0;X=o+(W*56|0)|0;i=c[o+(W*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(W*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);P=c[o+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{o=c[T>>2]|0;V=o+(O*56|0)|0;i=c[o+(O*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(O*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;i=c[o+(I*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(I*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;i=c[o+(C*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(C*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;i=c[o+(x*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(x*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;i=c[o+(r*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(r*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(r*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=X;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[l>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);i=7;break}else{i=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);i=7;break}}while(0);if((oa|0)==1830){oa=0;c[(c[i+12>>2]|0)+(((o|0)%16|0)*56|0)+48>>2]=_;o=$;i=0;break}if(!Z){o=$;break}X=c[Z+4>>2]|0;do if(X|0){if((c[X>>2]|0)>0){Y=X+12|0;W=0;do{o=c[Y>>2]|0;Z=o+(W*56|0)|0;l=c[o+(W*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(W*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);P=c[o+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{o=c[T>>2]|0;V=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);zg(c[o+(r*56|0)+48>>2]|0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=Z;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[X>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](X);break}else{fa=Wa[c[29352>>2]&127](X)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](X);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](_);o=$;break}else{o=Wa[c[29352>>2]&127](_)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](_);o=$;break}}while(0);aa=aa+16|0;l=c[ia>>2]|0}while((i|0)==0&(l|0)>(aa|0))}}else oa=1534}else{oa=Hd;c[oa>>2]=0;c[oa+4>>2]=0;oa=1534}if((oa|0)==1534){oa=0;i=$h(ha,i,Hd,rf)|0;S=c[rf>>2]|0;U=S}T=(i|0)==0;do if(!T){if(U){if((c[U>>2]|0)>0){P=U+12|0;O=0;do{o=c[P>>2]|0;Q=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+48>>2]|0;do if(l|0){xg(c[l+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{ja=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{ja=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{ja=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{ja=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{ja=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{ja=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{ja=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{ja=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=Q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[U>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](S);break}else{ja=Wa[c[29352>>2]&127](S)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](S);break}}}else R=U;while(0);if(T)ka=ka+1|0;else{oa=2043;break}}do if((oa|0)==2043)if(R){if((c[R>>2]|0)>0){P=R+12|0;O=0;do{o=c[P>>2]|0;Q=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+48>>2]|0;do if(l|0){xg(c[l+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{oa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{oa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{oa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{oa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{oa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{oa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{oa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{oa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=Q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[R>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](R);oa=2139;break}else{oa=Wa[c[29352>>2]&127](R)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](R);oa=2139;break}}else oa=2139;else if((oa|0)==2138){oa=0;i=_h(ma+64|0,R)|0;c[ma+20>>2]=R;if(!i)i=0;else oa=2139}while(0);c[Yd>>2]=0;oa=2142}else{i=ch(c[na+40>>2]|0,Yd)|0;a[na+3>>0]=0;c[na+28>>2]=0;oa=2142}while(0);if((oa|0)==2142){oa=0;if(i|0){oa=2145;break c}ma=c[Yd>>2]|0;a[na+2>>0]=ma;if(!ma){l=m;q=pa;o=qa;i=0;break}}i=0;oa=28}else if((oa|0)==2160){c[l+28>>2]=0;switch(i|0){case 0:{a[l+2>>0]=0;i=f+160+(e[p+2>>1]<<2)|0;c[i>>2]=(c[i>>2]|0)+1;i=0;oa=20;break Pa}case 101:{a[l+2>>0]=1;l=m;o=pa;i=0;oa=21;break Pa}default:{oa=3855;break c}}}else if((oa|0)==3029){oa=0;o=c[p+12>>2]|0;i=pa+(o*40|0)|0;l=s+8|0;if((c[l>>2]|0)!=(i|0)?(c[l>>2]=i,vd=a[s+25>>0]|0,vd<<24>>24):0){l=c[p+8>>2]|0;i=vd&255;do{na=i;i=i+-1|0;c[s+28+(i<<2)>>2]=pa+((i+l|0)*40|0)}while((na|0)>1)}i=pa+(o*40|0)+12|0;c[i>>2]=(c[i>>2]|0)+1;i=c[s+4>>2]|0;if(!(c[p+4>>2]|0))cb[c[i+16>>2]&255](s,d[s+25>>0]|0,s+28|0);else cb[c[i+28>>2]&255](s,d[s+25>>0]|0,s+28|0);r=s+20|0;i=c[r>>2]|0;if(i){if((i|0)>0){i=c[s>>2]|0;do if(i){l=b[i+8>>1]|0;if((l&514)==514?(a[i+10>>0]|0)==1:0){i=c[i+16>>2]|0;break}if(!(l&1))i=Gg(i,1)|0;else i=0}else i=0;while(0);c[Ye>>2]=i;Ag(f,31408,Ye);i=c[r>>2]|0}else i=K;o=s+24|0;if(a[o>>0]|0){l=c[p+-16>>2]|0;do if(l|0){q=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(!(b[l>>1]&9216)){na=q;c[na>>2]=1;c[na+4>>2]=0;b[l>>1]=4;break}else{Pg(q,1,0);break}}while(0);a[o>>0]=0}o=c[s>>2]|0;l=o+8|0;if(!((b[l>>1]&9216)==0?(c[o+24>>2]|0)==0:0)){Cg(o);l=(c[s>>2]|0)+8|0}b[l>>1]=1;c[r>>2]=0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}}else{l=m;q=pa;o=qa;i=K}}else if((oa|0)==3761){oa=0;q=c[p+16>>2]|0;y=c[p+12>>2]|0;x=pa+(y*40|0)|0;if((c[q>>2]|0)!=(x|0)){c[q>>2]=x;i=a[q+25>>0]|0;if(!(i<<24>>24))i=0;else{o=c[p+8>>2]|0;l=i&255;do{na=l;l=l+-1|0;c[q+28+(l<<2)>>2]=pa+((l+o|0)*40|0)}while((na|0)>1)}}else i=a[q+25>>0]|0;w=pa+(y*40|0)+8|0;b[w>>1]=b[w>>1]&15904|1;cb[c[(c[q+4>>2]|0)+16>>2]&255](q,i&255,q+28|0);t=q+20|0;i=c[t>>2]|0;if(i){if((i|0)>0){i=b[w>>1]|0;if((i&514)==514?(a[pa+(y*40|0)+10>>0]|0)==1:0)i=c[pa+(y*40|0)+16>>2]|0;else if(!(i&1))i=Gg(x,1)|0;else i=0;c[ye>>2]=i;Ag(f,31408,ye);i=c[t>>2]|0}else i=K;r=c[q+16>>2]|0;s=c[p+4>>2]|0;o=c[Hb>>2]|0;Wa:do if(o|0){if((r|0)<0)while(1){l=c[o+12>>2]|0;if(l|0)ab[l&127](c[o+8>>2]|0);c[Hb>>2]=c[o+16>>2];Xa:do if(!(c[Ze>>2]|0)){l=o;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[o>>2]=c[af>>2];c[af>>2]=o;break Xa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else Xd(Cf,o);while(0);o=c[Hb>>2]|0;if(!o)break Wa}l=Hb;do{Ya:do if((c[o>>2]|0)==(r|0)?(Ed=c[o+4>>2]|0,(Ed|0)>-1):0){if((Ed|0)<=31?1<<Ed&s|0:0){oa=3803;break}q=c[o+12>>2]|0;if(q|0)ab[q&127](c[o+8>>2]|0);c[l>>2]=c[o+16>>2];if(c[Ze>>2]|0){Xd(Cf,o);break}q=o;do if((c[_e>>2]|0)>>>0<=q>>>0){if((c[$e>>2]|0)>>>0<=q>>>0)break;c[o>>2]=c[af>>2];c[af>>2]=o;break Ya}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else oa=3803;while(0);if((oa|0)==3803){oa=0;l=o+16|0}o=c[l>>2]|0}while((o|0)!=0)}while(0);c[t>>2]=0;if(!i)i=0;else{oa=3855;break c}}else i=K;l=b[w>>1]|0;if(l&18){if((l&2)!=0?(a[pa+(y*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(x,sd)|0;l=b[w>>1]|0}o=l&65535;if(o&18){l=c[pa+(y*40|0)+12>>2]|0;if(o&16384)l=(c[x>>2]|0)+l|0;if((l|0)>(c[(c[pa+(y*40|0)+32>>2]|0)+108>>2]|0)){oa=3891;break c}else{l=m;q=pa;o=qa}}else{l=m;q=pa;o=qa}}else{l=m;q=pa;o=qa}}while(0);if((oa|0)==20){l=m;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0;o=pa;oa=21}else if((oa|0)==28){oa=0;l=m;q=pa;o=qa;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0}else if((oa|0)==1074){oa=0;a[(c[o+40>>2]|0)+3>>0]=b[l>>1]&3;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break}}Za:do if((oa|0)==21){oa=0;if(c[lc>>2]|0){j=n;i=zf;break b}if(n>>>0<h>>>0){q=o;o=qa}else while(1){m=c[Af>>2]|0;if(!m){q=o;o=qa;break Za}pa=c[fb>>2]|0;h=pa+h|0;if(Wa[m&127](c[gb>>2]|0)|0){oa=3844;break c}if(n>>>0<h>>>0){q=o;o=qa;break}}}while(0);m=l;p=p+20|0;K=i;qa=o;pa=q}switch(oa|0){case 38:{c[Bf>>2]=0;a[Jd>>0]=c[p+8>>2];c[xf>>2]=(p-m|0)/20|0;oa=44;break}case 39:{j=p+4|0;l=(p-m|0)/20|0;c[Bf>>2]=i;a[Jd>>0]=c[p+8>>2];c[xf>>2]=l;i=b[p+2>>1]|0;if(i<<16>>16){c[ff>>2]=c[3504+((i&65535)+-1<<2)>>2];Ag(f,34155,ff);i=c[p+16>>2]|0;if(i|0){c[kf>>2]=c[mf>>2];c[kf+4>>2]=i;zf=dd(Cf,34176,kf)|0;c[mf>>2]=zf}}else{c[gf>>2]=c[p+16>>2];Ag(f,31408,gf)}oa=c[j>>2]|0;yf=c[hd>>2]|0;zf=c[mf>>2]|0;c[lf>>2]=l;c[lf+4>>2]=yf;c[lf+8>>2]=zf;Db(oa,34183,lf);oa=44;break}case 153:{vf=Oa;uf=c[vf+4>>2]|0;if((uf|0)>0|(uf|0)==0&(c[vf>>2]|0)>>>0>0){c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,Ae);o=k;q=h;h=1;i=zf;break a}if(c[(c[f>>2]|0)+456>>2]|0?c[bc>>2]|0:0)Bg(f,1)|0;c[ua>>2]=(c[ua>>2]|0)+2|1;t=pa+((c[p+4>>2]|0)*40|0)|0;c[Zc>>2]=t;r=p+8|0;if((c[r>>2]|0)>0){q=0;do{s=t+(q*40|0)|0;o=s+8|0;i=b[o>>1]|0;if(i&4096){j=i&65535;do if(j&18){do if(j&16384){l=s+12|0;j=(c[s>>2]|0)+(c[l>>2]|0)|0;if((j|0)<1)if(!(i&16))break;else i=1;else i=j;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[l>>2]|0)|0,0,c[s>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[s>>2]|0);i=b[o>>1]&-16897;b[o>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[o>>1]|0}while(0);i=i&-4097;b[o>>1]=i}if((i&514)==2)Jg(s)|0;q=q+1|0}while((q|0)<(c[r>>2]|0))}if(a[zf>>0]|0){l=p;j=m;i=zf;oa=3898;break a}if(a[qf>>0]&4)Za[c[of>>2]&127](4,c[pf>>2]|0,f,0)|0;c[xf>>2]=((p-m|0)/20|0)+1;o=k;l=100;oa=3884;break a}case 518:{oa=3891;break}case 599:{c[Ce>>2]=32306;c[Ce+4>>2]=86318;c[Ce+8>>2]=31517;Db(11,32001,Ce);i=11;oa=601;break}case 602:{l=p;j=h;i=zf;oa=3892;break a}case 717:{c[De>>2]=32306;c[De+4>>2]=68229;c[De+8>>2]=31517;Db(11,32001,De);o=k;q=h;h=11;i=zf;break a}case 720:{c[Ee>>2]=32306;c[Ee+4>>2]=68229;c[Ee+8>>2]=31517;Db(11,32001,Ee);o=k;q=h;h=11;i=zf;break a}case 730:{Ag(f,34243,Fe);o=k;q=h;h=5;i=zf;break a}case 774:{c[Ge>>2]=A;Ag(f,34294,Ge);o=k;q=h;h=1;i=zf;break a}case 776:{Ag(f,34316,He);o=k;q=h;h=5;i=zf;break a}case 780:{c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,Ie);o=k;l=1;oa=3884;break a}case 782:{c[xf>>2]=(p-m|0)/20|0;a[gd>>0]=0;c[Bf>>2]=5;o=k;l=5;oa=3884;break a}case 922:{j=c[p+4>>2]|0;i=c[p+8>>2]|0;if((j|0)==(d[gd>>0]|0)){Ag(f,(j|0)==0?34425:(i|0)==0?34516:34473,ef);o=k;q=h;h=1;i=zf;break a}do if(!i){if(j|0?(c[bd>>2]|0)>0:0){Ag(f,34370,cf);o=k;q=h;h=5;i=zf;break a}yf=c[f>>2]|0;zf=yf+464|0;yf=yf+472|0;zf=Sv(c[yf>>2]|0,c[yf+4>>2]|0,c[zf>>2]|0,c[zf+4>>2]|0)|0;yf=L()|0;if((yf|0)>0|(yf|0)==0&zf>>>0>0){c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,df);o=k;l=1;oa=3884;break a}else{i=j&255;break}}else{rg(Cf,516);i=1}while(0);a[gd>>0]=i;if((pg(f)|0)==5){c[xf>>2]=(p-m|0)/20|0;a[gd>>0]=1-j;c[Bf>>2]=5;o=k;l=5;oa=3884;break a}i=c[qd>>2]|0;if(i|0)do{c[qd>>2]=c[i+24>>2];do if(!(c[Ze>>2]|0)){zf=i;if((c[_e>>2]|0)>>>0<=zf>>>0?(c[$e>>2]|0)>>>0>zf>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{zf=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-zf;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(Cf,i);while(0);i=c[qd>>2]|0}while((i|0)!=0);c[Gd>>2]=0;c[Fd>>2]=0;a[Id>>0]=0;o=k;l=(c[Bf>>2]|0)==0?101:1;oa=3884;break a}case 950:{if((l&255|0)==5){c[xf>>2]=(p-m|0)/20|0;c[Bf>>2]=l;o=k;oa=3884;break a}else oa=1017;break}case 986:{i=c[mf>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}yf=i;if((c[_e>>2]|0)>>>0<=yf>>>0?(c[$e>>2]|0)>>>0>yf>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{yf=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-yf;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=1003;else i=0;else{if((e[Xc>>1]|0)>=28){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=1004;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=1004;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=1003}while(0);if((oa|0)==1003){i=_d(Cf,28,0)|0;oa=1004}if((oa|0)==1004)if(!i)i=0;else{ea=i;l=34557;fa=ea+28|0;do{a[ea>>0]=a[l>>0]|0;ea=ea+1|0;l=l+1|0}while((ea|0)<(fa|0))}c[mf>>2]=i;j=c[uf>>2]|0;i=c[z>>2]|0;l=c[j+(i<<4)+12>>2]|0;_a:do if((c[l>>2]|0)!=(c[rf>>2]|0)){if((i|0)>-1){yf=l+78|0;b[yf>>1]=b[yf>>1]|8;yf=(c[j+28>>2]|0)+78|0;b[yf>>1]=b[yf>>1]|8;c[hf>>2]=c[hf>>2]&-17}if((c[jf>>2]|0)==0?(tf=c[sf>>2]|0,(tf|0)>0):0){i=0;l=tf;while(1){j=c[j+(i<<4)+12>>2]|0;if(!(b[j+78>>1]&8))j=l;else{dh(j);j=c[sf>>2]|0}i=i+1|0;if((i|0)>=(j|0))break _a;l=j;j=c[uf>>2]|0}}}while(0);l=(d[vf>>0]|d[vf+1>>0]<<8)&-4|1;a[vf>>0]=l;a[vf+1>>0]=l>>8;l=17;oa=1017;break}case 1135:{c[s+40>>2]=0;o=k;q=h;h=7;i=zf;break a}case 1213:{o=k;q=h;h=i;i=zf;break a}case 1268:{l=p;j=h;i=zf;oa=3892;break a}case 1270:{o=k;q=h;h=i;i=zf;break a}case 1289:{c[Je>>2]=32306;c[Je+4>>2]=87969;c[Je+8>>2]=31517;Db(11,32001,Je);o=k;q=h;h=11;i=zf;break a}case 1328:{o=k;q=h;h=i;i=zf;break a}case 1345:{o=k;q=h;h=i;i=zf;break a}case 1382:{c[r>>2]=0;o=k;q=h;h=7;i=zf;break a}case 1481:{o=k;q=h;h=i;i=zf;break a}case 1492:{o=k;q=h;h=r;i=zf;break a}case 1519:{o=k;q=h;h=i;i=zf;break a}case 2145:{o=k;q=h;h=i;i=zf;break a}case 2221:{o=k;q=h;h=7;i=zf;break a}case 2226:{o=k;q=h;h=i;i=zf;break a}case 2253:{if(!((b[jb>>1]&9216)==0&(c[lb>>2]|0)==0))Cg(Hd);c[Ke>>2]=32306;c[Ke+4>>2]=81024;c[Ke+8>>2]=31517;Db(11,32001,Ke);i=11;oa=2256;break}case 2267:{c[Le>>2]=32306;c[Le+4>>2]=81057;c[Le+8>>2]=31517;Db(11,32001,Le);i=11;oa=2274;break}case 2280:{a[Jd>>0]=2;o=k;q=h;h=6;i=zf;break a}case 2282:{c[Me>>2]=32306;c[Me+4>>2]=72453;c[Me+8>>2]=31517;Db(11,32001,Me);i=0;j=11;oa=2353;break}case 2286:{i=0;j=l;oa=2353;break}case 2301:{if(r){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);i=0;oa=2353;break}else{oa=c[i+20>>2]|0;yf=oa+120|0;c[yf>>2]=(c[yf>>2]|0)+-1;oa=oa+136|0;c[i+16>>2]=c[oa>>2];c[oa>>2]=i;i=0;oa=2353;break}}else{i=0;oa=2353}break}case 2319:{i=0;j=l;oa=2353;break}case 2329:{i=0;j=l;oa=2353;break}case 2406:{o=k;q=h;h=l;i=zf;break a}case 2424:{$b(Cf);l=p;j=h;i=zf;oa=3892;break a}case 2425:{$b(Cf);o=k;q=h;h=i;i=zf;break a}case 2968:{Ag(f,34663,Xe);o=k;q=h;h=1;i=zf;break a}case 3073:{do if(o){i=b[o+8>>1]|0;if((i&514)==514?(a[o+10>>0]|0)==1:0){i=c[o+16>>2]|0;break}if(!(i&1))i=Gg(o,1)|0;else i=0}else i=0;while(0);c[bf>>2]=i;Ag(f,31408,bf);o=k;q=h;h=l;i=zf;break a}case 3094:{o=k;q=h;h=i;i=zf;break a}case 3115:{c[te>>2]=w?34752:34757;Ag(f,34700,te);o=k;q=h;h=1;i=zf;break a}case 3182:{c[ue>>2]=32306;c[ue+4>>2]=67051;c[ue+8>>2]=31517;Db(11,32001,ue);o=k;q=h;h=11;i=zf;break a}case 3215:{if(t<<24>>24==2){oa=o+22|0;b[oa>>1]=b[oa>>1]|128;oa=3236}else oa=3236;break}case 3400:{j=l;i=c[ad>>2]|0;oa=3401;break}case 3458:{o=k;q=h;h=i;i=zf;break a}case 3459:{Wa[c[x+28>>2]&127](c[rf>>2]|0)|0;l=p;j=h;i=zf;oa=3892;break a}case 3576:{oa=3891;break}case 3731:{i=i&65535;oa=3732;break}case 3733:{c[rc>>2]=(c[rc>>2]|0)+1;i=12;j=x;break}case 3844:{o=k;q=-1;m=l;h=9;i=zf;break a}case 3845:{o=k;q=h;h=i;i=zf;break a}case 3846:{o=k;q=h;h=i;i=zf;break a}case 3847:{o=k;q=h;h=i;i=zf;break a}case 3848:{o=k;q=h;h=i;i=zf;break a}case 3849:{o=k;q=h;h=i;i=zf;break a}case 3850:{o=k;q=h;h=i;i=zf;break a}case 3851:{o=k;q=h;h=i;i=zf;break a}case 3852:{o=k;q=h;h=i;i=zf;break a}case 3853:{o=k;q=h;h=i;i=zf;break a}case 3854:{o=k;q=h;h=r;i=zf;break a}case 3855:{o=k;q=h;h=i;i=zf;break a}case 3900:{Ra=Hf;return h|0}}switch(oa|0){case 44:if((pg(f)|0)==5){c[Bf>>2]=5;o=k;l=5;oa=3884;break a}else{o=k;l=(c[Bf>>2]|0)==0?101:1;oa=3884;break a}case 601:{o=k;q=h;h=i;i=zf;break a}case 1017:{o=k;q=h;h=l;i=zf;break a}case 2256:{o=k;q=h;h=i;i=zf;break a}case 2274:{o=k;q=h;h=i;i=zf;break a}case 2353:{b[B>>1]=4;o=A;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;o=k;q=h;h=j;i=zf;break a}case 3236:{c[ve>>2]=c[p+16>>2];Ag(f,34764,ve);o=k;q=h;h=262;i=zf;break a}case 3401:{c[ad>>2]=i+-1;o=k;q=h;h=j;i=zf;break a}case 3732:{a[Jd>>0]=i;i=12;j=x;break}case 3891:{Ag(f,31223,Be);o=k;q=h;h=18;i=zf;break a}}switch(i&15){case 12:{o=k;q=h;h=j;i=zf;break a}case 2:{l=p;j=h;i=zf;oa=3892;break a}default:h=0}Ra=Hf;return h|0}else{p=q;j=0;k=0;l=q;i=Cf+81|0}while(0);zf=(a[i>>0]|0)==0?9:7;c[Bf>>2]=zf;c[nf>>2]=c[22960+(zf<<2)>>2];Ag(f,31408,nf);n=j;o=k;q=h;m=l;h=zf}while(0);if((oa|0)==3892)if((a[i>>0]|0)==0?(a[Cf+82>>0]|0)==0:0){a[i>>0]=1;if((c[Cf+180>>2]|0)>0)c[Cf+264>>2]=1;h=Cf+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Cf+236>>2]|0;if(h){c[h+12>>2]=7;h=j;j=m;oa=3898}else{h=j;j=m;oa=3898}}else{h=j;j=m;oa=3898}if((oa|0)==3898){Ag(f,34831,yf);o=k;q=h;m=j;p=l;h=7}$a:while(1){if((oa|0)==3884){if(n>>>0<h>>>0)break;j=Cf+328|0;k=Cf+324|0;while(1){i=c[Af>>2]|0;if(!i)break $a;zf=c[j>>2]|0;h=zf+h|0;if(Wa[i&127](c[k>>2]|0)|0)break;if(n>>>0<h>>>0)break $a}q=-1;h=9;i=Cf+81|0}k=(a[i>>0]|0)==0?h:7;j=f+124|0;if((c[j>>2]|0)==0&(k|0)!=3082){switch(k|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=k&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}c[Ef>>2]=h;Ag(f,31408,Ef)}c[Bf>>2]=k;if((k|0)==3082){yf=c[f+188>>2]|0;zf=c[j>>2]|0;c[Gf>>2]=(p-m|0)/20|0;c[Gf+4>>2]=yf;c[Gf+8>>2]=zf;Db(3082,34799,Gf);pg(f)|0;if((a[i>>0]|0)==0?(a[Cf+82>>0]|0)==0:0){a[i>>0]=1;if((c[Cf+180>>2]|0)>0)c[Cf+264>>2]=1;h=Cf+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Cf+236>>2]|0;if(h|0)c[h+12>>2]=7}}else{if((k&251|4|0)==14){h=c[Cf>>2]|0;i=c[h+68>>2]|0;if(!i)h=0;else h=Ya[i&127](h,0,0)|0;c[Cf+72>>2]=h}yf=c[f+188>>2]|0;zf=c[j>>2]|0;c[Ff>>2]=(p-m|0)/20|0;c[Ff+4>>2]=yf;c[Ff+8>>2]=zf;Db(k,34799,Ff);pg(f)|0}if(!(o<<24>>24)){o=0;h=q;l=1;oa=3884;continue}k=Cf+16|0;i=c[k>>2]|0;zf=(c[i+((o&255)+-1<<4)+12>>2]|0)+78|0;b[zf>>1]=b[zf>>1]|8;zf=(c[i+28>>2]|0)+78|0;b[zf>>1]=b[zf>>1]|8;zf=Cf+24|0;c[zf>>2]=c[zf>>2]&-17;if(c[Cf+56>>2]|0){h=q;l=1;oa=3884;continue}l=Cf+20|0;j=c[l>>2]|0;if((j|0)<=0){h=q;l=1;oa=3884;continue}h=0;while(1){i=c[i+(h<<4)+12>>2]|0;if(b[i+78>>1]&8){dh(i);j=c[l>>2]|0}h=h+1|0;if((h|0)>=(j|0)){h=q;l=1;oa=3884;continue $a}i=c[k>>2]|0}}Gf=f+176|0;c[Gf>>2]=(c[Gf>>2]|0)+n;Gf=l;Ra=Hf;return Gf|0}
- function $i(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,fd=0,gd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0;ud=Ra;Ra=Ra+1392|0;Qc=ud+1352|0;Nc=ud+1344|0;Mc=ud+1328|0;Lc=ud+1320|0;Kc=ud+1304|0;mb=ud+1296|0;Cc=ud+1288|0;Bc=ud+1280|0;ic=ud+1272|0;Eb=ud+1264|0;na=ud+1256|0;bc=ud+1248|0;_b=ud+1232|0;ac=ud+1216|0;$b=ud+1200|0;Xb=ud+1176|0;Wb=ud+1136|0;Ub=ud+1128|0;Db=ud+1120|0;Bb=ud+1112|0;Ma=ud+1104|0;kc=ud+1096|0;Ja=ud+1088|0;Ia=ud+1080|0;Zb=ud+1056|0;Ab=ud+1048|0;xb=ud+1040|0;lb=ud+1032|0;kb=ud+1024|0;jb=ud+1016|0;fb=ud+1008|0;eb=ud+1e3|0;Vc=ud+992|0;Jc=ud+976|0;Uc=ud+960|0;Tc=ud+944|0;wc=ud+920|0;vc=ud+904|0;uc=ud+872|0;tc=ud+840|0;Ib=ud+832|0;Hb=ud+824|0;wb=ud+816|0;ib=ud+808|0;hb=ud+800|0;dc=ud+792|0;jc=ud+784|0;Pc=ud+776|0;Va=ud+768|0;Qa=ud+760|0;Yb=ud+752|0;Vb=ud+744|0;cc=ud+736|0;qc=ud+728|0;o=ud+720|0;n=ud+712|0;i=ud+704|0;od=ud+696|0;nd=ud+688|0;md=ud+680|0;ld=ud+672|0;jd=ud+664|0;id=ud+648|0;gd=ud+640|0;$c=ud+632|0;Yc=ud+624|0;Fc=ud+616|0;Ec=ud+608|0;hc=ud+600|0;bb=ud+592|0;_a=ud+584|0;Za=ud+576|0;Xc=ud+568|0;Wc=ud+544|0;mc=ud+536|0;Ic=ud+528|0;Hc=ud+512|0;Gc=ud+504|0;Oc=ud;pc=ud+496|0;Tb=ud+488|0;Sb=ud+480|0;Mb=ud+472|0;Lb=ud+464|0;Ua=ud+456|0;Ta=ud+448|0;t=ud+440|0;H=ud+432|0;ka=ud+424|0;s=ud+416|0;_=ud+408|0;M=ud+400|0;w=ud+392|0;$=ud+384|0;va=ud+376|0;ua=ud+368|0;ta=ud+360|0;sa=ud+352|0;v=ud+344|0;X=ud+336|0;K=ud+328|0;Fa=ud+320|0;ra=ud+312|0;ja=ud+304|0;u=ud+296|0;qa=ud+288|0;ia=ud+280|0;J=ud+272|0;yc=ud+264|0;Xa=ud+256|0;ha=ud+248|0;Na=ud+240|0;pa=ud+232|0;oa=ud+224|0;ma=ud+216|0;Ka=ud+208|0;Ha=ud+200|0;la=ud+192|0;nc=ud+184|0;U=ud+176|0;gb=ud+168|0;vb=ud+160|0;ub=ud+152|0;tb=ud+144|0;sb=ud+136|0;rb=ud+128|0;yb=ud+120|0;W=ud+112|0;V=ud+104|0;I=ud+96|0;F=ud+88|0;T=ud+80|0;qd=ud+48|0;_c=ud+24|0;Qb=ud+1368|0;td=c[f>>2]|0;sd=a[16752+g>>0]|0;if(sd<<24>>24==0?td>>>0>=(c[f+1208>>2]|0)>>>0:0){l=f+4|0;m=c[l>>2]|0;i=f+8|0;if(td>>>0>i>>>0?(c[f>>2]=td+-12,aj(m,b[td+2>>1]|0,td+4|0),O=c[f>>2]|0,O>>>0>i>>>0):0){k=O;do{td=c[l>>2]|0;c[f>>2]=k+-12;aj(td,b[k+2>>1]|0,k+4|0);k=c[f>>2]|0}while(k>>>0>i>>>0)}cd(m,38790,T);c[l>>2]=m;f=0;Ra=ud;return f|0}a:do switch(g|0){case 0:{a[j+199>>0]=1;break}case 1:{a[j+199>>0]=2;break}case 2:{w=c[j>>2]|0;if(!(a[j+18>>0]|0)){A=w+81|0;if((a[A>>0]|0)==0?(kd=j+36|0,(c[kd>>2]|0)==0):0){z=j+8|0;k=c[z>>2]|0;if(!k){if((c[j+116>>2]|0)==0?(b[w+76>>1]&8)==0:0)a[j+23>>0]=1;b:do if(!(c[w+272>>2]|0)){do if((e[w+276>>1]|0)>=224){k=w+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];qd=w+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break b}k=w+296|0;l=c[k>>2]|0;if(!l){k=w+292|0;break}else{c[k>>2]=c[l>>2];qd=w+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break b}}else k=w+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=29}else rd=29;while(0);if((rd|0)==29)l=_d(w,224,0)|0;if(l|0){I=l+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[l>>2]=w;k=w+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=j;c[z>>2]=l;Di(l,61,0,1,0)|0;rd=34}}else{l=k;rd=34}if((rd|0)==34){x=l+108|0;k=c[x>>2]|0;y=l+112|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;I=c[l+104>>2]|0;a[I+(k*20|0)>>0]=69;I=I+(k*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}else Di(l,69,0,0,0)|0;do if(!(a[A>>0]|0)){v=j+84|0;i=c[v>>2]|0;if(!i){if(!(c[j+68>>2]|0))break;k=c[x>>2]|0;if(!(a[(c[l>>2]|0)+81>>0]|0))m=c[l+104>>2]|0;else m=59308}else{k=c[x>>2]|0;if(!(a[(c[l>>2]|0)+81>>0]|0))m=c[l+104>>2]|0;else m=59308}c[m+8>>2]=k;o=w+20|0;c:do if((c[o>>2]|0)>0){p=l+152|0;q=w+16|0;r=j+80|0;s=l+104|0;t=l+156|0;u=w+165|0;k=0;while(1){m=1<<k;do if(m&i|0){c[p>>2]=c[p>>2]|m;if((k|0)!=1?a[(c[(c[(c[l>>2]|0)+16>>2]|0)+(k<<4)+4>>2]|0)+9>>0]|0:0)c[t>>2]=c[t>>2]|m;n=c[(c[q>>2]|0)+(k<<4)+12>>2]|0;i=(c[r>>2]&m|0)!=0&1;h=c[n>>2]|0;n=c[n+4>>2]|0;m=c[x>>2]|0;if((c[y>>2]|0)>(m|0)){c[x>>2]=m+1;qd=c[s>>2]|0;a[qd+(m*20|0)>>0]=2;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=k;c[qd+(m*20|0)+8>>2]=i;c[qd+(m*20|0)+12>>2]=h;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(l,2,k,i,h)|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){qd=c[s>>2]|0;a[qd+(m*20|0)+1>>0]=-3;c[qd+(m*20|0)+16>>2]=n}if(a[u>>0]|0)break;m=c[x>>2]|0;if((m|0)<=0)break;b[(c[s>>2]|0)+((m+-1|0)*20|0)+2>>1]=1}while(0);k=k+1|0;if((k|0)>=(c[o>>2]|0))break c;i=c[v>>2]|0}}while(0);o=j+204|0;if((c[o>>2]|0)>0){p=j+252|0;q=l+104|0;n=0;do{k=c[(c[(c[p>>2]|0)+(n<<2)>>2]|0)+64>>2]|0;d:do if(!k)k=0;else while(1){if((c[k>>2]|0)==(w|0))break d;k=c[k+24>>2]|0;if(!k){k=0;break}}while(0);m=c[x>>2]|0;if((c[y>>2]|0)>(m|0)){c[x>>2]=m+1;I=c[q>>2]|0;a[I+(m*20|0)>>0]=-96;I=I+(m*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}else m=Di(l,160,0,0,0)|0;do if(!(a[(c[l>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[x>>2]|0)+-1|0;i=c[q>>2]|0;h=i+(m*20|0)+1|0;if(a[h>>0]|0){Ei(l,i+(m*20|0)|0,k,-12);break}if(!k)break;c[i+(m*20|0)+16>>2]=k;a[h>>0]=-12;qd=k+12|0;c[qd>>2]=(c[qd>>2]|0)+1}while(0);n=n+1|0}while((n|0)<(c[o>>2]|0))}c[o>>2]=0;k=c[z>>2]|0;e:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;f:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=91;else{k=0;break e}else{do if((e[i+276>>1]|0)>=224){m=i+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];qd=i+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break f}m=i+296|0;k=c[m>>2]|0;if(!k){k=i+292|0;break}else{c[m>>2]=c[k>>2];qd=i+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break f}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=91}while(0);if((rd|0)==91)k=_d(i,224,0)|0;if(!k)k=0;else{I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=i;m=i+4|0;i=c[m>>2]|0;if(i|0)c[i+4>>2]=k;c[k+8>>2]=i;c[k+4>>2]=0;c[m>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[z>>2]=k;Di(k,61,0,1,0)|0}}while(0);p=j+104|0;if((c[p>>2]|0)>0){q=j+108|0;r=k+108|0;s=k+112|0;t=k+104|0;o=0;do{u=c[q>>2]|0;i=c[u+(o<<4)>>2]|0;h=c[u+(o<<4)+4>>2]|0;n=d[u+(o<<4)+8>>0]|0;u=c[u+(o<<4)+12>>2]|0;m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;qd=c[t>>2]|0;a[qd+(m*20|0)>>0]=-97;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=i;c[qd+(m*20|0)+8>>2]=h;c[qd+(m*20|0)+12>>2]=n;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(k,159,i,h,n)|0;do if(!(a[(c[k>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;i=c[t>>2]|0;h=i+(m*20|0)+1|0;if(a[h>>0]|0){Ei(k,i+(m*20|0)|0,u,-1);break}if(!u)break;c[i+(m*20|0)+16>>2]=u;a[h>>0]=-1}while(0);o=o+1|0}while((o|0)<(c[p>>2]|0))}o=c[z>>2]|0;k=c[j+112>>2]|0;g:do if(k|0){p=(c[j>>2]|0)+16|0;q=o+108|0;r=o+112|0;s=o+104|0;t=j+40|0;do{n=c[k+8>>2]|0;h=c[k+12>>2]|0;Gj(j,0,n,c[(c[(c[p>>2]|0)+(n<<4)+12>>2]|0)+72>>2]|0,108);n=h+-1|0;i=c[c[k+4>>2]>>2]|0;m=c[q>>2]|0;if((c[r>>2]|0)>(m|0)){c[q>>2]=m+1;qd=c[s>>2]|0;a[qd+(m*20|0)>>0]=110;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=0;c[qd+(m*20|0)+8>>2]=n;c[qd+(m*20|0)+12>>2]=0;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(o,110,0,n,0)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[q>>2]|0)+-1|0;Ei(o,(c[s>>2]|0)+(m*20|0)|0,i,0)}m=ed(o,12,17904)|0;if(!m)break g;c[m+8>>2]=h;qd=h+2|0;c[m+12>>2]=qd;c[m+52>>2]=h;c[m+64>>2]=n;c[m+72>>2]=h;b[m+62>>1]=16;c[m+88>>2]=h+1;c[m+112>>2]=h;c[m+124>>2]=h;c[m+148>>2]=qd;c[m+144>>2]=h;c[m+208>>2]=h;if(!(c[t>>2]|0))c[t>>2]=1;k=c[k>>2]|0}while((k|0)!=0)}while(0);o=c[j+68>>2]|0;if(o|0?(a[j+23>>0]=0,(c[o>>2]|0)>0):0){n=0;do{k=c[o+4+(n*20|0)>>2]|0;p=c[o+4+(n*20|0)+16>>2]|0;do if(k){if((a[k>>0]|0)!=-88){h=Jj(j,k,p)|0;rd=132;break}h=c[z>>2]|0;k=c[k+28>>2]|0;m=h+108|0;i=c[m>>2]|0;if((c[h+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[h+104>>2]|0;a[qd+(i*20|0)>>0]=78;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=k;c[qd+(i*20|0)+8>>2]=p;c[qd+(i*20|0)+12>>2]=0;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0;break}else{Di(h,78,k,p,0)|0;break}}else{h=Jj(j,0,p)|0;rd=132}while(0);do if((rd|0)==132){rd=0;if((h|0)==(p|0))break;k=c[z>>2]|0;if(!k)break;m=k+108|0;i=c[m>>2]|0;if((c[k+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[k+104>>2]|0;a[qd+(i*20|0)>>0]=79;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=h;c[qd+(i*20|0)+8>>2]=p;c[qd+(i*20|0)+12>>2]=0;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0;break}else{Di(k,79,h,p,0)|0;break}}while(0);n=n+1|0}while((n|0)<(c[o>>2]|0))}k=c[x>>2]|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;rd=c[l+104>>2]|0;a[rd+(k*20|0)>>0]=11;b[rd+(k*20|0)+2>>1]=0;c[rd+(k*20|0)+4>>2]=0;c[rd+(k*20|0)+8>>2]=1;c[rd+(k*20|0)+12>>2]=0;c[rd+(k*20|0)+16>>2]=0;a[rd+(k*20|0)+1>>0]=0;break}else{Di(l,11,0,1,0)|0;break}}while(0);if((c[kd>>2]|0)==0?(a[A>>0]|0)==0:0){hd(l,j);c[j+12>>2]=101;break a}}c[j+12>>2]=1;break a}k=j+12|0;if(!(c[k>>2]|0))c[k>>2]=1}break}case 3:{o=c[td+-8>>2]|0;n=c[j>>2]|0;do if(((a[n+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(z=c[n+312>>2]|0,z|0):0){k=$a[z&127](c[n+316>>2]|0,22,36223,0,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,F);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,I);c[j+12>>2]=1;break a}}while(0);h=j+8|0;k=c[h>>2]|0;if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;h:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=167;else break a;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break h}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break h}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=167}while(0);if((rd|0)==167)m=_d(i,224,0)|0;if(!m)break a;I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;r=m}else r=k;if((o|0)==7){k=r+108|0;l=c[k>>2]|0;if((c[r+112>>2]|0)>(l|0)){c[k>>2]=l+1;I=c[r+104>>2]|0;a[I+(l*20|0)>>0]=1;I=I+(l*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));break a}else{Di(r,1,0,0,0)|0;break a}}q=n+20|0;if((c[q>>2]|0)>0){h=(o|0)==9?2:1;m=r+108|0;k=r+112|0;n=r+104|0;o=r+152|0;p=r+156|0;i=0;do{l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;j=c[n>>2]|0;a[j+(l*20|0)>>0]=2;b[j+(l*20|0)+2>>1]=0;c[j+(l*20|0)+4>>2]=i;c[j+(l*20|0)+8>>2]=h;c[j+(l*20|0)+12>>2]=0;c[j+(l*20|0)+16>>2]=0;a[j+(l*20|0)+1>>0]=0}else Di(r,2,i,h,0)|0;l=1<<i;c[o>>2]=c[o>>2]|l;if((i|0)!=1?a[(c[(c[(c[r>>2]|0)+16>>2]|0)+(i<<4)+4>>2]|0)+9>>0]|0:0)c[p>>2]=c[p>>2]|l;i=i+1|0}while((i|0)<(c[q>>2]|0))}else{m=r+108|0;k=r+112|0}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;I=c[r+104>>2]|0;a[I+(l*20|0)>>0]=1;I=I+(l*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));break a}else{Di(r,1,0,0,0)|0;break a}}case 4:{c[td+16>>2]=7;break}case 300:case 7:case 6:case 5:{c[td+4>>2]=e[td+2>>1];break}case 9:case 8:{k=(b[td+-10>>1]|0)==12;h=k&1;k=k?39254:39263;l=c[j>>2]|0;do if(((a[l+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(S=c[l+312>>2]|0,S|0):0){k=$a[S&127](c[l+316>>2]|0,22,k,0,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,V);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,W);c[j+12>>2]=1;break a}}while(0);i=j+8|0;k=c[i>>2]|0;if(!k){m=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;i:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=213;else break a;else{do if((e[m+276>>1]|0)>=224){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break i}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break i}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=213}while(0);if((rd|0)==213)k=_d(m,224,0)|0;if(!k)break a;I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=m;l=m+4|0;m=c[l>>2]|0;if(m|0)c[m+4>>2]=k;c[k+8>>2]=m;c[k+4>>2]=0;c[l>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[i>>2]=k;Di(k,61,0,1,0)|0}l=k+108|0;m=c[l>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[k+104>>2]|0;a[j+(m*20|0)>>0]=1;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=1;c[j+(m*20|0)+8>>2]=h;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break a}else{Di(k,1,1,h,0)|0;break a}}case 10:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;j:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;k:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=236;else break j;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break k}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break k}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=236}while(0);if((rd|0)==236)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=241}}else{i=k;rd=241}while(0);l:do if((rd|0)==241){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(pb=c[k+312>>2]|0,pb|0):0){k=$a[pb&127](c[k+316>>2]|0,32,36223,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,yb);c[j+12>>2]=23;break l}if((k|2|0)==2)if(!k)break;else break l;else{cd(j,39231,rb);c[j+12>>2]=1;break l}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=(c[i+104>>2]|0)+(k*20|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0}else k=Di(i,0,0,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 11:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;m:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;n:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=291;else break m;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break n}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break n}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=291}while(0);if((rd|0)==291)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=296}}else{i=k;rd=296}while(0);o:do if((rd|0)==296){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(qb=c[k+312>>2]|0,qb|0):0){k=$a[qb&127](c[k+316>>2]|0,32,39270,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,sb);c[j+12>>2]=23;break o}if((k|2|0)==2)if(!k)break;else break o;else{cd(j,39231,tb);c[j+12>>2]=1;break o}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=c[i+104>>2]|0;a[j+(k*20|0)>>0]=0;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=1;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(i,0,1,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 12:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;p:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;q:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=346;else break p;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break q}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break q}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=346}while(0);if((rd|0)==346)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=351}}else{i=k;rd=351}while(0);r:do if((rd|0)==351){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(nb=c[k+312>>2]|0,nb|0):0){k=$a[nb&127](c[k+316>>2]|0,32,39254,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,ub);c[j+12>>2]=23;break r}if((k|2|0)==2)if(!k)break;else break r;else{cd(j,39231,vb);c[j+12>>2]=1;break r}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=c[i+104>>2]|0;a[j+(k*20|0)>>0]=0;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=2;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(i,0,2,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 13:{bj(j,td+-8|0,td+4|0,c[td+-44>>2]|0,0,0,c[td+-20>>2]|0);break}case 14:{rd=j+24|0;a[rd>>0]=(a[rd>>0]|0)+1<<24>>24;j=(c[j>>2]|0)+272|0;c[j>>2]=(c[j>>2]|0)+1;break}case 226:case 93:case 76:case 67:case 57:case 42:case 21:case 18:case 15:{c[td+16>>2]=0;break}case 16:{c[td+-20>>2]=1;break}case 43:case 17:{c[td+4>>2]=1;break}case 19:{cj(j,td+-20|0,td+-8|0,c[td+4>>2]&255,0);break}case 20:{k=td+4|0;cj(j,0,0,0,c[k>>2]|0);k=c[k>>2]|0;if(k|0)pi(c[j>>2]|0,k,1);break}case 22:{i=c[td+8>>2]|0;k=c[td+4>>2]|0;do if((i|0)==5)if(!k)k=0;else{l=a[k>>0]|0;do if(!(l<<24>>24)){l=38132;rd=397}else{qd=l&255;l=208+qd|0;if((qd|32|0)==114){l=a[k+1>>0]|0;if(!(l<<24>>24)){l=38133;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==111){l=a[k+2>>0]|0;if(!(l<<24>>24)){l=38134;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==119){l=a[k+3>>0]|0;if(!(l<<24>>24)){l=38135;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==105){l=a[k+4>>0]|0;if(!(l<<24>>24)){l=38136;rd=397;break}l=l&255;if((l|32|0)==100)break;else{m=100;l=208+l|0}}else m=105}else m=119}else m=111}else m=114;cb=d[l>>0]|0;rd=401}while(0);if((rd|0)==397){cb=0;m=a[208+(d[l>>0]|0)>>0]|0;rd=401}if((rd|0)==401?(cb|0)!=(m&255|0):0)break;c[td+-8>>2]=96;break a}while(0);c[td+-8>>2]=0;c[gb>>2]=i;c[gb+4>>2]=k;cd(j,38466,gb);break}case 23:{h=td+-8|0;q=c[j>>2]|0;n=c[j+228>>2]|0;if(n|0){t=n+42|0;if((c[q+116>>2]|0)<=(b[t>>1]|0)){c[U>>2]=c[n>>2];cd(j,38221,U);break a}i=td+-4|0;s=td+8|0;m=(c[i>>2]|0)+2+(c[s>>2]|0)|0;p=q+272|0;s:do if(c[p>>2]|0)if(!(a[q+81>>0]|0))rd=417;else break a;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){k=q+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=q+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break s}k=q+296|0;l=c[k>>2]|0;if(!l){k=q+292|0;break}else{c[k>>2]=c[l>>2];r=q+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break s}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=417}while(0);if((rd|0)==417)r=_d(q,m,0)|0;if(r|0){t:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;u:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=443;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){pd=c[14978]|0;od=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;nd=L()|0;c[14768]=((nd|0)<0|(nd|0)==0&od>>>0<=pd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break t;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break t}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=443;break u}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=443;break u}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=443}while(0);if((rd|0)==443)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=r;nd=h;od=c[nd+4>>2]|0;pd=l;c[pd>>2]=c[nd>>2];c[pd+4>>2]=od;pd=j+272|0;c[k+12>>2]=c[pd>>2];c[pd>>2]=k}while(0);ew(r|0,c[h>>2]|0,c[i>>2]|0)|0;a[r+(c[i>>2]|0)>>0]=0;k=a[r>>0]|0;if((a[880+(k&255)>>0]|0)<0){i=k<<24>>24==91?93:k;m=0;k=1;while(1){l=a[r+k>>0]|0;if(l<<24>>24==i<<24>>24){k=k+1|0;l=r+m|0;if((a[r+k>>0]|0)!=i<<24>>24)break;a[l>>0]=i}else a[r+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0}pd=b[t>>1]|0;k=pd<<16>>16;o=n+4|0;v:do if(pd<<16>>16>0){n=c[o>>2]|0;h=0;while(1){m=c[n+(h<<4)>>2]|0;if(m|0){pd=a[r>>0]|0;l=(d[208+(pd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(pd<<24>>24==0|(l|0)!=0)){i=r;do{i=i+1|0;m=m+1|0;pd=a[i>>0]|0;l=(d[208+(pd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(l|0)!=0))}if(!l)break}h=h+1|0;if((h|0)>=(k|0))break v}c[nc>>2]=r;cd(j,41735,nc);if(c[q+480>>2]|0){Xd(q,r);break a}j=r;if((c[q+304>>2]|0)>>>0<=j>>>0?(c[q+308>>2]|0)>>>0>j>>>0:0){j=q+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break a}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break a}}while(0);do if(!(k&7)){l=c[o>>2]|0;m=(k<<4)+128|0;w:do if(!l){if(c[p>>2]|0){if(a[q+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){k=q+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];sc=q+284|0;c[sc>>2]=(c[sc>>2]|0)+1;sc=l;rd=488;break w}k=q+296|0;l=c[k>>2]|0;if(!l){k=q+292|0;break}else{c[k>>2]=c[l>>2];sc=q+284|0;c[sc>>2]=(c[sc>>2]|0)+1;sc=l;rd=488;break w}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}sc=_d(q,m,0)|0;rd=488}else{rd=l;if((c[q+304>>2]|0)>>>0<=rd>>>0?(c[q+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){rd=498;break}sc=Zd(q,l,m,0)|0;rd=488;break}sc=Zd(q,l,m,0)|0;rd=488}while(0);if((rd|0)==488?sc|0:0){l=sc;k=b[t>>1]|0;rd=498}if((rd|0)==498){c[o>>2]=l;q=k;p=l;break}if(c[q+480>>2]|0){Xd(q,r);break a}j=r;if((c[q+304>>2]|0)>>>0<=j>>>0?(c[q+308>>2]|0)>>>0>j>>>0:0){j=q+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break a}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break a}}else{q=k;p=c[o>>2]|0}while(0);o=p+(q<<4)|0;k=p+(q<<4)+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[o>>2]=r;k=c[s>>2]|0;if(!k){a[p+(q<<4)+13>>0]=65;a[p+(q<<4)+14>>0]=1}else{n=r+((Eu(r)|0)&1073741823)+1|0;ew(n|0,c[td+4>>2]|0,k|0)|0;a[n+(c[s>>2]|0)>>0]=0;k=a[n>>0]|0;if((a[880+(k&255)>>0]|0)<0){i=k<<24>>24==91?93:k;m=0;k=1;while(1){l=a[n+k>>0]|0;if(l<<24>>24==i<<24>>24){k=k+1|0;l=n+m|0;if((a[n+k>>0]|0)!=i<<24>>24)break;a[l>>0]=i}else a[n+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0;k=a[n>>0]|0}x:do if(!(k<<24>>24)){k=0;m=67}else{l=67;h=0;i=n;m=0;while(1){h=h<<8|d[208+(k&255)>>0];i=i+1|0;y:do if((h|0)<1685026146){if((h|0)<1667785074){switch(h|0){case 1651273570:break;default:{rd=521;break y}}switch(l<<24>>24){case 69:case 67:break;default:{rd=520;break y}}k=a[i>>0]|0;m=k<<24>>24==40?i:m;l=65;break}if((h|0)<1668050786)switch(h|0){case 1667785074:{k=i;l=66;rd=522;break y}default:{rd=521;break y}}switch(h|0){case 1668050786:break;default:{rd=521;break y}}k=m;l=66;rd=522}else{if((h|0)>=1919246700)if((h|0)<1952807028){switch(h|0){case 1919246700:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}else{rd=520;break}}else{switch(h|0){case 1952807028:break;default:{rd=521;break y}}k=m;l=66;rd=522;break}if((h|0)<1718382433){switch(h|0){case 1685026146:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}}else{switch(h|0){case 1718382433:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}}k=m;rd=522}while(0);if((rd|0)==520){k=m;rd=522}else if((rd|0)==521){rd=0;if((h&16777215|0)==6909556){k=m;m=68;break x}else{k=m;rd=522}}if((rd|0)==522){rd=0;m=k;k=a[i>>0]|0}if(!(k<<24>>24)){k=m;m=l;break}}}while(0);if(o|0){c[qd>>2]=0;z:do if(m<<24>>24<67){if(!k){c[qd>>2]=16;k=5;rd=533;break}l=a[k>>0]|0;if(l<<24>>24){while(1){if(((l&255)+-48|0)>>>0<10)break;k=k+1|0;l=a[k>>0]|0;if(!(l<<24>>24)){k=1;rd=533;break z}}ii(k,qd)|0;k=c[qd>>2]|0;if((k|0)<1016){k=((k|0)/4|0)+1|0;rd=533}else k=255}else{k=1;rd=533}}else{k=1;rd=533}while(0);a[p+(q<<4)+14>>0]=k}a[p+(q<<4)+13>>0]=m;rd=p+(q<<4)+15|0;a[rd>>0]=a[rd>>0]|4}b[t>>1]=(b[t>>1]|0)+1<<16>>16;c[j+76>>2]=0}}break}case 99:case 60:case 24:{c[td+20>>2]=0;c[td+16>>2]=0;break}case 25:{c[td+-28>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-32>>2]|0);break}case 26:{c[td+-52>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-56>>2]|0);break}case 27:{c[td+-4>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-8>>2]|0);break}case 28:{c[td+16>>2]=h;break}case 62:case 29:{qd=td+4|0;rd=c[qd+4>>2]|0;j=j+72|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 30:{dj(j,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 31:{dj(j,c[td+-8>>2]|0,(c[td+-20>>2]|0)+1|0,c[td+4>>2]|0);break}case 32:{dj(j,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 33:{rd=ej(j,165,c[td+-8>>2]|0,0)|0;dj(j,rd,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 34:{o=td+4|0;p=td+8|0;q=fj(j,110,c[o>>2]|0,c[p>>2]|0)|0;do if(q|0?(c[q+4>>2]&67108864|0)==0:0){l=c[q+8>>2]|0;n=a[l>>0]|0;h=d[208+(n&255)>>0]|0;k=h+-116|0;n=n<<24>>24==0;if(!(n|(k|0)!=0)){m=41806;i=l;do{i=i+1|0;m=m+1|0;rd=a[i>>0]|0;k=(d[208+(rd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(rd<<24>>24==0|(k|0)!=0))}if(k|0){k=h+-102|0;if(!(n|(k|0)!=0)){m=41811;do{l=l+1|0;m=m+1|0;rd=a[l>>0]|0;k=(d[208+(rd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(rd<<24>>24==0|(k|0)!=0))}if(k|0)break}a[q>>0]=-97}while(0);rd=c[o>>2]|0;dj(j,q,rd,rd+(c[p>>2]|0)|0);break}case 35:{i=c[td+4>>2]|0;m=c[j+228>>2]|0;if(((m|0?(aa=m+42|0,l=b[aa>>1]|0,l<<16>>16>=1):0)?(rd=c[m+4>>2]|0,j=(l<<16>>16)+-1|0,a[rd+(j<<4)+12>>0]=i,qd=m+36|0,c[qd>>2]=c[qd>>2]|512,a[rd+(j<<4)+15>>0]&8):0)?(k=c[m+8>>2]|0,k|0):0)while(1){if(((l<<16>>16)+-1|0)==(b[c[k+4>>2]>>1]|0)){j=k+55|0;rd=d[j>>0]|d[j+1>>0]<<8|8;a[j>>0]=rd;a[j+1>>0]=rd>>8}k=c[k+20>>2]|0;if(!k)break a;l=b[aa>>1]|0}break}case 36:{gj(j,0,c[td+-8>>2]|0,c[td+4>>2]|0,c[td+-20>>2]|0);break}case 37:{hj(j,0,0,0,0,c[td+4>>2]|0,0,0,0,0,1);break}case 38:{k=c[td+-8>>2]|0;l=c[j+228>>2]|0;m=c[j>>2]|0;if((l|0?(Ob=j+200|0,(a[Ob>>0]|0)!=1):0)?(b[(c[(c[(c[m+16>>2]|0)+(d[m+164>>0]<<4)+4>>2]|0)+4>>2]|0)+22>>1]&1)==0:0){o=l+24|0;n=nj(m,c[o>>2]|0,k)|0;c[o>>2]=n;o=c[j+76>>2]|0;if(!o)break a;s=j+72|0;if(!n)break a;p=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;q=c[s>>2]|0;A:do if(q){i=Sv(o|0,0,1,0)|0;h=L()|0;B:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=586;else{rd=588;break A}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break B}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break B}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=586}while(0);if((rd|0)==586)r=_d(m,i,h)|0;if(r){ew(r|0,q|0,o|0)|0;a[r+o>>0]=0;k=n+4+(p*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=588}else rd=588;while(0);if((rd|0)==588){k=n+4+(p*20|0)+4|0;c[k>>2]=0}if((d[Ob>>0]|0)<=1)break a;i=c[k>>2]|0;m=c[j>>2]|0;C:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=621;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=621;break C}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=621;break C}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=621}while(0);if((rd|0)==621)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k;break a}if(k|0)ni(m,k);break}case 39:{ij(j,0,td+-20|0,c[td+-8>>2]|0,c[td+4>>2]|0);break}case 40:{l=c[td+4>>2]|0;k=c[j+228>>2]|0;if(k|0?(x=c[k+16>>2]|0,x|0):0)a[x+24>>0]=l;break}case 41:{m=c[j+228>>2]|0;if(m|0?(wa=(b[m+42>>1]|0)+-1|0,ba=c[j>>2]|0,ca=qj(ba,td+4|0)|0,ca|0):0){l=c[j>>2]|0;k=a[l+78>>0]|0;qd=a[l+165>>0]|0;l=Zi(l,k,ca,qd&255)|0;do if(!(qd<<24>>24)){if(!l){N=_i(j,k,0,ca)|0;rd=636;break}if(!(c[l+12>>2]|0)){N=_i(j,k,l,ca)|0;rd=636}}else{N=l;rd=636}while(0);if((rd|0)==636?(N|0)==0:0){if(ba|0){if(c[ba+480>>2]|0){Xd(ba,ca);break a}j=ca;if((c[ba+304>>2]|0)>>>0<=j>>>0?(c[ba+308>>2]|0)>>>0>j>>>0:0){j=ba+300|0;c[ca>>2]=c[j>>2];c[j>>2]=ca;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](ca);break a}else{j=Wa[c[29352>>2]&127](ca)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ca);break a}}l=m+4|0;k=c[(c[l>>2]|0)+(wa<<4)+8>>2]|0;do if(k|0){if(ba|0){if(c[ba+480>>2]|0){Xd(ba,k);break}j=k;if((c[ba+304>>2]|0)>>>0<=j>>>0?(c[ba+308>>2]|0)>>>0>j>>>0:0){j=ba+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[(c[l>>2]|0)+(wa<<4)+8>>2]=ca;k=c[m+8>>2]|0;if(k|0)do{if((wa|0)==(b[c[k+4>>2]>>1]|0))c[c[k+32>>2]>>2]=c[(c[l>>2]|0)+(wa<<4)+8>>2];k=c[k+20>>2]|0}while((k|0)!=0)}break}case 44:{c[td+16>>2]=0;break}case 45:{j=td+-8|0;c[j>>2]=c[j>>2]&~c[td+8>>2]|c[td+4>>2];break}case 46:{c[td+-8>>2]=0;c[td+-4>>2]=0;break}case 47:{c[td+-20>>2]=0;c[td+-16>>2]=0;break}case 48:{c[td+-20>>2]=c[td+4>>2];c[td+-16>>2]=255;break}case 49:{c[td+-20>>2]=c[td+4>>2]<<8;c[td+-16>>2]=65280;break}case 50:{c[td+-8>>2]=8;break}case 51:{c[td+-8>>2]=9;break}case 52:{c[td+4>>2]=10;break}case 53:{c[td+4>>2]=7;break}case 54:{c[td+-8>>2]=0;break}case 55:{c[td+-20>>2]=0;break}case 156:case 71:case 56:{c[td+-8>>2]=c[td+4>>2];break}case 227:case 201:case 198:case 75:case 58:{c[td+-8>>2]=1;break}case 59:{c[td+-8>>2]=0;break}case 61:{c[j+76>>2]=0;break}case 63:{gj(j,c[td+-32>>2]|0,c[td+4>>2]|0,c[td+-20>>2]|0,0);break}case 64:{hj(j,0,0,0,c[td+-20>>2]|0,c[td+4>>2]|0,0,0,0,0,1);break}case 65:{k=c[td+-20>>2]|0;l=c[j+228>>2]|0;m=c[j>>2]|0;if((l|0?(Pb=j+200|0,(a[Pb>>0]|0)!=1):0)?(b[(c[(c[(c[m+16>>2]|0)+(d[m+164>>0]<<4)+4>>2]|0)+4>>2]|0)+22>>1]&1)==0:0){o=l+24|0;n=nj(m,c[o>>2]|0,k)|0;c[o>>2]=n;o=c[j+76>>2]|0;if(!o)break a;s=j+72|0;if(!n)break a;p=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;q=c[s>>2]|0;D:do if(q){i=Sv(o|0,0,1,0)|0;h=L()|0;E:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=695;else{rd=697;break D}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break E}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break E}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=695}while(0);if((rd|0)==695)r=_d(m,i,h)|0;if(r){ew(r|0,q|0,o|0)|0;a[r+o>>0]=0;k=n+4+(p*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=697}else rd=697;while(0);if((rd|0)==697){k=n+4+(p*20|0)+4|0;c[k>>2]=0}if((d[Pb>>0]|0)<=1)break a;i=c[k>>2]|0;m=c[j>>2]|0;F:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=730;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=730;break F}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=730;break F}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=730}while(0);if((rd|0)==730)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k;break a}if(k|0)ni(m,k);break}case 66:{ij(j,c[td+-68>>2]|0,td+-32|0,c[td+-20>>2]|0,c[td+-8>>2]|0);l=c[td+4>>2]|0;k=c[j+228>>2]|0;if(k|0?(y=c[k+16>>2]|0,y|0):0)a[y+24>>0]=l;break}case 70:case 68:{c[td+16>>2]=11;break}case 69:{c[td+-20>>2]=c[td+4>>2];break}case 72:{c[td+4>>2]=4;break}case 157:case 73:{c[td+4>>2]=5;break}case 74:{jj(j,c[td+4>>2]|0,0,c[td+-8>>2]|0);break}case 77:{h=td+-44|0;i=td+-32|0;o=c[td+-20>>2]|0;l=c[td+4>>2]|0;k=c[td+-80>>2]|0;m=c[td+-56>>2]|0;p=c[j>>2]|0;if((b[j+196>>1]|0)<=0){bj(j,h,i,k,1,0,m);n=c[j+228>>2]|0;if((n|0)!=0?(c[j+36>>2]|0)==0:0){k=c[j>>2]|0;do if(c[td+-28>>2]|0){if(a[k+165>>0]|0){cd(j,39404,Ha);h=0;break}if((wk(k,h)|0)<0){c[Ka>>2]=h;cd(j,39421,Ka);h=i}else h=i}while(0);m=c[n+72>>2]|0;if(!m)k=-1e6;else{i=c[p+16>>2]|0;k=0;while(1)if((c[i+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}pd=c[j>>2]|0;c[Qb>>2]=j;pd=c[pd+16>>2]|0;c[Qb+12>>2]=c[pd+(k<<4)>>2];c[Qb+4>>2]=c[pd+(k<<4)+12>>2];c[Qb+16>>2]=39579;c[Qb+20>>2]=h;c[Qb+8>>2]=(k|0)==1&1;if(!(cl(Qb,l)|0)){if((d[j+200>>0]|0)>1)k=0;else{k=l;l=fk(p,l,1)|0}c[n+12>>2]=l;pd=gk(p,o,1)|0;c[n+24>>2]=pd;if(!(a[p+81>>0]|0)){m=j+188|0;l=c[m>>2]|0;m=c[m+4>>2]|0;i=_c;c[i>>2]=l;c[i+4>>2]=m;i=l;if((a[i>>0]|0)!=59){l=i+m|0;c[_c>>2]=l}m=_c+4|0;c[m>>2]=0;i=c[td+-92>>2]|0;l=l-i|0;do l=l+-1|0;while((a[880+(d[i+l>>0]|0)>>0]&1)!=0);c[_c>>2]=i+l;c[m>>2]=1;cj(j,0,_c,0,0)}}else k=l}else k=l}else{cd(j,43004,la);k=l}if(k|0)pi(p,k,1);if((d[j+200>>0]|0)>1){if(o|0){k=qd+8|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[qd>>2]=j;c[qd+4>>2]=124;k=c[o>>2]|0;if((k|0)>0){l=o+4|0;while(1){m=c[l>>2]|0;if(m|0?_j(qd,m)|0:0)break;if((k|0)>1){k=k+-1|0;l=l+20|0}else break}h=c[o>>2]|0;if((h|0)>0){m=j+272|0;l=0;do{i=c[o+4+(l*20|0)+4>>2]|0;k=c[m>>2]|0;G:do if(k|0){while(1){if((c[k>>2]|0)==(i|0))break;k=c[k+12>>2]|0;if(!k)break G}c[k>>2]=0}while(0);l=l+1|0}while((l|0)!=(h|0))}}rd=781}}else rd=781;if((rd|0)==781?o|0:0)ri(p,o);break}case 78:{jj(j,c[td+4>>2]|0,1,c[td+-8>>2]|0);break}case 79:{c[qd>>2]=c[7517];c[qd+4>>2]=c[7518];c[qd+8>>2]=c[7519];c[qd+12>>2]=c[7520];c[qd+16>>2]=c[7521];c[qd+20>>2]=c[7522];k=td+4|0;kj(j,c[k>>2]|0,qd)|0;k=c[k>>2]|0;if(k|0)pi(c[j>>2]|0,k,1);break}case 80:{q=c[td+4>>2]|0;do if(!q){o=c[j>>2]|0;p=c[td+-8>>2]|0;if(p|0){H:do if((c[p>>2]|0)>0){m=o+480|0;i=o+304|0;h=o+308|0;n=o+300|0;if(!o){l=0;while(1){k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(0,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(0,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=l+1|0;if((l|0)>=(c[p>>2]|0))break H}}l=0;do{k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(o,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(o,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0){if(c[m>>2]|0){Xd(o,k);break}j=k;if((c[i>>2]|0)>>>0<=j>>>0?(c[h>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[n>>2];c[n>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);l=l+1|0}while((l|0)<(c[p>>2]|0))}while(0);if(o|0){if(c[o+480>>2]|0){Xd(o,p);break}j=p;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[p>>2]=c[j>>2];c[j>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{j=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}}else{c[q+64>>2]=c[td+-8>>2];k=c[q+52>>2]|0;if(k|0){c[q+56>>2]=0;h=q+8|0;c[h>>2]=c[h>>2]|256;m=q;i=0;while(1){i=i+1|0;l=c[k+52>>2]|0;c[k+56>>2]=m;rd=k+8|0;c[rd>>2]=c[rd>>2]|256;if(!l)break;else{m=k;k=l}}if((c[h>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,ma)}}while(0);c[td+-20>>2]=q;break}case 81:{q=c[td+4>>2]|0;do if(!q){o=c[j>>2]|0;p=c[td+-8>>2]|0;if(p|0){I:do if((c[p>>2]|0)>0){m=o+480|0;i=o+304|0;h=o+308|0;n=o+300|0;if(!o){l=0;while(1){k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(0,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(0,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=l+1|0;if((l|0)>=(c[p>>2]|0))break I}}l=0;do{k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(o,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(o,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0){if(c[m>>2]|0){Xd(o,k);break}j=k;if((c[i>>2]|0)>>>0<=j>>>0?(c[h>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[n>>2];c[n>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);l=l+1|0}while((l|0)<(c[p>>2]|0))}while(0);if(o|0){if(c[o+480>>2]|0){Xd(o,p);break}j=p;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[p>>2]=c[j>>2];c[j>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{j=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}}else{c[q+64>>2]=c[td+-8>>2];k=c[q+52>>2]|0;if(k|0){c[q+56>>2]=0;h=q+8|0;c[h>>2]=c[h>>2]|256;m=q;i=0;while(1){i=i+1|0;l=c[k+52>>2]|0;c[k+56>>2]=m;rd=k+8|0;c[rd>>2]=c[rd>>2]|256;if(!l)break;else{m=k;k=l}}if((c[h>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,oa)}}while(0);c[td+-32>>2]=q;break}case 82:{h=td+4|0;n=c[h>>2]|0;if(n|0?(da=c[n+52>>2]|0,da|0):0){c[n+56>>2]=0;o=n+8|0;c[o>>2]=c[o>>2]|256;m=n;i=0;l=da;while(1){i=i+1|0;k=c[l+52>>2]|0;c[l+56>>2]=m;rd=l+8|0;c[rd>>2]=c[rd>>2]|256;if(!k)break;else{m=l;l=k}}if((c[o>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,pa)}c[h>>2]=n;break}case 83:{k=c[td+4>>2]|0;p=td+-20|0;o=c[p>>2]|0;do if(k){l=k+52|0;m=c[l>>2]|0;if(m){c[qd+4>>2]=0;c[k+56>>2]=0;n=k+8|0;c[n>>2]=c[n>>2]|256;i=k;h=0;while(1){h=h+1|0;l=c[m+52>>2]|0;c[m+56>>2]=i;pd=m+8|0;c[pd>>2]=c[pd>>2]|256;if(!l)break;else{i=m;m=l}}if((c[n>>2]&1024|0)==0?(pd=c[(c[j>>2]|0)+124>>2]|0,(pd|0)>0&(h|0)>=(pd|0)):0)cd(j,44434,Na);l=mj(j,0,lj(j,0,0,0,qd,k,0,0)|0,0,0,0,0,0,0)|0;if(!l){rd=899;break}k=l;l=l+52|0}m=td+-8|0;a[k+4>>0]=c[m>>2];c[l>>2]=o;if(o|0){qd=o+8|0;c[qd>>2]=c[qd>>2]&-1025}qd=k+8|0;c[qd>>2]=c[qd>>2]&-1025;if((c[m>>2]|0)!=128)a[j+22>>0]=1}else rd=899;while(0);if((rd|0)==899)if(!o)k=0;else{pi(c[j>>2]|0,o,1);k=0}c[p>>2]=k;break}case 86:case 84:{c[td+4>>2]=e[td+2>>1];break}case 85:{c[td+-8>>2]=128;break}case 87:{j=mj(j,c[td+-68>>2]|0,c[td+-56>>2]|0,c[td+-44>>2]|0,c[td+-32>>2]|0,c[td+-20>>2]|0,c[td+-8>>2]|0,c[td+-80>>2]|0,c[td+4>>2]|0)|0;c[td+-92>>2]=j;break}case 88:{k=mj(j,c[td+-80>>2]|0,c[td+-68>>2]|0,c[td+-56>>2]|0,c[td+-44>>2]|0,c[td+-32>>2]|0,c[td+-8>>2]|0,c[td+-92>>2]|0,c[td+4>>2]|0)|0;c[td+-104>>2]=k;if(k|0){c[k+72>>2]=c[td+-20>>2];break a}l=c[j>>2]|0;k=c[td+-20>>2]|0;if(k|0)do{j=k;k=c[k+32>>2]|0;oi(l,j)}while((k|0)!=0);break}case 89:{j=mj(j,c[td+-8>>2]|0,0,0,0,0,0,512,0)|0;c[td+-32>>2]=j;break}case 90:{m=td+-44|0;k=c[m>>2]|0;l=mj(j,c[td+-8>>2]|0,0,0,0,0,0,1536,0)|0;if(k|0){j=k+8|0;c[j>>2]=c[j>>2]&-1025}if(l){a[l+4>>0]=-128;c[l+52>>2]=k;k=l}c[m>>2]=k;break}case 91:{c[td+4>>2]=1;break}case 92:{c[td+4>>2]=2;break}case 222:case 217:case 214:case 134:case 127:case 94:{c[td+16>>2]=0;break}case 95:{r=td+-44|0;k=nj(c[j>>2]|0,c[r>>2]|0,c[td+-20>>2]|0)|0;c[r>>2]=k;o=c[td+8>>2]|0;if(o){s=td+4|0;J:do if(k|0){p=(c[k>>2]|0)+-1|0;i=c[j>>2]|0;q=c[s>>2]|0;K:do if(q){h=Sv(o|0,0,1,0)|0;n=L()|0;L:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=932;else{rd=934;break K}else{do if(0<0|(0==0?o>>>0<(e[i+276>>1]|0)>>>0:0)){l=i+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=m;break L}l=i+296|0;m=c[l>>2]|0;if(!m){l=i+292|0;break}else{c[l>>2]=c[m>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=m;break L}}else l=i+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;rd=932}while(0);if((rd|0)==932)n=_d(i,h,n)|0;if(n){ew(n|0,q|0,o|0)|0;a[n+o>>0]=0;k=k+4+(p*20|0)+4|0;c[k>>2]=n;l=a[n>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[n+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=n+i|0;if((a[n+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[n+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=934}else rd=934;while(0);if((rd|0)==934){k=k+4+(p*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;M:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=967;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break J;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break J}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=967;break M}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=967;break M}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=967}while(0);if((rd|0)==967)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;od=s;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}}while(0);k=c[r>>2]|0}l=c[td+-32>>2]|0;m=c[td+-8>>2]|0;o=c[j>>2]|0;if(k|0){p=k+4+(((c[k>>2]|0)+-1|0)*20|0)+8|0;k=c[p>>2]|0;do if(k|0){if(o|0){if(c[o+480>>2]|0){Xd(o,k);break}j=k;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);n=l;while(1)if(!(a[880+(d[n>>0]|0)>>0]&1))break;else n=n+1|0;k=m-n|0;N:do if((k|0)<=0)if(!n)k=0;else{l=k;rd=988}else while(1){l=k+-1|0;if(!(a[880+(d[n+l>>0]|0)>>0]&1)){l=k;rd=988;break N}if((k|0)>1)k=l;else{rd=988;break}}while(0);O:do if((rd|0)==988){i=Sv(l|0,((l|0)<0)<<31>>31|0,1,0)|0;h=L()|0;P:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))rd=998;else{k=0;break O}else{do if(!(h>>>0>0|((h|0)==0?i>>>0>(e[o+276>>1]|0)>>>0:0))){m=o+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];j=o+284|0;c[j>>2]=(c[j>>2]|0)+1;break P}m=o+296|0;k=c[m>>2]|0;if(!k){k=o+292|0;break}else{c[m>>2]=c[k>>2];j=o+284|0;c[j>>2]=(c[j>>2]|0)+1;break P}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=998}while(0);if((rd|0)==998)k=_d(o,i,h)|0;if(!k)k=0;else{ew(k|0,n|0,l|0)|0;a[k+l>>0]=0}}while(0);c[p>>2]=k}break}case 96:{rd=c[j>>2]|0;c[qd>>2]=0;c[qd+4>>2]=0;qd=oj(rd,172,qd,0)|0;rd=td+-20|0;j=nj(c[j>>2]|0,c[rd>>2]|0,qd)|0;c[rd>>2]=j;break}case 97:{qd=ej(j,172,0,0)|0;qd=ej(j,134,oj(c[j>>2]|0,59,td+-20|0,1)|0,qd)|0;rd=td+-44|0;j=nj(c[j>>2]|0,c[rd>>2]|0,qd)|0;c[rd>>2]=j;break}case 239:case 238:case 109:case 98:{qd=td+4|0;rd=c[qd+4>>2]|0;j=td+-8|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 100:{m=c[j>>2]|0;Q:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](80)|0;rd=1028;break}k=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1029}else rd=1029}else k=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if((e[m+276>>1]|0)>=80){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1028;break Q}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1028;break Q}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,80,0)|0;rd=1028}while(0);if((rd|0)==1028)if(!k)k=0;else rd=1029;if((rd|0)==1029){I=k;J=I+80|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}c[td+16>>2]=k;break}case 101:{l=c[td+4>>2]|0;c[td+-8>>2]=l;if(l|0){k=c[l>>2]|0;if((k|0)>1)do{j=k;k=k+-1|0;a[l+8+(k*72|0)+36>>0]=a[l+8+((j+-2|0)*72|0)+36>>0]|0}while((j|0)>2);a[l+44>>0]=0}break}case 102:{k=c[td+-8>>2]|0;if(k|0?(p=c[k>>2]|0,(p|0)>0):0)a[k+8+((p+-1|0)*72|0)+36>>0]=c[td+4>>2];break}case 103:{c[td+16>>2]=0;break}case 104:{l=td+-68|0;k=lj(j,c[l>>2]|0,td+-56|0,td+-44|0,td+-32|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[l>>2]=k;l=td+-20|0;if(k|0?(P=c[td+-16>>2]|0,P|0):0){m=(c[k>>2]|0)+-1|0;if((P|0)==1?(c[l>>2]|0)==0:0){j=k+8+(m*72|0)+37|0;a[j>>0]=a[j>>0]|1;break a}j=qj(c[j>>2]|0,l)|0;c[k+8+(m*72|0)+64>>2]=j;j=k+8+(m*72|0)+37|0;a[j>>0]=a[j>>0]|2}break}case 105:{l=td+-92|0;k=lj(j,c[l>>2]|0,td+-80|0,td+-68|0,td+-20|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[l>>2]=k;l=c[td+-44>>2]|0;if(k|0){j=(c[k>>2]|0)+-1|0;c[k+8+(j*72|0)+64>>2]=l;j=k+8+(j*72|0)+37|0;a[j>>0]=a[j>>0]|4;break a}if(l|0)ri(c[j>>2]|0,l);break}case 106:{rd=td+-68|0;j=lj(j,c[rd>>2]|0,0,0,td+-20|0,c[td+-44>>2]|0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 107:{i=td+-68|0;l=c[i>>2]|0;if((((l|0)==0?(c[td+-16>>2]|0)==0:0)?(c[td+-8>>2]|0)==0:0)?(c[td+4>>2]|0)==0:0){c[i>>2]=c[td+-44>>2];break a}p=td+-44|0;m=c[p>>2]|0;k=c[m>>2]|0;if((k|0)==1){o=lj(j,l,0,0,td+-20|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[i>>2]=o;if(o|0){k=(c[o>>2]|0)+-1|0;l=c[p>>2]|0;m=l+16|0;c[o+8+(k*72|0)+8>>2]=c[m>>2];i=l+12|0;c[o+8+(k*72|0)+4>>2]=c[i>>2];h=l+28|0;c[o+8+(k*72|0)+20>>2]=c[h>>2];n=l+45|0;if(a[n>>0]&4){rd=l+72|0;c[o+8+(k*72|0)+64>>2]=c[rd>>2];c[rd>>2]=0;a[n>>0]=a[n>>0]&-5;rd=o+8+(k*72|0)+37|0;a[rd>>0]=a[rd>>0]|4}c[i>>2]=0;c[m>>2]=0;c[h>>2]=0}qi(c[j>>2]|0,c[p>>2]|0);break a}if(!m)k=0;else{if((k|0)>1)do{rd=k;k=k+-1|0;a[m+8+(k*72|0)+36>>0]=a[m+8+((rd+-2|0)*72|0)+36>>0]|0}while((rd|0)>2);a[m+44>>0]=0;k=c[p>>2]|0}rd=mj(j,0,k,0,0,0,0,2048,0)|0;j=lj(j,c[i>>2]|0,0,0,td+-20|0,rd,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[i>>2]=j;break}case 122:case 108:{c[td+16>>2]=0;c[td+20>>2]=0;break}case 110:{i=td+4|0;h=pj(j,0,i,0)|0;R:do if(!((h|0)==0|(d[j+200>>0]|0)<2)){n=c[h+16>>2]|0;m=c[j>>2]|0;S:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1093;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break R;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break R}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1093;break S}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1093;break S}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1093}while(0);if((rd|0)==1093)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=n;pd=i;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}while(0);c[i>>2]=h;break}case 111:{i=td+-20|0;h=td+4|0;n=pj(j,0,i,h)|0;T:do if(!((n|0)==0|(d[j+200>>0]|0)<2)){o=c[n+16>>2]|0;m=c[j>>2]|0;U:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1120;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break T;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break T}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1120;break U}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1120;break U}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1120}while(0);if((rd|0)==1120)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=o;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}while(0);c[i>>2]=n;break}case 112:{rd=td+4|0;j=pj(j,0,rd,0)|0;c[rd>>2]=j;break}case 113:{rd=td+-20|0;j=pj(j,0,rd,td+4|0)|0;c[rd>>2]=j;break}case 114:{k=td+-44|0;rd=pj(j,0,k,td+-20|0)|0;c[k>>2]=rd;if(rd|0){j=qj(c[j>>2]|0,td+4|0)|0;c[(c[k>>2]|0)+20>>2]=j}break}case 115:{k=td+-20|0;rd=pj(j,0,k,0)|0;c[k>>2]=rd;if(rd|0){j=qj(c[j>>2]|0,td+4|0)|0;c[(c[k>>2]|0)+20>>2]=j}break}case 116:{c[td+4>>2]=1;break}case 117:{rd=td+-8|0;j=rj(j,rd,0,0)|0;c[rd>>2]=j;break}case 118:{rd=td+-20|0;j=rj(j,rd,td+-8|0,0)|0;c[rd>>2]=j;break}case 119:{rd=td+-32|0;j=rj(j,rd,td+-20|0,td+-8|0)|0;c[rd>>2]=j;break}case 231:case 210:case 144:case 137:case 120:{c[td+-8>>2]=c[td+4>>2];break}case 232:case 213:case 211:case 143:case 138:case 136:case 121:{c[td+16>>2]=0;break}case 123:{qd=td+4|0;rd=c[qd+4>>2]|0;j=td+-20|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 124:{c[td+-8>>2]=0;c[td+-4>>2]=1;break}case 125:{c[td+-32>>2]=c[td+-8>>2];break}case 158:case 126:{c[td+16>>2]=0;break}case 135:case 128:{c[td+-20>>2]=c[td+4>>2];break}case 129:{l=td+-32|0;k=nj(c[j>>2]|0,c[l>>2]|0,c[td+-8>>2]|0)|0;c[l>>2]=k;l=c[td+4>>2]|0;if(!((k|0)==0|(l|0)<0))a[k+4+(((c[k>>2]|0)+-1|0)*20|0)+12>>0]=l;break}case 130:{l=td+-8|0;k=nj(c[j>>2]|0,0,c[l>>2]|0)|0;c[l>>2]=k;l=c[td+4>>2]|0;if(!((k|0)==0|(l|0)<0))a[k+4+(((c[k>>2]|0)+-1|0)*20|0)+12>>0]=l;break}case 131:{c[td+4>>2]=0;break}case 132:{c[td+4>>2]=1;break}case 133:{c[td+16>>2]=-1;break}case 139:{j=ej(j,141,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 140:{j=ej(j,141,c[td+-20>>2]|0,c[td+4>>2]|0)|0;c[td+-32>>2]=j;break}case 141:{j=ej(j,141,c[td+4>>2]|0,c[td+-20>>2]|0)|0;c[td+-32>>2]=j;break}case 142:{k=td+-20|0;l=c[k>>2]|0;m=td+-8|0;do if(l|0?(Y=c[td+-4>>2]|0,Y|0):0){i=(c[l>>2]|0)+-1|0;if((Y|0)==1?(c[m>>2]|0)==0:0){rd=l+8+(i*72|0)+37|0;a[rd>>0]=a[rd>>0]|1;break}rd=qj(c[j>>2]|0,m)|0;c[l+8+(i*72|0)+64>>2]=rd;rd=l+8+(i*72|0)+37|0;a[rd>>0]=a[rd>>0]|2}while(0);sj(j,c[k>>2]|0,c[td+4>>2]|0);break}case 145:{i=td+-44|0;k=c[i>>2]|0;l=td+-32|0;do if(k|0?(Z=c[td+-28>>2]|0,Z|0):0){m=(c[k>>2]|0)+-1|0;if((Z|0)==1?(c[l>>2]|0)==0:0){rd=k+8+(m*72|0)+37|0;a[rd>>0]=a[rd>>0]|1;break}rd=qj(c[j>>2]|0,l)|0;c[k+8+(m*72|0)+64>>2]=rd;rd=k+8+(m*72|0)+37|0;a[rd>>0]=a[rd>>0]|2}while(0);l=td+-8|0;k=c[l>>2]|0;if(k){if((c[k>>2]|0)>(c[(c[j>>2]|0)+116>>2]|0)){c[ha>>2]=38493;cd(j,44753,ha);k=c[l>>2]|0}}else k=0;tj(j,c[i>>2]|0,k,c[td+4>>2]|0,c[td+-56>>2]|0,0);break}case 146:{s=td+-44|0;n=nj(c[j>>2]|0,c[s>>2]|0,c[td+4>>2]|0)|0;c[s>>2]=n;s=td+-20|0;if(n|0){o=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;p=c[s>>2]|0;q=c[td+-16>>2]|0;V:do if(p){i=Sv(q|0,0,1,0)|0;h=L()|0;W:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1179;else{rd=1181;break V}else{do if(0<0|(0==0?q>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break W}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break W}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1179}while(0);if((rd|0)==1179)r=_d(m,i,h)|0;if(r){ew(r|0,p|0,q|0)|0;a[r+q>>0]=0;k=n+4+(o*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1181}else rd=1181;while(0);if((rd|0)==1181){k=n+4+(o*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;X:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1214;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1214;break X}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1214;break X}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1214}while(0);if((rd|0)==1214)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}break}case 147:{rd=td+-68|0;j=uj(j,c[rd>>2]|0,c[td+-32>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 148:{r=nj(c[j>>2]|0,0,c[td+4>>2]|0)|0;s=td+-20|0;Y:do if(r|0){n=(c[r>>2]|0)+-1|0;m=c[j>>2]|0;o=c[s>>2]|0;p=c[td+-16>>2]|0;Z:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;_:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1229;else{rd=1231;break Z}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break _}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break _}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1229}while(0);if((rd|0)==1229)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=r+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1231}else rd=1231;while(0);if((rd|0)==1231){k=r+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;$:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1264;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break Y;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break Y}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1264;break $}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1264;break $}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1264}while(0);if((rd|0)==1264)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[s>>2]=r;break}case 149:{j=uj(j,0,c[td+-32>>2]|0,c[td+4>>2]|0)|0;c[td+-44>>2]=j;break}case 150:{vj(j,c[td+-32>>2]|0,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+-56>>2]|0,c[td+4>>2]|0);break}case 151:{vj(j,c[td+-32>>2]|0,0,c[td+-20>>2]|0,c[td+-56>>2]|0,0);break}case 152:{c[td+16>>2]=0;break}case 153:{i=c[j>>2]|0;h=c[td+-80>>2]|0;n=c[td+-56>>2]|0;o=c[td+-8>>2]|0;p=c[td+4>>2]|0;aa:do if(!i){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1294;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1303}else rd=1303}else rd=1295}else{if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=1295;break}}else{do if((e[i+276>>1]|0)>=36){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1294;break aa}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1294;break aa}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,36,0)|0;rd=1294}while(0);if((rd|0)==1294)if(!k)rd=1295;else rd=1303;if((rd|0)==1295){if(h|0)ri(i,h);if(n|0)ni(i,n);if(o|0)ri(i,o);if(!p)k=0;else{ni(i,p);k=0}}else if((rd|0)==1303){c[k>>2]=h;c[k+4>>2]=n;c[k+8>>2]=o;c[k+12>>2]=p;c[k+16>>2]=0}c[td+-116>>2]=k;break}case 154:{i=c[j>>2]|0;h=c[td+-44>>2]|0;n=c[td+-20>>2]|0;ba:do if(!i){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1328;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1333}else rd=1333}else rd=1329}else{if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=1329;break}}else{do if((e[i+276>>1]|0)>=36){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1328;break ba}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1328;break ba}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,36,0)|0;rd=1328}while(0);if((rd|0)==1328)if(!k)rd=1329;else rd=1333;if((rd|0)==1329){if(h|0)ri(i,h);if(!n)k=0;else{ni(i,n);k=0}}else if((rd|0)==1333){c[k>>2]=h;c[k+4>>2]=n;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0}c[td+-80>>2]=k;break}case 155:{m=c[j>>2]|0;ca:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1358;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1359}else rd=1359}else k=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if((e[m+276>>1]|0)>=36){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1358;break ca}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1358;break ca}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,36,0)|0;rd=1358}while(0);if((rd|0)==1358)if(!k)k=0;else rd=1359;if((rd|0)==1359){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0}c[td+-32>>2]=k;break}case 159:{c[td+-20>>2]=c[td+-8>>2];break}case 160:{rd=td+-20|0;j=wj(j,c[rd>>2]|0,td+4|0)|0;c[rd>>2]=j;break}case 161:{rd=td+4|0;j=wj(j,0,rd)|0;c[rd>>2]=j;break}case 162:{c[td+-20>>2]=c[td+-8>>2];break}case 164:case 163:{rd=td+4|0;j=fj(j,59,c[rd>>2]|0,c[td+8>>2]|0)|0;c[rd>>2]=j;break}case 165:{h=td+-20|0;n=oj(c[j>>2]|0,59,h,1)|0;i=td+4|0;o=oj(c[j>>2]|0,59,i,1)|0;da:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;ea:do if(!m){if(!(c[7324]|0)){La=Wa[c[29340>>2]&127](16)|0;rd=1390;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l|0){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;k=l;rd=1391}else{k=l;rd=1391}}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];La=m+284|0;c[La>>2]=(c[La>>2]|0)+1;La=l;rd=1390;break ea}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];La=m+284|0;c[La>>2]=(c[La>>2]|0)+1;La=l;rd=1390;break ea}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}La=_d(m,16,0)|0;rd=1390}while(0);if((rd|0)==1390?La|0:0){k=La;rd=1391}if((rd|0)==1391){l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=o;od=i;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}m=c[j>>2]|0;fa:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1415;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break da;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break da}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1415;break fa}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1415;break fa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1415}while(0);if((rd|0)==1415)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=n;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;rd=j+272|0;c[k+12>>2]=c[rd>>2];c[rd>>2]=k}while(0);j=ej(j,134,n,o)|0;c[h>>2]=j;break}case 166:{n=td+-44|0;o=oj(c[j>>2]|0,59,n,1)|0;p=td+-20|0;q=oj(c[j>>2]|0,59,p,1)|0;i=td+4|0;h=oj(c[j>>2]|0,59,i,1)|0;r=ej(j,134,q,h)|0;ga:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;ha:do if(!m){if(!(c[7324]|0)){Ya=Wa[c[29340>>2]&127](16)|0;rd=1442;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l|0){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;k=l;rd=1443}else{k=l;rd=1443}}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Ya=m+284|0;c[Ya>>2]=(c[Ya>>2]|0)+1;Ya=l;rd=1442;break ha}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];Ya=m+284|0;c[Ya>>2]=(c[Ya>>2]|0)+1;Ya=l;rd=1442;break ha}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Ya=_d(m,16,0)|0;rd=1442}while(0);if((rd|0)==1442?Ya|0:0){k=Ya;rd=1443}if((rd|0)==1443){l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=h;od=i;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}m=c[j>>2]|0;ia:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1467;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break ga;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break ga}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1467;break ia}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1467;break ia}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1467}while(0);if((rd|0)==1467)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=q;pd=p;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;rd=j+272|0;c[k+12>>2]=c[rd>>2];c[rd>>2]=k}while(0);j=ej(j,134,o,r)|0;c[n>>2]=j;break}case 168:case 167:{rd=td+4|0;j=fj(j,e[td+2>>1]|0,c[rd>>2]|0,c[td+8>>2]|0)|0;c[rd>>2]=j;break}case 169:{rd=td+4|0;j=oj(c[j>>2]|0,147,rd,1)|0;c[rd>>2]=j;break}case 170:{m=td+4|0;k=c[m>>2]|0;if((a[k>>0]|0)==35?((d[k+1>>0]|0)+-48|0)>>>0<10:0){pd=m;l=c[pd>>2]|0;pd=c[pd+4>>2]|0;rd=qd;c[rd>>2]=l;c[rd+4>>2]=pd;if(a[j+18>>0]|0){k=ej(j,168,0,0)|0;c[m>>2]=k;if(k|0)ii(l+1|0,k+28|0)|0}else{c[J>>2]=qd;cd(j,38502,J);c[m>>2]=0}break a}u=c[td+8>>2]|0;w=fj(j,148,k,u)|0;c[m>>2]=w;v=c[j>>2]|0;if(w|0){t=c[w+8>>2]|0;k=t+1|0;l=a[k>>0]|0;ja:do if(!(l<<24>>24)){rd=j+196|0;k=(b[rd>>1]|0)+1<<16>>16;b[rd>>1]=k}else{if((a[t>>0]|0)==63){if((u|0)==2){i=(l<<24>>24)+-48|0;m=((i|0)<0)<<31>>31;k=qd;c[k>>2]=i;c[k+4>>2]=m;k=0}else{k=(Og(k,qd,u+-1|0,1)|0)!=0;i=qd;m=c[i+4>>2]|0;i=c[i>>2]|0}l=c[v+144>>2]|0;qd=((l|0)<0)<<31>>31;if(k|((m|0)<0|(m|0)==0&i>>>0<1)|((m|0)>(qd|0)|(m|0)==(qd|0)&i>>>0>l>>>0)){c[Xa>>2]=l;cd(j,45057,Xa);break a}k=i&65535;l=j+196|0;ka:do if((b[l>>1]|0)>=k<<16>>16){h=k<<16>>16;m=j+216|0;l=c[m>>2]|0;if(!l)l=0;else{n=c[l+4>>2]|0;i=2;while(1){if((c[l+(i<<2)>>2]|0)==(h|0))break;i=(c[l+(i+1<<2)>>2]|0)+i|0;if((i|0)>=(n|0))break ka}break ja}}else{b[l>>1]=k;l=j+216|0;m=l;l=c[l>>2]|0}while(0)}else{m=j+216|0;l=c[m>>2]|0;la:do if(l|0){h=c[l+4>>2]|0;k=2;while(1){i=l+(k+2<<2)|0;if((av(i,t,u)|0)==0?(a[i+u>>0]|0)==0:0)break;k=(c[l+(k+1<<2)>>2]|0)+k|0;if((k|0)>=(h|0))break la}k=c[l+(k<<2)>>2]|0;if(k&65535|0){k=k&65535;break ja}}while(0);qd=j+196|0;k=(b[qd>>1]|0)+1<<16>>16;b[qd>>1]=k}r=k<<16>>16;i=(u|0)/4|0;s=i+3|0;q=(l|0)==0;ma:do if(!q){o=l+4|0;i=c[o>>2]|0;h=i+s|0;n=c[l>>2]|0;if((h|0)>(n|0)){i=cw(n|0,((n|0)<0)<<31>>31|0,1)|0;i=Sv(i|0,L()|0,s|0,((s|0)<0)<<31>>31|0)|0;h=cw(i|0,L()|0,2)|0;n=L()|0;rd=l;if((c[v+304>>2]|0)>>>0<=rd>>>0?(c[v+308>>2]|0)>>>0>rd>>>0:0){if(!(n>>>0>0|((n|0)==0?h>>>0>(e[v+276>>1]|0)>>>0:0))){rd=1518;break}n=Zd(v,l,h,n)|0;rd=1515;break}n=Zd(v,l,h,n)|0;rd=1515}else{n=o;rd=1519}}else{i=i+13|0;o=cw(i|0,((i|0)<0)<<31>>31|0,2)|0;p=L()|0;if(c[v+272>>2]|0){if(a[v+81>>0]|0){l=0;break}}else{do if(!(p>>>0>0|((p|0)==0?o>>>0>(e[v+276>>1]|0)>>>0:0))){h=v+300|0;n=c[h>>2]|0;if(n|0){c[h>>2]=c[n>>2];rd=v+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1515;break ma}h=v+296|0;n=c[h>>2]|0;if(!n){h=v+292|0;break}else{c[h>>2]=c[n>>2];rd=v+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1515;break ma}}else h=v+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}n=_d(v,o,p)|0;rd=1515}while(0);if((rd|0)==1515)if(n)if(q){c[n+4>>2]=2;l=n;rd=1518}else{l=n;rd=1518}if((rd|0)==1518){c[l>>2]=i;n=l+4|0;i=c[n>>2]|0;h=i+s|0;rd=1519}if((rd|0)==1519){c[l+(i<<2)>>2]=r;c[l+(i+1<<2)>>2]=s;rd=l+(i+2<<2)|0;c[n>>2]=h;ew(rd|0,t|0,u|0)|0;a[rd+u>>0]=0}c[m>>2]=l}while(0);b[w+32>>1]=k;if((c[v+144>>2]|0)<(k<<16>>16|0))cd(j,45100,yc)}break}case 171:{l=td+-20|0;k=c[l>>2]|0;if((c[td+8>>2]|0)!=0?(A=oj(c[j>>2]|0,106,td+4|0,1)|0,(A|0)!=0):0){c[A+12>>2]=k;k=A+4|0;c[k>>2]=c[k>>2]|4352;k=A}c[l>>2]=k;break}case 172:{i=oj(c[j>>2]|0,36,td+-8|0,1)|0;c[td+-56>>2]=i;k=c[j>>2]|0;l=c[td+-32>>2]|0;m=(l|0)==0;if(!i){if(m)break a;ni(k,l);break a}if(!m){c[i+12>>2]=l;j=i+4|0;c[j>>2]=c[j>>2]|c[l+4>>2]&2097412}Ym(i);break}case 173:{l=c[td+-8>>2]|0;n=td+-44|0;h=c[td+-20>>2]|0;m=c[j>>2]|0;k=oj(m,161,n,1)|0;i=(l|0)==0;if(!k)if(i)k=0;else{ri(m,l);k=0}else{if(!i?(c[l>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ia>>2]=n;cd(j,45123,ia)}c[k+20>>2]=l;l=k+4|0;c[l>>2]=c[l>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),xa=c[(c[j>>2]|0)+120>>2]|0,(xa|0)<(c[k+24>>2]|0)):0){c[qa>>2]=xa;cd(j,41637,qa)}if((h|0)==1)c[l>>2]=c[l>>2]|2}c[n>>2]=k;break}case 174:{l=td+-32|0;k=oj(c[j>>2]|0,161,l,1)|0;if(k){c[k+20>>2]=0;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),B=c[(c[j>>2]|0)+120>>2]|0,(B|0)<(c[k+24>>2]|0)):0){c[u>>2]=B;cd(j,41637,u)}}else k=0;c[l>>2]=k;break}case 175:{l=c[td+-20>>2]|0;n=td+-56|0;h=c[td+-32>>2]|0;m=c[j>>2]|0;k=oj(m,161,n,1)|0;i=(l|0)==0;if(k){if(!i?(c[l>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ja>>2]=n;cd(j,45123,ja)}c[k+20>>2]=l;m=k+4|0;c[m>>2]=c[m>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),ya=c[(c[j>>2]|0)+120>>2]|0,(ya|0)<(c[k+24>>2]|0)):0){c[ra>>2]=ya;cd(j,41637,ra)}if((h|0)==1)c[m>>2]=c[m>>2]|2;l=c[td+4>>2]|0;if((l|0)!=0?(c[k+44>>2]=l,rd=c[m>>2]|0,c[m>>2]=rd|16777216,c[l+68>>2]=k,(rd&2|0)!=0):0)cd(j,45157,Fa)}else{if(!i)ri(m,l);oi(c[j>>2]|0,c[td+4>>2]|0);k=0}c[n>>2]=k;break}case 176:{i=td+-44|0;k=oj(c[j>>2]|0,161,i,1)|0;if(k){c[k+20>>2]=0;m=k+4|0;c[m>>2]=c[m>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),Q=c[(c[j>>2]|0)+120>>2]|0,(Q|0)<(c[k+24>>2]|0)):0){c[K>>2]=Q;cd(j,41637,K)}l=c[td+4>>2]|0;if((l|0)!=0?(c[k+44>>2]=l,rd=c[m>>2]|0,c[m>>2]=rd|16777216,c[l+68>>2]=k,(rd&2|0)!=0):0)cd(j,45157,X)}else{oi(c[j>>2]|0,c[td+4>>2]|0);k=0}c[i>>2]=k;break}case 177:{l=td+4|0;k=oj(c[j>>2]|0,161,l,1)|0;if(k){c[k+20>>2]=0;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),C=c[(c[j>>2]|0)+120>>2]|0,(C|0)<(c[k+24>>2]|0)):0){c[v>>2]=C;cd(j,41637,v)}}else k=0;c[l>>2]=k;break}case 178:{k=nj(c[j>>2]|0,c[td+-32>>2]|0,c[td+-8>>2]|0)|0;l=ej(j,169,0,0)|0;c[td+-44>>2]=l;if(l|0){c[l+20>>2]=k;break a}if(k|0)ri(c[j>>2]|0,k);break}case 186:case 185:case 184:case 183:case 182:case 181:case 180:case 179:{rd=td+-20|0;j=ej(j,e[td+-10>>1]|0,c[rd>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 187:{qd=td+4|0;j=c[qd+4>>2]|0;rd=td+-8|0;c[rd>>2]=c[qd>>2];c[rd+4>>2]=j;c[td+-4>>2]=j|-2147483648;break}case 188:{l=td+-8|0;m=td+-4|0;n=c[m>>2]|0;c[m>>2]=n&2147483647;m=nj(c[j>>2]|0,0,c[td+4>>2]|0)|0;o=td+-20|0;m=nj(c[j>>2]|0,m,c[o>>2]|0)|0;i=c[j>>2]|0;k=oj(i,161,l,1)|0;h=(m|0)==0;if(!k)if(h)k=0;else{ri(i,m);k=0}else{if(!h?(c[m>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[sa>>2]=l;cd(j,45123,sa)}c[k+20>>2]=m;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),za=c[(c[j>>2]|0)+120>>2]|0,(za|0)<(c[k+24>>2]|0)):0){c[ta>>2]=za;cd(j,41637,ta)}}c[o>>2]=k;if((n|0)<0){k=ej(j,19,k,0)|0;c[o>>2]=k}if(k|0){j=k+4|0;c[j>>2]=c[j>>2]|128}break}case 189:{l=td+-32|0;m=td+-28|0;n=c[m>>2]|0;c[m>>2]=n&2147483647;m=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;o=td+-44|0;m=nj(c[j>>2]|0,m,c[o>>2]|0)|0;m=nj(c[j>>2]|0,m,c[td+4>>2]|0)|0;i=c[j>>2]|0;k=oj(i,161,l,1)|0;h=(m|0)==0;if(!k)if(h)k=0;else{ri(i,m);k=0}else{if(!h?(c[m>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ua>>2]=l;cd(j,45123,ua)}c[k+20>>2]=m;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),Aa=c[(c[j>>2]|0)+120>>2]|0,(Aa|0)<(c[k+24>>2]|0)):0){c[va>>2]=Aa;cd(j,41637,va)}}c[o>>2]=k;if((n|0)<0){k=ej(j,19,k,0)|0;c[o>>2]=k}if(k|0){j=k+4|0;c[j>>2]=c[j>>2]|128}break}case 190:{rd=td+-8|0;j=ej(j,e[td+2>>1]|0,c[rd>>2]|0,0)|0;c[rd>>2]=j;break}case 191:{rd=td+-20|0;j=ej(j,51,c[rd>>2]|0,0)|0;c[rd>>2]=j;break}case 192:{m=td+-20|0;rd=td+4|0;k=ej(j,45,c[m>>2]|0,c[rd>>2]|0)|0;c[m>>2]=k;rd=c[rd>>2]|0;m=c[j>>2]|0;if(((k|0)!=0&(rd|0)!=0?(a[rd>>0]|0)==114:0)?(d[j+200>>0]|0)<=1:0){a[k>>0]=50;k=k+16|0;l=c[k>>2]|0;if(l|0)ni(m,l);c[k>>2]=0}break}case 193:{m=td+-32|0;rd=td+4|0;k=ej(j,160,c[m>>2]|0,c[rd>>2]|0)|0;c[m>>2]=k;rd=c[rd>>2]|0;m=c[j>>2]|0;if(((k|0)!=0&(rd|0)!=0?(a[rd>>0]|0)==114:0)?(d[j+200>>0]|0)<=1:0){a[k>>0]=51;k=k+16|0;l=c[k>>2]|0;if(l|0)ni(m,l);c[k>>2]=0}break}case 195:case 194:{j=ej(j,e[td+-10>>1]|0,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 196:{j=ej(j,(b[td+-10>>1]|0)==100?166:165,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 200:case 197:{c[td+4>>2]=0;break}case 199:{k=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;k=nj(c[j>>2]|0,k,c[td+4>>2]|0)|0;l=td+-44|0;m=ej(j,48,c[l>>2]|0,0)|0;c[l>>2]=m;if(!m){if(k|0)ri(c[j>>2]|0,k)}else c[m+20>>2]=k;if(c[td+-32>>2]|0){j=ej(j,19,c[l>>2]|0,0)|0;c[l>>2]=j}break}case 202:{m=td+-8|0;k=c[m>>2]|0;if(!k){if((d[j+200>>0]|0)>=2)break a;k=td+-44|0;l=c[k>>2]|0;if(l|0)ni(c[j>>2]|0,l);j=oj(c[j>>2]|0,147,17136+(c[td+-32>>2]<<3)|0,1)|0;c[k>>2]=j;break a}if((c[k>>2]|0)==1){k=k+4|0;l=c[k>>2]|0;c[k>>2]=0;k=c[m>>2]|0;if(k|0)ri(c[j>>2]|0,k);if(l|0){rd=l+4|0;c[rd>>2]=c[rd>>2]&-769|512}rd=td+-44|0;j=ej(j,(c[td+-32>>2]|0)==0?53:52,c[rd>>2]|0,l)|0;c[rd>>2]=j;break a}l=td+-44|0;k=ej(j,49,c[l>>2]|0,0)|0;c[l>>2]=k;if(!k){k=c[m>>2]|0;if(k|0)ri(c[j>>2]|0,k)}else{c[k+20>>2]=c[m>>2];k=c[l>>2]|0;if((c[j+36>>2]|0)==0?(Ym(k),ea=c[(c[j>>2]|0)+120>>2]|0,(ea|0)<(c[k+24>>2]|0)):0){c[$>>2]=ea;cd(j,41637,$)}}if(c[td+-32>>2]|0){j=ej(j,19,c[l>>2]|0,0)|0;c[l>>2]=j}break}case 203:{k=ej(j,131,0,0)|0;c[td+-20>>2]=k;l=c[td+-8>>2]|0;if(!k){if(!l)break a;pi(c[j>>2]|0,l,1);break a}c[k+20>>2]=l;rd=k+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(k),D=c[(c[j>>2]|0)+120>>2]|0,(D|0)<(c[k+24>>2]|0)):0){c[w>>2]=D;cd(j,41637,w)}break}case 204:{k=td+-44|0;l=ej(j,49,c[k>>2]|0,0)|0;c[k>>2]=l;m=c[td+-8>>2]|0;if(!l){if(m|0)pi(c[j>>2]|0,m,1)}else{c[l+20>>2]=m;rd=l+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(l),R=c[(c[j>>2]|0)+120>>2]|0,(R|0)<(c[l+24>>2]|0)):0){c[M>>2]=R;cd(j,41637,M)}}if(c[td+-32>>2]|0){j=ej(j,19,c[k>>2]|0,0)|0;c[k>>2]=j}break}case 205:{k=pj(j,0,td+-20|0,td+-8|0)|0;m=mj(j,0,k,0,0,0,0,0,0)|0;l=c[td+4>>2]|0;do if(l|0)if((k|0)==0|(m|0)==0){ri(c[j>>2]|0,l);break}else{rd=(c[k>>2]|0)+-1|0;c[k+8+(rd*72|0)+64>>2]=l;rd=k+8+(rd*72|0)+37|0;a[rd>>0]=a[rd>>0]|4;break}while(0);k=td+-44|0;l=ej(j,49,c[k>>2]|0,0)|0;c[k>>2]=l;if(!l){if(m|0)pi(c[j>>2]|0,m,1)}else{c[l+20>>2]=m;rd=l+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(l),fa=c[(c[j>>2]|0)+120>>2]|0,(fa|0)<(c[l+24>>2]|0)):0){c[_>>2]=fa;cd(j,41637,_)}}if(c[td+-32>>2]|0){j=ej(j,19,c[k>>2]|0,0)|0;c[k>>2]=j}break}case 206:{k=ej(j,20,0,0)|0;c[td+-32>>2]=k;l=c[td+-8>>2]|0;if(!k){if(!l)break a;pi(c[j>>2]|0,l,1);break a}c[k+20>>2]=l;rd=k+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(k),E=c[(c[j>>2]|0)+120>>2]|0,(E|0)<(c[k+24>>2]|0)):0){c[s>>2]=E;cd(j,41637,s)}break}case 207:{l=ej(j,149,c[td+-32>>2]|0,0)|0;i=td+-44|0;c[i>>2]=l;if(!l){k=c[td+-20>>2]|0;if(k|0)ri(c[j>>2]|0,k);k=c[td+-8>>2]|0;if(!k)break a;ni(c[j>>2]|0,k);break a}m=c[td+-8>>2]|0;k=c[td+-20>>2]|0;if(m){k=nj(c[j>>2]|0,k,m)|0;l=c[i>>2]|0}c[l+20>>2]=k;k=c[i>>2]|0;if((c[j+36>>2]|0)==0?(Ym(k),Ba=c[(c[j>>2]|0)+120>>2]|0,(Ba|0)<(c[k+24>>2]|0)):0){c[ka>>2]=Ba;cd(j,41637,ka)}break}case 208:{rd=td+-44|0;qd=nj(c[j>>2]|0,c[rd>>2]|0,c[td+-20>>2]|0)|0;c[rd>>2]=qd;j=nj(c[j>>2]|0,qd,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 209:{qd=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;rd=td+-32|0;c[rd>>2]=qd;j=nj(c[j>>2]|0,qd,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 316:{c[td+-44>>2]=c[td+-8>>2];break}case 215:{rd=td+-20|0;j=nj(c[j>>2]|0,c[rd>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 216:{rd=td+4|0;j=nj(c[j>>2]|0,0,c[rd>>2]|0)|0;c[rd>>2]=j;break}case 223:case 218:{c[td+-20>>2]=c[td+-8>>2];break}case 219:{h=td+-44|0;qd=pj(j,0,h,0)|0;hj(j,td+-80|0,td+-68|0,qd,c[td+-20>>2]|0,c[td+-116>>2]|0,td+-128|0,c[td+4>>2]|0,0,c[td+-92>>2]|0,0);if((d[j+200>>0]|0)>1?(q=c[j+232>>2]|0,q|0):0){i=c[q>>2]|0;m=c[j>>2]|0;na:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1732;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1732;break na}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1732;break na}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1732}while(0);if((rd|0)==1732)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}break}case 262:case 220:{c[td+4>>2]=2;break}case 221:{c[td+16>>2]=0;break}case 224:{r=td+-44|0;s=td+-20|0;pd=c[td+-8>>2]|0;qd=c[td+4>>2]|0;t=nj(c[j>>2]|0,c[r>>2]|0,0)|0;if((pd|0)!=0|(qd|0)!=-1?(a[(c[j>>2]|0)+165>>0]|0)==0:0){qd=c[s>>2]|0;c[H>>2]=c[td+-16>>2];c[H+4>>2]=qd;cd(j,45206,H)}oa:do if(t|0){n=(c[t>>2]|0)+-1|0;m=c[j>>2]|0;o=c[s>>2]|0;p=c[td+-16>>2]|0;pa:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;qa:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1751;else{rd=1753;break pa}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break qa}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break qa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1751}while(0);if((rd|0)==1751)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=t+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1753}else rd=1753;while(0);if((rd|0)==1753){k=t+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;ra:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1786;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break oa;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break oa}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1786;break ra}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1786;break ra}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1786}while(0);if((rd|0)==1786)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[r>>2]=t;break}case 225:{r=td+-20|0;pd=c[td+-8>>2]|0;qd=c[td+4>>2]|0;s=nj(c[j>>2]|0,0,0)|0;if((pd|0)!=0|(qd|0)!=-1?(a[(c[j>>2]|0)+165>>0]|0)==0:0){qd=c[r>>2]|0;c[t>>2]=c[td+-16>>2];c[t+4>>2]=qd;cd(j,45206,t)}sa:do if(s|0){n=(c[s>>2]|0)+-1|0;m=c[j>>2]|0;o=c[r>>2]|0;p=c[td+-16>>2]|0;ta:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;ua:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1804;else{rd=1806;break ta}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break ua}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break ua}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1804}while(0);if((rd|0)==1804)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=s+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1806}else rd=1806;while(0);if((rd|0)==1806){k=s+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;va:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1839;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break sa;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break sa}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1839;break va}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1839;break va}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1839}while(0);if((rd|0)==1839)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=r;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[r>>2]=s;break}case 228:{x=c[td+4>>2]|0;o=c[td+-8>>2]|0;y=c[j>>2]|0;wa:do if(!(a[y+81>>0]|0)){xa:do if(!(a[y+165>>0]|0)){m=j+4|0;i=y+24|0;h=(c[i>>2]&1|0)==0;n=y+16|0;pd=c[(c[n>>2]|0)+12>>2]|0;a[y+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(Ca=eh(y,0,m,0)|0,(Ca|0)!=0):0)k=Ca;else rd=1846;ya:do if((rd|0)==1846){k=c[y+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[n>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Oa=eh(y,k,m,0)|0,Oa|0):0){k=Oa;break ya}}while((l|0)>2);if(h)c[i>>2]=c[i>>2]&-2;if(!(a[y+89>>0]|0))break xa;c[i>>2]=c[i>>2]|16;break xa}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break wa}while(0);k=c[x+12>>2]|0;w=hi(y,c[x+16>>2]|0,k)|0;if(!w){if(!o){c[Ta>>2]=x;c[Ta+4>>2]=0;cd(j,45244,Ta)}else hl(j,k);a[j+17>>0]=1;break}pd=w+55|0;if((d[pd>>0]|d[pd+1>>0]<<8)&3){c[Ua>>2]=0;cd(j,45262,Ua);break}l=c[w+24>>2]|0;u=y+16|0;m=c[u>>2]|0;if(!l)v=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){v=k;break}else k=k+1|0}n=c[w+12>>2]|0;o=c[m+(v<<4)>>2]|0;t=(v|0)==1;k=t?34855:34585;m=c[j>>2]|0;l=a[m+165>>0]|0;if(!(l<<24>>24))if((a[j+200>>0]|0)==0?(Kb=c[m+312>>2]|0,(Kb|0)!=0):0){k=$a[Kb&127](c[m+316>>2]|0,9,k,0,o,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Lb);c[j+12>>2]=23;break}if((k|2|0)!=2){cd(j,39231,Mb);c[j+12>>2]=1;break}if(k|0)break;m=c[j>>2]|0;h=a[m+165>>0]|0}else h=0;else h=l;i=(v|0)==0?10:12;l=c[w>>2]|0;k=c[n>>2]|0;do if((h<<24>>24==0?(a[j+200>>0]|0)==0:0)?(Rb=c[m+312>>2]|0,Rb|0):0){k=$a[Rb&127](c[m+316>>2]|0,i,l,k,o,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Sb);c[j+12>>2]=23;break wa}if((k|2|0)==2)if(!k)break;else break wa;else{cd(j,39231,Tb);c[j+12>>2]=1;break wa}}while(0);s=j+8|0;k=c[s>>2]|0;i=j+116|0;if(!k){m=c[j>>2]|0;if((c[i>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;za:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1897;else break wa;else{do if((e[m+276>>1]|0)>=224){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];pd=m+284|0;c[pd>>2]=(c[pd>>2]|0)+1;break za}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];pd=m+284|0;c[pd>>2]=(c[pd>>2]|0)+1;break za}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1897}while(0);if((rd|0)==1897)l=_d(m,224,0)|0;if(!l)break;I=l+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[l>>2]=m;k=m+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=j;c[s>>2]=l;Di(l,61,0,1,0)|0;r=l}else r=k;q=c[i>>2]|0;q=(q|0)==0?j:q;k=q+84|0;l=c[k>>2]|0;p=1<<v;Aa:do if((((l&p|0)==0?(c[k>>2]=l|p,t):0)?(Dc=c[q>>2]|0,rc=Dc+16|0,(c[(c[rc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[Dc>>2]|0,0,Dc,qd,0,542)|0;if(k|0){cd(q,32157,pc);c[q+12>>2]=k;break}qd=c[qd>>2]|0;c[(c[rc>>2]|0)+20>>2]=qd;k=c[Dc+92>>2]|0;i=c[qd+4>>2]|0;c[i+4>>2]=c[qd>>2];do if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=1917;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=1917}while(0);do if((rd|0)==1917){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);rd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((rd|0)!=7)break;k=Dc+81|0;do if(!(a[k>>0]|0)){if(a[Dc+82>>0]|0)break;a[k>>0]=1;if((c[Dc+180>>2]|0)>0)c[Dc+264>>2]=1;k=Dc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Dc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break Aa}while(0)}while(0);l=q+80|0;c[l>>2]=c[l>>2]|p;l=q+20|0;a[l>>0]=a[l>>0]|1;l=c[w>>2]|0;c[Oc>>2]=c[(c[u>>2]|0)+(v<<4)>>2];c[Oc+4>>2]=34585;c[Oc+8>>2]=l;Ak(j,45335,Oc);l=c[w>>2]|0;m=c[(c[(c[j>>2]|0)+16>>2]|0)+(v<<4)>>2]|0;c[Gc>>2]=1;Cb(24,Oc,42737,Gc)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Hc>>2]=m;c[Hc+4>>2]=Oc;c[Hc+8>>2]=38091;c[Hc+12>>2]=l;Ak(j,42751,Hc)}c[Ic>>2]=2;Cb(24,Oc,42737,Ic)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Kc>>2]=m;c[Kc+4>>2]=Oc;c[Kc+8>>2]=38091;c[Kc+12>>2]=l;Ak(j,42751,Kc)}c[Lc>>2]=3;Cb(24,Oc,42737,Lc)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Mc>>2]=m;c[Mc+4>>2]=Oc;c[Mc+8>>2]=38091;c[Mc+12>>2]=l;Ak(j,42751,Mc)}c[Nc>>2]=4;Cb(24,Oc,42737,Nc)|0;k=c[j>>2]|0;if(Sd(k,Oc,m)|0){c[Qc>>2]=m;c[Qc+4>>2]=Oc;c[Qc+8>>2]=38091;c[Qc+12>>2]=l;Ak(j,42751,Qc);k=c[j>>2]|0}i=c[s>>2]|0;k=(c[c[(c[k+16>>2]|0)+(v<<4)+12>>2]>>2]|0)+1|0;m=i+108|0;l=c[m>>2]|0;if((c[i+112>>2]|0)>(l|0)){c[m>>2]=l+1;rd=c[i+104>>2]|0;a[rd+(l*20|0)>>0]=95;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=v;c[rd+(l*20|0)+8>>2]=1;c[rd+(l*20|0)+12>>2]=k;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(i,95,v,1,k)|0;kl(j,c[w+44>>2]|0,v);m=c[w>>2]|0;l=r+108|0;k=c[l>>2]|0;if((c[r+112>>2]|0)>(k|0)){c[l>>2]=k+1;j=c[r+104>>2]|0;a[j+(k*20|0)>>0]=-112;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=v;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(r,144,v,0,0)|0;if(!(a[(c[r>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[l>>2]|0)+-1|0;Ei(r,(c[r+104>>2]|0)+(k*20|0)|0,m,0)}}while(0);qi(y,x);break}case 229:{xj(j,0,c[td+4>>2]|0);break}case 230:{xj(j,td+-8|0,c[td+4>>2]|0);break}case 233:{yj(j,td+-8|0,td+4|0,0,0);break}case 234:{yj(j,td+-32|0,td+-20|0,td+4|0,0);break}case 235:{yj(j,td+-44|0,td+-32|0,td+-8|0,0);break}case 236:{yj(j,td+-32|0,td+-20|0,td+4|0,1);break}case 237:{yj(j,td+-44|0,td+-32|0,td+-8|0,1);break}case 240:{v=c[td+-32>>2]|0;w=(c[td+4>>2]|0)-v+(c[td+8>>2]|0)|0;k=c[td+-8>>2]|0;p=j+236|0;l=c[p>>2]|0;A=c[j>>2]|0;c[p>>2]=0;Ba:do if((l|0)!=0&(c[j+36>>2]|0)==0){z=c[l>>2]|0;i=c[l+20>>2]|0;if(!i)y=-1e6;else{h=c[A+16>>2]|0;m=0;while(1)if((c[h+(m<<4)+12>>2]|0)==(i|0)){y=m;break}else m=m+1|0}m=l+28|0;c[m>>2]=k;h=(k|0)==0;if(!h){i=k;do{c[i+4>>2]=l;i=c[i+36>>2]|0}while((i|0)!=0)}c[Qb>>2]=z;if(!z)i=0;else i=(Eu(z)|0)&1073741823;c[Qb+4>>2]=i;c[_c>>2]=j;x=A+16|0;q=c[x>>2]|0;c[_c+12>>2]=c[q+(y<<4)>>2];c[_c+4>>2]=c[q+(y<<4)+12>>2];c[_c+16>>2]=31419;c[_c+20>>2]=Qb;q=(y|0)==1;c[_c+8>>2]=q&1;if(!h)do{if(cl(_c,c[k+8>>2]|0)|0){k=0;rd=2083;break Ba}if(dl(_c,c[k+16>>2]|0)|0){k=0;rd=2083;break Ba}n=c[k+20>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}o=c[k+28>>2]|0;if(o|0){n=c[o>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}if(dl(_c,c[o+4>>2]|0)|0){k=0;rd=2083;break Ba}n=c[o+8>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}if(dl(_c,c[o+12>>2]|0)|0){k=0;rd=2083;break Ba}}k=c[k+36>>2]|0}while((k|0)!=0);if(!(dl(_c,c[l+12>>2]|0)|0)){if((d[j+200>>0]|0)<=1){k=A+165|0;if(!(a[k>>0]|0)){u=j+8|0;i=c[u>>2]|0;o=j+116|0;if(!i){n=c[j>>2]|0;if((c[o>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[j+23>>0]=1;Ca:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))rd=2e3;else{k=0;r=l;rd=2085;break Ba}else{do if((e[n+276>>1]|0)>=224){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];od=n+284|0;c[od>>2]=(c[od>>2]|0)+1;break Ca}i=n+296|0;h=c[i>>2]|0;if(!h){i=n+292|0;break}else{c[i>>2]=c[h>>2];od=n+284|0;c[od>>2]=(c[od>>2]|0)+1;break Ca}}else i=n+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;rd=2e3}while(0);if((rd|0)==2e3)h=_d(n,224,0)|0;if(!h){k=0;r=l;rd=2085;break}I=h+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[h>>2]=n;m=n+4|0;i=c[m>>2]|0;if(i|0)c[i+4>>2]=h;c[h+8>>2]=i;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=j;c[u>>2]=h;Di(h,61,0,1,0)|0;t=h}else t=i;s=c[o>>2]|0;s=(s|0)==0?j:s;m=s+84|0;i=c[m>>2]|0;r=1<<y;Da:do if((((i&r|0)==0?(c[m>>2]=i|r,q):0)?(Ac=c[s>>2]|0,oc=Ac+16|0,(c[(c[oc>>2]|0)+20>>2]|0)==0):0)?(a[s+199>>0]|0)==0:0){m=Pe(c[Ac>>2]|0,0,Ac,qd,0,542)|0;if(m|0){cd(s,32157,mc);c[s+12>>2]=m;break}qd=c[qd>>2]|0;c[(c[oc>>2]|0)+20>>2]=qd;m=c[Ac+92>>2]|0;n=c[qd+4>>2]|0;c[n+4>>2]=c[qd>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((m+-512|0)>>>0<65025){if(m+-1&m|0)break;c[o>>2]=m;h=n+80|0;m=c[h>>2]|0;if(!m)break;i=m+-4|0;c[h>>2]=i;m=i;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](i)|0;rd=2020;break}else{m=Wa[c[29352>>2]&127](i)|0;rd=2020}while(0);do if((rd|0)==2020){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{qd=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[h>>2]=0}while(0);qd=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((qd|0)!=7)break;m=Ac+81|0;do if(!(a[m>>0]|0)){if(a[Ac+82>>0]|0)break;a[m>>0]=1;if((c[Ac+180>>2]|0)>0)c[Ac+264>>2]=1;m=Ac+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[Ac+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);break Da}while(0)}while(0);o=s+80|0;c[o>>2]=c[o>>2]|r;o=v;Ea:do if(v){h=Sv(w|0,0,1,0)|0;n=L()|0;Fa:do if(c[A+272>>2]|0)if(!(a[A+81>>0]|0))rd=2044;else{i=0;break Ea}else{do if(0<0|(0==0?w>>>0<(e[A+276>>1]|0)>>>0:0)){m=A+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];qd=A+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Fa}m=A+296|0;i=c[m>>2]|0;if(!i){m=A+292|0;break}else{c[m>>2]=c[i>>2];qd=A+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Fa}}else m=A+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;rd=2044}while(0);if((rd|0)==2044)i=_d(A,h,n)|0;if(i){ew(i|0,o|0,w|0)|0;a[i+w>>0]=0}else i=0}else i=0;while(0);rd=c[l+4>>2]|0;c[Wc>>2]=c[(c[x>>2]|0)+(y<<4)>>2];c[Wc+4>>2]=34585;c[Wc+8>>2]=z;c[Wc+12>>2]=rd;c[Wc+16>>2]=i;Ak(j,46058,Wc);Ga:do if(i|0){if(c[A+480>>2]|0){Xd(A,i);break}m=i;do if((c[A+304>>2]|0)>>>0<=m>>>0){if((c[A+308>>2]|0)>>>0<=m>>>0)break;rd=A+300|0;c[i>>2]=c[rd>>2];c[rd>>2]=i;break Ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{rd=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);n=c[u>>2]|0;m=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(y<<4)+12>>2]>>2]|0)+1|0;i=n+108|0;h=c[i>>2]|0;if((c[n+112>>2]|0)>(h|0)){c[i>>2]=h+1;j=c[n+104>>2]|0;a[j+(h*20|0)>>0]=95;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=y;c[j+(h*20|0)+8>>2]=1;c[j+(h*20|0)+12>>2]=m;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0}else Di(n,95,y,1,m)|0;c[Xc>>2]=z;Bk(t,y,dd(A,46122,Xc)|0);rd=2060}}else{c[p>>2]=l;l=0;k=A+165|0;rd=2060}if((rd|0)==2060)if(!(a[k>>0]|0)){k=0;rd=2083;break}q=mi((c[(c[x>>2]|0)+(y<<4)+12>>2]|0)+40|0,z,l)|0;if(q|0){k=A+81|0;if(a[k>>0]|0){k=0;l=q;rd=2083;break}if(a[A+82>>0]|0){k=0;l=q;rd=2083;break}a[k>>0]=1;if((c[A+180>>2]|0)>0)c[A+264>>2]=1;k=A+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[A+236>>2]|0;if(!k){k=0;l=q;rd=2083;break}c[k+12>>2]=7;k=0;l=q;rd=2083;break}h=c[l+20>>2]|0;if((h|0)==(c[l+24>>2]|0)){p=c[l+4>>2]|0;n=c[h+20>>2]|0;if(!n){m=h+12|0;k=h+16|0}else{m=a[p>>0]|0;if(!(m<<24>>24))k=0;else{k=0;i=p;do{i=i+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[i>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[h+8>>2]|0)>>>0)|0;m=n+(k<<3)|0;k=n+(k<<3)+4|0}m=c[m>>2]|0;Ha:do if(!m)k=59292;else{o=d[208+(d[p>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;h=c[k+12>>2]|0;j=a[h>>0]|0;i=(d[208+(j&255)>>0]|0)-o|0;if(!(j<<24>>24==0|(i|0)!=0)){n=p;do{h=h+1|0;n=n+1|0;j=a[h>>0]|0;i=(d[208+(j&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(j<<24>>24==0|(i|0)!=0))}if(!i)break Ha;if(!m){k=59292;break}}}while(0);k=(c[k+8>>2]|0)+68|0;c[l+32>>2]=c[k>>2];c[k>>2]=l;k=0;l=q;rd=2083}else{k=0;l=q;rd=2083}}else{k=0;r=l;rd=2085}}else rd=2083;while(0);if((rd|0)==2083)if(l){r=l;m=l+28|0;rd=2085}do if((rd|0)==2085){Xi(A,c[m>>2]|0);l=c[l>>2]|0;do if(l|0){if(A|0){if(c[A+480>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[r+4>>2]|0;do if(l|0){if(A|0){if(c[A+480>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[r+12>>2]|0;if(l|0)ni(A,l);l=c[r+16>>2]|0;if(l|0){q=l+4|0;m=c[l>>2]|0;Ia:do if((c[q>>2]|0)>0){h=A+480|0;n=A+304|0;o=A+308|0;p=A+300|0;if(!A){i=0;while(1){m=c[m+(i<<3)>>2]|0;do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{j=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);i=i+1|0;m=c[l>>2]|0;if((i|0)>=(c[q>>2]|0))break Ia}}i=0;do{m=c[m+(i<<3)>>2]|0;do if(m|0){if(c[h>>2]|0){Xd(A,m);break}j=m;if((c[n>>2]|0)>>>0<=j>>>0?(c[o>>2]|0)>>>0>j>>>0:0){c[m>>2]=c[p>>2];c[p>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{j=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);i=i+1|0;m=c[l>>2]|0}while((i|0)<(c[q>>2]|0))}while(0);Ja:do if(m){do if(A|0){i=A+480|0;if(!(c[i>>2]|0)){h=m;if((c[A+304>>2]|0)>>>0>h>>>0)break;if((c[A+308>>2]|0)>>>0<=h>>>0)break;j=A+300|0;c[m>>2]=c[j>>2];c[j>>2]=m}else Xd(A,m);m=i;rd=2140;break Ja}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);rd=2138;break}else{rd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);rd=2138;break}}else rd=2138;while(0);if((rd|0)==2138)if(!A){pd=l;rd=2145}else{m=A+480|0;rd=2140}do if((rd|0)==2140){if(c[m>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l}else{pd=l;rd=2145}}while(0);do if((rd|0)==2145?pd|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](pd);break}else{j=Wa[c[29352>>2]&127](pd)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](pd);break}while(0);if(!r)break}if(A|0){if(c[A+480>>2]|0){Xd(A,r);break}j=r;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);Xi(A,k);break}case 241:{H=td+-80|0;K=td+-68|0;y=c[td+-56>>2]|0;D=c[td+-44>>2]|0;k=c[td+-40>>2]|0;E=c[td+-20>>2]|0;F=c[td+4>>2]|0;M=td+-116|0;v=c[td+-92>>2]|0;N=c[j>>2]|0;x=(c[M>>2]|0)!=0;O=td+-64|0;l=(c[O>>2]|0)==0;do if(x)if(l)if(!E){rd=2387;break}else{l=1;m=H;rd=2171;break}else{cd(j,46151,Za);rd=2387;break}else{if(!l){if(a[N+165>>0]|0){cd(j,39404,_a);rd=2387;break}l=wk(N,H)|0;if((l|0)<0){c[bb>>2]=H;cd(j,39421,bb);rd=2387;break}else m=K}else{l=d[N+164>>0]|0;m=H}if((E|0)!=0&(l|0)>-1)rd=2171;else rd=2387}while(0);Ka:do if((rd|0)==2171){B=N+81|0;if(!(a[B>>0]|0)){t=N+165|0;if((l|0)!=1&(a[t>>0]|0)!=0){i=E+12|0;h=c[i>>2]|0;do if(h|0){if(c[N+480>>2]|0){Xd(N,h);break}pd=h;if((c[N+304>>2]|0)>>>0<=pd>>>0?(c[N+308>>2]|0)>>>0>pd>>>0:0){pd=N+300|0;c[h>>2]=c[pd>>2];c[pd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{pd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[i>>2]=0}s=E+8|0;h=c[s>>2]|0;if(!h)i=E+12|0;else{n=c[(c[j>>2]|0)+16>>2]|0;i=0;while(1)if((c[n+(i<<4)+12>>2]|0)==(h|0))break;else i=i+1|0;i=n+(i<<4)|0}C=E+16|0;i=bd(j,0,c[C>>2]|0,c[i>>2]|0)|0;h=c[j>>2]|0;u=E+24|0;n=c[u>>2]|0;do if(n|0){if(h|0?c[h+480>>2]|0:0){Vi(h,n);break}kd=n+32|0;pd=(c[kd>>2]|0)+-1|0;c[kd>>2]=pd;if(!pd)Vi(h,n)}while(0);c[u>>2]=i;La:do if(i){pd=i+32|0;c[pd>>2]=(c[pd>>2]|0)+1;if(a[E+45>>0]&2){q=c[E+72>>2]|0;h=c[i+8>>2]|0;Ma:do if(h|0){r=d[208+(d[q>>0]|0)>>0]|0;while(1){o=c[h>>2]|0;pd=a[o>>0]|0;n=(d[208+(pd&255)>>0]|0)-r|0;if(!(pd<<24>>24==0|(n|0)!=0)){p=q;do{o=o+1|0;p=p+1|0;pd=a[o>>0]|0;n=(d[208+(pd&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(n|0)!=0))}if(!n)break;h=c[h+20>>2]|0;if(!h)break Ma}c[E+76>>2]=h;break La}while(0);c[hc>>2]=q;c[hc+4>>2]=0;cd(j,41107,hc);a[j+17>>0]=1;i=0}}else i=0;while(0);if((a[t>>0]|0)==0?(i|0)!=0&(c[O>>2]|0)==0:0)A=(c[i+72>>2]|0)==(c[(c[N+16>>2]|0)+28>>2]|0)?1:l;else A=l;if((a[B>>0]|0)==0?(Zc=c[j>>2]|0,c[_c>>2]=j,Zc=c[Zc+16>>2]|0,c[_c+12>>2]=c[Zc+(A<<4)>>2],c[_c+4>>2]=c[Zc+(A<<4)+12>>2],c[_c+16>>2]=31419,c[_c+20>>2]=m,Zc=(A|0)==1,c[_c+8>>2]=Zc&1,(al(_c,E)|0)==0):0){i=c[s>>2]|0;if(!i)l=E+12|0;else{h=c[(c[j>>2]|0)+16>>2]|0;l=0;while(1)if((c[h+(l<<4)+12>>2]|0)==(i|0))break;else l=l+1|0;l=h+(l<<4)|0}z=bd(j,0,c[C>>2]|0,c[l>>2]|0)|0;l=c[j>>2]|0;i=c[u>>2]|0;do if(i|0){if(l|0?c[l+480>>2]|0:0){Vi(l,i);break}kd=i+32|0;pd=(c[kd>>2]|0)+-1|0;c[kd>>2]=pd;if(!pd)Vi(l,i)}while(0);c[u>>2]=z;Na:do if(z|0){pd=z+32|0;c[pd>>2]=(c[pd>>2]|0)+1;Oa:do if(a[E+45>>0]&2){o=c[E+72>>2]|0;l=c[z+8>>2]|0;Pa:do if(l|0){p=d[208+(d[o>>0]|0)>>0]|0;while(1){h=c[l>>2]|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-p|0;if(!(pd<<24>>24==0|(i|0)!=0)){n=o;do{h=h+1|0;n=n+1|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(i|0)!=0))}if(!i)break;l=c[l+20>>2]|0;if(!l)break Pa}c[E+76>>2]=l;break Oa}while(0);c[Ec>>2]=o;c[Ec+4>>2]=0;cd(j,41107,Ec);a[j+17>>0]=1;break Na}while(0);if(c[z+56>>2]|0){cd(j,46197,Fc);rd=2387;break Ka}w=qj(N,m)|0;if(!w){rd=2387;break Ka}Qa:do if(!(vk(j,w)|0)){u=j+200|0;t=a[u>>0]|0;s=(t&255)>1;do if(!s){n=c[(c[N+16>>2]|0)+(A<<4)+12>>2]|0;o=c[n+52>>2]|0;if(!o){i=n+44|0;l=n+48|0}else{i=a[w>>0]|0;if(!(i<<24>>24))l=0;else{l=0;h=w;do{h=h+1|0;l=G(l+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[h>>0]|0}while(i<<24>>24!=0)}l=(l>>>0)%((c[n+40>>2]|0)>>>0)|0;i=o+(l<<3)|0;l=o+(l<<3)+4|0}i=c[i>>2]|0;Ra:do if(!i)l=59292;else{p=d[208+(d[w>>0]|0)>>0]|0;while(1){l=c[l>>2]|0;i=i+-1|0;n=c[l+12>>2]|0;pd=a[n>>0]|0;h=(d[208+(pd&255)>>0]|0)-p|0;if(!(pd<<24>>24==0|(h|0)!=0)){o=w;do{n=n+1|0;o=o+1|0;pd=a[n>>0]|0;h=(d[208+(pd&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(h|0)!=0))}if(!h)break Ra;if(!i){l=59292;break}}}while(0);if(!(c[l+8>>2]|0))break;if(!v){c[Yc>>2]=m;cd(j,46238,Yc);rd=2378;break Qa}h=c[j+116>>2]|0;h=(h|0)==0?j:h;m=h+84|0;i=c[m>>2]|0;l=1<<A;if(i&l|0){rd=2378;break Qa}c[m>>2]=i|l;if(!Zc){rd=2378;break Qa}q=c[h>>2]|0;l=q+16|0;if(c[(c[l>>2]|0)+20>>2]|0){rd=2378;break Qa}if(a[h+199>>0]|0){rd=2378;break Qa}m=Pe(c[q>>2]|0,0,q,qd,0,542)|0;if(m|0){cd(h,32157,$c);c[h+12>>2]=m;rd=2378;break Qa}qd=c[qd>>2]|0;c[(c[l>>2]|0)+20>>2]=qd;l=c[q+92>>2]|0;h=c[qd+4>>2]|0;c[h+4>>2]=c[qd>>2];do if(!(b[h+22>>1]&2)){n=h+32|0;o=h+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[n>>2]=l;i=h+80|0;l=c[i>>2]|0;if(!l)break;m=l+-4|0;c[i>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;rd=2270;break}else{l=Wa[c[29352>>2]&127](m)|0;rd=2270}while(0);do if((rd|0)==2270){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{rd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[i>>2]=0}while(0);rd=Se(c[h>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((rd|0)!=7)break;l=q+81|0;do if(!(a[l>>0]|0)){if(a[q+82>>0]|0)break;a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;l=q+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[q+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);rd=2378;break Qa}while(0);rd=2378;break Qa}while(0);r=c[z>>2]|0;do if(r|0){l=a[r>>0]|0;Sa:do if(!(l<<24>>24)){l=39441;rd=2285}else{qd=l&255;l=208+qd|0;do if((qd|32|0)==115){l=a[r+1>>0]|0;if(!(l<<24>>24)){l=39442;rd=2285;break Sa}l=l&255;if((l|32|0)!=113){m=113;l=208+l|0;break}l=a[r+2>>0]|0;if(!(l<<24>>24)){l=39443;rd=2285;break Sa}l=l&255;if((l|32|0)!=108){m=108;l=208+l|0;break}l=a[r+3>>0]|0;if(!(l<<24>>24)){l=39444;rd=2285;break Sa}l=l&255;if((l|32|0)!=105){m=105;l=208+l|0;break}l=a[r+4>>0]|0;if(!(l<<24>>24)){l=39445;rd=2285;break Sa}l=l&255;if((l|32|0)!=116){m=116;l=208+l|0;break}l=a[r+5>>0]|0;if(!(l<<24>>24)){l=39446;rd=2285;break Sa}l=l&255;if((l|32|0)!=101){m=101;l=208+l|0;break}l=a[r+6>>0]|0;if(!(l<<24>>24)){l=39447;rd=2285;break Sa}if(l<<24>>24==95)break Sa;else{m=95;l=208+(l&255)|0}}else m=115;while(0);fd=d[l>>0]|0;ad=m;rd=2289}while(0);if((rd|0)==2285){fd=0;ad=a[208+(d[l>>0]|0)>>0]|0;rd=2289}if((rd|0)==2289?(fd|0)!=(ad&255|0):0)break;cd(j,46264,gd);rd=2378;break Qa}while(0);l=c[z+12>>2]|0;if((y|0)!=65&(l|0)!=0){c[id>>2]=(y|0)==33?46339:46346;c[id+4>>2]=E;c[id+8>>2]=0;cd(j,46302,id);rd=2378;break}q=(y|0)==65;if(q&(l|0)==0){c[jd>>2]=E;c[jd+4>>2]=0;cd(j,46352,jd);rd=2378;break}do if(s){h=q?33:y;if(N|0){rd=2319;break}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](36)|0;i=1;l=h;rd=2341;break}l=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){qd=c[14978]|0;pd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}m=Wa[c[29340>>2]&127](l)|0;if(!m)break Qa;l=Wa[c[29352>>2]&127](m)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){q=m;i=1;break}c[14987]=l;q=m;i=1}else{m=c[z+72>>2]|0;i=c[N+16>>2]|0;if(!m)l=-1e6;else{l=0;while(1)if((c[i+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}p=c[i+(l<<4)>>2]|0;if(x)n=c[i+16>>2]|0;else n=p;o=(l|0)==1;h=x|o?5:7;i=c[j>>2]|0;l=a[i+165>>0]|0;do if(!((l|t)<<24>>24)){m=c[i+312>>2]|0;if(!m)break;l=$a[m&127](c[i+316>>2]|0,h,w,r,n,c[j+240>>2]|0)|0;if((l|0)==1){cd(j,39216,ld);c[j+12>>2]=23;rd=2378;break Qa}if((l|2|0)!=2){cd(j,39231,md);c[j+12>>2]=1;rd=2378;break Qa}if(l|0){rd=2378;break Qa}i=c[j>>2]|0;l=a[i+165>>0]|0}while(0);m=o?34855:34585;do if(!(l<<24>>24)){if(a[u>>0]|0)break;l=c[i+312>>2]|0;if(!l)break;l=$a[l&127](c[i+316>>2]|0,18,m,0,p,c[j+240>>2]|0)|0;if((l|0)==1){cd(j,39216,nd);c[j+12>>2]=23;rd=2378;break Qa}if((l|2|0)==2)if(!l)break;else{rd=2378;break Qa}else{cd(j,39231,od);c[j+12>>2]=1;rd=2378;break Qa}}while(0);h=q?33:y;rd=2319}while(0);Ta:do if((rd|0)==2319){if(c[N+272>>2]|0){if(a[B>>0]|0){rd=2379;break Qa}}else{do if((e[N+276>>1]|0)>=36){l=N+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];i=N+284|0;c[i>>2]=(c[i>>2]|0)+1;i=0;l=h;rd=2341;break Ta}l=N+296|0;m=c[l>>2]|0;if(!m){l=N+292|0;break}else{c[l>>2]=c[m>>2];i=N+284|0;c[i>>2]=(c[i>>2]|0)+1;i=0;l=h;rd=2341;break Ta}}else l=N+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}m=_d(N,36,0)|0;i=0;l=h;rd=2341}while(0);if((rd|0)==2341)if(!m){rd=2378;break}else{q=m;h=l}p=q+4|0;I=p;J=I+32|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[q>>2]=w;n=c[C>>2]|0;Ua:do if(!n)i=0;else{o=(Eu(n)|0)+1|0;Va:do if(i){qd=Sv(o|0,0,-1,-1)|0;pd=L()|0;if(pd>>>0>0|(pd|0)==0&qd>>>0>2147483390){i=0;break Ua}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;rd=2367;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){qd=c[14978]|0;pd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){i=0;break Ua}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[N+272>>2]|0){if(a[B>>0]|0){i=0;break Ua}}else{do if(!(0<0|(0==0?(e[N+276>>1]|0)>>>0<o>>>0:0))){m=N+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];rd=N+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2367;break Va}m=N+296|0;l=c[m>>2]|0;if(!l){l=N+292|0;break}else{c[m>>2]=c[l>>2];rd=N+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2367;break Va}}else l=N+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(N,o,0)|0;rd=2367}while(0);if((rd|0)==2367)if(!l){i=0;break}ew(l|0,n|0,o|0)|0;i=l}while(0);c[p>>2]=i;c[q+20>>2]=c[(c[N+16>>2]|0)+(A<<4)+12>>2];c[q+24>>2]=c[z+72>>2];a[q+8>>0]=D;a[q+9>>0]=(h|0)==33?1:2;Wa:do if((d[u>>0]|0)>1){m=c[C>>2]|0;l=c[j+272>>2]|0;if(!l){m=0;l=F;break}while(1){if((c[l>>2]|0)==(m|0))break;l=c[l+12>>2]|0;if(!l){m=0;l=F;break Wa}}c[l>>2]=i;m=0;l=F}else{if(!F){m=F;l=0;break}m=F;l=dk(N,F,1,0)|0}while(0);c[q+12>>2]=l;c[q+16>>2]=k;c[j+236>>2]=q;qi(N,E);l=q;k=m;r=q;break Ka}else rd=2378;while(0);if((rd|0)==2378?N|0:0)rd=2379;do if((rd|0)==2379){if(c[N+480>>2]|0){Xd(N,w);rd=2387;break Ka}l=w;if((c[N+304>>2]|0)>>>0>l>>>0)break;if((c[N+308>>2]|0)>>>0<=l>>>0)break;rd=N+300|0;c[w>>2]=c[rd>>2];c[rd>>2]=w;rd=2387;break Ka}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](w);rd=2387;break Ka}else{rd=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);rd=2387;break Ka}}while(0);if((a[N+164>>0]|0)==1){rd=N+166|0;a[rd>>0]=a[rd>>0]|1;rd=2387}else rd=2387}else rd=2387}else rd=2387}while(0);do if((rd|0)==2387){qi(N,E);if(k){p=k+4|0;l=c[k>>2]|0;Xa:do if((c[p>>2]|0)>0){i=N+480|0;h=N+304|0;n=N+308|0;o=N+300|0;if(!N){m=0;while(1){l=c[l+(m<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=m+1|0;l=c[k>>2]|0;if((m|0)>=(c[p>>2]|0))break Xa}}m=0;do{l=c[l+(m<<3)>>2]|0;do if(l|0){if(c[i>>2]|0){Xd(N,l);break}rd=l;if((c[h>>2]|0)>>>0<=rd>>>0?(c[n>>2]|0)>>>0>rd>>>0:0){c[l>>2]=c[o>>2];c[o>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);m=m+1|0;l=c[k>>2]|0}while((m|0)<(c[p>>2]|0))}while(0);Ya:do if(l){do if(N|0){m=N+480|0;if(!(c[m>>2]|0)){i=l;if((c[N+304>>2]|0)>>>0>i>>>0)break;if((c[N+308>>2]|0)>>>0<=i>>>0)break;rd=N+300|0;c[l>>2]=c[rd>>2];c[rd>>2]=l}else Xd(N,l);l=m;rd=2420;break Ya}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);rd=2418;break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);rd=2418;break}}else rd=2418;while(0);if((rd|0)==2418)if(N){l=N+480|0;rd=2420}if((rd|0)==2420){if(c[l>>2]|0){Xd(N,k);l=0;k=F;r=0;break}rd=k;if((c[N+304>>2]|0)>>>0<=rd>>>0?(c[N+308>>2]|0)>>>0>rd>>>0:0){l=N+300|0;c[k>>2]=c[l>>2];c[l>>2]=k;l=0;k=F;r=0;break}}if(k)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);l=0;k=F;r=0;break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);l=0;k=F;r=0;break}else{l=0;k=F;r=0}}else{l=0;k=F;r=0}}while(0);if(k|0)ni(N,k);do if(!((l|0)==0|(c[j+236>>2]|0)!=0)){Xi(N,c[l+28>>2]|0);k=c[l>>2]|0;do if(k|0){if(N|0){if(c[N+480>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=c[l+4>>2]|0;do if(k|0){if(N|0){if(c[N+480>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=c[l+12>>2]|0;if(k|0)ni(N,k);k=c[l+16>>2]|0;do if(k|0){q=k+4|0;l=c[k>>2]|0;Za:do if((c[q>>2]|0)>0){h=N+480|0;n=N+304|0;o=N+308|0;p=N+300|0;if(!N){m=0;while(1){l=c[l+(m<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=m+1|0;l=c[k>>2]|0;if((m|0)>=(c[q>>2]|0))break Za}}i=0;do{l=c[l+(i<<3)>>2]|0;_a:do if(l|0){if(c[h>>2]|0){Xd(N,l);break}m=l;do if((c[n>>2]|0)>>>0<=m>>>0){if((c[o>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[p>>2];c[p>>2]=l;break _a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);i=i+1|0;l=c[k>>2]|0}while((i|0)<(c[q>>2]|0))}while(0);$a:do if(l){do if(N|0){m=N+480|0;if(!(c[m>>2]|0)){i=l;if((c[N+304>>2]|0)>>>0>i>>>0)break;if((c[N+308>>2]|0)>>>0<=i>>>0)break;j=N+300|0;c[l>>2]=c[j>>2];c[j>>2]=l}else Xd(N,l);l=m;rd=2487;break $a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);rd=2485;break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);rd=2485;break}}else rd=2485;while(0);if((rd|0)==2485)if(N){l=N+480|0;rd=2487}if((rd|0)==2487){if(c[l>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(r|0){if(N|0){if(c[N+480>>2]|0){Xd(N,r);break}j=r;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}}while(0);if(!(c[O>>2]|0)){qd=H;rd=c[qd+4>>2]|0;j=M;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break a}else{qd=K;rd=c[qd+4>>2]|0;j=M;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break a}}case 242:{c[td+4>>2]=e[td+2>>1];break}case 243:{c[td+-8>>2]=65;break}case 244:{c[td+16>>2]=33;break}case 246:case 245:{c[td+4>>2]=e[td+2>>1];c[td+8>>2]=0;break}case 247:{c[td+-20>>2]=122;c[td+-16>>2]=c[td+4>>2];break}case 315:case 267:case 248:{c[td+16>>2]=0;break}case 268:case 249:{c[td+-8>>2]=c[td+4>>2];break}case 250:{rd=td+-8|0;j=td+-20|0;c[(c[(c[j>>2]|0)+40>>2]|0)+36>>2]=c[rd>>2];c[(c[j>>2]|0)+40>>2]=c[rd>>2];break}case 251:{j=c[td+-8>>2]|0;c[j+40>>2]=j;break}case 252:{pd=td+4|0;qd=c[pd+4>>2]|0;rd=td+-20|0;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;cd(j,38526,i);break}case 253:{cd(j,38621,n);break}case 254:{cd(j,38705,o);break}case 255:{l=c[td+-20>>2]|0;m=c[td+-8>>2]|0;i=c[td+-68>>2]&255;h=td+-80|0;n=c[j>>2]|0;o=an(j,122,td+-56|0,c[h>>2]|0,c[td+4>>2]|0)|0;if(!o)k=m;else{if((d[j+200>>0]|0)<=1){j=gk(n,l,1)|0;c[o+20>>2]=j;if(!m){k=m;m=0}else{k=m;m=dk(n,m,1,0)|0}}else{c[o+20>>2]=l;l=0;k=0}c[o+16>>2]=m;a[o+1>>0]=i}if(l|0)ri(n,l);if(k|0)ni(n,k);c[h>>2]=o;break}case 256:{q=c[td+-32>>2]|0;l=c[td+-20>>2]|0;m=c[td+-68>>2]&255;r=c[td+-8>>2]|0;s=td+-80|0;t=c[j>>2]|0;u=an(j,120,td+-44|0,c[s>>2]|0,c[td+4>>2]|0)|0;do if(!u){do if(q|0){p=q+4|0;k=c[q>>2]|0;ab:do if((c[p>>2]|0)>0){i=t+480|0;h=t+304|0;n=t+308|0;o=t+300|0;if(!t){m=0;while(1){k=c[k+(m<<3)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);m=m+1|0;k=c[q>>2]|0;if((m|0)>=(c[p>>2]|0))break ab}}m=0;do{k=c[k+(m<<3)>>2]|0;do if(k|0){if(c[i>>2]|0){Xd(t,k);break}j=k;if((c[h>>2]|0)>>>0<=j>>>0?(c[n>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[o>>2];c[o>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);m=m+1|0;k=c[q>>2]|0}while((m|0)<(c[p>>2]|0))}while(0);bb:do if(k){do if(t|0){m=t+480|0;if(!(c[m>>2]|0)){i=k;if((c[t+304>>2]|0)>>>0>i>>>0)break;if((c[t+308>>2]|0)>>>0<=i>>>0)break;j=t+300|0;c[k>>2]=c[j>>2];c[j>>2]=k}else Xd(t,k);k=q;rd=2569;break bb}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);rd=2567;break}else{rd=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);rd=2567;break}}else rd=2567;while(0);if((rd|0)==2567)if(!t)k=q;else{m=t+480|0;k=q;rd=2569}if((rd|0)==2569){if(c[m>>2]|0){Xd(t,k);break}j=k;if((c[t+304>>2]|0)>>>0<=j>>>0?(c[t+308>>2]|0)>>>0>j>>>0:0){j=t+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(r){k=c[r>>2]|0;if(k|0)ri(t,k);k=c[r+4>>2]|0;if(k|0)ni(t,k);k=c[r+8>>2]|0;if(k|0)ri(t,k);k=c[r+12>>2]|0;if(k|0)ni(t,k);if(t|0){if(c[t+480>>2]|0){Xd(t,r);k=l;break}j=r;if((c[t+304>>2]|0)>>>0<=j>>>0?(c[t+308>>2]|0)>>>0>j>>>0:0){k=t+300|0;c[r>>2]=c[k>>2];c[k>>2]=r;k=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);k=l;break}else{k=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);k=l;break}}else k=l}else{if((d[j+200>>0]|0)>1)k=0;else{k=l;l=fk(t,l,1)|0}c[u+8>>2]=l;c[u+24>>2]=q;c[u+28>>2]=r;a[u+1>>0]=m}while(0);if(k|0)pi(t,k,1);c[s>>2]=u;break}case 257:{l=c[td+-8>>2]|0;m=td+-56|0;i=c[j>>2]|0;h=an(j,121,td+-32|0,c[m>>2]|0,c[td+4>>2]|0)|0;if(!h)k=l;else{if((d[j+200>>0]|0)<=1)if(!l){k=l;l=0}else{k=l;l=dk(i,l,1,0)|0}else k=0;c[h+16>>2]=l;a[h+1>>0]=11}if(k|0)ni(i,k);c[m>>2]=h;break}case 258:{p=c[j>>2]|0;i=c[td+-8>>2]|0;q=td+-20|0;o=c[q>>2]|0;h=c[td+4>>2]|0;cb:do if(!p){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](44)|0;rd=2630;break}k=Wa[c[29356>>2]&127](44)|0;if((c[14985]|0)>>>0<44)c[14985]=44;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=2633}else rd=2633}else rd=2631}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){rd=2631;break}}else{do if((e[p+276>>1]|0)>=44){l=p+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=p+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2630;break cb}l=p+296|0;k=c[l>>2]|0;if(!k){k=p+292|0;break}else{c[l>>2]=c[k>>2];rd=p+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2630;break cb}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(p,44,0)|0;rd=2630}while(0);if((rd|0)==2630)if(!k)rd=2631;else rd=2633;if((rd|0)==2631)if(!i)k=0;else{pi(p,i,1);k=0}else if((rd|0)==2633){I=k+2|0;J=I+42|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));a[k>>0]=-125;c[k+8>>2]=i;a[k+1>>0]=11;while(1)if(!(a[880+(d[o>>0]|0)>>0]&1))break;else o=o+1|0;l=h-o|0;db:do if((l|0)<=0)if(!o)l=0;else{m=l;rd=2640}else while(1){m=l+-1|0;if(!(a[880+(d[o+m>>0]|0)>>0]&1)){m=l;rd=2640;break db}if((l|0)>1)l=m;else{rd=2640;break}}while(0);eb:do if((rd|0)==2640){h=Sv(m|0,((m|0)<0)<<31>>31|0,1,0)|0;n=L()|0;fb:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))rd=2650;else{l=0;break eb}else{do if(!(n>>>0>0|((n|0)==0?h>>>0>(e[p+276>>1]|0)>>>0:0))){i=p+300|0;l=c[i>>2]|0;if(l|0){c[i>>2]=c[l>>2];j=p+284|0;c[j>>2]=(c[j>>2]|0)+1;break fb}i=p+296|0;l=c[i>>2]|0;if(!l){l=p+292|0;break}else{c[i>>2]=c[l>>2];j=p+284|0;c[j>>2]=(c[j>>2]|0)+1;break fb}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;rd=2650}while(0);if((rd|0)==2650)l=_d(p,h,n)|0;if(l){ew(l|0,o|0,m|0)|0;a[l+m>>0]=0;m=a[l>>0]|0;if(m<<24>>24){h=0;i=l;do{if(a[880+(m&255)>>0]&1)a[i>>0]=32;h=h+1|0;i=l+h|0;m=a[i>>0]|0}while(m<<24>>24!=0)}}else l=0}while(0);c[k+32>>2]=l}c[q>>2]=k;break}case 259:{k=ej(j,71,0,0)|0;c[td+-32>>2]=k;if(k|0)a[k+1>>0]=4;break}case 260:{k=oj(c[j>>2]|0,71,td+-8|0,1)|0;c[td+-56>>2]=k;if(k|0)a[k+1>>0]=c[td+-32>>2];break}case 261:{c[td+4>>2]=1;break}case 263:{c[td+4>>2]=3;break}case 264:{v=c[td+4>>2]|0;u=c[td+-8>>2]|0;w=c[j>>2]|0;gb:do if(!(a[w+81>>0]|0)){hb:do if(!(a[w+165>>0]|0)){i=j+4|0;h=w+24|0;n=(c[h>>2]&1|0)==0;o=w+16|0;qd=c[(c[o>>2]|0)+12>>2]|0;a[w+78>>0]=a[qd+77>>0]|0;if((b[qd+78>>1]&1)==0?(Da=eh(w,0,i,0)|0,(Da|0)!=0):0)k=Da;else rd=2670;ib:do if((rd|0)==2670){k=w+20|0;l=c[k>>2]|0;if((l|0)>1)do{m=l;l=l+-1|0;if((b[(c[(c[o>>2]|0)+(l<<4)+12>>2]|0)+78>>1]&1)==0?(Sa=eh(w,l,i,0)|0,Sa|0):0){k=Sa;break ib}}while((m|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[w+89>>0]|0))break hb;c[h>>2]=c[h>>2]|16;break hb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break gb}else k=w+20|0;while(0);t=c[v+12>>2]|0;s=c[v+16>>2]|0;q=c[k>>2]|0;if((q|0)>0){r=(t|0)==0;p=c[w+16>>2]|0;k=0;o=0;do{h=o^o>>>0<2;if(!r){m=c[p+(h<<4)>>2]|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(qd<<24>>24==0|(l|0)!=0)){i=t;do{m=m+1|0;i=i+1|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(l|0)!=0))}if(!l)rd=2687}else rd=2687;if((rd|0)==2687){rd=0;i=c[p+(h<<4)+12>>2]|0;h=c[i+52>>2]|0;if(!h){l=i+44|0;k=i+48|0}else{l=a[s>>0]|0;if(!(l<<24>>24))k=0;else{k=0;m=s;do{m=m+1|0;k=G(k+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[m>>0]|0}while(l<<24>>24!=0)}k=(k>>>0)%((c[i+40>>2]|0)>>>0)|0;l=h+(k<<3)|0;k=h+(k<<3)+4|0}l=c[l>>2]|0;jb:do if(!l)k=59292;else{n=d[208+(d[s>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;l=l+-1|0;i=c[k+12>>2]|0;qd=a[i>>0]|0;m=(d[208+(qd&255)>>0]|0)-n|0;if(!(qd<<24>>24==0|(m|0)!=0)){h=s;do{i=i+1|0;h=h+1|0;qd=a[i>>0]|0;m=(d[208+(qd&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(m|0)!=0))}if(!m)break jb;if(!l){k=59292;break}}}while(0);k=c[k+8>>2]|0;if(k){rd=2702;break}}o=o+1|0}while((o|0)<(q|0));if(k|0){jl(j,k);break}}if(!u){c[qc>>2]=v;c[qc+4>>2]=0;cd(j,46398,qc)}else hl(j,t);a[j+17>>0]=1}while(0);qi(w,v);break}case 265:{rd=c[td+-32>>2]|0;cn(j,24,30104,rd,rd,c[td+-8>>2]|0,c[td+4>>2]|0);break}case 266:{rd=c[td+4>>2]|0;cn(j,25,30144,rd,0,0,rd);break}case 269:{m=c[j>>2]|0;kb:do if(!(a[m+165>>0]|0)){i=j+4|0;h=m+24|0;n=(c[h>>2]&1|0)==0;o=m+16|0;pd=c[(c[o>>2]|0)+12>>2]|0;a[m+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(ga=eh(m,0,i,0)|0,(ga|0)!=0):0)k=ga;else rd=2715;lb:do if((rd|0)==2715){k=c[m+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[o>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Ga=eh(m,k,i,0)|0,Ga|0):0){k=Ga;break lb}}while((l|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[m+89>>0]|0))break kb;c[h>>2]=c[h>>2]|16;break kb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break a}while(0);k=c[j>>2]|0;w=k+20|0;l=c[w>>2]|0;if((l|0)>0){x=j+116|0;v=0;u=c[k+16>>2]|0;k=l;while(1){l=c[(c[u+12>>2]|0)+16>>2]|0;if(l){do{k=c[l+8>>2]|0;if((c[k+56>>2]|0)==0?(ec=c[k+8>>2]|0,ec|0):0){t=k+72|0;s=ec;do{m=c[t>>2]|0;if(!m)k=-1e6;else{i=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[i+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}r=c[x>>2]|0;r=(r|0)==0?j:r;m=r+84|0;i=c[m>>2]|0;q=1<<k;mb:do if((((i&q|0)==0?(c[m>>2]=i|q,(k|0)==1):0)?(fc=c[r>>2]|0,gc=fc+16|0,(c[(c[gc>>2]|0)+20>>2]|0)==0):0)?(a[r+199>>0]|0)==0:0){k=Pe(c[fc>>2]|0,0,fc,qd,0,542)|0;if(k|0){cd(r,32157,cc);c[r+12>>2]=k;break}pd=c[qd>>2]|0;c[(c[gc>>2]|0)+20>>2]=pd;k=c[fc+92>>2]|0;h=c[pd+4>>2]|0;c[h+4>>2]=c[pd>>2];do if(!(b[h+22>>1]&2)){n=h+32|0;o=h+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[n>>2]=k;i=h+80|0;k=c[i>>2]|0;if(!k)break;m=k+-4|0;c[i>>2]=m;k=m;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;pd=(c[14820]|0)+1|0;c[14820]=pd;c[14821]=(pd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](m)|0;rd=2750;break}else{k=Wa[c[29352>>2]&127](m)|0;rd=2750}while(0);do if((rd|0)==2750){rd=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{pd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[i>>2]=0}while(0);pd=Se(c[h>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((pd|0)!=7)break;k=fc+81|0;do if(!(a[k>>0]|0)){if(a[fc+82>>0]|0)break;a[k>>0]=1;if((c[fc+180>>2]|0)>0)c[fc+264>>2]=1;k=fc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[fc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break mb}while(0)}while(0);pd=r+80|0;c[pd>>2]=c[pd>>2]|q;bl(j,s,-1);s=c[s+20>>2]|0}while((s|0)!=0)}l=c[l>>2]|0}while((l|0)!=0);k=c[w>>2]|0}v=v+1|0;if((v|0)>=(k|0))break;else u=u+16|0}}break}case 270:{l=td+-8|0;s=td+4|0;v=c[j>>2]|0;nb:do if(!(a[v+165>>0]|0)){i=j+4|0;h=v+24|0;n=(c[h>>2]&1|0)==0;o=v+16|0;pd=c[(c[o>>2]|0)+12>>2]|0;a[v+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(Ea=eh(v,0,i,0)|0,(Ea|0)!=0):0)k=Ea;else rd=2770;ob:do if((rd|0)==2770){k=c[v+20>>2]|0;if((k|0)>1)do{m=k;k=k+-1|0;if((b[(c[(c[o>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Pa=eh(v,k,i,0)|0,Pa|0):0){k=Pa;break ob}}while((m|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[v+89>>0]|0))break nb;c[h>>2]=c[h>>2]|16;break nb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break a}while(0);k=c[j>>2]|0;do if(!(c[s>>2]|0)){q=qj(k,l)|0;if(!q)break a;p=a[v+78>>0]|0;h=c[v+392>>2]|0;if(!h){m=v+384|0;k=v+388|0}else{m=a[q>>0]|0;if(!(m<<24>>24))k=0;else{k=0;i=q;do{i=i+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[i>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[v+380>>2]|0)>>>0)|0;m=h+(k<<3)|0;k=h+(k<<3)+4|0}m=c[m>>2]|0;pb:do if(!m)k=59292;else{o=d[208+(d[q>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;h=c[k+12>>2]|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-o|0;if(!(pd<<24>>24==0|(i|0)!=0)){n=q;do{h=h+1|0;n=n+1|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(i|0)!=0))}if(!i)break pb;if(!m){k=59292;break}}}while(0);pd=c[k+8>>2]|0;if((pd|0)==0|(pd+(((p&255)+-1|0)*20|0)|0)==0){do if(v){if(c[v+480>>2]|0){Xd(v,q);break}pd=q;if((c[v+304>>2]|0)>>>0<=pd>>>0?(c[v+308>>2]|0)>>>0>pd>>>0:0){pd=v+300|0;c[q>>2]=c[pd>>2];c[pd>>2]=q}else rd=2818}else rd=2818;while(0);do if((rd|0)==2818)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{pd=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);k=c[j>>2]|0;if(!(c[td+8>>2]|0)){m=d[k+164>>0]|0;break}if(a[k+165>>0]|0){cd(j,39404,Vb);break a}k=wk(k,l)|0;if((k|0)>=0){l=s;m=k;break}c[Yb>>2]=l;cd(j,39421,Yb);break a}k=c[j>>2]|0;h=k+20|0;l=c[h>>2]|0;if((l|0)>0){i=0;m=c[k+16>>2]|0;while(1){k=c[(c[m+12>>2]|0)+16>>2]|0;if(!k)k=l;else{do{gn(j,c[k+8>>2]|0,q);k=c[k>>2]|0}while((k|0)!=0);k=c[h>>2]|0}i=i+1|0;if((i|0)>=(k|0))break;else{m=m+16|0;l=k}}}if(v|0){if(c[v+480>>2]|0){Xd(v,q);break a}j=q;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[q>>2]=c[j>>2];c[j>>2]=q;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break a}else{j=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break a}}else{if(!(c[td+8>>2]|0)){m=d[k+164>>0]|0;break}if(a[k+165>>0]|0){cd(j,39404,Qa);break a}k=wk(k,l)|0;if((k|0)<0){c[Va>>2]=l;cd(j,39421,Va);break a}else{l=s;m=k}}while(0);u=qj(v,l)|0;if(u|0){k=c[(c[v+16>>2]|0)+(m<<4)>>2]|0;l=Sd(v,u,k)|0;if(!l){r=hi(v,u,k)|0;do if(!(c[v+480>>2]|0)){pd=u;if((c[v+304>>2]|0)>>>0<=pd>>>0?(c[v+308>>2]|0)>>>0>pd>>>0:0){pd=v+300|0;c[u>>2]=c[pd>>2];c[pd>>2]=u;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{pd=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}else Xd(v,u);while(0);if(!r){cd(j,46778,dc);break a}q=c[j+116>>2]|0;q=(q|0)==0?j:q;k=q+84|0;l=c[k>>2]|0;p=1<<m;do if((((l&p|0)==0?(c[k>>2]=l|p,(m|0)==1):0)?(xc=c[q>>2]|0,lc=xc+16|0,(c[(c[lc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[xc>>2]|0,0,xc,qd,0,542)|0;if(k|0){cd(q,32157,jc);c[q+12>>2]=k;break}qd=c[qd>>2]|0;c[(c[lc>>2]|0)+20>>2]=qd;k=c[xc+92>>2]|0;i=c[qd+4>>2]|0;c[i+4>>2]=c[qd>>2];if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025?(k+-1&k|0)==0:0){c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2903;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2903}while(0);do if((rd|0)==2903){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);rd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((rd|0)==7){k=xc+81|0;do if(!(a[k>>0]|0)){if(a[xc+82>>0]|0)break;a[k>>0]=1;if((c[xc+180>>2]|0)>0)c[xc+264>>2]=1;k=xc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[xc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break}}}while(0);rd=q+80|0;c[rd>>2]=c[rd>>2]|p;bl(j,r,-1);break a}if((c[l+56>>2]|0)==0?(r=c[l+8>>2]|0,(r|0)!=0):0){s=l+72|0;t=j+116|0;do{l=c[s>>2]|0;if(!l)k=-1e6;else{m=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0}q=c[t>>2]|0;q=(q|0)==0?j:q;l=q+84|0;m=c[l>>2]|0;p=1<<k;qb:do if((((m&p|0)==0?(c[l>>2]=m|p,(k|0)==1):0)?(Rc=c[q>>2]|0,Sc=Rc+16|0,(c[(c[Sc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[Rc>>2]|0,0,Rc,qd,0,542)|0;if(k|0){cd(q,32157,Pc);c[q+12>>2]=k;break}pd=c[qd>>2]|0;c[(c[Sc>>2]|0)+20>>2]=pd;k=c[Rc+92>>2]|0;i=c[pd+4>>2]|0;c[i+4>>2]=c[pd>>2];do if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;pd=(c[14820]|0)+1|0;c[14820]=pd;c[14821]=(pd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2856;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2856}while(0);do if((rd|0)==2856){rd=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{pd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);pd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((pd|0)!=7)break;k=Rc+81|0;do if(!(a[k>>0]|0)){if(a[Rc+82>>0]|0)break;a[k>>0]=1;if((c[Rc+180>>2]|0)>0)c[Rc+264>>2]=1;k=Rc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Rc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break qb}while(0)}while(0);pd=q+80|0;c[pd>>2]=c[pd>>2]|p;bl(j,r,-1);r=c[r+20>>2]|0}while((r|0)!=0);if(v|0)rd=2871}else rd=2871;if((rd|0)==2871){if(c[v+480>>2]|0){Xd(v,u);break a}j=u;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[u>>2]=c[j>>2];c[j>>2]=u;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break a}else{j=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break a}}break}case 271:{zj(j,0,0);break}case 272:{zj(j,td+-8|0,td+4|0);break}case 273:{w=c[td+-32>>2]|0;i=td+4|0;x=c[j>>2]|0;y=x+24|0;z=c[y>>2]|0;do if(!(a[x+81>>0]|0)){l=c[w+8>>2]|0;if(!l)k=w+12|0;else{m=c[x+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}s=bd(j,0,c[w+16>>2]|0,c[k>>2]|0)|0;if(s){l=c[s+72>>2]|0;if(!l)u=-1e6;else{m=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){u=k;break}else k=k+1|0}v=c[(c[x+16>>2]|0)+(u<<4)>>2]|0;c[y>>2]=c[y>>2]|2;t=qj(x,i)|0;if(t){rb:do if(!(Sd(x,t,v)|0)){if(hi(x,t,v)|0){c[ib>>2]=t;cd(j,46940,ib);rd=3010;break}if((on(j,s)|0)==0?(vk(j,t)|0)==0:0){l=c[s>>2]|0;if(c[s+12>>2]|0){c[wb>>2]=l;cd(j,46999,wb);rd=3010;break}k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(Gb=c[k+312>>2]|0,Gb|0):0){k=$a[Gb&127](c[k+316>>2]|0,26,v,l,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Hb);c[j+12>>2]=23;rd=3010;break rb}if((k|2|0)==2)if(!k)break;else{rd=3010;break rb}else{cd(j,39231,Ib);c[j+12>>2]=1;rd=3010;break rb}}while(0);if(!(Sk(j,s)|0)){if(!(c[s+56>>2]|0))q=0;else{k=c[s+64>>2]|0;sb:do if(!k)k=0;else while(1){if((c[k>>2]|0)==(x|0))break sb;k=c[k+24>>2]|0;if(!k){k=0;break}}while(0);q=(c[(c[c[k+8>>2]>>2]|0)+76>>2]|0)==0?0:k}r=j+8|0;k=c[r>>2]|0;h=j+116|0;tb:do if(!k){i=c[j>>2]|0;do if(!(c[h>>2]|0)){if(b[i+76>>1]&8)break;a[j+23>>0]=1}while(0);ub:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=2968;else break tb;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break ub}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break ub}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=2968}while(0);if((rd|0)==2968)m=_d(i,224,0)|0;if(!m)break;I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[r>>2]=m;Di(m,61,0,1,0)|0;p=m;rd=2973}else{p=k;rd=2973}while(0);vb:do if((rd|0)==2973){h=c[h>>2]|0;a[((h|0)==0?j:h)+21>>0]=1;h=c[s>>2]|0;m=a[h>>0]|0;if((h|0)!=(-1|0)&m<<24>>24!=0){l=h;k=0;do{i=l+1|0;if((m&255)>191){l=i;while(1){m=a[l>>0]|0;if((m&-64)<<24>>24==-128)l=l+1|0;else break}}else{l=i;m=a[i>>0]|0}k=k+1|0}while(m<<24>>24!=0&(l|0)!=(-1|0))}else k=0;n=(u|0)==1;o=n&1;c[tc>>2]=v;c[tc+4>>2]=34585;c[tc+8>>2]=v;c[tc+12>>2]=h;c[tc+16>>2]=t;c[tc+20>>2]=o;c[tc+24>>2]=h;Ak(j,47026,tc);c[uc>>2]=v;c[uc+4>>2]=34585;c[uc+8>>2]=t;c[uc+12>>2]=t;c[uc+16>>2]=t;c[uc+20>>2]=k;c[uc+24>>2]=h;Ak(j,47187,uc);if(Sd(x,39382,v)|0){qd=c[s>>2]|0;c[vc>>2]=v;c[vc+4>>2]=t;c[vc+8>>2]=qd;Ak(j,47464,vc)}if(!n){c[wc>>2]=v;c[wc+4>>2]=h;c[wc+8>>2]=t;c[wc+12>>2]=h;c[wc+16>>2]=v;c[wc+20>>2]=t;Ak(j,47522,wc)}do if(q|0){i=j+44|0;l=(c[i>>2]|0)+1|0;c[i>>2]=l;i=p+108|0;k=c[i>>2]|0;m=p+112|0;if((c[m>>2]|0)>(k|0)){c[i>>2]=k+1;qd=c[p+104>>2]|0;a[qd+(k*20|0)>>0]=110;b[qd+(k*20|0)+2>>1]=0;c[qd+(k*20|0)+4>>2]=0;c[qd+(k*20|0)+8>>2]=l;c[qd+(k*20|0)+12>>2]=0;c[qd+(k*20|0)+16>>2]=0;a[qd+(k*20|0)+1>>0]=0}else k=Di(p,110,0,l,0)|0;if(!(a[(c[p>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[i>>2]|0)+-1|0;Ei(p,(c[p+104>>2]|0)+(k*20|0)|0,t,0)}k=c[i>>2]|0;if((c[m>>2]|0)>(k|0)){c[i>>2]=k+1;qd=c[p+104>>2]|0;a[qd+(k*20|0)>>0]=-91;b[qd+(k*20|0)+2>>1]=0;c[qd+(k*20|0)+4>>2]=l;c[qd+(k*20|0)+8>>2]=0;c[qd+(k*20|0)+12>>2]=0;c[qd+(k*20|0)+16>>2]=0;a[qd+(k*20|0)+1>>0]=0}else k=Di(p,165,l,0,0)|0;if(a[(c[p>>2]|0)+81>>0]|0)break;if((k|0)<0)k=(c[i>>2]|0)+-1|0;l=c[p+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=q;a[m>>0]=-12;qd=q+12|0;c[qd>>2]=(c[qd>>2]|0)+1;break}else{Ei(p,l+(k*20|0)|0,q,-12);break}}while(0);i=c[r>>2]|0;do if(!i){c[Jc>>2]=v;c[Jc+4>>2]=34585;c[Jc+8>>2]=v;c[Jc+12>>2]=o;Ak(j,47804,Jc);if(n)break vb}else{k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(u<<4)+12>>2]>>2]|0)+1|0;l=i+108|0;m=c[l>>2]|0;if((c[i+112>>2]|0)>(m|0)){c[l>>2]=m+1;qd=c[i+104>>2]|0;a[qd+(m*20|0)>>0]=95;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=u;c[qd+(m*20|0)+8>>2]=1;c[qd+(m*20|0)+12>>2]=k;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else Di(i,95,u,1,k)|0;Bk(c[r>>2]|0,u,0);if(n){c[Tc>>2]=v;c[Tc+4>>2]=34585;c[Tc+8>>2]=v;c[Tc+12>>2]=o;Ak(j,47804,Tc);break vb}else{Bk(c[r>>2]|0,1,0);c[Uc>>2]=v;c[Uc+4>>2]=34585;c[Uc+8>>2]=v;c[Uc+12>>2]=o;Ak(j,47804,Uc);break}}while(0);c[Vc>>2]=34585;c[Vc+4>>2]=v;Ak(j,47948,Vc)}while(0);qi(x,w);if(x|0)rd=3013}else rd=3010}else rd=3010}else{c[hb>>2]=t;cd(j,46940,hb);rd=3010}while(0);if((rd|0)==3010){qi(x,w);rd=3013}if((rd|0)==3013){if(c[x+480>>2]|0){Xd(x,t);break}j=t;if((c[x+304>>2]|0)>>>0<=j>>>0?(c[x+308>>2]|0)>>>0>j>>>0:0){j=x+300|0;c[t>>2]=c[j>>2];c[j>>2]=t;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{j=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else rd=3011}else rd=3011}else rd=3011;while(0);if((rd|0)==3011)qi(x,w);c[y>>2]=z;break}case 274:{h=td+-8|0;o=td+-4|0;c[o>>2]=(c[j+188>>2]|0)-(c[h>>2]|0)+(c[j+192>>2]|0);s=c[j>>2]|0;if((c[j+36>>2]|0)==0?(Nb=s+81|0,(a[Nb>>0]|0)==0):0){r=c[j+228>>2]|0;l=c[r+72>>2]|0;m=c[s+16>>2]|0;if(!l)t=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){t=k;break}else k=k+1|0}p=c[m+(t<<4)>>2]|0;q=(c[r>>2]|0)+16|0;m=c[r+4>>2]|0;i=(b[r+42>>1]|0)+-1|0;l=c[m+(i<<4)+4>>2]|0;k=Sd(s,q,p)|0;k=c[k>>2]|0;do if(((a[s+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(db=c[s+312>>2]|0,db|0):0){k=$a[db&127](c[s+316>>2]|0,26,p,k,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,eb);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,fb);c[j+12>>2]=1;break a}}while(0);if(!l)l=0;else l=(a[c[l+12>>2]>>0]|0)==114?0:l;if(a[m+(i<<4)+15>>0]&1){cd(j,48091,jb);break a}if(c[r+8>>2]|0){cd(j,48123,kb);break a}if(!(0==0?(c[s+32>>2]&16384|0)==0:0)?(l|0)!=0&(c[r+16>>2]|0)!=0:0){cd(j,48150,lb);break a}k=(l|0)!=0;if(!(k|(a[m+(i<<4)+12>>0]|0)==0)){cd(j,48209,xb);break a}wb:do if(k){c[qd>>2]=0;do if(!(Wj(s,l,1,65,qd)|0)){m=c[qd>>2]|0;if(!m){cd(j,48262,Ab);break}if(!((b[m+8>>1]&9216)==0?!(c[m+24>>2]|0):0))Cg(m);k=c[m+32>>2]|0;do if(!k)rd=3059;else{if(c[k+480>>2]|0){Xd(k,m);break}l=m;if((c[k+304>>2]|0)>>>0>l>>>0){rd=3059;break}if((c[k+308>>2]|0)>>>0<=l>>>0){rd=3059;break}qd=k+300|0;c[m>>2]=c[qd>>2];c[qd>>2]=m}while(0);do if((rd|0)==3059)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{qd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);break wb}while(0);break a}while(0);h=c[h>>2]|0;n=c[o>>2]|0;xb:do if(h|0){m=Sv(n|0,0,1,0)|0;i=L()|0;yb:do if(c[s+272>>2]|0)if(!(a[Nb>>0]|0))rd=3075;else break xb;else{do if(0<0|(0==0?n>>>0<(e[s+276>>1]|0)>>>0:0)){k=s+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];qd=s+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break yb}k=s+296|0;l=c[k>>2]|0;if(!l){k=s+292|0;break}else{c[k>>2]=c[l>>2];qd=s+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break yb}}else k=s+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3075}while(0);if((rd|0)==3075)l=_d(s,m,i)|0;if(l|0){ew(l|0,h|0,n|0)|0;a[l+n>>0]=0;k=(c[o>>2]|0)+-1|0;m=s+24|0;i=c[m>>2]|0;if((k|0)>0){k=l+k|0;do{qd=a[k>>0]|0;if(qd<<24>>24!=59?(a[880+(qd&255)>>0]&1)==0:0)break;a[k>>0]=0;k=k+-1|0}while(k>>>0>l>>>0);k=c[m>>2]|0}else k=i;c[m>>2]=k|2;qd=c[r+52>>2]|0;c[Zb>>2]=p;c[Zb+4>>2]=34585;c[Zb+8>>2]=qd;c[Zb+12>>2]=l;c[Zb+16>>2]=qd+1;c[Zb+20>>2]=q;Ak(j,48308,Zb);zb:do if(!(c[s+480>>2]|0)){k=l;do if((c[s+304>>2]|0)>>>0<=k>>>0){if((c[s+308>>2]|0)>>>0<=k>>>0)break;qd=s+300|0;c[l>>2]=c[qd>>2];c[qd>>2]=l;break zb}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{qd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(s,l);while(0);c[m>>2]=i}}while(0);p=j+8|0;k=c[p>>2]|0;Ab:do if(!k){m=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;Bb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3106;else break Ab;else{do if((e[m+276>>1]|0)>=224){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Bb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Bb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3106}while(0);if((rd|0)==3106)k=_d(m,224,0)|0;if(k|0){I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=m;l=m+4|0;m=c[l>>2]|0;if(m|0)c[m+4>>2]=k;c[k+8>>2]=m;c[k+4>>2]=0;c[l>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[p>>2]=k;Di(k,61,0,1,0)|0;rd=3111}}else rd=3111;while(0);do if((rd|0)==3111){o=j+19|0;l=a[o>>0]|0;if(!(l<<24>>24)){rd=j+44|0;n=(c[rd>>2]|0)+1|0;c[rd>>2]=n}else{n=l+-1<<24>>24;a[o>>0]=n;n=c[j+148+((n&255)<<2)>>2]|0}i=k+108|0;l=c[i>>2]|0;h=k+112|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=94;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=t;c[rd+(l*20|0)+8>>2]=n;c[rd+(l*20|0)+12>>2]=2;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,94,t,n,2)|0;l=1<<t;rd=k+152|0;c[rd>>2]=c[rd>>2]|l;if((t|0)!=1?a[(c[(c[(c[k>>2]|0)+16>>2]|0)+(t<<4)+4>>2]|0)+9>>0]|0:0){rd=k+156|0;c[rd>>2]=c[rd>>2]|l}l=c[i>>2]|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=83;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=n;c[rd+(l*20|0)+8>>2]=-2;c[rd+(l*20|0)+12>>2]=0;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,83,n,-2,0)|0;l=c[i>>2]|0;m=l+2|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=47;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=n;c[rd+(l*20|0)+8>>2]=m;c[rd+(l*20|0)+12>>2]=0;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,47,n,m,0)|0;l=c[i>>2]|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=95;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=t;c[rd+(l*20|0)+8>>2]=2;c[rd+(l*20|0)+12>>2]=3;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,95,t,2,3)|0;if(!n)break;k=a[o>>0]|0;if((k&255)>=8)break;a[o>>0]=k+1<<24>>24;c[j+148+((k&255)<<2)>>2]=n}while(0);i=c[p>>2]|0;if(i|0){k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(t<<4)+12>>2]>>2]|0)+1|0;l=i+108|0;m=c[l>>2]|0;if((c[i+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[i+104>>2]|0;a[j+(m*20|0)>>0]=95;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=t;c[j+(m*20|0)+8>>2]=1;c[j+(m*20|0)+12>>2]=k;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(i,95,t,1,k)|0;Bk(c[p>>2]|0,t,0);if((t|0)!=1)Bk(c[p>>2]|0,1,0)}}break}case 275:{D=j+24|0;a[D>>0]=(a[D>>0]|0)+1<<24>>24;D=c[j>>2]|0;E=D+272|0;c[E>>2]=(c[E>>2]|0)+1;F=c[td+4>>2]|0;H=D+81|0;Cb:do if(!(a[H>>0]|0)){l=c[F+8>>2]|0;if(!l)k=F+12|0;else{m=c[D+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}C=bd(j,0,c[F+16>>2]|0,c[k>>2]|0)|0;if(C|0){if(c[C+56>>2]|0){cd(j,48417,Ia);break}if(c[C+12>>2]|0){cd(j,48451,Ja);break}if(!(on(j,C)|0)){l=c[C+72>>2]|0;if(!l)A=-1e6;else{m=c[D+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){A=k;break}else k=k+1|0}B=(D|0)==0;Db:do if(B){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](80)|0;rd=3176;break}k=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break Cb;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[E>>2]|0){if(a[H>>0]|0)break Cb}else{do if((e[D+276>>1]|0)>=80){l=D+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3176;break Db}l=D+296|0;k=c[l>>2]|0;if(!k){k=D+292|0;break}else{c[l>>2]=c[k>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3176;break Db}}else k=D+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(D,80,0)|0;rd=3176}while(0);if((rd|0)==3176)if(!k)break;I=k;J=I+80|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[j+228>>2]=k;y=k+32|0;c[y>>2]=1;h=b[C+42>>1]|0;z=k+42|0;b[z>>1]=h;h=((((h<<16>>16)+-1|0)/8|0)<<7)+128|0;Eb:do if(B){j=Sv(h|0,0,-1,-1)|0;qd=L()|0;if(!(qd>>>0>0|(qd|0)==0&j>>>0>2147483390)){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](h)|0;rd=3201;break}l=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){j=c[14978]|0;qd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(l){m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;rd=3202}else rd=3202}else l=0}else l=0}else{if(c[E>>2]|0){if(a[H>>0]|0){l=0;break}}else{do if(!(0<0|(0==0?(e[D+276>>1]|0)>>>0<h>>>0:0))){m=D+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3201;break Eb}m=D+296|0;l=c[m>>2]|0;if(!l){l=D+292|0;break}else{c[m>>2]=c[l>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3201;break Eb}}else l=D+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(D,h,0)|0;rd=3201}while(0);if((rd|0)==3201)if(!l)l=0;else rd=3202;if((rd|0)==3202)gw(l|0,0,h|0)|0;x=k+4|0;c[x>>2]=l;c[kc>>2]=c[C>>2];j=dd(D,48481,kc)|0;c[k>>2]=j;l=c[x>>2]|0;if(!((j|0)==0|(l|0)==0)){ew(l|0,c[C+4>>2]|0,b[z>>1]<<4|0)|0;if((b[z>>1]|0)>0){p=D+276|0;q=D+288|0;r=D+300|0;s=D+296|0;t=D+284|0;u=D+292|0;o=0;do{v=c[x>>2]|0;w=v+(o<<4)|0;h=c[w>>2]|0;Fb:do if(!h)l=0;else{n=(Eu(h)|0)+1|0;Gb:do if(B){j=Sv(n|0,0,-1,-1)|0;qd=L()|0;if(qd>>>0>0|(qd|0)==0&j>>>0>2147483390){l=0;break Fb}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](n)|0;rd=3229;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){j=c[14978]|0;qd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Fb}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[E>>2]|0){if(a[H>>0]|0){l=0;break Fb}}else{do if(0<0|(0==0?(e[p>>1]|0)>>>0<n>>>0:0))l=q;else{l=c[r>>2]|0;if(l|0){c[r>>2]=c[l>>2];c[t>>2]=(c[t>>2]|0)+1;rd=3229;break Gb}l=c[s>>2]|0;if(!l){l=u;break}c[s>>2]=c[l>>2];c[t>>2]=(c[t>>2]|0)+1;rd=3229;break Gb}while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(D,n,0)|0;rd=3229}while(0);if((rd|0)==3229){rd=0;if(!l){l=0;break}}ew(l|0,h|0,n|0)|0}while(0);c[w>>2]=l;c[v+(o<<4)+8>>2]=0;c[v+(o<<4)+4>>2]=0;o=o+1|0}while((o|0)<(b[z>>1]|0))}c[k+72>>2]=c[(c[D+16>>2]|0)+(A<<4)+12>>2];c[k+52>>2]=c[C+52>>2];c[y>>2]=1}}}}while(0);qi(D,F);break}case 276:{u=c[td+-56>>2]|0;i=td+-20|0;p=td+4|0;v=c[j>>2]|0;l=c[u+8>>2]|0;if(!l)k=u+12|0;else{m=c[v+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}r=bd(j,0,c[u+16>>2]|0,c[k>>2]|0)|0;Hb:do if(r|0?(on(j,r)|0)==0:0){k=(c[r+56>>2]|0)==0?((c[r+12>>2]|0)==0?0:39579):48814;if(k|0){rd=c[r>>2]|0;c[Ma>>2]=k;c[Ma+4>>2]=rd;cd(j,48828,Ma);break}l=c[r+72>>2]|0;m=c[v+16>>2]|0;if(!l)t=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){t=k;break}else k=k+1|0}s=c[m+(t<<4)>>2]|0;k=c[r>>2]|0;l=c[j>>2]|0;do if(((a[l+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(zb=c[l+312>>2]|0,zb|0):0){k=$a[zb&127](c[l+316>>2]|0,26,s,k,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Bb);c[j+12>>2]=23;break Hb}if((k|2|0)==2)if(!k)break;else break Hb;else{cd(j,39231,Db);c[j+12>>2]=1;break Hb}}while(0);q=qj(v,i)|0;if(q|0){qd=b[r+42>>1]|0;o=qd<<16>>16;Ib:do if(qd<<16>>16>0){h=c[r+4>>2]|0;n=d[208+(d[q>>0]|0)>>0]|0;k=0;do{m=c[h+(k<<4)>>2]|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-n|0;if(!(qd<<24>>24==0|(l|0)!=0)){i=q;do{m=m+1|0;i=i+1|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(l|0)!=0))}if(!l)break Ib;k=k+1|0}while((k|0)<(o|0))}else k=0;while(0);Jb:do if((k|0)!=(o|0)){l=c[j+116>>2]|0;a[((l|0)==0?j:l)+21>>0]=1;l=qj(v,p)|0;if(!l)l=0;else{h=a[880+(d[c[p>>2]>>0]|0)>>0]&-128&255;n=c[r>>2]|0;o=(t|0)==1;p=o&1;c[Wb>>2]=s;c[Wb+4>>2]=34585;c[Wb+8>>2]=s;c[Wb+12>>2]=n;c[Wb+16>>2]=k;c[Wb+20>>2]=l;c[Wb+24>>2]=h;c[Wb+28>>2]=p;c[Wb+32>>2]=n;Ak(j,48500,Wb);n=c[r>>2]|0;c[Xb>>2]=34585;c[Xb+4>>2]=s;c[Xb+8>>2]=n;c[Xb+12>>2]=k;c[Xb+16>>2]=l;c[Xb+20>>2]=h;Ak(j,48694,Xb);h=j+8|0;n=c[h>>2]|0;do if(!n){c[_b>>2]=s;c[_b+4>>2]=34585;c[_b+8>>2]=s;c[_b+12>>2]=p;Ak(j,47804,_b);if(o)break Jb}else{k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(t<<4)+12>>2]>>2]|0)+1|0;m=n+108|0;i=c[m>>2]|0;if((c[n+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[n+104>>2]|0;a[qd+(i*20|0)>>0]=95;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=t;c[qd+(i*20|0)+8>>2]=1;c[qd+(i*20|0)+12>>2]=k;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0}else Di(n,95,t,1,k)|0;Bk(c[h>>2]|0,t,0);if(o){c[$b>>2]=s;c[$b+4>>2]=34585;c[$b+8>>2]=s;c[$b+12>>2]=p;Ak(j,47804,$b);break Jb}else{Bk(c[h>>2]|0,1,0);c[ac>>2]=s;c[ac+4>>2]=34585;c[ac+8>>2]=s;c[ac+12>>2]=p;Ak(j,47804,ac);break}}while(0);c[bc>>2]=34585;c[bc+4>>2]=s;Ak(j,47948,bc)}}else{c[Ub>>2]=q;cd(j,31333,Ub);l=0}while(0);qi(v,u);k=(v|0)==0;do if(!k){if(c[v+480>>2]|0){Xd(v,q);break}j=q;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[q>>2]=c[j>>2];c[j>>2]=q}else rd=3281}else rd=3281;while(0);do if((rd|0)==3281)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{j=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);if(!l)break a;if(!k){if(c[v+480>>2]|0){Xd(v,l);break a}j=l;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break a}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break a}}}while(0);qi(v,u);break}case 277:{Aj(j,0);break}case 278:{Aj(j,td+4|0);break}case 279:{o=td+4|0;bj(j,td+-32|0,td+-20|0,0,0,1,c[td+-44>>2]|0);r=c[j+228>>2]|0;if(r|0){q=c[j>>2]|0;h=qj(q,o)|0;p=r+56|0;rd=c[p>>2]|0;m=(rd<<2)+8|0;i=c[j>>2]|0;if((rd+3|0)>=(c[i+116>>2]|0)){c[na>>2]=c[r>>2];cd(j,38221,na)}n=r+60|0;k=c[n>>2]|0;Kb:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=3317;break}}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3316;break Kb}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3316;break Kb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,m,0)|0;rd=3316}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){rd=3326;break}k=Zd(i,k,m,0)|0;rd=3316;break}k=Zd(i,k,m,0)|0;rd=3316}while(0);if((rd|0)==3316)if(!k)rd=3317;else rd=3326;do if((rd|0)==3317){if(h|0){if(c[i+480>>2]|0){Xd(i,h);break}qd=h;if((c[i+304>>2]|0)>>>0<=qd>>>0?(c[i+308>>2]|0)>>>0>qd>>>0:0){qd=i+300|0;c[h>>2]=c[qd>>2];c[qd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{qd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}else if((rd|0)==3326){pd=c[p>>2]|0;qd=pd+1|0;c[p>>2]=qd;c[k+(pd<<2)>>2]=h;c[k+(qd<<2)>>2]=0;c[n>>2]=k}while(0);qd=c[p>>2]|0;m=(qd<<2)+8|0;i=c[j>>2]|0;if((qd+3|0)>=(c[i+116>>2]|0)){c[Eb>>2]=c[r>>2];cd(j,38221,Eb)}k=c[n>>2]|0;Lb:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Jb=i+284|0;c[Jb>>2]=(c[Jb>>2]|0)+1;Jb=l;rd=3346;break Lb}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];Jb=i+284|0;c[Jb>>2]=(c[Jb>>2]|0)+1;Jb=l;rd=3346;break Lb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Jb=_d(i,m,0)|0;rd=3346}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){rd=3347;break}Jb=Zd(i,k,m,0)|0;rd=3346;break}Jb=Zd(i,k,m,0)|0;rd=3346}while(0);if((rd|0)==3346?Jb|0:0){k=Jb;rd=3347}if((rd|0)==3347){pd=c[p>>2]|0;qd=pd+1|0;c[p>>2]=qd;c[k+(pd<<2)>>2]=0;c[k+(qd<<2)>>2]=0;c[n>>2]=k}i=c[r>>2]|0;Mb:do if(!i)h=0;else{h=(Eu(i)|0)+1|0;Nb:do if(!q){qd=Sv(h|0,0,-1,-1)|0;pd=L()|0;if(pd>>>0>0|(pd|0)==0&qd>>>0>2147483390){h=0;break Mb}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](h)|0;rd=3373;break}k=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){h=0;break Mb}l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){h=0;break Mb}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<h>>>0:0))){l=q+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=q+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3373;break Nb}l=q+296|0;k=c[l>>2]|0;if(!k){k=q+292|0;break}else{c[l>>2]=c[k>>2];rd=q+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3373;break Nb}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(q,h,0)|0;rd=3373}while(0);if((rd|0)==3373)if(!k){h=0;break}ew(k|0,i|0,h|0)|0;h=k}while(0);rd=c[p>>2]|0;m=(rd<<2)+8|0;i=c[j>>2]|0;if((rd+3|0)>=(c[i+116>>2]|0)){c[ic>>2]=c[r>>2];cd(j,38221,ic)}k=c[n>>2]|0;Ob:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=3395;break}}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3394;break Ob}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3394;break Ob}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,m,0)|0;rd=3394}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){rd=3404;break}k=Zd(i,k,m,0)|0;rd=3394;break}k=Zd(i,k,m,0)|0;rd=3394}while(0);if((rd|0)==3394)if(!k)rd=3395;else rd=3404;do if((rd|0)==3395){if(h|0){if(c[i+480>>2]|0){Xd(i,h);break}rd=h;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){rd=i+300|0;c[h>>2]=c[rd>>2];c[rd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{rd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}else if((rd|0)==3404){qd=c[p>>2]|0;rd=qd+1|0;c[p>>2]=rd;c[k+(qd<<2)>>2]=h;c[k+(rd<<2)>>2]=0;c[n>>2]=k}while(0);c[j+184>>2]=(c[o>>2]|0)+(c[td+8>>2]|0)-(c[j+180>>2]|0);h=c[n>>2]|0;if(h|0){m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[q+16>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}i=c[r>>2]|0;l=c[h>>2]|0;m=c[j>>2]|0;k=c[(c[m+16>>2]|0)+(k<<4)>>2]|0;if(((a[m+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(zc=c[m+312>>2]|0,zc|0):0){k=$a[zc&127](c[m+316>>2]|0,29,i,l,k,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Bc);c[j+12>>2]=23;break a}if((k|2|0)!=2){cd(j,39231,Cc);c[j+12>>2]=1}}}}break}case 280:{p=j+244|0;n=c[p>>2]|0;do if(n|0?(ob=c[j+228>>2]|0,ob|0):0){o=c[j+248>>2]|0;m=c[j>>2]|0;i=Sv(o|0,((o|0)<0)<<31>>31|0,1,0)|0;h=L()|0;Pb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3428;else n=0;else{do if(!(h>>>0>0|((h|0)==0?i>>>0>(e[m+276>>1]|0)>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3429;break Pb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3429;break Pb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3428}while(0);if((rd|0)==3428){k=_d(m,i,h)|0;rd=3429}if((rd|0)==3429)if(!k)n=0;else{ew(k|0,n|0,o|0)|0;a[k+o>>0]=0;n=k}o=ob+56|0;qd=c[o>>2]|0;i=(qd<<2)+8|0;h=c[j>>2]|0;if((qd+3|0)>=(c[h+116>>2]|0)){c[mb>>2]=c[ob>>2];cd(j,38221,mb)}m=ob+60|0;k=c[m>>2]|0;Qb:do if(!k){if(c[h+272>>2]|0){if(a[h+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[h+276>>1]|0)>>>0<i>>>0:0))){k=h+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Fb=h+284|0;c[Fb>>2]=(c[Fb>>2]|0)+1;Fb=l;rd=3450;break Qb}k=h+296|0;l=c[k>>2]|0;if(!l){k=h+292|0;break}else{c[k>>2]=c[l>>2];Fb=h+284|0;c[Fb>>2]=(c[Fb>>2]|0)+1;Fb=l;rd=3450;break Qb}}else k=h+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Fb=_d(h,i,0)|0;rd=3450}else{rd=k;if((c[h+304>>2]|0)>>>0<=rd>>>0?(c[h+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[h+276>>1]|0)>>>0<i>>>0:0))){rd=3460;break}Fb=Zd(h,k,i,0)|0;rd=3450;break}Fb=Zd(h,k,i,0)|0;rd=3450}while(0);if((rd|0)==3450?Fb|0:0){k=Fb;rd=3460}if((rd|0)==3460){qd=c[o>>2]|0;rd=qd+1|0;c[o>>2]=rd;c[k+(qd<<2)>>2]=n;c[k+(rd<<2)>>2]=0;c[m>>2]=k;break}if(n|0){if(c[h+480>>2]|0){Xd(h,n);break}rd=n;if((c[h+304>>2]|0)>>>0<=rd>>>0?(c[h+308>>2]|0)>>>0>rd>>>0:0){rd=h+300|0;c[n>>2]=c[rd>>2];c[rd>>2]=n;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{rd=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}}while(0);c[p>>2]=0;c[j+248>>2]=0;break}case 283:case 282:case 281:{k=j+244|0;l=c[k>>2]|0;m=c[td+4>>2]|0;if(!l){c[k>>2]=m;k=c[td+8>>2]|0}else k=m+(c[td+8>>2]|0)-l|0;c[j+248>>2]=k;break}case 285:case 284:{k=c[td+4>>2]|0;if(k|0){rd=j+264|0;c[k+4>>2]=c[rd>>2];c[rd>>2]=k;c[j+268>>2]=k}break}case 286:{rd=td+-56|0;j=Bj(j,0,rd,c[td+-44>>2]|0,c[td+-8>>2]|0)|0;c[rd>>2]=j;break}case 287:{rd=td+-80|0;j=Bj(j,c[rd>>2]|0,td+-56|0,c[td+-44>>2]|0,c[td+-8>>2]|0)|0;c[rd>>2]=j;break}case 314:{m=c[j>>2]|0;Rb:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](92)|0;rd=3591;break}k=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){rd=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=rd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;rd=3592}else rd=3592}else rd=3607}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){rd=3607;break}}else{do if((e[m+276>>1]|0)>=92){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3591;break Rb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3591;break Rb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,92,0)|0;rd=3591}while(0);if((rd|0)==3591)if(!k)rd=3607;else{l=k;rd=3592}if((rd|0)==3592){I=l;J=I+92|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));i=c[j>>2]|0;o=c[td+4>>2]|0;p=c[td+8>>2]|0;Sb:do if(o){h=Sv(p|0,0,1,0)|0;n=L()|0;Tb:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=3603;else{k=0;break Sb}else{do if(0<0|(0==0?p>>>0<(e[i+276>>1]|0)>>>0:0)){m=i+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];j=i+284|0;c[j>>2]=(c[j>>2]|0)+1;break Tb}m=i+296|0;k=c[m>>2]|0;if(!k){k=i+292|0;break}else{c[m>>2]=c[k>>2];j=i+284|0;c[j>>2]=(c[j>>2]|0)+1;break Tb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3603}while(0);if((rd|0)==3603)k=_d(i,h,n)|0;if(k){ew(k|0,o|0,p|0)|0;a[k+p>>0]=0}else k=0}else k=0;while(0);c[l>>2]=k;c[l+36>>2]=c[td+-20>>2];k=l}else if((rd|0)==3607){k=c[td+-20>>2]|0;if(!k)k=0;else{ni(c[j>>2]|0,k);k=0}}c[td+-20>>2]=k;break}case 289:{qd=td+4|0;rd=td+-20|0;Cj(j,c[qd>>2]|0,c[rd>>2]|0);c[(c[qd>>2]|0)+32>>2]=c[rd>>2];c[rd>>2]=c[qd>>2];break}case 290:{p=td+-8|0;if(!(c[p>>2]|0))k=0;else{m=c[j>>2]|0;n=c[td+-44>>2]|0;o=c[td+-40>>2]|0;Ub:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Vb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3483;else{k=0;break Ub}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Vb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Vb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3483}while(0);if((rd|0)==3483)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[c[p>>2]>>2]=k;k=c[p>>2]|0}c[td+-44>>2]=k;break}case 291:{k=c[td+4>>2]|0;l=c[td+-20>>2]|0;m=c[td+-8>>2]|0;if(!k){if(l|0)ri(c[j>>2]|0,l);if(m|0)ri(c[j>>2]|0,m)}else{c[k+8>>2]=l;c[k+12>>2]=m}c[td+-44>>2]=k;break}case 292:{p=c[td+4>>2]|0;k=c[td+-20>>2]|0;l=c[td+-8>>2]|0;q=td+-56|0;if(!p){if(k|0)ri(c[j>>2]|0,k);if(l|0)ri(c[j>>2]|0,l)}else{c[p+8>>2]=k;c[p+12>>2]=l;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-52>>2]|0;Wb:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Xb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3507;else{k=0;break Wb}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Xb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Xb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3507}while(0);if((rd|0)==3507)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 293:{k=c[td+4>>2]|0;l=c[td+-8>>2]|0;if(!k){if(l|0)ri(c[j>>2]|0,l)}else{c[k+8>>2]=0;c[k+12>>2]=l}c[td+-32>>2]=k;break}case 294:{p=c[td+4>>2]|0;k=c[td+-8>>2]|0;q=td+-44|0;if(!p){if(k|0)ri(c[j>>2]|0,k)}else{c[p+8>>2]=0;c[p+12>>2]=k;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-40>>2]|0;Yb:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Zb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3533;else{k=0;break Yb}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Zb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Zb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3533}while(0);if((rd|0)==3533)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 313:{rd=c[td+-8>>2]|0;j=td+-44|0;c[rd+36>>2]=c[j>>2];c[j>>2]=rd;break}case 296:{p=c[td+4>>2]|0;q=td+-8|0;if(p|0){c[p+8>>2]=0;c[p+12>>2]=0;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-4>>2]|0;_b:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;$b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3552;else{k=0;break _b}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break $b}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break $b}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3552}while(0);if((rd|0)==3552)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 297:{j=Dj(j,0,87,0,82,0,0)|0;c[td+16>>2]=j;break}case 298:{rd=td+-20|0;j=Dj(j,c[rd>>2]|0,c[td+-8>>2]|0,c[td+-4>>2]|0,82,0,a[td+4>>0]|0)|0;c[rd>>2]=j;break}case 299:{rd=td+-56|0;j=Dj(j,c[rd>>2]|0,c[td+-32>>2]|0,c[td+-28>>2]|0,c[td+-8>>2]|0,c[td+-4>>2]|0,a[td+4>>0]|0)|0;c[rd>>2]=j;break}case 312:{c[td+-8>>2]=c[td+4>>2];break}case 311:{a[td+4>>0]=b[td+2>>1];break}case 306:case 304:case 302:{c[td+-8>>2]=e[td+-10>>1];c[td+-4>>2]=0;break}case 305:{rd=td+-8|0;j=c[rd>>2]|0;c[rd>>2]=e[td+2>>1];c[td+-4>>2]=j;break}case 307:{a[td+16>>0]=0;break}case 308:{a[td+-8>>0]=a[td+4>>0]|0;break}case 310:case 309:{a[td+-8>>0]=b[td+-10>>1];break}default:{}}while(0);j=b[17152+(g<<1)>>1]|0;sd=sd<<24>>24;g=b[11376+((b[18656+(e[td+(sd*12|0)>>1]<<1)>>1]|0)+(j&65535)<<1)>>1]|0;sd=sd+1|0;rd=td+(sd*12|0)|0;c[f>>2]=rd;b[rd>>1]=g;b[td+(sd*12|0)+2>>1]=j;f=g;Ra=ud;return f|0}
- function zj(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+64|0;B=I+48|0;A=I+40|0;s=I+32|0;r=I+24|0;q=I+16|0;p=I+8|0;u=I;F=I+52|0;G=c[f>>2]|0;a:do if(!(a[G+165>>0]|0)){n=f+4|0;o=G+24|0;k=(c[o>>2]&1|0)==0;l=G+16|0;C=c[(c[l>>2]|0)+12>>2]|0;a[G+78>>0]=a[C+77>>0]|0;if(!((b[C+78>>1]&1)==0?(i=eh(G,0,n,0)|0,(i|0)!=0):0))H=4;b:do if((H|0)==4){i=c[G+20>>2]|0;if((i|0)>1)do{j=i;i=i+-1|0;if((b[(c[(c[l>>2]|0)+(i<<4)+12>>2]|0)+78>>1]&1)==0?(m=eh(G,i,n,0)|0,m|0):0){i=m;break b}}while((j|0)>2);if(k)c[o>>2]=c[o>>2]&-2;if(!(a[G+89>>0]|0))break a;c[o>>2]=c[o>>2]|16;break a}while(0);c[f+12>>2]=i;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;Ra=I;return}while(0);c:do if(!g){n=G+20|0;if((c[n>>2]|0)>0){o=f+116|0;p=f+40|0;q=f+44|0;r=f+8|0;s=f+23|0;m=0;do{d:do if((m|0)!=1){l=c[(c[(c[f>>2]|0)+16>>2]|0)+(m<<4)+12>>2]|0;k=c[o>>2]|0;k=(k|0)==0?f:k;i=k+84|0;g=c[i>>2]|0;j=1<<m;if(!(g&j))c[i>>2]=g|j;g=k+80|0;c[g>>2]=c[g>>2]|j;g=c[p>>2]|0;c[p>>2]=g+3;hn(f,m,g,0,0);j=(c[q>>2]|0)+1|0;k=c[p>>2]|0;i=c[l+16>>2]|0;if(i|0)do{jn(f,c[i+8>>2]|0,0,g,j,k);i=c[i>>2]|0}while((i|0)!=0);i=c[r>>2]|0;if(!i){j=c[f>>2]|0;if((c[o>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[s>>0]=1;e:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=37;else break d;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break e}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break e}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=37}while(0);if((H|0)==37){H=0;i=_d(j,224,0)|0}if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[r>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=m;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,m,0,0)|0;break}}while(0);m=m+1|0}while((m|0)<(c[n>>2]|0))}}else{j=h+4|0;do if(!(c[j>>2]|0)){C=wk(G,g)|0;i=c[f>>2]|0;if((C|0)<=-1){if(!(c[j>>2]|0)){i=d[i+164>>0]|0;break}if(a[i+165>>0]|0){cd(f,39404,r);break c}i=wk(i,g)|0;if((i|0)>=0){g=h;break}c[s>>2]=g;cd(f,39421,s);break c}p=c[(c[i+16>>2]|0)+(C<<4)+12>>2]|0;q=f+116|0;o=c[q>>2]|0;o=(o|0)==0?f:o;i=o+84|0;g=c[i>>2]|0;n=1<<C;do if((((g&n|0)==0?(c[i>>2]=g|n,(C|0)==1):0)?(x=c[o>>2]|0,t=x+16|0,(c[(c[t>>2]|0)+20>>2]|0)==0):0)?(a[o+199>>0]|0)==0:0){i=Pe(c[x>>2]|0,0,x,F,0,542)|0;if(i|0){cd(o,32157,u);c[o+12>>2]=i;break}F=c[F>>2]|0;c[(c[t>>2]|0)+20>>2]=F;i=c[x+92>>2]|0;j=c[F+4>>2]|0;c[j+4>>2]=c[F>>2];if(!(b[j+22>>1]&2)){k=j+32|0;l=j+36|0;m=(c[k>>2]|0)-(c[l>>2]|0)|0;if(((i+-512|0)>>>0<65025?(i+-1&i|0)==0:0)?(c[k>>2]=i,w=j+80|0,v=c[w>>2]|0,v|0):0){g=v+-4|0;c[w>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=63;break}else{i=Wa[c[29352>>2]&127](g)|0;H=63}while(0);do if((H|0)==63){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[w>>2]=0}F=Se(c[j>>2]|0,k,m)|0;c[l>>2]=(c[k>>2]|0)-(m&65535);if((F|0)==7){i=x+81|0;do if((a[i>>0]|0)==0?(a[x+82>>0]|0)==0:0){a[i>>0]=1;if((c[x+180>>2]|0)>0)c[x+264>>2]=1;i=x+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[x+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=o+80|0;c[k>>2]=c[k>>2]|n;k=f+40|0;g=c[k>>2]|0;c[k>>2]=g+3;hn(f,C,g,0,0);j=(c[f+44>>2]|0)+1|0;k=c[k>>2]|0;i=c[p+16>>2]|0;if(i|0)do{jn(f,c[i+8>>2]|0,0,g,j,k);i=c[i>>2]|0}while((i|0)!=0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[q>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;f:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=93;else break c;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break f}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break f}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=93}while(0);if((H|0)==93)i=_d(j,224,0)|0;if(!i)break c;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=C;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break c}else{Di(i,142,C,0,0)|0;break c}}else{i=c[f>>2]|0;if(a[i+165>>0]|0){cd(f,39404,p);break c}i=wk(i,g)|0;if((i|0)<0){c[q>>2]=g;cd(f,39421,q);break c}else g=h}while(0);if(!(c[j>>2]|0))i=0;else i=c[(c[G+16>>2]|0)+(i<<4)>>2]|0;t=qj(G,g)|0;if(t|0){s=hi(G,t,i)|0;g:do if(!s){q=bd(f,0,t,i)|0;if(q|0){g=c[q+72>>2]|0;if(!g)s=-1e6;else{j=c[(c[f>>2]|0)+16>>2]|0;i=0;while(1)if((c[j+(i<<4)+12>>2]|0)==(g|0)){s=i;break}else i=i+1|0}r=f+116|0;p=c[r>>2]|0;p=(p|0)==0?f:p;i=p+84|0;g=c[i>>2]|0;o=1<<s;do if((((g&o|0)==0?(c[i>>2]=g|o,(s|0)==1):0)?(E=c[p>>2]|0,z=E+16|0,(c[(c[z>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){i=Pe(c[E>>2]|0,0,E,F,0,542)|0;if(i|0){cd(p,32157,B);c[p+12>>2]=i;break}F=c[F>>2]|0;c[(c[z>>2]|0)+20>>2]=F;i=c[E+92>>2]|0;k=c[F+4>>2]|0;c[k+4>>2]=c[F>>2];if(!(b[k+22>>1]&2)){l=k+32|0;m=k+36|0;n=(c[l>>2]|0)-(c[m>>2]|0)|0;do if((i+-512|0)>>>0<65025){if(i+-1&i|0)break;c[l>>2]=i;j=k+80|0;i=c[j>>2]|0;if(!i)break;g=i+-4|0;c[j>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=187;break}else{i=Wa[c[29352>>2]&127](g)|0;H=187}while(0);do if((H|0)==187){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[j>>2]=0}while(0);F=Se(c[k>>2]|0,l,n)|0;c[m>>2]=(c[l>>2]|0)-(n&65535);if((F|0)==7){i=E+81|0;do if(!(a[i>>0]|0)){if(a[E+82>>0]|0)break;a[i>>0]=1;if((c[E+180>>2]|0)>0)c[E+264>>2]=1;i=E+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[E+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=p+80|0;c[k>>2]=c[k>>2]|o;k=f+40|0;i=c[k>>2]|0;c[k>>2]=i+3;hn(f,s,i,c[q>>2]|0,38087);jn(f,q,0,i,(c[f+44>>2]|0)+1|0,c[k>>2]|0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[r>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=214;else break g;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break h}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break h}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=214}while(0);if((H|0)==214)i=_d(j,224,0)|0;if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=s;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,s,0,0)|0;break}}}else{q=c[s+12>>2]|0;g=c[q+72>>2]|0;if(!g)h=-1e6;else{j=c[(c[f>>2]|0)+16>>2]|0;i=0;while(1)if((c[j+(i<<4)+12>>2]|0)==(g|0)){h=i;break}else i=i+1|0}r=f+116|0;p=c[r>>2]|0;p=(p|0)==0?f:p;i=p+84|0;g=c[i>>2]|0;o=1<<h;do if((((g&o|0)==0?(c[i>>2]=g|o,(h|0)==1):0)?(D=c[p>>2]|0,y=D+16|0,(c[(c[y>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){i=Pe(c[D>>2]|0,0,D,F,0,542)|0;if(i|0){cd(p,32157,A);c[p+12>>2]=i;break}F=c[F>>2]|0;c[(c[y>>2]|0)+20>>2]=F;i=c[D+92>>2]|0;k=c[F+4>>2]|0;c[k+4>>2]=c[F>>2];if(!(b[k+22>>1]&2)){l=k+32|0;m=k+36|0;n=(c[l>>2]|0)-(c[m>>2]|0)|0;do if((i+-512|0)>>>0<65025?(i+-1&i|0)==0:0){c[l>>2]=i;j=k+80|0;i=c[j>>2]|0;if(!i)break;g=i+-4|0;c[j>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=133;break}else{i=Wa[c[29352>>2]&127](g)|0;H=133}while(0);do if((H|0)==133){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[j>>2]=0}while(0);F=Se(c[k>>2]|0,l,n)|0;c[m>>2]=(c[l>>2]|0)-(n&65535);if((F|0)==7){i=D+81|0;do if(!(a[i>>0]|0)){if(a[D+82>>0]|0)break;a[i>>0]=1;if((c[D+180>>2]|0)>0)c[D+264>>2]=1;i=D+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[D+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=p+80|0;c[k>>2]=c[k>>2]|o;k=f+40|0;i=c[k>>2]|0;c[k>>2]=i+3;hn(f,h,i,c[s>>2]|0,38091);jn(f,q,s,i,(c[f+44>>2]|0)+1|0,c[k>>2]|0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[r>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;i:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=160;else break g;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break i}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break i}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=160}while(0);if((H|0)==160)i=_d(j,224,0)|0;if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=h;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,h,0,0)|0;break}}while(0);if(G|0){if(c[G+480>>2]|0){Xd(G,t);break}F=t;if((c[G+304>>2]|0)>>>0<=F>>>0?(c[G+308>>2]|0)>>>0>F>>>0:0){F=G+300|0;c[t>>2]=c[F>>2];c[F>>2]=t;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{F=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}}while(0);if(a[G+90>>0]|0){Ra=I;return}k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;j:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=246;else{Ra=I;return}else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];G=j+284|0;c[G>>2]=(c[G>>2]|0)+1;break j}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];G=j+284|0;c[G>>2]=(c[G>>2]|0)+1;break j}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=246}while(0);if((H|0)==246)i=_d(j,224,0)|0;if(!i){Ra=I;return}g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;g=c[i+104>>2]|0;a[g+(j*20|0)>>0]=-98;g=g+(j*20|0)+1|0;l=g+19|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(l|0));Ra=I;return}else{Di(i,158,0,0,0)|0;Ra=I;return}}function Aj(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+48|0;t=w+40|0;s=w+16|0;q=w+8|0;n=w;o=d+228|0;u=c[o>>2]|0;v=c[d>>2]|0;if(!u){Ra=w;return}p=d+244|0;m=c[p>>2]|0;do if(m){l=c[d+248>>2]|0;j=Sv(l|0,((l|0)<0)<<31>>31|0,1,0)|0;k=L()|0;a:do if(c[v+272>>2]|0)if(!(a[v+81>>0]|0))r=14;else m=0;else{do if(!(k>>>0>0|((k|0)==0?j>>>0>(e[v+276>>1]|0)>>>0:0))){i=v+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];r=v+284|0;c[r>>2]=(c[r>>2]|0)+1;r=15;break a}i=v+296|0;g=c[i>>2]|0;if(!g){g=v+292|0;break}else{c[i>>2]=c[g>>2];r=v+284|0;c[r>>2]=(c[r>>2]|0)+1;r=15;break a}}else g=v+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;r=14}while(0);if((r|0)==14){g=_d(v,j,k)|0;r=15}if((r|0)==15)if(!g)m=0;else{ew(g|0,m|0,l|0)|0;a[g+l>>0]=0;m=g}g=u+56|0;l=c[g>>2]|0;j=(l<<2)+8|0;k=c[d>>2]|0;if((l+3|0)>=(c[k+116>>2]|0)){c[n>>2]=c[u>>2];cd(d,38221,n)}l=u+60|0;i=c[l>>2]|0;b:do if(!i){if(c[k+272>>2]|0){if(a[k+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<j>>>0:0))){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;r=36;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;r=36;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(k,j,0)|0;r=36}else{r=i;if((c[k+304>>2]|0)>>>0<=r>>>0?(c[k+308>>2]|0)>>>0>r>>>0:0){if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<j>>>0:0))){h=i;r=46;break}h=Zd(k,i,j,0)|0;r=36;break}h=Zd(k,i,j,0)|0;r=36}while(0);if((r|0)==36?h|0:0)r=46;if((r|0)==46){k=c[g>>2]|0;n=k+1|0;c[g>>2]=n;c[h+(k<<2)>>2]=m;c[h+(n<<2)>>2]=0;c[l>>2]=h;break}if(m){if(c[k+480>>2]|0){Xd(k,m);break}n=m;if((c[k+304>>2]|0)>>>0<=n>>>0?(c[k+308>>2]|0)>>>0>n>>>0:0){n=k+300|0;c[m>>2]=c[n>>2];c[n>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}else g=u+56|0;while(0);c[p>>2]=0;if((c[g>>2]|0)<1){Ra=w;return}if(a[v+165>>0]|0){if(!(mi((c[u+72>>2]|0)+8|0,c[u>>2]|0,u)|0)){c[o>>2]=0;Ra=w;return}g=v+81|0;if(a[g>>0]|0){Ra=w;return}if(a[v+82>>0]|0){Ra=w;return}a[g>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;g=v+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[v+236>>2]|0;if(!g){Ra=w;return}c[g+12>>2]=7;Ra=w;return}if(!f)g=d+180|0;else{g=d+180|0;c[d+184>>2]=(c[f>>2]|0)-(c[g>>2]|0)+(c[f+4>>2]|0)}c[q>>2]=g;j=dd(v,48861,q)|0;h=c[u+72>>2]|0;i=c[v+16>>2]|0;if(!h)m=-1e6;else{g=0;while(1)if((c[i+(g<<4)+12>>2]|0)==(h|0)){m=g;break}else g=g+1|0}p=c[u>>2]|0;q=c[d+88>>2]|0;c[s>>2]=c[i+(m<<4)>>2];c[s+4>>2]=34585;c[s+8>>2]=p;c[s+12>>2]=p;c[s+16>>2]=j;c[s+20>>2]=q;Ak(d,48885,s);do if(j|0){if(c[v+480>>2]|0){Xd(v,j);break}s=j;if((c[v+304>>2]|0)>>>0<=s>>>0?(c[v+308>>2]|0)>>>0>s>>>0:0){s=v+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);k=d+8|0;g=c[k>>2]|0;c:do if(!g){j=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[d+23>>0]=1;d:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))r=78;else{l=0;break c}else{do if((e[j+276>>1]|0)>=224){g=j+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];i=j+284|0;c[i>>2]=(c[i>>2]|0)+1;i=h;break d}g=j+296|0;h=c[g>>2]|0;if(!h){g=j+292|0;break}else{c[g>>2]=c[h>>2];i=j+284|0;c[i>>2]=(c[i>>2]|0)+1;i=h;break d}}else g=j+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;r=78}while(0);if((r|0)==78)i=_d(j,224,0)|0;if(!i)l=0;else{g=i+104|0;h=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[i>>2]=j;g=j+4|0;h=c[g>>2]|0;if(h|0)c[h+4>>2]=i;c[i+8>>2]=h;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=d;c[k>>2]=i;Di(i,61,0,1,0)|0;l=i}}else l=g;while(0);g=c[k>>2]|0;h=(c[c[(c[(c[d>>2]|0)+16>>2]|0)+(m<<4)+12>>2]>>2]|0)+1|0;i=g+108|0;j=c[i>>2]|0;if((c[g+112>>2]|0)>(j|0)){c[i>>2]=j+1;s=c[g+104>>2]|0;a[s+(j*20|0)>>0]=95;b[s+(j*20|0)+2>>1]=0;c[s+(j*20|0)+4>>2]=m;c[s+(j*20|0)+8>>2]=1;c[s+(j*20|0)+12>>2]=h;c[s+(j*20|0)+16>>2]=0;a[s+(j*20|0)+1>>0]=0}else Di(g,95,m,1,h)|0;j=l+108|0;g=c[j>>2]|0;k=l+112|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;h=c[l+104>>2]|0;a[h+(g*20|0)>>0]=-98;g=h+(g*20|0)+1|0;h=g+19|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0))}else Di(l,158,0,0,0)|0;c[t>>2]=c[u>>2];Bk(l,m,dd(v,48973,t)|0);h=d+44|0;i=(c[h>>2]|0)+1|0;c[h>>2]=i;h=c[u>>2]|0;g=c[j>>2]|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;v=c[l+104>>2]|0;a[v+(g*20|0)>>0]=110;b[v+(g*20|0)+2>>1]=0;c[v+(g*20|0)+4>>2]=0;c[v+(g*20|0)+8>>2]=i;c[v+(g*20|0)+12>>2]=0;c[v+(g*20|0)+16>>2]=0;a[v+(g*20|0)+1>>0]=0}else g=Di(l,110,0,i,0)|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){if((g|0)<0)g=(c[j>>2]|0)+-1|0;Ei(l,(c[l+104>>2]|0)+(g*20|0)|0,h,0)}g=c[j>>2]|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;v=c[l+104>>2]|0;a[v+(g*20|0)>>0]=-95;b[v+(g*20|0)+2>>1]=0;c[v+(g*20|0)+4>>2]=m;c[v+(g*20|0)+8>>2]=i;c[v+(g*20|0)+12>>2]=0;c[v+(g*20|0)+16>>2]=0;a[v+(g*20|0)+1>>0]=0;Ra=w;return}else{Di(l,161,m,i,0)|0;Ra=w;return}}function Bj(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;o=s;r=c[b>>2]|0;q=qj(r,g)|0;n=(f|0)!=0;if(n&(q|0)!=0?(j=c[f>>2]|0,(j|0)>0):0){m=0;g=j;do{k=c[f+8+(m<<4)>>2]|0;l=a[q>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0;if(!(l<<24>>24==0|(j|0)!=0)){l=q;do{l=l+1|0;k=k+1|0;t=a[l>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){c[o>>2]=q;cd(b,49e3,o);g=c[f>>2]|0}m=m+1|0}while((m|0)<(g|0))}a:do if(n){g=(c[f>>2]<<4)+24|0;t=f;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0<g>>>0:0))){g=f;break}g=Zd(r,f,g,0)|0;break}g=Zd(r,f,g,0)|0}else{b:do if(!r){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](24)|0;p=39;break}k=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;j=59064;g=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&g>>>0>0){t=c[14978]|0;o=Tv(g|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&o>>>0<=t>>>0)&1}g=Wa[c[29340>>2]&127](k)|0;if(!g){g=0;break a}j=Wa[c[29352>>2]&127](g)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[r+272>>2]|0){if(a[r+81>>0]|0){g=0;break a}}else{do if((e[r+276>>1]|0)>=24){j=r+300|0;g=c[j>>2]|0;if(g|0){c[j>>2]=c[g>>2];p=r+284|0;c[p>>2]=(c[p>>2]|0)+1;p=39;break b}j=r+296|0;g=c[j>>2]|0;if(!g){g=r+292|0;break}else{c[j>>2]=c[g>>2];p=r+284|0;c[p>>2]=(c[p>>2]|0)+1;p=39;break b}}else g=r+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(r,24,0)|0;p=39}while(0);if((p|0)==39)if(!g){g=0;break}j=g;k=j+24|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0))}while(0);if(!(a[r+81>>0]|0)){r=g+8|0;t=c[g>>2]|0;c[r+(t<<4)+8>>2]=i;c[r+(t<<4)+4>>2]=h;c[r+(t<<4)>>2]=q;c[r+(t<<4)+12>>2]=0;c[g>>2]=t+1;t=g;Ra=s;return t|0}if(h|0)ri(r,h);if(i|0)pi(r,i,1);if(!q){t=f;Ra=s;return t|0}if(c[r+480>>2]|0){Xd(r,q);t=f;Ra=s;return t|0}t=q;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){t=r+300|0;c[q>>2]=c[t>>2];c[t>>2]=q;t=f;Ra=s;return t|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);t=f;Ra=s;return t|0}else{t=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);t=f;Ra=s;return t|0}return 0}function Cj(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;m=p+8|0;k=p;n=e+4|0;l=c[n>>2]|0;if(!l){Ra=p;return}o=c[b>>2]|0;a:do if(f|0){j=d[208+(d[l>>0]|0)>>0]|0;while(1){h=c[f>>2]|0;i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-j|0;if(!(i<<24>>24==0|(g|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;q=a[h>>0]|0;g=(d[208+(q&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(g|0)!=0))}if(!g)break;f=c[f+32>>2]|0;if(!f)break a}if(!f){Ra=p;return}g=e+8|0;do if(!(c[g>>2]|0)){h=f+12|0;if(c[h>>2]|0?c[e+12>>2]|0:0){f=49047;break}if(!(a[f+19>>0]|0))f=49063;else{f=gk(o,c[f+8>>2]|0,0)|0;c[g>>2]=f;f=c[h>>2]|0;if(f|0){q=gk(o,f,0)|0;c[e+12>>2]=q}f=c[n>>2]|0;do if(f|0){if(o|0){if(c[o+480>>2]|0){Xd(o,f);break}q=f;if((c[o+304>>2]|0)>>>0<=q>>>0?(c[o+308>>2]|0)>>>0>q>>>0:0){q=o+300|0;c[f>>2]=c[q>>2];c[q>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[n>>2]=0;Ra=p;return}}else f=49030;while(0);c[m>>2]=f;c[m+4>>2]=l;cd(b,49083,m);Ra=p;return}while(0);c[k>>2]=l;cd(b,40596,k);Ra=p;return}function Dj(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+16|0;l=r;p=(f|0)==0;q=p&1;a:do if((g|0)==82&(i|0)==85)o=4;else{if((g|0)==83)switch(i|0){case 82:case 85:{o=4;break a}default:{}}n=c[d>>2]|0;b:do if(!n){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](92)|0;o=28;break}l=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){s=c[14978]|0;n=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=s>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l)break a;m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0)break a}else{do if((e[n+276>>1]|0)>=92){m=n+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];o=n+284|0;c[o>>2]=(c[o>>2]|0)+1;o=28;break b}m=n+296|0;l=c[m>>2]|0;if(!l){l=n+292|0;break}else{c[m>>2]=c[l>>2];o=n+284|0;c[o>>2]=(c[o>>2]|0)+1;o=28;break b}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(n,92,0)|0;o=28}while(0);if((o|0)==28)if(!l)break;m=l;n=m+92|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));a[l+16>>0]=p?86:f&255;a[l+17>>0]=g;a[l+18>>0]=i;if(!(k<<24>>24))k=(b[(c[d>>2]|0)+76>>1]&2)==0?0:66;a[l+20>>0]=k;a[l+19>>0]=q;s=pn(d,j)|0;c[l+28>>2]=s;s=pn(d,h)|0;c[l+24>>2]=s;s=l;Ra=r;return s|0}while(0);if((o|0)==4)cd(d,49116,l);if(j|0)ni(c[d>>2]|0,j);if(!h){s=0;Ra=r;return s|0}ni(c[d>>2]|0,h);s=0;Ra=r;return s|0}function Ej(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=d+8|0;e=c[i>>2]|0;if(e|0){i=e;return i|0}e=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[e+76>>1]&8)==0:0)a[d+23>>0]=1;h=Yd(e,224,0)|0;if(!h){i=0;return i|0}f=h+104|0;g=f+120|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[h>>2]=e;e=e+4|0;f=c[e>>2]|0;if(f|0)c[f+4>>2]=h;c[h+8>>2]=f;c[h+4>>2]=0;c[e>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[i>>2]=h;Di(h,61,0,1,0)|0;i=h;return i|0}function Fj(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;k=d+108|0;l=c[k>>2]|0;if((c[d+112>>2]|0)>(l|0)){c[k>>2]=l+1;k=c[d+104>>2]|0;a[k+(l*20|0)>>0]=e;b[k+(l*20|0)+2>>1]=0;c[k+(l*20|0)+4>>2]=f;c[k+(l*20|0)+8>>2]=g;c[k+(l*20|0)+12>>2]=h;c[k+(l*20|0)+16>>2]=0;a[k+(l*20|0)+1>>0]=0;gd(d,l,i,j);return l|0}else{l=Di(d,e,f,g,h)|0;gd(d,l,i,j);return l|0}return 0}function Gj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0;p=f+8|0;k=c[p>>2]|0;a:do if(!k){o=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))n=15;else{o=0;break a}else{do if((e[o+276>>1]|0)>=224){k=o+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}k=o+296|0;l=c[k>>2]|0;if(!l){k=o+292|0;break}else{c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;n=15}while(0);if((n|0)==15)m=_d(o,224,0)|0;if(!m)o=0;else{k=m+104|0;l=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c[m>>2]=o;k=o+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[p>>2]=m;Di(m,61,0,1,0)|0;o=m}}else o=k;while(0);k=i+28|0;Hj(f,h,c[k>>2]|0,(j|0)==109&1,c[i>>2]|0);if(!(c[i+36>>2]&32)){m=c[k>>2]|0;n=b[i+42>>1]|0;l=o+108|0;k=c[l>>2]|0;if((c[o+112>>2]|0)>(k|0)){c[l>>2]=k+1;f=c[o+104>>2]|0;a[f+(k*20|0)>>0]=j;b[f+(k*20|0)+2>>1]=0;c[f+(k*20|0)+4>>2]=g;c[f+(k*20|0)+8>>2]=m;c[f+(k*20|0)+12>>2]=h;c[f+(k*20|0)+16>>2]=0;a[f+(k*20|0)+1>>0]=0}else k=Di(o,j,g,m,h)|0;if(a[(c[o>>2]|0)+81>>0]|0)return;j=c[o+104>>2]|0;a[j+(k*20|0)+1>>0]=-3;c[j+(k*20|0)+16>>2]=n;return}k=c[i+8>>2]|0;c:do if(!k)k=0;else while(1){i=k+55|0;if(((d[i>>0]|d[i+1>>0]<<8)&3)==2)break c;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);l=c[k+44>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;i=c[o+104>>2]|0;a[i+(n*20|0)>>0]=j;b[i+(n*20|0)+2>>1]=0;c[i+(n*20|0)+4>>2]=g;c[i+(n*20|0)+8>>2]=l;c[i+(n*20|0)+12>>2]=h;c[i+(n*20|0)+16>>2]=0;a[i+(n*20|0)+1>>0]=0}else Di(o,j,g,l,h)|0;m=c[p>>2]|0;l=Ij(f,k)|0;if(!l)return;k=c[m>>2]|0;if(!(a[k+81>>0]|0)){h=c[m+104>>2]|0;j=(c[m+108>>2]|0)+-1|0;a[h+(j*20|0)+1>>0]=-9;c[h+(j*20|0)+16>>2]=l;return}if(c[k+480>>2]|0)return;j=(c[l>>2]|0)+-1|0;c[l>>2]=j;if(j|0)return;k=c[l+12>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,l);return}j=l;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);return}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);return}}function Hj(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;l=c[b+116>>2]|0;l=(l|0)==0?b:l;if((d|0)==1)return;if(!(a[(c[(c[(c[b>>2]|0)+16>>2]|0)+(d<<4)+4>>2]|0)+9>>0]|0))return;r=l+104|0;p=c[r>>2]|0;i=l+108|0;a:do if((p|0)<=0){j=c[i>>2]|0;k=(p<<4)+16|0;n=c[l>>2]|0;m=((k|0)<0)<<31>>31;if(!j){b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))q=21;else{b=l;q=39;break a}else{do if(!(0<m>>>0|(0==(m|0)?(e[n+276>>1]|0)>>>0<k>>>0:0))){j=n+300|0;b=c[j>>2]|0;if(b|0){c[j>>2]=c[b>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}j=n+296|0;b=c[j>>2]|0;if(!b){b=n+292|0;break}else{c[j>>2]=c[b>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else b=n+288|0;while(0);c[b>>2]=(c[b>>2]|0)+1;q=21}while(0);if((q|0)==21)b=_d(n,k,m)|0;c[i>>2]=b;if(!b)b=l;else q=37}else{b=l;o=j;j=k;q=22}}else{j=c[i>>2]|0;b=0;while(1){if((c[j+(b<<4)>>2]|0)==(d|0)?(c[j+(b<<4)+4>>2]|0)==(f|0):0)break;b=b+1|0;if((b|0)>=(p|0)){q=9;break}}if((q|0)==9){k=(p<<4)+16|0;b=l;o=j;n=c[l>>2]|0;m=((k|0)<0)<<31>>31;j=k;q=22;break}r=j+(b<<4)+8|0;a[r>>0]=(a[r>>0]|g)<<24>>24!=0&1;return}while(0);do if((q|0)==22){k=o;l=n+304|0;if(((c[l>>2]|0)>>>0<=k>>>0?(c[n+308>>2]|0)>>>0>k>>>0:0)?!(m>>>0>0|((m|0)==0?j>>>0>(e[n+276>>1]|0)>>>0:0)):0){c[i>>2]=o;b=o;i=p;q=38;break}j=Zd(n,o,j,m)|0;if(j|0){c[i>>2]=j;b=j;q=37;break}if(c[n+480>>2]|0){Xd(n,o);q=39;break}if((c[l>>2]|0)>>>0<=k>>>0?(c[n+308>>2]|0)>>>0>k>>>0:0){q=n+300|0;c[o>>2]=c[q>>2];c[q>>2]=o;q=39;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);q=39;break}else{q=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);q=39;break}}while(0);if((q|0)==37){i=c[r>>2]|0;q=38}else if((q|0)==39)c[i>>2]=0;if((q|0)==38){c[r>>2]=i+1;c[b+(i<<4)>>2]=d;c[b+(i<<4)+4>>2]=f;a[b+(i<<4)+8>>0]=g;c[b+(i<<4)+12>>2]=h;return}c[r>>2]=0;b=c[b>>2]|0;i=b+81|0;if(a[i>>0]|0)return;if(a[b+82>>0]|0)return;a[i>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;r=b+272|0;c[r>>2]=(c[r>>2]|0)+1;b=c[b+236>>2]|0;if(!b)return;c[b+12>>2]=7;return}function Ij(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=b[g+52>>1]|0;r=q&65535;j=b[g+50>>1]|0;s=f+36|0;if(c[s>>2]|0){t=0;return t|0}t=g+55|0;n=c[f>>2]|0;l=r*5|0;k=l+20|0;o=n+272|0;h=(c[o>>2]|0)==0;do if(!((d[t>>0]|d[t+1>>0]<<8)&8)){a:do if(!h)if(!(a[n+81>>0]|0))m=32;else{t=0;return t|0}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<k>>>0:0))){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}i=n+296|0;h=c[i>>2]|0;if(!h){h=n+292|0;break}else{c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;m=32}while(0);if((m|0)==32)h=_d(n,k,0)|0;if(h|0){c[h+16>>2]=h+20+(r<<2);b[h+6>>1]=q;b[h+8>>1]=q;a[h+4>>0]=a[n+78>>0]|0;c[h+12>>2]=n;c[h>>2]=1;gw(h+24|0,0,l+-4|0)|0;p=h;o=h;break}i=n+81|0;if((a[i>>0]|0)==0?(a[n+82>>0]|0)==0:0){a[i>>0]=1;if((c[n+180>>2]|0)>0)c[n+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;i=c[n+236>>2]|0;if(i){c[i+12>>2]=7;m=41}else m=41}else m=41}else{b:do if(!h)if(!(a[n+81>>0]|0))m=13;else{t=0;return t|0}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<k>>>0:0))){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=n+296|0;h=c[i>>2]|0;if(!h){h=n+292|0;break}else{c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;m=13}while(0);if((m|0)==13)h=_d(n,k,0)|0;if(h|0){c[h+16>>2]=h+20+(r<<2);b[h+6>>1]=j;b[h+8>>1]=q;a[h+4>>0]=a[n+78>>0]|0;c[h+12>>2]=n;c[h>>2]=1;gw(h+24|0,0,l+-4|0)|0;p=h;o=h;break}i=n+81|0;if((a[i>>0]|0)==0?(a[n+82>>0]|0)==0:0){a[i>>0]=1;if((c[n+180>>2]|0)>0)c[n+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;i=c[n+236>>2]|0;if(i){c[i+12>>2]=7;m=41}else m=41}else m=41}while(0);if((m|0)==41)if(!h){t=0;return t|0}else{p=h;o=0}if(q<<16>>16){n=g+32|0;l=g+28|0;m=p+16|0;k=0;do{i=c[(c[n>>2]|0)+(k<<2)>>2]|0;do if((i|0)!=34049){h=c[f>>2]|0;j=a[h+78>>0]|0;g=a[h+165>>0]|0;h=Zi(h,j,i,g&255)|0;if(!(g<<24>>24)){if(!h){h=_i(f,j,0,i)|0;break}if(!(c[h+12>>2]|0))h=_i(f,j,h,i)|0}}else h=0;while(0);c[p+20+(k<<2)>>2]=h;a[(c[m>>2]|0)+k>>0]=a[(c[l>>2]|0)+k>>0]|0;k=k+1|0}while((k|0)!=(r|0))}if(!(c[s>>2]|0)){t=p;return t|0}h=d[t>>0]|d[t+1>>0]<<8;if(!(h&256)){s=h|256;a[t>>0]=s;a[t+1>>0]=s>>8;c[f+12>>2]=513}t=(c[p>>2]|0)+-1|0;c[p>>2]=t;if(t|0){t=0;return t|0}h=c[p+12>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,o);t=0;return t|0}t=p;if((c[h+304>>2]|0)>>>0<=t>>>0?(c[h+308>>2]|0)>>>0>t>>>0:0){t=h+300|0;c[p>>2]=c[t>>2];c[t>>2]=o;t=0;return t|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);t=0;return t|0}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);t=0;return t|0}return 0}function Jj(f,i,j){f=f|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=Ra;Ra=Ra+208|0;m=Z+80|0;l=Z+72|0;s=Z+64|0;n=Z+56|0;t=Z+48|0;p=Z+40|0;w=Z+32|0;S=Z;R=Z+144|0;T=Z+140|0;W=Z+136|0;E=Z+84|0;M=f+8|0;Y=c[M>>2]|0;c[T>>2]=0;c[W>>2]=0;if(!Y){j=0;Ra=Z;return j|0}Q=i;a:while(1){if(!Q)v=114;else v=d[Q>>0]|0;u=v&255;switch(u<<24>>24){case -92:{X=6;break a}case -94:{X=12;break a}case -109:{X=36;break a}case -97:{X=37;break a}case -111:{X=40;break a}case 110:{X=80;break a}case 114:{X=87;break a}case -110:{X=90;break a}case -108:{X=127;break a}case -88:{X=138;break a}case 36:{X=139;break a}case -96:case 45:{X=157;break a}case 53:case 52:case 57:case 54:case 55:case 56:{l=0;k=v;X=158;break a}case 105:case 99:case 98:case 103:case 97:case 96:case 104:case 101:case 102:case 100:case 43:case 44:{X=228;break a}case -91:{X=231;break a}case 19:case 107:{X=276;break a}case -89:{X=279;break a}case 51:case 50:{X=284;break a}case -93:{X=296;break a}case -95:{X=299;break a}case -125:case 20:{X=420;break a}case -86:{X=424;break a}case 49:{X=436;break a}case 48:{X=451;break a}case 77:{X=453;break a}case -87:{X=461;break a}case -85:{X=462;break a}case 71:{X=542;break a}case -90:case 106:case -83:break;default:{X=469;break a}}Q=c[Q+12>>2]|0}b:switch(X|0){case 6:{i=c[Q+40>>2]|0;k=c[i+28>>2]|0;l=b[Q+34>>1]|0;if(!(a[i>>0]|0)){j=c[k+(l*24|0)+16>>2]|0;Ra=Z;return j|0}if(a[i+1>>0]|0){m=c[i+8>>2]|0;i=c[k+(l*24|0)+12>>2]|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=90;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=m;c[Y+(l*20|0)+8>>2]=i;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,90,m,i,j)|0;Ra=Z;return j|0}}else X=12;break}case 36:{Kj(f,Q,0,j);Ra=Z;return j|0}case 37:{i=(a[(c[Q+8>>2]|0)+4>>0]|0)==0&1;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=70;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=j;c[Y+(l*20|0)+12>>2]=0;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,70,i,j,0)|0;Ra=Z;return j|0}}case 40:{i=c[Q+8>>2]|0;if(!i){Ra=Z;return j|0}Lg(i,S,(Eu(i)|0)&1073741823,1)|0;l=c[Y>>2]|0;c:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=51;else X=71;else{do if((e[l+276>>1]|0)>=8){i=l+300|0;k=c[i>>2]|0;if(k|0){c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=52;break c}i=l+296|0;k=c[i>>2]|0;if(!k){i=l+292|0;break}else{c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=52;break c}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=51}while(0);if((X|0)==51){k=_d(l,8,0)|0;X=52}do if((X|0)==52)if(k){i=S;W=c[i>>2]|0;i=c[i+4>>2]|0;m=k;f=m;a[f>>0]=W;a[f+1>>0]=W>>8;a[f+2>>0]=W>>16;a[f+3>>0]=W>>24;m=m+4|0;a[m>>0]=i;a[m+1>>0]=i>>8;a[m+2>>0]=i>>16;a[m+3>>0]=i>>24;m=Y+108|0;i=c[m>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;l=c[Y>>2]|0;if(!(a[l+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(i*20|0)+16>>2]=k;a[m>>0]=-13;break}else{Ei(Y,l+(i*20|0)|0,k,-13);break}}if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Y=k;if((c[l+304>>2]|0)>>>0<=Y>>>0?(c[l+308>>2]|0)>>>0>Y>>>0:0){Y=l+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else X=71;while(0);if((X|0)==71){k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[k>>2]|0)+-1|0;k=c[Y+104>>2]|0;if(a[k+(i*20|0)+1>>0]|0)Ei(Y,k+(i*20|0)|0,0,-13)}}Ra=Z;return j|0}case 80:{l=c[Q+8>>2]|0;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=110;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,110,0,j,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}if((i|0)<0)i=(c[k>>2]|0)+-1|0;Ei(Y,(c[Y+104>>2]|0)+(i*20|0)|0,l,0);Ra=Z;return j|0}case 87:{i=Y+108|0;k=c[i>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[i>>2]=k+1;Y=c[Y+104>>2]|0;a[Y+(k*20|0)>>0]=73;b[Y+(k*20|0)+2>>1]=0;c[Y+(k*20|0)+4>>2]=0;c[Y+(k*20|0)+8>>2]=j;c[Y+(k*20|0)+12>>2]=0;c[Y+(k*20|0)+16>>2]=0;a[Y+(k*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,73,0,j,0)|0;Ra=Z;return j|0}}case 90:{q=(c[Q+8>>2]|0)+2|0;p=(Eu(q)|0)&1073741823;r=p+-1|0;k=c[Y>>2]|0;s=(r|0)/2|0;m=s+1|0;n=((m|0)<0)<<31>>31;d:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))X=100;else{m=0;n=1}else{do if(!(0<n>>>0|(0==(n|0)?(e[k+276>>1]|0)>>>0<m>>>0:0))){i=k+300|0;l=c[i>>2]|0;if(l|0){c[i>>2]=c[l>>2];X=k+284|0;c[X>>2]=(c[X>>2]|0)+1;X=101;break d}i=k+296|0;l=c[i>>2]|0;if(!l){i=k+292|0;break}else{c[i>>2]=c[l>>2];X=k+284|0;c[X>>2]=(c[X>>2]|0)+1;X=101;break d}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=100}while(0);if((X|0)==100){l=_d(k,m,n)|0;X=101}if((X|0)==101){k=p+-2|0;if(!l){m=0;n=1}else{if(p>>>0>2){i=0;do{f=a[q+i>>0]|0;X=a[q+(i|1)>>0]|0;a[l+(i>>>1)>>0]=(0-(X>>>6&1)&9)+X&15|(0-(f>>>6&1)&9)+f<<4;i=i+2|0}while((i|0)<(k|0));i=r>>>1}else i=0;a[l+i>>0]=0;m=l;n=0}}l=Y+108|0;i=c[l>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[l>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=75;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=s;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,75,s,j,0)|0;k=c[Y>>2]|0;if(!(a[k+81>>0]|0)){if((i|0)<0)i=(c[l>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(Y,k+(i*20|0)|0,m,-7);Ra=Z;return j|0}if(n){Ra=Z;return j|0}c[k+(i*20|0)+16>>2]=m;a[l>>0]=-7;Ra=Z;return j|0}if(n){Ra=Z;return j|0}if(k|0){if(c[k+480>>2]|0){Xd(k,m);Ra=Z;return j|0}Y=m;if((c[k+304>>2]|0)>>>0<=Y>>>0?(c[k+308>>2]|0)>>>0>Y>>>0:0){Y=k+300|0;c[m>>2]=c[Y>>2];c[Y>>2]=m;Ra=Z;return j|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);Ra=Z;return j|0}else{Y=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);Ra=Z;return j|0}}case 127:{l=Q+32|0;i=b[l>>1]|0;n=Y+108|0;k=c[n>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[n>>2]=k+1;X=c[Y+104>>2]|0;a[X+(k*20|0)>>0]=76;b[X+(k*20|0)+2>>1]=0;c[X+(k*20|0)+4>>2]=i;c[X+(k*20|0)+8>>2]=j;c[X+(k*20|0)+12>>2]=0;c[X+(k*20|0)+16>>2]=0;a[X+(k*20|0)+1>>0]=0}else Di(Y,76,i,j,0)|0;if(!(a[(c[Q+8>>2]|0)+1>>0]|0)){Ra=Z;return j|0}m=c[f+216>>2]|0;k=b[l>>1]|0;e:do if(!m)i=0;else{l=c[m+4>>2]|0;i=2;while(1){if((c[m+(i<<2)>>2]|0)==(k|0))break;i=(c[m+(i+1<<2)>>2]|0)+i|0;if((i|0)>=(l|0)){i=0;break e}}i=m+(i+2<<2)|0}while(0);c[m>>2]=0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}f=c[Y+104>>2]|0;Y=(c[n>>2]|0)+-1|0;a[f+(Y*20|0)+1>>0]=-1;c[f+(Y*20|0)+16>>2]=i;Ra=Z;return j|0}case 138:{j=c[Q+28>>2]|0;Ra=Z;return j|0}case 139:{i=Jj(f,c[Q+12>>2]|0,j)|0;do if((i|0)!=(j|0)){k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;f=c[Y+104>>2]|0;a[f+(l*20|0)>>0]=79;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=i;c[f+(l*20|0)+8>>2]=j;c[f+(l*20|0)+12>>2]=0;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0;break}else{Di(Y,79,i,j,0)|0;break}}while(0);k=c[Q+8>>2]|0;l=a[k>>0]|0;f:do if(!(l<<24>>24))i=67;else{i=67;m=0;do{m=m<<8|d[208+(l&255)>>0];k=k+1|0;g:do if((m|0)<1685026146){if((m|0)<1667785074){switch(m|0){case 1651273570:break;default:{X=152;break g}}switch(i<<24>>24){case 69:case 67:{i=65;break g}default:{X=151;break g}}}if((m|0)<1668050786)switch(m|0){case 1667785074:{i=66;break g}default:{X=152;break g}}else switch(m|0){case 1668050786:{i=66;break g}default:{X=152;break g}}}else{if((m|0)>=1919246700){if((m|0)>=1952807028)switch(m|0){case 1952807028:{i=66;break g}default:{X=152;break g}}switch(m|0){case 1919246700:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}else{X=151;break}}if((m|0)<1718382433){switch(m|0){case 1685026146:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}}else{switch(m|0){case 1718382433:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}}}while(0);if((X|0)==151)X=0;else if((X|0)==152){X=0;if((m&16777215|0)==6909556){i=68;break f}}l=a[k>>0]|0}while(l<<24>>24!=0)}while(0);i=i<<24>>24;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=85;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=j;c[Y+(l*20|0)+8>>2]=i;c[Y+(l*20|0)+12>>2]=0;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,85,j,i,0)|0;Ra=Z;return j|0}}case 157:{l=128;k=(v|0)==45?53:52;X=158;break}case 228:{m=Lj(f,c[Q+12>>2]|0,T)|0;i=Lj(f,c[Q+16>>2]|0,W)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=u;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=m;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;m=j;break}else{Di(Y,v,i,m,j)|0;m=j;break}}case 231:{k=Q+12|0;i=c[k>>2]|0;switch(a[i>>0]|0){case -109:{Kj(f,i,1,j);Ra=Z;return j|0}case -111:{i=c[i+8>>2]|0;if(!i){Ra=Z;return j|0}Lg(i,S,(Eu(i)|0)&1073741823,1)|0;o=-+g[S>>3];g[S>>3]=o;l=c[Y>>2]|0;h:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=244;else X=264;else{do if((e[l+276>>1]|0)>=8){i=l+300|0;k=c[i>>2]|0;if(k|0){c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=245;break h}i=l+296|0;k=c[i>>2]|0;if(!k){i=l+292|0;break}else{c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=245;break h}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=244}while(0);if((X|0)==244){k=_d(l,8,0)|0;X=245}do if((X|0)==245)if(k){g[h>>3]=o;a[k>>0]=a[h>>0];a[k+1>>0]=a[h+1>>0];a[k+2>>0]=a[h+2>>0];a[k+3>>0]=a[h+3>>0];a[k+4>>0]=a[h+4>>0];a[k+5>>0]=a[h+5>>0];a[k+6>>0]=a[h+6>>0];a[k+7>>0]=a[h+7>>0];m=Y+108|0;i=c[m>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;l=c[Y>>2]|0;if(!(a[l+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(i*20|0)+16>>2]=k;a[m>>0]=-13;break}else{Ei(Y,l+(i*20|0)|0,k,-13);break}}if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Y=k;if((c[l+304>>2]|0)>>>0<=Y>>>0?(c[l+308>>2]|0)>>>0>Y>>>0:0){Y=l+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else X=264;while(0);if((X|0)==264){k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[k>>2]|0)+-1|0;k=c[Y+104>>2]|0;if(a[k+(i*20|0)+1>>0]|0)Ei(Y,k+(i*20|0)|0,0,-13)}}Ra=Z;return j|0}default:{a[E>>0]=-109;c[E+4>>2]=17408;c[E+8>>2]=0;m=Lj(f,E,T)|0;i=Lj(f,c[k>>2]|0,W)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=101;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=m;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;m=j;break b}else{Di(Y,101,i,m,j)|0;m=j;break b}}}}case 276:{i=Lj(f,c[Q+12>>2]|0,T)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[Y+104>>2]|0;a[m+(l*20|0)>>0]=u;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=i;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;m=j;break}else{Di(Y,v,i,j,0)|0;m=j;break}}case 279:{l=Lj(f,c[Q+12>>2]|0,T)|0;n=(a[(c[(c[Q+16>>2]|0)+8>>2]|0)+4>>0]|0)==0;m=(n^1)&1;n=(n^(a[Q+38>>0]|0)==45)&1;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=88;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=l;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=m;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else i=Di(Y,88,l,j,m)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){m=c[Y+104>>2]|0;a[m+(i*20|0)+1>>0]=-3;c[m+(i*20|0)+16>>2]=n;m=j}else m=j;break}case 284:{k=Y+108|0;i=c[k>>2]|0;m=Y+112|0;if((c[m>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=70;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=1;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,70,1,j,0)|0;i=Lj(f,c[Q+12>>2]|0,T)|0;l=c[k>>2]|0;if((c[m>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[Y+104>>2]|0;a[S+(l*20|0)>>0]=u;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=0;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else l=Di(Y,v,i,0,0)|0;i=c[k>>2]|0;if((c[m>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=70;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=0;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,70,0,j,0)|0;k=c[k>>2]|0;if(!(a[(c[Y>>2]|0)+81>>0]|0))i=(c[Y+104>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else i=59308;c[i+8>>2]=k;m=j;break}case 296:{i=c[Q+40>>2]|0;if(!i){c[p>>2]=c[Q+8>>2];cd(f,38820,p);m=j;break}j=c[(c[i+40>>2]|0)+(b[Q+34>>1]<<4)+8>>2]|0;Ra=Z;return j|0}case 299:{x=c[f>>2]|0;k=a[x+78>>0]|0;w=Q+4|0;i=c[w>>2]|0;if(i&16777216|0){j=c[(c[Q+44>>2]|0)+52>>2]|0;Ra=Z;return j|0}do if(a[f+23>>0]|0){R=S+20|0;a[R>>0]=2;c[S+4>>2]=127;c[S+8>>2]=128;c[S+24>>2]=0;_j(S,Q)|0;if(!(a[R>>0]|0)){i=c[w>>2]|0;break}j=Nj(f,Q,-1)|0;Ra=Z;return j|0}while(0);if((i&16384|0)==0?(r=c[Q+20>>2]|0,(r|0)!=0):0){A=r;B=c[r>>2]|0;s=1}else{A=0;B=0;s=0}i=c[Q+8>>2]|0;v=Jd(x,i,B,k,0)|0;if(v|0?(c[v+20>>2]|0)==0:0){t=v+4|0;i=c[t>>2]|0;if(i&512|0){i=f+56|0;t=c[i>>2]|0;s=t+-1|0;c[i>>2]=s;i=c[A+4>>2]|0;do if(i){if((a[i>>0]|0)!=-88){z=Jj(f,i,j)|0;X=319;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(m,78,i,j,0)|0;break}}else{z=Jj(f,0,j)|0;X=319}while(0);do if(((X|0)==319?(z|0)!=(j|0):0)?(y=c[M>>2]|0,y|0):0){i=y+108|0;k=c[i>>2]|0;if((c[y+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[y+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=z;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(y,79,z,j,0)|0;break}}while(0);if((B|0)>1){p=Y+108|0;q=Y+112|0;r=Y+104|0;n=1;do{i=c[p>>2]|0;if((c[q>>2]|0)>(i|0)){c[p>>2]=i+1;S=c[r>>2]|0;a[S+(i*20|0)>>0]=51;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=j;c[S+(i*20|0)+8>>2]=s;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,51,j,s,0)|0;i=c[A+4+(n*20|0)>>2]|0;do if(i){if((a[i>>0]|0)!=-88){D=Jj(f,i,j)|0;X=336;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(m,78,i,j,0)|0;break}}else{D=Jj(f,0,j)|0;X=336}while(0);do if(((X|0)==336?(X=0,(D|0)!=(j|0)):0)?(C=c[M>>2]|0,C|0):0){i=C+108|0;k=c[i>>2]|0;if((c[C+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[C+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=D;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(C,79,D,j,0)|0;break}}while(0);n=n+1|0}while((n|0)!=(B|0))}k=c[Y+12>>2]|0;i=0-t|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);m=j;break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[Y+108>>2];m=j;break}}if(i&1024|0){j=Jj(f,c[A+4>>2]|0,j)|0;Ra=Z;return j|0}if((B|0)>0){m=S+20|0;p=S+4|0;q=S+8|0;r=S+24|0;i=0;n=0;l=0;do{if(l>>>0<32){k=c[A+4+(l*20|0)>>2]|0;a[m>>0]=1;c[p>>2]=127;c[q>>2]=128;c[r>>2]=0;if(!k)k=1<<l;else{_j(S,k)|0;k=(a[m>>0]|0)==0?0:1<<l}i=k|i}if(!((n|0)!=0|(c[t>>2]&32|0)==0))n=Yi(f,c[A+4+(l*20|0)>>2]|0)|0;l=l+1|0}while((l|0)!=(B|0));u=i}else{u=0;n=0}if(s){do if(!u)if((B|0)==1){i=f+19|0;k=a[i>>0]|0;if(!(k<<24>>24)){W=f+44|0;l=(c[W>>2]|0)+1|0;c[W>>2]=l;break}else{l=k+-1<<24>>24;a[i>>0]=l;l=c[f+148+((l&255)<<2)>>2]|0;break}}else{i=f+32|0;l=c[i>>2]|0;k=f+28|0;m=c[k>>2]|0;if((m|0)<(B|0)){W=f+44|0;l=c[W>>2]|0;c[W>>2]=l+B;l=l+1|0;break}else{c[i>>2]=l+B;c[k>>2]=m-B;break}}else{W=f+44|0;l=c[W>>2]|0;c[W>>2]=l+B;l=l+1|0}while(0);i=c[t>>2]&192;i:do if(i|0){k=c[A+4>>2]|0;switch(a[k>>0]|0){case -92:case -94:break;default:break i}a[k+38>>0]=i}while(0);Oj(f,A,l,0,3);r=l}else r=0;if((B|0)>1)if(!(c[w>>2]&128))X=375;else{i=A+24|0;X=376}else if((B|0)==1)X=375;else q=v;if((X|0)==375){i=A+4|0;X=376}if((X|0)==376)q=Pj(x,v,B,c[i>>2]|0)|0;do if(c[q+4>>2]&32){if(!n)n=c[x+8>>2]|0;p=Y+108|0;i=c[p>>2]|0;k=Y+112|0;if((c[k>>2]|0)>(i|0)){c[p>>2]=i+1;l=c[Y+104>>2]|0;a[l+(i*20|0)>>0]=82;l=l+(i*20|0)+1|0;m=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0))}else i=Di(Y,82,0,0,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[p>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(a[m>>0]|0){Ei(Y,l+(i*20|0)|0,n,-2);break}if(!n)break;c[l+(i*20|0)+16>>2]=n;a[m>>0]=-2}}else{p=Y+108|0;k=Y+112|0}while(0);l=(c[f+52>>2]|0)==0?63:62;i=c[p>>2]|0;if((c[k>>2]|0)>(i|0)){c[p>>2]=i+1;X=c[Y+104>>2]|0;a[X+(i*20|0)>>0]=l;b[X+(i*20|0)+2>>1]=0;c[X+(i*20|0)+4>>2]=u;c[X+(i*20|0)+8>>2]=r;c[X+(i*20|0)+12>>2]=j;c[X+(i*20|0)+16>>2]=0;a[X+(i*20|0)+1>>0]=0}else i=Di(Y,l,u,r,j)|0;k=c[Y>>2]|0;j:do if(!(a[k+81>>0]|0)){if((i|0)<0)i=(c[p>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(Y,k+(i*20|0)|0,q,-8);break}if(q|0){c[k+(i*20|0)+16>>2]=q;a[l>>0]=-8}}else if(c[q+4>>2]&16|0){do if(k|0){if(c[k+480>>2]|0){Xd(k,q);break j}i=q;if((c[k+304>>2]|0)>>>0>i>>>0)break;if((c[k+308>>2]|0)>>>0<=i>>>0)break;X=k+300|0;c[q>>2]=c[X>>2];c[X>>2]=q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{X=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-X;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);i=c[p>>2]|0;if((i|0)>0)b[(c[Y+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=B&255;if(!((B|0)!=0&(u|0)==0)){Ra=Z;return j|0}if((B|0)!=1){i=f+28|0;if((c[i>>2]|0)>=(B|0)){Ra=Z;return j|0}c[i>>2]=B;c[f+32>>2]=r;Ra=Z;return j|0}if(!r){Ra=Z;return j|0}i=f+19|0;k=a[i>>0]|0;if((k&255)>=8){Ra=Z;return j|0}a[i>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=r;Ra=Z;return j|0}c[t>>2]=i;cd(f,38846,t);m=j;break}case 420:{if((v|0)==131?(k=c[c[c[Q+20>>2]>>2]>>2]|0,(k|0)!=1):0){c[n>>2]=k;c[n+4>>2]=1;cd(f,39001,n);m=j;break}j=Qj(f,Q)|0;Ra=Z;return j|0}case 424:{m=Q+12|0;i=c[m>>2]|0;if(!(c[i+28>>2]|0)){j=Qj(f,i)|0;i=c[m>>2]|0;c[i+28>>2]=j}l=c[Q+28>>2]|0;if(l){k=a[i>>0]|0;if(k<<24>>24==-88)k=a[i+38>>0]|0;switch(k<<24>>24){case -87:{k=i+20|0;X=432;break}case -125:{k=c[i+20>>2]|0;X=432;break}default:k=1}if((X|0)==432)k=c[c[k>>2]>>2]|0;if((l|0)!=(k|0)){c[s>>2]=l;c[s+4>>2]=k;cd(f,38869,s);i=c[m>>2]|0}}j=(c[i+28>>2]|0)+(b[Q+32>>1]|0)|0;Ra=Z;return j|0}case 436:{p=f+56|0;n=c[p>>2]|0;i=n+-2|0;c[p>>2]=i;p=Y+108|0;k=c[p>>2]|0;m=Y+112|0;if((c[m>>2]|0)>(k|0)){c[p>>2]=k+1;X=c[Y+104>>2]|0;a[X+(k*20|0)>>0]=73;b[X+(k*20|0)+2>>1]=0;c[X+(k*20|0)+4>>2]=0;c[X+(k*20|0)+8>>2]=j;c[X+(k*20|0)+12>>2]=0;c[X+(k*20|0)+16>>2]=0;a[X+(k*20|0)+1>>0]=0}else Di(Y,73,0,j,0)|0;Rj(f,Q,n+-1|0,i);i=c[p>>2]|0;if((c[m>>2]|0)>(i|0)){c[p>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=70;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=1;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(Y,70,1,j,0)|0;l=Y+12|0;i=c[l>>2]|0;k=0-n|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,Y,k);else c[(c[i+64>>2]|0)+(k<<2)>>2]=c[p>>2];i=c[p>>2]|0;if((c[m>>2]|0)>(i|0)){c[p>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=83;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=j;c[f+(i*20|0)+8>>2]=0;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(Y,83,j,0,0)|0;k=c[l>>2]|0;i=1-n|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);Ra=Z;return j|0}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[p>>2];Ra=Z;return j|0}}case 451:{Sj(f,c[Q+12>>2]|0,c[Q+20>>2]|0,j,0,0);Ra=Z;return j|0}case 453:{m=c[Q+44>>2]|0;k=G((b[m+42>>1]|0)+1|0,c[Q+28>>2]|0)|0;i=Q+32|0;k=(b[i>>1]|0)+1+k|0;n=Y+108|0;l=c[n>>2]|0;p=Y+112|0;if((c[p>>2]|0)>(l|0)){c[n>>2]=l+1;S=c[Y+104>>2]|0;a[S+(l*20|0)>>0]=-107;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=k;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else Di(Y,149,k,j,0)|0;S=b[i>>1]|0;if(S<<16>>16>-1?(a[(c[m+4>>2]|0)+(S<<16>>16<<4)+13>>0]|0)==69:0){i=c[n>>2]|0;if((c[p>>2]|0)>(i|0)){c[n>>2]=i+1;m=c[Y+104>>2]|0;a[m+(i*20|0)>>0]=84;b[m+(i*20|0)+2>>1]=0;c[m+(i*20|0)+4>>2]=j;c[m+(i*20|0)+8>>2]=0;c[m+(i*20|0)+12>>2]=0;c[m+(i*20|0)+16>>2]=0;a[m+(i*20|0)+1>>0]=0;m=j;break}else{Di(Y,84,j,0,0)|0;m=j;break}}else m=j;break}case 461:{cd(f,38899,l);m=j;break}case 462:{i=c[Q+28>>2]|0;l=Y+108|0;k=c[l>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[l>>2]=k+1;S=c[Y+104>>2]|0;a[S+(k*20|0)>>0]=21;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=i;c[S+(k*20|0)+8>>2]=0;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else k=Di(Y,21,i,0,0)|0;m=Jj(f,c[Q+12>>2]|0,j)|0;i=c[l>>2]|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){j=(k|0)<0?i+-1|0:k;Y=c[Y+104>>2]|0;c[Y+(j*20|0)+8>>2]=i;i=Y+(j*20|0)|0}else{c[14829]=i;i=59308}c[i+12>>2]=m;break}case 469:{C=c[Q+20>>2]|0;D=c[C>>2]|0;F=f+56|0;I=c[F>>2]|0;H=I+-1|0;c[F>>2]=H;i=c[Q+12>>2]|0;z=(i|0)!=0;if(z){l=E;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));k=c[i+4>>2]|0;ew(E|0,i|0,((k&16384|0)==0?((k&8192|0)==0?52:28):12)|0)|0;k=a[E>>0]|0;y=E+38|0;switch((k<<24>>24==-88?a[y>>0]|0:k)<<24>>24){case -87:{l=c[E+20>>2]|0;i=l;X=473;break}case -125:{l=c[E+20>>2]|0;i=c[l>>2]|0;X=473;break}default:X=474}k:do if((X|0)==473){x=c[i>>2]|0;if((x|0)!=1){c[T>>2]=0;if(k<<24>>24==-125){i=Qj(f,E)|0;break}Q=f+44|0;P=c[Q>>2]|0;i=P+1|0;c[Q>>2]=P+x;if((x|0)>0){r=E+20|0;s=f+23|0;t=S+20|0;u=S+4|0;v=S+8|0;w=S+24|0;k=0;while(1){l=c[l+4+(k*20|0)>>2]|0;q=k+i|0;do if(!(a[s>>0]|0))if(!l){B=Jj(f,0,q)|0;X=491}else X=485;else{a[t>>0]=2;c[u>>2]=127;c[v>>2]=128;c[w>>2]=0;if(l){_j(S,l)|0;if(!(a[t>>0]|0)){X=485;break}}Nj(f,l,q)|0}while(0);do if((X|0)==485){X=0;if((a[l>>0]|0)!=-88){B=Jj(f,l,q)|0;X=491;break}p=c[M>>2]|0;l=c[l+28>>2]|0;m=p+108|0;n=c[m>>2]|0;if((c[p+112>>2]|0)>(n|0)){c[m>>2]=n+1;Q=c[p+104>>2]|0;a[Q+(n*20|0)>>0]=78;b[Q+(n*20|0)+2>>1]=0;c[Q+(n*20|0)+4>>2]=l;c[Q+(n*20|0)+8>>2]=q;c[Q+(n*20|0)+12>>2]=0;c[Q+(n*20|0)+16>>2]=0;a[Q+(n*20|0)+1>>0]=0;break}else{Di(p,78,l,q,0)|0;break}}while(0);do if(((X|0)==491?(X=0,(B|0)!=(q|0)):0)?(A=c[M>>2]|0,A|0):0){l=A+108|0;m=c[l>>2]|0;if((c[A+112>>2]|0)>(m|0)){c[l>>2]=m+1;Q=c[A+104>>2]|0;a[Q+(m*20|0)>>0]=79;b[Q+(m*20|0)+2>>1]=0;c[Q+(m*20|0)+4>>2]=B;c[Q+(m*20|0)+8>>2]=q;c[Q+(m*20|0)+12>>2]=0;c[Q+(m*20|0)+16>>2]=0;a[Q+(m*20|0)+1>>0]=0;break}else{Di(A,79,B,q,0)|0;break}}while(0);k=k+1|0;if((k|0)==(x|0))break k;l=c[r>>2]|0}}}else X=474}while(0);if((X|0)==474)i=Lj(f,E,T)|0;a[y>>0]=a[E>>0]|0;a[E>>0]=-88;c[E+28>>2]=i;l=E+4|0;c[l>>2]=c[l>>2]&-4097;l=R;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));a[R>>0]=53;c[R+12>>2]=E;c[T>>2]=0;i=R}else i=0;w=D+-1|0;if((D|0)>1){r=R+16|0;s=Y+108|0;t=Y+112|0;u=Y+104|0;v=Y+12|0;q=0;do{k=c[C+4+(q*20|0)>>2]|0;if(z)c[r>>2]=k;else i=k;p=c[F>>2]|0;k=p+-1|0;c[F>>2]=k;Tj(f,i,k,16);k=c[C+4+((q|1)*20|0)>>2]|0;do if(k){if((a[k>>0]|0)!=-88){K=Jj(f,k,j)|0;X=510;break}n=c[M>>2]|0;k=c[k+28>>2]|0;l=n+108|0;m=c[l>>2]|0;if((c[n+112>>2]|0)>(m|0)){c[l>>2]=m+1;S=c[n+104>>2]|0;a[S+(m*20|0)>>0]=78;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=k;c[S+(m*20|0)+8>>2]=j;c[S+(m*20|0)+12>>2]=0;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0;break}else{Di(n,78,k,j,0)|0;break}}else{K=Jj(f,0,j)|0;X=510}while(0);do if(((X|0)==510?(X=0,(K|0)!=(j|0)):0)?(J=c[M>>2]|0,J|0):0){k=J+108|0;l=c[k>>2]|0;if((c[J+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[J+104>>2]|0;a[S+(l*20|0)>>0]=79;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=K;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(J,79,K,j,0)|0;break}}while(0);k=c[s>>2]|0;if((c[t>>2]|0)>(k|0)){c[s>>2]=k+1;S=c[u>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=H;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(Y,11,0,H,0)|0;l=c[v>>2]|0;k=0-p|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Y,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[s>>2];q=q+2|0}while((q|0)<(w|0))}l:do if(!(D&1)){i=Y+108|0;k=c[i>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[Y+104>>2]|0;a[S+(k*20|0)>>0]=73;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(Y,73,0,j,0)|0;break}}else{i=c[C+4+(w*20|0)>>2]|0;do if(i){if((a[i>>0]|0)!=-88){l=Jj(f,i,j)|0;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break l}else{Di(m,78,i,j,0)|0;break l}}else l=Jj(f,0,j)|0;while(0);if((l|0)!=(j|0)?(L=c[M>>2]|0,L|0):0){i=L+108|0;k=c[i>>2]|0;if((c[L+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[L+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=l;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(L,79,l,j,0)|0;break}}}while(0);k=c[Y+12>>2]|0;i=0-I|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,Y,i);else c[(c[k+64>>2]|0)+(i<<2)>>2]=c[Y+108>>2];m=j;break}case 542:{if(!(c[f+120>>2]|0)){cd(f,38917,m);j=0;Ra=Z;return j|0}i=a[Q+1>>0]|0;switch(i<<24>>24){case 2:{Y=c[f+116>>2]|0;a[((Y|0)==0?f:Y)+21>>0]=1;break}case 4:{l=c[Q+8>>2]|0;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=69;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=0;c[S+(i*20|0)+8>>2]=4;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else i=Di(Y,69,0,4,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){m=j;break b}if((i|0)<0)i=(c[k>>2]|0)+-1|0;Ei(Y,(c[Y+104>>2]|0)+(i*20|0)|0,l,0);m=j;break b}default:{}}Uj(f,1811,i<<24>>24,c[Q+8>>2]|0,0,0);m=j;break}}if((X|0)==12){i=c[Q+28>>2]|0;if(!(c[Q+4>>2]&8)){do if((i|0)<0){i=c[f+52>>2]|0;if((i|0)>=0){i=i+-1|0;break}j=(b[Q+32>>1]|0)-i|0;Ra=Z;return j|0}while(0);k=a[Q+38>>0]|0;Vj(Y,c[Q+44>>2]|0,i,b[Q+32>>1]|0,j);if(!(k<<24>>24)){Ra=Z;return j|0}i=c[Y+108>>2]|0;if((i|0)<=0){Ra=Z;return j|0}b[(c[Y+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=k&255;Ra=Z;return j|0}m=Jj(f,c[Q+12>>2]|0,j)|0;i=b[Q+32>>1]|0;if(i<<16>>16>-1){i=a[(c[(c[Q+44>>2]|0)+4>>2]|0)+(i<<16>>16<<4)+13>>0]|0;if(i<<24>>24==65){j=m;Ra=Z;return j|0}else l=i<<24>>24}else l=68;n=Y+108|0;do if((m|0)!=(j|0)){i=c[n>>2]|0;k=Y+112|0;if((c[k>>2]|0)>(i|0)){c[n>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=79;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=m;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0;break}else{Di(Y,79,m,j,0)|0;break}}else k=Y+112|0;while(0);m=38812+((l<<1)+-132)|0;i=c[n>>2]|0;if((c[k>>2]|0)>(i|0)){c[n>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=91;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=j;c[f+(i*20|0)+8>>2]=1;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,91,j,1,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}if((i|0)<0)i=(c[n>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(i*20|0)+16>>2]=m;a[l>>0]=-1;Ra=Z;return j|0}else{Ei(Y,k+(i*20|0)|0,m,-1);Ra=Z;return j|0}}do if((X|0)==158){N=c[Q+12>>2]|0;n=a[N>>0]|0;m=n<<24>>24==-88;if(m)i=a[N+38>>0]|0;else i=n;switch(i<<24>>24){case -87:{q=N+20|0;X=163;break}case -125:{q=c[N+20>>2]|0;X=163;break}default:{}}if((X|0)==163?(c[c[q>>2]>>2]|0)>=2:0){M=k&255;p=l&255;L=c[Q+16>>2]|0;if(m)i=a[N+38>>0]|0;else i=n;switch(i<<24>>24){case -87:{i=N+20|0;X=169;break}case -125:{i=c[N+20>>2]|0;X=169;break}default:l=1}if((X|0)==169)l=c[c[i>>2]>>2]|0;i=f+56|0;K=c[i>>2]|0;J=K+-1|0;c[i>>2]=J;i=a[L>>0]|0;if(i<<24>>24==-88)k=a[L+38>>0]|0;else k=i;switch(k<<24>>24){case -87:{k=L+20|0;X=175;break}case -125:{k=c[L+20>>2]|0;X=175;break}default:k=1}if((X|0)==175)k=c[c[k>>2]>>2]|0;if((l|0)!=(k|0)){cd(f,38899,w);m=j;break}k=M<<24>>24==55?56:M;if(n<<24>>24==-125){H=Qj(f,N)|0;i=a[L>>0]|0}else H=0;if(i<<24>>24==-125)t=Qj(f,L)|0;else t=0;u=N+38|0;v=N+20|0;w=N+28|0;x=N+20|0;y=L+38|0;z=L+20|0;A=L+28|0;B=L+20|0;C=f+19|0;D=l+-1|0;I=Y+108|0;E=Y+112|0;F=Y+104|0;s=l+-2|0;i=p|32;r=0;k=k<<24>>24==57?54:k;while(1){c[S>>2]=0;c[R>>2]=0;switch(a[N>>0]|0){case -88:{m=a[u>>0]|0;switch(m<<24>>24){case -87:{l=x;X=186;break}case -125:{l=c[v>>2]|0;X=186;break}default:l=N}do if((X|0)==186){X=0;if((c[c[l>>2]>>2]|0)>=2)if(m<<24>>24==-125){l=c[(c[c[v>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}else{l=c[(c[x>>2]|0)+4+(r*20|0)>>2]|0;break}else l=N}while(0);p=(c[w>>2]|0)+r|0;break}case -125:{p=r+H|0;l=c[(c[c[v>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}default:{l=c[(c[v>>2]|0)+4+(r*20|0)>>2]|0;p=Lj(f,l,S)|0}}switch(a[L>>0]|0){case -88:{n=a[y>>0]|0;switch(n<<24>>24){case -87:{m=B;X=196;break}case -125:{m=c[z>>2]|0;X=196;break}default:m=L}do if((X|0)==196){X=0;if((c[c[m>>2]>>2]|0)>=2)if(n<<24>>24==-125){m=c[(c[c[z>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}else{m=c[(c[B>>2]|0)+4+(r*20|0)>>2]|0;break}else m=L}while(0);n=(c[A>>2]|0)+r|0;break}case -125:{n=r+t|0;m=c[(c[c[z>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}default:{m=c[(c[z>>2]|0)+4+(r*20|0)>>2]|0;n=Lj(f,m,R)|0}}q=i&255;Mj(f,l,m,k&255,p,n,j,q);l=c[S>>2]|0;if(l|0?(O=a[C>>0]|0,(O&255)<8):0){a[C>>0]=O+1<<24>>24;c[f+148+((O&255)<<2)>>2]=l}l=c[R>>2]|0;if(l|0?(P=a[C>>0]|0,(P&255)<8):0){a[C>>0]=P+1<<24>>24;c[f+148+((P&255)<<2)>>2]=l}if((r|0)==(D|0))break;switch(k<<24>>24){case 53:{i=c[I>>2]|0;if((c[E>>2]|0)>(i|0)){c[I>>2]=i+1;Q=c[F>>2]|0;a[Q+(i*20|0)>>0]=20;b[Q+(i*20|0)+2>>1]=0;c[Q+(i*20|0)+4>>2]=j;c[Q+(i*20|0)+8>>2]=J;c[Q+(i*20|0)+12>>2]=0;c[Q+(i*20|0)+16>>2]=0;a[Q+(i*20|0)+1>>0]=0}else Di(Y,20,j,J,0)|0;i=(q|8)&255;k=53;break}case 52:{i=c[I>>2]|0;if((c[E>>2]|0)>(i|0)){c[I>>2]=i+1;Q=c[F>>2]|0;a[Q+(i*20|0)>>0]=18;b[Q+(i*20|0)+2>>1]=0;c[Q+(i*20|0)+4>>2]=j;c[Q+(i*20|0)+8>>2]=J;c[Q+(i*20|0)+12>>2]=0;c[Q+(i*20|0)+16>>2]=0;a[Q+(i*20|0)+1>>0]=0}else Di(Y,18,j,J,0)|0;i=(q|8)&255;k=52;break}default:{l=c[I>>2]|0;if((c[E>>2]|0)>(l|0)){c[I>>2]=l+1;Q=c[F>>2]|0;a[Q+(l*20|0)>>0]=58;b[Q+(l*20|0)+2>>1]=0;c[Q+(l*20|0)+4>>2]=0;c[Q+(l*20|0)+8>>2]=J;c[Q+(l*20|0)+12>>2]=0;c[Q+(l*20|0)+16>>2]=0;a[Q+(l*20|0)+1>>0]=0}else Di(Y,58,0,J,0)|0;k=(r|0)==(s|0)?M:k}}r=r+1|0}k=c[Y+12>>2]|0;i=0-K|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);m=j;break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[I>>2];m=j;break}}Y=Lj(f,N,T)|0;X=Q+16|0;m=Lj(f,c[X>>2]|0,W)|0;Mj(f,N,c[X>>2]|0,k,Y,m,j,l|32);m=j}while(0);i=c[T>>2]|0;if(i|0?(U=f+19|0,V=a[U>>0]|0,(V&255)<8):0){a[U>>0]=V+1<<24>>24;c[f+148+((V&255)<<2)>>2]=i}i=c[W>>2]|0;if(!i){j=m;Ra=Z;return j|0}k=f+19|0;l=a[k>>0]|0;if((l&255)>=8){j=m;Ra=Z;return j|0}a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=i;j=m;Ra=Z;return j|0}function Kj(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+32|0;s=w+16|0;u=w+8|0;n=w;v=c[f+8>>2]|0;if(c[h+4>>2]&1024|0){l=c[h+8>>2]|0;l=(i|0)==0?l:0-l|0;h=v+108|0;k=c[h>>2]|0;if((c[v+112>>2]|0)>(k|0)){c[h>>2]=k+1;v=c[v+104>>2]|0;a[v+(k*20|0)>>0]=70;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=l;c[v+(k*20|0)+8>>2]=j;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0;Ra=w;return}else{Di(v,70,l,j,0)|0;Ra=w;return}}q=c[h+8>>2]|0;h=Vd(q,n)|0;r=(i|0)!=0;do if(!((h|0)==2|(r|(h|0)!=3)^1)?(o=n,m=c[o>>2]|0,o=c[o+4>>2]|0,!(r&((m|0)==0&(o|0)==-2147483648))):0){if(r){h=(h|0)==3;m=Tv(0,0,m|0,o|0)|0;o=L()|0;m=h?0:m;o=h?-2147483648:o;c[n>>2]=m;c[n+4>>2]=o}n=c[v>>2]|0;a:do if(c[n+272>>2]|0){if(!(a[n+81>>0]|0))t=68}else{do if((e[n+276>>1]|0)>=8){h=n+300|0;l=c[h>>2]|0;if(l|0){c[h>>2]=c[l>>2];t=n+284|0;c[t>>2]=(c[t>>2]|0)+1;t=69;break a}h=n+296|0;l=c[h>>2]|0;if(!l){h=n+292|0;break}else{c[h>>2]=c[l>>2];t=n+284|0;c[t>>2]=(c[t>>2]|0)+1;t=69;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;t=68}while(0);if((t|0)==68){l=_d(n,8,0)|0;t=69}if((t|0)==69?l|0:0){n=l;h=n;a[h>>0]=m;a[h+1>>0]=m>>8;a[h+2>>0]=m>>16;a[h+3>>0]=m>>24;n=n+4|0;a[n>>0]=o;a[n+1>>0]=o>>8;a[n+2>>0]=o>>16;a[n+3>>0]=o>>24;n=v+108|0;h=c[n>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[n>>2]=h+1;o=c[v+104>>2]|0;a[o+(h*20|0)>>0]=71;b[o+(h*20|0)+2>>1]=0;c[o+(h*20|0)+4>>2]=0;c[o+(h*20|0)+8>>2]=j;c[o+(h*20|0)+12>>2]=0;c[o+(h*20|0)+16>>2]=0;a[o+(h*20|0)+1>>0]=0}else h=Di(v,71,0,j,0)|0;m=c[v>>2]|0;if(!(a[m+81>>0]|0)){if((h|0)<0)h=(c[n>>2]|0)+-1|0;m=c[v+104>>2]|0;n=m+(h*20|0)+1|0;if(!(a[n>>0]|0)){c[m+(h*20|0)+16>>2]=l;a[n>>0]=-14;break}else{Ei(v,m+(h*20|0)|0,l,-14);break}}if(m|0){if(c[m+480>>2]|0){Xd(m,l);break}o=l;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[l>>2]=c[o>>2];c[o>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}l=v+108|0;h=c[l>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[l>>2]=h+1;o=c[v+104>>2]|0;a[o+(h*20|0)>>0]=71;b[o+(h*20|0)+2>>1]=0;c[o+(h*20|0)+4>>2]=0;c[o+(h*20|0)+8>>2]=j;c[o+(h*20|0)+12>>2]=0;c[o+(h*20|0)+16>>2]=0;a[o+(h*20|0)+1>>0]=0}else h=Di(v,71,0,j,0)|0;if(!(a[(c[v>>2]|0)+81>>0]|0)){if((h|0)<0)h=(c[l>>2]|0)+-1|0;l=c[v+104>>2]|0;if(a[l+(h*20|0)+1>>0]|0)Ei(v,l+(h*20|0)|0,0,-14)}}else t=7;while(0);do if((t|0)==7?q|0:0){l=a[q>>0]|0;do if(!(l<<24>>24)){h=38972;t=9}else{h=l&255;if(l<<24>>24==48){h=a[q+1>>0]|0;if(!(h<<24>>24)){h=38973;t=9;break}h=h&255;if((h|32|0)==120)break;else k=120}else k=48;p=d[208+h>>0]|0;t=13}while(0);if((t|0)==9){p=0;k=a[208+(d[h>>0]|0)>>0]|0;t=13}if((t|0)==13?(p|0)!=(k&255|0):0){Lg(q,u,(Eu(q)|0)&1073741823,1)|0;if(i|0)g[u>>3]=-+g[u>>3];l=c[v>>2]|0;b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))t=27;else t=47;else{do if((e[l+276>>1]|0)>=8){h=l+300|0;k=c[h>>2]|0;if(k|0){c[h>>2]=c[k>>2];m=l+284|0;c[m>>2]=(c[m>>2]|0)+1;m=k;t=28;break b}h=l+296|0;k=c[h>>2]|0;if(!k){h=l+292|0;break}else{c[h>>2]=c[k>>2];m=l+284|0;c[m>>2]=(c[m>>2]|0)+1;m=k;t=28;break b}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;t=27}while(0);if((t|0)==27){m=_d(l,8,0)|0;t=28}do if((t|0)==28)if(m){h=u;s=c[h>>2]|0;h=c[h+4>>2]|0;l=m;u=l;a[u>>0]=s;a[u+1>>0]=s>>8;a[u+2>>0]=s>>16;a[u+3>>0]=s>>24;l=l+4|0;a[l>>0]=h;a[l+1>>0]=h>>8;a[l+2>>0]=h>>16;a[l+3>>0]=h>>24;l=v+108|0;h=c[l>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[l>>2]=h+1;u=c[v+104>>2]|0;a[u+(h*20|0)>>0]=-111;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=0;c[u+(h*20|0)+8>>2]=j;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else h=Di(v,145,0,j,0)|0;k=c[v>>2]|0;if(!(a[k+81>>0]|0)){if((h|0)<0)h=(c[l>>2]|0)+-1|0;k=c[v+104>>2]|0;l=k+(h*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(h*20|0)+16>>2]=m;a[l>>0]=-13;break}else{Ei(v,k+(h*20|0)|0,m,-13);break}}if(k|0){if(c[k+480>>2]|0){Xd(k,m);break}v=m;if((c[k+304>>2]|0)>>>0<=v>>>0?(c[k+308>>2]|0)>>>0>v>>>0:0){v=k+300|0;c[m>>2]=c[v>>2];c[v>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{v=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else t=47;while(0);if((t|0)==47){k=v+108|0;h=c[k>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[k>>2]=h+1;u=c[v+104>>2]|0;a[u+(h*20|0)>>0]=-111;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=0;c[u+(h*20|0)+8>>2]=j;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else h=Di(v,145,0,j,0)|0;if(!(a[(c[v>>2]|0)+81>>0]|0)){if((h|0)<0)h=(c[k>>2]|0)+-1|0;k=c[v+104>>2]|0;if(a[k+(h*20|0)+1>>0]|0)Ei(v,k+(h*20|0)|0,0,-13)}}break}c[s>>2]=r?34064:59952;c[s+4>>2]=q;cd(f,38975,s)}while(0);Ra=w;return}function Lj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+32|0;g=i;a:do if(!d)f=0;else while(1){f=c[d+4>>2]|0;if(!(f&4096)){f=d;break a}if(!(f&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){f=0;break}}while(0);if((a[b+23>>0]|0?(a[f>>0]|0)!=-88:0)?(d=g+20|0,a[d>>0]=2,c[g+4>>2]=127,c[g+8>>2]=128,c[g+24>>2]=0,_j(g,f)|0,a[d>>0]|0):0){c[e>>2]=0;e=Nj(b,f,-1)|0;Ra=i;return e|0}g=b+19|0;d=a[g>>0]|0;if(!(d<<24>>24)){j=b+44|0;d=(c[j>>2]|0)+1|0;c[j>>2]=d}else{d=d+-1<<24>>24;a[g>>0]=d;d=c[b+148+((d&255)<<2)>>2]|0}f=Jj(b,f,d)|0;if((f|0)!=(d|0))if((d|0)!=0?(h=a[g>>0]|0,(h&255)<8):0){a[g>>0]=h+1<<24>>24;c[b+148+((h&255)<<2)>>2]=d;d=0}else d=0;c[e>>2]=d;j=f;Ra=i;return j|0}function Mj(d,e,f,g,h,i,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0;do if(!(c[e+4>>2]&256)){if(f|0?c[f+4>>2]&256|0:0){n=Yi(d,f)|0;break}l=Yi(d,e)|0;if(!l)n=Yi(d,f)|0;else n=l}else n=Yi(d,e)|0;while(0);f=Xj(f)|0;l=Xj(e)|0;if(f<<24>>24==0|l<<24>>24==0)l=(l|f)<<24>>24==0?65:(l&255)+(f&255)|0;else l=f<<24>>24>66|l<<24>>24>66?67:65;m=l|k;k=d+8|0;d=c[k>>2]|0;f=d+108|0;l=c[f>>2]|0;if((c[d+112>>2]|0)>(l|0)){c[f>>2]=l+1;e=c[d+104>>2]|0;a[e+(l*20|0)>>0]=g;b[e+(l*20|0)+2>>1]=0;c[e+(l*20|0)+4>>2]=i;c[e+(l*20|0)+8>>2]=j;c[e+(l*20|0)+12>>2]=h;c[e+(l*20|0)+16>>2]=0;a[e+(l*20|0)+1>>0]=0}else l=Di(d,g,i,j,h)|0;do if(!(a[(c[d>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[f>>2]|0)+-1|0;f=c[d+104>>2]|0;e=f+(l*20|0)+1|0;if(a[e>>0]|0){Ei(d,f+(l*20|0)|0,n,-2);break}if(n|0){c[f+(l*20|0)+16>>2]=n;a[e>>0]=-2}}while(0);l=c[k>>2]|0;f=c[l+108>>2]|0;if((f|0)<=0)return;b[(c[l+104>>2]|0)+((f+-1|0)*20|0)+2>>1]=m&255;return}function Nj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=b+68|0;h=c[j>>2]|0;i=(e|0)<0;a:do if(i&(h|0)!=0?(f=c[h>>2]|0,(f|0)>0):0){g=h+4|0;while(1){if(a[g+13>>0]&4?(bk(0,c[g>>2]|0,d,-1)|0)==0:0)break;if((f|0)>1){f=f+-1|0;g=g+20|0}else break a}j=c[g+16>>2]|0;return j|0}while(0);if(!d)f=0;else f=dk(c[b>>2]|0,d,0,0)|0;g=nj(c[b>>2]|0,h,f)|0;if(g){f=(c[g>>2]|0)+-1|0;h=g+4+(f*20|0)+13|0;a[h>>0]=a[h>>0]&-5|e>>>29&4;if(i){i=b+44|0;e=(c[i>>2]|0)+1|0;c[i>>2]=e}c[g+4+(f*20|0)+16>>2]=e}c[j>>2]=g;j=e;return j|0}function Oj(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=Ra;Ra=Ra+32|0;A=F;i=h&255;D=79-(i&1)|0;y=c[d+8>>2]|0;j=c[e>>2]|0;if((j|0)<=0){Ra=F;return}w=((a[d+23>>0]|0)==0?i&253:h)&255;q=(w&4|0)==0;r=(w&2|0)==0;s=A+20|0;t=A+4|0;u=A+8|0;v=A+24|0;w=(w&8|0)==0;x=(D|0)==78;l=g+-1|0;m=y+108|0;n=y+112|0;o=y+104|0;p=D&255;k=e+4|0;h=0;i=j;while(1){g=c[k>>2]|0;do if(!q?(j=b[k+16>>1]|0,z=j&65535,j<<16>>16!=0):0){if(!w){h=h+-1|0;i=i+-1|0;break}g=l+z|0;e=h+f|0;j=c[m>>2]|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=j+1;G=c[o>>2]|0;a[G+(j*20|0)>>0]=p;b[G+(j*20|0)+2>>1]=0;c[G+(j*20|0)+4>>2]=g;c[G+(j*20|0)+8>>2]=e;c[G+(j*20|0)+12>>2]=0;c[G+(j*20|0)+16>>2]=0;a[G+(j*20|0)+1>>0]=0;break}else{Di(y,D,g,e,0)|0;break}}else E=10;while(0);a:do if((E|0)==10){E=0;do if(!r){a[s>>0]=2;c[t>>2]=127;c[u>>2]=128;c[v>>2]=0;if(g){_j(A,g)|0;if(!(a[s>>0]|0))break}Nj(d,g,h+f|0)|0;break a}while(0);j=h+f|0;e=Jj(d,g,j)|0;if((e|0)!=(j|0)){if(x){if(!(a[(c[y>>2]|0)+81>>0]|0))g=(c[o>>2]|0)+(((c[m>>2]|0)+-1|0)*20|0)|0;else g=59308;if(((a[g>>0]|0)==78?(B=g+12|0,C=(c[B>>2]|0)+1|0,(C+(c[g+4>>2]|0)|0)==(e|0)):0)?(C+(c[g+8>>2]|0)|0)==(j|0):0){c[B>>2]=C;break}}g=c[m>>2]|0;if((c[n>>2]|0)>(g|0)){c[m>>2]=g+1;G=c[o>>2]|0;a[G+(g*20|0)>>0]=p;b[G+(g*20|0)+2>>1]=0;c[G+(g*20|0)+4>>2]=e;c[G+(g*20|0)+8>>2]=j;c[G+(g*20|0)+12>>2]=0;c[G+(g*20|0)+16>>2]=0;a[G+(g*20|0)+1>>0]=0;break}else{Di(y,D,e,j,0)|0;break}}}while(0);h=h+1|0;if((h|0)>=(i|0))break;else k=k+20|0}Ra=F;return}function Pj(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;l=n+4|0;m=n;c[l>>2]=0;c[m>>2]=0;if(!g){m=d;Ra=n;return m|0}if((a[g>>0]|0)!=-94){m=d;Ra=n;return m|0}g=c[g+44>>2]|0;if(!g){m=d;Ra=n;return m|0}if(!(c[g+56>>2]|0)){m=d;Ra=n;return m|0}g=g+64|0;while(1){g=c[g>>2]|0;if((c[g>>2]|0)==(b|0))break;else g=g+24|0}g=c[g+8>>2]|0;h=c[(c[g>>2]|0)+72>>2]|0;if(!h){m=d;Ra=n;return m|0}k=d+32|0;if(!(_a[h&127](g,f,c[k>>2]|0,l,m)|0)){m=d;Ra=n;return m|0}g=c[k>>2]|0;if(!g)i=41;else i=((Eu(g)|0)&1073741823)+41|0;a:do if(!b){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](i)|0;j=34;break}g=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;f=59064;h=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&h>>>0>0){b=c[14978]|0;f=Tv(h|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&f>>>0<=b>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){m=d;Ra=n;return m|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;b=h}else b=h}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){m=d;Ra=n;return m|0}}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<i>>>0:0))){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];j=b+284|0;c[j>>2]=(c[j>>2]|0)+1;j=34;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];j=b+284|0;c[j>>2]=(c[j>>2]|0)+1;j=34;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,i,0)|0;j=34}while(0);if((j|0)==34)if(!g){m=d;Ra=n;return m|0}else b=g;gw(b+40|0,0,i+-40|0)|0;f=b;g=d;h=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));f=b+40|0;c[b+32>>2]=f;h=c[k>>2]|0;if(!h)g=1;else g=((Eu(h)|0)&1073741823)+1|0;ew(f|0,h|0,g|0)|0;c[b+16>>2]=c[l>>2];c[b+8>>2]=c[m>>2];m=b+4|0;c[m>>2]=c[m>>2]|16;m=b;Ra=n;return m|0}function Qj(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+48|0;k=r+8|0;h=r;o=r+16|0;q=c[d+8>>2]|0;p=c[e+20>>2]|0;f=e+4|0;g=c[f>>2]|0;do if(!(g&32)){if(g&33554432|0){c[h>>2]=c[p+20>>2];nk(d,0,39045,h);f=c[e+48>>2]|0;g=c[e+44>>2]|0;h=q+108|0;i=c[h>>2]|0;if((c[q+112>>2]|0)>(i|0)){c[h>>2]=i+1;q=c[q+104>>2]|0;a[q+(i*20|0)>>0]=12;b[q+(i*20|0)+2>>1]=0;c[q+(i*20|0)+4>>2]=f;c[q+(i*20|0)+8>>2]=g;c[q+(i*20|0)+12>>2]=0;c[q+(i*20|0)+16>>2]=0;a[q+(i*20|0)+1>>0]=0}else Di(q,12,f,g,0)|0;q=c[e+28>>2]|0;Ra=r;return q|0}c[f>>2]=g|33554432;i=d+44|0;f=(c[i>>2]|0)+1|0;c[i>>2]=f;c[e+48>>2]=f;i=q+108|0;g=c[i>>2]|0;j=q+112|0;if((c[j>>2]|0)>(g|0)){n=g+1|0;c[i>>2]=n;m=c[q+104>>2]|0;a[m+(g*20|0)>>0]=70;b[m+(g*20|0)+2>>1]=0;c[m+(g*20|0)+4>>2]=0;c[m+(g*20|0)+8>>2]=f;c[m+(g*20|0)+12>>2]=0;c[m+(g*20|0)+16>>2]=0;a[m+(g*20|0)+1>>0]=0;f=n}else f=(Di(q,70,0,f,0)|0)+1|0;c[e+44>>2]=f;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;f=c[q+104>>2]|0;a[f+(h*20|0)>>0]=17;f=f+(h*20|0)+1|0;g=f+19|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));n=h;break}else{n=Di(q,17,0,0,0)|0;break}}else n=0;while(0);m=(n|0)!=0;f=c[p+20>>2]|0;c[k>>2]=m?59952:39084;c[k+4>>2]=f;nk(d,1,39063,k);f=(a[e>>0]|0)==-125;if(f)i=c[c[p>>2]>>2]|0;else i=1;s=d+44|0;j=c[s>>2]|0;k=j+1|0;a[o>>0]=0;l=o+4|0;c[l>>2]=k;c[o+16>>2]=0;g=o+8|0;c[g>>2]=0;h=o+12|0;c[h>>2]=0;j=j+i|0;c[s>>2]=j;do if(f){a[o>>0]=10;c[g>>2]=k;c[h>>2]=i;f=q+108|0;g=c[f>>2]|0;if((c[q+112>>2]|0)>(g|0)){c[f>>2]=g+1;s=c[q+104>>2]|0;a[s+(g*20|0)>>0]=73;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=0;c[s+(g*20|0)+8>>2]=k;c[s+(g*20|0)+12>>2]=j;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0;break}else{Di(q,73,0,k,j)|0;break}}else{a[o>>0]=3;g=q+108|0;f=c[g>>2]|0;if((c[q+112>>2]|0)>(f|0)){c[g>>2]=f+1;s=c[q+104>>2]|0;a[s+(f*20|0)>>0]=70;b[s+(f*20|0)+2>>1]=0;c[s+(f*20|0)+4>>2]=0;c[s+(f*20|0)+8>>2]=k;c[s+(f*20|0)+12>>2]=0;c[s+(f*20|0)+16>>2]=0;a[s+(f*20|0)+1>>0]=0;break}else{Di(q,70,0,k,0)|0;break}}while(0);i=oj(c[d>>2]|0,147,17144,0)|0;h=p+60|0;f=c[h>>2]|0;if(!f){s=ej(d,141,i,0)|0;c[h>>2]=s}else{f=f+12|0;g=c[f>>2]|0;if(g){ni(c[d>>2]|0,g);f=(c[h>>2]|0)+12|0}c[f>>2]=i}c[p+12>>2]=0;if(kj(d,p,o)|0){s=0;Ra=r;return s|0}i=c[l>>2]|0;c[e+28>>2]=i;if(!m){s=i;Ra=r;return s|0}h=q+108|0;g=c[h>>2]|0;if(!(a[(c[q>>2]|0)+81>>0]|0))f=(c[q+104>>2]|0)+(((n|0)<0?g+-1|0:n)*20|0)|0;else f=59308;c[f+8>>2]=g;f=c[e+48>>2]|0;if((c[q+112>>2]|0)>(g|0)){c[h>>2]=g+1;s=c[q+104>>2]|0;a[s+(g*20|0)>>0]=66;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=f;c[s+(g*20|0)+8>>2]=0;c[s+(g*20|0)+12>>2]=0;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0}else Di(q,66,f,0,0)|0;f=c[e+44>>2]|0;g=c[h>>2]|0;if(!(a[(c[q>>2]|0)+81>>0]|0))f=(c[q+104>>2]|0)+((((f|0)<1?g:f)+-1|0)*20|0)|0;else f=59308;c[f+4>>2]=g+-1;s=i;Ra=r;return s|0}function Rj(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+48|0;G=U+12|0;E=U+8|0;m=U+4|0;D=U;c[E>>2]=0;c[D>>2]=0;B=f+12|0;N=c[B>>2]|0;if(ok(d,f)|0){Ra=U;return}T=pk(d,f)|0;j=c[B>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;J=7;break}case -125:{i=c[j+20>>2]|0;J=7;break}default:K=1}if((J|0)==7)K=c[c[i>>2]>>2]|0;k=c[d>>2]|0;l=(K*5|0)+1|0;a:do if(!k){Q=Sv(l|0,0,-1,-1)|0;P=L()|0;if(!(P>>>0>0|(P|0)==0&Q>>>0>2147483390)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;J=32;break}i=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){Q=c[14978]|0;P=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&P>>>0<=Q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;J=33}else J=33}else Q=0}else Q=0}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){Q=0;break}}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<l>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];J=k+284|0;c[J>>2]=(c[J>>2]|0)+1;J=32;break a}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];J=k+284|0;c[J>>2]=(c[J>>2]|0)+1;J=32;break a}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(k,l,0)|0;J=32}while(0);if((J|0)==32)if(!i)Q=0;else J=33;if((J|0)==33){gw(i|0,0,l|0)|0;Q=i}i=c[d>>2]|0;if(!(a[i+81>>0]|0)){w=d+8|0;P=c[w>>2]|0;C=(g|0)==(h|0);z=qk(d,f,3,C?0:E,Q,D)|0;j=a[N>>0]|0;if(j<<24>>24==-88)i=a[N+38>>0]|0;else i=j;switch(i<<24>>24){case -87:{i=N+20|0;J=40;break}case -125:{i=c[N+20>>2]|0;J=40;break}default:J=41}do if((J|0)==40){v=c[c[i>>2]>>2]|0;if((v|0)!=1){c[m>>2]=0;if(j<<24>>24==-125){O=Qj(d,N)|0;break}O=d+44|0;M=c[O>>2]|0;n=M+1|0;c[O>>2]=M+v;if((v|0)>0){o=N+20|0;p=d+23|0;q=G+20|0;r=G+4|0;s=G+8|0;t=G+24|0;m=0;do{i=c[(c[o>>2]|0)+4+(m*20|0)>>2]|0;u=m+n|0;do if(!(a[p>>0]|0))if(!i){y=Jj(d,0,u)|0;J=58}else J=52;else{a[q>>0]=2;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(i){_j(G,i)|0;if(!(a[q>>0]|0)){J=52;break}}Nj(d,i,u)|0}while(0);do if((J|0)==52){J=0;if((a[i>>0]|0)!=-88){y=Jj(d,i,u)|0;J=58;break}l=c[w>>2]|0;i=c[i+28>>2]|0;j=l+108|0;k=c[j>>2]|0;if((c[l+112>>2]|0)>(k|0)){c[j>>2]=k+1;O=c[l+104>>2]|0;a[O+(k*20|0)>>0]=78;b[O+(k*20|0)+2>>1]=0;c[O+(k*20|0)+4>>2]=i;c[O+(k*20|0)+8>>2]=u;c[O+(k*20|0)+12>>2]=0;c[O+(k*20|0)+16>>2]=0;a[O+(k*20|0)+1>>0]=0;break}else{Di(l,78,i,u,0)|0;break}}while(0);do if(((J|0)==58?(J=0,(y|0)!=(u|0)):0)?(x=c[w>>2]|0,x|0):0){i=x+108|0;j=c[i>>2]|0;if((c[x+112>>2]|0)>(j|0)){c[i>>2]=j+1;O=c[x+104>>2]|0;a[O+(j*20|0)>>0]=79;b[O+(j*20|0)+2>>1]=0;c[O+(j*20|0)+4>>2]=y;c[O+(j*20|0)+8>>2]=u;c[O+(j*20|0)+12>>2]=0;c[O+(j*20|0)+16>>2]=0;a[O+(j*20|0)+1>>0]=0;break}else{Di(x,79,y,u,0)|0;break}}while(0);m=m+1|0}while((m|0)!=(v|0));O=n}else O=n}else J=41}while(0);if((J|0)==41)O=Lj(d,N,m)|0;r=(K|0)>0;b:do if(r){i=0;do{if((c[Q+(i<<2)>>2]|0)!=(i|0))break b;i=i+1|0}while((i|0)<(K|0))}else i=0;while(0);if((i|0)!=(K|0)){do if((K|0)==1){i=d+19|0;j=a[i>>0]|0;if(!(j<<24>>24)){M=d+44|0;j=(c[M>>2]|0)+1|0;c[M>>2]=j;break}else{j=j+-1<<24>>24;a[i>>0]=j;j=c[d+148+((j&255)<<2)>>2]|0;break}}else{i=d+32|0;j=c[i>>2]|0;k=d+28|0;l=c[k>>2]|0;if((l|0)<(K|0)){M=d+44|0;j=c[M>>2]|0;c[M>>2]=j+K;j=j+1|0;break}else{c[i>>2]=j+K;c[k>>2]=l-K;break}}while(0);if(r){k=P+108|0;l=P+112|0;m=P+104|0;i=0;do{n=i+O|0;o=(c[Q+(i<<2)>>2]|0)+j|0;p=c[k>>2]|0;if((c[l>>2]|0)>(p|0)){c[k>>2]=p+1;M=c[m>>2]|0;a[M+(p*20|0)>>0]=78;b[M+(p*20|0)+2>>1]=0;c[M+(p*20|0)+4>>2]=n;c[M+(p*20|0)+8>>2]=o;c[M+(p*20|0)+12>>2]=0;c[M+(p*20|0)+16>>2]=0;a[M+(p*20|0)+1>>0]=0}else Di(P,78,n,o,0)|0;i=i+1|0}while((i|0)!=(K|0));M=j}else M=j}else M=O;c:do if((z|0)==5){v=c[f+20>>2]|0;s=Yi(d,c[B>>2]|0)|0;u=d+56|0;x=c[u>>2]|0;t=x+-1|0;c[u>>2]=t;u=(h|0)!=(g|0);do if(u){i=d+19|0;j=a[i>>0]|0;if(!(j<<24>>24)){N=d+44|0;i=(c[N>>2]|0)+1|0;c[N>>2]=i}else{N=j+-1<<24>>24;a[i>>0]=N;i=c[d+148+((N&255)<<2)>>2]|0}j=P+108|0;k=c[j>>2]|0;if((c[P+112>>2]|0)>(k|0)){c[j>>2]=k+1;w=c[P+104>>2]|0;a[w+(k*20|0)>>0]=96;b[w+(k*20|0)+2>>1]=0;c[w+(k*20|0)+4>>2]=M;c[w+(k*20|0)+8>>2]=M;c[w+(k*20|0)+12>>2]=i;c[w+(k*20|0)+16>>2]=0;a[w+(k*20|0)+1>>0]=0;w=i;break}else{Di(P,96,M,M,i)|0;w=i;break}}else w=0;while(0);if((c[v>>2]|0)>0){m=(w|0)==0;n=P+108|0;o=P+112|0;p=P+104|0;q=d+19|0;r=(s|0)==0;l=0;do{i=v+4+(l*20|0)|0;k=Lj(d,c[i>>2]|0,G)|0;d:do if(!m){i=c[i>>2]|0;j=a[i>>0]|0;if((j+91&255)<2)do{i=c[i+12>>2]|0;j=a[i>>0]|0}while((j+91&255)<2);if(j<<24>>24==-88)j=a[i+38>>0]|0;e:do switch(j<<24>>24){case -110:case -111:case 110:case -109:break d;case -94:{if(!(c[i+4>>2]&1048576)){j=c[i+44>>2]|0;if(!j)break e;i=b[i+32>>1]|0;if(i<<16>>16<=-1)break d;if(a[(c[j+4>>2]|0)+(i<<16>>16<<4)+12>>0]|0)break d}break}default:{}}while(0);i=c[n>>2]|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=96;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=w;c[N+(i*20|0)+8>>2]=k;c[N+(i*20|0)+12>>2]=w;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0;break}else{Di(P,96,w,k,w)|0;break}}while(0);i=c[n>>2]|0;j=(c[o>>2]|0)>(i|0);if(u|(l|0)<((c[v>>2]|0)+-1|0)){if(j){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=53;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=M;c[N+(i*20|0)+8>>2]=t;c[N+(i*20|0)+12>>2]=k;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else i=Di(P,53,M,t,k)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[p>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(P,j+(i*20|0)|0,s,-2);break}if(r)break;c[j+(i*20|0)+16>>2]=s;a[k>>0]=-2}while(0);i=c[n>>2]|0;if((i|0)>0)b[(c[p>>2]|0)+((i+-1|0)*20|0)+2>>1]=a[T>>0]|0}else{if(j){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=52;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=M;c[N+(i*20|0)+8>>2]=g;c[N+(i*20|0)+12>>2]=k;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else i=Di(P,52,M,g,k)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[p>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(P,j+(i*20|0)|0,s,-2);break}if(r)break;c[j+(i*20|0)+16>>2]=s;a[k>>0]=-2}while(0);i=c[n>>2]|0;if((i|0)>0)b[(c[p>>2]|0)+((i+-1|0)*20|0)+2>>1]=(a[T>>0]|16)<<24>>24}i=c[G>>2]|0;if(i|0?(F=a[q>>0]|0,(F&255)<8):0){a[q>>0]=F+1<<24>>24;c[d+148+((F&255)<<2)>>2]=i}l=l+1|0}while((l|0)<(c[v>>2]|0))}l=(w|0)==0;do if(!l){j=P+108|0;i=c[j>>2]|0;k=P+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;N=c[P+104>>2]|0;a[N+(i*20|0)>>0]=50;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=w;c[N+(i*20|0)+8>>2]=h;c[N+(i*20|0)+12>>2]=0;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else Di(P,50,w,h,0)|0;i=c[j>>2]|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;h=c[P+104>>2]|0;a[h+(i*20|0)>>0]=11;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=0;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=0;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);j=c[P+12>>2]|0;i=0-x|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,P,i);else c[(c[j+64>>2]|0)+(i<<2)>>2]=c[P+108>>2];if(!l?(H=d+19|0,I=a[H>>0]|0,(I&255)<8):0){a[H>>0]=I+1<<24>>24;c[d+148+((I&255)<<2)>>2]=w}}else{if(C){l=g;q=0}else{l=d+56|0;q=(c[l>>2]|0)+-1|0;c[l>>2]=q;l=q}f:do if(r){n=P+108|0;o=P+112|0;p=P+104|0;m=0;while(1){i=c[B>>2]|0;k=a[i>>0]|0;if(k<<24>>24==-88)j=a[i+38>>0]|0;else j=k;switch(j<<24>>24){case -87:{j=i+20|0;J=158;break}case -125:{j=c[i+20>>2]|0;J=158;break}default:{}}do if((J|0)==158){J=0;if((c[c[j>>2]>>2]|0)>=2){if(k<<24>>24!=-125?(a[i+38>>0]|0)!=-125:0){i=c[(c[i+20>>2]|0)+4+(m*20|0)>>2]|0;break}i=c[(c[c[i+20>>2]>>2]|0)+4+(m*20|0)>>2]|0}}while(0);j=a[i>>0]|0;if((j+91&255)<2)do{i=c[i+12>>2]|0;j=a[i>>0]|0}while((j+91&255)<2);if(j<<24>>24==-88)j=a[i+38>>0]|0;g:do switch(j<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if((c[i+4>>2]&1048576|0)==0?(A=c[i+44>>2]|0,(A|0)!=0):0){i=b[i+32>>1]|0;if(i<<16>>16<=-1)break g;if(!(a[(c[A+4>>2]|0)+(i<<16>>16<<4)+12>>0]|0))J=173}else J=173;break}default:J=173}while(0);do if((J|0)==173){J=0;i=m+M|0;j=c[n>>2]|0;if((c[o>>2]|0)>(j|0)){c[n>>2]=j+1;I=c[p>>2]|0;a[I+(j*20|0)>>0]=50;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=i;c[I+(j*20|0)+8>>2]=l;c[I+(j*20|0)+12>>2]=0;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0;break}else{Di(P,50,i,l,0)|0;break}}while(0);m=m+1|0;if((m|0)==(K|0))break f}}while(0);do if((z|0)==1){l=c[D>>2]|0;j=P+108|0;i=c[j>>2]|0;k=P+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=30;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=l;c[I+(i*20|0)+8>>2]=g;c[I+(i*20|0)+12>>2]=M;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else Di(P,30,l,g,M)|0;i=c[j>>2]|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;j=c[P+104>>2]|0;a[j+(i*20|0)>>0]=11;j=j+(i*20|0)+1|0;k=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));z=l;break}else{i=Di(P,11,0,0,0)|0;z=l;break}}else{n=P+108|0;i=c[n>>2]|0;m=P+112|0;if((c[m>>2]|0)>(i|0)){c[n>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=91;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=M;c[I+(i*20|0)+8>>2]=K;c[I+(i*20|0)+12>>2]=0;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else i=Di(P,91,M,K,0)|0;j=c[P>>2]|0;h:do if(a[j+81>>0]|0){if((K|0)!=-12)kg(j,K,T)}else{if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[P+104>>2]|0;k=j+(i*20|0)|0;do if((K|0)<=-1){l=j+(i*20|0)+1|0;if(a[l>>0]|0)break;if((K|0)==-3){c[j+(i*20|0)+16>>2]=T;a[l>>0]=-3;break h}if(!T)break h;c[j+(i*20|0)+16>>2]=T;a[l>>0]=K;if((K|0)!=-12)break h;I=T+12|0;c[I>>2]=(c[I>>2]|0)+1;break h}while(0);Ei(P,k,T,K)}while(0);k=c[D>>2]|0;i=c[n>>2]|0;j=(c[m>>2]|0)>(i|0);if(C){if(j){c[n>>2]=i+1;h=c[P+104>>2]|0;a[h+(i*20|0)>>0]=28;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=k;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=M;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0}else i=Di(P,28,k,g,M)|0;if(a[(c[P>>2]|0)+81>>0]|0)break c;g=c[P+104>>2]|0;a[g+(i*20|0)+1>>0]=-3;c[g+(i*20|0)+16>>2]=K;break c}else{if(j){c[n>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=29;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=k;c[I+(i*20|0)+8>>2]=0;c[I+(i*20|0)+12>>2]=M;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else i=Di(P,29,k,0,M)|0;if(a[(c[P>>2]|0)+81>>0]|0){z=k;break}z=c[P+104>>2]|0;a[z+(i*20|0)+1>>0]=-3;c[z+(i*20|0)+16>>2]=K;z=k;break}}while(0);j=c[E>>2]|0;do if((K|0)==1&(j|0)!=0){k=P+108|0;l=c[k>>2]|0;if((c[P+112>>2]|0)>(l|0)){c[k>>2]=l+1;I=c[P+104>>2]|0;a[I+(l*20|0)>>0]=51;b[I+(l*20|0)+2>>1]=0;c[I+(l*20|0)+4>>2]=j;c[I+(l*20|0)+8>>2]=g;c[I+(l*20|0)+12>>2]=0;c[I+(l*20|0)+16>>2]=0;a[I+(l*20|0)+1>>0]=0;break}else{Di(P,51,j,g,0)|0;break}}while(0);do if(C){j=P+108|0;k=c[j>>2]|0;if((c[P+112>>2]|0)>(k|0)){c[j>>2]=k+1;I=c[P+104>>2]|0;a[I+(k*20|0)>>0]=11;b[I+(k*20|0)+2>>1]=0;c[I+(k*20|0)+4>>2]=0;c[I+(k*20|0)+8>>2]=g;c[I+(k*20|0)+12>>2]=0;c[I+(k*20|0)+16>>2]=0;a[I+(k*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);do if(q|0){k=c[P+12>>2]|0;j=~q;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,P,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[P+108>>2];break}}while(0);y=P+108|0;j=c[y>>2]|0;f=P+112|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;x=c[P+104>>2]|0;a[x+(j*20|0)>>0]=36;b[x+(j*20|0)+2>>1]=0;c[x+(j*20|0)+4>>2]=z;c[x+(j*20|0)+8>>2]=g;c[x+(j*20|0)+12>>2]=0;c[x+(j*20|0)+16>>2]=0;a[x+(j*20|0)+1>>0]=0;x=j}else x=Di(P,36,z,g,0)|0;v=(K|0)>1;if(v){I=d+56|0;w=(c[I>>2]|0)+-1|0;c[I>>2]=w}else w=g;i:do if(r){p=d+19|0;q=d+44|0;r=N+38|0;s=N+20|0;t=N+20|0;u=P+104|0;o=0;while(1){j=a[p>>0]|0;if(!(j<<24>>24)){n=(c[q>>2]|0)+1|0;c[q>>2]=n}else{n=j+-1<<24>>24;a[p>>0]=n;n=c[d+148+((n&255)<<2)>>2]|0}k=a[N>>0]|0;if(k<<24>>24==-88)j=a[r>>0]|0;else j=k;switch(j<<24>>24){case -87:{j=s;J=237;break}case -125:{j=c[t>>2]|0;J=237;break}default:j=N}j:do if((J|0)==237){J=0;if((c[c[j>>2]>>2]|0)<2){j=N;break}do if(k<<24>>24!=-125){if((a[r>>0]|0)==-125)break;j=c[(c[s>>2]|0)+4+(o*20|0)>>2]|0;break j}while(0);j=c[(c[c[t>>2]>>2]|0)+4+(o*20|0)>>2]|0}while(0);m=Yi(d,j)|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;I=c[u>>2]|0;a[I+(j*20|0)>>0]=90;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=z;c[I+(j*20|0)+8>>2]=o;c[I+(j*20|0)+12>>2]=n;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else Di(P,90,z,o,n)|0;k=o+M|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;I=c[u>>2]|0;a[I+(j*20|0)>>0]=52;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=k;c[I+(j*20|0)+8>>2]=w;c[I+(j*20|0)+12>>2]=n;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else j=Di(P,52,k,w,n)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[y>>2]|0)+-1|0;k=c[u>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(P,k+(j*20|0)|0,m,-2);break}if(!m)break;c[k+(j*20|0)+16>>2]=m;a[l>>0]=-2}while(0);do if(n|0){j=a[p>>0]|0;if((j&255)>=8)break;a[p>>0]=j+1<<24>>24;c[d+148+((j&255)<<2)>>2]=n}while(0);o=o+1|0;if((o|0)==(K|0))break i}}while(0);j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;N=c[P+104>>2]|0;a[N+(j*20|0)>>0]=11;b[N+(j*20|0)+2>>1]=0;c[N+(j*20|0)+4>>2]=0;c[N+(j*20|0)+8>>2]=h;c[N+(j*20|0)+12>>2]=0;c[N+(j*20|0)+16>>2]=0;a[N+(j*20|0)+1>>0]=0}else Di(P,11,0,h,0)|0;do if(v){k=c[P+12>>2]|0;j=~w;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,P,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[y>>2];j=x+1|0;k=c[y>>2]|0;if((c[f>>2]|0)>(k|0)){c[y>>2]=k+1;h=c[P+104>>2]|0;a[h+(k*20|0)>>0]=5;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=z;c[h+(k*20|0)+8>>2]=j;c[h+(k*20|0)+12>>2]=0;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0}else Di(P,5,z,j,0)|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;h=c[P+104>>2]|0;a[h+(j*20|0)>>0]=11;b[h+(j*20|0)+2>>1]=0;c[h+(j*20|0)+4>>2]=0;c[h+(j*20|0)+8>>2]=g;c[h+(j*20|0)+12>>2]=0;c[h+(j*20|0)+16>>2]=0;a[h+(j*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);j=c[y>>2]|0;if(!(a[(c[P>>2]|0)+81>>0]|0))i=(c[P+104>>2]|0)+(((i|0)<0?j+-1|0:i)*20|0)|0;else i=59308;c[i+8>>2]=j}while(0);if(!((M|0)==(O|0)|(M|0)==0)?(R=d+19|0,S=a[R>>0]|0,(S&255)<8):0){a[R>>0]=S+1<<24>>24;c[d+148+((S&255)<<2)>>2]=M}i=c[d>>2]|0}do if(Q|0){if(i|0){if(c[i+480>>2]|0){Xd(i,Q);break}S=Q;if((c[i+304>>2]|0)>>>0<=S>>>0?(c[i+308>>2]|0)>>>0>S>>>0:0){S=i+300|0;c[Q>>2]=c[S>>2];c[S>>2]=Q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{S=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);i=c[d>>2]|0;if(!T){Ra=U;return}if(i|0){if(c[i+480>>2]|0){Xd(i,T);Ra=U;return}d=T;if((c[i+304>>2]|0)>>>0<=d>>>0?(c[i+308>>2]|0)>>>0>d>>>0:0){d=i+300|0;c[T>>2]=c[d>>2];c[d>>2]=T;Ra=U;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](T);Ra=U;return}else{d=Wa[c[29352>>2]&127](T)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](T);Ra=U;return}}function Sj(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+240|0;y=E+212|0;C=E+160|0;j=E+108|0;k=E+56|0;B=E+4|0;D=E;c[D>>2]=0;l=j;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=k;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=C;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=B;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));w=c[e+4>>2]|0;ew(B|0,e|0,((w&16384|0)==0?((w&8192|0)==0?52:28):12)|0)|0;a[C>>0]=44;c[C+12>>2]=j;c[C+16>>2]=k;a[j>>0]=57;c[j+12>>2]=B;c[j+16>>2]=c[f+4>>2];a[k>>0]=55;c[k+12>>2]=B;c[k+16>>2]=c[f+24>>2];f=a[B>>0]|0;w=B+38|0;switch((f<<24>>24==-88?a[w>>0]|0:f)<<24>>24){case -87:{j=c[B+20>>2]|0;e=j;x=4;break}case -125:{j=c[B+20>>2]|0;e=c[j>>2]|0;x=4;break}default:x=5}a:do if((x|0)==4){v=c[e>>2]|0;if((v|0)!=1){c[D>>2]=0;if(f<<24>>24==-125){e=Qj(d,B)|0;break}u=d+44|0;t=c[u>>2]|0;e=t+1|0;c[u>>2]=t+v;if((v|0)>0){o=B+20|0;p=d+23|0;q=y+20|0;r=y+4|0;s=y+8|0;t=y+24|0;u=d+8|0;f=0;while(1){j=c[j+4+(f*20|0)>>2]|0;n=f+e|0;do if(!(a[p>>0]|0))if(!j){A=Jj(d,0,n)|0;x=22}else x=16;else{a[q>>0]=2;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(j){_j(y,j)|0;if(!(a[q>>0]|0)){x=16;break}}Nj(d,j,n)|0}while(0);do if((x|0)==16){x=0;if((a[j>>0]|0)!=-88){A=Jj(d,j,n)|0;x=22;break}m=c[u>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[m+104>>2]|0;a[m+(l*20|0)>>0]=78;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=j;c[m+(l*20|0)+8>>2]=n;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,n,0)|0;break}}while(0);do if(((x|0)==22?(x=0,(A|0)!=(n|0)):0)?(z=c[u>>2]|0,z|0):0){j=z+108|0;k=c[j>>2]|0;if((c[z+112>>2]|0)>(k|0)){c[j>>2]=k+1;m=c[z+104>>2]|0;a[m+(k*20|0)>>0]=79;b[m+(k*20|0)+2>>1]=0;c[m+(k*20|0)+4>>2]=A;c[m+(k*20|0)+8>>2]=n;c[m+(k*20|0)+12>>2]=0;c[m+(k*20|0)+16>>2]=0;a[m+(k*20|0)+1>>0]=0;break}else{Di(z,79,A,n,0)|0;break}}while(0);f=f+1|0;if((f|0)==(v|0))break a;j=c[o>>2]|0}}}else x=5}while(0);if((x|0)==5)e=Lj(d,B,D)|0;a[w>>0]=a[B>>0]|0;a[B>>0]=-88;c[B+28>>2]=e;e=B+4|0;f=c[e>>2]&-4097;c[e>>2]=f;if(!h){c[e>>2]=f|1;Jj(d,C,g)|0}else db[h&127](d,C,g,i);e=c[D>>2]|0;if(!e){Ra=E;return}f=d+19|0;j=a[f>>0]|0;if((j&255)>=8){Ra=E;return}a[f>>0]=j+1<<24>>24;c[d+148+((j&255)<<2)>>2]=e;Ra=E;return}function Tj(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;m=t+8|0;p=t+4|0;s=t;o=c[d+8>>2]|0;c[p>>2]=0;c[s>>2]=0;if((e|0)==0|(o|0)==0){Ra=t;return}h=a[e>>0]|0;j=h^1;k=j&255;a:do switch(h<<24>>24){case 44:{Tj(d,c[e+12>>2]|0,f,g);Tj(d,c[e+16>>2]|0,f,g);break}case 43:{l=d+56|0;m=c[l>>2]|0;h=m+-1|0;c[l>>2]=h;tk(d,c[e+12>>2]|0,h,g^16);Tj(d,c[e+16>>2]|0,f,g);h=c[o+12>>2]|0;g=0-m|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}case 19:{tk(d,c[e+12>>2]|0,f,g);break}case -89:{o=(a[e+38>>0]|0)==-96;h=c[e+12>>2]|0;g=o?0:16;if(o^(a[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>0]|0)==0){Tj(d,h,f,g);break a}else{tk(d,h,f,g);break a}}case -96:case 45:{g=128;i=h<<24>>24==45?52:53;n=12;break}case 53:case 52:case 57:case 54:case 55:case 56:{i=k;n=12;break}case 51:case 50:{h=Lj(d,c[e+12>>2]|0,p)|0;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=j;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break a}else{Di(o,k,h,f,0)|0;break a}}case 48:{Sj(d,c[e+12>>2]|0,c[e+20>>2]|0,f,66,g);break}case 49:{if(g|0){Rj(d,e,f,f);break a}m=d+56|0;g=c[m>>2]|0;h=g+-1|0;c[m>>2]=h;Rj(d,e,f,h);h=c[o+12>>2]|0;g=0-g|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}default:{c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)==0&1;else h=0;n=36}}while(0);do if((n|0)==12){j=e+12|0;k=c[j>>2]|0;h=a[k>>0]|0;if(h<<24>>24==-88)h=a[k+38>>0]|0;switch(h<<24>>24){case -87:{l=k+20|0;n=17;break}case -125:{l=c[k+20>>2]|0;n=17;break}default:{}}if((n|0)==17?(c[c[l>>2]>>2]|0)>=2:0){c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)==0&1;else h=0;n=36;break}m=Lj(d,k,p)|0;e=e+16|0;o=Lj(d,c[e>>2]|0,s)|0;Mj(d,c[j>>2]|0,c[e>>2]|0,i,m,o,f,g)}while(0);do if((n|0)==36){if(h|0){h=o+108|0;g=c[h>>2]|0;if((c[o+112>>2]|0)>(g|0)){c[h>>2]=g+1;o=c[o+104>>2]|0;a[o+(g*20|0)>>0]=11;b[o+(g*20|0)+2>>1]=0;c[o+(g*20|0)+4>>2]=0;c[o+(g*20|0)+8>>2]=f;c[o+(g*20|0)+12>>2]=0;c[o+(g*20|0)+16>>2]=0;a[o+(g*20|0)+1>>0]=0;break}else{Di(o,11,0,f,0)|0;break}}c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0){if(c[m>>2]|0)break}else n=42;j=Lj(d,e,p)|0;h=(g|0)!=0&1;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=20;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=j;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break}else{Di(o,20,j,f,h)|0;break}}while(0);h=c[p>>2]|0;if(h|0?(q=d+19|0,r=a[q>>0]|0,(r&255)<8):0){a[q>>0]=r+1<<24>>24;c[d+148+((r&255)<<2)>>2]=h}h=c[s>>2]|0;if(!h){Ra=t;return}g=d+19|0;i=a[g>>0]|0;if((i&255)>=8){Ra=t;return}a[g>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=h;Ra=t;return}function Uj(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=d+8|0;k=c[p>>2]|0;a:do if(!k){o=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))n=15;else{p=0;break a}else{do if((e[o+276>>1]|0)>=224){k=o+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}k=o+296|0;l=c[k>>2]|0;if(!l){k=o+292|0;break}else{c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;n=15}while(0);if((n|0)==15)m=_d(o,224,0)|0;if(!m)p=0;else{k=m+104|0;l=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c[m>>2]=o;k=o+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=d;c[p>>2]=m;Di(m,61,0,1,0)|0;p=m}}else p=k;while(0);if((g|0)==2){o=c[d+116>>2]|0;a[((o|0)==0?d:o)+21>>0]=1}n=i<<24>>24;o=p+108|0;k=c[o>>2]|0;if((c[p+112>>2]|0)>(k|0)){c[o>>2]=k+1;d=c[p+104>>2]|0;a[d+(k*20|0)>>0]=69;b[d+(k*20|0)+2>>1]=0;c[d+(k*20|0)+4>>2]=f;c[d+(k*20|0)+8>>2]=g;c[d+(k*20|0)+12>>2]=0;c[d+(k*20|0)+16>>2]=0;a[d+(k*20|0)+1>>0]=0}else k=Di(p,69,f,g,0)|0;l=c[p>>2]|0;do if(a[l+81>>0]|0){if(i<<24>>24!=-12)kg(l,n,h)}else{if((k|0)<0)k=(c[o>>2]|0)+-1|0;l=c[p+104>>2]|0;m=l+(k*20|0)|0;if(i<<24>>24<=-1?(q=l+(k*20|0)+1|0,(a[q>>0]|0)==0):0){if(i<<24>>24==-3){c[l+(k*20|0)+16>>2]=h;a[q>>0]=-3;break}if(!h)break;c[l+(k*20|0)+16>>2]=h;a[q>>0]=i;if(i<<24>>24!=-12)break;q=h+12|0;c[q>>2]=(c[q>>2]|0)+1;break}Ei(p,m,h,n)}while(0);k=c[o>>2]|0;if((k|0)<=0)return;b[(c[p+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=j&255;return}function Vj(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r;if(!f){j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;e=c[e+104>>2]|0;a[e+(k*20|0)>>0]=90;b[e+(k*20|0)+2>>1]=0;c[e+(k*20|0)+4>>2]=g;c[e+(k*20|0)+8>>2]=h;c[e+(k*20|0)+12>>2]=i;c[e+(k*20|0)+16>>2]=0;a[e+(k*20|0)+1>>0]=0;Ra=r;return}else{Di(e,90,g,h,i)|0;Ra=r;return}}do if((h|0)>=0?(b[f+40>>1]|0)!=(h|0):0){m=(c[f+56>>2]|0)!=0;n=m?164:90;if(m|(c[f+36>>2]&32|0)==0)j=h;else{j=c[f+8>>2]|0;a:do if(!j)j=0;else while(1){m=j+55|0;if(((d[m>>0]|d[m+1>>0]<<8)&3)==2)break a;j=c[j+20>>2]|0;if(!j){j=0;break}}while(0);m=h&65535;k=b[j+52>>1]|0;b:do if(!(k<<16>>16))j=-1;else{l=c[j+4>>2]|0;k=k&65535;j=0;while(1){if((b[l+(j<<1)>>1]|0)==m<<16>>16)break b;j=j+1|0;if(j>>>0>=k>>>0){j=-1;break}}}while(0);j=j<<16>>16}k=e+108|0;l=c[k>>2]|0;if((c[e+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[e+104>>2]|0;a[m+(l*20|0)>>0]=n;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=g;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=i;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;break}else{Di(e,n,g,j,i)|0;break}}else o=7;while(0);do if((o|0)==7){j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;o=c[e+104>>2]|0;a[o+(k*20|0)>>0]=-128;b[o+(k*20|0)+2>>1]=0;c[o+(k*20|0)+4>>2]=g;c[o+(k*20|0)+8>>2]=i;c[o+(k*20|0)+12>>2]=0;c[o+(k*20|0)+16>>2]=0;a[o+(k*20|0)+1>>0]=0;break}else{Di(e,128,g,i,0)|0;break}}while(0);if((h|0)<=-1){Ra=r;return}if(!(c[f+12>>2]|0)){c[p>>2]=0;m=c[e>>2]|0;j=f+4|0;k=c[j>>2]|0;l=c[k+(h<<4)+4>>2]|0;do if(l|0?(Wj(m,l,a[m+78>>0]|0,a[k+(h<<4)+13>>0]|0,p)|0,q=c[p>>2]|0,q|0):0){k=c[e>>2]|0;if(!(a[k+81>>0]|0)){g=c[e+104>>2]|0;p=(c[e+108>>2]|0)+-1|0;a[g+(p*20|0)+1>>0]=-11;c[g+(p*20|0)+16>>2]=q;break}else{kg(k,-11,q);break}}while(0)}else j=f+4|0;if((a[(c[j>>2]|0)+(h<<4)+13>>0]|0)!=69){Ra=r;return}j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;e=c[e+104>>2]|0;a[e+(k*20|0)>>0]=84;b[e+(k*20|0)+2>>1]=0;c[e+(k*20|0)+4>>2]=i;c[e+(k*20|0)+8>>2]=0;c[e+(k*20|0)+12>>2]=0;c[e+(k*20|0)+16>>2]=0;a[e+(k*20|0)+1>>0]=0;Ra=r;return}else{Di(e,84,i,0,0)|0;Ra=r;return}}function Wj(f,i,j,k,l){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=Ra;Ra=Ra+32|0;u=H+16|0;D=H+8|0;E=H;F=H+24|0;c[F>>2]=0;p=i;a:while(1){i=a[p>>0]|0;switch(i<<24>>24){case -90:case -83:break;default:break a}p=c[p+12>>2]|0}if(i<<24>>24==-88)i=d[p+38>>0]|0;else i=i&255;b:do switch((i&255)<<24>>24){case 36:{i=c[p+8>>2]|0;n=a[i>>0]|0;c:do if(!(n<<24>>24))m=67;else{m=67;o=0;do{o=o<<8|d[208+(n&255)>>0];i=i+1|0;d:do if((o|0)<1685026146){if((o|0)<1667785074){switch(o|0){case 1651273570:break;default:{G=16;break d}}switch(m<<24>>24){case 69:case 67:{m=65;break d}default:{G=15;break d}}}if((o|0)<1668050786)switch(o|0){case 1667785074:{m=66;break d}default:{G=16;break d}}else switch(o|0){case 1668050786:{m=66;break d}default:{G=16;break d}}}else{if((o|0)>=1919246700){if((o|0)>=1952807028)switch(o|0){case 1952807028:{m=66;break d}default:{G=16;break d}}switch(o|0){case 1919246700:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}else{G=15;break}}if((o|0)<1718382433){switch(o|0){case 1685026146:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}}else{switch(o|0){case 1718382433:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}}}while(0);if((G|0)==15)G=0;else if((G|0)==16){G=0;if((o&16777215|0)==6909556){m=68;break c}}n=a[i>>0]|0}while(n<<24>>24!=0)}while(0);s=Wj(f,c[p+12>>2]|0,j,m,l)|0;i=c[l>>2]|0;if(!i){l=s;Ra=H;return l|0}Sg(i,m,1);r=c[l>>2]|0;if(k<<24>>24<=66){if(k<<24>>24!=66){l=s;Ra=H;return l|0}m=r+8|0;i=b[m>>1]|0;l=i&65535;if(!((l&2|0)!=0|(l&12|0)==0)){Hg(r,1,1)|0;i=b[m>>1]|0}b[m>>1]=i&-13;l=s;Ra=H;return l|0}p=r+8|0;n=b[p>>1]|0;i=n&65535;if(i&4|0){l=s;Ra=H;return l|0}if(i&8|0){q=+g[r>>3];i=Mg(q)|0;m=L()|0;l=Sv(i|0,m|0,1,-2147483648)|0;G=L()|0;if(!((G>>>0>0|(G|0)==0&l>>>0>1)&q==+(i>>>0)+4294967296.0*+(m|0))){l=s;Ra=H;return l|0}l=r;c[l>>2]=i;c[l+4>>2]=m;b[p>>1]=n&15904|4;l=s;Ra=H;return l|0}if(!(i&2)){l=s;Ra=H;return l|0}i=a[r+10>>0]|0;m=r+16|0;n=r+12|0;if(Lg(c[m>>2]|0,D,c[n>>2]|0,i)|0){if(Og(c[m>>2]|0,E,c[n>>2]|0,i)|0){q=+g[D>>3];g[r>>3]=q;m=b[p>>1]|0;i=m|8;b[p>>1]=i;n=Mg(q)|0;o=L()|0;l=Sv(n|0,o|0,1,-2147483648)|0;f=L()|0;if((f>>>0>0|(f|0)==0&l>>>0>1)&q==+(n>>>0)+4294967296.0*+(o|0)){i=r;c[i>>2]=n;c[i+4>>2]=o;i=m&15904;G=28}}else{l=E;G=c[l+4>>2]|0;i=r;c[i>>2]=c[l>>2];c[i+4>>2]=G;i=b[p>>1]|0;G=28}if((G|0)==28){i=i|4;b[p>>1]=i}b[p>>1]=i&-3}l=s;Ra=H;return l|0}case -91:{i=c[p+12>>2]|0;m=a[i>>0]|0;switch(m<<24>>24){case -111:case -109:break;default:{G=107;break b}}t=34064;p=i;s=m&255;o=-1;r=-1;G=39;break}default:{t=59952;s=i;o=1;r=0;G=39}}while(0);e:do if((G|0)==39){f:do switch(s|0){case 110:case 145:case 147:{g:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=64;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){C=c[14978]|0;B=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&B>>>0<=C>>>0)&1}m=Wa[c[29340>>2]&127](i)|0;if(m){i=Wa[c[29352>>2]&127](m)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;C=m}else C=m}else G=65}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=65;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=64;break g}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=64;break g}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=64}while(0);if((G|0)==64)if(!i)G=65;else C=i;if((G|0)==65){c[F>>2]=0;n=0;m=0;break f}m=C;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));B=C+8|0;b[B>>1]=1;c[C+32>>2]=f;c[F>>2]=C;i=C;if(!(c[p+4>>2]&1024)){m=c[p+8>>2]|0;c[u>>2]=t;c[u+4>>2]=m;m=dd(f,38967,u)|0;if(!m){n=C;m=C;break f}yc(C,m,-1,1,116)|0}else{u=c[p+8>>2]|0;u=Yv(o|0,r|0,u|0,((u|0)<0)<<31>>31|0)|0;F=L()|0;f=C;c[f>>2]=u;c[f+4>>2]=F;b[B>>1]=4}do if(k<<24>>24==65&(s|2|0)==147){o=b[B>>1]|0;m=o&65535;if(!(m&4)){if(m&8|0){q=+g[C>>3];m=Mg(q)|0;n=L()|0;f=Sv(m|0,n|0,1,-2147483648)|0;F=L()|0;if(!((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0)))break;f=C;c[f>>2]=m;c[f+4>>2]=n;b[B>>1]=o&15904|4;break}if(m&2|0?(v=a[C+10>>0]|0,w=C+16|0,x=C+12|0,Lg(c[w>>2]|0,D,c[x>>2]|0,v)|0):0){if(Og(c[w>>2]|0,E,c[x>>2]|0,v)|0){q=+g[D>>3];g[C>>3]=q;n=b[B>>1]|0;m=n|8;b[B>>1]=m;o=Mg(q)|0;p=L()|0;f=Sv(o|0,p|0,1,-2147483648)|0;F=L()|0;if((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(o>>>0)+4294967296.0*+(p|0)){m=C;c[m>>2]=o;c[m+4>>2]=p;m=n&15904;G=79}}else{f=E;G=c[f+4>>2]|0;m=C;c[m>>2]=c[f>>2];c[m+4>>2]=G;m=b[B>>1]|0;G=79}if((G|0)==79){m=m|4;b[B>>1]=m}b[B>>1]=m&-3}}}else{if(k<<24>>24<=66){if(k<<24>>24!=66)break;m=b[B>>1]|0;f=m&65535;if(!((f&2|0)!=0|(f&12|0)==0)){Hg(C,1,1)|0;m=b[B>>1]|0}b[B>>1]=m&-13;break}o=b[B>>1]|0;m=o&65535;if(!(m&4)){if(m&8|0){q=+g[C>>3];m=Mg(q)|0;n=L()|0;f=Sv(m|0,n|0,1,-2147483648)|0;F=L()|0;if(!((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0)))break;f=C;c[f>>2]=m;c[f+4>>2]=n;b[B>>1]=o&15904|4;break}if(m&2|0?(y=a[C+10>>0]|0,z=C+16|0,A=C+12|0,Lg(c[z>>2]|0,D,c[A>>2]|0,y)|0):0){if(Og(c[z>>2]|0,E,c[A>>2]|0,y)|0){q=+g[D>>3];g[C>>3]=q;n=b[B>>1]|0;m=n|8;b[B>>1]=m;o=Mg(q)|0;p=L()|0;f=Sv(o|0,p|0,1,-2147483648)|0;F=L()|0;if((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(o>>>0)+4294967296.0*+(p|0)){m=C;c[m>>2]=o;c[m+4>>2]=p;m=n&15904;G=93}}else{f=E;G=c[f+4>>2]|0;m=C;c[m>>2]=c[f>>2];c[m+4>>2]=G;m=b[B>>1]|0;G=93}if((G|0)==93){m=m|4;b[B>>1]=m}b[B>>1]=m&-3}}}while(0);m=b[B>>1]|0;n=m&65535;if(n&12){m=n&65533;b[B>>1]=m}if(j<<24>>24==1|(m&2)==0){m=0;break e}if((a[C+10>>0]|0)==j<<24>>24){m=0;break e}m=Ig(C,j)|0;break e}case 165:{i=c[p+12>>2]|0;G=107;break e}case 114:{h:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=154;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){G=c[14978]|0;j=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&j>>>0<=G>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;G=156}else G=156}else G=155}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=155;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=154;break h}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=154;break h}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=154}while(0);if((G|0)==154)if(!i)G=155;else G=156;if((G|0)==155){c[F>>2]=0;n=0;m=0;break f}else if((G|0)==156){m=i;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));b[i+8>>1]=1;c[i+32>>2]=f;c[F>>2]=i;oh(i);m=0;break e}break}case 146:{i:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=180;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){j=c[14978]|0;E=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;D=L()|0;c[14768]=((D|0)<0|(D|0)==0&E>>>0<=j>>>0)&1}m=Wa[c[29340>>2]&127](i)|0;if(m){i=Wa[c[29352>>2]&127](m)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;v=m}else v=m}else G=181}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=181;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=180;break i}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=180;break i}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=180}while(0);if((G|0)==180)if(!i)G=181;else v=i;if((G|0)==181){c[F>>2]=0;n=0;m=0;break f}m=v;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));b[v+8>>1]=1;c[v+32>>2]=f;c[F>>2]=v;i=v;s=(c[p+8>>2]|0)+2|0;r=(Eu(s)|0)&1073741823;t=r+-1|0;u=(t|0)/2|0;o=u+1|0;p=((o|0)<0)<<31>>31;j:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))G=192;else m=0;else{do if(!(0<p>>>0|(0==(p|0)?(e[f+276>>1]|0)>>>0<o>>>0:0))){n=f+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=193;break j}n=f+296|0;m=c[n>>2]|0;if(!m){m=f+292|0;break}else{c[n>>2]=c[m>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=193;break j}}else m=f+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;G=192}while(0);if((G|0)==192){m=_d(f,o,p)|0;G=193}if((G|0)==193){o=r+-2|0;if(!m)m=0;else{if(r>>>0>2){n=0;do{f=a[s+n>>0]|0;j=a[s+(n|1)>>0]|0;a[m+(n>>>1)>>0]=(0-(j>>>6&1)&9)+j&15|(0-(f>>>6&1)&9)+f<<4;n=n+2|0}while((n|0)<(o|0));n=t>>>1}else n=0;a[m+n>>0]=0}}yc(v,m,u,0,116)|0;m=0;break e}case 159:{k:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=223;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){G=c[14978]|0;j=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&j>>>0<=G>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;G=225}else G=225}else G=224}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=224;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=223;break k}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=223;break k}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=223}while(0);if((G|0)==223)if(!i)G=224;else G=225;if((G|0)==224){c[F>>2]=0;m=0;i=0;break e}else if((G|0)==225){m=i;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));c[i+32>>2]=f;c[F>>2]=i;b[i+8>>1]=4;m=i;c[m>>2]=(a[(c[p+8>>2]|0)+4>>0]|0)==0&1;c[m+4>>2]=0;m=0;break e}break}default:{m=0;i=0;break e}}while(0);i=f+81|0;if((a[i>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;i=f+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[f+236>>2]|0;if(i|0)c[i+12>>2]=7}if(!n){l=7;Ra=H;return l|0}if(!((b[n+8>>1]&9216)==0?!(c[n+24>>2]|0):0))Cg(n);i=c[n+32>>2]|0;if(i|0){if(c[i+480>>2]|0){Xd(i,m);l=7;Ra=H;return l|0}l=n;if((c[i+304>>2]|0)>>>0<=l>>>0?(c[i+308>>2]|0)>>>0>l>>>0:0){l=i+300|0;c[n>>2]=c[l>>2];c[l>>2]=m;l=7;Ra=H;return l|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);l=7;Ra=H;return l|0}else{l=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);l=7;Ra=H;return l|0}}while(0);do if((G|0)==107){f=(Wj(f,i,j,k,F)|0)==0;p=c[F>>2]|0;s=p;if(f&(p|0)!=0){oh(p);r=p+8|0;i=b[r>>1]|0;do if(!(i&8)){n=p;m=c[n>>2]|0;n=c[n+4>>2]|0;if((m|0)==0&(n|0)==-2147483648){g[p>>3]=9223372036854775808.0;i=i&15904|8;b[r>>1]=i;q=9223372036854775808.0;break}else{F=Tv(0,0,m|0,n|0)|0;f=L()|0;C=p;c[C>>2]=F;c[C+4>>2]=f;c[h>>2]=F;c[h+4>>2]=f;q=+g[h>>3];break}}else{q=-+g[p>>3];g[p>>3]=q}while(0);if(k<<24>>24<=66){if(k<<24>>24!=66){m=0;i=s;break}G=i&65535;if(!((G&2|0)!=0|(G&12|0)==0)){Hg(p,j,1)|0;i=b[r>>1]|0}b[r>>1]=i&-13;m=0;i=s;break}m=i&65535;if(!(m&4)){if(m&8|0){m=Mg(q)|0;n=L()|0;G=Sv(m|0,n|0,1,-2147483648)|0;f=L()|0;if(!((f>>>0>0|(f|0)==0&G>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0))){m=0;i=s;break}G=p;c[G>>2]=m;c[G+4>>2]=n;b[r>>1]=i&15904|4;m=0;i=s;break}if(m&2){i=a[p+10>>0]|0;m=p+16|0;n=p+12|0;if(Lg(c[m>>2]|0,D,c[n>>2]|0,i)|0){if(Og(c[m>>2]|0,E,c[n>>2]|0,i)|0){q=+g[D>>3];g[p>>3]=q;m=b[r>>1]|0;i=m|8;b[r>>1]=i;n=Mg(q)|0;o=L()|0;f=Sv(n|0,o|0,1,-2147483648)|0;j=L()|0;if((j>>>0>0|(j|0)==0&f>>>0>1)&q==+(n>>>0)+4294967296.0*+(o|0)){i=p;c[i>>2]=n;c[i+4>>2]=o;i=m&15904;G=122}}else{f=E;G=c[f+4>>2]|0;i=p;c[i>>2]=c[f>>2];c[i+4>>2]=G;i=b[r>>1]|0;G=122}if((G|0)==122){i=i|4;b[r>>1]=i}b[r>>1]=i&-3}m=0;i=s}else{m=0;i=s}}else{m=0;i=s}}else{m=0;i=s}}while(0);c[l>>2]=i;l=m;Ra=H;return l|0}function Xj(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a:while(1){f=c[e+4>>2]|0;if(f&4096)do{if(!(f&262144))e=e+12|0;else e=(c[e+20>>2]|0)+4|0;e=c[e>>2]|0;f=c[e+4>>2]|0}while((f&4096|0)!=0);if(f&512|0){g=0;k=31;break}f=a[e>>0]|0;if(f<<24>>24==-125)e=(c[c[e+20>>2]>>2]|0)+4|0;else{if(f<<24>>24==-88)f=d[e+38>>0]|0;else f=f&255;switch((f&255)<<24>>24){case 36:{k=15;break a}case -94:case -92:{k=26;break a}case -86:break;default:break a}e=(c[c[(c[e+12>>2]|0)+20>>2]>>2]|0)+4+((b[e+32>>1]|0)*20|0)|0}e=c[e>>2]|0}if((k|0)==15){f=c[e+8>>2]|0;g=a[f>>0]|0;if(!(g<<24>>24)){k=67;return k|0}h=67;i=0;while(1){i=i<<8|d[208+(g&255)>>0];f=f+1|0;b:do if((i|0)<1685026146){if((i|0)<1667785074){switch(i|0){case 1651273570:break;default:{k=24;break b}}switch(h<<24>>24){case 69:case 67:{j=65;break b}default:{k=23;break b}}}if((i|0)<1668050786)switch(i|0){case 1667785074:{j=66;break b}default:{k=24;break b}}else switch(i|0){case 1668050786:{j=66;break b}default:{k=24;break b}}}else{if((i|0)>=1919246700){if((i|0)>=1952807028)switch(i|0){case 1952807028:{j=66;break b}default:{k=24;break b}}switch(i|0){case 1919246700:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}else{k=23;break}}if((i|0)<1718382433){switch(i|0){case 1685026146:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}}else{switch(i|0){case 1718382433:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}}j=h}while(0);if((k|0)==23){k=0;j=h}else if((k|0)==24){k=0;if((i&16777215|0)==6909556){g=68;k=31;break}else j=h}g=a[f>>0]|0;if(!(g<<24>>24)){g=j;k=31;break}else h=j}if((k|0)==31)return g|0}else if((k|0)==26){f=c[e+44>>2]|0;if(f|0){e=b[e+32>>1]|0;if(e<<16>>16<=-1){k=68;return k|0}k=a[(c[f+4>>2]|0)+(e<<16>>16<<4)+13>>0]|0;return k|0}}else if((k|0)==31)return g|0;k=a[e+1>>0]|0;return k|0}function Yj(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+20|0;m=a[l>>0]|0;n=m<<24>>24==2;if(n?c[e+4>>2]&1|0:0){a[l>>0]=0;n=2;return n|0}a:do switch(a[e>>0]|0){case -95:{if((m&255)>3){n=0;return n|0}if(c[e+4>>2]&524288|0){n=0;return n|0}a[l>>0]=0;n=2;return n|0}case 59:{if(!(c[e+4>>2]&67108864)){g=c[e+8>>2]|0;k=a[g>>0]|0;j=d[208+(k&255)>>0]|0;f=j+-116|0;k=k<<24>>24==0;if(!(k|(f|0)!=0)){h=41806;i=g;do{i=i+1|0;h=h+1|0;o=a[i>>0]|0;f=(d[208+(o&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(f|0)!=0))}if(f|0){f=j+-102|0;if(!(k|(f|0)!=0)){h=41811;do{g=g+1|0;h=h+1|0;o=a[g>>0]|0;f=(d[208+(o&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(f|0)!=0))}if(f|0){f=18;break a}}a[e>>0]=-97;o=1;return o|0}else f=18;break}case -92:case -93:case -94:{f=18;break}case -88:case -85:break;case -108:switch(m<<24>>24){case 5:{a[e>>0]=114;o=0;return o|0}case 4:{a[l>>0]=0;o=2;return o|0}default:{o=0;return o|0}}default:{o=0;return o|0}}while(0);do if((f|0)==18){if(c[e+4>>2]&8|0){if(n)break;else f=0;return f|0}if(m<<24>>24==3?(c[e+28>>2]|0)==(c[b+24>>2]|0):0){o=0;return o|0}}while(0);a[l>>0]=0;o=2;return o|0}function Zj(b,c){b=b|0;c=c|0;a[b+20>>0]=0;return 2}function _j(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=b+4|0;e=Xa[c[f>>2]&255](b,d)|0;a:do if(!e){p=d;while(1){if(c[p+4>>2]&8404992|0){g=0;d=56;break}d=c[p+12>>2]|0;if(d|0?_j(b,d)|0:0){g=2;d=56;break}e=c[p+16>>2]|0;if(!e){d=9;break}d=Xa[c[f>>2]&255](b,e)|0;if(!d)p=e;else{q=d;break a}}if((d|0)==9){k=p+4|0;b:do if(!(c[k>>2]&2048)){d=c[p+20>>2]|0;if(d|0?(i=c[d>>2]|0,(i|0)>0):0){f=d+4|0;d=i;while(1){e=c[f>>2]|0;if(e|0?_j(b,e)|0:0){g=2;break}if((d|0)>1){f=f+20|0;d=d+-1|0}else break b}return g|0}}else{e=c[p+20>>2]|0;if(e|0?(m=b+8|0,h=c[m>>2]|0,h|0):0){j=b+12|0;d=Xa[h&255](b,e)|0;c:do if(!d){d:while(1){if(ak(b,e)|0){g=2;d=56;break}d=c[e+32>>2]|0;f=c[d>>2]|0;if((f|0)>0){i=d+8|0;while(1){d=c[i+20>>2]|0;if(d|0?$j(b,d)|0:0){g=2;d=56;break d}if((a[i+37>>0]&4?(n=c[i+64>>2]|0,n|0):0)?(o=c[n>>2]|0,(o|0)>0):0){d=n+4|0;g=o;while(1){h=c[d>>2]|0;if(h|0?_j(b,h)|0:0){g=2;d=56;break d}if((g|0)>1){d=d+20|0;g=g+-1|0}else break}}if((f|0)>1){i=i+72|0;f=f+-1|0}else break}}d=c[j>>2]|0;if(d|0)bb[d&127](b,e);e=c[e+52>>2]|0;if(!e)break b;d=Xa[c[m>>2]&255](b,e)|0;if(d|0){l=d;break c}}if((d|0)==56)return g|0}else l=d;while(0);if(l&2|0){s=2;return s|0}}}while(0);if(!(c[k>>2]&16777216)){s=0;return s|0}d=c[p+44>>2]|0;if(!d){s=0;return s|0}e:while(1){e=c[d+12>>2]|0;if(e|0?(s=c[e>>2]|0,(s|0)>0):0){e=e+4|0;f=s;while(1){g=c[e>>2]|0;if(g|0?_j(b,g)|0:0){g=2;d=56;break e}if((f|0)>1){e=e+20|0;f=f+-1|0}else break}}e=c[d+8>>2]|0;if(e|0?(r=c[e>>2]|0,(r|0)>0):0){e=e+4|0;f=r;while(1){g=c[e>>2]|0;if(g|0?_j(b,g)|0:0){g=2;d=56;break e}if((f|0)>1){e=e+20|0;f=f+-1|0}else break}}e=c[d+36>>2]|0;if(e|0?_j(b,e)|0:0){g=2;d=56;break}d=c[d+32>>2]|0;if(!d){g=0;d=56;break}}if((d|0)==56)return g|0}else if((d|0)==56)return g|0}else q=e;while(0);s=q&2;return s|0}function $j(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!d){m=0;return m|0}l=b+8|0;e=c[l>>2]|0;if(!e){m=0;return m|0}m=b+12|0;e=Xa[e&255](b,d)|0;a:do if(!e){b:while(1){if(ak(b,d)|0){e=2;d=23;break}e=c[d+32>>2]|0;f=c[e>>2]|0;if((f|0)>0){i=e+8|0;while(1){e=c[i+20>>2]|0;if(e|0?$j(b,e)|0:0){e=2;d=23;break b}if((a[i+37>>0]&4?(j=c[i+64>>2]|0,j|0):0)?(k=c[j>>2]|0,(k|0)>0):0){e=j+4|0;g=k;while(1){h=c[e>>2]|0;if(h|0?_j(b,h)|0:0){e=2;d=23;break b}if((g|0)>1){e=e+20|0;g=g+-1|0}else break}}if((f|0)>1){i=i+72|0;f=f+-1|0}else break}}e=c[m>>2]|0;if(e|0)bb[e&127](b,d);d=c[d+52>>2]|0;if(!d){e=0;d=23;break}e=Xa[c[l>>2]&255](b,d)|0;if(e|0)break a}if((d|0)==23)return e|0}while(0);m=e&2;return m|0}function ak(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[b>>2]|0;a:do if(e|0?(f=c[e>>2]|0,(f|0)>0):0){g=e+4|0;e=f;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break a}return e|0}while(0);e=c[b+36>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[b+40>>2]|0;b:do if(e|0?(h=c[e>>2]|0,(h|0)>0):0){g=e+4|0;e=h;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break b}return e|0}while(0);e=c[b+44>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[b+48>>2]|0;c:do if(e|0?(i=c[e>>2]|0,(i|0)>0):0){g=e+4|0;e=i;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break c}return e|0}while(0);e=c[b+60>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[a>>2]|0;if(!e){k=0;return k|0}if((d[e+200>>0]|0)<=1){k=0;return k|0}e=c[b+72>>2]|0;if(!e){k=0;return k|0}d:while(1){f=c[e+12>>2]|0;if(f|0?(j=c[f>>2]|0,(j|0)>0):0){f=f+4|0;g=j;while(1){h=c[f>>2]|0;if(h|0?_j(a,h)|0:0){e=2;f=44;break d}if((g|0)>1){f=f+20|0;g=g+-1|0}else break}}f=c[e+8>>2]|0;if(f|0?(k=c[f>>2]|0,(k|0)>0):0){f=f+4|0;g=k;while(1){h=c[f>>2]|0;if(h|0?_j(a,h)|0:0){e=2;f=44;break d}if((g|0)>1){f=f+20|0;g=g+-1|0}else break}}f=c[e+36>>2]|0;if(f|0?_j(a,f)|0:0){e=2;f=44;break}e=c[e+32>>2]|0;if(!e){e=0;f=44;break}}if((f|0)==44)return e|0;return 0}function bk(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;j=t;if((g|0)==0|(h|0)==0){i=(h|0)==(g|0)?0:2;Ra=t;return i|0}do if(f|0?(a[g>>0]|0)==-108:0){c[j>>2]=0;Wj(c[f>>2]|0,h,1,65,j)|0;s=c[j>>2]|0;if(!s)break;n=b[g+32>>1]|0;j=n<<16>>16;o=c[f+8>>2]|0;n=n<<16>>16>31;k=o+208|0;o=o+208|0;c[(n?o:k)>>2]=c[(n?o:k)>>2]|(n?-2147483648:1<<j+-1);k=c[f+220>>2]|0;a:do if((k|0)!=0?(o=c[k+100>>2]|0,q=j+-1|0,p=o+(q*40|0)|0,q=o+(q*40|0)+8|0,(b[q>>1]&1)==0):0){n=c[k>>2]|0;b:do if(!n){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](40)|0;r=32;break}j=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){o=c[14978]|0;m=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=o>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){n=0;l=0;m=0;k=1;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;o=k}else o=k}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0){n=0;l=0;m=0;k=1;break a}}else{do if((e[n+276>>1]|0)>=40){k=n+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=32;break b}k=n+296|0;j=c[k>>2]|0;if(!j){j=n+292|0;break}else{c[k>>2]=c[j>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=32;break b}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(n,40,0)|0;r=32}while(0);if((r|0)==32)if(!j){n=0;l=0;m=0;k=1;break}else o=j;j=o;k=j+40|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));m=o+8|0;b[m>>1]=1;c[o+32>>2]=n;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];j=b[m>>1]&-1025;b[m>>1]=j;j=j&65535;c:do if(j&18|0?(b[q>>1]&2048)==0:0){k=(j|4096)&65535;b[m>>1]=k;do if(j&16384){l=o+12|0;j=(c[o>>2]|0)+(c[l>>2]|0)|0;if((j|0)<1)if(!(k&16)){r=41;break}else j=1;if(Eg(o,j,1)|0)break c;q=o+16|0;gw((c[q>>2]|0)+(c[l>>2]|0)|0,0,c[o>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[o>>2]|0);j=b[m>>1]&-16897;b[m>>1]=j;if(!((c[o+24>>2]|0)!=0?(c[q>>2]|0)==(c[o+20>>2]|0):0))r=41}else r=41;while(0);if((r|0)==41){if(Jg(o)|0)break;j=b[m>>1]|0}b[m>>1]=j&-4097}while(0);j=b[m>>1]|0;do if((j&15|16)<<16>>16==18){if((j&514)==514){if(!((j&1)==0&(a[o+10>>0]|0)!=1))break}else if(j&1)break;Gg(o,1)|0}while(0);n=(Tg(o,s,0)|0)==0&1;l=o;m=o;k=0}else{n=0;l=0;m=0;k=1}while(0);if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j){if(c[j+480>>2]|0){Xd(j,s);break}q=s;if((c[j+304>>2]|0)>>>0<=q>>>0?(c[j+308>>2]|0)>>>0>q>>>0:0){q=j+300|0;c[s>>2]=c[q>>2];c[q>>2]=s}else r=59}else r=59;while(0);do if((r|0)==59)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);do if(!k){if(!((b[l+8>>1]&9216)==0?!(c[l+24>>2]|0):0))Cg(l);j=c[l+32>>2]|0;if(j|0){if(c[j+480>>2]|0){Xd(j,m);break}s=m;if((c[j+304>>2]|0)>>>0<=s>>>0?(c[j+308>>2]|0)>>>0>s>>>0:0){s=j+300|0;c[m>>2]=c[s>>2];c[s>>2]=m;break}}if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);if(n|0){i=0;Ra=t;return i|0}}while(0);o=g+4|0;p=c[o>>2]|0;n=h+4|0;k=c[n>>2]|0;q=k|p;if(q&1024|0){if(p&1024&k|0?(c[g+8>>2]|0)==(c[h+8>>2]|0):0){i=0;Ra=t;return i|0}i=2;Ra=t;return i|0}m=a[g>>0]|0;j=a[h>>0]|0;if(m<<24>>24==71?1:m<<24>>24!=j<<24>>24){do if(m<<24>>24==106)if((bk(f,c[g+12>>2]|0,h,i)|0)<2){i=1;Ra=t;return i|0}else{j=a[h>>0]|0;break}while(0);if(j<<24>>24==106?(bk(f,g,c[h+12>>2]|0,i)|0)<2:0){i=1;Ra=t;return i|0}i=2;Ra=t;return i|0}d:do switch(m<<24>>24){case -92:case -94:{j=p;break}default:{l=c[g+8>>2]|0;if(!l)j=p;else switch(m<<24>>24){case -95:{m=c[h+8>>2]|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(j|0)!=0))do{l=l+1|0;m=m+1|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(j|0)!=0));if(j|0){i=2;Ra=t;return i|0}if(!(p&16777216)){j=p;break d}if(!(ck(f,c[g+44>>2]|0,c[h+44>>2]|0)|0)){k=c[n>>2]|0;j=c[o>>2]|0;break d}else{i=2;Ra=t;return i|0}}case 106:{m=c[h+8>>2]|0;if(!m){i=2;Ra=t;return i|0}s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(j|0)!=0))do{l=l+1|0;m=m+1|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(j|0)!=0));if(!j){j=p;break d}else j=2;Ra=t;return j|0}case 114:{i=0;Ra=t;return i|0}default:{j=c[h+8>>2]|0;if(!j){j=p;break d}if(!(Bu(l,j)|0)){j=p;break d}else j=2;Ra=t;return j|0}}}}while(0);if((k^j)&2|0){i=2;Ra=t;return i|0}e:do if(!(q&16384)){if(q&2048|0){i=2;Ra=t;return i|0}if((q&8|0)==0?bk(f,c[g+12>>2]|0,c[h+12>>2]|0,i)|0:0){i=2;Ra=t;return i|0}if(bk(f,c[g+16>>2]|0,c[h+16>>2]|0,i)|0){i=2;Ra=t;return i|0}l=c[g+20>>2]|0;m=c[h+20>>2]|0;j=(l|0)==0;k=(m|0)==0;f:do if(!(j&k)){if(j|k){i=2;Ra=t;return i|0}j=c[l>>2]|0;if((j|0)!=(c[m>>2]|0)){i=2;Ra=t;return i|0}if((j|0)>0){j=0;while(1){if((a[l+4+(j*20|0)+12>>0]|0)!=(a[m+4+(j*20|0)+12>>0]|0)){j=2;r=125;break}if(bk(0,c[l+4+(j*20|0)>>2]|0,c[m+4+(j*20|0)>>2]|0,i)|0){j=2;r=125;break}j=j+1|0;if((j|0)>=(c[l>>2]|0))break f}if((r|0)==125){Ra=t;return j|0}}}while(0);switch(a[g>>0]|0){case -97:case 110:break e;default:{}}if(!(q&8192)){if((b[g+32>>1]|0)!=(b[h+32>>1]|0)){i=2;Ra=t;return i|0}g=c[g+28>>2]|0;h=c[h+28>>2]|0;if((g|0)!=(h|0)?(g|0)!=(i|0)|(h|0)>-1:0){i=2;Ra=t;return i|0}}}while(0);i=0;Ra=t;return i|0}function ck(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((a[d+16>>0]|0)!=(a[e+16>>0]|0)){e=1;return e|0}if((a[d+17>>0]|0)!=(a[e+17>>0]|0)){e=1;return e|0}if((a[d+18>>0]|0)!=(a[e+18>>0]|0)){e=1;return e|0}if((a[d+20>>0]|0)!=(a[e+20>>0]|0)){e=1;return e|0}if(bk(b,c[d+24>>2]|0,c[e+24>>2]|0,-1)|0){e=1;return e|0}if(bk(b,c[d+28>>2]|0,c[e+28>>2]|0,-1)|0){e=1;return e|0}g=c[d+8>>2]|0;h=c[e+8>>2]|0;b=(g|0)==0;f=(h|0)==0;a:do if(!(b&f)){if(b|f){e=1;return e|0}b=c[g>>2]|0;if((b|0)!=(c[h>>2]|0)){e=1;return e|0}if((b|0)>0){b=0;while(1){if((a[g+4+(b*20|0)+12>>0]|0)!=(a[h+4+(b*20|0)+12>>0]|0)){b=1;f=23;break}if(bk(0,c[g+4+(b*20|0)>>2]|0,c[h+4+(b*20|0)>>2]|0,-1)|0){b=1;f=23;break}b=b+1|0;if((b|0)>=(c[g>>2]|0))break a}if((f|0)==23)return b|0}}while(0);h=c[d+12>>2]|0;g=c[e+12>>2]|0;b=(h|0)==0;f=(g|0)==0;if(b&f){e=0;return e|0}if(b|f){e=1;return e|0}b=c[h>>2]|0;if((b|0)!=(c[g>>2]|0)){e=1;return e|0}if((b|0)<=0){e=0;return e|0}b=0;while(1){if((a[h+4+(b*20|0)+12>>0]|0)!=(a[g+4+(b*20|0)+12>>0]|0)){b=1;f=23;break}if(bk(0,c[h+4+(b*20|0)>>2]|0,c[g+4+(b*20|0)>>2]|0,-1)|0){b=1;f=23;break}b=b+1|0;if((b|0)>=(c[h>>2]|0)){b=0;f=23;break}}if((f|0)==23)return b|0;return 0}function dk(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;r=t;s=(g|0)!=0;a:do if(s){m=134217728;q=c[g>>2]|0}else{j=ek(d,f)|0;k=((j|0)<0)<<31>>31;if(c[b+272>>2]|0){if(a[b+81>>0]|0){c[r>>2]=0;b=0;Ra=t;return b|0}}else{do if(!(0<k>>>0|(0==(k|0)?(e[b+276>>1]|0)>>>0<j>>>0:0))){h=b+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=0;q=i;break a}h=b+296|0;i=c[h>>2]|0;if(!i){h=b+292|0;break}else{c[h>>2]=c[i>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=0;q=i;break a}}else h=b+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}m=0;q=_d(b,j,k)|0}while(0);c[r>>2]=q;if(!q){b=q;Ra=t;return b|0}n=(f|0)==0;if((!n?(a[d>>0]|0)!=-86:0)?(c[d+4>>2]&16777216|0)==0:0)if(!(c[d+12>>2]|0))j=(c[d+20>>2]|0)==0?16396:8220;else j=8220;else j=52;k=j&60;o=d+4|0;h=c[o>>2]|0;if((h&1024|0)==0?(l=c[d+8>>2]|0,(l|0)!=0):0)i=((Eu(l)|0)&1073741823)+1|0;else i=0;if(n){h=(h&16384|0)==0?((h&8192|0)==0?52:28):12;ew(q|0,d|0,h|0)|0;if(h>>>0<52)gw(q+h|0,0,52-h|0)|0}else ew(q|0,d|0,k|0)|0;l=q+4|0;h=j&24576|m|c[l>>2]&-134307841;c[l>>2]=h;if(i){h=q+k|0;c[q+8>>2]=h;ew(h|0,c[d+8>>2]|0,i|0)|0;h=c[l>>2]|0}i=c[o>>2]|0;do if(!((h|i)&8404992)){h=d+20|0;if(!(i&2048)){f=gk(b,c[h>>2]|0,f)|0;c[q+20>>2]=f;break}else{f=fk(b,c[h>>2]|0,f)|0;c[q+20>>2]=f;break}}while(0);j=c[l>>2]|0;if(!(j&16801792)){if(c[o>>2]&8404992|0){b=q;Ra=t;return b|0}h=d+12|0;if((a[q>>0]|0)==-86)c[q+12>>2]=c[h>>2];else{h=c[h>>2]|0;if(!h)h=0;else h=dk(b,h,0,0)|0;c[q+12>>2]=h}h=c[d+16>>2]|0;if(!h)h=0;else h=dk(b,h,0,0)|0;c[q+16>>2]=h;b=q;Ra=t;return b|0}if((!n?(a[d>>0]|0)!=-86:0)?(c[o>>2]&16777216|0)==0:0)if(!(c[d+12>>2]|0))i=(c[d+20>>2]|0)==0?12:28;else i=28;else i=52;h=c[o>>2]|0;if((h&1024|0)==0?(p=c[d+8>>2]|0,(p|0)!=0):0)i=((Eu(p)|0)&1073741823)+(i|1)|0;c[r>>2]=q+(i+7&-8);if(!(j&8404992)){h=c[d+12>>2]|0;if(!h)h=0;else h=dk(b,h,1,r)|0;c[q+12>>2]=h;h=c[d+16>>2]|0;if(!h)h=0;else h=dk(b,h,1,r)|0;c[q+16>>2]=h;h=c[o>>2]|0}if(h&16777216|0){b=hk(b,q,c[d+44>>2]|0)|0;c[q+44>>2]=b}if(!s){b=q;Ra=t;return b|0}c[g>>2]=c[r>>2];b=q;Ra=t;return b|0}function ek(b,d){b=b|0;d=d|0;var e=0,f=0;if(!b){d=0;return d|0}if(((d|0)!=0?(a[b>>0]|0)!=-86:0)?(c[b+4>>2]&16777216|0)==0:0)if(!(c[b+12>>2]|0))e=(c[b+20>>2]|0)==0?12:28;else e=28;else e=52;if((c[b+4>>2]&1024|0)==0?(f=c[b+8>>2]|0,(f|0)!=0):0)e=((Eu(f)|0)&1073741823)+(e|1)|0;e=e+7&-8;if(!(d&1)){d=e;return d|0}else{f=ek(c[b+12>>2]|0,d)|0;return f+e+(ek(c[b+16>>2]|0,d)|0)|0}return 0}function fk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+32|0;A=G+4|0;B=G;c[B>>2]=0;C=d+81|0;if(!f){F=0;Ra=G;return F|0}D=d+272|0;E=d+276|0;F=d+288|0;s=d+300|0;t=d+296|0;u=d+284|0;v=d+292|0;w=A+4|0;x=A+8|0;y=A+12|0;z=A+24|0;j=0;r=B;a:while(1){do if(c[D>>2]|0)if(!(a[C>>0]|0))q=11;else break a;else{if((e[E>>1]|0)>=76){h=c[s>>2]|0;if(h|0){c[s>>2]=c[h>>2];c[u>>2]=(c[u>>2]|0)+1;break}h=c[t>>2]|0;if(!h)h=v;else{c[t>>2]=c[h>>2];c[u>>2]=(c[u>>2]|0)+1;break}}else h=F;c[h>>2]=(c[h>>2]|0)+1;q=11}while(0);if((q|0)==11){q=0;h=_d(d,76,0)|0}if(!h)break;i=gk(d,c[f>>2]|0,g)|0;c[h>>2]=i;i=ik(d,c[f+32>>2]|0,g)|0;c[h+32>>2]=i;i=c[f+36>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+36>>2]=i;i=gk(d,c[f+40>>2]|0,g)|0;c[h+40>>2]=i;i=c[f+44>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+44>>2]=i;p=gk(d,c[f+48>>2]|0,g)|0;c[h+48>>2]=p;a[h+4>>0]=a[f+4>>0]|0;c[h+56>>2]=j;p=r;r=h+52|0;c[r>>2]=0;i=c[f+60>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+60>>2]=i;c[h+12>>2]=0;c[h+16>>2]=0;c[h+8>>2]=c[f+8>>2]&-33;c[h+24>>2]=-1;c[h+28>>2]=-1;b[h+6>>1]=b[f+6>>1]|0;o=c[f+64>>2]|0;b:do if(o){j=c[o>>2]<<4|8;do if(c[D>>2]|0)if(!(a[C>>0]|0))q=28;else{i=0;break b}else{if(!(0<0|(0==0?(e[E>>1]|0)>>>0<j>>>0:0))){i=c[s>>2]|0;if(i|0){c[s>>2]=c[i>>2];c[u>>2]=(c[u>>2]|0)+1;break}i=c[t>>2]|0;if(!i)i=v;else{c[t>>2]=c[i>>2];c[u>>2]=(c[u>>2]|0)+1;break}}else i=F;c[i>>2]=(c[i>>2]|0)+1;q=28}while(0);if((q|0)==28){q=0;i=_d(d,j,0)|0}if(i){gw(i|0,0,j|0)|0;c[i>>2]=c[o>>2];if((c[o>>2]|0)>0){n=i+8|0;m=0;do{k=fk(d,c[o+8+(m<<4)+8>>2]|0,0)|0;c[n+(m<<4)+8>>2]=k;k=gk(d,c[o+8+(m<<4)+4>>2]|0,0)|0;c[n+(m<<4)+4>>2]=k;k=c[o+8+(m<<4)>>2]|0;c:do if(k){l=(Eu(k)|0)+1|0;d:do if(c[D>>2]|0)if(!(a[C>>0]|0))q=41;else{j=0;break c}else{do if(0<0|(0==0?(e[E>>1]|0)>>>0<l>>>0:0))j=F;else{j=c[s>>2]|0;if(j|0){c[s>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break d}j=c[t>>2]|0;if(!j){j=v;break}c[t>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break d}while(0);c[j>>2]=(c[j>>2]|0)+1;q=41}while(0);if((q|0)==41){q=0;j=_d(d,l,0)|0}if(j)ew(j|0,k|0,l|0)|0;else j=0}else j=0;while(0);c[n+(m<<4)>>2]=j;m=m+1|0}while((m|0)<(c[o>>2]|0))}}else i=0}else i=0;while(0);c[h+64>>2]=i;c[h+68>>2]=0;i=c[f+72>>2]|0;c[A>>2]=0;if(!i)i=0;else{k=A;while(1){j=hk(d,0,i)|0;c[k>>2]=j;if(!j)break;i=c[i+32>>2]|0;if(!i)break;else k=j+32|0}i=c[A>>2]|0}c[h+72>>2]=i;if(c[f+68>>2]|0){c[w>>2]=137;c[x>>2]=138;c[y>>2]=0;c[A>>2]=0;c[z>>2]=h;$j(A,h)|0}c[h+20>>2]=c[f+20>>2];c[p>>2]=h;f=c[f+52>>2]|0;if(!f)break;else j=h}F=c[B>>2]|0;Ra=G;return F|0}function gk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if(!f){A=0;return A|0}A=(d|0)==0;if((!A?(h=f,(c[d+304>>2]|0)>>>0<=h>>>0):0)?(c[d+308>>2]|0)>>>0>h>>>0:0)j=e[d+276>>1]|0;else j=Wa[c[29352>>2]&127](f)|0;k=((j|0)<0)<<31>>31;z=d+272|0;a:do if(c[z>>2]|0)if(!(a[d+81>>0]|0))y=17;else{A=0;return A|0}else{do if(!(0<k>>>0|(0==(k|0)?(e[d+276>>1]|0)>>>0<j>>>0:0))){i=d+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];x=d+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}i=d+296|0;h=c[i>>2]|0;if(!h){h=d+292|0;break}else{c[i>>2]=c[h>>2];x=d+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}}else h=d+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;y=17}while(0);if((y|0)==17)h=_d(d,j,k)|0;if(!h){A=0;return A|0}c[h>>2]=c[f>>2];if((c[f>>2]|0)<=0){A=h;return A|0}r=d+276|0;s=d+81|0;t=d+288|0;u=d+300|0;v=d+296|0;w=d+284|0;x=d+292|0;o=h+4|0;i=0;p=0;q=f+4|0;while(1){j=c[q>>2]|0;do if(j){k=dk(d,j,g,0)|0;c[o>>2]=k;if(!((k|0)==0|(a[j>>0]|0)!=-86))if(!(b[k+32>>1]|0)){n=c[k+16>>2]|0;c[k+12>>2]=n;break}else{c[k+12>>2]=i;n=i;break}else n=i}else{c[o>>2]=0;n=i}while(0);l=c[q+4>>2]|0;b:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;do if(A){k=Sv(m|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&k>>>0>2147483390){i=0;break b}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;y=50;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){B=c[14978]|0;k=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break b}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[z>>2]|0){if(a[s>>0]|0){i=0;break b}}else{if(!(0<0|(0==0?(e[r>>1]|0)>>>0<m>>>0:0))){i=c[u>>2]|0;if(i|0){c[u>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=50;break}i=c[v>>2]|0;if(!i)i=x;else{c[v>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=50;break}}else i=t;c[i>>2]=(c[i>>2]|0)+1}i=_d(d,m,0)|0;y=50}while(0);if((y|0)==50){y=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[o+4>>2]=i;l=c[q+8>>2]|0;c:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;do if(A){B=Sv(m|0,0,-1,-1)|0;k=L()|0;if(k>>>0>0|(k|0)==0&B>>>0>2147483390){i=0;break c}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;y=75;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){B=c[14978]|0;k=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break c}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[z>>2]|0){if(a[s>>0]|0){i=0;break c}}else{if(!(0<0|(0==0?(e[r>>1]|0)>>>0<m>>>0:0))){i=c[u>>2]|0;if(i|0){c[u>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=75;break}i=c[v>>2]|0;if(!i)i=x;else{c[v>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=75;break}}else i=t;c[i>>2]=(c[i>>2]|0)+1}i=_d(d,m,0)|0;y=75}while(0);if((y|0)==75){y=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[o+8>>2]=i;a[o+12>>0]=a[q+12>>0]|0;B=o+13|0;l=a[B>>0]|0;a[B>>0]=l&-2;m=q+13|0;l=a[m>>0]&2|l&-4;a[B>>0]=l;a[B>>0]=l&-10|a[m>>0]&8;c[o+16>>2]=c[q+16>>2];p=p+1|0;if((p|0)>=(c[f>>2]|0))break;else{o=o+20|0;i=n;q=q+20|0}}return h|0}function hk(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!f){d=0;return d|0}j=(b|0)==0;a:do if(j){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](92)|0;m=25;break}g=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){l=c[14978]|0;k=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&k>>>0<=l>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){d=0;return d|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){d=0;return d|0}}else{do if((e[b+276>>1]|0)>=92){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=25;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=25;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,92,0)|0;m=25}while(0);if((m|0)==25)if(!g){d=0;return d|0}else h=g;g=h;i=g+92|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(i|0));k=c[f>>2]|0;b:do if(!k)g=0;else{l=(Eu(k)|0)+1|0;c:do if(j){j=Sv(l|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](l)|0;m=51;break}g=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){n=c[14978]|0;j=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}i=Wa[c[29352>>2]&127](g)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){g=0;break b}}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<l>>>0:0))){i=b+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=51;break c}i=b+296|0;g=c[i>>2]|0;if(!g){g=b+292|0;break}else{c[i>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=51;break c}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,l,0)|0;m=51}while(0);if((m|0)==51)if(!g){g=0;break}ew(g|0,k|0,l|0)|0}while(0);c[h>>2]=g;g=c[f+36>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+36>>2]=g;c[h+40>>2]=c[f+40>>2];g=gk(b,c[f+8>>2]|0,0)|0;c[h+8>>2]=g;g=gk(b,c[f+12>>2]|0,0)|0;c[h+12>>2]=g;a[h+16>>0]=a[f+16>>0]|0;a[h+18>>0]=a[f+18>>0]|0;a[h+17>>0]=a[f+17>>0]|0;a[h+20>>0]=a[f+20>>0]|0;g=c[f+24>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+24>>2]=g;g=c[f+28>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+28>>2]=g;c[h+68>>2]=d;n=h;return n|0}function ik(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!d){f=0;return f|0}i=c[d>>2]|0;v=(i|0)>0;i=(i*72|0)+8|0;j=v?i:80;i=v?((i|0)<0)<<31>>31:0;v=b+272|0;a:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))u=12;else{f=0;return f|0}else{do if(!(i>>>0>0|((i|0)==0?j>>>0>(e[b+276>>1]|0)>>>0:0))){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;u=12}while(0);if((u|0)==12)g=_d(b,j,i)|0;if(!g){f=0;return f|0}t=c[d>>2]|0;c[g+4>>2]=t;c[g>>2]=t;if((c[d>>2]|0)<=0){f=g;return f|0}m=g+8|0;n=b+276|0;o=b+81|0;p=b+288|0;q=b+300|0;r=b+296|0;s=b+284|0;t=b+292|0;l=0;do{c[m+(l*72|0)>>2]=c[d+8+(l*72|0)>>2];i=c[d+8+(l*72|0)+4>>2]|0;b:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=25;else{h=0;break b}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=25}while(0);if((u|0)==25){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+4>>2]=h;i=c[d+8+(l*72|0)+8>>2]|0;c:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=37;else{h=0;break c}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=37}while(0);if((u|0)==37){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+8>>2]=h;i=c[d+8+(l*72|0)+12>>2]|0;d:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=49;else{h=0;break d}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=49}while(0);if((u|0)==49){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+12>>2]=h;c[m+(l*72|0)+36>>2]=c[d+8+(l*72|0)+36>>2];c[m+(l*72|0)+40>>2]=c[d+8+(l*72|0)+40>>2];c[m+(l*72|0)+24>>2]=c[d+8+(l*72|0)+24>>2];c[m+(l*72|0)+28>>2]=c[d+8+(l*72|0)+28>>2];k=m+(l*72|0)+37|0;h=a[k>>0]|0;if(h&2){i=c[d+8+(l*72|0)+64>>2]|0;e:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=62;else{h=0;break e}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=62}while(0);if((u|0)==62){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+64>>2]=h;h=a[k>>0]|0}c[m+(l*72|0)+68>>2]=c[d+8+(l*72|0)+68>>2];if(h&4){k=gk(b,c[d+8+(l*72|0)+64>>2]|0,f)|0;c[m+(l*72|0)+64>>2]=k}h=c[d+8+(l*72|0)+16>>2]|0;c[m+(l*72|0)+16>>2]=h;if(h|0){k=h+32|0;c[k>>2]=(c[k>>2]|0)+1}h=fk(b,c[d+8+(l*72|0)+20>>2]|0,f)|0;c[m+(l*72|0)+20>>2]=h;h=c[d+8+(l*72|0)+44>>2]|0;if(!h)h=0;else h=dk(b,h,f,0)|0;c[m+(l*72|0)+44>>2]=h;i=jk(b,c[d+8+(l*72|0)+48>>2]|0)|0;c[m+(l*72|0)+48>>2]=i;i=d+8+(l*72|0)+56|0;j=c[i+4>>2]|0;k=m+(l*72|0)+56|0;c[k>>2]=c[i>>2];c[k+4>>2]=j;l=l+1|0}while((l|0)<(c[d>>2]|0));return g|0}function jk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!d){v=0;return v|0}v=b+272|0;a:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))t=12;else{v=0;return v|0}else{do if((e[b+276>>1]|0)>=8){g=b+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];u=b+284|0;c[u>>2]=(c[u>>2]|0)+1;break a}g=b+296|0;f=c[g>>2]|0;if(!f){f=b+292|0;break}else{c[g>>2]=c[f>>2];u=b+284|0;c[u>>2]=(c[u>>2]|0)+1;break a}}else f=b+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;t=12}while(0);if((t|0)==12)f=_d(b,8,0)|0;if(!f){v=0;return v|0}u=d+4|0;c[f+4>>2]=c[u>>2];i=c[u>>2]<<3;b:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))t=25;else c[f>>2]=0;else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<i>>>0:0))){g=b+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;t=26;break b}g=b+296|0;h=c[g>>2]|0;if(!h){g=b+292|0;break}else{c[g>>2]=c[h>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;t=26;break b}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;t=25}while(0);if((t|0)==25){h=_d(b,i,0)|0;t=26}if((t|0)==26?(c[f>>2]=h,h|0):0){if((c[u>>2]|0)<=0){v=f;return v|0}n=b+276|0;o=b+81|0;p=b+288|0;q=b+300|0;r=b+296|0;s=b+284|0;m=b+292|0;g=0;while(1){l=c[d>>2]|0;j=c[l+(g<<3)>>2]|0;c:do if(j){k=(Eu(j)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))t=46;else{i=0;break c}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<k>>>0:0))){i=c[q>>2]|0;if(i|0){c[q>>2]=c[i>>2];c[s>>2]=(c[s>>2]|0)+1;break}i=c[r>>2]|0;if(!i)i=m;else{c[r>>2]=c[i>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else i=p;c[i>>2]=(c[i>>2]|0)+1;t=46}while(0);if((t|0)==46){t=0;i=_d(b,k,0)|0}if(i)ew(i|0,j|0,k|0)|0;else i=0}else i=0;while(0);c[h+(g<<3)>>2]=i;c[h+(g<<3)+4>>2]=c[l+(g<<3)+4>>2];g=g+1|0;if((g|0)>=(c[u>>2]|0))break;h=c[f>>2]|0}return f|0}if(c[b+480>>2]|0){Xd(b,f);v=0;return v|0}v=f;if((c[b+304>>2]|0)>>>0<=v>>>0?(c[b+308>>2]|0)>>>0>v>>>0:0){v=b+300|0;c[f>>2]=c[v>>2];c[v>>2]=f;v=0;return v|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);v=0;return v|0}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);v=0;return v|0}return 0}function kk(b,d){b=b|0;d=d|0;var e=0;if((a[d>>0]|0)!=-95)return 0;d=d+44|0;e=c[d>>2]|0;if(!e)return 0;b=b+24|0;c[e+32>>2]=c[(c[b>>2]|0)+68>>2];c[(c[b>>2]|0)+68>>2]=c[d>>2];return 0}function lk(a,b){a=a|0;b=b|0;return (c[a+24>>2]|0)!=(b|0)|0}function mk(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=10-(c[b+56>>2]|0)|0;l=c[b>>2]|0;m=b+64|0;j=c[m>>2]|0;k=n<<2;a:do if(!j){b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))i=12;else{i=28;break a}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0))){g=l+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];l=l+284|0;c[l>>2]=(c[l>>2]|0)+1;break b}g=l+296|0;h=c[g>>2]|0;if(!h){g=l+292|0;break}else{c[g>>2]=c[h>>2];l=l+284|0;c[l>>2]=(c[l>>2]|0)+1;break b}}else g=l+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;i=12}while(0);if((i|0)==12)h=_d(l,k,0)|0;c[m>>2]=h;g=b+60|0;if(h)i=30}else{g=j;i=l+304|0;if(((c[i>>2]|0)>>>0<=g>>>0?(c[l+308>>2]|0)>>>0>g>>>0:0)?!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0)):0){h=j;g=b+60|0;i=30;break}h=Zd(l,j,k,0)|0;if(h|0){c[m>>2]=h;g=b+60|0;i=30;break}if(c[l+480>>2]|0){Xd(l,j);i=28;break}if((c[i>>2]|0)>>>0<=g>>>0?(c[l+308>>2]|0)>>>0>g>>>0:0){i=l+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;i=28;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);i=28;break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);i=28;break}}while(0);if((i|0)==28){c[m>>2]=0;g=b+60|0}else if((i|0)==30){c[g>>2]=n;c[h+(f<<2)>>2]=c[d+108>>2];return}c[g>>2]=0;return}function nk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=Ra;Ra=Ra+16|0;g=h;if((a[b+199>>0]|0)!=2){Ra=h;return}c[g>>2]=f;f=Me(c[b>>2]|0,e,g)|0;i=c[b+8>>2]|0;g=c[i+108>>2]|0;e=b+212|0;Fj(i,171,g,c[e>>2]|0,0,f,-7)|0;if(d<<24>>24)c[e>>2]=g;Ra=h;return}function ok(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+32|0;i=l+16|0;h=l+8|0;k=l;g=c[d+12>>2]|0;e=a[g>>0]|0;if(e<<24>>24==-88)e=a[g+38>>0]|0;switch(e<<24>>24){case -87:{e=g+20|0;j=6;break}case -125:{e=c[g+20>>2]|0;j=6;break}default:f=1}if((j|0)==6)f=c[c[e>>2]>>2]|0;if(c[d+4>>2]&2048|0){e=c[c[c[d+20>>2]>>2]>>2]|0;if((f|0)==(e|0)){k=0;Ra=l;return k|0}c[k>>2]=e;c[k+4>>2]=f;cd(b,39001,k);k=1;Ra=l;return k|0}if((f|0)==1){k=0;Ra=l;return k|0}if(!(c[g+4>>2]&2048)){cd(b,38899,i);k=1;Ra=l;return k|0}else{c[h>>2]=c[c[c[g+20>>2]>>2]>>2];c[h+4>>2]=1;cd(b,39001,h);k=1;Ra=l;return k|0}return 0}function pk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c[d+12>>2]|0;f=a[n>>0]|0;if(f<<24>>24==-88)f=a[n+38>>0]|0;switch(f<<24>>24){case -87:{f=n+20|0;l=6;break}case -125:{f=c[n+20>>2]|0;l=6;break}default:m=1}if((l|0)==6)m=c[c[f>>2]>>2]|0;if(!(c[d+4>>2]&2048))k=0;else k=c[d+20>>2]|0;b=c[b>>2]|0;h=m+1|0;g=((h|0)<0)<<31>>31;a:do if(!b){j=Sv(h|0,g|0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){n=0;return n|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;l=33;break}b=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;d=59064;f=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&f>>>0>0){j=c[14978]|0;i=Tv(f|0,d|0,b|0,((b|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](b)|0;if(!f){n=0;return n|0}d=Wa[c[29352>>2]&127](f)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){n=0;return n|0}}else{do if(!(0<g>>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0<h>>>0:0))){d=b+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];l=b+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break a}d=b+296|0;f=c[d>>2]|0;if(!f){f=b+292|0;break}else{c[d>>2]=c[f>>2];l=b+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break a}}else f=b+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(b,h,g)|0;l=33}while(0);if((l|0)==33)if(!f){n=0;return n|0}b:do if((m|0)>0){h=n+38|0;i=n+20|0;j=n+20|0;if(!k){g=0;while(1){b=a[n>>0]|0;if(b<<24>>24==-88)d=a[h>>0]|0;else d=b;switch(d<<24>>24){case -87:{d=i;l=42;break}case -125:{d=c[j>>2]|0;l=42;break}default:d=n}do if((l|0)==42){l=0;if((c[c[d>>2]>>2]|0)<2)d=n;else{if(b<<24>>24!=-125?(a[h>>0]|0)!=-125:0){d=c[(c[i>>2]|0)+4+(g*20|0)>>2]|0;break}d=c[(c[c[j>>2]>>2]|0)+4+(g*20|0)>>2]|0}}while(0);k=Xj(d)|0;a[f+g>>0]=k;g=g+1|0;if((g|0)==(m|0))break b}}g=0;while(1){b=a[n>>0]|0;if(b<<24>>24==-88)d=a[h>>0]|0;else d=b;switch(d<<24>>24){case -87:{d=i;l=52;break}case -125:{d=c[j>>2]|0;l=52;break}default:d=n}do if((l|0)==52){l=0;if((c[c[d>>2]>>2]|0)<2)d=n;else{if(b<<24>>24!=-125?(a[h>>0]|0)!=-125:0){d=c[(c[i>>2]|0)+4+(g*20|0)>>2]|0;break}d=c[(c[c[j>>2]>>2]|0)+4+(g*20|0)>>2]|0}}while(0);d=Xj(d)|0;b=Xj(c[(c[k>>2]|0)+4+(g*20|0)>>2]|0)|0;if(d<<24>>24==0|b<<24>>24==0)d=(b|d)<<24>>24==0?65:(b&255)+(d&255)&255;else d=d<<24>>24>66|b<<24>>24>66?67:65;a[f+g>>0]=d;g=g+1|0;if((g|0)==(m|0))break b}}while(0);a[f+m>>0]=0;n=f;return n|0}
- function gm(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;m=c[j>>2]|0;l=c[m+12>>2]|0;k=a[l>>0]|0;if(k<<24>>24==-88)k=a[l+38>>0]|0;switch(k<<24>>24){case -87:{k=l+20|0;v=6;break}case -125:{k=c[l+20>>2]|0;v=6;break}default:k=1}if((v|0)==6)k=c[c[k>>2]>>2]|0;r=(e[h+52>>1]|0)-i|0;r=(k|0)<(r|0)?k:r;s=h+28|0;if((r|0)<=1){v=1;return v|0}t=h+4|0;u=h+12|0;q=h+32|0;k=1;while(1){o=c[(c[l+20>>2]|0)+4+(k*20|0)>>2]|0;p=c[m+16>>2]|0;l=p+20|0;if(c[p+4>>2]&2048)l=c[l>>2]|0;n=c[(c[l>>2]|0)+4+(k*20|0)>>2]|0;if((a[o>>0]|0)!=-94){v=36;break}if((c[o+28>>2]|0)!=(g|0)){v=36;break}h=b[o+32>>1]|0;p=k+i|0;if(h<<16>>16!=(b[(c[t>>2]|0)+(p<<1)>>1]|0)){v=36;break}m=c[s>>2]|0;if((a[m+p>>0]|0)!=(a[m+i>>0]|0)){v=36;break}l=Xj(o)|0;m=Xj(n)|0;if(l<<24>>24==0|m<<24>>24==0)m=(m|l)<<24>>24==0?65:(m&255)+(l&255)&255;else m=l<<24>>24>66|m<<24>>24>66?67:65;if(h<<16>>16>-1)l=a[(c[(c[u>>2]|0)+4>>2]|0)+(h<<16>>16<<4)+13>>0]|0;else l=68;if(m<<24>>24!=l<<24>>24){v=36;break}do if(!(c[o+4>>2]&256)){if(n|0?c[n+4>>2]&256|0:0){l=Yi(f,n)|0;v=29;break}l=Yi(f,o)|0;if(!l){l=Yi(f,n)|0;v=29}}else{l=Yi(f,o)|0;v=29}while(0);if((v|0)==29){v=0;if(!l){v=36;break}}m=c[l>>2]|0;h=c[(c[q>>2]|0)+(p<<2)>>2]|0;p=a[m>>0]|0;l=(d[208+(p&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(p<<24>>24==0|(l|0)!=0))do{m=m+1|0;h=h+1|0;p=a[m>>0]|0;l=(d[208+(p&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(l|0)!=0));if(l|0){v=36;break}k=k+1|0;if((k|0)>=(r|0)){v=36;break}m=c[j>>2]|0;l=c[m+12>>2]|0}if((v|0)==36)return k|0;return 0}function hm(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0;eb=Ra;Ra=Ra+96|0;$a=eb;ab=j&65535;if(j<<16>>16?b[(c[c[f>>2]>>2]|0)+76>>1]&64:0){db=0;Ra=eb;return db|0}Ea=c[g>>2]|0;j=Ea&65535;if(j>>>0>63){db=0;Ra=eb;return db|0}Fa=cw(1,0,j|0)|0;Fa=Sv(Fa|0,L()|0,-1,-1)|0;Ga=L()|0;i=i&65535;Ca=i&2048;Ba=(Ca|0)==0;Ca=Ca>>>11&65535|386;a:do if(!((Fa|0)==0&(Ga|0)==0)){ba=h+24|0;ca=f+4|0;da=(j|0)==0;ea=f+80|0;fa=Ca&65535;ga=$a+4|0;ha=$a+12|0;ia=$a+16|0;ja=$a+8|0;ka=$a+20|0;la=$a+24|0;ma=$a+28|0;na=$a+17|0;oa=$a+18|0;pa=$a+72|0;qa=$a+20|0;ra=$a+4|0;sa=$a+8|0;ta=$a+24|0;ua=f+488|0;xa=(j|0)!=0;ya=(i&192|0)==0;X=(i&64|0)==0;C=1;m=0;W=0;S=0;T=0;i=0;h=0;A=0;B=0;b:while(1){if(!W){U=i;V=h}else{V=m+8|0;U=c[V>>2]|i;V=c[V+4>>2]|h}if(W>>>0<ab>>>0){i=c[(c[ba>>2]|0)+(W<<2)>>2]|0;if(Ba){Na=i;za=10}else{r=C;s=i;q=B;p=A;o=S;n=T}}else{Na=k;za=10}if((za|0)==10){za=0;z=Na+36|0;i=c[z>>2]|0;P=Na+24|0;if(i&1024|0){za=11;break}Q=Na+30|0;b[Q>>1]=0;R=c[(c[ca>>2]|0)+8+((d[Na+16>>0]|0)*72|0)+40>>2]|0;if(da){o=A;p=B}else{v=~U;w=~V;x=Na+40|0;y=Na+48|0;u=0;h=A;m=B;do{s=cw(1,0,u|0)|0;t=L()|0;c:do if((s&h|0)==0&(t&m|0)==0){r=g+4+(u*20|0)|0;i=c[r>>2]|0;n=c[i+4>>2]|0;if(n&4096)do{if(!(n&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;n=c[i+4>>2]|0}while((n&4096|0)!=0);if((a[i>>0]|0)==-94?(c[i+28>>2]|0)==(R|0):0){q=i+32|0;i=b[q>>1]|0;c[$a>>2]=ea;c[ga>>2]=ea;c[ha>>2]=0;a[ia>>0]=0;c[ja>>2]=0;c[ka>>2]=fa;c[la>>2]=0;c[ma>>2]=R;a[na>>0]=1;a[oa>>0]=1;if(i<<16>>16!=-2?(b[pa>>1]=i,Qa=Tl($a)|0,Qa|0):0){o=0;p=Qa;while(1){n=p+32|0;i=c[n>>2]|0;n=c[n+4>>2]|0;if((i&v|0)==0&(n&w|0)==0){if((i|0)==0&(n|0)==0?(Sa=b[p+12>>1]|0,Sa&130):0){za=29;break}Ka=(o|0)==0?p:o}else Ka=o;i=Tl($a)|0;if(!i){za=33;break}else{o=Ka;p=i}}if((za|0)==29){za=0;Ha=p;Ta=Sa}else if((za|0)==33){za=0;if(!Ka)break;Ha=Ka;Ta=b[Ka+12>>1]|0}d:do if(Ta<<16>>16==1){i=b[x>>1]|0;if(!(i<<16>>16))break c;o=c[y>>2]|0;n=i&65535;i=0;while(1){if((Ha|0)==(c[o+(i<<2)>>2]|0))break d;i=i+1|0;if(i>>>0>=n>>>0)break c}}while(0);do if(Ta&130){if((b[q>>1]|0)<=-1)break;p=c[f>>2]|0;o=c[Ha>>2]|0;i=Yi(p,c[r>>2]|0)|0;if(!i)n=c[(c[p>>2]|0)+8>>2]|0;else n=i;i=Yi(p,o)|0;if(!i)i=c[(c[p>>2]|0)+8>>2]|0;n=c[n>>2]|0;o=c[i>>2]|0;O=a[n>>0]|0;i=(d[208+(O&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(O<<24>>24==0|(i|0)!=0))do{n=n+1|0;o=o+1|0;O=a[n>>0]|0;i=(d[208+(O&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(i|0)!=0));if(i|0)break c}while(0);h=s|h;m=t|m;break}}}while(0);u=u+1|0}while((u|0)!=(j|0));i=c[z>>2]|0;o=h;p=m}do if(!(i&4096)){if(!(i&256)){m=c[Na+32>>2]|0;if(!m){bb=0;za=135;break b}O=m+55|0;if((d[O>>0]|d[O+1>>0]<<8)&4){bb=0;za=135;break b}h=b[m+52>>1]|0;i=(a[m+54>>0]|0)!=0&1;if(!(h<<16>>16)){La=i;Va=o;Wa=p;za=117;break}else{n=m;O=b[m+50>>1]|0;N=h&65535}}else{n=0;O=0;i=C;N=1}F=Na+42|0;G=(n|0)==0;H=Na+48|0;I=n+4|0;J=n+28|0;K=n+12|0;M=n+40|0;C=n+32|0;D=cw(1,0,W|0)|0;E=L()|0;h=0;y=0;A=0;B=0;z=o;x=p;e:while(1){o=e[P>>1]|0;q=B>>>0<o>>>0;f:do if(q?B>>>0>=(e[F>>1]|0)>>>0:0){p=c[H>>2]|0;m=c[p+(B<<2)>>2]|0;w=b[m+12>>1]|0;n=w&65535;if((w&Ca)<<16>>16){Aa=h;Y=y;Z=A;$=(n&256|0)==0?i:0;aa=B+1|0;va=z;wa=x;break}if((n&1|0)!=0?(Ua=c[m>>2]|0,Oa=B+1|0,Oa>>>0<o>>>0):0){m=Oa;while(1){if((c[c[p+(m<<2)>>2]>>2]|0)==(Ua|0)){Da=0;za=68;break f}m=m+1|0;if(m>>>0>=o>>>0){Da=1;za=68;break}}}else{Da=1;za=68}}else{Da=1;za=68}while(0);if((za|0)==68){za=0;if(!G){o=b[(c[I>>2]|0)+(B<<1)>>1]|0;m=a[(c[J>>2]|0)+B>>0]|0;n=c[K>>2]|0;o=o<<16>>16==(b[n+40>>1]|0)?-1:o<<16>>16;if(q|(i<<24>>24==0|(o|0)<0)){u=o;_=i}else{u=o;_=(a[(c[n+4>>2]|0)+(o<<4)+12>>0]|0)==0?0:i}}else{m=0;u=-1;_=i}if(!(xa&Da<<24>>24!=0)){za=114;break}s=(u|0)>-2;t=(u|0)==-1;i=0;n=1;g:while(1){v=cw(1,0,i|0)|0;w=L()|0;do if((v&z|0)==0&(w&x|0)==0){r=g+4+(i*20|0)|0;o=c[r>>2]|0;h:do if(!o)o=0;else while(1){p=c[o+4>>2]|0;if(!(p&4096))break h;if(!(p&262144))o=o+12|0;else o=(c[o+20>>2]|0)+4|0;o=c[o>>2]|0;if(!o){o=0;break}}while(0);n=ya?0:n;if(s){if((a[o>>0]|0)!=-94)break;if((c[o+28>>2]|0)!=(R|0))break;if((u|0)!=(b[o+32>>1]|0))break}else{p=c[(c[M>>2]|0)+4+(B*20|0)>>2]|0;i:do if(!o)o=0;else while(1){q=c[o+4>>2]|0;if(!(q&4096))break i;if(!(q&262144))o=o+12|0;else o=(c[o+20>>2]|0)+4|0;o=c[o>>2]|0;if(!o){o=0;break}}while(0);j:do if(!p)p=0;else while(1){q=c[p+4>>2]|0;if(!(q&4096))break j;if(!(q&262144))p=p+12|0;else p=(c[p+20>>2]|0)+4|0;p=c[p>>2]|0;if(!p){p=0;break}}while(0);if(bk(0,o,p,R)|0)break}if(t){n=-1;break g}p=c[f>>2]|0;o=Yi(p,c[r>>2]|0)|0;if(!o)o=c[(c[p>>2]|0)+8>>2]|0;p=c[o>>2]|0;q=c[(c[C>>2]|0)+(B<<2)>>2]|0;r=a[p>>0]|0;o=(d[208+(r&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0;if(!(r<<24>>24==0|(o|0)!=0))do{p=p+1|0;q=q+1|0;r=a[p>>0]|0;o=(d[208+(r&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(o|0)!=0));if(!o){n=u;break g}}while(0);i=i+1|0;if(!(i>>>0<j>>>0&n<<24>>24!=0)){za=114;break e}}o=B+1|0;b[Q>>1]=o;do if(X){if(h<<24>>24)if((m^y)<<24>>24==(a[g+4+(i*20|0)+12>>0]|0)){i=y;break}else{za=114;break e}i=a[g+4+(i*20|0)+12>>0]^m;if(!(i<<24>>24)){h=1;i=0;break}wa=l;Aa=c[wa+4>>2]|E;h=l;c[h>>2]=c[wa>>2]|D;c[h+4>>2]=Aa;h=1}else i=y;while(0);Aa=h;Y=i;Z=(n|0)==-1?1:A;$=_;aa=o;va=v|z;wa=w|x}if(aa>>>0<N>>>0){h=Aa;y=Y;A=Z;B=aa;i=$;z=va;x=wa}else{Ja=Z;Pa=$;Xa=va;Ya=wa;break}}if((za|0)==114){za=0;Ja=A;Pa=(B|0)==0|B>>>0<(O&65535)>>>0?0:_;Xa=z;Ya=x}if(!(Ja<<24>>24)){La=Pa;Va=Xa;Wa=Ya;za=117}else{Ma=1;Za=Xa;_a=Ya}}else{La=C;Va=o;Wa=p;za=117}while(0);if((za|0)==117){za=0;if(!(La<<24>>24)){Ia=0;cb=Va;db=Wa;break a}else{Ma=La;Za=Va;_a=Wa}}v=Na+8|0;u=c[v>>2]|S;v=c[v+4>>2]|T;if(da){r=Ma;s=Na;q=_a;p=Za;o=u;n=v}else{s=~u;t=~v;r=0;q=Za;i=_a;while(1){o=cw(1,0,r|0)|0;p=L()|0;do if((o&q|0)==0&(p&i|0)==0){m=c[g+4+(r*20|0)>>2]|0;if(m){n=Pl(ua,m)|0;h=L()|0;if((n|0)==0&(h|0)==0){a[qa>>0]=1;c[ra>>2]=127;c[sa>>2]=128;c[ta>>2]=0;_j($a,m)|0;if(!(a[qa>>0]|0)){h=q;break}else{n=0;h=0}}}else{n=0;h=0}T=(n&s|0)==0&(h&t|0)==0;h=(T?o:0)|q;i=(T?p:0)|i}else h=q;while(0);r=r+1|0;if((r|0)==(j|0)){r=Ma;s=Na;q=i;p=h;o=u;n=v;break}else q=h}}}if(W>>>0>=ab>>>0|(q>>>0>Ga>>>0|(q|0)==(Ga|0)&p>>>0>=Fa>>>0|r<<24>>24==0)){Ia=r;cb=p;db=q;break a}else{C=r;m=s;W=W+1|0;S=o;T=n;i=U;h=V;A=p;B=q}}if((za|0)==11){db=(a[P+5>>0]|0)==0;Ia=C;cb=db?A:Fa;db=db?B:Ga;break}else if((za|0)==135){Ra=eb;return bb|0}}else{Ia=1;cb=0;db=0}while(0);if((cb|0)==(Fa|0)&(db|0)==(Ga|0)){db=Ea&255;Ra=eb;return db|0}if(Ia<<24>>24){db=-1;Ra=eb;return db|0}if(j>>>0<=1){db=0;Ra=eb;return db|0}while(1){i=j;j=j+-1|0;$a=cw(1,0,j|0)|0;$a=Sv($a|0,L()|0,-1,-1)|0;ab=L()|0;if(($a&cb|0)==($a|0)&(ab&db|0)==(ab|0))break;if((i|0)<=2){bb=0;za=135;break}}if((za|0)==135){Ra=eb;return bb|0}db=j&255;Ra=eb;return db|0}function im(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;do if(h|0){h=d+16|0;j=c[h>>2]|0;k=j+5|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;s=(c[d+4>>2]|0)+j|0;a[s>>0]=a[43977]|0;a[s+1>>0]=a[43978]|0;a[s+2>>0]=a[43979]|0;a[s+3>>0]=a[43980]|0;a[s+4>>0]=a[43981]|0;break}else{wb(d,43977,5);break}}while(0);s=(f|0)>1;do if(s){h=d+16|0;j=c[h>>2]|0;k=j+1|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;a[(c[d+4>>2]|0)+j>>0]=40;break}else{wb(d,44003,1);break}}else if((f|0)!=1){h=d+16|0;j=c[h>>2]|0;k=j+1|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;a[(c[d+4>>2]|0)+j>>0]=a[i>>0]|0;return}else{wb(d,i,1);return}}while(0);o=e+4|0;q=d+16|0;r=d+8|0;m=e+12|0;n=d+4|0;l=0;do{do if(l|0){h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[n>>2]|0)+h>>0]=44;break}else{wb(d,41685,1);break}}while(0);h=b[(c[o>>2]|0)+(l+g<<1)>>1]|0;switch(h<<16>>16){case -2:{h=43996;p=21;break}case -1:{h=38132;p=21;break}default:{h=c[(c[(c[m>>2]|0)+4>>2]|0)+(h<<16>>16<<4)>>2]|0;if(!h){e=0;h=0}else p=21}}if((p|0)==21){p=0;e=(Eu(h)|0)&1073741823}j=c[q>>2]|0;k=j+e|0;if(k>>>0<(c[r>>2]|0)>>>0){if(e|0){c[q>>2]=k;ew((c[n>>2]|0)+j|0,h|0,e|0)|0}}else wb(d,h,e);l=l+1|0}while((l|0)!=(f|0));h=c[q>>2]|0;j=h+1|0;k=j>>>0<(c[r>>2]|0)>>>0;do if(s){if(k){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=41}else wb(d,34066,1);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=a[i>>0]|0}else wb(d,i,1);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=40;break}else{wb(d,44003,1);break}}else if(k){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=a[i>>0]|0;break}else{wb(d,i,1);break}while(0);e=d+4|0;k=0;do{do if(k|0){h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[e>>2]|0)+h>>0]=44;break}else{wb(d,41685,1);break}}while(0);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[e>>2]|0)+h>>0]=63}else wb(d,35133,1);k=k+1|0}while((k|0)!=(f|0));if(!s)return;h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=41;return}else{wb(d,34066,1);return}}function jm(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=Ra;Ra=Ra+16|0;J=M;y=c[f>>2]|0;K=c[d+8>>2]|0;a:do switch(a[y>>0]|0){case 45:case 53:{j=Jj(d,c[y+16>>2]|0,j)|0;break}case 50:{k=K+108|0;i=c[k>>2]|0;if((c[K+112>>2]|0)>(i|0)){c[k>>2]=i+1;K=c[K+104>>2]|0;a[K+(i*20|0)>>0]=73;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=0;c[K+(i*20|0)+8>>2]=j;c[K+(i*20|0)+12>>2]=0;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0;break a}else{Di(K,73,0,j,0)|0;break a}}default:{D=c[g+64>>2]|0;H=D+36|0;if((c[H>>2]&1024|0)==0?(k=c[D+32>>2]|0,(k|0)!=0):0)i=(a[(c[k+28>>2]|0)+h>>0]|0)==0?i:(i|0)==0&1;G=(h|0)>0;b:do if(G){l=c[D+48>>2]|0;k=0;while(1){F=c[l+(k<<2)>>2]|0;if(F|0?(c[F>>2]|0)==(y|0):0)break;k=k+1|0;if((k|0)>=(h|0))break b}lm(g,f);g=j;Ra=M;return g|0}while(0);F=D+40|0;m=e[F>>1]|0;if((m|0)>(h|0)){n=c[D+48>>2]|0;k=0;l=h;do{k=k+((c[c[n+(l<<2)>>2]>>2]|0)==(y|0)&1)|0;l=l+1|0}while((l|0)<(m|0));C=k}else C=0;c[J>>2]=0;if((c[y+4>>2]&2048|0)!=0?(c[c[c[y+20>>2]>>2]>>2]|0)!=1:0){A=c[d>>2]|0;B=dk(A,y,0,0)|0;u=A+81|0;if(!(a[u>>0]|0)){s=B+20|0;q=c[c[s>>2]>>2]|0;t=B+12|0;r=c[(c[t>>2]|0)+20>>2]|0;m=b[F>>1]|0;if((m&65535|0)>(h|0)){p=D+48|0;k=0;o=h;l=0;do{n=c[(c[p>>2]|0)+(o<<2)>>2]|0;if((c[n>>2]|0)==(y|0)?(v=(c[n+24>>2]|0)+-1|0,w=q+4+(v*20|0)|0,x=c[w>>2]|0,(x|0)!=0):0){l=nj(c[d>>2]|0,l,x)|0;c[w>>2]=0;m=r+4+(v*20|0)|0;k=nj(c[d>>2]|0,k,c[m>>2]|0)|0;c[m>>2]=0;m=b[F>>1]|0}o=o+1|0}while((o|0)<(m&65535|0))}else{l=0;k=0}if(q|0)ri(A,q);if(r|0)ri(A,r);c[(c[t>>2]|0)+20>>2]=k;c[c[s>>2]>>2]=l;if(k|0?(c[k>>2]|0)==1:0){l=k+4|0;k=c[l>>2]|0;c[l>>2]=0;l=c[t>>2]|0;if(l|0)ni(A,l);c[t>>2]=k}l=c[(c[s>>2]|0)+48>>2]|0;if(l|0?(z=c[l>>2]|0,(z|0)>0):0){k=0;do{b[l+4+(k*20|0)+16>>1]=0;k=k+1|0}while((k|0)!=(z|0))}if(!(a[u>>0]|0)){m=c[d>>2]|0;n=C<<2;c:do if(!m){z=Sv(n|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390)k=0;else{if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;E=66;break}k=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){z=c[14978]|0;y=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){k=0;break}l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){E=67;break}c[14987]=l;E=67}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];E=m+284|0;c[E>>2]=(c[E>>2]|0)+1;E=66;break c}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];E=m+284|0;c[E>>2]=(c[E>>2]|0)+1;E=66;break c}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;E=66}while(0);if((E|0)==66)if(!k)k=0;else E=67;if((E|0)==67)gw(k|0,0,n|0)|0;m=qk(d,B,4,0,k,J)|0;n=c[J>>2]|0;c[(c[f>>2]|0)+28>>2]=n;l=k}else{l=0;m=5;n=0;k=0}}else{l=0;m=5;n=0;k=0}if(B|0)ni(A,B);y=c[f>>2]|0;B=k}else{m=qk(d,y,4,0,0,J)|0;l=0;n=c[J>>2]|0;B=0}x=(((m|0)==4?(i|0)==0&1:i)|0)!=0;k=x?32:36;z=K+108|0;i=c[z>>2]|0;A=K+112|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;w=c[K+104>>2]|0;a[w+(i*20|0)>>0]=k;b[w+(i*20|0)+2>>1]=0;c[w+(i*20|0)+4>>2]=n;c[w+(i*20|0)+8>>2]=0;c[w+(i*20|0)+12>>2]=0;c[w+(i*20|0)+16>>2]=0;a[w+(i*20|0)+1>>0]=0}else Di(K,k,n,0,0)|0;c[H>>2]=c[H>>2]|2048;t=g+56|0;k=c[t>>2]|0;if(!k){w=d+56|0;k=(c[w>>2]|0)+-1|0;c[w>>2]=k;c[g+16>>2]=k;k=c[t>>2]|0}q=k+C|0;c[t>>2]=q;r=c[d>>2]|0;s=g+60|0;i=c[s>>2]|0;q=q*20|0;d:do if(!i){e:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))E=88;else{E=126;break d}else{do if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0<q>>>0:0))){n=r+300|0;i=c[n>>2]|0;if(i|0){c[n>>2]=c[i>>2];C=r+284|0;c[C>>2]=(c[C>>2]|0)+1;break e}n=r+296|0;i=c[n>>2]|0;if(!i){i=r+292|0;break}else{c[n>>2]=c[i>>2];C=r+284|0;c[C>>2]=(c[C>>2]|0)+1;break e}}else i=r+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;E=88}while(0);if((E|0)==88)i=_d(r,q,0)|0;c[s>>2]=i;if(!i)E=127;else E=103}else{o=i;p=r+304|0;if(((c[p>>2]|0)>>>0<=o>>>0?(c[r+308>>2]|0)>>>0>o>>>0:0)?!(0<0|(0==0?(e[r+276>>1]|0)>>>0<q>>>0:0)):0){E=103;break}n=Zd(r,i,q,0)|0;if(n|0){c[s>>2]=n;i=n;E=103;break}if(c[r+480>>2]|0){Xd(r,i);E=126;break}if((c[p>>2]|0)>>>0<=o>>>0?(c[r+308>>2]|0)>>>0>o>>>0:0){E=r+300|0;c[i>>2]=c[E>>2];c[E>>2]=i;E=126;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);E=126;break}else{E=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);E=126;break}}while(0);if((E|0)==103){n=b[F>>1]|0;if((n&65535|0)>(h|0)){v=D+48|0;w=j-h|0;s=(m|0)==1;t=(l|0)==0;u=K+104|0;r=x?4:5;o=0;m=i+(k*20|0)|0;q=h;i=n;while(1){if((c[c[(c[v>>2]|0)+(q<<2)>>2]>>2]|0)==(y|0)){p=w+q|0;do if(s){n=c[J>>2]|0;k=c[z>>2]|0;if((c[A>>2]|0)>(k|0)){c[z>>2]=k+1;i=c[u>>2]|0;a[i+(k*20|0)>>0]=-128;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=n;c[i+(k*20|0)+8>>2]=p;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;i=k;k=o;break}else{i=Di(K,128,n,p,0)|0;k=o;break}}else{if(t){k=o;n=0}else{k=o+1|0;n=c[l+(o<<2)>>2]|0}o=c[J>>2]|0;i=c[z>>2]|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;D=c[u>>2]|0;a[D+(i*20|0)>>0]=90;b[D+(i*20|0)+2>>1]=0;c[D+(i*20|0)+4>>2]=o;c[D+(i*20|0)+8>>2]=n;c[D+(i*20|0)+12>>2]=p;c[D+(i*20|0)+16>>2]=0;a[D+(i*20|0)+1>>0]=0;n=o;break}else{i=Di(K,90,o,n,p)|0;n=o;break}}while(0);c[m+4>>2]=i;i=c[z>>2]|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;D=c[u>>2]|0;a[D+(i*20|0)>>0]=50;b[D+(i*20|0)+2>>1]=0;c[D+(i*20|0)+4>>2]=p;c[D+(i*20|0)+8>>2]=0;c[D+(i*20|0)+12>>2]=0;c[D+(i*20|0)+16>>2]=0;a[D+(i*20|0)+1>>0]=0}else Di(K,50,p,0,0)|0;do if((q|0)==(h|0)){c[m>>2]=n;a[m+16>>0]=r;if(G?(I=c[H>>2]|0,(I&1024|0)==0):0){c[m+8>>2]=w;c[m+12>>2]=h;c[H>>2]=I|262144;break}c[m+12>>2]=0}else a[m+16>>0]=-86;while(0);m=m+20|0;i=b[F>>1]|0}else k=o;q=q+1|0;if((q|0)>=(i&65535|0))break;else o=k}}}else if((E|0)==126){c[s>>2]=0;E=127}if((E|0)==127)c[t>>2]=0;k=c[d>>2]|0;do if(B|0){if(k|0){if(c[k+480>>2]|0){Xd(k,B);break}K=B;if((c[k+304>>2]|0)>>>0<=K>>>0?(c[k+308>>2]|0)>>>0>K>>>0:0){K=k+300|0;c[B>>2]=c[K>>2];c[K>>2]=B;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{K=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}while(0)}}while(0);lm(g,f);g=j;Ra=M;return g|0}function km(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!e){k=Jj(d,0,f)|0;if((k|0)==(f|0))return;h=c[d+8>>2]|0;if(!h)return;i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[h+104>>2]|0;a[d+(j*20|0)>>0]=79;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(h,79,k,f,0)|0;return}}h=a[e>>0]|0;j=h<<24>>24==-88;if(j)h=a[e+38>>0]|0;switch(h<<24>>24){case -87:{i=e+20|0;q=7;break}case -125:{i=c[e+20>>2]|0;q=7;break}default:{}}if((q|0)==7?(c[c[i>>2]>>2]|0)>=2:0){if(c[e+4>>2]&2048|0){l=c[d+8>>2]|0;k=Qj(d,e)|0;h=g+-1|0;i=l+108|0;j=c[i>>2]|0;if((c[l+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[l+104>>2]|0;a[d+(j*20|0)>>0]=78;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=h;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(l,78,k,f,h)|0;return}}e=c[e+20>>2]|0;if((g|0)<=0)return;m=d+8|0;l=0;do{h=c[e+4+(l*20|0)>>2]|0;n=l+f|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(d,h,n)|0;q=21;break}k=c[m>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;k=c[k+104>>2]|0;a[k+(j*20|0)>>0]=78;b[k+(j*20|0)+2>>1]=0;c[k+(j*20|0)+4>>2]=h;c[k+(j*20|0)+8>>2]=n;c[k+(j*20|0)+12>>2]=0;c[k+(j*20|0)+16>>2]=0;a[k+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,n,0)|0;break}}else{p=Jj(d,0,n)|0;q=21}while(0);do if(((q|0)==21?(q=0,(p|0)!=(n|0)):0)?(o=c[m>>2]|0,o|0):0){h=o+108|0;i=c[h>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[h>>2]=i+1;k=c[o+104>>2]|0;a[k+(i*20|0)>>0]=79;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=p;c[k+(i*20|0)+8>>2]=n;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;break}else{Di(o,79,p,n,0)|0;break}}while(0);l=l+1|0}while((l|0)!=(g|0));return}if(j){k=c[d+8>>2]|0;h=c[e+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[k+104>>2]|0;a[d+(j*20|0)>>0]=78;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=h;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(k,78,h,f,0)|0;return}}k=Jj(d,e,f)|0;if((k|0)==(f|0))return;h=c[d+8>>2]|0;if(!h)return;i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[h+104>>2]|0;a[d+(j*20|0)>>0]=79;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(h,79,k,f,0)|0;return}}function lm(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=e+10|0;g=b[h>>1]|0;if(g&4)return;q=d+72|0;if(!(c[d>>2]|0)){m=q;l=c[m>>2]|0;m=c[m+4>>2]|0;f=e;k=0;i=g;n=h;while(1){j=f+40|0;if(!((c[j>>2]&l|0)==0?(c[j+4>>2]&m|0)==0:0)){d=22;break}if((k|0)!=0?(o=i&65535,(o&1024|0)!=0):0)d=(o|512)&65535;else d=i|4;b[n>>1]=d;j=c[f+16>>2]|0;if((j|0)<0){d=22;break}d=c[(c[f+4>>2]|0)+20>>2]|0;i=d+(j*48|0)+14|0;n=(a[i>>0]|0)+-1<<24>>24;a[i>>0]=n;if(n<<24>>24){d=22;break}n=d+(j*48|0)+10|0;i=b[n>>1]|0;if(i&4){d=22;break}else{f=d+(j*48|0)|0;k=k+1|0}}if((d|0)==22)return}i=0;while(1){if(!(c[(c[e>>2]|0)+4>>2]&1)){d=22;break}o=q;n=e+40|0;if(!((c[n>>2]&c[o>>2]|0)==0?(c[n+4>>2]&c[o+4>>2]|0)==0:0)){d=22;break}if((i|0)!=0?(p=g&65535,(p&1024|0)!=0):0)d=(p|512)&65535;else d=g|4;b[h>>1]=d;f=c[e+16>>2]|0;if((f|0)<0){d=22;break}d=c[(c[e+4>>2]|0)+20>>2]|0;n=d+(f*48|0)+14|0;o=(a[n>>0]|0)+-1<<24>>24;a[n>>0]=o;if(o<<24>>24){d=22;break}h=d+(f*48|0)+10|0;g=b[h>>1]|0;if(g&4){d=22;break}else{e=d+(f*48|0)|0;i=i+1|0}}if((d|0)==22)return}function mm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;if((a[d>>0]|0)==44)do{mm(c[d+12>>2]|0,e,f);d=c[d+16>>2]|0}while((a[d>>0]|0)==44);i=f+12|0;if((c[i>>2]|0)<=0)return;f=c[f+20>>2]|0;g=0;while(1){h=f+10|0;if((b[h>>1]&4)==0?(bk(0,c[f>>2]|0,d,e)|0)==0:0)b[h>>1]=b[h>>1]|4;g=g+1|0;if((g|0)>=(c[i>>2]|0))break;else f=f+48|0}return}function nm(d,e){d=d|0;e=e|0;d=c[d+24>>2]|0;if(bk(0,e,c[d>>2]|0,c[d+4>>2]|0)|0){e=0;return e|0}a[e>>0]=-94;c[e+28>>2]=c[d+8>>2];b[e+32>>1]=c[d+12>>2];c[e+44>>2]=0;e=1;return e|0}function om(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=c[c[c[a>>2]>>2]>>2]|0;d=c[a+12>>2]|0;o=a+20|0;if((d|0)>0){p=(q|0)==0;i=q+480|0;j=q+304|0;k=q+308|0;l=q+300|0;h=c[o>>2]|0;while(1){g=d;d=d+-1|0;f=h+10|0;e=b[f>>1]|0;if((e&1)!=0?(m=c[h>>2]|0,(m|0)!=0):0){ni(q,m);e=b[f>>1]|0}e=e&65535;do if(!(e&16)){if(e&32|0?(n=c[h+28>>2]|0,om(n),n|0):0){if(!p){if(c[i>>2]|0){Xd(q,n);break}f=n;if((c[j>>2]|0)>>>0<=f>>>0?(c[k>>2]|0)>>>0>f>>>0:0){c[n>>2]=c[l>>2];c[l>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}}else{e=c[h+28>>2]|0;om(e);if(e|0){if(!p){if(c[i>>2]|0){Xd(q,e);break}f=e;if((c[j>>2]|0)>>>0<=f>>>0?(c[k>>2]|0)>>>0>f>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}}while(0);if((g|0)<=1)break;else h=h+48|0}}d=c[o>>2]|0;if((d|0)==(a+24|0))return;if(!d)return;if(q|0){if(c[q+480>>2]|0){Xd(q,d);return}a=d;if((c[q+304>>2]|0)>>>0<=a>>>0?(c[q+308>>2]|0)>>>0>a>>>0:0){q=q+300|0;c[d>>2]=c[q>>2];c[q>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{q=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function pm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))j=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);p=d+19|0;i=a[p>>0]|0;if(!(i<<24>>24)){n=d+44|0;o=(c[n>>2]|0)+1|0;c[n>>2]=o}else{o=i+-1<<24>>24;a[p>>0]=o;o=c[d+148+((o&255)<<2)>>2]|0}m=h+108|0;i=c[m>>2]|0;n=h+112|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=70;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=0;c[l+(i*20|0)+8>>2]=o;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else Di(h,70,0,o,0)|0;do if((g|0)>2){i=a[p>>0]|0;if(!(i<<24>>24)){k=d+44|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l}else{l=i+-1<<24>>24;a[p>>0]=l;l=c[d+148+((l&255)<<2)>>2]|0}i=c[m>>2]|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;k=c[h+104>>2]|0;a[k+(i*20|0)>>0]=110;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=0;c[k+(i*20|0)+8>>2]=l;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else i=Di(h,110,0,l,0)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;j=c[h+104>>2]|0;k=j+(i*20|0)+1|0;if(!(a[k>>0]|0)){c[j+(i*20|0)+16>>2]=59952;a[k>>0]=-1;break}else{Ei(h,j+(i*20|0)|0,59952,-1);break}}while(0);i=c[m>>2]|0;j=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;k=c[h+104>>2]|0;a[k+(i*20|0)>>0]=57;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=l;c[k+(i*20|0)+8>>2]=j;c[k+(i*20|0)+12>>2]=f;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else Di(h,57,l,j,f)|0;i=c[m>>2]|0;if((i|0)>0)b[(c[h+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=83}else{i=c[m>>2]|0;j=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=15;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=f;c[l+(i*20|0)+8>>2]=j;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0;break}else{Di(h,15,f,j,0)|0;break}}while(0);j=c[18208+(g<<2)>>2]|0;i=c[m>>2]|0;k=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=j;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=o;c[l+(i*20|0)+8>>2]=k;c[l+(i*20|0)+12>>2]=f;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else Di(h,j,o,k,f)|0;i=c[d+116>>2]|0;a[((i|0)==0?d:i)+21>>0]=1;i=c[m>>2]|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[h+104>>2]|0;a[f+(i*20|0)>>0]=69;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=1;c[f+(i*20|0)+8>>2]=2;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(h,69,1,2,0)|0;if(!(a[(c[h>>2]|0)+81>>0]|0)){n=c[18176+(g<<2)>>2]|0;f=c[h+104>>2]|0;g=(c[m>>2]|0)+-1|0;a[f+(g*20|0)+1>>0]=-1;c[f+(g*20|0)+16>>2]=n}if(!o)return;h=a[p>>0]|0;if((h&255)>=8)return;a[p>>0]=h+1<<24>>24;c[d+148+((h&255)<<2)>>2]=o;return}function qm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))q=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;q=15}while(0);if((q|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);if(!f)return;n=f+84|0;o=h+108|0;p=h+112|0;g=(g|0)==0;m=h+104|0;do{if(((c[n>>2]|0)==0?(c[(c[f+40>>2]|0)+4>>2]&4096|0)!=0:0)?(a[f+17>>0]|0)!=87:0){d=f+52|0;i=c[d>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=73;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=i;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,73,0,i,0)|0;i=f+56|0;j=c[i>>2]|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;l=c[m>>2]|0;a[l+(k*20|0)>>0]=32;b[l+(k*20|0)+2>>1]=0;c[l+(k*20|0)+4>>2]=j;c[l+(k*20|0)+8>>2]=0;c[l+(k*20|0)+12>>2]=0;c[l+(k*20|0)+16>>2]=0;a[l+(k*20|0)+1>>0]=0}else Di(h,32,j,0,0)|0;k=c[i>>2]|0;i=c[d>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=90;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=0;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,90,k,0,i)|0;j=c[o>>2]|0;if(!(a[(c[h>>2]|0)+81>>0]|0))i=(c[m>>2]|0)+((((j|0)<2?-1:-2)+j|0)*20|0)|0;else i=59308;c[i+8>>2]=j}else q=37;do if((q|0)==37?(q=0,(c[f+60>>2]|0)==0):0){i=c[(c[f+68>>2]|0)+20>>2]|0;if(!i)d=0;else d=c[i>>2]|0;l=f+48|0;k=c[l>>2]|0;if(g){i=c[f+52>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=-100;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=d;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,156,k,d,i)|0;i=c[f+40>>2]|0;j=c[h>>2]|0;if(!(a[j+81>>0]|0)){d=c[m>>2]|0;l=(c[o>>2]|0)+-1|0;a[d+(l*20|0)+1>>0]=-8;c[d+(l*20|0)+16>>2]=i;break}if(!(c[i+4>>2]&16))break;if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}l=i;if((c[j+304>>2]|0)>>>0<=l>>>0?(c[j+308>>2]|0)>>>0>l>>>0:0){l=j+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}i=c[o>>2]|0;if((c[p>>2]|0)>(i|0)){c[o>>2]=i+1;j=c[m>>2]|0;a[j+(i*20|0)>>0]=-99;b[j+(i*20|0)+2>>1]=0;c[j+(i*20|0)+4>>2]=k;c[j+(i*20|0)+8>>2]=d;c[j+(i*20|0)+12>>2]=0;c[j+(i*20|0)+16>>2]=0;a[j+(i*20|0)+1>>0]=0}else Di(h,157,k,d,0)|0;i=c[f+40>>2]|0;j=c[h>>2]|0;do if(a[j+81>>0]|0){if(c[i+4>>2]&16|0){if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}d=i;if((c[j+304>>2]|0)>>>0<=d>>>0?(c[j+308>>2]|0)>>>0>d>>>0:0){d=j+300|0;c[i>>2]=c[d>>2];c[d>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}else{k=c[m>>2]|0;d=(c[o>>2]|0)+-1|0;a[k+(d*20|0)+1>>0]=-8;c[k+(d*20|0)+16>>2]=i}while(0);i=c[l>>2]|0;j=c[f+52>>2]|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;d=c[m>>2]|0;a[d+(k*20|0)>>0]=78;b[d+(k*20|0)+2>>1]=0;c[d+(k*20|0)+4>>2]=i;c[d+(k*20|0)+8>>2]=j;c[d+(k*20|0)+12>>2]=0;c[d+(k*20|0)+16>>2]=0;a[d+(k*20|0)+1>>0]=0}else Di(h,78,i,j,0)|0;i=c[l>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=73;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=i;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0;break}else{Di(h,73,0,i,0)|0;break}}while(0);f=c[f+32>>2]|0}while((f|0)!=0);return}function rm(d){d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;J=d+4|0;K=c[J>>2]|0;M=c[d+8>>2]|0;l=K+84|0;L=c[d>>2]|0;do if(!(c[l>>2]|0)){if(!K){j=M+108|0;h=M+112|0;break}s=L+56|0;t=L+19|0;u=L+44|0;j=M+108|0;h=M+112|0;v=M+104|0;w=K+44|0;x=M+12|0;r=K;do{o=(c[r+40>>2]|0)+32|0;f=c[o>>2]|0;if((f|0)==43457|(f|0)==43467){m=c[r+56>>2]|0;p=c[s>>2]|0;k=p+-1|0;c[s>>2]=k;f=a[t>>0]|0;if(!(f<<24>>24)){n=(c[u>>2]|0)+1|0;c[u>>2]=n}else{n=f+-1<<24>>24;a[t>>0]=n;n=c[L+148+((n&255)<<2)>>2]|0}l=r+52|0;f=c[l>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=73;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=0;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,73,0,f,0)|0;do if((c[o>>2]|0)!=43457){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=70;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=1;c[K+(f*20|0)+8>>2]=n;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0;break}else{Di(M,70,1,n,0)|0;break}}else{f=c[w>>2]|0;g=(c[r+76>>2]|0)+1|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=f;c[K+(i*20|0)+8>>2]=g;c[K+(i*20|0)+12>>2]=n;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,90,f,g,n)|0;pm(L,n,2)}while(0);f=r+60|0;g=c[f>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=100;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=g;c[K+(i*20|0)+12>>2]=n;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,100,n,g,n)|0;f=(c[f>>2]|0)+1|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=54;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=f;c[K+(g*20|0)+8>>2]=k;c[K+(g*20|0)+12>>2]=n;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,54,f,k,n)|0;f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=30;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=m;c[K+(f*20|0)+8>>2]=0;c[K+(f*20|0)+12>>2]=n;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,30,m,0,n)|0;i=c[r+76>>2]|0;f=c[l>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=90;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=m;c[K+(g*20|0)+8>>2]=i;c[K+(g*20|0)+12>>2]=f;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,90,m,i,f)|0;g=c[x>>2]|0;f=0-p|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,M,f);else c[(c[g+64>>2]|0)+(f<<2)>>2]=c[j>>2];if(n|0?(y=a[t>>0]|0,(y&255)<8):0){a[t>>0]=y+1<<24>>24;c[L+148+((y&255)<<2)>>2]=n}}else if((f|0)==40587|(f|0)==40592){k=c[c[(c[r+68>>2]|0)+20>>2]>>2]|0;n=c[r+56>>2]|0;q=c[s>>2]|0;m=q+-1|0;c[s>>2]=m;f=a[t>>0]|0;if(!(f<<24>>24)){p=(c[u>>2]|0)+1|0;c[u>>2]=p}else{p=f+-1<<24>>24;a[t>>0]=p;p=c[L+148+((p&255)<<2)>>2]|0}l=c[w>>2]|0;do if((k|0)<3){f=c[r+52>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=73;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=0;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0;break}else{Di(M,73,0,f,0)|0;break}}else{f=(c[r+76>>2]|0)+2|0;g=c[r+52>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=l;c[K+(i*20|0)+8>>2]=f;c[K+(i*20|0)+12>>2]=g;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0;break}else{Di(M,90,l,f,g)|0;break}}while(0);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=-128;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=l;c[K+(f*20|0)+8>>2]=p;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,128,l,p,0)|0;f=(c[o>>2]|0)==40587;do if((k|0)<2){f=f?1:-1;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=83;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=p;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0;break}else{Di(M,83,p,f,0)|0;break}}else{k=f?100:101;f=a[t>>0]|0;if(!(f<<24>>24)){i=(c[u>>2]|0)+1|0;c[u>>2]=i}else{i=f+-1<<24>>24;a[t>>0]=i;i=c[L+148+((i&255)<<2)>>2]|0}f=(c[r+76>>2]|0)+1|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=90;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=l;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=i;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,90,l,f,i)|0;f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=k;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=i;c[K+(f*20|0)+8>>2]=p;c[K+(f*20|0)+12>>2]=p;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,k,i,p,p)|0;if(i|0?(z=a[t>>0]|0,(z&255)<8):0){a[t>>0]=z+1<<24>>24;c[L+148+((z&255)<<2)>>2]=i}}while(0);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=30;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=n;c[K+(f*20|0)+8>>2]=m;c[K+(f*20|0)+12>>2]=p;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,30,n,m,p)|0;f=c[r+76>>2]|0;g=c[r+52>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=f;c[K+(i*20|0)+12>>2]=g;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,90,n,f,g)|0;g=c[x>>2]|0;f=0-q|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,M,f);else c[(c[g+64>>2]|0)+(f<<2)>>2]=c[j>>2];if(p|0?(A=a[t>>0]|0,(A&255)<8):0){a[t>>0]=A+1<<24>>24;c[L+148+((A&255)<<2)>>2]=p}}r=c[r+32>>2]|0}while((r|0)!=0)}else{C=c[K+56>>2]|0;n=K+12|0;f=c[n>>2]|0;if(!f)E=0;else E=c[f>>2]|0;D=L+56|0;A=c[D>>2]|0;y=A+-1|0;m=A+-2|0;c[D>>2]=m;D=L+19|0;f=a[D>>0]|0;do if(f<<24>>24){B=f+-1<<24>>24;a[D>>0]=B;g=c[L+148+((B&255)<<2)>>2]|0;if(!(B<<24>>24)){h=L+44|0;f=h;h=c[h>>2]|0;t=8;break}else{f=f+-2<<24>>24;a[D>>0]=f;B=c[L+148+((f&255)<<2)>>2]|0;break}}else{f=L+44|0;h=(c[f>>2]|0)+1|0;c[f>>2]=h;g=h;t=8}while(0);if((t|0)==8){B=h+1|0;c[f>>2]=B;f=0}z=(E|0)!=0;a:do if(z)if((E|0)!=1){j=L+32|0;h=c[j>>2]|0;k=L+28|0;f=c[k>>2]|0;if((f|0)<(E|0)){x=L+44|0;i=c[x>>2]|0;c[x>>2]=i+E;i=i+1|0}else{x=h+E|0;c[j>>2]=x;f=f-E|0;c[k>>2]=f;i=h;h=x}if((f|0)<(E|0)){w=L+44|0;x=c[w>>2]|0;c[w>>2]=x+E;w=i;x=x+1|0;break}else{c[j>>2]=h+E;c[k>>2]=f-E;w=i;x=h;break}}else{do if(f<<24>>24){x=f+-1<<24>>24;a[D>>0]=x;h=c[L+148+((x&255)<<2)>>2]|0;if(!(x<<24>>24)){i=L+44|0;f=i;i=c[i>>2]|0;break}else{x=f+-2<<24>>24;a[D>>0]=x;w=h;x=c[L+148+((x&255)<<2)>>2]|0;break a}}else{f=L+44|0;i=(c[f>>2]|0)+1|0;c[f>>2]=i;h=i}while(0);x=i+1|0;c[f>>2]=x;w=h;break}else{w=0;x=0}while(0);k=K+44|0;f=c[k>>2]|0;j=M+108|0;i=c[j>>2]|0;h=M+112|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;v=M+104|0;u=c[v>>2]|0;a[u+(i*20|0)>>0]=-128;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=f;c[u+(i*20|0)+8>>2]=g;c[u+(i*20|0)+12>>2]=0;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0}else{Di(M,128,f,g,0)|0;v=M+104|0}vm(d,c[k>>2]|0,w);f=K;do{i=c[f+48>>2]|0;k=c[j>>2]|0;if((c[h>>2]|0)>(k|0)){c[j>>2]=k+1;u=c[v>>2]|0;a[u+(k*20|0)>>0]=73;b[u+(k*20|0)+2>>1]=0;c[u+(k*20|0)+4>>2]=0;c[u+(k*20|0)+8>>2]=i;c[u+(k*20|0)+12>>2]=0;c[u+(k*20|0)+16>>2]=0;a[u+(k*20|0)+1>>0]=0}else Di(M,73,0,i,0)|0;f=c[f+32>>2]|0}while((f|0)!=0);f=c[l>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;u=c[v>>2]|0;a[u+(i*20|0)>>0]=24;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=C;c[u+(i*20|0)+8>>2]=m;c[u+(i*20|0)+12>>2]=f;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0}else Di(M,24,C,m,f)|0;u=c[j>>2]|0;if((c[h>>2]|0)>(u|0)){c[j>>2]=u+1;s=c[v>>2]|0;a[s+(u*20|0)>>0]=-128;b[s+(u*20|0)+2>>1]=0;c[s+(u*20|0)+4>>2]=C;c[s+(u*20|0)+8>>2]=B;c[s+(u*20|0)+12>>2]=0;c[s+(u*20|0)+16>>2]=0;a[s+(u*20|0)+1>>0]=0}else Di(M,128,C,B,0)|0;f=c[K+88>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;s=c[v>>2]|0;a[s+(i*20|0)>>0]=54;b[s+(i*20|0)+2>>1]=0;c[s+(i*20|0)+4>>2]=f;c[s+(i*20|0)+8>>2]=m;c[s+(i*20|0)+12>>2]=B;c[s+(i*20|0)+16>>2]=0;a[s+(i*20|0)+1>>0]=0}else Di(M,54,f,m,B)|0;s=K+20|0;f=a[s>>0]|0;b:do switch(f<<24>>24){case 82:{f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=53;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=g;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=B;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break b}else{Di(M,53,g,y,B)|0;break b}}case 66:break;default:{p=c[n>>2]|0;if(!p){k=0;l=0}else{q=c[L>>2]|0;r=c[p>>2]|0;m=r+1|0;n=m*5|0;k=n+20|0;l=q+272|0;c:do if(c[l>>2]|0)if(!(a[q+81>>0]|0))t=56;else{f=0;i=0}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<k>>>0:0))){f=q+300|0;i=c[f>>2]|0;if(i|0){c[f>>2]=c[i>>2];o=q+284|0;c[o>>2]=(c[o>>2]|0)+1;o=i;t=57;break c}f=q+296|0;i=c[f>>2]|0;if(!i){f=q+292|0;break}else{c[f>>2]=c[i>>2];o=q+284|0;c[o>>2]=(c[o>>2]|0)+1;o=i;t=57;break c}}else f=q+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;t=56}while(0);if((t|0)==56){o=_d(q,k,0)|0;t=57}d:do if((t|0)==57){if(o|0){l=o+16|0;c[l>>2]=o+20+(m<<2);b[o+6>>1]=r;b[o+8>>1]=m;a[o+4>>0]=a[q+78>>0]|0;c[o+12>>2]=q;c[o>>2]=1;gw(o+24|0,0,n+-4|0)|0;if((r|0)<=0){f=o;i=o;break}i=p+4|0;k=0;while(1){f=Yi(L,c[i>>2]|0)|0;if(!f)f=c[(c[L>>2]|0)+8>>2]|0;c[o+20+(k<<2)>>2]=f;a[(c[l>>2]|0)+k>>0]=a[i+12>>0]|0;k=k+1|0;if((k|0)==(r|0)){f=o;i=o;break d}else i=i+20|0}}f=q+81|0;if((a[f>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[f>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[l>>2]=(c[l>>2]|0)+1;f=c[q+236>>2]|0;if(f){c[f+12>>2]=7;f=o;i=0}else{f=o;i=0}}else{f=o;i=0}}while(0);k=f;f=a[s>>0]|0;l=i}do if(f<<24>>24==91){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;m=c[v>>2]|0;a[m+(f*20|0)>>0]=53;b[m+(f*20|0)+2>>1]=0;c[m+(f*20|0)+4>>2]=g;c[m+(f*20|0)+8>>2]=0;c[m+(f*20|0)+12>>2]=B;c[m+(f*20|0)+16>>2]=0;a[m+(f*20|0)+1>>0]=0;m=f;break}else{m=Di(M,53,g,0,B)|0;break}}else m=0;while(0);do if(!k){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=11;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=0;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=0;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break}else{Di(M,11,0,y,0)|0;break}}else{vm(d,C,x);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=87;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=x;c[t+(f*20|0)+8>>2]=w;c[t+(f*20|0)+12>>2]=E;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0}else Di(M,87,x,w,E)|0;f=c[M>>2]|0;e:do if(a[f+81>>0]|0){if(!((l|0)==0|(c[f+480>>2]|0)!=0)?(t=(c[l>>2]|0)+-1|0,c[l>>2]=t,(t|0)==0):0){f=c[l+12>>2]|0;do if(f|0){if(c[f+480>>2]|0){Xd(f,l);break e}i=l;if((c[f+304>>2]|0)>>>0>i>>>0)break;if((c[f+308>>2]|0)>>>0<=i>>>0)break;t=f+300|0;c[l>>2]=c[t>>2];c[t>>2]=l;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else{s=c[v>>2]|0;t=(c[j>>2]|0)+-1|0;a[s+(t*20|0)+1>>0]=-9;c[s+(t*20|0)+16>>2]=l}while(0);f=c[j>>2]|0;i=f+1|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=i;t=c[v>>2]|0;a[t+(f*20|0)>>0]=16;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=i;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=i;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break}else{Di(M,16,i,y,i)|0;break}}while(0);if(m|0){i=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))f=(c[v>>2]|0)+(((m|0)<0?i+-1|0:m)*20|0)|0;else f=59308;c[f+8>>2]=i}}}while(0);wm(L,K,C,0,c[d+20>>2]|0);i=c[M+12>>2]|0;f=0-A|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,M,f);else c[(c[i+64>>2]|0)+(f<<2)>>2]=c[j>>2];f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=5;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=C;c[K+(f*20|0)+8>>2]=u;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,5,C,u,0)|0;i=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0)){f=c[v>>2]|0;c[f+((((u|0)<1?i:u)+-1|0)*20|0)+8>>2]=i;f=f+(((u|0)<-1?i+-1|0:u+1|0)*20|0)|0}else{c[14829]=i;f=59308}c[f+8>>2]=i;if(B|0?(F=a[D>>0]|0,(F&255)<8):0){a[D>>0]=F+1<<24>>24;c[L+148+((F&255)<<2)>>2]=B}if(g|0?(G=a[D>>0]|0,(G&255)<8):0){a[D>>0]=G+1<<24>>24;c[L+148+((G&255)<<2)>>2]=g}do if(z){if((E|0)!=1){f=L+28|0;if((c[f>>2]|0)>=(E|0))break;c[f>>2]=E;c[L+32>>2]=x;break}if(x|0?(H=a[D>>0]|0,(H&255)<8):0){a[D>>0]=H+1<<24>>24;c[L+148+((H&255)<<2)>>2]=x}if(w|0?(I=a[D>>0]|0,(I&255)<8):0){a[D>>0]=I+1<<24>>24;c[L+148+((I&255)<<2)>>2]=w}}while(0);qm(c[d>>2]|0,c[J>>2]|0,1)}while(0);i=c[d+12>>2]|0;f=c[d+16>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;M=c[M+104>>2]|0;a[M+(g*20|0)>>0]=12;b[M+(g*20|0)+2>>1]=0;c[M+(g*20|0)+4>>2]=i;c[M+(g*20|0)+8>>2]=f;c[M+(g*20|0)+12>>2]=0;c[M+(g*20|0)+16>>2]=0;a[M+(g*20|0)+1>>0]=0;return}else{Di(M,12,i,f,0)|0;return}}function sm(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;n=d+8|0;j=c[n>>2]|0;a:do if(!j){m=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))r=15;else{t=0;break a}else{do if((e[m+276>>1]|0)>=224){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];t=m+284|0;c[t>>2]=(c[t>>2]|0)+1;break b}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];t=m+284|0;c[t>>2]=(c[t>>2]|0)+1;break b}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;r=15}while(0);if((r|0)==15)k=_d(m,224,0)|0;if(!k)t=0;else{j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=m;j=m+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=d;c[n>>2]=k;Di(k,61,0,1,0)|0;t=k}}else t=j;while(0);if(!f){j=t+108|0;k=c[j>>2]|0;if((c[t+112>>2]|0)>(k|0)){c[j>>2]=k+1;h=c[t+104>>2]|0;a[h+(k*20|0)>>0]=11;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=0;c[h+(k*20|0)+8>>2]=i;c[h+(k*20|0)+12>>2]=0;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0;return}else{Di(t,11,0,i,0)|0;return}}s=c[f>>2]|0;o=c[d>>2]|0;m=s+1|0;n=m*5|0;l=n+20|0;p=o+272|0;c:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))r=31;else{l=0;k=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];q=o+284|0;c[q>>2]=(c[q>>2]|0)+1;q=k;r=32;break c}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];q=o+284|0;c[q>>2]=(c[q>>2]|0)+1;q=k;r=32;break c}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;r=31}while(0);if((r|0)==31){q=_d(o,l,0)|0;r=32}if((r|0)==32){if(!q){j=o+81|0;if((a[j>>0]|0)==0?(a[o+82>>0]|0)==0:0){a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(j){c[j+12>>2]=7;l=0;k=1}else{l=0;k=1}}else{l=0;k=1}}else{c[q+16>>2]=q+20+(m<<2);b[q+6>>1]=s;b[q+8>>1]=m;a[q+4>>0]=a[o+78>>0]|0;c[q+12>>2]=o;c[q>>2]=1;gw(q+24|0,0,n+-4|0)|0;l=q;k=0}if((s|0)>0&(q|0)!=0){o=q+16|0;m=f+4|0;n=0;while(1){j=Yi(d,c[m>>2]|0)|0;if(!j)j=c[(c[d>>2]|0)+8>>2]|0;c[q+20+(n<<2)>>2]=j;a[(c[o>>2]|0)+n>>0]=a[m+12>>0]|0;n=n+1|0;if((n|0)==(s|0))break;else m=m+20|0}}}m=t+108|0;j=c[m>>2]|0;n=t+112|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=j+1;d=c[t+104>>2]|0;a[d+(j*20|0)>>0]=87;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=h;c[d+(j*20|0)+8>>2]=g;c[d+(j*20|0)+12>>2]=s;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0}else Di(t,87,h,g,s)|0;j=c[t>>2]|0;do if(a[j+81>>0]|0){if(!(k|(c[j+480>>2]|0)!=0)?(d=(c[l>>2]|0)+-1|0,c[l>>2]=d,(d|0)==0):0){j=c[l+12>>2]|0;if(j|0){if(c[j+480>>2]|0){Xd(j,l);break}d=l;if((c[j+304>>2]|0)>>>0<=d>>>0?(c[j+308>>2]|0)>>>0>d>>>0:0){d=j+300|0;c[l>>2]=c[d>>2];c[d>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{d=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else{f=c[t+104>>2]|0;d=(c[m>>2]|0)+-1|0;a[f+(d*20|0)+1>>0]=-9;c[f+(d*20|0)+16>>2]=l}while(0);j=c[m>>2]|0;k=j+1|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=k;d=c[t+104>>2]|0;a[d+(j*20|0)>>0]=16;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=i;c[d+(j*20|0)+12>>2]=k;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0}else Di(t,16,k,i,k)|0;j=s+-1|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=78;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=g;c[i+(k*20|0)+8>>2]=h;c[i+(k*20|0)+12>>2]=j;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;return}else{Di(t,78,g,h,j)|0;return}}function tm(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;y=c[d>>2]|0;l=d+4|0;u=c[l>>2]|0;A=c[d+8>>2]|0;h=a[u+16>>0]|0;s=h<<24>>24!=76;m=y+56|0;z=c[m>>2]|0;i=z+-1|0;c[m>>2]=i;m=(e|0)==2;if(m?(a[u+17>>0]|0)==87:0){A=0;return A|0}do if((f|0)>0){k=A+108|0;j=c[k>>2]|0;if(h<<24>>24!=86)if((c[A+112>>2]|0)>(j|0)){c[k>>2]=j+1;n=c[A+104>>2]|0;a[n+(j*20|0)>>0]=47;b[n+(j*20|0)+2>>1]=0;c[n+(j*20|0)+4>>2]=f;c[n+(j*20|0)+8>>2]=0;c[n+(j*20|0)+12>>2]=1;c[n+(j*20|0)+16>>2]=0;a[n+(j*20|0)+1>>0]=0;n=0;f=j;r=14;break}else{n=0;f=Di(A,47,f,0,1)|0;r=14;break}if(!m){um(d,54,c[d+44>>2]|0,f,c[d+36>>2]|0,i);n=j;f=0;r=14;break}if((a[u+17>>0]|0)==83)um(d,55,c[d+36>>2]|0,f,c[d+28>>2]|0,i);else um(d,57,c[d+28>>2]|0,f,c[d+36>>2]|0,i);l=0;m=k;k=c[k>>2]|0;r=19}else{n=0;f=0;r=14}while(0);do if((r|0)==14){if((e|0)==1){if(!(c[u+84>>2]|0))qm(c[d>>2]|0,c[l>>2]|0,0);j=A+108|0;p=c[j>>2]|0;t=c[d+36>>2]|0;q=c[d+40>>2]|0;rm(d);v=f;break}o=A+108|0;k=c[o>>2]|0;if(!m){h=c[d+44>>2]|0;j=c[d+48>>2]|0;if(!(c[u+84>>2]|0)){wm(y,u,h,0,c[d+20>>2]|0);t=h;q=j;v=f;p=k;j=o;break}i=c[u+88>>2]|0;if((c[A+112>>2]|0)>(k|0)){c[o>>2]=k+1;t=c[A+104>>2]|0;a[t+(k*20|0)>>0]=83;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=i;c[t+(k*20|0)+8>>2]=1;c[t+(k*20|0)+12>>2]=0;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=h;q=j;v=f;p=k;j=o;break}else{Di(A,83,i,1,0)|0;t=h;q=j;v=f;p=k;j=o;break}}else{j=n;l=f;m=o;r=19}}while(0);do if((r|0)==19){h=c[d+28>>2]|0;f=c[d+32>>2]|0;i=c[u+84>>2]|0;if(!i){wm(y,u,h,1,c[d+20>>2]|0);t=h;n=j;q=f;v=l;p=k;j=m;break}if((c[A+112>>2]|0)>(k|0)){c[A+108>>2]=k+1;t=c[A+104>>2]|0;a[t+(k*20|0)>>0]=83;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=i;c[t+(k*20|0)+8>>2]=1;c[t+(k*20|0)+12>>2]=0;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=h;n=j;q=f;v=l;p=k;j=m;break}else{Di(A,83,i,1,0)|0;t=h;n=j;q=f;v=l;p=k;j=m;break}}while(0);if((c[d+24>>2]|0)==(e|0)){h=A+108|0;i=c[h>>2]|0;if((c[A+112>>2]|0)>(i|0)){c[h>>2]=i+1;e=c[A+104>>2]|0;a[e+(i*20|0)>>0]=123;b[e+(i*20|0)+2>>1]=0;c[e+(i*20|0)+4>>2]=t;c[e+(i*20|0)+8>>2]=0;c[e+(i*20|0)+12>>2]=0;c[e+(i*20|0)+16>>2]=0;a[e+(i*20|0)+1>>0]=0}else Di(A,123,t,0,0)|0;h=c[h>>2]|0;if((h|0)>0)b[(c[A+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=2}h=c[j>>2]|0;do if(!g){h=(s?2:1)+h|0;f=A+108|0;i=c[f>>2]|0;k=A+112|0;if((c[k>>2]|0)>(i|0)){c[f>>2]=i+1;g=c[A+104>>2]|0;a[g+(i*20|0)>>0]=5;b[g+(i*20|0)+2>>1]=0;c[g+(i*20|0)+4>>2]=t;c[g+(i*20|0)+8>>2]=h;c[g+(i*20|0)+12>>2]=0;c[g+(i*20|0)+16>>2]=0;a[g+(i*20|0)+1>>0]=0}else Di(A,5,t,h,0)|0;if(s){j=c[f>>2]|0;if((c[k>>2]|0)>(j|0)){c[f>>2]=j+1;i=c[A+104>>2]|0;a[i+(j*20|0)>>0]=11;i=i+(j*20|0)+1|0;f=i+19|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(f|0));f=0;r=50;break}else{f=0;j=Di(A,11,0,0,0)|0;r=50;break}}else{f=0;j=0}}else{h=h+2|0;j=A+108|0;i=c[j>>2]|0;f=A+112|0;if((c[f>>2]|0)>(i|0)){c[j>>2]=i+1;g=c[A+104>>2]|0;a[g+(i*20|0)>>0]=5;b[g+(i*20|0)+2>>1]=0;c[g+(i*20|0)+4>>2]=t;c[g+(i*20|0)+8>>2]=h;c[g+(i*20|0)+12>>2]=0;c[g+(i*20|0)+16>>2]=0;a[g+(i*20|0)+1>>0]=0}else Di(A,5,t,h,0)|0;h=c[j>>2]|0;if((c[f>>2]|0)>(h|0)){c[j>>2]=h+1;i=c[A+104>>2]|0;a[i+(h*20|0)>>0]=11;i=i+(h*20|0)+1|0;f=i+19|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(f|0))}else h=Di(A,11,0,0,0)|0;if(s){f=h;j=0;r=50}else{f=h;j=0}}while(0);do if((r|0)==50){o=u+12|0;h=c[o>>2]|0;a:do if(!h){k=0;i=0}else{i=c[h>>2]|0;switch(i|0){case 0:{k=i;break a}case 1:{h=y+19|0;i=a[h>>0]|0;if(!(i<<24>>24)){i=y+44|0;k=(c[i>>2]|0)+1|0;c[i>>2]=k;i=1;break a}else{k=i+-1<<24>>24;a[h>>0]=k;k=c[y+148+((k&255)<<2)>>2]|0;i=1;break a}}default:{h=y+32|0;k=c[h>>2]|0;l=y+28|0;m=c[l>>2]|0;if((m|0)<(i|0)){u=y+44|0;k=c[u>>2]|0;c[u>>2]=k+i;k=k+1|0;break a}else{c[h>>2]=k+i;c[l>>2]=m-i;break a}}}}while(0);vm(d,t,k);sm(y,c[o>>2]|0,k,q,p);if((i|0)!=1){h=y+28|0;if((c[h>>2]|0)>=(i|0))break;c[h>>2]=i;c[y+32>>2]=k;break}if((k|0)!=0?(w=y+19|0,x=a[w>>0]|0,(x&255)<8):0){a[w>>0]=x+1<<24>>24;c[y+148+((x&255)<<2)>>2]=k}}while(0);do if(n|0){h=A+108|0;i=c[h>>2]|0;if((c[A+112>>2]|0)>(i|0)){c[h>>2]=i+1;y=c[A+104>>2]|0;a[y+(i*20|0)>>0]=11;b[y+(i*20|0)+2>>1]=0;c[y+(i*20|0)+4>>2]=0;c[y+(i*20|0)+8>>2]=n;c[y+(i*20|0)+12>>2]=0;c[y+(i*20|0)+16>>2]=0;a[y+(i*20|0)+1>>0]=0;break}else{Di(A,11,0,n,0)|0;break}}while(0);i=c[A+12>>2]|0;h=0-z|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,A,h);else c[(c[i+64>>2]|0)+(h<<2)>>2]=c[A+108>>2];if(j|0){i=c[A+108>>2]|0;if(!(a[(c[A>>2]|0)+81>>0]|0))h=(c[A+104>>2]|0)+(((j|0)<0?i+-1|0:j)*20|0)|0;else h=59308;c[h+8>>2]=i}if(!v){A=f;return A|0}i=c[A+108>>2]|0;if(!(a[(c[A>>2]|0)+81>>0]|0))h=(c[A+104>>2]|0)+(((v|0)<0?i+-1|0:v)*20|0)|0;else h=59308;c[h+8>>2]=i;A=f;return A|0}function um(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=c[d>>2]|0;o=w+8|0;k=c[o>>2]|0;a:do if(!k){n=c[w>>2]|0;if((c[w+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[w+23>>0]=1;b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))p=15;else{t=0;break a}else{do if((e[n+276>>1]|0)>=224){k=n+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];u=n+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}k=n+296|0;l=c[k>>2]|0;if(!l){k=n+292|0;break}else{c[k>>2]=c[l>>2];u=n+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}}else k=n+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;p=15}while(0);if((p|0)==15)l=_d(n,224,0)|0;if(!l)t=0;else{k=l+104|0;m=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));c[l>>2]=n;k=n+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=w;c[o>>2]=l;Di(l,61,0,1,0)|0;t=l}}else t=k;while(0);u=w+19|0;l=a[u>>0]|0;if(l<<24>>24){s=l+-1<<24>>24;a[u>>0]=s;k=c[w+148+((s&255)<<2)>>2]|0;if(!(s<<24>>24))p=23;else{s=l+-2<<24>>24;a[u>>0]=s;q=w+44|0;r=k;s=c[w+148+((s&255)<<2)>>2]|0;l=q;k=c[q>>2]|0}}else{p=w+44|0;k=(c[p>>2]|0)+1|0;c[p>>2]=k;p=23}if((p|0)==23){l=w+44|0;q=(c[l>>2]|0)+1|0;c[l>>2]=q;r=k;s=q;k=q}p=k+1|0;c[l>>2]=p;n=(a[(c[(c[d+4>>2]|0)+12>>2]|0)+16>>0]|0)==0;q=n?100:101;f=n?f:(f|0)==57?55:(f|0)==54?56:57;vm(d,g,r);vm(d,i,s);n=t+108|0;k=c[n>>2]|0;o=t+112|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=110;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=0;c[i+(k*20|0)+8>>2]=p;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(t,110,0,p,0)|0;do if(!(a[(c[t>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;l=c[t+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=59952;a[m>>0]=-1;break}else{Ei(t,l+(k*20|0)|0,59952,-1);break}}while(0);k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=57;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=p;c[i+(k*20|0)+8>>2]=0;c[i+(k*20|0)+12>>2]=r;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(t,57,p,0,r)|0;l=c[n>>2]|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;i=c[t+104>>2]|0;a[i+(l*20|0)>>0]=q;b[i+(l*20|0)+2>>1]=0;c[i+(l*20|0)+4>>2]=h;c[i+(l*20|0)+8>>2]=r;c[i+(l*20|0)+12>>2]=r;c[i+(l*20|0)+16>>2]=0;a[i+(l*20|0)+1>>0]=0}else Di(t,q,h,r,r)|0;l=c[n>>2]|0;if(!(a[(c[t>>2]|0)+81>>0]|0))k=(c[t+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;h=c[t+104>>2]|0;a[h+(l*20|0)>>0]=f;b[h+(l*20|0)+2>>1]=0;c[h+(l*20|0)+4>>2]=s;c[h+(l*20|0)+8>>2]=j;c[h+(l*20|0)+12>>2]=r;c[h+(l*20|0)+16>>2]=0;a[h+(l*20|0)+1>>0]=0}else Di(t,f,s,j,r)|0;k=c[n>>2]|0;if((k|0)>0)b[(c[t+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=128;if(r|0?(v=a[u>>0]|0,(v&255)<8):0){a[u>>0]=v+1<<24>>24;c[w+148+((v&255)<<2)>>2]=r}if(!s)return;k=a[u>>0]|0;if((k&255)>=8)return;a[u>>0]=k+1<<24>>24;c[w+148+((k&255)<<2)>>2]=s;return}function vm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=c[d+4>>2]|0;o=c[g+12>>2]|0;if(!o)return;n=Ej(c[d>>2]|0)|0;d=c[g+8>>2]|0;if(!d)d=0;else d=c[d>>2]|0;g=d+(c[g+72>>2]|0)|0;if((c[o>>2]|0)<=0)return;h=n+108|0;i=n+112|0;j=n+104|0;d=0;do{k=g+d|0;l=d+f|0;m=c[h>>2]|0;if((c[i>>2]|0)>(m|0)){c[h>>2]=m+1;p=c[j>>2]|0;a[p+(m*20|0)>>0]=90;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=e;c[p+(m*20|0)+8>>2]=k;c[p+(m*20|0)+12>>2]=l;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0}else Di(n,90,e,k,l)|0;d=d+1|0}while((d|0)<(c[o>>2]|0));return}function wm(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;m=d+8|0;j=c[m>>2]|0;a:do if(!j){l=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[l+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))F=15;else{j=0;break a}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];E=l+284|0;c[E>>2]=(c[E>>2]|0)+1;break b}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];E=l+284|0;c[E>>2]=(c[E>>2]|0)+1;break b}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;F=15}while(0);if((F|0)==15)j=_d(l,224,0)|0;if(!j)j=0;else{n=j+104|0;o=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(o|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=d;c[m>>2]=j;Di(j,61,0,1,0)|0}}while(0);if(!f)return;t=f+84|0;u=j+108|0;v=j+112|0;w=f+44|0;x=j+104|0;y=1-h|0;z=(h|0)==0;A=d+19|0;B=z?154:153;C=d+44|0;D=B&255;E=i+1|0;s=f;do{r=c[s+40>>2]|0;q=s+68|0;k=c[(c[q>>2]|0)+20>>2]|0;if(k){o=c[k>>2]|0;if((o|0)>0){f=r+32|0;p=s+76|0;n=0;do{do if((n|0)==1?(c[f>>2]|0)==43457:0){k=c[w>>2]|0;l=(c[p>>2]|0)+1|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=90;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=k;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=E;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,90,k,l,E)|0;break}}else F=27;while(0);do if((F|0)==27){F=0;k=(c[p>>2]|0)+n|0;l=n+i|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=90;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=g;c[H+(m*20|0)+8>>2]=k;c[H+(m*20|0)+12>>2]=l;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,90,g,k,l)|0;break}}while(0);n=n+1|0}while((n|0)!=(o|0));p=o}else p=o}else p=0;if(((c[t>>2]|0)==0?(c[r+4>>2]&4096|0)!=0:0)?(a[s+17>>0]|0)!=87:0){k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;H=c[x>>2]|0;a[H+(k*20|0)>>0]=50;b[H+(k*20|0)+2>>1]=0;c[H+(k*20|0)+4>>2]=i;c[H+(k*20|0)+8>>2]=0;c[H+(k*20|0)+12>>2]=0;c[H+(k*20|0)+16>>2]=0;a[H+(k*20|0)+1>>0]=0}else k=Di(j,50,i,0,0)|0;do if(z){o=s+60|0;l=(c[o>>2]|0)+1|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=83;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=l;c[H+(m*20|0)+8>>2]=1;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,83,l,1,0)|0;l=c[o>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=79;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=i;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,79,i,l,0)|0;l=c[o>>2]|0;m=l+2|0;n=c[u>>2]|0;if((c[v>>2]|0)>(n|0)){c[u>>2]=n+1;H=c[x>>2]|0;a[H+(n*20|0)>>0]=92;b[H+(n*20|0)+2>>1]=0;c[H+(n*20|0)+4>>2]=l;c[H+(n*20|0)+8>>2]=2;c[H+(n*20|0)+12>>2]=m;c[H+(n*20|0)+16>>2]=0;a[H+(n*20|0)+1>>0]=0}else Di(j,92,l,2,m)|0;n=c[s+56>>2]|0;l=(c[o>>2]|0)+2|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=-124;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=n;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,132,n,l,0)|0;break}}else{n=s+56|0;m=c[n>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=24;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=m;c[H+(l*20|0)+8>>2]=0;c[H+(l*20|0)+12>>2]=i;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else l=Di(j,24,m,0,i)|0;if(!(a[(c[j>>2]|0)+81>>0]|0)){H=c[x>>2]|0;a[H+(l*20|0)+1>>0]=-3;c[H+(l*20|0)+16>>2]=1}l=c[n>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=123;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=l;c[H+(m*20|0)+8>>2]=0;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,123,l,0,0)|0;m=c[u>>2]|0;if(!(a[(c[j>>2]|0)+81>>0]|0))l=(c[x>>2]|0)+((((m|0)<2?-1:-2)+m|0)*20|0)|0;else l=59308;c[l+8>>2]=m}while(0);l=c[u>>2]|0;if(!(a[(c[j>>2]|0)+81>>0]|0))k=(c[x>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l}else F=67;do if((F|0)==67){F=0;k=c[s+60>>2]|0;if(k|0){k=y+k|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=83;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=k;c[H+(l*20|0)+8>>2]=1;c[H+(l*20|0)+12>>2]=0;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0;break}else{Di(j,83,k,1,0)|0;break}}if((c[r+16>>2]|0)!=110){if(c[s+36>>2]|0){k=a[A>>0]|0;if(!(k<<24>>24)){m=(c[C>>2]|0)+1|0;c[C>>2]=m}else{m=k+-1<<24>>24;a[A>>0]=m;m=c[d+148+((m&255)<<2)>>2]|0}k=(c[s+76>>2]|0)+p|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=90;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=g;c[H+(l*20|0)+8>>2]=k;c[H+(l*20|0)+12>>2]=m;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else Di(j,90,g,k,m)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;H=c[x>>2]|0;a[H+(k*20|0)>>0]=20;b[H+(k*20|0)+2>>1]=0;c[H+(k*20|0)+4>>2]=m;c[H+(k*20|0)+8>>2]=0;c[H+(k*20|0)+12>>2]=1;c[H+(k*20|0)+16>>2]=0;a[H+(k*20|0)+1>>0]=0}else k=Di(j,20,m,0,1)|0;if((m|0)!=0?(G=a[A>>0]|0,(G&255)<8):0){a[A>>0]=G+1<<24>>24;c[d+148+((G&255)<<2)>>2]=m;f=k}else f=k}else f=0;do if(c[r+4>>2]&32|0){k=Yi(d,c[(c[(c[q>>2]|0)+20>>2]|0)+4>>2]|0)|0;if(!k)k=c[(c[d>>2]|0)+8>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;n=c[x>>2]|0;a[n+(l*20|0)>>0]=82;n=n+(l*20|0)+1|0;o=n+19|0;do{a[n>>0]=0;n=n+1|0}while((n|0)<(o|0))}else l=Di(j,82,0,0,0)|0;if(!(a[(c[j>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[u>>2]|0)+-1|0;m=c[x>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(j,m+(l*20|0)|0,k,-2);break}if(k|0){c[m+(l*20|0)+16>>2]=k;a[n>>0]=-2}}}while(0);k=c[s+48>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=D;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=h;c[H+(l*20|0)+8>>2]=i;c[H+(l*20|0)+12>>2]=k;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else Di(j,B,h,i,k)|0;k=c[j>>2]|0;do if(a[k+81>>0]|0){if(c[r+4>>2]&16|0){if(k|0){if(c[k+480>>2]|0){Xd(k,r);break}H=r;if((c[k+304>>2]|0)>>>0<=H>>>0?(c[k+308>>2]|0)>>>0>H>>>0:0){H=k+300|0;c[r>>2]=c[H>>2];c[H>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{H=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}}else{q=c[x>>2]|0;H=(c[u>>2]|0)+-1|0;a[q+(H*20|0)+1>>0]=-8;c[q+(H*20|0)+16>>2]=r}while(0);l=c[u>>2]|0;if((l|0)>0)b[(c[x>>2]|0)+((l+-1|0)*20|0)+2>>1]=p&255;if(f|0){if(!(a[(c[j>>2]|0)+81>>0]|0))k=(c[x>>2]|0)+(((f|0)<0?l+-1|0:f)*20|0)|0;else k=59308;c[k+8>>2]=l}}}while(0);s=c[s+32>>2]|0}while((s|0)!=0);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;return}function ym(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=c[d+8>>2]|0;n=d+19|0;i=a[n>>0]|0;if(!(i<<24>>24)){k=d+44|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l}else{l=i+-1<<24>>24;a[n>>0]=l;l=c[d+148+((l&255)<<2)>>2]|0}k=m+108|0;i=c[k>>2]|0;j=m+112|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=29;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=e;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else i=Di(m,29,e,f,h)|0;if(!(a[(c[m>>2]|0)+81>>0]|0)){o=c[m+104>>2]|0;a[o+(i*20|0)+1>>0]=-3;c[o+(i*20|0)+16>>2]=g}i=c[k>>2]|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=92;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=g;c[o+(i*20|0)+12>>2]=l;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(m,92,h,g,l)|0;i=c[k>>2]|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=-124;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=e;c[o+(i*20|0)+8>>2]=l;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else i=Di(m,132,e,l,h)|0;if(!(a[(c[m>>2]|0)+81>>0]|0)){o=c[m+104>>2]|0;a[o+(i*20|0)+1>>0]=-3;c[o+(i*20|0)+16>>2]=g}i=c[k>>2]|0;if((i|0)>0)b[(c[m+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=16;if(!l)return;i=a[n>>0]|0;if((i&255)>=8)return;a[n>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=l;return}function zm(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;E=d+8|0;J=c[E>>2]|0;F=f+32|0;n=a[F>>0]&1;p=n<<24>>24==0;n=(n^1)&255;l=c[f>>2]|0;C=c[l>>2]|0;H=C+n+j|0;D=f+4|0;I=c[D>>2]|0;o=(k|0)==0;if(o){B=d+44|0;G=c[B>>2]|0;c[B>>2]=G+H;G=G+1|0}else G=h-k|0;k=c[g+16>>2]|0;if(!k)B=c[g+12>>2]|0;else B=k+1|0;z=d+56|0;y=(c[z>>2]|0)+-1|0;c[z>>2]=y;A=f+24|0;c[A>>2]=y;Oj(d,l,G,i,(i|0)==0?1:5);do if(p){k=c[f+8>>2]|0;l=G+C|0;i=J+108|0;m=c[i>>2]|0;if((c[J+112>>2]|0)>(m|0)){c[i>>2]=m+1;y=c[J+104>>2]|0;a[y+(m*20|0)>>0]=120;b[y+(m*20|0)+2>>1]=0;c[y+(m*20|0)+4>>2]=k;c[y+(m*20|0)+8>>2]=l;c[y+(m*20|0)+12>>2]=0;c[y+(m*20|0)+16>>2]=0;a[y+(m*20|0)+1>>0]=0;break}else{Di(J,120,k,l,0)|0;break}}while(0);do if((j|0)>0&o){l=G+C+n|0;k=c[E>>2]|0;i=k+108|0;m=c[i>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[i>>2]=m+1;y=c[k+104>>2]|0;a[y+(m*20|0)>>0]=77;b[y+(m*20|0)+2>>1]=0;c[y+(m*20|0)+4>>2]=h;c[y+(m*20|0)+8>>2]=l;c[y+(m*20|0)+12>>2]=j;c[y+(m*20|0)+16>>2]=0;a[y+(m*20|0)+1>>0]=0;break}else{Di(k,77,h,l,j)|0;break}}while(0);if((I|0)>0){l=c[D>>2]|0;n=c[E>>2]|0;w=d+44|0;o=(c[w>>2]|0)+1|0;c[w>>2]=o;k=c[f+36>>2]|0;if(k|0)Oj(d,c[g>>2]|0,c[k>>2]|0,0,a[k+4>>0]|0);m=l+G|0;k=H-l|0;l=n+108|0;i=c[l>>2]|0;if((c[n+112>>2]|0)>(i|0)){c[l>>2]=i+1;y=c[n+104>>2]|0;a[y+(i*20|0)>>0]=92;b[y+(i*20|0)+2>>1]=0;c[y+(i*20|0)+4>>2]=m;c[y+(i*20|0)+8>>2]=k;c[y+(i*20|0)+12>>2]=o;c[y+(i*20|0)+16>>2]=0;a[y+(i*20|0)+1>>0]=0}else Di(n,92,m,k,o)|0;v=c[w>>2]|0;y=v+1|0;n=c[D>>2]|0;c[w>>2]=n+v;do if(p){k=G+C|0;m=J+108|0;l=c[m>>2]|0;i=J+112|0;if((c[i>>2]|0)>(l|0)){c[m>>2]=l+1;u=c[J+104>>2]|0;a[u+(l*20|0)>>0]=20;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=0;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;v=m;break}else{u=Di(J,20,k,0,0)|0;v=m;break}}else{k=c[f+8>>2]|0;m=J+108|0;l=c[m>>2]|0;i=J+112|0;if((c[i>>2]|0)>(l|0)){c[m>>2]=l+1;u=c[J+104>>2]|0;a[u+(l*20|0)>>0]=115;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=0;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;v=m;break}else{u=Di(J,115,k,0,0)|0;v=m;break}}while(0);k=c[D>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;t=c[J+104>>2]|0;a[t+(l*20|0)>>0]=87;b[t+(l*20|0)+2>>1]=0;c[t+(l*20|0)+4>>2]=y;c[t+(l*20|0)+8>>2]=G;c[t+(l*20|0)+12>>2]=k;c[t+(l*20|0)+16>>2]=0;a[t+(l*20|0)+1>>0]=0}else Di(J,87,y,G,k)|0;k=c[f+20>>2]|0;if((k|0)<0)k=(c[v>>2]|0)+-1|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(k*20|0)|0;else k=59308;if(a[(c[d>>2]|0)+81>>0]|0)return;c[k+8>>2]=H-n;t=k+16|0;n=c[t>>2]|0;h=n+6|0;gw(c[n+16>>2]|0,0,e[h>>1]|0)|0;k=c[J>>2]|0;a:do if(!(a[k+81>>0]|0)){k=(c[v>>2]|0)+-1|0;l=c[J+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(J,l+(k*20|0)|0,n,-9);break}if(n|0){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9}}else if(!((n|0)==0|(c[k+480>>2]|0)!=0)?(s=(c[n>>2]|0)+-1|0,c[n>>2]=s,(s|0)==0):0){k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;s=k+300|0;c[n>>2]=c[s>>2];c[s>>2]=n;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);r=c[f>>2]|0;q=c[d>>2]|0;s=c[r>>2]|0;p=s-I|0;n=p+((e[n+8>>1]|0)-(e[h>>1]|0))|0;h=n*5|0;m=h+20|0;j=q+272|0;b:do if(c[j>>2]|0)if(!(a[q+81>>0]|0))x=62;else k=0;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){l=q+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;x=63;break b}l=q+296|0;k=c[l>>2]|0;if(!k){k=q+292|0;break}else{c[l>>2]=c[k>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;x=63;break b}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;x=62}while(0);if((x|0)==62){k=_d(q,m,0)|0;x=63}if((x|0)==63){do if(!k){l=q+81|0;if((a[l>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[j>>2]=(c[j>>2]|0)+1;l=c[q+236>>2]|0;if(!l)break;c[l+12>>2]=7}}else{c[k+16>>2]=k+20+(n<<2);b[k+6>>1]=p;b[k+8>>1]=n;a[k+4>>0]=a[q+78>>0]|0;c[k+12>>2]=q;c[k>>2]=1;gw(k+24|0,0,h+-4|0)|0}while(0);if((s|0)>(I|0)&(k|0)!=0){h=k+16|0;m=r+4+(I*20|0)|0;n=I;while(1){l=Yi(d,c[m>>2]|0)|0;if(!l)l=c[(c[d>>2]|0)+8>>2]|0;x=n-I|0;c[k+20+(x<<2)>>2]=l;a[(c[h>>2]|0)+x>>0]=a[m+12>>0]|0;n=n+1|0;if((n|0)==(s|0))break;else m=m+20|0}}}c[t>>2]=k;n=c[v>>2]|0;k=n+1|0;if((c[i>>2]|0)>(n|0)){c[v>>2]=k;x=c[J+104>>2]|0;a[x+(n*20|0)>>0]=16;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=k;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=k;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0}else Di(J,16,k,0,k)|0;m=(c[z>>2]|0)+-1|0;c[z>>2]=m;c[f+16>>2]=m;l=(c[w>>2]|0)+1|0;c[w>>2]=l;c[f+12>>2]=l;k=c[v>>2]|0;if((c[i>>2]|0)>(k|0)){c[v>>2]=k+1;z=c[J+104>>2]|0;a[z+(k*20|0)>>0]=12;b[z+(k*20|0)+2>>1]=0;c[z+(k*20|0)+4>>2]=l;c[z+(k*20|0)+8>>2]=m;c[z+(k*20|0)+12>>2]=0;c[z+(k*20|0)+16>>2]=0;a[z+(k*20|0)+1>>0]=0}else Di(J,12,l,m,0)|0;k=c[f+8>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;z=c[J+104>>2]|0;a[z+(l*20|0)>>0]=-118;b[z+(l*20|0)+2>>1]=0;c[z+(l*20|0)+4>>2]=k;c[z+(l*20|0)+8>>2]=0;c[z+(l*20|0)+12>>2]=0;c[z+(l*20|0)+16>>2]=0;a[z+(l*20|0)+1>>0]=0}else Di(J,138,k,0,0)|0;do if(B|0){k=c[A>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;A=c[J+104>>2]|0;a[A+(l*20|0)>>0]=20;b[A+(l*20|0)+2>>1]=0;c[A+(l*20|0)+4>>2]=B;c[A+(l*20|0)+8>>2]=k;c[A+(l*20|0)+12>>2]=0;c[A+(l*20|0)+16>>2]=0;a[A+(l*20|0)+1>>0]=0;break}else{Di(J,20,B,k,0)|0;break}}while(0);l=c[v>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((u|0)<0?l+-1|0:u)*20|0)|0;else k=59308;c[k+8>>2]=l;l=c[D>>2]|0;k=c[E>>2]|0;i=k+108|0;m=c[i>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[i>>2]=m+1;A=c[k+104>>2]|0;a[A+(m*20|0)>>0]=77;b[A+(m*20|0)+2>>1]=0;c[A+(m*20|0)+4>>2]=G;c[A+(m*20|0)+8>>2]=y;c[A+(m*20|0)+12>>2]=l;c[A+(m*20|0)+16>>2]=0;a[A+(m*20|0)+1>>0]=0}else Di(k,77,G,y,l)|0;l=c[v>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((n|0)<0?l+-1|0:n)*20|0)|0;else k=59308;c[k+8>>2]=l}else o=0;do if(B){m=c[f+8>>2]|0;i=J+108|0;k=c[i>>2]|0;l=k+4|0;n=J+112|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;A=c[J+104>>2]|0;a[A+(k*20|0)>>0]=48;b[A+(k*20|0)+2>>1]=0;c[A+(k*20|0)+4>>2]=B;c[A+(k*20|0)+8>>2]=l;c[A+(k*20|0)+12>>2]=0;c[A+(k*20|0)+16>>2]=0;a[A+(k*20|0)+1>>0]=0}else Di(J,48,B,l,0)|0;k=c[i>>2]|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;B=c[J+104>>2]|0;a[B+(k*20|0)>>0]=32;b[B+(k*20|0)+2>>1]=0;c[B+(k*20|0)+4>>2]=m;c[B+(k*20|0)+8>>2]=0;c[B+(k*20|0)+12>>2]=0;c[B+(k*20|0)+16>>2]=0;a[B+(k*20|0)+1>>0]=0}else Di(J,32,m,0,0)|0;l=G+I|0;k=c[i>>2]|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;B=c[J+104>>2]|0;a[B+(k*20|0)>>0]=37;b[B+(k*20|0)+2>>1]=0;c[B+(k*20|0)+4>>2]=m;c[B+(k*20|0)+8>>2]=0;c[B+(k*20|0)+12>>2]=l;c[B+(k*20|0)+16>>2]=0;a[B+(k*20|0)+1>>0]=0}else k=Di(J,37,m,0,l)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){B=c[J+104>>2]|0;a[B+(k*20|0)+1>>0]=-3;c[B+(k*20|0)+16>>2]=C-I}l=c[i>>2]|0;if((c[n>>2]|0)>(l|0)){c[i>>2]=l+1;C=c[J+104>>2]|0;a[C+(l*20|0)>>0]=123;b[C+(l*20|0)+2>>1]=0;c[C+(l*20|0)+4>>2]=m;c[C+(l*20|0)+8>>2]=0;c[C+(l*20|0)+12>>2]=0;c[C+(l*20|0)+16>>2]=0;a[C+(l*20|0)+1>>0]=0;break}else{Di(J,123,m,0,0)|0;break}}else k=0;while(0);do if(!o){i=c[D>>2]|0;h=c[E>>2]|0;l=d+44|0;o=(c[l>>2]|0)+1|0;c[l>>2]=o;l=c[f+36>>2]|0;if(l|0)Oj(d,c[g>>2]|0,c[l>>2]|0,0,a[l+4>>0]|0);n=i+G|0;l=H-i|0;i=h+108|0;m=c[i>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[i>>2]=m+1;g=c[h+104>>2]|0;a[g+(m*20|0)>>0]=92;b[g+(m*20|0)+2>>1]=0;c[g+(m*20|0)+4>>2]=n;c[g+(m*20|0)+8>>2]=l;c[g+(m*20|0)+12>>2]=o;c[g+(m*20|0)+16>>2]=0;a[g+(m*20|0)+1>>0]=0;break}else{Di(h,92,n,l,o)|0;break}}while(0);m=132-(a[F>>0]&1)|0;n=c[f+8>>2]|0;i=G+I|0;h=J+108|0;l=c[h>>2]|0;if((c[J+112>>2]|0)>(l|0)){c[h>>2]=l+1;G=c[J+104>>2]|0;a[G+(l*20|0)>>0]=m;b[G+(l*20|0)+2>>1]=0;c[G+(l*20|0)+4>>2]=n;c[G+(l*20|0)+8>>2]=o;c[G+(l*20|0)+12>>2]=i;c[G+(l*20|0)+16>>2]=0;a[G+(l*20|0)+1>>0]=0}else l=Di(J,m,n,o,i)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){G=c[J+104>>2]|0;a[G+(l*20|0)+1>>0]=-3;c[G+(l*20|0)+16>>2]=H-I}if(!k)return;l=c[f+28>>2]|0;if(!l){l=c[h>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;return}if((k|0)<0)k=(c[h>>2]|0)+-1|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(k*20|0)|0;else k=59308;c[k+8>>2]=l;return}function Am(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+64|0;l=m;if((a[d>>0]|0)==44){l=0;Ra=m;return l|0}e=c[b+24>>2]|0;j=c[b>>2]|0;i=c[e+40>>2]|0;k=l+20|0;a[k>>0]=1;c[l+4>>2]=149;c[l+8>>2]=0;c[l+24>>2]=i;c[l>>2]=j;_j(l,d)|0;if(!(a[k>>0]|0)){l=1;Ra=m;return l|0}j=c[c[b>>2]>>2]|0;k=oj(j,147,17144,0)|0;if(!k){l=1;Ra=m;return l|0}e=e+36|0;f=c[e>>2]|0;g=l;h=k;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=k;h=d;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=d;h=l;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=Xk(j,f,k)|0;c[e>>2]=l;a[b+20>>0]=1;l=1;Ra=m;return l|0}function Bm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=c[b+24>>2]|0;a:do if((c[h>>2]|0)>0){g=0;while(1){e=c[h+4+(g*20|0)>>2]|0;if((bk(0,d,e,-1)|0)<2){f=c[b>>2]|0;e=Yi(f,e)|0;if(!e){e=c[(c[f>>2]|0)+8>>2]|0;if(!e){e=1;f=12;break}}if((c[e+12>>2]|0)==78?(c[e+8>>2]|0)==0:0){e=1;f=12;break}}g=g+1|0;if((g|0)>=(c[h>>2]|0))break a}if((f|0)==12)return e|0}while(0);if(!(c[d+4>>2]&2048)){d=Yj(b,d)|0;return d|0}else{a[b+20>>0]=0;d=2;return d|0}return 0}function Cm(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=c[f+24>>2]|0;s=c[h>>2]|0;j=c[h+4>>2]|0;t=c[h+8>>2]|0;switch(a[g>>0]|0){case -94:case -92:{if(!j){t=1;return t|0}i=c[j>>2]|0;if((i|0)<=0){t=1;return t|0}o=g+28|0;l=c[o>>2]|0;h=0;f=j+8|0;while(1){if((l|0)==(c[f+40>>2]|0))break;h=h+1|0;if((h|0)>=(i|0)){f=1;r=80;break}else f=f+72|0}if((r|0)==80)return f|0;j=t+28|0;n=t+32|0;p=c[n>>2]|0;a:do if((p|0)>0){k=c[j>>2]|0;i=g+32|0;h=k;f=0;while(1){if((c[h+4>>2]|0)==(l|0)?(c[h+8>>2]|0)==(b[i>>1]|0):0)break a;f=f+1|0;if((f|0)>=(p|0))break;else h=h+24|0}m=j;f=k;r=13}else{m=j;f=c[j>>2]|0;r=13}while(0);b:do if((r|0)==13){l=c[s>>2]|0;h=((p|0)<0)<<31>>31;k=Sv(p|0,h|0,-1,-1)|0;c:do if((k&p|0)==0&((L()|0)&h|0)==0){i=(p|0)==0;j=Yv(p|0,h|0,48,0)|0;k=L()|0;j=i?24:j;k=i?0:k;d:do if(!f){if(c[l+272>>2]|0){if(a[l+81>>0]|0){f=0;break}}else{do if(!(k>>>0>0|((k|0)==0?j>>>0>(e[l+276>>1]|0)>>>0:0))){i=l+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=l+284|0;c[r>>2]=(c[r>>2]|0)+1;r=31;break d}i=l+296|0;h=c[i>>2]|0;if(!h){h=l+292|0;break}else{c[i>>2]=c[h>>2];r=l+284|0;c[r>>2]=(c[r>>2]|0)+1;r=31;break d}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,j,k)|0;r=31}else{r=f;if((c[l+304>>2]|0)>>>0<=r>>>0?(c[l+308>>2]|0)>>>0>r>>>0:0){if(!(k>>>0>0|((k|0)==0?j>>>0>(e[l+276>>1]|0)>>>0:0)))break c;h=Zd(l,f,j,k)|0;r=31;break}h=Zd(l,f,j,k)|0;r=31}while(0);if((r|0)==31)if(h){f=h;break}c[m>>2]=f;f=-1;break b}while(0);h=f+(p*24|0)|0;j=h+24|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));c[n>>2]=(c[n>>2]|0)+1;c[m>>2]=f;if((p|0)>-1){c[f+(p*24|0)>>2]=c[g+44>>2];j=c[o>>2]|0;c[f+(p*24|0)+4>>2]=j;k=b[g+32>>1]|0;c[f+(p*24|0)+8>>2]=k<<16>>16;s=s+44|0;i=(c[s>>2]|0)+1|0;c[s>>2]=i;c[f+(p*24|0)+16>>2]=i;i=f+(p*24|0)+12|0;c[i>>2]=-1;c[f+(p*24|0)+20>>2]=g;f=c[t+24>>2]|0;e:do if(f|0?(q=c[f>>2]|0,(q|0)>0):0){h=f+4|0;f=0;while(1){s=c[h>>2]|0;if(((a[s>>0]|0)==-94?(c[s+28>>2]|0)==(j|0):0)?(b[s+32>>1]|0)==k<<16>>16:0)break;f=f+1|0;if((f|0)<(q|0))h=h+20|0;else break e}c[i>>2]=f;f=p;break b}while(0);s=t+12|0;f=c[s>>2]|0;c[s>>2]=f+1;c[i>>2]=f;f=p}else f=p}while(0);c[g+40>>2]=t;a[g>>0]=-92;b[g+34>>1]=f;t=1;return t|0}case -93:{if(b[h+24>>1]&8){t=0;return t|0}if((c[f+16>>2]|0)!=(d[g+38>>0]|0)){t=0;return t|0}p=t+40|0;o=t+44|0;h=c[o>>2]|0;f:do if((h|0)>0){h=c[p>>2]|0;f=0;while(1){if(!(bk(0,c[h>>2]|0,g,-1)|0))break;f=f+1|0;i=c[o>>2]|0;if((f|0)<(i|0))h=h+16|0;else break f}i=c[o>>2]|0}else{f=0;i=h}while(0);g:do if((f|0)>=(i|0)){m=c[s>>2]|0;n=a[m+78>>0]|0;f=c[p>>2]|0;h=((i|0)<0)<<31>>31;q=Sv(i|0,h|0,-1,-1)|0;h:do if((q&i|0)==0&((L()|0)&h|0)==0){q=(i|0)==0;k=cw(i|0,h|0,5)|0;l=L()|0;k=q?16:k;l=q?0:l;i:do if(!f){if(c[m+272>>2]|0){if(a[m+81>>0]|0){f=0;break}}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[m+276>>1]|0)>>>0:0))){j=m+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=71;break i}j=m+296|0;h=c[j>>2]|0;if(!h){h=m+292|0;break}else{c[j>>2]=c[h>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=71;break i}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(m,k,l)|0;r=71}else{r=f;if((c[m+304>>2]|0)>>>0<=r>>>0?(c[m+308>>2]|0)>>>0>r>>>0:0){if(!(l>>>0>0|((l|0)==0?k>>>0>(e[m+276>>1]|0)>>>0:0)))break h;h=Zd(m,f,k,l)|0;r=71;break}h=Zd(m,f,k,l)|0;r=71}while(0);if((r|0)==71)if(h){f=h;break}c[p>>2]=f;f=-1;break g}while(0);h=f+(i<<4)|0;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));c[o>>2]=(c[o>>2]|0)+1;c[p>>2]=f;if((i|0)>-1){c[f+(i<<4)>>2]=g;r=s+44|0;h=(c[r>>2]|0)+1|0;c[r>>2]=h;c[f+(i<<4)+8>>2]=h;h=c[g+20>>2]|0;if(!h)h=0;else h=c[h>>2]|0;r=Jd(c[s>>2]|0,c[g+8>>2]|0,h,n,0)|0;c[f+(i<<4)+4>>2]=r;if(!(c[g+4>>2]&2)){c[f+(i<<4)+12>>2]=-1;f=i;break}else{r=s+40|0;s=c[r>>2]|0;c[r>>2]=s+1;c[f+(i<<4)+12>>2]=s;f=i;break}}else f=i}while(0);b[g+34>>1]=f;c[g+40>>2]=t;t=1;return t|0}default:{t=0;return t|0}}return 0}function Dm(a,b){a=a|0;b=b|0;b=a+16|0;c[b>>2]=(c[b>>2]|0)+1;return 0}function Em(a,b){a=a|0;b=b|0;b=a+16|0;c[b>>2]=(c[b>>2]|0)+-1;return}function Fm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l+8|0;i=l;do if(!(c[d+56>>2]|0)){f=c[d+36>>2]|0;if(f&1025|0){g=c[b>>2]|0;h=c[g+32>>2]|0;if(f&1|0){if((h&268435457|0)==1&0==0)break;if(!(a[b+18>>0]|0)){k=12;break}else break}if((!((h&268435456|0)==0&0==0)?(c[g+352>>2]|0)==0:0)?(c[g+180>>2]|0)==0:0)k=12}}else{g=c[b>>2]|0;f=d+64|0;while(1){f=c[f>>2]|0;if((c[f>>2]|0)==(g|0))break;else f=f+24|0}if(!(c[(c[c[f+4>>2]>>2]|0)+52>>2]|0))k=12}while(0);if((k|0)==12){c[i>>2]=c[d>>2];cd(b,44627,i);k=1;Ra=l;return k|0}if(e|0){k=0;Ra=l;return k|0}if(!(c[d+12>>2]|0)){k=0;Ra=l;return k|0}c[j>>2]=c[d>>2];cd(b,44656,j);k=1;Ra=l;return k|0}function Gm(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=Ra;Ra=Ra+32|0;o=q;p=c[b>>2]|0;j=c[d+72>>2]|0;if(!j)k=-1e6;else{i=c[p+16>>2]|0;h=0;while(1)if((c[i+(h<<4)+12>>2]|0)==(j|0)){k=h;break}else h=h+1|0}if(!f)m=0;else m=dk(p,f,0,0)|0;n=pj(b,0,0,0)|0;if(!n)h=mj(b,0,0,m,0,0,0,131072,0)|0;else{f=c[d>>2]|0;a:do if(!f)h=0;else{d=(Eu(f)|0)+1|0;b:do if(!p){j=Sv(d|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){h=0;break a}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](d)|0;l=32;break}h=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0<d>>>0)c[14985]=d;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=r>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){h=0;break a}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){h=0;break a}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<d>>>0:0))){i=p+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];l=p+284|0;c[l>>2]=(c[l>>2]|0)+1;l=32;break b}i=p+296|0;h=c[i>>2]|0;if(!h){h=p+292|0;break}else{c[i>>2]=c[h>>2];l=p+284|0;c[l>>2]=(c[l>>2]|0)+1;l=32;break b}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(p,d,0)|0;l=32}while(0);if((l|0)==32)if(!h){h=0;break}ew(h|0,f|0,d|0)|0}while(0);c[n+16>>2]=h;j=c[(c[p+16>>2]|0)+(k<<4)>>2]|0;c:do if(j){f=(Eu(j)|0)+1|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))l=45;else{h=0;break c}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<f>>>0:0))){i=p+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=p+284|0;c[r>>2]=(c[r>>2]|0)+1;break d}i=p+296|0;h=c[i>>2]|0;if(!h){h=p+292|0;break}else{c[i>>2]=c[h>>2];r=p+284|0;c[r>>2]=(c[r>>2]|0)+1;break d}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;l=45}while(0);if((l|0)==45)h=_d(p,f,0)|0;if(h)ew(h|0,j|0,f|0)|0;else h=0}else h=0;while(0);c[n+12>>2]=h;h=mj(b,0,n,m,0,0,0,131072,0)|0}a[o>>0]=12;c[o+4>>2]=g;c[o+16>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;kj(b,h,o)|0;if(!h){Ra=q;return}pi(p,h,1);Ra=q;return}function Hm(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;if(c[g+56>>2]|0){f=0;return f|0}q=c[f>>2]|0;o=c[g+72>>2]|0;if(!o)y=-1e6;else{p=c[q+16>>2]|0;n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0)){y=n;break}else n=n+1|0}z=f+8|0;n=c[z>>2]|0;a:do if(!n){if((c[f+116>>2]|0)==0?(b[q+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))r=19;else{n=0;break a}else{do if((e[q+276>>1]|0)>=224){o=q+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;break b}o=q+296|0;n=c[o>>2]|0;if(!n){n=q+292|0;break}else{c[o>>2]=c[n>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;break b}}else n=q+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;r=19}while(0);if((r|0)==19)n=_d(q,224,0)|0;if(!n)n=0;else{o=n+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[n>>2]=q;o=q+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=n;c[n+8>>2]=p;c[n+4>>2]=0;c[o>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[z>>2]=n;Di(n,61,0,1,0)|0}}while(0);if((j|0)<0)p=c[f+40>>2]|0;else p=j;o=p+1|0;q=(l|0)!=0;if(q)c[l>>2]=p;x=g+36|0;do if(!(c[x>>2]&32)){if(k|0?(a[k>>0]|0)==0:0){r=32;break}Gj(f,p,y,g,h)}else r=32;while(0);if((r|0)==32)Hj(f,y,c[g+28>>2]|0,(h|0)==109&1,c[g>>2]|0);if(m|0)c[m>>2]=o;p=c[g+8>>2]|0;if(!p)p=0;else{m=q^1;s=(k|0)==0;t=n+108|0;u=n+112|0;v=n+104|0;w=h&255;r=p;p=0;while(1){g=o+1|0;j=r+55|0;if(((d[j>>0]|d[j+1>>0]<<8)&3)==2){q=(c[x>>2]&32|0)==0;if(q|m)j=q?i:0;else{c[l>>2]=o;j=0}}else j=i;if(!(!s?!(a[k+(p+1)>>0]|0):0)){q=c[r+44>>2]|0;i=c[t>>2]|0;if((c[u>>2]|0)>(i|0)){c[t>>2]=i+1;A=c[v>>2]|0;a[A+(i*20|0)>>0]=w;b[A+(i*20|0)+2>>1]=0;c[A+(i*20|0)+4>>2]=o;c[A+(i*20|0)+8>>2]=q;c[A+(i*20|0)+12>>2]=y;c[A+(i*20|0)+16>>2]=0;a[A+(i*20|0)+1>>0]=0}else Di(n,h,o,q,y)|0;o=c[z>>2]|0;i=Ij(f,r)|0;c:do if(i|0){q=c[o>>2]|0;if(!(a[q+81>>0]|0)){q=c[o+104>>2]|0;A=(c[o+108>>2]|0)+-1|0;a[q+(A*20|0)+1>>0]=-9;c[q+(A*20|0)+16>>2]=i;break}if((c[q+480>>2]|0)==0?(A=(c[i>>2]|0)+-1|0,c[i>>2]=A,(A|0)==0):0){o=c[i+12>>2]|0;do if(o|0){if(c[o+480>>2]|0){Xd(o,i);break c}q=i;if((c[o+304>>2]|0)>>>0>q>>>0)break;if((c[o+308>>2]|0)>>>0<=q>>>0)break;A=o+300|0;c[i>>2]=c[A>>2];c[A>>2]=i;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{A=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);o=c[t>>2]|0;if((o|0)>0)b[(c[v>>2]|0)+((o+-1|0)*20|0)+2>>1]=j&255}p=p+1|0;r=c[r+20>>2]|0;if(!r){o=g;break}else{i=j;o=g}}}n=f+40|0;if((o|0)<=(c[n>>2]|0)){A=p;return A|0}c[n>>2]=o;A=p;return A|0}function Im(f,g,h,i,j,k,l,m,n,o,p){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0;N=f+8|0;Q=c[N>>2]|0;I=f+56|0;P=c[I>>2]|0;O=P+-1|0;c[I>>2]=O;I=(c[g+36>>2]&32|0)==0?31:28;J=o<<24>>24==0;if(J){r=Q+108|0;q=c[r>>2]|0;if((c[Q+112>>2]|0)>(q|0)){c[r>>2]=q+1;M=c[Q+104>>2]|0;a[M+(q*20|0)>>0]=I;b[M+(q*20|0)+2>>1]=0;c[M+(q*20|0)+4>>2]=i;c[M+(q*20|0)+8>>2]=O;c[M+(q*20|0)+12>>2]=k;c[M+(q*20|0)+16>>2]=0;a[M+(q*20|0)+1>>0]=0}else q=Di(Q,I&255,i,O,k)|0;if(!(a[(c[Q>>2]|0)+81>>0]|0)){M=c[Q+104>>2]|0;a[M+(q*20|0)+1>>0]=-3;c[M+(q*20|0)+16>>2]=l<<16>>16}}if(!(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)){w=c[g>>2]|0;t=c[g+72>>2]|0;u=c[t+68>>2]|0;if(!u){r=t+60|0;q=t+64|0}else{r=a[w>>0]|0;if(!(r<<24>>24))q=0;else{q=0;s=w;do{s=s+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[s>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[t+56>>2]|0)>>>0)|0;r=u+(q<<3)|0;q=u+(q<<3)+4|0}r=c[r>>2]|0;a:do if(!r)q=59292;else{v=d[208+(d[w>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;t=c[q+12>>2]|0;M=a[t>>0]|0;s=(d[208+(M&255)>>0]|0)-v|0;if(!(M<<24>>24==0|(s|0)!=0)){u=w;do{t=t+1|0;u=u+1|0;M=a[t>>0]|0;s=(d[208+(M&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(s|0)!=0))}if(!s)break a;if(!r){q=59292;break}}}while(0);if(!(c[q+8>>2]|0)){q=(c[g+16>>2]|0)!=0&1;M=23}else M=24}else{q=0;M=23}if((M|0)==23)if((h|0)!=0|(q|0)!=0)M=24;else F=0;if((M|0)==24){H=n&255;u=(h|0)==0;if(u)q=0;else{t=f+116|0;q=0;s=h;do{do if((a[s+8>>0]|0)==121?(a[s+9>>0]&3)!=0:0){r=c[t>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;b:do if(!r)M=33;else while(1){if((c[r>>2]|0)==(s|0)?(c[r+12>>2]|0)==(H|0):0)break b;r=c[r+4>>2]|0;if(!r){M=33;break}}while(0);if((M|0)==33){M=0;r=Nm(f,s,g,H)|0;if(!r)break}q=c[r+16>>2]|q}while(0);s=c[s+32>>2]|0}while((s|0)!=0)}s=Km(f,g)|0|q;C=f+44|0;F=(c[C>>2]|0)+1|0;t=g+42|0;c[C>>2]=F+(b[t>>1]|0);D=Q+108|0;q=c[D>>2]|0;E=Q+112|0;if((c[E>>2]|0)>(q|0)){c[D>>2]=q+1;B=c[Q+104>>2]|0;a[B+(q*20|0)>>0]=78;b[B+(q*20|0)+2>>1]=0;c[B+(q*20|0)+4>>2]=k;c[B+(q*20|0)+8>>2]=F;c[B+(q*20|0)+12>>2]=0;c[B+(q*20|0)+16>>2]=0;a[B+(q*20|0)+1>>0]=0}else Di(Q,78,k,F,0)|0;q=b[t>>1]|0;c:do if(q<<16>>16>0){if((s|0)==-1){q=0;while(1){B=q;q=q+1|0;Vj(Q,g,i,B,q+F|0);if((q|0)>=(b[t>>1]|0))break c}}r=0;do{if(r>>>0<32?(1<<r&s|0)!=0:0){Vj(Q,g,i,r,r+1+F|0);q=b[t>>1]|0}r=r+1|0}while((r|0)<(q<<16>>16|0))}while(0);A=c[D>>2]|0;if(u)q=A;else{y=f+116|0;z=f+23|0;x=h;do{do if((a[x+8>>0]|0)==121?(a[x+9>>0]|0)==1:0){q=c[N>>2]|0;d:do if(!q){s=c[f>>2]|0;if((c[y>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[z>>0]=1;e:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))M=66;else{q=0;break d}else{do if((e[s+276>>1]|0)>=224){r=s+300|0;q=c[r>>2]|0;if(q|0){c[r>>2]=c[q>>2];B=s+284|0;c[B>>2]=(c[B>>2]|0)+1;break e}r=s+296|0;q=c[r>>2]|0;if(!q){q=s+292|0;break}else{c[r>>2]=c[q>>2];B=s+284|0;c[B>>2]=(c[B>>2]|0)+1;break e}}else q=s+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;M=66}while(0);if((M|0)==66){M=0;q=_d(s,224,0)|0}if(!q)q=0;else{v=q+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[q>>2]=s;r=s+4|0;s=c[r>>2]|0;if(s|0)c[s+4>>2]=q;c[q+8>>2]=s;c[q+4>>2]=0;c[r>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[N>>2]=q;Di(q,61,0,1,0)|0}}while(0);r=c[y>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;f:do if(!r)M=76;else while(1){if((c[r>>2]|0)==(x|0)?(c[r+12>>2]|0)==(H|0):0)break f;r=c[r+4>>2]|0;if(!r){M=76;break}}while(0);if((M|0)==76){M=0;r=Nm(f,x,g,H)|0;if(!r)break}if(!(c[x>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}s=(c[C>>2]|0)+1|0;c[C>>2]=s;u=c[r+8>>2]|0;v=q+108|0;r=c[v>>2]|0;if((c[q+112>>2]|0)>(r|0)){c[v>>2]=r+1;B=c[q+104>>2]|0;a[B+(r*20|0)>>0]=45;b[B+(r*20|0)+2>>1]=0;c[B+(r*20|0)+4>>2]=F;c[B+(r*20|0)+8>>2]=O;c[B+(r*20|0)+12>>2]=s;c[B+(r*20|0)+16>>2]=0;a[B+(r*20|0)+1>>0]=0}else r=Di(q,45,F,O,s)|0;do if(!(a[(c[q>>2]|0)+81>>0]|0)){if((r|0)<0)r=(c[v>>2]|0)+-1|0;s=c[q+104>>2]|0;t=s+(r*20|0)+1|0;if(a[t>>0]|0){Ei(q,s+(r*20|0)|0,u,-4);break}if(!u)break;c[s+(r*20|0)+16>>2]=u;a[t>>0]=-4}while(0);r=c[v>>2]|0;if((r|0)>0)b[(c[q+104>>2]|0)+((r+-1|0)*20|0)+2>>1]=w}while(0);x=c[x+32>>2]|0}while((x|0)!=0);q=c[D>>2]|0}if((A|0)<(q|0)){if((c[E>>2]|0)>(q|0)){c[D>>2]=q+1;H=c[Q+104>>2]|0;a[H+(q*20|0)>>0]=I;b[H+(q*20|0)+2>>1]=0;c[H+(q*20|0)+4>>2]=i;c[H+(q*20|0)+8>>2]=O;c[H+(q*20|0)+12>>2]=k;c[H+(q*20|0)+16>>2]=0;a[H+(q*20|0)+1>>0]=0}else q=Di(Q,I&255,i,O,k)|0;if(!(a[(c[Q>>2]|0)+81>>0]|0)){k=c[Q+104>>2]|0;a[k+(q*20|0)+1>>0]=-3;c[k+(q*20|0)+16>>2]=l<<16>>16;q=-1}else q=-1}else q=p;Lm(f,g,F,0,0,0);p=q}if(!(c[g+12>>2]|0)){Mm(f,g,i,j,0,p);q=m<<24>>24!=0&1;t=Q+108|0;r=c[t>>2]|0;u=Q+112|0;if((c[u>>2]|0)>(r|0)){c[t>>2]=r+1;m=c[Q+104>>2]|0;a[m+(r*20|0)>>0]=123;b[m+(r*20|0)+2>>1]=0;c[m+(r*20|0)+4>>2]=i;c[m+(r*20|0)+8>>2]=q;c[m+(r*20|0)+12>>2]=0;c[m+(r*20|0)+16>>2]=0;a[m+(r*20|0)+1>>0]=0}else Di(Q,123,i,q,0)|0;if(a[f+18>>0]|0){r=c[g>>2]|0;if(r|0){m=a[r>>0]|0;q=(d[208+(m&255)>>0]|0)+-115|0;if(!(m<<24>>24==0|(q|0)!=0)){s=35174;do{r=r+1|0;s=s+1|0;m=a[r>>0]|0;q=(d[208+(m&255)>>0]|0)-(d[208+(d[s>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(q|0)!=0))}if(!q)M=110}}else M=110;if((M|0)==110?(a[(c[Q>>2]|0)+81>>0]|0)==0:0){j=c[Q+104>>2]|0;m=(c[t>>2]|0)+-1|0;a[j+(m*20|0)+1>>0]=-6;c[j+(m*20|0)+16>>2]=g}if(!J?(K=c[t>>2]|0,(K|0)>0):0)b[(c[Q+104>>2]|0)+((K+-1|0)*20|0)+2>>1]=4;do if(!((p|0)<0|(p|0)==(i|0))){q=c[t>>2]|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;K=c[Q+104>>2]|0;a[K+(q*20|0)>>0]=123;b[K+(q*20|0)+2>>1]=0;c[K+(q*20|0)+4>>2]=p;c[K+(q*20|0)+8>>2]=0;c[K+(q*20|0)+12>>2]=0;c[K+(q*20|0)+16>>2]=0;a[K+(q*20|0)+1>>0]=0;break}else{Di(Q,123,p,0,0)|0;break}}while(0);q=c[t>>2]|0;if((q|0)>0)b[(c[Q+104>>2]|0)+((q+-1|0)*20|0)+2>>1]=o<<24>>24==2?2:0}if(!(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)){v=c[g>>2]|0;t=c[g+72>>2]|0;u=c[t+68>>2]|0;if(!u){r=t+60|0;q=t+64|0}else{r=a[v>>0]|0;if(!(r<<24>>24))q=0;else{q=0;s=v;do{s=s+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[s>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[t+56>>2]|0)>>>0)|0;r=u+(q<<3)|0;q=u+(q<<3)+4|0}r=c[r>>2]|0;g:do if(!r)q=59292;else{p=d[208+(d[v>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;t=c[q+12>>2]|0;o=a[t>>0]|0;s=(d[208+(o&255)>>0]|0)-p|0;if(!(o<<24>>24==0|(s|0)!=0)){u=v;do{t=t+1|0;u=u+1|0;o=a[t>>0]|0;s=(d[208+(o&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(s|0)!=0))}if(!s)break g;if(!r){q=59292;break}}}while(0);q=c[q+8>>2]|0;if(q|0){x=f+116|0;y=f+23|0;z=f+44|0;do{u=Rm(f,g,q,0)|0;do if(u|0){r=c[N>>2]|0;h:do if(!r){t=c[f>>2]|0;if((c[x>>2]|0)==0?(b[t+76>>1]&8)==0:0)a[y>>0]=1;i:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))M=152;else{r=0;break h}else{do if((e[t+276>>1]|0)>=224){s=t+300|0;r=c[s>>2]|0;if(r|0){c[s>>2]=c[r>>2];o=t+284|0;c[o>>2]=(c[o>>2]|0)+1;break i}s=t+296|0;r=c[s>>2]|0;if(!r){r=t+292|0;break}else{c[s>>2]=c[r>>2];o=t+284|0;c[o>>2]=(c[o>>2]|0)+1;break i}}else r=t+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1;M=152}while(0);if((M|0)==152){M=0;r=_d(t,224,0)|0}if(!r)r=0;else{v=r+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[r>>2]=t;s=t+4|0;t=c[s>>2]|0;if(t|0)c[t+4>>2]=r;c[r+8>>2]=t;c[r+4>>2]=0;c[s>>2]=r;c[r+20>>2]=381479589;c[r+12>>2]=f;c[N>>2]=r;Di(r,61,0,1,0)|0}}while(0);s=c[x>>2]|0;s=c[((s|0)==0?f:s)+260>>2]|0;j:do if(!s)M=162;else while(1){if((c[s>>2]|0)==(u|0)?(c[s+12>>2]|0)==2:0)break j;s=c[s+4>>2]|0;if(!s){M=162;break}}while(0);if((M|0)==162){M=0;s=Nm(f,u,g,2)|0;if(!s)break}if(!(c[u>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}t=(c[z>>2]|0)+1|0;c[z>>2]=t;p=c[s+8>>2]|0;v=r+108|0;s=c[v>>2]|0;if((c[r+112>>2]|0)>(s|0)){c[v>>2]=s+1;o=c[r+104>>2]|0;a[o+(s*20|0)>>0]=45;b[o+(s*20|0)+2>>1]=0;c[o+(s*20|0)+4>>2]=F;c[o+(s*20|0)+8>>2]=0;c[o+(s*20|0)+12>>2]=t;c[o+(s*20|0)+16>>2]=0;a[o+(s*20|0)+1>>0]=0}else s=Di(r,45,F,0,t)|0;do if(!(a[(c[r>>2]|0)+81>>0]|0)){if((s|0)<0)s=(c[v>>2]|0)+-1|0;t=c[r+104>>2]|0;u=t+(s*20|0)+1|0;if(a[u>>0]|0){Ei(r,t+(s*20|0)|0,p,-4);break}if(p|0){c[t+(s*20|0)+16>>2]=p;a[u>>0]=-4}}while(0);s=c[v>>2]|0;if((s|0)>0)b[(c[r+104>>2]|0)+((s+-1|0)*20|0)+2>>1]=w}while(0);q=c[q+12>>2]|0}while((q|0)!=0)}}x=n&255;if(h|0){y=f+116|0;z=f+23|0;A=f+44|0;w=h;do{do if((a[w+8>>0]|0)==121?(a[w+9>>0]|0)==2:0){q=c[N>>2]|0;k:do if(!q){s=c[f>>2]|0;if((c[y>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[z>>0]=1;l:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))M=196;else{q=0;break k}else{do if((e[s+276>>1]|0)>=224){r=s+300|0;q=c[r>>2]|0;if(q|0){c[r>>2]=c[q>>2];h=s+284|0;c[h>>2]=(c[h>>2]|0)+1;break l}r=s+296|0;q=c[r>>2]|0;if(!q){q=s+292|0;break}else{c[r>>2]=c[q>>2];h=s+284|0;c[h>>2]=(c[h>>2]|0)+1;break l}}else q=s+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;M=196}while(0);if((M|0)==196){M=0;q=_d(s,224,0)|0}if(!q)q=0;else{v=q+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[q>>2]=s;r=s+4|0;s=c[r>>2]|0;if(s|0)c[s+4>>2]=q;c[q+8>>2]=s;c[q+4>>2]=0;c[r>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[N>>2]=q;Di(q,61,0,1,0)|0}}while(0);r=c[y>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;m:do if(!r)M=206;else while(1){if((c[r>>2]|0)==(w|0)?(c[r+12>>2]|0)==(x|0):0)break m;r=c[r+4>>2]|0;if(!r){M=206;break}}while(0);if((M|0)==206){M=0;r=Nm(f,w,g,x)|0;if(!r)break}if(!(c[w>>2]|0))v=0;else{v=(c[f>>2]|0)+32|0;v=bw(c[v>>2]|0,c[v+4>>2]|0,13)|0;L()|0;v=v&1^1}s=(c[A>>2]|0)+1|0;c[A>>2]=s;u=c[r+8>>2]|0;p=q+108|0;r=c[p>>2]|0;if((c[q+112>>2]|0)>(r|0)){c[p>>2]=r+1;h=c[q+104>>2]|0;a[h+(r*20|0)>>0]=45;b[h+(r*20|0)+2>>1]=0;c[h+(r*20|0)+4>>2]=F;c[h+(r*20|0)+8>>2]=O;c[h+(r*20|0)+12>>2]=s;c[h+(r*20|0)+16>>2]=0;a[h+(r*20|0)+1>>0]=0}else r=Di(q,45,F,O,s)|0;do if(!(a[(c[q>>2]|0)+81>>0]|0)){if((r|0)<0)r=(c[p>>2]|0)+-1|0;s=c[q+104>>2]|0;t=s+(r*20|0)+1|0;if(a[t>>0]|0){Ei(q,s+(r*20|0)|0,u,-4);break}if(u|0){c[s+(r*20|0)+16>>2]=u;a[t>>0]=-4}}while(0);r=c[p>>2]|0;if((r|0)>0)b[(c[q+104>>2]|0)+((r+-1|0)*20|0)+2>>1]=v}while(0);w=c[w+32>>2]|0}while((w|0)!=0)}r=c[Q+12>>2]|0;q=0-P|0;if(((c[r+56>>2]|0)+(c[r+60>>2]|0)|0)<0){mk(r,Q,q);return}else{c[(c[r+64>>2]|0)+(q<<2)>>2]=c[Q+108>>2];return}}function Jm(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=c[f+20>>2]|0;if((t|0)<=0){v=0;return v|0}q=b[e+42>>1]|0;u=q<<16>>16>0;s=e+4|0;r=e+40|0;n=(h|0)==0;o=q<<16>>16;p=q<<16>>16;q=q<<16>>16;m=0;a:while(1){l=c[f+36+(m<<3)+4>>2]|0;b:do if(u){k=(l|0)==0;if(!n){j=0;while(1){if(!((c[g+(j<<2)>>2]|0)<=-1?(j|0)!=(b[r>>1]|0):0))v=8;do if((v|0)==8){v=0;e=c[s>>2]|0;if(k)if(!(a[e+(j<<4)+15>>0]&1))break;else{e=1;v=28;break a}h=c[e+(j<<4)>>2]|0;i=a[h>>0]|0;e=(d[208+(i&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(e|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(e|0)!=0))}if(!e){e=1;v=28;break a}}while(0);j=j+1|0;if((j|0)>=(o|0))break b}}if(k){e=0;while(1){if((c[g+(e<<2)>>2]|0)>-1?a[(c[s>>2]|0)+(e<<4)+15>>0]&1:0){e=1;v=28;break a}e=e+1|0;if((e|0)>=(p|0))break b}}j=0;do{if((c[g+(j<<2)>>2]|0)>-1){h=c[(c[s>>2]|0)+(j<<4)>>2]|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(w<<24>>24==0|(e|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(e|0)!=0))}if(!e){e=1;v=28;break a}}j=j+1|0}while((j|0)<(q|0))}while(0);m=m+1|0;if((m|0)>=(t|0)){e=0;v=28;break}}if((v|0)==28)return e|0;return 0}function Km(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=Ra;Ra=Ra+16|0;o=q;if(0==0?(c[(c[e>>2]|0)+32>>2]&16384|0)==0:0){p=0;Ra=q;return p|0}g=c[f+16>>2]|0;if(!g)g=0;else{j=g;g=0;do{i=c[j+20>>2]|0;if((i|0)>0){h=0;do{n=c[j+36+(h<<3)>>2]|0;g=((n|0)>31?-1:1<<n)|g;h=h+1|0}while((h|0)<(i|0))}j=c[j+4>>2]|0}while((j|0)!=0)}n=c[f>>2]|0;k=c[f+72>>2]|0;l=c[k+68>>2]|0;if(!l){i=k+60|0;h=k+64|0}else{i=a[n>>0]|0;if(!(i<<24>>24))h=0;else{h=0;j=n;do{j=j+1|0;h=G(h+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[j>>0]|0}while(i<<24>>24!=0)}h=(h>>>0)%((c[k+56>>2]|0)>>>0)|0;i=l+(h<<3)|0;h=l+(h<<3)+4|0}i=c[i>>2]|0;a:do if(!i)h=59292;else{m=d[208+(d[n>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;i=i+-1|0;k=c[h+12>>2]|0;l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-m|0;if(!(l<<24>>24==0|(j|0)!=0)){l=n;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j)break a;if(!i){h=59292;break}}}while(0);h=c[h+8>>2]|0;if(!h){r=g;Ra=q;return r|0}do{c[o>>2]=0;Om(e,f,h,o,0)|0;i=c[o>>2]|0;if((i|0)!=0?(p=b[i+50>>1]|0,p<<16>>16!=0):0){j=c[i+4>>2]|0;k=p&65535;i=0;do{r=b[j+(i<<1)>>1]|0;g=(r<<16>>16>31?-1:1<<(r<<16>>16))|g;i=i+1|0}while(i>>>0<k>>>0)}h=c[h+12>>2]|0}while((h|0)!=0);Ra=q;return g|0}function Lm(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;_=Ra;Ra=Ra+16|0;X=_+8|0;Y=_+4|0;S=_;Z=c[f>>2]|0;R=f+146|0;V=a[R>>0]|0;W=Z+32|0;if((c[W>>2]&16384|0)==0&0==0){Ra=_;return}T=g+72|0;p=c[T>>2]|0;m=c[Z+16>>2]|0;if(!p)l=-1e6;else{l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(p|0))break;else l=l+1|0}Q=c[m+(l<<4)>>2]|0;m=c[g+16>>2]|0;do if(!m)l=g;else{x=(j|0)==0;y=V<<24>>24==0;z=g+40|0;A=(k|0)==0;B=Z+81|0;C=f+8|0;D=f+40|0;E=(h|0)==0;F=Z+312|0;H=f+116|0;I=(i|0)==0;J=h+1|0;K=f+23|0;L=(Z|0)==0;M=Z+480|0;N=Z+304|0;O=Z+308|0;P=Z+300|0;a:while(1){c[X>>2]=0;c[Y>>2]=0;b:do if(!x){p=c[g>>2]|0;n=c[m+8>>2]|0;if(p){if(n|0){U=a[p>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(U<<24>>24==0|(o|0)!=0)U=16;else{q=n;do{p=p+1|0;q=q+1|0;U=a[p>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(U<<24>>24==0|(o|0)!=0));U=16}}}else{o=((n|0)!=0)<<31>>31;U=16}if((U|0)==16?(U=0,(o|0)==0):0){U=26;break}r=c[m+20>>2]|0;if((r|0)>0){if(A){p=0;while(1){if((c[j+(c[m+36+(p<<3)>>2]<<2)>>2]|0)>-1){U=26;break b}p=p+1|0;if((p|0)>=(r|0))break b}}p=0;do{q=c[m+36+(p<<3)>>2]|0;if((c[j+(q<<2)>>2]|0)>-1){U=26;break b}p=p+1|0;if((q|0)==(b[z>>1]|0)){U=26;break b}}while((p|0)<(r|0))}}else{n=c[m+8>>2]|0;U=26}while(0);c:do if((U|0)==26){U=0;if(!(a[R>>0]|0))w=bd(f,0,n,Q)|0;else w=Sd(Z,n,Q)|0;n=(w|0)==0;if(!n?(Om(f,w,m,X,Y)|0)==0:0){n=c[Y>>2]|0;if(!n){c[S>>2]=c[m+36>>2];n=S}u=m+20|0;if((c[u>>2]|0)>0){v=w+4|0;r=c[X>>2]|0;s=w+40|0;t=r+4|0;if(!r){q=0;r=0;do{p=n+(r<<2)|0;if((c[p>>2]|0)==(b[z>>1]|0))c[p>>2]=-1;if(c[F>>2]|0)q=(Ik(f,c[w>>2]|0,c[(c[v>>2]|0)+(b[s>>1]<<4)>>2]|0,l)|0)==2&1;r=r+1|0}while((r|0)<(c[u>>2]|0));p=w}else{q=0;r=0;do{p=n+(r<<2)|0;if((c[p>>2]|0)==(b[z>>1]|0))c[p>>2]=-1;if(c[F>>2]|0)q=(Ik(f,c[w>>2]|0,c[(c[v>>2]|0)+(b[(c[t>>2]|0)+(r<<1)>>1]<<4)>>2]|0,l)|0)==2&1;r=r+1|0}while((r|0)<(c[u>>2]|0));p=w}}else{q=0;p=w}Hj(f,l,c[w+28>>2]|0,0,c[p>>2]|0);c[D>>2]=(c[D>>2]|0)+1;if(!E)Pm(f,l,w,c[X>>2]|0,m,n,h,-1,q);do if(!I){p=c[H>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;if(p|0){p=c[p>>2]|0;if((p|0)==(c[m+28>>2]|0)?(a[m+25>>0]|0)==8:0)break;if((p|0)==(c[m+32>>2]|0)?(a[m+26>>0]|0)==8:0)break}Pm(f,l,w,c[X>>2]|0,m,n,i,1,q)}while(0);n=c[Y>>2]|0;if(!n)break;do if(!L){if(c[M>>2]|0){Xd(Z,n);break c}p=n;if((c[N>>2]|0)>>>0<=p>>>0){if((c[O>>2]|0)>>>0<=p>>>0)break;c[n>>2]=c[P>>2];c[P>>2]=n;break c}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{w=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}if(y)break a;if(a[B>>0]|0)break a;if(n){n=c[C>>2]|0;d:do if(!n){r=c[f>>2]|0;if((c[H>>2]|0)==0?(b[r+76>>1]&8)==0:0)a[K>>0]=1;e:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))U=48;else{n=0;break d}else{do if((e[r+276>>1]|0)>=224){p=r+300|0;n=c[p>>2]|0;if(n|0){c[p>>2]=c[n>>2];w=r+284|0;c[w>>2]=(c[w>>2]|0)+1;break e}p=r+296|0;n=c[p>>2]|0;if(!n){n=r+292|0;break}else{c[p>>2]=c[n>>2];w=r+284|0;c[w>>2]=(c[w>>2]|0)+1;break e}}else n=r+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;U=48}while(0);if((U|0)==48){U=0;n=_d(r,224,0)|0}if(!n)n=0;else{p=n+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[n>>2]=r;p=r+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=n;c[n+8>>2]=q;c[n+4>>2]=0;c[p>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[C>>2]=n;Di(n,61,0,1,0)|0}}while(0);v=n+108|0;q=c[v>>2]|0;s=m+20|0;u=c[s>>2]|0;t=q+1+u|0;w=n+112|0;if((u|0)>0){u=n+104|0;r=0;do{p=J+(c[m+36+(r<<3)>>2]|0)|0;if((c[w>>2]|0)>(q|0)){c[v>>2]=q+1;$=c[u>>2]|0;a[$+(q*20|0)>>0]=50;b[$+(q*20|0)+2>>1]=0;c[$+(q*20|0)+4>>2]=p;c[$+(q*20|0)+8>>2]=t;c[$+(q*20|0)+12>>2]=0;c[$+(q*20|0)+16>>2]=0;a[$+(q*20|0)+1>>0]=0}else Di(n,50,p,t,0)|0;r=r+1|0;q=c[v>>2]|0}while((r|0)<(c[s>>2]|0))}p=d[m+24>>0]|0;if((c[w>>2]|0)>(q|0)){c[v>>2]=q+1;$=c[n+104>>2]|0;a[$+(q*20|0)>>0]=-106;b[$+(q*20|0)+2>>1]=0;c[$+(q*20|0)+4>>2]=p;c[$+(q*20|0)+8>>2]=-1;c[$+(q*20|0)+12>>2]=0;c[$+(q*20|0)+16>>2]=0;a[$+(q*20|0)+1>>0]=0;break}else{Di(n,150,p,-1,0)|0;break}}}while(0);m=c[m+4>>2]|0;if(!m){U=100;break}}if((U|0)==100){l=g;p=c[T>>2]|0;break}Ra=_;return}while(0);r=c[l>>2]|0;o=c[p+68>>2]|0;if(!o){m=p+60|0;l=p+64|0}else{m=a[r>>0]|0;if(!(m<<24>>24))l=0;else{l=0;n=r;do{n=n+1|0;l=G(l+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[n>>0]|0}while(m<<24>>24!=0)}l=(l>>>0)%((c[p+56>>2]|0)>>>0)|0;m=o+(l<<3)|0;l=o+(l<<3)+4|0}m=c[m>>2]|0;f:do if(!m)l=59292;else{q=d[208+(d[r>>0]|0)>>0]|0;while(1){l=c[l>>2]|0;m=m+-1|0;o=c[l+12>>2]|0;$=a[o>>0]|0;n=(d[208+($&255)>>0]|0)-q|0;if(!($<<24>>24==0|(n|0)!=0)){p=r;do{o=o+1|0;p=p+1|0;$=a[o>>0]|0;n=(d[208+($&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!($<<24>>24==0|(n|0)!=0))}if(!n)break f;if(!m){l=59292;break}}}while(0);l=c[l+8>>2]|0;if(!l){Ra=_;return}B=(j|0)!=0;C=f+116|0;p=V<<24>>24==0;q=f+20|0;r=f+40|0;s=(i|0)==0;t=Z+81|0;u=(Z|0)==0;v=(h|0)==0;w=Z+480|0;x=B&1;y=Z+304|0;z=Z+308|0;A=Z+300|0;g:while(1){c[X>>2]=0;c[Y>>2]=0;if(B?(Jm(g,l,j,k)|0)==0:0)U=142;else U=118;do if((U|0)==118){U=0;o=l+24|0;if((((a[o>>0]|0)==0?(c[W>>2]&524288|0)==0&0==0:0)?(c[C>>2]|0)==0:0)?(a[q>>0]|0)==0:0){U=142;break}if(Om(f,g,l,X,Y)|0){if(p){U=124;break g}if(!(a[t>>0]|0))break;else{U=145;break g}}m=pj(f,0,0,0)|0;if(m|0){$=c[l>>2]|0;c[m+24>>2]=$;n=m+16|0;c[n>>2]=c[$>>2];$=$+32|0;c[$>>2]=(c[$>>2]|0)+1;$=c[r>>2]|0;c[r>>2]=$+1;c[m+48>>2]=$;if(!s)Qm(f,m,g,c[X>>2]|0,l,c[Y>>2]|0,i,-1);if(!v?($=a[l+25+x>>0]|0,Qm(f,m,g,c[X>>2]|0,l,c[Y>>2]|0,h,1),($|2)<<24>>24!=10&(a[o>>0]|0)==0):0){$=c[C>>2]|0;a[(($|0)==0?f:$)+21>>0]=1}c[n>>2]=0;qi(Z,m)}m=c[Y>>2]|0;if(m){if(!u){if(c[w>>2]|0){Xd(Z,m);U=142;break}$=m;if((c[y>>2]|0)>>>0<=$>>>0?(c[z>>2]|0)>>>0>$>>>0:0){c[m>>2]=c[A>>2];c[A>>2]=m;U=142;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);U=142;break}else{U=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);U=142;break}}else U=142}while(0);l=c[l+12>>2]|0;if(!l){U=145;break}}if((U|0)==124){Ra=_;return}else if((U|0)==145){Ra=_;return}}function Mm(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;w=z;x=f+8|0;y=c[x>>2]|0;n=c[g+8>>2]|0;a:do if(!(c[g+36>>2]&32))g=0;else{if(!n){Ra=z;return}g=n;while(1){v=g+55|0;if(((d[v>>0]|d[v+1>>0]<<8)&3)==2)break a;g=c[g+20>>2]|0;if(!g){g=0;break}}}while(0);if(!n){Ra=z;return}t=y+108|0;u=y+112|0;v=y+104|0;if(!j){l=-1;m=0;p=n;q=0;while(1){do if((p|0)!=(g|0)?(r=q+i|0,(r|0)!=(k|0)):0){l=el(f,p,h,0,1,w,m,l)|0;m=p+55|0;m=e[(((d[m>>0]|d[m+1>>0]<<8)&8)==0?p+52|0:p+50|0)>>1]|0;n=c[t>>2]|0;if((c[u>>2]|0)>(n|0)){c[t>>2]=n+1;s=c[v>>2]|0;a[s+(n*20|0)>>0]=-123;b[s+(n*20|0)+2>>1]=0;c[s+(n*20|0)+4>>2]=r;c[s+(n*20|0)+8>>2]=l;c[s+(n*20|0)+12>>2]=m;c[s+(n*20|0)+16>>2]=0;a[s+(n*20|0)+1>>0]=0}else Di(y,133,r,l,m)|0;m=c[w>>2]|0;if(m){n=c[x>>2]|0;o=c[n+12>>2]|0;m=~m;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,n,m);m=p;break}else{c[(c[o+64>>2]|0)+(m<<2)>>2]=c[n+108>>2];m=p;break}}else m=p}while(0);p=c[p+20>>2]|0;if(!p)break;else q=q+1|0}Ra=z;return}else{l=-1;m=0;p=n;q=0;while(1){do if(!((p|0)==(g|0)?1:(c[j+(q<<2)>>2]|0)==0)?(s=q+i|0,(s|0)!=(k|0)):0){l=el(f,p,h,0,1,w,m,l)|0;m=p+55|0;m=e[(((d[m>>0]|d[m+1>>0]<<8)&8)==0?p+52|0:p+50|0)>>1]|0;n=c[t>>2]|0;if((c[u>>2]|0)>(n|0)){c[t>>2]=n+1;r=c[v>>2]|0;a[r+(n*20|0)>>0]=-123;b[r+(n*20|0)+2>>1]=0;c[r+(n*20|0)+4>>2]=s;c[r+(n*20|0)+8>>2]=l;c[r+(n*20|0)+12>>2]=m;c[r+(n*20|0)+16>>2]=0;a[r+(n*20|0)+1>>0]=0}else Di(y,133,s,l,m)|0;m=c[w>>2]|0;if(m){n=c[x>>2]|0;o=c[n+12>>2]|0;m=~m;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,n,m);m=p;break}else{c[(c[o+64>>2]|0)+(m<<2)>>2]=c[n+108>>2];m=p;break}}else m=p}while(0);p=c[p+20>>2]|0;if(!p)break;else q=q+1|0}Ra=z;return}}function Nm(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;$=Ra;Ra=Ra+96|0;X=$+16|0;q=$+8|0;p=$;W=$+56|0;r=$+24|0;Y=c[f+116>>2]|0;Y=(Y|0)==0?f:Y;_=c[f>>2]|0;m=(_|0)==0;a:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](24)|0;P=24;break}j=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){Z=c[14978]|0;U=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;T=L()|0;c[14768]=((T|0)<0|(T|0)==0&U>>>0<=Z>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){_=0;Ra=$;return _|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;Z=k}else Z=k}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){_=0;Ra=$;return _|0}}else{do if((e[_+276>>1]|0)>=24){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=24;break a}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=24;break a}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,24,0)|0;P=24}while(0);if((P|0)==24)if(!j){_=0;Ra=$;return _|0}else Z=j;l=Z;n=l+24|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));U=Y+260|0;c[Z+4>>2]=c[U>>2];c[U>>2]=Z;b:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](28)|0;P=48;break}j=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){U=c[14978]|0;T=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;S=L()|0;c[14768]=((S|0)<0|(S|0)==0&T>>>0<=U>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(k){j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;Q=k}else Q=k}else P=49}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){P=49;break}}else{do if((e[_+276>>1]|0)>=28){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=48;break b}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=48;break b}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,28,0)|0;P=48}while(0);if((P|0)==48)if(!j)P=49;else Q=j;if((P|0)==49){c[Z+8>>2]=0;_=0;Ra=$;return _|0}l=Q;n=l+24|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));c[Z+8>>2]=Q;R=(c[Y+8>>2]|0)+212|0;c[Q+24>>2]=c[R>>2];c[R>>2]=Q;c[Z>>2]=g;c[Z+12>>2]=i;R=Z+16|0;c[R>>2]=-1;S=Z+20|0;c[S>>2]=-1;c:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](276)|0;P=73;break}j=Wa[c[29356>>2]&127](276)|0;if((c[14985]|0)>>>0<276)c[14985]=276;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){U=c[14978]|0;T=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&T>>>0<=U>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){_=0;Ra=$;return _|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;U=k}else U=k}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){_=0;Ra=$;return _|0}}else{do if((e[_+276>>1]|0)>=276){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=73;break c}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=73;break c}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,276,0)|0;P=73}while(0);if((P|0)==73)if(!j){_=0;Ra=$;return _|0}else U=j;O=U+4|0;gw(O|0,0,272)|0;k=r+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[r>>2]=U;c[U>>2]=_;c[U+120>>2]=h;c[U+116>>2]=Y;k=c[g>>2]|0;c[U+240>>2]=k;a[U+144>>0]=a[g+8>>0]|0;c[U+132>>2]=c[f+132>>2];a[U+25>>0]=a[f+25>>0]|0;o=U+8|0;j=c[o>>2]|0;T=U;d:do if(!j){e:do if(c[_+272>>2]|0)if(!(a[_+81>>0]|0))P=86;else k=_;else{do if((e[_+276>>1]|0)>=224){j=_+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=87;break e}j=_+296|0;k=c[j>>2]|0;if(!k){j=_+292|0;break}else{c[j>>2]=c[k>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=87;break e}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;P=86}while(0);if((P|0)==86){k=_d(_,224,0)|0;P=87}do if((P|0)==87){if(k|0){l=k+104|0;n=l+120|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(n|0));c[k>>2]=_;j=_+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=U;c[o>>2]=k;Di(k,61,0,1,0)|0;N=k;j=c[g>>2]|0;P=91;break d}j=c[U>>2]|0;k=c[U+64>>2]|0;if(k){if(j|0){if(c[j+480>>2]|0){Xd(j,k);k=j;break}Y=k;if((c[j+304>>2]|0)>>>0<=Y>>>0?(c[j+308>>2]|0)>>>0>Y>>>0:0){Y=j+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;k=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);k=j;break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);k=j;break}}else k=j}while(0);j=c[U+68>>2]|0;if(j|0)ri(k,j);j=U+24|0;if(k){Y=k+272|0;c[Y>>2]=(c[Y>>2]|0)-(d[j>>0]|0)}}else{N=j;j=k;P=91}while(0);if((P|0)==91){do if(j|0){c[p>>2]=j;m=dd(_,44694,p)|0;j=c[N>>2]|0;if(!(a[j+81>>0]|0)){j=(c[N+108>>2]|0)+-1|0;k=c[N+104>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(N,k+(j*20|0)|0,m,-7);break}if(!m)break;c[k+(j*20|0)+16>>2]=m;a[l>>0]=-7;break}if(m|0){if(j|0){if(c[j+480>>2]|0){Xd(j,m);break}M=m;if((c[j+304>>2]|0)>>>0<=M>>>0?(c[j+308>>2]|0)>>>0>M>>>0:0){M=j+300|0;c[m>>2]=c[M>>2];c[M>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{M=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}while(0);j=c[g+12>>2]|0;do if(!j)j=0;else{h=dk(_,j,0,0)|0;n=(h|0)==0;do if(n)P=115;else{k=r+24|0;l=e[k>>1]|0;b[k>>1]=l&28655;c[W>>2]=T;c[W+4>>2]=125;c[W+8>>2]=126;c[W+12>>2]=0;c[W+24>>2]=r;m=h+24|0;j=U+208|0;M=(c[j>>2]|0)+(c[m>>2]|0)|0;c[j>>2]=M;j=c[(c[U>>2]|0)+120>>2]|0;if((j|0)>=(M|0)){_j(W,h)|0;j=c[W>>2]|0;M=j+208|0;c[M>>2]=(c[M>>2]|0)-(c[m>>2]|0);M=b[k>>1]|0;K=h+4|0;c[K>>2]=c[K>>2]|M&-32752&65535;b[k>>1]=l&36880|M&65535;if((c[r+20>>2]|0)<=0)if((c[j+36>>2]|0)<1){P=115;break}else{j=0;break}}else{c[q>>2]=j;cd(U,41637,q)}j=0}while(0);if((P|0)==115){if(!(a[_+81>>0]|0)){M=U+56|0;j=(c[M>>2]|0)+-1|0;c[M>>2]=j;Tj(U,h,j,16)}else j=0;if(n)break}ni(_,h)}while(0);I=c[o>>2]|0;J=c[U>>2]|0;k=c[g+28>>2]|0;f:do if(k|0){K=(i|0)==11;M=U+145|0;u=i&255;v=I+108|0;w=I+112|0;x=W+4|0;y=I+104|0;z=(J|0)==0;A=J+272|0;B=J+276|0;C=J+81|0;D=J+288|0;E=J+300|0;F=J+296|0;G=J+284|0;H=J+292|0;while(1){if(K)l=d[k+1>>0]|0;else l=u;a[M>>0]=l;l=c[k+32>>2]|0;g:do if(l|0){c[X>>2]=l;h=dd(J,34793,X)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;t=c[y>>2]|0;a[t+(l*20|0)>>0]=-88;b[t+(l*20|0)+2>>1]=0;c[t+(l*20|0)+4>>2]=2147483647;c[t+(l*20|0)+8>>2]=1;c[t+(l*20|0)+12>>2]=0;c[t+(l*20|0)+16>>2]=0;a[t+(l*20|0)+1>>0]=0}else l=Di(I,168,2147483647,1,0)|0;m=c[I>>2]|0;if(!(a[m+81>>0]|0)){if((l|0)<0)l=(c[v>>2]|0)+-1|0;m=c[y>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(I,m+(l*20|0)|0,h,-7);break}if(!h)break;c[m+(l*20|0)+16>>2]=h;a[n>>0]=-7;break}if(h|0){do if(m|0){if(c[m+480>>2]|0){Xd(m,h);break g}l=h;if((c[m+304>>2]|0)>>>0<=l>>>0){if((c[m+308>>2]|0)>>>0<=l>>>0)break;t=m+300|0;c[h>>2]=c[t>>2];c[t>>2]=h;break g}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}while(0);switch(a[k>>0]|0){case 122:{p=c[U>>2]|0;q=pj(U,0,0,0)|0;if(q|0){h=c[k+12>>2]|0;h:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;i:do if(!p){t=Sv(o|0,0,-1,-1)|0;s=L()|0;if(s>>>0>0|(s|0)==0&t>>>0>2147483390){l=0;break h}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=171;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){t=c[14978]|0;s=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&s>>>0<=t>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break h}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break h}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<o>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=171;break i}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=171;break i}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=171}while(0);if((P|0)==171){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;j:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;k:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=188;else{l=0;break j}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<h>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];t=p+284|0;c[t>>2]=(c[t>>2]|0)+1;break k}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];t=p+284|0;c[t>>2]=(c[t>>2]|0)+1;break k}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=188}while(0);if((P|0)==188){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+4>>2]=l}}m=gk(J,c[k+20>>2]|0,0)|0;l=c[k+16>>2]|0;if(!l)l=0;else l=dk(J,l,0,0)|0;tj(U,q,m,l,d[M>>0]|0,0);break}case 120:{p=c[U>>2]|0;t=pj(U,0,0,0)|0;if(t|0){h=c[k+12>>2]|0;l:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;m:do if(!p){s=Sv(o|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&s>>>0>2147483390){l=0;break l}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=221;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){s=c[14978]|0;i=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;r=L()|0;c[14768]=((r|0)<0|(r|0)==0&i>>>0<=s>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break l}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break l}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<o>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=221;break m}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=221;break m}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=221}while(0);if((P|0)==221){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[t+8+(((c[t>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;n:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;o:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=238;else{l=0;break n}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<h>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];s=p+284|0;c[s>>2]=(c[s>>2]|0)+1;break o}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];s=p+284|0;c[s>>2]=(c[s>>2]|0)+1;break o}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=238}while(0);if((P|0)==238){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[t+8+(((c[t>>2]|0)+-1|0)*72|0)+4>>2]=l}}r=fk(J,c[k+8>>2]|0,0)|0;i=jk(J,c[k+24>>2]|0)|0;s=d[M>>0]|0;m=c[k+28>>2]|0;do if(!m)l=0;else{q=gk(J,c[m>>2]|0,0)|0;l=c[m+4>>2]|0;if(!l)p=0;else p=dk(J,l,0,0)|0;o=gk(J,c[m+8>>2]|0,0)|0;l=c[m+12>>2]|0;if(!l)h=0;else h=dk(J,l,0,0)|0;p:do if(z){if(!(c[7324]|0)){V=Wa[c[29340>>2]&127](36)|0;P=268;break}l=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){aa=c[14978]|0;n=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=aa>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l)break;m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){P=277;break}c[14987]=m;P=277}else{if(c[A>>2]|0){if(a[C>>0]|0)break}else{do if((e[B>>1]|0)<36)l=D;else{l=c[E>>2]|0;if(l|0){c[E>>2]=c[l>>2];c[G>>2]=(c[G>>2]|0)+1;V=l;P=268;break p}l=c[F>>2]|0;if(!l){l=H;break}c[F>>2]=c[l>>2];c[G>>2]=(c[G>>2]|0)+1;V=l;P=268;break p}while(0);c[l>>2]=(c[l>>2]|0)+1}V=_d(J,36,0)|0;P=268}while(0);if((P|0)==268?(P=0,V|0):0){l=V;P=277}if((P|0)==277){P=0;c[l>>2]=q;c[l+4>>2]=p;c[l+8>>2]=o;c[l+12>>2]=h;c[l+16>>2]=0;break}if(q|0)ri(J,q);if(p|0)ni(J,p);if(o|0)ri(J,o);if(!h){l=0;break}ni(J,h);l=0}while(0);vj(U,t,r,i,s,l);break}case 121:{p=c[U>>2]|0;q=pj(U,0,0,0)|0;if(q|0){h=c[k+12>>2]|0;q:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;r:do if(!p){aa=Sv(o|0,0,-1,-1)|0;t=L()|0;if(t>>>0>0|(t|0)==0&aa>>>0>2147483390){l=0;break q}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=305;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){aa=c[14978]|0;t=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;s=L()|0;c[14768]=((s|0)<0|(s|0)==0&t>>>0<=aa>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break q}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break q}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<o>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=305;break r}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=305;break r}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=305}while(0);if((P|0)==305){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;s:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;t:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=322;else{l=0;break s}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<h>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];aa=p+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break t}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];aa=p+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break t}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=322}while(0);if((P|0)==322){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+4>>2]=l}}l=c[k+16>>2]|0;if(!l)l=0;else l=dk(J,l,0,0)|0;sj(U,q,l);break}default:{l=fk(J,c[k+8>>2]|0,0)|0;a[W>>0]=4;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;kj(U,l,W)|0;if(l|0)pi(J,l,1)}}do if((a[k>>0]|0)!=-125){l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;n=c[y>>2]|0;a[n+(l*20|0)>>0]=124;l=n+(l*20|0)+1|0;n=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));break}else{Di(I,124,0,0,0)|0;break}}while(0);k=c[k+36>>2]|0;if(!k)break f}}while(0);do if(j|0){k=c[N+12>>2]|0;j=~j;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,N,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[N+108>>2];break}}while(0);m=N+108|0;j=c[m>>2]|0;if((c[N+112>>2]|0)>(j|0)){c[m>>2]=j+1;l=c[N+104>>2]|0;a[l+(j*20|0)>>0]=69;l=l+(j*20|0)+1|0;n=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0))}else Di(N,69,0,0,0)|0;l=f+36|0;do if(c[l>>2]|0){k=c[U>>2]|0;j=c[O>>2]|0;if(j|0){if(k|0){if(c[k+480>>2]|0){Xd(k,j);break}aa=j;if((c[k+304>>2]|0)>>>0<=aa>>>0?(c[k+308>>2]|0)>>>0>aa>>>0:0){aa=k+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}}else{c[f+4>>2]=c[O>>2];c[l>>2]=c[U+36>>2];c[f+12>>2]=c[U+12>>2]}while(0);if((a[_+81>>0]|0)==0?(c[l>>2]|0)==0:0){f=N+104|0;aa=c[f>>2]|0;Fi(N,Y+96|0);c[Q+4>>2]=c[m>>2];c[f>>2]=0;c[Q>>2]=aa}c[Q+8>>2]=c[U+44>>2];c[Q+12>>2]=c[U+40>>2];c[Q+20>>2]=g;c[R>>2]=c[U+136>>2];c[S>>2]=c[U+140>>2];l=c[N>>2]|0;kb(l,N);m=c[N+4>>2]|0;k=N+8|0;j=c[k>>2]|0;if(!m)c[l+4>>2]=j;else{c[m+8>>2]=j;j=c[k>>2]|0}if(j|0)c[j+4>>2]=m;c[N+20>>2]=1443283912;c[N>>2]=0;do if(l){if(c[l+480>>2]|0){Xd(l,N);break}aa=N;if((c[l+304>>2]|0)>>>0<=aa>>>0?(c[l+308>>2]|0)>>>0>aa>>>0:0){aa=l+300|0;c[N>>2]=c[aa>>2];c[aa>>2]=N}else P=370}else P=370;while(0);do if((P|0)==370)if(!(c[7324]|0)){ab[c[29344>>2]&127](N);break}else{aa=Wa[c[29352>>2]&127](N)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](N);break}while(0);l=c[U>>2]|0;j=c[U+64>>2]|0;u:do if(j|0){do if(l|0){if(c[l+480>>2]|0){Xd(l,j);break u}k=j;if((c[l+304>>2]|0)>>>0>k>>>0)break;if((c[l+308>>2]|0)>>>0<=k>>>0)break;aa=l+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[U+68>>2]|0;if(j|0)ri(l,j);j=U+24|0;if(l){aa=l+272|0;c[aa>>2]=(c[aa>>2]|0)-(d[j>>0]|0)}}a[j>>0]=0;if(c[_+480>>2]|0){Xd(_,U);aa=Z;Ra=$;return aa|0}if((c[_+304>>2]|0)>>>0<=T>>>0?(c[_+308>>2]|0)>>>0>T>>>0:0){aa=_+300|0;c[U>>2]=c[aa>>2];c[aa>>2]=U;aa=Z;Ra=$;return aa|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](U);aa=Z;Ra=$;return aa|0}else{aa=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);aa=Z;Ra=$;return aa|0}return 0}function Om(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;z=B;A=c[h+20>>2]|0;o=c[h+40>>2]|0;do if((A|0)==1){x=b[g+40>>1]|0;k=x<<16>>16;if(x<<16>>16>-1){if(!o){A=0;Ra=B;return A|0}l=c[(c[g+4>>2]|0)+(k<<4)>>2]|0;x=a[l>>0]|0;k=(d[208+(x&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(x<<24>>24==0|(k|0)!=0)){m=o;do{l=l+1|0;m=m+1|0;x=a[l>>0]|0;k=(d[208+(x&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(k|0)!=0))}if(!k){A=0;Ra=B;return A|0}else{x=0;w=0}}else{x=0;w=0}}else if(j){m=c[f>>2]|0;n=A<<2;a:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))y=19;else{A=1;Ra=B;return A|0}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];x=m+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];x=m+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;y=19}while(0);if((y|0)==19)k=_d(m,n,0)|0;if(!k){A=1;Ra=B;return A|0}else{c[j>>2]=k;x=k;w=k;break}}else{x=0;w=0}while(0);k=c[g+8>>2]|0;b:do if(k|0){u=(o|0)==0;v=(A|0)>0;s=g+4|0;t=(x|0)==0;r=k;c:while(1){do if(((A|0)==(e[r+50>>1]|0)?a[r+54>>0]|0:0)?(c[r+36>>2]|0)==0:0){if(u){q=r+55|0;if(((d[q>>0]|d[q+1>>0]<<8)&3)==2){y=29;break c}else break}d:do if(v){q=r+32|0;p=c[r+4>>2]|0;k=0;do{g=b[p+(k<<1)>>1]|0;j=g<<16>>16;if(g<<16>>16<0)break d;o=c[s>>2]|0;n=c[o+(j<<4)+8>>2]|0;n=(n|0)==0?34049:n;m=c[(c[q>>2]|0)+(k<<2)>>2]|0;g=a[m>>0]|0;l=(d[208+(g&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(g<<24>>24==0|(l|0)!=0))do{m=m+1|0;n=n+1|0;g=a[m>>0]|0;l=(d[208+(g&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(g<<24>>24==0|(l|0)!=0));if(l|0)break d;o=c[o+(j<<4)>>2]|0;g=d[208+(d[o>>0]|0)>>0]|0;l=0;do{n=c[h+36+(l<<3)+4>>2]|0;j=a[n>>0]|0;m=(d[208+(j&255)>>0]|0)-g|0;if(!(j<<24>>24==0|(m|0)!=0)){j=o;do{n=n+1|0;j=j+1|0;C=a[n>>0]|0;m=(d[208+(C&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(m|0)!=0))}if(!m){y=45;break}l=l+1|0}while((l|0)<(A|0));if((y|0)==45){y=0;if(!t)c[x+(k<<2)>>2]=c[h+36+(l<<3)>>2]}if((l|0)==(A|0))break d;k=k+1|0}while((k|0)<(A|0))}else k=0;while(0);if((k|0)==(A|0))break c}while(0);k=c[r+20>>2]|0;if(!k)break b;else r=k}if((y|0)==29?(x|0)!=0&v:0){k=0;do{c[x+(k<<2)>>2]=c[h+36+(k<<3)>>2];k=k+1|0}while((k|0)!=(A|0))}c[i>>2]=r;C=0;Ra=B;return C|0}while(0);if(!(a[f+146>>0]|0)){C=c[h+8>>2]|0;c[z>>2]=c[c[h>>2]>>2];c[z+4>>2]=C;cd(f,44708,z)}k=c[f>>2]|0;if(!w){C=1;Ra=B;return C|0}if(k|0){if(c[k+480>>2]|0){Xd(k,w);C=1;Ra=B;return C|0}C=w;if((c[k+304>>2]|0)>>>0<=C>>>0?(c[k+308>>2]|0)>>>0>C>>>0:0){C=k+300|0;c[w>>2]=c[C>>2];c[C>>2]=w;C=1;Ra=B;return C|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](w);C=1;Ra=B;return C|0}else{C=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);C=1;Ra=B;return C|0}return 0}function Pm(f,g,h,i,j,k,l,m,n){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;A=f+8|0;o=c[A>>2]|0;a:do if(!o){r=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[r+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))L=15;else{J=0;break a}else{do if((e[r+276>>1]|0)>=224){o=r+300|0;p=c[o>>2]|0;if(p|0){c[o>>2]=c[p>>2];K=r+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}o=r+296|0;p=c[o>>2]|0;if(!p){o=r+292|0;break}else{c[o>>2]=c[p>>2];K=r+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}}else o=r+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;L=15}while(0);if((L|0)==15)p=_d(r,224,0)|0;if(!p)J=0;else{o=p+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[p>>2]=r;o=r+4|0;q=c[o>>2]|0;if(q|0)c[q+4>>2]=p;c[p+8>>2]=q;c[p+4>>2]=0;c[o>>2]=p;c[p+20>>2]=381479589;c[p+12>>2]=f;c[A>>2]=p;Di(p,61,0,1,0)|0;J=p}}else J=o;while(0);K=(c[f+40>>2]|0)+-1|0;D=f+56|0;I=c[D>>2]|0;H=I+-1|0;c[D>>2]=H;do if((m|0)<0){o=d[j+24>>0]|0;p=J+108|0;q=c[p>>2]|0;if((c[J+112>>2]|0)>(q|0)){c[p>>2]=q+1;D=c[J+104>>2]|0;a[D+(q*20|0)>>0]=46;b[D+(q*20|0)+2>>1]=0;c[D+(q*20|0)+4>>2]=o;c[D+(q*20|0)+8>>2]=H;c[D+(q*20|0)+12>>2]=0;c[D+(q*20|0)+16>>2]=0;a[D+(q*20|0)+1>>0]=0;break}else{Di(J,46,o,H,0)|0;break}}while(0);v=j+20|0;o=c[v>>2]|0;if((o|0)>0){r=l+1|0;s=J+108|0;t=J+112|0;u=J+104|0;q=0;do{o=r+(c[k+(q<<2)>>2]|0)|0;p=c[s>>2]|0;if((c[t>>2]|0)>(p|0)){c[s>>2]=p+1;D=c[u>>2]|0;a[D+(p*20|0)>>0]=50;b[D+(p*20|0)+2>>1]=0;c[D+(p*20|0)+4>>2]=o;c[D+(p*20|0)+8>>2]=H;c[D+(p*20|0)+12>>2]=0;c[D+(p*20|0)+16>>2]=0;a[D+(p*20|0)+1>>0]=0}else Di(J,50,o,H,0)|0;q=q+1|0;o=c[v>>2]|0}while((q|0)<(o|0));D=o}else D=o;do if(!n){if(!i){u=f+19|0;o=a[u>>0]|0;if(!(o<<24>>24)){G=f+44|0;t=(c[G>>2]|0)+1|0;c[G>>2]=t}else{t=o+-1<<24>>24;a[u>>0]=t;t=c[f+148+((t&255)<<2)>>2]|0}o=l+1+(c[k>>2]|0)|0;r=J+108|0;p=c[r>>2]|0;s=J+112|0;if((c[s>>2]|0)>(p|0)){c[r>>2]=p+1;G=c[J+104>>2]|0;a[G+(p*20|0)>>0]=79;b[G+(p*20|0)+2>>1]=0;c[G+(p*20|0)+4>>2]=o;c[G+(p*20|0)+8>>2]=t;c[G+(p*20|0)+12>>2]=0;c[G+(p*20|0)+16>>2]=0;a[G+(p*20|0)+1>>0]=0}else Di(J,79,o,t,0)|0;o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;q=c[J+104>>2]|0;a[q+(o*20|0)>>0]=15;b[q+(o*20|0)+2>>1]=0;c[q+(o*20|0)+4>>2]=t;c[q+(o*20|0)+8>>2]=0;c[q+(o*20|0)+12>>2]=0;c[q+(o*20|0)+16>>2]=0;a[q+(o*20|0)+1>>0]=0;q=o}else q=Di(J,15,t,0,0)|0;if((m|0)==1?(c[j>>2]|0)==(h|0):0){o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;G=c[J+104>>2]|0;a[G+(o*20|0)>>0]=53;b[G+(o*20|0)+2>>1]=0;c[G+(o*20|0)+4>>2]=l;c[G+(o*20|0)+8>>2]=H;c[G+(o*20|0)+12>>2]=t;c[G+(o*20|0)+16>>2]=0;a[G+(o*20|0)+1>>0]=0}else Di(J,53,l,H,t)|0;o=c[r>>2]|0;if((o|0)>0)b[(c[J+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=144}Gj(f,K,g,h,108);o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=31;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=K;c[l+(o*20|0)+8>>2]=0;c[l+(o*20|0)+12>>2]=t;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else Di(J,31,K,0,t)|0;o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=11;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=0;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=0;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else Di(J,11,0,H,0)|0;p=c[r>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){o=c[J+104>>2]|0;c[o+((((p|0)<2?-1:-2)+p|0)*20|0)+8>>2]=p;o=o+(((q|0)<0?p+-1|0:q)*20|0)|0}else{c[14829]=p;o=59308}c[o+8>>2]=p;if(!t)break;o=a[u>>0]|0;if((o&255)>=8)break;a[u>>0]=o+1<<24>>24;c[f+148+((o&255)<<2)>>2]=t;break}C=(D|0)==1;do if(C){o=f+19|0;p=a[o>>0]|0;if(!(p<<24>>24)){z=f+44|0;B=(c[z>>2]|0)+1|0;c[z>>2]=B;break}else{B=p+-1<<24>>24;a[o>>0]=B;B=c[f+148+((B&255)<<2)>>2]|0;break}}else{o=f+32|0;p=c[o>>2]|0;q=f+28|0;r=c[q>>2]|0;if((r|0)<(D|0)){z=f+44|0;B=c[z>>2]|0;c[z>>2]=B+D;B=B+1|0;break}else{c[o>>2]=p+D;c[q>>2]=r-D;B=p;break}}while(0);z=f+19|0;o=a[z>>0]|0;if(!(o<<24>>24)){x=f+44|0;y=(c[x>>2]|0)+1|0;c[x>>2]=y}else{y=o+-1<<24>>24;a[z>>0]=y;y=c[f+148+((y&255)<<2)>>2]|0}o=c[i+44>>2]|0;w=J+108|0;p=c[w>>2]|0;x=J+112|0;if((c[x>>2]|0)>(p|0)){c[w>>2]=p+1;n=c[J+104>>2]|0;a[n+(p*20|0)>>0]=108;b[n+(p*20|0)+2>>1]=0;c[n+(p*20|0)+4>>2]=K;c[n+(p*20|0)+8>>2]=o;c[n+(p*20|0)+12>>2]=g;c[n+(p*20|0)+16>>2]=0;a[n+(p*20|0)+1>>0]=0}else Di(J,108,K,o,g)|0;o=c[A>>2]|0;q=Ij(f,i)|0;do if(q|0){p=c[o>>2]|0;if(!(a[p+81>>0]|0)){A=c[o+104>>2]|0;g=(c[o+108>>2]|0)+-1|0;a[A+(g*20|0)+1>>0]=-9;c[A+(g*20|0)+16>>2]=q;break}if((c[p+480>>2]|0)==0?(g=(c[q>>2]|0)+-1|0,c[q>>2]=g,(g|0)==0):0){o=c[q+12>>2]|0;if(o|0){if(c[o+480>>2]|0){Xd(o,q);break}g=q;if((c[o+304>>2]|0)>>>0<=g>>>0?(c[o+308>>2]|0)>>>0>g>>>0:0){g=o+300|0;c[q>>2]=c[g>>2];c[g>>2]=q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{g=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}}while(0);u=(D|0)>0;if(u){p=l+1|0;q=J+104|0;o=0;do{r=p+(c[k+(o<<2)>>2]|0)|0;s=o+B|0;t=c[w>>2]|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;g=c[q>>2]|0;a[g+(t*20|0)>>0]=78;b[g+(t*20|0)+2>>1]=0;c[g+(t*20|0)+4>>2]=r;c[g+(t*20|0)+8>>2]=s;c[g+(t*20|0)+12>>2]=0;c[g+(t*20|0)+16>>2]=0;a[g+(t*20|0)+1>>0]=0}else Di(J,78,r,s,0)|0;o=o+1|0}while((o|0)!=(D|0))}do if((m|0)==1?(c[j>>2]|0)==(h|0):0){o=c[w>>2]|0;n=D+1+o|0;if(u){u=l+1|0;v=i+4|0;s=h+40|0;t=J+104|0;r=0;do{p=u+(c[k+(r<<2)>>2]|0)|0;q=b[(c[v>>2]|0)+(r<<1)>>1]|0;q=(q<<16>>16==(b[s>>1]|0)?0:(q<<16>>16)+1|0)+l|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;h=c[t>>2]|0;a[h+(o*20|0)>>0]=52;b[h+(o*20|0)+2>>1]=0;c[h+(o*20|0)+4>>2]=p;c[h+(o*20|0)+8>>2]=n;c[h+(o*20|0)+12>>2]=q;c[h+(o*20|0)+16>>2]=0;a[h+(o*20|0)+1>>0]=0}else Di(J,52,p,n,q)|0;o=c[w>>2]|0;if((o|0)>0)b[(c[t>>2]|0)+((o+-1|0)*20|0)+2>>1]=16;r=r+1|0}while((r|0)!=(D|0))}if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=11;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=0;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=0;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0;break}else{Di(J,11,0,H,0)|0;break}}while(0);r=gl(c[f>>2]|0,i)|0;o=c[w>>2]|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=92;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=B;c[l+(o*20|0)+8>>2]=D;c[l+(o*20|0)+12>>2]=y;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else o=Di(J,92,B,D,y)|0;p=c[J>>2]|0;do if(a[p+81>>0]|0){if((D|0)!=-12)kg(p,D,r)}else{if((o|0)<0)o=(c[w>>2]|0)+-1|0;p=c[J+104>>2]|0;q=p+(o*20|0)|0;if((D|0)<=-1?(E=p+(o*20|0)+1|0,(a[E>>0]|0)==0):0){if((D|0)==-3){c[p+(o*20|0)+16>>2]=r;a[E>>0]=-3;break}if(!r)break;c[p+(o*20|0)+16>>2]=r;a[E>>0]=D;if((D|0)!=-12)break;l=r+12|0;c[l>>2]=(c[l>>2]|0)+1;break}Ei(J,q,r,D)}while(0);o=c[w>>2]|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=29;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=K;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=y;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else o=Di(J,29,K,H,y)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){H=c[J+104>>2]|0;a[H+(o*20|0)+1>>0]=-3;c[H+(o*20|0)+16>>2]=0}if(y|0?(F=a[z>>0]|0,(F&255)<8):0){a[z>>0]=F+1<<24>>24;c[f+148+((F&255)<<2)>>2]=y}if(!C){o=f+28|0;if((c[o>>2]|0)>=(D|0))break;c[o>>2]=D;c[f+32>>2]=B;break}if(B|0?(G=a[z>>0]|0,(G&255)<8):0){a[z>>0]=G+1<<24>>24;c[f+148+((G&255)<<2)>>2]=B}}while(0);o=a[j+24>>0]|0;p=o<<24>>24==0;do if(p){if(((0==0?(c[(c[f>>2]|0)+32>>2]&524288|0)==0:0)?(c[f+116>>2]|0)==0:0)?(a[f+20>>0]|0)==0:0){Uj(f,787,2,0,-1,4);break}if(!((m|0)<1|p^1)){L=c[f+116>>2]|0;a[((L|0)==0?f:L)+21>>0]=1;L=141}else L=141}else L=141;while(0);do if((L|0)==141){o=o&255;p=J+108|0;q=c[p>>2]|0;if((c[J+112>>2]|0)>(q|0)){c[p>>2]=q+1;f=c[J+104>>2]|0;a[f+(q*20|0)>>0]=-106;b[f+(q*20|0)+2>>1]=0;c[f+(q*20|0)+4>>2]=o;c[f+(q*20|0)+8>>2]=m;c[f+(q*20|0)+12>>2]=0;c[f+(q*20|0)+16>>2]=0;a[f+(q*20|0)+1>>0]=0;break}else{Di(J,150,o,m,0)|0;break}}while(0);p=c[J+12>>2]|0;o=0-I|0;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0){mk(p,J,o);o=J+108|0}else{m=J+108|0;c[(c[p+64>>2]|0)+(o<<2)>>2]=c[m>>2];o=m}p=c[o>>2]|0;if((c[J+112>>2]|0)>(p|0)){c[o>>2]=p+1;m=c[J+104>>2]|0;a[m+(p*20|0)>>0]=117;b[m+(p*20|0)+2>>1]=0;c[m+(p*20|0)+4>>2]=K;c[m+(p*20|0)+8>>2]=0;c[m+(p*20|0)+12>>2]=0;c[m+(p*20|0)+16>>2]=0;a[m+(p*20|0)+1>>0]=0;return}else{Di(J,117,K,0,0)|0;return}}function Qm(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+80|0;N=P;M=P+40|0;L=P+8|0;O=c[f>>2]|0;q=f+8|0;n=c[q>>2]|0;a:do if(!n){if((c[f+116>>2]|0)==0?(b[O+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[O+272>>2]|0)if(!(a[O+81>>0]|0))p=15;else{K=0;break a}else{do if((e[O+276>>1]|0)>=224){n=O+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];K=O+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}n=O+296|0;o=c[n>>2]|0;if(!o){n=O+292|0;break}else{c[n>>2]=c[o>>2];K=O+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}}else n=O+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;p=15}while(0);if((p|0)==15)o=_d(O,224,0)|0;if(!o)K=0;else{n=o+104|0;p=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(p|0));c[o>>2]=O;n=O+4|0;p=c[n>>2]|0;if(p|0)c[p+4>>2]=o;c[o+8>>2]=p;c[o+4>>2]=0;c[n>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[q>>2]=o;Di(o,61,0,1,0)|0;K=o}}else K=n;while(0);do if((m|0)<0){n=d[j+24>>0]|0;o=K+108|0;p=c[o>>2]|0;if((c[K+112>>2]|0)>(p|0)){c[o>>2]=p+1;H=c[K+104>>2]|0;a[H+(p*20|0)>>0]=46;b[H+(p*20|0)+2>>1]=0;c[H+(p*20|0)+4>>2]=n;c[H+(p*20|0)+8>>2]=0;c[H+(p*20|0)+12>>2]=0;c[H+(p*20|0)+16>>2]=0;a[H+(p*20|0)+1>>0]=0;H=p;break}else{H=Di(K,46,n,0,0)|0;break}}else H=0;while(0);t=j+20|0;if((c[t>>2]|0)>0){u=(i|0)==0;v=M+4|0;w=i+4|0;x=(k|0)==0;y=j+36|0;z=M+4|0;A=h+40|0;B=h+4|0;C=l+1|0;D=M+4|0;E=M+4|0;r=0;s=0;do{if(u)o=-1;else o=b[(c[w>>2]|0)+(s<<1)>>1]|0;p=o&65535;q=c[f>>2]|0;c[M>>2]=0;c[v>>2]=0;n=oj(q,168,M,0)|0;do if(!n)n=0;else{if(p<<16>>16>-1?(b[A>>1]|0)!=p<<16>>16:0){p=c[B>>2]|0;c[n+28>>2]=C+o;a[n+1>>0]=a[p+(o<<4)+13>>0]|0;o=c[p+(o<<4)+8>>2]|0;if(o|0){c[M>>2]=o;q=(Eu(o)|0)&1073741823;c[D>>2]=q;if((q|0)!=0?(F=oj(c[f>>2]|0,106,M,0)|0,(F|0)!=0):0){c[F+12>>2]=n;n=F+4|0;c[n>>2]=c[n>>2]|4352;n=F}break}o=c[c[q+8>>2]>>2]|0;c[M>>2]=o;if(o){q=(Eu(o)|0)&1073741823;c[E>>2]=q;if((q|0)!=0?(G=oj(c[f>>2]|0,106,M,0)|0,(G|0)!=0):0){c[G+12>>2]=n;n=G+4|0;c[n>>2]=c[n>>2]|4352;n=G}}else c[E>>2]=0;break}c[n+28>>2]=l;a[n+1>>0]=68}while(0);o=c[(c[(c[j>>2]|0)+4>>2]|0)+(c[(x?y:k+(s<<2)|0)>>2]<<16>>16<<4)>>2]|0;c[M>>2]=o;if(!o)o=0;else o=(Eu(o)|0)&1073741823;c[z>>2]=o;r=Xk(O,r,ej(f,53,n,oj(O,59,M,0)|0)|0)|0;s=s+1|0}while((s|0)<(c[t>>2]|0));n=j}else{r=0;n=j}if((m|0)>0?(c[n>>2]|0)==(h|0):0){if(!(c[h+36>>2]&32)){n=c[f>>2]|0;c[M>>2]=0;c[M+4>>2]=0;n=oj(n,168,M,0)|0;if(!n)n=0;else{c[n+28>>2]=l;a[n+1>>0]=68}o=c[g+48>>2]|0;c[M>>2]=0;c[M+4>>2]=0;p=oj(O,162,M,0)|0;if(p|0){c[p+44>>2]=h;c[p+28>>2]=o;b[p+32>>1]=-1}n=ej(f,52,n,p)|0}else{C=i+50|0;if(!(b[C>>1]|0))n=0;else{y=i+4|0;z=M+4|0;A=h+4|0;B=M+4|0;u=h+40|0;v=l+1|0;w=M+4|0;x=M+4|0;n=0;t=0;do{p=b[(c[y>>2]|0)+(t<<1)>>1]|0;q=c[f>>2]|0;c[M>>2]=0;c[z>>2]=0;o=oj(q,168,M,0)|0;s=p<<16>>16;do if(!o)p=0;else{if(p<<16>>16>-1?(b[u>>1]|0)!=p<<16>>16:0){p=c[A>>2]|0;c[o+28>>2]=v+s;a[o+1>>0]=a[p+(s<<4)+13>>0]|0;p=c[p+(s<<4)+8>>2]|0;if(p|0){c[M>>2]=p;h=(Eu(p)|0)&1073741823;c[w>>2]=h;if((h|0)!=0?(I=oj(c[f>>2]|0,106,M,0)|0,(I|0)!=0):0){c[I+12>>2]=o;o=I+4|0;c[o>>2]=c[o>>2]|4352;o=I}p=o;break}p=c[c[q+8>>2]>>2]|0;c[M>>2]=p;if(p){h=(Eu(p)|0)&1073741823;c[x>>2]=h;if((h|0)!=0?(J=oj(c[f>>2]|0,106,M,0)|0,(J|0)!=0):0){c[J+12>>2]=o;o=J+4|0;c[o>>2]=c[o>>2]|4352;o=J}}else c[x>>2]=0;p=o;break}c[o+28>>2]=l;a[o+1>>0]=68;p=o}while(0);o=c[(c[A>>2]|0)+(s<<4)>>2]|0;c[M>>2]=o;if(!o)o=0;else o=(Eu(o)|0)&1073741823;c[B>>2]=o;n=Xk(O,n,ej(f,45,p,oj(O,59,M,0)|0)|0)|0;t=t+1|0}while(t>>>0<(e[C>>1]|0)>>>0)}n=ej(f,19,n,0)|0}r=Xk(O,r,n)|0}s=L+8|0;c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=0;c[s+16>>2]=0;c[s+20>>2]=0;c[L+4>>2]=g;c[L>>2]=f;s=(r|0)==0;do if(!s){p=L+24|0;b[p>>1]=0;c[M>>2]=f;c[M+4>>2]=125;c[M+8>>2]=126;c[M+12>>2]=0;c[M+24>>2]=L;n=r+24|0;o=f+208|0;L=(c[o>>2]|0)+(c[n>>2]|0)|0;c[o>>2]=L;o=c[(c[f>>2]|0)+120>>2]|0;if((o|0)<(L|0)){c[N>>2]=o;cd(f,41637,N);break}else{_j(M,r)|0;N=(c[M>>2]|0)+208|0;c[N>>2]=(c[N>>2]|0)-(c[n>>2]|0);N=r+4|0;c[N>>2]=c[N>>2]|b[p>>1]&-32752&65535;break}}while(0);if(!(c[f+36>>2]|0)){q=ql(f,g,r,0,0,0,0)|0;n=d[j+24>>0]|0;o=K+108|0;p=c[o>>2]|0;if((c[K+112>>2]|0)>(p|0)){c[o>>2]=p+1;j=c[K+104>>2]|0;a[j+(p*20|0)>>0]=-106;b[j+(p*20|0)+2>>1]=0;c[j+(p*20|0)+4>>2]=n;c[j+(p*20|0)+8>>2]=m;c[j+(p*20|0)+12>>2]=0;c[j+(p*20|0)+16>>2]=0;a[j+(p*20|0)+1>>0]=0}else Di(K,150,n,m,0)|0;if(q|0)sl(q)}if(!s)ni(O,r);if(!H){Ra=P;return}o=c[K+108>>2]|0;if(!(a[(c[K>>2]|0)+81>>0]|0))n=(c[K+104>>2]|0)+(((H|0)<0?o+-1|0:H)*20|0)|0;else n=59308;c[n+8>>2]=o;Ra=P;return}function Rm(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;aa=Ra;Ra=Ra+48|0;V=aa+16|0;Q=aa+36|0;T=aa+32|0;W=aa+8|0;R=aa;S=aa+24|0;$=c[f>>2]|0;_=(i|0)!=0;i=_&1;Y=a[h+25+i>>0]|0;U=Y<<24>>24==7;if(U?!(0==0?(c[$+32>>2]&524288|0)==0:0):0){$=0;Ra=aa;return $|0}Z=h+28+(i<<2)|0;i=c[Z>>2]|0;if(Y<<24>>24==0|(i|0)!=0){$=i;Ra=aa;return $|0}c[Q>>2]=0;c[T>>2]=0;a:do if(!(Om(f,g,h,Q,T)|0)){u=h+20|0;if((c[u>>2]|0)>0){w=29616;v=c[w>>2]|0;w=c[w+4>>2]|0;y=29624;x=c[y>>2]|0;y=c[y+4>>2]|0;z=h+36|0;A=g+4|0;B=g+40|0;C=S+4|0;D=R+4|0;P=Y<<24>>24!=7&(_|Y<<24>>24!=10);E=$+272|0;F=$+276|0;G=$+81|0;H=$+288|0;I=$+300|0;J=f+200|0;K=$+296|0;M=$+284|0;N=$+292|0;O=f+272|0;s=0;t=0;m=0;j=0;while(1){k=V;c[k>>2]=v;c[k+4>>2]=w;k=W;c[k>>2]=x;c[k+4>>2]=y;k=c[T>>2]|0;k=c[((k|0)==0?z:k+(t<<2)|0)>>2]|0;i=c[Q>>2]|0;if(!i)i=B;else i=(c[i+4>>2]|0)+(t<<1)|0;i=c[(c[A>>2]|0)+(b[i>>1]<<4)>>2]|0;c[S>>2]=i;if(!i)i=0;else i=(Eu(i)|0)&1073741823;c[C>>2]=i;i=c[(c[(c[h>>2]|0)+4>>2]|0)+(k<<4)>>2]|0;c[R>>2]=i;if(!i)i=0;else i=(Eu(i)|0)&1073741823;c[D>>2]=i;r=oj($,59,V,0)|0;r=ej(f,134,r,oj($,59,S,0)|0)|0;j=Xk($,j,ej(f,53,r,oj($,59,R,0)|0)|0)|0;if(_){q=oj($,59,V,0)|0;q=ej(f,134,q,oj($,59,S,0)|0)|0;r=oj($,59,W,0)|0;s=Xk($,s,ej(f,45,q,ej(f,134,r,oj($,59,S,0)|0)|0)|0)|0}b:do if(P){c:do switch(Y<<24>>24){case 10:{i=ej(f,134,oj($,59,W,0)|0,oj($,59,S,0)|0)|0;break}case 9:{i=c[(c[(c[h>>2]|0)+4>>2]|0)+(k<<4)+4>>2]|0;if(i|0){i=dk($,i,0,0)|0;break c}d:do if(c[E>>2]|0)if(!(a[G>>0]|0))X=28;else{i=0;break c}else{do if((e[F>>1]|0)<52)i=H;else{i=c[I>>2]|0;if(i|0){c[I>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break d}i=c[K>>2]|0;if(!i){i=N;break}c[K>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break d}while(0);c[i>>2]=(c[i>>2]|0)+1;X=28}while(0);if((X|0)==28){X=0;i=_d($,52,0)|0}if(i){k=i;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[i>>0]=114;b[i+34>>1]=-1;c[i+24>>2]=1}break}default:{do if(c[E>>2]|0)if(!(a[G>>0]|0))X=39;else{i=0;break c}else{if((e[F>>1]|0)>=52){i=c[I>>2]|0;if(i|0){c[I>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break}i=c[K>>2]|0;if(!i)i=N;else{c[K>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break}}else i=H;c[i>>2]=(c[i>>2]|0)+1;X=39}while(0);if((X|0)==39){X=0;i=_d($,52,0)|0}if(i){k=i;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[i>>0]=114;b[i+34>>1]=-1;c[i+24>>2]=1}}}while(0);r=nj(c[f>>2]|0,m,i)|0;if(r){q=(c[r>>2]|0)+-1|0;l=c[f>>2]|0;o=c[R>>2]|0;p=c[D>>2]|0;e:do if(o){m=Sv(p|0,0,1,0)|0;n=L()|0;f:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=54;else{m=0;break e}else{do if(0<0|(0==0?p>>>0<(e[l+276>>1]|0)>>>0:0)){k=l+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];n=l+284|0;c[n>>2]=(c[n>>2]|0)+1;break f}k=l+296|0;i=c[k>>2]|0;if(!i){i=l+292|0;break}else{c[k>>2]=c[i>>2];n=l+284|0;c[n>>2]=(c[n>>2]|0)+1;break f}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=54}while(0);if((X|0)==54){X=0;i=_d(l,m,n)|0}if(i){ew(i|0,o|0,p|0)|0;a[i+p>>0]=0;m=i}else m=0}else m=0;while(0);c[r+4+(q*20|0)+4>>2]=m;if((d[J>>0]|0)>1){l=c[f>>2]|0;g:do if(!l){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;X=81;break}i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){q=c[14978]|0;p=Tv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;o=L()|0;c[14768]=((o|0)<0|(o|0)==0&p>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=r;break b}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){i=r;break b}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=81;break g}k=l+296|0;i=c[k>>2]|0;if(!i){i=l+292|0;break}else{c[k>>2]=c[i>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=81;break g}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(l,16,0)|0;X=81}while(0);if((X|0)==81){X=0;if(!i){i=r;break}}o=i+4|0;p=o;a[p>>0]=0;a[p+1>>0]=0;a[p+2>>0]=0;a[p+3>>0]=0;o=o+4|0;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;c[i>>2]=m;o=R;p=c[o+4>>2]|0;q=i+4|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;c[i+12>>2]=c[O>>2];c[O>>2]=i;i=r}else i=r}else i=0}else i=m;while(0);t=t+1|0;if((t|0)>=(c[u>>2]|0)){t=i;break}else m=i}}else{s=0;t=0;j=0}i=c[T>>2]|0;do if(i|0){if($|0){if(c[$+480>>2]|0){Xd($,i);break}T=i;if((c[$+304>>2]|0)>>>0<=T>>>0?(c[$+308>>2]|0)>>>0>T>>>0:0){T=$+300|0;c[i>>2]=c[T>>2];c[T>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{T=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=c[c[h>>2]>>2]|0;if(!o)n=0;else n=(Eu(o)|0)&1073741823;if(U){c[W>>2]=o;c[W+4>>2]=n;c[V>>2]=32436;c[V+4>>2]=29;i=oj($,71,V,0)|0;if(!i)i=nj(c[f>>2]|0,0,0)|0;else{a[i+1>>0]=2;i=nj(c[f>>2]|0,0,i)|0}r=mj(f,i,pj(f,0,W,0)|0,j,0,0,0,0,0)|0;p=0}else{r=0;p=j}q=$+272|0;i=(c[q>>2]|0)+1|0;c[q>>2]=i;m=n+81|0;h:do if(!$){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;X=124;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){W=c[14978]|0;V=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;U=L()|0;c[14768]=((U|0)<0|(U|0)==0&V>>>0<=W>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(j){i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;l=j;X=125}else{l=j;X=125}}else{m=0;k=0;i=s;l=0}}else{if(i){if(a[$+81>>0]|0){m=0;k=0;i=s;l=0;break}}else{do if(!(0<0|(0==0?(e[$+276>>1]|0)>>>0<m>>>0:0))){j=$+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];X=$+284|0;c[X>>2]=(c[X>>2]|0)+1;X=124;break h}j=$+296|0;i=c[j>>2]|0;if(!i){i=$+292|0;break}else{c[j>>2]=c[i>>2];X=$+284|0;c[X>>2]=(c[X>>2]|0)+1;X=124;break h}}else i=$+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d($,m,0)|0;X=124}while(0);if((X|0)==124)if(!i){m=0;k=0;i=s;l=0}else{l=i;X=125}if((X|0)==125){gw(l|0,0,m|0)|0;k=l+36|0;c[l+28>>2]=k;W=l+80|0;c[l+48>>2]=W;ew(W|0,o|0,n|0)|0;if(!p)i=0;else i=dk($,p,1,0)|0;c[l+52>>2]=i;W=gk($,t,1)|0;c[l+56>>2]=W;W=fk($,r,1)|0;c[l+44>>2]=W;if(!s){m=l;i=0}else{j=ej(f,19,s,0)|0;if(!j)i=0;else i=dk($,j,1,0)|0;c[l+12>>2]=i;m=l;i=j}}c[q>>2]=(c[q>>2]|0)+-1;if(p|0)ni($,p);if(i|0)ni($,i);if(t|0)ri($,t);if(r|0)pi($,r,1);if((a[$+81>>0]|0)!=1){switch(Y<<24>>24){case 7:{i=-125;break}case 10:{if(_)X=159;else i=121;break}default:X=159}if((X|0)==159)i=122;a[k>>0]=i;c[k+4>>2]=m;$=c[g+72>>2]|0;c[m+20>>2]=$;c[m+24>>2]=$;c[Z>>2]=m;a[m+8>>0]=_?122:121;$=l;Ra=aa;return $|0}if(l|0){j=c[l+28>>2]|0;i=c[j+16>>2]|0;if(i|0)ni($,i);i=c[j+20>>2]|0;if(i|0)ri($,i);i=c[j+8>>2]|0;if(i|0)pi($,i,1);i=c[l+12>>2]|0;if(i|0)ni($,i);if(c[$+480>>2]|0){Xd($,m);break}i=l;do if((c[$+304>>2]|0)>>>0<=i>>>0){if((c[$+308>>2]|0)>>>0<=i>>>0)break;$=$+300|0;c[l>>2]=c[$>>2];c[$>>2]=l;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{$=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}while(0);$=0;Ra=aa;return $|0}
- function Sm(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;p=c[d+8>>2]|0;e=c[d+112>>2]|0;if(!e)return;r=(c[d>>2]|0)+16|0;s=d+19|0;t=d+44|0;n=p+108|0;u=p+112|0;o=p+104|0;while(1){j=c[r>>2]|0;k=e+8|0;l=c[k>>2]|0;m=c[e+12>>2]|0;f=a[s>>0]|0;if(!(f<<24>>24)){i=(c[t>>2]|0)+1|0;c[t>>2]=i}else{i=f+-1<<24>>24;a[s>>0]=i;i=c[d+148+((i&255)<<2)>>2]|0}g=m+2|0;f=c[n>>2]|0;h=f+7|0;if((c[u>>2]|0)>(f|0)){c[n>>2]=f+1;v=c[o>>2]|0;a[v+(f*20|0)>>0]=55;b[v+(f*20|0)+2>>1]=0;c[v+(f*20|0)+4>>2]=g;c[v+(f*20|0)+8>>2]=h;c[v+(f*20|0)+12>>2]=m;c[v+(f*20|0)+16>>2]=0;a[v+(f*20|0)+1>>0]=0}else Di(p,55,g,h,m)|0;Gj(d,0,c[k>>2]|0,c[(c[j+(l<<4)+12>>2]|0)+72>>2]|0,109);f=ed(p,5,18320)|0;if(!f){e=14;break}v=m+1|0;c[f+4>>2]=v;c[f+28>>2]=v;c[f+44>>2]=m+-1;c[f+52>>2]=i;c[f+68>>2]=i;c[f+72>>2]=v;b[f+62>>1]=8;if(i|0?(q=a[s>>0]|0,(q&255)<8):0){a[s>>0]=q+1<<24>>24;c[d+148+((q&255)<<2)>>2]=i}e=c[e>>2]|0;if(!e){e=14;break}}if((e|0)==14)return}function Tm(f,g,h,i,j,k,l,m,n,o,p,q,r){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;Ja=Ra;Ra=Ra+48|0;T=Ja+16|0;S=Ja+8|0;P=Ja;Q=Ja+20|0;Ha=(l|0)!=0;U=c[f>>2]|0;Ia=f+8|0;s=c[Ia>>2]|0;a:do if(!s){if((c[f+116>>2]|0)==0?(b[U+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[U+272>>2]|0)if(!(a[U+81>>0]|0))Ca=15;else{Ga=0;break a}else{do if((e[U+276>>1]|0)>=224){s=U+300|0;t=c[s>>2]|0;if(t|0){c[s>>2]=c[t>>2];Ga=U+284|0;c[Ga>>2]=(c[Ga>>2]|0)+1;break b}s=U+296|0;t=c[s>>2]|0;if(!t){s=U+292|0;break}else{c[s>>2]=c[t>>2];Ga=U+284|0;c[Ga>>2]=(c[Ga>>2]|0)+1;break b}}else s=U+288|0;while(0);c[s>>2]=(c[s>>2]|0)+1;Ca=15}while(0);if((Ca|0)==15)t=_d(U,224,0)|0;if(!t)Ga=0;else{y=t+104|0;z=y+120|0;do{c[y>>2]=0;y=y+4|0}while((y|0)<(z|0));c[t>>2]=U;s=U+4|0;u=c[s>>2]|0;if(u|0)c[u+4>>2]=t;c[t+8>>2]=u;c[t+4>>2]=0;c[s>>2]=t;c[t+20>>2]=381479589;c[t+12>>2]=f;c[Ia>>2]=t;Di(t,61,0,1,0)|0;Ga=t}}else Ga=s;while(0);t=b[g+42>>1]|0;M=t<<16>>16;Fa=g+36|0;if(!(c[Fa>>2]&32)){Ea=0;Da=1}else{s=g+8|0;while(1){s=c[s>>2]|0;Ea=s+55|0;if(((d[Ea>>0]|d[Ea+1>>0]<<8)&3)==2)break;else s=s+20|0}Ea=s;Da=e[s+50>>1]|0}if(t<<16>>16>0){A=g+40|0;B=(q|0)==0;C=g+4|0;D=n<<24>>24==11;E=k+1|0;F=Ga+108|0;H=Ga+112|0;I=f+56|0;J=f+116|0;K=Ga+104|0;L=Ga+12|0;z=0;do{c:do if((z|0)!=(b[A>>1]|0)){if(!B?(c[q+(z<<2)>>2]|0)<0:0)break;u=c[C>>2]|0;s=a[u+(z<<4)+12>>0]|0;if(s<<24>>24){Ba=D?(s<<24>>24==11?2:s):n;s=Ba&255;if(Ba<<24>>24==5)s=(c[u+(z<<4)+4>>2]|0)==0?2:s;switch((s&255)<<24>>24){case 5:{Ca=33;break}case 2:{t=0;Ca=51;break}case 3:case 1:{t=0;break}default:{s=z+E|0;t=c[F>>2]|0;if((c[H>>2]|0)>(t|0)){c[F>>2]=t+1;Ba=c[K>>2]|0;a[Ba+(t*20|0)>>0]=50;b[Ba+(t*20|0)+2>>1]=0;c[Ba+(t*20|0)+4>>2]=s;c[Ba+(t*20|0)+8>>2]=o;c[Ba+(t*20|0)+12>>2]=0;c[Ba+(t*20|0)+16>>2]=0;a[Ba+(t*20|0)+1>>0]=0;break c}else{Di(Ga,50,s,o,0)|0;break c}}}do if((Ca|0)==33){Ca=0;t=(c[I>>2]|0)+-1|0;c[I>>2]=t;y=z+E|0;s=c[F>>2]|0;if((c[H>>2]|0)>(s|0)){c[F>>2]=s+1;Ba=c[K>>2]|0;a[Ba+(s*20|0)>>0]=51;b[Ba+(s*20|0)+2>>1]=0;c[Ba+(s*20|0)+4>>2]=y;c[Ba+(s*20|0)+8>>2]=t;c[Ba+(s*20|0)+12>>2]=0;c[Ba+(s*20|0)+16>>2]=0;a[Ba+(s*20|0)+1>>0]=0}else Di(Ga,51,y,t,0)|0;s=c[(c[C>>2]|0)+(z<<4)+4>>2]|0;do if(s){if((a[s>>0]|0)!=-88){O=Jj(f,s,y)|0;Ca=43;break}w=c[Ia>>2]|0;s=c[s+28>>2]|0;u=w+108|0;v=c[u>>2]|0;if((c[w+112>>2]|0)>(v|0)){c[u>>2]=v+1;Ba=c[w+104>>2]|0;a[Ba+(v*20|0)>>0]=78;b[Ba+(v*20|0)+2>>1]=0;c[Ba+(v*20|0)+4>>2]=s;c[Ba+(v*20|0)+8>>2]=y;c[Ba+(v*20|0)+12>>2]=0;c[Ba+(v*20|0)+16>>2]=0;a[Ba+(v*20|0)+1>>0]=0;break}else{Di(w,78,s,y,0)|0;break}}else{O=Jj(f,0,y)|0;Ca=43}while(0);do if(((Ca|0)==43?(0,(O|0)!=(y|0)):0)?(N=c[Ia>>2]|0,N|0):0){s=N+108|0;u=c[s>>2]|0;if((c[N+112>>2]|0)>(u|0)){c[s>>2]=u+1;Ca=c[N+104>>2]|0;a[Ca+(u*20|0)>>0]=79;b[Ca+(u*20|0)+2>>1]=0;c[Ca+(u*20|0)+4>>2]=O;c[Ca+(u*20|0)+8>>2]=y;c[Ca+(u*20|0)+12>>2]=0;c[Ca+(u*20|0)+16>>2]=0;a[Ca+(u*20|0)+1>>0]=0;break}else{Di(N,79,O,y,0)|0;break}}while(0);s=c[F>>2]|0;if((c[H>>2]|0)>(s|0)){c[F>>2]=s+1;Ca=c[K>>2]|0;a[Ca+(s*20|0)>>0]=51;b[Ca+(s*20|0)+2>>1]=0;c[Ca+(s*20|0)+4>>2]=y;c[Ca+(s*20|0)+8>>2]=t;c[Ca+(s*20|0)+12>>2]=0;c[Ca+(s*20|0)+16>>2]=0;a[Ca+(s*20|0)+1>>0]=0;s=2;Ca=51;break}else{Di(Ga,51,y,t,0)|0;s=2;Ca=51;break}}while(0);if((Ca|0)==51){Ca=0;u=c[J>>2]|0;a[((u|0)==0?f:u)+21>>0]=1;u=c[C>>2]|0}w=c[u+(z<<4)>>2]|0;c[P>>2]=c[g>>2];c[P+4>>2]=w;w=dd(U,40358,P)|0;u=z+E|0;v=c[F>>2]|0;if((c[H>>2]|0)>(v|0)){c[F>>2]=v+1;Ba=c[K>>2]|0;a[Ba+(v*20|0)>>0]=68;b[Ba+(v*20|0)+2>>1]=0;c[Ba+(v*20|0)+4>>2]=1299;c[Ba+(v*20|0)+8>>2]=s;c[Ba+(v*20|0)+12>>2]=u;c[Ba+(v*20|0)+16>>2]=0;a[Ba+(v*20|0)+1>>0]=0}else Di(Ga,68,1299,s,u)|0;s=c[Ga>>2]|0;do if(a[s+81>>0]|0){if(w|0){if(s|0){if(c[s+480>>2]|0){Xd(s,w);break}Ba=w;if((c[s+304>>2]|0)>>>0<=Ba>>>0?(c[s+308>>2]|0)>>>0>Ba>>>0:0){Ba=s+300|0;c[w>>2]=c[Ba>>2];c[Ba>>2]=w;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](w);break}else{Ba=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);break}}}else{Aa=c[K>>2]|0;Ba=(c[F>>2]|0)+-1|0;a[Aa+(Ba*20|0)+1>>0]=-7;c[Aa+(Ba*20|0)+16>>2]=w}while(0);u=c[F>>2]|0;if((u|0)>0)b[(c[K>>2]|0)+((u+-1|0)*20|0)+2>>1]=1;if(t|0){v=c[L>>2]|0;s=~t;if(((c[v+56>>2]|0)+(c[v+60>>2]|0)|0)<0){mk(v,Ga,s);break}else{c[(c[v+64>>2]|0)+(s<<2)>>2]=u;break}}}}while(0);z=z+1|0}while((z|0)!=(M|0))}B=c[g+24>>2]|0;if(B|0?(0==0?(c[U+32>>2]&512|0)==0:0):0){C=f+52|0;c[C>>2]=~k;t=n<<24>>24==11?2:n&255;d:do if((c[B>>2]|0)>0){D=f+56|0;y=Q+20|0;z=Q+4|0;A=Q+24|0;E=Ga+108|0;F=Ga+112|0;H=Ga+12|0;I=Ga+104|0;if(!q){w=0;while(1){Aa=c[B+4+(w*20|0)>>2]|0;v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,Aa,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0)mk(u,Ga,s);else c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];w=w+1|0;if((w|0)>=(c[B>>2]|0))break d}}if(!(m<<24>>24)){w=0;do{s=c[B+4+(w*20|0)>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[z>>2]=136;c[A>>2]=q;do if((s|0)!=0?(_j(Q,s)|0,(a[y>>0]&-3)<<24>>24!=0):0){v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,s,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0){mk(u,Ga,s);break}else{c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];break}}while(0);w=w+1|0}while((w|0)<(c[B>>2]|0))}else{w=0;do{s=c[B+4+(w*20|0)>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[z>>2]=136;c[A>>2]=q;do if((s|0)!=0?(_j(Q,s)|0,(a[y>>0]|0)!=0):0){v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,s,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0){mk(u,Ga,s);break}else{c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];break}}while(0);w=w+1|0}while((w|0)<(c[B>>2]|0))}}while(0);c[C>>2]=0}do if(r)if(c[r>>2]|0){t=c[r+16>>2]|0;if(t){s=Ga+108|0;u=c[s>>2]|0;if((c[Ga+112>>2]|0)>(u|0)){c[s>>2]=u+1;y=c[Ga+104>>2]|0;a[y+(u*20|0)>>0]=11;y=y+(u*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));Ba=t;Aa=u;break}else{Ba=t;Aa=Di(Ga,11,0,0,0)|0;break}}else{Ba=0;Aa=0}}else{n=4;r=0;Ba=0;Aa=0}else{r=0;Ba=0;Aa=0}while(0);if(m<<24>>24!=0&(Ea|0)==0){t=f+56|0;D=c[t>>2]|0;v=D+-1|0;c[t>>2]=v;t=a[g+48>>0]|0;s=n&255;t=n<<24>>24==11?(t<<24>>24==11?2:t&255):s;if((r|0)!=0?(c[r+16>>2]|0)==0:0){E=0;t=(c[r+8>>2]|0)==0?4:6}else Ca=135;do if((Ca|0)==135)if(!((t|0)!=5|(t|0)==(s|0)))if(c[g+8>>2]|0){s=Ga+108|0;t=c[s>>2]|0;if((c[Ga+112>>2]|0)>(t|0)){u=t+1|0;c[s>>2]=u;y=c[Ga+104>>2]|0;a[y+(t*20|0)>>0]=11;y=y+(t*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));E=u;t=5;break}else{E=(Di(Ga,11,0,0,0)|0)+1|0;t=5;break}}else{E=0;t=5}else E=0;while(0);C=Ga+108|0;s=c[C>>2]|0;B=Ga+112|0;if(Ha){if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;za=c[Ga+104>>2]|0;a[za+(s*20|0)>>0]=53;b[za+(s*20|0)+2>>1]=0;c[za+(s*20|0)+4>>2]=k;c[za+(s*20|0)+8>>2]=v;c[za+(s*20|0)+12>>2]=l;c[za+(s*20|0)+16>>2]=0;a[za+(s*20|0)+1>>0]=0}else Di(Ga,53,k,v,l)|0;s=c[C>>2]|0;if((s|0)>0)b[(c[Ga+104>>2]|0)+((s+-1|0)*20|0)+2>>1]=144}if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;za=c[Ga+104>>2]|0;a[za+(s*20|0)>>0]=31;b[za+(s*20|0)+2>>1]=0;c[za+(s*20|0)+4>>2]=i;c[za+(s*20|0)+8>>2]=v;c[za+(s*20|0)+12>>2]=k;c[za+(s*20|0)+16>>2]=0;a[za+(s*20|0)+1>>0]=0}else Di(Ga,31,i,v,k)|0;e:do switch(t|0){case 3:case 2:case 1:{Ca=151;break}case 5:{s=c[f>>2]|0;A=c[s+32>>2]|0;do if(!((0==0?(c[U+32>>2]&8192|0)==0:0)|(A&262144|0)==0&0==0)?(R=c[(c[s+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){z=c[g+72>>2]|0;if((z|0)!=(R|0)?(x=c[R+48>>2]|0,(x|0)!=0):0){y=g+68|0;s=0;do{w=c[x+8>>2]|0;do if((c[w+24>>2]|0)==(z|0)){u=c[w+4>>2]|0;v=c[g>>2]|0;za=a[u>>0]|0;t=(d[208+(za&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0;if(!(za<<24>>24==0|(t|0)!=0))do{u=u+1|0;v=v+1|0;za=a[u>>0]|0;t=(d[208+(za&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(t|0)!=0));if(t|0)break;if(!s)s=c[y>>2]|0;c[w+32>>2]=s;s=w}while(0);x=c[x>>2]|0}while((x|0)!=0);if(!s)Ca=170}else Ca=170;if((Ca|0)==170){s=c[g+68>>2]|0;if(!s){Ca=176;break}}t=0;u=s;do{if((a[u+8>>0]|0)==121)t=t|d[u+9>>0];u=c[u+32>>2]|0}while((u|0)!=0);if((s|0)==0|(t|0)==0)Ca=176}else Ca=176;while(0);do if((Ca|0)==176){if(!((A&16384|0)==0&0==0)){y=c[g>>2]|0;v=c[g+72>>2]|0;w=c[v+68>>2]|0;if(!w){t=v+60|0;s=v+64|0}else{t=a[y>>0]|0;if(!(t<<24>>24))s=0;else{s=0;u=y;do{u=u+1|0;s=G(s+(d[208+(t&255)>>0]|0)|0,-1640531535)|0;t=a[u>>0]|0}while(t<<24>>24!=0)}s=(s>>>0)%((c[v+56>>2]|0)>>>0)|0;t=w+(s<<3)|0;s=w+(s<<3)+4|0}t=c[t>>2]|0;f:do if(!t)s=59292;else{x=d[208+(d[y>>0]|0)>>0]|0;while(1){s=c[s>>2]|0;t=t+-1|0;v=c[s+12>>2]|0;za=a[v>>0]|0;u=(d[208+(za&255)>>0]|0)-x|0;if(!(za<<24>>24==0|(u|0)!=0)){w=y;do{v=v+1|0;w=w+1|0;za=a[v>>0]|0;u=(d[208+(za&255)>>0]|0)-(d[208+(d[w>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(u|0)!=0))}if(!u)break f;if(!t){s=59292;break}}}while(0);if(c[s+8>>2]|0){s=0;break}if(c[g+16>>2]|0){s=0;break}}if(!(c[g+8>>2]|0)){u=1;break e}u=c[f+116>>2]|0;a[((u|0)==0?f:u)+20>>0]=1;Mm(f,g,i,j,0,-1);u=1;break e}while(0);u=c[f+116>>2]|0;a[((u|0)==0?f:u)+20>>0]=1;Im(f,g,s,i,j,k,1,0,5,1,-1);u=1;break}case 6:{za=r+8|0;Ca=r+12|0;tj(f,ik(c[f>>2]|0,c[r+20>>2]|0,0)|0,c[za>>2]|0,c[Ca>>2]|0,2,r);c[za>>2]=0;c[Ca>>2]=0;Ca=196;break}case 4:{Ca=196;break}default:{t=2;Ca=151}}while(0);do if((Ca|0)==151){s=b[g+40>>1]|0;v=c[f>>2]|0;u=c[g>>2]|0;if(s<<16>>16>-1){s=c[(c[g+4>>2]|0)+(s<<16>>16<<4)>>2]|0;c[S>>2]=u;c[S+4>>2]=s;u=1555;s=dd(v,40358,S)|0}else{c[T>>2]=u;u=2579;s=dd(v,44808,T)|0}Uj(f,u,t,s,-7,2);u=0}else if((Ca|0)==196){s=c[C>>2]|0;if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;u=c[Ga+104>>2]|0;a[u+(s*20|0)>>0]=11;b[u+(s*20|0)+2>>1]=0;c[u+(s*20|0)+4>>2]=0;c[u+(s*20|0)+8>>2]=o;c[u+(s*20|0)+12>>2]=0;c[u+(s*20|0)+16>>2]=0;a[u+(s*20|0)+1>>0]=0;u=0;break}else{Di(Ga,11,0,o,0)|0;u=0;break}}while(0);t=c[Ga+12>>2]|0;s=0-D|0;if(((c[t+56>>2]|0)+(c[t+60>>2]|0)|0)<0)mk(t,Ga,s);else c[(c[t+64>>2]|0)+(s<<2)>>2]=c[C>>2];if(!E){v=0;za=0}else{v=c[C>>2]|0;if((c[B>>2]|0)>(v|0)){c[C>>2]=v+1;y=c[Ga+104>>2]|0;a[y+(v*20|0)>>0]=11;y=y+(v*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0))}else v=Di(Ga,11,0,0,0)|0;t=c[C>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))s=(c[Ga+104>>2]|0)+((((E|0)<1?t:E)+-1|0)*20|0)|0;else s=59308;c[s+8>>2]=t;za=E}}else{u=0;v=0;za=0}na=g+8|0;s=c[na>>2]|0;if(s){oa=Aa+1|0;pa=Ga+108|0;qa=Ga+112|0;ra=(Ba|0)==0;sa=f+56|0;ta=Ga+104|0;ua=k+1|0;va=(Aa|0)<0;wa=g+40|0;xa=~k;ya=f+52|0;ja=m<<24>>24==0;ka=Ga+12|0;la=n<<24>>24==11;ma=r+8|0;U=U+32|0;V=g+16|0;T=f+146|0;W=(Da|0)==1;m=g+72|0;X=f+19|0;Y=f+32|0;Z=f+28|0;_=g+68|0;$=r+28|0;aa=f+44|0;ba=Ea+50|0;ca=Da&65535;da=f+116|0;ea=r+20|0;fa=r+12|0;ga=Ea+4|0;ha=Ea+32|0;ia=l+1|0;S=0;w=0;t=0;while(1){H=h+(S<<2)|0;g:do if(c[H>>2]|0){Q=(Ba|0)==(s|0);if(Q){w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;y=c[ta>>2]|0;a[y+(w*20|0)>>0]=11;y=y+(w*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));y=w}else y=Di(Ga,11,0,0,0)|0;x=c[pa>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))w=(c[ta>>2]|0)+((va?x+-1|0:Aa)*20|0)|0;else w=59308;c[w+8>>2]=x;q=oa}else{q=(c[sa>>2]|0)+-1|0;c[sa>>2]=q;y=w}if((ra|Q)&t<<24>>24==0){zk(Ga,g,ua);R=1}else R=t;O=S+j|0;t=s+36|0;if(c[t>>2]|0){w=c[H>>2]|0;x=c[pa>>2]|0;if((c[qa>>2]|0)>(x|0)){c[pa>>2]=x+1;P=c[ta>>2]|0;a[P+(x*20|0)>>0]=73;b[P+(x*20|0)+2>>1]=0;c[P+(x*20|0)+4>>2]=0;c[P+(x*20|0)+8>>2]=w;c[P+(x*20|0)+12>>2]=0;c[P+(x*20|0)+16>>2]=0;a[P+(x*20|0)+1>>0]=0}else Di(Ga,73,0,w,0)|0;c[ya>>2]=xa;t=c[t>>2]|0;w=c[f>>2]|0;if(!t)t=0;else t=dk(w,t,0,0)|0;if(!(a[w+81>>0]|0))Tj(f,t,q,16);if(t|0)ni(w,t);c[ya>>2]=0}t=c[H>>2]|0;P=t+1|0;N=s+52|0;if(!(b[N>>1]|0))x=0;else{E=s+4|0;F=s+40|0;D=0;do{t=b[(c[E>>2]|0)+(D<<1)>>1]|0;switch(t<<16>>16){case -2:{c[ya>>2]=xa;t=c[(c[F>>2]|0)+4+(D*20|0)>>2]|0;A=D+P|0;C=c[f>>2]|0;if(!t)B=0;else B=dk(C,t,0,0)|0;h:do if(!(a[C+81>>0]|0)){do if(B){if((a[B>>0]|0)!=-88){z=Jj(f,B,A)|0;break}t=c[Ia>>2]|0;w=c[B+28>>2]|0;x=t+108|0;z=c[x>>2]|0;if((c[t+112>>2]|0)>(z|0)){c[x>>2]=z+1;Ca=c[t+104>>2]|0;a[Ca+(z*20|0)>>0]=78;b[Ca+(z*20|0)+2>>1]=0;c[Ca+(z*20|0)+4>>2]=w;c[Ca+(z*20|0)+8>>2]=A;c[Ca+(z*20|0)+12>>2]=0;c[Ca+(z*20|0)+16>>2]=0;a[Ca+(z*20|0)+1>>0]=0;Ca=252;break h}else{Di(t,78,w,A,0)|0;Ca=252;break h}}else z=Jj(f,0,A)|0;while(0);if((z|0)==(A|0)){Ca=251;break}t=c[Ia>>2]|0;if(!t){Ca=251;break}w=t+108|0;x=c[w>>2]|0;if((c[t+112>>2]|0)>(x|0)){c[w>>2]=x+1;Ca=c[t+104>>2]|0;a[Ca+(x*20|0)>>0]=79;b[Ca+(x*20|0)+2>>1]=0;c[Ca+(x*20|0)+4>>2]=z;c[Ca+(x*20|0)+8>>2]=A;c[Ca+(x*20|0)+12>>2]=0;c[Ca+(x*20|0)+16>>2]=0;a[Ca+(x*20|0)+1>>0]=0;Ca=251;break}else{Di(t,79,z,A,0)|0;Ca=251;break}}else Ca=251;while(0);if((Ca|0)==251?(Ca=0,B|0):0)Ca=252;if((Ca|0)==252){Ca=0;ni(C,B)}c[ya>>2]=0;break}case -1:{z=k;Ca=255;break}default:{z=t<<16>>16==(b[wa>>1]|0)?k:ua+(t<<16>>16)|0;Ca=255}}do if((Ca|0)==255){Ca=0;x=((t&65535)>>>15)+79<<16>>16;t=D+P|0;w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;M=c[ta>>2]|0;a[M+(w*20|0)>>0]=x;b[M+(w*20|0)+2>>1]=0;c[M+(w*20|0)+4>>2]=z;c[M+(w*20|0)+8>>2]=t;c[M+(w*20|0)+12>>2]=0;c[M+(w*20|0)+16>>2]=0;a[M+(w*20|0)+1>>0]=0;break}else{Di(Ga,x&65535,z,t,0)|0;break}}while(0);D=D+1|0;t=b[N>>1]|0}while(D>>>0<(t&65535)>>>0);x=t&65535;t=c[H>>2]|0}w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;M=c[ta>>2]|0;a[M+(w*20|0)>>0]=92;b[M+(w*20|0)+2>>1]=0;c[M+(w*20|0)+4>>2]=P;c[M+(w*20|0)+8>>2]=x;c[M+(w*20|0)+12>>2]=t;c[M+(w*20|0)+16>>2]=0;a[M+(w*20|0)+1>>0]=0}else Di(Ga,92,P,x,t)|0;F=(Ea|0)==(s|0);if(ja&(Ha&F)){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break}}t=a[s+54>>0]|0;if(!(t<<24>>24)){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break}}if(Q)E=(c[ma>>2]|0)==0?4:6;else E=(la?(t<<24>>24==11?2:t):n)&255;i:do if(!S){if(!(F&(E|0)==5&(c[s+20>>2]|0)==0))break;D=c[U>>2]|0;do if(!((D&8192|0)==0&0==0)){t=c[f>>2]|0;if(0==0?(c[t+32>>2]&262144|0)==0:0)break;t=c[(c[t+16>>2]|0)+28>>2]|0;if(a[T>>0]|0)break;C=c[m>>2]|0;do if((C|0)!=(t|0)){t=c[t+48>>2]|0;if(!t){Ca=291;break}B=t;t=0;do{A=c[B+8>>2]|0;do if((c[A+24>>2]|0)==(C|0)){x=c[A+4>>2]|0;z=c[g>>2]|0;M=a[x>>0]|0;w=(d[208+(M&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0;if(!(M<<24>>24==0|(w|0)!=0))do{x=x+1|0;z=z+1|0;M=a[x>>0]|0;w=(d[208+(M&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(w|0)!=0));if(w|0)break;if(!t)t=c[_>>2]|0;c[A+32>>2]=t;t=A}while(0);B=c[B>>2]|0}while((B|0)!=0);if(!t)Ca=291}else Ca=291;while(0);if((Ca|0)==291){Ca=0;t=c[_>>2]|0;if(!t)break}w=0;x=t;do{if((a[x+8>>0]|0)==121)w=w|d[x+9>>0];x=c[x+32>>2]|0}while((x|0)!=0);if(!((t|0)==0|(w|0)==0))break i}while(0);if(!((D&16384|0)==0&0==0)){if(c[V>>2]|0)break;C=c[g>>2]|0;z=c[m>>2]|0;A=c[z+68>>2]|0;if(!A){w=z+60|0;t=z+64|0}else{w=a[C>>0]|0;if(!(w<<24>>24))t=0;else{t=0;x=C;do{x=x+1|0;t=G(t+(d[208+(w&255)>>0]|0)|0,-1640531535)|0;w=a[x>>0]|0}while(w<<24>>24!=0)}t=(t>>>0)%((c[z+56>>2]|0)>>>0)|0;w=A+(t<<3)|0;t=A+(t<<3)+4|0}w=c[w>>2]|0;j:do if(!w)t=59292;else{B=d[208+(d[C>>0]|0)>>0]|0;while(1){t=c[t>>2]|0;w=w+-1|0;z=c[t+12>>2]|0;M=a[z>>0]|0;x=(d[208+(M&255)>>0]|0)-B|0;if(!(M<<24>>24==0|(x|0)!=0)){A=C;do{z=z+1|0;A=A+1|0;M=a[z>>0]|0;x=(d[208+(M&255)>>0]|0)-(d[208+(d[A>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(x|0)!=0))}if(!x)break j;if(!w){t=59292;break}}}while(0);if(c[t+8>>2]|0)break}w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break g}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break g}}while(0);w=e[s+50>>1]|0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;M=c[ta>>2]|0;a[M+(t*20|0)>>0]=27;b[M+(t*20|0)+2>>1]=0;c[M+(t*20|0)+4>>2]=O;c[M+(t*20|0)+8>>2]=q;c[M+(t*20|0)+12>>2]=P;c[M+(t*20|0)+16>>2]=0;a[M+(t*20|0)+1>>0]=0}else t=Di(Ga,27,O,q,P)|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0)){M=c[ta>>2]|0;a[M+(t*20|0)+1>>0]=-3;c[M+(t*20|0)+16>>2]=w}do if(!F)if(W){t=a[X>>0]|0;if(!(t<<24>>24)){M=(c[aa>>2]|0)+1|0;c[aa>>2]=M;break}else{M=t+-1<<24>>24;a[X>>0]=M;M=c[f+148+((M&255)<<2)>>2]|0;break}}else{t=c[Y>>2]|0;w=c[Z>>2]|0;if((w|0)<(Da|0)){M=c[aa>>2]|0;c[aa>>2]=M+Da;M=M+1|0;break}else{c[Y>>2]=t+Da;c[Z>>2]=w-Da;M=t;break}}else M=P;while(0);do if(Ha|(E|0)==5){if(!(c[Fa>>2]&32)){t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=-121;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=O;c[L+(t*20|0)+8>>2]=M;c[L+(t*20|0)+12>>2]=0;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else Di(Ga,135,O,M,0)|0;if(!Ha)break;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=53;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=M;c[L+(t*20|0)+8>>2]=q;c[L+(t*20|0)+12>>2]=l;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else Di(Ga,53,M,q,l)|0;t=c[pa>>2]|0;if((t|0)<=0)break;b[(c[ta>>2]|0)+((t+-1|0)*20|0)+2>>1]=144;break}do if(!F){if(!(b[ba>>1]|0))break;B=s+4|0;A=0;do{x=b[(c[ga>>2]|0)+(A<<1)>>1]|0;t=b[N>>1]|0;k:do if(!(t<<16>>16))t=-1;else{z=c[B>>2]|0;w=t&65535;t=0;while(1){if((b[z+(t<<1)>>1]|0)==x<<16>>16)break k;t=t+1|0;if(t>>>0>=w>>>0){t=-1;break}}}while(0);t=t<<16>>16;w=A+M|0;x=c[pa>>2]|0;if((c[qa>>2]|0)>(x|0)){c[pa>>2]=x+1;L=c[ta>>2]|0;a[L+(x*20|0)>>0]=90;b[L+(x*20|0)+2>>1]=0;c[L+(x*20|0)+4>>2]=O;c[L+(x*20|0)+8>>2]=t;c[L+(x*20|0)+12>>2]=w;c[L+(x*20|0)+16>>2]=0;a[L+(x*20|0)+1>>0]=0}else Di(Ga,90,O,t,w)|0;A=A+1|0}while(A>>>0<(e[ba>>1]|0)>>>0)}while(0);if(!Ha)break;D=s+55|0;D=((d[D>>0]|d[D+1>>0]<<8)&3)==2?P:M;t=b[ba>>1]|0;if(!(t<<16>>16))break;C=52;A=(c[pa>>2]|0)+(t&65535)|0;B=0;do{t=c[(c[ha>>2]|0)+(B<<2)>>2]|0;x=c[f>>2]|0;w=a[x+78>>0]|0;L=a[x+165>>0]|0;x=Zi(x,w,t,L&255)|0;do if(!(L<<24>>24)){if(!x){x=_i(f,w,0,t)|0;break}if(c[x+12>>2]|0)break;x=_i(f,w,x,t)|0}while(0);w=(B|0)==((e[ba>>1]|0)+-1|0);A=w?q:A;C=w?53:C;w=ia+(b[(c[ga>>2]|0)+(B<<1)>>1]|0)|0;z=B+D|0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=C;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=w;c[L+(t*20|0)+8>>2]=A;c[L+(t*20|0)+12>>2]=z;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else t=Di(Ga,C,w,A,z)|0;do if(!(a[(c[Ga>>2]|0)+81>>0]|0)){if((t|0)<0)t=(c[pa>>2]|0)+-1|0;w=c[ta>>2]|0;z=w+(t*20|0)+1|0;if(a[z>>0]|0){Ei(Ga,w+(t*20|0)|0,x,-2);break}if(!x)break;c[w+(t*20|0)+16>>2]=x;a[z>>0]=-2}while(0);t=c[pa>>2]|0;if((t|0)>0)b[(c[ta>>2]|0)+((t+-1|0)*20|0)+2>>1]=144;B=B+1|0}while(B>>>0<(e[ba>>1]|0)>>>0)}while(0);switch((E&255)<<24>>24){case 3:case 2:case 1:{fl(f,E,s);break}case 6:{K=c[Ia>>2]|0;L=c[f>>2]|0;J=c[$>>2]|0;do if((J|0)!=(O|0)){if(!(c[Fa>>2]&32)){t=a[X>>0]|0;if(!(t<<24>>24)){z=(c[aa>>2]|0)+1|0;c[aa>>2]=z}else{z=t+-1<<24>>24;a[X>>0]=z;z=c[f+148+((z&255)<<2)>>2]|0}w=K+108|0;t=c[w>>2]|0;x=K+112|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=-121;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=O;c[Ca+(t*20|0)+8>>2]=z;c[Ca+(t*20|0)+12>>2]=0;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else Di(K,135,O,z,0)|0;t=c[w>>2]|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=30;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=J;c[Ca+(t*20|0)+8>>2]=0;c[Ca+(t*20|0)+12>>2]=z;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else Di(K,30,J,0,z)|0;if(!z)break;t=a[X>>0]|0;if((t&255)>=8)break;a[X>>0]=t+1<<24>>24;c[f+148+((t&255)<<2)>>2]=z;break}t=c[na>>2]|0;l:do if(!t)t=0;else while(1){Ca=t+55|0;if(((d[Ca>>0]|d[Ca+1>>0]<<8)&3)==2)break l;t=c[t+20>>2]|0;if(!t){t=0;break}}while(0);Ca=b[t+50>>1]|0;I=Ca&65535;F=c[aa>>2]|0;H=F+1|0;c[aa>>2]=F+I;if(!(Ca<<16>>16)){A=K+108|0;w=K+112|0}else{D=t+4|0;A=K+108|0;w=K+112|0;E=s+4|0;F=K+104|0;C=0;do{z=b[(c[D>>2]|0)+(C<<1)>>1]|0;t=b[N>>1]|0;m:do if(!(t<<16>>16))t=-1;else{B=c[E>>2]|0;x=t&65535;t=0;while(1){if((b[B+(t<<1)>>1]|0)==z<<16>>16)break m;t=t+1|0;if(t>>>0>=x>>>0){t=-1;break}}}while(0);t=t<<16>>16;x=C+H|0;z=c[A>>2]|0;if((c[w>>2]|0)>(z|0)){c[A>>2]=z+1;Ca=c[F>>2]|0;a[Ca+(z*20|0)>>0]=90;b[Ca+(z*20|0)+2>>1]=0;c[Ca+(z*20|0)+4>>2]=O;c[Ca+(z*20|0)+8>>2]=t;c[Ca+(z*20|0)+12>>2]=x;c[Ca+(z*20|0)+16>>2]=0;a[Ca+(z*20|0)+1>>0]=0}else Di(K,90,O,t,x)|0;C=C+1|0}while((C|0)!=(I|0))}t=c[A>>2]|0;if((c[w>>2]|0)>(t|0)){c[A>>2]=t+1;z=c[K+104>>2]|0;a[z+(t*20|0)>>0]=29;b[z+(t*20|0)+2>>1]=0;c[z+(t*20|0)+4>>2]=J;c[z+(t*20|0)+8>>2]=0;c[z+(t*20|0)+12>>2]=H;c[z+(t*20|0)+16>>2]=0;a[z+(t*20|0)+1>>0]=0;z=t}else z=Di(K,29,J,0,H)|0;if(!(a[(c[K>>2]|0)+81>>0]|0)){Ca=c[K+104>>2]|0;a[Ca+(z*20|0)+1>>0]=-3;c[Ca+(z*20|0)+16>>2]=I}t=c[A>>2]|0;if((c[w>>2]|0)>(t|0)){c[A>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=69;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=11;c[Ca+(t*20|0)+8>>2]=2;c[Ca+(t*20|0)+12>>2]=0;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else t=Di(K,69,11,2,0)|0;do if(!(a[(c[K>>2]|0)+81>>0]|0)){if((t|0)<0)t=(c[A>>2]|0)+-1|0;w=c[K+104>>2]|0;x=w+(t*20|0)+1|0;if(!(a[x>>0]|0)){c[w+(t*20|0)+16>>2]=39404;a[x>>0]=-1;break}else{Ei(K,w+(t*20|0)|0,39404,-1);break}}while(0);w=c[A>>2]|0;if(!(a[(c[K>>2]|0)+81>>0]|0))t=(c[K+104>>2]|0)+(((z|0)<0?w+-1|0:z)*20|0)|0;else t=59308;c[t+8>>2]=w}while(0);tj(f,ik(L,c[ea>>2]|0,0)|0,c[ma>>2]|0,c[fa>>2]|0,2,r);c[ma>>2]=0;c[fa>>2]=0;Ca=421;break}case 4:{Ca=421;break}default:{t=c[f>>2]|0;C=c[t+32>>2]|0;do if(!((c[U>>2]&8192|0)==0&0==0|(C&262144|0)==0&0==0)){t=c[(c[t+16>>2]|0)+28>>2]|0;if(a[T>>0]|0){Ca=445;break}B=c[m>>2]|0;do if((B|0)!=(t|0)){t=c[t+48>>2]|0;if(!t){Ca=439;break}A=t;t=0;do{z=c[A+8>>2]|0;do if((c[z+24>>2]|0)==(B|0)){w=c[z+4>>2]|0;x=c[g>>2]|0;N=a[w>>0]|0;u=(d[208+(N&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(N<<24>>24==0|(u|0)!=0))do{w=w+1|0;x=x+1|0;N=a[w>>0]|0;u=(d[208+(N&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(u|0)!=0));if(u|0)break;if(!t)t=c[_>>2]|0;c[z+32>>2]=t;t=z}while(0);A=c[A>>2]|0}while((A|0)!=0);if(!t)Ca=439}else Ca=439;while(0);if((Ca|0)==439){t=c[_>>2]|0;if(!t){Ca=445;break}}u=0;w=t;do{if((a[w+8>>0]|0)==121)u=u|d[w+9>>0];w=c[w+32>>2]|0}while((w|0)!=0);if(!((t|0)==0|(u|0)==0))Ca=461;else Ca=445}else Ca=445;while(0);do if((Ca|0)==445){Ca=0;if((C&16384|0)==0&0==0){t=0;break}B=c[g>>2]|0;x=c[m>>2]|0;z=c[x+68>>2]|0;if(!z){u=x+60|0;t=x+64|0}else{u=a[B>>0]|0;if(!(u<<24>>24))t=0;else{t=0;w=B;do{w=w+1|0;t=G(t+(d[208+(u&255)>>0]|0)|0,-1640531535)|0;u=a[w>>0]|0}while(u<<24>>24!=0)}t=(t>>>0)%((c[x+56>>2]|0)>>>0)|0;u=z+(t<<3)|0;t=z+(t<<3)+4|0}u=c[u>>2]|0;n:do if(!u)t=59292;else{A=d[208+(d[B>>0]|0)>>0]|0;while(1){t=c[t>>2]|0;u=u+-1|0;x=c[t+12>>2]|0;N=a[x>>0]|0;w=(d[208+(N&255)>>0]|0)-A|0;if(!(N<<24>>24==0|(w|0)!=0)){z=B;do{x=x+1|0;z=z+1|0;N=a[x>>0]|0;w=(d[208+(N&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(w|0)!=0))}if(!w)break n;if(!u){t=59292;break}}}while(0);if(c[t+8>>2]|0){t=0;Ca=461;break}if(!(c[V>>2]|0))t=0;else{t=0;Ca=461}}while(0);if((Ca|0)==461){Ca=0;N=c[da>>2]|0;a[((N|0)==0?f:N)+20>>0]=1}Im(f,g,t,i,j,M,ca,0,5,F&1,O);u=1}}do if((Ca|0)==421){Ca=0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;O=c[ta>>2]|0;a[O+(t*20|0)>>0]=11;b[O+(t*20|0)+2>>1]=0;c[O+(t*20|0)+4>>2]=0;c[O+(t*20|0)+8>>2]=o;c[O+(t*20|0)+12>>2]=0;c[O+(t*20|0)+16>>2]=0;a[O+(t*20|0)+1>>0]=0;break}else{Di(Ga,11,0,o,0)|0;break}}while(0);do if(!Q){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];break}}else{t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;Q=c[ta>>2]|0;a[Q+(t*20|0)>>0]=11;b[Q+(t*20|0)+2>>1]=0;c[Q+(t*20|0)+4>>2]=0;c[Q+(t*20|0)+8>>2]=oa;c[Q+(t*20|0)+12>>2]=0;c[Q+(t*20|0)+16>>2]=0;a[Q+(t*20|0)+1>>0]=0}else Di(Ga,11,0,oa,0)|0;w=c[pa>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))t=(c[ta>>2]|0)+(((y|0)<0?w+-1|0:y)*20|0)|0;else t=59308;c[t+8>>2]=w}while(0);if((M|0)==(P|0)){w=y;t=R;break}if(!W){if((c[Z>>2]|0)>=(Da|0)){w=y;t=R;break}c[Z>>2]=Da;c[Y>>2]=M;w=y;t=R;break}if(!M){w=y;t=R;break}t=a[X>>0]|0;if((t&255)>=8){w=y;t=R;break}a[X>>0]=t+1<<24>>24;c[f+148+((t&255)<<2)>>2]=M;w=y;t=R}while(0);s=c[s+20>>2]|0;if(!s)break;else S=S+1|0}}if(!za){c[p>>2]=u;Ra=Ja;return}s=Ga+108|0;t=c[s>>2]|0;if((c[Ga+112>>2]|0)>(t|0)){c[s>>2]=t+1;o=c[Ga+104>>2]|0;a[o+(t*20|0)>>0]=11;b[o+(t*20|0)+2>>1]=0;c[o+(t*20|0)+4>>2]=0;c[o+(t*20|0)+8>>2]=za;c[o+(t*20|0)+12>>2]=0;c[o+(t*20|0)+16>>2]=0;a[o+(t*20|0)+1>>0]=0}else Di(Ga,11,0,za,0)|0;t=c[s>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))s=(c[Ga+104>>2]|0)+(((v|0)<0?t+-1|0:v)*20|0)|0;else s=59308;c[s+8>>2]=t;c[p>>2]=u;Ra=Ja;return}function Um(f,g,h,i,j,k,l,m,n){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;t=f+8|0;o=c[t>>2]|0;a:do if(!o){s=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))r=15;else{C=0;break a}else{do if((e[s+276>>1]|0)>=224){o=s+300|0;p=c[o>>2]|0;if(p|0){c[o>>2]=c[p>>2];q=s+284|0;c[q>>2]=(c[q>>2]|0)+1;q=p;break b}o=s+296|0;p=c[o>>2]|0;if(!p){o=s+292|0;break}else{c[o>>2]=c[p>>2];q=s+284|0;c[q>>2]=(c[q>>2]|0)+1;q=p;break b}}else o=s+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;r=15}while(0);if((r|0)==15)q=_d(s,224,0)|0;if(!q)C=0;else{o=q+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[q>>2]=s;o=s+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=q;c[q+8>>2]=p;c[q+4>>2]=0;c[o>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[t>>2]=q;Di(q,61,0,1,0)|0;C=q}}else C=o;while(0);p=c[g+8>>2]|0;if(!p){u=0;o=g+36|0}else{y=(n|0)==0?0:16;x=C+108|0;z=C+112|0;o=g+36|0;A=C+104|0;B=(l&2|(y|1)&255)&255;w=0;u=0;while(1){t=k+(w<<2)|0;s=c[t>>2]|0;if(s){do if(c[p+36>>2]|0){q=c[x>>2]|0;r=q+2|0;if((c[z>>2]|0)>(q|0)){c[x>>2]=q+1;v=c[A>>2]|0;a[v+(q*20|0)>>0]=50;b[v+(q*20|0)+2>>1]=0;c[v+(q*20|0)+4>>2]=s;c[v+(q*20|0)+8>>2]=r;c[v+(q*20|0)+12>>2]=0;c[v+(q*20|0)+16>>2]=0;a[v+(q*20|0)+1>>0]=0;break}else{Di(C,50,s,r,0)|0;break}}while(0);q=p+55|0;q=d[q>>0]|d[q+1>>0]<<8;if((q&3)==2)v=(c[o>>2]&32|0)==0?y:B;else v=y;u=w+i|0;s=c[t>>2]|0;t=s+1|0;r=e[((q&8)==0?p+52|0:p+50|0)>>1]|0;q=c[x>>2]|0;if((c[z>>2]|0)>(q|0)){c[x>>2]=q+1;D=c[A>>2]|0;a[D+(q*20|0)>>0]=-124;b[D+(q*20|0)+2>>1]=0;c[D+(q*20|0)+4>>2]=u;c[D+(q*20|0)+8>>2]=s;c[D+(q*20|0)+12>>2]=t;c[D+(q*20|0)+16>>2]=0;a[D+(q*20|0)+1>>0]=0}else q=Di(C,132,u,s,t)|0;if(!(a[(c[C>>2]|0)+81>>0]|0)){D=c[A>>2]|0;a[D+(q*20|0)+1>>0]=-3;c[D+(q*20|0)+16>>2]=r}q=c[x>>2]|0;if((q|0)>0){b[(c[A>>2]|0)+((q+-1|0)*20|0)+2>>1]=v&255;u=1}else u=1}p=c[p+20>>2]|0;if(!p)break;else w=w+1|0}}if(c[o>>2]&32|0)return;q=j+1|0;o=f+19|0;p=a[o>>0]|0;if(!(p<<24>>24)){D=f+44|0;r=(c[D>>2]|0)+1|0;c[D>>2]=r}else{r=p+-1<<24>>24;a[o>>0]=r;r=c[f+148+((r&255)<<2)>>2]|0}o=b[g+42>>1]|0;s=C+108|0;p=c[s>>2]|0;t=C+112|0;if((c[t>>2]|0)>(p|0)){c[s>>2]=p+1;D=c[C+104>>2]|0;a[D+(p*20|0)>>0]=92;b[D+(p*20|0)+2>>1]=0;c[D+(p*20|0)+4>>2]=q;c[D+(p*20|0)+8>>2]=o;c[D+(p*20|0)+12>>2]=r;c[D+(p*20|0)+16>>2]=0;a[D+(p*20|0)+1>>0]=0}else Di(C,92,q,o,r)|0;if(!(u<<24>>24))zk(C,g,0);q=f+18|0;p=(a[q>>0]|0)==0?((l|0)==0?33:(l|1)&255):0;p=(m|0)==0?p:p|8;p=(n|0)==0?p:p|16;o=c[s>>2]|0;if((c[t>>2]|0)>(o|0)){c[s>>2]=o+1;D=c[C+104>>2]|0;a[D+(o*20|0)>>0]=122;b[D+(o*20|0)+2>>1]=0;c[D+(o*20|0)+4>>2]=h;c[D+(o*20|0)+8>>2]=r;c[D+(o*20|0)+12>>2]=j;c[D+(o*20|0)+16>>2]=0;a[D+(o*20|0)+1>>0]=0}else Di(C,122,h,r,j)|0;if((a[q>>0]|0)==0?(a[(c[C>>2]|0)+81>>0]|0)==0:0){j=c[C+104>>2]|0;D=(c[s>>2]|0)+-1|0;a[j+(D*20|0)+1>>0]=-6;c[j+(D*20|0)+16>>2]=g}o=c[s>>2]|0;if((o|0)<=0)return;b[(c[C+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=p&255;return}function Vm(d,e){d=d|0;e=e|0;if((a[e>>0]|0)!=-94)return 0;e=b[e+32>>1]|0;if(e<<16>>16<=-1){d=d+20|0;a[d>>0]=a[d>>0]|2;return 0}if((c[(c[d+24>>2]|0)+(e<<16>>16<<2)>>2]|0)<=-1)return 0;d=d+20|0;a[d>>0]=a[d>>0]|1;return 0}function Wm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if(!(c[g+36>>2]&8)){l=0;return l|0}j=c[d>>2]|0;if(c[j+24>>2]&4|0){l=0;return l|0}k=c[d+116>>2]|0;k=(k|0)==0?d:k;i=c[(c[(c[j+16>>2]|0)+(f<<4)+12>>2]|0)+72>>2]|0;if(((i|0?(c[i+36>>2]&32|0)==0:0)?(c[i+56>>2]|0)==0:0)?(b[i+42>>1]|0)==2:0){i=k+112|0;d=c[i>>2]|0;a:do if(!d)l=12;else while(1){if((c[d+4>>2]|0)==(g|0))break a;d=c[d>>2]|0;if(!d){l=12;break}}while(0);do if((l|0)==12){b:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))l=22;else{l=0;return l|0}else{do if((e[j+276>>1]|0)>=16){h=j+300|0;d=c[h>>2]|0;if(d|0){c[h>>2]=c[d>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}h=j+296|0;d=c[h>>2]|0;if(!d){d=j+292|0;break}else{c[h>>2]=c[d>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}}else d=j+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;l=22}while(0);if((l|0)==22)d=_d(j,16,0)|0;if(!d){l=0;return l|0}else{c[d>>2]=c[i>>2];c[i>>2]=d;c[d+4>>2]=g;c[d+8>>2]=f;l=k+44|0;k=c[l>>2]|0;c[d+12>>2]=k+2;c[l>>2]=k+4;break}}while(0);l=c[d+12>>2]|0;return l|0}l=d+36|0;c[l>>2]=(c[l>>2]|0)+1;c[d+12>>2]=523;l=0;return l|0}function Xm(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;h=b[f+50>>1]|0;t=g+50|0;if(h<<16>>16!=(b[t>>1]|0)){g=0;return g|0}if((a[f+54>>0]|0)!=(a[g+54>>0]|0)){g=0;return g|0}a:do if(h<<16>>16){l=g+4|0;m=f+4|0;n=g+40|0;o=f+40|0;p=g+28|0;q=f+28|0;r=g+32|0;s=f+32|0;k=0;while(1){h=b[(c[l>>2]|0)+(k<<1)>>1]|0;if(h<<16>>16!=(b[(c[m>>2]|0)+(k<<1)>>1]|0)){h=0;i=18;break}if(h<<16>>16==-2?bk(0,c[(c[n>>2]|0)+4+(k*20|0)>>2]|0,c[(c[o>>2]|0)+4+(k*20|0)>>2]|0,-1)|0:0){h=0;i=18;break}if((a[(c[p>>2]|0)+k>>0]|0)!=(a[(c[q>>2]|0)+k>>0]|0)){h=0;i=18;break}i=c[(c[r>>2]|0)+(k<<2)>>2]|0;j=c[(c[s>>2]|0)+(k<<2)>>2]|0;if(i){if(!j){h=0;i=18;break}u=a[i>>0]|0;h=(d[208+(u&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(u<<24>>24==0|(h|0)!=0))do{i=i+1|0;j=j+1|0;u=a[i>>0]|0;h=(d[208+(u&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(h|0)!=0))}else h=((j|0)!=0)<<31>>31;k=k+1|0;if(h|0){h=0;i=18;break}if(k>>>0>=(e[t>>1]|0)>>>0)break a}if((i|0)==18)return h|0}while(0);u=(bk(0,c[g+36>>2]|0,c[f+36>>2]|0,-1)|0)==0&1;return u|0}function Ym(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;b=c[a+12>>2]|0;if(!b)b=0;else{b=c[b+24>>2]|0;b=(b|0)>0?b:0}d=c[a+16>>2]|0;if(d){k=c[d+24>>2]|0;b=(k|0)>(b|0)?k:b}j=a+4|0;k=c[j>>2]|0;d=a+20|0;if(!(k&2048)){h=c[d>>2]|0;if(!h){m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}i=c[h>>2]|0;g=(i|0)>0;if(g){f=0;e=i;while(1){d=c[h+4+(f*20|0)>>2]|0;if(!d)d=e;else{m=c[d+24>>2]|0;d=(m|0)>(b|0);b=d?m:b;d=d?i:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}if(g){d=0;e=0;do{d=c[(c[h+4+(e*20|0)>>2]|0)+4>>2]|d;e=e+1|0}while((e|0)!=(i|0));d=d&2097412}else d=0}else d=0;c[j>>2]=d|k;m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}d=c[d>>2]|0;if(!d){m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}do{e=c[d+36>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}e=c[d+44>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}e=c[d+60>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}h=c[d>>2]|0;if((h|0)!=0?(i=c[h>>2]|0,(i|0)>0):0){g=0;f=i;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?i:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}h=c[d+40>>2]|0;if((h|0)!=0?(l=c[h>>2]|0,(l|0)>0):0){g=0;f=l;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?l:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}h=c[d+48>>2]|0;if((h|0)!=0?(m=c[h>>2]|0,(m|0)>0):0){g=0;f=m;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?m:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}d=c[d+52>>2]|0}while((d|0)!=0);m=b+1|0;a=a+24|0;c[a>>2]=m;return}function Zm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Ra;Ra=Ra+16|0;g=i;a:do if(((d[b>>0]|0)+-48|0)>>>0<10){c[g>>2]=0;ii(b,g)|0;f=c[g>>2]&255}else{h=Eu(b)|0;g=(h&1073741823|0)==2;b:do if(!e){if(g){if(!(Ib(18544,b,2)|0)){f=0;break}if(!(Ib(18545,b,2)|0)){f=1;break}else break a}switch(h&1073741823|0){case 3:{if(!(Ib(18546,b,3)|0)){f=2;break b}if(!(Ib(18553,b,3)|0)){f=4;break b}else break a}case 5:{if(!(Ib(18548,b,5)|0)){f=3;break b}if(!(Ib(18559,b,5)|0)){f=6;break b}else break a}case 4:{if(!(Ib(18556,b,4)|0)){f=5;break b}if(!(Ib(18564,b,4)|0)){f=7;break b}else break a}default:break a}}else{if(g){if(!(Ib(18544,b,2)|0)){f=0;break}if(!(Ib(18545,b,2)|0)){f=1;break}else break a}switch(h&1073741823|0){case 3:{if(!(Ib(18546,b,3)|0)){f=2;break b}if(!(Ib(18553,b,3)|0)){f=4;break b}else break a}case 5:if(!(Ib(18548,b,5)|0)){f=3;break b}else break a;case 4:if(!(Ib(18556,b,4)|0)){f=5;break b}else break a;default:break a}}while(0);f=a[45920+f>>0]|0}while(0);Ra=i;return f|0}function _m(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=Ra;Ra=Ra+16|0;g=i;c[g>>2]=f;f=0;a:while(1){switch(a[e+f>>0]|0){case 0:break a;case 115:{k=(c[g>>2]|0)+(4-1)&~(4-1);j=c[k>>2]|0;c[g>>2]=k+4;Fj(b,(j|0)==0?73:110,0,f+d|0,0,j,0)|0;break}case 105:{j=(c[g>>2]|0)+(4-1)&~(4-1);k=c[j>>2]|0;c[g>>2]=j+4;Ci(b,70,k,f+d|0)|0;break}default:{h=7;break a}}f=f+1|0}if((h|0)==7){Ra=i;return}Ci(b,81,d,f)|0;Ra=i;return}function $m(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=c[(c[e>>2]|0)+32>>2]|0;o=c[(c[e+4>>2]|0)+8>>2]|0;h=c[g>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){n=c[h+16>>2]|0;break}if(!(i&1))n=Gg(h,1)|0;else n=0}else n=0;while(0);h=c[g+4>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){m=c[h+16>>2]|0;break}if(!(i&1))m=Gg(h,1)|0;else m=0}else m=0;while(0);j=c[g>>2]|0;h=b[j+8>>1]|0;if((h&2)!=0?(a[j+10>>0]|0)==1:0)h=c[j+12>>2]|0;else l=16;do if((l|0)==16){i=h&65535;if(!(i&16)){if(i&1|0){h=0;break}h=Fg(j,1)|0;break}else{h=c[j+12>>2]|0;if(!(i&16384))break;h=(c[j>>2]|0)+h|0;break}}while(0);if((h|0)>(c[k+140>>2]|0)){c[e+20>>2]=1;yc(c[e>>2]|0,45980,-1,1,-1)|0;return}do if((f|0)==3){h=c[g+8>>2]|0;if(!h)return;i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0)g=c[h+16>>2]|0;else l=28;do if((l|0)==28)if(!(i&1)){g=Gg(h,1)|0;break}else return;while(0);if(!g)return;k=a[g>>0]|0;if((g|0)!=(-1|0)&k<<24>>24!=0){h=g;f=0;j=k;while(1){i=h+1|0;if((j&255)>191){h=i;while(1){j=a[h>>0]|0;if((j&-64)<<24>>24==-128)h=h+1|0;else break}}else{h=i;j=a[i>>0]|0}if(j<<24>>24!=0&(h|0)!=(-1|0))f=f+1|0;else break}if(!f){j=g+1|0;h=k&255;if((k&255)<=191)break;h=d[2736+(h+-192)>>0]|0;i=a[j>>0]|0;if((i&-64)<<24>>24==-128)do{j=j+1|0;h=h<<6|i&63;i=a[j>>0]|0}while((i&-64)<<24>>24==-128);h=(h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)?65533:h;break}}c[e+20>>2]=1;yc(c[e>>2]|0,46013,-1,1,-1)|0;return}else h=d[o+2>>0]|0;while(0);if(!((n|0)!=0&(m|0)!=0))return;i=(md(n,m,o,h)|0)==0;h=c[e>>2]|0;i=i&1;j=h+8|0;if(!(b[j>>1]&9216)){o=h;c[o>>2]=i;c[o+4>>2]=0;b[j>>1]=4;return}else{Pg(h,i,0);return}}function an(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=c[b>>2]|0;o=g+4|0;m=(c[o>>2]|0)+45|0;a:do if(!p){r=Sv(m|0,0,-1,-1)|0;n=L()|0;if(n>>>0>0|(n|0)==0&r>>>0>2147483390){g=0;return g|0}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;q=25;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){r=c[14978]|0;n=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&n>>>0<=r>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){g=0;return g|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;r=k}else r=k}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){g=0;return g|0}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<m>>>0:0))){k=p+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];q=p+284|0;c[q>>2]=(c[q>>2]|0)+1;q=25;break a}k=p+296|0;j=c[k>>2]|0;if(!j){j=p+292|0;break}else{c[k>>2]=c[j>>2];q=p+284|0;c[q>>2]=(c[q>>2]|0)+1;q=25;break a}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,m,0)|0;q=25}while(0);if((q|0)==25)if(!j){g=0;return g|0}else r=j;gw(r|0,0,m|0)|0;n=r+44|0;ew(n|0,c[g>>2]|0,c[o>>2]|0)|0;j=a[n>>0]|0;if((a[880+(j&255)>>0]|0)<0){m=j<<24>>24==91?93:j;l=0;j=1;while(1){k=a[n+j>>0]|0;if(k<<24>>24==m<<24>>24){j=j+1|0;k=n+l|0;if((a[n+j>>0]|0)!=m<<24>>24)break;a[k>>0]=m}else a[n+l>>0]=k;l=l+1|0;j=j+1|0}a[k>>0]=0}o=r+12|0;c[o>>2]=n;a[r>>0]=f;while(1)if(!(a[880+(d[h>>0]|0)>>0]&1))break;else h=h+1|0;j=i-h|0;b:do if((j|0)<=0)if(!h)j=0;else{k=j;q=41}else while(1){k=j+-1|0;if(!(a[880+(d[h+k>>0]|0)>>0]&1)){k=j;q=41;break b}if((j|0)>1)j=k;else{q=41;break}}while(0);c:do if((q|0)==41){m=Sv(k|0,((k|0)<0)<<31>>31|0,1,0)|0;n=L()|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))q=51;else{j=0;break c}else{do if(!(n>>>0>0|((n|0)==0?m>>>0>(e[p+276>>1]|0)>>>0:0))){l=p+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break d}l=p+296|0;j=c[l>>2]|0;if(!j){j=p+292|0;break}else{c[l>>2]=c[j>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break d}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;q=51}while(0);if((q|0)==51)j=_d(p,m,n)|0;if(j){ew(j|0,h|0,k|0)|0;a[j+k>>0]=0;k=a[j>>0]|0;if(k<<24>>24){m=0;l=j;do{if(a[880+(k&255)>>0]&1)a[l>>0]=32;m=m+1|0;l=j+m|0;k=a[l>>0]|0}while(k<<24>>24!=0)}}else j=0}while(0);c[r+32>>2]=j;if((d[b+200>>0]|0)<=1){g=r;return g|0}m=c[o>>2]|0;l=c[b>>2]|0;e:do if(!l){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;q=82;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){p=c[14978]|0;i=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&i>>>0<=p>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){g=r;return g|0}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){g=r;return g|0}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];q=l+284|0;c[q>>2]=(c[q>>2]|0)+1;q=82;break e}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];q=l+284|0;c[q>>2]=(c[q>>2]|0)+1;q=82;break e}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(l,16,0)|0;q=82}while(0);if((q|0)==82)if(!j){g=r;return g|0}k=j+4|0;l=k+12|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));c[j>>2]=m;p=g;q=c[p+4>>2]|0;g=j+4|0;c[g>>2]=c[p>>2];c[g+4>>2]=q;g=b+272|0;c[j+12>>2]=c[g>>2];c[g>>2]=j;g=r;return g|0}function bn(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=Ra;Ra=Ra+64|0;D=H+40|0;E=H+32|0;w=H+24|0;v=H+16|0;n=H+8|0;k=H;x=H+60|0;t=H+56|0;r=H+52|0;F=H+48|0;s=H+44|0;G=c[(c[f>>2]|0)+32>>2]|0;c[x>>2]=0;c[t>>2]=0;c[F>>2]=0;g=c[h>>2]|0;do if(g){i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0){j=c[g+16>>2]|0;break}if(!(i&1))j=Gg(g,1)|0;else j=0}else j=0;while(0);g=c[h+4>>2]|0;do if(g){i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(i&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);A=(j|0)==0?59952:j;u=(g|0)==0?59952:g;z=G+20|0;m=c[z>>2]|0;g=c[G+136>>2]|0;a:do if((m|0)<(g+2|0)){y=G+16|0;l=c[y>>2]|0;b:do if((m|0)>0){k=d[208+(d[u>>0]|0)>>0]|0;h=0;while(1){i=c[l+(h<<4)>>2]|0;q=a[i>>0]|0;g=(d[208+(q&255)>>0]|0)-k|0;if(!(q<<24>>24==0|(g|0)!=0)){j=u;do{i=i+1|0;j=j+1|0;q=a[i>>0]|0;g=(d[208+(q&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(g|0)!=0))}h=h+1|0;if(!g)break;if((h|0)>=(m|0))break b}c[n>>2]=u;i=dd(G,46469,n)|0;c[F>>2]=i;g=0;C=142;break a}while(0);c:do if((l|0)==(G+412|0)){d:do if(c[G+272>>2]|0)if(!(a[G+81>>0]|0))C=34;else{Ra=H;return}else{do if((e[G+276>>1]|0)>=48){i=G+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break d}i=G+296|0;g=c[i>>2]|0;if(!g){g=G+292|0;break}else{c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break d}}else g=G+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;C=34}while(0);if((C|0)==34)g=_d(G,48,0)|0;if(!g){Ra=H;return}else{p=c[y>>2]|0;c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];c[g+16>>2]=c[p+16>>2];c[g+20>>2]=c[p+20>>2];c[g+24>>2]=c[p+24>>2];c[g+28>>2]=c[p+28>>2];p=g;break}}else{j=(m<<4)+16|0;e:do if(!l){if(c[G+272>>2]|0){if(a[G+81>>0]|0){Ra=H;return}}else{do if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0<j>>>0:0))){i=G+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break e}i=G+296|0;g=c[i>>2]|0;if(!g){g=G+292|0;break}else{c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break e}}else g=G+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(G,j,0)|0}else{q=l;if((c[G+304>>2]|0)>>>0<=q>>>0?(c[G+308>>2]|0)>>>0>q>>>0:0){if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0<j>>>0:0))){p=l;break c}g=Zd(G,l,j,0)|0;break}g=Zd(G,l,j,0)|0}while(0);if(!g){Ra=H;return}else p=g}while(0);c[y>>2]=p;q=c[z>>2]|0;o=p+(q<<4)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[r>>2]=c[G+60>>2];switch(dn(c[(c[G>>2]|0)+16>>2]|0,A,r,s,x,t)|0){case 0:{g=c[r>>2]|256;c[r>>2]=g;k=p+(q<<4)+4|0;g=Pe(c[s>>2]|0,c[x>>2]|0,G,k,0,g)|0;c[z>>2]=(c[z>>2]|0)+1;h=(Eu(u)|0)+1|0;r=G+272|0;f:do if(c[r>>2]|0)if(!(a[G+81>>0]|0))C=76;else i=0;else{do if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0<h>>>0:0))){j=G+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];C=G+284|0;c[C>>2]=(c[C>>2]|0)+1;C=77;break f}j=G+296|0;i=c[j>>2]|0;if(!i){i=G+292|0;break}else{c[j>>2]=c[i>>2];C=G+284|0;c[C>>2]=(c[C>>2]|0)+1;C=77;break f}}else i=G+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;C=76}while(0);if((C|0)==76){i=_d(G,h,0)|0;C=77}if((C|0)==77)if(!i)i=0;else ew(i|0,u|0,h|0)|0;c[o>>2]=i;a[G+89>>0]=0;switch(g|0){case 19:{g=dd(G,46499,v)|0;c[F>>2]=g;g=1;C=98;break}case 0:{g=en(G,c[k>>2]|0)|0;c[p+(q<<4)+12>>2]=g;if(g)if((a[g+76>>0]|0)!=0?(a[g+77>>0]|0)!=(a[G+78>>0]|0):0){g=dd(G,34948,w)|0;c[F>>2]=g;g=1}else g=0;else g=7;j=c[k>>2]|0;k=c[j>>2]|0;h=c[j+4>>2]|0;l=h+4|0;c[l>>2]=k;m=c[h>>2]|0;i=a[G+83>>0]|0;n=(a[m+12>>0]|0)==0;do if(n){w=c[m+216>>2]|0;if(w|0?(a[w+43>>0]|0)==2:0)break;a[m+4>>0]=i}while(0);i=c[(c[y>>2]|0)+4>>2]|0;if(!i)i=0;else{w=c[i+4>>2]|0;c[w+4>>2]=c[i>>2];i=(e[w+22>>1]|0)>>>2&3}if(j|0){c[l>>2]=k;w=h+22|0;b[w>>1]=i<<2|b[w>>1]&-13&65535}h=c[G+32>>2]|0;c[l>>2]=k;j=n^1;a[m+7>>0]=j&1;a[m+8>>0]=n&1;a[m+9>>0]=0;do if(n){i=m+10|0;if(!(h&8)){a[i>>0]=2;i=2;break}else{a[i>>0]=3;i=3;break}}else{a[m+10>>0]=0;i=0}while(0);w=(i<<2|(n?i:0))&255;a[m+11>>0]=(h&16|0)==0|j?w:w|12;w=m+20|0;v=d[w>>0]|0;a[w>>0]=(h&32|0)==0?v|1:v&254;a[p+(q<<4)+8>>0]=3;if(!g)g=(c[o>>2]|0)==0?7:0;break}default:C=98}if((C|0)==98)a[p+(q<<4)+8>>0]=3;i=c[x>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{x=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);g:do if(!g){g=c[z>>2]|0;h=c[y>>2]|0;if((g|0)>0){i=0;do{j=c[h+(i<<4)+4>>2]|0;if(j|0)c[(c[j+4>>2]|0)+4>>2]=c[j>>2];i=i+1|0}while((i|0)!=(g|0))}a[G+164>>0]=0;j=G+24|0;k=c[j>>2]|0;c[j>>2]=k&-17;k=(k&1|0)==0;x=c[h+12>>2]|0;a[G+78>>0]=a[x+77>>0]|0;if(!(b[x+78>>1]&1)){g=eh(G,0,F,0)|0;if(g|0)break;g=c[z>>2]|0}if((g|0)>1)do{i=g;g=g+-1|0;if((b[(c[(c[y>>2]|0)+(g<<4)+12>>2]|0)+78>>1]&1)==0?(B=eh(G,g,F,0)|0,B|0):0){g=B;break g}}while((i|0)>2);if(!k){Ra=H;return}c[j>>2]=c[j>>2]&-2;Ra=H;return}while(0);i=(c[z>>2]|0)+-1|0;j=c[(c[y>>2]|0)+(i<<4)+4>>2]|0;if(j|0){ug(j);B=c[y>>2]|0;c[B+(i<<4)+4>>2]=0;c[B+(i<<4)+12>>2]=0}$b(G);c[z>>2]=i;if((g|0)<3082)switch(g|0){case 7:break;default:C=140}else switch(g|0){case 3082:break;default:C=140}if((C|0)==140){i=c[F>>2]|0;if(i|0){C=143;break a}c[D>>2]=A;i=dd(G,46528,D)|0;c[F>>2]=i;C=142;break a}i=G+81|0;if((a[i>>0]|0)==0?(a[G+82>>0]|0)==0:0){a[i>>0]=1;if((c[G+180>>2]|0)>0)c[G+264>>2]=1;c[r>>2]=(c[r>>2]|0)+1;i=c[G+236>>2]|0;if(i|0)c[i+12>>2]=7}i=c[F>>2]|0;do if(i|0){if(c[G+480>>2]|0){Xd(G,i);break}D=i;if((c[G+304>>2]|0)>>>0<=D>>>0?(c[G+308>>2]|0)>>>0>D>>>0:0){D=G+300|0;c[i>>2]=c[D>>2];c[D>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{D=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=dd(G,34831,E)|0;c[F>>2]=i;C=142;break a}case 7:{g=G+81|0;if((a[g>>0]|0)==0?(a[G+82>>0]|0)==0:0){a[g>>0]=1;if((c[G+180>>2]|0)>0)c[G+264>>2]=1;g=G+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[G+236>>2]|0;if(g|0)c[g+12>>2]=7}break}default:{}}g=c[t>>2]|0;c[f+20>>2]=1;yc(c[f>>2]|0,g,-1,1,-1)|0;if(!g){Ra=H;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=H;return}else{f=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=H;return}}else{c[k>>2]=g;i=dd(G,46432,k)|0;c[F>>2]=i;g=0;C=142}while(0);if((C|0)==142)if(i)C=143;do if((C|0)==143){c[f+20>>2]=1;yc(c[f>>2]|0,i,-1,1,-1)|0;i=c[F>>2]|0;if(i){if(G|0){if(c[G+480>>2]|0){Xd(G,i);break}F=i;if((c[G+304>>2]|0)>>>0<=F>>>0?(c[G+308>>2]|0)>>>0>F>>>0:0){G=G+300|0;c[i>>2]=c[G>>2];c[G>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{G=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);if(!g){Ra=H;return}c[f+20>>2]=g;i=c[f>>2]|0;if(!(b[i+8>>1]&1)){Ra=H;return}switch(g|0){case 516:{g=50738;break}case 100:{g=50760;break}case 101:{g=50782;break}default:{g=g&255;if(g>>>0<29?(520028155>>>g&1|0)!=0:0)g=c[22960+(g<<2)>>2]|0;else g=50724}}yc(i,g,-1,1,0)|0;Ra=H;return}function cn(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+112|0;x=J+32|0;w=J+24|0;t=J+16|0;r=J+8|0;n=J;s=J+72|0;u=J+40|0;I=c[f>>2]|0;a:do if(!(c[f+36>>2]|0)){z=u+4|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[u>>2]=f;z=(j|0)==0;m=f;do if(z)m=0;else{if((a[j>>0]|0)==59){a[j>>0]=110;m=0;break}p=u+24|0;b[p>>1]=0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;o=j+24|0;m=f+208|0;A=(c[m>>2]|0)+(c[o>>2]|0)|0;c[m>>2]=A;m=c[I+120>>2]|0;if((m|0)>=(A|0)){_j(s,j)|0;n=c[s>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[o>>2]|0);m=b[p>>1]|0;A=j+4|0;c[A>>2]=c[A>>2]|m&-32752&65535;if((c[u+20>>2]|0)<=0)if((c[n+36>>2]|0)<1)break;else{F=121;break a}}else{c[n>>2]=m;cd(f,41637,n)}F=121;break a}while(0);A=(k|0)==0;do if(!A){if((a[k>>0]|0)==59){a[k>>0]=110;break}q=u+24|0;o=m&65535;b[q>>1]=o&28655;m=c[u>>2]|0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;p=k+24|0;n=m+208|0;y=(c[n>>2]|0)+(c[p>>2]|0)|0;c[n>>2]=y;n=c[(c[m>>2]|0)+120>>2]|0;if((n|0)>=(y|0)){_j(s,k)|0;n=c[s>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);m=b[q>>1]|0;y=k+4|0;c[y>>2]=c[y>>2]|m&-32752&65535;m=(o&36880|m&65535)&65535;b[q>>1]=m;if((c[u+20>>2]|0)<=0)if((c[n+36>>2]|0)<1)break;else{F=120;break a}}else{c[r>>2]=n;cd(m,41637,r)}F=120;break a}while(0);y=(l|0)==0;do if(!y){if((a[l>>0]|0)==59){a[l>>0]=110;break}q=u+24|0;p=m&65535;b[q>>1]=p&28655;m=c[u>>2]|0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;o=l+24|0;n=m+208|0;r=(c[n>>2]|0)+(c[o>>2]|0)|0;c[n>>2]=r;n=c[(c[m>>2]|0)+120>>2]|0;if((n|0)>=(r|0)){_j(s,l)|0;m=c[s>>2]|0;t=m+208|0;c[t>>2]=(c[t>>2]|0)-(c[o>>2]|0);t=b[q>>1]|0;s=l+4|0;c[s>>2]=c[s>>2]|t&-32752&65535;b[q>>1]=p&36880|t&65535;if((c[u+20>>2]|0)<=0)if((c[m+36>>2]|0)<1)break;else{F=120;break a}}else{c[t>>2]=n;cd(m,41637,t)}F=120;break a}while(0);do if(i|0){if((a[i>>0]|0)==110)m=c[i+8>>2]|0;else m=0;n=c[f>>2]|0;if(((a[n+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(v=c[n+312>>2]|0,v|0):0){m=$a[v&127](c[n+316>>2]|0,g,m,0,0,c[f+240>>2]|0)|0;if((m|0)==1){cd(f,39216,w);c[f+12>>2]=23;F=120;break a}if((m|2|0)==2)if(!m)break;else{F=120;break a}else{cd(f,39231,x);c[f+12>>2]=1;F=120;break a}}}while(0);s=f+8|0;m=c[s>>2]|0;b:do if(!m){p=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[p+76>>1]&8)==0:0)a[f+23>>0]=1;c:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))F=51;else{t=0;break b}else{do if((e[p+276>>1]|0)>=224){m=p+300|0;n=c[m>>2]|0;if(n|0){c[m>>2]=c[n>>2];x=p+284|0;c[x>>2]=(c[x>>2]|0)+1;break c}m=p+296|0;n=c[m>>2]|0;if(!n){m=p+292|0;break}else{c[m>>2]=c[n>>2];x=p+284|0;c[x>>2]=(c[x>>2]|0)+1;break c}}else m=p+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;F=51}while(0);if((F|0)==51)n=_d(p,224,0)|0;if(!n)t=0;else{m=n+104|0;o=m+120|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(o|0));c[n>>2]=p;m=p+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=n;c[n+8>>2]=o;c[n+4>>2]=0;c[m>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[s>>2]=n;Di(n,61,0,1,0)|0;t=n}}else t=m;while(0);n=f+32|0;o=c[n>>2]|0;m=f+28|0;p=c[m>>2]|0;if((p|0)<4){m=f+44|0;n=c[m>>2]|0;r=n+1|0;n=n+4|0}else{c[n>>2]=o+4;r=o;n=p+-4|0}c[m>>2]=n;do if(!z){if((a[j>>0]|0)!=-88){C=Jj(f,j,r)|0;F=66;break}m=c[s>>2]|0;n=c[j+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;z=c[m+104>>2]|0;a[z+(p*20|0)>>0]=78;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=n;c[z+(p*20|0)+8>>2]=r;c[z+(p*20|0)+12>>2]=0;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,r,0)|0;break}}else{C=Jj(f,0,r)|0;F=66}while(0);do if(((F|0)==66?(C|0)!=(r|0):0)?(B=c[s>>2]|0,B|0):0){m=B+108|0;n=c[m>>2]|0;if((c[B+112>>2]|0)>(n|0)){c[m>>2]=n+1;B=c[B+104>>2]|0;a[B+(n*20|0)>>0]=79;b[B+(n*20|0)+2>>1]=0;c[B+(n*20|0)+4>>2]=C;c[B+(n*20|0)+8>>2]=r;c[B+(n*20|0)+12>>2]=0;c[B+(n*20|0)+16>>2]=0;a[B+(n*20|0)+1>>0]=0;break}else{Di(B,79,C,r,0)|0;break}}while(0);q=r+1|0;do if(!A){if((a[k>>0]|0)!=-88){E=Jj(f,k,q)|0;F=78;break}m=c[s>>2]|0;n=c[k+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;C=c[m+104>>2]|0;a[C+(p*20|0)>>0]=78;b[C+(p*20|0)+2>>1]=0;c[C+(p*20|0)+4>>2]=n;c[C+(p*20|0)+8>>2]=q;c[C+(p*20|0)+12>>2]=0;c[C+(p*20|0)+16>>2]=0;a[C+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,q,0)|0;break}}else{E=Jj(f,0,q)|0;F=78}while(0);do if(((F|0)==78?(E|0)!=(q|0):0)?(D=c[s>>2]|0,D|0):0){m=D+108|0;n=c[m>>2]|0;if((c[D+112>>2]|0)>(n|0)){c[m>>2]=n+1;D=c[D+104>>2]|0;a[D+(n*20|0)>>0]=79;b[D+(n*20|0)+2>>1]=0;c[D+(n*20|0)+4>>2]=E;c[D+(n*20|0)+8>>2]=q;c[D+(n*20|0)+12>>2]=0;c[D+(n*20|0)+16>>2]=0;a[D+(n*20|0)+1>>0]=0;break}else{Di(D,79,E,q,0)|0;break}}while(0);q=r+2|0;do if(!y){if((a[l>>0]|0)!=-88){H=Jj(f,l,q)|0;F=90;break}m=c[s>>2]|0;n=c[l+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;f=c[m+104>>2]|0;a[f+(p*20|0)>>0]=78;b[f+(p*20|0)+2>>1]=0;c[f+(p*20|0)+4>>2]=n;c[f+(p*20|0)+8>>2]=q;c[f+(p*20|0)+12>>2]=0;c[f+(p*20|0)+16>>2]=0;a[f+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,q,0)|0;break}}else{H=Jj(f,0,q)|0;F=90}while(0);do if(((F|0)==90?(H|0)!=(q|0):0)?(G=c[s>>2]|0,G|0):0){m=G+108|0;n=c[m>>2]|0;if((c[G+112>>2]|0)>(n|0)){c[m>>2]=n+1;G=c[G+104>>2]|0;a[G+(n*20|0)>>0]=79;b[G+(n*20|0)+2>>1]=0;c[G+(n*20|0)+4>>2]=H;c[G+(n*20|0)+8>>2]=q;c[G+(n*20|0)+12>>2]=0;c[G+(n*20|0)+16>>2]=0;a[G+(n*20|0)+1>>0]=0;break}else{Di(G,79,H,q,0)|0;break}}while(0);if(t){n=r+3|0;o=n-(a[h>>0]|0)|0;p=t+108|0;m=c[p>>2]|0;q=t+112|0;if((c[q>>2]|0)>(m|0)){c[p>>2]=m+1;H=c[t+104>>2]|0;a[H+(m*20|0)>>0]=63;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=0;c[H+(m*20|0)+8>>2]=o;c[H+(m*20|0)+12>>2]=n;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else m=Di(t,63,0,o,n)|0;n=c[t>>2]|0;d:do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[p>>2]|0)+-1|0;n=c[t+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=h;a[o>>0]=-8;break}else{Ei(t,n+(m*20|0)|0,h,-8);break}}else if(c[h+4>>2]&16|0){do if(n|0){if(c[n+480>>2]|0){Xd(n,h);break d}m=h;if((c[n+304>>2]|0)>>>0<=m>>>0){if((c[n+308>>2]|0)>>>0<=m>>>0)break;H=n+300|0;c[h>>2]=c[H>>2];c[H>>2]=h;break d}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{H=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);n=c[p>>2]|0;if((n|0)>0)b[(c[t+104>>2]|0)+((n+-1|0)*20|0)+2>>1]=d[h>>0]|0;m=(g|0)==24&1;if((c[q>>2]|0)>(n|0)){c[p>>2]=n+1;F=c[t+104>>2]|0;a[F+(n*20|0)>>0]=-98;b[F+(n*20|0)+2>>1]=0;c[F+(n*20|0)+4>>2]=m;c[F+(n*20|0)+8>>2]=0;c[F+(n*20|0)+12>>2]=0;c[F+(n*20|0)+16>>2]=0;a[F+(n*20|0)+1>>0]=0;F=120;break}else{Di(t,158,m,0,0)|0;F=120;break}}else F=120}else F=120;while(0);if((F|0)==120?j|0:0)F=121;if((F|0)==121)ni(I,j);if(k|0)ni(I,k);if(!l){Ra=J;return}ni(I,l);Ra=J;return}function dn(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+32|0;v=w+24|0;t=w+16|0;s=w+8|0;n=w;j=c[e>>2]|0;a:do if(d){i=(Eu(d)|0)&1073741823;if(i>>>0>4&(c[7327]|j&64|0)!=0?(Lu(d,46556,5)|0)==0:0){j=j|64;k=0;l=i+2|0;m=0;do{l=Sv(l|0,m|0,(a[d+k>>0]|0)==38|0,0)|0;m=L()|0;k=k+1|0}while((k|0)!=(i|0));k=pb(l,m)|0;if(!k){g=7;Ra=w;return g|0}b:do if((a[d+5>>0]|0)==47?(a[d+6>>0]|0)==47:0){l=7;c:while(1){switch(a[d+l>>0]|0){case 0:case 47:break c;default:{}}l=l+1|0}switch(l&2147483647|0){case 7:{l=7;break b}case 16:{i=d+7|0;if(!(Lu(46562,i,9)|0)){l=16;break b}break}default:i=d+7|0}c[n>>2]=l+-7;c[n+4>>2]=i;l=k;i=1;k=Bb(46572,n)|0;u=86;break a}else l=5;while(0);i=0;n=0;d:while(1){p=k+(i+-1)|0;e:while(1){m=a[d+l>>0]|0;switch(m<<24>>24){case 0:case 35:break d;default:{}}o=l+1|0;f:do if((m<<24>>24==37?(q=a[d+o>>0]|0,(a[880+(q&255)>>0]&8)!=0):0)?(r=a[d+(l+2)>>0]|0,(a[880+(r&255)>>0]&8)!=0):0){m=q<<24>>24;l=l+3|0;o=r<<24>>24;m=(0-(o>>>6&1)&9)+o&15|(0-(m>>>6&1)&9)+m<<4&240;if(m|0){u=37;break e}switch(n|0){case 0:while(1){switch(a[d+l>>0]|0){case 63:case 35:case 0:break f;default:{}}l=l+1|0}case 1:while(1){switch(a[d+l>>0]|0){case 38:case 61:case 35:case 0:break f;default:{}}l=l+1|0}case 2:while(1){switch(a[d+l>>0]|0){case 38:case 35:case 0:break f;default:{}}l=l+1|0}default:while(1){switch(a[d+l>>0]|0){case 35:case 0:break f;default:{}}l=l+1|0}}}else u=38;while(0);g:do if((u|0)==38){u=0;switch(n|0){case 0:{u=47;break e}case 2:{u=48;break e}case 1:break;default:{l=o;break e}}switch(m<<24>>24){case 38:case 61:break;default:{n=1;l=o;break e}}if(a[p>>0]|0){u=45;break e}l=o;while(1){switch(a[d+l>>0]|0){case 35:case 0:break g;default:{}}if((a[d+(l+-1)>>0]|0)==38)break g;l=l+1|0}}while(0)}if((u|0)==37){u=0;m=m&255}else if((u|0)==45){u=0;if(m<<24>>24==38){a[k+i>>0]=0;m=0;i=i+1|0;n=1;l=o}else{m=0;n=2;l=o}}else if((u|0)==47){u=0;if(m<<24>>24==63)u=49;else{n=0;l=o}}else if((u|0)==48){u=0;if(m<<24>>24==38)u=49;else{n=2;l=o}}if((u|0)==49){u=0;m=0;n=1;l=o}a[k+i>>0]=m;i=i+1|0}if((n|0)==1){a[k+i>>0]=0;i=i+1|0}a[k+i>>0]=0;a[k+(i+1)>>0]=0;i=k+(((Eu(k)|0)&1073741823)+1)|0;if(a[i>>0]|0){r=b;b=i;h:while(1){i:do if(!b){i=1;l=(Eu(1)|0)&1073741823;u=71}else{d=Eu(b)|0;i=b+((d&1073741823)+1)|0;l=(Eu(i)|0)&1073741823;switch(d&1073741823|0){case 3:if(!(Lu(46600,b,3)|0)){m=i;break i}else{u=71;break i}case 5:{if(!(Lu(46604,b,5)|0)){o=393216;p=-393217;q=46604;n=18576}else{u=71;break i}break}case 4:{if(!(Lu(58212,b,4)|0)){o=j&135;p=-136;q=31701;n=18608}else{u=71;break i}break}default:{u=71;break i}}b=c[n>>2]|0;if(!b){u=67;break h}m=0;while(1){if((l|0)==((Eu(b)|0)&1073741823|0)?(Lu(i,b,l)|0)==0:0)break;m=m+1|0;b=c[n+(m<<3)>>2]|0;if(!b){u=67;break h}}b=c[n+(m<<3)+4>>2]|0;if(!b){u=67;break h}if((b&-129|0)>(o|0)){u=69;break h}j=b|p&j;u=71}while(0);if((u|0)==71){u=0;m=r}b=i+(l+1)|0;if(!(a[b>>0]|0)){b=m;u=77;break a}else r=m}if((u|0)==67){c[s>>2]=q;c[s+4>>2]=i;l=k;i=1;k=Bb(46635,s)|0;u=86;break}else if((u|0)==69){c[t>>2]=q;c[t+4>>2]=i;l=k;i=3;k=Bb(46655,t)|0;u=86;break}}else u=77}else u=73}else{i=0;u=73}while(0);if((u|0)==73){k=pb(i+2|0,0)|0;if(!k){g=7;Ra=w;return g|0}if(i|0)ew(k|0,d|0,i|0)|0;a[k+i>>0]=0;a[k+(i+1)>>0]=0;j=j&-65;u=77}j:do if((u|0)==77){k:do if(!(mb()|0)){i=c[14770]|0;l=(i|0)==0;if((b|0)==0|l){c[f>>2]=i;if(l)break;else{i=0;break j}}while(1){if(!(Bu(b,c[i+16>>2]|0)|0))break;i=c[i+12>>2]|0;if(!i){u=83;break k}}c[f>>2]=i;i=0;break j}else u=83;while(0);if((u|0)==83)c[f>>2]=0;c[v>>2]=b;l=k;i=1;k=Bb(46679,v)|0;u=86}while(0);do if((u|0)==86){c[h>>2]=k;if(l)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);k=0;break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);k=0;break}else k=0}while(0);c[e>>2]=j;c[g>>2]=k;g=i;Ra=w;return g|0}function en(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;do if(d){i=c[d+4>>2]|0;c[i+4>>2]=c[d>>2];h=i+48|0;d=c[h>>2]|0;if(!d){if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](84)|0;if(!d)g=26;else g=27}else{d=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){g=c[14978]|0;f=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&f>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](d)|0;if(d){e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0){c[14987]=e;g=27}else g=27}else g=26}if((g|0)==26){c[h>>2]=0;c[i+52>>2]=95;break}else if((g|0)==27){f=d;g=f+84|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));c[h>>2]=d;c[i+52>>2]=95;g=34;break}}else g=34}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](84)|0;if(!d)break}else{d=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){i=c[14978]|0;h=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e)break;d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0){c[14987]=d;d=e}else d=e}f=d;g=f+84|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));g=34}while(0);if((g|0)==34){if(a[d+76>>0]|0){b=d;return b|0}e=d+77|0;f=d+8|0;g=f+64|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));a[e>>0]=1;b=d;return b|0}d=b+81|0;if(a[d>>0]|0){b=0;return b|0}if(a[b+82>>0]|0){b=0;return b|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){b=0;return b|0}c[d+12>>2]=7;b=0;return b|0}function fn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=Ra;Ra=Ra+160|0;r=w+144|0;q=w+136|0;p=w+128|0;o=w;f=c[g>>2]|0;do if(f){g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0){f=c[f+16>>2]|0;break}if(!(g&1))f=Gg(f,1)|0;else f=0}else f=0;while(0);v=c[(c[e>>2]|0)+32>>2]|0;n=(f|0)==0?59952:f;t=v+20|0;l=c[t>>2]|0;a:do if((l|0)>0){u=v+16|0;m=c[u>>2]|0;f=0;while(1){j=m+(f<<4)+4|0;k=c[j>>2]|0;if(k|0){h=c[m+(f<<4)>>2]|0;i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=n;do{h=h+1|0;i=i+1|0;x=a[h>>0]|0;g=(d[208+(x&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(g|0)!=0))}if(!g)break}f=f+1|0;if((f|0)>=(l|0)){s=15;break a}}if(f>>>0<2){c[q>>2]=n;Cb(128,o,46730,q)|0;break}if((a[k+8>>0]|0)==0?(c[k+16>>2]|0)==0:0){ug(k);c[j>>2]=0;c[m+(f<<4)+12>>2]=0;if((c[t>>2]|0)>2){j=v+480|0;k=v+304|0;l=v+308|0;m=v+300|0;i=2;f=2;do{g=c[u>>2]|0;h=g+(i<<4)|0;if(!(c[g+(i<<4)+4>>2]|0)){g=c[h>>2]|0;do if(g|0){if(c[j>>2]|0){Xd(v,g);break}x=g;if((c[k>>2]|0)>>>0<=x>>>0?(c[l>>2]|0)>>>0>x>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[h>>2]=0}else{if((f|0)<(i|0)){x=g+(f<<4)|0;c[x>>2]=c[h>>2];c[x+4>>2]=c[h+4>>2];c[x+8>>2]=c[h+8>>2];c[x+12>>2]=c[h+12>>2]}f=f+1|0}i=i+1|0}while((i|0)<(c[t>>2]|0));c[t>>2]=f;if((f|0)>=3){Ra=w;return}}else c[t>>2]=2;f=c[u>>2]|0;g=v+412|0;if((f|0)==(g|0)){Ra=w;return};c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];c[g+16>>2]=c[f+16>>2];c[g+20>>2]=c[f+20>>2];c[g+24>>2]=c[f+24>>2];c[g+28>>2]=c[f+28>>2];do if(f|0){if(c[v+480>>2]|0){Xd(v,f);break}x=f;if((c[v+304>>2]|0)>>>0<=x>>>0?(c[v+308>>2]|0)>>>0>x>>>0:0){x=v+300|0;c[f>>2]=c[x>>2];c[x>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[u>>2]=g;Ra=w;return}c[r>>2]=n;Cb(128,o,46756,r)|0}else s=15;while(0);if((s|0)==15){c[p>>2]=n;Cb(128,o,46709,p)|0}c[e+20>>2]=1;yc(c[e>>2]|0,o,-1,1,-1)|0;Ra=w;return}function gn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(c[f+56>>2]|0)return;h=c[f+8>>2]|0;if(!h)return;p=f+72|0;o=e+116|0;if(!g){do{i=c[p>>2]|0;if(!i)f=-1e6;else{j=c[(c[e>>2]|0)+16>>2]|0;f=0;while(1)if((c[j+(f<<4)+12>>2]|0)==(i|0))break;else f=f+1|0}l=c[o>>2]|0;l=(l|0)==0?e:l;i=l+84|0;j=c[i>>2]|0;k=1<<f;if((j&k|0)==0?(c[i>>2]=j|k,(f|0)==1):0)Oe(l)|0;g=l+80|0;c[g>>2]=c[g>>2]|k;bl(e,h,-1);h=c[h+20>>2]|0}while((h|0)!=0);return}do{f=b[h+52>>1]|0;a:do if(f<<16>>16){m=c[h+4>>2]|0;n=h+32|0;l=f&65535;k=0;while(1){if((b[m+(k<<1)>>1]|0)>-1){i=c[(c[n>>2]|0)+(k<<2)>>2]|0;j=a[i>>0]|0;f=(d[208+(j&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(j<<24>>24==0|(f|0)!=0)){j=g;do{i=i+1|0;j=j+1|0;q=a[i>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break}k=k+1|0;if(k>>>0>=l>>>0)break a}i=c[p>>2]|0;if(!i)f=-1e6;else{j=c[(c[e>>2]|0)+16>>2]|0;f=0;while(1)if((c[j+(f<<4)+12>>2]|0)==(i|0))break;else f=f+1|0}l=c[o>>2]|0;l=(l|0)==0?e:l;i=l+84|0;j=c[i>>2]|0;k=1<<f;if((j&k|0)==0?(c[i>>2]=j|k,(f|0)==1):0)Oe(l)|0;q=l+80|0;c[q>>2]=c[q>>2]|k;bl(e,h,-1)}while(0);h=c[h+20>>2]|0}while((h|0)!=0);return}function hn(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+96|0;t=A+64|0;r=A+48|0;q=A+32|0;p=A+16|0;o=A;y=A+80|0;z=A+92|0;x=c[d>>2]|0;m=d+8|0;j=c[m>>2]|0;do if(!j){if((c[d+116>>2]|0)==0?(b[x+76>>1]&8)==0:0)a[d+23>>0]=1;a:do if(c[x+272>>2]|0){if(!(a[x+81>>0]|0))l=15}else{do if((e[x+276>>1]|0)>=224){j=x+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=16;break a}j=x+296|0;k=c[j>>2]|0;if(!k){j=x+292|0;break}else{c[j>>2]=c[k>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=16;break a}}else j=x+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;l=15}while(0);if((l|0)==15){k=_d(x,224,0)|0;l=16}if((l|0)==16?k|0:0){j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=x;j=x+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=d;c[m>>2]=k;Di(k,61,0,1,0)|0;u=k;break}Ra=A;return}else u=j;while(0);n=(c[x+16>>2]|0)+(f<<4)|0;j=d+92|0;v=u+108|0;s=u+112|0;w=u+104|0;k=c[n>>2]|0;l=Sd(x,35174,k)|0;m=(l|0)==0;do if(!h){do if(!m){k=c[l+28>>2]|0;c[y>>2]=k;a[z>>0]=0;Hj(d,f,k,1,35174);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;l=c[w>>2]|0;a[l+(j*20|0)>>0]=-119;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=f;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0;l=0;break}else{Di(u,137,k,f,0)|0;l=0;break}}else{c[o>>2]=k;c[o+4>>2]=35174;c[o+8>>2]=46824;Ak(d,46863,o);k=c[j>>2]|0;c[y>>2]=k;a[z>>0]=16;l=16}while(0);j=Sd(x,46837,c[n>>2]|0)|0;do if(j|0){j=c[j+28>>2]|0;c[y+4>>2]=j;a[z+1>>0]=0;Hj(d,f,j,1,46837);m=c[v>>2]|0;if((c[s>>2]|0)>(m|0)){c[v>>2]=m+1;t=c[w>>2]|0;a[t+(m*20|0)>>0]=-119;b[t+(m*20|0)+2>>1]=0;c[t+(m*20|0)+4>>2]=j;c[t+(m*20|0)+8>>2]=f;c[t+(m*20|0)+12>>2]=0;c[t+(m*20|0)+16>>2]=0;a[t+(m*20|0)+1>>0]=0;break}else{Di(u,137,j,f,0)|0;break}}while(0);j=Sd(x,46850,c[n>>2]|0)|0;if(j){m=c[j+28>>2]|0;c[y+8>>2]=m;a[z+2>>0]=0;Hj(d,f,m,1,46850);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;z=c[w>>2]|0;a[z+(j*20|0)>>0]=-119;b[z+(j*20|0)+2>>1]=0;c[z+(j*20|0)+4>>2]=m;c[z+(j*20|0)+8>>2]=f;c[z+(j*20|0)+12>>2]=0;c[z+(j*20|0)+16>>2]=0;a[z+(j*20|0)+1>>0]=0;break}else{Di(u,137,m,f,0)|0;break}}}else{if(m){c[p>>2]=k;c[p+4>>2]=35174;c[p+8>>2]=46824;Ak(d,46863,p);k=c[j>>2]|0;c[y>>2]=k;a[z>>0]=16;l=16}else{k=c[l+28>>2]|0;c[y>>2]=k;a[z>>0]=0;Hj(d,f,k,1,35174);c[q>>2]=c[n>>2];c[q+4>>2]=35174;c[q+8>>2]=i;c[q+12>>2]=h;Ak(d,42751,q);l=0}j=c[n>>2]|0;m=Sd(x,46837,j)|0;if(m){j=c[m+28>>2]|0;c[y+4>>2]=j;a[z+1>>0]=0;Hj(d,f,j,1,46837);c[r>>2]=c[n>>2];c[r+4>>2]=46837;c[r+8>>2]=i;c[r+12>>2]=h;Ak(d,42751,r);j=c[n>>2]|0}j=Sd(x,46850,j)|0;if(j){x=c[j+28>>2]|0;c[y+8>>2]=x;a[z+2>>0]=0;Hj(d,f,x,1,46850);c[t>>2]=c[n>>2];c[t+4>>2]=46850;c[t+8>>2]=i;c[t+12>>2]=h;Ak(d,42751,t)}}while(0);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;z=c[w>>2]|0;a[z+(j*20|0)>>0]=109;b[z+(j*20|0)+2>>1]=0;c[z+(j*20|0)+4>>2]=g;c[z+(j*20|0)+8>>2]=k;c[z+(j*20|0)+12>>2]=f;c[z+(j*20|0)+16>>2]=0;a[z+(j*20|0)+1>>0]=0}else j=Di(u,109,g,k,f)|0;if(!(a[(c[u>>2]|0)+81>>0]|0)){g=c[w>>2]|0;a[g+(j*20|0)+1>>0]=-3;c[g+(j*20|0)+16>>2]=3}j=c[v>>2]|0;if((j|0)<=0){Ra=A;return}b[(c[w>>2]|0)+((j+-1|0)*20|0)+2>>1]=l&255;Ra=A;return}function jn(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=Ra;Ra=Ra+16|0;t=fa+8|0;s=fa;Z=c[f>>2]|0;_=j+1|0;$=j+2|0;ea=j+3|0;da=j+4|0;ca=j+5|0;ba=j+6|0;W=j+7|0;X=f+44|0;Y=c[X>>2]|0;c[X>>2]=(Y|0)>(W|0)?Y:W;Y=f+8|0;l=c[Y>>2]|0;if(!l){if((c[f+116>>2]|0)==0?(b[Z+76>>1]&8)==0:0)a[f+23>>0]=1;a:do if(c[Z+272>>2]|0)if(!(a[Z+81>>0]|0))V=15;else{Ra=fa;return}else{do if((e[Z+276>>1]|0)>=224){l=Z+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];aa=Z+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break a}l=Z+296|0;m=c[l>>2]|0;if(!m){l=Z+292|0;break}else{c[l>>2]=c[m>>2];aa=Z+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break a}}else l=Z+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;V=15}while(0);if((V|0)==15)m=_d(Z,224,0)|0;if(!m){Ra=fa;return}o=m+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[m>>2]=Z;l=Z+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[Y>>2]=m;Di(m,61,0,1,0)|0;aa=m}else aa=l;if((g|0)==0|(aa|0)==0){Ra=fa;return}q=g+28|0;m=c[q>>2]|0;if(!m){Ra=fa;return}l=c[g>>2]|0;if(!(md(46886,l,31415,92)|0)){Ra=fa;return}o=c[g+72>>2]|0;p=c[Z+16>>2]|0;if(!o)n=-1e6;else{n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0))break;else n=n+1|0}o=c[p+(n<<4)>>2]|0;p=c[f>>2]|0;do if(((a[p+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(r=c[p+312>>2]|0,(r|0)!=0):0){l=$a[r&127](c[p+316>>2]|0,28,l,0,o,c[f+240>>2]|0)|0;if((l|0)==1){cd(f,39216,s);c[f+12>>2]=23;Ra=fa;return}if((l|2|0)!=2){cd(f,39231,t);c[f+12>>2]=1;Ra=fa;return}if(!l){m=c[q>>2]|0;l=c[g>>2]|0;break}else{Ra=fa;return}}while(0);Hj(f,n,m,0,l);S=k+1|0;T=k+2|0;m=f+40|0;l=c[m>>2]|0;c[m>>2]=(l|0)>(T|0)?l:T;Gj(f,k,n,g,108);m=c[g>>2]|0;T=aa+108|0;l=c[T>>2]|0;U=aa+112|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;R=c[aa+104>>2]|0;a[R+(l*20|0)>>0]=110;b[R+(l*20|0)+2>>1]=0;c[R+(l*20|0)+4>>2]=0;c[R+(l*20|0)+8>>2]=da;c[R+(l*20|0)+12>>2]=0;c[R+(l*20|0)+16>>2]=0;a[R+(l*20|0)+1>>0]=0}else l=Di(aa,110,0,da,0)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[T>>2]|0)+-1|0;Ei(aa,(c[aa+104>>2]|0)+(l*20|0)|0,m,0)}m=c[g+8>>2]|0;R=(h|0)==0;if(!m)l=1;else{B=g+36|0;C=aa+104|0;D=f+56|0;E=Z+272|0;F=Z+276|0;G=Z+81|0;H=Z+288|0;I=Z+300|0;J=Z+296|0;K=Z+284|0;L=Z+292|0;M=aa+12|0;N=(Z|0)==0;O=Z+480|0;P=Z+304|0;Q=Z+308|0;l=1;do{b:do if(R|(m|0)==(h|0)){l=(c[m+36>>2]|0)==0?0:l;o=m+55|0;o=d[o>>0]|d[o+1>>0]<<8;if(!((c[B>>2]&32|0)!=0&(o&3)==2)){q=e[m+52>>1]|0;p=c[m>>2]|0;if(!(o&8))t=q;else t=e[m+50>>1]|0}else{q=e[m+50>>1]|0;t=q;p=c[g>>2]|0}A=t+-1|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=110;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=0;c[z+(o*20|0)+8>>2]=ca;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else o=Di(aa,110,0,ca,0)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(aa,(c[C>>2]|0)+(o*20|0)|0,p,0)}p=c[X>>2]|0;o=A+W|0;c[X>>2]=(p|0)>(o|0)?p:o;o=c[m+44>>2]|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;z=c[C>>2]|0;a[z+(p*20|0)>>0]=108;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=S;c[z+(p*20|0)+8>>2]=o;c[z+(p*20|0)+12>>2]=n;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0}else Di(aa,108,S,o,n)|0;o=c[Y>>2]|0;r=Ij(f,m)|0;c:do if(r|0){p=c[o>>2]|0;if(!(a[p+81>>0]|0)){y=c[o+104>>2]|0;z=(c[o+108>>2]|0)+-1|0;a[y+(z*20|0)+1>>0]=-9;c[y+(z*20|0)+16>>2]=r;break}if(c[p+480>>2]|0)break;z=(c[r>>2]|0)+-1|0;c[r>>2]=z;if(z|0)break;o=c[r+12>>2]|0;do if(o|0){if(c[o+480>>2]|0){Xd(o,r);break c}p=r;if((c[o+304>>2]|0)>>>0>p>>>0)break;if((c[o+308>>2]|0)>>>0<=p>>>0)break;z=o+300|0;c[r>>2]=c[z>>2];c[z>>2]=r;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{z=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=70;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=q;c[z+(o*20|0)+8>>2]=$;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else Di(aa,70,q,$,0)|0;s=m+50|0;o=e[s>>1]|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;z=c[C>>2]|0;a[z+(p*20|0)>>0]=70;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=o;c[z+(p*20|0)+8>>2]=ea;c[z+(p*20|0)+12>>2]=0;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0}else Di(aa,70,o,ea,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=63;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=0;c[z+(o*20|0)+8>>2]=$;c[z+(o*20|0)+12>>2]=_;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else o=Di(aa,63,0,$,_)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30184;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30184,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=2;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=36;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=S;c[z+(o*20|0)+8>>2]=0;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0;z=o}else z=Di(aa,36,S,0,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;y=c[C>>2]|0;a[y+(o*20|0)>>0]=70;b[y+(o*20|0)+2>>1]=0;c[y+(o*20|0)+4>>2]=0;c[y+(o*20|0)+8>>2]=$;c[y+(o*20|0)+12>>2]=0;c[y+(o*20|0)+16>>2]=0;a[y+(o*20|0)+1>>0]=0}else Di(aa,70,0,$,0)|0;o=c[T>>2]|0;d:do if(t>>>0>1){y=c[D>>2]|0;w=y+-1|0;c[D>>2]=w;p=A<<2;e:do if(c[E>>2]|0)if(!(a[G>>0]|0))V=105;else break b;else{do if(0<0|(0==0?(e[F>>1]|0)>>>0<p>>>0:0))o=H;else{o=c[I>>2]|0;if(o|0){c[I>>2]=c[o>>2];c[K>>2]=(c[K>>2]|0)+1;x=o;break e}o=c[J>>2]|0;if(!o){o=L;break}c[J>>2]=c[o>>2];c[K>>2]=(c[K>>2]|0)+1;x=o;break e}while(0);c[o>>2]=(c[o>>2]|0)+1;V=105}while(0);if((V|0)==105){V=0;x=_d(Z,p,0)|0}if(!x)break b;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;p=c[C>>2]|0;a[p+(o*20|0)>>0]=11;o=p+(o*20|0)+1|0;p=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(p|0))}else Di(aa,11,0,0,0)|0;r=c[T>>2]|0;do if((A|0)==1){if((b[s>>1]|0)!=1)break;if(!(a[m+54>>0]|0))break;if((c[U>>2]|0)>(r|0)){c[T>>2]=r+1;v=c[C>>2]|0;a[v+(r*20|0)>>0]=51;b[v+(r*20|0)+2>>1]=0;c[v+(r*20|0)+4>>2]=W;c[v+(r*20|0)+8>>2]=w;c[v+(r*20|0)+12>>2]=0;c[v+(r*20|0)+16>>2]=0;a[v+(r*20|0)+1>>0]=0;break}else{Di(aa,51,W,w,0)|0;break}}while(0);v=m+32|0;u=0;do{o=c[(c[v>>2]|0)+(u<<2)>>2]|0;q=c[f>>2]|0;p=a[q+78>>0]|0;t=a[q+165>>0]|0;q=Zi(q,p,o,t&255)|0;do if(!(t<<24>>24)){if(!q){q=_i(f,p,0,o)|0;break}if(c[q+12>>2]|0)break;q=_i(f,p,q,o)|0}while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;t=c[C>>2]|0;a[t+(o*20|0)>>0]=70;b[t+(o*20|0)+2>>1]=0;c[t+(o*20|0)+4>>2]=u;c[t+(o*20|0)+8>>2]=$;c[t+(o*20|0)+12>>2]=0;c[t+(o*20|0)+16>>2]=0;a[t+(o*20|0)+1>>0]=0}else Di(aa,70,u,$,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;t=c[C>>2]|0;a[t+(o*20|0)>>0]=90;b[t+(o*20|0)+2>>1]=0;c[t+(o*20|0)+4>>2]=S;c[t+(o*20|0)+8>>2]=u;c[t+(o*20|0)+12>>2]=ea;c[t+(o*20|0)+16>>2]=0;a[t+(o*20|0)+1>>0]=0}else Di(aa,90,S,u,ea)|0;o=u+W|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;t=c[C>>2]|0;a[t+(p*20|0)>>0]=52;b[t+(p*20|0)+2>>1]=0;c[t+(p*20|0)+4>>2]=ea;c[t+(p*20|0)+8>>2]=0;c[t+(p*20|0)+12>>2]=o;c[t+(p*20|0)+16>>2]=0;a[t+(p*20|0)+1>>0]=0}else p=Di(aa,52,ea,0,o)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((p|0)<0)o=(c[T>>2]|0)+-1|0;else o=p;s=c[C>>2]|0;t=s+(o*20|0)+1|0;if(a[t>>0]|0){Ei(aa,s+(o*20|0)|0,q,-2);break}if(!q)break;c[s+(o*20|0)+16>>2]=q;a[t>>0]=-2}while(0);c[x+(u<<2)>>2]=p;o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=128;u=u+1|0}while((u|0)<(A|0));if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;v=c[C>>2]|0;a[v+(o*20|0)>>0]=70;b[v+(o*20|0)+2>>1]=0;c[v+(o*20|0)+4>>2]=A;c[v+(o*20|0)+8>>2]=$;c[v+(o*20|0)+12>>2]=0;c[v+(o*20|0)+16>>2]=0;a[v+(o*20|0)+1>>0]=0}else Di(aa,70,A,$,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;v=c[C>>2]|0;a[v+(o*20|0)>>0]=11;b[v+(o*20|0)+2>>1]=0;c[v+(o*20|0)+4>>2]=0;c[v+(o*20|0)+8>>2]=w;c[v+(o*20|0)+12>>2]=0;c[v+(o*20|0)+16>>2]=0;a[v+(o*20|0)+1>>0]=0}else Di(aa,11,0,w,0)|0;q=c[T>>2]|0;p=a[(c[aa>>2]|0)+81>>0]|0;if(!(p<<24>>24))o=(c[C>>2]|0)+((((r|0)<1?q:r)+-1|0)*20|0)|0;else o=59308;c[o+8>>2]=q;o=0;s=q;while(1){q=c[x+(o<<2)>>2]|0;if(!(p<<24>>24))p=(c[C>>2]|0)+(((q|0)<0?s+-1|0:q)*20|0)|0;else p=59308;c[p+8>>2]=s;p=o+W|0;if((c[U>>2]|0)>(s|0)){c[T>>2]=s+1;w=c[C>>2]|0;a[w+(s*20|0)>>0]=90;b[w+(s*20|0)+2>>1]=0;c[w+(s*20|0)+4>>2]=S;c[w+(s*20|0)+8>>2]=o;c[w+(s*20|0)+12>>2]=p;c[w+(s*20|0)+16>>2]=0;a[w+(s*20|0)+1>>0]=0}else Di(aa,90,S,o,p)|0;o=o+1|0;if((o|0)>=(A|0))break;p=a[(c[aa>>2]|0)+81>>0]|0;s=c[T>>2]|0}p=c[M>>2]|0;o=0-y|0;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0)mk(p,aa,o);else c[(c[p+64>>2]|0)+(o<<2)>>2]=c[T>>2];do if(!N){if(c[O>>2]|0){Xd(Z,x);break d}o=x;if((c[P>>2]|0)>>>0>o>>>0)break;if((c[Q>>2]|0)>>>0<=o>>>0)break;c[x>>2]=c[I>>2];c[I>>2]=x;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{A=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}else r=o;while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=63;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=1;c[A+(o*20|0)+8>>2]=_;c[A+(o*20|0)+12>>2]=ea;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,63,1,_,ea)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30224;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30224,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=2;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=5;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=S;c[A+(o*20|0)+8>>2]=r;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,5,S,r,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=63;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=0;c[A+(o*20|0)+8>>2]=_;c[A+(o*20|0)+12>>2]=ba;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,63,0,_,ba)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30264;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30264,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=1;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=92;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=da;c[A+(o*20|0)+8>>2]=3;c[A+(o*20|0)+12>>2]=ea;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,92,da,3,ea)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(aa,(c[C>>2]|0)+(o*20|0)|0,46896,0)}o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=121;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=i;c[A+(o*20|0)+8>>2]=j;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,121,i,j,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=122;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=i;c[A+(o*20|0)+8>>2]=ea;c[A+(o*20|0)+12>>2]=j;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,122,i,ea,j)|0;p=c[T>>2]|0;if((p|0)>0)b[(c[C>>2]|0)+((p+-1|0)*20|0)+2>>1]=8;if(!(a[(c[aa>>2]|0)+81>>0]|0))o=(c[C>>2]|0)+(((z|0)<0?p+-1|0:z)*20|0)|0;else o=59308;c[o+8>>2]=p}while(0);m=c[m+20>>2]|0}while((m|0)!=0)}if(l<<24>>24==0|R^1){Ra=fa;return}l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;$=c[aa+104>>2]|0;a[$+(l*20|0)>>0]=93;b[$+(l*20|0)+2>>1]=0;c[$+(l*20|0)+4>>2]=k;c[$+(l*20|0)+8>>2]=ba;c[$+(l*20|0)+12>>2]=0;c[$+(l*20|0)+16>>2]=0;a[$+(l*20|0)+1>>0]=0}else Di(aa,93,k,ba,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;n=c[aa+104>>2]|0;a[n+(l*20|0)>>0]=20;b[n+(l*20|0)+2>>1]=0;c[n+(l*20|0)+4>>2]=ba;c[n+(l*20|0)+8>>2]=0;c[n+(l*20|0)+12>>2]=0;c[n+(l*20|0)+16>>2]=0;a[n+(l*20|0)+1>>0]=0;n=l}else n=Di(aa,20,ba,0,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;ba=c[aa+104>>2]|0;a[ba+(l*20|0)>>0]=73;b[ba+(l*20|0)+2>>1]=0;c[ba+(l*20|0)+4>>2]=0;c[ba+(l*20|0)+8>>2]=ca;c[ba+(l*20|0)+12>>2]=0;c[ba+(l*20|0)+16>>2]=0;a[ba+(l*20|0)+1>>0]=0}else Di(aa,73,0,ca,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;ca=c[aa+104>>2]|0;a[ca+(l*20|0)>>0]=92;b[ca+(l*20|0)+2>>1]=0;c[ca+(l*20|0)+4>>2]=da;c[ca+(l*20|0)+8>>2]=3;c[ca+(l*20|0)+12>>2]=ea;c[ca+(l*20|0)+16>>2]=0;a[ca+(l*20|0)+1>>0]=0}else l=Di(aa,92,da,3,ea)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[T>>2]|0)+-1|0;Ei(aa,(c[aa+104>>2]|0)+(l*20|0)|0,46896,0)}l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;da=c[aa+104>>2]|0;a[da+(l*20|0)>>0]=121;b[da+(l*20|0)+2>>1]=0;c[da+(l*20|0)+4>>2]=i;c[da+(l*20|0)+8>>2]=j;c[da+(l*20|0)+12>>2]=0;c[da+(l*20|0)+16>>2]=0;a[da+(l*20|0)+1>>0]=0}else Di(aa,121,i,j,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;da=c[aa+104>>2]|0;a[da+(l*20|0)>>0]=122;b[da+(l*20|0)+2>>1]=0;c[da+(l*20|0)+4>>2]=i;c[da+(l*20|0)+8>>2]=ea;c[da+(l*20|0)+12>>2]=j;c[da+(l*20|0)+16>>2]=0;a[da+(l*20|0)+1>>0]=0}else Di(aa,122,i,ea,j)|0;m=c[T>>2]|0;if((m|0)>0)b[(c[aa+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=8;if(!(a[(c[aa>>2]|0)+81>>0]|0))l=(c[aa+104>>2]|0)+(((n|0)<0?m+-1|0:n)*20|0)|0;else l=59308;c[l+8>>2]=m;Ra=fa;return}function kn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=c[h>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){o=Mg(+g[f>>3])|0;L()|0;break}if(!(i&18))o=0;else{o=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0}}else o=c[f>>2]|0;while(0);p=o+1&-2;f=c[h+4>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){l=Mg(+g[f>>3])|0;L()|0;break}if(!(i&18))l=0;else{l=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0}}else l=c[f>>2]|0;while(0);m=(p<<3)+60|0;n=c[(c[d>>2]|0)+32>>2]|0;h=((m|0)<0)<<31>>31;a:do if(!n){h=Sv(m|0,h|0,-1,-1)|0;i=L()|0;if(!(i>>>0>0|(i|0)==0&h>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;k=37;break}h=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){q=c[14978]|0;i=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&i>>>0<=q>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(f|0){i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;k=47}else k=47}}}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0)break}else{do if(!(0<h>>>0|(0==(h|0)?(e[n+276>>1]|0)>>>0<m>>>0:0))){f=n+300|0;i=c[f>>2]|0;if(i|0){c[f>>2]=c[i>>2];j=n+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;k=37;break a}f=n+296|0;i=c[f>>2]|0;if(!i){f=n+292|0;break}else{c[f>>2]=c[i>>2];j=n+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;k=37;break a}}else f=n+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}j=_d(n,m,h)|0;k=37}while(0);if((k|0)==37?j|0:0){f=j;k=47}if((k|0)==47){gw(f|0,0,m|0)|0;c[f+56>>2]=n;c[f>>2]=0;c[f+8>>2]=o;c[f+12>>2]=l;q=f+60|0;c[f+24>>2]=q;c[f+20>>2]=q+(p<<2);if((yc(c[d>>2]|0,f,60,0,96)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}f=c[d>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[d>>2]|0}c[d+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0)return;if(a[f+82>>0]|0)return;a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;q=f+272|0;c[q>>2]=(c[q>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function ln(a){a=a|0;var b=0,d=0;b=c[a+56>>2]|0;if(!a)return;if(b|0){if(c[b+480>>2]|0){Xd(b,a);return}d=a;if((c[b+304>>2]|0)>>>0<=d>>>0?(c[b+308>>2]|0)>>>0>d>>>0:0){d=b+300|0;c[a>>2]=c[d>>2];c[d>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function mn(b,d,f){b=b|0;d=d|0;f=f|0;var h=0,i=0,j=0;j=mc(c[f>>2]|0)|0;b=c[f+4>>2]|0;d=e[b+8>>1]|0;do if(!(d&4)){if(d&8|0){i=Mg(+g[b>>3])|0;L()|0;break}if(!(d&18))i=0;else{i=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;L()|0}}else i=c[b>>2]|0;while(0);if(!(c[j>>2]|0)){d=j+8|0;if((c[d>>2]|0)<=0){i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}f=c[j+20>>2]|0;b=0;do{c[f+(b<<2)>>2]=1;b=b+1|0}while((b|0)<(c[d>>2]|0));i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}if((i|0)>0){d=c[j+20>>2]|0;b=0;do{h=d+(b<<2)|0;c[h>>2]=(c[h>>2]|0)+1;b=b+1|0}while((b|0)!=(i|0))}d=j+8|0;if((i|0)>=(c[d>>2]|0)){i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}f=c[j+24>>2]|0;h=c[j+20>>2]|0;b=i;do{i=f+(b<<2)|0;c[i>>2]=(c[i>>2]|0)+1;c[h+(b<<2)>>2]=1;b=b+1|0}while((b|0)<(c[d>>2]|0));i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}function nn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=Ra;Ra=Ra+16|0;l=m+8|0;i=m;j=mc(c[f>>2]|0)|0;k=j+12|0;h=((c[k>>2]|0)*25|0)+25|0;g=Sv(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;f=L()|0;do if(!(f>>>0>0|(f|0)==0&g>>>0>2147483390)){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](h)|0;if(!e)break}else{e=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){n=c[14978]|0;g=Tv(f|0,g|0,e|0,((e|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=n>>>0)&1}e=Wa[c[29340>>2]&127](e)|0;if(!e)break;f=Wa[c[29352>>2]&127](e)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(e|0,0,h|0)|0;n=i;c[n>>2]=c[j>>2];c[n+4>>2]=0;Cb(24,e,46929,i)|0;if((c[k>>2]|0)>0){i=j+24|0;g=0;h=e+((Eu(e)|0)&1073741823)|0;while(1){o=(c[(c[i>>2]|0)+(g<<2)>>2]|0)+1|0;f=c[j>>2]|0;n=Sv(o|0,0,-1,-1)|0;f=Sv(n|0,L()|0,f|0,0)|0;o=_v(f|0,L()|0,o|0,0)|0;f=L()|0;n=l;c[n>>2]=o;c[n+4>>2]=f;Cb(24,h,46934,l)|0;if(!h)f=0;else f=(Eu(h)|0)&1073741823;g=g+1|0;if((g|0)>=(c[k>>2]|0))break;else h=h+f|0}}if((yc(c[d>>2]|0,e,-1,1,90)|0)!=18){Ra=m;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=m;return}while(0);e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0){Ra=m;return}if(a[e+82>>0]|0){Ra=m;return}a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;o=e+272|0;c[o>>2]=(c[o>>2]|0)+1;e=c[e+236>>2]|0;if(!e){Ra=m;return}c[e+12>>2]=7;Ra=m;return}function on(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;k=l;j=c[e>>2]|0;a:do if(j){f=a[j>>0]|0;do if(!(f<<24>>24)){f=39441;i=3}else{h=f&255;f=208+h|0;if((h|32|0)==115){f=a[j+1>>0]|0;if(!(f<<24>>24)){f=39442;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==113){f=a[j+2>>0]|0;if(!(f<<24>>24)){f=39443;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==108){f=a[j+3>>0]|0;if(!(f<<24>>24)){f=39444;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==105){f=a[j+4>>0]|0;if(!(f<<24>>24)){f=39445;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==116){f=a[j+5>>0]|0;if(!(f<<24>>24)){f=39446;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==101){f=a[j+6>>0]|0;if(!(f<<24>>24)){f=39447;i=3;break}if(f<<24>>24==95)break a;else{h=95;f=208+(f&255)|0}}else h=101}else h=116}else h=105}else h=108}else h=113}else h=115;g=d[f>>0]|0;f=h}while(0);if((i|0)==3){g=0;f=a[208+(d[f>>0]|0)>>0]|0}if((g|0)!=(f&255|0))i=8}else i=8;while(0);if((i|0)==8){if(!(c[e+36>>2]&1024)){k=0;Ra=l;return k|0}f=c[b>>2]|0;if(0==0?(c[f+32>>2]&268435456|0)==0:0){k=0;Ra=l;return k|0}if(c[f+180>>2]|0){k=0;Ra=l;return k|0}}c[k>>2]=j;cd(b,47776,k);k=1;Ra=l;return k|0}function pn(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+32|0;h=k;i=h+20|0;a[i>>0]=1;c[h+4>>2]=127;c[h+8>>2]=128;c[h+24>>2]=0;if(!g){j=0;Ra=k;return j|0}_j(h,g)|0;if(a[i>>0]|0){j=g;Ra=k;return j|0}if((d[f+200>>0]|0)>1){i=h+8|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[h>>2]=f;c[h+4>>2]=124;_j(h,g)|0}ni(c[f>>2]|0,g);g=c[f>>2]|0;a:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))j=15;else{j=0;Ra=k;return j|0}else{do if((e[g+276>>1]|0)>=52){f=g+300|0;h=c[f>>2]|0;if(h|0){c[f>>2]=c[h>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;break a}f=g+296|0;h=c[f>>2]|0;if(!h){f=g+292|0;break}else{c[f>>2]=c[h>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;break a}}else f=g+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(g,52,0)|0;if(!h){j=h;Ra=k;return j|0}f=h;g=f+52|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));a[h>>0]=114;b[h+34>>1]=-1;c[h+24>>2]=1;j=h;Ra=k;return j|0}function qn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0;e=c[f>>2]|0;if(!e)return;f=b[e+8>>1]|0;if((f&514)==514?(a[e+10>>0]|0)==1:0)e=c[e+16>>2]|0;else g=5;do if((g|0)==5)if(!(f&1)){e=Gg(e,1)|0;break}else return;while(0);if(!e)return;h=Wd(e)|0;e=c[d>>2]|0;f=((h|0)<0)<<31>>31;g=e+8|0;if(!(b[g>>1]&9216)){d=e;c[d>>2]=h;c[d+4>>2]=f;b[g>>1]=4;return}else{Pg(e,h,f);return}}function rn(b,d,f){b=b|0;d=d|0;f=f|0;d=c[f>>2]|0;f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){d=Mg(+g[d>>3])|0;L()|0;f=7;break}if(!(f&18)){d=26464;f=8}else{d=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0;f=7}}else{d=c[d>>2]|0;f=7}while(0);if((f|0)==7)if(d>>>0<7){d=26464+(d<<2)|0;f=8}else d=0;if((f|0)==8)d=c[d>>2]|0;if((yc(c[b>>2]|0,d,-1,1,0)|0)!=18)return;c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0;return}function sn(a,b,d){a=a|0;b=b|0;d=d|0;if((yc(c[a>>2]|0,31142,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function tn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=c[g>>2]|0;i=b[h+8>>1]|0;if((h|0)==0|(-1431655766>>>(i&31)&1|0)!=0)return;if((i&514)==514?(a[h+10>>0]|0)==1:0)i=c[h+16>>2]|0;else q=5;do if((q|0)==5)if(!(i&1)){i=Gg(h,1)|0;break}else return;while(0);if(!i)return;k=c[g>>2]|0;h=b[k+8>>1]|0;if((h&2)!=0?(a[k+10>>0]|0)==1:0)h=c[k+12>>2]|0;else q=11;do if((q|0)==11){j=h&65535;if(!(j&16)){if(j&1|0){h=0;break}h=Fg(k,1)|0;break}else{h=c[k+12>>2]|0;if(!(j&16384))break;h=(c[k>>2]|0)+h|0;break}}while(0);a:do if((f|0)!=1){j=c[g+4>>2]|0;if(!j)return;k=b[j+8>>1]|0;if((k&514)==514?(a[j+10>>0]|0)==1:0)p=c[j+16>>2]|0;else q=21;do if((q|0)==21)if(!(k&1)){p=Gg(j,1)|0;break}else return;while(0);if(!p)return;k=a[p>>0]|0;if(k<<24>>24){j=p;l=0;do{f=j+1|0;if((k&255)>191){j=f;while(1){k=a[j>>0]|0;if((k&-64)<<24>>24==-128)j=j+1|0;else break}}else{j=f;k=a[f>>0]|0}l=l+1|0}while(k<<24>>24!=0);f=Yv(l|0,0,5,0)|0;j=L()|0;k=c[e>>2]|0;o=c[(c[k+32>>2]|0)+108>>2]|0;n=((o|0)<0)<<31>>31;if((j|0)>(n|0)|(j|0)==(n|0)&f>>>0>o>>>0){c[e+20>>2]=18;yc(k,31223,-1,1,0)|0;return}o=Sv(f|0,j|0,-1,-1)|0;n=L()|0;do if(!(n>>>0>0|(n|0)==0&o>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](f)|0;if(!j)break}else{g=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){o=c[14978]|0;n=Tv(j|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}j=Wa[c[29340>>2]&127](g)|0;if(!j)break;k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}m=j+(l<<2)|0;if(!(a[p>>0]|0))break a;g=0;k=p;while(1){c[j+(g<<2)>>2]=k;f=k+1|0;l=k;if((d[k>>0]|0)>191){k=f;while(1)if((a[k>>0]&-64)<<24>>24==-128)k=k+1|0;else break}else k=f;a[m+g>>0]=k-l;f=g+1|0;if(!(a[k>>0]|0)){o=j;n=j;q=60;break a}else g=f}}while(0);h=c[e>>2]|0;i=h+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(h);h=c[e>>2]|0}c[e+20>>2]=7;h=c[h+32>>2]|0;i=h+81|0;if(a[i>>0]|0)return;if(a[h+82>>0]|0)return;a[i>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;e=h+272|0;c[e>>2]=(c[e>>2]|0)+1;h=c[h+236>>2]|0;if(!h)return;c[h+12>>2]=7;return}}else{p=0;o=30304;m=49513;f=1;n=30304;q=60}while(0);do if((q|0)==60){l=c[(c[e+4>>2]|0)+8>>2]|0;b:do if((l&1|0)!=0&(h|0)>0)do{j=0;while(1){k=a[m+j>>0]|0;g=k&255;if((h|0)>=(g|0)?(Lu(i,c[o+(j<<2)>>2]|0,g)|0)==0:0)break;j=j+1|0;if(j>>>0>=f>>>0){q=67;break b}}g=k&255;i=i+g|0;h=h-g|0}while((h|0)>0);else q=67;while(0);c:do if((q|0)==67)if((l&2|0)!=0&(h|0)>0)while(1){j=0;while(1){k=d[m+j>>0]|0;if((h|0)>=(k|0)?(r=h-k|0,(Lu(i+r|0,c[o+(j<<2)>>2]|0,k)|0)==0):0)break;j=j+1|0;if(j>>>0>=f>>>0)break c}if((r|0)>0)h=r;else{h=r;break}}while(0);if(!((n|0)==0|(p|0)==0))if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{r=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if((yc(c[e>>2]|0,i,h,1,-1)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}function un(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=((c[(c[a+4>>2]|0)+8>>2]|0)!=0)<<31>>31;i=c[(c[(c[a+12>>2]|0)+104>>2]|0)+(((c[a+16>>2]|0)+-1|0)*20|0)+16>>2]|0;f=c[e>>2]|0;if(-1431655766>>>(b[f+8>>1]&31)&1|0)return;do if((d|0)>1){h=0;f=1;while(1){g=c[e+(f<<2)>>2]|0;if(-1431655766>>>(b[g+8>>1]&31)&1|0){g=8;break}g=((Tg(c[e+(h<<2)>>2]|0,g,i)|0)^j|0)>-1;h=g?f:h;f=f+1|0;if((f|0)>=(d|0)){g=6;break}}if((g|0)==6){f=c[e+(h<<2)>>2]|0;break}else if((g|0)==8)return}while(0);Dc(a,f);return}function vn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=c[f>>2]|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))i=Ic(d,40)|0;else i=c[e+16>>2]|0;if(!i)return;h=g+8|0;j=i+8|0;e=(b[j>>1]|0)!=0;if(-1431655766>>>(b[h>>1]&31)&1|0){if(!e)return;c[d+20>>2]=-1;a[d+24>>0]=1;return}if(!e){c[i+32>>2]=c[(c[d>>2]|0)+32>>2];c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=49;do if((k|0)==49)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}e=(c[(c[d+4>>2]|0)+8>>2]|0)!=0;f=Tg(i,g,c[(c[(c[d+12>>2]|0)+104>>2]|0)+(((c[d+16>>2]|0)+-1|0)*20|0)+16>>2]|0)|0;if(e&(f|0)<0){if(b[j>>1]&9216)Dg(i);c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=22;do if((k|0)==22)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}if(!((f|0)>0&(e^1))){c[d+20>>2]=-1;a[d+24>>0]=1;return}if(b[j>>1]&9216)Dg(i);c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=36;do if((k|0)==36)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}function wn(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+8|0;if(!((b[e>>1]|0)!=0?(Dc(a,d),(b[e>>1]&9216)!=0):0))f=7;if((f|0)==7?(c[d+24>>2]|0)==0:0)return;Cg(d);return}function xn(a){a=a|0;var d=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;if(!(b[d+8>>1]|0))return;Dc(a,d);return}function yn(a,e,f){a=a|0;e=e|0;f=f|0;if((yc(c[a>>2]|0,c[21712+((d[816+(b[(c[f>>2]|0)+8>>1]&31)>>0]|0)+-1<<2)>>2]|0,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function zn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[f>>2]|0;e=b[g+8>>1]|0;switch(a[816+(e&31)>>0]|0){case 2:case 1:case 4:{if((e&2)!=0?(a[g+10>>0]|0)==1:0)f=c[g+12>>2]|0;else i=5;do if((i|0)==5){e=e&65535;if(!(e&16)){if(e&1|0){f=0;break}f=Fg(g,1)|0;break}else{f=c[g+12>>2]|0;if(!(e&16384))break;f=(c[g>>2]|0)+f|0;break}}while(0);e=c[d>>2]|0;g=((f|0)<0)<<31>>31;h=e+8|0;if(!(b[h>>1]&9216)){d=e;c[d>>2]=f;c[d+4>>2]=g;b[h>>1]=4;return}else{Pg(e,f,g);return}}case 3:{if(!g)return;if((e&514)==514?(a[g+10>>0]|0)==1:0)h=c[g+16>>2]|0;else i=17;do if((i|0)==17)if(!(e&1)){h=Gg(g,1)|0;break}else return;while(0);if(!h)return;g=a[h>>0]|0;if(!(g<<24>>24)){f=h;e=h}else{e=h;f=h;do{f=f+1|0;h=a[f>>0]|0;if((g&255)>191&(h&-64)<<24>>24==-128)do{f=f+1|0;e=e+1|0;g=a[f>>0]|0}while((g&-64)<<24>>24==-128);else g=h}while(g<<24>>24!=0)}h=f-e|0;e=c[d>>2]|0;f=((h|0)<0)<<31>>31;g=e+8|0;if(!(b[g>>1]&9216)){d=e;c[d>>2]=h;c[d+4>>2]=f;b[g>>1]=4;return}else{Pg(e,h,f);return}}default:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;return}else{Dg(e);return}}}}function An(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=c[f>>2]|0;e=b[g+8>>1]|0;m=e&31;n=f+4|0;i=c[n>>2]|0;j=b[i+8>>1]|0;l=j&31;if((-1431655766>>>l|-1431655766>>>m)&1|0)return;if((e&2)!=0?(a[g+10>>0]|0)==1:0){h=c[g+12>>2]|0;e=j}else k=5;do if((k|0)==5){e=e&65535;if(!(e&16)){if(e&1|0){h=0;e=j;break}h=Fg(g,1)|0;i=c[n>>2]|0;e=b[i+8>>1]|0;break}else{h=c[g+12>>2]|0;if(!(e&16384)){e=j;break}h=(c[g>>2]|0)+h|0;e=j;break}}while(0);if((e&2)!=0?(a[i+10>>0]|0)==1:0){o=c[i+12>>2]|0;k=18}else k=13;do if((k|0)==13){g=e&65535;if(!(g&16)){if(g&1|0){e=1;i=0;break}o=Fg(i,1)|0;k=18;break}else{e=c[i+12>>2]|0;if(!(g&16384)){o=e;k=18;break}o=(c[i>>2]|0)+e|0;k=18;break}}while(0);a:do if((k|0)==18)if((o|0)>0){g=c[f>>2]|0;do if(!((m|16|0)==16&(l|16|0)==16)){do if(g){e=b[g+8>>1]|0;if((e&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(e&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);i=c[n>>2]|0;if(!i)return;e=b[i+8>>1]|0;if((e&514)==514?(a[i+10>>0]|0)==1:0){e=1;k=c[i+16>>2]|0;break}if(!(e&1)){e=1;k=Gg(i,1)|0;break}else return}else{g=mc(g)|0;e=0;k=mc(c[n>>2]|0)|0}while(0);if(!k)return;if((h|0)!=0&(g|0)==0)return;l=a[k>>0]|0;if((o|0)>(h|0)){e=0;i=0}else{b:do if(!e){e=1;while(1){if((a[g>>0]|0)==l<<24>>24?(Lu(g,k,o)|0)==0:0)break b;if((o|0)<(h|0)){e=e+1|0;h=h+-1|0;g=g+1|0}else{e=0;i=0;break a}}}else{e=1;j=g;g=a[g>>0]|0;while(1){if(g<<24>>24==l<<24>>24?(Lu(j,k,o)|0)==0:0)break b;while(1){i=h+-1|0;j=j+1|0;g=a[j>>0]|0;if((g&-64)<<24>>24!=-128)break;else h=i}if((o|0)<(h|0)){e=e+1|0;h=i}else{e=0;i=0;break a}}}while(0);i=0}}else{e=1;i=0}while(0);g=c[d>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){d=g;c[d>>2]=e;c[d+4>>2]=i;b[h>>1]=4;return}else{Pg(g,e,i);return}}function Bn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;l=n;k=n+32|0;m=n+8|0;j=c[(c[d>>2]|0)+32>>2]|0;if((e|0)<=0){Ra=n;return}h=c[f>>2]|0;if(!h){Ra=n;return}g=b[h+8>>1]|0;if((g&514)==514?(a[h+10>>0]|0)==1:0)g=c[h+16>>2]|0;else i=6;do if((i|0)==6)if(!(g&1)){g=Gg(h,1)|0;break}else{Ra=n;return}while(0);if(!g){Ra=n;return}c[k>>2]=e+-1;c[k+4>>2]=0;c[k+8>>2]=f+4;h=c[j+108>>2]|0;i=m+4|0;c[i>>2]=0;c[m>>2]=j;c[m+8>>2]=0;e=m+12|0;c[e>>2]=h;h=m+16|0;c[h>>2]=0;a[m+20>>0]=0;f=m+21|0;a[f>>0]=2;c[l>>2]=k;Eb(m,g,l);h=c[h>>2]|0;g=c[i>>2]|0;if(((g|0)!=0?(a[g+h>>0]=0,(c[e>>2]|0)!=0):0)?(a[f>>0]&4)==0:0)g=$d(m)|0;else g=c[i>>2]|0;if((yc(c[d>>2]|0,g,h,1,116)|0)!=18){Ra=n;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=n;return}function Cn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0;f=c[g>>2]|0;if(!f)return;g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)f=c[f+16>>2]|0;else h=5;do if((h|0)==5)if(!(g&1)){f=Gg(f,1)|0;break}else return;while(0);if(!f)return;g=a[f>>0]|0;if(!(g<<24>>24))return;h=f+1|0;f=g&255;if((g&255)>191){f=d[2736+(f+-192)>>0]|0;g=a[h>>0]|0;if((g&-64)<<24>>24==-128)do{h=h+1|0;f=f<<6|g&63;g=a[h>>0]|0}while((g&-64)<<24>>24==-128);f=(f&-2|0)==65534|(f>>>0<128|(f&-2048|0)==55296)?65533:f}g=c[e>>2]|0;h=((f|0)<0)<<31>>31;e=g+8|0;if(!(b[e>>1]&9216)){c[g>>2]=f;c[g+4>>2]=h;b[e>>1]=4;return}else{Pg(g,f,h);return}}function Dn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=f<<2|1;q=pb(q,((q|0)<0)<<31>>31)|0;if(!q){i=c[d>>2]|0;j=i+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(i);i=c[d>>2]|0}c[d+20>>2]=7;i=c[i+32>>2]|0;j=i+81|0;if(a[j>>0]|0)return;if(a[i+82>>0]|0)return;a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;d=i+272|0;c[d>>2]=(c[d>>2]|0)+1;i=c[i+236>>2]|0;if(!i)return;c[i+12>>2]=7;return}if((f|0)>0){o=0;i=q;do{j=c[h+(o<<2)>>2]|0;k=e[j+8>>1]|0;do if(!(k&4)){if(k&8|0){k=Mg(+g[j>>3])|0;j=L()|0;p=19;break}if(!(k&18)){n=i;m=1;j=0}else{k=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;j=L()|0;p=19}}else{k=j;j=c[k+4>>2]|0;k=c[k>>2]|0;p=19}while(0);do if((p|0)==19){p=0;l=k&2097151;if(!(j>>>0>0|(j|0)==0&k>>>0>1114111)){if(l>>>0<128){n=i;m=1;j=l;break}if(l>>>0<2048){a[i>>0]=k>>>6&31|192;n=i+1|0;m=2;j=k&63|128;break}if(l>>>0<65536)j=l;else{a[i>>0]=l>>>18|240;a[i+1>>0]=k>>>12&63|128;a[i+2>>0]=k>>>6&63|128;n=i+3|0;m=4;j=k&63|128;break}}else j=65533;a[i>>0]=j>>>12&15|224;a[i+1>>0]=j>>>6&63|128;n=i+2|0;m=3;j=j&63|128}while(0);i=i+m|0;a[n>>0]=j;o=o+1|0}while((o|0)!=(f|0))}else i=q;i=i-q|0;if((i|0)>=0){if((yc(c[d>>2]|0,q,i,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}do if(90!=-1)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{p=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}function En(d,e,f){d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;i=l+8|0;j=l;f=c[f>>2]|0;e=b[f+8>>1]|0;switch(a[816+(e&31)>>0]|0){case 1:{e=e&65535;do if(!(e&4)){if(e&8|0){e=Mg(+g[f>>3])|0;f=L()|0;k=8;break}if(!(e&18)){e=0;j=0}else{e=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;k=8}}else{e=f;f=c[e+4>>2]|0;e=c[e>>2]|0;k=8}while(0);do if((k|0)==8)if((f|0)<0){if(!((e|0)==0&(f|0)==-2147483648)){e=Tv(0,0,e|0,f|0)|0;j=L()|0;break}c[d+20>>2]=1;yc(c[d>>2]|0,49524,-1,1,-1)|0;Ra=l;return}else j=f;while(0);f=c[d>>2]|0;i=f+8|0;if(!(b[i>>1]&9216)){d=f;c[d>>2]=e;c[d+4>>2]=j;b[i>>1]=4;Ra=l;return}else{Pg(f,e,j);Ra=l;return}}case 5:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;Ra=l;return}else{Dg(e);Ra=l;return}}default:{e=e&65535;do if(!(e&8)){if(e&4|0){k=f;h=+((c[k>>2]|0)>>>0)+4294967296.0*+(c[k+4>>2]|0);break}if(!(e&18))h=0.0;else h=+Kg(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)}else h=+g[f>>3];while(0);h=h<0.0?-h:h;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(e);g[i>>3]=h;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){Ra=l;return}g[e>>3]=h;b[f>>1]=8;Ra=l;return}}}function Fn(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;j=n+24|0;l=n+16|0;m=n+8|0;k=n;a:do if((e|0)==2){h=c[f+4>>2]|0;e=b[h+8>>1]|0;if(-1431655766>>>(e&31)&1|0){Ra=n;return}e=e&65535;do if(!(e&4)){if(e&8|0){e=Mg(+g[h>>3])|0;L()|0;break}if(!(e&18)){e=0;break a}e=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}else e=c[h>>2]|0;while(0);if((e|0)<30){if((e|0)<=0){e=0;break}}else e=30}else e=0;while(0);f=c[f>>2]|0;h=b[f+8>>1]|0;if(-1431655766>>>(h&31)&1|0){Ra=n;return}h=h&65535;do if(!(h&8)){if(h&4|0){i=+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0);break}if(!(h&18))i=0.0;else i=+Kg(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)}else i=+g[f>>3];while(0);g[k>>3]=i;h=(e|0)==0;do if(i<9223372036854775808.0&(h&i>=0.0)){i=i+.5;i=+(~~i>>>0>>>0)+4294967296.0*+((+t(i)>=1.0?(i>0.0?~~+H(+s(i/4294967296.0),4294967295.0)>>>0:~~+F((i-+(~~i>>>0))/4294967296.0)>>>0):0)|0);g[k>>3]=i}else{if(i>-9223372036854775808.0&(h&i<0.0)){i=.5-i;i=-(+(~~i>>>0>>>0)+4294967296.0*+((+t(i)>=1.0?(i>0.0?~~+H(+s(i/4294967296.0),4294967295.0)>>>0:~~+F((i-+(~~i>>>0))/4294967296.0)>>>0):0)|0));g[k>>3]=i;break}c[j>>2]=e;g[j+8>>3]=i;e=Bb(49541,j)|0;if(e|0){Lg(e,k,(Eu(e)|0)&1073741823,1)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}e=c[d>>2]|0;h=e+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;h=e+81|0;if(a[h>>0]|0){Ra=n;return}if(a[e+82>>0]|0){Ra=n;return}a[h>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e){Ra=n;return}c[e+12>>2]=7;Ra=n;return}while(0);i=+g[k>>3];e=c[d>>2]|0;h=e+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else Dg(e);g[l>>3]=i;g[m>>3]=+g[l>>3];if(!(+g[l>>3]==+g[m>>3])){Ra=n;return}g[e>>3]=i;b[h>>1]=8;Ra=n;return}function Gn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=c[f>>2]|0;e=b[g+8>>1]|0;if((e&514)==514?(a[g+10>>0]|0)==1:0){j=c[g+16>>2]|0;f=g}else if(!(e&1)){j=Gg(g,1)|0;f=c[f>>2]|0}else{j=0;f=g}e=b[f+8>>1]|0;if((e&2)!=0?(a[f+10>>0]|0)==1:0)i=c[f+12>>2]|0;else h=9;do if((h|0)==9){e=e&65535;if(!(e&16)){if(e&1|0){i=0;break}i=Fg(f,1)|0;break}else{g=c[f+12>>2]|0;if(!(e&16384)){i=g;break}i=(c[f>>2]|0)+g|0;break}}while(0);if(!j)return;g=Sv(i|0,((i|0)<0)<<31>>31|0,1,0)|0;L()|0;e=c[d>>2]|0;if((i|0)>=(c[(c[e+32>>2]|0)+108>>2]|0)){c[d+20>>2]=18;yc(e,31223,-1,1,0)|0;return}do if(i>>>0<=2147483390){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](g)|0;if(!e)break}else{f=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<g>>>0)c[14985]=g;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){h=c[14978]|0;g=Tv(e|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&g>>>0<=h>>>0)&1}e=Wa[c[29340>>2]&127](f)|0;if(!e)break;g=Wa[c[29352>>2]&127](e)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}if((i|0)>0){g=0;do{h=a[j+g>>0]|0;a[e+g>>0]=h&~(a[880+(h&255)>>0]&32);g=g+1|0}while((g|0)!=(i|0))}if((yc(c[d>>2]|0,e,i,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;if(a[g>>0]|0)return;if(a[e+82>>0]|0)return;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Hn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=c[g>>2]|0;f=b[h+8>>1]|0;if((f&514)==514?(a[h+10>>0]|0)==1:0){k=c[h+16>>2]|0;g=h}else if(!(f&1)){k=Gg(h,1)|0;g=c[g>>2]|0}else{k=0;g=h}f=b[g+8>>1]|0;if((f&2)!=0?(a[g+10>>0]|0)==1:0)j=c[g+12>>2]|0;else i=9;do if((i|0)==9){f=f&65535;if(!(f&16)){if(f&1|0){j=0;break}j=Fg(g,1)|0;break}else{h=c[g+12>>2]|0;if(!(f&16384)){j=h;break}j=(c[g>>2]|0)+h|0;break}}while(0);if(!k)return;h=Sv(j|0,((j|0)<0)<<31>>31|0,1,0)|0;L()|0;f=c[e>>2]|0;if((j|0)>=(c[(c[f+32>>2]|0)+108>>2]|0)){c[e+20>>2]=18;yc(f,31223,-1,1,0)|0;return}do if(j>>>0<=2147483390){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;if(!f)break}else{g=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;h=59064;f=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&f>>>0>0){i=c[14978]|0;h=Tv(f|0,h|0,g|0,((g|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}f=Wa[c[29340>>2]&127](g)|0;if(!f)break;h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}if((j|0)>0){h=0;do{a[f+h>>0]=a[208+(d[k+h>>0]|0)>>0]|0;h=h+1|0}while((h|0)!=(j|0))}if((yc(c[e>>2]|0,f,j,1,90)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[e>>2]|0;h=f+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;h=f+81|0;if(a[h>>0]|0)return;if(a[f+82>>0]|0)return;a[h>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function In(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=mc(c[g>>2]|0)|0;h=c[g>>2]|0;f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)g=c[h+12>>2]|0;else i=4;do if((i|0)==4){f=f&65535;if(!(f&16)){if(f&1|0){g=0;break}g=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(f&16384))break;g=(c[h>>2]|0)+g|0;break}}while(0);i=cw(g|0,((g|0)<0)<<31>>31|0,1)|0;f=L()|0;i=i|1;h=c[e>>2]|0;k=c[(c[h+32>>2]|0)+108>>2]|0;j=((k|0)<0)<<31>>31;if((f|0)>(j|0)|(f|0)==(j|0)&i>>>0>k>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;return}k=Sv(i|0,f|0,-1,-1)|0;j=L()|0;do if(!(j>>>0>0|(j|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f)break;else h=f}else{j=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;f=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&f>>>0>0){k=c[14978]|0;i=Tv(f|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=k>>>0)&1}h=Wa[c[29340>>2]&127](j)|0;if(!h)break;f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}k=g<<1;if((g|0)>0){j=h;f=l;i=0;while(1){l=d[f>>0]|0;a[j>>0]=a[21744+(l>>>4)>>0]|0;a[j+1>>0]=a[21744+(l&15)>>0]|0;i=i+1|0;if((i|0)==(g|0))break;else{j=j+2|0;f=f+1|0}}f=h+k|0}else f=h;a[f>>0]=0;if((yc(c[e>>2]|0,h,k,1,90)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[e>>2]|0;g=f+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;g=f+81|0;if(a[g>>0]|0)return;if(a[f+82>>0]|0)return;a[g>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function Jn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;d=h;Fb(8,d);f=d;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)<0){g=Tv(0,0,e|0,f&2147483647|0)|0;f=L()|0;e=d;c[e>>2]=g;c[e+4>>2]=f}else g=e;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=g;c[a+4>>2]=f;b[e>>1]=4;Ra=h;return}else{Pg(d,g,f);Ra=h;return}}function Kn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){h=Mg(+g[f>>3])|0;f=L()|0;j=7;break}if(!(h&18)){i=0;f=1}else{h=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;j=7}}else{h=f;f=c[h+4>>2]|0;h=c[h>>2]|0;j=7}while(0);if((j|0)==7){j=(f|0)>0|(f|0)==0&h>>>0>1;i=j?f:0;f=j?h:1}h=c[d>>2]|0;j=c[(c[h+32>>2]|0)+108>>2]|0;k=((j|0)<0)<<31>>31;if((i|0)>(k|0)|(i|0)==(k|0)&f>>>0>j>>>0){c[d+20>>2]=18;yc(h,31223,-1,1,0)|0;return}k=Sv(f|0,i|0,-1,-1)|0;j=L()|0;do if(!(j>>>0>0|(j|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;if(!h)break}else{h=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){k=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=k>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h)break;i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}Fb(f,h);if((yc(c[d>>2]|0,h,f,0,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[d>>2]|0;h=f+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(f);f=c[d>>2]|0}c[d+20>>2]=7;f=c[f+32>>2]|0;h=f+81|0;if(a[h>>0]|0)return;if(a[f+82>>0]|0)return;a[h>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;k=f+272|0;c[k>>2]=(c[k>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function Ln(a,b,d){a=a|0;b=b|0;d=d|0;if(!(Tg(c[d>>2]|0,c[d+4>>2]|0,c[(c[(c[a+12>>2]|0)+104>>2]|0)+(((c[a+16>>2]|0)+-1|0)*20|0)+16>>2]|0)|0))return;Dc(a,c[d>>2]|0);return}function Mn(a,b,d){a=a|0;b=b|0;d=d|0;if((yc(c[a>>2]|0,31497,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function Nn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;j=k;d=c[h>>2]|0;f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){i=Mg(+g[d>>3])|0;L()|0;break}if(!(f&18))i=0;else{i=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0}}else i=c[d>>2]|0;while(0);d=c[h+4>>2]|0;do if(d){f=b[d+8>>1]|0;if((f&514)==514?(a[d+10>>0]|0)==1:0){d=c[d+16>>2]|0;break}if(!(f&1))d=Gg(d,1)|0;else d=0}else d=0;while(0);c[j>>2]=d;Db(i,31408,j);Ra=k;return}function On(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+80|0;n=q+72|0;m=q+64|0;k=q+56|0;l=q;i=c[h>>2]|0;f=b[i+8>>1]|0;switch(a[816+(f&31)>>0]|0){case 2:{f=f&65535;do if(!(f&8)){if(f&4|0){p=i;j=+((c[p>>2]|0)>>>0)+4294967296.0*+(c[p+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else j=+g[i>>3];while(0);g[m>>3]=j;Cb(50,l,32529,m)|0;Lg(l,k,20,1)|0;if(j!=+g[k>>3]){g[n>>3]=j;Cb(50,l,49546,n)|0}if((yc(c[e>>2]|0,l,-1,1,-1)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}Ra=q;return}case 1:{Dc(e,i);Ra=q;return}case 4:{m=mc(i)|0;h=c[h>>2]|0;f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)l=c[h+12>>2]|0;else o=17;do if((o|0)==17){f=f&65535;if(!(f&16)){if(f&1|0){l=0;break}l=Fg(h,1)|0;break}else{i=c[h+12>>2]|0;if(!(f&16384)){l=i;break}l=(c[h>>2]|0)+i|0;break}}while(0);f=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;i=L()|0;k=Sv(f|0,i|0,4,0)|0;n=L()|0;h=c[e>>2]|0;p=c[(c[h+32>>2]|0)+108>>2]|0;o=((p|0)<0)<<31>>31;if((n|0)>(o|0)|(n|0)==(o|0)&k>>>0>p>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;Ra=q;return}p=Sv(f|0,i|0,3,0)|0;o=L()|0;do if(!(o>>>0>0|(o|0)==0&p>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){p=c[14978]|0;o=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=p>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(!f)break;i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}if((l|0)>0){i=0;do{o=m+i|0;p=i<<1;a[f+(p+2)>>0]=a[21744+((d[o>>0]|0)>>>4)>>0]|0;a[f+(p+3)>>0]=a[21744+(a[o>>0]&15)>>0]|0;i=i+1|0}while((i|0)!=(l|0))}p=l<<1;a[f+(p+2)>>0]=39;a[f+(p+3)>>0]=0;a[f>>0]=88;a[f+1>>0]=39;if((yc(c[e>>2]|0,f,-1,1,-1)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=q;return}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=q;return}}while(0);f=c[e>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0){Ra=q;return}if(a[f+82>>0]|0){Ra=q;return}a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f){Ra=q;return}c[f+12>>2]=7;Ra=q;return}case 3:{if(!i){Ra=q;return}if((f&514)==514?(a[i+10>>0]|0)==1:0)p=c[i+16>>2]|0;else o=57;do if((o|0)==57)if(!(f&1)){p=Gg(i,1)|0;break}else{Ra=q;return}while(0);if(!p){Ra=q;return}h=0;f=0;i=0;a:while(1){switch(a[p+h>>0]|0){case 0:break a;case 39:{f=Sv(f|0,i|0,1,0)|0;i=L()|0;break}default:{}}h=h+1|0}f=Sv(f|0,i|0,h|0,0)|0;i=L()|0;k=Sv(f|0,i|0,3,0)|0;m=L()|0;h=c[e>>2]|0;o=c[(c[h+32>>2]|0)+108>>2]|0;n=((o|0)<0)<<31>>31;if((m|0)>(n|0)|(m|0)==(n|0)&k>>>0>o>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;Ra=q;return}o=Sv(f|0,i|0,2,0)|0;n=L()|0;do if(!(n>>>0>0|(n|0)==0&o>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){o=c[14978]|0;n=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(!f)break;i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}a[f>>0]=39;i=a[p>>0]|0;h=f+1|0;if(!(i<<24>>24))i=2;else{k=1;n=0;m=i;l=p;i=2;do{a[h>>0]=m;if((a[l>>0]|0)==39){a[f+i>>0]=39;k=k+2|0}else k=i;n=n+1|0;l=p+n|0;m=a[l>>0]|0;i=k+1|0;h=f+k|0}while(m<<24>>24!=0)}a[h>>0]=39;a[f+i>>0]=0;if((yc(c[e>>2]|0,f,i,1,90)|0)!=18){Ra=q;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=q;return}while(0);f=c[e>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0){Ra=q;return}if(a[f+82>>0]|0){Ra=q;return}a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f){Ra=q;return}c[f+12>>2]=7;Ra=q;return}default:{if((yc(c[e>>2]|0,31171,4,1,0)|0)!=18){Ra=q;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=q;return}}}function Pn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;e=c[a>>2]|0;a=(c[e+32>>2]|0)+40|0;f=c[a>>2]|0;a=c[a+4>>2]|0;d=e+8|0;if(!(b[d>>1]&9216)){c[e>>2]=f;c[e+4>>2]=a;b[d>>1]=4;return}else{Pg(e,f,a);return}}function Qn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a>>2]|0;e=c[(c[d+32>>2]|0)+100>>2]|0;f=((e|0)<0)<<31>>31;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function Rn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a>>2]|0;e=c[(c[d+32>>2]|0)+104>>2]|0;f=((e|0)<0)<<31>>31;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function Sn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;i=c[(c[d>>2]|0)+32>>2]|0;e=c[f>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)A=c[e+16>>2]|0;else B=5;do if((B|0)==5)if(!(g&1)){A=Gg(e,1)|0;break}else return;while(0);if(!A)return;h=c[f>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)z=c[h+12>>2]|0;else B=11;do if((B|0)==11){e=e&65535;if(!(e&16)){if(e&1|0){z=0;break}z=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){z=g;break}z=(c[h>>2]|0)+g|0;break}}while(0);h=f+4|0;e=c[h>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)y=c[e+16>>2]|0;else B=20;do if((B|0)==20)if(!(g&1)){y=Gg(e,1)|0;break}else return;while(0);if(!y)return;if(!(a[y>>0]|0)){Dc(d,c[f>>2]|0);return}h=c[h>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)x=c[h+12>>2]|0;else B=28;do if((B|0)==28){e=e&65535;if(!(e&16)){if(e&1|0){x=0;break}x=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){x=g;break}x=(c[h>>2]|0)+g|0;break}}while(0);h=f+8|0;e=c[h>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)w=c[e+16>>2]|0;else B=37;do if((B|0)==37)if(!(g&1)){w=Gg(e,1)|0;break}else return;while(0);if(!w)return;h=c[h>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)v=c[h+12>>2]|0;else B=43;do if((B|0)==43){e=e&65535;if(!(e&16)){if(e&1|0){v=0;break}v=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){v=g;break}v=(c[h>>2]|0)+g|0;break}}while(0);k=z+1|0;j=((k|0)<0)<<31>>31;e=c[d>>2]|0;if((c[(c[e+32>>2]|0)+108>>2]|0)<=(z|0)){c[d+20>>2]=18;yc(e,31223,-1,1,0)|0;return}u=Sv(k|0,j|0,-1,-1)|0;t=L()|0;a:do if(!(t>>>0>0|(t|0)==0&u>>>0>2147483390)){do if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h)break a}else{e=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){u=c[14978]|0;t=Tv(g|0,h|0,e|0,((e|0)<0)<<31>>31|0)|0;s=L()|0;c[14768]=((s|0)<0|(s|0)==0&t>>>0<=u>>>0)&1}h=Wa[c[29340>>2]&127](e)|0;if(!h)break a;e=Wa[c[29352>>2]&127](h)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0)break;c[14987]=e}while(0);u=z-x|0;b:do if((u|0)>=0){r=v-x|0;s=((r|0)<0)<<31>>31;o=i+108|0;t=x+-1|0;p=~z;q=((p|0)<0)<<31>>31;if((v|0)<=(x|0)){g=0;e=0;while(1){f=A+e|0;i=a[f>>0]|0;do if(i<<24>>24==(a[y>>0]|0)){if(Lu(f,y,x)|0){B=86;break}ew(h+g|0,w|0,v|0)|0;g=g+v|0;f=t+e|0}else B=86;while(0);if((B|0)==86){B=0;a[h+g>>0]=i;g=g+1|0;f=e}e=f+1|0;if((f|0)>=(u|0))break b}}n=0;g=0;e=0;c:while(1){f=A+e|0;i=a[f>>0]|0;do if(i<<24>>24==(a[y>>0]|0)){if(Lu(f,y,x)|0){B=77;break}j=Sv(k|0,j|0,r|0,s|0)|0;l=L()|0;k=Sv(j|0,l|0,-1,-1)|0;f=L()|0;m=c[o>>2]|0;i=((m|0)<0)<<31>>31;if((f|0)>(i|0)|(f|0)==(i|0)&k>>>0>m>>>0){B=87;break c}i=n+1|0;if(!(i&n)){if(mb()|0)break c;n=aw(0,j|0,32)|0;f=L()|0;m=Sv(j|0,l|0,p|0,q|0)|0;f=Sv(m|0,L()|0,n|0,f|0)|0;f=sb(h,f,L()|0)|0;if(!f)break c;else h=f}ew(h+g|0,w|0,v|0)|0;g=g+v|0;m=t+e|0;f=i;k=j;i=l}else B=77;while(0);if((B|0)==77){B=0;a[h+g>>0]=i;g=g+1|0;m=e;f=n;i=j}e=m+1|0;if((m|0)<(u|0)){n=f;j=i}else break b}if((B|0)==87){c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;if(!h)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;do if(!(a[g>>0]|0)){if(a[e+82>>0]|0)break;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)break;c[e+12>>2]=7}while(0);if(!h)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}else{g=0;e=0}while(0);B=z-e|0;ew(h+g|0,A+e|0,B|0)|0;B=g+B|0;a[h+B>>0]=0;if((yc(c[d>>2]|0,h,B,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;if(a[g>>0]|0)return;if(a[e+82>>0]|0)return;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Tn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){h=Mg(+g[f>>3])|0;f=L()|0;j=7;break}if(!(h&18)){f=0;i=0}else{h=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;j=7}}else{h=f;f=c[h+4>>2]|0;h=c[h>>2]|0;j=7}while(0);if((j|0)==7){i=(f|0)>0|(f|0)==0&h>>>0>0;f=i?f:0;i=i?h:0}h=c[d>>2]|0;j=c[(c[h+32>>2]|0)+108>>2]|0;k=((j|0)<0)<<31>>31;if(f>>>0>k>>>0|(f|0)==(k|0)&i>>>0>j>>>0){c[d+20>>2]=18;if(!(b[h+8>>1]&1))return;yc(h,31223,-1,1,0)|0;return}f=h+8|0;if(!((b[f>>1]&9216)==0?!(c[h+24>>2]|0):0))Cg(h);b[f>>1]=16400;c[h+12>>2]=0;c[h>>2]=(i|0)>0?i:0;a[h+10>>0]=1;c[h+16>>2]=0;return}function Un(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k=c[h+4>>2]|0;i=b[k+8>>1]|0;if(-1431655766>>>(i&31)&1|0)return;n=(f|0)==3;if(n?-1431655766>>>(b[(c[h+8>>2]|0)+8>>1]&31)&1|0:0)return;j=c[h>>2]|0;l=b[j+8>>1]&15;f=i&65535;do if(!(f&4)){if(f&8|0){r=Mg(+g[k>>3])|0;L()|0;break}if(!(f&18))r=0;else{r=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0;j=c[h>>2]|0}}else r=c[k>>2]|0;while(0);q=((r|0)<0)<<31>>31;t=(l|16)<<16>>16==16;if(t){f=b[j+8>>1]|0;if((f&2)!=0?(a[j+10>>0]|0)==1:0){i=c[j+12>>2]|0;f=j}else s=14;do if((s|0)==14){f=f&65535;if(!(f&16)){if(f&1|0){i=0;f=j;break}i=Fg(j,1)|0;f=c[h>>2]|0;break}else{i=c[j+12>>2]|0;if(!(f&16384)){f=j;break}i=(c[j>>2]|0)+i|0;f=j;break}}while(0);f=mc(f)|0;if(!f)return;else{p=f;o=i}}else{if(!j)return;f=b[j+8>>1]|0;if((f&514)==514?(a[j+10>>0]|0)==1:0)l=c[j+16>>2]|0;else s=24;do if((s|0)==24)if(!(f&1)){l=Gg(j,1)|0;break}else return;while(0);if(!l)return;if((r|0)<0?(m=a[l>>0]|0,m<<24>>24!=0):0){k=0;f=l;j=m;while(1){i=f+1|0;if((j&255)>191){f=i;while(1){j=a[f>>0]|0;if((j&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=i;j=a[i>>0]|0}i=k+1|0;if(!(j<<24>>24)){p=l;o=i;break}else k=i}}else{p=l;o=0}}if(n){f=c[h+8>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){f=Mg(+g[f>>3])|0;L()|0;s=42;break}if(!(i&18)){i=0;f=0;j=0}else{f=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0;s=42}}else{f=c[f>>2]|0;s=42}while(0);if((s|0)==42){j=((f|0)<0)<<31>>31;h=(f|0)<0;n=Tv(0,0,f|0,j|0)|0;s=L()|0;i=f;f=h?n:f;j=h?s:j}l=i>>>31;i=j}else{i=c[(c[(c[d>>2]|0)+32>>2]|0)+108>>2]|0;l=0;f=i;i=((i|0)<0)<<31>>31}do if((r|0)>=0)if(!r){j=((i|0)>0|(i|0)==0&f>>>0>0)<<31>>31;f=Sv(f|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;j=0;k=0;i=L()|0;break}else{j=Sv(r|0,q|0,-1,-1)|0;k=L()|0;break}else{j=Sv(o|0,((o|0)<0)<<31>>31|0,r|0,q|0)|0;k=L()|0;q=(k|0)<0;h=Sv(f|0,i|0,j|0,k|0)|0;s=L()|0;r=(s|0)>0|(s|0)==0&h>>>0>0;j=q?0:j;k=q?0:k;f=q?(r?h:0):f;i=q?(r?s:0):i}while(0);r=(l|0)==0;m=Tv(j|0,k|0,f|0,i|0)|0;l=L()|0;s=(l|0)<0;m=r?j:s?0:m;l=r?k:s?0:l;n=r?f:s?j:f;k=r?i:s?k:i;if(t){r=Sv(m|0,l|0,n|0,k|0)|0;t=L()|0;f=((o|0)<0)<<31>>31;r=(t|0)>(f|0)|(t|0)==(f|0)&r>>>0>o>>>0;f=Tv(o|0,f|0,m|0,l|0)|0;t=L()|0;s=(t|0)>0|(t|0)==0&f>>>0>0;f=r?(s?f:0):n;t=r?(s?t:0):k;if(t>>>0>0|(t|0)==0&f>>>0>2147483647){if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}else{if((yc(c[d>>2]|0,p+m|0,f,0,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}i=a[p>>0]|0;if(((m|0)!=0|(l|0)!=0)&i<<24>>24!=0){f=p;do{j=f+1|0;if((i&255)>191){f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=j;i=a[j>>0]|0}m=Sv(m|0,l|0,-1,-1)|0;l=L()|0}while(((m|0)!=0|(l|0)!=0)&i<<24>>24!=0);m=f}else m=p;if(i<<24>>24!=0&((n|0)!=0|(k|0)!=0)){f=m;l=n;do{j=f+1|0;if((i&255)>191){f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=j;i=a[j>>0]|0}l=Sv(l|0,k|0,-1,-1)|0;k=L()|0}while(i<<24>>24!=0&((l|0)!=0|(k|0)!=0))}else f=m;f=f-m|0;if((f|0)<0){if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}else{if((yc(c[d>>2]|0,m,f,1,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}function Vn(f,h,i){f=f|0;h=h|0;i=i|0;var j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=Ra;Ra=Ra+16|0;n=q+8|0;o=q;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))p=Ic(f,32)|0;else p=c[h+16>>2]|0;l=c[i>>2]|0;m=l+8|0;f=b[m>>1]&31;k=d[816+f>>0]|0;if((f|16|0)==18){h=a[l+10>>0]|0;f=l+16|0;k=l+12|0;if(!(Lg(c[f>>2]|0,n,c[k>>2]|0,h)|0))h=b[m>>1]|0;else{if(!(Og(c[f>>2]|0,o,c[k>>2]|0,h)|0)){n=o;o=c[n+4>>2]|0;h=l;c[h>>2]=c[n>>2];c[h+4>>2]=o;h=4}else{g[l>>3]=+g[n>>3];h=8}h=b[m>>1]&-3|h;b[m>>1]=h}k=d[816+(h&31)>>0]|0}if(!((p|0)!=0&(k|0)!=5)){Ra=q;return}h=p+16|0;o=h;o=Sv(c[o>>2]|0,c[o+4>>2]|0,1,0)|0;f=L()|0;c[h>>2]=o;c[h+4>>2]=f;h=c[i>>2]|0;f=e[h+8>>1]|0;if((k|0)!=1){do if(!(f&8)){if(f&4|0){i=h;j=+((c[i>>2]|0)>>>0)+4294967296.0*+(c[i+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else j=+g[h>>3];while(0);g[p>>3]=j+ +g[p>>3];a[p+25>>0]=1;Ra=q;return}do if(!(f&4)){if(f&8|0){m=Mg(+g[h>>3])|0;n=L()|0;break}if(!(f&18)){m=0;n=0}else{m=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;n=L()|0}}else{n=h;m=c[n>>2]|0;n=c[n+4>>2]|0}while(0);g[p>>3]=+g[p>>3]+(+(m>>>0)+4294967296.0*+(n|0));o=p+25|0;i=p+24|0;if((a[i>>0]|a[o>>0])<<24>>24){Ra=q;return}h=p+8|0;k=h;f=c[k>>2]|0;k=c[k+4>>2]|0;if((n|0)>-1|(n|0)==-1&m>>>0>4294967295){p=Tv(-1,2147483647,f|0,k|0)|0;l=L()|0;if(((k|0)>0|(k|0)==0&f>>>0>0)&((l|0)<(n|0)|(l|0)==(n|0)&p>>>0<m>>>0))l=26;else l=25}else if((k|0)<0?(l=Tv(1,-2147483648,f|0,k|0)|0,s=L()|0,p=Sv(m|0,n|0,1,0)|0,r=L()|0,(s|0)>(r|0)|(s|0)==(r|0)&l>>>0>p>>>0):0)l=26;else l=25;if((l|0)==25){p=Sv(f|0,k|0,m|0,n|0)|0;r=L()|0;s=h;c[s>>2]=p;c[s+4>>2]=r;Ra=q;return}else if((l|0)==26){a[i>>0]=1;a[o>>0]=1;Ra=q;return}}function Wn(d){d=d|0;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0;j=Ra;Ra=Ra+16|0;f=j+8|0;h=j;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e){Ra=j;return}k=e+16|0;l=c[k+4>>2]|0;if(!((l|0)>0|(l|0)==0&(c[k>>2]|0)>>>0>0)){Ra=j;return}if(a[e+24>>0]|0){c[d+20>>2]=1;yc(c[d>>2]|0,49524,-1,1,-1)|0;Ra=j;return}if(!(a[e+25>>0]|0)){h=e+8|0;f=c[h>>2]|0;h=c[h+4>>2]|0;e=c[d>>2]|0;d=e+8|0;if(!(b[d>>1]&9216)){l=e;c[l>>2]=f;c[l+4>>2]=h;b[d>>1]=4;Ra=j;return}else{Pg(e,f,h);Ra=j;return}}i=+g[e>>3];e=c[d>>2]|0;d=e+8|0;if(!(b[d>>1]&9216))b[d>>1]=1;else Dg(e);g[f>>3]=i;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=j;return}g[e>>3]=i;b[d>>1]=8;Ra=j;return}function Xn(f,h,i){f=f|0;h=h|0;i=i|0;var j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;n=q+8|0;o=q;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))p=Ic(f,32)|0;else p=c[h+16>>2]|0;l=c[i>>2]|0;m=l+8|0;k=b[m>>1]&31;h=d[816+k>>0]|0;if((k|16|0)==18){h=a[l+10>>0]|0;f=l+16|0;k=l+12|0;if(!(Lg(c[f>>2]|0,n,c[k>>2]|0,h)|0))h=b[m>>1]|0;else{if(!(Og(c[f>>2]|0,o,c[k>>2]|0,h)|0)){n=o;o=c[n+4>>2]|0;h=l;c[h>>2]=c[n>>2];c[h+4>>2]=o;h=4}else{g[l>>3]=+g[n>>3];h=8}h=b[m>>1]&-3|h;b[m>>1]=h}h=d[816+(h&31)>>0]|0}if(!((p|0)!=0&(h|0)!=5)){Ra=q;return}o=p+16|0;m=o;m=Sv(c[m>>2]|0,c[m+4>>2]|0,-1,-1)|0;n=L()|0;c[o>>2]=m;c[o+4>>2]=n;if((h|0)==1?(a[p+25>>0]|0)==0:0){h=c[i>>2]|0;f=e[h+8>>1]|0;do if(!(f&4)){if(f&8|0){h=Mg(+g[h>>3])|0;f=L()|0;break}if(!(f&18)){h=0;f=0}else{h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;f=L()|0}}else{f=h;h=c[f>>2]|0;f=c[f+4>>2]|0}while(0);g[p>>3]=+g[p>>3]-(+(h>>>0)+4294967296.0*+(f|0));p=p+8|0;o=p;o=Tv(c[o>>2]|0,c[o+4>>2]|0,h|0,f|0)|0;i=L()|0;c[p>>2]=o;c[p+4>>2]=i;Ra=q;return}h=c[i>>2]|0;f=e[h+8>>1]|0;do if(!(f&8)){if(f&4|0){i=h;j=+((c[i>>2]|0)>>>0)+4294967296.0*+(c[i+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else j=+g[h>>3];while(0);g[p>>3]=+g[p>>3]-j;Ra=q;return}function Yn(a){a=a|0;var d=0,e=0.0,f=0,h=0,i=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)e=0.0;else e=+g[d>>3];d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216))b[a>>1]=1;else Dg(d);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[d>>3]=e;b[a>>1]=8;Ra=i;return}function Zn(a){a=a|0;var d=0,e=0,f=0,h=0.0,i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;i=k+8|0;j=k;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){Ra=k;return}f=d+16|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if(!((f|0)>0|(f|0)==0&e>>>0>0)){Ra=k;return}h=+g[d>>3]/(+(e>>>0)+4294967296.0*+(f|0));d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[i>>3]=h;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){Ra=k;return}g[d>>3]=h;b[e>>1]=8;Ra=k;return}function _n(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=c[a+8>>2]|0;if(!(b[f+8>>1]&8192))a=Ic(a,8)|0;else a=c[f+16>>2]|0;if(!d){if(!a)return}else if(!(a|0?(1431655765>>>(b[(c[e>>2]|0)+8>>1]&31)&1|0)!=0:0))return;f=a;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;d=L()|0;e=a;c[e>>2]=f;c[e+4>>2]=d;return}function $n(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){e=0;f=0}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function ao(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=c[a+8>>2]|0;if(!(b[f+8>>1]&8192))a=Ic(a,8)|0;else a=c[f+16>>2]|0;if(!d){if(!a)return}else if(!(a|0?(1431655765>>>(b[(c[e>>2]|0)+8>>1]&31)&1|0)!=0:0))return;f=a;f=Sv(c[f>>2]|0,c[f+4>>2]|0,-1,-1)|0;d=L()|0;e=a;c[e>>2]=f;c[e+4>>2]=d;return}function bo(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0)return;g=c[d+8>>2]|0;if(!(b[g+8>>1]&8192))k=Ic(d,24)|0;else k=c[g+16>>2]|0;if(!k)return;h=k+12|0;i=(c[h>>2]|0)==0;c[h>>2]=c[(c[(c[d>>2]|0)+32>>2]|0)+108>>2];do if(!i){if((e|0)==2){d=f+4|0;e=c[d>>2]|0;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)h=c[e+16>>2]|0;else if(!(g&1)){h=Gg(e,1)|0;e=c[d>>2]|0}else h=0;g=b[e+8>>1]|0;if((g&2)!=0?(a[e+10>>0]|0)==1:0)g=c[e+12>>2]|0;else j=16;do if((j|0)==16){d=g&65535;if(!(d&16)){if(d&1|0){g=0;break}g=Fg(e,1)|0;break}else{g=c[e+12>>2]|0;if(!(d&16384))break;g=(c[e>>2]|0)+g|0;break}}while(0);if(!h)break;else d=h}else{g=1;d=41685}e=k+16|0;h=c[e>>2]|0;i=h+g|0;if(i>>>0>=(c[k+8>>2]|0)>>>0){wb(k,d,g);break}if(g|0){c[e>>2]=i;ew((c[k+4>>2]|0)+h|0,d|0,g|0)|0}}while(0);d=c[f>>2]|0;g=b[d+8>>1]|0;if((g&514)==514?(a[d+10>>0]|0)==1:0){i=c[d+16>>2]|0;e=d}else if(!(g&1)){i=Gg(d,1)|0;e=c[f>>2]|0}else{i=0;e=d}g=b[e+8>>1]|0;if((g&2)!=0?(a[e+10>>0]|0)==1:0)d=c[e+12>>2]|0;else j=34;do if((j|0)==34){g=g&65535;if(!(g&16)){if(g&1|0){d=0;break}d=Fg(e,1)|0;break}else{d=c[e+12>>2]|0;if(!(g&16384))break;d=(c[e>>2]|0)+d|0;break}}while(0);if(!i)return;g=k+16|0;e=c[g>>2]|0;h=e+d|0;if(h>>>0>=(c[k+8>>2]|0)>>>0){wb(k,i,d);return}if(!d)return;c[g>>2]=h;ew((c[k+4>>2]|0)+e|0,i|0,d|0)|0;return}function co(d){d=d|0;var e=0,f=0,g=0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e)return;switch(a[e+20>>0]|0){case 18:{c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}case 7:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}default:{f=e+4|0;g=c[f>>2]|0;if(((g|0)!=0?(a[g+(c[e+16>>2]|0)>>0]=0,(c[e+12>>2]|0)!=0):0)?(a[e+21>>0]&4)==0:0)e=$d(e)|0;else e=c[f>>2]|0;if((yc(c[d>>2]|0,e,-1,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}}function eo(d){d=d|0;var e=0,f=0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e)return;switch(a[e+20>>0]|0){case 18:{c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}case 7:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}default:{f=c[e+16>>2]|0;if(!f)e=0;else{e=e+4|0;a[(c[e>>2]|0)+f>>0]=0;e=c[e>>2]|0}if((yc(c[d>>2]|0,e,-1,1,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}}function fo(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0)return;g=c[d+8>>2]|0;if(!(b[g+8>>1]&8192))k=Ic(d,24)|0;else k=c[g+16>>2]|0;if(!k)return;h=c[f>>2]|0;d=b[h+8>>1]|0;if((d&2)!=0?(a[h+10>>0]|0)==1:0)j=c[h+12>>2]|0;else i=9;do if((i|0)==9){d=d&65535;if(!(d&16)){if(d&1|0){j=0;break}j=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(d&16384)){j=g;break}j=(c[h>>2]|0)+g|0;break}}while(0);do if((e|0)==2){h=c[f+4>>2]|0;d=b[h+8>>1]|0;if(d&2?(a[h+10>>0]|0)==1:0){d=c[h+12>>2]|0;break}g=d&65535;if(!(g&16)){if(g&1|0){d=0;break}d=Fg(h,1)|0;break}else{d=c[h+12>>2]|0;if(!(g&16384))break;d=(c[h>>2]|0)+d|0;break}}else d=1;while(0);d=d+j|0;g=k+16|0;h=c[g>>2]|0;if((h|0)>(d|0)){f=h-d|0;c[g>>2]=f;e=c[k+4>>2]|0;fw(e|0,e+d|0,f|0)|0;if(c[g>>2]|0)return}else c[g>>2]=0;c[k+12>>2]=0;return}function go(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=Ra;Ra=Ra+368|0;F=J+16|0;r=J;q=J+356|0;G=J+336|0;H=J+60|0;u=J+32|0;I=c[(c[f>>2]|0)+32>>2]|0;h=c[i>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){B=c[h+16>>2]|0;break}if(!(j&1))B=Gg(h,1)|0;else B=0}else B=0;while(0);h=c[i+12>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){t=c[h+16>>2]|0;break}if(!(j&1))t=Gg(h,1)|0;else t=0}else t=0;while(0);h=c[i+16>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){y=c[h+16>>2]|0;break}if(!(j&1))y=Gg(h,1)|0;else y=0}else y=0;while(0);h=c[i+20>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){x=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))x=0;else{x=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else x=c[h>>2]|0;while(0);h=c[i+24>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){A=c[h+16>>2]|0;break}if(!(j&1))A=Gg(h,1)|0;else A=0}else A=0;while(0);h=c[i+28>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){z=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))z=0;else{z=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else z=c[h>>2]|0;while(0);h=c[i+32>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){l=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))l=0;else{l=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else l=c[h>>2]|0;while(0);C=I+312|0;D=c[C>>2]|0;if((x|0)<0|((B|0)==0|(y|0)==0|(A|0)==0)){Ra=J;return}m=c[I+20>>2]|0;n=(m|0)>0;if(n){j=c[I+16>>2]|0;h=0;do{k=c[j+(h<<4)+4>>2]|0;if(k|0)c[(c[k+4>>2]|0)+4>>2]=c[k>>2];h=h+1|0}while((h|0)!=(m|0))}p=Sd(I,y,t)|0;if(!p){Ra=J;return}if((x|0)>=(b[p+42>>1]|0)){Ra=J;return}w=c[(c[p+4>>2]|0)+(x<<4)>>2]|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;s=G+8|0;c[s>>2]=(x|0)==(b[p+40>>1]|0)?-1:x;c[C>>2]=0;c[q>>2]=0;o=(l|0)==0;if(o){a:do if(t){j=m+-1|0;if(n){h=j;m=(c[I+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){v=a[k>>0]|0;j=(d[208+(v&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(j|0)!=0)){l=t;do{k=k+1|0;l=l+1|0;v=a[k>>0]|0;j=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!h)break;j=h+-1|0;if((h|0)>0){h=j;m=m+-16|0}else{h=j;break a}}h=109-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!h){j=t;k=50919;do{k=k+1|0;j=j+1|0;v=a[k>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=j}else h=-1;while(0);h=h&255}else h=1;j=I+164|0;a[j>>0]=h;v=H+4|0;gw(v|0,0,272)|0;a[H+200>>0]=2;c[H>>2]=I;c[H+132>>2]=1;h=ud(H,B,q)|0;c[v>>2]=c[q>>2];k=I+81|0;h=(a[k>>0]|0)==0?h:7;if(!h)if(((c[H+228>>2]|0)==0?(c[H+232>>2]|0)==0:0)?(c[H+236>>2]|0)==0:0){c[r>>2]=32306;c[r+4>>2]=103316;c[r+8>>2]=31517;Db(11,32001,r);h=11}else h=0;a[j>>0]=0;n=u+12|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[u>>2]=H;c[u+4>>2]=150;c[u+8>>2]=151;c[u+24>>2]=G;n=G+12|0;c[n>>2]=p;b:do if(!h){q=H+228|0;l=c[q>>2]|0;m=l;do if(l){j=c[l+12>>2]|0;if(j|0){h=H+12|0;c[h>>2]=0;Kk(H,j,0);h=(a[k>>0]|0)==0?c[h>>2]|0:7;if(h|0){E=171;break b}$j(u,j)|0;break}j=c[l>>2]|0;do if(!j){c[n>>2]=m;u=0}else{t=a[y>>0]|0;h=(d[208+(t&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(t<<24>>24==0|(h|0)!=0)){k=y;do{k=k+1|0;j=j+1|0;t=a[k>>0]|0;h=(d[208+(t&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(h|0)!=0))}c[n>>2]=m;if(h|0){u=0;break}m=c[(c[l+4>>2]|0)+(x<<4)>>2]|0;k=H+272|0;h=c[k>>2]|0;c:do if(h|0){l=k;while(1){j=h+12|0;if((c[h>>2]|0)==(m|0))break;h=c[j>>2]|0;if(!h)break c;else l=j}c[l>>2]=c[j>>2];c[j>>2]=c[G>>2];c[G>>2]=h;t=G+4|0;c[t>>2]=(c[t>>2]|0)+1}while(0);d:do if((c[s>>2]|0)<0){l=(c[q>>2]|0)+40|0;h=c[k>>2]|0;if(!h)break;while(1){j=h+12|0;if((c[h>>2]|0)==(l|0))break;h=c[j>>2]|0;if(!h)break d;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[G>>2];c[G>>2]=h;t=G+4|0;c[t>>2]=(c[t>>2]|0)+1}while(0);h=c[q>>2]|0;k=c[h+24>>2]|0;do if(k){j=c[k>>2]|0;if((j|0)<=0)break;h=k+4|0;while(1){k=c[h>>2]|0;if(k|0?_j(u,k)|0:0)break;if((j|0)>1){j=j+-1|0;h=h+20|0}else break}h=c[q>>2]|0}while(0);h=c[h+8>>2]|0;if(h|0)do{k=c[h+40>>2]|0;e:do if(k|0){j=c[k>>2]|0;if((j|0)<=0)break;k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(u,l)|0:0)break e;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}}while(0);h=c[h+20>>2]|0}while((h|0)!=0);h=c[H+232>>2]|0;if(!h){u=1;break}while(1){k=c[h+40>>2]|0;f:do if(k|0){j=c[k>>2]|0;if((j|0)<=0)break;k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(u,l)|0:0)break f;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}}while(0);h=c[h+20>>2]|0;if(!h){u=1;break}}}while(0);h=c[(c[q>>2]|0)+16>>2]|0;if(h|0){q=H+272|0;r=((w|0)!=0)<<31>>31;s=(w|0)==0;t=G+4|0;do{o=c[h+20>>2]|0;if((o|0)>0){p=h+8|0;n=0;do{g:do if(u){m=h+36+(n<<3)|0;if((c[m>>2]|0)!=(x|0))break;j=c[q>>2]|0;if(!j)break;l=q;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break g;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[G>>2];c[G>>2]=j;c[t>>2]=(c[t>>2]|0)+1}while(0);k=c[p>>2]|0;h:do if(k|0){m=a[k>>0]|0;j=(d[208+(m&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(j|0)!=0)){l=y;do{k=k+1|0;l=l+1|0;m=a[k>>0]|0;j=(d[208+(m&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(j|0)!=0))}if(j|0)break;m=c[h+36+(n<<3)+4>>2]|0;do if(!m)j=r;else{if(s)break h;l=a[m>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[208+(d[w>>0]|0)>>0]|0)|0;if(l<<24>>24==0|(j|0)!=0)break;k=w;l=m;do{l=l+1|0;k=k+1|0;K=a[l>>0]|0;j=(d[208+(K&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(K<<24>>24==0|(j|0)!=0))}while(0);if(j|0)break;j=c[q>>2]|0;if(!j)break;l=q;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break h;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[G>>2];c[G>>2]=j;c[t>>2]=(c[t>>2]|0)+1}while(0);n=n+1|0}while((n|0)<(o|0))}h=c[h+4>>2]|0}while((h|0)!=0)}}else{l=H+232|0;h=c[l>>2]|0;if(h|0){k=c[h+40>>2]|0;do if(k){j=c[k>>2]|0;if((j|0)<=0)break;h=k+4|0;while(1){k=c[h>>2]|0;if(k|0?_j(u,k)|0:0)break;if((j|0)>1){j=j+-1|0;h=h+20|0}else break}h=c[l>>2]|0}while(0);h=c[h+36>>2]|0;if(!h)break;_j(u,h)|0;break}h=lo(H,o?t:0)|0;if(h|0){E=171;break b}k=H+236|0;h=c[(c[k>>2]|0)+28>>2]|0;if(h|0)do{j=c[h+12>>2]|0;do if(j|0){if((bd(H,0,j,t)|0)!=(p|0))break;j=c[h+28>>2]|0;if(j|0)mo(H,G,c[j+8>>2]|0,w);no(H,G,c[h+24>>2]|0,w);mo(H,G,c[h+20>>2]|0,w)}while(0);h=c[h+36>>2]|0}while((h|0)!=0);if((c[H+120>>2]|0)==(p|0))no(H,G,c[(c[k>>2]|0)+16>>2]|0,w);oo(u,c[k>>2]|0)}while(0);h=po(f,G,B,A,z)|0;if(h|0)E=171}else E=171;while(0);do if((E|0)==171){if(!(c[v>>2]|0)){c[f+20>>2]=h;j=c[f>>2]|0;if(!(b[j+8>>1]&1))break;i:do switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29){if(!(520028155>>>h&1)){h=50724;break i}h=c[22960+(h<<2)>>2]|0}else h=50724}}while(0);yc(j,h,-1,1,0)|0;break}j=c[i+4>>2]|0;k=c[i+8>>2]|0;j:do if(j){h=b[j+8>>1]|0;do if((h&514)==514){if((a[j+10>>0]|0)!=1)break;j=c[j+16>>2]|0;break j}while(0);if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);k:do if(!k)h=0;else{h=b[k+8>>1]|0;do if((h&514)==514){if((a[k+10>>0]|0)!=1)break;h=c[k+16>>2]|0;break k}while(0);if(h&1){h=0;break}h=Gg(k,1)|0}while(0);K=c[v>>2]|0;c[F>>2]=j;c[F+4>>2]=h;c[F+8>>2]=59952;c[F+12>>2]=K;h=Bb(49618,F)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(H);ro(I,c[G>>2]|0);c[C>>2]=D;Ra=J;return}
- function oe(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+48|0;j=r+16|0;n=r+8|0;m=r;p=r+24|0;q=c[a+36>>2]|0;h=c[q>>2]|0;o=(1<<f+d)-(1<<d)|0;if(g&1|0){i=c[h+32>>2]|0;if(!i)h=0;else{h=0;do{if((i|0)!=(q|0))h=b[i+10>>1]|h;i=c[i+4>>2]|0}while((i|0)!=0)}i=o&65535;if(((o&(h&65535)|0)==0?(l=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0,(l|0)>-1):0)?(b[p>>1]=2,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[m>>2]=p,(Ya[f&127](l,13,m)|0)==-1):0){q=5;Ra=r;return q|0}p=~i;f=q+12|0;b[f>>1]=(e[f>>1]|0)&p;q=q+10|0;b[q>>1]=(e[q>>1]|0)&p;q=0;Ra=r;return q|0}h=c[h+32>>2]|0;i=(h|0)==0;if(!(g&4)){a:do if(!i){while(1){if(o&(e[h+12>>1]|0)|0){h=5;i=33;break}if(o&(e[h+10>>1]|0)|0){h=5;i=33;break}h=c[h+4>>2]|0;if(!h)break a}if((i|0)==33){Ra=r;return h|0}}while(0);h=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0;if((h|0)>-1?(b[p>>1]=1,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[j>>2]=p,(Ya[f&127](h,13,j)|0)==-1):0){q=5;Ra=r;return q|0}q=q+12|0;b[q>>1]=o|(e[q>>1]|0);q=0;Ra=r;return q|0}else{b:do if(i)h=0;else{i=0;while(1){if(o&(e[h+12>>1]|0)|0){h=5;break}i=b[h+10>>1]|i;h=c[h+4>>2]|0;if(!h){h=i;break b}}Ra=r;return h|0}while(0);if(((o&(h&65535)|0)==0?(k=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0,(k|0)>-1):0)?(b[p>>1]=0,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[n>>2]=p,(Ya[f&127](k,13,n)|0)==-1):0){q=5;Ra=r;return q|0}q=q+10|0;b[q>>1]=o|(e[q>>1]|0);q=0;Ra=r;return q|0}return 0}function pe(a){a=a|0;return}function qe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=a+36|0;f=c[e>>2]|0;if(!f)return 0;g=c[f>>2]|0;d=g+32|0;while(1){h=c[d>>2]|0;if((h|0)==(f|0))break;else d=h+4|0}c[d>>2]=c[f+4>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}c[e>>2]=0;f=g+28|0;h=(c[f>>2]|0)+-1|0;c[f>>2]=h;if(h|0)return 0;if(b|0?(c[g+12>>2]|0)>-1:0)Wa[c[2532>>2]&127](c[g+8>>2]|0)|0;Ae(a);return 0}function re(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=0;return 0}function se(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function te(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+192|0;i=j+24|0;g=j+16|0;f=j+8|0;e=j;h=j+104|0;d=j+28|0;if(b[a+18>>1]&128){Ra=j;return}if(Xa[c[2400>>2]&255](c[a+12>>2]|0,d)|0){c[e>>2]=c[a+32>>2];Db(28,31582,e);Ra=j;return}switch(c[d+16>>2]|0){case 0:{c[f>>2]=c[a+32>>2];Db(28,31606,f);Ra=j;return}case 1:{e=a+8|0;if(!(c[e>>2]|0)){Ra=j;return}d=a+32|0;if(!(Xa[c[2388>>2]&255](c[d>>2]|0,h)|0)){a=(c[e>>2]|0)+8|0;if((c[a+4>>2]|0)==0?(c[a>>2]|0)==(c[h+72>>2]|0):0){Ra=j;return}}c[i>>2]=c[d>>2];Db(28,31662,i);Ra=j;return}default:{c[g>>2]=c[a+32>>2];Db(28,31635,g);Ra=j;return}}}function ue(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=d;d=Mu(a,b,f)|0;Ra=e;return d|0}function ve(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+576|0;g=j+552|0;h=j+536|0;e=j+528|0;k=j+520|0;f=j;c[k>>2]=b;Cb(512,f,31408,k)|0;b=Eu(f)|0;a:do if((b|0)>0)while(1){if((a[f+b>>0]|0)==47)break a;if((b|0)>1)b=b+-1|0;else{i=5;break}}else i=5;while(0);if((i|0)==5)if((a[f>>0]|0)==47)b=1;else{a[f>>0]=46;b=1}a[f+b>>0]=0;while(1){b=Ya[c[2340>>2]&127](f,524288,420)|0;if((b|0)<0){k=uu()|0;if((c[k>>2]|0)!=4){i=14;break}}else{if((b|0)>2){i=13;break}Wa[c[2352>>2]&127](b)|0;c[e>>2]=f;c[e+4>>2]=b;Db(28,31900,e);if((Ya[c[2340>>2]&127](31943,0,0)|0)<0){b=-1;i=14;break}}}if((i|0)==13){c[d>>2]=b;k=0;Ra=j;return k|0}else if((i|0)==14){c[d>>2]=b;c[h>>2]=31984;c[h+4>>2]=36187;c[h+8>>2]=31517;Db(14,32001,h);i=uu()|0;i=c[i>>2]|0;k=dv(i)|0;c[g>>2]=36187;c[g+4>>2]=i;c[g+8>>2]=31807;c[g+12>>2]=f;c[g+16>>2]=k;Db(14,31953,g);k=14;Ra=j;return k|0}return 0}function we(){return Ka(30)|0}function xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+96|0;h=k;i=k+8|0;j=(d|0)!=0;f=j?d:420;g=b|524288;while(1){e=Ya[c[2340>>2]&127](a,g,f)|0;if((e|0)<0){l=uu()|0;if((c[l>>2]|0)!=4){a=13;break}}else{if((e|0)>2){a=7;break}Wa[c[2352>>2]&127](e)|0;c[h>>2]=a;c[h+4>>2]=e;Db(28,31900,h);if((Ya[c[2340>>2]&127](31943,b,d)|0)<0){e=-1;a=13;break}}}if((a|0)==7){if(!j){l=e;Ra=k;return l|0}if(((Xa[c[2400>>2]&255](e,i)|0)==0?(c[i+36>>2]|0)==0:0)?(c[i+12>>2]&511|0)!=(d|0):0)Xa[c[2508>>2]&255](e,d)|0;l=e;Ra=k;return l|0}else if((a|0)==13){Ra=k;return e|0}return 0}function ye(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=Ra;Ra=Ra+112|0;j=k+80|0;i=k;a[d>>0]=0;e=c[14771]|0;if(!(c[672]|0)){g=Ca(32077)|0;c[672]=g}if(!(c[673]|0)){g=Ca(32091)|0;c[673]=g}f=i+12|0;g=e;e=0;while(1){if(((g|0?(Xa[c[2388>>2]&255](g,i)|0)==0:0)?(c[f>>2]&61440|0)==16384:0)?(Xa[c[2364>>2]&255](g,3)|0)==0:0)break;if(e>>>0>5){h=11;break}g=c[2688+(e<<2)>>2]|0;e=e+1|0}if((h|0)==11){j=6410;Ra=k;return j|0}f=d+(b+-2)|0;e=0;while(1){Fb(8,i);a[f>>0]=0;l=i;m=c[l>>2]|0;l=c[l+4>>2]|0;c[j>>2]=g;h=j+8|0;c[h>>2]=m;c[h+4>>2]=l;c[j+16>>2]=0;Cb(b,d,32037,j)|0;if(e>>>0>10|(a[f>>0]|0)!=0){e=1;h=16;break}if(!(Xa[c[2364>>2]&255](d,0)|0))e=e+1|0;else{e=0;h=16;break}}if((h|0)==16){Ra=k;return e|0}return 0}function ze(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=Ra;Ra=Ra+80|0;l=m+48|0;i=m+24|0;h=m+16|0;k=m;f=m+56|0;b[f+2>>1]=0;c[f+4>>2]=128;c[f+8>>2]=1;b[f>>1]=1;o=c[606]|0;g=e+12|0;n=c[g>>2]|0;c[k>>2]=f;if(Ya[o&127](n,12,k)|0){o=3850;Ra=m;return o|0}a:do switch(b[f>>1]|0){case 2:{if(a[e+22>>0]|0){a[e+23>>0]=1;o=1288;Ra=m;return o|0}d=d+8|0;f=c[(c[(c[d>>2]|0)+40>>2]|0)+12>>2]|0;if((f|0)>-1?(b[k>>1]=1,b[k+2>>1]=0,c[k+4>>2]=128,c[k+8>>2]=1,o=c[606]|0,c[h>>2]=k,(Ya[o&127](f,13,h)|0)==-1):0){o=5;Ra=m;return o|0}f=c[g>>2]|0;do{g=Xa[c[2412>>2]&255](f,3)|0;if((g|0)>=0){j=12;break}o=uu()|0}while((c[o>>2]|0)==4);if((j|0)==12?(g|0)==0:0)break a;n=c[e+8>>2]|0;l=uu()|0;l=c[l>>2]|0;o=dv(l)|0;c[i>>2]=36954;c[i+4>>2]=l;c[i+8>>2]=31726;c[i+12>>2]=(n|0)==0?59952:n;c[i+16>>2]=o;Db(4618,31953,i);o=4618;Ra=m;return o|0}case 1:{o=5;Ra=m;return o|0}default:d=d+8|0}while(0);d=c[(c[(c[d>>2]|0)+40>>2]|0)+12>>2]|0;if((d|0)>-1){b[k>>1]=0;b[k+2>>1]=0;c[k+4>>2]=128;c[k+8>>2]=1;o=c[606]|0;c[l>>2]=k;d=(Ya[o&127](d,13,l)|0)==-1;d=d?5:0}else d=0;o=d;Ra=m;return o|0}function Ae(a){a=a|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+32|0;m=n;l=c[(c[a+8>>2]|0)+40>>2]|0;if(!l){Ra=n;return}if(c[l+28>>2]|0){Ra=n;return}f=Va[c[2640>>2]&127]()|0;f=(f|0)<32768?1:(f|0)/32768|0;h=l+20|0;if(!(b[h>>1]|0))d=l+24|0;else{i=l+12|0;d=l+24|0;j=l+16|0;g=0;do{do if((c[i>>2]|0)<=-1){k=c[(c[d>>2]|0)+(g<<2)>>2]|0;if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{o=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xa[c[2616>>2]&255](c[(c[d>>2]|0)+(g<<2)>>2]|0,c[j>>2]|0)|0;while(0);g=g+f|0}while((g|0)<(e[h>>1]|0))}d=c[d>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);f=l+12|0;d=c[f>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){if(!a)d=0;else d=c[a+32>>2]|0;a=uu()|0;a=c[a>>2]|0;o=dv(a)|0;c[m>>2]=36897;c[m+4>>2]=a;c[m+8>>2]=31695;c[m+12>>2]=(d|0)==0?59952:d;c[m+16>>2]=o;Db(4106,31953,m)}c[f>>2]=-1}c[(c[l>>2]|0)+40>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);Ra=n;return}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);Ra=n;return}}function Be(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=Ra;Ra=Ra+32|0;e=f;b=a+12|0;d=c[b>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){g=c[a+32>>2]|0;h=uu()|0;h=c[h>>2]|0;d=dv(h)|0;c[e>>2]=34584;c[e+4>>2]=h;c[e+8>>2]=31695;c[e+12>>2]=(g|0)==0?59952:g;c[e+16>>2]=d;Db(4106,31953,e)}c[b>>2]=-1}b=c[a+28>>2]|0;if(!b){b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}return 0}function Ce(a,b){a=a|0;b=b|0;return 0}function De(a,b){a=a|0;b=b|0;return 0}function Ee(a,b){a=a|0;b=b|0;c[b>>2]=0;return 0}function Fe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=Ra;Ra=Ra+32|0;f=g;e=b+24|0;d=b+16|0;do if(a[d>>0]|0){if((Wa[c[2568>>2]&127](c[e>>2]|0)|0)>=0){a[d>>0]=0;break}d=uu()|0;d=c[d>>2]|0;if((d|0)!=2)c[b+20>>2]=d}while(0);d=c[e>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+12|0;e=c[d>>2]|0;if((e|0)>-1){if(Wa[c[2352>>2]&127](e)|0){h=c[b+32>>2]|0;i=uu()|0;i=c[i>>2]|0;e=dv(i)|0;c[f>>2]=34584;c[f+4>>2]=i;c[f+8>>2]=31695;c[f+12>>2]=(h|0)==0?59952:h;c[f+16>>2]=e;Db(4106,31953,f)}c[d>>2]=-1}d=c[b+28>>2]|0;if(!d){d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}return 0}function Ge(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+24>>2]|0;f=b+16|0;if(a[f>>0]|0){a[f>>0]=d;Oa(e|0,0)|0;b=0;return b|0}e=Xa[c[2556>>2]&255](e,511)|0;if((e|0)>=0){a[f>>0]=d;b=e;return b|0}d=uu()|0;d=c[d>>2]|0;switch(d|0){case 1:{e=3;break}case 37:case 4:case 16:case 110:case 11:case 13:case 17:{b=5;return b|0}default:e=3850}c[b+20>>2]=d;b=e;return b|0}function He(b,e){b=b|0;e=e|0;var f=0,g=0;f=c[b+24>>2]|0;g=b+16|0;if((d[g>>0]|0|0)==(e|0)){b=0;return b|0}if((e|0)==1){a[g>>0]=1;b=0;return b|0}if((Wa[c[2568>>2]&127](f)|0)>=0){a[g>>0]=0;b=0;return b|0}e=uu()|0;e=c[e>>2]|0;if((e|0)==2){b=0;return b|0}c[b+20>>2]=e;b=2058;return b|0}function Ie(a,b){a=a|0;b=b|0;a=(Xa[c[2364>>2]&255](c[a+24>>2]|0,0)|0)==0&1;c[b>>2]=a;return 0}function Je(a,b){a=a|0;b=b|0;return 29744}function Ke(a,b){a=a|0;b=b|0;return 29820}function Le(a,b){a=a|0;b=b|0;var d=0;if((b|0)==3082)return;if((b&251|4|0)!=14)return;b=c[a>>2]|0;d=c[b+68>>2]|0;if(!d)b=0;else b=Ya[d&127](b,0,0)|0;c[a+72>>2]=b;return}function Me(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=Ra;Ra=Ra+96|0;h=f+72|0;g=c[b+108>>2]|0;c[h+4>>2]=f;c[h>>2]=b;c[h+8>>2]=70;c[h+12>>2]=g;c[h+16>>2]=0;g=h+20|0;a[g>>0]=0;a[h+21>>0]=1;tb(h,d,e);e=yb(h)|0;if((a[g>>0]|0)!=7){Ra=f;return e|0}d=b+81|0;if(a[d>>0]|0){Ra=f;return e|0}if(a[b+82>>0]|0){Ra=f;return e|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){Ra=f;return e|0}c[d+12>>2]=7;Ra=f;return e|0}function Ne(a,d){a=a|0;d=d|0;var e=0,f=0;e=c[a+260>>2]|0;do if(e|0){f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;break}else{Dg(e);break}}while(0);if((d|0)==3082)return;if((d&251|4|0)!=14)return;d=c[a>>2]|0;e=c[d+68>>2]|0;if(!e)d=0;else d=Ya[e&127](d,0,0)|0;c[a+72>>2]=d;return}function Oe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;d=h+4|0;f=c[b>>2]|0;g=f+16|0;if(c[(c[g>>2]|0)+20>>2]|0){g=0;Ra=h;return g|0}if(a[b+199>>0]|0){g=0;Ra=h;return g|0}e=Pe(c[f>>2]|0,0,f,d,0,542)|0;if(e|0){cd(b,32157,h);c[b+12>>2]=e;g=1;Ra=h;return g|0}e=c[d>>2]|0;c[(c[g>>2]|0)+20>>2]=e;if((Ud(e,c[f+92>>2]|0,-1,0)|0)==7){Fc(f);g=1;Ra=h;return g|0}else{g=0;Ra=h;return g|0}return 0}function Pe(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+128|0;p=J+104|0;D=J+120|0;A=J+116|0;H=J;G=(f|0)==0;if(!G){k=(a[f>>0]|0)==0;if(Bu(f,32227)|0)if(k)B=4;else{k=0;B=5}else B=6}else B=4;if((B|0)==4)if((a[g+80>>0]|0)==2){k=1;B=6}else{k=1;B=5}if((B|0)==5)if(!(j&128)){F=0;E=i}else B=6;if((B|0)==6){F=1;E=i|2}C=(j&256|0)!=0&(F|k)?j&-769|512:j;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](48)|0;if(!i){h=7;Ra=J;return h|0}else I=i}else{i=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;l=59064;j=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&j>>>0>0){I=c[14978]|0;z=Tv(j|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&z>>>0<=I>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(!j){h=7;Ra=J;return h|0}i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;I=j}else I=j}l=I+4|0;s=l+44|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(s|0));c[I>>2]=g;c[I+32>>2]=I;c[I+36>>2]=1;a:do if(!k?!((C&131072|0)==0|F&(C&64|0)==0):0){if(G)k=0;else k=(Eu(f)|0)&1073741823;l=k+1|0;m=(c[e+8>>2]|0)+1|0;k=(m|0)>(l|0)?m:l;z=Sv(k|0,0,-1,-1)|0;y=L()|0;do if(!(y>>>0>0|(y|0)==0&z>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](k)|0;a[I+9>>0]=1;if(!k)break;else n=k}else{j=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;k=59064;i=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&i>>>0>0){z=c[14978]|0;y=Tv(i|0,k|0,j|0,((j|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(!i){B=33;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;a[I+9>>0]=1;n=i}if(!F){a[n>>0]=0;k=Za[c[e+36>>2]&127](e,f,m,n)|0;if(k|0){if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{h=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=k;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=k;Ra=J;return h|0}}}else ew(n|0,f|0,l|0)|0;j=c[14822]|0;b:do if(!j)j=0;else{while(1){k=c[j>>2]|0;if((Bu(n,c[k+168>>2]|0)|0)==0?(c[k>>2]|0)==(e|0):0)break;j=c[j+68>>2]|0;if(!j){j=0;break b}}k=c[g+20>>2]|0;c:do if((k|0)>0){l=c[g+16>>2]|0;while(1){i=k;k=k+-1|0;z=c[l+(k<<4)+4>>2]|0;if(z|0?(c[z+4>>2]|0)==(j|0):0)break;if((i|0)<=1)break c}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{h=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=19;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=19;Ra=J;return h|0}}while(0);c[I+4>>2]=j;z=j+64|0;c[z>>2]=(c[z>>2]|0)+1}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{z=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!j){B=69;break a}if(!(a[I+9>>0]|0))break a;else{B=213;break a}}else B=33;while(0);if((B|0)==33)a[I+9>>0]=1;if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=7;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=7;Ra=J;return h|0}}else B=69;while(0);d:do if((B|0)==69){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](84)|0;if(!j)k=7;else B=80}else{k=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){z=c[14978]|0;y=Tv(i|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}j=Wa[c[29340>>2]&127](k)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;B=80}else B=80}else k=7}do if((B|0)==80){l=j+4|0;s=l+80|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(s|0));y=E&1;z=(y|0)!=0;c[D>>2]=4096;s=e+4|0;u=c[s>>2]|0;u=((u|0)>72?u:72)+7&-8;c[j>>2]=0;do if(!(E&2))if(!G)if(a[f>>0]|0){o=e+8|0;m=(c[o>>2]|0)+1|0;k=m<<1;B=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;x=L()|0;if(!(x>>>0>0|(x|0)==0&B>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](k)|0;if(!k){k=7;B=229;break}else i=k}else{l=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;k=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&k>>>0>0){B=c[14978]|0;x=Tv(k|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&x>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](l)|0;if(!i){k=7;B=229;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}a[i>>0]=0;k=Za[c[e+36>>2]&127](e,f,m,i)|0;n=(Eu(i)|0)&1073741823;m=f+(((Eu(f)|0)&1073741823)+1)|0;if(!(a[m>>0]|0))l=m;else{l=m;do{l=l+(((Eu(l)|0)&1073741823)+1)|0;l=l+(((Eu(l)|0)&1073741823)+1)|0}while((a[l>>0]|0)!=0)}if(!k){if((n+8|0)<=(c[o>>2]|0)){x=0;r=l+1-m|0;p=m;q=1;B=119;break}c[p>>2]=31984;c[p+4>>2]=55390;c[p+8>>2]=31517;Db(14,32001,p);k=14}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);B=229;break}else{B=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);B=229;break}}else{k=7;B=229}}else{x=0;r=0;p=0;i=0;n=0;q=1;B=119}else{f=0;x=0;r=0;p=0;i=0;n=0;q=0;B=119}else if(!G)if(a[f>>0]|0){m=(Eu(f)|0)+1|0;B=Sv(m|0,0,-1,-1)|0;x=L()|0;if(x>>>0>0|(x|0)==0&B>>>0>2147483390){k=7;B=229}else{if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](m)|0;if(!k){k=7;B=229;break}}else{k=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){B=c[14978]|0;x=Tv(i|0,l|0,k|0,((k|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&x>>>0<=B>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){k=7;B=229;break}i=Wa[c[29352>>2]&127](k)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}ew(k|0,f|0,m|0)|0;f=0;x=1;r=0;p=0;i=k;n=(Eu(k)|0)&1073741823;q=0;B=119}}else{x=1;r=0;p=0;i=0;n=0;q=1;B=119}else{f=0;x=1;r=0;p=0;i=0;n=0;q=0;B=119}while(0);e:do if((B|0)==119){o=(u<<1)+17+(n*3|0)+r+((c[s>>2]|0)+279&-8)|0;w=Sv(o|0,0,-1,-1)|0;v=L()|0;do if(!(v>>>0>0|(v|0)==0&w>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;if(!k)break;else w=k}else{k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){w=c[14978]|0;v=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;t=L()|0;c[14768]=((t|0)<0|(t|0)==0&v>>>0<=w>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l)break;k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;w=l}else w=l}gw(w|0,0,o|0)|0;t=w+212|0;c[t>>2]=w+224;k=w+272|0;v=w+60|0;c[v>>2]=k;k=k+((c[s>>2]|0)+7&-8)|0;c[w+68>>2]=k;k=k+u|0;c[w+64>>2]=k;k=k+u|0;m=w+168|0;c[m>>2]=k;do if(i|0){l=n+1|0;o=w+172|0;c[o>>2]=k+(r+l);ew(k|0,i|0,n|0)|0;if(r|0)ew((c[m>>2]|0)+l|0,p|0,r|0)|0;ew(c[o>>2]|0,i|0,n|0)|0;l=(c[o>>2]|0)+n|0;k=32236;s=l+10|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(s|0));s=(c[o>>2]|0)+(n+9)|0;u=w+220|0;c[u>>2]=s;ew(s|0,i|0,n|0)|0;u=(c[u>>2]|0)+n|0;a[u>>0]=a[32246]|0;a[u+1>>0]=a[32247]|0;a[u+2>>0]=a[32248]|0;a[u+3>>0]=a[32249]|0;a[u+4>>0]=a[32250]|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{u=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[w>>2]=e;c[w+144>>2]=C;f:do if(q?(a[f>>0]|0)!=0:0){c[A>>2]=0;k=_a[c[e+24>>2]&127](e,c[m>>2]|0,c[v>>2]|0,C&556927,A)|0;m=c[A>>2]&1;if(k|0)break;l=c[v>>2]|0;l=Wa[c[(c[l>>2]|0)+48>>2]&127](l)|0;g:do if(!m){do if(!(a[w+12>>0]|0)){B=c[v>>2]|0;if((Wa[c[(c[B>>2]|0)+48>>2]&127](B)|0)&4096|0)break;k=c[v>>2]|0;i=c[(c[k>>2]|0)+44>>2]|0;do if(i){B=Wa[i&127](k)|0;k=(B|0)<65536?B:65536;if((B|0)<32){k=512;break}c[w+148>>2]=k;if(k>>>0<=4096)break g;if(k>>>0>8192){c[D>>2]=8192;break g}else{c[D>>2]=k;break g}}else k=4096;while(0);c[w+148>>2]=k;break g}while(0);c[w+148>>2]=512}while(0);k=f+(((Eu(f)|0)&1073741823)+1)|0;h:do if(!(a[k>>0]|0))k=0;else{while(1){B=Bu(k,32252)|0;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!B)break;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!(a[k>>0]|0)){k=0;break h}}k=(Zm(k,1,0)|0)<<24>>24!=0}while(0);a[w+13>>0]=k&1;i:do if(!(l&8192)){k=f+(((Eu(f)|0)&1073741823)+1)|0;j:do if(a[k>>0]|0){while(1){B=Bu(k,32259)|0;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!B)break;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!(a[k>>0]|0))break j}if((Zm(k,1,0)|0)<<24>>24)break i}while(0);q=m;f=0;B=170;break f}while(0);k=C|1;B=168}else{k=C;B=168}while(0);if((B|0)==168){a[w+16>>0]=1;a[w+17>>0]=4;a[w+13>>0]=1;q=k&1;f=1;B=170}if((B|0)==170){k=Se(w,D,-1)|0;if(!k){p=c[D>>2]|0;r=(x|0)==0;i=x^1;k=r?119:0;n=c[t>>2]|0;l=n;s=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(s|0));o=n+24|0;c[o>>2]=1;l=n+28|0;c[l>>2]=88;a[n+32>>0]=i;a[n+33>>0]=2;c[n+36>>2]=k;c[n+40>>2]=w;k=n+16|0;c[k>>2]=100;c[n+20>>2]=1;m=Ya[c[29424>>2]&127](p,128,i)|0;if(!m)k=7;else{i=c[7357]|0;k=c[k>>2]|0;if((k|0)<=-1){C=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;D=L()|0;k=(c[l>>2]|0)+(c[o>>2]|0)|0;k=Wv(C|0,D|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[i&127](m,k);k=n+44|0;i=c[k>>2]|0;if(i|0)ab[c[29452>>2]&127](i);c[k>>2]=m;c[o>>2]=p;a[w+6>>0]=y^1;c[w+156>>2]=1073741823;a[w+12>>0]=f;a[w+4>>0]=f;a[w+18>>0]=f;a[w+15>>0]=x;a[w+14>>0]=q;a[w+7>>0]=f;do if(!(f<<24>>24)){a[w+8>>0]=1;a[w+9>>0]=0;a[w+10>>0]=2;a[w+11>>0]=10;b[w+140>>1]=88;D=w+160|0;c[D>>2]=-1;c[D+4>>2]=-1;D=c[v>>2]|0;if((Wa[c[(c[D>>2]|0)+48>>2]&127](D)|0)&4096|0){k=512;break}k=c[v>>2]|0;i=c[(c[k>>2]|0)+44>>2]|0;if(!i){k=4096;break}k=Wa[i&127](k)|0;k=(k|0)<32?512:(k|0)<65536?k:65536}else{b[w+140>>1]=88;k=w+160|0;c[k>>2]=-1;c[k+4>>2]=-1;k=512}while(0);c[w+148>>2]=k;if(z|r^1)a[w+5>>0]=((y&255)<<1&255^2)+2<<24>>24;c[w+200>>2]=92;c[w+204>>2]=(c[w+40>>2]|0)==0?74:75;c[j>>2]=w;D=g+48|0;s=c[D+4>>2]|0;l=w+128|0;c[l>>2]=c[D>>2];c[l+4>>2]=s;l=H;s=l+100|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(s|0));k=c[v>>2]|0;i=c[k>>2]|0;if(i|0){k=_a[c[i+8>>2]&127](k,H,100,0,0)|0;switch(k|0){case 0:case 522:break;default:{B=230;break e}}}a[j+16>>0]=E;c[j+4>>2]=g;k=c[j>>2]|0;i=k+176|0;c[i>>2]=117;c[k+180>>2]=j;l=c[k+60>>2]|0;m=c[l>>2]|0;if(!m)l=k;else{Ya[c[m+40>>2]&127](l,15,i)|0;l=c[j>>2]|0}c[I+4>>2]=j;c[j+8>>2]=0;c[j+12>>2]=0;if(a[l+14>>0]|0){E=j+22|0;b[E>>1]=b[E>>1]|1}k=d[H+17>>0]<<16|d[H+16>>0]<<8;m=j+32|0;c[m>>2]=k;do if((k+-512|0)>>>0>65024)B=205;else{if(k+16777215&k|0){B=205;break}k=a[H+20>>0]|0;i=j+22|0;b[i>>1]=b[i>>1]|2;a[j+17>>0]=(d[H+53>>0]<<16|d[H+52>>0]<<24|d[H+54>>0]<<8|d[H+55>>0]|0)!=0&1;i=(d[H+65>>0]<<16|d[H+64>>0]<<24|d[H+66>>0]<<8|d[H+67>>0]|0)!=0&1;B=208}while(0);do if((B|0)==205){c[m>>2]=0;if(G|F){k=0;break}a[j+17>>0]=0;k=0;i=0;B=208}while(0);if((B|0)==208)a[j+18>>0]=i;i=k&255;k=Se(l,m,i)|0;if(k|0){B=230;break e}c[j+36>>2]=(c[m>>2]|0)-i;c[j+64>>2]=1;if(!(a[I+9>>0]|0))break d;c[j+68>>2]=c[14822];c[14822]=j;B=213;break d}}}i=c[v>>2]|0;l=c[i>>2]|0;if(l|0){Wa[c[l+4>>2]&127](i)|0;c[i>>2]=0}l=c[w+208>>2]|0;k:do if(l|0){i=l;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;break k}else{i=Wa[c[29352>>2]&127](l)|0;break}else i=Wa[c[29352>>2]&127](l)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{g=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](w);B=229;break e}else{B=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);B=229;break e}}while(0);if(i)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);k=7;B=229;break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);k=7;B=229;break}else{k=7;B=229}}while(0);if((B|0)==229)if(j)B=230;if((B|0)==230){i=c[j>>2]|0;if(i)Te(i,0)}if(j)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{g=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](I);else{g=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I)}c[h>>2]=0;h=k;Ra=J;return h|0}while(0);l:do if((B|0)==213){m=c[g+20>>2]|0;if((m|0)>0){l=c[g+16>>2]|0;k=0;while(1){i=c[l+(k<<4)+4>>2]|0;if(i|0?a[i+9>>0]|0:0)break;k=k+1|0;if((k|0)>=(m|0))break l}while(1){k=c[i+28>>2]|0;if(!k)break;else i=k}m=c[I+4>>2]|0;if(m>>>0<(c[i+4>>2]|0)>>>0){c[I+24>>2]=i;c[I+28>>2]=0;c[i+28>>2]=I;break}k=i+24|0;l=c[k>>2]|0;m:do if(!l)B=224;else{while(1){if((c[l+4>>2]|0)>>>0>=m>>>0)break;k=l+24|0;i=c[k>>2]|0;if(!i){i=l;B=224;break m}else{g=l;l=i;i=g}}c[I+24>>2]=l;c[I+28>>2]=i;c[l+28>>2]=I}while(0);if((B|0)==224){c[I+24>>2]=0;c[I+28>>2]=i}c[k>>2]=I}}while(0);c[h>>2]=I;k=c[I+4>>2]|0;c[k+4>>2]=c[I>>2];if(!(c[k+48>>2]|0)){h=c[(c[k>>2]|0)+212>>2]|0;c[h+16>>2]=-2e3;g=c[7357]|0;I=c[h+44>>2]|0;h=(c[h+28>>2]|0)+(c[h+24>>2]|0)|0;h=Wv(2048e3,0,h|0,((h|0)<0)<<31>>31|0)|0;L()|0;bb[g&127](I,h)}k=c[(c[j>>2]|0)+60>>2]|0;i=c[k>>2]|0;if(!i){h=0;Ra=J;return h|0}Ya[c[i+40>>2]&127](k,30,j+4|0)|0;h=0;Ra=J;return h|0}function Qe(d){d=d|0;var e=0;e=c[d+8>>2]|0;if(!(a[e>>0]|0))return;a[e>>0]=0;if((b[d+30>>1]|0)<=1)return;Gf(e)|0;return}function Re(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[b+4>>2]|0;b=c[(c[b>>2]|0)+60>>2]|0;d=c[f+396>>2]|0;if(!d){g=0;return g|0}g=f+404|0;e=c[g>>2]|0;if((e|0)<0){g=0;return g|0}if(!(a[f+408>>0]|0))b=Xa[d&255](c[f+400>>2]|0,e)|0;else b=Ya[d&127](c[f+400>>2]|0,e,b)|0;if(!b)d=-1;else d=(c[g>>2]|0)+1|0;c[g>>2]=d;g=b;return g|0}function Se(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=Ra;Ra=Ra+16|0;o=r;p=c[f>>2]|0;if(!((a[e+15>>0]|0)!=0?(c[e+24>>2]|0)!=0:0))l=3;a:do if(((l|0)==3?(m=e+212|0,p|0?(c[(c[m>>2]|0)+12>>2]|0)==0:0):0)?(q=e+152|0,(p|0)!=(c[q>>2]|0)):0){n=o;c[n>>2]=0;c[n+4>>2]=0;if(((a[e+16>>0]|0)!=0?(i=c[e+60>>2]|0,j=c[i>>2]|0,(j|0)!=0):0)?(k=Xa[c[j+24>>2]&255](i,o)|0,(k|0)!=0):0)g=k;else l=8;b:do if((l|0)==8){k=p+8|0;if((c[14813]|0)>=(k|0)?(h=c[14819]|0,(h|0)!=0):0){c[14819]=c[h>>2];n=c[14820]|0;c[14820]=n+-1;c[14821]=(n|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0)c[14983]=i}else{n=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;l=L()|0;if(l>>>0>0|(l|0)==0&n>>>0>2147483390){g=7;break}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h){g=7;break}}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){n=c[14978]|0;l=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&l>>>0<=n>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){g=7;break}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}i=Wa[c[29352>>2]&127](h)|0;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14980]|0)+i|0;c[14980]=i;if(i>>>0>(c[14984]|0)>>>0)c[14984]=i}k=h+p|0;n=k;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;Ff(e);k=c[m>>2]|0;m=k+24|0;do if(c[m>>2]|0){j=k+28|0;n=Ya[c[29424>>2]&127](p,(c[j>>2]|0)+40|0,d[k+32>>0]|0)|0;if(n|0){l=c[7357]|0;i=c[k+16>>2]|0;if((i|0)<=-1){t=Yv(i|0,((i|0)<0)<<31>>31|0,-1024,-1)|0;s=L()|0;i=(c[j>>2]|0)+(c[m>>2]|0)|0;i=Wv(t|0,s|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0}bb[l&127](n,i);i=k+44|0;j=c[i>>2]|0;if(j|0)ab[c[29452>>2]&127](j);c[i>>2]=n;c[m>>2]=p;break}g=h;do if((c[14816]|0)>>>0<=g>>>0)if((c[14817]|0)>>>0>g>>>0){c[14979]=(c[14979]|0)+-1;c[h>>2]=c[14819];c[14819]=h;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;g=7;break b}else{g=Wa[c[29352>>2]&127](h)|0;break}else g=Wa[c[29352>>2]&127](h)|0;while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);g=7;break b}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);g=7;break b}}while(0);j=e+208|0;k=c[j>>2]|0;c:do if(k|0){i=k;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break c}else{i=Wa[c[29352>>2]&127](k)|0;break}else i=Wa[c[29352>>2]&127](k)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[j>>2]=h;t=o;s=c[t>>2]|0;t=c[t+4>>2]|0;o=Sv(p|0,0,-1,-1)|0;t=Sv(o|0,L()|0,s|0,t|0)|0;t=Wv(t|0,L()|0,p|0,0)|0;L()|0;c[e+24>>2]=t;c[q>>2]=p;break a}while(0);c[f>>2]=c[q>>2];t=g;Ra=r;return t|0}while(0);c[f>>2]=c[e+152>>2];h=e+142|0;if((g|0)<0)g=b[h>>1]|0;b[h>>1]=g;t=0;Ra=r;return t|0}function Te(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;h=o;n=c[b+208>>2]|0;f=c[b+136>>2]|0;if(f|0)do{g=f;f=c[f+16>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);l=b+4|0;a[l>>0]=0;do if((e|0)!=0?(0==0?(c[e+32>>2]&2048|0)==0:0):0){c[h>>2]=0;if((((a[b+12>>0]|0)==0?(c[b+24>>2]|0)!=0:0)?(i=c[b+60>>2]|0,j=c[i>>2]|0,(j|0)!=0):0)?(k=Ya[c[j+40>>2]&127](i,20,h)|0,(k|0)!=12):0){if(c[h>>2]|k|0){f=0;break}}else m=14;f=n}else f=0;while(0);k=b+216|0;Pf(c[k>>2]|0,e,d[b+11>>0]|0,c[b+152>>2]|0,f)|0;c[k>>2]=0;Ff(b);if(!(a[b+15>>0]|0)){h=b+64|0;f=c[h>>2]|0;g=c[f>>2]|0;a:do if(g|0){if(!(a[b+7>>0]|0)){f=Xa[c[g+20>>2]&255](f,2)|0;if(!f){f=c[h>>2]|0;g=c[f>>2]|0;m=22}}else m=22;if((m|0)==22)f=Xa[c[g+24>>2]&255](f,b+80|0)|0;switch((f&255)<<24>>24){case 10:case 13:break;default:break a}c[b+40>>2]=f;a[b+16>>0]=6;c[b+204>>2]=(f|0)==0?74:75}while(0);switch(a[b+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[l>>0]|0))uf(b,0,0)|0;break}default:tf(b)|0}vf(b)}else vf(b);f=c[b+64>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}f=c[b+60>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}b:do if(n|0){f=n;do if((c[14816]|0)>>>0<=f>>>0)if((c[14817]|0)>>>0>f>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;n=(c[14820]|0)+1|0;c[14820]=n;c[14821]=(n|0)<(c[14815]|0)&1;break b}else{f=Wa[c[29352>>2]&127](n)|0;break}else f=Wa[c[29352>>2]&127](n)|0;while(0);c[14980]=(c[14980]|0)-f;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{m=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);ab[c[29452>>2]&127](c[(c[b+212>>2]|0)+44>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=o;return}else{n=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=o;return}}function Ue(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=d+40|0;if(c[h>>2]|0){e=0;return e|0}g=a[d+20>>0]|0;if(g<<24>>24){if(g&3){e=0;return e|0}if(b[e+28>>1]&8){e=0;return e|0}}j=d+196|0;c[j>>2]=(c[j>>2]|0)+1;c[e+16>>2]=0;do if(c[d+216>>2]|0){f=Ve(e)|0;if(!f){f=We(d,e,0,0)|0;i=12}}else{if(!((b[e+28>>1]&8)==0?(a[d+16>>0]|0)!=3:0))i=10;if((i|0)==10?(f=Xe(d,1)|0,f|0):0)break;f=Ye(d,e)|0;i=12}while(0);if((i|0)==12)if(!f){j=c[e+12>>2]|0;f=j+8|0;g=e+36|0;d=c[g>>2]|0;if((c[f>>2]|0)==(e|0))c[f>>2]=d;h=c[e+32>>2]|0;i=(h|0)==0;if(i){c[j+4>>2]=d;f=d}else{c[h+36>>2]=d;f=c[g>>2]|0}if(!f){c[j>>2]=h;if(i)a[j+33>>0]=2}else c[f+32>>2]=h;i=e+28|0;b[i>>1]=b[i>>1]&-16|1;if(b[e+30>>1]|0){e=0;return e|0}if(!(a[j+32>>0]|0)){e=0;return e|0}cb[c[29440>>2]&255](c[j+44>>2]|0,c[e>>2]|0,0);e=0;return e|0}switch((f&255)<<24>>24){case 10:case 13:break;default:{e=f;return e|0}}c[h>>2]=f;a[d+16>>0]=6;c[d+204>>2]=75;e=f;return e|0}function Ve(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+16|0;r=v;q=c[b+20>>2]|0;s=b+24|0;i=c[s>>2]|0;t=q+96|0;g=c[t>>2]|0;if((g|0)<=0){u=0;Ra=v;return u|0}u=q+92|0;m=c[u>>2]|0;n=i+-1|0;l=0;a:while(1){b:do if((c[m+(l*48|0)+20>>2]|0)>>>0>=i>>>0){h=c[m+(l*48|0)+16>>2]|0;e=c[h>>2]|0;if(n>>>0>=e>>>0)break a;f=c[h+8>>2]|0;if(!f)j=n;else{j=n;k=h;do{e=(j>>>0)/(f>>>0)|0;k=c[k+12+(e<<2)>>2]|0;if(!k)break a;j=j-(G(e,f)|0)|0;f=c[k+8>>2]|0}while((f|0)!=0);h=k;e=c[k>>2]|0}if(e>>>0<4001)if(!(1<<(j&7)&d[h+12+(j>>>3)>>0]))break a;else break;k=j+1|0;e=(j>>>0)%125|0;f=c[h+12+(e<<2)>>2]|0;if(!f)break a;while(1){if((f|0)==(k|0))break b;e=((e+1|0)>>>0)%125|0;f=c[h+12+(e<<2)>>2]|0;if(!f)break a}}while(0);l=l+1|0;if((l|0)>=(g|0)){e=0;p=35;break}}if((p|0)==35){Ra=v;return e|0}e=a[q+5>>0]|0;do if(e<<24>>24!=2){k=q+68|0;h=c[k>>2]|0;c:do if(!(c[h>>2]|0)){do if(e<<24>>24!=4?(o=c[7334]|0,(a[q+21>>0]|0)==0):0){e=c[q>>2]|0;f=h;g=f+72|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));if(o|0){g=o;f=(o|0)>0?o:1020;break}e=_a[c[e+24>>2]&127](e,0,h,8222,0)|0;if(!e)break c;Ra=v;return e|0}else p=22;while(0);if((p|0)==22){e=c[q>>2]|0;f=h;g=f+72|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));g=-1;f=1020}c[h+4>>2]=f;c[h>>2]=29896;c[h+8>>2]=g;c[h+56>>2]=8222;c[h+64>>2]=0;c[h+60>>2]=e}while(0);i=c[b+4>>2]|0;j=q+52|0;f=q+152|0;g=(c[f>>2]|0)+4|0;g=Yv(g|0,((g|0)<0)<<31>>31|0,c[j>>2]|0,0)|0;h=L()|0;e=c[k>>2]|0;q=c[s>>2]|0;a[r>>0]=q>>>24;a[r+1>>0]=q>>>16;a[r+2>>0]=q>>>8;a[r+3>>0]=q;e=_a[c[(c[e>>2]|0)+12>>2]&127](e,r,4,g,h)|0;if(e|0){u=e;Ra=v;return u|0}b=c[k>>2]|0;q=c[f>>2]|0;r=Sv(g|0,h|0,4,0)|0;e=L()|0;e=_a[c[(c[b>>2]|0)+12>>2]&127](b,i,q,r,e)|0;if(!e){e=j;g=c[t>>2]|0;i=c[s>>2]|0;break}else{u=e;Ra=v;return u|0}}else e=q+52|0;while(0);c[e>>2]=(c[e>>2]|0)+1;if((g|0)<=0){u=0;Ra=v;return u|0}e=0;h=0;while(1){f=c[u>>2]|0;if((c[f+(h*48|0)+20>>2]|0)>>>0<i>>>0)f=g;else{e=df(c[f+(h*48|0)+16>>2]|0,i)|0|e;f=c[t>>2]|0}h=h+1|0;if((h|0)>=(f|0))break;else g=f}Ra=v;return e|0}function We(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=Ra;Ra=Ra+48|0;sa=za+32|0;qa=za;k=za+36|0;c[k>>2]=f;R=(h|0)==0;if(!R){c[k>>2]=f;if(!f){ya=0;f=0}else{i=f;f=0;j=k;do{xa=(c[i+24>>2]|0)>>>0>g>>>0;ya=i+16|0;f=f+((xa^1)&1)|0;j=xa?j:ya;i=c[ya>>2]|0;c[j>>2]=i}while((i|0)!=0);ya=c[k>>2]|0}}else{ya=f;f=1}xa=e+192|0;c[xa>>2]=(c[xa>>2]|0)+f;if((c[ya+24>>2]|0)==1){va=c[ya+20>>2]|0;va=(d[va+105>>0]<<16|d[va+104>>0]<<24|d[va+106>>0]<<8|d[va+107>>0])+1|0;xa=ya+4|0;wa=c[xa>>2]|0;oa=va>>>24&255;a[wa+24>>0]=oa;ra=va>>>16&255;a[wa+25>>0]=ra;ua=va>>>8&255;a[wa+26>>0]=ua;va=va&255;a[wa+27>>0]=va;wa=c[xa>>2]|0;a[wa+92>>0]=oa;a[wa+93>>0]=ra;a[wa+94>>0]=ua;a[wa+95>>0]=va;xa=c[xa>>2]|0;a[xa+96>>0]=0;a[xa+97>>0]=46;a[xa+98>>0]=52;a[xa+99>>0]=32}wa=c[e+216>>2]|0;ua=c[e+152>>2]|0;U=d[e+11>>0]|0;va=wa+32|0;f=c[c[va>>2]>>2]|0;xa=wa+52|0;if(!(Lu(xa,f,48)|0))B=0;else B=(c[f+16>>2]|0)+1|0;o=wa+40|0;if(!(b[o>>1]|0)){a:do if(!(c[f+96>>2]|0)){l=wa+43|0;$=20}else{Fb(4,qa);k=wa+43|0;b:do if(!(a[k>>0]|0)){f=c[wa+4>>2]|0;f=Za[c[(c[f>>2]|0)+56>>2]&127](f,4,4,10)|0;switch(f|0){case 0:{$=15;break b}case 5:break b;default:{}}p=f;break a}else $=15;while(0);if(($|0)==15){m=c[qa>>2]|0;i=c[va>>2]|0;f=c[i>>2]|0;j=f+96|0;$=wa+84|0;oa=wa+112|0;c[oa>>2]=(c[oa>>2]|0)+1;c[wa+68>>2]=0;oa=$+1|0;ra=$+2|0;n=$+3|0;l=(d[oa>>0]<<16|d[$>>0]<<24|d[ra>>0]<<8|d[n>>0])+1|0;a[$>>0]=l>>>24;a[oa>>0]=l>>>16;a[ra>>0]=l>>>8;a[n>>0]=l;c[wa+88>>2]=m;i=c[i>>2]|0;a[wa+64>>0]=1;c[xa>>2]=3007e3;n=c[xa+4>>2]|0;l=n+6014e3+(c[xa+8>>2]|0)|0;n=n+3007e3+(c[xa+12>>2]|0)+l|0;l=n+l|0;n=n+(c[xa+20>>2]|0)+l|0;l=l+(c[xa+24>>2]|0)+n|0;n=n+(c[xa+28>>2]|0)+l|0;l=l+(c[xa+32>>2]|0)+n|0;c[wa+92>>2]=l;c[wa+96>>2]=n+m+l;l=i+48|0;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));if((a[k>>0]|0)!=2){ra=c[wa+4>>2]|0;ab[c[(c[ra>>2]|0)+60>>2]&127](ra)}l=i;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));c[j>>2]=0;c[f+128>>2]=0;c[f+104>>2]=0;c[f+108>>2]=-1;c[f+112>>2]=-1;c[f+116>>2]=-1;if(!(a[k>>0]|0)){ra=c[wa+4>>2]|0;Za[c[(c[ra>>2]|0)+56>>2]&127](ra,4,4,9)|0}}l=k;$=20}while(0);if(($|0)==20){if(!(a[l>>0]|0)){ra=c[wa+4>>2]|0;Za[c[(c[ra>>2]|0)+56>>2]&127](ra,3,1,5)|0}b[o>>1]=-1;f=0;do{f=f+1|0;i=gf(wa,qa,1,f)|0}while((i|0)==-1);p=i}if(p|0){g=p;Ra=za;return g|0}}ra=wa+68|0;l=c[ra>>2]|0;c:do if(!l){a[qa>>0]=55;a[qa+1>>0]=127;a[qa+2>>0]=6;a[qa+3>>0]=-126;f=qa+4|0;a[f>>0]=0;a[qa+5>>0]=45;a[qa+6>>0]=-30;a[qa+7>>0]=24;i=qa+8|0;a[i>>0]=ua>>>24;a[qa+9>>0]=ua>>>16;a[qa+10>>0]=ua>>>8;a[qa+11>>0]=ua;j=qa+12|0;oa=c[wa+112>>2]|0;a[j>>0]=oa>>>24;a[qa+13>>0]=oa>>>16;a[qa+14>>0]=oa>>>8;a[qa+15>>0]=oa;k=wa+84|0;if(!oa)Fb(8,k);oa=k;Y=c[oa>>2]|0;oa=c[oa+4>>2]|0;W=qa+16|0;c[W>>2]=Y;c[W+4>>2]=oa;W=c[qa>>2]|0;X=(c[f>>2]|0)+W|0;f=X+W+(c[i>>2]|0)|0;i=(c[j>>2]|0)+X+f|0;f=f+Y+i|0;i=i+oa+f|0;a[qa+24>>0]=f>>>24;a[qa+25>>0]=f>>>16;a[qa+26>>0]=f>>>8;a[qa+27>>0]=f;a[qa+28>>0]=i>>>24;a[qa+29>>0]=i>>>16;a[qa+30>>0]=i>>>8;a[qa+31>>0]=i;c[wa+36>>2]=ua;a[wa+65>>0]=0;c[wa+76>>2]=f;c[wa+80>>2]=i;a[wa+47>>0]=1;i=wa+8|0;f=c[i>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,qa,32,0,0)|0;do if(!f){if((a[wa+48>>0]|0?(q=c[i>>2]|0,r=U>>>2&3,r|0):0)?(s=Xa[c[(c[q>>2]|0)+20>>2]&255](q,r)|0,s|0):0){f=s;break}Y=i;break c}while(0);g=f;Ra=za;return g|0}else Y=wa+8|0;while(0);V=c[Y>>2]|0;W=ua+24|0;X=((W|0)<0)<<31>>31;i=Yv(l|0,0,W|0,X|0)|0;i=Sv(i|0,L()|0,32,0)|0;f=L()|0;oa=(ya|0)==0;d:do if(!oa){q=(B|0)==0;r=V;s=U&3;t=(s|0)==0;u=wa+104|0;v=((ua|0)<0)<<31>>31;p=ya;m=0;o=f;n=i;e:while(1){do if(q)$=47;else{j=p+16|0;if(!(R|(c[j>>2]|0)!=0)){K=0;S=l+1|0;$=49;break}c[qa>>2]=0;ef(wa,c[p+24>>2]|0,qa)|0;k=c[qa>>2]|0;if(k>>>0<B>>>0){$=47;break}f=Yv(k+-1|0,0,W|0,X|0)|0;f=Sv(f|0,L()|0,56,0)|0;i=L()|0;if(((c[u>>2]|0)+-1|0)>>>0>=k>>>0)c[u>>2]=k;C=c[Y>>2]|0;C=_a[c[(c[C>>2]|0)+12>>2]&127](C,c[p+4>>2]|0,ua,f,i)|0;if(C|0){$=45;break e}w=p+28|0;b[w>>1]=b[w>>1]&-65;w=l;x=m;y=j;z=n;A=o}while(0);if(($|0)==47){f=l+1|0;if(R){M=0;T=f;$=50}else{K=c[p+16>>2]|0;S=f;$=49}}if(($|0)==49){M=(K|0)==0?g:0;T=S;$=50}if(($|0)==50){$=0;m=c[p+4>>2]|0;mf(wa,c[p+24>>2]|0,M,m,qa);if(!(o>>>0<4294967295|(o|0)==-1&n>>>0<4294967272)){l=0-n|0;f=_a[c[(c[r>>2]|0)+12>>2]&127](r,qa,l,n,o)|0;if(f|0){E=f;$=63;break}f=Sv(n|0,o|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;j=n+24|0;if(t)k=0;else k=Xa[c[(c[r>>2]|0)+20>>2]&255](r,s)|0;if((j|0)!=0&(k|0)==0){H=j;J=qa+l|0;N=f;O=i;$=55}else F=k}else{H=24;J=qa;N=n;O=o;$=55}if(($|0)==55){$=0;F=_a[c[(c[r>>2]|0)+12>>2]&127](r,J,H,N,O)|0}if(F|0){E=F;$=63;break}f=Sv(n|0,o|0,24,0)|0;i=L()|0;Sv(f|0,i|0,ua|0,v|0)|0;if(!((o|0)>-1|(o|0)==-1&n>>>0>4294967271|(L()|0)<0)){l=-24-n|0;j=_a[c[(c[r>>2]|0)+12>>2]&127](r,m,l,f,i)|0;if(j|0){E=j;$=63;break}f=Sv(f|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;j=ua-l|0;if(t)k=0;else k=Xa[c[(c[r>>2]|0)+20>>2]&255](r,s)|0;if((j|0)!=0&(k|0)==0){G=j;I=m+l|0;P=f;Q=i;$=62}else D=k}else{G=ua;I=m;P=f;Q=i;$=62}if(($|0)==62){$=0;D=_a[c[(c[r>>2]|0)+12>>2]&127](r,I,G,P,Q)|0}f=p+28|0;if(D|0){da=D;$=127;break}z=Sv(n|0,o|0,W|0,X|0)|0;A=L()|0;b[f>>1]=b[f>>1]|64;w=T;x=p;y=p+16|0}p=c[y>>2]|0;if(!p){ma=w;ta=x;Z=z;_=A;break d}else{l=w;m=x;o=A;n=z}}if(($|0)==45){g=C;Ra=za;return g|0}else if(($|0)==63){g=E;Ra=za;return g|0}else if(($|0)==127){Ra=za;return da|0}}else{ma=l;ta=0;Z=i;_=f}while(0);A=(h|0)!=0;if(A){i=wa+104|0;if(c[i>>2]|0){m=(c[wa+36>>2]|0)+24|0;v=nb(m)|0;if(!v){g=7;Ra=za;return g|0}p=c[i>>2]|0;o=(p|0)==1;n=((m|0)<0)<<31>>31;p=Yv(p+-2|0,0,m|0,n|0)|0;p=Sv(p|0,L()|0,48,0)|0;f=L()|0;q=c[Y>>2]|0;f=_a[c[(c[q>>2]|0)+8>>2]&127](q,v,8,o?24:p,o?0:f)|0;o=v+1|0;p=v+2|0;q=v+3|0;c[wa+76>>2]=d[o>>0]<<16|d[v>>0]<<24|d[p>>0]<<8|d[q>>0];r=v+4|0;s=v+5|0;t=v+6|0;u=v+7|0;c[wa+80>>2]=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0];j=c[i>>2]|0;c[i>>2]=0;f:do if(!((f|0)!=0|j>>>0>ma>>>0)){l=v+24|0;do{i=Yv(j+-1|0,0,m|0,n|0)|0;i=Sv(i|0,L()|0,32,0)|0;k=L()|0;f=c[Y>>2]|0;f=_a[c[(c[f>>2]|0)+8>>2]&127](f,v,m,i,k)|0;if(f|0)break f;mf(wa,d[o>>0]<<16|d[v>>0]<<24|d[p>>0]<<8|d[q>>0],d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0],l,qa);f=c[Y>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,qa,24,i,k)|0;j=j+1|0}while(!(j>>>0>ma>>>0|(f|0)!=0))}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](v);else{T=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v)}if(f|0){g=f;Ra=za;return g|0}}z=U&3;do if(!z){i=0;k=0}else{if(a[wa+49>>0]|0){f=c[Y>>2]|0;i=c[(c[f>>2]|0)+44>>2]|0;if(!i){f=4096;i=0}else{i=Wa[i&127](f)|0;U=(i|0)<32;i=(i|0)<65536?i:65536;f=U?512:i;i=U?0:((i|0)<0)<<31>>31}y=Sv(Z|0,_|0,-1,-1)|0;y=Sv(y|0,L()|0,f|0,i|0)|0;v=L()|0;u=Zv(y|0,v|0,f|0,i|0)|0;u=Tv(y|0,v|0,u|0,L()|0)|0;v=L()|0;y=(u|0)==(Z|0)&(v|0)==(_|0);g:do if((v|0)>(_|0)|(v|0)==(_|0)&u>>>0>Z>>>0){s=ta+4|0;t=ta+24|0;w=V;x=((ua|0)<0)<<31>>31;k=0;r=Z;q=_;while(1){p=c[s>>2]|0;mf(wa,c[t>>2]|0,g,p,qa);n=Sv(r|0,q|0,24,0)|0;o=L()|0;if(!((v|0)>(o|0)|(v|0)==(o|0)&u>>>0>n>>>0)){m=Tv(u|0,v|0,r|0,q|0)|0;L()|0;f=_a[c[(c[w>>2]|0)+12>>2]&127](w,qa,m,r,q)|0;if(f|0){ba=f;break}f=Sv(r|0,q|0,m|0,((m|0)<0)<<31>>31|0)|0;i=L()|0;j=24-m|0;l=Xa[c[(c[w>>2]|0)+20>>2]&255](w,z)|0;if((j|0)!=0&(l|0)==0){fa=j;ha=qa+m|0;ia=f;ja=i;$=89}else ca=l}else{fa=24;ha=qa;ia=r;ja=q;$=89}if(($|0)==89){$=0;ca=_a[c[(c[w>>2]|0)+12>>2]&127](w,ha,fa,ia,ja)|0}if(ca|0){ba=ca;break}_=Sv(n|0,o|0,ua|0,x|0)|0;Z=L()|0;if(!((v|0)<(o|0)|(v|0)==(o|0)&u>>>0<=n>>>0|((Z|0)<(v|0)|(Z|0)==(v|0)&_>>>0<u>>>0))){m=Tv(u|0,v|0,n|0,o|0)|0;L()|0;f=_a[c[(c[w>>2]|0)+12>>2]&127](w,p,m,n,o)|0;if(f|0){ba=f;break}f=Sv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;i=L()|0;j=ua-m|0;l=Xa[c[(c[w>>2]|0)+20>>2]&255](w,z)|0;if((j|0)!=0&(l|0)==0){ea=j;ga=p+m|0;ka=f;la=i;$=94}else aa=l}else{ea=ua;ga=p;ka=n;la=o;$=94}if(($|0)==94){$=0;aa=_a[c[(c[w>>2]|0)+12>>2]&127](w,ga,ea,ka,la)|0}if(aa|0){da=aa;$=127;break}r=Sv(r|0,q|0,W|0,X|0)|0;q=L()|0;k=k+1|0;if(!((v|0)>(q|0)|(v|0)==(q|0)&u>>>0>r>>>0))break g}if(($|0)==127){Ra=za;return da|0}g=ba;Ra=za;return g|0}else k=0;while(0);if(!y){i=0;break}}else k=0;i=V;i=Xa[c[(c[i>>2]|0)+20>>2]&255](i,z)|0}while(0);m=wa+47|0;if((a[m>>0]|0)!=0?(pa=wa+16|0,na=c[pa>>2]|0,pa=c[pa+4>>2]|0,(pa|0)>-1|(pa|0)==-1&na>>>0>4294967295):0){l=Yv(k+ma|0,0,W|0,X|0)|0;l=Sv(l|0,L()|0,32,0)|0;j=L()|0;f=(j|0)>(pa|0)|(j|0)==(pa|0)&l>>>0>na>>>0;l=f?l:na;j=f?j:pa;f=c[Y>>2]|0;f=Xa[c[(c[f>>2]|0)+24>>2]&255](f,qa)|0;pa=c[qa+4>>2]|0;if((f|0)==0&((pa|0)>(j|0)|((pa|0)==(j|0)?(c[qa>>2]|0)>>>0>l>>>0:0))){f=c[Y>>2]|0;f=Ya[c[(c[f>>2]|0)+16>>2]&127](f,l,j)|0}if(f|0){c[sa>>2]=c[wa+108>>2];Db(f,32326,sa)}a[m>>0]=0}}else{i=0;k=0}f=c[ra>>2]|0;if((ya|0)!=0&(i|0)==0){l=ya;do{j=f+1|0;if(!(b[l+28>>1]&64))i=0;else{i=ff(wa,j,c[l+24>>2]|0)|0;f=j}l=c[l+16>>2]|0}while((i|0)==0&(l|0)!=0)}j=(i|0)==0;if((k|0)>0&j){l=ta+24|0;while(1){f=f+1|0;i=ff(wa,f,c[l>>2]|0)|0;j=(i|0)==0;if((k|0)>1&j)k=k+-1|0;else{k=f;break}}}else k=f;if(j){b[wa+66>>1]=ua&65280|ua>>>16;c[ra>>2]=k;if(A){f=wa+60|0;m=c[f>>2]|0;c[f>>2]=m+1;c[wa+72>>2]=g;f=c[c[va>>2]>>2]|0;a[wa+64>>0]=1;c[xa>>2]=3007e3;l=c[xa+4>>2]|0;m=m+6014001+l|0;l=l+3007e3+(c[xa+12>>2]|0)+m|0;m=m+k+l|0;l=l+g+m|0;m=m+(c[xa+24>>2]|0)+l|0;l=l+(c[xa+28>>2]|0)+m|0;m=m+(c[xa+32>>2]|0)+l|0;l=l+(c[xa+36>>2]|0)+m|0;c[wa+92>>2]=m;c[wa+96>>2]=l;l=f+48|0;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));if((a[wa+43>>0]|0)!=2){g=c[wa+4>>2]|0;ab[c[(c[g>>2]|0)+60>>2]&127](g)}l=f;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));c[wa+12>>2]=k}}else if(i|0){g=i;Ra=za;return g|0}j=e+88|0;i=c[j>>2]|0;if((i|0)==0|oa){g=0;Ra=za;return g|0}f=ya;while(1){if(i|0)nf(i,c[f+24>>2]|0,c[f+4>>2]|0);f=c[f+16>>2]|0;if(!f){da=0;break}i=c[j>>2]|0}Ra=za;return da|0}function Xe(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+32|0;l=t+16|0;p=t;f=c[d+40>>2]|0;if(f|0){d=f;Ra=t;return d|0}a:do if(!(c[d+216>>2]|0)){k=d+17|0;g=d+13|0;h=d+60|0;i=d+176|0;j=d+180|0;b:while(1){switch(a[k>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:break a}if(a[g>>0]|0){g=7;break}f=c[h>>2]|0;f=Xa[c[(c[f>>2]|0)+28>>2]&255](f,4)|0;switch(f|0){case 0:{g=7;break b}case 5:break;default:{g=36;break b}}if(!(Wa[c[i>>2]&127](c[j>>2]|0)|0)){f=5;g=36;break}}if((g|0)==7){a[k>>0]=4;break}else if((g|0)==36){Ra=t;return f|0}}while(0);do if(!(a[d+7>>0]|0)){j=d+64|0;if(c[c[j>>2]>>2]|0?(a[d+5>>0]|0)!=4:0){i=c[d+60>>2]|0;i=Wa[c[(c[i>>2]|0)+48>>2]&127](i)|0;k=(i&512|0)==0;c:do if(k){g=p;c[g>>2]=-117058087;c[g+4>>2]=-681336544;g=c[d+44>>2]|0;a[p+8>>0]=g>>>24;a[p+9>>0]=g>>>16;a[p+10>>0]=g>>>8;a[p+11>>0]=g;g=d+72|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((f|0)==0&(g|0)==0){g=0;h=0}else{f=Sv(f|0,g|0,-1,-1)|0;h=L()|0;g=c[d+148>>2]|0;h=Wv(f|0,h|0,g|0,0)|0;h=Sv(h|0,L()|0,1,0)|0;g=Yv(h|0,L()|0,g|0,0)|0;h=L()|0}f=c[j>>2]|0;f=_a[c[(c[f>>2]|0)+8>>2]&127](f,l,8,g,h)|0;if(!f)if(!(Lu(l,32352,8)|0)){f=c[j>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,59953,1,g,h)|0;g=19}else g=20;else g=19;if((g|0)==19)switch(f|0){case 0:case 522:{g=20;break}default:{}}do if((g|0)==20){g=i&1024;if(((g|0)==0&(a[d+8>>0]|0)!=0?(m=c[j>>2]|0,n=a[d+10>>0]|0,n<<24>>24):0)?(o=Xa[c[(c[m>>2]|0)+20>>2]&255](m,n&255)|0,o|0):0){f=o;break}o=c[j>>2]|0;f=d+80|0;f=_a[c[(c[o>>2]|0)+12>>2]&127](o,p,12,c[f>>2]|0,c[f+4>>2]|0)|0;if(!f){f=g;break c}}while(0);d=f;Ra=t;return d|0}else f=i&1024;while(0);if(((f|0)==0?(q=c[j>>2]|0,r=a[d+10>>0]|0,r=(r<<24>>24==3?16:0)|r&255,r|0):0)?(s=Xa[c[(c[q>>2]|0)+20>>2]&255](q,r)|0,s|0):0){d=s;Ra=t;return d|0}q=d+72|0;r=c[q+4>>2]|0;s=d+80|0;c[s>>2]=c[q>>2];c[s+4>>2]=r;if((e|0)==0|k^1)break;c[d+44>>2]=0;f=of(d)|0;if(!f)break;Ra=t;return f|0}q=d+72|0;r=c[q+4>>2]|0;s=d+80|0;c[s>>2]=c[q>>2];c[s+4>>2]=r}while(0);g=c[d+212>>2]|0;f=c[g>>2]|0;if(f|0)do{s=f+28|0;b[s>>1]=b[s>>1]&-9;f=c[f+32>>2]|0}while((f|0)!=0);c[g+8>>2]=c[g+4>>2];a[d+16>>0]=4;d=0;Ra=t;return d|0}function Ye(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=Ra;Ra=Ra+16|0;l=t;s=e+60|0;h=c[s>>2]|0;if((c[h>>2]|0)==0?(g=c[e>>2]|0,g=_a[c[g+24>>2]&127](g,0,h,c[e+144>>2]&556897|30,0)|0,g|0):0){s=g;Ra=t;return s|0}k=e+36|0;h=c[k>>2]|0;j=e+24|0;g=c[j>>2]|0;do if(h>>>0<g>>>0){if((c[f+16>>2]|0)==0?(c[f+24>>2]|0)>>>0<=h>>>0:0)break;r=c[e+152>>2]|0;r=Yv(r|0,((r|0)<0)<<31>>31|0,g|0,0)|0;i=L()|0;h=l;c[h>>2]=r;c[h+4>>2]=i;h=c[s>>2]|0;i=c[h>>2]|0;if(i){Ya[c[i+40>>2]&127](h,5,l)|0;g=c[j>>2]|0}c[k>>2]=g}while(0);if(!f){s=0;Ra=t;return s|0}n=e+24|0;o=e+152|0;p=e+104|0;q=e+32|0;r=e+192|0;m=e+88|0;do{e=c[f+24>>2]|0;if(e>>>0<=(c[n>>2]|0)>>>0?(b[f+28>>1]&16)==0:0){g=c[o>>2]|0;h=Yv(g|0,((g|0)<0)<<31>>31|0,e+-1|0,0)|0;i=L()|0;j=(e|0)==1;if(j){k=c[f+20>>2]|0;k=((d[k+105>>0]|0)<<16|(d[k+104>>0]|0)<<24|(d[k+106>>0]|0)<<8|(d[k+107>>0]|0))+1|0;l=f+4|0;g=c[l>>2]|0;w=k>>>24&255;a[g+24>>0]=w;v=k>>>16&255;a[g+25>>0]=v;u=k>>>8&255;a[g+26>>0]=u;k=k&255;a[g+27>>0]=k;g=c[l>>2]|0;a[g+92>>0]=w;a[g+93>>0]=v;a[g+94>>0]=u;a[g+95>>0]=k;g=c[l>>2]|0;a[g+96>>0]=0;a[g+97>>0]=46;a[g+98>>0]=52;a[g+99>>0]=32;g=c[o>>2]|0}else l=f+4|0;k=c[l>>2]|0;w=c[s>>2]|0;g=_a[c[(c[w>>2]|0)+12>>2]&127](w,k,g,h,i)|0;if(j){j=p;h=k+24|0;i=j+16|0;do{a[j>>0]=a[h>>0]|0;j=j+1|0;h=h+1|0}while((j|0)<(i|0))}if(e>>>0>(c[q>>2]|0)>>>0)c[q>>2]=e;c[r>>2]=(c[r>>2]|0)+1;h=c[m>>2]|0;if(h)nf(h,e,c[l>>2]|0)}else g=0;f=c[f+16>>2]|0}while((g|0)==0&(f|0)!=0);Ra=t;return g|0}function Ze(a){a=a|0;var b=0,d=0,e=0;d=a+16|0;a=c[d>>2]|0;if(!a){c[d>>2]=0;return 0}do{b=a;a=c[a>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}}while((a|0)!=0);c[d>>2]=0;return 0}function _e(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=a+40|0;k=l;a:do if((e|0)==0&(f|0)==0|((c[k>>2]|0)!=(e|0)?1:(c[k+4>>2]|0)!=(f|0))){g=c[a+16>>2]|0;if(!g)g=0;else{j=c[a+4>>2]|0;k=((j|0)<0)<<31>>31;h=0;i=0;while(1){h=Sv(h|0,i|0,j|0,k|0)|0;i=L()|0;if((i|0)>(f|0)|(i|0)==(f|0)&h>>>0>e>>>0)break a;g=c[g>>2]|0;if(!g){g=0;break}}}}else g=c[a+48>>2]|0;while(0);k=a+4|0;i=c[k>>2]|0;j=Zv(e|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0;i=i-j|0;h=(i|0)>(d|0)?d:i;ew(b|0,g+4+j|0,h|0)|0;i=d-i|0;b:do if((i|0)>-1){j=b;do{g=c[g>>2]|0;if(!((i|0)!=0&(g|0)!=0))break b;j=j+h|0;b=c[k>>2]|0;h=(i|0)<(b|0)?i:b;ew(j|0,g+4|0,h|0)|0;i=i-b|0}while((i|0)>-1)}while(0);b=(g|0)==0;e=Sv(d|0,((d|0)<0)<<31>>31|0,e|0,f|0)|0;f=L()|0;c[l>>2]=b?0:e;c[l+4>>2]=b?0:f;c[a+48>>2]=g;return 0}function $e(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;I=Ra;Ra=Ra+32|0;G=I;H=a+8|0;g=c[H>>2]|0;if((g|0)>0?(F=Sv(d|0,((d|0)<0)<<31>>31|0,e|0,f|0)|0,D=L()|0,E=((g|0)<0)<<31>>31,(D|0)>(E|0)|(D|0)==(E|0)&F>>>0>g>>>0):0){m=c[a>>2]|0;t=a+4|0;u=c[t>>2]|0;D=H;C=c[D>>2]|0;D=c[D+4>>2]|0;v=a+16|0;g=c[v>>2]|0;w=a+20|0;x=c[w>>2]|0;y=a+24|0;F=y;E=c[F>>2]|0;F=c[F+4>>2]|0;z=a+32|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[G+16>>2]=c[z+16>>2];c[G+20>>2]=c[z+20>>2];A=a+56|0;B=c[A>>2]|0;n=a+60|0;o=c[n>>2]|0;p=a+64|0;q=c[p>>2]|0;r=a+68|0;s=c[r>>2]|0;h=a;i=h+72|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));h=_a[c[o+24>>2]&127](o,q,a,B&556927,0)|0;a:do if(!h){if(g|0){i=u;j=g;k=0;l=0;do{J=Sv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;K=L()|0;h=Tv(E|0,F|0,k|0,l|0)|0;L()|0;i=(K|0)>(F|0)|(K|0)==(F|0)&J>>>0>E>>>0?h:i;h=_a[c[(c[a>>2]|0)+12>>2]&127](a,j+4|0,i,k,l)|0;if(h|0){i=a;break a}k=Sv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;l=L()|0;j=c[j>>2]|0}while((j|0)!=0);do{h=g;g=c[g>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0)}K=_a[c[(c[a>>2]|0)+12>>2]&127](a,b,d,e,f)|0;Ra=I;return K|0}else i=a;while(0);j=c[i>>2]|0;if(j|0){Wa[c[j+4>>2]&127](a)|0;c[i>>2]=0}c[a>>2]=m;c[t>>2]=u;K=H;c[K>>2]=C;c[K+4>>2]=D;c[v>>2]=g;c[w>>2]=x;K=y;c[K>>2]=E;c[K+4>>2]=F;c[z>>2]=c[G>>2];c[z+4>>2]=c[G+4>>2];c[z+8>>2]=c[G+8>>2];c[z+12>>2]=c[G+12>>2];c[z+16>>2]=c[G+16>>2];c[z+20>>2]=c[G+20>>2];c[A>>2]=B;c[n>>2]=o;c[p>>2]=q;c[r>>2]=s;K=h;Ra=I;return K|0}b:do if((d|0)>0){m=a+24|0;n=a+32|0;o=a+4|0;p=a+16|0;i=m;l=d;h=c[i>>2]|0;i=c[i+4>>2]|0;while(1){g=c[n>>2]|0;j=c[o>>2]|0;i=Zv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0;k=j-i|0;k=(l|0)<(k|0)?l:k;if(!i){h=nb(j+4|0)|0;if(!h){g=3082;break}c[h>>2]=0;if(!g)c[p>>2]=h;else c[g>>2]=h;c[n>>2]=h;g=h}ew(g+4+i|0,b|0,k|0)|0;l=l-k|0;h=m;h=Sv(c[h>>2]|0,c[h+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;i=L()|0;K=m;c[K>>2]=h;c[K+4>>2]=i;if((l|0)<=0)break b;else b=b+k|0}Ra=I;return g|0}while(0);c[a+12>>2]=e+d;K=0;Ra=I;return K|0}function af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((b|0)==0&(d|0)==0))return 0;e=a+16|0;b=c[e>>2]|0;if(b|0)do{d=b;b=c[b>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{f=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0);c[e>>2]=0;c[a+12>>2]=0;c[a+32>>2]=0;f=a+24|0;c[f>>2]=0;c[f+4>>2]=0;c[a+48>>2]=0;f=a+40|0;c[f>>2]=0;c[f+4>>2]=0;return 0}function bf(a,b){a=a|0;b=b|0;return 0}function cf(a,b){a=a|0;b=b|0;var d=0;d=a+24|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function df(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!b){m=0;return m|0}e=e+-1|0;a:do if((c[b>>2]|0)>>>0>4e3){l=b;j=b;while(1){i=c[l+8>>2]|0;if(!i)break;h=(e>>>0)/(i>>>0)|0;e=e-(G(h,i)|0)|0;h=l+12+(h<<2)|0;b=c[h>>2]|0;if(!b){if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](512)|0;if(!b){m=17;break}}else{b=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){l=c[14978]|0;k=Tv(f|0,g|0,b|0,((b|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=l>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){m=17;break}f=Wa[c[29352>>2]&127](b)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(b+4|0,0,508)|0;c[b>>2]=i;c[h>>2]=b}if((c[b>>2]|0)>>>0>4e3){l=b;j=b}else break a}if((m|0)==17){c[h>>2]=0;m=7;return m|0}i=l+8|0;k=e+1|0;b=(e>>>0)%125|0;h=l+12|0;f=l+12+(b<<2)|0;e=c[f>>2]|0;if(!e){b=l+4|0;e=c[b>>2]|0;if(e>>>0<124)m=46}else{f=b;do{if((e|0)==(k|0)){e=0;m=47;break}e=f+1|0;f=e>>>0>124?0:e;e=c[l+12+(f<<2)>>2]|0}while((e|0)!=0);if((m|0)==47)return e|0;b=l+4|0;e=c[b>>2]|0;if(e>>>0<=61){f=l+12+(f<<2)|0;m=46}}if((m|0)==46){c[b>>2]=e+1;c[f>>2]=k;m=0;return m|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](500)|0;if(!e){m=7;return m|0}else g=e}else{b=Wa[c[29356>>2]&127](500)|0;if((c[14985]|0)>>>0<500)c[14985]=500;e=59064;f=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&f>>>0>0){m=c[14978]|0;g=Tv(f|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=m>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){m=7;return m|0}e=Wa[c[29352>>2]&127](b)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0){c[14987]=e;g=b}else g=b}ew(g|0,h|0,500)|0;gw(h|0,0,500)|0;c[i>>2]=(((c[j>>2]|0)+124|0)>>>0)/125|0;e=df(l,k)|0;f=0;do{b=c[g+(f<<2)>>2]|0;if(b)e=df(l,b)|0|e;f=f+1|0}while((f|0)!=125);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);m=e;return m|0}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);m=e;return m|0}}while(0);m=b+12+(e>>>3)|0;a[m>>0]=1<<(e&7)|(d[m>>0]|0);m=0;return m|0}function ef(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+32|0;A=C;x=C+12|0;z=c[d+68>>2]|0;do if(z|0){if((b[d+40>>1]|0)==0?(a[d+50>>0]|0)==0:0)break;r=d+100|0;s=((c[r>>2]|0)+33|0)>>>12;h=(z+33|0)>>>12;a:do if(h>>>0<s>>>0)h=0;else{t=x+4|0;u=d+24|0;v=d+32|0;w=x+8|0;q=f*383&8191;p=h;b:while(1){if((c[u>>2]|0)>(p|0)?(y=c[(c[v>>2]|0)+(p<<2)>>2]|0,c[t>>2]=y,(y|0)!=0):0)h=y;else{h=kf(d,p,t)|0;if(h|0)break;h=c[t>>2]|0}n=h+16384|0;c[x>>2]=n;if(!p){h=h+136|0;c[t>>2]=h;o=0}else o=(p<<12)+-34|0;c[w>>2]=o;m=h+-4|0;c[t>>2]=m;i=n+(q<<1)|0;if(b[i>>1]|0){k=8192;l=q;h=0;while(1){j=o+(e[i>>1]|0)|0;if(j>>>0<=z>>>0?j>>>0>=(c[r>>2]|0)>>>0:0)h=(c[m+(e[i>>1]<<2)>>2]|0)==(f|0)?j:h;if(!k){B=22;break b}l=l+1&8191;i=n+(l<<1)|0;if(!(b[i>>1]|0))break;else k=k+-1|0}if(h|0)break a}if((p|0)>(s|0))p=p+-1|0;else{h=0;break a}}if((B|0)==22){c[A>>2]=32306;c[A+4>>2]=61232;c[A+8>>2]=31517;Db(11,32001,A);h=11}B=h;Ra=C;return B|0}while(0);c[g>>2]=h;B=0;Ra=C;return B|0}while(0);c[g>>2]=0;B=0;Ra=C;return B|0}function ff(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+48|0;r=s;p=s+24|0;l=s+12|0;j=d+33|0;k=j>>>12;m=l+4|0;n=a+24|0;if(!((c[n>>2]|0)>(k|0)?(g=c[(c[a+32>>2]|0)+(k<<2)>>2]|0,c[m>>2]=g,(g|0)!=0):0))i=3;do if((i|0)==3){g=kf(a,k,m)|0;if(!g){g=c[m>>2]|0;break}else{f=g;Ra=s;return f|0}}while(0);q=g+16384|0;c[l>>2]=q;if(!k){k=g+136|0;c[m>>2]=k;i=0}else{i=(j&-4096)+-34|0;k=g}c[l+8>>2]=i;j=k+-4|0;c[m>>2]=j;o=d-i|0;if((o|0)==1)gw(k|0,0,g+32768-k|0)|0;m=j+(o<<2)|0;if(c[m>>2]|0){d=a+68|0;g=c[d>>2]|0;do if(g|0){g=g+33|0;i=g>>>12;k=p+4|0;if(!((c[n>>2]|0)>(i|0)?(h=c[(c[a+32>>2]|0)+(i<<2)>>2]|0,c[k>>2]=h,(h|0)!=0):0)){if(kf(a,i,k)|0)break;h=c[k>>2]|0}l=h+16384|0;c[p>>2]=l;if(!i){j=h+136|0;c[k>>2]=j;g=0}else{g=(g&-4096)+-34|0;j=h}c[p+8>>2]=g;c[k>>2]=j+-4;h=(c[d>>2]|0)-g|0;g=0;do{i=l+(g<<1)|0;if((h|0)<(e[i>>1]|0))b[i>>1]=0;g=g+1|0}while((g|0)!=8192);p=j+(h<<2)|0;gw(p|0,0,l-p|0)|0}while(0)}h=f*383&8191;g=q+(h<<1)|0;a:do if(b[g>>1]|0){i=o;while(1){if(!i)break;h=h+1&8191;g=q+(h<<1)|0;if(!(b[g>>1]|0))break a;else i=i+-1|0}c[r>>2]=32306;c[r+4>>2]=59401;c[r+8>>2]=31517;Db(11,32001,r);f=11;Ra=s;return f|0}while(0);c[m>>2]=f;b[g>>1]=o;f=0;Ra=s;return f|0}function gf(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+64|0;u=A+32|0;k=A;j=A+48|0;v=A+44|0;w=A+40|0;do if((h|0)>5)if((h|0)>100){d=15;Ra=A;return d|0}else{z=h+-9|0;z=G(z*39|0,z)|0;y=c[d>>2]|0;Xa[c[y+60>>2]&255](y,(h|0)>9?z:1)|0;break}while(0);a:do if(!g){z=d+50|0;if(!(a[z>>0]|0)){g=hf(d,f)|0;b:do if((g|0)==5){if(!(c[c[d+32>>2]>>2]|0)){d=-1;Ra=A;return d|0}h=d+43|0;if(a[h>>0]|0){d=-1;Ra=A;return d|0}i=d+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,2,1,6)|0;switch(g|0){case 0:break;case 5:{d=261;Ra=A;return d|0}default:break b}if(a[h>>0]|0){d=-1;Ra=A;return d|0}d=c[i>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,2,1,5)|0;d=-1;Ra=A;return d|0}while(0);if(g|0){d=g;Ra=A;return d|0}if(!(a[z>>0]|0)){j=d+32|0;m=(c[c[j>>2]>>2]|0)+96|0;l=d+52|0;h=d+68|0;if((c[m>>2]|0)!=(c[h>>2]|0)){g=0;break}k=d+43|0;i=a[k>>0]|0;if(!(i<<24>>24)){g=c[d+4>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,3,1,6)|0;i=a[k>>0]|0}else g=0;if(i<<24>>24!=2){f=c[d+4>>2]|0;ab[c[(c[f>>2]|0)+60>>2]&127](f)}switch(g|0){case 5:break a;case 0:break;default:{d=g;Ra=A;return d|0}}if(!(Lu(c[c[j>>2]>>2]|0,l,48)|0)){b[d+40>>1]=0;d=0;Ra=A;return d|0}if(a[k>>0]|0){d=-1;Ra=A;return d|0}d=c[d+4>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,3,1,5)|0;d=-1;Ra=A;return d|0}}x=d+43|0;y=d+4|0;if(!(a[x>>0]|0)){g=c[y>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,3,1,6)|0;switch(g|0){case 0:{t=17;break}case 5:{g=-1;t=35;break}default:t=34}}else t=17;c:do if((t|0)==17){b[d+40>>1]=0;g=c[y>>2]|0;g=_a[c[(c[g>>2]|0)+52>>2]&127](g,0,32768,0,j)|0;switch(g|0){case 8:{g=-1;t=35;break c}case 1288:break;default:{t=34;break c}}g=d+52|0;h=c[c[d+32>>2]>>2]|0;i=g+48|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(i|0));t=d+8|0;g=c[t>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,u)|0;if(!g){s=u;r=c[s+4>>2]|0;if((r|0)<0|(r|0)==0&(c[s>>2]|0)>>>0<32){c[f>>2]=1;g=((c[d+68>>2]|0)!=0)<<31>>31;t=34;break}g=c[t>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,k,32,0,0)|0;if(!g)if(!(Lu(d+84|0,k+16|0,8)|0)){g=d+66|0;n=(e[g>>1]|0)+24|0;o=pb(n,0)|0;if(o){m=o+24|0;p=d+76|0;q=c[p>>2]|0;r=d+80|0;s=c[r>>2]|0;i=Yv((e[g>>1]|0)+24|0,0,c[d+68>>2]|0,0)|0;i=Sv(i|0,L()|0,32,0)|0;j=L()|0;g=Sv(i|0,j|0,n|0,0)|0;h=L()|0;l=u;k=c[l+4>>2]|0;d:do if((h|0)>(k|0)|((h|0)==(k|0)?g>>>0>(c[l>>2]|0)>>>0:0))g=0;else{l=g;k=h;h=i;g=j;while(1){j=c[t>>2]|0;g=_a[c[(c[j>>2]|0)+8>>2]&127](j,o,n,h,g)|0;if(g|0)break;if(!(lf(d,v,w,m,o)|0)){g=0;break}if(c[w>>2]|0){g=-1;break d}g=Sv(l|0,k|0,n|0,0)|0;h=L()|0;j=u;i=c[j+4>>2]|0;if((h|0)>(i|0)|((h|0)==(i|0)?g>>>0>(c[j>>2]|0)>>>0:0)){g=0;break d}else{i=k;j=l;l=g;k=h;g=i;h=j}}}while(0);c[p>>2]=q;c[r>>2]=s;if(!(c[7324]|0)){ab[c[29344>>2]&127](o);t=34;break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);t=34;break}}else{g=7;t=35}}else{g=-1;t=35}else t=35}else t=35}while(0);if((t|0)==34)if(!g)g=0;else t=35;if((t|0)==35){i=d+24|0;if((c[i>>2]|0)>0){j=d+32|0;h=0;do{k=c[(c[j>>2]|0)+(h<<2)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[(c[j>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)<(c[i>>2]|0))}a[z>>0]=0;h=d+44|0;if(a[h>>0]|0){if(!(a[x>>0]|0)){z=c[y>>2]|0;Za[c[(c[z>>2]|0)+56>>2]&127](z,0,1,9)|0}a[h>>0]=0;c[d+104>>2]=0;a[d+47>>0]=0}h=d+40|0;i=b[h>>1]|0;if(i<<16>>16>-1){if(!(a[x>>0]|0)){d=c[y>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,(i<<16>>16)+3|0,1,5)|0}b[h>>1]=-1}c[f>>2]=1}d=g;Ra=A;return d|0}else{g=0;l=d+52|0;h=d+68|0;m=(c[c[d+32>>2]>>2]|0)+96|0}while(0);s=c[h>>2]|0;i=m+8|0;o=c[i>>2]|0;k=o>>>0>s>>>0;o=k?0:o;n=m+12|0;p=c[n>>2]|0;y=o>>>0>p>>>0|p>>>0>s>>>0;p=y?o:p;o=m+16|0;f=c[o>>2]|0;x=p>>>0>f>>>0|f>>>0>s>>>0;f=x?p:f;p=m+20|0;j=c[p>>2]|0;z=f>>>0>j>>>0|j>>>0>s>>>0;k=z?(x?(y?(k^1)&1:2):3):4;j=z?f:j;e:do if(!(a[d+46>>0]&2)){if((k|0)==0|j>>>0<s>>>0){q=d+43|0;r=d+4|0;f:do if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,4,1,10)|0;switch(g|0){case 0:{k=1;h=4;g=i;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,5,1,10)|0;switch(g|0){case 0:{k=2;h=5;g=n;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,6,1,10)|0;switch(g|0){case 0:{k=3;h=6;g=o;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,7,1,10)|0;switch(g|0){case 5:{t=69;break e}case 0:{k=4;h=7;g=p;break f}default:{}}Ra=A;return g|0}else{k=4;h=7;g=p}}else{k=3;h=6;g=o}}else{k=2;h=5;g=n}}else{k=1;h=4;g=i}while(0);c[g>>2]=s;if(!(a[q>>0]|0)){j=c[r>>2]|0;Za[c[(c[j>>2]|0)+56>>2]&127](j,h,1,9)|0;j=s}else j=s}}else t=69;while(0);if((t|0)==69)if(!k){d=(g|0)==5?-1:1288;Ra=A;return d|0}h=k+3|0;i=d+43|0;g=a[i>>0]|0;do if(!(g<<24>>24)){g=c[d+4>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,h,1,6)|0;if(!g){g=a[i>>0]|0;break}d=(g|0)==5?-1:g;Ra=A;return d|0}while(0);c[d+100>>2]=(c[m>>2]|0)+1;if(g<<24>>24!=2){f=c[d+4>>2]|0;ab[c[(c[f>>2]|0)+60>>2]&127](f)}if((c[m+4+(k<<2)>>2]|0)==(j|0)?(Lu(c[c[d+32>>2]>>2]|0,l,48)|0)==0:0){b[d+40>>1]=k;d=0;Ra=A;return d|0}if(a[i>>0]|0){d=-1;Ra=A;return d|0}d=c[d+4>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,h,1,5)|0;d=-1;Ra=A;return d|0}function hf(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0;O=Ra;Ra=Ra+96|0;K=O+64|0;G=O+56|0;p=O+40|0;B=O+32|0;m=O;C=O+84|0;D=O+80|0;j=O+76|0;N=e+24|0;if((c[N>>2]|0)>0?(M=c[c[e+32>>2]>>2]|0,c[j>>2]=M,(M|0)!=0):0){g=0;M=6}else{g=kf(e,0,j)|0;switch(g|0){case 0:break;case 1288:{a[e+50>>0]=1;a[e+43>>0]=2;c[f>>2]=1;break}default:{N=g;Ra=O;return N|0}}if(!(c[j>>2]|0)){h=1;M=7}else M=6}if((M|0)==6){h=jf(e,f)|0;if(!h)M=67;else M=7}do if((M|0)==7){if((a[e+50>>0]|0)==0?a[e+46>>0]&2:0){h=e+43|0;if(a[h>>0]|0){g=264;break}i=e+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,0,1,6)|0;if(g|0)break;if(a[h>>0]|0){g=264;break}g=c[i>>2]|0;Za[c[(c[g>>2]|0)+56>>2]&127](g,0,1,5)|0;g=264;break}I=e+43|0;if((a[I>>0]|0)==0?(i=c[e+4>>2]|0,i=Za[c[(c[i>>2]|0)+56>>2]&127](i,0,1,10)|0,i|0):0){g=i;break}H=e+44|0;a[H>>0]=1;if((c[N>>2]|0)>0?(F=c[c[e+32>>2]>>2]|0,c[j>>2]=F,(F|0)!=0):0)M=18;else{g=kf(e,0,j)|0;if(!g)M=18}if((M|0)==18){h=jf(e,f)|0;if(!h){h=0;g=0}else{F=d[e+45>>0]|0;E=F+1|0;F=2-F|0;if(!(a[I>>0]|0)){i=e+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,E,F,10)|0;if(!g)if((a[I>>0]|0)==0?(k=c[i>>2]|0,k=Za[c[(c[k>>2]|0)+56>>2]&127](k,4,4,10)|0,(k|0)!=0):0)if(!(a[I>>0]|0)){g=c[i>>2]|0;Za[c[(c[g>>2]|0)+56>>2]&127](g,E,F,9)|0;g=k}else g=k;else M=25}else M=25;if((M|0)==25){A=e+52|0;i=A;l=i+48|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(l|0));z=e+8|0;g=c[z>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,B)|0;a:do if(!g){y=B;x=c[y+4>>2]|0;b:do if((x|0)>0|(x|0)==0&(c[y>>2]|0)>>>0>32){g=c[z>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,m,32,0,0)|0;c:do if(!g){g=d[m+3>>0]|0;i=m+8|0;n=d[m+9>>0]<<16|d[i>>0]<<24;o=d[m+10>>0]<<8;l=n|o|d[m+11>>0];if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|g&254|0)==931071618?!((l+-512|0)>>>0>65024|(l+-1&l|0)!=0):0){x=g&1;a[e+65>>0]=x;c[e+36>>2]=l;g=m+12|0;c[e+112>>2]=d[m+13>>0]<<16|d[g>>0]<<24|d[m+14>>0]<<8|d[m+15>>0];w=m+16|0;j=c[w>>2]|0;w=c[w+4>>2]|0;y=e+84|0;c[y>>2]=j;c[y+4>>2]=w;y=e+76|0;if(!x){x=c[m>>2]|0;k=c[m+4>>2]|0;w=k+x|0;x=w+x+(c[i>>2]|0)|0;i=(c[g>>2]|0)+w+x|0;g=i+(c[m+20>>2]|0)|0;i=x+j+i|0}else{w=dw(c[m>>2]|0)|0;k=c[m+4>>2]|0;x=(dw(k|0)|0)+w|0;i=x+w+(dw(c[i>>2]|0)|0)|0;g=(dw(c[g>>2]|0)|0)+x+i|0;i=i+(dw(j|0)|0)+g|0;g=g+(dw(c[m+20>>2]|0)|0)|0}g=g+i|0;c[y>>2]=i;x=e+80|0;c[x>>2]=g;do if((i|0)==(d[m+25>>0]<<16|d[m+24>>0]<<24|d[m+26>>0]<<8|d[m+27>>0]|0)){if((g|0)!=(d[m+29>>0]<<16|d[m+28>>0]<<24|d[m+30>>0]<<8|d[m+31>>0]|0))break;if((d[m+5>>0]<<16|k<<24|d[m+6>>0]<<8|d[m+7>>0]|0)!=3007e3){c[p>>2]=31984;c[p+4>>2]=59539;c[p+8>>2]=31517;Db(14,32001,p);g=14;break a}r=l+24|0;s=((r|0)<0)<<31>>31;w=pb(r,s)|0;if(!w){g=7;break c}t=w+24|0;g=Sv(r|0,s|0,32,0)|0;m=L()|0;v=B;u=c[v+4>>2]|0;d:do if((m|0)>(u|0)|((m|0)==(u|0)?g>>>0>(c[v>>2]|0)>>>0:0)){g=0;i=0;j=0}else{u=e+68|0;v=e+72|0;p=(n>>>16|o)&65535;q=e+66|0;o=0;i=0;j=0;k=32;l=0;n=g;while(1){o=o+1|0;g=c[z>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,w,r,k,l)|0;if(g|0)break;if(!(lf(e,C,D,t,w)|0)){g=0;break}g=ff(e,o,c[C>>2]|0)|0;if(g|0)break;g=c[D>>2]|0;if(g){c[u>>2]=o;c[v>>2]=g;b[q>>1]=p;i=c[y>>2]|0;j=c[x>>2]|0}g=Sv(n|0,m|0,r|0,s|0)|0;k=L()|0;l=B;P=c[l+4>>2]|0;if((k|0)>(P|0)|((k|0)==(P|0)?g>>>0>(c[l>>2]|0)>>>0:0)){g=0;break d}else{l=m;P=n;n=g;m=k;k=P}}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](w);else{P=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w)}if(!g){g=j;break b}else break a}while(0);i=0;g=0;break b}i=0;g=0;break b}while(0);break a}else{i=0;g=0}while(0);c[e+76>>2]=i;c[e+80>>2]=g;j=e+32|0;k=c[c[j>>2]>>2]|0;a[e+64>>0]=1;c[A>>2]=3007e3;P=c[A+4>>2]|0;l=P+6014e3+(c[A+8>>2]|0)|0;P=P+3007e3+(c[A+12>>2]|0)+l|0;l=(c[A+16>>2]|0)+l+P|0;P=(c[A+20>>2]|0)+P+l|0;l=l+i+P|0;i=P+g+l|0;g=l+(c[A+32>>2]|0)+i|0;i=i+(c[A+36>>2]|0)+g|0;c[e+92>>2]=g;c[e+96>>2]=i;i=k+48|0;g=A;l=i+48|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(l|0));if((a[I>>0]|0)!=2){P=c[e+4>>2]|0;ab[c[(c[P>>2]|0)+60>>2]&127](P)}i=k;g=A;l=i+48|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(l|0));j=c[c[j>>2]>>2]|0;c[j+96>>2]=0;g=e+68|0;c[j+128>>2]=c[g>>2];c[j+100>>2]=0;i=j+104|0;c[i>>2]=-1;c[j+108>>2]=-1;c[j+112>>2]=-1;c[j+116>>2]=-1;j=c[g>>2]|0;if(j|0)c[i>>2]=j;if(!(c[e+72>>2]|0))g=0;else{P=c[e+108>>2]|0;c[G>>2]=c[g>>2];c[G+4>>2]=P;Db(283,32269,G);g=0}}while(0);if((a[I>>0]|0)==0?(J=e+4|0,P=c[J>>2]|0,Za[c[(c[P>>2]|0)+56>>2]&127](P,E,F,9)|0,(a[I>>0]|0)==0):0){P=c[J>>2]|0;Za[c[(c[P>>2]|0)+56>>2]&127](P,4,4,9)|0}}c[f>>2]=1}}a[H>>0]=0;if(!(a[I>>0]|0)){P=c[e+4>>2]|0;Za[c[(c[P>>2]|0)+56>>2]&127](P,0,1,9)|0}if(!h)M=67}while(0);if((M|0)==67)if((c[e+52>>2]|0)!=3007e3){c[K>>2]=31984;c[K+4>>2]=60517;c[K+8>>2]=31517;Db(14,32001,K);g=14}i=e+50|0;if(!(a[i>>0]|0)){P=g;Ra=O;return P|0}l=e+43|0;if(!g)g=0;else{if((c[N>>2]|0)>0){j=e+32|0;h=0;do{k=c[(c[j>>2]|0)+(h<<2)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{P=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[(c[j>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)<(c[N>>2]|0))}if((a[l>>0]|0)!=2){P=c[e+4>>2]|0;Xa[c[(c[P>>2]|0)+64>>2]&255](P,0)|0}a[i>>0]=0;g=(g|0)==522?-1:g}a[l>>0]=0;P=g;Ra=O;return P|0}function jf(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+96|0;k=l+48|0;g=l;h=c[c[b+32>>2]>>2]|0;f=k;i=h;j=f+48|0;do{a[f>>0]=a[i>>0]|0;f=f+1|0;i=i+1|0}while((f|0)<(j|0));if((a[b+43>>0]|0)!=2){j=c[b+4>>2]|0;ab[c[(c[j>>2]|0)+60>>2]&127](j)}f=g;i=h+48|0;j=f+48|0;do{a[f>>0]=a[i>>0]|0;f=f+1|0;i=i+1|0}while((f|0)<(j|0));if(Lu(k,g,48)|0){k=1;Ra=l;return k|0}if(!(a[k+12>>0]|0)){k=1;Ra=l;return k|0}g=c[k>>2]|0;f=(c[k+4>>2]|0)+g|0;g=g+f+(c[k+8>>2]|0)|0;f=(c[k+12>>2]|0)+f+g|0;g=g+f+(c[k+16>>2]|0)|0;f=(c[k+20>>2]|0)+f+g|0;g=g+f+(c[k+24>>2]|0)|0;f=(c[k+28>>2]|0)+f+g|0;g=g+f+(c[k+32>>2]|0)|0;if((g|0)!=(c[k+40>>2]|0)){k=1;Ra=l;return k|0}if(((c[k+36>>2]|0)+f+g|0)!=(c[k+44>>2]|0)){k=1;Ra=l;return k|0}f=b+52|0;if(!(Lu(f,k,48)|0)){k=0;Ra=l;return k|0}c[d>>2]=1;i=k;j=f+48|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));k=e[b+66>>1]|0;c[b+36>>2]=k<<16&65536|k&65024;k=0;Ra=l;return k|0}function kf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;h=b+24|0;do if((c[h>>2]|0)<=(e|0)){i=e+1|0;j=b+32|0;k=c[j>>2]|0;if((mb()|0)==0?(g=sb(k,i<<2,0)|0,g|0):0){k=c[h>>2]|0;gw(g+(k<<2)|0,0,i-k<<2|0)|0;c[j>>2]=g;c[h>>2]=i;break}c[f>>2]=0;f=7;return f|0}while(0);if((a[b+43>>0]|0)!=2){h=c[b+4>>2]|0;g=b+32|0;h=_a[c[(c[h>>2]|0)+52>>2]&127](h,e,32768,d[b+44>>0]|0,(c[g>>2]|0)+(e<<2)|0)|0;i=b+46|0;if((h&255|0)==8){a[i>>0]=a[i>>0]|2;h=(h|0)==8?0:h}}else{if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](32768)|0;if(!g)g=0;else l=18}else{g=Wa[c[29356>>2]&127](32768)|0;if((c[14985]|0)>>>0<32768)c[14985]=32768;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){k=c[14978]|0;j=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=k>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=18}else l=18}else g=0}if((l|0)==18)gw(g|0,0,32768)|0;b=b+32|0;c[(c[b>>2]|0)+(e<<2)>>2]=g;h=(c[(c[b>>2]|0)+(e<<2)>>2]|0)==0?7:0;g=b}c[f>>2]=c[(c[g>>2]|0)+(e<<2)>>2];f=h;return f|0}function lf(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=b+76|0;if(Lu(b+84|0,h+8|0,8)|0){n=0;return n|0}l=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];if(!l){n=0;return n|0}i=c[n>>2]|0;m=b+80|0;j=c[m>>2]|0;if(!(a[b+65>>0]|0)){i=i+j+(c[h>>2]|0)|0;o=(c[h+4>>2]|0)+j+i|0;c[n>>2]=i;c[m>>2]=o;k=g+(c[b+36>>2]|0)|0;j=g;b=o;do{i=i+b+(c[j>>2]|0)|0;b=(c[j+4>>2]|0)+b+i|0;j=j+8|0}while(j>>>0<k>>>0)}else{i=i+j+(dw(c[h>>2]|0)|0)|0;o=(dw(c[h+4>>2]|0)|0)+j+i|0;c[n>>2]=i;c[m>>2]=o;k=g+(c[b+36>>2]|0)|0;j=g;b=o;do{i=i+b+(dw(c[j>>2]|0)|0)|0;b=(dw(c[j+4>>2]|0)|0)+b+i|0;j=j+8|0}while(j>>>0<k>>>0)}c[n>>2]=i;c[m>>2]=b;if((i|0)!=(d[h+17>>0]<<16|d[h+16>>0]<<24|d[h+18>>0]<<8|d[h+19>>0]|0)){o=0;return o|0}if((b|0)!=(d[h+21>>0]<<16|d[h+20>>0]<<24|d[h+22>>0]<<8|d[h+23>>0]|0)){o=0;return o|0}c[e>>2]=l;c[f>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];o=1;return o|0}function mf(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;j=b+76|0;a[h>>0]=e>>>24;a[h+1>>0]=e>>>16;a[h+2>>0]=e>>>8;a[h+3>>0]=e;a[h+4>>0]=f>>>24;a[h+5>>0]=f>>>16;a[h+6>>0]=f>>>8;a[h+7>>0]=f;e=h+8|0;if(c[b+104>>2]|0){f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));return}i=b+84|0;k=i;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;i=i+4|0;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;f=e;a[f>>0]=k;a[f+1>>0]=k>>8;a[f+2>>0]=k>>16;a[f+3>>0]=k>>24;e=e+4|0;a[e>>0]=i;a[e+1>>0]=i>>8;a[e+2>>0]=i>>16;a[e+3>>0]=i>>24;e=c[j>>2]|0;i=b+80|0;f=c[i>>2]|0;if(!(a[b+65>>0]|0)){k=e+f+(c[h>>2]|0)|0;e=(c[h+4>>2]|0)+f+k|0;c[j>>2]=k;c[i>>2]=e;b=g+(c[b+36>>2]|0)|0;f=k;do{f=f+e+(c[g>>2]|0)|0;e=(c[g+4>>2]|0)+e+f|0;g=g+8|0}while(g>>>0<b>>>0)}else{k=e+f+(dw(c[h>>2]|0)|0)|0;e=(dw(c[h+4>>2]|0)|0)+f+k|0;c[j>>2]=k;c[i>>2]=e;b=g+(c[b+36>>2]|0)|0;f=k;do{f=f+e+(dw(c[g>>2]|0)|0)|0;e=(dw(c[g+4>>2]|0)|0)+e+f|0;g=g+8|0}while(g>>>0<b>>>0)}c[j>>2]=f;c[i>>2]=e;a[h+16>>0]=f>>>24;a[h+17>>0]=f>>>16;a[h+18>>0]=f>>>8;a[h+19>>0]=f;k=c[i>>2]|0;a[h+20>>0]=k>>>24;a[h+21>>0]=k>>>16;a[h+22>>0]=k>>>8;a[h+23>>0]=k;return}function nf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;do{e=a+28|0;switch(c[e>>2]|0){case 6:case 0:case 5:{if((c[a+16>>2]|0)>>>0>b>>>0?(f=_b(a,b,d,1)|0,f|0):0)c[e>>2]=f;break}default:{}}a=c[a+44>>2]|0}while((a|0)!=0);return}function of(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;k=c[b+208>>2]|0;j=b+152|0;m=c[j>>2]|0;l=b+148|0;i=c[l>>2]|0;m=m>>>0>i>>>0?i:m;h=c[b+96>>2]|0;if((h|0)>0){e=c[b+92>>2]|0;f=b+72|0;d=0;do{g=e+(d*48|0)+8|0;n=g;if((c[n>>2]|0)==0&(c[n+4>>2]|0)==0){p=f;o=c[p+4>>2]|0;n=g;c[n>>2]=c[p>>2];c[n+4>>2]=o}d=d+1|0}while((d|0)<(h|0));g=f}else g=b+72|0;e=g;d=c[e>>2]|0;e=c[e+4>>2]|0;if((d|0)==0&(e|0)==0){d=0;e=0}else{d=Sv(d|0,e|0,-1,-1)|0;d=Wv(d|0,L()|0,i|0,0)|0;d=Sv(d|0,L()|0,1,0)|0;d=Yv(d|0,L()|0,i|0,0)|0;e=L()|0}p=g;c[p>>2]=d;c[p+4>>2]=e;p=b+80|0;c[p>>2]=d;c[p+4>>2]=e;if(((a[b+7>>0]|0)==0?(a[b+5>>0]|0)!=4:0)?(p=c[b+60>>2]|0,((Wa[c[(c[p>>2]|0)+48>>2]&127](p)|0)&512|0)==0):0){d=k;e=d+12|0;do{a[d>>0]=0;d=d+1|0}while((d|0)<(e|0))}else{p=k;o=p;a[o>>0]=-117058087;a[o+1>>0]=-117058087>>8;a[o+2>>0]=-117058087>>16;a[o+3>>0]=-117058087>>24;p=p+4|0;a[p>>0]=-681336544;a[p+1>>0]=-681336544>>8;a[p+2>>0]=-681336544>>16;a[p+3>>0]=-681336544>>24;p=k+8|0;a[p>>0]=-1;a[p+1>>0]=-1>>8;a[p+2>>0]=-1>>16;a[p+3>>0]=-1>>24}f=b+48|0;Fb(4,f);f=c[f>>2]|0;a[k+12>>0]=f>>>24;a[k+13>>0]=f>>>16;a[k+14>>0]=f>>>8;a[k+15>>0]=f;f=c[b+28>>2]|0;a[k+16>>0]=f>>>24;a[k+17>>0]=f>>>16;a[k+18>>0]=f>>>8;a[k+19>>0]=f;f=c[l>>2]|0;a[k+20>>0]=f>>>24;a[k+21>>0]=f>>>16;a[k+22>>0]=f>>>8;a[k+23>>0]=f;f=c[j>>2]|0;a[k+24>>0]=f>>>24;a[k+25>>0]=f>>>16;a[k+26>>0]=f>>>8;a[k+27>>0]=f;gw(k+28|0,0,m+-28|0)|0;f=b+64|0;e=0;while(1){if(e>>>0>=(c[l>>2]|0)>>>0){d=0;e=17;break}n=c[f>>2]|0;d=g;d=_a[c[(c[n>>2]|0)+12>>2]&127](n,k,m,c[d>>2]|0,c[d+4>>2]|0)|0;n=g;n=Sv(c[n>>2]|0,c[n+4>>2]|0,m|0,0)|0;o=L()|0;p=g;c[p>>2]=n;c[p+4>>2]=o;if(!d)e=e+m|0;else{e=17;break}}if((e|0)==17)return d|0;return 0}function pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[d>>2]=0;return c[a+40>>2]|0}function qf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+32|0;l=q+16|0;h=q;if(!e){c[h>>2]=32306;c[h+4>>2]=56058;c[h+8>>2]=31517;Db(11,32001,h);d=11;Ra=q;return d|0}p=d+212|0;h=c[p>>2]|0;h=Ya[c[29436>>2]&127](c[h+44>>2]|0,e,a[h+33>>0]&3)|0;a:do if(!h){j=c[p>>2]|0;if((a[j+33>>0]|0)!=2){k=j+44|0;n=Wa[c[29432>>2]&127](c[k>>2]|0)|0;b:do if((n|0)>(c[j+20>>2]|0)){i=j+8|0;h=c[i>>2]|0;c:do if(!h)m=12;else{while(1){if((b[h+30>>1]|0)==0?(b[h+28>>1]&8)==0:0)break;h=c[h+36>>2]|0;if(!h){m=12;break c}}c[i>>2]=h}while(0);d:do if((m|0)==12){c[i>>2]=0;h=c[j+4>>2]|0;if(!h)break b;while(1){if(!(b[h+30>>1]|0))break d;h=c[h+36>>2]|0;if(!h)break b}}while(0);h=Xa[c[j+36>>2]&255](c[j+40>>2]|0,h)|0;switch(h|0){case 0:case 5:break;default:break a}}while(0);h=Ya[c[29436>>2]&127](c[k>>2]|0,e,2)|0;if(h)m=18;else h=7}else h=7}else m=18;while(0);do if((m|0)==18){i=c[p>>2]|0;j=c[h+4>>2]|0;if(!(c[j>>2]|0))n=sf(i,e,h)|0;else{n=i+12|0;c[n>>2]=(c[n>>2]|0)+1;n=j+30|0;b[n>>1]=(b[n>>1]|0)+1<<16>>16;n=j}c[f>>2]=n;h=g&1;i=n+20|0;j=(h|0)!=0;if(!(j|(c[i>>2]|0)==0)){d=d+184|0;c[d>>2]=(c[d>>2]|0)+1;d=0;Ra=q;return d|0}do if((e|0)>=0?(o=d+152|0,((1073741824/(c[o>>2]|0)|0)+1|0)!=(e|0)):0){c[i>>2]=d;if(c[c[d+60>>2]>>2]|0?((h|0)==0?(c[d+24>>2]|0)>>>0>=e>>>0:0):0){h=d+188|0;c[h>>2]=(c[h>>2]|0)+1;h=rf(n)|0;if(!h)h=0;else break;Ra=q;return h|0}if((c[d+156>>2]|0)>>>0<e>>>0)h=13;else{if(j){if((c[d+28>>2]|0)>>>0>=e>>>0)df(c[d+56>>2]|0,e)|0;g=d+96|0;h=c[g>>2]|0;if((h|0)>0){k=d+92|0;j=0;do{i=c[k>>2]|0;if((c[i+(j*48|0)+20>>2]|0)>>>0>=e>>>0){df(c[i+(j*48|0)+16>>2]|0,e)|0;h=c[g>>2]|0}j=j+1|0}while((j|0)<(h|0))}}gw(c[n+4>>2]|0,0,c[o>>2]|0)|0;d=0;Ra=q;return d|0}}else m=38;while(0);if((m|0)==38){c[l>>2]=32306;c[l+4>>2]=56090;c[l+8>>2]=31517;Db(11,32001,l);if(!n){h=11;break}else h=11}m=c[n+12>>2]|0;do if(b[n+28>>1]&2){i=m+8|0;j=n+36|0;k=c[j>>2]|0;if((c[i>>2]|0)==(n|0))c[i>>2]=k;g=c[n+32>>2]|0;l=(g|0)==0;if(l){c[m+4>>2]=k;i=k}else{c[g+36>>2]=k;i=c[j>>2]|0}if(i|0){c[i+32>>2]=g;break}c[m>>2]=g;if(l)a[m+33>>0]=2}while(0);o=m+12|0;c[o>>2]=(c[o>>2]|0)+-1;cb[c[29440>>2]&255](c[m+44>>2]|0,c[n>>2]|0,1)}while(0);if(!(c[(c[p>>2]|0)+12>>2]|0)){switch(a[d+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[d+4>>0]|0))uf(d,0,0)|0;break}default:tf(d)|0}vf(d)}c[f>>2]=0;d=h;Ra=q;return d|0}function rf(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=Ra;Ra=Ra+16|0;f=k;i=c[b+20>>2]|0;c[f>>2]=0;g=i+216|0;d=c[g>>2]|0;h=b+24|0;if(d){d=ef(d,c[h>>2]|0,f)|0;if(d|0){b=d;Ra=k;return b|0}d=c[f>>2]|0;if(d){l=c[g>>2]|0;f=c[i+152>>2]|0;m=c[b+4>>2]|0;n=c[l+8>>2]|0;l=e[l+66>>1]|0;l=l<<16&65536|l&65024;g=Yv(l|24|0,0,d+-1|0,0)|0;g=Sv(g|0,L()|0,56,0)|0;d=L()|0;d=_a[c[(c[n>>2]|0)+8>>2]&127](n,m,(l|0)<(f|0)?l:f,g,d)|0}else j=5}else j=5;if((j|0)==5){m=c[i+152>>2]|0;n=Yv((c[h>>2]|0)+-1|0,0,m|0,((m|0)<0)<<31>>31|0)|0;d=L()|0;l=c[i+60>>2]|0;d=_a[c[(c[l>>2]|0)+8>>2]&127](l,c[b+4>>2]|0,m,n,d)|0;d=(d|0)==522?0:d}if((c[h>>2]|0)!=1){n=d;Ra=k;return n|0}if(!d){g=i+104|0;d=(c[b+4>>2]|0)+24|0;f=g+16|0;do{a[g>>0]=a[d>>0]|0;g=g+1|0;d=d+1|0}while((g|0)<(f|0));n=0;Ra=k;return n|0}else{n=i+104|0;c[n>>2]=-1;c[n+4>>2]=-1;c[n+8>>2]=-1;c[n+12>>2]=-1;n=d;Ra=k;return n|0}return 0}function sf(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=f+4|0;h=c[g>>2]|0;do{i=h+16|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[h>>2]=f;c[h+4>>2]=c[f>>2];i=h+40|0;c[h+8>>2]=i;j=i;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;i=i+4|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;c[h+12>>2]=d;c[h+24>>2]=e;b[h+28>>1]=1;h=c[g>>2]|0}while(!(c[h>>2]|0));j=d+12|0;c[j>>2]=(c[j>>2]|0)+1;j=h+30|0;b[j>>1]=(b[j>>1]|0)+1<<16>>16;return h|0}function tf(b){b=b|0;var e=0,f=0,g=0;g=b+16|0;f=a[g>>0]|0;if(f<<24>>24==6){g=c[b+40>>2]|0;return g|0}if((f&255)<2){g=0;return g|0}do if(!(c[b+216>>2]|0)){if(!(f<<24>>24==2?1:(c[c[b+64>>2]>>2]|0)==0)){e=xf(b,0)|0;break}e=uf(b,0,0)|0;if((f&255)>2&(a[b+15>>0]|0)==0){c[b+40>>2]=4;a[g>>0]=6;c[b+204>>2]=75;g=e;return g|0}}else{e=wf(b,2,-1)|0;f=uf(b,d[b+19>>0]|0,0)|0;e=(e|0)==0?f:e}while(0);switch((e&255)<<24>>24){case 10:case 13:break;default:{g=e;return g|0}}c[b+40>>2]=e;a[g>>0]=6;c[b+204>>2]=(e|0)==0?74:75;g=e;return g|0}function uf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+16|0;w=B;A=e+16|0;if((d[A>>0]|0)<2?(d[e+17>>0]|0)<2:0){A=0;Ra=B;return A|0}l=e+96|0;if((c[l>>2]|0)>0){k=e+92|0;i=0;do{yf(c[(c[k>>2]|0)+(i*48|0)+16>>2]|0);i=i+1|0}while((i|0)<(c[l>>2]|0))}z=e+4|0;k=c[e+68>>2]|0;i=c[k>>2]|0;if(!(a[z>>0]|0)){if(i|0)y=9}else if((i|0)==29896){i=29896;y=9}if((y|0)==9){Wa[c[i+4>>2]&127](k)|0;c[k>>2]=0}i=e+92|0;k=c[i>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[i>>2]=0;c[l>>2]=0;c[e+52>>2]=0;n=e+64|0;o=c[n>>2]|0;m=c[o>>2]|0;a:do if(!m)i=0;else{if((m|0)==29896){l=o+16|0;i=c[l>>2]|0;if(i|0)do{k=i;i=c[i>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((i|0)!=0);c[l>>2]=0;c[o>>2]=0;i=0;break}i=a[e+5>>0]|0;switch(i<<24>>24){case 3:{k=e+72|0;s=k;if(!((c[s>>2]|0)==0&(c[s+4>>2]|0)==0)){i=Ya[c[m+16>>2]&127](o,0,0)|0;if(!i)if((a[e+8>>0]|0)!=0?(p=c[n>>2]|0,q=a[e+10>>0]|0,q<<24>>24!=0):0)i=Xa[c[(c[p>>2]|0)+20>>2]&255](p,q&255)|0;else i=0}else i=0;s=k;c[s>>2]=0;c[s+4>>2]=0;break a}case 1:break;default:if(i<<24>>24==5|(a[z>>0]|0)==0){s=(a[e+12>>0]|0)==0;Wa[c[m+4>>2]&127](o)|0;c[o>>2]=0;if(!s){i=0;break a}i=c[e>>2]|0;i=Ya[c[i+28>>2]&127](i,c[e+172>>2]|0,d[e+9>>0]|0)|0;break a}}if(!f)i=(a[e+12>>0]|0)!=0&1;else i=1;f=e+72|0;s=f;if(!((c[s>>2]|0)==0&(c[s+4>>2]|0)==0)){l=e+160|0;k=c[l>>2]|0;l=c[l+4>>2]|0;if((i|0)!=0|(k|0)==0&(l|0)==0)i=Ya[c[m+16>>2]&127](o,0,0)|0;else i=_a[c[m+12>>2]&127](o,59008,28,0,0)|0;if(!i){if(!(a[e+7>>0]|0)){i=c[n>>2]|0;i=Xa[c[(c[i>>2]|0)+20>>2]&255](i,(a[e+10>>0]|16)&255)|0}else i=0;if(((l|0)>0|(l|0)==0&k>>>0>0)&(i|0)==0){i=c[n>>2]|0;i=Xa[c[(c[i>>2]|0)+24>>2]&255](i,w)|0;s=w;r=c[s+4>>2]|0;if((i|0)==0&((r|0)>(l|0)|((r|0)==(l|0)?(c[s>>2]|0)>>>0>k>>>0:0))){i=c[n>>2]|0;i=Ya[c[(c[i>>2]|0)+16>>2]&127](i,k,l)|0}}}}else i=0;s=f;c[s>>2]=0;c[s+4>>2]=0}while(0);s=e+56|0;yf(c[s>>2]|0);c[s>>2]=0;c[e+44>>2]=0;s=(i|0)==0;if(s){do if((a[e+15>>0]|0)==0?(a[e+12>>0]|0)!=0:0){if(g|0?c[c[e+60>>2]>>2]|0:0){l=c[e+212>>2]|0;k=c[l+16>>2]|0;if((k|0)<=-1){q=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;r=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(q|0,r|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}l=c[l>>2]|0;if(!l){l=0;f=0}else{f=0;do{f=f+1|0;l=c[l+32>>2]|0}while((l|0)!=0);l=Yv(f|0,0,100,0)|0;f=L()|0}if(k|0?(r=Wv(l|0,f|0,k|0,((k|0)<0)<<31>>31|0)|0,L()|0,(r|0)>=25):0){y=60;break}}l=c[e+212>>2]|0;k=c[l>>2]|0;if(k|0)do{r=k+28|0;b[r>>1]=b[r>>1]&-13;k=c[k+32>>2]|0}while((k|0)!=0);c[l+8>>2]=c[l+4>>2]}else y=60;while(0);if((y|0)==60){r=e+212|0;l=c[r>>2]|0;k=c[l>>2]|0;if(k){do{q=c[k+12>>2]|0;f=q+8|0;m=k+36|0;n=c[m>>2]|0;if((c[f>>2]|0)==(k|0))c[f>>2]=n;o=c[k+32>>2]|0;p=(o|0)==0;if(p){c[q+4>>2]=n;f=n}else{c[o+36>>2]=n;f=c[m>>2]|0}if(!f){c[q>>2]=o;if(p)a[q+33>>0]=2}else c[f+32>>2]=o;p=k+28|0;b[p>>1]=b[p>>1]&-16|1;if((b[k+30>>1]|0)==0?a[q+32>>0]|0:0)cb[c[29440>>2]&255](c[q+44>>2]|0,c[k>>2]|0,0);k=c[l>>2]|0}while((k|0)!=0);l=c[r>>2]|0}}k=c[e+24>>2]|0;r=l+44|0;if(c[r>>2]|0){f=c[l>>2]|0;if(f|0)do{p=f;f=c[f+32>>2]|0;if((c[p+24>>2]|0)>>>0>k>>>0){q=c[p+12>>2]|0;n=q+8|0;o=p+36|0;m=c[o>>2]|0;if((c[n>>2]|0)==(p|0))c[n>>2]=m;n=(f|0)==0;if(n)c[q+4>>2]=m;else{c[f+36>>2]=m;m=c[o>>2]|0}if(!m){c[q>>2]=f;if(n)a[q+33>>0]=2}else c[m+32>>2]=f;o=p+28|0;b[o>>1]=b[o>>1]&-16|1;if((b[p+30>>1]|0)==0?a[q+32>>0]|0:0)cb[c[29440>>2]&255](c[q+44>>2]|0,c[p>>2]|0,0)}}while((f|0)!=0);if(!k)if((c[l+12>>2]|0)!=0?(t=Ya[c[29436>>2]&127](c[r>>2]|0,1,0)|0,(t|0)!=0):0){gw(c[t>>2]|0,0,c[l+24>>2]|0)|0;k=1}else k=0;bb[c[29448>>2]&127](c[r>>2]|0,k+1|0)}}q=e+216|0;k=c[q>>2]|0;if(!k)if((g|0)!=0&s){n=e+32|0;o=c[e+24>>2]|0;if(((c[n>>2]|0)>>>0>o>>>0?(x=e+60|0,u=c[x>>2]|0,v=c[u>>2]|0,(v|0)!=0):0)?((a[A>>0]|0)+-1&255)>2:0){p=c[e+152>>2]|0;i=Xa[c[v+24>>2]&255](u,w)|0;l=((p|0)<0)<<31>>31;f=Yv(p|0,l|0,o|0,0)|0;m=L()|0;do if(!i){k=w;i=c[k>>2]|0;k=c[k+4>>2]|0;if((i|0)==(f|0)&(k|0)==(m|0))h=0;else{if(!((k|0)>(m|0)|(k|0)==(m|0)&i>>>0>f>>>0)){w=Sv(i|0,k|0,p|0,l|0)|0;v=L()|0;if(!((v|0)>(m|0)|(v|0)==(m|0)&w>>>0>f>>>0)){w=c[e+208>>2]|0;gw(w|0,0,p|0)|0;x=c[x>>2]|0;y=Tv(f|0,m|0,p|0,l|0)|0;h=L()|0;h=_a[c[(c[x>>2]|0)+12>>2]&127](x,w,p,y,h)|0;y=117}}else{h=c[x>>2]|0;h=Ya[c[(c[h>>2]|0)+16>>2]&127](h,f,m)|0;y=117}if((y|0)==117?h|0:0)break;c[n>>2]=o;h=0}}else h=i;while(0)}else h=0}else h=i;else{h=k+44|0;if(!(a[h>>0]|0))h=i;else{if(!(a[k+43>>0]|0)){y=c[k+4>>2]|0;Za[c[(c[y>>2]|0)+56>>2]&127](y,0,1,9)|0}a[h>>0]=0;c[k+104>>2]=0;a[k+47>>0]=0;h=i}}do if((g|0)!=0&(h|0)==0){h=c[e+60>>2]|0;i=c[h>>2]|0;if(i|0?(j=Ya[c[i+40>>2]&127](h,22,0)|0,(j|0)!=12):0)break;j=0}else j=h;while(0);b:do if(!(a[z>>0]|0)){h=c[q>>2]|0;do if(h|0){i=h+43|0;if(!(a[i>>0]|0)){h=0;break b}a[i>>0]=0;z=c[h+4>>2]|0;if(!(Za[c[(c[z>>2]|0)+56>>2]&127](z,(b[h+40>>1]|0)+3|0,1,6)|0))if(!(a[i>>0]|0))break;else{h=0;break b}else{a[i>>0]=1;h=0;break b}}while(0);h=c[e+60>>2]|0;i=c[h>>2]|0;if(i){if(!(a[e+13>>0]|0))h=Xa[c[i+32>>2]&255](h,1)|0;else h=0;i=e+17|0;if((a[i>>0]|0)!=5)a[i>>0]=1}else h=0;a[e+18>>0]=0}else h=0;while(0);a[A>>0]=1;a[e+19>>0]=0;A=(j|0)==0?h:j;Ra=B;return A|0}function vf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=d+56|0;yf(c[g>>2]|0);c[g>>2]=0;g=d+96|0;if((c[g>>2]|0)>0){f=d+92|0;e=0;do{yf(c[(c[f>>2]|0)+(e*48|0)+16>>2]|0);e=e+1|0}while((e|0)<(c[g>>2]|0))}h=d+4|0;f=c[d+68>>2]|0;e=c[f>>2]|0;if(!(a[h>>0]|0)){if(e|0)k=7}else if((e|0)==29896){e=29896;k=7}if((k|0)==7){Wa[c[e+4>>2]&127](f)|0;c[f>>2]=0}e=d+92|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[g>>2]=0;c[d+52>>2]=0;g=c[d+216>>2]|0;if(!g){if(!(a[h>>0]|0)){e=d+60|0;f=c[e>>2]|0;g=c[f>>2]|0;if(!(((g|0)!=0?((Wa[c[g+48>>2]&127](f)|0)&2048|0)!=0:0)?(a[d+5>>0]&5)==1:0))k=25;if((k|0)==25?(i=c[d+64>>2]|0,j=c[i>>2]|0,j|0):0){Wa[c[j+4>>2]&127](i)|0;c[i>>2]=0}e=c[e>>2]|0;f=c[e>>2]|0;if(f|0){if(!(a[d+13>>0]|0))f=Xa[c[f+32>>2]&255](e,0)|0;else f=0;e=d+17|0;if((a[e>>0]|0)!=5)a[e>>0]=0;if(f|0?(a[d+16>>0]|0)==6:0)a[e>>0]=5}a[d+18>>0]=0;k=36}}else{e=g+44|0;if(a[e>>0]|0){if(!(a[g+43>>0]|0)){l=c[g+4>>2]|0;Za[c[(c[l>>2]|0)+56>>2]&127](l,0,1,9)|0}a[e>>0]=0;c[g+104>>2]=0;a[g+47>>0]=0}e=g+40|0;f=b[e>>1]|0;if(f<<16>>16>-1){if(!(a[g+43>>0]|0)){l=c[g+4>>2]|0;Za[c[(c[l>>2]|0)+56>>2]&127](l,(f<<16>>16)+3|0,1,5)|0}b[e>>1]=-1;k=36}else k=36}if((k|0)==36)a[d+16>>0]=0;f=d+40|0;if(!(c[f>>2]|0)){l=d+72|0;d=d+19|0;a[d>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;return}if(!(a[d+12>>0]|0)){Ff(d);a[d+18>>0]=0;e=0}else e=(c[c[d+64>>2]>>2]|0)==0&1;a[d+16>>0]=e;c[f>>2]=0;c[d+204>>2]=74;l=d+72|0;d=d+19|0;a[d>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;return}function wf(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;x=y+8|0;w=y;h=c[d+40>>2]|0;if(h|0){d=h;Ra=y;return d|0}k=d+96|0;h=c[k>>2]|0;if((h|0)<=(g|0)){d=0;Ra=y;return d|0}j=(f|0)==1;g=((j^1)&1)+g|0;if((g|0)<(h|0)){f=d+92|0;h=g;do{yf(c[(c[f>>2]|0)+(h*48|0)+16>>2]|0);h=h+1|0}while((h|0)<(c[k>>2]|0))}c[k>>2]=g;if(j){if(g|0){d=0;Ra=y;return d|0}g=c[d+68>>2]|0;h=c[g>>2]|0;if(!h){d=0;Ra=y;return d|0}if((h|0)==29896){i=g+16|0;h=c[i>>2]|0;if(h|0)do{f=h;h=c[h>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}}while((h|0)!=0);c[i>>2]=0;c[g+12>>2]=0;c[g+32>>2]=0;x=g+24|0;c[x>>2]=0;c[x+4>>2]=0;c[g+48>>2]=0;x=g+40|0;c[x>>2]=0;c[x+4>>2]=0}c[d+52>>2]=0;d=0;Ra=y;return d|0}s=d+216|0;if((c[s>>2]|0)==0?(c[c[d+64>>2]>>2]|0)==0:0){d=0;Ra=y;return d|0}if((g|0)!=0?(l=g+-1|0,u=c[d+92>>2]|0,m=u+(l*48|0)|0,l=u+(l*48|0)+20|0,(m|0)!=0):0){j=c[l>>2]|0;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](512)|0;if(!h){d=7;Ra=y;return d|0}}else{h=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){u=c[14978]|0;r=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=u>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){d=7;Ra=y;return d|0}f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(h+4|0,0,508)|0;c[h>>2]=j;u=h;h=l;g=d+28|0;r=m;q=1}else{g=d+28|0;u=0;h=g;r=0;q=0}f=d+24|0;c[f>>2]=c[h>>2];a[d+18>>0]=a[d+12>>0]|0;a:do if(q){l=d+72|0;f=l;i=c[f>>2]|0;f=c[f+4>>2]|0;if(!(c[s>>2]|0)){j=r+8|0;g=c[j>>2]|0;j=c[j+4>>2]|0;h=(g|0)==0&(j|0)==0;g=h?i:g;j=h?f:j;h=r;k=c[h>>2]|0;h=c[h+4>>2]|0;p=l;c[p>>2]=k;c[p+4>>2]=h;if((h|0)<(j|0)|(h|0)==(j|0)&k>>>0<g>>>0)while(1){h=zf(d,l,u,1,1)|0;if(h|0){p=i;o=f;break a}h=l;k=c[h>>2]|0;h=c[h+4>>2]|0;if(!((h|0)<(j|0)|(h|0)==(j|0)&k>>>0<g>>>0)){p=i;t=71;break}}else{p=i;t=71}}else{h=l;t=70}}else{o=c[s>>2]|0;if(!o){h=d+72|0;f=h;i=c[f>>2]|0;f=c[f+4>>2]|0;t=70;break}c[f>>2]=c[g>>2];if(a[o+44>>0]|0){n=o+68|0;l=c[n>>2]|0;m=o+32|0;j=c[m>>2]|0;h=o+52|0;f=c[j>>2]|0;g=h+48|0;do{a[h>>0]=a[f>>0]|0;h=h+1|0;f=f+1|0}while((h|0)<(g|0));f=c[n>>2]|0;h=f+1|0;if(h>>>0>l>>>0)h=0;else{k=h;g=j;while(1){h=f+34|0;f=h>>>12;if(!f)h=(c[g>>2]|0)+(h<<2)|0;else h=(c[g+(f<<2)>>2]|0)+((h&4095)<<2)|0;h=Bf(d,c[h>>2]|0)|0;f=k+1|0;if(f>>>0>l>>>0|(h|0)!=0)break;w=k;k=f;g=c[m>>2]|0;f=w}f=c[n>>2]|0}if((l|0)!=(f|0))do if(f|0){f=f+33|0;g=f>>>12;k=x+4|0;if(!((c[o+24>>2]|0)>(g|0)?(i=c[(c[m>>2]|0)+(g<<2)>>2]|0,c[k>>2]=i,(i|0)!=0):0)){if(kf(o,g,k)|0)break;i=c[k>>2]|0}l=i+16384|0;c[x>>2]=l;if(!g){j=i+136|0;c[k>>2]=j;f=0}else{f=(f&-4096)+-34|0;j=i}c[x+8>>2]=f;c[k>>2]=j+-4;i=(c[n>>2]|0)-f|0;f=0;do{g=l+(f<<1)|0;if((i|0)<(e[g>>1]|0))b[g>>1]=0;f=f+1|0}while((f|0)!=8192);x=j+(i<<2)|0;gw(x|0,0,l-x|0)|0}while(0)}else h=0;f=Cf(c[d+212>>2]|0)|0;if(!((h|0)==0&(f|0)!=0)){d=h;Ra=y;return d|0}do{h=f;f=c[f+16>>2]|0;h=Bf(d,c[h+24>>2]|0)|0}while((f|0)!=0&(h|0)==0);Ra=y;return h|0}while(0);if((t|0)==70){l=h;c[l>>2]=0;c[l+4>>2]=0;l=h;h=0;k=0;p=i;t=71}b:do if((t|0)==71){m=d+80|0;n=d+148|0;o=d+152|0;if((h|0)<(f|0)|(h|0)==(f|0)&k>>>0<p>>>0)while(1){c[x>>2]=0;h=Af(d,0,p,f,x,w)|0;i=c[x>>2]|0;if(!i){i=m;i=Sv(c[i>>2]|0,c[i+4>>2]|0,c[n>>2]|0,0)|0;g=L()|0;t=l;if((i|0)==(c[t>>2]|0)?(g|0)==(c[t+4>>2]|0):0){k=Tv(p|0,f|0,i|0,g|0)|0;t=L()|0;i=(c[o>>2]|0)+8|0;i=Wv(k|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0;c[x>>2]=i;t=76}else t=81}else t=76;c:do if((t|0)==76){t=0;if((h|0)==0&(i|0)!=0){j=0;while(1){g=l;h=c[g>>2]|0;g=c[g+4>>2]|0;if(!((g|0)<(f|0)|(g|0)==(f|0)&h>>>0<p>>>0))break;h=zf(d,l,u,1,1)|0;j=j+1|0;if(!(j>>>0<i>>>0&(h|0)==0)){t=81;break c}}i=g}else t=81}while(0);if((t|0)==81){t=0;if(h|0){o=f;break b}h=l;i=c[h+4>>2]|0;h=c[h>>2]|0}if(!((i|0)<(f|0)|(i|0)==(f|0)&h>>>0<p>>>0)){h=0;o=f;break}}else{h=0;o=f}}while(0);if(q){n=r+24|0;f=c[n>>2]|0;m=(c[d+152>>2]|0)+4|0;m=Yv(m|0,((m|0)<0)<<31>>31|0,f|0,0)|0;q=L()|0;k=w;c[k>>2]=m;c[k+4>>2]=q;k=c[s>>2]|0;if(!k){if(!h)t=105}else{h=r+28|0;i=r+40|0;g=k+112|0;if((c[i>>2]|0)==(c[g>>2]|0))h=c[h>>2]|0;else{c[h>>2]=0;c[i>>2]=c[g>>2];h=0}m=k+68|0;if(h>>>0<(c[m>>2]|0)>>>0){c[m>>2]=h;c[k+76>>2]=c[r+32>>2];c[k+80>>2]=c[r+36>>2];do if(h|0){h=h+33|0;i=h>>>12;j=x+4|0;if((c[k+24>>2]|0)>(i|0)?(v=c[(c[k+32>>2]|0)+(i<<2)>>2]|0,c[j>>2]=v,(v|0)!=0):0)f=v;else{if(kf(k,i,j)|0)break;f=c[j>>2]|0}k=f+16384|0;c[x>>2]=k;if(!i){g=f+136|0;c[j>>2]=g;h=0}else{h=(h&-4096)+-34|0;g=f}c[x+8>>2]=h;c[j>>2]=g+-4;f=(c[m>>2]|0)-h|0;h=0;do{i=k+(h<<1)|0;if((f|0)<(e[i>>1]|0))b[i>>1]=0;h=h+1|0}while((h|0)!=8192);x=g+(f<<2)|0;gw(x|0,0,k-x|0)|0}while(0);f=c[n>>2]|0;t=105}else t=105}d:do if((t|0)==105){i=d+52|0;while(1){if(f>>>0>=(c[i>>2]|0)>>>0){h=0;break d}h=zf(d,w,u,0,1)|0;if(!h)f=f+1|0;else break}}while(0)}yf(u);if(h|0){d=h;Ra=y;return d|0}d=l;c[d>>2]=p;c[d+4>>2]=o;d=0;Ra=y;return d|0}function xf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=Ra;Ra=Ra+48|0;K=M+16|0;H=M+8|0;I=M+40|0;x=M;y=M+36|0;z=M+32|0;G=M+28|0;A=M+24|0;h=c[b>>2]|0;c[z>>2]=0;c[G>>2]=1;w=b+152|0;c[A>>2]=c[w>>2];C=b+64|0;g=c[C>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,x)|0;a:do if(!g){B=b+208|0;f=c[B>>2]|0;g=Ef(c[C>>2]|0,f,(c[(c[b>>2]|0)+8>>2]|0)+1|0)|0;if(!g){if(!(a[f>>0]|0))f=0;else f=Za[c[h+32>>2]&127](h,f,0,G)|0;b:do if((f|0)==0&(c[G>>2]|0)!=0){p=b+72|0;q=p;c[q>>2]=0;c[q+4>>2]=0;q=b+148|0;r=b+80|0;s=b+60|0;t=b+24|0;u=b+16|0;v=b+32|0;f=0;h=d;c:while(1){do{g=x;g=Af(b,d,c[g>>2]|0,c[g+4>>2]|0,y,z)|0;switch(g|0){case 101:{h=f;break b}case 0:break;default:{e=g;J=37;break b}}g=c[y>>2]|0;if((g|0)==-1){n=x;n=Tv(c[n>>2]|0,c[n+4>>2]|0,c[q>>2]|0,0)|0;o=L()|0;g=(c[w>>2]|0)+8|0;g=Wv(n|0,o|0,g|0,((g|0)<0)<<31>>31|0)|0;L()|0;c[y>>2]=g}if(!(g|d)){j=r;l=c[q>>2]|0;j=Sv(c[j>>2]|0,c[j+4>>2]|0,l|0,0)|0;i=L()|0;m=p;k=c[m>>2]|0;m=c[m+4>>2]|0;if((j|0)==(k|0)&(i|0)==(m|0)){o=x;o=Tv(c[o>>2]|0,c[o+4>>2]|0,j|0,i|0)|0;k=L()|0;g=(c[w>>2]|0)+8|0;g=Wv(o|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;L()|0;c[y>>2]=g;k=j;j=0}else{i=m;j=0}}else{i=p;k=c[i>>2]|0;l=c[q>>2]|0;i=c[i+4>>2]|0;j=0}if((k|0)==(l|0)&(i|0)==(j|0)){n=c[z>>2]|0;i=c[s>>2]|0;j=c[i>>2]|0;if(j|0?((a[u>>0]|0)+-1&255)>2:0){o=c[w>>2]|0;i=Xa[c[j+24>>2]&255](i,H)|0;k=((o|0)<0)<<31>>31;l=Yv(o|0,k|0,n|0,0)|0;m=L()|0;if(i|0){e=i;break c}j=H;i=c[j>>2]|0;j=c[j+4>>2]|0;if(!((i|0)==(l|0)&(j|0)==(m|0))){do if((j|0)>(m|0)|(j|0)==(m|0)&i>>>0>l>>>0){e=c[s>>2]|0;e=Ya[c[(c[e>>2]|0)+16>>2]&127](e,l,m)|0;J=24}else{j=Sv(i|0,j|0,o|0,k|0)|0;i=L()|0;if((i|0)>(m|0)|(i|0)==(m|0)&j>>>0>l>>>0)break;j=c[B>>2]|0;gw(j|0,0,o|0)|0;i=c[s>>2]|0;J=Tv(l|0,m|0,o|0,k|0)|0;e=L()|0;e=_a[c[(c[i>>2]|0)+12>>2]&127](i,j,o,J,e)|0;J=24}while(0);if((J|0)==24?(J=0,e|0):0)break c;c[v>>2]=n}}c[t>>2]=n}}while(!(g|0));i=0;d:while(1){if(h|0)Ff(b);h=zf(b,p,0,1,0)|0;switch(h|0){case 522:{h=f;break b}case 101:{J=35;break d}case 0:break;default:{e=h;J=37;break b}}f=f+1|0;i=i+1|0;if(i>>>0>=g>>>0)break;else h=0}if((J|0)==35){J=0;m=x;n=c[m+4>>2]|0;o=p;c[o>>2]=c[m>>2];c[o+4>>2]=n}h=0}J=38;break a}else{e=f;f=0;J=37}while(0);if((J|0)==37)if(!e)h=f;else{J=38;break}g=Se(b,A,-1)|0;e=b+12|0;a[b+18>>0]=a[e>>0]|0;if(!g){s=c[B>>2]|0;g=Ef(c[C>>2]|0,s,(c[(c[b>>2]|0)+8>>2]|0)+1|0)|0;if(!g){if(((a[b+16>>0]|0)+-1&255)>2){i=b+60|0;f=c[i>>2]|0;g=c[f>>2]|0;if(g|0){g=Ya[c[g+40>>2]&127](f,21,0)|0;switch(g|0){case 0:case 12:break;default:break a}}if(((a[b+7>>0]|0)==0?(D=c[i>>2]|0,E=a[b+10>>0]|0,E<<24>>24):0)?(F=Xa[c[(c[D>>2]|0)+20>>2]&255](D,E&255)|0,F|0):0){g=F;break}}g=uf(b,(a[s>>0]|0)!=0&1,0)|0;if(!g)if((a[s>>0]|0)!=0&(c[G>>2]|0)!=0){r=c[b>>2]|0;j=r+4|0;k=c[j>>2]<<1;G=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;F=L()|0;do if(!(F>>>0>0|(F|0)==0&G>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f){f=7;break}else q=f}else{f=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;g=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&g>>>0>0){G=c[14978]|0;F=Tv(g|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=G>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(!g){f=7;break}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;q=g}else q=g}gw(q|0,0,k|0)|0;o=q+(c[j>>2]|0)|0;p=r+24|0;f=_a[c[p>>2]&127](r,s,q,16385,0)|0;e:do if(!f){f=Xa[c[(c[q>>2]|0)+24>>2]&255](q,H)|0;if(!f){n=(c[r+8>>2]|0)+1|0;G=H;G=Sv(c[G>>2]|0,c[G+4>>2]|0,n|0,((n|0)<0)<<31>>31|0)|0;F=L()|0;f=Sv(G|0,F|0,1,0)|0;L()|0;if(!(F>>>0>0|(F|0)==0&G>>>0>2147483390)){do if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](f)|0;if(!f){f=7;break e}else g=f}else{i=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){G=c[14978]|0;F=Tv(f|0,g|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=G>>>0)&1}g=Wa[c[29340>>2]&127](i)|0;if(!g){f=7;break e}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0<=(c[14987]|0)>>>0)break;c[14987]=f}while(0);f=c[H>>2]|0;m=g+(f+1)|0;f=_a[c[(c[q>>2]|0)+8>>2]&127](q,g,f,0,0)|0;if(!f){a[g+(c[H>>2]|0)>>0]=0;k=g;G=H;F=c[G+4>>2]|0;f:do if((F|0)>0|(F|0)==0&(c[G>>2]|0)>>>0>0){l=r+32|0;j=g;g:while(1){f=Za[c[l>>2]&127](r,j,0,I)|0;if(f|0)break;do if(c[I>>2]|0){f=_a[c[p>>2]&127](r,j,o,2049,0)|0;if(f|0)break g;f=Ef(o,m,n)|0;i=c[o>>2]|0;if(i|0){Wa[c[i+4>>2]&127](o)|0;c[o>>2]=0}if(f|0)break g;if(!(a[m>>0]|0))break;if(!(Bu(m,s)|0)){f=0;break g}}while(0);j=j+(((Eu(j)|0)&1073741823)+1)|0;G=j-k|0;E=((G|0)<0)<<31>>31;F=H;D=c[F+4>>2]|0;if(!((D|0)>(E|0)|((D|0)==(E|0)?(c[F>>2]|0)>>>0>G>>>0:0))){J=88;break f}}}else J=88;while(0);if((J|0)==88){f=c[q>>2]|0;if(f|0){Wa[c[f+4>>2]&127](q)|0;c[q>>2]=0}f=Ya[c[r+28>>2]&127](r,s,0)|0}if(!g)break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{I=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else f=7}}while(0);g=c[q>>2]|0;if(g|0){Wa[c[g+4>>2]&127](q)|0;c[q>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{I=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else f=7;while(0);g=f}else g=0}}}else{f=0;e=g;J=38}}else{f=0;e=g;J=38}while(0);if((J|0)==38){J=b+12|0;a[b+18>>0]=a[J>>0]|0;h=f;g=e;e=J}if((d|0)!=0&(h|0)!=0){d=c[b+172>>2]|0;c[K>>2]=h;c[K+4>>2]=d;Db(539,32360,K)}if(a[e>>0]|0){K=512;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}e=b+60|0;K=c[e>>2]|0;if((Wa[c[(c[K>>2]|0)+48>>2]&127](K)|0)&4096|0){K=512;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}e=c[e>>2]|0;f=c[(c[e>>2]|0)+44>>2]|0;if(!f){K=4096;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}K=Wa[f&127](e)|0;K=(K|0)<32?512:(K|0)<65536?K:65536;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}function yf(a){a=a|0;var b=0,d=0;if(!a)return;if(c[a+8>>2]|0){d=a+12|0;b=0;do{yf(c[d+(b<<2)>>2]|0);b=b+1|0}while((b|0)!=125)}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function zf(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0;K=Ra;Ra=Ra+16|0;v=K+4|0;J=K;I=c[f+208>>2]|0;C=(i|0)!=0;r=c[(C?f+64|0:f+68|0)>>2]|0;k=g;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,v,4,c[k>>2]|0,c[k+4>>2]|0)|0;if(k|0){J=k;Ra=K;return J|0}s=v+1|0;t=v+2|0;u=v+3|0;D=d[s>>0]<<16|d[v>>0]<<24|d[t>>0]<<8|d[u>>0];H=f+152|0;q=c[H>>2]|0;w=g;w=Sv(c[w>>2]|0,c[w+4>>2]|0,4,0)|0;k=L()|0;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,I,q,w,k)|0;if(k|0){J=k;Ra=K;return J|0}k=c[H>>2]|0;p=(i<<2)+4+k|0;q=g;p=Sv(c[q>>2]|0,c[q+4>>2]|0,p|0,((p|0)<0)<<31>>31|0)|0;q=L()|0;w=g;c[w>>2]=p;c[w+4>>2]=q;if(!D){J=101;Ra=K;return J|0}if((D|0)==((1073741824/(k|0)|0)+1|0)){J=101;Ra=K;return J|0}if(D>>>0>(c[f+24>>2]|0)>>>0){J=0;Ra=K;return J|0}w=(h|0)==0;a:do if(!w?(m=D+-1|0,n=c[h>>2]|0,m>>>0<n>>>0):0){l=c[h+8>>2]|0;if(!l){o=h;k=n}else{n=h;do{k=(m>>>0)/(l>>>0)|0;n=c[n+12+(k<<2)>>2]|0;if(!n)break a;m=m-(G(k,l)|0)|0;l=c[n+8>>2]|0}while((l|0)!=0);o=n;k=c[n>>2]|0}if(k>>>0<4001){if(!(1<<(m&7)&d[o+12+(m>>>3)>>0]))break;else k=0;Ra=K;return k|0}n=m+1|0;k=(m>>>0)%125|0;l=c[o+12+(k<<2)>>2]|0;if(l|0){while(1){if((l|0)==(n|0)){k=0;break}k=((k+1|0)>>>0)%125|0;l=c[o+12+(k<<2)>>2]|0;if(!l)break a}Ra=K;return k|0}}while(0);if(C){q=Sv(p|0,q|0,-4,-1)|0;k=L()|0;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,v,4,q,k)|0;if(k|0){J=k;Ra=K;return J|0}m=d[s>>0]<<16|d[v>>0]<<24|d[t>>0]<<8|d[u>>0];if(!j){k=c[f+48>>2]|0;l=c[H>>2]|0;if((l|0)>200)do{j=l;l=l+-200|0;k=k+(d[I+l>>0]|0)|0}while((j|0)>400);if((k|0)!=(m|0)){J=101;Ra=K;return J|0}}}if(!w?(x=df(h,D)|0,x|0):0){J=x;Ra=K;return J|0}p=(D|0)==1;if(p?(y=f+142|0,z=a[I+20>>0]|0,(b[y>>1]|0)!=(z&255|0)):0)b[y>>1]=z&255;do if((c[f+216>>2]|0)==0?(A=f+212|0,B=Ya[c[29436>>2]&127](c[(c[A>>2]|0)+44>>2]|0,D,0)|0,(B|0)!=0):0){k=c[A>>2]|0;l=c[B+4>>2]|0;if(!(c[l>>2]|0)){l=sf(k,D,B)|0;break}else{B=k+12|0;c[B>>2]=(c[B>>2]|0)+1;B=l+30|0;b[B>>1]=(b[B>>1]|0)+1<<16>>16;break}}else l=0;while(0);c[J>>2]=l;if(C)if(!(a[f+7>>0]|0)){C=g;B=c[C+4>>2]|0;k=f+80|0;g=c[k+4>>2]|0;k=((B|0)<(g|0)|((B|0)==(g|0)?(c[C>>2]|0)>>>0<=(c[k>>2]|0)>>>0:0))&1}else k=1;else if(!l)k=1;else k=((e[l+28>>1]|0)>>>3&1^1)&65535;m=c[f+60>>2]|0;n=c[m>>2]|0;do if(n){o=a[f+16>>0]|0;if((o&255)>3){if(!k){F=51;break}}else if(!((k|0)!=0&o<<24>>24==0)){F=51;break}E=c[H>>2]|0;k=Yv(E|0,((E|0)<0)<<31>>31|0,D+-1|0,0)|0;l=L()|0;l=_a[c[n+12>>2]&127](m,I,E,k,l)|0;k=f+32|0;if(D>>>0>(c[k>>2]|0)>>>0)c[k>>2]=D;k=c[f+88>>2]|0;if(!k)n=l;else{nf(k,D,I);n=l}}else F=51;while(0);if((F|0)==51)if((i|0)==0&(l|0)==0){F=f+20|0;a[F>>0]=a[F>>0]|2;k=Za[c[f+204>>2]&127](f,D,J,1)|0;a[F>>0]=a[F>>0]&-3;if(k|0){J=k;Ra=K;return J|0}n=c[J>>2]|0;l=n+28|0;k=e[l>>1]|0;if((k&17|0)!=0?(E=k&65519,b[l>>1]=E,(k&1|0)!=0):0){m=(E^3)&65535;b[l>>1]=m;k=c[n+12>>2]|0;c[n+36>>2]=0;l=c[k>>2]|0;c[n+32>>2]=l;if(!l){c[k+4>>2]=n;if(a[k+32>>0]|0)a[k+33>>0]=1}else c[l+36>>2]=n;c[k>>2]=n;k=k+8|0;if((m&8)==0&(c[k>>2]|0)==0){c[k>>2]=n;n=0}else n=0}else n=0}else n=0;k=c[J>>2]|0;if(!k){J=n;Ra=K;return J|0}k=c[k+4>>2]|0;ew(k|0,I|0,c[H>>2]|0)|0;ab[c[f+200>>2]&127](c[J>>2]|0);if(p){m=f+104|0;k=k+24|0;l=m+16|0;do{a[m>>0]=a[k>>0]|0;m=m+1|0;k=k+1|0}while((m|0)<(l|0))}Df(c[J>>2]|0);J=n;Ra=K;return J|0}function Af(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+32|0;p=t+16|0;k=t+8|0;q=t;s=a+72|0;j=s;i=c[j>>2]|0;j=c[j+4>>2]|0;if((i|0)==0&(j|0)==0){i=a+148|0;r=i;n=0;o=0;i=c[i>>2]|0;j=0}else{o=Sv(i|0,j|0,-1,-1)|0;n=L()|0;r=a+148|0;i=c[r>>2]|0;n=Wv(o|0,n|0,i|0,0)|0;n=Sv(n|0,L()|0,1,0)|0;n=Yv(n|0,L()|0,i|0,0)|0;o=L()|0;j=0}m=s;c[m>>2]=n;c[m+4>>2]=o;m=Sv(n|0,o|0,i|0,j|0)|0;l=L()|0;if((l|0)>(f|0)|(l|0)==(f|0)&m>>>0>e>>>0){s=101;Ra=t;return s|0}if((b|0)==0?(m=a+80|0,(n|0)==(c[m>>2]|0)?(o|0)==(c[m+4>>2]|0):0):0)e=a+64|0;else{i=a+64|0;j=c[i>>2]|0;j=_a[c[(c[j>>2]|0)+8>>2]&127](j,k,8,n,o)|0;if(j|0){s=j;Ra=t;return s|0}if(!(Lu(k,32352,8)|0))e=i;else{s=101;Ra=t;return s|0}}l=c[e>>2]|0;m=Sv(n|0,o|0,8,0)|0;i=L()|0;i=_a[c[(c[l>>2]|0)+8>>2]&127](l,p,4,m,i)|0;if(i|0){s=i;Ra=t;return s|0}k=p+1|0;l=p+2|0;m=p+3|0;c[g>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);f=c[e>>2]|0;g=Sv(n|0,o|0,12,0)|0;i=L()|0;i=_a[c[(c[f>>2]|0)+8>>2]&127](f,p,4,g,i)|0;if(i|0){s=i;Ra=t;return s|0}c[a+48>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);f=c[e>>2]|0;g=Sv(n|0,o|0,16,0)|0;i=L()|0;i=_a[c[(c[f>>2]|0)+8>>2]&127](f,p,4,g,i)|0;if(i|0){s=i;Ra=t;return s|0}c[h>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);j=s;b=c[j>>2]|0;j=c[j+4>>2]|0;a:do if((b|0)==0&(j|0)==0){g=c[e>>2]|0;h=Sv(n|0,o|0,20,0)|0;i=L()|0;i=_a[c[(c[g>>2]|0)+8>>2]&127](g,p,4,h,i)|0;do if(!i){f=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);h=c[e>>2]|0;o=Sv(n|0,o|0,24,0)|0;i=L()|0;i=_a[c[(c[h>>2]|0)+8>>2]&127](h,p,4,o,i)|0;if(i|0)break;i=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);c[q>>2]=i;if(!i){i=c[a+152>>2]|0;c[q>>2]=i}if((!((f+-32|0)>>>0>65504|(i+-512|0)>>>0>65024)?(i+-1&i|0)==0:0)?(f+-1&f|0)==0:0){e=Se(a,q,-1)|0;c[r>>2]=f;j=s;b=c[j>>2]|0;j=c[j+4>>2]|0;i=f;break a}else i=101}while(0);s=i;Ra=t;return s|0}else{e=0;i=c[r>>2]|0}while(0);q=Sv(b|0,j|0,i|0,0)|0;r=L()|0;c[s>>2]=q;c[s+4>>2]=r;s=e;Ra=t;return s|0}function Bf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=d+212|0;h=Ya[c[29436>>2]&127](c[(c[f>>2]|0)+44>>2]|0,e,0)|0;do if(!h)g=0;else{f=c[f>>2]|0;g=c[h+4>>2]|0;if(!(c[g>>2]|0)){f=sf(f,e,h)|0;if(!f){g=0;break}g=f;f=b[f+30>>1]|0}else{k=f+12|0;c[k>>2]=(c[k>>2]|0)+1;k=g+30|0;f=(b[k>>1]|0)+1<<16>>16;b[k>>1]=f}if(f<<16>>16!=1){f=rf(g)|0;if(!f){ab[c[d+200>>2]&127](g);if(!(b[g+28>>1]&32)){Df(g);g=0;break}else{k=c[g+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[g+16>>2]=c[k>>2];c[k>>2]=g;g=0;break}}else if(!(b[g+28>>1]&32)){Df(g);g=f;break}else{k=c[g+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[g+16>>2]=c[k>>2];c[k>>2]=g;g=f;break}}k=c[g+12>>2]|0;do if(b[g+28>>1]&2){f=k+8|0;e=g+36|0;h=c[e>>2]|0;if((c[f>>2]|0)==(g|0))c[f>>2]=h;i=c[g+32>>2]|0;j=(i|0)==0;if(j){c[k+4>>2]=h;f=h}else{c[i+36>>2]=h;f=c[e>>2]|0}if(f|0){c[f+32>>2]=i;break}c[k>>2]=i;if(j)a[k+33>>0]=2}while(0);j=k+12|0;c[j>>2]=(c[j>>2]|0)+-1;cb[c[29440>>2]&255](c[k+44>>2]|0,c[g>>2]|0,1);g=0}while(0);f=c[d+88>>2]|0;if(!f)return g|0;do{c[f+16>>2]=1;f=c[f+44>>2]|0}while((f|0)!=0);return g|0}function Cf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+176|0;m=o+128|0;n=o;e=c[a>>2]|0;d=(e|0)==0;if(!d){a=e;do{l=a;a=c[a+32>>2]|0;c[l+16>>2]=a}while((a|0)!=0);a=n;b=a+128|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));if(d)a=0;else{l=m+16|0;j=m+16|0;k=n+124|0;do{h=e+16|0;a=e;e=c[h>>2]|0;c[h>>2]=0;h=0;while(1){i=n+(h<<2)|0;b=c[i>>2]|0;if(!b){b=9;break}d=m;g=b;a:while(1){f=c[g+24>>2]|0;b=d;while(1){b=b+16|0;if(f>>>0<(c[a+24>>2]|0)>>>0)break;c[b>>2]=a;b=c[a+16>>2]|0;if(!b){b=a;a=g;break a}else{d=a;a=b;b=d}}c[b>>2]=g;b=c[g+16>>2]|0;if(!b){b=g;break}else{d=g;g=b}}c[b+16>>2]=a;a=c[l>>2]|0;c[i>>2]=0;h=h+1|0;if(h>>>0>=31){b=16;break}}if((b|0)==9)c[i>>2]=a;else if((b|0)==16?(0,(h|0)==31):0){b=m;f=c[k>>2]|0;b:while(1){d=c[f+24>>2]|0;while(1){b=b+16|0;if(d>>>0<(c[a+24>>2]|0)>>>0)break;c[b>>2]=a;b=c[a+16>>2]|0;if(!b){b=a;a=f;break b}else{i=a;a=b;b=i}}c[b>>2]=f;b=c[f+16>>2]|0;if(!b){b=f;break}else{i=f;f=b;b=i}}c[b+16>>2]=a;c[k>>2]=c[j>>2]}}while((e|0)!=0);a=c[n>>2]|0}}else{a=n;b=a+128|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));a=0}g=m+16|0;f=1;do{b=c[n+(f<<2)>>2]|0;if(b)if(!a)a=b;else{d=m;c:while(1){e=c[a+24>>2]|0;while(1){d=d+16|0;if(e>>>0<(c[b+24>>2]|0)>>>0)break;c[d>>2]=b;d=c[b+16>>2]|0;if(!d){d=b;break c}else{l=b;b=d;d=l}}c[d>>2]=a;d=c[a+16>>2]|0;if(!d){d=a;a=b;break}else{l=a;a=d;d=l}}c[d+16>>2]=a;a=c[g>>2]|0}f=f+1|0}while((f|0)!=32);Ra=o;return a|0}function Df(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=c[d+12>>2]|0;m=k+12|0;c[m>>2]=(c[m>>2]|0)+-1;m=d+30|0;n=(b[m>>1]|0)+-1<<16>>16;b[m>>1]=n;if(n<<16>>16)return;m=b[d+28>>1]|0;if(m&1){if(!(a[k+32>>0]|0))return;cb[c[29440>>2]&255](c[k+44>>2]|0,c[d>>2]|0,0);return}n=k+8|0;e=c[n>>2]|0;j=d+36|0;g=c[j>>2]|0;if((e|0)==(d|0)){c[n>>2]=g;l=g}else l=e;i=d+32|0;f=c[i>>2]|0;h=(f|0)==0;if(h){c[k+4>>2]=g;e=g}else{c[f+36>>2]=g;e=c[j>>2]|0}do if(!e){c[k>>2]=f;if(h){a[k+33>>0]=2;c[j>>2]=0;c[i>>2]=0;e=k;g=16;break}else{c[j>>2]=0;e=k;g=15;break}}else{c[e+32>>2]=f;f=c[k>>2]|0;c[j>>2]=0;c[i>>2]=f;if(!f){e=k;g=16}else{e=k;g=15}}while(0);if((g|0)==15)c[f+36>>2]=d;else if((g|0)==16){c[k+4>>2]=d;if(a[k+32>>0]|0)a[k+33>>0]=1}c[e>>2]=d;if(!((m&8)==0&(l|0)==0))return;c[n>>2]=d;return}function Ef(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+32|0;l=p+16|0;n=p;o=p+8|0;a[e>>0]=0;i=Xa[c[(c[b>>2]|0)+24>>2]&255](b,n)|0;h=n;g=c[h>>2]|0;h=c[h+4>>2]|0;if((i|0)!=0|((h|0)<0|(h|0)==0&g>>>0<16)){e=i;Ra=p;return e|0}m=Sv(g|0,h|0,-16,-1)|0;g=L()|0;g=_a[c[(c[b>>2]|0)+8>>2]&127](b,l,4,m,g)|0;if(g|0){e=g;Ra=p;return e|0}i=l+1|0;j=l+2|0;k=l+3|0;m=d[i>>0]<<16|d[l>>0]<<24|d[j>>0]<<8|d[k>>0];if(m>>>0>=f>>>0){e=0;Ra=p;return e|0}h=n;g=c[h>>2]|0;h=c[h+4>>2]|0;f=Sv(g|0,h|0,-16,-1)|0;q=L()|0;if((m|0)==0|((q|0)<0|(q|0)==0&f>>>0<m>>>0)){q=0;Ra=p;return q|0}q=Sv(g|0,h|0,-12,-1)|0;g=L()|0;g=_a[c[(c[b>>2]|0)+8>>2]&127](b,l,4,q,g)|0;if(g|0){q=g;Ra=p;return q|0}g=d[i>>0]<<16|d[l>>0]<<24|d[j>>0]<<8|d[k>>0];q=n;q=Sv(c[q>>2]|0,c[q+4>>2]|0,-8,-1)|0;h=L()|0;h=_a[c[(c[b>>2]|0)+8>>2]&127](b,o,8,q,h)|0;if(h|0){q=h;Ra=p;return q|0}if(Lu(o,32352,8)|0){q=0;Ra=p;return q|0}q=n;h=c[q>>2]|0;q=c[q+4>>2]|0;o=Tv(-16,-1,m|0,0)|0;q=Sv(o|0,L()|0,h|0,q|0)|0;h=L()|0;h=_a[c[(c[b>>2]|0)+8>>2]&127](b,e,m,q,h)|0;if(h|0){q=h;Ra=p;return q|0}h=0;do{g=g-(a[e+h>>0]|0)|0;h=h+1|0}while((h|0)!=(m|0));a[e+((g|0)==0?m:0)>>0]=0;q=0;Ra=p;return q|0}function Ff(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=d+100|0;c[e>>2]=(c[e>>2]|0)+1;e=c[d+88>>2]|0;if(e|0)do{c[e+16>>2]=1;e=c[e+44>>2]|0}while((e|0)!=0);j=c[d+212>>2]|0;k=j+44|0;if(!(c[k>>2]|0))return;e=c[j>>2]|0;if(e|0)do{h=e;e=c[e+32>>2]|0;if(c[h+24>>2]|0){i=c[h+12>>2]|0;f=i+8|0;g=h+36|0;d=c[g>>2]|0;if((c[f>>2]|0)==(h|0))c[f>>2]=d;f=(e|0)==0;if(f)c[i+4>>2]=d;else{c[e+36>>2]=d;d=c[g>>2]|0}if(!d){c[i>>2]=e;if(f)a[i+33>>0]=2}else c[d+32>>2]=e;g=h+28|0;b[g>>1]=b[g>>1]&-16|1;if((b[h+30>>1]|0)==0?a[i+32>>0]|0:0)cb[c[29440>>2]&255](c[i+44>>2]|0,c[h>>2]|0,0)}}while((e|0)!=0);if((c[j+12>>2]|0)!=0?(l=Ya[c[29436>>2]&127](c[k>>2]|0,1,0)|0,(l|0)!=0):0){gw(c[l>>2]|0,0,c[j+24>>2]|0)|0;e=2}else e=1;bb[c[29448>>2]&127](c[k>>2]|0,e);return}function Gf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+48|0;o=p+32|0;g=p+16|0;f=p;k=c[e+52>>2]|0;l=c[e+56>>2]|0;m=d[e+9>>0]|0;n=l+m|0;q=d[n>>0]|0;j=q>>>3;h=j&255;a[e+8>>0]=h;j=4-(j<<2)|0;a[e+10>>0]=j;i=e+76|0;c[i>>2]=120;switch((q&247)<<24>>24){case 5:{a[e+2>>0]=1;f=e+3|0;if(!(h<<24>>24)){a[f>>0]=0;c[i>>2]=121;f=181}else{a[f>>0]=1;f=180}c[e+80>>2]=f;b[e+14>>1]=b[k+28>>1]|0;f=k+30|0;break}case 2:{a[e+2>>0]=0;a[e+3>>0]=0;c[e+80>>2]=179;b[e+14>>1]=b[k+24>>1]|0;f=k+26|0;break}default:{c[f>>2]=32306;c[f+4>>2]=65035;c[f+8>>2]=31517;Db(11,32001,f);c[g>>2]=32306;c[g+4>>2]=65185;c[g+8>>2]=31517;Db(11,32001,g);q=11;Ra=p;return q|0}}b[e+16>>1]=b[f>>1]|0;a[e+11>>0]=a[k+21>>0]|0;q=c[k+32>>2]|0;b[e+26>>1]=q+65535;a[e+12>>0]=0;j=j&252;b[e+18>>1]=m+8+j;c[e+64>>2]=n+j+8;c[e+60>>2]=l+(c[k+36>>2]|0);c[e+68>>2]=l+j;n=n+3|0;n=(d[n>>0]|0)<<8|(d[n+1>>0]|0);b[e+24>>1]=n;if(n>>>0>(((q+-8|0)>>>0)/6|0)>>>0){c[o>>2]=32306;c[o+4>>2]=65199;c[o+8>>2]=31517;Db(11,32001,o);q=11;Ra=p;return q|0}c[e+20>>2]=-1;a[e>>0]=1;if(0==0?(c[(c[k+4>>2]|0)+32>>2]&2097152|0)==0:0){q=0;Ra=p;return q|0}q=Hf(e)|0;Ra=p;return q|0}function Hf(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;q=r+16|0;p=r;k=e[f+18>>1]|0;m=f+24|0;l=b[m>>1]|0;n=((l&65535)<<1)+k|0;h=c[(c[f+52>>2]|0)+36>>2]|0;i=c[f+56>>2]|0;o=((a[f+8>>0]|0)==0?-5:-4)+h|0;if(!(l<<16>>16)){q=0;Ra=r;return q|0}j=f+76|0;g=0;while(1){l=i+((g<<1)+k)|0;l=d[l>>0]<<8|d[l+1>>0];if(l>>>0<n>>>0|(l|0)>(o|0)){f=5;break}g=g+1|0;if((l+((Xa[c[j>>2]&255](f,i+l|0)|0)&65535)|0)>(h|0)){f=7;break}if(g>>>0>=(e[m>>1]|0)>>>0){g=0;f=8;break}}if((f|0)==5){c[p>>2]=32306;c[p+4>>2]=65148;c[p+8>>2]=31517;Db(11,32001,p);q=11;Ra=r;return q|0}else if((f|0)==7){c[q>>2]=32306;c[q+4>>2]=65153;c[q+8>>2]=31517;Db(11,32001,q);q=11;Ra=r;return q|0}else if((f|0)==8){Ra=r;return g|0}return 0}function If(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0;i=f+(d[b+10>>0]|0)|0;j=a[i>>0]|0;h=j&255;if(j<<24>>24<0){g=0;h=h&127;do{g=g+1|0;j=a[i+g>>0]|0;h=h<<7|j&127}while(j<<24>>24<0&g>>>0<8);i=i+g|0;j=h}else j=h;if(!(a[b+2>>0]|0))g=i+1|0;else{g=1;do{h=g;g=g+1|0}while((a[i+h>>0]|0)<0&g>>>0<10);g=i+g|0}h=e[b+14>>1]|0;if(j>>>0>h>>>0){i=e[b+16>>1]|0;b=(((j-i|0)>>>0)%(((c[(c[b+52>>2]|0)+36>>2]|0)+-4|0)>>>0)|0)+i|0;f=(g-f&65535)+4+(b>>>0>h>>>0?i:b)|0;f=f&65535;return f|0}else{f=g-f+j|0;f=f>>>0>4?f:4;f=f&65535;return f|0}return 0}function Jf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=a[f>>0]|0;i=n&255;if(n<<24>>24<0){h=0;i=i&127;do{h=h+1|0;n=a[f+h>>0]|0;i=i<<7|n&127}while(n<<24>>24<0&h>>>0<8);n=f+h|0}else n=f;h=n+1|0;m=a[h>>0]|0;j=m&255;do if(m<<24>>24<0){j=cw(j|0,0,7)|0;L()|0;h=n+2|0;m=a[h>>0]|0;j=j&16256|m&127;if(m<<24>>24<=-1){k=2;h=1;l=0;while(1){if(h>>>0>6){m=10;break}j=cw(j|0,l|0,7)|0;l=L()|0;h=k+1|0;m=a[n+h>>0]|0;j=j|m&127;if(m<<24>>24>-1){m=11;break}else{m=k;k=h;h=m}}if((m|0)==10){m=cw(j|0,l|0,8)|0;l=L()|0;j=n+k+1|0;h=j;j=m|(d[j>>0]|0);break}else if((m|0)==11){h=n+h|0;break}}else l=0}else l=0;while(0);k=h+1|0;h=g;c[h>>2]=j;c[h+4>>2]=l;c[g+12>>2]=i;c[g+8>>2]=k;h=b[e+14>>1]|0;if(i>>>0>(h&65535)>>>0){Nf(h,b[e+16>>1]|0,c[(c[e+52>>2]|0)+36>>2]|0,f,g);return}else{f=k-f+i|0;b[g+18>>1]=(f&65532|0)==0?4:f&65535;b[g+16>>1]=i;return}}function Kf(b,c){b=b|0;c=c|0;var d=0;b=4;do{d=b;b=b+1|0}while((a[c+d>>0]|0)<0&b>>>0<13);return b&65535|0}function Lf(a,d,e){a=a|0;d=d|0;e=e|0;d=((Of(d+4|0,e)|0)&255)+4&65535;b[e+18>>1]=d;c[e+12>>2]=0;b[e+16>>1]=0;c[e+8>>2]=0;return}function Mf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f+(d[e+10>>0]|0)|0;i=a[k>>0]|0;j=i&255;if(i<<24>>24<0){h=0;i=j&127;do{h=h+1|0;j=a[k+h>>0]|0;i=i<<7|j&127}while(j<<24>>24<0&h>>>0<8);h=k+h|0;j=i}else h=k;h=h+1|0;i=g;c[i>>2]=j;c[i+4>>2]=0;c[g+12>>2]=j;c[g+8>>2]=h;i=b[e+14>>1]|0;if(j>>>0>(i&65535)>>>0){Nf(i,b[e+16>>1]|0,c[(c[e+52>>2]|0)+36>>2]|0,f,g);return}else{f=h-f+j|0;b[g+18>>1]=(f&65532|0)==0?4:f&65535;b[g+16>>1]=j;return}}function Nf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=d&65535;e=((((c[g+12>>2]|0)-h|0)>>>0)%((e+-4|0)>>>0)|0)+h|0;a=(e|0)>(a&65535|0);b[g+16>>1]=a?d:e&65535;b[g+18>>1]=4-f+((c[g+8>>2]|0)+(a?h:e&65535));return}function Of(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=a[b>>0]|0;g=f&255;do if(g&128){f=d[b+1>>0]|0;if(!(f&128)){l=2;j=0;f=g<<7&16256|f;break}l=d[b+2>>0]|0;g=(g<<14|l)&2080895;if(!(l&128)){l=3;j=0;f=g|f<<7&16256;break}l=d[b+3>>0]|0;f=(f<<14|l)&2080895;if(!(l&128)){l=4;j=0;f=f|g<<7;break}k=a[b+4>>0]|0;l=k&255;h=g<<14|l;if(!(l&128)){l=5;j=g>>>18;f=h|f<<7;break}j=f|g<<7;l=d[b+5>>0]|0;i=f<<14|l;if(!(l&128)){l=6;j=j>>>18;f=i|h<<7&266354560;break}l=d[b+6>>0]|0;f=h<<14|l;if(!(l&128)){l=7;j=j>>>11;f=f&-266354561|i<<7&266354560;break}g=f&2080895;l=d[b+7>>0]|0;f=i<<14|l;if(!(l&128)){l=8;j=j>>>4;f=f&-266354561|g<<7;break}else{l=9;j=(k&120)>>>3|j<<4;f=f<<8&532709120|g<<15|(d[b+8>>0]|0);break}}else{l=1;j=0;f=f&255}while(0);c[e>>2]=f;c[e+4>>2]=j;return l|0}function Pf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;l=n+8|0;k=n;j=n+12|0;if(!b){b=0;Ra=n;return b|0}if(g){i=b+4|0;h=c[i>>2]|0;h=Xa[c[(c[h>>2]|0)+28>>2]&255](h,4)|0;if(!h){h=b+43|0;if(!(a[h>>0]|0))a[h>>0]=1;h=Qf(b,d,0,0,0,e,f,g,0,0)|0;if(!h){c[j>>2]=-1;h=c[i>>2]|0;d=c[h>>2]|0;if((d|0)!=0?(Ya[c[d+40>>2]&127](h,10,j)|0,(c[j>>2]|0)==1):0){j=b+16|0;i=c[j+4>>2]|0;if((i|0)>-1|(i|0)==-1&(c[j>>2]|0)>>>0>4294967295){d=b+8|0;h=c[d>>2]|0;h=Xa[c[(c[h>>2]|0)+24>>2]&255](h,k)|0;j=c[k+4>>2]|0;if((h|0)==0&((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)){h=c[d>>2]|0;h=Ya[c[(c[h>>2]|0)+16>>2]&127](h,0,0)|0}if(h|0){c[l>>2]=c[b+108>>2];Db(h,32326,l)}h=0}else h=0}else h=1;j=0}else{j=h;h=0}}else{j=h;h=0}}else{j=0;h=0}g=b+43|0;d=a[g>>0]|0;if(d<<24>>24!=2?(a[b+50>>0]|0)==0:0)m=27;else{i=b+24|0;if((c[i>>2]|0)>0){e=b+32|0;d=0;do{f=c[(c[e>>2]|0)+(d<<2)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[(c[e>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)<(c[i>>2]|0));d=a[g>>0]|0}if(d<<24>>24!=2)m=27}if((m|0)==27){m=c[b+4>>2]|0;Xa[c[(c[m>>2]|0)+64>>2]&255](m,h)|0}d=c[b+8>>2]|0;e=c[d>>2]|0;if(e|0){Wa[c[e+4>>2]&127](d)|0;c[d>>2]=0}if(h|0){m=c[b>>2]|0;Ya[c[m+28>>2]&127](m,c[b+108>>2]|0,0)|0}h=c[b+32>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=j;Ra=n;return b|0}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=j;Ra=n;return b|0}return 0}function Qf(f,g,h,i,j,k,l,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;la=Ra;Ra=Ra+144|0;r=la+120|0;fa=la;Z=la+104|0;ia=la+132|0;c[ia>>2]=0;if(a[f+46>>0]|0){h=8;Ra=la;return h|0}ka=f+43|0;if((a[ka>>0]|0)==0?(p=c[f+4>>2]|0,p=Za[c[(c[p>>2]|0)+56>>2]&127](p,1,1,10)|0,p|0):0){h=p;Ra=la;return h|0}ja=f+45|0;a[ja>>0]=1;a:do if(!h){p=0;ea=14}else{p=f+4|0;b:do if(!i){if(!(a[ka>>0]|0)){q=c[p>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,0,1,10)|0;ea=12}}else while(1){if(a[ka>>0]|0)break b;q=c[p>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,0,1,10)|0;if((q|0)!=5){ea=12;break b}if(!(Wa[i&127](j)|0)){p=0;i=0;ea=14;break a}}while(0);if((ea|0)==12)switch(q|0){case 5:{p=0;i=0;ea=14;break a}case 0:break;default:{ha=h;break a}}a[f+44>>0]=1;p=h;ea=14}while(0);if((ea|0)==14){ha=p;q=hf(f,ia)|0}c:do if(!q){ga=f+68|0;s=c[ga>>2]|0;aa=e[f+66>>1]|0;aa=aa<<16&65536|aa&65024;if(!((s|0)==0|(aa|0)==(l|0))){c[r>>2]=32306;c[r+4>>2]=61939;c[r+8>>2]=31517;Db(11,32001,r);q=11;break}da=f+32|0;S=c[c[da>>2]>>2]|0;ca=S+96|0;d:do if((c[ca>>2]|0)>>>0<s>>>0){_=f+72|0;$=c[_>>2]|0;ba=f+4|0;p=S+104|0;l=c[p>>2]|0;e:do if(s>>>0>l>>>0){f:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,10)|0;i=0}else{i=0;ea=28}else while(1){if(a[ka>>0]|0){ea=28;break f}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,10)|0;if((q|0)!=5)break f;if(!(Wa[i&127](j)|0)){i=0;q=5;break e}}while(0);if((ea|0)==28){c[p>>2]=s;q=0;l=s;break}switch(q|0){case 5:{i=0;break e}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=s;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,9)|0;q=0;l=s}else{q=0;l=s}}else{q=0;l=s}while(0);p=S+108|0;r=c[p>>2]|0;g:do if(l>>>0>r>>>0){h:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,10)|0}else ea=161;else while(1){if(a[ka>>0]|0){ea=161;break h}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,10)|0;if((q|0)!=5)break h;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break g}}while(0);if((ea|0)==161){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break g}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,9)|0;q=0}else q=0}while(0);p=S+112|0;r=c[p>>2]|0;i:do if(l>>>0>r>>>0){j:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,10)|0}else ea=173;else while(1){if(a[ka>>0]|0){ea=173;break j}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,10)|0;if((q|0)!=5)break j;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break i}}while(0);if((ea|0)==173){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break i}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,9)|0;q=0}else q=0}while(0);p=S+116|0;r=c[p>>2]|0;k:do if(l>>>0>r>>>0){l:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,10)|0}else ea=185;else while(1){if(a[ka>>0]|0){ea=185;break l}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,10)|0;if((q|0)!=5)break l;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break k}}while(0);if((ea|0)==185){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break k}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,9)|0;q=0}else q=0}while(0);m:do if((c[ca>>2]|0)>>>0<l>>>0){q=c[ca>>2]|0;P=c[ga>>2]|0;Q=(P+33|0)>>>12;p=(P<<1)+28+(Q*20|0)|0;W=pb(p,0)|0;if(!W){q=7;break c}gw(W|0,0,p|0)|0;R=W+4|0;c[R>>2]=Q+1;N=pb((P>>>0<4096?P:4096)<<1,0)|0;O=(N|0)==0;p=(q+34|0)>>>12;n:do if(p>>>0>Q>>>0|O)q=O?7:0;else{H=Z+4|0;I=f+24|0;J=Z+8|0;K=W+8|0;M=fa+4|0;while(1){if((c[I>>2]|0)>(p|0)?(T=c[(c[da>>2]|0)+(p<<2)>>2]|0,c[H>>2]=T,(T|0)!=0):0)q=T;else{q=kf(f,p,H)|0;if(q|0)break;q=c[H>>2]|0}r=q+16384|0;c[Z>>2]=r;if(!p){q=q+136|0;c[H>>2]=q;s=0}else s=(p<<12)+-34|0;c[H>>2]=q;G=q;E=(p|0)==(Q|0)?P-s|0:r-G>>2;F=K+((c[R>>2]|0)*20|0)+(s<<1)|0;D=s+1|0;c[J>>2]=D;if((E|0)>0){r=0;do{b[F+(r<<1)>>1]=r;r=r+1|0}while((r|0)!=(E|0));v=fa;w=v+104|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));C=0;do{t=F+(C<<1)|0;if(!(C&1)){u=0;r=1;s=M}else{r=1;A=0;s=M;while(1){B=c[s>>2]|0;z=c[fa+(A<<3)>>2]|0;u=(r|0)>0;s=(z|0)>0;if(u|s){w=0;y=0;v=0;while(1){do if(s){s=B+(v<<1)|0;if(u?(U=t+(w<<1)|0,(c[q+(e[s>>1]<<2)>>2]|0)>>>0>=(c[q+(e[U>>1]<<2)>>2]|0)>>>0):0){s=U;ea=57;break}u=v+1|0}else{s=t+(w<<1)|0;ea=57}while(0);if((ea|0)==57){ea=0;u=v;w=w+1|0}v=b[s>>1]|0;s=c[q+((v&65535)<<2)>>2]|0;x=y+1|0;b[N+(y<<1)>>1]=v;if((u|0)<(z|0))v=u+((c[q+(e[B+(u<<1)>>1]<<2)>>2]|0)==(s|0)&1)|0;else v=u;u=(w|0)<(r|0);s=(v|0)<(z|0);if(!(u|s)){r=x;break}else y=x}}else r=0;ew(B|0,N|0,r<<1|0)|0;t=A+1|0;s=fa+(t<<3)+4|0;if(!(1<<t&C)){u=t;t=B;break}else{A=t;t=B}}}c[s>>2]=t;c[fa+(u<<3)>>2]=r;C=C+1|0}while((C|0)!=(E|0));s=u+1|0;if(s>>>0<13)ea=64;else q=r}else{v=fa;w=v+104|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));r=0;s=1;t=0;ea=64}if((ea|0)==64){ea=0;do{if(1<<s&E){B=c[fa+(s<<3)+4>>2]|0;A=c[fa+(s<<3)>>2]|0;v=(r|0)>0;u=(A|0)>0;if(v|u){x=0;z=0;w=0;while(1){do if(u){u=B+(w<<1)|0;if(v?(V=t+(x<<1)|0,(c[q+(e[u>>1]<<2)>>2]|0)>>>0>=(c[q+(e[V>>1]<<2)>>2]|0)>>>0):0){u=V;ea=73;break}v=w+1|0}else{u=t+(x<<1)|0;ea=73}while(0);if((ea|0)==73){ea=0;v=w;x=x+1|0}C=b[u>>1]|0;u=c[q+((C&65535)<<2)>>2]|0;y=z+1|0;b[N+(z<<1)>>1]=C;if((v|0)<(A|0))w=v+((c[q+(e[B+(v<<1)>>1]<<2)>>2]|0)==(u|0)&1)|0;else w=v;v=(x|0)<(r|0);u=(w|0)<(A|0);if(!(v|u)){r=y;break}else z=y}}else r=0;ew(B|0,N|0,r<<1|0)|0;t=B}s=s+1|0}while((s|0)!=13);q=r}c[K+(p*20|0)+16>>2]=D;c[K+(p*20|0)+12>>2]=q;c[K+(p*20|0)+4>>2]=F;c[K+(p*20|0)+8>>2]=G;if(p>>>0<Q>>>0)p=p+1|0;else{q=0;break n}}}while(0);do if(!O)if(!(c[7324]|0)){ab[c[29344>>2]&127](N);break}else{V=Wa[c[29352>>2]&127](N)|0;c[14978]=(c[14978]|0)-V;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](N);break}while(0);if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](W);p=0;l=0;ea=129;break}else{p=Wa[c[29352>>2]&127](W)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](W);p=0;l=0;ea=129;break}o:do if(!i){if(a[ka>>0]|0)break;X=c[ba>>2]|0;X=Za[c[(c[X>>2]|0)+56>>2]&127](X,3,1,10)|0;ea=95}else while(1){if(a[ka>>0]|0)break o;p=c[ba>>2]|0;p=Za[c[(c[p>>2]|0)+56>>2]&127](p,3,1,10)|0;if((p|0)!=5){X=p;ea=95;break o}if(!(Wa[i&127](j)|0)){p=W;l=W;break m}}while(0);if((ea|0)==95?X|0:0){q=X;p=W;l=W;ea=129;break}F=c[ca>>2]|0;c[S+128>>2]=l;E=f+8|0;p=c[E>>2]|0;G=k>>>2&3;H=(G|0)==0;if(!H?(Y=Xa[c[(c[p>>2]|0)+20>>2]&255](p,G)|0,(Y|0)!=0):0)q=Y;else ea=98;p:do if((ea|0)==98){k=Yv($|0,0,aa|0,0)|0;Y=L()|0;q=fa;c[q>>2]=k;c[q+4>>2]=Y;q=c[ba>>2]|0;q=Xa[c[(c[q>>2]|0)+24>>2]&255](q,Z)|0;if(q|0)break;Y=Z;X=c[Y+4>>2]|0;Z=fa;k=c[Z+4>>2]|0;do if((X|0)<(k|0)|((X|0)==(k|0)?(c[Y>>2]|0)>>>0<(c[Z>>2]|0)>>>0:0)){p=c[ba>>2]|0;q=c[p>>2]|0;if(!q)break;Ya[c[q+40>>2]&127](p,5,fa)|0}while(0);C=g+264|0;D=aa|24;p=c[R>>2]|0;q:do if((p|0)>0){q=0;while(1){B=c[W>>2]|0;r=-1;A=p;while(1){z=A;A=A+-1|0;u=W+8+(A*20|0)|0;s=c[u>>2]|0;v=c[W+8+(A*20|0)+12>>2]|0;r:do if((s|0)<(v|0)){w=c[W+8+(A*20|0)+8>>2]|0;x=c[W+8+(A*20|0)+4>>2]|0;while(1){t=b[x+(s<<1)>>1]|0;y=c[w+((t&65535)<<2)>>2]|0;if(y>>>0>B>>>0)break;s=s+1|0;c[u>>2]=s;if((s|0)>=(v|0)){s=q;break r}}if(y>>>0>=r>>>0){s=q;break}s=(c[W+8+(A*20|0)+16>>2]|0)+(t&65535)|0;r=y}else s=q;while(0);if((z|0)<=1)break;else q=s}c[W>>2]=r;if((r|0)==-1)break q;if(c[C>>2]|0)break;if(!(s>>>0<=F>>>0|s>>>0>l>>>0|r>>>0>$>>>0)){Z=Yv(s+-1|0,0,D|0,0)|0;Z=Sv(Z|0,L()|0,56,0)|0;q=L()|0;Y=c[E>>2]|0;q=_a[c[(c[Y>>2]|0)+8>>2]&127](Y,m,aa,Z,q)|0;if(q|0)break p;Z=Yv(r+-1|0,0,aa|0,0)|0;q=L()|0;Y=c[ba>>2]|0;q=_a[c[(c[Y>>2]|0)+12>>2]&127](Y,m,aa,Z,q)|0;if(q|0)break p;p=c[R>>2]|0}if((p|0)>0)q=s;else{ea=105;break q}}q=(a[g+81>>0]|0)==0?9:7;break p}else ea=105;while(0);if((ea|0)==105)c[W>>2]=-1;do if((l|0)==(c[(c[c[da>>2]>>2]|0)+16>>2]|0)){ea=Yv(c[_>>2]|0,0,aa|0,0)|0;q=L()|0;m=c[ba>>2]|0;q=Ya[c[(c[m>>2]|0)+16>>2]&127](m,ea,q)|0;if(q|0)break p;p=c[ba>>2]|0;if(H)break;q=Xa[c[(c[p>>2]|0)+20>>2]&255](p,G)|0;if(q|0)break p}while(0);c[ca>>2]=l;q=0}while(0);if(a[ka>>0]|0){p=W;l=W;ea=129;break}p=c[ba>>2]|0;Za[c[(c[p>>2]|0)+56>>2]&127](p,3,1,9)|0;p=W;l=W;ea=129}else{p=0;l=0;ea=129}while(0);if((ea|0)==129)if((q|0)!=5){u=l;ea=131;break}q=0;u=l;ea=131}else{q=0;p=0;u=0;ea=131}while(0);do if((ea|0)==131){if((ha|0)!=0&(q|0)==0)if((c[ca>>2]|0)>>>0>=(c[ga>>2]|0)>>>0)if((ha|0)>1){Fb(4,fa);t=f+4|0;s:do if(!i)if(!(a[ka>>0]|0)){q=c[t>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,4,10)|0;ea=141}else ea=142;else while(1){if(a[ka>>0]|0){ea=142;break s}q=c[t>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,4,10)|0;if((q|0)!=5){ea=141;break s}if(!(Wa[i&127](j)|0)){q=5;break}}while(0);if((ea|0)==141)if(!q)ea=142;if((ea|0)==142){if((ha|0)==3){s=c[fa>>2]|0;i=c[da>>2]|0;q=c[i>>2]|0;l=q+96|0;ea=f+84|0;fa=f+112|0;c[fa>>2]=(c[fa>>2]|0)+1;c[ga>>2]=0;fa=ea+1|0;v=ea+2|0;r=ea+3|0;w=(d[fa>>0]<<16|d[ea>>0]<<24|d[v>>0]<<8|d[r>>0])+1|0;a[ea>>0]=w>>>24;a[fa>>0]=w>>>16;a[v>>0]=w>>>8;a[r>>0]=w;c[f+88>>2]=s;i=c[i>>2]|0;r=f+52|0;a[f+64>>0]=1;c[r>>2]=3007e3;w=c[r+4>>2]|0;v=w+6014e3+(c[r+8>>2]|0)|0;w=w+3007e3+(c[r+12>>2]|0)+v|0;v=w+v|0;w=w+(c[r+20>>2]|0)+v|0;v=v+(c[r+24>>2]|0)+w|0;w=w+(c[r+28>>2]|0)+v|0;v=v+(c[r+32>>2]|0)+w|0;c[f+92>>2]=v;c[f+96>>2]=w+s+v;v=i+48|0;s=r;w=v+48|0;do{a[v>>0]=a[s>>0]|0;v=v+1|0;s=s+1|0}while((v|0)<(w|0));if((a[ka>>0]|0)!=2){fa=c[t>>2]|0;ab[c[(c[fa>>2]|0)+60>>2]&127](fa)}v=i;s=r;w=v+48|0;do{a[v>>0]=a[s>>0]|0;v=v+1|0;s=s+1|0}while((v|0)<(w|0));c[l>>2]=0;c[q+128>>2]=0;c[q+104>>2]=0;c[q+108>>2]=-1;c[q+112>>2]=-1;c[q+116>>2]=-1;q=c[f+8>>2]|0;q=Ya[c[(c[q>>2]|0)+16>>2]&127](q,0,0)|0}else q=0;if(!(a[ka>>0]|0)){fa=c[t>>2]|0;Za[c[(c[fa>>2]|0)+56>>2]&127](fa,4,4,9)|0}}}else q=0;else q=5;if(p)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{fa=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);switch(q|0){case 0:case 5:break;default:break c}if(n|0)c[n>>2]=c[ga>>2];if(o)c[o>>2]=c[(c[c[da>>2]>>2]|0)+96>>2]}while(0);if(c[ia>>2]|0){v=f+52|0;w=v+48|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0))}p=f+44|0;if(a[p>>0]|0){if(!(a[ka>>0]|0)){ia=c[f+4>>2]|0;Za[c[(c[ia>>2]|0)+56>>2]&127](ia,0,1,9)|0}a[p>>0]=0;c[f+104>>2]=0;a[f+47>>0]=0}if(!(a[ka>>0]|0)){ka=c[f+4>>2]|0;Za[c[(c[ka>>2]|0)+56>>2]&127](ka,1,1,9)|0}a[ja>>0]=0;h=(ha|0)==(h|0)|(q|0)!=0?q:5;Ra=la;return h|0}function Rf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=e+44|0;if(c[l>>2]|0){n=0;return n|0}m=c[e+12>>2]|0;j=m+56|0;n=c[j>>2]|0;i=c[m+72>>2]|0;h=c[i+20>>2]|0;if((b[i+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[i+24>>2]|0)>>>0:0){if(c[h+96>>2]|0){f=Ve(i)|0;g=10}}else g=6;do if((g|0)==6){f=c[h+40>>2]|0;if(f|0){n=f;return n|0}if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(i)|0;g=10;break}else{f=Xf(i)|0;g=10;break}}while(0);if((g|0)==10?f|0:0){n=f;return n|0}f=n;g=2720;h=f+16|0;do{a[f>>0]=a[g>>0]|0;f=f+1|0;g=g+1|0}while((f|0)<(h|0));f=e+32|0;a[n+16>>0]=(c[f>>2]|0)>>>8;a[n+17>>0]=(c[f>>2]|0)>>>16;a[n+18>>0]=1;a[n+19>>0]=1;a[n+20>>0]=(c[f>>2]|0)-(c[e+36>>2]|0);a[n+21>>0]=64;a[n+22>>0]=32;a[n+23>>0]=32;f=n+24|0;h=f+76|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(h|0));h=c[j>>2]|0;i=m+52|0;j=c[i>>2]|0;k=d[m+9>>0]|0;if(!(b[j+22>>1]&12)){f=h+k|0;g=j+36|0}else{g=j+36|0;f=h+k|0;gw(f|0,0,(c[g>>2]|0)-k|0)|0}a[f>>0]=13;f=k+8|0;o=h+(k+1)|0;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;a[h+(k+7)>>0]=0;k=h+(k+5)|0;a[k>>0]=(c[g>>2]|0)>>>8;a[k+1>>0]=c[g>>2];c[m+20>>2]=(c[g>>2]|0)-f&65535;a[m+8>>0]=1;a[m+10>>0]=0;c[m+76>>2]=120;k=c[i>>2]|0;a[m+2>>0]=1;a[m+3>>0]=1;c[m+80>>2]=180;b[m+14>>1]=b[k+28>>1]|0;b[m+16>>1]=b[k+30>>1]|0;a[m+11>>0]=a[k+21>>0]|0;b[m+18>>1]=f;c[m+60>>2]=h+(c[g>>2]|0);c[m+64>>2]=h+f;c[m+68>>2]=h;a[m+12>>0]=0;b[m+26>>1]=(c[j+32>>2]|0)+65535;b[m+24>>1]=0;a[m>>0]=1;m=e+22|0;b[m>>1]=b[m>>1]|2;m=a[e+17>>0]|0;a[n+52>>0]=0;a[n+53>>0]=0;a[n+54>>0]=0;a[n+55>>0]=m;m=a[e+18>>0]|0;a[n+64>>0]=0;a[n+65>>0]=0;a[n+66>>0]=0;a[n+67>>0]=m;c[l>>2]=1;a[n+31>>0]=1;n=0;return n|0}function Sf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+48|0;p=F+16|0;D=F;u=F+32|0;h=F+28|0;B=d+216|0;f=c[B>>2]|0;a:do if(!f){A=d+16|0;b:do if(!(a[A>>0]|0)){q=d+17|0;z=d+13|0;y=d+60|0;f=d+176|0;g=d+180|0;c:while(1){e=a[q>>0]|0;switch(e<<24>>24){case 0:case 5:break;default:{t=11;break c}}if(a[z>>0]|0){t=8;break}e=c[y>>2]|0;e=Xa[c[(c[e>>2]|0)+28>>2]&255](e,1)|0;switch(e|0){case 0:{t=7;break c}case 5:break;default:{t=136;break a}}if(!(Wa[c[f>>2]&127](c[g>>2]|0)|0)){e=5;t=138;break a}}if((t|0)==7){e=a[q>>0]|0;t=8}else if((t|0)==11)if((e&255)<2)t=12;else t=48;if((t|0)==8)if(e<<24>>24==5)t=48;else{a[q>>0]=1;t=12}if((t|0)==12){g=c[d>>2]|0;c[u>>2]=1;j=d+64|0;k=(c[c[j>>2]>>2]|0)!=0;if(k){e=0;f=1}else{e=Za[c[g+32>>2]&127](g,c[d+172>>2]|0,0,u)|0;f=c[u>>2]|0}if((f|0)!=0&(e|0)==0){c[h>>2]=0;e=c[y>>2]|0;e=Xa[c[(c[e>>2]|0)+36>>2]&255](e,h)|0;d:do if(!(c[h>>2]|e)){e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(i=c[e+72>>2]|0,(i|0)!=0):0){e=i;t=22}else t=19;do if((t|0)==19){e=c[y>>2]|0;f=c[e>>2]|0;if(f){i=D;c[i>>2]=0;c[i+4>>2]=0;e=Xa[c[f+24>>2]&255](e,D)|0;if(!e){i=D;t=c[d+152>>2]|0;e=((t|0)<0)<<31>>31;i=Sv(c[i>>2]|0,c[i+4>>2]|0,-1,-1)|0;i=Sv(i|0,L()|0,t|0,e|0)|0;e=Wv(i|0,L()|0,t|0,e|0)|0;L()|0;t=22;break}else{f=0;break d}}else{l=0;t=25}}while(0);if((t|0)==22){f=d+156|0;if(e>>>0>(c[f>>2]|0)>>>0)c[f>>2]=e;else{l=e;t=25}}if((t|0)==25?!(k|(l|0)!=0):0){e=a[q>>0]|0;switch(e<<24>>24){case 0:case 1:case 5:{if(!(a[z>>0]|0)){n=c[y>>2]|0;if(Xa[c[(c[n>>2]|0)+28>>2]&255](n,2)|0){f=0;e=0;break d}e=a[q>>0]|0}if(e<<24>>24!=5)a[q>>0]=2;break}default:{}}Ya[c[g+28>>2]&127](g,c[d+172>>2]|0,0)|0;if(a[d+4>>0]|0){f=0;e=0;break}e=c[y>>2]|0;f=c[e>>2]|0;if(!f){f=0;e=0;break}if(!(a[z>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[q>>0]|0)==5){f=0;e=0;break}a[q>>0]=1;f=0;e=0;break}e:do if(!k){c[D>>2]=2049;e=_a[c[g+24>>2]&127](g,c[d+172>>2]|0,c[j>>2]|0,2049,D)|0;switch(e|0){case 0:break e;case 14:break;default:{f=0;break d}}f=1;e=0;break d}while(0);a[D>>0]=0;e=c[j>>2]|0;e=_a[c[(c[e>>2]|0)+8>>2]&127](e,D,1,0,0)|0;e=(e|0)==522?0:e;if(!k?(m=c[j>>2]|0,n=c[m>>2]|0,n|0):0){Wa[c[n+4>>2]&127](m)|0;c[m>>2]=0}f=(a[D>>0]|0)!=0&1}else f=0;while(0)}else f=0;if(e|0){t=138;break a}if(f|0)t=48}do if((t|0)==48){if(a[d+14>>0]|0){e=776;t=138;break a}switch(a[q>>0]|0){case 0:case 1:case 2:case 3:case 5:{if((a[z>>0]|0)==0?(o=c[y>>2]|0,o=Xa[c[(c[o>>2]|0)+28>>2]&255](o,4)|0,o|0):0){e=o;t=138;break a}a[q>>0]=4;break}default:{}}h=d+64|0;e=c[h>>2]|0;f=c[e>>2]|0;if(!f){f=c[d>>2]|0;g=d+172|0;e=Za[c[f+32>>2]&127](f,c[g>>2]|0,0,D)|0;if((e|0)==0&(c[D>>2]|0)!=0){c[u>>2]=0;e=_a[c[f+24>>2]&127](f,c[g>>2]|0,c[h>>2]|0,2050,u)|0;if(!e)if(c[u>>2]&1){c[p>>2]=31984;c[p+4>>2]=55845;c[p+8>>2]=31517;Db(14,32001,p);e=c[h>>2]|0;f=c[e>>2]|0;if(!f)e=14;else{Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0;e=14}}else e=0}g=c[h>>2]|0;f=c[g>>2]|0;if(!f)if((a[d+4>>0]|0)==0?(r=c[y>>2]|0,s=c[r>>2]|0,(s|0)!=0):0){if(!(a[z>>0]|0))Xa[c[s+32>>2]&255](r,1)|0;if((a[q>>0]|0)!=5){a[q>>0]=1;t=72}else t=72}else t=72;else{e=g;t=61}}else t=61;do if((t|0)==61){if(!(a[d+7>>0]|0)){e=Xa[c[f+20>>2]&255](e,2)|0;if(e|0)break;e=c[h>>2]|0;f=c[e>>2]|0}e=Xa[c[f+24>>2]&255](e,d+80|0)|0;if(!e){e=xf(d,(a[d+12>>0]|0)==0&1)|0;a[A>>0]=0;t=72}}while(0);if((t|0)==72)if(!e)break;switch((e&255)<<24>>24){case 10:case 13:break;default:{t=138;break a}}c[d+40>>2]=e;a[A>>0]=6;c[d+204>>2]=75;t=138;break a}while(0);h=d+12|0;if(!(a[h>>0]|0)){if(a[d+23>>0]|0){e=c[y>>2]|0;e=_a[c[(c[e>>2]|0)+8>>2]&127](e,D,16,24,0)|0;switch(e|0){case 0:break;case 522:{c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;c[D+12>>2]=0;break}default:{t=136;break a}}if(Lu(d+104|0,D,16)|0)Ff(d);if(a[h>>0]|0){e=0;break}}e=c[d>>2]|0;g=d+220|0;e=Za[c[e+32>>2]&127](e,c[g>>2]|0,0,u)|0;f:do if(!e){if(!(c[u>>2]|0)){e=d+5|0;if((a[e>>0]|0)!=5){e=0;break}a[e>>0]=0;e=0;break}e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(v=c[e+72>>2]|0,(v|0)!=0):0){f=v;t=91}else t=88;do if((t|0)==88?(w=c[y>>2]|0,x=c[w>>2]|0,x|0):0){e=D;c[e>>2]=0;c[e+4>>2]=0;e=Xa[c[x+24>>2]&255](w,D)|0;if(!e){x=D;t=c[d+152>>2]|0;f=((t|0)<0)<<31>>31;x=Sv(c[x>>2]|0,c[x+4>>2]|0,-1,-1)|0;x=Sv(x|0,L()|0,t|0,f|0)|0;f=Wv(x|0,L()|0,t|0,f|0)|0;L()|0;t=91;break}else break b}while(0);do if((t|0)==91){e=d+156|0;if(f>>>0<=(c[e>>2]|0)>>>0){if(!f)break}else c[e>>2]=f;if(a[h>>0]|0)Ga();if(c[B>>2]|0)Ga();e=c[c[y>>2]>>2]|0;if(a[z>>0]|0){e=14;break f}if(!(a[d+4>>0]|0)){if((c[e>>2]|0)<=1){e=14;break f}if(!(c[e+52>>2]|0)){e=14;break f}}e=c[d+64>>2]|0;f=c[e>>2]|0;if(f|0){Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0}e=Uf(d)|0;if(e|0)break f;a[d+5>>0]=5;a[A>>0]=0;e=0;break f}while(0);e=c[d>>2]|0;e=Ya[c[e+28>>2]&127](e,c[g>>2]|0,0)|0}while(0)}else e=0}else e=0;while(0);f=c[B>>2]|0;if(!f)t=124;else t=111}else t=111;while(0);if((t|0)==111){c[D>>2]=0;e=f+44|0;if(a[e>>0]|0){if(!(a[f+43>>0]|0)){A=c[f+4>>2]|0;Za[c[(c[A>>2]|0)+56>>2]&127](A,0,1,9)|0}a[e>>0]=0;c[f+104>>2]=0;a[f+47>>0]=0}e=f+40|0;g=b[e>>1]|0;if(g<<16>>16>-1){if(!(a[f+43>>0]|0)){A=c[f+4>>2]|0;Za[c[(c[A>>2]|0)+56>>2]&127](A,(g<<16>>16)+3|0,1,5)|0}b[e>>1]=-1}g=c[B>>2]|0;f=0;do{f=f+1|0;e=gf(g,D,0,f)|0}while((e|0)==-1);if(c[D>>2]|e|0)Ff(d);t=124}g:do if((t|0)==124)if((a[d+12>>0]|0)==0?(E=d+16|0,(e|0)==0&(a[E>>0]|0)==0):0){g=d+24|0;e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(C=c[e+72>>2]|0,(C|0)!=0):0){e=C;t=133}else t=129;do if((t|0)==129){e=c[d+60>>2]|0;f=c[e>>2]|0;if(f){C=D;c[C>>2]=0;c[C+4>>2]=0;e=Xa[c[f+24>>2]&255](e,D)|0;if(!e){t=c[d+152>>2]|0;e=((t|0)<0)<<31>>31;D=Sv(c[D>>2]|0,c[D+4>>2]|0,-1,-1)|0;D=Sv(D|0,L()|0,t|0,e|0)|0;e=Wv(D|0,L()|0,t|0,e|0)|0;L()|0;t=133;break}else{t=138;break g}}else e=0}while(0);if((t|0)==133){f=d+156|0;if(e>>>0>(c[f>>2]|0)>>>0)c[f>>2]=e}c[g>>2]=e;e=E;t=139}else t=136;while(0);if((t|0)==136)if(!e){e=d+16|0;t=139}else t=138;if((t|0)==138){vf(d);d=e;Ra=F;return d|0}else if((t|0)==139){a[e>>0]=1;a[d+23>>0]=1;d=0;Ra=F;return d|0}return 0}function Tf(a){a=a|0;var b=0,d=0,e=0;d=a+80|0;a=c[d>>2]|0;if(!a)return;b=a+-4|0;c[d>>2]=b;a=b;do if((c[14816]|0)>>>0<=a>>>0)if((c[14817]|0)>>>0>a>>>0){c[14979]=(c[14979]|0)+-1;c[b>>2]=c[14819];c[14819]=b;b=(c[14820]|0)+1|0;c[14820]=b;c[14821]=(b|0)<(c[14815]|0)&1;break}else{a=Wa[c[29352>>2]&127](b)|0;e=7;break}else{a=Wa[c[29352>>2]&127](b)|0;e=7}while(0);do if((e|0)==7){c[14980]=(c[14980]|0)-a;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}while(0);c[d>>2]=0;return}function Uf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;s=u;f=d+4|0;e=a[f>>0]|0;a:do if(!(e<<24>>24))e=0;else{i=d+17|0;switch(a[i>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:break a}h=d+13|0;do if(!(a[h>>0]|0)){e=d+60|0;g=c[e>>2]|0;g=Xa[c[(c[g>>2]|0)+28>>2]&255](g,4)|0;if(!g){e=a[f>>0]|0;break}e=c[e>>2]|0;f=c[e>>2]|0;if(!f){t=g;Ra=u;return t|0}if(!(a[h>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[i>>0]|0)==5){t=g;Ra=u;return t|0}a[i>>0]=1;t=g;Ra=u;return t|0}while(0);a[i>>0]=4}while(0);n=c[d>>2]|0;p=c[d+60>>2]|0;o=c[d+220>>2]|0;k=d+160|0;j=c[k>>2]|0;k=c[k+4>>2]|0;q=d+216|0;c[q>>2]=0;i=(c[n+4>>2]|0)+120|0;r=Sv(i|0,0,-1,-1)|0;m=L()|0;do if(!(m>>>0>0|(m|0)==0&r>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f){e=7;break}else r=f}else{f=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){r=c[14978]|0;m=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=r>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(!g){e=7;break}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;r=g}else r=g}gw(r|0,0,i|0)|0;c[r>>2]=n;i=r+120|0;l=r+8|0;c[l>>2]=i;m=r+4|0;c[m>>2]=p;b[r+40>>1]=-1;f=r+16|0;c[f>>2]=j;c[f+4>>2]=k;c[r+108>>2]=o;f=r+48|0;a[f>>0]=1;g=r+49|0;a[g>>0]=1;d=r+43|0;a[d>>0]=e<<24>>24==0?0:2;c[s>>2]=524294;e=_a[c[n+24>>2]&127](n,o,i,524294,s)|0;if(!e){if(c[s>>2]&1|0)a[r+46>>0]=1;e=Wa[c[(c[p>>2]|0)+48>>2]&127](p)|0;if(e&1024|0)a[f>>0]=0;if(e&4096|0)a[g>>0]=0;c[q>>2]=r;e=0;break}f=a[d>>0]|0;if(f<<24>>24!=2?(a[r+50>>0]|0)==0:0)t=38;else{i=r+24|0;if((c[i>>2]|0)>0){g=r+32|0;f=0;do{h=c[(c[g>>2]|0)+(f<<2)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[(c[g>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)<(c[i>>2]|0));f=a[d>>0]|0}if(f<<24>>24!=2)t=38}if((t|0)==38){t=c[m>>2]|0;Xa[c[(c[t>>2]|0)+64>>2]&255](t,0)|0}f=c[l>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{t=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else e=7;while(0);t=e;Ra=u;return t|0}function Vf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;n=a+96|0;e=c[n>>2]|0;d=a+92|0;q=sb(c[d>>2]|0,b*48|0,0)|0;if(!q){r=7;return r|0}gw(q+(e*48|0)|0,0,(b-e|0)*48|0)|0;c[d>>2]=q;if((e|0)>=(b|0)){r=0;return r|0}i=a+24|0;j=a+64|0;k=a+148|0;l=a+52|0;m=a+72|0;h=a+216|0;d=e;while(1){g=c[i>>2]|0;c[q+(d*48|0)+20>>2]=g;if((c[c[j>>2]>>2]|0)!=0?(p=m,o=c[p>>2]|0,p=c[p+4>>2]|0,(p|0)>0|(p|0)==0&o>>>0>0):0){a=o;e=p}else{a=c[k>>2]|0;e=0}f=q+(d*48|0)|0;c[f>>2]=a;c[f+4>>2]=e;c[q+(d*48|0)+24>>2]=c[l>>2];if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](512)|0;if(!a)break}else{a=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){s=c[14978]|0;f=Tv(e|0,f|0,a|0,((a|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&f>>>0<=s>>>0)&1}a=Wa[c[29340>>2]&127](a)|0;if(!a)break;e=Wa[c[29352>>2]&127](a)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}gw(a+4|0,0,508)|0;c[a>>2]=g;c[q+(d*48|0)+16>>2]=a;a=c[h>>2]|0;if(a|0){c[q+(d*48|0)+28>>2]=c[a+68>>2];c[q+(d*48|0)+32>>2]=c[a+76>>2];c[q+(d*48|0)+36>>2]=c[a+80>>2];c[q+(d*48|0)+40>>2]=c[a+112>>2]}d=d+1|0;c[n>>2]=d;if((d|0)>=(b|0)){d=0;r=22;break}}if((r|0)==22)return d|0;c[q+(d*48|0)+16>>2]=0;s=7;return s|0}function Wf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;s=C;x=c[e+20>>2]|0;w=x+152|0;g=((c[x+148>>2]|0)>>>0)/((c[w>>2]|0)>>>0)|0;B=x+20|0;a[B>>0]=a[B>>0]|4;p=e+24|0;i=c[p>>2]|0;f=i+-1|0;e=0-g|0;q=f&e;A=q+1|0;e=~(f&e);f=c[x+24>>2]|0;if(i>>>0>f>>>0)z=i+1+e|0;else z=(q+g|0)>>>0>f>>>0?f+1+e|0:g;r=(z|0)>0;if(!r){A=0;z=a[B>>0]|0;z=z&-5;a[B>>0]=z;Ra=C;return A|0}m=x+56|0;n=x+204|0;o=x+212|0;h=0;g=0;e=i;a:while(1){l=h+A|0;b:do if(((l|0)!=(e|0)?(t=c[m>>2]|0,(t|0)!=0):0)?(u=h+q|0,v=c[t>>2]|0,u>>>0<v>>>0):0){e=c[t+8>>2]|0;if(!e){f=u;k=t;e=v}else{i=u;j=t;do{f=(i>>>0)/(e>>>0)|0;j=c[j+12+(f<<2)>>2]|0;if(!j){y=20;break b}i=i-(G(f,e)|0)|0;e=c[j+8>>2]|0}while((e|0)!=0);f=i;k=j;e=c[j>>2]|0}c:do if(e>>>0<4001){if(!(1<<(f&7)&(d[k+12+(f>>>3)>>0]|0))){y=20;break b}}else{i=f+1|0;e=(f>>>0)%125|0;f=c[k+12+(e<<2)>>2]|0;if(!f){y=20;break b}while(1){if((f|0)==(i|0))break c;e=((e+1|0)>>>0)%125|0;f=c[k+12+(e<<2)>>2]|0;if(!f){y=20;break b}}}while(0);f=Ya[c[29436>>2]&127](c[(c[o>>2]|0)+44>>2]|0,l,0)|0;if(!f){c[s>>2]=0;e=0;break}i=c[o>>2]|0;e=c[f+4>>2]|0;if(!(c[e>>2]|0)){e=sf(i,l,f)|0;c[s>>2]=e;if(!e){e=0;break}}else{l=i+12|0;c[l>>2]=(c[l>>2]|0)+1;l=e+30|0;b[l>>1]=(b[l>>1]|0)+1<<16>>16;c[s>>2]=e}l=b[e+28>>1]|0;g=(l&8)==0?g:1;if(!(l&32)){Df(e);e=0;break}else{l=c[e+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[e+16>>2]=c[l>>2];c[l>>2]=e;e=0;break}}else y=20;while(0);do if((y|0)==20){y=0;if((l|0)!=((1073741824/(c[w>>2]|0)|0)+1|0)){e=Za[c[n>>2]&127](x,l,s,0)|0;if(e|0){y=22;break a}e=Xf(c[s>>2]|0)|0;f=c[s>>2]|0;l=b[f+28>>1]|0;g=(l&8)==0?g:1;if(!(l&32)){Df(f);break}else{l=c[f+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[f+16>>2]=c[l>>2];c[l>>2]=f;break}}else e=0}while(0);h=h+1|0;f=(e|0)==0;if(!((h|0)<(z|0)&f))break;e=c[p>>2]|0}if((y|0)==22)f=0;if(!((g|0)!=0&f&r)){A=e;z=a[B>>0]|0;z=z&-5;a[B>>0]=z;Ra=C;return A|0}k=x+212|0;j=0;do{g=j+A|0;h=Ya[c[29436>>2]&127](c[(c[k>>2]|0)+44>>2]|0,g,0)|0;do if(h|0){i=c[k>>2]|0;f=c[h+4>>2]|0;if(!(c[f>>2]|0)){f=sf(i,g,h)|0;if(!f)break}else{y=i+12|0;c[y>>2]=(c[y>>2]|0)+1;y=f+30|0;b[y>>1]=(b[y>>1]|0)+1<<16>>16}x=f+28|0;y=b[x>>1]|0;b[x>>1]=y|8;if(!(y&32)){Df(f);break}else{y=c[f+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[f+16>>2]=c[y>>2];c[y>>2]=f;break}}while(0);j=j+1|0}while((j|0)!=(z|0));A=a[B>>0]|0;A=A&-5;a[B>>0]=A;Ra=C;return e|0}
- function Zc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!d){i=0;return i|0}h=(Eu(d)|0)&1073741823;if(!b){i=0;return i|0}g=c[b+128>>2]|0;if(!g){i=0;return i|0}f=c[g+4>>2]|0;b=2;while(1){e=g+(b+2<<2)|0;if((av(e,d,h)|0)==0?(a[e+h>>0]|0)==0:0)break;b=(c[g+(b+1<<2)>>2]|0)+b|0;if((b|0)>=(f|0)){b=0;i=9;break}}if((i|0)==9)return b|0;i=c[g+(b<<2)>>2]|0;return i|0}function _c(f,h){f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=Ra;Ra=Ra+224|0;D=N+184|0;C=N+176|0;F=N+168|0;E=N+160|0;B=N+152|0;A=N+144|0;w=N+220|0;x=N+216|0;I=N+192|0;y=N+104|0;i=N;c[x>>2]=0;z=c[f>>2]|0;L=c[z+108>>2]|0;K=I+4|0;c[K>>2]=i;c[I>>2]=0;J=I+8|0;c[J>>2]=100;H=I+12|0;c[H>>2]=L;L=I+16|0;c[L>>2]=0;G=I+20|0;a[G>>0]=0;M=I+21|0;a[M>>0]=0;a:do if((c[z+180>>2]|0)>1){f=a[h>>0]|0;if(f<<24>>24)while(1){i=h+1|0;b:do if(f<<24>>24!=10)do{f=a[i>>0]|0;if(!(f<<24>>24))break b;i=i+1|0}while(f<<24>>24!=10);while(0);f=c[L>>2]|0;j=f+3|0;if(j>>>0<(c[J>>2]|0)>>>0){c[L>>2]=j;F=(c[K>>2]|0)+f|0;a[F>>0]=a[36874]|0;a[F+1>>0]=a[36875]|0;a[F+2>>0]=a[36876]|0}else wb(I,36874,3);f=i-h|0;j=c[L>>2]|0;k=j+f|0;if(k>>>0<(c[J>>2]|0)>>>0){if(f|0){c[L>>2]=k;ew((c[K>>2]|0)+j|0,h|0,f|0)|0}}else wb(I,h,f);f=a[i>>0]|0;if(!(f<<24>>24))break;else h=i}}else{if(!(b[f+16>>1]|0)){if(!h)break;f=(Eu(h)|0)&1073741823;if(f>>>0>=100){wb(I,h,f);break}if(!f)break;c[L>>2]=f;ew(i|0,h|0,f|0)|0;break}if(a[h>>0]|0){v=f+100|0;n=f+128|0;o=z+78|0;p=y+32|0;q=y+8|0;r=y+12|0;s=y+16|0;t=y+10|0;u=y+24|0;m=1;do{f=0;i=h;while(1){j=Bi(i,w)|0;if((c[w>>2]|0)==148){l=j;break}f=j+f|0;i=i+j|0;if(!(a[i>>0]|0)){l=0;break}}i=c[L>>2]|0;j=i+f|0;if(j>>>0<(c[J>>2]|0)>>>0){if(f|0){c[L>>2]=j;ew((c[K>>2]|0)+i|0,h|0,f|0)|0}}else wb(I,h,f);h=h+f|0;if(!l)break a;do if((a[h>>0]|0)==63)if((l|0)>1){ii(h+1|0,x)|0;f=c[x>>2]|0;break}else{c[x>>2]=m;f=m;break}else{j=c[n>>2]|0;c:do if(!j)f=0;else{k=c[j+4>>2]|0;f=2;while(1){i=j+(f+2<<2)|0;if((av(i,h,l)|0)==0?(a[i+l>>0]|0)==0:0)break;f=(c[j+(f+1<<2)>>2]|0)+f|0;if((f|0)>=(k|0)){f=0;break c}}f=c[j+(f<<2)>>2]|0}while(0);c[x>>2]=f}while(0);h=h+l|0;m=f+1|0;l=c[v>>2]|0;k=f+-1|0;f=l+(k*40|0)|0;i=e[l+(k*40|0)+8>>1]|0;do if(!(i&1)){if(i&4|0){j=f;k=c[j+4>>2]|0;l=A;c[l>>2]=c[j>>2];c[l+4>>2]=k;Eb(I,32524,A);break}if(i&8|0){g[B>>3]=+g[f>>3];Eb(I,32529,B);break}if(i&2|0){f=a[o>>0]|0;if(f<<24>>24==1){j=c[l+(k*40|0)+16>>2]|0;c[F>>2]=c[l+(k*40|0)+12>>2];c[F+4>>2]=j;Eb(I,36878,F);break}i=y;j=i+40|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[p>>2]=z;yc(y,c[l+(k*40|0)+16>>2]|0,c[l+(k*40|0)+12>>2]|0,f,0)|0;if(!((b[q>>1]&2)==0|(a[t>>0]|0)==1)?(Ig(y,1)|0)==7:0){a[G>>0]=7;c[J>>2]=0}l=c[s>>2]|0;c[E>>2]=c[r>>2];c[E+4>>2]=l;Eb(I,36878,E);if((b[q>>1]&9216)==0&(c[u>>2]|0)==0)break;Cg(y);break}if(i&16384|0){c[C>>2]=c[f>>2];Eb(I,36885,C);break}f=c[L>>2]|0;i=f+2|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;j=(c[K>>2]|0)+f|0;a[j>>0]=120;a[j+1>>0]=39}else wb(I,36898,2);j=c[l+(k*40|0)+12>>2]|0;if((j|0)>0){i=l+(k*40|0)+16|0;f=0;do{c[D>>2]=d[(c[i>>2]|0)+f>>0];Eb(I,36901,D);f=f+1|0}while((f|0)!=(j|0))}f=c[L>>2]|0;i=f+1|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;a[(c[K>>2]|0)+f>>0]=39;break}else{wb(I,36906,1);break}}else{f=c[L>>2]|0;i=f+4|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;l=(c[K>>2]|0)+f|0;a[l>>0]=78;a[l+1>>0]=85;a[l+2>>0]=76;a[l+3>>0]=76;break}else{wb(I,31171,4);break}}while(0)}while((a[h>>0]|0)!=0)}}while(0);if(!(a[G>>0]|0)){f=c[K>>2]|0;if((f|0?(a[f+(c[L>>2]|0)>>0]=0,c[H>>2]|0):0)?(a[M>>0]&4)==0:0){M=$d(I)|0;Ra=N;return M|0}}else{if(a[M>>0]&4){f=c[I>>2]|0;i=c[K>>2]|0;do if(i|0){if(f|0){if(c[f+480>>2]|0){Xd(f,i);break}I=i;if((c[f+304>>2]|0)>>>0<=I>>>0?(c[f+308>>2]|0)>>>0>I>>>0:0){I=f+300|0;c[i>>2]=c[I>>2];c[I>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);a[M>>0]=a[M>>0]&-5}c[J>>2]=0;c[L>>2]=0;c[K>>2]=0}M=c[K>>2]|0;Ra=N;return M|0}function $c(e){e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;j=m+8|0;k=m;l=e+8|0;f=b[l>>1]&31;if((f|16|0)!=18){l=d[816+f>>0]|0;Ra=m;return l|0}f=a[e+10>>0]|0;h=e+16|0;i=e+12|0;if(!(Lg(c[h>>2]|0,j,c[i>>2]|0,f)|0))f=b[l>>1]|0;else{if(!(Og(c[h>>2]|0,k,c[i>>2]|0,f)|0)){j=k;k=c[j+4>>2]|0;f=e;c[f>>2]=c[j>>2];c[f+4>>2]=k;f=4}else{g[e>>3]=+g[j>>3];f=8}f=b[l>>1]&-3|f;b[l>>1]=f}l=d[816+(f&31)>>0]|0;Ra=m;return l|0}function ad(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;ea=Ra;Ra=Ra+336|0;ca=ea+40|0;Y=ea+32|0;_=ea+24|0;Z=ea+16|0;X=ea+8|0;W=ea;ba=ea+320|0;da=ea+44|0;c[ba>>2]=0;c[m>>2]=0;P=(l|0)!=0;Q=P&1;aa=(f|0)==0;a:do if(aa){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](32)|0;u=24;break}l=Wa[c[29356>>2]&127](32)|0;if((c[14985]|0)>>>0<32)c[14985]=32;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){$=c[14978]|0;V=Tv(n|0,o|0,l|0,((l|0)<0)<<31>>31|0)|0;U=L()|0;c[14768]=((U|0)<0|(U|0)==0&V>>>0<=$>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(l){n=Wa[c[29352>>2]&127](l)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0>(c[14987]|0)>>>0){c[14987]=n;u=25}else u=25}else O=0}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){O=0;break}}else{do if((e[f+276>>1]|0)>=32){n=f+300|0;l=c[n>>2]|0;if(l|0){c[n>>2]=c[l>>2];u=f+284|0;c[u>>2]=(c[u>>2]|0)+1;u=24;break a}n=f+296|0;l=c[n>>2]|0;if(!l){l=f+292|0;break}else{c[n>>2]=c[l>>2];u=f+284|0;c[u>>2]=(c[u>>2]|0)+1;u=24;break a}}else l=f+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(f,32,0)|0;u=24}while(0);if((u|0)==24)if(!l)O=0;else u=25;if((u|0)==25){n=l;p=n+32|0;do{a[n>>0]=0;n=n+1|0}while((n|0)<(p|0));O=l}M=(O|0)!=0;C=f+20|0;D=f+16|0;S=f+480|0;T=f+304|0;U=f+308|0;V=f+300|0;E=O+28|0;F=O+24|0;G=f+32|0;N=O+16|0;H=O+8|0;I=O+20|0;$=f+81|0;J=da+8|0;K=da+196|0;A=da+44|0;B=da+40|0;z=0;l=0;while(1){gw(da|0,0,276)|0;if(!M){u=117;break}c[da>>2]=f;n=c[ba>>2]|0;do if(n|0){if(!aa){if(c[S>>2]|0){Xd(f,n);break}y=n;if((c[T>>2]|0)>>>0<=y>>>0?(c[U>>2]|0)>>>0>y>>>0:0){c[n>>2]=c[V>>2];c[V>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{y=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[ba>>2]=0;o=c[C>>2]|0;if((o|0)>0){p=c[D>>2]|0;n=0;do{q=c[p+(n<<4)+4>>2]|0;if(q|0)c[(c[q+4>>2]|0)+4>>2]=c[q>>2];n=n+1|0}while((n|0)!=(o|0))}y=bd(da,0,h,g)|0;if(!y){u=50;break}if(c[y+56>>2]|0){u=45;break}if(c[y+36>>2]&32|0){u=47;break}if(c[y+12>>2]|0){u=49;break}c[E>>2]=y;p=c[D>>2]|0;w=y+72|0;o=c[w>>2]|0;if(!o)n=-1e6;else{n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0))break;else n=n+1|0}c[F>>2]=c[p+(n<<4)>>2];x=y+42|0;v=b[x>>1]|0;t=v<<16>>16;b:do if(v<<16>>16>0){r=c[y+4>>2]|0;s=d[208+(d[i>>0]|0)>>0]|0;n=0;while(1){p=c[r+(n<<4)>>2]|0;v=a[p>>0]|0;o=(d[208+(v&255)>>0]|0)-s|0;if(!(v<<24>>24==0|(o|0)!=0)){q=i;do{p=p+1|0;q=q+1|0;v=a[p>>0]|0;o=(d[208+(v&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(o|0)!=0))}if(!o){v=n;break b}n=n+1|0;if((n|0)>=(t|0)){v=n;break}}}else v=0;while(0);if((v|0)==(t|0)){u=63;break}if(P){if(!((c[G>>2]&16384|0)==0&0==0)?(R=c[y+16>>2]|0,(R|0)!=0):0){q=R;n=0;do{p=c[q+20>>2]|0;if((p|0)>0){o=0;do{n=(c[q+36+(o<<3)>>2]|0)==(v|0)?31354:n;o=o+1|0}while((o|0)<(p|0))}q=c[q+4>>2]|0}while((q|0)!=0);o=n}else o=0;n=c[y+8>>2]|0;if(!n)n=o;else{do{p=b[n+50>>1]|0;if(p<<16>>16){r=c[n+4>>2]|0;q=p&65535;p=0;do{u=b[r+(p<<1)>>1]|0;o=u<<16>>16==-2|(v|0)==(u<<16>>16|0)?31366:o;p=p+1|0}while(p>>>0<q>>>0)}n=c[n+20>>2]|0}while((n|0)!=0);n=o}if(n|0){u=79;break}}q=c[da>>2]|0;c:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))u=90;else u=94;else{do if((e[q+276>>1]|0)>=224){n=q+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];u=q+284|0;c[u>>2]=(c[u>>2]|0)+1;u=91;break c}n=q+296|0;o=c[n>>2]|0;if(!o){n=q+292|0;break}else{c[n>>2]=c[o>>2];u=q+284|0;c[u>>2]=(c[u>>2]|0)+1;u=91;break c}}else n=q+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;u=90}while(0);if((u|0)==90){o=_d(q,224,0)|0;u=91}do if((u|0)==91){u=0;if(!o)u=94;else{t=o+104|0;n=t;p=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(p|0));c[o>>2]=q;n=q+4|0;p=c[n>>2]|0;if(p|0)c[p+4>>2]=o;c[o+8>>2]=p;c[o+4>>2]=0;c[n>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=da;c[J>>2]=o;Di(o,61,0,1,0)|0;c[N>>2]=o;q=c[w>>2]|0;if(!q)s=-1e6;else{p=c[D>>2]|0;n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(q|0)){s=n;break}else n=n+1|0}p=c[q>>2]|0;q=c[q+4>>2]|0;r=o+108|0;n=c[r>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[r>>2]=n+1;w=c[t>>2]|0;a[w+(n*20|0)>>0]=2;b[w+(n*20|0)+2>>1]=0;c[w+(n*20|0)+4>>2]=s;c[w+(n*20|0)+8>>2]=Q;c[w+(n*20|0)+12>>2]=p;c[w+(n*20|0)+16>>2]=0;a[w+(n*20|0)+1>>0]=0}else n=Di(o,2,s,Q,p)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){w=c[t>>2]|0;a[w+(n*20|0)+1>>0]=-3;c[w+(n*20|0)+16>>2]=q}n=c[r>>2]|0;if((n|0)>0)b[(c[t>>2]|0)+((n+-1|0)*20|0)+2>>1]=1;p=ed(o,6,848)|0;n=1<<s;w=o+152|0;c[w>>2]=c[w>>2]|n;do if((s|0)!=1){if(!(a[(c[(c[(c[o>>2]|0)+16>>2]|0)+(s<<4)+4>>2]|0)+9>>0]|0))break;w=o+156|0;c[w>>2]=c[w>>2]|n}while(0);if(a[$>>0]|0)break;c[p+4>>2]=s;n=y+28|0;c[p+8>>2]=c[n>>2];c[p+12>>2]=Q;if((a[(c[o>>2]|0)+81>>0]|0)==0?(Ei(o,(c[t>>2]|0)+40|0,c[y>>2]|0,0),a[$>>0]|0):0)break;if(P)a[p+20>>0]=109;c[p+28>>2]=c[n>>2];c[p+32>>2]=s;a[p+21>>0]=-3;c[p+36>>2]=(b[x>>1]|0)+1;c[p+68>>2]=b[x>>1];b[K>>1]=0;c[A>>2]=1;c[B>>2]=1;hd(o,da)}}while(0);if((u|0)==94)c[N>>2]=0;b[H>>1]=v;c[I>>2]=f;if(a[$>>0]|0){u=116;break}l=id(O,j,k,ba)|0;z=z+1|0;if(!(z>>>0<50&(l|0)==17)){u=116;break}else l=17}if((u|0)==45){c[W>>2]=h;cd(da,31246,W);u=50}else if((u|0)==47){c[X>>2]=h;cd(da,31276,X);u=50}else if((u|0)==49){c[Z>>2]=h;cd(da,31312,Z);u=50}else if((u|0)==63){c[_>>2]=i;l=dd(f,31333,_)|0;c[ba>>2]=l;l=1;u=119}else if((u|0)==79){c[Y>>2]=n;l=dd(f,31374,Y)|0;c[ba>>2]=l;l=1;u=119}else if((u|0)==116)if(!l)u=117;else u=119;if((u|0)==50){l=da+4|0;n=c[l>>2]|0;if(!n){l=1;u=119}else{c[ba>>2]=n;c[l>>2]=0;l=1;u=119}}else if((u|0)==117)if(!(a[$>>0]|0)){c[m>>2]=O;o=0}else{l=0;u=119}do if((u|0)==119)if(M){r=c[N>>2]|0;do if(r|0){s=r+20|0;n=c[s>>2]|0;if((n|0)<832317811)switch(n|0){case 770837923:{u=122;break}default:{}}else switch(n|0){case 832317811:{u=122;break}default:{}}if((u|0)==122)kc(r)|0;p=c[r>>2]|0;kb(p,r);q=c[r+4>>2]|0;o=r+8|0;n=c[o>>2]|0;if(!q)c[p+4>>2]=n;else{c[q+8>>2]=n;n=c[o>>2]|0}if(n|0)c[n+4>>2]=q;c[s>>2]=1443283912;c[r>>2]=0;if(p|0){if(c[p+480>>2]|0){Xd(p,r);break}m=r;if((c[p+304>>2]|0)>>>0<=m>>>0?(c[p+308>>2]|0)>>>0>m>>>0:0){m=p+300|0;c[r>>2]=c[m>>2];c[m>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{m=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(!aa){if(c[S>>2]|0){Xd(f,O);o=l;break}m=O;if((c[T>>2]|0)>>>0<=m>>>0?(c[U>>2]|0)>>>0>m>>>0:0){c[O>>2]=c[V>>2];c[V>>2]=O;o=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](O);o=l;break}else{o=Wa[c[29352>>2]&127](O)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](O);o=l;break}}else o=l;while(0);l=c[ba>>2]|0;ba=(l|0)==0;c[ca>>2]=l;Vb(f,o,ba?0:31408,ca);do if(!ba){if(!aa){if(c[S>>2]|0){Xd(f,l);break}ca=l;if((c[T>>2]|0)>>>0<=ca>>>0?(c[U>>2]|0)>>>0>ca>>>0:0){c[l>>2]=c[V>>2];c[V>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);n=c[da>>2]|0;l=c[da+64>>2]|0;do if(l|0){if(n|0){if(c[n+480>>2]|0){Xd(n,l);break}ca=l;if((c[n+304>>2]|0)>>>0<=ca>>>0?(c[n+308>>2]|0)>>>0>ca>>>0:0){ca=n+300|0;c[l>>2]=c[ca>>2];c[ca>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[da+68>>2]|0;if(l|0)ri(n,l);l=da+24|0;if(n|0){da=n+272|0;c[da>>2]=(c[da>>2]|0)-(d[l>>0]|0)}a[l>>0]=0;if((o|0)==3082|(a[$>>0]|0)!=0){og(f);f=7;Ra=ea;return f|0}else{f=c[f+68>>2]&o;Ra=ea;return f|0}return 0}function bd(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+64|0;E=F+48|0;D=F+32|0;C=F+24|0;A=F+16|0;y=F+8|0;w=F;B=F+56|0;s=c[f>>2]|0;p=s+24|0;k=c[p>>2]|0;a:do if((k&16|0)==0?(a[s+165>>0]|0)==0:0){n=f+4|0;l=(k&1|0)==0;m=s+16|0;v=c[(c[m>>2]|0)+12>>2]|0;a[s+78>>0]=a[v+77>>0]|0;if(!((b[v+78>>1]&1)==0?(j=eh(s,0,n,0)|0,(j|0)!=0):0))x=5;b:do if((x|0)==5){j=c[s+20>>2]|0;if((j|0)>1)do{k=j;j=j+-1|0;if((b[(c[(c[m>>2]|0)+(j<<4)+12>>2]|0)+78>>1]&1)==0?(o=eh(s,j,n,0)|0,o|0):0){j=o;break b}}while((k|0)>2);if(l)c[p>>2]=c[p>>2]&-2;if(!(a[s+89>>0]|0))break a;c[p>>2]=c[p>>2]|16;break a}while(0);c[f+12>>2]=j;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;f=0;Ra=F;return f|0}while(0);j=Sd(s,h,i)|0;do if(!j){c:do if(!(a[f+25>>0]|0)){m=c[s+348>>2]|0;if(!m){k=s+340|0;j=s+344|0}else{k=a[h>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=h;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[s+336>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;d:do if(!k)j=59292;else{o=d[208+(d[h>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-o|0;if(!(v<<24>>24==0|(l|0)!=0)){n=h;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0))}if(!l)break d;if(!k){j=59292;break}}}while(0);l=c[j+8>>2]|0;do if((h|0)==0|(l|0)!=0)r=l;else{j=a[h>>0]|0;e:do if(!(j<<24>>24)){j=36975;x=32}else{v=j&255;j=208+v|0;do if((v|32|0)==112){j=a[h+1>>0]|0;if(!(j<<24>>24)){j=36976;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==114){j=a[h+2>>0]|0;if(!(j<<24>>24)){j=36977;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==97){j=a[h+3>>0]|0;if(!(j<<24>>24)){j=36978;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==103){j=a[h+4>>0]|0;if(!(j<<24>>24)){j=36979;x=32;break e}j=j&255;if((j|32|0)!=109){k=109;j=208+j|0;break}j=a[h+5>>0]|0;if(!(j<<24>>24)){j=36980;x=32;break e}j=j&255;if((j|32|0)!=97){k=97;j=208+j|0;break}j=a[h+6>>0]|0;if(!(j<<24>>24)){j=36981;x=32;break e}if(j<<24>>24==95)break e;else{k=95;j=208+(j&255)|0}}else k=103}else k=97}else k=114}else k=112;while(0);r=d[j>>0]|0;q=k;x=36}while(0);if((x|0)==32){r=0;q=a[208+(d[j>>0]|0)>>0]|0;x=36}if((x|0)==36?(r|0)!=(q&255|0):0){r=l;break}p=h+7|0;v=a[p>>0]|0;q=d[208+(v&255)>>0]|0;f:do if(!(v<<24>>24)){k=0;l=59;while(1){j=(k+l|0)/2|0;m=q-(d[208+(d[c[4544+(j<<4)>>2]>>0]|0)>>0]|0)|0;if(!m)break f;v=(m|0)<0;k=v?k:j+1|0;l=v?j+-1|0:l;if((k|0)>(l|0))break c}}else{n=0;o=59;while(1){j=(n+o|0)/2|0;l=c[4544+(j<<4)>>2]|0;k=q-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!k){m=p;do{m=m+1|0;l=l+1|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0));if(!k)break f}v=(k|0)<0;n=v?n:j+1|0;o=v?j+-1|0:o;if((n|0)>(o|0))break c}}while(0);if(!(a[4544+(j<<4)+5>>0]&48))break c;r=Hi(s,h,29972,4544+(j<<4)|0,0)|0}while(0);if(r|0){s=c[r>>2]|0;c[B>>2]=0;u=c[f>>2]|0;v=r+16|0;j=c[v>>2]|0;g:do if(!j){t=c[s+4>>2]|0;if(!((t|0)!=0?(t|0)!=(c[s+8>>2]|0):0))x=53;h:do if((x|0)==53){t=(u|0)==0;i:do if(t){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](80)|0;x=76;break}j=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){q=c[14978]|0;p=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;o=L()|0;c[14768]=((o|0)<0|(o|0)==0&p>>>0<=q>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k)break h;j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0)break h}else{do if((e[u+276>>1]|0)>=80){k=u+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=76;break i}k=u+296|0;j=c[k>>2]|0;if(!j){j=u+292|0;break}else{c[k>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=76;break i}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,80,0)|0;x=76}while(0);if((x|0)==76)if(!j)break;else k=j;j=k;l=j+80|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));n=c[r+4>>2]|0;j:do if(!n)x=105;else{o=(Eu(n)|0)+1|0;k:do if(t){q=Sv(o|0,0,-1,-1)|0;p=L()|0;do if(!(p>>>0>0|(p|0)==0&q>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;x=103;break k}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){q=c[14978]|0;p=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&p>>>0<=q>>>0)&1}l=Wa[c[29340>>2]&127](j)|0;if(!l)break;j=Wa[c[29352>>2]&127](l)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){p=l;break k}c[14987]=j;p=l;break k}while(0);c[k>>2]=0;break j}else{do if(!(c[u+272>>2]|0)){do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0<o>>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=103;break k}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=103;break k}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}else{if(!(a[u+81>>0]|0))break;c[k>>2]=0;x=106;break j}while(0);j=_d(u,o,0)|0;x=103}while(0);if((x|0)==103)if(!j){x=105;break}else p=j;ew(p|0,n|0,o|0)|0;c[k>>2]=p;c[v>>2]=k;c[k+32>>2]=1;c[k+72>>2]=c[(c[u+16>>2]|0)+12>>2];b[k+40>>1]=-1;n=(Eu(p)|0)+1|0;l:do if(t){q=Sv(n|0,0,-1,-1)|0;o=L()|0;if(o>>>0>0|(o|0)==0&q>>>0>2147483390)j=0;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](n)|0;x=138;break}j=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){q=c[14978]|0;o=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&o>>>0<=q>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break}l=Wa[c[29352>>2]&127](j)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){x=139;break}c[14987]=l;x=139}}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0){j=0;break}}else{do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0<n>>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=138;break l}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=138;break l}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,n,0)|0;x=138}while(0);if((x|0)==138)if(!j)j=0;else x=139;if((x|0)==139)ew(j|0,p|0,n|0)|0;q=k+56|0;x=c[q>>2]|0;n=(x<<2)+8|0;o=c[f>>2]|0;if((x+3|0)>=(c[o+116>>2]|0)){c[w>>2]=c[k>>2];cd(f,38221,w)}p=k+60|0;l=c[p>>2]|0;m:do if(!l){if(c[o+272>>2]|0){if(a[o+81>>0]|0){x=160;break}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<n>>>0:0))){m=o+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];x=o+284|0;c[x>>2]=(c[x>>2]|0)+1;x=159;break m}m=o+296|0;l=c[m>>2]|0;if(!l){l=o+292|0;break}else{c[m>>2]=c[l>>2];x=o+284|0;c[x>>2]=(c[x>>2]|0)+1;x=159;break m}}else l=o+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(o,n,0)|0;x=159}else{m=l;do if((c[o+304>>2]|0)>>>0<=m>>>0){if((c[o+308>>2]|0)>>>0<=m>>>0)break;if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<n>>>0:0))){x=169;break m}l=Zd(o,l,n,0)|0;x=159;break m}while(0);l=Zd(o,l,n,0)|0;x=159}while(0);if((x|0)==159)if(!l)x=160;else x=169;n:do if((x|0)==160){if(!j)break;if(c[o+480>>2]|0){Xd(o,j);break}l=j;do if((c[o+304>>2]|0)>>>0<=l>>>0){if((c[o+308>>2]|0)>>>0<=l>>>0)break;w=o+300|0;c[j>>2]=c[w>>2];c[w>>2]=j;break n}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{w=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else if((x|0)==169){o=c[q>>2]|0;w=o+1|0;c[q>>2]=w;c[l+(o<<2)>>2]=j;c[l+(w<<2)>>2]=0;c[p>>2]=l}while(0);w=c[q>>2]|0;m=(w<<2)+8|0;n=c[f>>2]|0;if((w+3|0)>=(c[n+116>>2]|0)){c[y>>2]=c[k>>2];cd(f,38221,y)}j=c[p>>2]|0;o:do if(!j){if(c[n+272>>2]|0){if(a[n+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){j=n+300|0;l=c[j>>2]|0;if(l|0){c[j>>2]=c[l>>2];z=n+284|0;c[z>>2]=(c[z>>2]|0)+1;z=l;x=189;break o}j=n+296|0;l=c[j>>2]|0;if(!l){j=n+292|0;break}else{c[j>>2]=c[l>>2];z=n+284|0;c[z>>2]=(c[z>>2]|0)+1;z=l;x=189;break o}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}z=_d(n,m,0)|0;x=189}else{l=j;do if((c[n+304>>2]|0)>>>0<=l>>>0){if((c[n+308>>2]|0)>>>0<=l>>>0)break;if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){x=190;break o}z=Zd(n,j,m,0)|0;x=189;break o}while(0);z=Zd(n,j,m,0)|0;x=189}while(0);if((x|0)==189?z|0:0){j=z;x=190}if((x|0)==190){y=c[q>>2]|0;z=y+1|0;c[q>>2]=z;c[j+(y<<2)>>2]=0;c[j+(z<<2)>>2]=0;c[p>>2]=j}n=c[k>>2]|0;p:do if(!n)o=0;else{o=(Eu(n)|0)+1|0;q:do if(t){z=Sv(o|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){o=0;break p}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;x=216;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){z=c[14978]|0;y=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&y>>>0<=z>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){o=0;break p}l=Wa[c[29352>>2]&127](j)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0){o=0;break p}}else{do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0<o>>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=216;break q}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=216;break q}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,o,0)|0;x=216}while(0);if((x|0)==216)if(!j){o=0;break}ew(j|0,n|0,o|0)|0;o=j}while(0);z=c[q>>2]|0;m=(z<<2)+8|0;n=c[f>>2]|0;if((z+3|0)>=(c[n+116>>2]|0)){c[A>>2]=c[k>>2];cd(f,38221,A)}j=c[p>>2]|0;r:do if(!j){if(c[n+272>>2]|0){if(a[n+81>>0]|0){x=238;break}}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){l=n+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=n+284|0;c[x>>2]=(c[x>>2]|0)+1;x=237;break r}l=n+296|0;j=c[l>>2]|0;if(!j){j=n+292|0;break}else{c[l>>2]=c[j>>2];x=n+284|0;c[x>>2]=(c[x>>2]|0)+1;x=237;break r}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(n,m,0)|0;x=237}else{l=j;do if((c[n+304>>2]|0)>>>0<=l>>>0){if((c[n+308>>2]|0)>>>0<=l>>>0)break;if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){x=247;break r}j=Zd(n,j,m,0)|0;x=237;break r}while(0);j=Zd(n,j,m,0)|0;x=237}while(0);if((x|0)==237)if(!j)x=238;else x=247;s:do if((x|0)==238){if(!o)break;if(c[n+480>>2]|0){Xd(n,o);break}j=o;do if((c[n+304>>2]|0)>>>0<=j>>>0){if((c[n+308>>2]|0)>>>0<=j>>>0)break;A=n+300|0;c[o>>2]=c[A>>2];c[A>>2]=o;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{A=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else if((x|0)==247){z=c[q>>2]|0;A=z+1|0;c[q>>2]=A;c[j+(z<<2)>>2]=o;c[j+(A<<2)>>2]=0;c[p>>2]=j}while(0);if(!(Ai(u,k,r,c[s+8>>2]|0,B)|0)){j=c[v>>2]|0;break g}k=c[B>>2]|0;c[C>>2]=k;cd(f,31408,C);t:do if(k|0){do if(!t){if(c[u+480>>2]|0){Xd(u,k);break t}j=k;if((c[u+304>>2]|0)>>>0>j>>>0)break;if((c[u+308>>2]|0)>>>0<=j>>>0)break;C=u+300|0;c[k>>2]=c[C>>2];c[C>>2]=k;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{C=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);j=c[v>>2]|0;if(!j)break h;C=j+36|0;c[C>>2]=c[C>>2]|2;do if(t)x=263;else{if(!(c[u+480>>2]|0)){x=263;break}Vi(u,j)}while(0);do if((x|0)==263){B=j+32|0;C=(c[B>>2]|0)+-1|0;c[B>>2]=C;if(C|0)break;Vi(u,j)}while(0);c[v>>2]=0;break h}while(0);if((x|0)==105?(c[k>>2]=0,!t):0)x=106;if((x|0)==106){if(c[u+480>>2]|0){Xd(u,k);break}C=k;if((c[u+304>>2]|0)>>>0<=C>>>0?(c[u+308>>2]|0)>>>0>C>>>0:0){C=u+300|0;c[k>>2]=c[C>>2];c[C>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{C=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);break c}while(0);f=j;Ra=F;return f|0}}while(0);if(!(g&2)){a[f+17>>0]=1;break}else{f=0;Ra=F;return f|0}}else{if(!(c[j+56>>2]|0)){f=j;Ra=F;return f|0}if(!(a[f+25>>0]|0)){f=j;Ra=F;return f|0}}while(0);j=(g&1|0)==0?36996:36983;if(!i){c[E>>2]=j;c[E+4>>2]=h;cd(f,37020,E);f=0;Ra=F;return f|0}else{c[D>>2]=j;c[D+4>>2]=i;c[D+8>>2]=h;cd(f,37010,D);f=0;Ra=F;return f|0}return 0}function cd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+112|0;k=n+88|0;o=n;m=c[b>>2]|0;c[o>>2]=e;g=c[m+108>>2]|0;i=k+4|0;c[i>>2]=n+16;c[k>>2]=m;c[k+8>>2]=70;f=k+12|0;c[f>>2]=g;g=k+16|0;c[g>>2]=0;j=k+20|0;a[j>>0]=0;h=k+21|0;a[h>>0]=1;tb(k,d,o);e=c[i>>2]|0;if(((e|0)!=0?(a[e+(c[g>>2]|0)>>0]=0,(c[f>>2]|0)!=0):0)?(a[h>>0]&4)==0:0)f=$d(k)|0;else f=c[i>>2]|0;if(((a[j>>0]|0)==7?(l=m+81|0,(a[l>>0]|0)==0):0)?(a[m+82>>0]|0)==0:0){a[l>>0]=1;if((c[m+180>>2]|0)>0)c[m+264>>2]=1;e=m+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[m+236>>2]|0;if(e|0)c[e+12>>2]=7}if(!(a[m+85>>0]|0)){e=b+36|0;c[e>>2]=(c[e>>2]|0)+1;e=b+4|0;d=c[e>>2]|0;do if(d|0){if(c[m+480>>2]|0){Xd(m,d);break}o=d;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);c[e>>2]=f;c[b+12>>2]=1;Ra=n;return}if(!f){Ra=n;return}if(c[m+480>>2]|0){Xd(m,f);Ra=n;return}o=f;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;Ra=n;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=n;return}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=n;return}}function dd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=Ra;Ra=Ra+112|0;h=f+88|0;i=f;c[i>>2]=e;g=c[b+108>>2]|0;c[h+4>>2]=f+16;c[h>>2]=b;c[h+8>>2]=70;c[h+12>>2]=g;c[h+16>>2]=0;g=h+20|0;a[g>>0]=0;a[h+21>>0]=1;tb(h,d,i);e=yb(h)|0;if((a[g>>0]|0)!=7){Ra=f;return e|0}d=b+81|0;if(a[d>>0]|0){Ra=f;return e|0}if(a[b+82>>0]|0){Ra=f;return e|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){Ra=f;return e|0}c[d+12>>2]=7;Ra=f;return e|0}function ed(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=d+108|0;h=c[o>>2]|0;n=d+112|0;i=c[n>>2]|0;if((h+f|0)>(i|0)){m=c[d+12>>2]|0;k=(i|0)==0;h=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;j=L()|0;h=k?51:h;j=k?0:j;k=c[m>>2]|0;l=c[k+128>>2]|0;i=((l|0)<0)<<31>>31;if((j|0)>(i|0)|(j|0)==(i|0)&h>>>0>l>>>0){h=k+81|0;if(a[h>>0]|0){o=0;return o|0}if(a[k+82>>0]|0){o=0;return o|0}a[h>>0]=1;if((c[k+180>>2]|0)>0)c[k+264>>2]=1;h=k+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[k+236>>2]|0;if(!h){o=0;return o|0}c[h+12>>2]=7;o=0;return o|0}l=d+104|0;i=c[l>>2]|0;d=Yv(h|0,j|0,20,0)|0;j=L()|0;a:do if(!i){if(c[k+272>>2]|0){if(a[k+81>>0]|0){o=0;return o|0}}else{do if(!(j>>>0>0|((j|0)==0?d>>>0>(e[k+276>>1]|0)>>>0:0))){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];d=k+284|0;c[d>>2]=(c[d>>2]|0)+1;d=27;break a}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];d=k+284|0;c[d>>2]=(c[d>>2]|0)+1;d=27;break a}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}i=_d(k,d,j)|0;d=27}else{h=i;if((c[k+304>>2]|0)>>>0<=h>>>0?(c[k+308>>2]|0)>>>0>h>>>0:0){if(!(j>>>0>0|((j|0)==0?d>>>0>(e[k+276>>1]|0)>>>0:0))){h=k;d=29;break}i=Zd(k,i,d,j)|0;d=27;break}i=Zd(k,i,d,j)|0;d=27}while(0);do if((d|0)==27)if(i){h=c[m>>2]|0;if(!h){h=i;d=31;break}else{d=29;break}}else{o=0;return o|0}while(0);if((d|0)==29){k=i;if((c[h+304>>2]|0)>>>0<=k>>>0?(c[h+308>>2]|0)>>>0>k>>>0:0)h=e[h+276>>1]|0;else{h=i;d=31}}if((d|0)==31){i=h;h=Wa[c[29352>>2]&127](h)|0}c[m+48>>2]=h;c[n>>2]=(h>>>0)/20|0;c[l>>2]=i;h=c[o>>2]|0}else i=c[d+104>>2]|0;l=i+(h*20|0)|0;if((f|0)>0){j=l;k=0;h=g;while(1){g=a[h>>0]|0;a[j>>0]=g;c[j+4>>2]=a[h+1>>0];n=a[h+2>>0]|0;i=n<<24>>24;d=j+8|0;c[d>>2]=i;if(n<<24>>24>0?(a[4368+(g&255)>>0]&1)!=0:0)c[d>>2]=(c[o>>2]|0)+i;c[j+12>>2]=a[h+3>>0];a[j+1>>0]=0;c[j+16>>2]=0;b[j+2>>1]=0;k=k+1|0;if((k|0)==(f|0))break;else{j=j+20|0;h=h+4|0}}h=c[o>>2]|0}c[o>>2]=h+f;o=l;return o|0}function fd(b,d){b=b|0;d=d|0;var e=0,f=0;e=1<<d;f=b+152|0;c[f>>2]=c[f>>2]|e;if((d|0)==1)return;if(!(a[(c[(c[(c[b>>2]|0)+16>>2]|0)+(d<<4)+4>>2]|0)+9>>0]|0))return;f=b+156|0;c[f>>2]=c[f>>2]|e;return}function gd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[b>>2]|0;if(a[g+81>>0]|0){if((f|0)==-12)return;kg(g,f,e);return}if((d|0)<0)d=(c[b+108>>2]|0)+-1|0;g=c[b+104>>2]|0;h=g+(d*20|0)|0;if((f|0)<=-1?(i=g+(d*20|0)+1|0,(a[i>>0]|0)==0):0){if((f|0)==-3){c[g+(d*20|0)+16>>2]=e;a[i>>0]=-3;return}if(!e)return;c[g+(d*20|0)+16>>2]=e;a[i>>0]=f;if((f|0)!=-12)return;f=e+12|0;c[f>>2]=(c[f>>2]|0)+1;return}Ei(b,h,e,f);return}function hd(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;m=F;E=c[f>>2]|0;D=b[g+196>>1]|0;j=D<<16>>16;i=c[g+44>>2]|0;B=c[g+40>>2]|0;c[m>>2]=c[g+96>>2];i=B+i|0;i=i+((B|0)==0&(i|0)>0&1)|0;k=((c[f+108>>2]|0)*20|0)+7&-8;n=(c[f+104>>2]|0)+k|0;k=(c[g+48>>2]|0)-k&-8;l=((k|0)<0)<<31>>31;Fi(f,m);if(!(a[g+20>>0]|0))h=0;else h=((a[g+21>>0]|0)!=0&1)<<7&65535;C=f+149|0;p=(d[C>>0]|d[C+1>>0]<<8)&-129|h;a[C>>0]=p;a[C+1>>0]=p>>8;y=g+199|0;i=(i|0)<10&(a[y>>0]|0)!=0?10:i;p=p&-4;a[C>>0]=p;a[C+1>>0]=p>>8;p=i*40|0;t=(l|0)<0|(l|0)==0&k>>>0<p>>>0;q=Tv(k|0,l|0,p|0,0)|0;z=L()|0;x=t?k:q;l=t?l:z;z=f+88|0;c[z>>2]=t?0:n+q|0;q=j*40|0;s=(l|0)<0|(l|0)==0&x>>>0<q>>>0;r=Tv(x|0,l|0,q|0,0)|0;v=L()|0;x=s?x:r;v=s?l:v;t=Sv((s?q:0)|0,(s?0:0)|0,(t?p:0)|0,(t?0:0)|0)|0;l=L()|0;w=f+100|0;c[w>>2]=s?0:n+r|0;r=Sv(c[m>>2]<<2|0,0,7,0)|0;r=r&-8;s=(L()|0)&1;u=(v|0)<(s|0)|(v|0)==(s|0)&x>>>0<r>>>0;A=Tv(x|0,v|0,r|0,s|0)|0;k=L()|0;x=u?x:A;k=u?v:k;m=Sv(t|0,l|0,(u?r:0)|0,(u?s:0)|0)|0;l=L()|0;t=f+92|0;c[t>>2]=u?0:n+A|0;A=B<<2;u=Sv(A|0,0,7,0)|0;u=u&-8;v=(L()|0)&1;h=(k|0)<(v|0)|(k|0)==(v|0)&x>>>0<u>>>0;k=Tv(x|0,k|0,u|0,v|0)|0;L()|0;l=Sv(m|0,l|0,(h?u:0)|0,(h?v:0)|0)|0;m=L()|0;x=f+96|0;c[x>>2]=h?0:n+k|0;if(!((l|0)==0&(m|0)==0)){a:do if(c[E+272>>2]|0)if(!(a[E+81>>0]|0))o=15;else n=0;else{do if(!(m>>>0>0|((m|0)==0?l>>>0>(e[E+276>>1]|0)>>>0:0))){h=E+300|0;k=c[h>>2]|0;if(k|0){c[h>>2]=c[k>>2];n=E+284|0;c[n>>2]=(c[n>>2]|0)+1;n=k;break a}h=E+296|0;k=c[h>>2]|0;if(!k){h=E+292|0;break}else{c[h>>2]=c[k>>2];n=E+284|0;c[n>>2]=(c[n>>2]|0)+1;n=k;break a}}else h=E+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;o=15}while(0);if((o|0)==15)n=_d(E,l,m)|0;c[f+192>>2]=n;h=E+81|0;if(!(a[h>>0]|0)){k=c[z>>2]|0;if(!k)if(m>>>0<0|(m|0)==0&l>>>0<p>>>0)k=0;else{l=Tv(l|0,m|0,p|0,0)|0;k=n+l|0;m=L()|0}c[z>>2]=k;k=c[w>>2]|0;if(!k)if((m|0)<0|(m|0)==0&l>>>0<q>>>0)k=0;else{l=Tv(l|0,m|0,q|0,0)|0;k=n+l|0;m=L()|0}c[w>>2]=k;k=c[t>>2]|0;if(!k)if((m|0)<(s|0)|(m|0)==(s|0)&l>>>0<r>>>0)k=0;else{l=Tv(l|0,m|0,r|0,s|0)|0;k=n+l|0;m=L()|0}c[t>>2]=k;k=c[x>>2]|0;if(!k)if((m|0)<(v|0)|(m|0)==(v|0)&l>>>0<u>>>0)k=0;else{k=Tv(l|0,m|0,u|0,v|0)|0;L()|0;k=n+k|0}c[x>>2]=k}}else h=E+81|0;g=g+216|0;c[f+128>>2]=c[g>>2];c[g>>2]=0;g=(d[C>>0]|d[C+1>>0]<<8)&-13|a[y>>0]<<2&12;a[C>>0]=g;a[C+1>>0]=g>>8;if(a[h>>0]|0){b[f+16>>1]=0;c[f+28>>2]=0;c[f+24>>2]=0;E=f+20|0;c[E>>2]=770837923;E=f+36|0;c[E>>2]=-1;E=f+40|0;c[E>>2]=0;E=f+146|0;a[E>>0]=2;E=f+44|0;c[E>>2]=0;E=f+32|0;c[E>>2]=1;E=f+147|0;a[E>>0]=-1;E=f+48|0;c[E>>2]=0;E=f+64|0;f=E;c[f>>2]=0;E=E+4|0;c[E>>2]=0;Ra=F;return}c[f+28>>2]=B;b[f+16>>1]=D;if(D<<16>>16>0){h=c[w>>2]|0;while(1){c[h+32>>2]=E;b[h+8>>1]=1;c[h+24>>2]=0;if((j|0)>1){j=j+-1|0;h=h+40|0}else break}}c[f+24>>2]=i;if((i|0)>0){h=c[z>>2]|0;while(1){c[h+32>>2]=E;b[h+8>>1]=128;c[h+24>>2]=0;if((i|0)>1){i=i+-1|0;h=h+40|0}else break}}gw(c[x>>2]|0,0,A|0)|0;E=f+20|0;c[E>>2]=770837923;E=f+36|0;c[E>>2]=-1;E=f+40|0;c[E>>2]=0;E=f+146|0;a[E>>0]=2;E=f+44|0;c[E>>2]=0;E=f+32|0;c[E>>2]=1;E=f+147|0;a[E>>0]=-1;E=f+48|0;c[E>>2]=0;E=f+64|0;f=E;c[f>>2]=0;E=E+4|0;c[E>>2]=0;Ra=F;return}function id(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;n=r+16|0;m=r+8|0;o=r;q=f+16|0;l=c[q>>2]|0;j=c[l+88>>2]|0;b[j+48>>1]=4;j=j+40|0;c[j>>2]=g;c[j+4>>2]=h;j=l+36|0;if((c[j>>2]|0)>4){c[j>>2]=4;k=Rg(l)|0}else k=Gc(c[q>>2]|0)|0;if((k|0)!=100){j=c[q>>2]|0;if(!j){p=0;q=k;c[i>>2]=p;Ra=r;return q|0}k=gc(j)|0;c[q>>2]=0;j=c[f+20>>2]|0;if(!k){p=m;c[p>>2]=g;c[p+4>>2]=h;p=dd(j,36955,m)|0;q=1;c[i>>2]=p;Ra=r;return q|0}else{p=pd(j)|0;c[n>>2]=p;p=dd(j,31408,n)|0;q=k;c[i>>2]=p;Ra=r;return q|0}}l=c[c[l+96>>2]>>2]|0;j=b[f+8>>1]|0;a:do if((e[l+58>>1]|0)>(j&65535)){j=j&65535;k=c[l+88+(j<<2)>>2]|0;if(k>>>0<12){j=c[f+20>>2]|0;switch(k|0){case 7:{k=36942;break a}case 0:{p=9;break a}default:{}}k=36947;break}c[f+4>>2]=c[l+88+((b[l+56>>1]|0)+j<<2)>>2];if(k>>>0>127)j=(k+-12|0)>>>1;else j=d[3520+k>>0]|0;c[f>>2]=j;p=c[l+40>>2]|0;c[f+12>>2]=p;q=p+1|0;a[q>>0]=a[q>>0]|16;a[(c[p+8>>2]|0)+11>>0]=1;p=0;q=0;c[i>>2]=p;Ra=r;return q|0}else{j=c[f+20>>2]|0;p=9}while(0);if((p|0)==9)k=36937;c[o>>2]=k;p=dd(j,36908,o)|0;gc(c[q>>2]|0)|0;c[q>>2]=0;q=1;c[i>>2]=p;Ra=r;return q|0}function jd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=Ra;Ra=Ra+16|0;h=m;if(!b){c[h>>2]=58063;c[h+4>>2]=91595;c[h+8>>2]=31517;Db(21,32001,h);l=21;Ra=m;return l|0}k=c[b+20>>2]|0;i=b+16|0;j=c[i>>2]|0;do if((f|e|0)>=0?(n=Sv(f|0,((f|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0,p=L()|0,h=c[b>>2]|0,o=((h|0)<0)<<31>>31,!((p|0)>(o|0)|(p|0)==(o|0)&n>>>0>h>>>0)):0)if(!j){h=4;l=24}else{h=c[b+12>>2]|0;p=c[h+8>>2]|0;c[(c[p+4>>2]|0)+4>>2]=c[p>>2];h=Za[g&127](h,(c[b+4>>2]|0)+f|0,e,d)|0;if((h|0)!=4){c[j+40>>2]=h;c[k+64>>2]=h;if(h|0){l=27;break}if(!(c[k+260>>2]|0)){h=0;break}Ne(k,0);h=0;break}f=j+20|0;h=c[f>>2]|0;if((h|0)<832317811)switch(h|0){case 770837923:{l=8;break}default:{}}else switch(h|0){case 832317811:{l=8;break}default:{}}if((l|0)==8)kc(j)|0;d=c[j>>2]|0;kb(d,j);e=c[j+4>>2]|0;b=j+8|0;h=c[b>>2]|0;if(!e)c[d+4>>2]=h;else{c[e+8>>2]=h;h=c[b>>2]|0}if(h|0)c[h+4>>2]=e;c[f>>2]=1443283912;c[j>>2]=0;do if(d){if(c[d+480>>2]|0){Xd(d,j);break}p=j;if((c[d+304>>2]|0)>>>0<=p>>>0?(c[d+308>>2]|0)>>>0>p>>>0:0){p=d+300|0;c[j>>2]=c[p>>2];c[p>>2]=j}else l=20}else l=20;while(0);do if((l|0)==20)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0;h=4;l=24}else{h=1;l=24}while(0);if((l|0)==24){c[k+64>>2]=h;l=27}if((l|0)==27)Ne(k,h);if((h|0)==3082|(a[k+81>>0]|0)!=0){og(k);p=7;Ra=m;return p|0}else{p=c[k+68>>2]&h;Ra=m;return p|0}return 0}function kd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(!(a[b>>0]|0)){e=cg(b,c,d,e,0)|0;return e|0}else{e=Gi(b,c,d,e)|0;return e|0}return 0}function ld(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+32|0;j=k+16|0;f=k;h=k+20|0;if(!b){c[f>>2]=58063;c[f+4>>2]=91693;c[f+8>>2]=31517;Db(21,32001,f);j=21;Ra=k;return j|0}i=c[b+20>>2]|0;if(!(c[b+16>>2]|0))f=4;else{f=id(b,d,e,h)|0;do if(f|0?(g=c[h>>2]|0,h=(g|0)==0,c[j>>2]=g,Vb(i,f,h?0:31408,j),!h):0){if(i|0){if(c[i+480>>2]|0){Xd(i,g);break}j=g;if((c[i+304>>2]|0)>>>0<=j>>>0?(c[i+308>>2]|0)>>>0>j>>>0:0){j=i+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);j=7;Ra=k;return j|0}else{j=c[i+68>>2]&f;Ra=k;return j|0}return 0}function md(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=Ra;Ra=Ra+16|0;I=M;C=d[e+1>>0]|0;D=d[e>>0]|0;B=e+2|0;G=(a[e+3>>0]|0)==0;r=0;a:while(1){x=c;c=b;while(1){j=a[c>>0]|0;c=c+1|0;b=j&255;if(j<<24>>24>-1)if(!(j<<24>>24)){E=124;break a}else{g=c;A=b;E=10}else if((j&255)>191){b=d[2736+(b+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);if((b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)){y=c;z=65533}else{g=c;A=b;E=10}}else{g=c;A=b;E=10}if((E|0)==10){E=0;if((A|0)==(D|0)){E=11;break a}else{y=g;z=A}}if((z|0)!=(f|0)){i=z;w=r;u=y;break}if(!(a[B>>0]|0)){E=66;break}c=x+1|0;b=a[x>>0]|0;j=b&255;if((b&255)<=191)if(!(b<<24>>24)){h=1;E=125;break a}else q=c;else{b=d[2736+(j+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);q=c;j=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}c=y+1|0;b=a[y>>0]|0;k=b&255;do if((b&255)<=191){if(b<<24>>24==94){l=y+2|0;p=a[c>>0]|0;c=p&255;if((p&255)>191){c=d[2736+(c+-192)>>0]|0;k=a[l>>0]|0;if((k&-64)<<24>>24==-128){b=c;c=l;do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128)}else{b=c;c=l}n=1;m=0;k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b;break}else{n=1;k=c;c=l}}else n=0;if((k|0)==93){m=(j|0)==93&1;l=c+1|0;p=a[c>>0]|0;k=p&255;if((p&255)>191){c=d[2736+(k+-192)>>0]|0;k=a[l>>0]|0;if((k&-64)<<24>>24==-128){b=c;c=l;do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128)}else{b=c;c=l}k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}else c=l}else m=0}else{b=d[2736+(k+-192)>>0]|0;k=a[c>>0]|0;if((k&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128);n=0;m=0;k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}while(0);p=0;o=m;b:while(1){switch(k|0){case 0:{h=1;E=125;break a}case 93:break b;case 45:{m=a[c>>0]|0;if(m<<24>>24!=93?(p|0)!=0&m<<24>>24!=0:0){b=c+1|0;l=m&255;if((m&255)>191){l=d[2736+(l+-192)>>0]|0;m=a[b>>0]|0;if((m&-64)<<24>>24==-128)do{b=b+1|0;l=l<<6|m&63;m=a[b>>0]|0}while((m&-64)<<24>>24==-128);l=(l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)?65533:l}v=0;t=b;s=j>>>0<p>>>0|j>>>0>l>>>0?o:1}else E=105;break}default:E=105}if((E|0)==105){E=0;v=k;t=c;s=(j|0)==(k|0)?1:o}c=t+1|0;p=a[t>>0]|0;k=p&255;if((p&255)>191){b=d[2736+(k+-192)>>0]|0;k=a[c>>0]|0;if((k&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128);k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}p=v;o=s}if((o|0)==(n|0)){h=1;E=125;break a}else x=q}do if((E|0)==66){E=0;b=y+1|0;c=a[y>>0]|0;i=c&255;if((c&255)<=191)if(!(c<<24>>24)){h=1;E=125;break a}else{w=b;u=b;break}c=d[2736+(i+-192)>>0]|0;i=a[b>>0]|0;if((i&-64)<<24>>24==-128)do{b=b+1|0;c=c<<6|i&63;i=a[b>>0]|0}while((i&-64)<<24>>24==-128);i=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c;w=b;u=b}while(0);r=a[x>>0]|0;c=x+1|0;b=r&255;if((r&255)>191){b=d[2736+(b+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);b=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}do if((i|0)!=(b|0)){if(!G?((b|i)>>>0<128?(a[208+(i&255)>>0]|0)==(a[208+(b&255)>>0]|0):0):0)break;if((i|0)!=(C|0)){h=1;E=125;break a}if(!((u|0)!=(w|0)&(b|0)!=0)){h=1;E=125;break a}}while(0);r=w;b=u}if((E|0)==11){j=x;c:while(1){while(1){A=a[g>>0]|0;g=g+1|0;c=A&255;if((A&255)>191){c=d[2736+(c+-192)>>0]|0;i=a[g>>0]|0;if((i&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|i&63;i=a[g>>0]|0}while((i&-64)<<24>>24==-128);b=g;c=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c}else b=g;g=(c|0)==(C|0);if(!((c|0)==(D|0)|g))break c;if(g)break;else g=b}g=j+1|0;i=a[j>>0]|0;if((i&255)>191){if((a[g>>0]&-64)<<24>>24==-128)do g=g+1|0;while((a[g>>0]&-64)<<24>>24==-128)}else if(!(i<<24>>24)){h=2;E=125;break}j=g;g=b}if((E|0)==125){Ra=M;return h|0}if(!c){f=0;Ra=M;return f|0}do if((c|0)==(f|0)){if(!(a[B>>0]|0)){g=b+1|0;c=a[b>>0]|0;h=c&255;if((c&255)<=191){if(!(c<<24>>24))h=2;else{F=h;H=g;E=43;break}Ra=M;return h|0}c=d[2736+(h+-192)>>0]|0;h=a[g>>0]|0;if((h&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|h&63;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);if((c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)){J=65533;K=g;break}else{F=c;H=g;E=43;break}}i=b+-1|0;c=a[j>>0]|0;if(!(c<<24>>24)){f=2;Ra=M;return f|0}g=j;while(1){h=md(i,g,e,f)|0;if((h|0)!=1){E=125;break}h=g+1|0;if((c&255)>191){g=h;while(1){c=a[g>>0]|0;if((c&-64)<<24>>24==-128)g=g+1|0;else break}}else{g=h;c=a[h>>0]|0}if(!(c<<24>>24)){h=2;E=125;break}}if((E|0)==125){Ra=M;return h|0}}else{F=c;H=b;E=43}while(0);if((E|0)==43)if(F>>>0<129){if(G){a[I>>0]=F;g=0}else{g=F&255;a[I>>0]=F&(~(a[880+g>>0]&32)&255);g=a[208+g>>0]|0;a[I+2>>0]=0}a[I+1>>0]=g;g=j+(Mv(j,I)|0)|0;d:do if(a[g>>0]|0){while(1){g=g+1|0;c=md(H,g,e,f)|0;if((c|0)!=1)break;g=g+(Mv(g,I)|0)|0;if(!(a[g>>0]|0))break d}f=c;Ra=M;return f|0}while(0);f=2;Ra=M;return f|0}else{J=F;K=H}g=j;while(1){h=a[g>>0]|0;g=g+1|0;c=h&255;if(h<<24>>24>-1){if(!(h<<24>>24)){h=2;E=125;break}}else if((h&255)>191){c=d[2736+(c+-192)>>0]|0;h=a[g>>0]|0;if((h&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|h&63;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);c=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c}if((c|0)==(J|0)?(L=md(K,g,e,f)|0,(L|0)!=1):0){h=L;E=125;break}}if((E|0)==125){Ra=M;return h|0}}else if((E|0)==124){f=(a[x>>0]|0)!=0&1;Ra=M;return f|0}else if((E|0)==125){Ra=M;return h|0}return 0}function nd(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+48|0;n=T+24|0;m=T+16|0;l=T+8|0;k=T;J=T+40|0;K=T+36|0;c[K>>2]=0;a:do if(!f){c[k>>2]=31171;Db(21,38253,k)}else{k=c[f+96>>2]|0;b:do if((k|0)<-264537850){switch(k|0){case -1607883113:break;default:break b}R=f+64|0;c[R>>2]=0;if(c[f+260>>2]|0)Ne(f,0);x=(h|0)==0;y=f+32|0;z=f+272|0;A=f+276|0;M=f+81|0;B=f+288|0;N=f+300|0;C=f+296|0;D=f+284|0;E=f+292|0;F=f+82|0;G=f+180|0;H=f+264|0;I=f+236|0;O=f+480|0;P=f+304|0;Q=f+308|0;l=(g|0)==0?59952:g;c:while(1){if(!(a[l>>0]|0)){k=0;w=135;break}c[K>>2]=0;k=qd(f,l,-1,128,0,K,J)|0;do if(!k){p=c[K>>2]|0;if(!p){k=0;l=c[J>>2]|0;break}o=0;m=0;n=0;g=0;l=0;q=0;while(1){k=Gc(p)|0;if(!x){v=(k|0)==100;if(v)if(!n)w=20;else{u=m;t=n;v=g;w=48}else{if((n|0)!=0|(k|0)!=101){w=105;break}if((c[y>>2]&256|0)==0&0==0){w=105;break}else w=20}if((w|0)==20){w=0;n=(p|0)==0;if(n)u=0;else u=e[p+144>>1]|0;m=u<<3|4;d:do if(c[z>>2]|0)if(!(a[M>>0]|0))w=30;else{l=0;w=136;break c}else{do if(0<0|(0==0?(e[A>>1]|0)>>>0<m>>>0:0))l=B;else{l=c[N>>2]|0;if(l|0){c[N>>2]=c[l>>2];c[D>>2]=(c[D>>2]|0)+1;break d}l=c[C>>2]|0;if(!l){l=E;break}c[C>>2]=c[l>>2];c[D>>2]=(c[D>>2]|0)+1;break d}while(0);c[l>>2]=(c[l>>2]|0)+1;w=30}while(0);if((w|0)==30){w=0;l=_d(f,m,0)|0}if(!l){l=0;w=136;break c}do if(u|0){s=p+144|0;t=p+116|0;if(n){gw(l|0,0,u<<2|0)|0;break}r=0;do{q=c[p>>2]|0;do if(r>>>0<(e[s>>1]|0)>>>0){m=c[t>>2]|0;n=m+(r*40|0)|0;e:do if(!n)m=0;else{g=b[m+(r*40|0)+8>>1]|0;do if((g&514)==514){if((a[m+(r*40|0)+10>>0]|0)!=1)break;m=c[m+(r*40|0)+16>>2]|0;break e}while(0);if(g&1){m=0;break}m=Gg(n,1)|0}while(0);n=q+81|0;if(!(a[n>>0]|0))break;if(c[q+180>>2]|0){m=0;break}a[n>>0]=0;c[q+264>>2]=0;m=q+272|0;c[m>>2]=(c[m>>2]|0)+-1;m=0}else m=0;while(0);c[l+(r<<2)>>2]=m;r=r+1|0}while((r|0)!=(u|0))}while(0);if(v){t=1;v=l;q=l;w=48}else{m=u;n=1;g=l;q=l}}if((w|0)==48){w=0;s=v+(u<<2)|0;f:do if((u|0)>0){m=0;while(1){o=(p|0)==0;g:do if(o)n=29576;else{n=c[p+120>>2]|0;do if(n|0){if(m>>>0>=(e[p+144>>1]|0)>>>0)break;n=n+(m*40|0)|0;break g}while(0);n=c[p>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576}while(0);g=b[n+8>>1]|0;do if((g&514)==514){if((a[n+10>>0]|0)!=1){w=58;break}r=c[n+16>>2]|0}else w=58;while(0);do if((w|0)==58){w=0;if(g&1){r=0;break}r=Gg(n,1)|0}while(0);if(!o){g=c[p>>2]|0;o=p+40|0;n=c[o>>2]|0;if((n|0)==3082|(a[g+81>>0]|0)!=0){og(g);n=7}else n=c[g+68>>2]&n;c[o>>2]=n}c[s+(m<<2)>>2]=r;if(!r){p=c[K>>2]|0;if(!p)n=1;else{n=c[p+120>>2]|0;do if(!n)w=70;else{if(m>>>0>=(e[p+144>>1]|0)>>>0){w=70;break}n=n+(m*40|0)|0;g=p}while(0);if((w|0)==70){w=0;n=c[p>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576;g=p}n=b[n+8>>1]&31;g=c[g>>2]|0;r=p+40|0;o=c[r>>2]|0;if((o|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7}else g=c[g+68>>2]&o;c[r>>2]=g}if(!(-1431655766>>>n&1)){w=76;break c}}m=m+1|0;if((m|0)>=(u|0))break f;p=c[K>>2]|0}}else m=0;while(0);c[s+(m<<2)>>2]=0;o=s;m=u;n=t;g=v}if(Za[h&127](i,m,o,g)|0){w=86;break c}}if((k|0)!=100){w=104;break}p=c[K>>2]|0}if((w|0)==104){w=0;p=c[K>>2]|0}else if((w|0)==105)w=0;o=p+20|0;k=c[o>>2]|0;if((k|0)<832317811)switch(k|0){case 770837923:{w=107;break}default:k=0}else switch(k|0){case 832317811:{w=107;break}default:k=0}if((w|0)==107){w=0;k=kc(p)|0}n=c[p>>2]|0;kb(n,p);g=c[p+4>>2]|0;m=p+8|0;l=c[m>>2]|0;if(!g)c[n+4>>2]=l;else{c[g+8>>2]=l;l=c[m>>2]|0}if(l|0)c[l+4>>2]=g;c[o>>2]=1443283912;c[p>>2]=0;do if(n){if(c[n+480>>2]|0){Xd(n,p);break}v=p;if((c[n+304>>2]|0)>>>0<=v>>>0?(c[n+308>>2]|0)>>>0>v>>>0:0){v=n+300|0;c[p>>2]=c[v>>2];c[v>>2]=p}else w=119}else w=119;while(0);do if((w|0)==119)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{w=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}while(0);c[K>>2]=0;l=c[J>>2]|0;while(1)if(!(a[880+(d[l>>0]|0)>>0]&1))break;else l=l+1|0;if(q){if(c[O>>2]|0){Xd(f,q);break}w=q;if((c[P>>2]|0)>>>0<=w>>>0?(c[Q>>2]|0)>>>0>w>>>0:0){c[q>>2]=c[N>>2];c[N>>2]=q;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{w=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}}while(0);if(k){w=135;break}}if((w|0)==76)if((a[M>>0]|0)==0?(a[F>>0]|0)==0:0){a[M>>0]=1;if((c[G>>2]|0)>0)c[H>>2]=1;c[z>>2]=(c[z>>2]|0)+1;m=c[I>>2]|0;if(m){c[m+12>>2]=7;w=136}else w=136}else w=136;else if((w|0)==86){o=c[K>>2]|0;p=o+20|0;k=c[p>>2]|0;if((k|0)<832317811)switch(k|0){case 770837923:{w=87;break}default:{}}else switch(k|0){case 832317811:{w=87;break}default:{}}if((w|0)==87)kc(o)|0;n=c[o>>2]|0;kb(n,o);g=c[o+4>>2]|0;m=o+8|0;k=c[m>>2]|0;if(!g)c[n+4>>2]=k;else{c[g+8>>2]=k;k=c[m>>2]|0}if(k|0)c[k+4>>2]=g;c[p>>2]=1443283912;c[o>>2]=0;do if(n){if(c[n+480>>2]|0){Xd(n,o);break}J=o;if((c[n+304>>2]|0)>>>0<=J>>>0?(c[n+308>>2]|0)>>>0>J>>>0:0){J=n+300|0;c[o>>2]=c[J>>2];c[J>>2]=o}else w=99}else w=99;while(0);do if((w|0)==99)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{J=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[K>>2]=0;c[R>>2]=4;Ne(f,4);k=4}else if((w|0)==135){l=0;p=c[K>>2]|0;w=136}do if((w|0)==136)if(p){q=p+20|0;m=c[q>>2]|0;if((m|0)<832317811)switch(m|0){case 770837923:{w=138;break}default:{}}else switch(m|0){case 832317811:{w=138;break}default:{}}if((w|0)==138)kc(p)|0;g=c[p>>2]|0;kb(g,p);o=c[p+4>>2]|0;n=p+8|0;m=c[n>>2]|0;if(!o)c[g+4>>2]=m;else{c[o+8>>2]=m;m=c[n>>2]|0}if(m|0)c[m+4>>2]=o;c[q>>2]=1443283912;c[p>>2]=0;if(g|0){if(c[g+480>>2]|0){Xd(g,p);break}K=p;if((c[g+304>>2]|0)>>>0<=K>>>0?(c[g+308>>2]|0)>>>0>K>>>0:0){K=g+300|0;c[p>>2]=c[K>>2];c[K>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{K=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if(l|0){if(c[O>>2]|0){Xd(f,l);break}O=l;if((c[P>>2]|0)>>>0<=O>>>0?(c[Q>>2]|0)>>>0>O>>>0:0){c[l>>2]=c[N>>2];c[N>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Q=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if((k|0)==3082|(a[M>>0]|0)!=0){og(f);g=7}else g=c[f+68>>2]&k;k=(j|0)!=0;if(!(k&(g|0)!=0)){if(!k){j=g;Ra=T;return j|0}c[j>>2]=0;j=g;Ra=T;return j|0}n=pd(f)|0;do if(n|0?(S=(Eu(n)|0)+1|0,Q=Sv(S|0,0,-1,-1)|0,P=L()|0,!(P>>>0>0|(P|0)==0&Q>>>0>2147483390)):0){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](S)|0;if(!k)break}else{k=Wa[c[29356>>2]&127](S)|0;if((c[14985]|0)>>>0<S>>>0)c[14985]=S;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){Q=c[14978]|0;P=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&P>>>0<=Q>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}ew(k|0,n|0,S|0)|0;c[j>>2]=k;j=g;Ra=T;return j|0}while(0);c[j>>2]=0;c[R>>2]=7;Ne(f,7);j=7;Ra=T;return j|0}else{if((k|0)<1266094736)switch(k|0){case -264537850:break;default:break b}else switch(k|0){case 1266094736:break;default:break b}c[m>>2]=38244;Db(21,38253,m);break a}while(0);c[l>>2]=50924;Db(21,38253,l)}while(0);c[n>>2]=58063;c[n+4>>2]=118947;c[n+8>>2]=31517;Db(21,32001,n);j=21;Ra=T;return j|0}function od(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return qd(a,b,c,128,0,d,e)|0}function pd(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;g=i+8|0;f=i;a:do if(d){e=c[d+96>>2]|0;b:do if((e|0)>=-264537850)if((e|0)<1266094736)switch(e|0){case -264537850:break b;default:{h=3;break b}}else switch(e|0){case 1266094736:break b;default:{h=3;break b}}else switch(e|0){case -1607883113:break;default:h=3}while(0);if((h|0)==3){c[f>>2]=50924;Db(21,38253,f);c[g>>2]=58063;c[g+4>>2]=157025;c[g+8>>2]=31517;Db(21,32001,g);e=50552;break}if(!(a[d+81>>0]|0)){h=d+64|0;e=c[h>>2]|0;c:do if(!e)e=0;else{g=c[d+260>>2]|0;do if(g){f=b[g+8>>1]|0;if((f&514)==514?(a[g+10>>0]|0)==1:0)e=c[g+16>>2]|0;else{if(f&1)break;e=Gg(g,1)|0}if(e|0)break a;e=c[h>>2]|0}while(0);switch(e|0){case 516:{e=50738;break a}case 100:{e=50760;break a}case 101:{e=50782;break a}default:{e=e&255;if(e>>>0<29)break c;else{e=50724;break a}}}}while(0);if(!(520028155>>>e&1))e=50724;else e=c[22960+(e<<2)>>2]|0}else e=34831}else e=34831;while(0);Ra=i;return e|0}function qd(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=Ra;Ra=Ra+352|0;ya=za+56|0;xa=za+48|0;wa=za+40|0;p=za+24|0;o=za+16|0;n=za+8|0;m=za;ta=za+336|0;ua=za+60|0;c[k>>2]=0;a:do if(!f){c[m>>2]=31171;Db(21,38253,m)}else{m=c[f+96>>2]|0;b:do if((m|0)<-264537850){switch(m|0){case -1607883113:break;default:break b}if(!g)break a;ma=f+20|0;n=c[ma>>2]|0;na=f+16|0;if((n|0)>0){o=c[na>>2]|0;m=0;do{p=c[o+(m<<4)+4>>2]|0;if(p|0)c[(c[p+4>>2]|0)+4>>2]=c[p>>2];m=m+1|0}while((m|0)!=(n|0))}D=ua+188|0;E=ua+220|0;F=(i&1|0)==0;G=i>>>2&1;H=ua+25|0;I=ua+24|0;J=f+272|0;K=f+360|0;M=ua+64|0;N=(h|0)>-1;O=f+4|0;P=ua+68|0;Q=(h|0)==0;R=ua+12|0;S=f+112|0;T=g+(h+-1)|0;U=ua+17|0;V=f+81|0;W=f+68|0;X=g+h|0;Y=ua+224|0;Z=Sv(h|0,((h|0)<0)<<31>>31|0,1,0)|0;_=L()|0;$=(l|0)==0;aa=f+276|0;ba=f+288|0;ca=f+300|0;da=f+480|0;ea=ua+8|0;fa=f+165|0;ga=f+296|0;ha=f+284|0;ia=f+304|0;ja=ua+199|0;ka=g;v=i&255;w=f+292|0;x=f+308|0;y=v<<24>>24>-1;z=f+64|0;A=ua+260|0;B=f+260|0;C=f+56|0;u=0;c:while(1){d:while(1){c[ta>>2]=0;gw(ua|0,0,148)|0;m=D;n=m+88|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));c[E>>2]=j;if(!F){a[I>>0]=1;c[J>>2]=(c[J>>2]|0)+1}a[H>>0]=G;i=c[ma>>2]|0;e:do if((i|0)>0){p=c[na>>2]|0;m=0;f:while(1){o=c[p+(m<<4)+4>>2]|0;if(o|0?(va=c[o+4>>2]|0,c[va+4>>2]=c[o>>2],a[o+9>>0]|0):0){if((c[va+76>>2]|0)!=(o|0)?b[va+22>>1]&64:0)break;n=c[va+72>>2]|0;if(n|0)do{do if((c[n>>2]|0)!=(o|0)){if((c[n+4>>2]|0)!=1)break;if((a[n+8>>0]|0)!=1)break f}while(0);n=c[n+12>>2]|0}while((n|0)!=0)}m=m+1|0;if((m|0)>=(i|0)){la=31;break e}}c[wa>>2]=c[p+(m<<4)>>2];Vb(f,262,38298,wa);n=262}else la=31;while(0);g:do if((la|0)==31){la=0;n=c[K>>2]|0;c[K>>2]=0;if(n|0){m=c[O>>2]|0;if(m|0)do{t=m+149|0;s=(d[t>>0]|d[t+1>>0]<<8)&-4|1;a[t>>0]=s;a[t+1>>0]=s>>8;m=c[m+8>>2]|0}while((m|0)!=0);do{o=n;n=c[n+24>>2]|0;p=c[o>>2]|0;s=o+12|0;t=(c[s>>2]|0)+-1|0;c[s>>2]=t;h:do if(!t){m=c[o+8>>2]|0;if(m|0)Wa[c[(c[m>>2]|0)+16>>2]&127](m)|0;do if(p|0){if(c[p+480>>2]|0){Xd(p,o);break h}m=o;if((c[p+304>>2]|0)>>>0>m>>>0)break;if((c[p+308>>2]|0)>>>0<=m>>>0)break;t=p+300|0;c[o>>2]=c[t>>2];c[t>>2]=o;break h}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0)}while((n|0)!=0)}c[ua>>2]=f;i:do if(N){if(!Q?(a[T>>0]|0)==0:0){la=75;break}if((c[S>>2]|0)<(h|0)){Vb(f,18,38328,xa);if(!(a[V>>0]|0)){n=c[W>>2]&18;break g}else{og(f);n=7;break g}}j:do if(c[J>>2]|0){if(!(a[V>>0]|0))la=64}else{do if(_>>>0>0|((_|0)==0?Z>>>0>(e[aa>>1]|0)>>>0:0))m=ba;else{m=c[ca>>2]|0;if(m|0){c[ca>>2]=c[m>>2];c[ha>>2]=(c[ha>>2]|0)+1;oa=m;la=65;break j}m=c[ga>>2]|0;if(!m){m=w;break}c[ga>>2]=c[m>>2];c[ha>>2]=(c[ha>>2]|0)+1;oa=m;la=65;break j}while(0);c[m>>2]=(c[m>>2]|0)+1;la=64}while(0);if((la|0)==64){oa=_d(f,Z,_)|0;la=65}if((la|0)==65?(la=0,oa|0):0){ew(oa|0,g|0,h|0)|0;a[oa+h>>0]=0;ud(ua,oa,ta)|0;m=oa;c[Y>>2]=g+((c[Y>>2]|0)-m);if(c[da>>2]|0){Xd(f,oa);break}do if((c[ia>>2]|0)>>>0<=m>>>0){if((c[x>>2]|0)>>>0<=m>>>0)break;c[oa>>2]=c[ca>>2];c[ca>>2]=oa;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](oa);break}else{t=Wa[c[29352>>2]&127](oa)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](oa);break}}c[Y>>2]=X}else la=75;while(0);if((la|0)==75){la=0;ud(ua,g,ta)|0}if((c[R>>2]|0)==101)c[R>>2]=0;k:do if(a[U>>0]|0?(pa=c[ua>>2]|0,qa=pa+20|0,(c[qa>>2]|0)>0):0){q=pa+16|0;r=pa+24|0;s=pa+56|0;i=0;l:while(1){m=c[q>>2]|0;t=c[m+(i<<4)+4>>2]|0;do if(t|0){if(!(a[t+8>>0]|0)){m=Zb(t,0,0)|0;if((m|0)>=7)break l;switch(m|0){case 0:break;default:break k}o=c[t+4>>2]|0;c[o+4>>2]=c[t>>2];o=c[(c[o+12>>2]|0)+56>>2]|0;p=1;o=d[o+41>>0]<<16|d[o+40>>0]<<24|d[o+42>>0]<<8|d[o+43>>0];m=c[q>>2]|0}else{o=c[t+4>>2]|0;c[o+4>>2]=c[t>>2];o=c[(c[o+12>>2]|0)+56>>2]|0;p=0;o=d[o+41>>0]<<16|d[o+40>>0]<<24|d[o+42>>0]<<8|d[o+43>>0]}n=c[m+(i<<4)+12>>2]|0;if((o|0)!=(c[n>>2]|0)){o=n+78|0;b[o>>1]=b[o>>1]|8;o=(c[m+28>>2]|0)+78|0;b[o>>1]=b[o>>1]|8;c[r>>2]=c[r>>2]&-17;m:do if(!(c[s>>2]|0)){n=c[qa>>2]|0;if((n|0)<=0)break;o=0;while(1){m=c[m+(o<<4)+12>>2]|0;if(b[m+78>>1]&8){dh(m);n=c[qa>>2]|0}m=o+1|0;if((m|0)>=(n|0))break m;o=m;m=c[q>>2]|0}}while(0);c[R>>2]=17}if(!p)break;c[(c[t+4>>2]|0)+4>>2]=c[t>>2];if(cc(t,0)|0)break;bc(t,0)|0}while(0);i=i+1|0;if((i|0)>=(c[qa>>2]|0))break k}if((m|0)<3082)switch(m|0){case 7:break;default:break k}else switch(m|0){case 3082:break;default:break k}m=pa+81|0;if((a[m>>0]|0)==0?(a[pa+82>>0]|0)==0:0){a[m>>0]=1;if((c[pa+180>>2]|0)>0)c[pa+264>>2]=1;m=pa+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[pa+236>>2]|0;if(!m)break;c[m+12>>2]=7}}while(0);if(a[V>>0]|0)c[R>>2]=7;if(!$)c[l>>2]=c[Y>>2];t=c[R>>2]|0;s=(t|0)==0;n:do if(s?(ra=c[ea>>2]|0,ra|0):0){switch(a[ja>>0]|0){case 0:break n;case 2:{Wi(ra,4);m=12;n=8;break}default:{Wi(ra,8);m=8;n=0}}o=n;do{p=c[ea>>2]|0;if(!(a[(c[p>>2]|0)+81>>0]|0))yc((c[p+116>>2]|0)+((o-n|0)*40|0)|0,c[5696+(o<<2)>>2]|0,-1,1,0)|0;o=o+1|0}while(o>>>0<m>>>0)}while(0);do if(!(a[fa>>0]|0)){r=c[ea>>2]|0;q=(c[Y>>2]|0)-ka|0;if(!r){m=0;la=155;break}a[r+148>>0]=v;if(y)c[r+208>>2]=0;o=c[r>>2]|0;p=Sv(q|0,((q|0)<0)<<31>>31|0,1,0)|0;i=L()|0;o:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))la=132;else m=0;else{do if(!(i>>>0>0|((i|0)==0?p>>>0>(e[o+276>>1]|0)>>>0:0))){n=o+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];la=o+284|0;c[la>>2]=(c[la>>2]|0)+1;la=133;break o}n=o+296|0;m=c[n>>2]|0;if(!m){m=o+292|0;break}else{c[n>>2]=c[m>>2];la=o+284|0;c[la>>2]=(c[la>>2]|0)+1;la=133;break o}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;la=132}while(0);if((la|0)==132){m=_d(o,p,i)|0;la=133}do if((la|0)==133){if(!m){m=0;break}ew(m|0,g|0,q|0)|0;a[m+q>>0]=0}while(0);c[r+188>>2]=m;la=136}else la=136;while(0);p:do if((la|0)==136){la=0;q=c[ea>>2]|0;m=q;if(!q){la=155;break}if(s?(a[V>>0]|0)==0:0){la=155;break}r=q+20|0;n=c[r>>2]|0;if((n|0)<832317811)switch(n|0){case 770837923:{la=140;break}default:{}}else switch(n|0){case 832317811:{la=140;break}default:{}}if((la|0)==140){la=0;kc(q)|0}p=c[q>>2]|0;kb(p,q);i=c[q+4>>2]|0;o=q+8|0;n=c[o>>2]|0;if(!i)c[p+4>>2]=n;else{c[i+8>>2]=n;n=c[o>>2]|0}if(n|0)c[n+4>>2]=i;c[r>>2]=1443283912;c[q>>2]=0;do if(p|0){if(c[p+480>>2]|0){Xd(p,q);break p}if((c[p+304>>2]|0)>>>0>m>>>0)break;if((c[p+308>>2]|0)>>>0<=m>>>0)break;r=p+300|0;c[q>>2]=c[r>>2];c[r>>2]=q;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{r=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);if((la|0)==155){la=0;c[k>>2]=m}n=c[ta>>2]|0;q:do if(n){c[ya>>2]=n;Vb(f,t,31408,ya);if(c[da>>2]|0){Xd(f,n);break}m=n;do if((c[ia>>2]|0)>>>0<=m>>>0){if((c[x>>2]|0)>>>0<=m>>>0)break;c[n>>2]=c[ca>>2];c[ca>>2]=n;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else{c[z>>2]=t;if(!s){Ne(f,t);break}if(!(c[B>>2]|0))break;Ne(f,0)}while(0);m=c[A>>2]|0;if(!m){n=t;break}while(1){c[A>>2]=c[m+4>>2];r:do if(!(c[da>>2]|0)){n=m;do if((c[ia>>2]|0)>>>0<=n>>>0){if((c[x>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[ca>>2];c[ca>>2]=m;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(f,m);while(0);m=c[A>>2]|0;if(!m){n=t;break}}}while(0);o=c[ua>>2]|0;m=c[M>>2]|0;do if(m|0){if(o|0){if(c[o+480>>2]|0){Xd(o,m);break}t=m;if((c[o+304>>2]|0)>>>0<=t>>>0?(c[o+308>>2]|0)>>>0>t>>>0:0){t=o+300|0;c[m>>2]=c[t>>2];c[t>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{t=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);m=c[P>>2]|0;if(m|0)ri(o,m);if(o|0){t=o+272|0;c[t>>2]=(c[t>>2]|0)-(d[I>>0]|0)}switch(n|0){case 513:break;case 17:break d;default:{la=205;break c}}}if((c[C>>2]|0)==0?(sa=c[ma>>2]|0,(sa|0)>0):0){o=0;m=sa;do{n=c[(c[na>>2]|0)+(o<<4)+12>>2]|0;if(b[n+78>>1]&8){dh(n);m=c[ma>>2]|0}o=o+1|0}while((o|0)<(m|0))}if(!u)u=1;else{la=202;break}}if((la|0)==202)if(!(a[V>>0]|0)){ya=c[W>>2]&17;Ra=za;return ya|0}else{og(f);ya=7;Ra=za;return ya|0}else if((la|0)==205)if((n|0)==3082|(a[V>>0]|0)!=0){og(f);ya=7;Ra=za;return ya|0}else{ya=c[W>>2]&n;Ra=za;return ya|0}}else{if((m|0)<1266094736)switch(m|0){case -264537850:break;default:break b}else switch(m|0){case 1266094736:break;default:break b}c[o>>2]=38244;Db(21,38253,o);break a}while(0);c[n>>2]=50924;Db(21,38253,n)}while(0);c[p>>2]=58063;c[p+4>>2]=124395;c[p+8>>2]=31517;Db(21,32001,p);ya=21;Ra=za;return ya|0}function rd(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Ra;Ra=Ra+16|0;n=o;k=c[b+348>>2]|0;if(!k){i=b+340|0;h=b+344|0}else{i=a[e>>0]|0;if(!(i<<24>>24))h=0;else{h=0;j=e;do{j=j+1|0;h=G(h+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[j>>0]|0}while(i<<24>>24!=0)}h=(h>>>0)%((c[b+336>>2]|0)>>>0)|0;i=k+(h<<3)|0;h=k+(h<<3)+4|0}i=c[i>>2]|0;a:do if(!i)h=59292;else{m=d[208+(d[e>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;i=i+-1|0;k=c[h+12>>2]|0;l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-m|0;if(!(l<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;p=a[k>>0]|0;j=(d[208+(p&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(j|0)!=0))}if(!j)break a;if(!i){h=59292;break}}}while(0);if(!(c[h+8>>2]|0)){Hi(b,e,f,g,0)|0;h=0}else{c[n>>2]=58063;c[n+4>>2]=134381;c[n+8>>2]=31517;Db(21,32001,n);h=21}if(!(a[b+81>>0]|0)){p=c[b+68>>2]&h;Ra=o;return p|0}else{og(b);p=7;Ra=o;return p|0}return 0}function sd(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;o=p;l=c[b+348>>2]|0;if(!l){j=b+340|0;i=b+344|0}else{j=a[e>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=e;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}i=(i>>>0)%((c[b+336>>2]|0)>>>0)|0;j=l+(i<<3)|0;i=l+(i<<3)+4|0}j=c[j>>2]|0;a:do if(!j)i=59292;else{n=d[208+(d[e>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=e;do{l=l+1|0;m=m+1|0;q=a[l>>0]|0;k=(d[208+(q&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!j){i=59292;break}}}while(0);if(!(c[i+8>>2]|0)){Hi(b,e,f,g,h)|0;i=0}else{c[o>>2]=58063;c[o+4>>2]=134381;c[o+8>>2]=31517;Db(21,32001,o);i=21}if(!(a[b+81>>0]|0))i=c[b+68>>2]&i;else{og(b);i=7}if(!((h|0)!=0&(i|0)!=0)){Ra=p;return i|0}ab[h&127](g);Ra=p;return i|0}function td(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+304|0;j=q+16|0;g=q;h=q+296|0;p=q+20|0;c[h>>2]=0;i=c[e+352>>2]|0;if(i|0?(m=i+12|0,(c[m>>2]|0)==0):0){l=c[i+4>>2]|0;gw(p+4|0,0,272)|0;n=p+200|0;a[n>>0]=1;c[p>>2]=e;c[p+132>>2]=1;if(((((ud(p,f,h)|0)==0?(k=c[p+228>>2]|0,(k|0)!=0):0)?(a[e+81>>0]|0)==0:0)?(c[k+12>>2]|0)==0:0)?(c[k+56>>2]|0)==0:0){g=l+4|0;if(!(c[g>>2]|0)){h=k+4|0;c[g>>2]=c[h>>2];f=k+42|0;b[l+42>>1]=b[f>>1]|0;j=k+36|0;g=l+36|0;c[g>>2]=c[g>>2]|c[j>>2]&96;b[f>>1]=0;c[h>>2]=0;if((c[j>>2]&32|0)!=0?(c[(c[c[(c[i>>2]|0)+4>>2]>>2]|0)+52>>2]|0)!=0:0){g=k+8|0;while(1){g=c[g>>2]|0;j=g+55|0;if(((d[j>>0]|d[j+1>>0]<<8)&3)==2)break;else g=g+20|0}g=(b[g+50>>1]|0)!=1&1}else g=0;f=k+8|0;h=c[f>>2]|0;if(h){c[l+8>>2]=h;c[f>>2]=0;c[h+12>>2]=l}}else g=0;c[m>>2]=1;l=g}else o=18;do if((o|0)==18){g=c[h>>2]|0;m=(g|0)==0;c[j>>2]=g;Vb(e,1,m?0:31408,j);if(!m){if(c[e+480>>2]|0){Xd(e,g);l=1;break}m=g;if((c[e+304>>2]|0)>>>0<=m>>>0?(c[e+308>>2]|0)>>>0>m>>>0:0){l=e+300|0;c[g>>2]=c[l>>2];c[l>>2]=g;l=1;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);l=1;break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);l=1;break}}else l=1}while(0);a[n>>0]=0;j=c[p+8>>2]|0;do if(j|0){k=j+20|0;g=c[k>>2]|0;if((g|0)<832317811)switch(g|0){case 770837923:{o=29;break}default:{}}else switch(g|0){case 832317811:{o=29;break}default:{}}if((o|0)==29)kc(j)|0;i=c[j>>2]|0;kb(i,j);h=c[j+4>>2]|0;f=j+8|0;g=c[f>>2]|0;if(!h)c[i+4>>2]=g;else{c[h+8>>2]=g;g=c[f>>2]|0}if(g|0)c[g+4>>2]=h;c[k>>2]=1443283912;c[j>>2]=0;if(i|0){if(c[i+480>>2]|0){Xd(i,j);break}o=j;if((c[i+304>>2]|0)>>>0<=o>>>0?(c[i+308>>2]|0)>>>0>o>>>0:0){o=i+300|0;c[j>>2]=c[o>>2];c[o>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{o=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);g=c[p+228>>2]|0;do if(g|0){if(e|0?c[e+480>>2]|0:0){Vi(e,g);break}n=g+32|0;o=(c[n>>2]|0)+-1|0;c[n>>2]=o;if(!o)Vi(e,g)}while(0);f=c[p>>2]|0;g=c[p+64>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}o=g;if((c[f+304>>2]|0)>>>0<=o>>>0?(c[f+308>>2]|0)>>>0>o>>>0:0){o=f+300|0;c[g>>2]=c[o>>2];c[o>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{o=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[p+68>>2]|0;if(g|0)ri(f,g);g=p+24|0;if(f|0){p=f+272|0;c[p>>2]=(c[p>>2]|0)-(d[g>>0]|0)}a[g>>0]=0;if(!(a[e+81>>0]|0)){e=c[e+68>>2]&l;Ra=q;return e|0}else{og(e);e=7;Ra=q;return e|0}}c[e+64>>2]=21;Ne(e,21);c[g>>2]=58063;c[g+4>>2]=135056;c[g+8>>2]=31517;Db(21,32001,g);e=21;Ra=q;return e|0}function ud(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;V=Ra;Ra=Ra+1280|0;O=V+48|0;M=V+40|0;I=V+32|0;H=V+24|0;G=V+16|0;F=V+8|0;C=V+1272|0;D=V;E=V+1268|0;i=V+56|0;S=c[d>>2]|0;j=c[S+112>>2]|0;if(!(c[S+168>>2]|0))c[S+264>>2]=0;N=d+12|0;c[N>>2]=0;P=d+224|0;c[P>>2]=f;J=i+4|0;c[J>>2]=d;h=i+8|0;c[i>>2]=h;b[h>>1]=0;b[i+10>>1]=0;B=i+1208|0;c[B>>2]=i+1196;T=S+236|0;U=d+124|0;c[U>>2]=c[T>>2];c[T>>2]=d;k=Bi(f,E)|0;j=j-k|0;a:do if((j|0)>=0){w=S+264|0;x=d+188|0;y=d+192|0;z=i+8|0;v=D+4|0;u=C+4|0;l=-1;b:while(1){m=k;t=j;while(1){j=c[E>>2]|0;if((j|0)<=155){s=m;break}if(c[w>>2]|0){Q=10;break b}if((j|0)!=174){Q=13;break}f=f+m|0;j=Bi(f,E)|0;k=t-j|0;if((k|0)<0){Q=7;break a}else{m=j;t=k}}c:do if((Q|0)==13){Q=0;if(!(a[f>>0]|0)){switch(l|0){case 0:{j=f;break a}case 1:{j=0;break}default:j=1}c[E>>2]=j;s=0;break}switch(j|0){case 156:{j=f+6|0;d:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=23;break d}default:{Q=20;break d}}}do if((Q|0)==20){Q=0;if((k|0)>=95){j=59;break}if((b[5744+(k<<1)>>1]|0)!=59)if((k|0)==59)Q=25;else j=59;else Q=23}while(0);if((Q|0)==23)Q=25;do if((Q|0)==25){e:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=29;break e}default:{Q=27;break e}}}if((Q|0)==27?(Q=0,(k|0)<95):0)if((b[5744+(k<<1)>>1]|0)==59)Q=29;else{j=(k|0)==24?156:59;break}if((Q|0)==29){Q=0;c[C>>2]=59}j=59}while(0);c[E>>2]=j;s=m;break c}case 157:{f:do if((l|0)==23){j=f+4|0;g:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:break g;default:{Q=36;break g}}}do if((Q|0)==36){Q=0;if((k|0)<95?(b[5744+(k<<1)>>1]|0)==59:0)break;switch(k|0){case 22:case 59:{j=157;break f}default:{}}j=59;break f}while(0);j=157}else j=59;while(0);c[E>>2]=j;s=m;break c}case 158:{do if((l|0)==23){j=f+6|0;h:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=47;break h}default:{Q=45;break h}}}if((Q|0)==45?(Q=0,(k|0)<95):0)if((b[5744+(k<<1)>>1]|0)!=59)if((k|0)==22){j=158;break}else{Q=50;break}else Q=47;if((Q|0)==47)c[C>>2]=59;Q=50}else Q=50;while(0);if((Q|0)==50){Q=0;j=59}c[E>>2]=j;s=m;break c}default:{Q=52;break b}}}while(0);c[x>>2]=f;c[y>>2]=s;q=f;p=c[J>>2]|0;o=c[i>>2]|0;r=j&65535;k=b[o>>1]|0;while(1){n=k&65535;if((k&65535)<=540){l=e[5936+(n<<1)>>1]|0;m=r;while(1){j=m&65535;k=j+l|0;if(k>>>0<=2168?(b[7024+(k<<1)>>1]|0)==m<<16>>16:0){Q=64;break}if((m&65535)>=95){Q=60;break}j=b[5744+(j<<1)>>1]|0;if(!(j<<16>>16)){Q=60;break}else m=j}do if((Q|0)==60){Q=0;j=l+95|0;if(j>>>0<2169?!(m<<16>>16==0?1:(b[7024+(j<<1)>>1]|0)!=95):0){j=11376+(j<<1)|0;break}j=15664+(n<<1)|0}else if((Q|0)==64){Q=0;j=11376+(k<<1)|0}while(0);k=b[j>>1]|0}if((k&65535)<=1161){Q=68;break}k=$i(i,(k&65535)+-1162|0,f,s,p)|0;j=c[i>>2]|0;if(j>>>0<=h>>>0)break;else o=j}do if((Q|0)==68){Q=0;if((k&65535)>=1159){if(k<<16>>16==1160){c[i>>2]=o+-12;break}c[D>>2]=q;c[v>>2]=s;c[C>>2]=f;c[u>>2]=s;j=c[J>>2]|0;if(!(a[f>>0]|0))cd(j,49148,I);else{c[H>>2]=C;cd(j,38502,H)}c[J>>2]=j;aj(j,r,D);break}j=o+12|0;c[i>>2]=j;if(j>>>0<=(c[B>>2]|0)>>>0){b[j>>1]=(k&65535)>540?(k&65535)+378&65535:k;b[o+14>>1]=r;c[o+16>>2]=q;c[o+20>>2]=s;break}c[i>>2]=o;k=c[J>>2]|0;if(o>>>0>z>>>0?(c[i>>2]=o+-12,aj(k,b[o+2>>1]|0,o+4|0),A=c[i>>2]|0,A>>>0>z>>>0):0){j=A;do{r=c[J>>2]|0;c[i>>2]=j+-12;aj(r,b[j+2>>1]|0,j+4|0);j=c[i>>2]|0}while(j>>>0>z>>>0)}cd(k,38790,G);c[J>>2]=k}while(0);f=f+s|0;if(c[N>>2]|0){j=f;break a}l=c[E>>2]|0;k=Bi(f,E)|0;j=t-k|0;if((j|0)<0){Q=7;break a}}if((Q|0)==10){c[N>>2]=9;j=f;break}else if((Q|0)==52){c[F>>2]=m;c[F+4>>2]=f;cd(d,38428,F);j=f;break}}else Q=7;while(0);if((Q|0)==7){c[N>>2]=18;j=f}f=c[i>>2]|0;if(f>>>0>h>>>0)do{c[i>>2]=f+-12;aj(c[J>>2]|0,b[f+2>>1]|0,f+4|0);f=c[i>>2]|0}while(f>>>0>h>>>0);if(!(a[S+81>>0]|0)){h=c[N>>2]|0;switch(h|0){case 101:case 0:break;default:{K=h;Q=90}}}else{c[N>>2]=7;K=7;Q=90}if((Q|0)==90?(L=d+4|0,(c[L>>2]|0)==0):0){switch(K|0){case 516:{h=50738;break}case 100:{h=50760;break}default:{h=K&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}c[M>>2]=h;M=dd(S,31408,M)|0;c[L>>2]=M}h=d+4|0;f=c[h>>2]|0;if(!f)p=0;else{c[g>>2]=f;p=c[N>>2]|0;g=c[P>>2]|0;c[O>>2]=f;c[O+4>>2]=g;Db(p,38455,O);c[h>>2]=0;p=1}c[P>>2]=j;i=d+8|0;j=c[i>>2]|0;if((j|0?(c[d+36>>2]|0)>0:0)?(a[d+18>>0]|0)==0:0){k=c[j>>2]|0;kb(k,j);l=c[j+4>>2]|0;f=j+8|0;h=c[f>>2]|0;if(!l)c[k+4>>2]=h;else{c[l+8>>2]=h;h=c[f>>2]|0}if(h|0)c[h+4>>2]=l;c[j+20>>2]=1443283912;c[j>>2]=0;do if(k){if(c[k+480>>2]|0){Xd(k,j);break}P=j;if((c[k+304>>2]|0)>>>0<=P>>>0?(c[k+308>>2]|0)>>>0>P>>>0:0){P=k+300|0;c[j>>2]=c[P>>2];c[P>>2]=j}else Q=113}else Q=113;while(0);do if((Q|0)==113)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{Q=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}if(!(a[d+18>>0]|0)){h=d+108|0;f=c[h>>2]|0;do if(f|0){if(c[S+480>>2]|0){Xd(S,f);break}Q=f;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[f>>2]=c[Q>>2];c[Q>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[h>>2]=0;c[d+104>>2]=0}h=c[d+252>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=d+200|0;h=a[f>>0]|0;if(!(h<<24>>24)){h=c[d+228>>2]|0;do if(h|0){if(c[S+480>>2]|0){Vi(S,h);break}P=h+32|0;Q=(c[P>>2]|0)+-1|0;c[P>>2]=Q;if(!Q)Vi(S,h)}while(0);h=a[f>>0]|0}do if((h&255)<=1?(R=c[d+236>>2]|0,R|0):0){Xi(S,c[R+28>>2]|0);h=c[R>>2]|0;do if(h|0){if(c[S+480>>2]|0){Xd(S,h);break}Q=h;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[R+4>>2]|0;do if(h|0){if(c[S+480>>2]|0){Xd(S,h);break}Q=h;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[R+12>>2]|0;if(h|0)ni(S,h);h=c[R+16>>2]|0;i:do if(h){k=h+4|0;f=c[h>>2]|0;if((c[k>>2]|0)>0){l=S+480|0;m=S+304|0;n=S+308|0;o=S+300|0;j=0;do{f=c[f+(j<<3)>>2]|0;j:do if(f|0){if(c[l>>2]|0){Xd(S,f);break}i=f;do if((c[m>>2]|0)>>>0<=i>>>0){if((c[n>>2]|0)>>>0<=i>>>0)break;c[f>>2]=c[o>>2];c[o>>2]=f;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);j=j+1|0;f=c[h>>2]|0}while((j|0)<(c[k>>2]|0))}k:do if(f){do if(S|0){i=S+480|0;if(!(c[i>>2]|0)){j=f;if((c[S+304>>2]|0)>>>0>j>>>0)break;if((c[S+308>>2]|0)>>>0<=j>>>0)break;Q=S+300|0;c[f>>2]=c[Q>>2];c[Q>>2]=f}else Xd(S,f);f=i;Q=187;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Q=185;break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Q=185;break}}else Q=185;while(0);do if((Q|0)==185){if(!S)break;f=S+480|0;Q=187}while(0);do if((Q|0)==187){if(c[f>>2]|0){Xd(S,h);Q=196;break i}f=h;if((c[S+304>>2]|0)>>>0>f>>>0)break;if((c[S+308>>2]|0)>>>0<=f>>>0)break;Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;Q=196;break i}while(0);do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{P=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);if(!S)h=R;else{h=R;Q=198}}else Q=196;while(0);if((Q|0)==196){h=R;Q=198}if((Q|0)==198){if(c[S+480>>2]|0){Xd(S,h);break}Q=R;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[R>>2]=c[Q>>2];c[Q>>2]=R;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);n=c[d+268>>2]|0;do if(n|0){l:do if((c[n>>2]|0)>0){j=S+480|0;k=S+304|0;l=S+308|0;m=S+300|0;if(!S){f=0;while(1){h=c[n+8+(f<<4)+4>>2]|0;if(h|0)ri(0,h);h=c[n+8+(f<<4)+8>>2]|0;if(h|0)pi(0,h,1);h=c[n+8+(f<<4)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=f+1|0;if((f|0)>=(c[n>>2]|0))break l}}i=0;do{h=c[n+8+(i<<4)+4>>2]|0;if(h|0)ri(S,h);h=c[n+8+(i<<4)+8>>2]|0;if(h|0)pi(S,h,1);h=c[n+8+(i<<4)>>2]|0;m:do if(h|0){if(c[j>>2]|0){Xd(S,h);break}f=h;do if((c[k>>2]|0)>>>0<=f>>>0){if((c[l>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[m>>2];c[m>>2]=h;break m}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0}while((i|0)<(c[n>>2]|0))}while(0);if(S|0){if(c[S+480>>2]|0){Xd(S,n);break}R=n;if((c[S+304>>2]|0)>>>0<=R>>>0?(c[S+308>>2]|0)>>>0>R>>>0:0){R=S+300|0;c[n>>2]=c[R>>2];c[R>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{R=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);h=c[d+216>>2]|0;do if(h|0){if(S|0){if(c[S+480>>2]|0){Xd(S,h);break}R=h;if((c[S+304>>2]|0)>>>0<=R>>>0?(c[S+308>>2]|0)>>>0>R>>>0:0){R=S+300|0;c[h>>2]=c[R>>2];c[R>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);m=d+112|0;h=c[m>>2]|0;n:do if(h|0){i=S+480|0;j=S+304|0;k=S+308|0;l=S+300|0;if(!S)while(1){c[m>>2]=c[h>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[m>>2]|0;if(!h)break n}do{c[m>>2]=c[h>>2];o:do if(!(c[i>>2]|0)){f=h;do if((c[j>>2]|0)>>>0<=f>>>0){if((c[k>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[l>>2];c[l>>2]=h;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(S,h);while(0);h=c[m>>2]|0}while((h|0)!=0)}while(0);i=d+256|0;h=c[i>>2]|0;if(!h){S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}f=S+480|0;if(!S){do{f=c[h+76>>2]|0;c[i>>2]=f;d=h+32|0;S=(c[d>>2]|0)+-1|0;c[d>>2]=S;if(!S){Vi(0,h);h=c[i>>2]|0}else h=f}while((h|0)!=0);S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}do{c[i>>2]=c[h+76>>2];if(!((c[f>>2]|0)==0?(R=h+32|0,d=(c[R>>2]|0)+-1|0,c[R>>2]=d,(d|0)!=0):0))Vi(S,h);h=c[i>>2]|0}while((h|0)!=0);S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}function vd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+48|0;f=i+32|0;h=i+16|0;g=i;c[g>>2]=e;do if((d|0)==1){d=c[b+352>>2]|0;if(!d){c[h>>2]=58063;c[h+4>>2]=135531;c[h+8>>2]=31517;Db(21,32001,h);break}b=(c[g>>2]|0)+(4-1)&~(4-1);h=c[b>>2]|0;c[g>>2]=b+4;a[(c[d>>2]|0)+16>>0]=h;h=0;Ra=i;return h|0}else{c[f>>2]=58063;c[f+4>>2]=135539;c[f+8>>2]=31517;Db(21,32001,f)}while(0);c[b+64>>2]=21;Ne(b,21);h=21;Ra=i;return h|0}function wd(d){d=d|0;var f=0,g=0,h=0;a:do if(!d)f=ob(40,0)|0;else{if(c[d+272>>2]|0){if(a[d+81>>0]|0){d=0;return d|0}}else{do if((e[d+276>>1]|0)>=40){g=d+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];h=d+284|0;c[h>>2]=(c[h>>2]|0)+1;break a}g=d+296|0;f=c[g>>2]|0;if(!f){f=d+292|0;break}else{c[g>>2]=c[f>>2];h=d+284|0;c[h>>2]=(c[h>>2]|0)+1;break a}}else f=d+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(d,40,0)|0}while(0);if(!f){d=0;return d|0}g=f;h=g+40|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));b[f+8>>1]=1;c[f+32>>2]=d;d=f;return d|0}function xd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+48|0;g=h+40|0;f=h+32|0;e=h+16|0;d=h;if(c[7380]|0){c[e>>2]=58063;c[e+4>>2]=154986;c[e+8>>2]=31517;Db(21,32001,e);b=21;Ra=h;return b|0}c[d>>2]=b;do switch(a|0){case 4:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7335]=c[a>>2];c[7336]=c[a+4>>2];c[7337]=c[a+8>>2];c[7338]=c[a+12>>2];c[7339]=c[a+16>>2];c[7340]=c[a+20>>2];c[7341]=c[a+24>>2];c[7342]=c[a+28>>2];a=0;break}case 5:{if(!(c[7335]|0)){c[f>>2]=30308;xd(4,f)|0}b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=c[7335];c[a+4>>2]=c[7336];c[a+8>>2]=c[7337];c[a+12>>2]=c[7338];c[a+16>>2]=c[7339];c[a+20>>2]=c[7340];c[a+24>>2]=c[7341];c[a+28>>2]=c[7342];a=0;break}case 9:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7324]=a;a=0;break}case 27:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7329]=a;a=0;break}case 7:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7374]=a;a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7375]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7376]=a;a=0;break}case 24:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=160;a=0;break}case 14:{a=0;break}case 15:{a=1;break}case 18:{a=(c[d>>2]|0)+(4-1)&~(4-1);e=c[a>>2]|0;c[d>>2]=a+4;a=29408;d=e;e=a+52|0;do{c[a>>2]=c[d>>2];a=a+4|0;d=d+4|0}while((a|0)<(e|0));a=0;break}case 19:{if(!(c[7354]|0)){c[g>>2]=30340;xd(18,g)|0}e=(c[d>>2]|0)+(4-1)&~(4-1);a=c[e>>2]|0;c[d>>2]=e+4;d=29408;e=a+52|0;do{c[a>>2]=c[d>>2];a=a+4|0;d=d+4|0}while((a|0)<(e|0));a=0;break}case 13:{a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7332]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7333]=a;a=0;break}case 16:{a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7387]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7388]=a;a=0;break}case 17:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7327]=a;a=0;break}case 20:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7328]=a;a=0;break}case 22:{c[d>>2]=((c[d>>2]|0)+(8-1)&~(8-1))+8;c[d>>2]=((c[d>>2]|0)+(8-1)&~(8-1))+8;c[7370]=0;c[7371]=0;c[7372]=0;c[7373]=0;a=0;break}case 25:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7379]=a;a=0;break}case 26:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7334]=a;a=0;break}default:a=1}while(0);b=a;Ra=h;return b|0}function yd(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;h=n;c[h>>2]=f;do switch(e|0){case 1e3:{l=(c[h>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[h>>2]=l+4;c[c[b+16>>2]>>2]=m;m=0;Ra=n;return m|0}case 1001:{j=(c[h>>2]|0)+(4-1)&~(4-1);k=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);m=c[j>>2]|0;c[h>>2]=j+4;m=zd(b,k,l,m)|0;Ra=n;return m|0}case 1002:{k=0;break}case 1003:{k=1;break}case 1004:{k=2;break}case 1005:{k=3;break}case 1006:{k=4;break}case 1007:{k=5;break}case 1008:{k=6;break}case 1009:{k=7;break}case 1010:{k=8;break}case 1011:{k=9;break}default:{m=1;Ra=n;return m|0}}while(0);j=(c[h>>2]|0)+(4-1)&~(4-1);e=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[h>>2]=j+4;j=b+32|0;i=j;h=c[i>>2]|0;i=c[i+4>>2]|0;if((e|0)<=0)if(!e){e=h&~c[2208+(k<<3)+4>>2];f=i;m=17}else{e=h;f=i}else{e=h|c[2208+(k<<3)+4>>2];f=i;m=17}if((m|0)==17){m=j;c[m>>2]=e;c[m+4>>2]=f}if(!((h|0)==(e|0)&(i|0)==(f|0))?(g=c[b+4>>2]|0,g|0):0)do{m=g+149|0;b=(d[m>>0]|d[m+1>>0]<<8)&-4|1;a[m>>0]=b;a[m+1>>0]=b>>8;g=c[g+8>>2]|0}while((g|0)!=0);if(!l){m=0;Ra=n;return m|0}c[l>>2]=(0?1:(c[j>>2]&c[2208+(k<<3)+4>>2]|0)!=0)&1;m=0;Ra=n;return m|0}function zd(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d+296|0;h=c[q>>2]|0;if(!h)i=0;else{i=0;do{h=c[h>>2]|0;i=i+1|0}while((h|0)!=0)}p=d+300|0;h=c[p>>2]|0;if(!h)h=0;else{j=0;do{h=c[h>>2]|0;j=j+1|0}while((h|0)!=0);h=j}m=d+280|0;if(((c[m>>2]|0)-(h+i)|0)>0){e=5;return e|0}n=d+272|0;o=d+278|0;do if(a[o>>0]|0?(k=c[d+304>>2]|0,k|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=f&-8;k=(l|0)<5?0:l;i=(g|0)>0?g:0;if(!((g|0)<1|(k|0)==0))if(!e){h=Yv(k|0,((k|0)<0)<<31>>31|0,i|0,0)|0;g=Sv(h|0,L()|0,-1,-1)|0;f=L()|0;do if(!(f>>>0>0|(f|0)==0&g>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](h)|0;break}f=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){g=c[14978]|0;j=Tv(h|0,j|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=g>>>0)&1}j=Wa[c[29340>>2]&127](f)|0;if(j){h=Wa[c[29352>>2]&127](j)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else j=0}else j=0;while(0);if(!j)h=0;else{h=j;i=(Wa[c[29352>>2]&127](j)|0)/(l|0)|0}}else h=e;else{h=0;k=0}j=d+304|0;c[j>>2]=h;c[q>>2]=0;c[p>>2]=0;b[d+276>>1]=k;if(!h){c[j>>2]=d;c[d+308>>2]=d;c[n>>2]=1;a[o>>0]=0;c[m>>2]=0;e=0;return e|0}c[m>>2]=i;if((i|0)>0){j=0;while(1){c[h>>2]=j;f=h+k|0;j=h;if((i|0)<=1)break;else{h=f;i=i+-1|0}}c[q>>2]=h;h=f}c[d+308>>2]=h;c[n>>2]=0;a[o>>0]=(e|0)==0&1;e=0;return e|0}function Ad(a){a=a|0;return c[a+100>>2]|0}function Bd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+32|0;o=p+24|0;g=p+8|0;f=p;if(!b){o=0;Ra=p;return o|0}n=b+96|0;e=c[n>>2]|0;a:do if((e|0)>=-264537850)if((e|0)<1266094736)switch(e|0){case -264537850:break a;default:{h=3;break a}}else switch(e|0){case 1266094736:break a;default:{h=3;break a}}else switch(e|0){case -1607883113:break;default:h=3}while(0);if((h|0)==3){c[f>>2]=50924;Db(21,38253,f);c[g>>2]=58063;c[g+4>>2]=155713;c[g+8>>2]=31517;Db(21,32001,g);o=21;Ra=p;return o|0}if(!(a[b+88>>0]&8)){Bp(b);e=b+356|0;k=c[e>>2]|0;if(k|0){c[e>>2]=0;i=b+332|0;if((c[i>>2]|0)>0){h=0;do{j=c[k+(h<<2)>>2]|0;g=j+8|0;e=c[g>>2]|0;if(e|0?(m=c[(c[e>>2]|0)+68>>2]|0,m|0):0)Wa[m&127](e)|0;c[j+20>>2]=0;f=c[j>>2]|0;e=j+12|0;l=(c[e>>2]|0)+-1|0;c[e>>2]=l;do if(!l){e=c[g>>2]|0;if(e|0)Wa[c[(c[e>>2]|0)+16>>2]&127](e)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,j);break}l=j;if((c[f+304>>2]|0)>>>0<=l>>>0?(c[f+308>>2]|0)>>>0>l>>>0:0){l=f+300|0;c[j>>2]=c[l>>2];c[l>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);h=h+1|0}while((h|0)<(c[i>>2]|0))}do if(!(c[b+480>>2]|0)){m=k;if((c[b+304>>2]|0)>>>0<=m>>>0?(c[b+308>>2]|0)>>>0>m>>>0:0){m=b+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(b,k);while(0);c[i>>2]=0}}else{Za[c[b+196>>2]&127](8,c[b+200>>2]|0,b,0)|0;Bp(b);e=b+356|0;k=c[e>>2]|0;if(k|0){c[e>>2]=0;i=b+332|0;if((c[i>>2]|0)>0){h=0;do{j=c[k+(h<<2)>>2]|0;f=j+8|0;e=c[f>>2]|0;if(e|0?(l=c[(c[e>>2]|0)+68>>2]|0,l|0):0)Wa[l&127](e)|0;c[j+20>>2]=0;g=c[j>>2]|0;e=j+12|0;m=(c[e>>2]|0)+-1|0;c[e>>2]=m;do if(!m){e=c[f>>2]|0;if(e|0)Wa[c[(c[e>>2]|0)+16>>2]&127](e)|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}m=j;if((c[g+304>>2]|0)>>>0<=m>>>0?(c[g+308>>2]|0)>>>0>m>>>0:0){m=g+300|0;c[j>>2]=c[m>>2];c[m>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{m=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);h=h+1|0}while((h|0)<(c[i>>2]|0))}do if(!(c[b+480>>2]|0)){m=k;if((c[b+304>>2]|0)>>>0<=m>>>0?(c[b+308>>2]|0)>>>0>m>>>0:0){m=b+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(b,k);while(0);c[i>>2]=0}}b:do if(!d){c:do if(!(c[b+4>>2]|0)){f=c[b+20>>2]|0;if((f|0)<=0)break b;g=c[b+16>>2]|0;e=0;while(1){d=c[g+(e<<4)+4>>2]|0;if(d|0?c[d+16>>2]|0:0)break c;e=e+1|0;if((e|0)>=(f|0))break b}}while(0);Vb(b,5,50150,o);o=5;Ra=p;return o|0}while(0);c[n>>2]=1691352191;fc(b);o=0;Ra=p;return o|0}function Cd(a){a=a|0;return Bd(a,1)|0}function Dd(a,b,d){a=a|0;b=b|0;d=d|0;if(((b*1e3|0)+1e3|0)>(c[a+448>>2]|0)){d=0;return d|0}d=c[a>>2]|0;Xa[c[d+60>>2]&255](d,1e6)|0;d=1;return d|0}function Ed(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;d=Hd(b,d,e,f,g,h,i,j,0,0,0)|0;if((d|0)==3082|(a[b+81>>0]|0)!=0){og(b);b=7;return b|0}else{b=c[b+68>>2]&d;return b|0}return 0}function Fd(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0;do if(l){m=ob(12,0)|0;if(!m){Fc(a);ab[l&127](f);b=1;break}c[m>>2]=0;c[m+4>>2]=l;c[m+8>>2]=f;b=Hd(a,b,d,e,f,g,h,i,j,k,m)|0;if(!(c[m>>2]|0)){ab[l&127](f);qb(m)}}else b=Hd(a,b,d,e,f,g,h,i,j,k,0)|0;while(0);return ic(a,b)|0}function Gd(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return Fd(a,b,c,d,e,f,g,h,0,0,i)|0}function Hd(b,e,f,g,h,i,j,k,l,m,n){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+32|0;p=s+16|0;o=s;if((((e|0?(r=(i|0)!=0,!(r&(k|0)!=0)):0)?!((j|0)==0^(k|0)==0):0)?!((f+1|0)>>>0>128|(l|0)==0^(m|0)==0):0)?((Eu(e)|0)&1073741568|0)==0:0){q=g&2048;switch(g&7){case 4:{o=2;break}case 5:{o=Hd(b,e,f,q|1,h,i,j,k,l,m,n)|0;if(o|0){m=o;Ra=s;return m|0}o=Hd(b,e,f,q|2,h,i,j,k,l,m,n)|0;if(!o)o=3;else{m=o;Ra=s;return m|0}break}default:o=g&7}g=o&255;t=Jd(b,e,f,g,0)|0;if((t|0?(c[t+4>>2]&3|0)==(o|0):0)?(a[t>>0]|0)==(f|0):0){if(c[b+168>>2]|0){Vb(b,5,50805,p);t=5;Ra=s;return t|0}o=c[b+4>>2]|0;if(o|0)do{t=o+149|0;p=(d[t>>0]|d[t+1>>0]<<8)&-4|1;a[t>>0]=p;a[t+1>>0]=p>>8;o=c[o+8>>2]|0}while((o|0)!=0)}o=Jd(b,e,f,g,1)|0;if(!o){t=7;Ra=s;return t|0}g=o+36|0;p=c[g>>2]|0;do if(p|0?(t=(c[p>>2]|0)+-1|0,c[p>>2]=t,(t|0)==0):0){ab[c[p+4>>2]&127](c[p+8>>2]|0);if(b|0){if(c[b+480>>2]|0){Xd(b,p);break}t=p;if((c[b+304>>2]|0)>>>0<=t>>>0?(c[b+308>>2]|0)>>>0>t>>>0:0){t=b+300|0;c[p>>2]=c[t>>2];c[t>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{t=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);if(n|0)c[n>>2]=(c[n>>2]|0)+1;c[g>>2]=n;t=o+4|0;c[t>>2]=c[t>>2]&3|q;c[o+16>>2]=r?i:j;c[o+20>>2]=k;c[o+24>>2]=l;c[o+28>>2]=m;c[o+8>>2]=h;a[o>>0]=f;t=0;Ra=s;return t|0}c[o>>2]=58063;c[o+4>>2]=156338;c[o+8>>2]=31517;Db(21,32001,o);t=21;Ra=s;return t|0}function Id(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;if(Jd(b,d,e,1,0)|0){b=0;Ra=j;return b|0}i=Bb(d,j)|0;if(!i){b=7;Ra=j;return b|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](12)|0;if(!f)h=14;else{g=f;h=23}}else{f=Wa[c[29356>>2]&127](12)|0;if((c[14985]|0)>>>0<12)c[14985]=12;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){k=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=k>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(g){f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;h=23}else h=23}else h=14}do if((h|0)==14){f=b+81|0;if((a[f>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[f>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;f=b+272|0;c[f>>2]=(c[f>>2]|0)+1;f=c[b+236>>2]|0;if(f|0)c[f+12>>2]=7}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);f=1;break}else{f=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);f=1;break}}else if((h|0)==23){c[g>>2]=0;c[g+4>>2]=90;c[g+8>>2]=i;f=Hd(b,d,e,1,i,174,0,0,0,0,g)|0;if(!(c[g>>2]|0)){if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{k=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);if((f|0)==3082|(a[b+81>>0]|0)!=0){og(b);k=7;Ra=j;return k|0}else{k=c[b+68>>2]&f;Ra=j;return k|0}return 0}function Jd(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!f)t=0;else t=(Eu(f)|0)&1073741823;u=b+364|0;m=c[b+376>>2]|0;if(!m){k=b+368|0;j=b+372|0}else{k=a[f>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=f;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[u>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;a:do if(!k)j=59292;else{o=d[208+(d[f>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;n=a[m>>0]|0;l=(d[208+(n&255)>>0]|0)-o|0;if(!(n<<24>>24==0|(l|0)!=0)){n=f;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0))}if(!l)break a;if(!k){j=59292;break}}}while(0);j=c[j+8>>2]|0;b:do if(!j){l=0;j=0}else{o=h&255;if((g|0)==-2){l=0;k=0;while(1){o=(c[j+16>>2]|0)==0?0:6;v=(o|0)>(k|0);k=v?o:k;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;break b}}}l=0;n=0;while(1){v=a[j>>0]|0;k=v<<24>>24;do if(!(v<<24>>24>-1&(k|0)!=(g|0))){k=(k|0)==(g|0)?4:1;m=c[j+4>>2]|0;if((m&3|0)==(o|0)){k=k|2;break}else{k=((m&o)>>>1&1)+k|0;break}}else k=0;while(0);v=(k|0)>(n|0);k=v?k:n;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;break}else n=k}}while(0);c:do if(!(i<<24>>24)){if(l|0?(c[b+24>>2]&2|0)==0:0){q=l;r=0;o=94;break}o=d[208+(d[f>>0]|0)>>0]|0;j=c[59088+((((t+o|0)>>>0)%23|0)<<2)>>2]|0;if(j){while(1){m=c[j+32>>2]|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-o|0;if(!(v<<24>>24==0|(k|0)!=0)){n=f;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k)break;j=c[j+36>>2]|0;if(!j){j=0;o=46;break c}}if(!j){j=0;o=46}else{o=h&255;if((g|0)==-2){k=0;while(1){o=(c[j+16>>2]|0)==0?0:6;v=(o|0)>(k|0);k=v?o:k;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;o=46;break c}}}n=0;while(1){v=a[j>>0]|0;k=v<<24>>24;do if(!(v<<24>>24>-1&(k|0)!=(g|0))){k=(k|0)==(g|0)?4:1;m=c[j+4>>2]|0;if((m&3|0)==(o|0)){k=k|2;break}else{k=((m&o)>>>1&1)+k|0;break}}else k=0;while(0);v=(k|0)>(n|0);k=v?k:n;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;o=46;break}else n=k}}}else{p=l;s=0;o=93}}else o=46;while(0);d:do if((o|0)==46){k=i<<24>>24!=0;if(k&(j|0)<6){n=t+41|0;i=(b|0)==0;e:do if(i){v=Sv(n|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&v>>>0>2147483390)break d;if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](n)|0;o=71;break}j=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){v=c[14978]|0;m=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=v>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k)break d;j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;m=k}else m=k}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0)break d}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<n>>>0:0))){k=b+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=71;break e}k=b+296|0;j=c[k>>2]|0;if(!j){j=b+292|0;break}else{c[k>>2]=c[j>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=71;break e}}else j=b+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(b,n,0)|0;o=71}while(0);if((o|0)==71)if(!j)break;else m=j;gw(m|0,0,n|0)|0;j=m+40|0;l=m+32|0;c[l>>2]=j;a[m>>0]=g;c[m+4>>2]=h&255;ew(j|0,f|0,t+1|0)|0;k=a[j>>0]|0;if(k<<24>>24){do{a[j>>0]=a[208+(k&255)>>0]|0;j=j+1|0;k=a[j>>0]|0}while(k<<24>>24!=0);j=c[l>>2]|0}j=mi(u,j,m)|0;if((j|0)!=(m|0)){c[m+12>>2]=j;v=m;return v|0}do if(!i){if(c[b+480>>2]|0){Xd(b,m);break}v=m;if((c[b+304>>2]|0)>>>0<=v>>>0?(c[b+308>>2]|0)>>>0>v>>>0:0){v=b+300|0;c[m>>2]=c[v>>2];c[v>>2]=m}else o=83}else o=83;while(0);do if((o|0)==83)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{v=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);j=b+81|0;if(a[j>>0]|0){v=0;return v|0}if(a[b+82>>0]|0){v=0;return v|0}a[j>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;j=b+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[b+236>>2]|0;if(!j){v=0;return v|0}c[j+12>>2]=7;v=0;return v|0}else{p=l;s=k;o=93}}while(0);if((o|0)==93?p|0:0){q=p;r=s;o=94}if((o|0)==94?r|(c[q+16>>2]|0)!=0:0){v=q;return v|0}v=0;return v|0}function Kd(a,b,d){a=a|0;b=b|0;d=d|0;d=Ra;Ra=Ra+16|0;b=d;c[b>>2]=c[(c[a+4>>2]|0)+8>>2];b=Bb(50868,b)|0;c[a+20>>2]=1;yc(c[a>>2]|0,b,-1,1,-1)|0;if(!b){Ra=d;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=d;return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=d;return}}function Ld(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)>(d|0))return 0;Md(b,c,0,0,0)|0;return 0}function Md(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=Ra;Ra=Ra+16|0;o=q;if(g|0)c[g>>2]=-1;if(h|0)c[h>>2]=-1;if(f>>>0>3){b=21;Ra=q;return b|0}if((e|0)!=0?(i=a[e>>0]|0,i<<24>>24!=0):0){n=c[b+20>>2]|0;j=n+-1|0;a:do if((n|0)>0){n=208+(i&255)|0;i=j;m=(c[b+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[n>>0]|0)|0;if(!(l<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!i)break;j=i+-1|0;if((i|0)>0){i=j;m=m+-16|0}else{i=j;break a}}i=109-(d[n>>0]|0)|0;if(!i){j=e;k=50919;do{k=k+1|0;j=j+1|0;r=a[k>>0]|0;i=(d[208+(r&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(i|0)!=0))}i=((i|0)!=0)<<31>>31}else i=j;while(0);if((i|0)<0){c[o>>2]=e;Vb(b,1,31432,o);i=1}else p=23}else{i=10;p=23}do if((p|0)==23){c[b+404>>2]=0;i=Nd(b,i,f,g,h)|0;c[b+64>>2]=i;if(i|0){Ne(b,i);break}if(!(c[b+260>>2]|0))i=0;else{Ne(b,0);i=0}}while(0);if((i|0)==3082|(a[b+81>>0]|0)!=0){og(b);i=7}else i=c[b+68>>2]&i;if(c[b+168>>2]|0){r=i;Ra=q;return r|0}c[b+264>>2]=0;r=i;Ra=q;return r|0}function Nd(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=b+20|0;k=c[o>>2]|0;if((k|0)<=0){n=0;o=0;f=1;n=(n|0)!=0;n=f&n;o=n?5:o;return o|0}n=b+16|0;m=(f|0)==0;if((e|0)==10){b=c[(c[n>>2]|0)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){i=c[i>>2]|0;j=c[i+216>>2]|0;if(!j)b=0;else{if(m)b=0;else b=c[i+176>>2]|0;b=Qf(j,l,f,b,c[i+180>>2]|0,d[i+11>>0]|0,c[i+152>>2]|0,c[i+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;j=(b|0)==5;i=j?0:b;j=j&1;b=(i|0)==0;if(!(b&(k|0)>1)){n=j;o=i;f=b;n=(n|0)!=0;n=f&n;o=n?5:o;return o|0}h=1;do{b=c[(c[n>>2]|0)+(h<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;g=c[b>>2]|0;c[i+4>>2]=g;if(!(a[i+20>>0]|0)){i=c[i>>2]|0;l=c[i+216>>2]|0;if(!l)b=0;else{if(m)b=0;else b=c[i+176>>2]|0;b=Qf(l,g,f,b,c[i+180>>2]|0,d[i+11>>0]|0,c[i+152>>2]|0,c[i+208>>2]|0,0,0)|0;k=c[o>>2]|0}}else b=6}else b=0;e=(b|0)==5;i=e?0:b;j=e?1:j;h=h+1|0;b=(i|0)==0}while(b&(h|0)<(k|0));o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}if(m){m=0;j=0;while(1){if((m|0)==(e|0)){b=c[(c[n>>2]|0)+(e<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){b=c[i>>2]|0;i=c[b+216>>2]|0;if(!i)b=0;else{b=Qf(i,l,0,0,c[b+180>>2]|0,d[b+11>>0]|0,c[b+152>>2]|0,c[b+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;i=(b|0)==5;j=i?1:j;i=i?0:b;l=0;g=0}else{i=0;l=h}m=m+1|0;b=(i|0)==0;if(!(b&(m|0)<(k|0)))break;else h=l}o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}else{m=0;j=0;while(1){if((m|0)==(e|0)){b=c[(c[n>>2]|0)+(e<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){b=c[i>>2]|0;i=c[b+216>>2]|0;if(!i)b=0;else{b=Qf(i,l,f,c[b+176>>2]|0,c[b+180>>2]|0,d[b+11>>0]|0,c[b+152>>2]|0,c[b+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;i=(b|0)==5;j=i?1:j;i=i?0:b;l=0;g=0}else{i=0;l=h}m=m+1|0;b=(i|0)==0;if(!(b&(m|0)<(k|0)))break;else h=l}o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}return 0}function Od(a,b){a=a|0;b=b|0;return Pd(a,b,6,0)|0}function Pd(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=Ra;Ra=Ra+128|0;F=H+88|0;E=H+80|0;z=H+64|0;y=H+56|0;x=H+48|0;v=H+32|0;u=H+24|0;t=H+16|0;q=H;w=H+112|0;r=H+104|0;G=H+108|0;s=H+100|0;c[r>>2]=f;c[G>>2]=0;c[s>>2]=0;c[e>>2]=0;h=mb()|0;if(h|0){G=h;Ra=H;return G|0}if((f&32768|0)==0&(c[7325]|0)!=0)k=(f&65536|0)==0?c[7326]|0:1;else k=0;if(!(f&262144)){if(c[7378]|0){f=f|131072;c[r>>2]=f}}else{f=f&-131073;c[r>>2]=f}p=f&-655129;c[r>>2]=p;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](488)|0;if(!h){h=0;B=148}else B=19}else{h=Wa[c[29356>>2]&127](488)|0;if((c[14985]|0)>>>0<488)c[14985]=488;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){D=c[14978]|0;C=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;B=L()|0;c[14768]=((B|0)<0|(B|0)==0&C>>>0<=D>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(h){i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;B=19}else B=19}else{h=0;B=148}}a:do if((B|0)==19){gw(h|0,0,488)|0;if(k|0)c[h+12>>2]=8;C=h+68|0;c[C>>2]=255;c[h+20>>2]=2;D=h+96|0;c[D>>2]=-264537850;n=h+16|0;c[n>>2]=h+412;o=h+272|0;c[o>>2]=1;i=h+108|0;j=2288;k=i+44|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[h+152>>2]=0;a[h+79>>0]=1;a[h+84>>0]=-1;m=29480;A=c[m+4>>2]|0;i=h+48|0;c[i>>2]=c[m>>2];c[i+4>>2]=A;c[h+92>>2]=0;c[h+156>>2]=2147483647;i=h+32|0;c[i>>2]=295008;c[i+4>>2]=0;i=h+380|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;A=h+336|0;c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;Qd(h,34049,1,0,78,0)|0;Qd(h,34049,3,0,78,0)|0;Qd(h,34049,2,0,78,0)|0;Qd(h,43602,1,0,79,0)|0;Qd(h,50932,1,1,78,0)|0;A=h+81|0;b:do if(!(a[A>>0]|0)){k=c[h+392>>2]|0;if(!k){j=h+384|0;i=h+388|0}else{i=783505461%((c[i>>2]|0)>>>0)|0;j=k+(i<<3)|0;i=k+(i<<3)+4|0}j=c[j>>2]|0;c:do if(!j)i=59292;else while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)+-98|0;if(!(m<<24>>24==0|(k|0)!=0)){m=34049;do{l=l+1|0;m=m+1|0;I=a[l>>0]|0;k=(d[208+(I&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(I<<24>>24==0|(k|0)!=0))}if(!k)break c;if(!j){i=59292;break}}while(0);c[h+8>>2]=c[i+8>>2];c[h+60>>2]=p;d:do if(!(1<<(f&7)&70)){c[q>>2]=58063;c[q+4>>2]=157776;c[q+8>>2]=31517;Db(21,32001,q);i=21}else{i=dn(g,b,r,h,G,s)|0;switch(i|0){case 0:break;case 7:{if(a[A>>0]|0){i=7;break d}if(a[h+82>>0]|0){i=7;break d}a[A>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;f=c[h+236>>2]|0;if(!f){i=7;break d}c[f+12>>2]=7;i=7;break d}default:break d}f=Pe(c[h>>2]|0,c[G>>2]|0,h,(c[n>>2]|0)+4|0,0,c[r>>2]|256)|0;e:do if((f|0)<3082){switch(f|0){case 0:break;default:{B=46;break e}}f=c[(c[n>>2]|0)+4>>2]|0;c[(c[f+4>>2]|0)+4>>2]=c[f>>2];f=en(h,f)|0;c[(c[n>>2]|0)+12>>2]=f;if(!(a[A>>0]|0))a[h+78>>0]=a[f+77>>0]|0;B=en(h,0)|0;I=c[n>>2]|0;c[I+28>>2]=B;c[I>>2]=50919;a[I+8>>0]=3;c[I+16>>2]=31427;a[I+24>>0]=1;c[D>>2]=-1607883113;if(a[A>>0]|0){B=148;break a}p=h+64|0;c[p>>2]=0;if(c[h+260>>2]|0)Ne(h,0);do if((Id(h,50938,2)|0)==7?(a[A>>0]|0)==0:0){if(a[h+82>>0]|0)break;a[A>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;f=c[h+236>>2]|0;if(!f)break;c[f+12>>2]=7}while(0);f=c[D>>2]|0;f:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:{B=62;break f}default:{B=61;break f}}else switch(f|0){case 1266094736:{B=62;break f}default:{B=61;break f}}else switch(f|0){case -1607883113:{B=62;break}default:B=61}while(0);g:do if((B|0)==61){c[u>>2]=50924;Db(21,38253,u);c[v>>2]=58063;c[v+4>>2]=157091;c[v+8>>2]=31517;Db(21,32001,v);f=21;B=142}else if((B|0)==62){if(a[A>>0]|0){f=7;B=142;break}f=c[C>>2]&c[p>>2];if(f|0){B=142;break}h:do if(0){f=1;k=0;i=0;do{j=c[0+(k<<2)>>2]|0;c[w>>2]=0;if(j){i=Ya[j&127](h,w,0)|0;if(i){c[x>>2]=c[w>>2];Vb(h,i,50944,x);f=0}i=c[w>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);if(!f)break h;else i=0}k=k+1|0}while(k>>>0<i>>>0)}while(0);f=c[D>>2]|0;i:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:break i;default:{B=78;break i}}else switch(f|0){case 1266094736:break i;default:{B=78;break i}}else switch(f|0){case -1607883113:break;default:B=78}while(0);if((B|0)==78){c[y>>2]=50924;Db(21,38253,y);c[z>>2]=58063;c[z+4>>2]=157091;c[z+8>>2]=31517;Db(21,32001,z);break b}if(a[A>>0]|0)break b;if(c[C>>2]&c[p>>2]|0)break b;f=rd(h,51142,30516,0)|0;if(f|0){B=142;break}if(mb()|0){f=7;B=142;break}do if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](20)|0;if(!f){f=7;B=142;break g}else i=f}else{f=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){I=c[14978]|0;z=Tv(i|0,j|0,f|0,((f|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&z>>>0<=I>>>0)&1}i=Wa[c[29340>>2]&127](f)|0;if(!i){f=7;B=142;break g}f=Wa[c[29352>>2]&127](i)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0<=(c[14987]|0)>>>0)break;c[14987]=f}while(0);a[i>>0]=1;m=i+1|0;a[m>>0]=1;n=i+4|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;do if(!(Ep(i,50983,7,30612)|0)){if(Ep(i,50990,7,30640)|0){f=7;B=111;break}if(Ep(i,50997,10,30488)|0){f=7;B=111;break}f=Hd(h,51007,1,5,i,175,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=111;break}f=c[C>>2]&f;if(f|0){B=111;break}f=Hd(h,51007,2,5,i,175,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=111;break}f=c[C>>2]&f;if(f|0){B=111;break}f=Id(h,51022,-1)|0;if(f|0){B=111;break}f=Id(h,51030,1)|0;if(f|0){B=111;break}f=Id(h,51038,1)|0;if(f|0){B=111;break}f=Id(h,51038,2)|0;if(f|0){B=111;break}f=Id(h,37598,1)|0;if(f|0){B=111;break}f=sd(h,51048,30392,i,91)|0;if(f|0){B=142;break g}f=sd(h,51053,30392,i,0)|0;if(f|0){B=142;break g}f=rd(h,55534,30668,i)|0}else{f=7;B=111}while(0);do if((B|0)==111){k=i+8|0;j=c[k>>2]|0;c[k>>2]=0;k=i+16|0;l=c[k>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[k>>2]=0;c[i+12>>2]=0;if(j|0)do{k=j;j=c[j>>2]|0;do if(a[m>>0]|0){l=c[k+12>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{I=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((j|0)!=0);c[n>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if((f|0)==0&(a[A>>0]|0)==0){f=Hd(h,55598,2,1,0,176,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=Hd(h,55608,1,1,0,177,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=Hd(h,55619,-1,1,0,178,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=sd(h,55630,30764,0,0)|0;if(f|0){B=142;break}f=sd(h,55636,30764,1,0)|0}if(f|0)B=142}while(0);if((B|0)==142){c[p>>2]=f;Ne(h,f)}zd(h,0,c[7332]|0,c[7333]|0)|0;c[h+240>>2]=76;c[h+244>>2]=1e3;break b}else switch(f|0){case 3082:{f=7;break}default:B=46}while(0);c[h+64>>2]=f;Ne(h,f);break b}while(0);f=c[s>>2]|0;I=(f|0)==0;c[t>>2]=f;Vb(h,i,I?0:31408,t);if(!I)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{I=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[D>>2]|0;j:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:{B=146;break j}default:{B=145;break j}}else switch(f|0){case 1266094736:{B=146;break j}default:{B=145;break j}}else switch(f|0){case -1607883113:{B=146;break}default:B=145}while(0);if((B|0)==145){c[E>>2]=50924;Db(21,38253,E);c[F>>2]=58063;c[F+4>>2]=157091;c[F+8>>2]=31517;Db(21,32001,F);f=21}else if((B|0)==146){if(a[A>>0]|0){B=148;break}f=c[C>>2]&c[h+64>>2];switch(f|0){case 7:{B=148;break a}case 0:break a;default:{}}}c[D>>2]=1266094736}while(0);if((B|0)==148){Bd(h,0)|0;f=7;h=0}c[e>>2]=h;h=c[G>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{I=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);I=f&255;Ra=H;return I|0}function Qd(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=Ra;Ra=Ra+32|0;k=t+16|0;j=t;s=f&255;switch(f<<24>>24){case 4:case 8:{r=2;break}default:if((s+-1|0)>>>0>2){c[j>>2]=58063;c[j+4>>2]=157148;c[j+8>>2]=31517;Db(21,32001,j);s=21;Ra=t;return s|0}else r=s}q=r&255;j=Zi(b,q,e,0)|0;if(j|0?c[j+12>>2]|0:0){if(c[b+168>>2]|0){Vb(b,5,57995,k);s=5;Ra=t;return s|0}f=c[b+4>>2]|0;if(f|0)do{p=f+149|0;o=(d[p>>0]|d[p+1>>0]<<8)&-4|1;a[p>>0]=o;a[p+1>>0]=o>>8;f=c[f+8>>2]|0}while((f|0)!=0);p=j+4|0;f=a[p>>0]|0;if((r|0)==(f&-9&255|0)){m=c[b+392>>2]|0;if(!m){k=b+384|0;j=b+388|0}else{k=a[e>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=e;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[b+380>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;a:do if(!k)j=59292;else{o=d[208+(d[e>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;n=a[m>>0]|0;l=(d[208+(n&255)>>0]|0)-o|0;if(!(n<<24>>24==0|(l|0)!=0)){n=e;do{m=m+1|0;n=n+1|0;u=a[m>>0]|0;l=(d[208+(u&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(l|0)!=0))}if(!l)break a;if(!k){j=59292;break}}}while(0);k=c[j+8>>2]|0;if((a[k+4>>0]|0)==f<<24>>24){j=c[k+16>>2]|0;if(j){ab[j&127](c[k+8>>2]|0);f=a[p>>0]|0}c[k+12>>2]=0}if((a[k+24>>0]|0)==f<<24>>24){j=c[k+36>>2]|0;if(j){ab[j&127](c[k+28>>2]|0);f=a[p>>0]|0}c[k+32>>2]=0}if((a[k+44>>0]|0)==f<<24>>24){f=c[k+56>>2]|0;if(f|0)ab[f&127](c[k+48>>2]|0);c[k+52>>2]=0}}}f=Zi(b,q,e,1)|0;if(!f){u=7;Ra=t;return u|0}c[f+12>>2]=h;c[f+8>>2]=g;c[f+16>>2]=i;a[f+4>>0]=r|s&8;c[b+64>>2]=0;if(!(c[b+260>>2]|0)){u=0;Ra=t;return u|0}Ne(b,0);u=0;Ra=t;return u|0}function Rd(e,f,g,h,i,j,k,l,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=Ra;Ra=Ra+16|0;y=z+8|0;w=z;x=z+12|0;c[x>>2]=0;r=e+20|0;n=c[r>>2]|0;t=e+16|0;q=c[t>>2]|0;if((n|0)>0){o=0;do{p=c[q+(o<<4)+4>>2]|0;if(p|0)c[(c[p+4>>2]|0)+4>>2]=c[p>>2];o=o+1|0}while((o|0)!=(n|0))}p=e+24|0;s=(c[p>>2]&1|0)==0;v=c[q+12>>2]|0;a[e+78>>0]=a[v+77>>0]|0;if(!(b[v+78>>1]&1)){n=eh(e,0,x,0)|0;if(!n){n=c[r>>2]|0;v=9}else v=16}else v=9;a:do if((v|0)==9){if((n|0)>1)do{o=n;n=n+-1|0;if((b[(c[(c[t>>2]|0)+(n<<4)+12>>2]|0)+78>>1]&1)==0?(u=eh(e,n,x,0)|0,u|0):0){n=u;v=16;break a}}while((o|0)>2);if(s)c[p>>2]=c[p>>2]&-2;u=Sd(e,g,f)|0;if((u|0)!=0?(c[u+12>>2]|0)==0:0){do if(h){f=b[u+42>>1]|0;t=f<<16>>16;b:do if(f<<16>>16>0){s=c[u+4>>2]|0;f=d[208+(d[h>>0]|0)>>0]|0;n=0;do{o=s+(n<<4)|0;q=c[o>>2]|0;r=a[q>>0]|0;p=(d[208+(r&255)>>0]|0)-f|0;if(!(r<<24>>24==0|(p|0)!=0)){r=h;do{q=q+1|0;r=r+1|0;A=a[q>>0]|0;p=(d[208+(A&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(p|0)!=0))}if(!p)break b;n=n+1|0}while((n|0)<(t|0))}else{n=0;o=0}while(0);if((n|0)==(t|0)){if(c[u+36>>2]&32|0){o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0;break a}r=a[h>>0]|0;q=d[208+(r&255)>>0]|0;n=q+-95|0;r=r<<24>>24==0;if(!(r|(n|0)!=0)){o=58070;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){n=q+-114|0;if(!(r|(n|0)!=0)){o=40352;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){n=q+-111|0;if(!(r|(n|0)!=0)){o=58078;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0;break a}}}A=b[u+40>>1]|0;n=A<<16>>16;if(A<<16>>16<=-1){q=0;n=1;s=0;r=0;p=31453;break}q=n;o=(c[u+4>>2]|0)+(n<<4)|0}else q=n;if(o){n=a[o+15>>0]|0;if(!(n&4))p=0;else{p=c[o>>2]|0;p=p+(Eu(p)|0)+1|0}r=c[o+8>>2]|0;o=(a[o+12>>0]|0)!=0&1;n=n&1;if((q|0)==(b[u+40>>1]|0)){q=(c[u+36>>2]|0)>>>3&1;s=o}else{q=0;s=o}}else{q=0;n=1;s=0;r=0;p=31453}}else{q=0;n=1;s=0;r=0;p=31453}while(0);o=0;t=q;f=n;r=(r|0)==0?34049:r;q=0}else{o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0}}while(0);if((v|0)==16){o=n;u=0;t=0;f=0;s=0;r=0;p=0;q=(n|0)!=0}if(i|0)c[i>>2]=p;if(j|0)c[j>>2]=r;if(k|0)c[k>>2]=s;if(l|0)c[l>>2]=f;if(m|0)c[m>>2]=t;n=c[x>>2]|0;if(!(q|(u|0)!=0)){do if(n|0){if(e|0){if(c[e+480>>2]|0){Xd(e,n);break}A=n;if((c[e+304>>2]|0)>>>0<=A>>>0?(c[e+308>>2]|0)>>>0>A>>>0:0){A=e+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[w>>2]=g;c[w+4>>2]=h;n=dd(e,31461,w)|0;c[x>>2]=n;o=1}c[y>>2]=n;Vb(e,o,(n|0)==0?0:31408,y);n=c[x>>2]|0;do if(n|0){if(e|0){if(c[e+480>>2]|0){Xd(e,n);break}A=n;if((c[e+304>>2]|0)>>>0<=A>>>0?(c[e+308>>2]|0)>>>0>A>>>0:0){A=e+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if((o|0)==3082|(a[e+81>>0]|0)!=0){og(e);A=7;Ra=z;return A|0}else{A=c[e+68>>2]&o;Ra=z;return A|0}return 0}function Sd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=c[a+20>>2]|0;l=(d|0)==0;e=a+16|0;if((k|0)<=0){a=b;while(1){if(Hb(a,34585)|0){h=0;a=18;break}if(!(Gb(d,c[(c[e>>2]|0)+16>>2]|0)|0))a=34855;else{h=0;a=18;break}}if((a|0)==18)return h|0}f=c[e>>2]|0;g=f+16|0;a:while(1){if(l){a=0;do{j=ji((c[f+((a^a>>>0<2)<<4)+12>>2]|0)+8|0,b)|0;if(j|0){a=16;break a}a=a+1|0}while((a|0)<(k|0))}else{a=0;do{e=a^a>>>0<2;if((Hb(d,c[f+(e<<4)>>2]|0)|0)==0?(i=ji((c[f+(e<<4)+12>>2]|0)+8|0,b)|0,i|0):0){a=17;break a}a=a+1|0}while((a|0)<(k|0))}if(Hb(b,34585)|0){h=0;a=18;break}if(!(Gb(d,c[g>>2]|0)|0))b=34855;else{h=0;a=18;break}}if((a|0)==16){l=j;return l|0}else if((a|0)==17){l=i;return l|0}else if((a|0)==18)return h|0;return 0}function Td(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(e){j=c[b+20>>2]|0;g=j+-1|0;a:do if((j|0)>0){f=g;j=(c[b+16>>2]|0)+(g<<4)|0;while(1){h=c[j>>2]|0;if(h|0){i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=e;do{h=h+1|0;i=i+1|0;k=a[h>>0]|0;g=(d[208+(k&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(g|0)!=0))}if(!g)break a}if(!f)break;g=f+-1|0;if((f|0)>0){f=g;j=j+-16|0}else{f=g;break a}}f=109-(d[208+(d[e>>0]|0)>>0]|0)|0;if(!f){g=50919;do{g=g+1|0;e=e+1|0;k=a[g>>0]|0;f=(d[208+(k&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(f|0)!=0))}f=((f|0)!=0)<<31>>31}else f=g;while(0);if((f|0)<0){k=0;return k|0}}else f=0;k=c[(c[b+16>>2]|0)+(f<<4)+4>>2]|0;return k|0}function Ud(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=c[a+4>>2]|0;c[h+4>>2]=c[a>>2];g=h+22|0;if(b[g>>1]&2){h=8;return h|0}if((e|0)<0)e=(c[h+32>>2]|0)-(c[h+36>>2]|0)|0;if((d+-512|0)>>>0<65025?(d+-1&d|0)==0:0){c[h+32>>2]=d;Tf(h)}d=h+32|0;a=Se(c[h>>2]|0,d,e)|0;c[h+36>>2]=(c[d>>2]|0)-(e&65535);if(!f){h=a;return h|0}b[g>>1]=b[g>>1]|2;h=a;return h|0}function Vd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if((a[b>>0]|0)!=48){i=xb(b)|0;d=Og(b,d,i,1)|0;return d|0}switch(a[b+1>>0]|0){case 88:case 120:break;default:{i=xb(b)|0;d=Og(b,d,i,1)|0;return d|0}}i=2;while(1){h=a[b+i>>0]|0;if(h<<24>>24==48)i=i+1|0;else break}if(!(a[880+(h&255)>>0]&8)){f=i;g=0;e=0}else{f=i;g=0;e=0;do{j=cw(g|0,e|0,4)|0;e=L()|0;g=h<<24>>24;g=j|(0-(g>>>6&1)&9)+g&15;f=f+1|0;h=a[b+f>>0]|0}while((a[880+(h&255)>>0]&8)!=0)}j=d;c[j>>2]=g;c[j+4>>2]=e;return ((a[b+f>>0]|0)==0?((f-i|0)>16?2:0):2)|0}function Wd(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if(!b){w=0;return w|0}c=a[b>>0]|0;do if(!(c<<24>>24)){c=31489;f=3}else{o=c&255;c=208+o|0;if((o|32|0)==115){c=a[b+1>>0]|0;if(!(c<<24>>24)){c=31490;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==113){c=a[b+2>>0]|0;if(!(c<<24>>24)){c=31491;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==108){c=a[b+3>>0]|0;if(!(c<<24>>24)){c=31492;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==105){c=a[b+4>>0]|0;if(!(c<<24>>24)){c=31493;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==116){c=a[b+5>>0]|0;if(!(c<<24>>24)){c=31494;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==101){c=a[b+6>>0]|0;if(!(c<<24>>24)){c=31495;f=3;break}if(c<<24>>24==95){e=b+7|0;break}else{f=95;c=208+(c&255)|0}}else f=101}else f=116}else f=105}else f=108}else f=113}else f=115;e=d[c>>0]|0;c=f;f=7}while(0);if((f|0)==3){e=0;c=a[208+(d[c>>0]|0)>>0]|0;f=7}if((f|0)==7)e=(e|0)==(c&255|0)?b+7|0:b;o=(Eu(e)|0)&1073741823;if(!o){w=0;return w|0}f=e;h=58082;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=11;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=13;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=16;break}}if((f|0)==11){i=0;j=a[208+(d[h>>0]|0)>>0]|0;f=15}else if((f|0)==13){i=c&255;j=g;f=15}if((f|0)==15?(i|0)==(j&255|0):0)f=16;if((f|0)==16?(a[880+(d[58082+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58103;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=23;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=21;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=25;break}}if((f|0)==21){k=c&255;l=g;f=24}else if((f|0)==23){k=0;l=a[208+(d[h>>0]|0)>>0]|0;f=24}if((f|0)==24?(k|0)==(l&255|0):0)f=25;if((f|0)==25?(a[880+(d[58103+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58115;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=31;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=29;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=33;break}}if((f|0)==29){m=c&255;n=g;f=32}else if((f|0)==31){m=0;n=a[208+(d[h>>0]|0)>>0]|0;f=32}if((f|0)==32?(m|0)==(n&255|0):0)f=33;if((f|0)==33?(a[880+(d[58115+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58127;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=39;break}g=a[208+(c&255)>>0]|0;c=a[208+(d[h>>0]|0)>>0]|0;if(g<<24>>24!=c<<24>>24){f=37;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=41;break}}if((f|0)==37){p=g&255;q=c;f=40}else if((f|0)==39){p=0;q=a[208+(d[h>>0]|0)>>0]|0;f=40}if((f|0)==40?(p|0)==(q&255|0):0)f=41;if((f|0)==41?(a[880+(d[58127+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58151;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=47;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=45;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=49;break}}if((f|0)==45){r=c&255;s=g;f=48}else if((f|0)==47){r=0;s=a[208+(d[h>>0]|0)>>0]|0;f=48}if((f|0)==48?(r|0)==(s&255|0):0)f=49;if((f|0)==49?(a[880+(d[58151+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58164;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=55;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=53;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=57;break}}if((f|0)==53){t=c&255;u=g;f=56}else if((f|0)==55){t=0;u=a[208+(d[h>>0]|0)>>0]|0;f=56}if((f|0)==56?(t|0)==(u&255|0):0)f=57;if((f|0)==57?(a[880+(d[58164+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}g=58184;f=o;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){f=63;break}c=a[208+(c&255)>>0]|0;b=a[208+(d[g>>0]|0)>>0]|0;if(c<<24>>24!=b<<24>>24){f=61;break}if((f|0)>1){e=e+1|0;g=g+1|0;f=f+-1|0}else{f=65;break}}if((f|0)==61){v=c&255;w=b;f=64}else if((f|0)==63){v=0;w=a[208+(d[g>>0]|0)>>0]|0;f=64}if((f|0)==64?(v|0)==(w&255|0):0)f=65;if((f|0)==65?(a[880+(d[58184+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}w=0;return w|0}function Xd(a,b){a=a|0;b=b|0;var d=0;if(((a|0)!=0?(d=b,(c[a+304>>2]|0)>>>0<=d>>>0):0)?(c[a+308>>2]|0)>>>0>d>>>0:0)b=e[a+276>>1]|0;else b=Wa[c[29352>>2]&127](b)|0;a=c[a+480>>2]|0;c[a>>2]=(c[a>>2]|0)+b;return}function Yd(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0;if(c[b+272>>2]|0){if(a[b+81>>0]|0){f=0;return f|0}}else{do if(0<f>>>0|(0==(f|0)?(e[b+276>>1]|0)>>>0<d>>>0:0))g=b+288|0;else{g=b+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];f=b+284|0;c[f>>2]=(c[f>>2]|0)+1;f=h;return f|0}g=b+296|0;h=c[g>>2]|0;if(!h){g=b+292|0;break}c[g>>2]=c[h>>2];f=b+284|0;c[f>>2]=(c[f>>2]|0)+1;f=h;return f|0}while(0);c[g>>2]=(c[g>>2]|0)+1}f=_d(b,d,f)|0;return f|0}function Zd(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=b+81|0;if(a[h>>0]|0){m=0;return m|0}l=d;m=b+304|0;if((c[m>>2]|0)>>>0<=l>>>0?(k=b+308|0,(c[k>>2]|0)>>>0>l>>>0):0){a:do if(!(c[b+272>>2]|0)){do if(!(0<g>>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0<f>>>0:0))){i=b+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];g=b+284|0;c[g>>2]=(c[g>>2]|0)+1;break a}i=b+296|0;h=c[i>>2]|0;if(!h){h=b+292|0;break}else{c[i>>2]=c[h>>2];g=b+284|0;c[g>>2]=(c[g>>2]|0)+1;break a}}else h=b+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=13}else j=13;while(0);if((j|0)==13)h=_d(b,f,g)|0;if(!h){m=0;return m|0}ew(h|0,d|0,e[b+276>>1]|0)|0;if(!d){m=h;return m|0}if(c[b+480>>2]|0){Xd(b,d);m=h;return m|0}if((c[m>>2]|0)>>>0<=l>>>0?(c[k>>2]|0)>>>0>l>>>0:0){m=b+300|0;c[d>>2]=c[m>>2];c[m>>2]=d;m=h;return m|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);m=h;return m|0}else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);m=h;return m|0}}if((mb()|0)==0?(i=sb(d,f,g)|0,i|0):0){m=i;return m|0}if(a[h>>0]|0){m=0;return m|0}if(a[b+82>>0]|0){m=0;return m|0}a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(!h){m=0;return m|0}c[h+12>>2]=7;m=0;return m|0}function _d(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Sv(d|0,e|0,-1,-1)|0;e=L()|0;do if(!(e>>>0>0|(e|0)==0&f>>>0>2147483390)){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](d)|0;if(!e)break;return e|0}f=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0<d>>>0)c[14985]=d;d=59064;e=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&e>>>0>0){g=c[14978]|0;d=Tv(e|0,d|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&d>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(d|0){e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0){g=d;return g|0}c[14987]=e;g=d;return g|0}}while(0);e=b+81|0;if(a[e>>0]|0){g=0;return g|0}if(a[b+82>>0]|0){g=0;return g|0}a[e>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;e=b+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[b+236>>2]|0;if(!e){g=0;return g|0}c[e+12>>2]=7;g=0;return g|0}function $d(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0;g=c[b>>2]|0;k=b+16|0;j=(c[k>>2]|0)+1|0;a:do if(!g){h=Sv(j|0,0,-1,-1)|0;g=L()|0;if(!(g>>>0>0|(g|0)==0&h>>>0>2147483390)){if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](j)|0;i=25;break}h=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){j=c[14978]|0;g=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(f|0){d=Wa[c[29352>>2]&127](f)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0){c[14987]=d;d=f;i=26}else{d=f;i=26}}}}else{if(c[g+272>>2]|0){if(a[g+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[g+276>>1]|0)>>>0<j>>>0:0))){f=g+300|0;d=c[f>>2]|0;if(d|0){c[f>>2]=c[d>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;i=25;break a}f=g+296|0;d=c[f>>2]|0;if(!d){d=g+292|0;break}else{c[f>>2]=c[d>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;i=25;break a}}else d=g+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(g,j,0)|0;i=25}while(0);if((i|0)==25?d|0:0)i=26;if((i|0)==26){ew(d|0,c[b+4>>2]|0,(c[k>>2]|0)+1|0)|0;k=b+21|0;a[k>>0]=a[k>>0]|4;k=d;b=b+4|0;c[b>>2]=k;return k|0}a[b+20>>0]=7;if(!(c[b+12>>2]|0)){k=0;b=b+4|0;c[b>>2]=k;return k|0}f=b+21|0;if(!(a[f>>0]&4))d=b+4|0;else{g=c[b>>2]|0;d=b+4|0;h=c[d>>2]|0;do if(h|0){if(g|0){if(c[g+480>>2]|0){Xd(g,h);break}j=h;if((c[g+304>>2]|0)>>>0<=j>>>0?(c[g+308>>2]|0)>>>0>j>>>0:0){j=g+300|0;c[h>>2]=c[j>>2];c[j>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{j=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);a[f>>0]=a[f>>0]&-5}c[b+8>>2]=0;c[k>>2]=0;c[d>>2]=0;k=0;b=b+4|0;c[b>>2]=k;return k|0}function ae(a,b){a=a|0;b=b|0;return 29668}function be(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=Ra;Ra=Ra+48|0;i=j+24|0;g=j;h=a+8|0;f=c[h>>2]|0;te(a);ie(a,0)|0;h=c[h>>2]|0;if(c[f+24>>2]|0){f=a+28|0;d=c[f>>2]|0;e=h+32|0;c[d+8>>2]=c[e>>2];c[e>>2]=d;c[a+12>>2]=-1;c[f>>2]=0}do if(h|0?(e=h+36|0,f=(c[e>>2]|0)+-1|0,c[e>>2]=f,(f|0)==0):0){e=h+32|0;b=c[e>>2]|0;if(b|0){f=a+32|0;do{d=b;b=c[b+8>>2]|0;if(Wa[c[2352>>2]&127](c[d>>2]|0)|0){l=c[f>>2]|0;m=uu()|0;m=c[m>>2]|0;k=dv(m)|0;c[g>>2]=33804;c[g+4>>2]=m;c[g+8>>2]=31695;c[g+12>>2]=(l|0)==0?59952:l;c[g+16>>2]=k;Db(4106,31953,g)}if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0)}c[e>>2]=0;e=c[h+48>>2]|0;d=h+44|0;b=c[d>>2]|0;if(!e)c[14795]=b;else{c[e+44>>2]=b;b=c[d>>2]|0}if(b|0)c[b+48>>2]=e;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);b=a+12|0;d=c[b>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){l=c[a+32>>2]|0;k=uu()|0;k=c[k>>2]|0;m=dv(k)|0;c[i>>2]=34584;c[i+4>>2]=k;c[i+8>>2]=31695;c[i+12>>2]=(l|0)==0?59952:l;c[i+16>>2]=m;Db(4106,31953,i)}c[b>>2]=-1}b=c[a+28>>2]|0;if(!b){b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}return 0}function ce(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=a+12|0;g=0;h=d;i=b;while(1){if((xv(c[l>>2]|0,e,0)|0)<0){f=3;break}j=Ya[c[2436>>2]&127](c[l>>2]|0,i,h)|0;if((h|0)==(j|0)){f=10;break}if((j|0)<0){k=uu()|0;if((c[k>>2]|0)==4)k=1;else{f=7;break}}else{e=Sv(e|0,f|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;k=j;g=j+g|0;h=h-j|0;i=(j|0)==0?i:i+j|0}if((k|0)<=0){h=0;f=10;break}}if((f|0)==3){g=uu()|0;c[a+20>>2]=c[g>>2];g=-1}else if((f|0)==7){h=uu()|0;c[a+20>>2]=c[h>>2];h=j;g=0;f=10}if((f|0)==10)g=g+h|0;if((g|0)==(d|0)){d=0;return d|0}if((g|0)<0){d=266;return d|0}c[a+20>>2]=0;gw(b+g|0,0,d-g|0)|0;d=522;return d|0}function de(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=a+12|0;j=d;h=f;a:while(1){d=c[i>>2]|0;g=j&131071;while(1){if((xv(d,e,0)|0)<0){f=-1;b=6;break a}f=Ya[c[2472>>2]&127](d,b,g)|0;if((f|0)>=0)break;k=uu()|0;if((c[k>>2]|0)!=4){b=6;break a}}d=(j|0)>(f|0);if(!(d&(f|0)!=0)){b=9;break}k=Sv(e|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;j=j-f|0;b=b+f|0;h=L()|0;e=k}if((b|0)==6){d=a+20|0;b=uu()|0;b=c[b>>2]|0;c[d>>2]=b;if((j|0)<=(f|0)){k=0;return k|0}if((b|0)!=28){k=778;return k|0}}else if((b|0)==9)if(d)d=a+20|0;else{k=0;return k|0}c[d>>2]=0;k=13;return k|0}function ee(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;h=j;f=c[a+40>>2]|0;g=((f|0)<0)<<31>>31;d=Sv(b|0,d|0,-1,-1)|0;d=Sv(d|0,L()|0,f|0,g|0)|0;e=L()|0;if((f|0)>0){b=Zv(d|0,e|0,f|0,g|0)|0;b=Tv(d|0,e|0,b|0,L()|0)|0;L()|0}d=c[a+12>>2]|0;do{e=Xa[c[2412>>2]&255](d,b)|0;if((e|0)>=0){i=6;break}g=uu()|0}while((c[g>>2]|0)==4);if((i|0)==6?(e|0)==0:0){i=0;Ra=j;return i|0}g=uu()|0;c[a+20>>2]=c[g>>2];a=c[a+32>>2]|0;g=uu()|0;g=c[g>>2]|0;i=dv(g)|0;c[h>>2]=36273;c[h+4>>2]=g;c[h+8>>2]=31726;c[h+12>>2]=(a|0)==0?59952:a;c[h+16>>2]=i;Db(1546,31953,h);i=1546;Ra=j;return i|0}function fe(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+48|0;g=h+24|0;d=h;f=h+44|0;if(zv(c[a+12>>2]|0)|0){f=uu()|0;c[a+20>>2]=c[f>>2];f=c[a+32>>2]|0;a=uu()|0;a=c[a>>2]|0;g=dv(a)|0;c[d>>2]=36228;c[d+4>>2]=a;c[d+8>>2]=32026;c[d+12>>2]=(f|0)==0?59952:f;c[d+16>>2]=g;Db(1034,31953,d);g=1034;Ra=h;return g|0}e=a+18|0;if(!(b[e>>1]&8)){g=0;Ra=h;return g|0}d=a+32|0;if((Xa[c[2544>>2]&255](c[d>>2]|0,f)|0)==0?(zv(c[f>>2]|0)|0,Wa[c[2352>>2]&127](c[f>>2]|0)|0):0){a=c[d>>2]|0;d=uu()|0;d=c[d>>2]|0;f=dv(d)|0;c[g>>2]=36242;c[g+4>>2]=d;c[g+8>>2]=31695;c[g+12>>2]=(a|0)==0?59952:a;c[g+16>>2]=f;Db(4106,31953,g)}b[e>>1]=b[e>>1]&-9;g=0;Ra=h;return g|0}function ge(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Ra;Ra=Ra+80|0;d=e;if(!(Xa[c[2400>>2]&255](c[a+12>>2]|0,d)|0)){a=c[d+36>>2]|0;f=(a|0)==1;d=b;c[d>>2]=f?0:a;c[d+4>>2]=f?0:((a|0)<0)<<31>>31;d=0;Ra=e;return d|0}else{f=uu()|0;c[a+20>>2]=c[f>>2];f=1802;Ra=e;return f|0}return 0}function he(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+96|0;r=C+56|0;t=C+48|0;q=C+40|0;s=C+32|0;l=C+24|0;m=C+16|0;h=C+8|0;j=C;y=C+80|0;x=C+64|0;B=d+16|0;g=a[B>>0]|0;if((g&255|0)>=(e|0)){d=0;Ra=C;return d|0}w=d+8|0;v=c[w>>2]|0;A=v+28|0;f=a[A>>0]|0;if(g<<24>>24!=f<<24>>24?(e|0)>1|(f&255)>2:0){d=5;Ra=C;return d|0}k=(e|0)==1;do if(!k){f=x+8|0;c[f>>2]=1;b[x+2>>1]=0;if((e|0)==4)if((g&255)<3){o=f;z=10}else z=43;else z=42}else{if((f+-1&255)>=2){o=x+8|0;c[o>>2]=1;b[x+2>>1]=0;z=10;break}a[B>>0]=1;d=v+20|0;c[d>>2]=(c[d>>2]|0)+1;d=v+24|0;c[d>>2]=(c[d>>2]|0)+1;d=0;Ra=C;return d|0}while(0);a:do if((z|0)==10){b[x>>1]=(k^1)&1;n=x+4|0;c[n>>2]=1073741824;p=d+18|0;do if((b[p>>1]&3)==1){g=v+29|0;if(!(a[g>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=1073741826;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;f=c[d+12>>2]|0;c[j>>2]=y;f=Ya[z&127](f,13,j)|0;if((f|0)<0){z=17;break}else{a[g>>0]=1;i=v+24|0;c[i>>2]=(c[i>>2]|0)+1;i=f;z=16;break}}}else{z=c[606]|0;i=c[d+12>>2]|0;c[h>>2]=x;i=Ya[z&127](i,13,h)|0;z=16}while(0);if((z|0)==16?i|0:0)z=17;if((z|0)==17){g=uu()|0;g=c[g>>2]|0;switch(g|0){case 1:{f=3;break}case 37:case 4:case 16:case 110:case 11:case 13:{d=5;Ra=C;return d|0}default:f=3850}c[d+20>>2]=g;d=f;Ra=C;return d|0}if(k){f=1073741826;c[n>>2]=f;c[o>>2]=510;h=c[w>>2]|0;do if((b[p>>1]&3)==1){g=h+29|0;if(!(a[g>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=f;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;f=c[d+12>>2]|0;c[m>>2]=y;f=Ya[z&127](f,13,m)|0;if((f|0)<0){z=28;break}else{a[g>>0]=1;z=h+24|0;c[z>>2]=(c[z>>2]|0)+1;z=27;break}}else{f=0;g=0}}else{z=c[606]|0;f=c[d+12>>2]|0;c[l>>2]=x;f=Ya[z&127](f,13,l)|0;z=27}while(0);if((z|0)==27)if(!f){f=0;g=0}else z=28;b:do if((z|0)==28){f=uu()|0;f=c[f>>2]|0;switch(f|0){case 37:case 4:case 16:case 110:case 11:case 13:{g=5;break b}case 1:{f=1;g=3;break b}default:{g=3850;break b}}}while(0);c[n>>2]=1073741824;c[o>>2]=1;b[x>>1]=2;j=c[w>>2]|0;do if((b[p>>1]&3)==1){i=j+29|0;if(!(a[i>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=1073741826;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;h=c[d+12>>2]|0;c[s>>2]=y;h=Ya[z&127](h,13,s)|0;if((h|0)<0){z=37;break}else{a[i>>0]=1;z=j+24|0;c[z>>2]=(c[z>>2]|0)+1;z=37;break}}else z=39}else{z=c[606]|0;h=c[d+12>>2]|0;c[q>>2]=x;h=Ya[z&127](h,13,q)|0;z=37}while(0);if((z|0)==37)if((g|0)==0&(h|0)!=0){f=uu()|0;g=2058;f=c[f>>2]|0}else z=39;c:do if((z|0)==39)switch(g&4095){case 0:{a[B>>0]=1;z=v+24|0;c[z>>2]=(c[z>>2]|0)+1;c[v+20>>2]=1;z=58;break a}case 5:{d=5;Ra=C;return d|0}default:break c}while(0);c[d+20>>2]=f;d=g;Ra=C;return d|0}else{f=o;z=42}}while(0);if((z|0)==42)if((e|0)!=4){b[x>>1]=1;if((e|0)==2){h=1073741825;i=1073741824;g=1;z=48}else{g=1073741824;z=47}}else z=43;if((z|0)==43)if((c[v+20>>2]|0)>1){f=5;z=60}else{b[x>>1]=1;g=1073741824;z=47}if((z|0)==47){h=g+2|0;i=g;g=510;z=48}d:do if((z|0)==48){c[x+4>>2]=h;c[f>>2]=g;h=c[w>>2]|0;do if((b[d+18>>1]&3)==1){g=h+29|0;if(a[g>>0]|0){z=58;break d}b[y+2>>1]=0;c[y+4>>2]=i+2;c[y+8>>2]=510;b[y>>1]=1;x=c[606]|0;f=c[d+12>>2]|0;c[t>>2]=y;f=Ya[x&127](f,13,t)|0;if((f|0)<0)break;else{a[g>>0]=1;u=h+24|0;c[u>>2]=(c[u>>2]|0)+1;u=f;z=54;break}}else{z=c[606]|0;u=c[d+12>>2]|0;c[r>>2]=x;u=Ya[z&127](u,13,r)|0;z=54}while(0);if((z|0)==54?(u|0)==0:0){z=58;break}g=uu()|0;g=c[g>>2]|0;switch(g|0){case 37:case 4:case 16:case 110:case 11:case 13:{f=5;break}case 1:{f=3;z=57;break}default:{f=3850;z=57}}if((z|0)==57)c[d+20>>2]=g;if((e|0)==4)z=60;else{d=f;Ra=C;return d|0}}while(0);if((z|0)==58){d=e&255;a[B>>0]=d;a[A>>0]=d;d=0;Ra=C;return d|0}else if((z|0)==60){a[B>>0]=3;a[A>>0]=3;d=f;Ra=C;return d|0}return 0}function ie(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=Ra;Ra=Ra+112|0;y=z+48|0;r=z+40|0;t=z+32|0;n=z+24|0;o=z+16|0;k=z+8|0;l=z;s=z+88|0;q=z+72|0;x=d+16|0;f=a[x>>0]|0;if((f&255|0)<=(e|0)){y=0;Ra=z;return y|0}v=d+8|0;w=c[v>>2]|0;do if((f&255)>1){a:do if((e|0)==1){b[q>>1]=0;j=q+2|0;b[j>>1]=0;i=1073741826;h=q+4|0;c[h>>2]=i;g=q+8|0;c[g>>2]=510;f=d+18|0;do if((b[f>>1]&3)==1){k=w+29|0;if(a[k>>0]|0){i=w;break a}b[s+2>>1]=0;c[s+4>>2]=i;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;i=c[d+12>>2]|0;c[l>>2]=s;i=Ya[A&127](i,13,l)|0;if((i|0)<0)break;else{a[k>>0]=1;m=w+24|0;c[m>>2]=(c[m>>2]|0)+1;m=i;u=11;break}}else{u=c[606]|0;m=c[d+12>>2]|0;c[k>>2]=q;m=Ya[u&127](m,13,k)|0;u=11}while(0);if((u|0)==11?(m|0)==0:0){i=c[v>>2]|0;break}A=uu()|0;c[d+20>>2]=c[A>>2];A=2314;Ra=z;return A|0}else{j=q+2|0;h=q+4|0;g=q+8|0;f=d+18|0;i=w}while(0);b[q>>1]=2;b[j>>1]=0;c[h>>2]=1073741824;c[g>>2]=2;do if((b[f>>1]&3)==1){g=i+29|0;if(!(a[g>>0]|0)){b[s+2>>1]=0;c[s+4>>2]=1073741826;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;f=c[d+12>>2]|0;c[o>>2]=s;f=Ya[A&127](f,13,o)|0;if((f|0)<0)break;else{a[g>>0]=1;p=i+24|0;c[p>>2]=(c[p>>2]|0)+1;p=f;u=20;break}}else u=21}else{u=c[606]|0;p=c[d+12>>2]|0;c[n>>2]=q;p=Ya[u&127](p,13,n)|0;u=20}while(0);if((u|0)==20?(p|0)==0:0)u=21;if((u|0)==21){a[w+28>>0]=1;break}A=uu()|0;c[d+20>>2]=c[A>>2];A=2058;Ra=z;return A|0}while(0);if(!e){u=w+20|0;A=(c[u>>2]|0)+-1|0;c[u>>2]=A;if(!A){b[q>>1]=2;b[q+2>>1]=0;c[q+8>>2]=0;c[q+4>>2]=0;h=c[v>>2]|0;do if((b[d+18>>1]&3)==1){g=h+29|0;if(!(a[g>>0]|0)){b[s+2>>1]=0;c[s+4>>2]=1073741826;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;f=c[d+12>>2]|0;c[t>>2]=s;f=Ya[A&127](f,13,t)|0;if((f|0)<0){u=33;break}else{a[g>>0]=1;u=h+24|0;c[u>>2]=(c[u>>2]|0)+1;u=31;break}}else u=32}else{u=c[606]|0;f=c[d+12>>2]|0;c[r>>2]=q;f=Ya[u&127](f,13,r)|0;u=31}while(0);if((u|0)==31)if(!f)u=32;else u=33;if((u|0)==32){f=0;g=w+28|0}else if((u|0)==33){f=uu()|0;c[d+20>>2]=c[f>>2];a[w+28>>0]=0;f=2058;g=x}a[g>>0]=0;j=f}else j=0;w=w+24|0;A=(c[w>>2]|0)+-1|0;c[w>>2]=A;if(!A){i=(c[v>>2]|0)+32|0;f=c[i>>2]|0;if(f|0){h=d+32|0;do{g=f;f=c[f+8>>2]|0;if(Wa[c[2352>>2]&127](c[g>>2]|0)|0){d=c[h>>2]|0;w=uu()|0;w=c[w>>2]|0;A=dv(w)|0;c[y>>2]=33804;c[y+4>>2]=w;c[y+8>>2]=31695;c[y+12>>2]=(d|0)==0?59952:d;c[y+16>>2]=A;Db(4106,31953,y)}if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{A=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0)}c[i>>2]=0}if(j|0){A=j;Ra=z;return A|0}}a[x>>0]=e;A=0;Ra=z;return A|0}function je(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+32|0;h=j;i=j+8|0;g=c[e+8>>2]|0;if((d[g+28>>0]|0)>1){i=0;h=1;c[f>>2]=h;Ra=j;return i|0}if(a[g+29>>0]|0){i=0;h=0;c[f>>2]=h;Ra=j;return i|0}b[i+2>>1]=0;c[i+4>>2]=1073741825;c[i+8>>2]=1;b[i>>1]=1;k=c[606]|0;g=c[e+12>>2]|0;c[h>>2]=i;if(!(Ya[k&127](g,12,h)|0)){g=0;e=(b[i>>1]|0)!=2&1}else{g=uu()|0;c[e+20>>2]=c[g>>2];g=3594;e=0}k=g;i=e;c[f>>2]=i;Ra=j;return k|0}function ke(a,f,g){a=a|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+80|0;h=v;m=v+4|0;do switch(f|0){case 1:{c[g>>2]=d[a+16>>0];a=0;Ra=v;return a|0}case 4:{c[g>>2]=c[a+20>>2];a=0;Ra=v;return a|0}case 6:{c[a+40>>2]=c[g>>2];a=0;Ra=v;return a|0}case 5:{h=g;f=c[h>>2]|0;h=c[h+4>>2]|0;i=a+40|0;if((c[i>>2]|0)<=0){a=0;Ra=v;return a|0}o=a+12|0;a:do if(!(Xa[c[2400>>2]&255](c[o>>2]|0,m)|0)){g=c[i>>2]|0;j=((g|0)<0)<<31>>31;f=Sv(f|0,h|0,-1,-1)|0;f=Sv(f|0,L()|0,g|0,j|0)|0;k=L()|0;j=Zv(f|0,k|0,g|0,j|0)|0;j=Tv(f|0,k|0,j|0,L()|0)|0;k=L()|0;f=c[m+36>>2]|0;g=((f|0)<0)<<31>>31;b:do if((k|0)>(g|0)|(k|0)==(g|0)&j>>>0>f>>>0?(p=c[m+40>>2]|0,n=f+-1+p-((f|0)%(p|0)|0)|0,l=((n|0)<0)<<31>>31,q=((p|0)<0)<<31>>31,r=Sv(j|0,k|0,-1,-1)|0,s=L()|0,t=Sv(r|0,s|0,p|0,q|0)|0,u=L()|0,(u|0)>(l|0)|(u|0)==(l|0)&t>>>0>n>>>0):0){h=l;f=n;c:while(1){n=(h|0)<(k|0)|(h|0)==(k|0)&f>>>0<j>>>0;i=n?f:r;f=n?h:s;h=c[o>>2]|0;while(1){if((xv(h,i,0)|0)<0)break c;g=Ya[c[2472>>2]&127](h,59952,1)|0;if((g|0)>=0)break;n=uu()|0;if((c[n>>2]|0)!=4)break c}f=Sv(i|0,f|0,p|0,q|0)|0;h=L()|0;if((g|0)!=1){f=778;break a}if(!((h|0)<(u|0)|(h|0)==(u|0)&f>>>0<t>>>0))break b}f=uu()|0;c[a+20>>2]=c[f>>2];f=778;break a}while(0);a=0;Ra=v;return a|0}else f=1802;while(0);a=f;Ra=v;return a|0}case 10:{i=c[g>>2]|0;if((i|0)<0){c[g>>2]=(e[a+18>>1]|0)>>>2&1;a=0;Ra=v;return a|0}f=a+18|0;h=e[f>>1]|0;if(!i){b[f>>1]=h&65531;a=0;Ra=v;return a|0}else{b[f>>1]=h|4;a=0;Ra=v;return a|0}}case 13:{i=c[g>>2]|0;if((i|0)<0){c[g>>2]=(e[a+18>>1]|0)>>>4&1;a=0;Ra=v;return a|0}f=a+18|0;h=e[f>>1]|0;if(!i){b[f>>1]=h&65519;a=0;Ra=v;return a|0}else{b[f>>1]=h|16;a=0;Ra=v;return a|0}}case 12:{c[h>>2]=c[(c[a+4>>2]|0)+16>>2];a=Bb(31408,h)|0;c[g>>2]=a;a=0;Ra=v;return a|0}case 16:{f=a+4|0;h=c[(c[f>>2]|0)+8>>2]|0;h=pb(h,((h|0)<0)<<31>>31)|0;if(!h){a=0;Ra=v;return a|0}ye(c[(c[f>>2]|0)+8>>2]|0,h)|0;c[g>>2]=h;a=0;Ra=v;return a|0}case 20:{f=a+8|0;if(c[f>>2]|0)if(!(Xa[c[2388>>2]&255](c[a+32>>2]|0,m)|0)){f=(c[f>>2]|0)+8|0;f=(c[f+4>>2]|0?1:(c[f>>2]|0)!=(c[m+72>>2]|0))&1}else f=1;else f=0;c[g>>2]=f;a=0;Ra=v;return a|0}default:{a=12;Ra=v;return a|0}}while(0);return 0}function le(a){a=a|0;var d=0,e=0;d=a+44|0;e=c[d>>2]|0;if(e|0)return e|0;if(b[a+18>>1]&16){e=a+48|0;c[e>>2]=c[e>>2]|4096}c[d>>2]=4096;e=4096;return e|0}function me(a){a=a|0;var d=0,e=0;d=a+44|0;if(!(c[d>>2]|0)){if(b[a+18>>1]&16){e=a+48|0;c[e>>2]=c[e>>2]|4096}c[d>>2]=4096}return c[a+48>>2]|0}function ne(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+176|0;C=D+72|0;y=D+48|0;v=D+24|0;u=D+8|0;r=D;x=D+92|0;B=Va[c[2640>>2]&127]()|0;B=(B|0)<32768?1:(B|0)/32768|0;w=d+36|0;j=c[w>>2]|0;if(!j){if(mb()|0){i=7;Ra=D;return i|0}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;if(!j){i=7;Ra=D;return i|0}else t=j}else{j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){t=c[14978]|0;q=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=t>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){i=7;Ra=D;return i|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;t=k}else t=k};c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;o=d+8|0;p=c[o>>2]|0;k=c[p+40>>2]|0;a:do if(!k){n=d+32|0;l=c[n>>2]|0;b:do if(!(Xa[c[2400>>2]&255](c[d+12>>2]|0,x)|0)){m=Eu(l)|0;j=m+42|0;k=pb(j,0)|0;if(!k)j=7;else{gw(k|0,0,j|0)|0;q=k+36|0;c[k+8>>2]=q;c[r>>2]=l;Cb(m+6|0,q,32098,r)|0;l=k+12|0;c[l>>2]=-1;r=c[o>>2]|0;c[r+40>>2]=k;c[k>>2]=r;if(c[7325]|0)c[k+4>>2]=8;if(!(a[p+29>>0]|0)){j=c[n>>2]|0;c:do if((j|0)!=0?(s=j+(((Eu(j)|0)&1073741823)+1)|0,(a[s>>0]|0)!=0):0){j=s;while(1){s=Bu(j,32105)|0;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!s)break;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!(a[j>>0]|0)){A=26;break c}}if((Zm(j,1,0)|0)<<24>>24)m=c[l>>2]|0;else A=26}else A=26;while(0);if((A|0)==26){m=xe(q,66,c[x+12>>2]&511)|0;c[l>>2]=m}do if((m|0)<0){m=xe(q,0,c[x+12>>2]&511)|0;c[l>>2]=m;if((m|0)<0){c[u>>2]=31984;c[u+4>>2]=37077;c[u+8>>2]=31517;Db(14,32001,u);i=uu()|0;i=c[i>>2]|0;j=dv(i)|0;c[v>>2]=37077;c[v+4>>2]=i;c[v+8>>2]=31690;c[v+12>>2]=q;c[v+16>>2]=j;Db(14,31953,v);j=14;break b}else{a[k+22>>0]=1;break}}while(0);j=c[x+20>>2]|0;l=c[x+24>>2]|0;if(!(Va[c[2592>>2]&127]()|0))Ya[c[2580>>2]&127](m,j,l)|0;j=ze(d,k)|0;switch(j|0){case 0:case 1288:break;default:break b}}else j=0;break a}}else j=1802;while(0);Ae(d);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=j;Ra=D;return i|0}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=j;Ra=D;return i|0}}else j=0;while(0);c[t>>2]=k;v=k+28|0;c[v>>2]=(c[v>>2]|0)+1;c[w>>2]=t;w=k+32|0;c[t+4>>2]=c[w>>2];c[w>>2]=t;if(!j)j=t;else{i=j;Ra=D;return i|0}}t=c[j>>2]|0;j=t+23|0;do if(a[j>>0]|0){k=ze(d,t)|0;if(!k){a[j>>0]=0;A=44;break}else{j=t+20|0;break}}else A=44;while(0);if((A|0)==44){q=B+f|0;q=q-((q|0)%(B|0)|0)|0;s=t+20|0;if((q|0)>(e[s>>1]|0)){k=G(q,g)|0;c[t+16>>2]=g;r=t+12|0;j=c[r>>2]|0;d:do if((j|0)>-1)if(!(Xa[c[2400>>2]&255](j,x)|0)){j=c[x+36>>2]|0;if((j|0)<(k|0))if(h){j=(j|0)/4096|0;n=(k|0)/4096|0;if((j|0)<(n|0)){e:while(1){k=c[r>>2]|0;l=j<<12|4095;while(1){if((xv(k,l,0)|0)<0){A=56;break e}m=Ya[c[2472>>2]&127](k,59952,1)|0;if((m|0)>=0)break;h=uu()|0;if((c[h>>2]|0)!=4){A=56;break e}}j=j+1|0;if((m|0)!=1)break;if((j|0)>=(n|0)){A=59;break d}}C=c[t+8>>2]|0;g=uu()|0;g=c[g>>2]|0;j=dv(g)|0;c[y>>2]=37221;c[y+4>>2]=g;c[y+8>>2]=31761;c[y+12>>2]=(C|0)==0?59952:C;c[y+16>>2]=j;Db(4874,31953,y);j=4874}else A=59}else j=0;else A=59}else j=4874;else A=59;while(0);f:do if((A|0)==59){m=t+24|0;j=c[m>>2]|0;k=q<<2;if((mb()|0)==0?(z=sb(j,(k|0)>0?k:0,0)|0,(z|0)!=0):0){c[m>>2]=z;j=e[s>>1]|0;if((q|0)>(j|0)){n=G(B,g)|0;o=t+22|0;p=((n|0)<0)<<31>>31;g:do if((B|0)>0)while(1){k=c[r>>2]|0;if((k|0)>-1){j=G(j,g)|0;j=$a[c[2604>>2]&127](0,n,(a[o>>0]|0)==0?3:1,1,k,j)|0;if((j|0)==(-1|0))break g}else{j=pb(n,p)|0;if(!j){j=7;break f}gw(j|0,0,n|0)|0}l=e[s>>1]|0;k=0;do{A=j+(G(k,g)|0)|0;c[(c[m>>2]|0)+(k+l<<2)>>2]=A;k=k+1|0}while((k|0)!=(B|0));j=B+l|0;b[s>>1]=j;j=j&65535;if((q|0)<=(j|0)){j=0;break f}}else while(1){k=c[r>>2]|0;if((k|0)>-1){A=G(j,g)|0;if(($a[c[2604>>2]&127](0,n,(a[o>>0]|0)==0?3:1,1,k,A)|0)==(-1|0))break g}else{j=pb(n,p)|0;if(!j){j=7;break f}gw(j|0,0,n|0)|0}j=B+(e[s>>1]|0)|0;b[s>>1]=j;j=j&65535;if((q|0)<=(j|0)){j=0;break f}}while(0);g=c[t+8>>2]|0;B=uu()|0;B=c[B>>2]|0;j=dv(B)|0;c[C>>2]=37248;c[C+4>>2]=B;c[C+8>>2]=31848;c[C+12>>2]=(g|0)==0?59952:g;c[C+16>>2]=j;Db(5386,31953,C);j=5386}else j=0}else j=3082}while(0);k=j;j=s}else{k=0;j=s}}if((e[j>>1]|0)>(f|0))j=c[(c[t+24>>2]|0)+(f<<2)>>2]|0;else j=0;c[i>>2]=j;i=(k|0)==0&(a[t+22>>0]|0)!=0?8:k;Ra=D;return i|0}
- function fb(a){a=a|0;var b=0;b=Ra;Ra=Ra+a|0;Ra=Ra+15&-16;return b|0}function gb(){return Ra|0}function hb(a){a=a|0;Ra=a}function ib(a,b){a=a|0;b=b|0;Ra=a;Sa=b}function jb(a){a=a|0;var b=0,d=0,e=0;e=c[a+20>>2]|0;if((e|0)<=0)return;b=c[a+16>>2]|0;a=0;do{d=c[b+(a<<4)+4>>2]|0;if(d|0)c[(c[d+4>>2]|0)+4>>2]=c[d>>2];a=a+1|0}while((a|0)<(e|0));return}function kb(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=e+116|0;f=c[s>>2]|0;g=b[e+144>>1]|0;a:do if((f|0)!=0&g<<16>>16!=0){o=f+(((g&65535)<<1)*40|0)|0;j=c[f+32>>2]|0;k=j+480|0;g=(j|0)==0;l=j+304|0;m=j+308|0;n=j+300|0;if(c[k>>2]|0){if(g)while(1){do if(c[f+24>>2]|0?(h=c[f+20>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{n=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=f+40|0;if(f>>>0>=o>>>0)break a}while(1){do if(c[f+24>>2]|0?(i=c[f+20>>2]|0,i|0):0){if(c[k>>2]|0){Xd(j,i);break}h=i;if((c[l>>2]|0)>>>0<=h>>>0?(c[m>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);f=f+40|0;if(f>>>0>=o>>>0)break a}}if(g)while(1){g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{n=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0;if(f>>>0>=o>>>0)break a}do{g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(!(c[k>>2]|0)){t=i;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(j,i);while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0}while(f>>>0<o>>>0)}while(0);f=c[e+212>>2]|0;if(f|0){k=(d|0)==0;l=d+480|0;m=d+304|0;n=d+308|0;o=d+300|0;do{i=f;f=c[f+24>>2]|0;j=c[i>>2]|0;g=c[i+4>>2]|0;if(j){if((g|0)>=1){g=j+((g+-1|0)*20|0)|0;do{h=a[g+1>>0]|0;if(h<<24>>24<-6)kg(d,h<<24>>24,c[g+16>>2]|0);g=g+-20|0}while(g>>>0>=j>>>0)}do if(!k){if(c[l>>2]|0){Xd(d,j);break}t=j;if((c[m>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j}else p=63}else p=63;while(0);do if((p|0)==63){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{t=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);if(i|0)p=67}else p=67;do if((p|0)==67){p=0;if(!k){if(c[l>>2]|0){Xd(d,i);break}t=i;if((c[m>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[o>>2];c[o>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0)}while((f|0)!=0)}do if((c[e+20>>2]|0)!=381479589){f=c[e+100>>2]|0;g=b[e+16>>1]|0;b:do if((f|0)!=0&g<<16>>16!=0){o=f+((g<<16>>16)*40|0)|0;j=c[f+32>>2]|0;k=j+480|0;g=(j|0)==0;l=j+304|0;m=j+308|0;n=j+300|0;if(c[k>>2]|0){if(g)while(1){do if(c[f+24>>2]|0?(q=c[f+20>>2]|0,q|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{t=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);f=f+40|0;if(f>>>0>=o>>>0)break b}while(1){do if(c[f+24>>2]|0?(r=c[f+20>>2]|0,r|0):0){if(c[k>>2]|0){Xd(j,r);break}t=r;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[r>>2]=c[n>>2];c[n>>2]=r;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{t=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);f=f+40|0;if(f>>>0>=o>>>0)break b}}if(g)while(1){g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0;if(f>>>0>=o>>>0)break b}do{g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(!(c[k>>2]|0)){t=i;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(j,i);while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0}while(f>>>0<o>>>0)}while(0);f=c[e+128>>2]|0;do if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+192>>2]|0;if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}}while(0);h=c[e+104>>2]|0;f=c[e+108>>2]|0;do if(h|0){if((f|0)>=1){f=h+((f+-1|0)*20|0)|0;do{g=a[f+1>>0]|0;if(g<<24>>24<-6)kg(d,g<<24>>24,c[f+16>>2]|0);f=f+-20|0}while(f>>>0>=h>>>0)}if(d|0){if(c[d+480>>2]|0){Xd(d,h);break}t=h;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[h>>2]=c[t>>2];c[t>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);f=c[s>>2]|0;do if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+188>>2]|0;if(!f)return;if(d|0){if(c[d+480>>2]|0){Xd(d,f);return}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);return}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);return}}function lb(a,b){a=a|0;b=b|0;var d=0;if(!b)return;if(a|0){if(c[a+480>>2]|0){Xd(a,b);return}d=b;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[b>>2]=c[d>>2];c[d>>2]=b;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function mb(){var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;n=p+8|0;b=p;if(c[7380]|0){o=0;Ra=p;return o|0}c[7382]=1;if(!(c[7383]|0)){if(!(c[7335]|0)){c[b>>2]=30308;xd(4,b)|0};c[14764]=0;c[14765]=0;c[14766]=0;c[14767]=0;c[14768]=0;c[14769]=0;c[14764]=8;if((c[7374]|0)==0|(c[7375]|0)<512|(c[7376]|0)<1){c[7374]=0;c[7375]=0}b=Wa[c[29360>>2]&127](c[7342]|0)|0;if(b|0){c[14764]=0;c[14765]=0;c[14766]=0;c[14767]=0;c[14768]=0;c[14769]=0;o=b;Ra=p;return o|0}}c[7383]=1;if(!(c[7386]|0))c[7386]=8;e=(c[7385]|0)+1|0;c[7385]=e;if(!(c[7381]|c[7380])){c[7381]=1;b=59088;e=b+92|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));k=c[5448]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;a:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=23;break a}}if(e){b=e+12|0;c[5443]=c[b>>2]}else o=23}else o=23;while(0);if((o|0)==23){c[5443]=0;c[5449]=j}c[b>>2]=21760;k=c[5458]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;b:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=35;break b}}if(e){b=e+12|0;c[5453]=c[b>>2]}else o=35}else o=35;while(0);if((o|0)==35){c[5453]=0;c[5459]=j}c[b>>2]=21800;k=c[5468]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;c:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=47;break c}}if(e){b=e+12|0;c[5463]=c[b>>2]}else o=47}else o=47;while(0);if((o|0)==47){c[5463]=0;c[5469]=j}c[b>>2]=21840;l=0;do{m=21888+(l*40|0)|0;k=c[21888+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;d:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;h=a[g>>0]|0;f=(d[208+(h&255)>>0]|0)-i|0;if(!(h<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=60;break d}}if(e){b=e+12|0;c[21888+(l*40|0)+12>>2]=c[b>>2]}else o=60}else o=60;while(0);if((o|0)==60){o=0;c[21888+(l*40|0)+12>>2]=0;c[21888+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=15);l=0;do{m=22496+(l*40|0)|0;k=c[22496+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;e:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-i|0;if(!(q<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=74;break e}}if(e){b=e+12|0;c[22496+(l*40|0)+12>>2]=c[b>>2]}else o=74}else o=74;while(0);if((o|0)==74){o=0;c[22496+(l*40|0)+12>>2]=0;c[22496+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=8);l=0;do{m=19424+(l*40|0)|0;k=c[19424+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;f:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-i|0;if(!(q<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=88;break f}}if(e){b=e+12|0;c[19424+(l*40|0)+12>>2]=c[b>>2]}else o=88}else o=88;while(0);if((o|0)==88){o=0;c[19424+(l*40|0)+12>>2]=0;c[19424+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=57);if(!(c[7384]|0)){b=c[7354]|0;if(!b){c[n>>2]=30340;xd(18,n)|0;b=c[7354]|0}b=Wa[b&127](c[7353]|0)|0;if(!b)o=94}else o=94;g:do if((o|0)==94){c[7384]=1;if(!(mb()|0)){do if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](10)|0;if(!b){b=7;break g}}else{b=Wa[c[29356>>2]&127](10)|0;if((c[14985]|0)>>>0<10)c[14985]=10;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){q=c[14978]|0;o=Tv(e|0,f|0,b|0,((b|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=q>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){b=7;break g}e=Wa[c[29352>>2]&127](b)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0)break;c[14987]=e}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{q=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==464){b=c[119]|0;c[14770]=b}else{if(!b){b=0;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=464&(f|0)!=0)e=f;else break}if((f|0)!=464)break;c[e+12>>2]=c[119]}while(0);c[119]=b;c[14770]=464}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==552){b=c[141]|0;c[14770]=b;o=138}else{if(!b){o=140;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=552&(f|0)!=0)e=f;else break}if((f|0)!=552){o=138;break}c[e+12>>2]=c[141];o=138}while(0);do if((o|0)==138){if(!b){o=140;break}b=b+12|0;c[141]=c[b>>2]}while(0);if((o|0)==140){c[141]=0;b=59080}c[b>>2]=552}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==640){b=c[163]|0;c[14770]=b;o=150}else{if(!b){o=152;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=640&(f|0)!=0)e=f;else break}if((f|0)!=640){o=150;break}c[e+12>>2]=c[163];o=150}while(0);do if((o|0)==150){if(!b){o=152;break}b=b+12|0;c[163]=c[b>>2]}while(0);if((o|0)==152){c[163]=0;b=59080}c[b>>2]=640}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==728){b=c[185]|0;c[14770]=b;o=162}else{if(!b){o=164;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=728&(f|0)!=0)e=f;else break}if((f|0)!=728){o=162;break}c[e+12>>2]=c[185];o=162}while(0);do if((o|0)==162){if(!b){o=164;break}b=b+12|0;c[185]=c[b>>2]}while(0);if((o|0)==164){c[185]=0;b=59080}c[b>>2]=728}b=c[7374]|0;if(c[14810]|0){i=(b|0)==0;j=i?0:c[7376]|0;e=(j|0)==0;i=i|e?0:c[7375]&-8;c[14813]=i;c[14820]=j;c[14814]=j;if((j|0)>90)f=10;else f=((j|0)/10|0)+1|0;c[14815]=f;c[14816]=b;c[14819]=0;c[14821]=0;if(!e){g=G(i,j+-1|0)|0;e=b;f=j;h=0;while(1){f=f+-1|0;c[e>>2]=h;h=e;if(!f)break;else e=e+i|0}q=G(i,j)|0;c[14819]=b+g;b=b+q|0}c[14817]=b}c[7380]=1;b=0}else b=7}while(0);c[7381]=0;e=c[7385]|0}else b=0;c[7385]=e+-1;if((e|0)>=2){q=b;Ra=p;return q|0}c[7386]=0;q=b;Ra=p;return q|0}function nb(a){a=a|0;var b=0,d=0,e=0;if((a|0)<1|(mb()|0)!=0){d=0;return d|0}d=Sv(a|0,((a|0)<0)<<31>>31|0,-1,-1)|0;b=L()|0;if(b>>>0>0|(b|0)==0&d>>>0>2147483390){d=0;return d|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](a)|0;return d|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;b=59064;a=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&a>>>0>0){e=c[14978]|0;b=Tv(a|0,b|0,d|0,((d|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&b>>>0<=e>>>0)&1}b=Wa[c[29340>>2]&127](d)|0;if(!b){e=0;return e|0}a=Wa[c[29352>>2]&127](b)|0;a=(c[14978]|0)+a|0;c[14978]=a;if(a>>>0>(c[14982]|0)>>>0)c[14982]=a;a=(c[14981]|0)+1|0;c[14981]=a;if(a>>>0<=(c[14987]|0)>>>0){e=b;return e|0}c[14987]=a;e=b;return e|0}function ob(a,b){a=a|0;b=b|0;var d=0,e=0;d=Sv(a|0,b|0,-1,-1)|0;b=L()|0;if(b>>>0>0|(b|0)==0&d>>>0>2147483390){d=0;return d|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](a)|0;return d|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;a=59064;b=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&b>>>0>0){e=c[14978]|0;a=Tv(b|0,a|0,d|0,((d|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&a>>>0<=e>>>0)&1}a=Wa[c[29340>>2]&127](d)|0;if(!a){e=0;return e|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0<=(c[14987]|0)>>>0){e=a;return e|0}c[14987]=b;e=a;return e|0}function pb(a,b){a=a|0;b=b|0;var d=0,e=0;d=(mb()|0)!=0;b=Sv(a|0,b|0,-1,-1)|0;e=L()|0;if(e>>>0>0|(e|0)==0&b>>>0>2147483390|d){e=0;return e|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](a)|0;return e|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;a=59064;b=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&b>>>0>0){e=c[14978]|0;a=Tv(b|0,a|0,d|0,((d|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&a>>>0<=e>>>0)&1}a=Wa[c[29340>>2]&127](d)|0;if(!a){e=0;return e|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0<=(c[14987]|0)>>>0){e=a;return e|0}c[14987]=b;e=a;return e|0}function qb(a){a=a|0;var b=0;if(!a)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function rb(a){a=a|0;return Wa[c[29352>>2]&127](a)|0}function sb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if(!a){e=Sv(b|0,d|0,-1,-1)|0;a=L()|0;if(a>>>0>0|(a|0)==0&e>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](b)|0;return e|0}a=Wa[c[29356>>2]&127](b)|0;if((c[14985]|0)>>>0<b>>>0)c[14985]=b;b=59064;d=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&d>>>0>0){e=c[14978]|0;b=Tv(d|0,b|0,a|0,((a|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&b>>>0<=e>>>0)&1}b=Wa[c[29340>>2]&127](a)|0;if(!b){e=0;return e|0}d=Wa[c[29352>>2]&127](b)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0<=(c[14987]|0)>>>0){e=b;return e|0}c[14987]=d;e=b;return e|0}if((b|0)==0&(d|0)==0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);e=0;return e|0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);e=0;return e|0}if(d>>>0>0|(d|0)==0&b>>>0>2147483391){e=0;return e|0}e=Wa[c[29352>>2]&127](a)|0;d=Wa[c[29356>>2]&127](b)|0;if((d|0)==(e|0)){e=a;return e|0}if(!(c[7324]|0)){e=Xa[c[29348>>2]&255](a,d)|0;return e|0}if((c[14985]|0)>>>0<b>>>0)c[14985]=b;b=Xa[c[29348>>2]&255](a,d)|0;f=59064;g=c[f+4>>2]|0;if((b|0)==0&((g|0)>0|(g|0)==0&(c[f>>2]|0)>>>0>0))b=Xa[c[29348>>2]&255](a,d)|0;if(!b){g=0;return g|0}d=(Wa[c[29352>>2]&127](b)|0)-e|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0<=(c[14982]|0)>>>0){g=b;return g|0}c[14982]=d;g=b;return g|0}function tb(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=Ra;Ra=Ra+96|0;X=fa+80|0;Z=fa+72|0;_=fa;ba=f+21|0;if(!(a[ba>>0]&2)){I=1;J=0}else{I=(c[i>>2]|0)+(4-1)&~(4-1);J=c[I>>2]|0;c[i>>2]=I+4;I=0}Q=J+4|0;R=J+8|0;ca=f+16|0;da=f+8|0;ea=f+4|0;S=f+20|0;T=_+1|0;U=_+2|0;V=_+3|0;W=f+12|0;j=0;H=0;a:while(1){switch(a[h>>0]|0){case 0:{F=543;break a}case 37:{z=j;break}default:{j=h;b:while(1){j=j+1|0;switch(a[j>>0]|0){case 37:case 0:break b;default:{}}}k=j-h|0;l=c[ca>>2]|0;m=l+k|0;if(m>>>0<(c[da>>2]|0)>>>0){if(k|0){c[ca>>2]=m;ew((c[ea>>2]|0)+l|0,h|0,k|0)|0}}else wb(f,h,k);if(!(a[j>>0]|0)){F=543;break a}else{z=h;h=j}}}l=h+1|0;h=a[l>>0]|0;if(!(h<<24>>24)){F=13;break}k=h<<24>>24;m=-1;h=0;y=0;j=0;x=0;E=0;D=0;v=0;w=l;c:while(1){switch(k|0){case 108:{F=24;break c}case 45:{p=x;q=E;u=D;n=1;k=w;break}case 43:{j=43;p=x;q=E;u=D;n=y;k=w;break}case 32:{j=32;p=x;q=E;u=D;n=y;k=w;break}case 35:{p=1;q=E;u=D;n=y;k=w;break}case 33:{p=x;q=1;u=D;n=y;k=w;break}case 48:{p=x;q=E;u=1;n=y;k=w;break}case 44:{p=x;q=E;u=D;v=44;n=y;k=w;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{h=k+-48|0;n=w+1|0;p=a[n>>0]|0;l=p<<24>>24;if((p+-48&255)<10){k=n;while(1){h=l+(h*10|0)+-48|0;n=k+1|0;p=a[n>>0]|0;l=p<<24>>24;if((p+-48&255)<10)k=n;else break}}else k=w;h=h&2147483647;switch(p<<24>>24){case 46:case 108:{p=x;q=E;u=D;n=y;break}default:{G=n;n=0;k=l;break c}}break}case 42:{do if(!I){h=c[Q>>2]|0;if((c[J>>2]|0)>(h|0)){k=c[R>>2]|0;c[Q>>2]=h+1;h=c[k+(h<<2)>>2]|0;k=e[h+8>>1]|0;if(k&4|0){h=c[h>>2]|0;F=39;break}if(k&8|0){h=Mg(+g[h>>3])|0;L()|0;F=39;break}if(k&18){h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;F=39}else{h=0;F=40}}else{h=0;F=40}}else{F=(c[i>>2]|0)+(4-1)&~(4-1);h=c[F>>2]|0;c[i>>2]=F+4;F=39}while(0);if((F|0)==39){F=0;if((h|0)<0){l=1;h=(h|0)==-2147483648?0:0-h|0}else F=40}if((F|0)==40){F=0;l=y}k=a[w+1>>0]|0;switch(k<<24>>24){case 46:case 108:{p=x;q=E;u=D;n=l;k=w;break}default:{F=61;break c}}break}case 46:{l=w+1|0;k=a[l>>0]|0;if(k<<24>>24==42){do if(!I){k=c[Q>>2]|0;if((c[J>>2]|0)>(k|0)){l=c[R>>2]|0;c[Q>>2]=k+1;k=c[l+(k<<2)>>2]|0;l=e[k+8>>1]|0;if(l&4|0){k=c[k>>2]|0;F=52;break}if(l&8|0){k=Mg(+g[k>>3])|0;L()|0;F=52;break}if(l&18){k=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0;F=52}else k=0}else k=0}else{F=(c[i>>2]|0)+(4-1)&~(4-1);k=c[F>>2]|0;c[i>>2]=F+4;F=52}while(0);if((F|0)==52){F=0;k=(k|0)<0?((k|0)==-2147483648?-1:0-k|0):k}l=w+2|0;p=a[l>>0]|0}else{k=k<<24>>24;if((k+-48|0)>>>0<10){n=0;do{n=k+-48+(n*10|0)|0;l=l+1|0;m=a[l>>0]|0;k=m<<24>>24}while((k+-48|0)>>>0<10);k=m<<24>>24}else n=0;p=k;k=n&2147483647}if((p|0)==108){p=x;q=E;u=D;n=y;m=k;k=l+-1|0}else{G=l;n=0;m=k;k=p;break c}break}default:{G=w;n=0;break c}}l=k+1|0;k=a[l>>0]|0;if(!(k<<24>>24)){F=543;break a}else{k=k<<24>>24;y=n;x=p;E=q;D=u;w=l}}if((F|0)==24){F=0;k=w+1|0;l=a[k>>0]|0;if(l<<24>>24==108){k=w+2|0;G=k;n=2;k=a[k>>0]|0}else{G=k;n=1;k=l<<24>>24}}else if((F|0)==61){F=0;G=w+1|0;y=l;n=0;k=k<<24>>24}d:do switch(k|0){case 100:{C=0;break}case 115:{C=1;break}case 103:{C=2;break}case 122:{C=3;break}case 113:{C=4;break}case 81:{C=5;break}case 119:{C=6;break}case 99:{C=7;break}case 111:{C=8;break}case 117:{C=9;break}case 120:{C=10;break}case 88:{C=11;break}case 102:{C=12;break}case 101:{C=13;break}case 69:{C=14;break}case 71:{C=15;break}case 105:{C=16;break}case 110:{C=17;break}case 37:{C=18;break}case 112:{C=19;break}case 84:{C=20;break}default:{switch(k|0){case 83:{C=21;break d}case 114:break;default:{F=543;break a}}C=22}}while(0);k=a[16+(C*6|0)+3>>0]|0;e:do switch(k<<24>>24){case 13:{k=1;F=86;break}case 0:case 15:{k=n;F=86;break}case 16:{k=n;F=87;break}case 3:case 2:case 1:{do if(I){F=(c[i>>2]|0)+(8-1)&~(8-1);o=+g[F>>3];c[i>>2]=F+8;F=208}else{l=c[Q>>2]|0;if((c[J>>2]|0)>(l|0)){n=c[R>>2]|0;c[Q>>2]=l+1;l=c[n+(l<<2)>>2]|0;n=e[l+8>>1]|0;if(n&8|0){o=+g[l>>3];F=208;break}if(n&4|0){F=l;o=+((c[F>>2]|0)>>>0)+4294967296.0*+(c[F+4>>2]|0);F=208;break}if(n&18|0){o=+Kg(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0);F=208;break}}o=0.0;B=j;l=(m|0)<0?6:m}while(0);if((F|0)==208){F=0;l=(m|0)<0?6:m;if(o<0.0){o=-o;B=45}else B=j}q=(C|0)==2|(C|0)==15;p=l+((q&(l|0)>0)<<31>>31)|0;j=p&4095;if(!j)r=.5;else{r=.5;while(1){r=r*.1;if((j|0)>1)j=j+-1|0;else break}}n=(C|0)==12;o=n?o+r:o;g[X>>3]=o;g[Z>>3]=+g[X>>3];if(+g[X>>3]==+g[Z>>3]){if(o>0.0){s=1.0;m=0;while(1){t=s*1.e+100;if(m>>>0<351&o>=t){s=t;m=m+100|0}else break}while(1){t=s*1.0e10;if(m>>>0<351&o>=t){s=t;m=m+10|0}else break}while(1){t=s*10.0;if(m>>>0<351&o>=t){s=t;m=m+1|0}else break}o=o/s;if(o<1.0e-08)do{o=o*1.0e8;m=m+-8|0}while(o<1.0e-08);if(o<1.0)do{o=o*10.0;m=m+-1|0}while(o<1.0);j=B<<24>>24!=0;if((m|0)>350){n=_+(j&1)|0;a[_>>0]=B;a[n>>0]=73;a[n+1>>0]=110;a[n+2>>0]=102;a[n+3>>0]=0;n=j?4:3;j=_;m=H;q=0;break e}}else m=0;if(!n){o=r+o;if(o>=10.0){o=o*.1;m=m+1|0}}z=(m|0)<-4|(p|0)<(m|0);A=q?x<<24>>24==0&1:E;l=q?p-(z?0:m)|0:l;z=(q?(z?2:1):k)<<24>>24==2;p=z?0:m;j=Sv(l|0,((l|0)<0)<<31>>31|0,h|0,((h|0)<0)<<31>>31|0)|0;j=Sv(j|0,L()|0,((p|0)>0?p:0)|0,0)|0;k=L()|0;f:do if((k|0)>0|(k|0)==0&j>>>0>55){u=Sv(j|0,k|0,15,0)|0;n=L()|0;if(a[S>>0]|0){F=543;break a}if((n|0)>0|((n|0)==0?u>>>0>(c[da>>2]|0)>>>0:0)?($=c[W>>2]|0,(n|0)>0|(n|0)==0&u>>>0>$>>>0):0){F=236;break a}q=c[f>>2]|0;g:do if(!q){w=Sv(j|0,k|0,14,0)|0;v=L()|0;if(v>>>0>0|(v|0)==0&w>>>0>2147483390){F=278;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](u)|0;break}n=Wa[c[29356>>2]&127](u)|0;if((c[14985]|0)>>>0<u>>>0)c[14985]=u;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){w=c[14978]|0;v=Tv(j|0,k|0,n|0,((n|0)<0)<<31>>31|0)|0;u=L()|0;c[14768]=((u|0)<0|(u|0)==0&v>>>0<=w>>>0)&1}k=Wa[c[29340>>2]&127](n)|0;if(!k){F=278;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){j=k;q=k;break f}c[14987]=j;j=k;q=k;break f}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){F=278;break a}}else{do if(!(n>>>0>0|((n|0)==0?u>>>0>(e[q+276>>1]|0)>>>0:0))){j=q+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];w=q+284|0;c[w>>2]=(c[w>>2]|0)+1;break g}j=q+296|0;k=c[j>>2]|0;if(!k){j=q+292|0;break}else{c[j>>2]=c[k>>2];w=q+284|0;c[w>>2]=(c[w>>2]|0)+1;break g}}else j=q+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}k=_d(q,u,n)|0}while(0);if(!k){F=278;break a}else{j=k;q=k}}else{j=_;q=0}while(0);n=((E&255)*10|0)+16|0;v=(E|x)&255|(l|0)>0;if(!(B<<24>>24))k=j;else{a[j>>0]=B;k=j+1|0}if((p|0)<0){a[k>>0]=48;k=k+1|0}else{u=k;while(1){w=(n|0)<1;x=~~o;o=w?o:(o-+(x|0))*10.0;n=n+((w^1)<<31>>31)|0;k=u+1|0;a[u>>0]=w?48:x+48&255;if((p|0)>0){u=k;p=p+-1|0}else{p=-1;break}}}w=(v|0)==0;if(!w){a[k>>0]=46;k=k+1|0}if((p|0)<-1){gw(k|0,48,~p|0)|0;while(1){k=k+1|0;l=l+-1|0;if((p|0)<-2)p=p+1|0;else break}}if((l|0)>0){v=n;while(1){n=(v|0)<1;p=~~o;u=k+1|0;a[k>>0]=n?48:p+48&255;if((l|0)>1){l=l+-1|0;k=u;v=v+((n^1)<<31>>31)|0;o=n?o:(o-+(p|0))*10.0}else{k=u;break}}}h:do if(!(A<<24>>24==0|w)){i:while(1){l=k+-1|0;switch(a[l>>0]|0){case 46:break i;case 48:break;default:break h}a[l>>0]=0;k=l}if(!(E<<24>>24)){a[l>>0]=0;k=l;break}else{a[k>>0]=48;k=k+1|0;break}}while(0);if(z){n=k+1|0;a[k>>0]=a[160+(d[16+(C*6|0)+4>>0]|0)>>0]|0;l=k+2|0;if((m|0)<0){a[n>>0]=45;m=0-m|0}else a[n>>0]=43;if((m|0)>99){E=(m>>>0)/100|0;a[l>>0]=E+48;l=k+3|0;k=m-(E*100|0)|0}else k=m;E=(k|0)/10|0;a[l>>0]=E+48;a[l+1>>0]=k-(E*10|0)+48;k=l+2|0}a[k>>0]=0;k=k-j|0;if(y<<24>>24==0&D<<24>>24!=0&(h|0)>(k|0)){l=h-k|0;if((k|0)>=0){k=h;while(1){a[j+k>>0]=a[j+(k-l)>>0]|0;if((k|0)>(l|0))k=k+-1|0;else break}}if(!l){n=h;m=H}else{gw(j+(B<<24>>24!=0&1)|0,48,l|0)|0;n=h;m=H}}else{n=k;m=H}}else{n=3;j=31167;m=H;q=0}break}case 4:{if(I){h=c[ca>>2]|0;j=(c[i>>2]|0)+(4-1)&~(4-1);n=c[j>>2]|0;c[i>>2]=j+4;c[n>>2]=h;n=0;h=0;j=z;m=H;q=0}else{n=0;h=0;j=z;m=H;q=0}break}case 7:{a[_>>0]=37;n=1;j=_;m=H;q=0;break}case 8:{j:do if(I){F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4;if(j>>>0<128){a[_>>0]=j;n=1;break}if(j>>>0<2048){a[_>>0]=j>>>6&31|192;a[T>>0]=j&63|128;n=2;break}if(j>>>0<65536){a[_>>0]=j>>>12&15|224;a[T>>0]=j>>>6&63|128;a[U>>0]=j&63|128;n=3;break}else{a[_>>0]=j>>>18&7|240;a[T>>0]=j>>>12&63|128;a[U>>0]=j>>>6&63|128;a[V>>0]=j&63|128;n=4;break}}else{j=c[Q>>2]|0;do if((c[J>>2]|0)>(j|0)?(aa=c[R>>2]|0,c[Q>>2]=j+1,aa=c[aa+(j<<2)>>2]|0,aa|0):0){j=b[aa+8>>1]|0;if((j&514)==514?(a[aa+10>>0]|0)==1:0)k=c[aa+16>>2]|0;else{if(j&1)break;k=Gg(aa,1)|0}if(k|0){F=a[k>>0]|0;a[_>>0]=F;if((F&255)<=191){n=1;break j}j=a[k+1>>0]|0;if((j&-64)<<24>>24!=-128){n=1;break j}a[T>>0]=j;j=a[k+2>>0]|0;if((j&-64)<<24>>24!=-128){n=2;break j}a[U>>0]=j;j=a[k+3>>0]|0;if((j&-64)<<24>>24!=-128){n=3;break j}a[V>>0]=j;n=4;break j}}while(0);a[_>>0]=0;n=1}while(0);if((m|0)>1){h=1-m+h|0;do if(!((h|0)<2|y<<24>>24!=0)){h=h+-1|0;F=Sv(c[ca>>2]|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?F>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)<1){h=0;break}}while(1){E=c[ea>>2]|0;F=c[ca>>2]|0;c[ca>>2]=F+1;a[E+F>>0]=32;if((h|0)>1)h=h+-1|0;else{h=0;break}}}while(0);j=m;while(1){k=c[ca>>2]|0;l=k+n|0;if(l>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,_|0,n|0)|0}else wb(f,_,n);if((j|0)>2)j=j+-1|0;else{j=_;m=1;q=0;k=n;F=395;break}}}else{j=_;m=1;q=0;k=n;F=395}break}case 6:case 5:{do if(!I){j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)?(K=c[R>>2]|0,c[Q>>2]=j+1,K=c[K+(j<<2)>>2]|0,(K|0)!=0):0){j=b[K+8>>1]|0;if((j&514)==514?(a[K+10>>0]|0)==1:0){j=c[K+16>>2]|0;k=5;F=369;break}if(!(j&1)){j=Gg(K,1)|0;k=5;F=369}else{p=59952;k=0;F=380}}else{p=59952;k=0;F=380}}else{F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4;F=369}while(0);if((F|0)==369){F=0;if(j)if(k<<24>>24==6)if((c[ca>>2]|0)==0?(m|0)<0&((h|0)==0&(c[W>>2]|0)!=0):0)if(!(a[S>>0]|0)){c[ea>>2]=j;h=c[f>>2]|0;if(((h|0)!=0?(M=j,(c[h+304>>2]|0)>>>0<=M>>>0):0)?(c[h+308>>2]|0)>>>0>M>>>0:0)h=e[h+276>>1]|0;else h=Wa[c[29352>>2]&127](j)|0;c[da>>2]=h;n=(Eu(j)|0)&2147483647;c[ca>>2]=n;a[ba>>0]=a[ba>>0]|4;n=0;h=0;m=H;q=0;break e}else{l=j;h=0;k=j}else{p=j;k=j;F=380}else{p=j;k=0;F=380}else{p=59952;k=0;F=380}}if((F|0)==380){F=0;if((m|0)>-1){j=(m|0)!=0;if(!(E<<24>>24)){if(!j){n=0;j=p;m=H;q=k;break e}j=0;while(1){if(!(a[p+j>>0]|0)){n=j;j=p;m=H;q=k;break e}j=j+1|0;if((j|0)>=(m|0)){n=j;j=p;m=H;q=k;break e}}}k:do if(j){j=p;while(1){n=m;m=m+-1|0;l=a[j>>0]|0;if(!(l<<24>>24)){l=j;break k}j=j+1|0;if((l&255)>191)while(1)if((a[j>>0]&-64)<<24>>24==-128)j=j+1|0;else break;if((n|0)<=1){l=j;break}}}else l=p;while(0);j=p;m=E;q=k;k=l-p|0;F=395;break e}else l=p}j=l;m=E;q=k;k=(Eu(l)|0)&2147483647;F=395;break}case 14:case 10:case 9:{x=(C|0)==6?34:39;do if(!I){j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)?(N=c[R>>2]|0,c[Q>>2]=j+1,N=c[N+(j<<2)>>2]|0,(N|0)!=0):0){j=b[N+8>>1]|0;if((j&514)==514?(a[N+10>>0]|0)==1:0){j=c[N+16>>2]|0;break}if(!(j&1))j=Gg(N,1)|0;else j=0}else j=0}else{F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4}while(0);q=(j|0)==0;p=(C|0)==5;w=q?(p?31171:31176):j;l:do if(!m){l=0;v=0}else{n=x&255;if(!(E<<24>>24)){l=0;k=0;while(1){j=a[w+k>>0]|0;if(!(j<<24>>24)){v=k;break l}j=l+((j<<24>>24|0)==(n|0)&1)|0;k=k+1|0;m=m+-1|0;if(!m){l=j;v=k;break l}else l=j}}l=0;j=0;while(1){F=a[w+j>>0]|0;k=F<<24>>24;if(!(F<<24>>24)){v=j;break l}l=l+((k|0)==(n|0)&1)|0;if((k&192|0)==192)do j=j+1|0;while((a[w+j>>0]&-64)<<24>>24==-128);else j=j+1|0;m=m+-1|0;if(!m){v=j;break}}}while(0);u=p&(q^1);n=v+3+l|0;m:do if((n|0)>70){l=((n|0)<0)<<31>>31;if(a[S>>0]|0){F=543;break a}if(0<(l|0)|(0==(l|0)?(c[da>>2]|0)>>>0<n>>>0:0)?(O=c[W>>2]|0,0<(l|0)|0==(l|0)&O>>>0<n>>>0):0){F=423;break a}m=c[f>>2]|0;n:do if(!m){F=Sv(n|0,l|0,-1,-1)|0;D=L()|0;if(D>>>0>0|(D|0)==0&F>>>0>2147483390){F=465;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){F=c[14978]|0;D=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;C=L()|0;c[14768]=((C|0)<0|(C|0)==0&D>>>0<=F>>>0)&1}k=Wa[c[29340>>2]&127](l)|0;if(!k){F=465;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){j=k;q=k;break m}c[14987]=j;j=k;q=k;break m}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){F=465;break a}}else{do if(!(0<l>>>0|(0==(l|0)?(e[m+276>>1]|0)>>>0<n>>>0:0))){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];F=m+284|0;c[F>>2]=(c[F>>2]|0)+1;break n}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];F=m+284|0;c[F>>2]=(c[F>>2]|0)+1;break n}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}k=_d(m,n,l)|0}while(0);if(!k){F=465;break a}else{j=k;q=k}}else{j=_;q=0}while(0);if(u){a[j>>0]=x;k=1}else k=0;if((v|0)>0){p=x&255;n=0;do{l=a[w+n>>0]|0;m=k+1|0;a[j+k>>0]=l;if((l<<24>>24|0)==(p|0)){a[j+m>>0]=l;k=k+2|0}else k=m;n=n+1|0}while((n|0)!=(v|0))}if(u){a[j+k>>0]=x;k=k+1|0}a[j+k>>0]=0;m=E;F=395;break}case 11:{if(!(a[ba>>0]&1)){F=543;break a}E=(c[i>>2]|0)+(4-1)&~(4-1);h=c[E>>2]|0;c[i>>2]=E+4;if((h|0)!=0?(P=c[h+4>>2]|0,(P|0)!=0):0){h=c[h>>2]|0;j=c[ca>>2]|0;k=j+P|0;if(k>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=k;ew((c[ea>>2]|0)+j|0,h|0,P|0)|0;n=0;h=0;j=z;m=H;q=0;break e}else{wb(f,h,P);n=0;h=0;j=z;m=H;q=0;break e}}else{n=0;h=0;j=z;m=H;q=0}break}case 12:{if(!(a[ba>>0]&1)){F=543;break a}h=(c[i>>2]|0)+(4-1)&~(4-1);m=c[h>>2]|0;c[i>>2]=h+4;h=(c[i>>2]|0)+(4-1)&~(4-1);n=c[h>>2]|0;c[i>>2]=h+4;h=c[m+8+(n*72|0)+4>>2]|0;do if(h|0){j=(Eu(h)|0)&1073741823;k=c[ca>>2]|0;l=k+j|0;if(l>>>0<(c[da>>2]|0)>>>0){if(j|0){c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,h|0,j|0)|0}}else wb(f,h,j);h=c[ca>>2]|0;j=h+1|0;if(j>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=j;a[(c[ea>>2]|0)+h>>0]=46;break}else{wb(f,31183,1);break}}while(0);j=c[m+8+(n*72|0)+8>>2]|0;if(!j)h=0;else h=(Eu(j)|0)&1073741823;k=c[ca>>2]|0;l=k+h|0;if(l>>>0>=(c[da>>2]|0)>>>0){wb(f,j,h);n=0;h=0;j=z;m=H;q=0;break e}if(!h){n=0;h=0;j=z;m=H;q=0}else{c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,j|0,h|0)|0;n=0;h=0;j=z;m=H;q=0}break}default:{F=543;break a}}while(0);if((F|0)==86){v=0;F=87}else if((F|0)==395){F=0;if(m<<24>>24!=0&(h|0)>0&(k|0)>0){l=k;do{E=l;l=l+-1|0;h=h+((a[j+l>>0]&-64)<<24>>24==-128&1)|0}while((E|0)>1);n=k;m=H}else{n=k;m=H}}if((F|0)==87){F=0;o:do if(4067322>>>C&1){if(I)switch(k<<24>>24){case 0:{j=(c[i>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[i>>2]=j+4;j=0;k=0;F=113;break o}case 2:{j=(c[i>>2]|0)+(8-1)&~(8-1);k=j;l=c[k>>2]|0;k=c[k+4>>2]|0;c[i>>2]=j+8;j=0;F=113;break o}default:{j=(c[i>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[i>>2]=j+4;j=0;k=0;F=113;break o}}j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)){k=c[R>>2]|0;c[Q>>2]=j+1;j=c[k+(j<<2)>>2]|0;k=e[j+8>>1]|0;if(k&4|0){k=j;j=0;l=c[k>>2]|0;k=c[k+4>>2]|0;F=113;break}if(k&8|0){l=Mg(+g[j>>3])|0;j=0;k=L()|0;F=113;break}if(k&18){l=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;j=0;k=L()|0;F=113}else{j=0;F=114}}else{j=0;F=114}}else{do if(I)if(k<<24>>24!=2){p=(c[i>>2]|0)+(4-1)&~(4-1);n=c[p>>2]|0;c[i>>2]=p+4;p=((n|0)<0)<<31>>31;l=Tv(0,0,n|0,p|0)|0;k=L()|0;if((n|0)<0)break;else{l=n;k=p;F=113;break o}}else{F=(c[i>>2]|0)+(8-1)&~(8-1);k=F;l=c[k>>2]|0;k=c[k+4>>2]|0;c[i>>2]=F+8;F=99;break}else{k=c[Q>>2]|0;if((c[J>>2]|0)<=(k|0)){F=114;break o}l=c[R>>2]|0;c[Q>>2]=k+1;k=c[l+(k<<2)>>2]|0;l=e[k+8>>1]|0;if(l&4|0){l=k;k=c[l+4>>2]|0;l=c[l>>2]|0;F=99;break}if(l&8|0){l=Mg(+g[k>>3])|0;k=L()|0;F=99;break}if(!(l&18)){F=114;break o}l=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;k=L()|0;F=99}while(0);if((F|0)==99){p=(l|0)==0&(k|0)==-2147483648;n=Tv(0,0,l|0,k|0)|0;q=L()|0;if((k|0)<0){l=p?0:n;k=p?-2147483648:q}else{F=113;break}}j=45;F=113}while(0);if((F|0)==113){F=0;if((l|0)==0&(k|0)==0)F=114;else z=j}if((F|0)==114){F=0;z=j;l=0;k=0;x=0}u=h-(z<<24>>24!=0&1)|0;u=D<<24>>24==0?m:(m|0)<(u|0)?u:m;if((u|0)<37){n=_;q=0;w=70}else{m=Sv(u|0,((u|0)<0)<<31>>31|0,10,0)|0;j=L()|0;if(!(v<<24>>24))q=j;else{m=Sv(m|0,j|0,(u>>>0)/3|0|0,0)|0;q=L()|0}if(a[S>>0]|0){F=543;break}if((q|0)>0|((q|0)==0?m>>>0>(c[da>>2]|0)>>>0:0)?(Y=c[W>>2]|0,(q|0)>0|(q|0)==0&m>>>0>Y>>>0):0){F=121;break}p=c[f>>2]|0;p:do if(!p){E=Sv(m|0,q|0,-1,-1)|0;D=L()|0;if(D>>>0>0|(D|0)==0&E>>>0>2147483390){F=164;break a}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;F=162;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;p=59064;n=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&n>>>0>0){E=c[14978]|0;D=Tv(n|0,p|0,j|0,((j|0)<0)<<31>>31|0)|0;B=L()|0;c[14768]=((B|0)<0|(B|0)==0&D>>>0<=E>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){F=164;break a}n=Wa[c[29352>>2]&127](j)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0>(c[14987]|0)>>>0)c[14987]=n}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){F=164;break a}}else{do if(!(q>>>0>0|((q|0)==0?m>>>0>(e[p+276>>1]|0)>>>0:0))){n=p+300|0;j=c[n>>2]|0;if(j|0){c[n>>2]=c[j>>2];F=p+284|0;c[F>>2]=(c[F>>2]|0)+1;F=162;break p}n=p+296|0;j=c[n>>2]|0;if(!j){j=p+292|0;break}else{c[n>>2]=c[j>>2];F=p+284|0;c[F>>2]=(c[F>>2]|0)+1;F=162;break p}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,m,q)|0;F=162}while(0);if((F|0)==162){F=0;if(!j){F=164;break}}n=j;q=j;w=(j|0)==0?H:m}m=n+(w+-1)|0;if((C|0)==22){E=_v(l|0,k|0,10,0)|0;j=L()|0;H=Yv(E|0,j|0,10,0)|0;H=Tv(l|0,k|0,H|0,L()|0)|0;L()|0;j=$v(E|0,j|0,10,0)|0;j=(H|0)>3|(j|0)==1&(L()|0)==0;H=(j?0:H)<<1;j=m+-1|0;a[j>>0]=a[31151+(H|1)>>0]|0;j=j+-1|0;a[j>>0]=a[31151+H>>0]|0}else j=m;n=160+(d[16+(C*6|0)+4>>0]|0)|0;p=d[16+(C*6|0)+1>>0]|0;do{H=l;l=_v(l|0,k|0,p|0,0)|0;E=k;k=L()|0;D=Yv(l|0,k|0,p|0,0)|0;D=Tv(H|0,E|0,D|0,L()|0)|0;L()|0;j=j+-1|0;a[j>>0]=a[n+D>>0]|0}while(!(E>>>0<0|(E|0)==0&H>>>0<p>>>0));p=m;k=j;l=p-k|0;if((u|0)>(l|0)){j=j+(p-u-k)|0;gw(j|0,48,u+k-p|0)|0;l=u}if(v<<24>>24){k=l+-1|0;m=(k|0)/3|0;j=j+(0-m)|0;if((l|0)>3){k=k-(m*3|0)+1|0;l=0;do{a[j+l>>0]=a[j+(l+m)>>0]|0;k=k+-1|0;n=l+1|0;if(!k){a[j+n>>0]=v;k=3;m=m+-1|0;l=l+2|0}else l=n}while((m|0)>0)}}if(z<<24>>24){j=j+-1|0;a[j>>0]=z}if(x<<24>>24!=0?(7860991>>>C&1|0)==0:0){k=31160+(d[16+(C*6|0)+5>>0]|0)|0;l=k;k=a[k>>0]|0;do{j=j+-1|0;a[j>>0]=k;l=l+1|0;k=a[l>>0]|0}while(k<<24>>24!=0)}n=p-j|0;m=w}h=h-n|0;do if((h|0)>0){l=c[ca>>2]|0;if(!(y<<24>>24)){H=Sv(l|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?H>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)>=1)F=514}else F=514;if((F|0)==514){F=0;while(1){E=c[ea>>2]|0;H=c[ca>>2]|0;c[ca>>2]=H+1;a[E+H>>0]=32;if((h|0)>1)h=h+-1|0;else break}}h=c[ca>>2]|0;k=h+n|0;if(k>>>0>=(c[da>>2]|0)>>>0){wb(f,j,n);break}if(!n)break;c[ca>>2]=k;ew((c[ea>>2]|0)+h|0,j|0,n|0)|0;break}else{k=l+n|0;if(k>>>0<(c[da>>2]|0)>>>0){if(n|0){c[ca>>2]=k;ew((c[ea>>2]|0)+l|0,j|0,n|0)|0}}else wb(f,j,n);H=Sv(c[ca>>2]|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?H>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)<1)break}while(1){E=c[ea>>2]|0;H=c[ca>>2]|0;c[ca>>2]=H+1;a[E+H>>0]=32;if((h|0)>1)h=h+-1|0;else break}}}else{h=c[ca>>2]|0;k=h+n|0;if(k>>>0>=(c[da>>2]|0)>>>0){wb(f,j,n);break}if(n|0){c[ca>>2]=k;ew((c[ea>>2]|0)+h|0,j|0,n|0)|0}}while(0);do if(q|0){h=c[f>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,q);break}H=q;if((c[h+304>>2]|0)>>>0<=H>>>0?(c[h+308>>2]|0)>>>0>H>>>0:0){H=h+300|0;c[q>>2]=c[H>>2];c[H>>2]=q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{H=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);h=G+1|0;H=m}if((F|0)==13){h=c[ca>>2]|0;j=h+1|0;if(j>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=j;a[(c[ea>>2]|0)+h>>0]=37;Ra=fa;return}else{wb(f,31149,1);Ra=fa;return}}else if((F|0)==121){a[S>>0]=18;if(Y|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==164){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==236){a[S>>0]=18;if($|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==278){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==423){a[S>>0]=18;if(O|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==465){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==543){Ra=fa;return}}function ub(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a+16|0;f=c[e>>2]|0;g=f+d|0;if(g>>>0>=(c[a+8>>2]|0)>>>0){wb(a,b,d);return}if(!d)return;c[e>>2]=g;ew((c[a+4>>2]|0)+f|0,b|0,d|0)|0;return}function vb(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;q=b+20|0;if(a[q>>0]|0){s=0;return s|0}p=b+12|0;i=c[p>>2]|0;if(!i){a[q>>0]=18;f=c[b>>2]|0;if(f|0?(g=c[f+236>>2]|0,g|0):0){c[g+12>>2]=18;s=g+36|0;c[s>>2]=(c[s>>2]|0)+1}s=(c[b+8>>2]|0)+-1-(c[b+16>>2]|0)|0;return s|0}s=b+21|0;g=a[s>>0]|0;f=(g&4)==0;if(f)j=0;else j=c[b+4>>2]|0;r=b+16|0;k=c[r>>2]|0;v=d+1|0;v=Sv(k|0,0,v|0,((v|0)<0)<<31>>31|0)|0;t=L()|0;k=Sv(v|0,t|0,k|0,0)|0;o=L()|0;u=(o|0)>0|(o|0)==0&k>>>0>i>>>0;k=u?v:k;o=u?t:o;if((o|0)>0|(o|0)==0&k>>>0>i>>>0){if(!f){f=c[b>>2]|0;h=b+4|0;g=c[h>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}v=g;if((c[f+304>>2]|0)>>>0<=v>>>0?(c[f+308>>2]|0)>>>0>v>>>0:0){v=f+300|0;c[g>>2]=c[v>>2];c[v>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{v=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=a[s>>0]&-5;a[s>>0]=g;v=c[p>>2]|0;f=b+8|0;c[f>>2]=0;c[r>>2]=0;c[h>>2]=0;a[q>>0]=18;if(v|0)n=23}else{f=b+8|0;c[f>>2]=0;c[r>>2]=0;c[b+4>>2]=0;a[q>>0]=18;n=23}if((n|0)==23){if(g&4)a[s>>0]=g&-5;c[f>>2]=0;c[r>>2]=0;c[b+4>>2]=0}f=c[b>>2]|0;if(!f){v=0;return v|0}f=c[f+236>>2]|0;if(!f){v=0;return v|0}c[f+12>>2]=18;v=f+36|0;c[v>>2]=(c[v>>2]|0)+1;v=0;return v|0}o=b+8|0;c[o>>2]=k;i=c[b>>2]|0;a:do if(!i){if(!(mb()|0)){h=sb(j,k,0)|0;n=49}}else{if(j|0){v=j;if((c[i+304>>2]|0)>>>0<=v>>>0?(c[i+308>>2]|0)>>>0>v>>>0:0){if(!(0>0|(0==0?k>>>0>(e[i+276>>1]|0)>>>0:0))){h=j;n=51;break}h=Zd(i,j,k,0)|0;n=49;break}h=Zd(i,j,k,0)|0;n=49;break}if(c[i+272>>2]|0){if(a[i+81>>0]|0)break}else{do if(!(0>0|(0==0?k>>>0>(e[i+276>>1]|0)>>>0:0))){f=i+300|0;h=c[f>>2]|0;if(h|0){c[f>>2]=c[h>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=49;break a}f=i+296|0;h=c[f>>2]|0;if(!h){f=i+292|0;break}else{c[f>>2]=c[h>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=49;break a}}else f=i+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}h=_d(i,k,0)|0;n=49}while(0);if((n|0)==49?h|0:0){g=a[s>>0]|0;n=51}if((n|0)==51){if((g&4)==0?(l=c[r>>2]|0,l|0):0)ew(h|0,c[b+4>>2]|0,l|0)|0;c[b+4>>2]=h;f=c[b>>2]|0;if(((f|0)!=0?(m=h,(c[f+304>>2]|0)>>>0<=m>>>0):0)?(c[f+308>>2]|0)>>>0>m>>>0:0)f=e[f+276>>1]|0;else f=Wa[c[29352>>2]&127](h)|0;c[o>>2]=f;a[s>>0]=a[s>>0]|4;v=d;return v|0}f=a[s>>0]|0;if(!(f&4))g=b+4|0;else{f=c[b>>2]|0;g=b+4|0;h=c[g>>2]|0;do if(h|0){if(f|0){if(c[f+480>>2]|0){Xd(f,h);break}v=h;if((c[f+304>>2]|0)>>>0<=v>>>0?(c[f+308>>2]|0)>>>0>v>>>0:0){v=f+300|0;c[h>>2]=c[v>>2];c[v>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{v=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);f=a[s>>0]&-5;a[s>>0]=f}c[o>>2]=0;c[r>>2]=0;c[g>>2]=0;a[q>>0]=7;if(!(c[p>>2]|0)){v=0;return v|0}if(f&4)a[s>>0]=f&-5;c[o>>2]=0;c[r>>2]=0;c[b+4>>2]=0;v=0;return v|0}function wb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;d=vb(a,d)|0;if((d|0)<=0)return;e=a+16|0;ew((c[a+4>>2]|0)+(c[e>>2]|0)|0,b|0,d|0)|0;c[e>>2]=(c[e>>2]|0)+d;return}function xb(a){a=a|0;if(!a){a=0;return a|0}a=(Eu(a)|0)&1073741823;return a|0}function yb(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0?(a[e+(c[b+16>>2]|0)>>0]=0,c[b+12>>2]|0):0)?(a[b+21>>0]&4)==0:0){e=$d(b)|0;return e|0}e=c[d>>2]|0;return e|0}function zb(b){b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){b=29632;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](24)|0;if(!d){b=29632;return b|0}}else{f=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=29632;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}if(!b){c[d+4>>2]=0;c[d>>2]=0;c[d+8>>2]=0;c[d+12>>2]=1e9;c[d+16>>2]=0;a[d+20>>0]=0;a[d+21>>0]=0;g=d;return g|0}else{g=c[b+108>>2]|0;c[d+4>>2]=0;c[d>>2]=0;c[d+8>>2]=0;c[d+12>>2]=g;c[d+16>>2]=0;a[d+20>>0]=0;a[d+21>>0]=0;g=d;return g|0}return 0}function Ab(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+96|0;f=j+72|0;if(mb()|0){i=0;Ra=j;return i|0}g=f+4|0;c[g>>2]=j;c[f>>2]=0;c[f+8>>2]=70;h=f+12|0;c[h>>2]=1e9;i=f+16|0;c[i>>2]=0;a[f+20>>0]=0;e=f+21|0;a[e>>0]=0;tb(f,b,d);b=c[g>>2]|0;if((b|0?(a[b+(c[i>>2]|0)>>0]=0,c[h>>2]|0):0)?(a[e>>0]&4)==0:0){i=$d(f)|0;Ra=j;return i|0}i=c[g>>2]|0;Ra=j;return i|0}function Bb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+112|0;j=k+88|0;h=k;if(mb()|0){j=0;Ra=k;return j|0}c[h>>2]=d;do if(!(mb()|0)){i=j+4|0;c[i>>2]=k+16;c[j>>2]=0;c[j+8>>2]=70;e=j+12|0;c[e>>2]=1e9;f=j+16|0;c[f>>2]=0;a[j+20>>0]=0;g=j+21|0;a[g>>0]=0;tb(j,b,h);d=c[i>>2]|0;if((d|0?(a[d+(c[f>>2]|0)>>0]=0,c[e>>2]|0):0)?(a[g>>0]&4)==0:0){d=$d(j)|0;break}d=c[i>>2]|0}else d=0;while(0);j=d;Ra=k;return j|0}function Cb(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=Ra;Ra=Ra+48|0;h=j+16|0;i=j;c[i>>2]=g;if((d|0)<1){Ra=j;return e|0}c[h+4>>2]=e;c[h>>2]=0;c[h+8>>2]=d;g=h+12|0;c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;tb(h,f,i);a[e+(c[h+16>>2]|0)>>0]=0;Ra=j;return e|0}function Db(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+256|0;k=l+232|0;g=l;if(!(c[7387]|0)){Ra=l;return}c[g>>2]=f;i=k+4|0;c[i>>2]=l+16;c[k>>2]=0;c[k+8>>2]=210;j=k+12|0;h=k+21|0;c[j>>2]=0;c[j+4>>2]=0;b[j+8>>1]=0;tb(k,e,g);e=c[7387]|0;g=c[7388]|0;f=c[i>>2]|0;if(((f|0)!=0?(a[f+(c[k+16>>2]|0)>>0]=0,(c[j>>2]|0)!=0):0)?(a[h>>0]&4)==0:0)f=$d(k)|0;else f=c[i>>2]|0;cb[e&255](g,d,f);Ra=l;return}function Eb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=d;tb(a,b,f);Ra=e;return}function Fb(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=Ra;Ra=Ra+256|0;h=i;if(mb()|0){Ra=i;return}if((b|0)<1|(e|0)==0){a[59955]=0;Ra=i;return}if(!(a[59955]|0)){a[59957]=0;a[59956]=0;f=(mb()|0)==0;f=f?c[14770]|0:0;Ya[c[f+56>>2]&127](f,256,h)|0;f=0;do{a[59958+f>>0]=f;f=f+1|0}while((f|0)!=256);f=0;g=a[59957]|0;do{j=59958+f|0;m=a[j>>0]|0;l=(d[h+f>>0]|0)+(m&255)+(g&255)|0;g=l&255;l=59958+(l&255)|0;k=a[l>>0]|0;a[l>>0]=m;a[j>>0]=k;f=f+1|0}while((f|0)!=256);a[59957]=g;a[59955]=1}while(1){l=(a[59956]|0)+1<<24>>24;a[59956]=l;l=59958+(l&255)|0;j=a[l>>0]|0;m=j&255;k=(d[59957]|0)+m|0;a[59957]=k;k=59958+(k&255)|0;a[l>>0]=a[k>>0]|0;a[k>>0]=j;a[e>>0]=a[59958+((d[l>>0]|0)+m&255)>>0]|0;b=b+-1|0;if(!b)break;else e=e+1|0}Ra=i;return}function Gb(b,c){b=b|0;c=c|0;var e=0,f=0;if(!b){e=((c|0)!=0)<<31>>31;return e|0}if(!c){e=1;return e|0}f=a[b>>0]|0;e=(d[208+(f&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(f<<24>>24==0|(e|0)!=0){f=e;return f|0}e=c;do{b=b+1|0;e=e+1|0;f=a[b>>0]|0;c=(d[208+(f&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(f<<24>>24==0|(c|0)!=0));return c|0}function Hb(b,c){b=b|0;c=c|0;var e=0,f=0;f=a[b>>0]|0;e=(d[208+(f&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(f<<24>>24==0|(e|0)!=0){f=e;return f|0}e=c;do{b=b+1|0;e=e+1|0;f=a[b>>0]|0;c=(d[208+(f&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(f<<24>>24==0|(c|0)!=0));return c|0}function Ib(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!b){g=((c|0)!=0)<<31>>31;return g|0}if(!c){g=1;return g|0}if((e|0)<=0){g=0;return g|0}f=e;while(1){e=a[b>>0]|0;if(!(e<<24>>24)){f=7;break}e=a[208+(e&255)>>0]|0;g=a[208+(d[c>>0]|0)>>0]|0;if(e<<24>>24!=g<<24>>24){f=9;break}if((f|0)>1){b=b+1|0;c=c+1|0;f=f+-1|0}else{b=0;f=12;break}}if((f|0)==7){e=0;b=a[208+(d[c>>0]|0)>>0]|0}else if((f|0)==9){e=e&255;b=g}else if((f|0)==12)return b|0;g=e-(b&255)|0;return g|0}function Jb(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=Ra;Ra=Ra+1232|0;E=H+1200|0;D=H+1192|0;F=H+1168|0;w=H+1144|0;v=H+1128|0;G=H+1048|0;C=H+528|0;n=H;m=g&-256;s=g&16;z=g&8;q=g&4;k=g&1;r=g&2;a:do if(!q)A=0;else{b:do if((m|0)>=16384)if((m|0)<524288)switch(m|0){case 16384:{A=1;break a}default:break b}else switch(m|0){case 524288:{A=1;break a}default:break b}else switch(m|0){case 2048:{A=1;break a}default:{}}while(0);A=0}while(0);y=c[14796]|0;if((y|0)!=(Ju()|0)?(y=Ju()|0,c[14796]=y,(mb()|0)==0):0)a[59955]=0;o=f;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));y=(m|0)==256;if(!y)if(!e){i=ye(c[d+8>>2]|0,n)|0;if(!i){u=n;i=-1}else{f=i;Ra=H;return f|0}}else{u=e;i=-1}else{c:do if(((c[14795]|0)!=0?(Xa[c[2388>>2]&255](e,G)|0)==0:0)?(i=c[14795]|0,(i|0)!=0):0){m=c[G>>2]|0;n=c[G+72>>2]|0;while(1){if((c[i>>2]|0)==(m|0)?(u=i+8|0,(c[u+4>>2]|0)==0?(c[u>>2]|0)==(n|0):0):0)break;i=c[i+44>>2]|0;if(!i){B=20;break c}}i=i+32|0;m=c[i>>2]|0;if(m){while(1){n=m+8|0;if((c[m+4>>2]|0)==(g|0))break;m=c[n>>2]|0;if(!m){B=20;break c}else i=n}c[i>>2]=c[n>>2];i=m;m=c[m>>2]|0}else B=20}else B=20;while(0);do if((B|0)==20){if(mb()|0){f=7;Ra=H;return f|0}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](12)|0;if(!i)i=7;else{m=-1;break}Ra=H;return i|0}i=Wa[c[29356>>2]&127](12)|0;if((c[14985]|0)>>>0<12)c[14985]=12;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){u=c[14978]|0;t=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&t>>>0<=u>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){f=7;Ra=H;return f|0}m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m;m=-1}while(0);c[f+28>>2]=i;u=e;i=m}t=(r|0)!=0;q=q<<4|r;q=(s|0)==0?q:q|131200;d:do if((i|0)<0){i=g&526336;e:do if(!i)if(!z)if(!((g&64|0)==0|(u|0)==0)?(l=u+(((Eu(u)|0)&1073741823)+1)|0,(a[l>>0]|0)!=0):0){while(1){s=Bu(l,32118)|0;l=l+(((Eu(l)|0)&1073741823)+1)|0;if(!s)break;l=l+(((Eu(l)|0)&1073741823)+1)|0;if(!(a[l>>0]|0)){p=0;n=0;m=0;break e}}if(!(Xa[c[2388>>2]&255](l,G)|0)){l=0;m=c[G+24>>2]|0;n=c[G+20>>2]|0;o=c[G+12>>2]&511}else{l=1802;m=0;n=0;o=0}B=57}else{p=0;n=0;m=0}else{p=0;n=0;m=384}else{if(!u)l=-1;else l=((Eu(u)|0)&1073741823)+-1|0;m=a[u+l>>0]|0;f:do if(m<<24>>24!=45){while(1){if(m<<24>>24==46|(l|0)==0)break;l=l+-1|0;m=a[u+l>>0]|0;if(m<<24>>24==45)break f}p=0;n=0;m=0;break e}while(0);ew(C|0,u|0,l|0)|0;a[C+l>>0]=0;if(!(Xa[c[2388>>2]&255](C,G)|0)){m=c[G+24>>2]|0;l=0;n=c[G+20>>2]|0;o=c[G+12>>2]&511}else{m=0;l=1802;n=0;o=0}B=57}while(0);if((B|0)==57)if(!l){p=m;m=o}else{f=l;Ra=H;return f|0}l=xe(u,q,m)|0;do if((l|0)<0){if((A?(s=uu()|0,(c[s>>2]|0)==13):0)?(Xa[c[2364>>2]&255](u,0)|0)!=0:0)i=1544;else{s=uu()|0;if(t&(c[s>>2]|0)!=21?(x=xe(u,q&131200,m)|0,(x|0)>=0):0){m=g&-8|1;k=1;l=x;i=g&526336;break}else i=0}c[v>>2]=31984;c[v+4>>2]=38565;c[v+8>>2]=31517;Db(14,32001,v);G=uu()|0;G=c[G>>2]|0;j=dv(G)|0;c[w>>2]=38565;c[w+4>>2]=G;c[w+8>>2]=31690;c[w+12>>2]=(u|0)==0?59952:u;c[w+16>>2]=j;Db(14,31953,w);j=(i|0)==0?14:i;i=f+28|0;break d}else m=g;while(0);if((i|0)!=0?(Va[c[2592>>2]&127]()|0)==0:0){Ya[c[2580>>2]&127](l,n,p)|0;o=l;B=69}else{o=l;B=69}}else{m=g;o=i;B=69}while(0);g:do if((B|0)==69){if(h|0)c[h>>2]=m;p=f+28|0;i=c[p>>2]|0;if(i|0){c[i>>2]=o;c[i+4>>2]=m}if(z|0)Wa[c[2532>>2]&127](u)|0;l=z<<2;l=(k|0)==0?l:l|2;l=y?l:l|128;l=A?l|8:l;A=l|m&64;m=f+12|0;c[m>>2]=o;c[f+4>>2]=d;n=f+32|0;c[n>>2]=e;i=A&255;k=f+18|0;b[k>>1]=i;h:do if(!((e|0)==0|(A&64|0)==0)?(j=e+(((Eu(e)|0)&1073741823)+1)|0,(a[j>>0]|0)!=0):0){while(1){A=Bu(j,32125)|0;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!A)break;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!(a[j>>0]|0)){B=82;break h}}if((Zm(j,1,1)|0)<<24>>24){i=b[k>>1]|0;B=82}}else B=82;while(0);if((B|0)==82)b[k>>1]=i|16;if(!(Bu(c[d+16>>2]|0,31213)|0))b[k>>1]=b[k>>1]|1;i:do if(!(l&128)){i=Xa[c[c[d+20>>2]>>2]&255](e,f)|0;if((i|0)!=29668){if((i|0)!=29820)break;i=(Eu(e)|0)+6|0;j=pb(i,((i|0)<0)<<31>>31)|0;if(j|0){c[D>>2]=e;Cb(i,j,32130,D)|0;c[f+24>>2]=j;i=29820;break}c[f+24>>2]=0;c[f+20>>2]=0;if((o|0)<=-1){j=7;i=p;break g}if(!(Wa[c[2352>>2]&127](o)|0)){j=7;i=p;break g}i=c[n>>2]|0;f=uu()|0;f=c[f>>2]|0;j=dv(f)|0;c[E>>2]=38152;c[E+4>>2]=f;c[E+8>>2]=31695;c[E+12>>2]=(i|0)==0?59952:i;c[E+16>>2]=j;Db(4106,31953,E);j=7;i=p;break g}l=f+8|0;j:do if(!(Xa[c[2400>>2]&255](c[m>>2]|0,C)|0)){i=G;c[i>>2]=0;c[i+4>>2]=0;c[G>>2]=c[C>>2];i=G+8|0;c[i>>2]=c[C+72>>2];c[i+4>>2]=0;i=c[14795]|0;k:do if(!i)B=93;else{while(1){if(!(Lu(G,i,16)|0))break;i=c[i+44>>2]|0;if(!i){B=93;break k}}G=i+36|0;c[G>>2]=(c[G>>2]|0)+1}while(0);if((B|0)==93){if(mb()|0){j=7;break}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](56)|0;if(!i){j=7;break j}}else{i=Wa[c[29356>>2]&127](56)|0;if((c[14985]|0)>>>0<56)c[14985]=56;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){E=c[14978]|0;D=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&D>>>0<=E>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){j=7;break j}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}while(0);j=i+16|0;o=j;p=o+40|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[i>>2]=c[G>>2];c[i+4>>2]=c[G+4>>2];c[i+8>>2]=c[G+8>>2];c[i+12>>2]=c[G+12>>2];if(c[7325]|0)c[j>>2]=8;c[i+36>>2]=1;j=c[14795]|0;c[i+44>>2]=j;c[i+48>>2]=0;if(j|0)c[j+48>>2]=i;c[14795]=i}c[l>>2]=i;i=29668;break i}else{j=uu()|0;j=c[j>>2]|0;c[f+20>>2]=j;j=(j|0)==75?22:10}while(0);if(Wa[c[2352>>2]&127](o)|0){if(!f)i=0;else i=c[n>>2]|0;E=uu()|0;E=c[E>>2]|0;G=dv(E)|0;c[F>>2]=38067;c[F+4>>2]=E;c[F+8>>2]=31695;c[F+12>>2]=(i|0)==0?59952:i;c[F+16>>2]=G;Db(4106,31953,F)}c[f+20>>2]=0;i=p;break g}else i=29744;while(0);c[f+20>>2]=0;c[f>>2]=i;te(f);f=0;Ra=H;return f|0}while(0);i=c[i>>2]|0;if(!i){f=j;Ra=H;return f|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);f=j;Ra=H;return f|0}else{f=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);f=j;Ra=H;return f|0}return 0}function Kb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+80|0;g=h+48|0;e=h+24|0;a=h;f=h+68|0;if((Wa[c[2532>>2]&127](b)|0)==-1){g=uu()|0;if((c[g>>2]|0)==2){g=5898;Ra=h;return g|0}f=uu()|0;f=c[f>>2]|0;g=dv(f)|0;c[a>>2]=38695;c[a+4>>2]=f;c[a+8>>2]=31800;c[a+12>>2]=(b|0)==0?59952:b;c[a+16>>2]=g;Db(2570,31953,a);g=2570;Ra=h;return g|0}if(!(d&1)){g=0;Ra=h;return g|0}if(!(Xa[c[2544>>2]&255](b,f)|0)){if(!(zv(c[f>>2]|0)|0))a=0;else{d=uu()|0;d=c[d>>2]|0;a=dv(d)|0;c[e>>2]=38705;c[e+4>>2]=d;c[e+8>>2]=32138;c[e+12>>2]=(b|0)==0?59952:b;c[e+16>>2]=a;Db(1290,31953,e);a=1290}if(Wa[c[2352>>2]&127](c[f>>2]|0)|0){d=uu()|0;d=c[d>>2]|0;f=dv(d)|0;c[g>>2]=38707;c[g+4>>2]=d;c[g+8>>2]=31695;c[g+12>>2]=59952;c[g+16>>2]=f;Db(4106,31953,g)}}else a=0;g=a;Ra=h;return g|0}function Lb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Ra;Ra=Ra+80|0;a=f;if(!d){d=(Xa[c[2388>>2]&255](b,a)|0)==0;c[e>>2]=d&(c[a+36>>2]|0)>0&1;Ra=f;return 0}else{d=(Xa[c[2364>>2]&255](b,6)|0)==0&1;c[e>>2]=d;Ra=f;return 0}return 0}function Mb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+256|0;z=B+168|0;y=B+152|0;x=B+128|0;w=B+112|0;u=B+96|0;t=B+72|0;s=B+56|0;r=B+40|0;v=B+16|0;q=B;l=B+172|0;m=l+12|0;n=e+-1|0;o=e+-2|0;p=(f|0)==0;b=0;g=1;while(1){if(!(Xa[c[2664>>2]&255](d,l)|0))if((c[m>>2]&61440|0)==40960){if(!b){b=nb(e)|0;if(!b){b=0;d=7;C=34;break}else j=g}else if((g|0)>99){C=9;break}else j=g+1|0;g=Ya[c[2652>>2]&127](d,b,n)|0;if((g|0)<0){C=11;break}do if((a[b>>0]|0)!=47){a:do if((d|0)!=0?(A=(Eu(d)|0)&1073741823,(A|0)!=0):0){h=A;while(1){i=h+-1|0;if((a[d+i>>0]|0)==47)break a;if((h|0)>1)h=i;else{h=i;break}}}else h=0;while(0);i=h+g|0;if((i|0)<(e|0)){fw(b+h|0,b|0,g+1|0)|0;ew(b|0,d|0,h|0)|0;g=i;d=0;break}else{c[u>>2]=31984;c[u+4>>2]=38842;c[u+8>>2]=31517;Db(14,32001,u);d=14;break}}else d=0;while(0);a[b+g>>0]=0;k=b;g=j;i=0}else{k=d;d=0;i=1}else{k=uu()|0;if((c[k>>2]|0)==2){k=d;d=0;i=1}else{C=4;break}}if((d|0)!=0|(k|0)==(f|0)){if(i){C=36;break}}else{d=(k|0)==0;if(d)h=0;else h=(Eu(k)|0)&1073741823;if((a[k>>0]|0)==47)d=0;else{if(!(Xa[c[2376>>2]&255](f,o)|0)){C=27;break}if(p)d=0;else d=(Eu(f)|0)&1073741823;a[f+d>>0]=47;d=d+1|0}if((d+h|0)>=(e|0)){C=32;break}c[z>>2]=k;Cb(e-d|0,f+d|0,31408,z)|0;if(i){d=0;C=36;break}else d=0}if(!d)d=f;else break}if((C|0)==4){c[q>>2]=31984;c[q+4>>2]=38819;c[q+8>>2]=31517;Db(14,32001,q);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[v>>2]=38819;c[v+4>>2]=f;c[v+8>>2]=31888;c[v+12>>2]=(d|0)==0?59952:d;c[v+16>>2]=A;Db(14,31953,v);d=14;C=36}else if((C|0)==9){c[r>>2]=31984;c[r+4>>2]=38830;c[r+8>>2]=31517;Db(14,32001,r);d=14;C=34}else if((C|0)==11){c[s>>2]=31984;c[s+4>>2]=38836;c[s+8>>2]=31517;Db(14,32001,s);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[t>>2]=38836;c[t+4>>2]=f;c[t+8>>2]=31879;c[t+12>>2]=(d|0)==0?59952:d;c[t+16>>2]=A;Db(14,31953,t);d=14;C=34}else if((C|0)==27){c[w>>2]=31984;c[w+4>>2]=38762;c[w+8>>2]=31517;Db(14,32001,w);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[x>>2]=38762;c[x+4>>2]=f;c[x+8>>2]=31708;c[x+12>>2]=d?59952:k;c[x+16>>2]=A;Db(14,31953,x);d=14;C=34}else if((C|0)==32){a[f+d>>0]=0;c[y>>2]=31984;c[y+4>>2]=38771;c[y+8>>2]=31517;Db(14,32001,y);d=14;C=34}if(!b){Ra=B;return d|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=B;return d|0}else{C=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=B;return d|0}return 0}function Nb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+32|0;h=i+8|0;g=i;b=i+28|0;gw(e|0,0,d|0)|0;f=Ju()|0;c[14796]=f;while(1){f=Ya[c[2340>>2]&127](32144,524288,420)|0;if((f|0)<0){f=uu()|0;if((c[f>>2]|0)!=4){j=8;break}}else{if((f|0)>2)break;Wa[c[2352>>2]&127](f)|0;c[g>>2]=32144;c[g+4>>2]=f;Db(28,31900,g);if((Ya[c[2340>>2]&127](31943,0,0)|0)<0){j=8;break}}}if((j|0)==8){La(b|0)|0;j=c[b>>2]|0;a[e>>0]=j;a[e+1>>0]=j>>8;a[e+2>>0]=j>>16;a[e+3>>0]=j>>24;j=e+4|0;e=c[14796]|0;a[j>>0]=e;a[j+1>>0]=e>>8;a[j+2>>0]=e>>16;a[j+3>>0]=e>>24;j=8;Ra=i;return j|0}do{if((Ya[c[2436>>2]&127](f,e,d)|0)>=0)break;j=uu()|0}while((c[j>>2]|0)==4);if(!(Wa[c[2352>>2]&127](f)|0)){j=d;Ra=i;return j|0}e=uu()|0;e=c[e>>2]|0;j=dv(e)|0;c[h>>2]=38966;c[h+4>>2]=e;c[h+8>>2]=31695;c[h+12>>2]=59952;c[h+16>>2]=j;Db(4106,31953,h);j=d;Ra=i;return j|0}function Ob(a,b){a=a|0;b=b|0;b=(b+999999|0)/1e6|0;Av(b)|0;return b*1e6|0}function Pb(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0;a=Ra;Ra=Ra+16|0;e=a;Da(e|0,0)|0;h=c[e>>2]|0;h=Yv(h|0,((h|0)<0)<<31>>31|0,1e3,0)|0;h=Sv(h|0,L()|0,1045635584,49096)|0;f=L()|0;e=(c[e+4>>2]|0)/1e3|0;e=Sv(h|0,f|0,e|0,((e|0)<0)<<31>>31|0)|0;d=(+(e>>>0)+4294967296.0*+(L()|0))/864.0e5;g[b>>3]=d;Ra=a;return 0}function Qb(a,b,d){a=a|0;b=b|0;d=d|0;d=uu()|0;return c[d>>2]|0}function Rb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=Ra;Ra=Ra+16|0;e=a;Da(e|0,0)|0;f=c[e>>2]|0;f=Yv(f|0,((f|0)<0)<<31>>31|0,1e3,0)|0;f=Sv(f|0,L()|0,1045635584,49096)|0;d=L()|0;e=(c[e+4>>2]|0)/1e3|0;e=Sv(f|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;d=L()|0;c[b>>2]=e;c[b+4>>2]=d;Ra=a;return 0}function Sb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b|0){do if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(!(Bu(b,c[632]|0)|0))e=16;else{if(!(Bu(b,c[635]|0)|0)){e=17;break}if(!(Bu(b,c[638]|0)|0)){e=18;break}if(!(Bu(b,c[641]|0)|0)){e=19;break}if(!(Bu(b,c[644]|0)|0)){e=20;break}if(!(Bu(b,c[647]|0)|0)){e=21;break}if(!(Bu(b,c[650]|0)|0)){e=22;break}if(!(Bu(b,c[653]|0)|0)){e=23;break}if(!(Bu(b,c[656]|0)|0)){e=24;break}if(!(Bu(b,c[659]|0)|0)){e=25;break}if(!(Bu(b,c[662]|0)|0)){e=26;break}if(!(Bu(b,c[665]|0)|0)){e=27;break}if(!(Bu(b,c[668]|0)|0)){e=28;break}else a=12;return a|0}else e=15;else e=14;else e=13;else e=12;else e=11;else e=10;else e=9;else e=8;else e=7;else e=6;else e=5;else e=4;else e=3;else e=2;else e=1;else e=0;while(0);b=2336+(e*12|0)+8|0;a=c[b>>2]|0;if(!a){a=c[2336+(e*12|0)+4>>2]|0;c[b>>2]=a}c[2336+(e*12|0)+4>>2]=(d|0)==0?a:d;d=0;return d|0}a=c[586]|0;if(a|0)c[585]=a;a=c[589]|0;if(a|0)c[588]=a;a=c[592]|0;if(a|0)c[591]=a;a=c[595]|0;if(a|0)c[594]=a;a=c[598]|0;if(a|0)c[597]=a;a=c[601]|0;if(a|0)c[600]=a;a=c[604]|0;if(a|0)c[603]=a;a=c[607]|0;if(a|0)c[606]=a;a=c[610]|0;if(a|0)c[609]=a;a=c[613]|0;if(a|0)c[612]=a;a=c[616]|0;if(a|0)c[615]=a;a=c[619]|0;if(a|0)c[618]=a;a=c[622]|0;if(a|0)c[621]=a;a=c[625]|0;if(a|0)c[624]=a;a=c[628]|0;if(a|0)c[627]=a;a=c[631]|0;if(a|0)c[630]=a;a=c[634]|0;if(a|0)c[633]=a;a=c[637]|0;if(a|0)c[636]=a;a=c[640]|0;if(a|0)c[639]=a;a=c[643]|0;if(a|0)c[642]=a;a=c[646]|0;if(a|0)c[645]=a;a=c[649]|0;if(a|0)c[648]=a;a=c[652]|0;if(a|0)c[651]=a;a=c[655]|0;if(a|0)c[654]=a;a=c[658]|0;if(a|0)c[657]=a;a=c[661]|0;if(a|0)c[660]=a;a=c[664]|0;if(a|0)c[663]=a;a=c[667]|0;if(a|0)c[666]=a;a=c[670]|0;if(!a){d=0;return d|0}c[669]=a;d=0;return d|0}function Tb(a,b){a=a|0;b=b|0;do if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(Bu(b,c[632]|0)|0)if(Bu(b,c[635]|0)|0)if(!(Bu(b,c[638]|0)|0))a=18;else{if(!(Bu(b,c[641]|0)|0)){a=19;break}if(!(Bu(b,c[644]|0)|0)){a=20;break}if(!(Bu(b,c[647]|0)|0)){a=21;break}if(!(Bu(b,c[650]|0)|0)){a=22;break}if(!(Bu(b,c[653]|0)|0)){a=23;break}if(!(Bu(b,c[656]|0)|0)){a=24;break}if(!(Bu(b,c[659]|0)|0)){a=25;break}if(!(Bu(b,c[662]|0)|0)){a=26;break}if(!(Bu(b,c[665]|0)|0)){a=27;break}if(!(Bu(b,c[668]|0)|0)){a=28;break}else a=0;return a|0}else a=17;else a=16;else a=15;else a=14;else a=13;else a=12;else a=11;else a=10;else a=9;else a=8;else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;while(0);b=c[2336+(a*12|0)+4>>2]|0;return b|0}function Ub(a,b){a=a|0;b=b|0;var d=0;do if(b)if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(Bu(b,c[632]|0)|0)if(!(Bu(b,c[635]|0)|0))a=17;else{if(!(Bu(b,c[638]|0)|0)){a=18;break}if(!(Bu(b,c[641]|0)|0)){a=19;break}if(!(Bu(b,c[644]|0)|0)){a=20;break}if(!(Bu(b,c[647]|0)|0)){a=21;break}if(!(Bu(b,c[650]|0)|0)){a=22;break}if(!(Bu(b,c[653]|0)|0)){a=23;break}if(!(Bu(b,c[656]|0)|0)){a=24;break}if(!(Bu(b,c[659]|0)|0)){a=25;break}if(!(Bu(b,c[662]|0)|0)){a=26;break}if(!(Bu(b,c[665]|0)|0)){a=27;break}else a=0;return a|0}else a=16;else a=15;else a=14;else a=13;else a=12;else a=11;else a=10;else a=9;else a=8;else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;else a=-1;while(0);while(1){b=a;a=a+1|0;if(c[2336+(a*12|0)+4>>2]|0)break;if((b|0)>=27){a=0;d=8;break}}if((d|0)==8)return a|0;d=c[2336+(a*12|0)>>2]|0;return d|0}function Vb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=Ra;Ra=Ra+16|0;f=g;c[a+64>>2]=b;Le(a,b);if(!d){Xb(a,b);Ra=g;return}b=a+260|0;if((c[b>>2]|0)==0?(h=wd(a)|0,c[b>>2]=h,(h|0)==0):0){Ra=g;return}c[f>>2]=e;a=Me(a,d,f)|0;b=c[b>>2]|0;if(b|0)yc(b,a,-1,1,116)|0;Ra=g;return}function Wb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Sv(a|0,b|0,-1,-1)|0;d=L()|0;if(d>>>0>0|(d|0)==0&e>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](a)|0;if(!b){e=0;return e|0}}else{b=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){f=c[14978]|0;e=Tv(d|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=f>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){f=0;return f|0}d=Wa[c[29352>>2]&127](b)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}gw(b|0,0,a|0)|0;f=b;return f|0}function Xb(a,b){a=a|0;b=b|0;c[a+64>>2]=b;if(b|0){Ne(a,b);return}if(!(c[a+260>>2]|0))return;Ne(a,0);return}function Yb(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;v=F;D=d+24|0;i=c[D>>2]|0;h=c[i+4>>2]|0;c[h+4>>2]=c[i>>2];E=d+28|0;g=c[E>>2]|0;switch(g|0){case 6:case 0:case 5:break;default:{E=g;Ra=F;return E|0}}u=c[h>>2]|0;x=d+4|0;w=c[c[(c[x>>2]|0)+4>>2]>>2]|0;if((c[d>>2]|0)!=0?(a[h+20>>0]|0)==2:0){C=0;g=5}else if(!(a[i+8>>0]|0)){C=1;g=Zb(i,0,0)|0}else{C=0;g=0}o=d+12|0;if((c[o>>2]|g|0)==0?(t=c[x>>2]|0,j=c[(c[(c[D>>2]|0)+4>>2]|0)+32>>2]|0,p=c[t+4>>2]|0,c[p+4>>2]=c[t>>2],(b[p+22>>1]&2)==0):0){k=p+32|0;l=p+36|0;m=(c[k>>2]|0)-(c[l>>2]|0)|0;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[k>>2]=j,q=p+80|0,n=c[q>>2]|0,n|0):0){i=n+-4|0;c[q>>2]=i;h=i;do if((c[14816]|0)>>>0<=h>>>0)if((c[14817]|0)>>>0>h>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{h=Wa[c[29352>>2]&127](i)|0;B=16;break}else{h=Wa[c[29352>>2]&127](i)|0;B=16}while(0);do if((B|0)==16){c[14980]=(c[14980]|0)-h;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[q>>2]=0}t=Se(c[p>>2]|0,k,m)|0;c[l>>2]=(c[k>>2]|0)-(m&65535);if((t|0)==7)g=7;else B=21}else B=21;if((B|0)==21)if(!g)if(!(c[o>>2]|0)){g=Zb(c[x>>2]|0,2,d+8|0)|0;if(!g){c[o>>2]=1;g=0}}else g=0;l=c[(c[D>>2]|0)+4>>2]|0;t=c[l+32>>2]|0;n=c[(c[x>>2]|0)+4>>2]|0;s=c[n+32>>2]|0;n=(a[(c[n>>2]|0)+5>>0]|0)==5;g=(t|0)==(s|0)|(g|0)==0&n^1?g:8;l=c[l+44>>2]|0;a:do if(e){j=d+16|0;k=u+204|0;i=0;h=c[j>>2]|0;do{if(!((g|0)==0&h>>>0<=l>>>0))break a;if((h|0)==((1073741824/((c[(c[(c[D>>2]|0)+4>>2]|0)+32>>2]|0)>>>0)|0)+1|0))g=0;else{g=Za[c[k>>2]&127](u,h,v,2)|0;do if(!g){g=_b(d,h,c[(c[v>>2]|0)+4>>2]|0,0)|0;h=c[v>>2]|0;if(h)if(!(b[h+28>>1]&32)){Df(h);break}else{q=c[h+20>>2]|0;p=q+120|0;c[p>>2]=(c[p>>2]|0)+-1;q=q+136|0;c[h+16>>2]=c[q>>2];c[q>>2]=h;break}}while(0);h=c[j>>2]|0}h=h+1|0;c[j>>2]=h;i=i+1|0}while(i>>>0<e>>>0)}while(0);switch(g|0){case 0:{c[d+36>>2]=l;e=c[d+16>>2]|0;c[d+32>>2]=l+1-e;if(e>>>0<=l>>>0){f=d+40|0;if(!(c[f>>2]|0)){A=(c[c[(c[D>>2]|0)+4>>2]>>2]|0)+88|0;c[d+44>>2]=c[A>>2];c[A>>2]=d;c[f>>2]=1;f=0}else f=0}else B=40;break}case 101:{B=40;break}default:f=g}b:do if((B|0)==40){if(!l){e=c[x>>2]|0;g=c[e+4>>2]|0;c[g+4>>2]=c[e>>2];c[g+44>>2]=0;g=Rf(g)|0;switch(g|0){case 0:case 101:{m=1;break}default:{f=g;break b}}}else m=l;i=c[x>>2]|0;h=(c[d+8>>2]|0)+1|0;j=c[i+4>>2]|0;c[j+4>>2]=c[i>>2];j=c[j+12>>2]|0;i=c[j+56>>2]|0;j=c[j+72>>2]|0;k=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){r=Ve(j)|0;B=50}}else B=46;do if((B|0)==46){g=c[k+40>>2]|0;if(g|0){f=g;break b}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){r=Wf(j)|0;B=50;break}else{r=Xf(j)|0;B=50;break}}while(0);if((B|0)==50?r|0:0){f=r;break}a[i+40>>0]=h>>>24;a[i+41>>0]=h>>>16;a[i+42>>0]=h>>>8;a[i+43>>0]=h;g=c[d>>2]|0;if(g|0)$b(g);c:do if(n){i=c[x>>2]|0;g=c[i+4>>2]|0;l=g+22|0;b[l>>1]=b[l>>1]&-33;h=Zb(i,0,0)|0;d:do if(!h){h=g+12|0;j=c[(c[h>>2]|0)+56>>2]|0;k=j+18|0;if(!((a[k>>0]|0)==2?(a[j+19>>0]|0)==2:0)){g=Zb(i,2,0)|0;if(g|0){f=g;break}g=c[(c[h>>2]|0)+72>>2]|0;h=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[h+96>>2]|0){f=Ve(g)|0;B=66}}else B=62;do if((B|0)==62){f=c[h+40>>2]|0;if(f|0)break d;if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(g)|0;B=66;break}else{f=Xf(g)|0;B=66;break}}while(0);if((B|0)==66?f|0:0)break;a[k>>0]=2;a[j+19>>0]=2}b[l>>1]=b[l>>1]&-33;break c}else f=h;while(0);b[l>>1]=b[l>>1]&-33;break b}while(0);if((t|0)<(s|0)){f=(s|0)/(t|0)|0;f=(m+-1+f|0)/(f|0)|0;g=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0;f=f+(((f|0)==((1073741824/(g>>>0)|0)+1|0))<<31>>31)|0;n=((t|0)<0)<<31>>31;o=Yv(m|0,((m|0)<0)<<31>>31|0,t|0,n|0)|0;p=L()|0;q=w+60|0;m=c[q>>2]|0;j=c[w+24>>2]|0;if(f>>>0<=j>>>0){k=w+204|0;i=f;f=0;h=1073741824;while(1){if((i|0)!=(((h>>>0)/(g>>>0)|0)+1|0)){f=Za[c[k>>2]&127](w,i,v,0)|0;do if(!f){g=c[v>>2]|0;h=c[g+20>>2]|0;do if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(!(c[h+96>>2]|0)){f=0;break}f=Ve(g)|0}else B=79;while(0);do if((B|0)==79){B=0;f=c[h+40>>2]|0;if(!f)if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(g)|0;break}else{f=Xf(g)|0;break}}while(0);g=c[v>>2]|0;if(g)if(!(b[g+28>>1]&32)){Df(g);break}else{d=c[g+20>>2]|0;r=d+120|0;c[r>>2]=(c[r>>2]|0)+-1;d=d+136|0;c[g+16>>2]=c[d>>2];c[d>>2]=g;break}}while(0)}g=i+1|0;h=(f|0)==0;if(g>>>0>j>>>0|h^1)break;i=g;h=1073741824;g=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0}if(h)B=91}else B=91;if((B|0)==91)f=ac(w,0,1)|0;k=1073741824+s|0;l=((k|0)<0)<<31>>31;h=(p|0)>(l|0)|(p|0)==(l|0)&o>>>0>k>>>0;k=h?k:o;l=h?l:p;h=1073741824+t|0;i=((h|0)<0)<<31>>31;g=(f|0)==0;if(((l|0)>(i|0)|(l|0)==(i|0)&k>>>0>h>>>0)&g){j=u+204|0;do{c[v>>2]=0;f=Wv(h|0,i|0,t|0,n|0)|0;L()|0;f=Za[c[j>>2]&127](u,f+1|0,v,0)|0;if(!f)f=_a[c[(c[m>>2]|0)+12>>2]&127](m,c[(c[v>>2]|0)+4>>2]|0,t,h,i)|0;g=c[v>>2]|0;do if(g|0)if(!(b[g+28>>1]&32)){Df(g);break}else{s=c[g+20>>2]|0;d=s+120|0;c[d>>2]=(c[d>>2]|0)+-1;s=s+136|0;c[g+16>>2]=c[s>>2];c[s>>2]=g;break}while(0);h=Sv(h|0,i|0,t|0,n|0)|0;i=L()|0;g=(f|0)==0}while(((i|0)<(l|0)|(i|0)==(l|0)&h>>>0<k>>>0)&g)}if(!g)break;f=Xa[c[(c[m>>2]|0)+24>>2]&255](m,v)|0;u=c[v+4>>2]|0;if((f|0)==0&((u|0)>(p|0)|((u|0)==(p|0)?(c[v>>2]|0)>>>0>o>>>0:0)))f=Ya[c[(c[m>>2]|0)+16>>2]&127](m,o,p)|0;if(f|0)break;f=c[q>>2]|0;g=c[f>>2]|0;if(g|0){f=Ya[c[g+40>>2]&127](f,21,0)|0;switch(f|0){case 0:case 12:break;default:break b}}if((a[w+7>>0]|0)==0?(z=c[q>>2]|0,A=a[w+10>>0]|0,A<<24>>24):0){y=Xa[c[(c[z>>2]|0)+20>>2]&255](z,A&255)|0;B=111}}else{y=G((t|0)/(s|0)|0,m)|0;c[w+24>>2]=y;y=ac(w,0,0)|0;B=111}if((B|0)==111?y|0:0){f=y;break}f=bc(c[x>>2]|0,0)|0;f=(f|0)==0?101:f}while(0);if(C|0){cc(c[D>>2]|0,0)|0;bc(c[D>>2]|0,0)|0}D=(f|0)==3082?7:f;c[E>>2]=D;E=D;Ra=F;return E|0}function Zb(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;X=Ra;Ra=Ra+16|0;Q=X;K=X+12|0;W=c[e+4>>2]|0;m=c[e>>2]|0;P=W+4|0;c[P>>2]=m;U=e+8|0;n=a[U>>0]|0;do if(n<<24>>24!=2?(R=(f|0)!=0,R|n<<24>>24!=1):0){if(!(0==0?(c[m+32>>2]&33554432|0)==0:0)?(a[(c[W>>2]|0)+14>>0]|0)==0:0){T=W+22|0;b[T>>1]=b[T>>1]&-2}L=W+22|0;q=b[L>>1]|0;if(R&(q&1)!=0){e=8;Ra=X;return e|0}a:do if(R)if((q&128)==0&(a[W+20>>0]|0)!=2){if((f|0)>1?(o=c[W+72>>2]|0,o|0):0){m=o;do{n=c[m>>2]|0;if((n|0)!=(e|0)){p=n;J=16;break a}m=c[m+12>>2]|0}while((m|0)!=0)}}else J=10;else if(q&128)J=10;while(0);if((J|0)==10){p=c[W+76>>2]|0;J=16}if((J|0)==16?c[p>>2]|0:0){e=262;Ra=X;return e|0}I=e+9|0;b:do if(a[I>>0]|0){if(!((q&64)==0?1:(c[W+76>>2]|0)==(e|0))){e=262;Ra=X;return e|0}m=c[W+72>>2]|0;if(m|0){while(1){if(((c[m>>2]|0)!=(e|0)?(c[m+4>>2]|0)==1:0)?(a[m+8>>0]|0)!=1:0){h=262;break}m=c[m+12>>2]|0;if(!m)break b}Ra=X;return h|0}}while(0);b[L>>1]=q&-17;T=W+44|0;if(!(c[T>>2]|0))b[L>>1]=q|16;G=W+12|0;H=W+20|0;v=W+36|0;w=W+24|0;x=W+26|0;y=W+28|0;z=W+30|0;A=W+21|0;B=W+32|0;C=W+80|0;D=W+17|0;E=W+18|0;F=(f|0)<2;n=0;c:while(1){d:do if(!(c[G>>2]|0)){e:while(1){m=Sf(c[W>>2]|0)|0;if(m|0){J=135;break d}m=c[W>>2]|0;m=Za[c[m+204>>2]&127](m,1,K,0)|0;if(m|0){J=35;break}n=c[K>>2]|0;m=c[n+8>>2]|0;o=m+4|0;if((c[o>>2]|0)==1)s=c[m+56>>2]|0;else{s=c[n+4>>2]|0;c[m+56>>2]=s;c[m+72>>2]=n;c[m+52>>2]=W;c[o>>2]=1;a[m+9>>0]=100}t=m;n=d[s+29>>0]<<16|d[s+28>>0]<<24|d[s+30>>0]<<8|d[s+31>>0];u=c[W>>2]|0;r=c[u+24>>2]|0;if(!((n|0)!=0?(Lu(s+24|0,s+92|0,4)|0)==0:0))n=r;p=c[(c[P>>2]|0)+32>>2]|0;q=(p&33554432|0)==0&0==0?n:0;do if(!q){n=c[v>>2]|0;J=85}else{if(Lu(s,2720,16)|0){n=26;break e}if((d[s+18>>0]|0)>2)b[L>>1]=b[L>>1]|1;n=a[s+19>>0]|0;if((n&255)>2){n=26;break e}do if(n<<24>>24==2){if(b[L>>1]&32){J=62;break}if(a[u+12>>0]|0){J=62;break}if(c[u+216>>2]|0){J=62;break}n=c[c[u+60>>2]>>2]|0;if(a[u+13>>0]|0){n=14;break e}if(!(a[u+4>>0]|0)){if((c[n>>2]|0)<=1){n=14;break e}if(!(c[n+52>>2]|0)){n=14;break e}}n=c[u+64>>2]|0;o=c[n>>2]|0;if(o|0){Wa[c[o+4>>2]&127](n)|0;c[n>>2]=0}n=Uf(u)|0;if(n|0)break e;a[u+5>>0]=5;a[u+16>>0]=0;u=c[m+72>>2]|0;m=c[u+20>>2]|0;Df(u);if(c[(c[m+212>>2]|0)+12>>2]|0)break;f:do switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(a[m+4>>0]|0)break f;uf(m,0,0)|0;break}default:tf(m)|0}while(0);vf(m)}else J=62;while(0);if((J|0)==62){J=0;if(Lu(s+21|0,32387,3)|0){n=26;break e}o=d[s+17>>0]<<16|d[s+16>>0]<<8;if((o+-257|0)>>>0>65279|(o+16777215&o|0)!=0){n=26;break e}b[L>>1]=b[L>>1]|2;u=d[s+20>>0]|0;n=o-u|0;if((o|0)==(c[B>>2]|0)){if(((p&268435457|0)!=1|0!=0)&q>>>0>r>>>0){J=82;break e}if(n>>>0<480){n=26;break e}c[B>>2]=o;c[v>>2]=n;a[D>>0]=(d[s+53>>0]<<16|d[s+52>>0]<<24|d[s+54>>0]<<8|d[s+55>>0]|0)!=0&1;a[E>>0]=(d[s+65>>0]<<16|d[s+64>>0]<<24|d[s+66>>0]<<8|d[s+67>>0]|0)!=0&1;J=85;break}t=c[m+72>>2]|0;m=c[t+20>>2]|0;Df(t);if(!(c[(c[m+212>>2]|0)+12>>2]|0)){g:do switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(a[m+4>>0]|0)break g;uf(m,0,0)|0;break}default:tf(m)|0}while(0);vf(m)}c[v>>2]=n;c[B>>2]=o;m=c[C>>2]|0;if(m|0){n=m+-4|0;c[C>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;J=77;break}else{m=Wa[c[29352>>2]&127](n)|0;J=77}while(0);do if((J|0)==77){J=0;c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{t=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[C>>2]=0}m=Se(c[W>>2]|0,B,u)|0;if(m|0){J=135;break d}}m=c[G>>2]|0}while(0);if((J|0)==85){J=0;u=((((n<<6)+-768|0)>>>0)/255|0)+65513|0;s=u&65535;b[w>>1]=s;r=((((n<<5)+-384|0)>>>0)/255|0)+65513&65535;b[x>>1]=r;b[y>>1]=n+65501;b[z>>1]=r;a[A>>0]=(s&65535)>127?127:u&255;c[G>>2]=t;c[T>>2]=q}if(m|0){n=0;J=96;break d}}if((J|0)==35){J=135;break}else if((J|0)==82){c[Q>>2]=32306;c[Q+4>>2]=66365;c[Q+8>>2]=31517;Db(11,32001,Q);n=11}J=c[m+72>>2]|0;m=c[J+20>>2]|0;Df(J);if(!(c[(c[m+212>>2]|0)+12>>2]|0)){switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[m+4>>0]|0))uf(m,0,0)|0;break}default:tf(m)|0}vf(m)}c[G>>2]=0;m=n;J=135}else J=96;while(0);h:do if((J|0)==96){J=0;i:do if(R&(n|0)==0){if(b[L>>1]&1){m=8;J=135;break h}u=c[W>>2]|0;n=c[u+40>>2]|0;j:do if(!n){a[u+21>>0]=(a[(c[e>>2]|0)+80>>0]|0)==2&1;t=u+16|0;if((a[t>>0]|0)==1){p=u+216|0;m=c[p>>2]|0;k:do if(!m){s=u+17|0;m=a[s>>0]|0;l:do switch(m<<24>>24){case 0:case 1:case 5:{if(!(a[u+13>>0]|0)){n=c[u+60>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,2)|0;if(n|0){J=132;break j}m=a[s>>0]|0}if(m<<24>>24==5){m=5;break l}a[s>>0]=2;m=2;break}default:{}}while(0);if(!F){o=u+13|0;p=u+60|0;q=u+176|0;r=u+180|0;m:while(1){switch(m<<24>>24){case 0:case 1:case 2:case 3:case 5:break;default:break k}if(a[o>>0]|0)break;n=c[p>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,4)|0;switch(n|0){case 0:break m;case 5:break;default:{J=132;break j}}if(!(Wa[c[q>>2]&127](c[r>>2]|0)|0)){m=5;J=135;break h}m=a[s>>0]|0}a[s>>0]=4}}else{do if(a[u+4>>0]|0){n=m+43|0;if(a[n>>0]|0)break;o=u+17|0;n:do switch(a[o>>0]|0){case 0:case 1:case 2:case 3:case 5:{if(a[u+13>>0]|0){a[o>>0]=4;J=108;break n}n=c[u+60>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,4)|0;if(n|0){J=132;break j}m=c[p>>2]|0;n=m+43|0;s=a[n>>0]|0;a[o>>0]=4;if(!(s<<24>>24))J=108;break}default:J=108}while(0);if((J|0)==108){J=c[m+4>>2]|0;Za[c[(c[J>>2]|0)+56>>2]&127](J,(b[m+40>>1]|0)+3|0,1,5)|0;m=c[p>>2]|0}a[n>>0]=1}while(0);if(a[m+46>>0]|0){m=8;J=135;break h}n=m+43|0;if((a[n>>0]|0)==0?(M=c[m+4>>2]|0,M=Za[c[(c[M>>2]|0)+56>>2]&127](M,0,1,10)|0,M|0):0){n=M;J=132;break j}o=m+44|0;a[o>>0]=1;if(!(Lu(m+52|0,c[c[m+32>>2]>>2]|0,48)|0))break;if(!(a[n>>0]|0)){J=c[m+4>>2]|0;Za[c[(c[J>>2]|0)+56>>2]&127](J,0,1,9)|0}a[o>>0]=0;J=134;break j}while(0);a[t>>0]=2;J=c[u+24>>2]|0;c[u+36>>2]=J;c[u+32>>2]=J;c[u+28>>2]=J;J=u+72|0;c[J>>2]=0;c[J+4>>2]=0;J=133}else J=133}else J=132;while(0);if((J|0)==132){J=0;switch(n|0){case 0:{J=133;break}case 517:{J=134;break}default:break i}}if((J|0)==133){J=0;n=Rf(W)|0;break}else if((J|0)==134){m=(a[H>>0]|0)==0?5:517;J=135;break h}}while(0);if(!n){n=0;break c}else s=0}while(0);if((J|0)==135){J=0;n=m;s=(m|0)==0}if(((a[H>>0]|0)==0?(N=c[G>>2]|0,N|0):0)?(c[G>>2]=0,u=c[N+72>>2]|0,O=c[u+20>>2]|0,Df(u),(c[(c[O+212>>2]|0)+12>>2]|0)==0):0){switch(a[O+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[O+4>>0]|0))uf(O,0,0)|0;break}default:tf(O)|0}vf(O)}if((n&255|0)!=5){J=156;break}if(a[H>>0]|0){J=156;break}o=c[P>>2]|0;m=c[(c[W>>2]|0)+60>>2]|0;p=c[o+396>>2]|0;if(!p){J=154;break}r=o+404|0;q=c[r>>2]|0;if((q|0)<0){J=154;break}if(!(a[o+408>>0]|0))m=Xa[p&255](c[o+400>>2]|0,q)|0;else m=Ya[p&127](c[o+400>>2]|0,q,m)|0;if(!m){J=153;break}c[r>>2]=(c[r>>2]|0)+1}if((J|0)==153){c[r>>2]=-1;if(!s){e=n;Ra=X;return e|0}}else if((J|0)==154){if(!s){e=n;Ra=X;return e|0}}else if((J|0)==156)if(!s){e=n;Ra=X;return e|0}if((a[U>>0]|0)==0?(Q=W+40|0,c[Q>>2]=(c[Q>>2]|0)+1,a[I>>0]|0):0){a[e+40>>0]=1;Q=W+72|0;c[e+44>>2]=c[Q>>2];c[Q>>2]=e+32}m=R?2:1;a[U>>0]=m;if((m&255)>(d[H>>0]|0))a[H>>0]=m;if(R?(S=c[G>>2]|0,c[W+76>>2]=e,h=b[L>>1]|0,b[L>>1]=(f|0)>1?h|64:h&-65,h=c[T>>2]|0,V=S+56|0,j=c[V>>2]|0,i=j+28|0,l=j+29|0,k=j+30|0,j=j+31|0,(h|0)!=(d[l>>0]<<16|d[i>>0]<<24|d[k>>0]<<8|d[j>>0]|0)):0){m=c[S+72>>2]|0;n=c[m+20>>2]|0;if((b[m+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[m+24>>2]|0)>>>0:0){if(c[n+96>>2]|0){h=Ve(m)|0;J=172}}else J=168;do if((J|0)==168){h=c[n+40>>2]|0;if(h|0){e=h;Ra=X;return e|0}if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){h=Wf(m)|0;J=172;break}else{h=Xf(m)|0;J=172;break}}while(0);do if((J|0)==172)if(!h){i=c[V>>2]|0;l=i+29|0;k=i+30|0;j=i+31|0;i=i+28|0;h=c[T>>2]|0;break}else{e=h;Ra=X;return e|0}while(0);a[i>>0]=h>>>24;a[l>>0]=h>>>16;a[k>>0]=h>>>8;a[j>>0]=h;break}if(n|0){e=n;Ra=X;return e|0}}while(0);if(g|0){V=c[(c[W+12>>2]|0)+56>>2]|0;c[g>>2]=d[V+41>>0]<<16|d[V+40>>0]<<24|d[V+42>>0]<<8|d[V+43>>0]}if(!f){e=0;Ra=X;return e|0}i=c[W>>2]|0;h=c[(c[e>>2]|0)+452>>2]|0;if((c[i+96>>2]|0)>=(h|0)){e=0;Ra=X;return e|0}if(!(a[i+6>>0]|0)){e=0;Ra=X;return e|0}e=Vf(i,h)|0;Ra=X;return e|0}function _b(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;w=z;x=d+4|0;q=c[(c[x>>2]|0)+4>>2]|0;v=c[q>>2]|0;u=d+24|0;r=c[(c[(c[u>>2]|0)+4>>2]|0)+32>>2]|0;q=c[q+32>>2]|0;s=(r|0)<(q|0)?r:q;t=((r|0)<0)<<31>>31;o=Yv(r|0,t|0,e|0,0)|0;p=L()|0;if((r|0)==(q|0))d=0;else d=(a[v+12>>0]|0)==0?0:8;if(!((r|0)>0&(d|0)==0)){y=d;Ra=z;return y|0}e=Tv(o|0,p|0,r|0,t|0)|0;m=((q|0)<0)<<31>>31;n=v+204|0;l=(g|0)==0;g=L()|0;d=q;while(1){c[w>>2]=0;j=Wv(e|0,g|0,q|0,m|0)|0;k=L()|0;do if((1073741824/(d>>>0)|0|0)!=(j|0)){d=Za[c[n>>2]&127](v,j+1|0,w,0)|0;a:do if(!d){h=c[w>>2]|0;i=c[h+20>>2]|0;if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0))d=h;else{d=Ve(h)|0;y=15}else y=11;do if((y|0)==11){y=0;d=c[i+40>>2]|0;if(d|0)break a;if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){d=Wf(h)|0;y=15;break}else{d=Xf(h)|0;y=15;break}}while(0);if((y|0)==15){y=0;if(d|0)break;d=c[w>>2]|0}i=Zv(e|0,g|0,r|0,t|0)|0;L()|0;h=c[d+4>>2]|0;d=Yv(j|0,k|0,q|0,m|0)|0;d=Tv(e|0,g|0,d|0,L()|0)|0;L()|0;d=h+d|0;ew(d|0,f+i|0,s|0)|0;a[c[(c[w>>2]|0)+8>>2]>>0]=0;if(l&((e|0)==0&(g|0)==0)){d=d+28|0;k=c[(c[(c[u>>2]|0)+4>>2]|0)+44>>2]|0;a[d>>0]=k>>>24;a[d+1>>0]=k>>>16;a[d+2>>0]=k>>>8;a[d+3>>0]=k;d=0}else d=0}while(0);h=c[w>>2]|0;if(h)if(!(b[h+28>>1]&32)){Df(h);break}else{k=c[h+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[h+16>>2]=c[k>>2];c[k>>2]=h;break}}else d=0;while(0);e=Sv(e|0,g|0,q|0,m|0)|0;g=L()|0;if(!(((g|0)<(p|0)|(g|0)==(p|0)&e>>>0<o>>>0)&(d|0)==0))break;d=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0}Ra=z;return d|0}function $b(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=a+20|0;e=c[i>>2]|0;f=(e|0)>0;if(f){g=c[a+16>>2]|0;d=0;do{h=c[g+(d<<4)+4>>2]|0;if(h|0)c[(c[h+4>>2]|0)+4>>2]=c[h>>2];d=d+1|0}while((d|0)!=(e|0));if(f){h=a+16|0;d=a+56|0;g=0;do{f=c[(c[h>>2]|0)+(g<<4)+12>>2]|0;do if(f)if(!(c[d>>2]|0)){dh(f);e=c[i>>2]|0;break}else{f=f+78|0;b[f>>1]=b[f>>1]|8;break}while(0);g=g+1|0}while((g|0)<(e|0))}else j=7}else j=7;if((j|0)==7)d=a+56|0;j=a+24|0;c[j>>2]=c[j>>2]&-18;Ti(a);if(c[d>>2]|0)return;Ui(a);return}function ac(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;C=Ra;Ra=Ra+16|0;z=C+8|0;r=C;h=c[e+40>>2]|0;if(h|0){e=h;Ra=C;return e|0}h=c[7389]|0;if(h|0?Wa[h&127](400)|0:0){e=10;Ra=C;return e|0}B=e+16|0;if((d[B>>0]|0)<3){e=0;Ra=C;return e|0}do if(a[e+12>>0]|0){if(c[c[e+60>>2]>>2]|0){i=c[e+212>>2]|0;h=c[i+16>>2]|0;if((h|0)<=-1){n=Yv(h|0,((h|0)<0)<<31>>31|0,-1024,-1)|0;p=L()|0;h=(c[i+28>>2]|0)+(c[i+24>>2]|0)|0;h=Wv(n|0,p|0,h|0,((h|0)<0)<<31>>31|0)|0;L()|0}i=c[i>>2]|0;if(!i){i=0;j=0}else{j=0;do{j=j+1|0;i=c[i+32>>2]|0}while((i|0)!=0);i=Yv(j|0,0,100,0)|0;j=L()|0}if(h|0?(p=Wv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0,L()|0,(p|0)>=25):0){A=18;break}}h=c[e+88>>2]|0;if(h|0)do{c[h+16>>2]=1;h=c[h+44>>2]|0}while((h|0)!=0)}else A=18;while(0);do if((A|0)==18){if(!(c[e+216>>2]|0)){k=e+18|0;if((a[k>>0]|0)==0?c[e+24>>2]|0:0){h=Za[c[e+204>>2]&127](e,1,z,0)|0;a:do if(!h){j=c[z>>2]|0;i=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0))h=j;else{h=Ve(j)|0;A=53}else A=49;do if((A|0)==49){h=c[i+40>>2]|0;if(h|0)break a;if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){h=Wf(j)|0;A=53;break}else{h=Xf(j)|0;A=53;break}}while(0);if((A|0)==53){if(h|0)break;h=c[z>>2]|0;i=c[h+20>>2]|0}o=(d[i+105>>0]<<16|d[i+104>>0]<<24|d[i+106>>0]<<8|d[i+107>>0])+1|0;h=h+4|0;p=c[h>>2]|0;l=o>>>24&255;a[p+24>>0]=l;m=o>>>16&255;a[p+25>>0]=m;n=o>>>8&255;a[p+26>>0]=n;o=o&255;a[p+27>>0]=o;p=c[h>>2]|0;a[p+92>>0]=l;a[p+93>>0]=m;a[p+94>>0]=n;a[p+95>>0]=o;h=c[h>>2]|0;a[h+96>>0]=0;a[h+97>>0]=46;a[h+98>>0]=52;a[h+99>>0]=32;a[k>>0]=1;h=0}while(0);i=c[z>>2]|0;do if(i|0)if(!(b[i+28>>1]&32)){Df(i);break}else{p=c[i+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[i+16>>2]=c[p>>2];c[p>>2]=i;break}while(0);if(h|0){e=h;Ra=C;return e|0}}b:do if(((f|0)!=0?(a[e+5>>0]|0)!=4:0)?(s=e+64|0,q=c[s>>2]|0,(c[q>>2]|0)!=0):0){a[e+19>>0]=1;h=a[f>>0]|0;if(!(h<<24>>24)){i=0;j=0}else{j=0;i=0;do{i=i+(h<<24>>24)|0;j=j+1|0;h=a[f+j>>0]|0}while(h<<24>>24!=0)}p=e+72|0;k=p;h=c[k>>2]|0;k=c[k+4>>2]|0;if(!(a[e+8>>0]|0))l=h;else{if((h|0)==0&(k|0)==0){h=0;k=0}else{o=Sv(h|0,k|0,-1,-1)|0;k=L()|0;h=c[e+148>>2]|0;k=Wv(o|0,k|0,h|0,0)|0;k=Sv(k|0,L()|0,1,0)|0;h=Yv(k|0,L()|0,h|0,0)|0;k=L()|0}l=p;c[l>>2]=h;c[l+4>>2]=k;l=h}h=(1073741824/(c[e+152>>2]|0)|0)+1|0;a[z>>0]=h>>>24;m=z+1|0;a[m>>0]=h>>>16;n=z+2|0;a[n>>0]=h>>>8;o=z+3|0;a[o>>0]=h;h=_a[c[(c[q>>2]|0)+12>>2]&127](q,z,4,l,k)|0;do if(!h){h=c[s>>2]|0;k=Sv(l|0,k|0,4,0)|0;l=L()|0;h=_a[c[(c[h>>2]|0)+12>>2]&127](h,f,j,k,l)|0;if(!h){h=c[s>>2]|0;k=Sv(k|0,l|0,j|0,0)|0;l=L()|0;a[z>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;h=_a[c[(c[h>>2]|0)+12>>2]&127](h,z,4,k,l)|0;if(!h){D=c[s>>2]|0;q=Sv(k|0,l|0,4,0)|0;h=L()|0;a[z>>0]=i>>>24;a[m>>0]=i>>>16;a[n>>0]=i>>>8;a[o>>0]=i;h=_a[c[(c[D>>2]|0)+12>>2]&127](D,z,4,q,h)|0;if(!h){q=c[s>>2]|0;D=Sv(k|0,l|0,8,0)|0;h=L()|0;h=_a[c[(c[q>>2]|0)+12>>2]&127](q,32352,8,D,h)|0;if(!h){q=p;q=Sv(c[q>>2]|0,c[q+4>>2]|0,j+20|0,0)|0;D=L()|0;h=p;c[h>>2]=q;c[h+4>>2]=D;h=c[s>>2]|0;h=Xa[c[(c[h>>2]|0)+24>>2]&255](h,r)|0;if(h|0)break;D=r;r=c[D+4>>2]|0;i=p;h=c[i>>2]|0;i=c[i+4>>2]|0;if(!((r|0)>(i|0)|((r|0)==(i|0)?(c[D>>2]|0)>>>0>h>>>0:0))){A=79;break b}D=c[s>>2]|0;h=Ya[c[(c[D>>2]|0)+16>>2]&127](D,h,i)|0;if(!h)break b;Ra=C;return h|0}}}}}while(0);D=h;Ra=C;return D|0}else A=79;while(0);h=Xe(e,0)|0;if(h|0){D=h;Ra=C;return D|0}h=e+212|0;i=Ye(e,Cf(c[h>>2]|0)|0)|0;if(i|0){D=i;Ra=C;return D|0}o=c[h>>2]|0;h=c[o>>2]|0;if(h|0)do{n=c[h+12>>2]|0;i=n+8|0;j=h+36|0;k=c[j>>2]|0;if((c[i>>2]|0)==(h|0))c[i>>2]=k;l=c[h+32>>2]|0;m=(l|0)==0;if(m){c[n+4>>2]=k;i=k}else{c[l+36>>2]=k;i=c[j>>2]|0}if(!i){c[n>>2]=l;if(m)a[n+33>>0]=2}else c[i+32>>2]=l;D=h+28|0;b[D>>1]=b[D>>1]&-16|1;if((b[h+30>>1]|0)==0?a[n+32>>0]|0:0)cb[c[29440>>2]&255](c[n+44>>2]|0,c[h>>2]|0,0);h=c[o>>2]|0}while((h|0)!=0);h=c[e+24>>2]|0;m=e+32|0;c:do if((h>>>0>(c[m>>2]|0)>>>0?(w=c[e+152>>2]|0,x=h-((h|0)==((1073741824/(w|0)|0)+1|0)&1)|0,y=e+60|0,t=c[y>>2]|0,u=c[t>>2]|0,u|0):0)?((a[B>>0]|0)+-1&255)>2:0){h=Xa[c[u+24>>2]&255](t,z)|0;j=((w|0)<0)<<31>>31;k=Yv(x|0,0,w|0,j|0)|0;l=L()|0;do if(!h){i=z;h=c[i>>2]|0;i=c[i+4>>2]|0;if(!((h|0)==(k|0)&(i|0)==(l|0))){do if((i|0)>(l|0)|(i|0)==(l|0)&h>>>0>k>>>0){v=c[y>>2]|0;v=Ya[c[(c[v>>2]|0)+16>>2]&127](v,k,l)|0;A=107}else{D=Sv(h|0,i|0,w|0,j|0)|0;z=L()|0;if((z|0)>(l|0)|(z|0)==(l|0)&D>>>0>k>>>0)break;D=c[e+208>>2]|0;gw(D|0,0,w|0)|0;z=c[y>>2]|0;A=Tv(k|0,l|0,w|0,j|0)|0;v=L()|0;v=_a[c[(c[z>>2]|0)+12>>2]&127](z,D,w,A,v)|0;A=107}while(0);if((A|0)==107?v|0:0){h=v;break}c[m>>2]=x}break c}while(0);D=h;Ra=C;return D|0}while(0);if(g|0)break;j=e+60|0;h=c[j>>2]|0;i=c[h>>2]|0;d:do if(i|0){h=Ya[c[i+40>>2]&127](h,21,f)|0;switch(h|0){case 0:case 12:break d;default:{}}Ra=C;return h|0}while(0);if(a[e+7>>0]|0)break;h=c[j>>2]|0;i=a[e+10>>0]|0;if(!(i<<24>>24))break;h=Xa[c[(c[h>>2]|0)+20>>2]&255](h,i&255)|0}else{c[z>>2]=0;j=e+212|0;h=Cf(c[j>>2]|0)|0;if(!h){h=Za[c[e+204>>2]&127](e,1,z,0)|0;i=c[z>>2]|0;c[i+16>>2]=0;if(i){h=i;A=21}}else A=21;do if((A|0)==21){h=We(e,h,c[e+24>>2]|0,1)|0;i=c[z>>2]|0;if(i)if(!(b[i+28>>1]&32)){Df(i);break}else{D=c[i+20>>2]|0;A=D+120|0;c[A>>2]=(c[A>>2]|0)+-1;D=D+136|0;c[i+16>>2]=c[D>>2];c[D>>2]=i;break}}while(0);if((h|0)==0?(o=c[j>>2]|0,m=c[o>>2]|0,m|0):0)do{n=c[m+12>>2]|0;j=n+8|0;l=m+36|0;i=c[l>>2]|0;if((c[j>>2]|0)==(m|0))c[j>>2]=i;j=c[m+32>>2]|0;k=(j|0)==0;if(k)c[n+4>>2]=i;else{c[j+36>>2]=i;i=c[l>>2]|0}if(!i){c[n>>2]=j;if(k)a[n+33>>0]=2}else c[i+32>>2]=j;D=m+28|0;b[D>>1]=b[D>>1]&-16|1;if((b[m+30>>1]|0)==0?a[n+32>>0]|0:0)cb[c[29440>>2]&255](c[n+44>>2]|0,c[m>>2]|0,0);m=c[o>>2]|0}while((m|0)!=0)}if(h|0){D=h;Ra=C;return D|0}}while(0);if(c[e+216>>2]|0){D=0;Ra=C;return D|0}a[B>>0]=5;D=0;Ra=C;return D|0}function bc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=a[b+8>>0]|0;if(!(f<<24>>24)){l=0;return l|0}l=c[b+4>>2]|0;c[l+4>>2]=c[b>>2];if(f<<24>>24==2){i=c[l>>2]|0;j=i+40|0;f=c[j>>2]|0;a:do if(!f){g=i+16|0;if(((a[g>>0]|0)==2?a[i+4>>0]|0:0)?(a[i+5>>0]|0)==1:0){a[g>>0]=1;break}f=i+100|0;c[f>>2]=(c[f>>2]|0)+1;f=uf(i,d[i+19>>0]|0,1)|0;switch((f&255)<<24>>24){case 10:case 13:break;default:{h=f;k=10;break a}}c[j>>2]=f;a[g>>0]=6;c[i+204>>2]=(f|0)==0?74:75;h=f;k=10}else{h=f;k=10}while(0);if((k|0)==10?(e|0)==0&(h|0)!=0:0){l=h;return l|0}e=b+20|0;c[e>>2]=(c[e>>2]|0)+-1;a[l+20>>0]=1;l=l+60|0;yf(c[l>>2]|0);c[l>>2]=0}Zf(b);l=0;return l|0}function cc(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+32|0;o=v+16|0;g=v;if((a[e+8>>0]|0)!=2){u=0;Ra=v;return u|0}u=c[e+4>>2]|0;c[u+4>>2]=c[e>>2];do if(a[u+17>>0]|0){t=c[u>>2]|0;k=c[u+8>>2]|0;l=(k|0)==0;if(!l){e=k;do{r=e+1|0;a[r>>0]=a[r>>0]&-5;e=c[e+24>>2]|0}while((e|0)!=0)}if(!(a[u+18>>0]|0)){r=u+44|0;h=c[r>>2]|0;i=h>>>0<2;if(i)e=0;else{e=h+-2|0;e=e-((e>>>0)%(((((c[u+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;e=((e+1|0)==(1073741824/((c[u+32>>2]|0)>>>0)|0|0)?3:2)+e|0}if((e|0)!=(h|0)?(m=1073741824/((c[u+32>>2]|0)>>>0)|0,n=m+1|0,(h|0)!=(n|0)):0){q=u+12|0;p=c[(c[q>>2]|0)+56>>2]|0;p=d[p+37>>0]<<16|d[p+36>>0]<<24|d[p+38>>0]<<8|d[p+39>>0];g=((c[u+36>>2]|0)>>>0)/5|0;j=g+1|0;if(i)e=0;else{e=h+-2|0;e=e-((e>>>0)%(j>>>0)|0)|0;e=((e+1|0)==(m|0)?3:2)+e|0}i=h-p-(((g-h+p+e|0)>>>0)/(g>>>0)|0)|0;i=i+((n>>>0<h>>>0&i>>>0<n>>>0)<<31>>31)|0;while(1){if(i>>>0<2)e=0;else{e=i+-2|0;e=e-((e>>>0)%(j>>>0)|0)|0;e=((e+1|0)==(m|0)?3:2)+e|0}if((i|0)==(n|0)|(e|0)==(i|0))i=i+-1|0;else break}if(i>>>0>h>>>0){c[o>>2]=32306;c[o+4>>2]=67104;c[o+8>>2]=31517;Db(11,32001,o);u=11;Ra=v;return u|0}if(l|i>>>0>=h>>>0)e=0;else e=$f(k,0,0)|0;g=(e|0)==0;if(h>>>0>i>>>0&g)do{e=_f(u,i,h,1)|0;h=h+-1|0;g=(e|0)==0}while(g&h>>>0>i>>>0);if((p|0)!=0&((e|0)==101|g)){g=c[(c[q>>2]|0)+72>>2]|0;h=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[h+96>>2]|0))e=0;else e=Ve(g)|0;else s=30;do if((s|0)==30){e=c[h+40>>2]|0;if(!e)if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){e=Wf(g)|0;break}else{e=Xf(g)|0;break}}while(0);s=(c[(c[q>>2]|0)+56>>2]|0)+32|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;s=(c[(c[q>>2]|0)+56>>2]|0)+36|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;s=c[(c[q>>2]|0)+56>>2]|0;a[s+28>>0]=i>>>24;a[s+29>>0]=i>>>16;a[s+30>>0]=i>>>8;a[s+31>>0]=i;a[u+19>>0]=1;c[r>>2]=i}if(!e)break;tf(t)|0;u=e;Ra=v;return u|0}c[g>>2]=32306;c[g+4>>2]=67099;c[g+8>>2]=31517;Db(11,32001,g);u=11;Ra=v;return u|0}}while(0);e=c[u>>2]|0;if(a[u+19>>0]|0)c[e+24>>2]=c[u+44>>2];u=ac(e,f,0)|0;Ra=v;return u|0}function dc(a){a=a|0;var b=0,d=0,e=0;if(!a){e=0;return e|0}e=c[a+20>>2]|0;b=c[a+24>>2]|0;d=c[b+4>>2]|0;c[d+4>>2]=c[b>>2];if(c[a>>2]|0){b=b+16|0;c[b>>2]=(c[b>>2]|0)+-1}if(c[a+40>>2]|0){b=(c[d>>2]|0)+88|0;while(1){d=c[b>>2]|0;if((d|0)==(a|0))break;else b=d+44|0}c[b>>2]=c[a+44>>2]}ec(c[a+4>>2]|0,0,0);d=c[a+28>>2]|0;d=(d|0)==101?0:d;b=c[a>>2]|0;do if(b|0){c[b+64>>2]=d;if(!d){if(c[b+260>>2]|0)Ne(b,0)}else Ne(b,d);fc(c[a>>2]|0);if(c[a>>2]|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);fc(e);e=d;return e|0}function ec(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;h=k;j=c[b+4>>2]|0;c[j+4>>2]=c[b>>2];if(!e){f=c[j+8>>2]|0;if(f|0?(g=$f(f,0,0)|0,g|0):0){e=g;f=0;i=4}}else i=4;if((i|0)==4)jg(b,e,f)|0;if((a[b+8>>0]|0)!=2){Zf(b);Ra=k;return}tf(c[j>>2]|0)|0;i=c[j>>2]|0;if(!(Za[c[i+204>>2]&127](i,1,h,0)|0)){f=c[h>>2]|0;g=c[f+8>>2]|0;e=g+4|0;if((c[e>>2]|0)==1)f=c[g+56>>2]|0;else{i=c[f+4>>2]|0;c[g+56>>2]=i;c[g+72>>2]=f;c[g+52>>2]=j;c[e>>2]=1;a[g+9>>0]=100;f=i}f=d[f+29>>0]<<16|d[f+28>>0]<<24|d[f+30>>0]<<8|d[f+31>>0];if(!f)f=c[(c[j>>2]|0)+24>>2]|0;c[j+44>>2]=f;i=c[g+72>>2]|0;f=c[i+20>>2]|0;Df(i);if(!(c[(c[f+212>>2]|0)+12>>2]|0)){switch(a[f+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[f+4>>0]|0))uf(f,0,0)|0;break}default:tf(f)|0}vf(f)}}a[j+20>>0]=1;j=j+60|0;yf(c[j>>2]|0);c[j>>2]=0;Zf(b);Ra=k;return}function fc(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=e+96|0;if((c[t>>2]|0)!=1691352191)return;l=e+4|0;if(c[l>>2]|0)return;p=e+20|0;h=c[p>>2]|0;a:do if((h|0)>0){g=c[e+16>>2]|0;f=0;while(1){r=c[g+(f<<4)+4>>2]|0;if(r|0?c[r+16>>2]|0:0)break;f=f+1|0;if((f|0)>=(h|0))break a}return}while(0);rg(e,0);g=e+444|0;f=c[g>>2]|0;if(f|0){h=e+480|0;i=e+304|0;j=e+308|0;k=e+300|0;do{c[g>>2]=c[f+24>>2];do if(!(c[h>>2]|0)){r=f;if((c[i>>2]|0)>>>0<=r>>>0?(c[j>>2]|0)>>>0>r>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{r=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}else Xd(e,f);while(0);f=c[g>>2]|0}while((f|0)!=0)}c[e+452>>2]=0;c[e+456>>2]=0;a[e+87>>0]=0;r=e+16|0;f=c[r>>2]|0;if((c[p>>2]|0)>0){i=0;do{g=f+(i<<4)+4|0;h=c[g>>2]|0;if(h|0?(ug(h),c[g>>2]=0,(i|0)!=1):0)c[f+(i<<4)+12>>2]=0;i=i+1|0;f=c[r>>2]|0}while((i|0)<(c[p>>2]|0))}f=c[f+28>>2]|0;if(f|0)dh(f);m=e+360|0;g=c[m>>2]|0;c[m>>2]=0;if(g|0){f=c[l>>2]|0;if(f|0)do{m=f+149|0;l=(d[m>>0]|d[m+1>>0]<<8)&-4|1;a[m>>0]=l;a[m+1>>0]=l>>8;f=c[f+8>>2]|0}while((f|0)!=0);f=g;do{g=f;f=c[f+24>>2]|0;h=c[g>>2]|0;l=g+12|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;do if(!m){i=c[g+8>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}m=g;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[g>>2]=c[m>>2];c[m>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}while((f|0)!=0)}if((c[p>>2]|0)>2){j=e+480|0;k=e+304|0;l=e+308|0;m=e+300|0;i=2;f=2;do{g=c[r>>2]|0;h=g+(i<<4)|0;if(!(c[g+(i<<4)+4>>2]|0)){g=c[h>>2]|0;do if(g|0){if(c[j>>2]|0){Xd(e,g);break}u=g;if((c[k>>2]|0)>>>0<=u>>>0?(c[l>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[h>>2]=0}else{if((f|0)<(i|0)){u=g+(f<<4)|0;c[u>>2]=c[h>>2];c[u+4>>2]=c[h+4>>2];c[u+8>>2]=c[h+8>>2];c[u+12>>2]=c[h+12>>2]}f=f+1|0}i=i+1|0}while((i|0)<(c[p>>2]|0));c[p>>2]=f;if((f|0)<3)q=64}else{c[p>>2]=2;q=64}if((q|0)==64?(n=c[r>>2]|0,o=e+412|0,(n|0)!=(o|0)):0){c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];c[o+20>>2]=c[n+20>>2];c[o+24>>2]=c[n+24>>2];c[o+28>>2]=c[n+28>>2];do if(n|0){if(c[e+480>>2]|0){Xd(e,n);break}u=n;if((c[e+304>>2]|0)>>>0<=u>>>0?(c[e+308>>2]|0)>>>0>u>>>0:0){u=e+300|0;c[n>>2]=c[u>>2];c[u>>2]=n;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{u=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[r>>2]=o}m=e+372|0;f=c[m>>2]|0;if(!f)f=0;else{i=e+480|0;j=e+304|0;k=e+308|0;l=e+300|0;do{h=c[f+8>>2]|0;do{g=c[h+36>>2]|0;do if(g|0?(u=(c[g>>2]|0)+-1|0,c[g>>2]=u,(u|0)==0):0){ab[c[g+4>>2]&127](c[g+8>>2]|0);if(c[i>>2]|0){Xd(e,g);break}u=g;if((c[j>>2]|0)>>>0<=u>>>0?(c[k>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[l>>2];c[l>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=h;h=c[h+12>>2]|0;do if(g|0){if(c[i>>2]|0){Xd(e,g);break}u=g;if((c[j>>2]|0)>>>0<=u>>>0?(c[k>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[l>>2];c[l>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}while((h|0)!=0);f=c[f>>2]|0}while((f|0)!=0);f=c[m>>2]|0}c[m>>2]=0;g=e+376|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+364>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+368>>2]=0;m=e+388|0;f=c[m>>2]|0;if(!f)f=0;else{i=e+480|0;j=e+304|0;k=e+308|0;l=e+300|0;do{h=c[f+8>>2]|0;g=c[h+16>>2]|0;if(g|0)ab[g&127](c[h+8>>2]|0);g=c[h+36>>2]|0;if(g|0)ab[g&127](c[h+28>>2]|0);g=c[h+56>>2]|0;if(g|0)ab[g&127](c[h+48>>2]|0);b:do if(!(c[i>>2]|0)){g=h;do if((c[j>>2]|0)>>>0<=g>>>0){if((c[k>>2]|0)>>>0<=g>>>0)break;c[h>>2]=c[l>>2];c[l>>2]=h;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(e,h);while(0);f=c[f>>2]|0}while((f|0)!=0);f=c[m>>2]|0}c[m>>2]=0;g=e+392|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+380>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+384>>2]=0;n=e+344|0;f=c[n>>2]|0;if(!f)f=0;else{j=e+480|0;k=e+304|0;l=e+308|0;m=e+300|0;do{i=c[f+8>>2]|0;g=c[i+12>>2]|0;if(g|0)ab[g&127](c[i+8>>2]|0);g=i+16|0;h=c[g>>2]|0;if(h|0){u=h+36|0;c[u>>2]=c[u>>2]|2;do if(!(c[j>>2]|0)){q=h+32|0;u=(c[q>>2]|0)+-1|0;c[q>>2]=u;if(u|0)break;Vi(e,h)}else Vi(e,h);while(0);c[g>>2]=0}c:do if(!(c[j>>2]|0)){g=i;do if((c[k>>2]|0)>>>0<=g>>>0){if((c[l>>2]|0)>>>0<=g>>>0)break;c[i>>2]=c[m>>2];c[m>>2]=i;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{u=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(e,i);while(0);f=c[f>>2]|0}while((f|0)!=0);f=c[n>>2]|0}c[n>>2]=0;g=e+348|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+336>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+340>>2]=0;c[e+64>>2]=0;f=e+260|0;d:do if(c[f>>2]|0?(Ne(e,0),s=c[f>>2]|0,s|0):0){if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);f=c[s+32>>2]|0;do if(f|0){if(c[f+480>>2]|0){Xd(f,s);break d}g=s;if((c[f+304>>2]|0)>>>0>g>>>0)break;if((c[f+308>>2]|0)>>>0<=g>>>0)break;u=f+300|0;c[s>>2]=c[u>>2];c[u>>2]=s;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{u=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);c[t>>2]=-1254786768;f=c[(c[r>>2]|0)+28>>2]|0;e:do if(f|0){if(c[e+480>>2]|0){Xd(e,f);break}g=f;do if((c[e+304>>2]|0)>>>0<=g>>>0){if((c[e+308>>2]|0)>>>0<=g>>>0)break;u=e+300|0;c[f>>2]=c[u>>2];c[u>>2]=f;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{u=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[t>>2]=-1623446221;do if(a[e+278>>0]|0){f=c[e+304>>2]|0;if(!f)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{u=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{u=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function gc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+32|0;d=l+8|0;if(!b){k=0;Ra=l;return k|0}k=c[b>>2]|0;if(!k){Db(21,32391,l);c[d>>2]=58063;c[d+4>>2]=81403;c[d+8>>2]=31517;Db(21,32001,d);k=21;Ra=l;return k|0}i=b+136|0;h=c[i+4>>2]|0;if((h|0)>0|(h|0)==0&(c[i>>2]|0)>>>0>0)hc(k,b);i=b+20|0;d=c[i>>2]|0;if((d|0)<832317811)switch(d|0){case 770837923:{j=6;break}default:f=0}else switch(d|0){case 832317811:{j=6;break}default:f=0}if((j|0)==6)f=kc(b)|0;g=c[b>>2]|0;kb(g,b);h=c[b+4>>2]|0;e=b+8|0;d=c[e>>2]|0;if(!h)c[g+4>>2]=d;else{c[h+8>>2]=d;d=c[e>>2]|0}if(d|0)c[d+4>>2]=h;c[i>>2]=1443283912;c[b>>2]=0;do if(g){if(c[g+480>>2]|0){Xd(g,b);break}i=b;if((c[g+304>>2]|0)>>>0<=i>>>0?(c[g+308>>2]|0)>>>0>i>>>0:0){i=g+300|0;c[b>>2]=c[i>>2];c[i>>2]=b}else j=18}else j=18;while(0);do if((j|0)==18)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if((f|0)==3082|(a[k+81>>0]|0)!=0){og(k);d=7}else d=c[k+68>>2]&f;fc(k);k=d;Ra=l;return k|0}function hc(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0.0;k=Ra;Ra=Ra+32|0;e=k+16|0;f=k+8|0;j=k;h=c[b>>2]|0;if((c[h>>2]|0)>1?(i=c[h+72>>2]|0,(i|0)!=0):0){Xa[i&255](h,f)|0;e=c[f>>2]|0;f=c[f+4>>2]|0}else{Xa[c[h+64>>2]&255](h,e)|0;l=+g[e>>3]*864.0e5;e=~~l>>>0;i=+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0;c[f>>2]=e;c[f+4>>2]=i;f=i}i=d+136|0;h=i;e=Tv(e|0,f|0,c[h>>2]|0,c[h+4>>2]|0)|0;e=Yv(e|0,L()|0,1e6,0)|0;f=L()|0;h=j;c[h>>2]=e;c[h+4>>2]=f;h=c[b+204>>2]|0;if(h|0)db[h&127](c[b+208>>2]|0,c[d+188>>2]|0,e,f);if(!(a[b+88>>0]&2)){j=i;d=j;c[d>>2]=0;j=j+4|0;c[j>>2]=0;Ra=k;return}Za[c[b+196>>2]&127](2,c[b+200>>2]|0,d,j)|0;j=i;d=j;c[d>>2]=0;j=j+4|0;c[j>>2]=0;Ra=k;return}function ic(b,d){b=b|0;d=d|0;if((d|0)==3082|(a[b+81>>0]|0)!=0){og(b);d=7;return d|0}else{d=c[b+68>>2]&d;return d|0}return 0}function jc(b){b=b|0;var d=0,e=0,f=0;if(!b){e=0;return e|0}e=c[b>>2]|0;d=b+136|0;f=c[d+4>>2]|0;if((f|0)>0|(f|0)==0&(c[d>>2]|0)>>>0>0)hc(e,b);d=kc(b)|0;c[b+20>>2]=770837923;c[b+36>>2]=-1;c[b+40>>2]=0;a[b+146>>0]=2;c[b+44>>2]=0;c[b+32>>2]=1;a[b+147>>0]=-1;c[b+48>>2]=0;f=b+64|0;c[f>>2]=0;c[f+4>>2]=0;if((d|0)==3082|(a[e+81>>0]|0)!=0){og(e);f=7;return f|0}else{f=c[e+68>>2]&d;return f|0}return 0}function kc(b){b=b|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+16|0;f=h;g=c[b>>2]|0;pg(b)|0;if((c[b+36>>2]|0)>-1){qg(b)|0;e=b+149|0;f=d[e>>0]|d[e+1>>0]<<8;if(f&64){f=f&-4|1;a[e>>0]=f;a[e+1>>0]=f>>8}}else{e=c[b+40>>2]|0;if(e|0?(i=b+149|0,(d[i>>0]|d[i+1>>0]<<8)&3):0){i=c[b+124>>2]|0;c[f>>2]=i;Vb(g,e,(i|0)==0?0:31408,f)}}e=b+124|0;f=c[e>>2]|0;do if(f|0){if(g|0){if(c[g+480>>2]|0){Xd(g,f);break}i=f;if((c[g+304>>2]|0)>>>0<=i>>>0?(c[g+308>>2]|0)>>>0>i>>>0:0){i=g+300|0;c[f>>2]=c[i>>2];c[i>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[e>>2]=0;c[b+120>>2]=0;c[b+20>>2]=1224384374;Ra=h;return c[g+68>>2]&c[b+40>>2]|0}function lc(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+16|0;f=b[k>>1]|0;if(f<<16>>16>0){l=e+100|0;j=0;g=c[l>>2]|0;do{h=g+(j*40|0)|0;i=g+(j*40|0)+8|0;if(!((b[i>>1]&9216)==0?(c[g+(j*40|0)+24>>2]|0)==0:0)){Cg(h);g=c[l>>2]|0;i=g+(j*40|0)+8|0;f=b[k>>1]|0}b[i>>1]=1;j=j+1|0}while((j|0)<(f<<16>>16|0))}if(!(c[e+208>>2]|0))return 0;l=e+149|0;k=(d[l>>0]|d[l+1>>0]<<8)&-4|1;a[l>>0]=k;a[l+1>>0]=k>>8;return 0}function mc(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=d+8|0;f=b[i>>1]|0;e=f&65535;if(!(e&18)){if((f&514)==514?(a[d+10>>0]|0)==1:0){i=c[d+16>>2]|0;return i|0}if(f&1){i=0;return i|0}i=Gg(d,1)|0;return i|0}g=d+12|0;h=c[g>>2]|0;do if(e&16384){e=(c[d>>2]|0)+h|0;if((e|0)<1)if(!(f&16)){e=h;break}else e=1;if(!(Eg(d,e,1)|0)){gw((c[d+16>>2]|0)+(c[g>>2]|0)|0,0,c[d>>2]|0)|0;e=(c[g>>2]|0)+(c[d>>2]|0)|0;c[g>>2]=e;f=b[i>>1]&-16897;b[i>>1]=f;break}else{i=0;return i|0}}else e=h;while(0);b[i>>1]=f|16;if(!e){i=0;return i|0}i=c[d+16>>2]|0;return i|0}function nc(d){d=d|0;var e=0;if(!d){e=0;return e|0}e=b[d+8>>1]|0;if((e&514)==514?(a[d+10>>0]|0)==1:0){e=c[d+16>>2]|0;return e|0}if(e&1){e=0;return e|0}e=Gg(d,1)|0;return e|0}function oc(d){d=d|0;var e=0,f=0;e=b[d+8>>1]|0;if(e&2?(a[d+10>>0]|0)==1:0){d=c[d+12>>2]|0;return d|0}e=e&65535;if(!(e&16)){if(e&1|0){d=0;return d|0}d=Fg(d,1)|0;return d|0}else{f=c[d+12>>2]|0;if(!(e&16384)){d=f;return d|0}d=(c[d>>2]|0)+f|0;return d|0}return 0}function pc(b){b=b|0;var d=0,f=0.0;d=e[b+8>>1]|0;if(d&8|0){f=+g[b>>3];return +f}if(d&4|0){d=b;f=+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0);return +f}if(!(d&18)){f=0.0;return +f}f=+Kg(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0);return +f}function qc(b){b=b|0;var d=0;d=e[b+8>>1]|0;if(d&4|0){d=c[b>>2]|0;return d|0}if(d&8|0){d=Mg(+g[b>>3])|0;L()|0;return d|0}if(!(d&18)){d=0;return d|0}d=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;L()|0;return d|0}function rc(b){b=b|0;var d=0;d=e[b+8>>1]|0;if(d&4|0){d=b;b=c[d+4>>2]|0;d=c[d>>2]|0;K(b|0);return d|0}if(d&8|0){d=Mg(+g[b>>3])|0;b=L()|0;K(b|0);return d|0}if(!(d&18)){b=0;d=0;K(b|0);return d|0}d=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;b=L()|0;K(b|0);return d|0}function sc(a){a=a|0;return d[816+(b[a+8>>1]&31)>>0]|0|0}function tc(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!a){i=0;return i|0}if(mb()|0){i=0;return i|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](40)|0;if(!d){i=0;return i|0}else e=d}else{f=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){h=c[14978]|0;g=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&g>>>0<=h>>>0)&1}e=Wa[c[29340>>2]&127](f)|0;if(!e){i=0;return i|0}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}h=e+20|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];c[e+16>>2]=c[a+16>>2];h=e+8|0;d=b[h>>1]&-1025;b[h>>1]=d;g=e+32|0;c[g>>2]=0;d=d&65535;if(!(d&18)){i=e;return i|0}f=(d&58367|4096)&65535;b[h>>1]=f;do if(d&16384){a=e+12|0;d=(c[e>>2]|0)+(c[a>>2]|0)|0;if((d|0)<1)if(!(f&16)){i=21;break}else d=1;if(!(Eg(e,d,1)|0)){gw((c[e+16>>2]|0)+(c[a>>2]|0)|0,0,c[e>>2]|0)|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);d=b[h>>1]&-16897;b[h>>1]=d;if((c[e+24>>2]|0)!=0?(c[e+16>>2]|0)==(c[e+20>>2]|0):0)i=23;else i=21}}else i=21;while(0);if((i|0)==21?(Jg(e)|0)==0:0){d=b[h>>1]|0;i=23}if((i|0)==23){b[h>>1]=d&-4097;i=e;return i|0}if(!((b[h>>1]&9216)==0?!(c[e+24>>2]|0):0))Cg(e);d=c[g>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);i=0;return i|0}i=e;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[e>>2]=c[i>>2];c[i>>2]=e;i=0;return i|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);i=0;return i|0}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);i=0;return i|0}return 0}function uc(a){a=a|0;var d=0,e=0;if(!a)return;if(!((b[a+8>>1]&9216)==0?!(c[a+24>>2]|0):0))Cg(a);d=c[a+32>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,a);return}e=a;if((c[d+304>>2]|0)>>>0<=e>>>0?(c[d+308>>2]|0)>>>0>e>>>0:0){e=d+300|0;c[a>>2]=c[e>>2];c[e>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function vc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((yc(c[a>>2]|0,b,d,0,e)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function wc(a,d){a=a|0;d=+d;var e=0,f=0,h=0,i=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;a=c[a>>2]|0;e=a+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(a);g[f>>3]=d;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[a>>3]=d;b[e>>1]=8;Ra=i;return}function xc(a,b,d){a=a|0;b=b|0;d=d|0;c[a+20>>2]=1;yc(c[a>>2]|0,b,d,1,-1)|0;return}function yc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!f){g=d+8|0;if(!(b[g>>1]&9216)){b[g>>1]=1;s=0;return s|0}else{Dg(d);s=0;return s|0}}k=d+32|0;l=c[k>>2]|0;m=(l|0)==0;if(m)s=1e9;else s=c[l+108>>2]|0;p=h<<24>>24==0;j=p?16:2;if((g|0)<0){a:do if(h<<24>>24!=1)if((s|0)<0)g=0;else{g=0;do{if(!((a[f+(g|1)>>0]|a[f+g>>0])<<24>>24))break a;g=g+2|0}while((g|0)<=(s|0))}else g=(Eu(f)|0)&2147483647;while(0);o=j|512;q=g}else{o=j;q=g}do if((i|0)==(-1|0)){k=((o&512)==0?0:h<<24>>24==1?1:2)+q|0;if((q|0)>(s|0)){if(m){s=18;return s|0}g=c[l+236>>2]|0;if(!g){s=18;return s|0}c[g+12>>2]=18;s=g+36|0;c[s>>2]=(c[s>>2]|0)+1;s=18;return s|0}else{g=k>>>0>32?k:32;do if((c[d+24>>2]|0)<(g|0))if(!(Eg(d,g,0)|0)){j=d+8|0;g=c[d+16>>2]|0;break}else{s=7;return s|0}else{g=c[d+20>>2]|0;c[d+16>>2]=g;j=d+8|0;b[j>>1]=b[j>>1]&13}while(0);ew(g|0,f|0,k|0)|0;i=o;break}}else{j=d+8|0;if(!((b[j>>1]&9216)==0?!(c[d+24>>2]|0):0))Cg(d);c[d+16>>2]=f;if((i|0)!=116){c[d+36>>2]=i;i=(((i|0)==0?2048:1024)|o&65535)&65535;break}c[d+20>>2]=f;g=c[k>>2]|0;if(((g|0)!=0?(n=f,(c[g+304>>2]|0)>>>0<=n>>>0):0)?(c[g+308>>2]|0)>>>0>n>>>0:0)g=e[g+276>>1]|0;else g=Wa[c[29352>>2]&127](f)|0;c[d+24>>2]=g;i=o}while(0);f=d+12|0;c[f>>2]=q;b[j>>1]=i;h=p?1:h;n=d+10|0;a[n>>0]=h;do if(h<<24>>24!=1&(q|0)>1){o=d+16|0;g=c[o>>2]|0;l=a[g>>0]|0;k=a[g+1>>0]|0;if(!(l<<24>>24==-1&k<<24>>24==-2))if(l<<24>>24==-2&k<<24>>24==-1)m=3;else break;else m=2;k=i&65535;do if(k&18){do if(k&16384){g=(c[d>>2]|0)+q|0;if((g|0)<1)if(!(i&16)){k=q;g=i;break}else g=1;if(!(Eg(d,g,1)|0)){gw((c[o>>2]|0)+(c[f>>2]|0)|0,0,c[d>>2]|0)|0;k=(c[f>>2]|0)+(c[d>>2]|0)|0;c[f>>2]=k;g=b[j>>1]&-16897;b[j>>1]=g;break}else{s=7;return s|0}}else{k=q;g=i}while(0);if(c[d+24>>2]|0?(r=c[o>>2]|0,(r|0)==(c[d+20>>2]|0)):0){l=g;g=r;break}if(!(Jg(d)|0)){l=b[j>>1]|0;k=c[f>>2]|0;g=c[o>>2]|0;break}else{s=7;return s|0}}else{l=i;k=q}while(0);b[j>>1]=l&-4097;r=k+-2|0;c[f>>2]=r;fw(g|0,g+2|0,r|0)|0;a[(c[o>>2]|0)+(c[f>>2]|0)>>0]=0;a[(c[o>>2]|0)+((c[f>>2]|0)+1)>>0]=0;b[j>>1]=b[j>>1]|512;a[n>>0]=m}while(0);s=(q|0)>(s|0)?18:0;return s|0}function zc(a,d){a=a|0;d=d|0;var e=0,f=0;a=c[a>>2]|0;e=((d|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}else{Pg(a,d,e);return}}function Ac(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;a=c[a>>2]|0;f=a+8|0;if(!(b[f>>1]&9216)){c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}else{Pg(a,d,e);return}}function Bc(a){a=a|0;var d=0;a=c[a>>2]|0;d=a+8|0;if(!(b[d>>1]&9216)){b[d>>1]=1;return}else{Dg(a);return}}function Cc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((yc(c[a>>2]|0,b,d,1,e)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function Dc(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;f=c[a>>2]|0;g=f+8|0;if(b[g>>1]&9216)Dg(f);c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];e=b[g>>1]&-1025;b[g>>1]=e;e=e&65535;if(!(e&18))return;if(b[d+8>>1]&2048)return;a=(e|4096)&65535;b[g>>1]=a;do if(e&16384){e=f+12|0;d=(c[f>>2]|0)+(c[e>>2]|0)|0;if((d|0)<1)if(!(a&16))break;else a=1;else a=d;if(!(Eg(f,a,1)|0)){gw((c[f+16>>2]|0)+(c[e>>2]|0)|0,0,c[f>>2]|0)|0;c[e>>2]=(c[e>>2]|0)+(c[f>>2]|0);a=b[g>>1]&-16897;b[g>>1]=a;break}else return}while(0);if(!((c[f+24>>2]|0)!=0?(c[f+16>>2]|0)==(c[f+20>>2]|0):0))h=12;do if((h|0)==12)if(!(Jg(f)|0)){a=b[g>>1]|0;break}else return;while(0);b[g>>1]=a&-4097;return}function Ec(d){d=d|0;var e=0,f=0;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;f=c[e+32>>2]|0;e=f+81|0;if(a[e>>0]|0)return;if(a[f+82>>0]|0)return;a[e>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[f+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Fc(b){b=b|0;var d=0;d=b+81|0;if(a[d>>0]|0)return;if(a[b+82>>0]|0)return;a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;b=c[b+236>>2]|0;if(!b)return;c[b+12>>2]=7;return}function Gc(f){f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0.0;Ga=Ra;Ra=Ra+384|0;Aa=Ga+368|0;za=Ga+360|0;ya=Ga+352|0;xa=Ga+344|0;wa=Ga+336|0;va=Ga+328|0;ua=Ga+320|0;ta=Ga+312|0;sa=Ga+304|0;ra=Ga+296|0;qa=Ga+288|0;pa=Ga+280|0;oa=Ga+272|0;Ca=Ga+264|0;Ba=Ga+256|0;i=Ga+240|0;h=Ga+232|0;fa=Ga;ia=Ga+372|0;do if(!f)Db(21,32555,Ga+224|0);else{Fa=c[f>>2]|0;if(!Fa){Db(21,32391,h);break}ba=f+149|0;ca=(d[ba>>0]|d[ba+1>>0]<<8)&-17;a[ba>>0]=ca;a[ba+1>>0]=ca>>8;ca=f+20|0;da=f+136|0;C=f+36|0;Ea=f+40|0;D=f+146|0;E=f+44|0;G=f+32|0;I=f+147|0;J=f+48|0;K=f+64|0;L=f+148|0;M=f+88|0;N=f+188|0;O=f+120|0;P=f+8|0;Q=f+4|0;R=f+208|0;S=f+160|0;T=f+180|0;U=f+108|0;V=f+100|0;W=f+104|0;X=fa+4|0;Y=fa+8|0;Z=fa+12|0;_=fa+16|0;$=fa+21|0;aa=f+144|0;B=0;a:while(1){if((c[ca>>2]|0)!=770837923){h=c[f>>2]|0;Da=da;A=c[Da+4>>2]|0;if((A|0)>0|(A|0)==0&(c[Da>>2]|0)>>>0>0)hc(h,f);Da=kc(f)|0;c[ca>>2]=770837923;c[C>>2]=-1;c[Ea>>2]=0;a[D>>0]=2;c[E>>2]=0;c[G>>2]=1;a[I>>0]=-1;c[J>>2]=0;A=K;c[A>>2]=0;c[A+4>>2]=0;if((Da|0)==3082|(a[h+81>>0]|0)!=0)og(h)}A=c[f>>2]|0;if(a[A+81>>0]|0){Da=13;break}do if((c[C>>2]|0)<0){if((d[ba>>0]|d[ba+1>>0]<<8)&3){c[Ea>>2]=17;h=1;Da=246;break}h=A+168|0;if(!(c[h>>2]|0))c[A+264>>2]=0;do if(((a[A+88>>0]&-126)<<24>>24?(a[A+165>>0]|0)==0:0)?c[N>>2]|0:0){i=c[A>>2]|0;if((c[i>>2]|0)>1?(na=c[i+72>>2]|0,na|0):0){Xa[na&255](i,da)|0;break}Xa[c[i+64>>2]&255](i,fa)|0;Ha=+g[fa>>3]*864.0e5;z=+t(Ha)>=1.0?(Ha>0.0?~~+H(+s(Ha/4294967296.0),4294967295.0)>>>0:~~+F((Ha-+(~~Ha>>>0))/4294967296.0)>>>0):0;Da=da;c[Da>>2]=~~Ha>>>0;c[Da+4>>2]=z}while(0);c[h>>2]=(c[h>>2]|0)+1;h=d[ba>>0]|d[ba+1>>0]<<8;if(!(h&256)){h=A+176|0;c[h>>2]=(c[h>>2]|0)+1;h=d[ba>>0]|d[ba+1>>0]<<8}if(h&512){Da=A+172|0;c[Da>>2]=(c[Da>>2]|0)+1}c[C>>2]=0;Da=31}else Da=31;while(0);if((Da|0)==31){Da=0;h=(d[ba>>0]|d[ba+1>>0]<<8)&12;b:do if(!(h<<16>>16)){z=A+180|0;c[z>>2]=(c[z>>2]|0)+1;h=Rg(f)|0;c[z>>2]=(c[z>>2]|0)+-1;if((h|0)==100)h=100;else Da=226}else{z=c[f>>2]|0;y=c[M>>2]|0;x=y+40|0;if(h<<16>>16==4)r=1;else r=0?1:(c[z+32>>2]&16777216|0)!=0;m=c[y+72>>2]|0;n=m+480|0;h=(m|0)==0;o=m+304|0;p=m+308|0;q=m+300|0;c:do if(c[n>>2]|0){if(!h){h=1;while(1){d:do if(c[y+(h*40|0)+24>>2]|0?(ha=c[y+(h*40|0)+20>>2]|0,ha|0):0){if(c[n>>2]|0){Xd(m,ha);break}i=ha;do if((c[o>>2]|0)>>>0<=i>>>0){if((c[p>>2]|0)>>>0<=i>>>0)break;c[ha>>2]=c[q>>2];c[q>>2]=ha;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](ha);break}else{w=Wa[c[29352>>2]&127](ha)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ha);break}}while(0);h=h+1|0;if((h|0)==9)break c}}do if(c[y+64>>2]|0?(ga=c[y+60>>2]|0,ga|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ga);break}else{w=Wa[c[29352>>2]&127](ga)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ga);break}while(0);do if(c[y+104>>2]|0?(ja=c[y+100>>2]|0,ja|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ja);break}else{w=Wa[c[29352>>2]&127](ja)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ja);break}while(0);do if(c[y+144>>2]|0?(ka=c[y+140>>2]|0,ka|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ka);break}else{w=Wa[c[29352>>2]&127](ka)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ka);break}while(0);do if(c[y+184>>2]|0?(la=c[y+180>>2]|0,la|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](la);break}else{w=Wa[c[29352>>2]&127](la)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](la);break}while(0);do if(c[y+224>>2]|0){h=c[y+220>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(c[y+264>>2]|0){h=c[y+260>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(c[y+304>>2]|0){h=c[y+300>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);if(!(c[y+344>>2]|0))break;h=c[y+340>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else{if(h){h=1;while(1){i=y+(h*40|0)+8|0;if(!(b[i>>1]&9216)){j=y+(h*40|0)+24|0;if(c[j>>2]|0){k=c[y+(h*40|0)+20>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[j>>2]=0}}else Cg(y+(h*40|0)|0);b[i>>1]=128;h=h+1|0;if((h|0)==9)break c}}h=1;do{i=y+(h*40|0)+8|0;if(!(b[i>>1]&9216)){j=y+(h*40|0)+24|0;if(c[j>>2]|0){k=c[y+(h*40|0)+20>>2]|0;e:do if(!(c[n>>2]|0)){l=k;do if((c[o>>2]|0)>>>0<=l>>>0){if((c[p>>2]|0)>>>0<=l>>>0)break;c[k>>2]=c[q>>2];c[q>>2]=k;break e}while(0);if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(m,k);while(0);c[j>>2]=0}}else Cg(y+(h*40|0)|0);b[i>>1]=128;h=h+1|0}while((h|0)!=9)}while(0);c[O>>2]=0;if((c[Ea>>2]|0)==7){h=z+81|0;if(a[h>>0]|0){h=1;Da=226;break}if(a[z+82>>0]|0){h=1;Da=226;break}a[h>>0]=1;if((c[z+180>>2]|0)>0)c[z+264>>2]=1;h=z+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[z+236>>2]|0;if(!h){h=1;Da=226;break}c[h+12>>2]=7;h=1;Da=226;break}o=c[U>>2]|0;if(r){h=c[M>>2]|0;j=h+360|0;if(b[h+368>>1]&16){k=(c[h+372>>2]|0)>>>2;l=c[h+376>>2]|0;if(!k){q=o;k=0}else{h=o;i=0;do{h=(c[(c[l+(i<<2)>>2]|0)+4>>2]|0)+h|0;i=i+1|0}while((i|0)!=(k|0));q=h}}else{q=o;k=0;l=0}}else{j=0;q=o;k=0;l=0}i=c[C>>2]|0;h=i+1|0;c[C>>2]=h;f:do if((i|0)<(q|0)){u=j+16|0;v=j+8|0;w=j+12|0;g:do if(r){h=o;while(1){if((i|0)<(h|0))p=(c[W>>2]|0)+(i*20|0)|0;else{i=i-h|0;h=c[l>>2]|0;m=c[h+4>>2]|0;if((i|0)>=(m|0)){n=0;do{i=i-m|0;n=n+1|0;h=c[l+(n<<2)>>2]|0;m=c[h+4>>2]|0}while((i|0)>=(m|0))}p=(c[h>>2]|0)+(i*20|0)|0}do if((a[p+1>>0]|0)==-4){o=k+1|0;n=o<<2;h:do if((k|0)>0){m=c[p+16>>2]|0;h=0;do{if((c[l+(h<<2)>>2]|0)==(m|0))break h;h=h+1|0}while((h|0)<(k|0))}else h=0;while(0);if((h|0)!=(k|0)){n=q;break}r=Eg(j,n,(k|0)!=0&1)|0;c[Ea>>2]=r;if(r|0){h=1;Da=226;break b}l=c[u>>2]|0;r=p+16|0;c[l+(k<<2)>>2]=c[r>>2];b[v>>1]=b[v>>1]|16;c[w>>2]=n;n=(c[(c[r>>2]|0)+4>>2]|0)+q|0;k=o}else n=q;while(0);h=d[ba>>0]|d[ba+1>>0]<<8;if(!(h&8))break g;switch(a[p>>0]|0){case -85:break g;case 61:{m=c[C>>2]|0;if((m|0)>1)break g;else i=m;break}default:i=c[C>>2]|0}c[C>>2]=i+1;if((i|0)>=(n|0))break f;q=n;h=c[U>>2]|0}}else{n=d[ba>>0]|d[ba+1>>0]<<8;if(!(n&8)){if((i|0)<(o|0)){p=(c[W>>2]|0)+(i*20|0)|0;h=n;break}i=i-o|0;h=c[l>>2]|0;j=c[h+4>>2]|0;if((i|0)>=(j|0)){k=0;do{i=i-j|0;k=k+1|0;h=c[l+(k<<2)>>2]|0;j=c[h+4>>2]|0}while((i|0)>=(j|0))}p=(c[h>>2]|0)+(i*20|0)|0;h=n;break}m=h;while(1){if((i|0)<(o|0))h=(c[W>>2]|0)+(i*20|0)|0;else{i=i-o|0;h=c[l>>2]|0;j=c[h+4>>2]|0;if((i|0)>=(j|0)){k=0;do{i=i-j|0;k=k+1|0;h=c[l+(k<<2)>>2]|0;j=c[h+4>>2]|0}while((i|0)>=(j|0))}h=(c[h>>2]|0)+(i*20|0)|0}switch(a[h>>0]|0){case -85:{p=h;h=n;break g}case 61:{if((m|0)>1){p=h;h=n;break g}break}default:{}}h=m+1|0;c[C>>2]=h;if((m|0)<(q|0)){i=m;m=h}else break f}}while(0);if(c[z+264>>2]|0){c[Ea>>2]=9;Ag(f,50367,Ba);h=1;Da=226;break b}if((h&12)==4){b[y+48>>1]=4;q=x;c[q>>2]=i;c[q+4>>2]=((i|0)<0)<<31>>31;b[y+88>>1]=2562;q=c[2800+(d[p>>0]<<2)>>2]|0;c[y+96>>2]=q;q=(Eu(q)|0)&1073741823;c[y+92>>2]=q;a[y+90>>0]=1;q=y+120|0}else q=x;b[q+8>>1]=4;i=c[p+4>>2]|0;o=q;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;b[q+48>>1]=4;o=c[p+8>>2]|0;i=q+40|0;c[i>>2]=o;c[i+4>>2]=((o|0)<0)<<31>>31;b[q+88>>1]=4;i=c[p+12>>2]|0;o=q+80|0;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;o=q+120|0;i=q+144|0;j=c[i>>2]|0;if((j|0)<100){if(Eg(o,100,0)|0){h=1;Da=226;break b}h=q+136|0;k=q+128|0;n=h;h=c[h>>2]|0;j=c[i>>2]|0}else{h=c[q+140>>2]|0;n=q+136|0;c[n>>2]=h;k=q+128|0;b[k>>1]=b[k>>1]&13}b[k>>1]=514;c[X>>2]=h;c[fa>>2]=0;c[Y>>2]=j;c[Z>>2]=0;c[Z+4>>2]=0;b[Z+8>>1]=0;i:do switch(a[p+1>>0]|0){case -9:{k=c[p+16>>2]|0;l=k+6|0;c[Ca>>2]=e[l>>1];Eb(fa,34044,Ca);if(b[l>>1]|0){m=k+16|0;j=0;do{i=c[k+20+(j<<2)>>2]|0;if(!i)i=59952;else i=c[i>>2]|0;z=(Bu(i,34049)|0)==0;c[oa>>2]=(a[(c[m>>2]|0)+j>>0]|0)==0?59952:34064;c[oa+4>>2]=z?34056:i;Eb(fa,34058,oa);j=j+1|0}while(j>>>0<(e[l>>1]|0)>>>0)}i=c[_>>2]|0;j=i+1|0;if(j>>>0<(c[Y>>2]|0)>>>0){c[_>>2]=j;a[(c[X>>2]|0)+i>>0]=41;break i}else{wb(fa,34066,1);break i}}case -2:{c[pa>>2]=c[c[p+16>>2]>>2];Eb(fa,34068,pa);break}case -8:{y=c[p+16>>2]|0;z=a[y>>0]|0;c[qa>>2]=c[y+32>>2];c[qa+4>>2]=z;Eb(fa,34076,qa);break}case -14:{x=c[p+16>>2]|0;y=c[x+4>>2]|0;z=ra;c[z>>2]=c[x>>2];c[z+4>>2]=y;Eb(fa,32524,ra);break}case -3:{c[sa>>2]=c[p+16>>2];Eb(fa,34083,sa);break}case -13:{g[ta>>3]=+g[c[p+16>>2]>>3];Eb(fa,34086,ta);break}case -11:{i=c[p+16>>2]|0;j=e[i+8>>1]|0;if(j&2|0){h=c[i+16>>2]|0;break i}if(j&4|0){x=i;y=c[x+4>>2]|0;z=ua;c[z>>2]=c[x>>2];c[z+4>>2]=y;Eb(fa,32524,ua);break i}if(!(j&8)){h=(j&1|0)==0?34092:31171;break i}else{g[va>>3]=+g[i>>3];Eb(fa,34086,va);break i}}case -12:{c[wa>>2]=c[(c[p+16>>2]|0)+8>>2];Eb(fa,34099,wa);break}case -15:{k=c[p+16>>2]|0;l=c[k>>2]|0;if((l|0)<1)k=0;else{i=1;while(1){c[xa>>2]=c[k+(i<<2)>>2];Eb(fa,34107,xa);if((i|0)==(l|0))break;else i=i+1|0}k=c[_>>2]|0;j=c[Y>>2]|0}a[h>>0]=91;i=k+1|0;if(i>>>0<j>>>0){c[_>>2]=i;a[(c[X>>2]|0)+k>>0]=93;break i}else{wb(fa,34111,1);break i}}case -4:{Eb(fa,34113,ya);break}case -5:case -17:{a[h>>0]=0;break}case -6:{c[za>>2]=c[c[p+16>>2]>>2];Eb(fa,31408,za);break}default:{i=c[p+16>>2]|0;if(i|0){h=i;break i}a[h>>0]=0}}while(0);i=c[X>>2]|0;do if(i|0){a[i+(c[_>>2]|0)>>0]=0;if(!(c[Z>>2]|0))break;if(a[$>>0]&4)break;$d(fa)|0}while(0);if((h|0)==(c[n>>2]|0)){if(!h)h=0;else h=(Eu(h)|0)&1073741823;c[q+132>>2]=h;a[q+130>>0]=1}else{c[q+132>>2]=0;yc(o,h,-1,1,0)|0}h=(d[ba>>0]|d[ba+1>>0]<<8)&12;if(h<<16>>16==4){if((c[q+184>>2]|0)<4){if(Eg(q+160|0,4,0)|0){h=1;Da=226;break b}h=q+168|0;i=c[q+176>>2]|0}else{i=c[q+180>>2]|0;c[q+176>>2]=i;h=q+168|0;b[h>>1]=b[h>>1]&13}b[h>>1]=514;c[q+172>>2]=2;c[Aa>>2]=e[p+2>>1];Cb(3,i,32595,Aa)|0;a[q+170>>0]=1;b[q+208>>1]=1;h=(d[ba>>0]|d[ba+1>>0]<<8)&12}b[aa>>1]=12-(h&65535);c[O>>2]=(c[M>>2]|0)+40;c[Ea>>2]=0;h=100;break b}while(0);c[Ea>>2]=0;h=101;Da=226}while(0);do if((Da|0)==226){Da=0;z=da;y=c[z+4>>2]|0;if((y|0)>0|(y|0)==0&(c[z>>2]|0)>>>0>0)hc(A,f);if((h|0)==101)if(!(a[A+79>>0]|0))h=101;else{m=A+20|0;h=c[m>>2]|0;if((h|0)>0){n=A+16|0;o=A+240|0;p=A+244|0;l=0;i=0;do{k=c[n>>2]|0;j=c[k+(l<<4)+4>>2]|0;do if(((j|0)!=0?(ea=c[j+4>>2]|0,c[ea+4>>2]=c[j>>2],ea=c[(c[ea>>2]|0)+216>>2]|0,(ea|0)!=0):0)?(z=ea+12|0,ma=c[z>>2]|0,c[z>>2]=0,(ma|0)>0):0){j=c[o>>2]|0;if(!((i|0)==0&(j|0)!=0))break;i=Za[j&127](c[p>>2]|0,A,c[k+(l<<4)>>2]|0,ma)|0;h=c[m>>2]|0}while(0);l=l+1|0}while((l|0)<(h|0));c[Ea>>2]=i;if(i|0){h=1;break}}else c[Ea>>2]=0;h=101}}while(0);c[A+64>>2]=h;i=c[f>>2]|0;j=c[Ea>>2]|0;if(!((j|0)==3082|(a[i+81>>0]|0)!=0)){if((c[i+68>>2]&j|0)==7)Da=244}else{og(i);Da=244}if((Da|0)==244){Da=0;c[Ea>>2]=7}if((h|1|0)!=101)Da=246}if((Da|0)==246){Da=0;if((a[L>>0]|0)<0)h=qg(f)|0}h=c[A+68>>2]&h;if((h|0)!=17){Da=322;break}u=B+1|0;if(B>>>0>=50){h=17;Da=322;break}r=c[C>>2]|0;i=c[f>>2]|0;n=qd(i,c[N>>2]|0,-1,d[L>>0]|0,f,ia,0)|0;switch(n|0){case 7:{Da=251;break a}case 0:break;default:{Da=281;break a}}q=c[ia>>2]|0;ew(fa|0,q|0,224)|0;ew(q|0,f|0,224)|0;ew(f|0,fa|0,224)|0;p=q+8|0;o=c[p>>2]|0;c[p>>2]=c[P>>2];c[P>>2]=o;o=q+4|0;B=c[o>>2]|0;c[o>>2]=c[Q>>2];c[Q>>2]=B;B=q+188|0;l=c[B>>2]|0;c[B>>2]=c[N>>2];c[N>>2]=l;c[R>>2]=c[q+208>>2];a[L>>0]=a[q+148>>0]|0;l=q+160|0;c[S>>2]=c[l>>2];c[S+4>>2]=c[l+4>>2];c[S+8>>2]=c[l+8>>2];c[S+12>>2]=c[l+12>>2];c[S+16>>2]=c[l+16>>2];c[S+20>>2]=c[l+20>>2];c[S+24>>2]=c[l+24>>2];c[T>>2]=(c[T>>2]|0)+1;l=q+16|0;if((b[l>>1]|0)>0){m=q+100|0;k=0;do{B=c[V>>2]|0;h=B+(k*40|0)|0;n=c[m>>2]|0;i=n+(k*40|0)|0;if(!((b[B+(k*40|0)+8>>1]&9216)==0?!(c[B+(k*40|0)+24>>2]|0):0))Cg(h);j=h+40|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));b[n+(k*40|0)+8>>1]=1;c[n+(k*40|0)+24>>2]=0;k=k+1|0}while((k|0)<(b[l>>1]|0))}c[q+40>>2]=0;k=q+20|0;h=c[k>>2]|0;if((h|0)<832317811)switch(h|0){case 770837923:{Da=264;break}default:{}}else switch(h|0){case 832317811:{Da=264;break}default:{}}if((Da|0)==264){Da=0;kc(q)|0}j=c[q>>2]|0;kb(j,q);i=c[o>>2]|0;h=c[p>>2]|0;if(!i)c[j+4>>2]=h;else{c[i+8>>2]=h;h=c[p>>2]|0}if(h|0)c[h+4>>2]=i;c[k>>2]=1443283912;c[q>>2]=0;do if(j){if(c[j+480>>2]|0){Xd(j,q);break}B=q;if((c[j+304>>2]|0)>>>0<=B>>>0?(c[j+308>>2]|0)>>>0>B>>>0:0){B=j+300|0;c[q>>2]=c[B>>2];c[B>>2]=q}else Da=276}else Da=276;while(0);do if((Da|0)==276)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Da=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);h=c[f>>2]|0;Da=da;B=c[Da+4>>2]|0;if((B|0)>0|(B|0)==0&(c[Da>>2]|0)>>>0>0)hc(h,f);Da=kc(f)|0;c[ca>>2]=770837923;c[C>>2]=-1;c[Ea>>2]=0;a[D>>0]=2;c[E>>2]=0;c[G>>2]=1;a[I>>0]=-1;c[J>>2]=0;B=K;c[B>>2]=0;c[B+4>>2]=0;if((Da|0)==3082|(a[h+81>>0]|0)!=0)og(h);if((r|0)>-1){Da=d[ba>>0]|d[ba+1>>0]<<8|16;a[ba>>0]=Da;a[ba+1>>0]=Da>>8}B=u}if((Da|0)==13){c[Ea>>2]=7;Fa=7;Ra=Ga;return Fa|0}else if((Da|0)==251){h=i+81|0;if((a[h>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[h>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;h=i+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[i+236>>2]|0;if(h|0)c[h+12>>2]=7}n=7}else if((Da|0)!=281)if((Da|0)==322){Ra=Ga;return h|0}h=c[Fa+260>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){l=c[h+16>>2]|0;break}if(!(i&1))l=Gg(h,1)|0;else l=0}else l=0;while(0);m=f+124|0;h=c[m>>2]|0;do if(h|0){if(c[Fa+480>>2]|0){Xd(Fa,h);break}f=h;if((c[Fa+304>>2]|0)>>>0<=f>>>0?(c[Fa+308>>2]|0)>>>0>f>>>0:0){f=Fa+300|0;c[h>>2]=c[f>>2];c[f>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{f=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);k=Fa+81|0;if(a[k>>0]|0){c[m>>2]=0;c[Ea>>2]=7;Fa=7;Ra=Ga;return Fa|0}if(l){j=(Eu(l)|0)+1|0;j:do if(!(c[Fa+272>>2]|0)){do if(!(0<0|(0==0?(e[Fa+276>>1]|0)>>>0<j>>>0:0))){i=Fa+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=Fa+284|0;c[f>>2]=(c[f>>2]|0)+1;break j}i=Fa+296|0;h=c[i>>2]|0;if(!h){h=Fa+292|0;break}else{c[i>>2]=c[h>>2];f=Fa+284|0;c[f>>2]=(c[f>>2]|0)+1;break j}}else h=Fa+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Da=308}else Da=308;while(0);if((Da|0)==308)h=_d(Fa,j,0)|0;if(h)ew(h|0,l|0,j|0)|0;else h=0}else h=0;c[m>>2]=h;if((n|0)==3082|(a[k>>0]|0)!=0){og(Fa);h=7}else h=c[Fa+68>>2]&n;c[Ea>>2]=h;Fa=h;Ra=Ga;return Fa|0}while(0);c[i>>2]=58063;c[i+4>>2]=81990;c[i+8>>2]=31517;Db(21,32001,i);Fa=21;Ra=Ga;return Fa|0}function Hc(a,d){a=a|0;d=d|0;var e=0;e=c[a+8>>2]|0;if(!(b[e+8>>1]&8192)){e=Ic(a,d)|0;return e|0}else{e=c[e+16>>2]|0;return e|0}return 0}function Ic(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=c[a+8>>2]|0;if((d|0)<1){e=h+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(h);c[h+16>>2]=0;h=0;return h|0}if((c[h+24>>2]|0)<(d|0)){Eg(h,d,0)|0;g=h+16|0;e=h+8|0;f=g;g=c[g>>2]|0}else{g=c[h+20>>2]|0;f=h+16|0;c[f>>2]=g;e=h+8|0;b[e>>1]=b[e>>1]&13}b[e>>1]=8192;c[h>>2]=c[a+4>>2];if(!g){h=g;return h|0}gw(g|0,0,d|0)|0;h=c[f>>2]|0;return h|0}function Jc(a){a=a|0;if(!a){a=0;return a|0}if(!(c[a+120>>2]|0)){a=0;return a|0}a=e[a+144>>1]|0;return a|0}function Kc(b,d){b=b|0;d=d|0;var f=0,g=0;if(!b){g=mc(29576)|0;return g|0}f=c[b+120>>2]|0;if((f|0)!=0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;f=b}else{d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576;f=b}g=mc(d)|0;f=c[f>>2]|0;b=b+40|0;d=c[b>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[b>>2]=d;return g|0}function Lc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;j=(d|0)==0;do if(j)h=29576;else{g=c[d+120>>2]|0;if(g|0?(e[d+144>>1]|0)>>>0>f>>>0:0){h=g+(f*40|0)|0;break}h=c[d>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)g=c[h+12>>2]|0;else i=9;do if((i|0)==9){f=f&65535;if(!(f&16)){if(f&1|0){g=0;break}g=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(f&16384))break;g=(c[h>>2]|0)+g|0;break}}while(0);if(j)return g|0;h=c[d>>2]|0;i=d+40|0;f=c[i>>2]|0;if((f|0)==3082|(a[h+81>>0]|0)!=0){og(h);f=7}else f=c[h+68>>2]&f;c[i>>2]=f;return g|0}function Mc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0.0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&8)){if(f&4|0){f=d;i=+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0);break}if(!(f&18))i=0.0;else i=+Kg(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)}else i=+g[d>>3];while(0);if(h)return +i;f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;return +i}function Nc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){i=Mg(+g[d>>3])|0;L()|0;break}if(!(f&18))i=0;else{i=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0}}else i=c[d>>2]|0;while(0);if(h)return i|0;f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;return i|0}function Oc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0,j=0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){j=Mg(+g[d>>3])|0;i=L()|0;break}if(!(f&18)){i=0;j=0}else{j=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;i=L()|0}}else{j=d;i=c[j+4>>2]|0;j=c[j>>2]|0}while(0);if(h){K(i|0);return j|0}f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;K(i|0);return j|0}function Pc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0;h=(d|0)==0;do if(h)f=29576;else{g=c[d+120>>2]|0;if(g|0?(e[d+144>>1]|0)>>>0>f>>>0:0){f=g+(f*40|0)|0;break}f=c[d>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}while(0);g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)i=c[f+16>>2]|0;else if(!(g&1))i=Gg(f,1)|0;else i=0;if(h)return i|0;g=c[d>>2]|0;h=d+40|0;f=c[h>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[h>>2]=f;return i|0}function Qc(f,g){f=f|0;g=g|0;var h=0,i=0,j=0;i=(f|0)==0;do if(i)g=29576;else{h=c[f+120>>2]|0;if(h|0?(e[f+144>>1]|0)>>>0>g>>>0:0){g=h+(g*40|0)|0;break}g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);j=d[816+(b[g+8>>1]&31)>>0]|0;if(i)return j|0;h=c[f>>2]|0;i=f+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g;return j|0}function Rc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0;i=c[d>>2]|0;if(!d){i=0;return i|0}if((e[d+144>>1]|0)>>>0<=f>>>0){i=0;return i|0}h=c[d+116>>2]|0;d=h+(f*40|0)|0;do if(d){g=b[h+(f*40|0)+8>>1]|0;if((g&514)==514?(a[h+(f*40|0)+10>>0]|0)==1:0){d=c[h+(f*40|0)+16>>2]|0;break}if(!(g&1))d=Gg(d,1)|0;else d=0}else d=0;while(0);g=i+81|0;if(!(a[g>>0]|0)){i=d;return i|0}if(c[i+180>>2]|0){i=0;return i|0}a[g>>0]=0;c[i+264>>2]=0;i=i+272|0;c[i>>2]=(c[i>>2]|0)+-1;i=0;return i|0}function Sc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=Vc(b,d)|0;if(h|0){switch(g|0){case 0:case -1:{b=h;return b|0}default:{}}ab[g&127](e);b=h;return b|0}if(!e){b=0;return b|0}e=yc((c[b+100>>2]|0)+((d+-1|0)*40|0)|0,e,f,0,g)|0;if(!e){b=0;return b|0}d=c[b>>2]|0;c[d+64>>2]=e;Ne(d,e);d=c[b>>2]|0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);b=7;return b|0}else{b=c[d+68>>2]&e;return b|0}return 0}function Tc(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;j=Vc(d,e)|0;if(j|0){switch(h|0){case 0:case -1:{d=j;return d|0}default:{}}ab[h&127](f);d=j;return d|0}if(!f){d=0;return d|0}m=c[d+100>>2]|0;k=e+-1|0;l=m+(k*40|0)|0;e=yc(l,f,g,i,h)|0;do if(!(i<<24>>24==0|(e|0)!=0)){j=a[(c[d>>2]|0)+78>>0]|0;if(!(b[m+(k*40|0)+8>>1]&2)){d=0;return d|0}if((a[m+(k*40|0)+10>>0]|0)==j<<24>>24){d=0;return d|0}else{e=Ig(l,j)|0;break}}while(0);if(!e){d=0;return d|0}j=c[d>>2]|0;c[j+64>>2]=e;Ne(j,e);j=c[d>>2]|0;if((e|0)==3082|(a[j+81>>0]|0)!=0){og(j);d=7;return d|0}else{d=c[j+68>>2]&e;return d|0}return 0}function Uc(a,d,e){a=a|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;f=j+8|0;h=j;i=Vc(a,d)|0;if(i|0){Ra=j;return i|0}k=c[a+100>>2]|0;d=d+-1|0;a=k+(d*40|0)|0;d=k+(d*40|0)+8|0;if(!(b[d>>1]&9216))b[d>>1]=1;else Dg(a);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=j;return i|0}g[a>>3]=e;b[d>>1]=8;Ra=j;return i|0}function Vc(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+64|0;i=l+40|0;k=l+32|0;j=l+16|0;h=l+8|0;do if(!e)Db(21,32555,l);else{g=c[e>>2]|0;if(!g){Db(21,32391,h);break}if((c[e+20>>2]|0)==770837923?(c[e+36>>2]|0)<=-1:0){if((f|0)>=1?(b[e+16>>1]|0)>=(f|0):0){j=f+-1|0;k=c[e+100>>2]|0;h=k+(j*40|0)|0;i=k+(j*40|0)+8|0;if(!((b[i>>1]&9216)==0?(c[k+(j*40|0)+24>>2]|0)==0:0)){Cg(h);g=c[e>>2]|0}b[i>>1]=1;c[g+64>>2]=0;g=c[e+208>>2]|0;if(!g){f=0;Ra=l;return f|0}if(!(g&((f|0)>31?-2147483648:1<<j))){f=0;Ra=l;return f|0}f=e+149|0;e=(d[f>>0]|d[f+1>>0]<<8)&-4|1;a[f>>0]=e;a[f+1>>0]=e>>8;f=0;Ra=l;return f|0}c[g+64>>2]=25;Ne(g,25);f=25;Ra=l;return f|0}c[g+64>>2]=21;Ne(g,21);c[k>>2]=c[e+188>>2];Db(21,36834,k);c[i>>2]=58063;c[i+4>>2]=82575;c[i+8>>2]=31517;Db(21,32001,i);f=21;Ra=l;return f|0}while(0);c[j>>2]=58063;c[j+4>>2]=82567;c[j+8>>2]=31517;Db(21,32001,j);f=21;Ra=l;return f|0}function Wc(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=((e|0)<0)<<31>>31;g=Vc(a,d)|0;if(g|0)return g|0;h=c[a+100>>2]|0;d=d+-1|0;a=h+(d*40|0)|0;d=h+(d*40|0)+8|0;if(!(b[d>>1]&9216)){h=a;c[h>>2]=e;c[h+4>>2]=f;b[d>>1]=4;return g|0}else{Pg(a,e,f);return g|0}return 0}function Xc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Tc(a,b,c,d,e,1)|0}function Yc(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;i=t+8|0;j=t;h=b[f+8>>1]|0;switch(a[816+(h&31)>>0]|0){case 1:{j=f;i=c[j>>2]|0;j=c[j+4>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}d=c[d+100>>2]|0;f=e+-1|0;h=d+(f*40|0)|0;f=d+(f*40|0)+8|0;if(!(b[f>>1]&9216)){d=h;c[d>>2]=i;c[d+4>>2]=j;b[f>>1]=4;d=0;Ra=t;return d|0}else{Pg(h,i,j);d=0;Ra=t;return d|0}}case 2:{k=+g[f>>3];h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}d=c[d+100>>2]|0;f=e+-1|0;h=d+(f*40|0)|0;f=d+(f*40|0)+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(h);g[i>>3]=k;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){d=0;Ra=t;return d|0}g[h>>3]=k;b[f>>1]=8;d=0;Ra=t;return d|0}case 4:{if(h&16384){l=c[f>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}j=c[d+100>>2]|0;h=e+-1|0;f=j+(h*40|0)|0;i=j+(h*40|0)+8|0;if(!((b[i>>1]&9216)==0?!(c[j+(h*40|0)+24>>2]|0):0))Cg(f);b[i>>1]=16400;c[j+(h*40|0)+12>>2]=0;c[f>>2]=(l|0)>0?l:0;a[j+(h*40|0)+10>>0]=1;c[j+(h*40|0)+16>>2]=0;d=0;Ra=t;return d|0}r=c[f+16>>2]|0;f=c[f+12>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}if(!r){d=0;Ra=t;return d|0}q=c[d+100>>2]|0;p=e+-1|0;n=q+(p*40|0)|0;l=c[q+(p*40|0)+32>>2]|0;e=(l|0)==0;if(e)i=1e9;else i=c[l+108>>2]|0;a:do if((f|0)<0)if((i|0)<0){o=528;j=0}else{h=0;while(1){if(!((a[r+(h|1)>>0]|a[r+h>>0])<<24>>24)){o=528;j=h;break a}h=h+2|0;if((h|0)>(i|0)){o=528;j=h;break}}}else{o=16;j=f}while(0);m=j+((o&65535)>>>8&65535)|0;do if((j|0)>(i|0))if(!e?(s=c[l+236>>2]|0,(s|0)!=0):0){c[s+12>>2]=18;f=s+36|0;c[f>>2]=(c[f>>2]|0)+1;f=18}else f=18;else{h=m>>>0>32?m:32;if((c[q+(p*40|0)+24>>2]|0)<(h|0)){if(Eg(n,h,0)|0){f=7;break}h=q+(p*40|0)+8|0;f=c[q+(p*40|0)+16>>2]|0}else{f=c[q+(p*40|0)+20>>2]|0;c[q+(p*40|0)+16>>2]=f;h=q+(p*40|0)+8|0;b[h>>1]=b[h>>1]&13}ew(f|0,r|0,m|0)|0;c[q+(p*40|0)+12>>2]=j;b[h>>1]=o;a[q+(p*40|0)+10>>0]=1;d=0;Ra=t;return d|0}while(0);h=c[d>>2]|0;c[h+64>>2]=f;Ne(h,f);h=c[d>>2]|0;if(!(a[h+81>>0]|0)){d=c[h+68>>2]&f;Ra=t;return d|0}else{og(h);d=7;Ra=t;return d|0}}case 3:{d=Tc(d,e,c[f+16>>2]|0,c[f+12>>2]|0,-1,a[f+10>>0]|0)|0;Ra=t;return d|0}default:{d=Vc(d,e)|0;Ra=t;return d|0}}return 0}
- function ho(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+400|0;F=J+16|0;p=J;r=J+360|0;G=J+80|0;H=J+60|0;z=J+32|0;I=c[(c[f>>2]|0)+32>>2]|0;h=c[i>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){u=c[h+16>>2]|0;break}if(!(j&1))u=Gg(h,1)|0;else u=0}else u=0;while(0);h=c[i+12>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){B=c[h+16>>2]|0;break}if(!(j&1))B=Gg(h,1)|0;else B=0}else B=0;while(0);h=c[i+16>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){x=c[h+16>>2]|0;break}if(!(j&1))x=Gg(h,1)|0;else x=0}else x=0;while(0);h=c[i+20>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){A=c[h+16>>2]|0;break}if(!(j&1))A=Gg(h,1)|0;else A=0}else A=0;while(0);h=c[i+24>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){m=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))m=0;else{m=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else m=c[h>>2]|0;while(0);if(!((B|0)!=0&(x|0)!=0&(A|0)!=0)){Ra=J;return}C=I+312|0;D=c[C>>2]|0;c[C>>2]=0;n=I+20|0;l=c[n>>2]|0;if((l|0)>0){j=c[I+16>>2]|0;h=0;do{k=c[j+(h<<4)+4>>2]|0;if(k|0)c[(c[k+4>>2]|0)+4>>2]=c[k>>2];h=h+1|0}while((h|0)!=(l|0))};c[H>>2]=0;c[H+4>>2]=0;c[H+8>>2]=0;c[H+12>>2]=0;c[H+16>>2]=0;o=Sd(I,x,u)|0;w=H+12|0;c[w>>2]=o;o=z+12|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[z>>2]=G;c[z+4>>2]=152;c[z+8>>2]=153;c[z+24>>2]=H;c[r>>2]=0;o=(m|0)==0;if(o){a:do if(u){y=c[n>>2]|0;j=y+-1|0;if((y|0)>0){h=j;m=(c[I+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){y=a[k>>0]|0;j=(d[208+(y&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!(y<<24>>24==0|(j|0)!=0)){l=u;do{k=k+1|0;l=l+1|0;y=a[k>>0]|0;j=(d[208+(y&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!h)break;j=h+-1|0;if((h|0)>0){h=j;m=m+-16|0}else{h=j;break a}}h=109-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!h){j=u;k=50919;do{k=k+1|0;j=j+1|0;y=a[k>>0]|0;h=(d[208+(y&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=j}else h=-1;while(0);h=h&255}else h=1;j=I+164|0;a[j>>0]=h;y=G+4|0;gw(y|0,0,272)|0;a[G+200>>0]=3;c[G>>2]=I;c[G+132>>2]=1;h=ud(G,B,r)|0;c[y>>2]=c[r>>2];h=(a[I+81>>0]|0)==0?h:7;b:do if(!h){q=c[G+228>>2]|0;h=(q|0)==0;if((h?(c[G+232>>2]|0)==0:0)?(c[G+236>>2]|0)==0:0){c[p>>2]=32306;c[p+4>>2]=103316;c[p+8>>2]=31517;Db(11,32001,p);h=11;E=58;break}a[j>>0]=0;k=c[I+32>>2]|0;n=k&67108864;c:do if(h){m=G+232|0;h=c[m>>2]|0;if(h|0){l=c[h>>2]|0;h=G+272|0;j=c[h>>2]|0;d:do if(j|0){while(1){k=j+12|0;if((c[j>>2]|0)==(l|0))break;j=c[k>>2]|0;if(!j)break d;else h=k}c[h>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;x=H+4|0;c[x>>2]=(c[x>>2]|0)+1}while(0);if(n|0)break;h=c[(c[m>>2]|0)+36>>2]|0;if(!h)break;_j(z,h)|0;break}m=c[G+236>>2]|0;l=c[m+4>>2]|0;e:do if(l|0){s=a[l>>0]|0;h=(d[208+(s&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(h|0)!=0)){j=x;k=l;do{k=k+1|0;j=j+1|0;s=a[k>>0]|0;h=(d[208+(s&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(h|0)!=0))}if(((h|0)==0?(c[(c[w>>2]|0)+72>>2]|0)==(c[m+24>>2]|0):0)?(t=G+272|0,v=c[t>>2]|0,v|0):0){k=t;h=v;while(1){j=h+12|0;if((c[h>>2]|0)==(l|0))break;h=c[j>>2]|0;if(!h)break e;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[H>>2];c[H>>2]=h;w=H+4|0;c[w>>2]=(c[w>>2]|0)+1}}while(0);if(!n){h=lo(G,o?u:0)|0;if(h|0){E=131;break b}oo(z,m);h=c[m+28>>2]|0;if(h|0){n=G+272|0;o=H+4|0;do{m=c[h+12>>2]|0;f:do if(m|0){z=a[m>>0]|0;j=(d[208+(z&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(z<<24>>24==0|(j|0)!=0)){k=x;l=m;do{l=l+1|0;k=k+1|0;z=a[l>>0]|0;j=(d[208+(z&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(z<<24>>24==0|(j|0)!=0))}if(j|0)break;j=c[n>>2]|0;if(!j)break;l=n;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break f;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;c[o>>2]=(c[o>>2]|0)+1}while(0);h=c[h+36>>2]|0}while((h|0)!=0)}}}else{j=q+12|0;p=(n|0)==0;if(c[j>>2]|0){if(!p)break;x=r+4|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;c[x+24>>2]=0;c[r>>2]=G;Kk(G,c[j>>2]|0,r);x=(c[G+36>>2]|0)==0;h=c[G+12>>2]|0;$j(z,c[j>>2]|0)|0;if(x|(h|0)==0)break;else{E=131;break b}}if(!((k&16384|0)==0&0==0&(p^1))?(s=c[q+16>>2]|0,s|0):0){n=G+272|0;o=H+4|0;l=s;do{m=c[l+8>>2]|0;g:do if(m|0){v=a[m>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(h|0)!=0)){j=x;k=m;do{k=k+1|0;j=j+1|0;v=a[k>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(h|0)!=0))}if(h|0)break;h=c[n>>2]|0;if(!h)break;k=n;while(1){j=h+12|0;if((c[h>>2]|0)==(m|0))break;h=c[j>>2]|0;if(!h)break g;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[H>>2];c[H>>2]=h;c[o>>2]=(c[o>>2]|0)+1}while(0);l=c[l+4>>2]|0}while((l|0)!=0)}l=c[q>>2]|0;if(l|0){v=a[x>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(h|0)!=0)){k=l;j=x;do{j=j+1|0;k=k+1|0;x=a[j>>0]|0;h=(d[208+(x&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(h|0)!=0))}if(!h){c[w>>2]=q;do if(p){j=c[q+24>>2]|0;if(!j)break;h=c[j>>2]|0;if((h|0)<=0)break;k=h;h=j+4|0;while(1){j=c[h>>2]|0;if(j|0?_j(z,j)|0:0)break;if((k|0)>1){k=k+-1|0;h=h+20|0}else break}l=c[q>>2]|0}while(0);h=G+272|0;j=c[h>>2]|0;if(j|0){while(1){k=j+12|0;if((c[j>>2]|0)==(l|0))break;j=c[k>>2]|0;if(!j)break c;else h=k}c[h>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;z=H+4|0;c[z>>2]=(c[z>>2]|0)+1}}}}while(0);h=po(f,H,B,A,1)|0;if(h|0)E=131}else E=58;while(0);if((E|0)==58){a[j>>0]=0;E=131}do if((E|0)==131){if(!(c[y>>2]|0)){c[f+20>>2]=h;j=c[f>>2]|0;if(!(b[j+8>>1]&1))break;switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(j,h,-1,1,0)|0;break}j=c[i+4>>2]|0;k=c[i+8>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);do if(k){h=b[k+8>>1]|0;if((h&514)==514?(a[k+10>>0]|0)==1:0){h=c[k+16>>2]|0;break}if(!(h&1))h=Gg(k,1)|0;else h=0}else h=0;while(0);i=c[y>>2]|0;c[F>>2]=j;c[F+4>>2]=h;c[F+8>>2]=59952;c[F+12>>2]=i;h=Bb(49618,F)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{f=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(G);ro(I,c[H>>2]|0);c[C>>2]=D;Ra=J;return}function io(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=Ra;Ra=Ra+352|0;u=A+16|0;r=A;s=A+312|0;z=A+32|0;v=c[(c[f>>2]|0)+32>>2]|0;j=c[i>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);h=c[i+4>>2]|0;do if(h){k=b[h+8>>1]|0;if((k&514)==514?(a[h+10>>0]|0)==1:0){o=c[h+16>>2]|0;break}if(!(k&1))o=Gg(h,1)|0;else o=0}else o=0;while(0);h=c[i+16>>2]|0;k=e[h+8>>1]|0;do if(!(k&4)){if(k&8|0){h=Mg(+g[h>>3])|0;L()|0;break}if(!(k&18))h=0;else{h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else h=c[h>>2]|0;while(0);p=c[v+32>>2]|0;w=v+312|0;x=c[w>>2]|0;c[w>>2]=0;if(!((j|0)!=0&(o|0)!=0)){c[w>>2]=x;Ra=A;return}c[s>>2]=0;q=(h|0)==0;if(q){n=c[v+20>>2]|0;k=n+-1|0;a:do if((n|0)>0){h=k;n=(c[v+16>>2]|0)+(k<<4)|0;while(1){l=c[n>>2]|0;if(l|0){m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(k|0)!=0)){m=j;do{l=l+1|0;m=m+1|0;B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0))}if(!k)break a}if(!h)break;k=h+-1|0;if((h|0)>0){h=k;n=n+-16|0}else{h=k;break a}}h=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!h){k=j;l=50919;do{l=l+1|0;k=k+1|0;B=a[l>>0]|0;h=(d[208+(B&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=k;while(0);h=h&255}else h=1;l=v+164|0;a[l>>0]=h;m=z+4|0;gw(m|0,0,272)|0;a[z+200>>0]=3;c[z>>2]=v;c[z+132>>2]=1;B=ud(z,o,s)|0;c[m>>2]=c[s>>2];do if((B|0)==0&(a[v+81>>0]|0)==0){h=c[z+228>>2]|0;k=(h|0)==0;if((k?(c[z+232>>2]|0)==0:0)?(c[z+236>>2]|0)==0:0){c[r>>2]=32306;c[r+4>>2]=103316;c[r+8>>2]=31517;Db(11,32001,r);y=40;break}a[l>>0]=0;l=(p&67108864|0)==0&0==0;if(!(k|l^1)?(t=h+12|0,c[t>>2]|0):0){B=s+4|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[B+24>>2]=0;c[s>>2]=z;Kk(z,c[t>>2]|0,s);if((c[z+36>>2]|0)==0|(c[z+12>>2]|0)==0)break;else{y=68;break}}k=z+236|0;h=c[k>>2]|0;if(h|0){if(l){if(lo(z,q?j:0)|0){y=68;break}h=c[k>>2]|0}k=c[h+24>>2]|0;if(!k)o=-1e6;else{l=c[v+16>>2]|0;h=0;while(1)if((c[l+(h<<4)+12>>2]|0)==(k|0)){o=h;break}else h=h+1|0}B=c[v+20>>2]|0;k=B+-1|0;b:do if((B|0)>0){h=k;n=(c[v+16>>2]|0)+(k<<4)|0;while(1){l=c[n>>2]|0;if(l|0){B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(B<<24>>24==0|(k|0)!=0)){m=j;do{l=l+1|0;m=m+1|0;B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0))}if(!k)break b}if(!h)break;k=h+-1|0;if((h|0)>0){h=k;n=n+-16|0}else{h=k;break b}}h=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!h){k=50919;do{k=k+1|0;j=j+1|0;B=a[k>>0]|0;h=(d[208+(B&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=k;while(0);if((o|0)==(h|0)){h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216)){B=h;c[B>>2]=1;c[B+4>>2]=0;b[j>>1]=4;break}else{Pg(h,1,0);break}}}}else y=40;while(0);if((y|0)==40){a[l>>0]=0;y=68}do if((y|0)==68){j=c[i+8>>2]|0;k=c[i+12>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);do if(k){h=b[k+8>>1]|0;if((h&514)==514?(a[k+10>>0]|0)==1:0){h=c[k+16>>2]|0;break}if(!(h&1))h=Gg(k,1)|0;else h=0}else h=0;while(0);B=c[m>>2]|0;c[u>>2]=j;c[u+4>>2]=h;c[u+8>>2]=49639;c[u+12>>2]=B;h=Bb(49618,u)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{B=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(z);c[w>>2]=x;Ra=A;return}function jo(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=c[d+24>>2]|0;switch(a[e>>0]|0){case 77:{if((c[i+8>>2]|0)!=(b[e+32>>1]|0))return 0;d=c[d>>2]|0;if((c[d+120>>2]|0)!=(c[i+12>>2]|0))return 0;d=d+272|0;f=c[d>>2]|0;if(!f)return 0;while(1){h=f+12|0;if((c[f>>2]|0)==(e|0))break;g=c[h>>2]|0;if(!g){j=16;break}else{d=h;f=g}}if((j|0)==16)return 0;c[d>>2]=c[h>>2];c[h>>2]=c[i>>2];c[i>>2]=f;j=i+4|0;c[j>>2]=(c[j>>2]|0)+1;return 0}case -94:{if((c[i+8>>2]|0)!=(b[e+32>>1]|0))return 0;if((c[i+12>>2]|0)!=(c[e+44>>2]|0))return 0;d=(c[d>>2]|0)+272|0;f=c[d>>2]|0;if(!f)return 0;while(1){h=f+12|0;if((c[f>>2]|0)==(e|0))break;g=c[h>>2]|0;if(!g){j=16;break}else{d=h;f=g}}if((j|0)==16)return 0;c[d>>2]=c[h>>2];c[h>>2]=c[i>>2];c[i>>2]=f;j=i+4|0;c[j>>2]=(c[j>>2]|0)+1;return 0}default:return 0}return 0}function ko(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=Ra;Ra=Ra+32|0;g=h;e=b+64|0;b=c[e>>2]|0;if(!b){Ra=h;return 0}if((c[b>>2]|0)<=0){Ra=h;return 0}f=g+4|0;d=0;do{i=c[b+8+(d<<4)+8>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;j=c[a>>2]|0;c[g>>2]=j;Kk(j,i,g);$j(a,i)|0;d=d+1|0;b=c[e>>2]|0}while((d|0)<(c[b>>2]|0));Ra=h;return 0}function lo(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;ea=Ra;Ra=Ra+208|0;aa=ea+128|0;$=ea+120|0;_=ea+112|0;ca=ea+104|0;ba=ea+96|0;Z=ea+88|0;n=ea+80|0;W=ea+168|0;X=ea+136|0;Y=ea;k=c[d>>2]|0;o=c[d+236>>2]|0;i=X+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[X>>2]=d;i=c[o+4>>2]|0;j=c[k+16>>2]|0;h=c[o+24>>2]|0;m=d;if(!h)g=-1e6;else{g=0;while(1)if((c[j+(g<<4)+12>>2]|0)==(h|0))break;else g=g+1|0}g=Sd(k,i,c[j+(g<<4)>>2]|0)|0;c[d+120>>2]=g;a[d+144>>0]=a[o+8>>0]|0;if(g|0?(l=Sk(d,g)|0,l|0):0){da=l;Ra=ea;return da|0}i=c[o+12>>2]|0;if(!i)g=0;else{j=X+24|0;b[j>>1]=0;c[W>>2]=m;c[W+4>>2]=125;c[W+8>>2]=126;c[W+12>>2]=0;c[W+24>>2]=X;h=i+24|0;g=d+208|0;U=(c[g>>2]|0)+(c[h>>2]|0)|0;c[g>>2]=U;g=c[(c[d>>2]|0)+120>>2]|0;if((g|0)>=(U|0)){_j(W,i)|0;g=c[W>>2]|0;U=g+208|0;c[U>>2]=(c[U>>2]|0)-(c[h>>2]|0);U=i+4|0;c[U>>2]=c[U>>2]|b[j>>1]&-32752&65535;if((c[X+20>>2]|0)>0)g=1;else g=(c[g+36>>2]|0)>0&1}else{c[n>>2]=g;cd(d,41637,n);g=1}}h=c[o+28>>2]|0;if(!((g|0)==0&(h|0)!=0)){da=g;Ra=ea;return da|0}q=d+36|0;r=d+12|0;s=Y+16|0;t=Y+24|0;u=X+4|0;v=X+24|0;w=W+4|0;x=W+8|0;y=W+12|0;z=W+24|0;A=X+8|0;B=X+20|0;C=W+4|0;D=W+8|0;E=W+12|0;F=W+24|0;G=W+4|0;H=W+8|0;I=W+12|0;J=W+24|0;K=W+4|0;L=W+8|0;M=W+12|0;N=W+24|0;O=W+4|0;P=W+8|0;Q=W+12|0;R=W+24|0;S=W+4|0;T=W+8|0;U=W+12|0;p=W+24|0;while(1){g=c[h+8>>2]|0;if((g|0?(Kk(d,g,X),c[q>>2]|0):0)?(V=c[r>>2]|0,V|0):0){g=V;da=76;break}k=h+12|0;g=c[k>>2]|0;if(!g)g=0;else{j=bd(d,0,g,f)|0;if(!j){g=1;da=76;break}g=Sk(d,j)|0;if(g|0){da=76;break}g=Y;i=g+80|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(i|0));c[Y>>2]=1;c[s>>2]=c[k>>2];c[t>>2]=j;c[u>>2]=Y;j=c[h+16>>2]|0;do if(!j)da=26;else{k=e[v>>1]|0;b[v>>1]=k&28655;g=c[X>>2]|0;c[W>>2]=g;c[w>>2]=125;c[x>>2]=126;c[y>>2]=0;c[z>>2]=X;l=j+24|0;i=g+208|0;o=(c[i>>2]|0)+(c[l>>2]|0)|0;c[i>>2]=o;i=c[(c[g>>2]|0)+120>>2]|0;if((i|0)>=(o|0)){_j(W,j)|0;g=c[W>>2]|0;o=g+208|0;c[o>>2]=(c[o>>2]|0)-(c[l>>2]|0);o=b[v>>1]|0;n=j+4|0;c[n>>2]=c[n>>2]|o&-32752&65535;b[v>>1]=k&36880|o&65535;if((c[B>>2]|0)<=0)if((c[g+36>>2]|0)<1){da=26;break}else{g=1;break}}else{c[Z>>2]=i;cd(g,41637,Z)}g=1}while(0);a:do if((da|0)==26){da=0;k=c[h+20>>2]|0;if((k|0)!=0?(c[k>>2]|0)>0:0){j=0;while(1){l=c[k+4+(j*20|0)>>2]|0;if(l){m=e[v>>1]|0;b[v>>1]=m&28655;g=c[X>>2]|0;c[W>>2]=g;c[C>>2]=125;c[D>>2]=126;c[E>>2]=0;c[F>>2]=X;n=l+24|0;i=g;fa=i+208|0;o=(c[fa>>2]|0)+(c[n>>2]|0)|0;c[fa>>2]=o;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(o|0)){da=33;break}_j(W,l)|0;g=c[W>>2]|0;fa=g+208|0;c[fa>>2]=(c[fa>>2]|0)-(c[n>>2]|0);fa=b[v>>1]|0;o=l+4|0;c[o>>2]=c[o>>2]|fa&-32752&65535;b[v>>1]=m&36880|fa&65535;if((c[B>>2]|0)>0)break;if((c[g+36>>2]|0)>=1){g=2;break a}}j=j+1|0;if((j|0)>=(c[k>>2]|0)){g=0;break a}}if((da|0)==33){da=0;c[ba>>2]=i;cd(g,41637,ba)}g=2}else g=0}while(0);o=c[h+28>>2]|0;if(o){c[o+20>>2]=Y;c[A>>2]=o;b[v>>1]=512;n=c[o>>2]|0;b:do if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;g=512;while(1){l=c[n+4+(m*20|0)>>2]|0;if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=X;k=l+24|0;i=g;ga=i+208|0;fa=(c[ga>>2]|0)+(c[k>>2]|0)|0;c[ga>>2]=fa;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(fa|0)){da=45;break}_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)>=1){g=2;break b}}m=m+1|0;if((m|0)>=(c[n>>2]|0)){da=49;break b}}if((da|0)==45){da=0;c[ca>>2]=i;cd(g,41637,ca)}g=2}else{g=512;da=49}while(0);c:do if((da|0)==49){da=0;n=c[o+8>>2]|0;d:do if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;while(1){l=c[n+4+(m*20|0)>>2]|0;if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[O>>2]=125;c[P>>2]=126;c[Q>>2]=0;c[R>>2]=X;k=l+24|0;i=g;fa=i+208|0;ga=(c[fa>>2]|0)+(c[k>>2]|0)|0;c[fa>>2]=ga;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(ga|0)){da=56;break}_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)>=1){g=2;break c}}m=m+1|0;if((m|0)>=(c[n>>2]|0))break d}if((da|0)==56){da=0;c[_>>2]=i;cd(g,41637,_)}g=2;break c}while(0);l=c[o+12>>2]|0;e:do if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[K>>2]=125;c[L>>2]=126;c[M>>2]=0;c[N>>2]=X;k=l+24|0;i=g+208|0;ga=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=ga;i=c[(c[g>>2]|0)+120>>2]|0;do if((i|0)>=(ga|0)){_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)<1)break e;else{g=1;break c}}else{c[$>>2]=i;cd(g,41637,$)}while(0);g=1;break c}while(0);l=c[o+4>>2]|0;do if(!l)g=0;else{j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[S>>2]=125;c[T>>2]=126;c[U>>2]=0;c[p>>2]=X;k=l+24|0;i=g+208|0;ga=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=ga;i=c[(c[g>>2]|0)+120>>2]|0;if((i|0)<(ga|0)){c[aa>>2]=i;cd(g,41637,aa);g=1;break}_j(W,l)|0;g=c[W>>2]|0;ga=g+208|0;c[ga>>2]=(c[ga>>2]|0)-(c[k>>2]|0);ga=b[v>>1]|0;fa=l+4|0;c[fa>>2]=c[fa>>2]|ga&-32752&65535;b[v>>1]=j&36880|ga&65535;if((c[B>>2]|0)>0){g=1;break}g=(c[g+36>>2]|0)>0&1}while(0)}while(0);b[v>>1]=0}c[u>>2]=0}h=c[h+36>>2]|0;if(!((g|0)==0&(h|0)!=0)){da=76;break}}if((da|0)==76){Ra=ea;return g|0}return 0}function mo(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!f)return;p=c[f>>2]|0;if((p|0)<=0)return;m=((g|0)!=0)<<31>>31;n=b+272|0;o=e+4|0;if(!g){h=0;do{a:do if((c[f+4+(h*20|0)+4>>2]|0)==0?(k=c[n>>2]|0,k|0):0){i=n;b=k;while(1){j=b+12|0;if(!(c[b>>2]|0))break;b=c[j>>2]|0;if(!b)break a;else i=j}c[i>>2]=c[j>>2];c[j>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);h=h+1|0}while((h|0)<(p|0));return}j=0;do{k=c[f+4+(j*20|0)+4>>2]|0;if(k){i=a[k>>0]|0;b=(d[208+(i&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(b|0)!=0)){h=g;i=k;do{i=i+1|0;h=h+1|0;q=a[i>>0]|0;b=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(b|0)!=0))}}else b=m;b:do if((b|0)==0?(l=c[n>>2]|0,l|0):0){h=n;b=l;while(1){i=b+12|0;if((c[b>>2]|0)==(k|0))break;b=c[i>>2]|0;if(!b)break b;else h=i}c[h>>2]=c[i>>2];c[i>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);j=j+1|0}while((j|0)<(p|0));return}function no(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!f)return;p=c[f+4>>2]|0;if((p|0)<=0)return;m=((g|0)!=0)<<31>>31;n=b+272|0;o=e+4|0;if(!g){h=0;do{a:do if((c[(c[f>>2]|0)+(h<<3)>>2]|0)==0?(k=c[n>>2]|0,k|0):0){i=n;b=k;while(1){j=b+12|0;if(!(c[b>>2]|0))break;b=c[j>>2]|0;if(!b)break a;else i=j}c[i>>2]=c[j>>2];c[j>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);h=h+1|0}while((h|0)<(p|0));return}j=0;do{k=c[(c[f>>2]|0)+(j<<3)>>2]|0;if(k){i=a[k>>0]|0;b=(d[208+(i&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(b|0)!=0)){h=g;i=k;do{i=i+1|0;h=h+1|0;q=a[i>>0]|0;b=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(b|0)!=0))}}else b=m;b:do if((b|0)==0?(l=c[n>>2]|0,l|0):0){h=n;b=l;while(1){i=b+12|0;if((c[b>>2]|0)==(k|0))break;b=c[i>>2]|0;if(!b)break b;else h=i}c[h>>2]=c[i>>2];c[i>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);j=j+1|0}while((j|0)<(p|0));return}function oo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[b+12>>2]|0;if(d|0)_j(a,d)|0;b=c[b+28>>2]|0;if(!b)return;do{$j(a,c[b+8>>2]|0)|0;d=c[b+16>>2]|0;if(d|0)_j(a,d)|0;d=c[b+20>>2]|0;a:do if(d|0?(h=c[d>>2]|0,(h|0)>0):0){f=h;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break a;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);g=c[b+28>>2]|0;if(g|0){d=c[g>>2]|0;b:do if(d|0?(i=c[d>>2]|0,(i|0)>0):0){f=i;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break b;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);d=c[g+8>>2]|0;c:do if(d|0?(j=c[d>>2]|0,(j|0)>0):0){f=j;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break c;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);d=c[g+12>>2]|0;if(d|0)_j(a,d)|0;d=c[g+4>>2]|0;if(d|0)_j(a,d)|0}b=c[b+36>>2]|0}while((b|0)!=0);return}function po(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;j=z;if(!h)k=0;else k=(Eu(h)|0)&1073741823;if(!g)n=0;else n=(Eu(g)|0)&1073741823;x=c[(c[b>>2]|0)+32>>2]|0;c[j>>2]=h;y=dd(x,49613,j)|0;if(!y){y=7;Ra=z;return y|0}w=(Eu(y)|0)&1073741823;u=(i|0)==0;v=u?k:w;u=u?h:y;h=n+1+(G(c[f+4>>2]|0,w)|0)|0;i=((h|0)<0)<<31>>31;t=(x|0)==0;a:do if(t){s=Sv(h|0,i|0,-1,-1)|0;r=L()|0;if(!(r>>>0>0|(r|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](h)|0;l=30;break}j=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;i=59064;k=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&k>>>0>0){s=c[14978]|0;r=Tv(k|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;l=31}else l=31}else j=7}else j=7}else{if(c[x+272>>2]|0){if(a[x+81>>0]|0){j=7;break}}else{do if(!(0<i>>>0|(0==(i|0)?(e[x+276>>1]|0)>>>0<h>>>0:0))){k=x+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=30;break a}k=x+296|0;j=c[k>>2]|0;if(!j){j=x+292|0;break}else{c[k>>2]=c[j>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=30;break a}}else j=x+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(x,h,i)|0;l=30}while(0);if((l|0)==30)if(!j)j=7;else l=31;do if((l|0)==31){gw(j+n|0,0,(h>>>0>n>>>0?h-n|0:0)|0)|0;ew(j|0,g|0,n|0)|0;l=c[f>>2]|0;b:do if(l|0){s=g;o=x+480|0;p=x+304|0;q=x+308|0;r=x+300|0;if(t)while(1){k=c[l+12>>2]|0;if(!k)m=l;else{h=k;i=l;do{i=(c[h+4>>2]|0)>>>0>(c[i+4>>2]|0)>>>0?h:i;h=c[h+12>>2]|0}while((h|0)!=0);m=i}if((l|0)==(m|0))k=f;else{if((k|0)==(m|0))k=l;else while(1){i=c[k+12>>2]|0;if((i|0)==(m|0))break;else k=i}k=k+12|0}c[k>>2]=c[m+12>>2];g=c[m+4>>2]|0;l=(a[880+(d[g>>0]|0)>>0]&70)==0;h=l?w:v;g=g-s|0;k=m+8|0;i=c[k>>2]|0;if((i|0)==(h|0))k=n;else{r=g+i|0;fw(j+(h+g)|0,j+r|0,n-r|0)|0;k=h-(c[k>>2]|0)+n|0;a[j+k>>0]=0}ew(j+g|0,(l?y:u)|0,h|0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{r=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}l=c[f>>2]|0;if(!l)break b;else n=k}while(1){k=c[l+12>>2]|0;if(!k)m=l;else{h=k;i=l;do{i=(c[h+4>>2]|0)>>>0>(c[i+4>>2]|0)>>>0?h:i;h=c[h+12>>2]|0}while((h|0)!=0);m=i}if((l|0)==(m|0))k=f;else{if((k|0)==(m|0))k=l;else while(1){i=c[k+12>>2]|0;if((i|0)==(m|0))break;else k=i}k=k+12|0}c[k>>2]=c[m+12>>2];g=c[m+4>>2]|0;l=(a[880+(d[g>>0]|0)>>0]&70)==0;h=l?w:v;g=g-s|0;k=m+8|0;i=c[k>>2]|0;if((i|0)==(h|0))k=n;else{i=g+i|0;fw(j+(h+g)|0,j+i|0,n-i|0)|0;k=h-(c[k>>2]|0)+n|0;a[j+k>>0]=0}ew(j+g|0,(l?y:u)|0,h|0)|0;do if(!(c[o>>2]|0)){n=m;if((c[p>>2]|0)>>>0<=n>>>0?(c[q>>2]|0)>>>0>n>>>0:0){c[m>>2]=c[r>>2];c[r>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(x,m);while(0);l=c[f>>2]|0;if(!l)break;else n=k}}while(0);if((yc(c[b>>2]|0,j,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}if(!t){if(c[x+480>>2]|0){Xd(x,j);j=0;break}f=j;if((c[x+304>>2]|0)>>>0<=f>>>0?(c[x+308>>2]|0)>>>0>f>>>0:0){x=x+300|0;c[j>>2]=c[x>>2];c[x>>2]=j;j=0;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=0;break}else{x=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=0;break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);y=j;Ra=z;return y|0}else{x=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);y=j;Ra=z;return y|0}return 0}function qo(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=c[b>>2]|0;i=c[b+8>>2]|0;do if(i|0){j=i+20|0;e=c[j>>2]|0;if((e|0)<832317811)switch(e|0){case 770837923:{m=3;break}default:{}}else switch(e|0){case 832317811:{m=3;break}default:{}}if((m|0)==3)kc(i)|0;g=c[i>>2]|0;kb(g,i);h=c[i+4>>2]|0;f=i+8|0;e=c[f>>2]|0;if(!h)c[g+4>>2]=e;else{c[h+8>>2]=e;e=c[f>>2]|0}if(e|0)c[e+4>>2]=h;c[j>>2]=1443283912;c[i>>2]=0;if(g|0){if(c[g+480>>2]|0){Xd(g,i);break}m=i;if((c[g+304>>2]|0)>>>0<=m>>>0?(c[g+308>>2]|0)>>>0>m>>>0:0){m=g+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);e=c[b+228>>2]|0;do if(e|0){if(o|0?c[o+480>>2]|0:0){Vi(o,e);break}l=e+32|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;if(!m)Vi(o,e)}while(0);g=b+232|0;e=c[g>>2]|0;if(e|0){h=(o|0)==0;i=o+480|0;j=o+304|0;k=o+308|0;l=o+300|0;do{c[g>>2]=c[e+20>>2];f=c[e+36>>2]|0;if(f|0)ni(o,f);f=c[e+40>>2]|0;if(f|0)ri(o,f);f=c[e+16>>2]|0;do if(f|0){if(!h){if(c[i>>2]|0){Xd(o,f);break}m=f;if((c[j>>2]|0)>>>0<=m>>>0?(c[k>>2]|0)>>>0>m>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{m=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);m=e+55|0;a:do if(((d[m>>0]|d[m+1>>0]<<8)&16)!=0?(n=c[e+32>>2]|0,(n|0)!=0):0){do if(!h){if(!(c[i>>2]|0)){f=n;if((c[j>>2]|0)>>>0>f>>>0)break;if((c[k>>2]|0)>>>0<=f>>>0)break;c[n>>2]=c[l>>2];c[l>>2]=n}else Xd(o,n);f=e;m=53;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);m=52;break}else{m=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);m=52;break}}else m=52;while(0);if((m|0)==52)if(h)m=58;else{f=e;m=53}do if((m|0)==53){m=0;if(c[i>>2]|0){Xd(o,f);break}p=e;if((c[j>>2]|0)>>>0<=p>>>0?(c[k>>2]|0)>>>0>p>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e}else{e=f;m=58}}while(0);do if((m|0)==58)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[g>>2]|0}while((e|0)!=0)}n=c[b+236>>2]|0;do if(n|0){Xi(o,c[n+28>>2]|0);e=c[n>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[n+4>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[n+12>>2]|0;if(e|0)ni(o,e);e=c[n+16>>2]|0;b:do if(e){l=e+4|0;f=c[e>>2]|0;c:do if((c[l>>2]|0)>0){h=o+480|0;i=o+304|0;j=o+308|0;k=o+300|0;if(!o){g=0;while(1){f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[e>>2]|0;if((g|0)>=(c[l>>2]|0))break c}}g=0;do{f=c[f+(g<<3)>>2]|0;do if(f|0){if(c[h>>2]|0){Xd(o,f);break}p=f;if((c[i>>2]|0)>>>0<=p>>>0?(c[j>>2]|0)>>>0>p>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);g=g+1|0;f=c[e>>2]|0}while((g|0)<(c[l>>2]|0))}while(0);d:do if(f){do if(o|0){g=o+480|0;if(!(c[g>>2]|0)){h=f;if((c[o+304>>2]|0)>>>0>h>>>0)break;if((c[o+308>>2]|0)>>>0<=h>>>0)break;p=o+300|0;c[f>>2]=c[p>>2];c[p>>2]=f}else Xd(o,f);f=g;g=e;m=118;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);m=116;break}else{m=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);m=116;break}}else m=116;while(0);if((m|0)==116)if(o){f=o+480|0;g=e;m=118}do if((m|0)==118){if(!(c[f>>2]|0)){e=g;if((c[o+304>>2]|0)>>>0>e>>>0){e=g;break}if((c[o+308>>2]|0)>>>0<=e>>>0){e=g;break}p=o+300|0;c[g>>2]=c[p>>2];c[p>>2]=g}else Xd(o,g);e=n;m=129;break b}while(0);if(e)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);m=128;break}else{m=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);m=128;break}else m=128}else m=128;while(0);if((m|0)==128)if(!o)e=n;else{e=n;m=129}if((m|0)==129){if(c[o+480>>2]|0){Xd(o,e);break}p=n;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[n>>2]=c[p>>2];c[p>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[b+4>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);ro(o,c[b+272>>2]|0);f=c[b>>2]|0;e=c[b+64>>2]|0;do if(e|0){if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}p=e;if((c[f+304>>2]|0)>>>0<=p>>>0?(c[f+308>>2]|0)>>>0>p>>>0:0){p=f+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[b+68>>2]|0;if(e|0)ri(f,e);e=b+24|0;if(!f){a[e>>0]=0;return}p=f+272|0;c[p>>2]=(c[p>>2]|0)-(d[e>>0]|0);a[e>>0]=0;return}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;e=a+480|0;f=a+304|0;g=a+308|0;h=a+300|0;if(!a){do{d=b;b=c[b+12>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0);return}do{d=b;b=c[b+12>>2]|0;do if(!(c[e>>2]|0)){i=d;if((c[f>>2]|0)>>>0<=i>>>0?(c[g>>2]|0)>>>0>i>>>0:0){c[d>>2]=c[h>>2];c[h>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}else Xd(a,d);while(0)}while((b|0)!=0);return}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=c[b+24>>2]|0;if((a[d>>0]|0)!=-94)return 0;f=d+44|0;if((c[g+12>>2]|0)!=(c[f>>2]|0))return 0;d=(c[b>>2]|0)+272|0;b=c[d>>2]|0;if(!b)return 0;while(1){e=b+12|0;if((c[b>>2]|0)==(f|0))break;b=c[e>>2]|0;if(!b){h=8;break}else d=e}if((h|0)==8)return 0;c[d>>2]=c[e>>2];c[e>>2]=c[g>>2];c[g>>2]=b;h=g+4|0;c[h>>2]=(c[h>>2]|0)+1;return 0}function to(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+32|0;p=q;m=c[a+24>>2]|0;n=c[b+32>>2]|0;if(!n){p=2;Ra=q;return p|0}o=c[n>>2]|0;if((o|0)>0){g=m+12|0;h=m+4|0;f=0;do{a:do if((c[n+8+(f*72|0)+16>>2]|0)==(c[g>>2]|0)?(i=c[n+8+(f*72|0)+8>>2]|0,j=(c[a>>2]|0)+272|0,k=c[j>>2]|0,k|0):0){e=j;d=k;while(1){l=d+12|0;if((c[d>>2]|0)==(i|0))break;d=c[l>>2]|0;if(!d)break a;else e=l}c[e>>2]=c[l>>2];c[l>>2]=c[m>>2];c[m>>2]=d;c[h>>2]=(c[h>>2]|0)+1}while(0);f=f+1|0}while((f|0)<(o|0))}f=b+64|0;d=c[f>>2]|0;if(!d){p=0;Ra=q;return p|0}if((c[d>>2]|0)<=0){p=0;Ra=q;return p|0}b=p+4|0;e=0;do{o=c[d+8+(e<<4)+8>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;n=c[a>>2]|0;c[p>>2]=n;Kk(n,o,p);$j(a,o)|0;e=e+1|0;d=c[f>>2]|0}while((e|0)<(c[d>>2]|0));d=0;Ra=q;return d|0}function uo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;f=d;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;e=L()|0;a=d;c[a>>2]=f;c[a+4>>2]=e;return}function vo(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d){e=0;f=0}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function wo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+8|0;c[a>>2]=1;c[a+4>>2]=0;return}function xo(a){a=a|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+8|0;h=e;g=d;f=c[g>>2]|0;g=c[g+4>>2]|0;if(!((c[h>>2]|0)==0&(c[h+4>>2]|0)==0)){f=Sv(f|0,g|0,1,0)|0;g=L()|0;h=d;c[h>>2]=f;c[h+4>>2]=g;h=e;c[h>>2]=0;c[h+4>>2]=0}d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){h=d;c[h>>2]=f;c[h+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}function yo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;f=d+8|0;e=f;e=Sv(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;a=L()|0;c[f>>2]=e;c[f+4>>2]=a;f=d;if(!((c[f>>2]|0)==0&(c[f+4>>2]|0)==0))return;f=d;c[f>>2]=e;c[f+4>>2]=a;return}function zo(a){a=a|0;var d=0,e=0,f=0,g=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))e=Ic(a,24)|0;else e=c[d+16>>2]|0;if(!e)return;g=e;f=c[g>>2]|0;g=c[g+4>>2]|0;d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=f;c[d+4>>2]=g;b[a>>1]=4}else Pg(d,f,g);g=e;c[g>>2]=0;c[g+4>>2]=0;return}function Ao(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Bo(a){a=a|0;var d=0,e=0,f=0.0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l+8|0;k=l;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d){Ra=l;return}i=d+8|0;h=c[i>>2]|0;i=c[i+4>>2]|0;e=d;c[e>>2]=h;c[e+4>>2]=i;e=d+16|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>1){d=Sv(d|0,e|0,-1,-1)|0;f=(+(h>>>0)+4294967296.0*+(i|0))/(+(d>>>0)+4294967296.0*+(L()|0));d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[j>>3]=f;g[k>>3]=+g[j>>3];if(!(+g[j>>3]==+g[k>>3])){Ra=l;return}g[d>>3]=f;b[e>>1]=8;Ra=l;return}else{d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[j>>3]=0.0;g[k>>3]=+g[j>>3];if(!(+g[j>>3]==+g[k>>3])){Ra=l;return}g[d>>3]=0.0;b[e>>1]=8;Ra=l;return}}function Co(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+8|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Do(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Eo(a){a=a|0;var d=0,e=0.0,f=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){Ra=i;return}j=d+8|0;d=d+16|0;e=(+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0))/(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0));d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216))b[a>>1]=1;else Dg(d);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[d>>3]=e;b[a>>1]=8;Ra=i;return}function Fo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+8|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Go(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0;f=c[d+8>>2]|0;if(!(b[f+8>>1]&8192))i=Ic(d,24)|0;else i=c[f+16>>2]|0;if(!i)return;f=i;do if((c[f>>2]|0)==0&(c[f+4>>2]|0)==0){f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){j=Mg(+g[f>>3])|0;k=L()|0;l=13;break}if(!(h&18)){h=i+8|0;c[h>>2]=0;c[h+4>>2]=0;break}else{j=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;k=L()|0;l=13;break}}else{k=f;j=c[k>>2]|0;k=c[k+4>>2]|0;l=13}while(0);if((l|0)==13?(l=i+8|0,c[l>>2]=j,c[l+4>>2]=k,!((k|0)<0|(k|0)==0&j>>>0<1)):0)break;c[d+20>>2]=1;yc(c[d>>2]|0,49664,-1,1,-1)|0}while(0);j=i;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=L()|0;l=i;c[l>>2]=j;c[l+4>>2]=k;return}function Ho(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))l=Ic(a,24)|0;else l=c[d+16>>2]|0;if(!l)return;e=l+8|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if(!((e|0)>0|(e|0)==0&d>>>0>0))return;g=l;f=c[g>>2]|0;g=c[g+4>>2]|0;m=Wv(f|0,g|0,d|0,e|0)|0;L()|0;if(!m){f=l+16|0;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}n=((m|0)<0)<<31>>31;h=Yv(d|0,e|0,m|0,n|0)|0;f=Tv(f|0,g|0,h|0,L()|0)|0;g=L()|0;h=m+1|0;i=((h|0)<0)<<31>>31;j=Yv(f|0,g|0,h|0,i|0)|0;k=L()|0;e=l+16|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)<(k|0)|(e|0)==(k|0)&d>>>0<j>>>0){f=Wv(d|0,e|0,h|0,i|0)|0;f=Sv(f|0,L()|0,1,0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}else{l=Sv(f|0,g|0,1,0)|0;g=L()|0;f=Tv(d|0,e|0,j|0,k|0)|0;f=Wv(f|0,L()|0,m|0,n|0)|0;f=Sv(l|0,g|0,f|0,L()|0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}}function Io(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Jo(d,e,f){d=d|0;e=e|0;f=f|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,8)|0;else e=c[e+16>>2]|0;if(!e)return;uc(c[e>>2]|0);f=tc(c[f>>2]|0)|0;c[e>>2]=f;if(f|0){d=e+4|0;c[d>>2]=(c[d>>2]|0)+1;return}e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Ko(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function Lo(a){a=a|0;var d=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;d=c[d>>2]|0;if(!d)return;Dc(a,d);return}function Mo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+4|0;a=(c[e>>2]|0)+-1|0;c[e>>2]=a;if(a|0)return;uc(c[d>>2]|0);c[d>>2]=0;return}function No(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;o=x+8|0;p=x;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))r=Ic(f,16)|0;else r=c[h+16>>2]|0;if(!r){Ra=x;return}q=i+4|0;m=c[q>>2]|0;n=m+8|0;l=b[n>>1]&31;h=d[816+l>>0]|0;if((l|16|0)==18){h=a[m+10>>0]|0;j=m+16|0;l=m+12|0;if(!(Lg(c[j>>2]|0,o,c[l>>2]|0,h)|0))h=b[n>>1]|0;else{if(!(Og(c[j>>2]|0,p,c[l>>2]|0,h)|0)){o=p;p=c[o+4>>2]|0;h=m;c[h>>2]=c[o>>2];c[h+4>>2]=p;h=4}else{g[m>>3]=+g[o>>3];h=8}h=b[n>>1]&-3|h;b[n>>1]=h}h=d[816+(h&31)>>0]|0}a:do switch((h&255)<<24>>24){case 1:{h=c[q>>2]|0;j=e[h+8>>1]|0;if(j&4|0){v=h;u=c[v+4>>2]|0;v=c[v>>2]|0;w=27;break a}if(j&8|0){v=Mg(+g[h>>3])|0;u=L()|0;w=27;break a}if(j&18|0){v=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;u=L()|0;w=27}break}case 2:{h=c[q>>2]|0;j=e[h+8>>1]|0;do if(!(j&8)){if(j&4|0){q=h;k=+((c[q>>2]|0)>>>0)+4294967296.0*+(c[q+4>>2]|0);break}if(!(j&18))k=0.0;else k=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else k=+g[h>>3];while(0);h=~~k>>>0;j=+t(k)>=1.0?(k>0.0?~~+H(+s(k/4294967296.0),4294967295.0)>>>0:~~+F((k-+(~~k>>>0))/4294967296.0)>>>0):0;if(k==+(h>>>0)+4294967296.0*+(j|0)){u=j;v=h;w=27}break}default:{}}while(0);if((w|0)==27?!((u|0)<0|(u|0)==0&v>>>0<1):0){q=r;q=Sv(c[q>>2]|0,c[q+4>>2]|0,1,0)|0;w=L()|0;p=r;c[p>>2]=q;c[p+4>>2]=w;if(!((v|0)==(q|0)&(u|0)==(w|0))){Ra=x;return}w=tc(c[i>>2]|0)|0;c[r+8>>2]=w;if(w|0){Ra=x;return}h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(h);h=c[f>>2]|0}c[f+20>>2]=7;h=c[h+32>>2]|0;j=h+81|0;if(a[j>>0]|0){Ra=x;return}if(a[h+82>>0]|0){Ra=x;return}a[j>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;f=h+272|0;c[f>>2]=(c[f>>2]|0)+1;h=c[h+236>>2]|0;if(!h){Ra=x;return}c[h+12>>2]=7;Ra=x;return}c[f+20>>2]=1;yc(c[f>>2]|0,44153,-1,1,-1)|0;Ra=x;return}function Oo(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;d=d+8|0;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function Po(a){a=a|0;return}function Qo(d,e,f){d=d|0;e=e|0;f=f|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,16)|0;else e=c[e+16>>2]|0;if(!e)return;e=e+8|0;if(c[e>>2]|0)return;f=tc(c[f>>2]|0)|0;c[e>>2]=f;if(f|0)return;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Ro(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,16)|0;else d=c[d+16>>2]|0;if(!d)return;d=d+8|0;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function So(d,e,f){d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+64|0;p=r+56|0;q=r+48|0;o=r;if(_o(d,e,f,o)|0){Ra=r;return}l=o+40|0;do if(!(a[l>>0]|0)){n=o+42|0;if(a[n>>0]|0){e=c[o+8>>2]|0;if((e+4713|0)>>>0<=14712){i=c[o+12>>2]|0;j=c[o+16>>2]|0;k=e;m=6}}else{i=1;j=1;k=2e3;m=6}if((m|0)==6?(a[o+41>>0]|0)==0:0){e=(i|0)<3;f=k+(e<<31>>31)|0;h=(+(j+2+((f|0)/-100|0)+((f|0)/400|0)+((((e?i+12|0:i)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;f=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;j=o;c[j>>2]=f;c[j+4>>2]=e;a[l>>0]=1;j=o+43|0;if(!(a[j>>0]|0))break;i=G(c[o+20>>2]|0,36e5)|0;i=((c[o+24>>2]|0)*6e4|0)+i|0;h=+g[o+32>>3]*1.0e3;f=Sv(~~h>>>0|0,(+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0)|0,f|0,e|0)|0;f=Sv(f|0,L()|0,i|0,((i|0)<0)<<31>>31|0)|0;e=L()|0;i=o;c[i>>2]=f;c[i+4>>2]=e;i=o+44|0;if(!(a[i>>0]|0))break;m=(c[o+28>>2]|0)*6e4|0;f=Tv(f|0,e|0,m|0,((m|0)<0)<<31>>31|0)|0;e=L()|0;c[o>>2]=f;c[o+4>>2]=e;a[n>>0]=0;a[j>>0]=0;a[i>>0]=0;break}e=o;f=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));a[o+46>>0]=1;f=0;e=0}else{e=o;f=c[e>>2]|0;e=c[e+4>>2]|0}while(0);h=(+(f>>>0)+4294967296.0*+(e|0))/864.0e5;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(e);g[p>>3]=h;g[q>>3]=+g[p>>3];if(!(+g[p>>3]==+g[q>>3])){Ra=r;return}g[e>>3]=h;b[f>>1]=8;Ra=r;return}function To(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+176|0;j=k+152|0;h=k+104|0;i=k;if(_o(b,d,e,h)|0){Ra=k;return}g=h+42|0;a:do if(!(a[g>>0]|0)){do if(a[h+40>>0]|0){e=h;d=c[e>>2]|0;e=c[e+4>>2]|0;if(e>>>0>108096|(e|0)==108096&d>>>0>275971583){d=h;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[h+46>>0]=1;e=0;f=0;d=0;break a}else{e=Sv(d|0,e|0,432e5,0)|0;e=Wv(e|0,L()|0,864e5,0)|0;L()|0;d=~~((+(e|0)+-1867216.25)/36524.25);d=e+1525+d+((d|0)/-4|0)|0;e=~~((+(d|0)+-122.1)/365.25);d=d-((((e&32767)*36525|0)>>>0)/100|0)|0;f=~~(+(d|0)/30.6001);d=d-~~(+(f|0)*30.6001)|0;c[h+16>>2]=d;f=((f|0)<14?-1:-13)+f|0;c[h+12>>2]=f;e=((f|0)>2?-4716:-4715)+e|0;c[h+8>>2]=e;break}}else{c[h+8>>2]=2e3;c[h+12>>2]=1;c[h+16>>2]=1;d=1;f=1;e=2e3}while(0);a[g>>0]=1}else{e=c[h+8>>2]|0;f=c[h+12>>2]|0;d=c[h+16>>2]|0}while(0);c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=d;Cb(100,i,49994,j)|0;if((yc(c[b>>2]|0,i,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}Ra=k;return}function Uo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+176|0;o=p+152|0;m=p+104|0;n=p;if(_o(b,d,e,m)|0){Ra=p;return}l=m+43|0;if(!(a[l>>0]|0)){d=m+40|0;do if(!(a[d>>0]|0)){if(a[m+42>>0]|0){e=c[m+8>>2]|0;if((e+4713|0)>>>0<=14712){h=c[m+12>>2]|0;i=c[m+16>>2]|0;j=e;k=8}}else{h=1;i=1;j=2e3;k=8}if((k|0)==8?(a[m+41>>0]|0)==0:0){e=(h|0)<3;k=j+(e<<31>>31)|0;f=(+(i+2+((k|0)/-100|0)+((k|0)/400|0)+((((e?h+12|0:h)*306001|0)+306001|0)/1e4|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~f>>>0;e=+t(f)>=1.0?(f>0.0?~~+H(+s(f/4294967296.0),4294967295.0)>>>0:~~+F((f-+(~~f>>>0))/4294967296.0)>>>0):0;j=m;c[j>>2]=k;c[j+4>>2]=e;a[d>>0]=1;d=k;break}d=m;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[m+46>>0]=1;d=0;e=0}else{e=m;d=c[e>>2]|0;e=c[e+4>>2]|0}while(0);j=Sv(d|0,e|0,432e5,0)|0;j=Zv(j|0,L()|0,864e5,0)|0;L()|0;f=+(j|0)/1.0e3;j=~~f;e=(j|0)/3600|0;c[m+20>>2]=e;k=(G(e,-3600)|0)+j|0;d=(k|0)/60|0;c[m+24>>2]=d;f=f-+(j|0)+ +((G(d,-60)|0)+k|0);g[m+32>>3]=f;a[m+41>>0]=0;a[l>>0]=1}else{f=+g[m+32>>3];e=c[m+20>>2]|0;d=c[m+24>>2]|0}c[o>>2]=e;c[o+4>>2]=d;c[o+8>>2]=~~f;Cb(100,n,50009,o)|0;if((yc(c[b>>2]|0,n,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}Ra=p;return}function Vo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0;i=Ra;Ra=Ra+176|0;h=i+152|0;e=i+104|0;f=i;if(_o(a,b,d,e)|0){Ra=i;return}dp(e);l=c[e+12>>2]|0;k=c[e+16>>2]|0;j=c[e+20>>2]|0;b=c[e+24>>2]|0;d=~~+g[e+32>>3];c[h>>2]=c[e+8>>2];c[h+4>>2]=l;c[h+8>>2]=k;c[h+12>>2]=j;c[h+16>>2]=b;c[h+20>>2]=d;Cb(100,f,50024,h)|0;if((yc(c[a>>2]|0,f,-1,1,-1)|0)==18){c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0}Ra=i;return}function Wo(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0.0;$=Ra;Ra=Ra+240|0;Y=$+232|0;X=$+224|0;W=$+216|0;V=$+208|0;U=$+200|0;T=$+192|0;S=$+184|0;_=$+176|0;Z=$+168|0;R=$+160|0;Q=$+152|0;O=$+104|0;P=$;if(!f){Ra=$;return}i=c[h>>2]|0;if(!i){Ra=$;return}j=b[i+8>>1]|0;if((j&514)==514?(a[i+10>>0]|0)==1:0)N=c[i+16>>2]|0;else M=6;do if((M|0)==6)if(!(j&1)){N=Gg(i,1)|0;break}else{Ra=$;return}while(0);if(!N){Ra=$;return}if(_o(d,f+-1|0,h+4|0,O)|0){Ra=$;return}i=c[d>>2]|0;k=c[i+32>>2]|0;j=0;h=1;f=0;a:while(1){b:do switch(a[N+j>>0]|0){case 0:break a;case 37:{j=j+1|0;switch(a[N+j>>0]|0){case 37:case 119:break b;case 87:case 83:case 77:case 109:case 72:case 100:{h=Sv(h|0,f|0,1,0)|0;f=L()|0;break b}case 102:{h=Sv(h|0,f|0,8,0)|0;f=L()|0;break b}case 106:{h=Sv(h|0,f|0,3,0)|0;f=L()|0;break b}case 89:{h=Sv(h|0,f|0,8,0)|0;f=L()|0;break b}case 74:case 115:{h=Sv(h|0,f|0,50,0)|0;f=L()|0;break b}default:{M=86;break a}}}default:{}}while(0);h=Sv(h|0,f|0,1,0)|0;j=j+1|0;f=L()|0}if((M|0)==86){Ra=$;return}do if(f>>>0<0|(f|0)==0&h>>>0<100)i=P;else{K=c[k+108>>2]|0;J=((K|0)<0)<<31>>31;if(f>>>0>J>>>0|(f|0)==(J|0)&h>>>0>K>>>0){c[d+20>>2]=18;yc(i,31223,-1,1,0)|0;Ra=$;return}f=aw(0,h|0,32)|0;h=L()|0;c:do if(c[k+272>>2]|0){if(!(a[k+81>>0]|0))M=32}else{do if(!(h>>>0>0|((h|0)==0?f>>>0>(e[k+276>>1]|0)>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];M=k+284|0;c[M>>2]=(c[M>>2]|0)+1;M=33;break c}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];M=k+284|0;c[M>>2]=(c[M>>2]|0)+1;M=33;break c}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;M=32}while(0);if((M|0)==32){i=_d(k,f,h)|0;M=33}if((M|0)==33){if(i|0)break;i=c[d>>2]|0}j=i+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(i);i=c[d>>2]|0}c[d+20>>2]=7;i=c[i+32>>2]|0;j=i+81|0;if(a[j>>0]|0){Ra=$;return}if(a[i+82>>0]|0){Ra=$;return}a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;d=i+272|0;c[d>>2]=(c[d>>2]|0)+1;i=c[i+236>>2]|0;if(!i){Ra=$;return}c[i+12>>2]=7;Ra=$;return}while(0);h=O+40|0;K=O+42|0;do if(!(a[h>>0]|0)){if(a[K>>0]|0){j=c[O+8>>2]|0;if((j+4713|0)>>>0<=14712){l=c[O+12>>2]|0;m=c[O+16>>2]|0;n=j;M=47}}else{l=1;m=1;n=2e3;M=47}if((M|0)==47?(a[O+41>>0]|0)==0:0){f=(l|0)<3;j=n+(f<<31>>31)|0;o=(+(m+2+((j|0)/-100|0)+((j|0)/400|0)+((((f?l+12|0:l)*306001|0)+306001|0)/1e4|0)+(((j*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;j=~~o>>>0;f=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0;k=O;c[k>>2]=j;c[k+4>>2]=f;a[h>>0]=1;k=O+43|0;if(!(a[k>>0]|0))break;h=G(c[O+20>>2]|0,36e5)|0;h=((c[O+24>>2]|0)*6e4|0)+h|0;o=+g[O+32>>3]*1.0e3;j=Sv(~~o>>>0|0,(+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0)|0,j|0,f|0)|0;j=Sv(j|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;h=O;c[h>>2]=j;c[h+4>>2]=f;h=O+44|0;if(!(a[h>>0]|0))break;E=(c[O+28>>2]|0)*6e4|0;E=Tv(j|0,f|0,E|0,((E|0)<0)<<31>>31|0)|0;I=L()|0;J=O;c[J>>2]=E;c[J+4>>2]=I;a[K>>0]=0;a[k>>0]=0;a[h>>0]=0;break}j=O;f=j+48|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(f|0));a[O+46>>0]=1}while(0);dp(O);D=O+16|0;E=O+32|0;I=O+20|0;C=O+8|0;x=O+24|0;y=O+28|0;z=O+41|0;A=O+43|0;B=O+44|0;J=O+12|0;w=0;j=0;d:while(1){f=a[N+j>>0]|0;e:do switch(f<<24>>24){case 0:break d;case 37:{v=j+1|0;u=a[N+v>>0]|0;do switch(u<<24>>24|0){case 100:{c[Q>>2]=c[D>>2];Cb(3,i+w|0,50054,Q)|0;f=w+2|0;j=v;break e}case 102:{o=+g[E>>3];j=i+w|0;g[R>>3]=o>59.999?59.999:o;Cb(7,j,50059,R)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 72:{c[Z>>2]=c[I>>2];Cb(3,i+w|0,50054,Z)|0;f=w+2|0;j=v;break e}case 106:case 87:{r=O;q=c[r>>2]|0;r=c[r+4>>2]|0;j=c[C>>2]|0;h=c[I>>2]|0;l=c[x>>2]|0;m=c[y>>2]|0;o=+g[E>>3];f=a[z>>0]|0;n=a[A>>0]|0;p=a[B>>0]|0;if(a[K>>0]|0)if((j+4713|0)>>>0>14712){k=0;j=0}else M=63;else{j=2e3;M=63}if((M|0)==63){M=0;if(!(f<<24>>24)){k=j+-1|0;aa=(+(((k|0)/-100|0)+431+((k|0)/400|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~aa>>>0;j=+t(aa)>=1.0?(aa>0.0?~~+H(+s(aa/4294967296.0),4294967295.0)>>>0:~~+F((aa-+(~~aa>>>0))/4294967296.0)>>>0):0;if(n<<24>>24){l=(l*6e4|0)+(G(h,36e5)|0)|0;aa=o*1.0e3;h=+t(aa)>=1.0?(aa>0.0?~~+H(+s(aa/4294967296.0),4294967295.0)>>>0:~~+F((aa-+(~~aa>>>0))/4294967296.0)>>>0):0;n=p<<24>>24==0;m=m*6e4|0;m=Tv(0,0,m|0,((m|0)<0)<<31>>31|0)|0;p=L()|0;l=Sv(~~aa>>>0|0,h|0,l|0,((l|0)<0)<<31>>31|0)|0;p=Sv(l|0,L()|0,(n?0:m)|0,(n?0:p)|0)|0;k=Sv(p|0,L()|0,k|0,j|0)|0;j=L()|0}}else{k=0;j=0}}f=Sv(q|0,r|0,432e5,0)|0;h=L()|0;j=Wv(Tv(f|0,h|0,k|0,j|0)|0,L()|0,864e5,0)|0;L()|0;if(u<<24>>24==87){f=Wv(f|0,h|0,864e5,0)|0;f=Zv(f|0,L()|0,7,0)|0;L()|0;c[_>>2]=(7-f+j|0)/7|0;Cb(3,i+w|0,50054,_)|0;f=w+2|0;j=v;break e}else{c[S>>2]=j+1;Cb(4,i+w|0,50066,S)|0;f=w+3|0;j=v;break e}}case 74:{j=i+w|0;u=O;g[T>>3]=(+((c[u>>2]|0)>>>0)+4294967296.0*+(c[u+4>>2]|0))/864.0e5;Cb(20,j,34086,T)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 109:{c[U>>2]=c[J>>2];Cb(3,i+w|0,50054,U)|0;f=w+2|0;j=v;break e}case 77:{c[V>>2]=c[x>>2];Cb(3,i+w|0,50054,V)|0;f=w+2|0;j=v;break e}case 115:{j=i+w|0;q=O;q=Sv(Wv(c[q>>2]|0,c[q+4>>2]|0,1e3,0)|0,L()|0,-413362496,-50)|0;r=L()|0;u=W;c[u>>2]=q;c[u+4>>2]=r;Cb(30,j,32524,W)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 83:{c[X>>2]=~~+g[E>>3];Cb(3,i+w|0,50054,X)|0;f=w+2|0;j=v;break e}case 119:{f=O;f=Zv(Wv(Sv(c[f>>2]|0,c[f+4>>2]|0,1296e5,0)|0,L()|0,864e5,0)|0,L()|0,7,0)|0;L()|0;a[i+w>>0]=f+48;f=w+1|0;j=v;break e}case 89:{j=i+w|0;c[Y>>2]=c[C>>2];Cb(5,j,50071,Y)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}default:{a[i+w>>0]=37;f=w+1|0;j=v;break e}}while(0)}default:{a[i+w>>0]=f;f=w+1|0}}while(0);w=f;j=j+1|0}a[i+w>>0]=0;if((yc(c[d>>2]|0,i,-1,1,(i|0)==(P|0)?-1:116)|0)!=18){Ra=$;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=$;return}function Xo(a,b,c){a=a|0;b=b|0;c=c|0;Uo(a,0,0);return}function Yo(a,b,c){a=a|0;b=b|0;c=c|0;Vo(a,0,0);return}function Zo(a,b,c){a=a|0;b=b|0;c=c|0;To(a,0,0);return}function _o(e,f,h,i){e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;ya=Ra;Ra=Ra+96|0;p=ya+72|0;xa=ya+64|0;va=ya+56|0;wa=ya+8|0;q=ya;l=i;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));if(!f){l=(c[e+12>>2]|0)+56|0;j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;do if((k|0)==0&(j|0)==0){j=c[c[(c[e>>2]|0)+32>>2]>>2]|0;if((c[j>>2]|0)>1?(n=c[j+72>>2]|0,(n|0)!=0):0)j=Xa[n&255](j,l)|0;else{j=Xa[c[j+64>>2]&255](j,xa)|0;u=+g[xa>>3]*864.0e5;e=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;xa=l;c[xa>>2]=~~u>>>0;c[xa+4>>2]=e}if(!j){j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;break}xa=l;c[xa>>2]=0;c[xa+4>>2]=0;c[i>>2]=0;c[i+4>>2]=0;i=1;Ra=ya;return i|0}while(0);xa=i;c[xa>>2]=k;c[xa+4>>2]=j;if(!((j|0)>0|(j|0)==0&k>>>0>0)){i=1;Ra=ya;return i|0}a[i+40>>0]=1;i=0;Ra=ya;return i|0}k=c[h>>2]|0;j=b[k+8>>1]|0;if(((d[816+(j&31)>>0]|0)+-1|0)>>>0<2){j=j&65535;do if(!(j&8)){if(j&4|0){aa=k;m=+((c[aa>>2]|0)>>>0)+4294967296.0*+(c[aa+4>>2]|0);break}if(!(j&18))m=0.0;else m=+Kg(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)}else m=+g[k>>3];while(0);g[i+32>>3]=m;a[i+41>>0]=1;if(m>=0.0&m<5373484.5){u=m*864.0e5+.5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=i;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$;a[i+40>>0]=1}}else{if(!k){i=1;Ra=ya;return i|0}if((j&514)==514?(a[k+10>>0]|0)==1:0)n=c[k+16>>2]|0;else v=25;do if((v|0)==25)if(!(j&1)){n=Gg(k,1)|0;break}else{i=1;Ra=ya;return i|0}while(0);if(!n){i=1;Ra=ya;return i|0}k=(a[n>>0]|0)==45;j=k?n+1|0:n;c[p>>2]=xa;c[p+4>>2]=va;c[p+8>>2]=wa;a:do if((bp(j,49795,p)|0)==3){j=j+10|0;while(1){aa=a[j>>0]|0;if(aa<<24>>24==84?1:(a[880+(aa&255)>>0]&1)!=0)j=j+1|0;else break}do if(ap(j,i)|0)if(!(a[j>>0]|0)){a[i+43>>0]=0;break}else{v=39;break a}while(0);a[i+40>>0]=0;a[i+42>>0]=1;aa=c[xa>>2]|0;c[i+8>>2]=k?0-aa|0:aa;c[i+12>>2]=c[va>>2];c[i+16>>2]=c[wa>>2];if(a[i+44>>0]|0)$o(i)}else v=39;while(0);b:do if((v|0)==39?ap(n,i)|0:0){aa=a[n>>0]|0;j=(d[208+(aa&255)>>0]|0)+-110|0;if(!(aa<<24>>24==0|(j|0)!=0)){k=49791;l=n;do{l=l+1|0;k=k+1|0;aa=a[l>>0]|0;j=(d[208+(aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(aa<<24>>24==0|(j|0)!=0))}c:do if(!j){j=c[e+12>>2]|0;if((a[(c[j+104>>2]|0)+((c[e+16>>2]|0)*20|0)>>0]|0)==64){c[e+20>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=56;break}l=j+56|0;j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;do if((k|0)==0&(j|0)==0){j=c[c[(c[e>>2]|0)+32>>2]>>2]|0;if((c[j>>2]|0)>1?(o=c[j+72>>2]|0,(o|0)!=0):0)j=Xa[o&255](j,l)|0;else{j=Xa[c[j+64>>2]&255](j,p)|0;u=+g[p>>3]*864.0e5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=l;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$}if(!j){j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;break}else{aa=l;c[aa>>2]=0;c[aa+4>>2]=0;aa=i;c[aa>>2]=0;c[aa+4>>2]=0;break c}}while(0);aa=i;c[aa>>2]=k;c[aa+4>>2]=j;if((j|0)>0|(j|0)==0&k>>>0>0){a[i+40>>0]=1;break b}}else v=56;while(0);if((v|0)==56?Lg(n,q,(Eu(n)|0)&1073741823,1)|0:0){m=+g[q>>3];g[i+32>>3]=m;a[i+41>>0]=1;if(!(m>=0.0&m<5373484.5))break;u=m*864.0e5+.5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=i;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$;a[i+40>>0]=1;break}i=1;Ra=ya;return i|0}while(0)}d:do if((f|0)>1){x=e+12|0;y=e+16|0;z=i+41|0;A=i+40|0;B=i+42|0;C=e+20|0;D=i+43|0;E=i+44|0;I=i+32|0;J=i+24|0;K=i+20|0;M=i+45|0;N=i+8|0;O=i+12|0;P=i+16|0;j=i+46|0;Q=wa+40|0;R=wa+42|0;S=wa+41|0;T=wa+46|0;U=wa+8|0;V=wa+12|0;W=wa+16|0;X=wa+43|0;Y=wa+20|0;Z=wa+24|0;_=wa+32|0;$=wa+44|0;aa=wa+28|0;w=1;e:while(1){l=h+(w<<2)|0;n=c[l>>2]|0;k=b[n+8>>1]|0;if((k&514)==514?(a[n+10>>0]|0)==1:0){q=c[n+16>>2]|0;k=n}else if(!(k&1)){q=Gg(n,1)|0;k=c[l>>2]|0}else{q=0;k=n}l=b[k+8>>1]|0;if(!(l&2)){if(!(l&17))v=72}else if((a[k+10>>0]|0)!=1&(l&17)==0)v=72;if((v|0)==72){v=0;Fg(k,1)|0}if(!q){j=1;v=197;break}c[xa>>2]=1;k=a[q>>0]|0;l=k&255;f:do switch(a[208+l>>0]|0){case 108:{if(!(k<<24>>24==0|(l|32|0)!=108)){n=49894;k=q;do{k=k+1|0;n=n+1|0;v=a[k>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0));if(l|0){v=193;break f}}if((a[(c[(c[x>>2]|0)+104>>2]|0)+((c[y>>2]|0)*20|0)>>0]|0)==64){c[C>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=193;break f}else{$o(i);r=cp(i,e,xa)|0;q=L()|0;v=i;q=Sv(c[v>>2]|0,c[v+4>>2]|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=193;break f}}case 117:{o=k<<24>>24==0;if(!(o|(l|32|0)!=117)){k=49904;l=q;do{l=l+1|0;k=k+1|0;r=a[l>>0]|0;n=(d[208+(r&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(n|0)!=0));if(!n)v=87}else v=87;if((v|0)==87?(0,a[z>>0]|0):0){m=+g[I>>3]*1.0e3+21086676.0e7;g[va>>3]=m;if(!(m>=0.0&m<4642690608.0e5)){v=193;break f}a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;r=+t(m)>=1.0?(m>0.0?~~+H(+s(m/4294967296.0),4294967295.0)>>>0:~~+F((m-+(~~m>>>0))/4294967296.0)>>>0):0;v=i;c[v>>2]=~~m>>>0;c[v+4>>2]=r;a[A>>0]=1;a[z>>0]=0;c[xa>>2]=0;v=192;break f}if(!o){n=49914;k=q;do{k=k+1|0;n=n+1|0;v=a[k>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0));if(l|0){v=193;break f}}if((a[(c[(c[x>>2]|0)+104>>2]|0)+((c[y>>2]|0)*20|0)>>0]|0)==64){c[C>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=193;break f}if(a[M>>0]|0){c[xa>>2]=0;v=192;break f}$o(i);k=cp(i,e,xa)|0;l=L()|0;if(!(c[xa>>2]|0)){q=i;q=Tv(c[q>>2]|0,c[q+4>>2]|0,k|0,l|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=cp(i,e,xa)|0;v=Tv(k|0,l|0,v|0,L()|0)|0;r=L()|0;q=i;q=Sv(v|0,r|0,c[q>>2]|0,c[q+4>>2]|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r}a[M>>0]=1;v=193;break}case 119:{g:do if(!(k<<24>>24)){k=49918;v=105}else{o=q;k=49918;l=8;p=7;while(1){o=o+1|0;if(l>>>0<=1)break g;k=k+1|0;l=a[o>>0]|0;if(!(l<<24>>24)){v=105;break g}l=a[208+(l&255)>>0]|0;n=a[208+(d[k>>0]|0)>>0]|0;if(l<<24>>24!=n<<24>>24)break;else{l=p;p=p+-1|0}}sa=l&255;ba=n;v=108}while(0);if((v|0)==105){sa=0;ba=a[208+(d[k>>0]|0)>>0]|0;v=108}if((v|0)==108?(0,(sa|0)!=(ba&255|0)):0){v=193;break f}v=q+8|0;if((Lg(v,va,(Eu(v)|0)&1073741823,1)|0)!=0?(u=+g[va>>3],ua=~~u,u<7.0&((ua|0)>-1&u==+(ua|0))):0){dp(i);a[E>>0]=0;a[A>>0]=0;$o(i);q=i;r=c[q>>2]|0;q=c[q+4>>2]|0;n=Sv(r|0,q|0,1296e5,0)|0;n=Wv(n|0,L()|0,864e5,0)|0;n=Zv(n|0,L()|0,7,0)|0;v=L()|0;k=((ua|0)<0)<<31>>31;o=(v|0)>(k|0)|(v|0)==(k|0)&n>>>0>ua>>>0;l=Sv(n|0,v|0,-7,-1)|0;p=L()|0;v=Tv(ua|0,k|0,(o?l:n)|0,(o?p:v)|0)|0;v=Yv(v|0,L()|0,864e5,0)|0;q=Sv(v|0,L()|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;c[xa>>2]=0;v=192}else v=193;break}case 115:{h:do if(!(k<<24>>24)){k=49927;v=116}else{o=q;k=49927;l=9;p=8;while(1){o=o+1|0;if(l>>>0<=1)break h;k=k+1|0;l=a[o>>0]|0;if(!(l<<24>>24)){v=116;break h}l=a[208+(l&255)>>0]|0;n=a[208+(d[k>>0]|0)>>0]|0;if(l<<24>>24!=n<<24>>24)break;else{l=p;p=p+-1|0}}ta=l&255;ca=n;v=119}while(0);if((v|0)==116){ta=0;ca=a[208+(d[k>>0]|0)>>0]|0;v=119}if((v|0)==119?(v=0,(ta|0)!=(ca&255|0)):0){v=193;break f}l=a[B>>0]|0;do if(a[A>>0]|0){k=q+9|0;if(!(l<<24>>24)){n=i;l=c[n>>2]|0;n=c[n+4>>2]|0;if(n>>>0>108096|(n|0)==108096&l>>>0>275971583){l=i;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));a[j>>0]=1;l=k;break}else{v=Sv(l|0,n|0,432e5,0)|0;v=Wv(v|0,L()|0,864e5,0)|0;L()|0;q=~~((+(v|0)+-1867216.25)/36524.25);q=v+1525+q+((q|0)/-4|0)|0;v=~~((+(q|0)+-122.1)/365.25);q=q-((((v&32767)*36525|0)>>>0)/100|0)|0;r=~~(+(q|0)/30.6001);c[P>>2]=q-~~(+(r|0)*30.6001);r=((r|0)<14?-1:-13)+r|0;c[O>>2]=r;c[N>>2]=((r|0)>2?-4716:-4715)+v;v=129;break}}else l=k}else{if(l<<24>>24){l=q+9|0;break}if(!(a[D>>0]|0)){v=193;break f}c[N>>2]=2e3;c[O>>2]=1;c[P>>2]=1;k=q+9|0;v=129}while(0);if((v|0)==129){a[B>>0]=1;l=k}a[D>>0]=1;c[J>>2]=0;c[K>>2]=0;g[I>>3]=0.0;a[z>>0]=0;a[E>>0]=0;a[A>>0]=0;q=a[l>>0]|0;p=d[208+(q&255)>>0]|0;k=p+-109|0;q=q<<24>>24==0;if(!(q|(k|0)!=0)){n=49937;o=l;do{o=o+1|0;n=n+1|0;v=a[o>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[P>>2]=1;c[xa>>2]=0;v=192;break f}k=p+-121|0;if(!(q|(k|0)!=0)){n=49943;o=l;do{o=o+1|0;n=n+1|0;v=a[o>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[O>>2]=1;c[P>>2]=1;c[xa>>2]=0;v=192;break f}k=p+-100|0;if(!(q|(k|0)!=0)){n=49948;do{l=l+1|0;n=n+1|0;v=a[l>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[xa>>2]=0;v=192}else v=193;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:case 45:case 43:{l=1;i:while(1){k=a[q+l>>0]|0;switch(k<<24>>24){case 58:case 0:break i;default:{}}if(a[880+(k&255)>>0]&1)break;l=l+1|0}k=q+l|0;if(!(Lg(q,va,l,1)|0)){v=149;break e}l=a[k>>0]|0;if(l<<24>>24==58){k=((d[q>>0]|0)+-48|0)>>>0<10?q:q+1|0;l=wa;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));if(!(ap(k,wa)|0)){do if(!(a[Q>>0]|0)){if(a[R>>0]|0){k=c[U>>2]|0;if((k+4713|0)>>>0<=14712){da=c[V>>2]|0;ea=c[W>>2]|0;fa=k;v=156}}else{da=1;ea=1;fa=2e3;v=156}if((v|0)==156?(0,(a[S>>0]|0)==0):0){l=(da|0)<3;k=fa+(l<<31>>31)|0;u=(+(ea+2+((k|0)/-100|0)+((k|0)/400|0)+((((l?da+12|0:da)*306001|0)+306001|0)/1e4|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~u>>>0;l=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;v=wa;c[v>>2]=k;c[v+4>>2]=l;a[Q>>0]=1;if(!(a[X>>0]|0))break;v=G(c[Y>>2]|0,36e5)|0;v=((c[Z>>2]|0)*6e4|0)+v|0;u=+g[_>>3]*1.0e3;k=Sv(~~u>>>0|0,(+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0)|0,k|0,l|0)|0;k=Sv(k|0,L()|0,v|0,((v|0)<0)<<31>>31|0)|0;l=L()|0;v=wa;c[v>>2]=k;c[v+4>>2]=l;if(!(a[$>>0]|0))break;v=(c[aa>>2]|0)*6e4|0;k=Tv(k|0,l|0,v|0,((v|0)<0)<<31>>31|0)|0;l=L()|0;v=wa;c[v>>2]=k;c[v+4>>2]=l;a[R>>0]=0;a[X>>0]=0;a[$>>0]=0;break}l=wa;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));a[T>>0]=1;k=0;l=0}else{l=wa;k=c[l>>2]|0;l=c[l+4>>2]|0}while(0);r=Sv(k|0,l|0,-432e5,-1)|0;r=Zv(r|0,L()|0,864e5,0)|0;v=L()|0;p=(a[q>>0]|0)==45;o=Tv(0,0,r|0,v|0)|0;q=L()|0;r=p?o:r;q=p?q:v;v=wa;c[v>>2]=r;c[v+4>>2]=q;$o(i);a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=i;q=Sv(c[v>>2]|0,c[v+4>>2]|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;c[xa>>2]=0}v=193;break f}if(a[880+(l&255)>>0]&1)do k=k+1|0;while((a[880+(d[k>>0]|0)>>0]&1)!=0);l=(Eu(k)|0)&1073741823;if((l+-3|0)>>>0>7)v=193;else{r=l+-1|0;l=(a[k+r>>0]|32)<<24>>24==115?r:l;$o(i);c[xa>>2]=1;m=+g[va>>3];u=m<0.0?-.5:.5;j:do if((l|0)>0){k:do switch(l|0){case 6:{v=d[k>>0]|0;l=208+v|0;do if((v|32|0)==115){v=d[k+1>>0]|0;l=208+v|0;if((v|32|0)==101){v=d[k+2>>0]|0;l=208+v|0;if((v|32|0)==99){l=d[k+3>>0]|0;if((l|32|0)!=111){ga=208+l|0;ha=111;v=170;break}l=d[k+4>>0]|0;if((l|32|0)!=110){ga=208+l|0;ha=110;v=170;break}l=d[k+5>>0]|0;if((l|32|0)==100)v=171;else{ga=208+l|0;ha=100;v=170}}else{ga=l;ha=99;v=170}}else{ga=l;ha=101;v=170}}else{ga=l;ha=115;v=170}while(0);if((v|0)==170?(v=0,(ha|0)==(d[ga>>0]|0)):0)v=171;if((v|0)==171?(v=0,m>-464269060800.0&m<464269060800.0):0){k=0;break k}r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==109){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==105){l=d[k+2>>0]|0;if((l|32|0)!=110){ia=208+l|0;ja=110;v=178;break}l=d[k+3>>0]|0;if((l|32|0)!=117){ia=208+l|0;ja=117;v=178;break}l=d[k+4>>0]|0;if((l|32|0)!=116){ia=208+l|0;ja=116;v=178;break}k=d[k+5>>0]|0;if((k|32|0)!=101){ia=208+k|0;ja=101;v=178}}else{ia=l;ja=105;v=178}}else{ia=l;ja=109;v=178}while(0);if((v|0)==178?(0,(ja|0)!=(d[ia>>0]|0)):0)break j;if(m>-7737817680.0&m<7737817680.0)k=1;else break j;break}case 4:{v=d[k>>0]|0;l=208+v|0;if((v|32|0)==104){v=d[k+1>>0]|0;l=208+v|0;if((v|32|0)==111){v=d[k+2>>0]|0;l=208+v|0;if((v|32|0)==117){l=d[k+3>>0]|0;if((l|32|0)==114)v=182;else{ka=208+l|0;la=114;v=181}}else{ka=l;la=117;v=181}}else{ka=l;la=111;v=181}}else{ka=l;la=104;v=181}if((v|0)==181?(v=0,(la|0)==(d[ka>>0]|0)):0)v=182;if((v|0)==182?(v=0,m>-128963628.0&m<128963628.0):0){k=2;break k}r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==121){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==101){l=d[k+2>>0]|0;if((l|32|0)!=97){qa=208+l|0;ra=97;v=190;break}k=d[k+3>>0]|0;if((k|32|0)!=114){qa=208+k|0;ra=114;v=190}}else{qa=l;ra=101;v=190}}else{qa=l;ra=121;v=190}while(0);if((v|0)==190?(0,(ra|0)!=(d[qa>>0]|0)):0)break j;if(m>-14713.0&m<14713.0)k=5;else break j;break}case 3:{r=d[k>>0]|0;l=208+r|0;if((r|32|0)==100){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==97){k=d[k+2>>0]|0;if((k|32|0)!=121){ma=208+k|0;na=121;v=184}}else{ma=l;na=97;v=184}}else{ma=l;na=100;v=184}if((v|0)==184?(0,(na|0)!=(d[ma>>0]|0)):0)break j;if(m>-5373485.0&m<5373485.0)k=3;else break j;break}case 5:{r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==109){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==111){r=d[k+2>>0]|0;l=208+r|0;if((r|32|0)==110){l=d[k+3>>0]|0;if((l|32|0)!=116){oa=208+l|0;pa=116;v=187;break}k=d[k+4>>0]|0;if((k|32|0)!=104){oa=208+k|0;pa=104;v=187}}else{oa=l;pa=110;v=187}}else{oa=l;pa=111;v=187}}else{oa=l;pa=109;v=187}while(0);if((v|0)==187?(0,(pa|0)!=(d[oa>>0]|0)):0)break j;if(m>-176546.0&m<176546.0)k=4;else break j;break}default:break j}while(0);switch(a[22816+(k*24|0)>>0]|0){case 1:{dp(i);v=~~m;r=(c[O>>2]|0)+v|0;q=(((r|0)>0?-1:-12)+r|0)/12|0;c[N>>2]=q+(c[N>>2]|0);r=(G(q,-12)|0)+r|0;c[O>>2]=r;a[A>>0]=0;m=m-+(v|0);g[va>>3]=m;break}case 2:{v=~~m;dp(i);c[N>>2]=(c[N>>2]|0)+v;a[A>>0]=0;m=m-+(v|0);g[va>>3]=m;break}default:{}}$o(i);u=u+m*+g[22816+(k*24|0)+16>>3];q=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;r=i;q=Sv(c[r>>2]|0,c[r+4>>2]|0,~~u>>>0|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;c[xa>>2]=0}while(0);a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=193}break}default:v=193}while(0);if((v|0)==192)v=0;else if((v|0)==193?(v=0,c[xa>>2]|0):0){j=1;v=197;break}w=w+1|0;if((w|0)>=(f|0))break d}if((v|0)==149){i=1;Ra=ya;return i|0}else if((v|0)==197){Ra=ya;return j|0}}else j=i+46|0;while(0);$o(i);if(!(a[j>>0]|0)){xa=c[i+4>>2]|0;Ra=ya;return (xa>>>0>108096|(xa|0)==108096&(c[i>>2]|0)>>>0>275971583)&1|0}else{i=1;Ra=ya;return i|0}return 0}function $o(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0;j=b+40|0;if(a[j>>0]|0)return;k=b+42|0;if(a[k>>0]|0){h=c[b+8>>2]|0;if((h+4713|0)>>>0<=14712){d=c[b+12>>2]|0;e=c[b+16>>2]|0;f=h;i=4}}else{d=1;e=1;f=2e3;i=4}if((i|0)==4?(a[b+41>>0]|0)==0:0){i=(d|0)<3;h=f+(i<<31>>31)|0;l=(+(e+2+((h|0)/-100|0)+((h|0)/400|0)+((((i?d+12|0:d)*306001|0)+306001|0)/1e4|0)+(((h*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;d=~~l>>>0;e=+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0;h=b;c[h>>2]=d;c[h+4>>2]=e;a[j>>0]=1;h=b+43|0;if(!(a[h>>0]|0))return;f=G(c[b+20>>2]|0,36e5)|0;f=((c[b+24>>2]|0)*6e4|0)+f|0;l=+g[b+32>>3]*1.0e3;d=Sv(~~l>>>0|0,(+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0)|0,d|0,e|0)|0;d=Sv(d|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;f=b;c[f>>2]=d;c[f+4>>2]=e;f=b+44|0;if(!(a[f>>0]|0))return;i=(c[b+28>>2]|0)*6e4|0;i=Tv(d|0,e|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[b>>2]=i;c[b+4>>2]=j;a[k>>0]=0;a[h>>0]=0;a[f>>0]=0;return}d=b;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[b+46>>0]=1;return}function ap(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+48|0;r=t+16|0;h=t+8|0;q=t;p=t+36|0;m=t+32|0;n=t+28|0;o=t+24|0;c[q>>2]=m;c[q+4>>2]=n;if((bp(b,49807,q)|0)!=2){e=1;Ra=t;return e|0}l=b+5|0;if((a[l>>0]|0)==58){c[h>>2]=o;if((bp(b+6|0,49815,h)|0)!=1){e=1;Ra=t;return e|0}h=b+8|0;if((a[h>>0]|0)==46?(i=b+9|0,f=a[i>>0]|0,((f&255)+-48|0)>>>0<10):0){k=0.0;j=1.0;do{k=k*10.0+ +(f<<24>>24)+-48.0;j=j*10.0;i=i+1|0;f=a[i>>0]|0}while(((f&255)+-48|0)>>>0<10);j=k/j}else{j=0.0;i=h}}else{c[o>>2]=0;j=0.0;i=l}a[e+40>>0]=0;a[e+41>>0]=0;a[e+43>>0]=1;c[e+20>>2]=c[m>>2];c[e+24>>2]=c[n>>2];g[e+32>>3]=j+ +(c[o>>2]|0);while(1){f=i+1|0;if(!(a[880+(d[i>>0]|0)>>0]&1))break;else i=f}b=e+28|0;c[b>>2]=0;h=a[i>>0]|0;switch(h<<24>>24){case 45:{h=-1;s=15;break}case 43:{h=1;s=15;break}default:if((h|32)<<24>>24==122){i=0;s=18}else f=0}do if((s|0)==15){c[r>>2]=q;c[r+4>>2]=p;if((bp(f,49819,r)|0)==2){s=G(((c[q>>2]|0)*60|0)+(c[p>>2]|0)|0,h)|0;c[b>>2]=s;f=i+6|0;i=s;s=18;break}e=1;Ra=t;return e|0}while(0);if((s|0)==18){while(1)if(!(a[880+(d[f>>0]|0)>>0]&1))break;else f=f+1|0;a[e+45>>0]=1;h=a[f>>0]|0;f=i}if(h<<24>>24){e=1;Ra=t;return e|0}a[e+44>>0]=(f|0)!=0&1;e=0;Ra=t;return e|0}function bp(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;n=o;c[n>>2]=g;g=e;e=0;a:while(1){h=(d[f>>0]|0)+208&255;m=d[f+1>>0]|0;k=b[31130+((a[f+2>>0]|0)+-97<<1)>>1]|0;l=a[f+3>>0]|0;if(!(h<<24>>24))h=0;else{j=0;i=h;while(1){i=i+-1<<24>>24;h=a[g>>0]|0;if(((h&255)+-48|0)>>>0>=10){g=11;break a}h=(j*10|0)+-48+(h<<24>>24)|0;g=g+1|0;if(!(i<<24>>24))break;else j=h}}if((h|0)<((m<<24)+-805306368>>24|0)|(h|0)>(k&65535|0)){g=11;break}if(!(l<<24>>24)){g=8;break}if(l<<24>>24!=(a[g>>0]|0)){g=11;break}l=(c[n>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[n>>2]=l+4;c[m>>2]=h;g=g+1|0;f=f+4|0;e=e+1|0}if((g|0)==8){l=(c[n>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[n>>2]=l+4;c[m>>2]=h;n=e+1|0;Ra=o;return n|0}else if((g|0)==11){Ra=o;return e|0}return 0}function cp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;o=Ra;Ra=Ra+64|0;m=o;n=o+48|0;h=m;f=h+48|0;do{c[h>>2]=c[b>>2];h=h+4|0;b=b+4|0}while((h|0)<(f|0));dp(m);b=m+8|0;f=c[b>>2]|0;if((f+-1971|0)>>>0>66){c[b>>2]=2e3;c[m+12>>2]=1;c[m+16>>2]=1;c[m+20>>2]=0;c[m+24>>2]=0;g[m+32>>3]=0.0;f=2e3;j=0;k=0}else{j=m+32|0;p=+(~~(+g[j>>3]+.5)|0);g[j>>3]=p;p=p*1.0e3;j=~~p>>>0;k=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0}c[m+28>>2]=0;i=m+40|0;a[i>>0]=0;l=m+42|0;h=(a[l>>0]|0)==0;b=h?1:c[m+12>>2]|0;if(!(a[m+41>>0]|0)){q=(b|0)<3;f=(h?2e3:f)+(q<<31>>31)|0;p=(+((h?3:(c[m+16>>2]|0)+2|0)+((f|0)/-100|0)+((f|0)/400|0)+((((q?b+12|0:b)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;f=~~p>>>0;b=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0;h=m;c[h>>2]=f;c[h+4>>2]=b;a[i>>0]=1;i=m+43|0;if(a[i>>0]|0){h=G(c[m+20>>2]|0,36e5)|0;h=((c[m+24>>2]|0)*6e4|0)+h|0;f=Sv(j|0,k|0,f|0,b|0)|0;f=Sv(f|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;h=m;c[h>>2]=f;c[h+4>>2]=b;h=m+44|0;if(!(a[h>>0]|0))j=m;else{j=m;c[j>>2]=f;c[j+4>>2]=b;a[l>>0]=0;a[i>>0]=0;a[h>>0]=0;j=m}}else j=m}else{h=m;f=h+48|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(f|0));a[m+46>>0]=1;j=m;f=0;b=0}i=Wv(f|0,b|0,1e3,0)|0;L()|0;c[n>>2]=i+-413362496;i=Ha(n|0)|0;if((i|0)==0|(c[7390]|0)!=0){c[d+20>>2]=1;yc(c[d>>2]|0,49952,-1,1,-1)|0;c[e>>2]=1;e=0;q=0;K(e|0);Ra=o;return q|0}b=c[i+16>>2]|0;f=c[i+20>>2]|0;h=b+1|0;if((f+6613|0)>>>0>14712){b=0;f=0}else{d=c[i>>2]|0;d=Yv(d|0,((d|0)<0)<<31>>31|0,1e3,0)|0;q=L()|0;n=G(c[i+8>>2]|0,36e5)|0;m=(h|0)<3;f=f+1900+(m<<31>>31)|0;p=(+(((f|0)/-100|0)+((c[i+12>>2]|0)+2)+((f|0)/400|0)+((((m?b+13|0:h)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;b=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0;f=((c[i+4>>2]|0)*6e4|0)+n|0;f=Sv(d|0,q|0,f|0,((f|0)<0)<<31>>31|0)|0;b=Sv(f|0,L()|0,~~p>>>0|0,b|0)|0;f=L()|0}c[e>>2]=0;q=j;q=Tv(b|0,f|0,c[q>>2]|0,c[q+4>>2]|0)|0;e=L()|0;K(e|0);Ra=o;return q|0}function dp(b){b=b|0;var d=0,e=0,f=0,h=0,i=0.0;d=b+42|0;if(!(a[d>>0]|0)){do if(a[b+40>>0]|0){f=b;e=c[f>>2]|0;f=c[f+4>>2]|0;if(f>>>0>108096|(f|0)==108096&e>>>0>275971583){d=b;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));d=b+46|0;break}else{f=Sv(e|0,f|0,432e5,0)|0;f=Wv(f|0,L()|0,864e5,0)|0;L()|0;h=~~((+(f|0)+-1867216.25)/36524.25);h=f+1525+h+((h|0)/-4|0)|0;f=~~((+(h|0)+-122.1)/365.25);h=h-((((f&32767)*36525|0)>>>0)/100|0)|0;e=~~(+(h|0)/30.6001);c[b+16>>2]=h-~~(+(e|0)*30.6001);e=((e|0)<14?-1:-13)+e|0;c[b+12>>2]=e;c[b+8>>2]=((e|0)>2?-4716:-4715)+f;break}}else{c[b+8>>2]=2e3;c[b+12>>2]=1;c[b+16>>2]=1}while(0);a[d>>0]=1}d=b+43|0;if(a[d>>0]|0)return;$o(b);e=b;e=Sv(c[e>>2]|0,c[e+4>>2]|0,432e5,0)|0;e=Zv(e|0,L()|0,864e5,0)|0;L()|0;i=+(e|0)/1.0e3;e=~~i;h=(e|0)/3600|0;c[b+20>>2]=h;h=(G(h,-3600)|0)+e|0;f=(h|0)/60|0;c[b+24>>2]=f;i=i-+(e|0)+ +((G(f,-60)|0)+h|0);g[b+32>>3]=i;a[b+41>>0]=0;a[d>>0]=1;return}function ep(a){a=a|0;var b=0,d=0,e=0;e=Ra;Ra=Ra+16|0;d=e;b=lu(a+8|0)|0;if(!b){c[d>>2]=a;Db(7,50076,d);d=0;Ra=e;return d|0}else{d=b;c[d>>2]=a;c[d+4>>2]=((a|0)<0)<<31>>31;d=b+8|0;Ra=e;return d|0}return 0}function fp(a){a=a|0;mu(a+-8|0);return}function gp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=Ra;Ra=Ra+16|0;e=f;a=a+-8|0;d=ou(a,b+8|0)|0;if(!d){c[e>>2]=c[a>>2];c[e+4>>2]=b;Db(7,50114,e);e=0;Ra=f;return e|0}else{e=d;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;e=d+8|0;Ra=f;return e|0}return 0}function hp(a){a=a|0;return c[a+-8>>2]|0}function ip(a){a=a|0;return a+7&-8|0}function jp(a){a=a|0;return 0}function kp(a){a=a|0;return}function lp(a){a=a|0;var b=0;a=59188;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));a=(c[7374]|0)==0;c[14811]=a&1;b=c[7376]|0;c[14812]=a&(b|0)!=0?b:0;c[14800]=10;c[14810]=1;return 0}function mp(a){a=a|0;var b=0;a=59188;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function np(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=((c[14811]|0)*52|0)+68|0;h=Sv(i|0,((i|0)<0)<<31>>31|0,-1,-1)|0;g=L()|0;if(g>>>0>0|(g|0)==0&h>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f){e=0;return e|0}}else{f=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){j=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){j=0;return j|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}gw(f|0,0,i|0)|0;if(!(c[14811]|0))g=59188;else{c[f+80>>2]=10;g=f+68|0}h=g+20|0;i=g+34|0;if(!(b[i>>1]|0)){b[i>>1]=1;c[g+44>>2]=h;c[g+48>>2]=h}c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=d;c[f+16>>2]=a+32+d;j=(e|0)!=0;c[f+20>>2]=j&1;wp(f);if(j){c[f+24>>2]=10;e=g+8|0;j=c[e>>2]|0;c[e>>2]=j+10;c[g+12>>2]=-10-j+10+(c[g+4>>2]|0);c[f+4>>2]=g+16}else c[f+4>>2]=f+40;if(c[f+52>>2]|0){j=f;return j|0}up(f);j=0;return j|0}function op(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!(c[a+20>>2]|0))return;e=c[a>>2]|0;d=a+28|0;g=e+4|0;f=(c[g>>2]|0)+(b-(c[d>>2]|0))|0;c[g>>2]=f;c[e+12>>2]=f+10-(c[e+8>>2]|0);c[d>>2]=b;c[a+32>>2]=((b*9|0)>>>0)/10|0;xp(a);return}function pp(a){a=a|0;return c[a+48>>2]|0}function qp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[(c[a+56>>2]|0)+(((b>>>0)%((c[a+52>>2]|0)>>>0)|0)<<2)>>2]|0;a:do if(e|0){f=e;while(1){if((c[f+8>>2]|0)==(b|0))break;e=c[f+16>>2]|0;if(!e)break a;else f=e}e=f+24|0;a=c[e>>2]|0;if(!a){d=f;return d|0}d=c[f+28>>2]|0;c[d+24>>2]=a;c[(c[e>>2]|0)+28>>2]=d;c[e>>2]=0;d=(c[f+20>>2]|0)+44|0;c[d>>2]=(c[d>>2]|0)+-1;d=f;return d|0}while(0);if(!d){d=0;return d|0}d=Ap(a,b,d)|0;return d|0}function rp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;if((d|0)==0?(c[e+16>>2]|0)>>>0<=(c[e+4>>2]|0)>>>0:0){d=e+44|0;c[b+28>>2]=e+20;e=c[d>>2]|0;c[b+24>>2]=e;c[e+28>>2]=b;c[d>>2]=b;b=a+44|0;c[b>>2]=(c[b>>2]|0)+1;return}d=c[b+20>>2]|0;a=(c[d+56>>2]|0)+((((c[b+8>>2]|0)>>>0)%((c[d+52>>2]|0)>>>0)|0)<<2)|0;while(1){f=c[a>>2]|0;e=f+16|0;if((f|0)==(b|0))break;else a=e}c[a>>2]=c[e>>2];f=d+48|0;c[f>>2]=(c[f>>2]|0)+-1;zp(b);return}function sp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c[a+52>>2]|0;h=a+56|0;d=(c[h>>2]|0)+(((d>>>0)%(g>>>0)|0)<<2)|0;while(1){f=c[d>>2]|0;if((f|0)==(b|0))break;else d=f+16|0}f=b+16|0;c[d>>2]=c[f>>2];c[b+8>>2]=e;d=(c[h>>2]|0)+(((e>>>0)%(g>>>0)|0)<<2)|0;c[f>>2]=c[d>>2];c[d>>2]=b;d=a+36|0;if((c[d>>2]|0)>>>0>=e>>>0)return;c[d>>2]=e;return}function tp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+36|0;d=c[k>>2]|0;if(d>>>0<b>>>0)return;l=a+52|0;e=c[l>>2]|0;if((d-b|0)>>>0<e>>>0){f=(b>>>0)%(e>>>0)|0;i=(d>>>0)%(e>>>0)|0}else{i=e>>>1;f=i;i=i+-1|0}j=a+56|0;h=a+48|0;while(1){d=(c[j>>2]|0)+(f<<2)|0;e=c[d>>2]|0;if(e|0)do{do if((c[e+8>>2]|0)>>>0>=b>>>0){c[h>>2]=(c[h>>2]|0)+-1;c[d>>2]=c[e+16>>2];a=e+24|0;g=c[a>>2]|0;if(!g){zp(e);break}else{m=c[e+28>>2]|0;c[m+24>>2]=g;c[(c[a>>2]|0)+28>>2]=m;c[a>>2]=0;g=(c[e+20>>2]|0)+44|0;c[g>>2]=(c[g>>2]|0)+-1;zp(e);break}}else d=e+16|0;while(0);e=c[d>>2]|0}while((e|0)!=0);if((f|0)==(i|0))break;f=((f+1|0)>>>0)%((c[l>>2]|0)>>>0)|0}c[k>>2]=b+-1;return}function up(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[a>>2]|0;k=a+48|0;a:do if(c[k>>2]|0){b=c[a+36>>2]|0;l=a+52|0;d=c[l>>2]|0;if(b>>>0<d>>>0){e=0;h=(b>>>0)%(d>>>0)|0}else{h=d>>>1;e=h;h=h+-1|0}i=a+56|0;while(1){g=(c[i>>2]|0)+(e<<2)|0;b=c[g>>2]|0;if(b|0)do{c[k>>2]=(c[k>>2]|0)+-1;c[g>>2]=c[b+16>>2];d=b+24|0;f=c[d>>2]|0;if(!f)zp(b);else{m=c[b+28>>2]|0;c[m+24>>2]=f;c[(c[d>>2]|0)+28>>2]=m;c[d>>2]=0;f=(c[b+20>>2]|0)+44|0;c[f>>2]=(c[f>>2]|0)+-1;zp(b)}b=c[g>>2]|0}while((b|0)!=0);if((e|0)==(h|0))break a;e=((e+1|0)>>>0)%((c[l>>2]|0)>>>0)|0}}while(0);l=j+4|0;m=(c[l>>2]|0)-(c[a+28>>2]|0)|0;c[l>>2]=m;l=j+8|0;b=(c[l>>2]|0)-(c[a+24>>2]|0)|0;c[l>>2]=b;c[j+12>>2]=m+10-b;xp(a);b=c[a+64>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+56>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{m=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function vp(a){a=a|0;var b=0,d=0;if(!(c[a+20>>2]|0))return;b=(c[a>>2]|0)+4|0;d=c[b>>2]|0;c[b>>2]=0;xp(a);c[b>>2]=d;return}function wp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=a+52|0;h=c[e>>2]<<1;h=h>>>0>256?h:256;f=Wb(h<<2,0)|0;if(!f)return;g=c[e>>2]|0;d=a+56|0;if(g|0){b=0;do{a=c[(c[d>>2]|0)+(b<<2)>>2]|0;if(a|0)do{k=a+16|0;j=a;a=c[k>>2]|0;i=f+((((c[j+8>>2]|0)>>>0)%(h>>>0)|0)<<2)|0;c[k>>2]=c[i>>2];c[i>>2]=j}while((a|0)!=0);b=b+1|0}while(b>>>0<g>>>0)}qb(c[d>>2]|0);c[d>>2]=f;c[e>>2]=h;return}function xp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=c[a>>2]|0;d=f+48|0;e=f+16|0;f=f+4|0;a:do if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0)do{g=c[d>>2]|0;if(b[g+14>>1]|0)break a;h=g+24|0;i=c[g+28>>2]|0;c[i+24>>2]=c[h>>2];c[(c[h>>2]|0)+28>>2]=i;c[h>>2]=0;h=(c[g+20>>2]|0)+44|0;c[h>>2]=(c[h>>2]|0)+-1;yp(g,1)}while((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0);while(0);if(c[a+48>>2]|0)return;d=a+64|0;e=c[d>>2]|0;if(!e)return;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}c[a+60>>2]=0;c[d>>2]=0;return}function yp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=c[a+20>>2]|0;d=(c[f+56>>2]|0)+((((c[a+8>>2]|0)>>>0)%((c[f+52>>2]|0)>>>0)|0)<<2)|0;while(1){g=c[d>>2]|0;e=g+16|0;if((g|0)==(a|0))break;else d=e}c[d>>2]=c[e>>2];g=f+48|0;c[g>>2]=(c[g>>2]|0)+-1;if(!b)return;zp(a);return}function zp(a){a=a|0;var d=0,e=0;e=c[a+20>>2]|0;a:do if(!(b[a+12>>1]|0)){d=c[a>>2]|0;if(d|0){a=d;do if((c[14816]|0)>>>0<=a>>>0)if((c[14817]|0)>>>0>a>>>0){c[14979]=(c[14979]|0)+-1;c[d>>2]=c[14819];c[14819]=d;d=(c[14820]|0)+1|0;c[14820]=d;c[14821]=(d|0)<(c[14815]|0)&1;break a}else{a=Wa[c[29352>>2]&127](d)|0;break}else a=Wa[c[29352>>2]&127](d)|0;while(0);c[14980]=(c[14980]|0)-a;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{a=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}}else{d=e+60|0;c[a+16>>2]=c[d>>2];c[d>>2]=a}while(0);e=c[e+4>>2]|0;c[e>>2]=(c[e>>2]|0)+-1;return}function Ap(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;m=c[a>>2]|0;q=a+48|0;j=c[q>>2]|0;g=c[a+44>>2]|0;i=j-g|0;if((e|0)==1){if(i>>>0>=(c[m+12>>2]|0)>>>0){d=0;return d|0}if(i>>>0>=(c[a+32>>2]|0)>>>0){d=0;return d|0}if((c[14814]|0)!=0?((c[a+12>>2]|0)+(c[a+8>>2]|0)|0)<=(c[14813]|0):0)e=59284;else e=59072;if(g>>>0<i>>>0&(c[e>>2]|0)!=0){d=0;return d|0}}p=a+52|0;if(j>>>0>=(c[p>>2]|0)>>>0)wp(a);k=c[a+20>>2]|0;do if((k|0)!=0?(h=c[m+48>>2]|0,(b[h+14>>1]|0)==0):0){if(((c[q>>2]|0)+1|0)>>>0<(c[a+28>>2]|0)>>>0){if((c[14814]|0)!=0?((c[a+12>>2]|0)+(c[a+8>>2]|0)|0)<=(c[14813]|0):0)e=59284;else e=59072;if(!(c[e>>2]|0)){r=22;break}}g=h+20|0;i=c[g>>2]|0;l=h+8|0;e=(c[i+56>>2]|0)+((((c[l>>2]|0)>>>0)%((c[i+52>>2]|0)>>>0)|0)<<2)|0;while(1){s=c[e>>2]|0;j=s+16|0;if((s|0)==(h|0))break;else e=j}c[e>>2]=c[j>>2];e=i+48|0;c[e>>2]=(c[e>>2]|0)+-1;e=h+24|0;i=c[h+28>>2]|0;c[i+24>>2]=c[e>>2];c[(c[e>>2]|0)+28>>2]=i;c[e>>2]=0;i=c[g>>2]|0;s=i+44|0;c[s>>2]=(c[s>>2]|0)+-1;if((c[i+16>>2]|0)==(c[a+16>>2]|0)){f=m+16|0;c[f>>2]=k-(c[i+20>>2]|0)+(c[f>>2]|0);f=l;break}else{zp(h);r=22;break}}else r=22;while(0);if((r|0)==22){m=a+60|0;e=c[m>>2]|0;do if(!e){if(((c[q>>2]|0)==0?(n=c[14812]|0,n|0):0)?(o=a+28|0,(c[o>>2]|0)>>>0>=3):0){if((n|0)>0){j=a+16|0;e=c[j>>2]|0;g=((e|0)<0)<<31>>31;h=Yv(e|0,g|0,n|0,((n|0)<0)<<31>>31|0)|0;i=L()|0}else{h=Yv(n|0,((n|0)<0)<<31>>31|0,-1024,-1)|0;i=L()|0;j=a+16|0;g=c[j>>2]|0;e=g;g=((g|0)<0)<<31>>31}e=Yv(e|0,g|0,c[o>>2]|0,0)|0;s=L()|0;o=(i|0)>(s|0)|(i|0)==(s|0)&h>>>0>e>>>0;e=o?e:h;s=Sv(e|0,(o?s:i)|0,-1,-1)|0;o=L()|0;do if(!(o>>>0>0|(o|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](e)|0;break}h=Wa[c[29356>>2]&127](e)|0;if((c[14985]|0)>>>0<e>>>0)c[14985]=e;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){s=c[14978]|0;o=Tv(e|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=s>>>0)&1}g=Wa[c[29340>>2]&127](h)|0;if(g){e=Wa[c[29352>>2]&127](g)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}else g=0}else g=0;while(0);c[a+64>>2]=g;if(!g)e=c[m>>2]|0;else{e=Wa[c[29352>>2]&127](g)|0;i=c[j>>2]|0;e=(e|0)/(i|0)|0;j=c[a+8>>2]|0;k=G(e+-1|0,i)|0;h=g;l=c[m>>2]|0;while(1){s=l;l=h+j|0;c[l>>2]=h;c[l+4>>2]=l+32;b[l+12>>1]=1;b[l+14>>1]=0;c[l+16>>2]=s;c[l+28>>2]=0;e=e+-1|0;if(!e)break;else h=h+i|0}e=g+(k+j)|0;c[m>>2]=e}if(e|0){f=e;r=47;break}}h=c[a+16>>2]|0;if((c[14813]|0)>=(h|0)?(f=c[14819]|0,(f|0)!=0):0){c[14819]=c[f>>2];s=c[14820]|0;c[14820]=s+-1;c[14821]=(s|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<h>>>0)c[14986]=h;e=(c[14979]|0)+1|0;c[14979]=e;if(e>>>0>(c[14983]|0)>>>0)c[14983]=e}else r=54;do if((r|0)==54){s=Sv(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;o=L()|0;if(!(o>>>0>0|(o|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;if(!f){f=0;break}}else{f=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){s=c[14978]|0;o=Tv(e|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=s>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){f=0;break}e=Wa[c[29352>>2]&127](f)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}e=Wa[c[29352>>2]&127](f)|0;if((c[14986]|0)>>>0<h>>>0)c[14986]=h;e=(c[14980]|0)+e|0;c[14980]=e;if(e>>>0>(c[14984]|0)>>>0)c[14984]=e}else f=0}while(0);e=f+(c[a+8>>2]|0)|0;if(!f){s=0;return s|0}else{c[e>>2]=f;c[e+4>>2]=e+32;b[e+12>>1]=0;b[e+14>>1]=0;f=e;break}}else{f=e;r=47}while(0);if((r|0)==47){s=f+16|0;c[m>>2]=c[s>>2];c[s>>2]=0}h=c[a+4>>2]|0;c[h>>2]=(c[h>>2]|0)+1;h=f;g=f+20|0;e=f+24|0;f=f+8|0}s=(d>>>0)%((c[p>>2]|0)>>>0)|0;c[q>>2]=(c[q>>2]|0)+1;c[f>>2]=d;f=a+56|0;c[h+16>>2]=c[(c[f>>2]|0)+(s<<2)>>2];c[g>>2]=a;c[e>>2]=0;c[c[h+4>>2]>>2]=0;c[(c[f>>2]|0)+(s<<2)>>2]=h;f=a+36|0;if((c[f>>2]|0)>>>0>=d>>>0){s=h;return s|0}c[f>>2]=d;s=h;return s|0}function Bp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;jb(a);g=a+20|0;if((c[g>>2]|0)>0){h=a+16|0;f=0;do{b=c[(c[h>>2]|0)+(f<<4)+12>>2]|0;if(b|0?(e=c[b+16>>2]|0,e|0):0){b=e;do{d=c[b+8>>2]|0;if(c[d+56>>2]|0)Cp(a,d);b=c[b>>2]|0}while((b|0)!=0)}f=f+1|0}while((f|0)<(c[g>>2]|0))}b=c[a+344>>2]|0;if(!b){Ti(a);return}do{d=c[(c[b+8>>2]|0)+16>>2]|0;if(d|0)Cp(a,d);b=c[b>>2]|0}while((b|0)!=0);Ti(a);return}function Cp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;b=b+64|0;d=c[b>>2]|0;if(!d)return;while(1){e=d+24|0;if((c[d>>2]|0)==(a|0))break;d=c[e>>2]|0;if(!d){f=6;break}else b=e}if((f|0)==6)return;c[b>>2]=c[e>>2];ng(d);return}function Dp(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;b=(c|0)<(f|0)?c:f;a:do if(e){if(!g){k=1;return k|0}if((b|0)>0){i=g;h=b;while(1){b=a[e>>0]|0;if(!(b<<24>>24)){k=7;break}g=a[208+(b&255)>>0]|0;b=a[208+(d[i>>0]|0)>>0]|0;if(g<<24>>24!=b<<24>>24){k=9;break}if((h|0)>1){e=e+1|0;i=i+1|0;h=h+-1|0}else break a}if((k|0)==7){e=0;b=a[208+(d[i>>0]|0)>>0]|0}else if((k|0)==9)e=g&255;j=e-(b&255)|0;k=12}}else{j=((g|0)!=0)<<31>>31;k=12}while(0);if((k|0)==12?j|0:0){k=j;return k|0}k=c-f|0;return k|0}function Ep(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=Xa[(a[b>>0]<<24>>24==1?154:155)&255](d,e)|0;r=b+12|0;m=(c[r>>2]|0)+-1&q;s=b+16|0;i=c[s>>2]|0;a:do if(i|0?(h=c[i+(m<<3)>>2]|0,j=(a[b>>0]|0)==1?79:80,g=c[i+(m<<3)+4>>2]|0,(h|0)!=0&(g|0)!=0):0){l=g;while(1){h=h+-1|0;if(!(Za[j&127](c[l+12>>2]|0,c[l+16>>2]|0,d,e)|0))break;g=c[l>>2]|0;if(!((h|0)!=0&(g|0)!=0))break a;else l=g}g=l+8|0;k=c[g>>2]|0;if(f|0){c[g>>2]=f;b=k;return b|0}h=c[l+4>>2]|0;g=c[l>>2]|0;if(!h){c[b+8>>2]=g;i=g;j=g}else{c[h>>2]=g;j=c[l>>2]|0;i=j}if(i|0)c[i+4>>2]=h;g=c[s>>2]|0;h=g+(m<<3)+4|0;if((c[h>>2]|0)==(l|0))c[h>>2]=j;q=g+(m<<3)|0;f=c[q>>2]|0;c[q>>2]=f+-1;if((f|0)<2)c[h>>2]=0;j=b+1|0;do if(a[j>>0]|0?(n=c[l+12>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{f=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}i=b+4|0;f=c[i>>2]|0;c[i>>2]=f+-1;if((f|0)>=2){b=k;return b|0}h=b+8|0;g=c[h>>2]|0;c[h>>2]=0;h=c[s>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[s>>2]=0;c[r>>2]=0;if(g|0)do{h=g;g=c[g>>2]|0;do if(a[j>>0]|0?(o=c[h+12>>2]|0,o|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{b=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);c[i>>2]=0;b=k;return b|0}while(0);if(!f){b=0;return b|0}g=c[r>>2]|0;do if(!g){if(!(mb()|0)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](64)|0;if(!g)break}else{g=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){p=c[14978]|0;o=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=p>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h)break;g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;g=h}else g=h}i=g;j=i+64|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));h=c[s>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[s>>2]=g;c[r>>2]=8;n=(a[b>>0]|0)==1?154:155;m=b+8|0;h=c[m>>2]|0;c[m>>2]=0;if(!h){g=8;k=69}else{do{k=(Xa[n&255](c[h+12>>2]|0,c[h+16>>2]|0)|0)&7;j=h;h=c[h>>2]|0;l=g+(k<<3)+4|0;i=c[l>>2]|0;if(!i){i=c[m>>2]|0;c[j>>2]=i;if(i|0)c[i+4>>2]=j;c[j+4>>2]=0;i=m}else{c[j>>2]=i;i=i+4|0;c[j+4>>2]=c[i>>2];p=c[i>>2]|0;c[((p|0)==0?m:p)>>2]=j}c[i>>2]=j;p=g+(k<<3)|0;c[p>>2]=(c[p>>2]|0)+1;c[l>>2]=j}while((h|0)!=0);g=c[r>>2]|0;k=69}}}else k=69;while(0);do if((k|0)==69){p=b+4|0;if((c[p>>2]|0)>=(g|0)){h=g<<1;g=g<<4;o=pb(g,0)|0;if(!o)break;gw(o|0,0,g|0)|0;g=c[s>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{n=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[s>>2]=o;c[r>>2]=h;n=(a[b>>0]|0)==1?154:155;m=b+8|0;g=c[m>>2]|0;c[m>>2]=0;if(g|0){l=h+-1|0;do{j=(Xa[n&255](c[g+12>>2]|0,c[g+16>>2]|0)|0)&l;i=g;g=c[g>>2]|0;k=o+(j<<3)+4|0;h=c[k>>2]|0;if(!h){h=c[m>>2]|0;c[i>>2]=h;if(h|0)c[h+4>>2]=i;c[i+4>>2]=0;h=m}else{c[i>>2]=h;h=h+4|0;c[i+4>>2]=c[h>>2];t=c[h>>2]|0;c[((t|0)==0?m:t)>>2]=i}c[h>>2]=i;t=o+(j<<3)|0;c[t>>2]=(c[t>>2]|0)+1;c[k>>2]=i}while((g|0)!=0)}}if(mb()|0){t=f;return t|0}do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](20)|0;if(!g){t=f;return t|0}else{i=g;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));l=g;break}}else{g=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){t=c[14978]|0;o=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=t>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){t=f;return t|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g;i=h;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));l=h}while(0);do if((d|0)!=0&(a[b+1>>0]|0)!=0){g=pb(e,((e|0)<0)<<31>>31)|0;if(g|0){gw(g|0,0,e|0)|0;c[l+12>>2]=g;ew(g|0,d|0,e|0)|0;break}c[l+12>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);t=f;return t|0}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);t=f;return t|0}}else c[l+12>>2]=d;while(0);c[l+16>>2]=e;c[p>>2]=(c[p>>2]|0)+1;k=(c[r>>2]|0)+-1&q;i=c[s>>2]|0;j=i+(k<<3)+4|0;g=c[j>>2]|0;if(!g){g=b+8|0;h=c[g>>2]|0;c[l>>2]=h;if(h|0)c[h+4>>2]=l;c[l+4>>2]=0}else{c[l>>2]=g;g=g+4|0;c[l+4>>2]=c[g>>2];t=c[g>>2]|0;c[((t|0)==0?b+8|0:t)>>2]=l}c[g>>2]=l;t=i+(k<<3)|0;c[t>>2]=(c[t>>2]|0)+1;c[j>>2]=l;c[l+8>>2]=f;t=0;return t|0}while(0);c[b+4>>2]=0;t=f;return t|0}function Fp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;e=b+16|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[b+12>>2]=0;if(d|0){f=b+1|0;do{e=d;d=c[d>>2]|0;do if(a[f>>0]|0?(g=c[e+12>>2]|0,g|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{h=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0)}c[b+4>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{h=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function Gp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(mb()|0){d=7;return d|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](16)|0;if(!f){d=7;return d|0}}else{g=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){i=c[14978]|0;h=Tv(e|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}f=Wa[c[29340>>2]&127](g)|0;if(!f){d=7;return d|0}e=Wa[c[29352>>2]&127](f)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e};c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;i=f+4|0;c[i>>2]=1;do if((a|0)>0){h=0;a:while(1){e=c[b+(h<<2)>>2]|0;g=Eu(e)|0;do if((g|0)==19){if(!(Lu(51058,e,19)|0)){c[i>>2]=1;e=0;break}if(!(Lu(51078,e,19)|0)){c[i>>2]=0;e=0;break}if(!(Lu(51098,e,19)|0)){c[i>>2]=2;e=0}else j=23}else if((g|0)>10)j=23;else{e=1;break a}while(0);do if((j|0)==23){j=0;if(!(Lu(51118,e,11)|0)){e=Lp(f,1,e+11|0,g+-11|0)|0;break}if(Lu(51130,e,11)|0){e=1;break a}e=Lp(f,0,e+11|0,g+-11|0)|0}while(0);h=h+1|0;g=(e|0)==0;if(!((h|0)<(a|0)&g)){j=28;break}}if((j|0)==28)if(g){e=0;break}if(f){g=c[f+12>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);f=0;break}else{j=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);f=0;break}}else f=0}else e=0;while(0);c[d>>2]=f;d=e;return d|0}function Hp(a){a=a|0;var b=0,d=0;if(!a)return 0;b=c[a+12>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Ip(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f};c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;c[a+24>>2]=0;c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;c[e>>2]=a;h=0;return h|0}function Jp(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Kp(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;u=c[b>>2]|0;D=b+4|0;z=c[D>>2]|0;E=b+12|0;A=c[E>>2]|0;k=z+A|0;C=c[b+8>>2]|0;z=z+C|0;if((A|0)>=(C|0)){E=101;return E|0}A=u+8|0;x=c[A>>2]|0;C=u+12|0;s=x+-1|0;a:do if((x|0)>0){t=c[C>>2]|0;while(1){m=k+1|0;n=a[k>>0]|0;l=n&255;if((n&255)>191){l=d[2736+(l+-192)>>0]|0;b:do if((m|0)==(z|0))m=z;else while(1){n=a[m>>0]|0;if((n&-64)<<24>>24!=-128)break b;m=m+1|0;l=l<<6|n&63;if((m|0)==(z|0)){m=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=15;else n=1;else{l=65533;y=15}}else if(n<<24>>24>-1)n=(c[24720+(l>>>5<<2)>>2]&1<<(l&31)|0)==0;else y=15;if((y|0)==15){y=0;q=l<<10|1023;n=0;o=405;p=0;do{x=(o+n|0)/2|0;w=q>>>0<(c[23088+(x<<2)>>2]|0)>>>0;p=w?p:x;o=w?x+-1|0:o;n=w?n:x+1|0}while((o|0)>=(n|0));n=c[23088+(p<<2)>>2]|0;n=((n>>>10)+(n&1023)|0)>>>0<=l>>>0}r=n&1;n=s;o=0;while(1){p=(o+n|0)/2|0;x=c[t+(p<<2)>>2]|0;q=(x|0)<(l|0);if((x|0)==(l|0)){n=1;break}n=q?n:p+-1|0;o=q?p+1|0:o;if((n|0)<(o|0)){n=0;break}}if((n|0)!=(r|0)){x=k;break a}if(m>>>0<z>>>0)k=m;else{k=101;break}}return k|0}else{while(1){n=k+1|0;m=a[k>>0]|0;l=m&255;if((m&255)>191){l=d[2736+(l+-192)>>0]|0;c:do if((n|0)==(z|0))m=z;else while(1){m=a[n>>0]|0;if((m&-64)<<24>>24!=-128){m=n;break c}n=n+1|0;l=l<<6|m&63;if((n|0)==(z|0)){m=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=32;else{x=k;break a}else{l=65533;y=32}}else if(m<<24>>24>-1)if(!(c[24720+(l>>>5<<2)>>2]&1<<(l&31))){x=k;m=n;break a}else k=n;else{m=n;y=32}if((y|0)==32){y=0;q=l<<10|1023;n=0;o=405;p=0;do{x=(o+n|0)/2|0;w=q>>>0<(c[23088+(x<<2)>>2]|0)>>>0;p=w?p:x;o=w?x+-1|0:o;n=w?n:x+1|0}while((o|0)>=(n|0));x=c[23088+(p<<2)>>2]|0;if(((x>>>10)+(x&1023)|0)>>>0>l>>>0)k=m;else{x=k;break a}}if(k>>>0>=z>>>0){k=101;break}}return k|0}while(0);w=b+20|0;k=c[w>>2]|0;v=b+24|0;u=u+4|0;p=k;while(1){o=p;n=c[v>>2]|0;if((o-k|0)<(n+-4|0))t=p;else{if(mb()|0){k=7;y=86;break}y=n+64|0;k=sb(k,y,((y|0)<0)<<31>>31)|0;if(!k){k=7;y=86;break}t=k+(o-(c[w>>2]|0))|0;c[w>>2]=k;c[v>>2]=(c[v>>2]|0)+64}q=c[u>>2]|0;do if((l|0)>=128){if((l|0)>=65536)if((l+-66560|0)>>>0<40){l=l+40|0;y=58;break}else{y=61;break}k=162;o=-1;n=0;do{y=(n+k|0)/2|0;s=(l|0)<(e[24736+(y<<2)>>1]|0);n=s?n:y+1|0;o=s?o:y;k=s?y+-1|0:k}while((k|0)>=(n|0));k=e[24736+(o<<2)>>1]|0;if(((d[24736+(o<<2)+3>>0]|0)+k|0)>(l|0)?(B=d[24736+(o<<2)+2>>0]|0,((l^k)&1&B|0)==0):0)l=l+(e[25392+(B>>>1<<1)>>1]|0)&65535;if(q){p=l<<3|7;k=0;n=125;o=0;do{y=(n+k|0)/2|0;s=p>>>0<(e[25552+(y<<1)>>1]|0)>>>0;o=s?o:y;n=s?y+-1|0:n;k=s?k:y+1|0}while((n|0)>=(k|0));if((q|0)!=2?(a[25808+o>>0]|0)<0:0){y=57;break}y=e[25552+(o<<1)>>1]|0;if(((y>>>3)+(y&7)|0)>=(l|0)){l=a[25808+o>>0]&127;y=57}else y=57}else y=57}else{l=(l+-65|0)>>>0<26?l+32|0:l;y=57}while(0);if((y|0)==57){y=0;if(l)y=58}if((y|0)==58)if((l|0)>=128)if((l|0)>=2048)if((l|0)<65536){o=t;k=3;n=2;p=1;q=224;r=15;y=62}else y=61;else{q=t;k=2;n=1;o=192;p=31;y=63}else{n=t;k=1;y=64}if((y|0)==61){a[t>>0]=l>>>18&7|240;o=t+1|0;k=4;n=3;p=2;q=128;r=63;y=62}if((y|0)==62){a[o>>0]=l>>>12&r|q;q=t+p|0;o=128;p=63;y=63}if((y|0)==63){a[q>>0]=l>>>6&p|o;n=t+n|0;l=l&63|128;y=64}if((y|0)==64){y=0;a[n>>0]=l;t=t+k|0}if(m>>>0>=z>>>0){k=m;y=85;break}k=m+1|0;n=a[m>>0]|0;l=n&255;if((n&255)>191){l=d[2736+(l+-192)>>0]|0;d:do if((k|0)==(z|0))k=z;else while(1){n=a[k>>0]|0;if((n&-64)<<24>>24!=-128)break d;k=k+1|0;l=l<<6|n&63;if((k|0)==(z|0)){k=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=75;else n=1;else{l=65533;y=75}}else if(n<<24>>24>-1)n=(c[24720+(l>>>5<<2)>>2]&1<<(l&31)|0)==0;else y=75;if((y|0)==75){q=l<<10|1023;n=0;o=405;p=0;do{y=(o+n|0)/2|0;s=q>>>0<(c[23088+(y<<2)>>2]|0)>>>0;p=s?p:y;o=s?y+-1|0:o;n=s?n:y+1|0}while((o|0)>=(n|0));n=c[23088+(p<<2)>>2]|0;n=((n>>>10)+(n&1023)|0)>>>0<=l>>>0}s=n&1;n=c[A>>2]|0;e:do if((n|0)>0){r=c[C>>2]|0;n=n+-1|0;o=0;while(1){p=(o+n|0)/2|0;y=c[r+(p<<2)>>2]|0;q=(y|0)<(l|0);if((y|0)==(l|0)){n=1;break e}n=q?n:p+-1|0;o=q?p+1|0:o;if((n|0)<(o|0)){n=0;break}}}else n=0;while(0);if((n|0)==(s|0)){n=l+-768|0;if(n>>>0>49){y=85;break}y=(l|0)<800;if(!(1<<(y?n:l+-800|0)&(y?134389727:221688))){y=85;break}}p=t;m=k;k=c[w>>2]|0}if((y|0)==85){c[E>>2]=k-(c[D>>2]|0);c[f>>2]=c[w>>2];c[g>>2]=t-(c[w>>2]|0);D=c[D>>2]|0;c[h>>2]=x-D;c[i>>2]=m-D;D=b+16|0;E=c[D>>2]|0;c[D>>2]=E+1;c[j>>2]=E;E=0;return E|0}else if((y|0)==86)return k|0;return 0}function Lp(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=f+g|0;n=(g|0)>0;if(!n){q=0;return q|0}m=0;g=f;while(1){j=g+1|0;g=a[g>>0]|0;h=g&255;if((g&255)>191){g=d[2736+(h+-192)>>0]|0;a:do if((j|0)==(p|0)){h=g;g=p}else{h=g;g=j;while(1){i=a[g>>0]|0;if((i&-64)<<24>>24!=-128)break a;g=g+1|0;h=h<<6|i&63;if((g|0)==(p|0)){g=p;break}}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<4194304)q=12;else i=1;else{h=65533;q=12}}else if(g<<24>>24>-1){i=(c[24720+(h>>>5<<2)>>2]&1<<(h&31)|0)==0;g=j}else{g=j;q=12}if((q|0)==12){q=0;l=h<<10|1023;i=0;j=405;k=0;do{o=(j+i|0)/2|0;r=l>>>0<(c[23088+(o<<2)>>2]|0)>>>0;k=r?k:o;j=r?o+-1|0:j;i=r?i:o+1|0}while((j|0)>=(i|0));i=c[23088+(k<<2)>>2]|0;i=((i>>>10)+(i&1023)|0)>>>0<=h>>>0}do if((i&1|0)==(e|0))i=m;else{i=h+-768|0;if(i>>>0<=49?(r=(h|0)<800,1<<(r?i:h+-800|0)&(r?134389727:221688)|0):0){i=m;break}i=m+1|0}while(0);if(g>>>0<p>>>0)m=i;else break}if(!i){r=0;return r|0}o=b+12|0;h=c[o>>2]|0;b=b+8|0;g=c[b>>2]|0;if(mb()|0){r=7;return r|0}m=sb(h,g+i<<2,0)|0;if(!m){r=7;return r|0}g=c[b>>2]|0;if(n)do{j=f+1|0;f=a[f>>0]|0;h=f&255;if((f&255)>191){f=d[2736+(h+-192)>>0]|0;b:do if((j|0)==(p|0)){h=f;f=p}else{h=f;f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24!=-128)break b;f=f+1|0;h=h<<6|i&63;if((f|0)==(p|0)){f=p;break}}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<4194304)q=34;else i=1;else{h=65533;q=34}}else if(f<<24>>24>-1){i=(c[24720+(h>>>5<<2)>>2]&1<<(h&31)|0)==0;f=j}else{f=j;q=34}if((q|0)==34){q=0;l=h<<10|1023;i=0;j=405;k=0;do{r=(j+i|0)/2|0;n=l>>>0<(c[23088+(r<<2)>>2]|0)>>>0;k=n?k:r;j=n?r+-1|0:j;i=n?i:r+1|0}while((j|0)>=(i|0));i=c[23088+(k<<2)>>2]|0;i=((i>>>10)+(i&1023)|0)>>>0<=h>>>0}do if((i&1|0)!=(e|0)){i=h+-768|0;if(i>>>0<=49?(r=(h|0)<800,1<<(r?i:h+-800|0)&(r?134389727:221688)|0):0)break;c:do if((g|0)>0){i=0;do{if((c[m+(i<<2)>>2]|0)>=(h|0))break c;i=i+1|0}while((i|0)<(g|0))}else i=0;while(0);if((g|0)>(i|0)){j=g;do{r=j;j=j+-1|0;c[m+(r<<2)>>2]=c[m+(j<<2)>>2]}while((j|0)>(i|0))}c[m+(i<<2)>>2]=h;g=g+1|0}while(0)}while(f>>>0<p>>>0);c[o>>2]=m;c[b>>2]=g;r=0;return r|0}function Mp(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+16|0;j=p;do if((f|1|0)==5){l=c[g+4>>2]|0;k=Eu(l)|0;if((f|0)==5){if((l|0)==0|(k|0)!=4)break;k=d[l>>0]|0;e=208+k|0;if((k|32|0)==116){k=d[l+1>>0]|0;e=208+k|0;if((k|32|0)==101){k=d[l+2>>0]|0;e=208+k|0;if((k|32|0)==109){e=d[l+3>>0]|0;if((e|32|0)!=112){m=208+e|0;n=112;o=5}}else{m=e;n=109;o=5}}else{m=e;n=101;o=5}}else{m=e;n=116;o=5}if((o|0)==5?(n|0)!=(d[m>>0]|0):0)break;k=c[g+12>>2]|0;l=k;k=Eu(k)|0;e=4}else e=3;f=c[g+(e<<2)>>2]|0;j=Eu(f)|0;e=td(b,51150)|0;if(e|0){h=e;Ra=p;return h|0}e=k+306+j|0;n=pb(e,0)|0;if(!n){h=7;Ra=p;return h|0}gw(n|0,0,e|0)|0;m=n+12|0;c[m>>2]=n+16;g=n+304|0;c[n+32>>2]=g;e=g+(k+1)|0;c[n+36>>2]=e;c[n+28>>2]=b;c[n+268>>2]=1;ew(g|0,l|0,k|0)|0;ew(e|0,f|0,j|0)|0;m=c[(c[m>>2]|0)+20>>2]|0;e=a[m>>0]|0;switch(e<<24>>24){case 34:case 39:case 91:case 96:{l=e<<24>>24==91?93:e;f=a[m+1>>0]|0;a:do if(!(f<<24>>24))e=0;else{j=1;e=0;do{k=j+1|0;if(f<<24>>24==l<<24>>24){if((a[m+k>>0]|0)!=l<<24>>24)break a;a[m+e>>0]=l;j=j+2|0}else{a[m+e>>0]=f;j=k}e=e+1|0;f=a[m+j>>0]|0}while(f<<24>>24!=0)}while(0);a[m+e>>0]=0;break}default:{}}c[h>>2]=n;h=0;Ra=p;return h|0}while(0);Wp(i,51219,j);h=1;Ra=p;return h|0}function Np(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(((c[d+8>>2]|0)==1?(e=c[d+12>>2]|0,(c[e>>2]|0)==0):0)?(a[e+4>>0]|0)==0:0)c[d+32>>2]=1;m=c[d>>2]|0;if((m|0)<=0){c[d+20>>2]=0;g[d+40>>3]=2.0e4;return 0}n=c[d+4>>2]|0;b=-1;k=-1;h=-1;e=-1;l=0;while(1){if(!(a[n+(l*12|0)+5>>0]|0))j=h;else{i=a[n+(l*12|0)+4>>0]|0;j=c[n+(l*12|0)>>2]|0;if(!j){b=i<<24>>24==2?l:b;e=i<<24>>24==32|i<<24>>24==4?l:e;h=i<<24>>24==8|i<<24>>24==16?l:h}k=i<<24>>24==2&(j|0)==4?l:k;j=h}l=l+1|0;if((l|0)>=(m|0))break;else h=j}i=d+20|0;if((b|0)<=-1){c[i>>2]=0;h=d+40|0;g[h>>3]=2.0e4;if((e|0)>-1){c[i>>2]=2;c[(c[d+16>>2]|0)+(e<<3)>>2]=1;g[h>>3]=1.0e4;b=2;e=6;f=1.0e4}else{b=1;e=4;f=2.0e4}if((j|0)>-1){c[i>>2]=e;c[(c[d+16>>2]|0)+(j<<3)>>2]=b;f=f*.5;g[h>>3]=f;b=b+1|0}}else{c[i>>2]=1;c[(c[d+16>>2]|0)+(b<<3)>>2]=1;g[d+40>>3]=5.0;b=2;f=5.0}if((k|0)<=-1)return 0;c[(c[d+16>>2]|0)+(k<<3)>>2]=b;g[d+40>>3]=f+-1.0;return 0}function Op(a){a=a|0;var b=0,d=0;b=c[a+12>>2]|0;gc(c[b+56>>2]|0)|0;gc(c[b+60>>2]|0)|0;gc(c[b+64>>2]|0)|0;gc(c[b+68>>2]|0)|0;gc(c[b+72>>2]|0)|0;gc(c[b+76>>2]|0)|0;gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;gc(c[b+116>>2]|0)|0;gc(c[b+120>>2]|0)|0;gc(c[b+124>>2]|0)|0;gc(c[b+128>>2]|0)|0;gc(c[b+132>>2]|0)|0;gc(c[b+136>>2]|0)|0;gc(c[b+140>>2]|0)|0;gc(c[b+144>>2]|0)|0;gc(c[b+148>>2]|0)|0;gc(c[b+152>>2]|0)|0;gc(c[b+156>>2]|0)|0;gc(c[b+160>>2]|0)|0;gc(c[b+164>>2]|0)|0;gc(c[b+168>>2]|0)|0;gc(c[b+172>>2]|0)|0;gc(c[b+176>>2]|0)|0;gc(c[b+180>>2]|0)|0;gc(c[b+184>>2]|0)|0;gc(c[b+188>>2]|0)|0;gc(c[b+192>>2]|0)|0;gc(c[b+196>>2]|0)|0;gc(c[b+200>>2]|0)|0;gc(c[b+204>>2]|0)|0;gc(c[b+208>>2]|0)|0;gc(c[b+212>>2]|0)|0;b=c[b+244>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Pp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](120)|0;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](120)|0;if((c[14985]|0)>>>0<120)c[14985]=120;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}d=a;e=d+120|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b>>2]=a;f=0;return f|0}function Qp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=(c[(c[b>>2]|0)+12>>2]|0)+248|0;e=c[d>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}i=e;if((c[f+304>>2]|0)>>>0<=i>>>0?(c[f+308>>2]|0)>>>0>i>>>0:0){i=f+300|0;c[e>>2]=c[i>>2];c[i>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[d>>2]=0;h=b+4|0;i=b+8|0;d=c[h>>2]|0;if((c[i>>2]|0)>0){g=0;do{d=c[d+(g<<2)>>2]|0;do if(d|0){do if((c[d+56>>2]|0)==0?(j=c[d+64>>2]|0,j|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);do if((a[d+5>>0]|0)==0?(k=c[d+40>>2]|0,k|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);e=c[d+52>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}l=e;if((c[f+304>>2]|0)>>>0<=l>>>0?(c[f+308>>2]|0)>>>0>l>>>0:0){l=f+300|0;c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);g=g+1|0;d=c[h>>2]|0}while((g|0)<(c[i>>2]|0))}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+20|0;e=c[d>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[i>>2]=0;c[h>>2]=0;c[d>>2]=0;d=c[b+60>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+76>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+112>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return 0}else{l=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return 0}return 0}function Rp(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=Ra;Ra=Ra+16|0;u=y+8|0;s=y;x=c[(c[d>>2]|0)+12>>2]|0;if((f|0)==1){q=-1;o=0;w=0;h=1;p=-1}else{h=f&2;p=(h|0)==0;v=(p^1)&1;t=(f&4|0)==0;q=t?-1:v;o=-1;w=1;h=t?v:(h>>>1)+1|0;p=p<<31>>31}t=(h|0)<(i|0)?h:-1;v=d+4|0;l=d+8|0;h=c[v>>2]|0;if((c[l>>2]|0)>0){k=0;do{h=c[h+(k<<2)>>2]|0;do if(h|0){do if((c[h+56>>2]|0)==0?(m=c[h+64>>2]|0,m|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{i=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);do if((a[h+5>>0]|0)==0?(n=c[h+40>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{i=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);f=c[h+52>>2]|0;do if(f|0){i=c[f+20>>2]|0;gc(c[f+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,f);break}z=f;if((c[i+304>>2]|0)>>>0<=z>>>0?(c[i+308>>2]|0)>>>0>z>>>0:0){z=i+300|0;c[f>>2]=c[z>>2];c[z>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{z=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);k=k+1|0;h=c[v>>2]|0}while((k|0)<(c[l>>2]|0))}do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);h=d+20|0;f=c[h>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{z=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[l>>2]=0;c[v>>2]=0;c[h>>2]=0;n=d+60|0;h=c[n>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);h=c[d+112>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);l=v;m=l+116|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));c[d+72>>2]=(w|0)==0?3:19;do if((p&o|0)>-1?(r=c[j>>2]|0,r|0):0){h=b[r+8>>1]|0;if((h&514)==514?(a[r+10>>0]|0)==1:0)h=c[r+16>>2]|0;else{if(h&1)break;h=Gg(r,1)|0}if(h|0){c[s>>2]=h;h=Bb(31408,s)|0;c[n>>2]=h;if(!h){z=7;Ra=y;return z|0}else{z=Eu(h)|0;c[d+64>>2]=z;break}}}while(0);do if((q|0)>-1){h=c[j+(q<<2)>>2]|0;do if(h){f=b[h+8>>1]|0;if((f&514)==514?(a[h+10>>0]|0)==1:0){h=c[h+16>>2]|0;break}if(!(f&1))h=Gg(h,1)|0;else h=0}else h=0;while(0);c[u>>2]=h;h=Bb(31408,u)|0;c[d+76>>2]=h;if(!h){z=7;Ra=y;return z|0}else{z=Eu(h)|0;c[d+80>>2]=z;break}}while(0);a:do if((t|0)>-1){h=c[j+(t<<2)>>2]|0;f=e[h+8>>1]|0;do if(!(f&4)){if(f&8|0){h=Mg(+g[h>>3])|0;L()|0;break}if(!(f&18)){h=0;break a}h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}else h=c[h>>2]|0;while(0);h=(h|0)>0?h:0}else h=0;while(0);c[d+84>>2]=h;f=c[n>>2]|0;k=d+64|0;i=c[k>>2]|0;l=v;m=l+56|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));h=Xp(x,h,0,-2,f,i,0,w,v)|0;if(h|0){z=h;Ra=y;return z|0}c[d+16>>2]=n;h=eq(x,v,c[n>>2]|0,c[k>>2]|0)|0;if(h|0){z=h;Ra=y;return z|0}z=Sp(d)|0;Ra=y;return z|0}function Sp(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=c[(c[b>>2]|0)+12>>2]|0;o=b+96|0;p=o;p=Sv(c[p>>2]|0,c[p+4>>2]|0,1,0)|0;e=L()|0;c[o>>2]=p;c[o+4>>2]=e;o=b+104|0;e=(c[o>>2]|0)+1|0;c[o>>2]=e;p=b+108|0;f=c[p>>2]|0;a:do if((e|0)<(f|0)){g=c[b+112>>2]|0;while(1){n=g+(e<<4)|0;m=c[n+4>>2]|0;if((m|0)>0|(m|0)==0&(c[n>>2]|0)>>>0>0){e=0;break}e=e+1|0;c[o>>2]=e;if((e|0)>=(f|0))break a}return e|0}while(0);e=gq(h,b+4|0)|0;if((e|0)!=100){c[b+88>>2]=1;q=e;return q|0}m=c[b+56>>2]|0;n=c[b+52>>2]|0;e=c[b+76>>2]|0;do if(e|0){j=c[b+80>>2]|0;k=c[b+48>>2]|0;l=(j|0)<(k|0);k=Lu(e,c[b+44>>2]|0,l?j:k)|0;if((k|0)>=0?(k|0)!=0|l^1:0)break;c[b+88>>2]=1;q=0;return q|0}while(0);f=c[p>>2]|0;l=b+112|0;e=c[l>>2]|0;do if((f|0)<2){if(mb()|0){q=7;return q|0}e=sb(e,32,0)|0;if(!e){q=7;return q|0}else{f=c[p>>2]|0;gw(e+(f<<4)|0,0,32-(f<<4)|0)|0;c[l>>2]=e;c[p>>2]=2;f=32;break}}else f=f<<4;while(0);gw(e|0,0,f|0)|0;b:do if((m|0)>0){e=0;f=0;k=0;c:while(1){j=n+k|0;h=a[j>>0]|0;g=h&255;do if(!(g&128)){b=1;i=0;g=h&255}else{i=d[j+1>>0]|0;g=i<<7|g&127;if(!(i&128)){b=2;i=0;break}i=d[j+2>>0]|0;g=i<<14|g&16383;if(!(i&128)){b=3;i=0;break}i=d[j+3>>0]|0;g=i<<21|g&2097151;if(!(i&128)){b=4;i=0;break}h=28;b=j+4|0;g=g&268435455;i=0;do{r=b;b=b+1|0;r=d[r>>0]|0;s=cw(r&127|0,0,h|0)|0;g=Sv(s|0,L()|0,g|0,i|0)|0;i=L()|0;h=h+7|0}while(h>>>0<64&((r&128|0)!=0|0!=0));b=b-j|0}while(0);k=b+k|0;switch(e|0){case 0:{f=c[l>>2]|0;s=f;s=Sv(c[s>>2]|0,c[s+4>>2]|0,1,0)|0;e=L()|0;c[f>>2]=s;c[f+4>>2]=e;f=0;e=1;break}case 1:{if((i|0)>0|(i|0)==0&g>>>0>1){q=(c[l>>2]|0)+16|0;r=q;r=Sv(c[r>>2]|0,c[r+4>>2]|0,1,0)|0;s=L()|0;c[q>>2]=r;c[q+4>>2]=s;q=32}else q=32;break}case 2:{q=32;break}default:{f=g+2|0;if((c[p>>2]|0)<(f|0)){e=c[l>>2]|0;if(mb()|0){e=7;q=46;break c}e=sb(e,f<<4,0)|0;if(!e){e=7;q=46;break c}s=c[p>>2]|0;gw(e+(s<<4)|0,0,f-s<<4|0)|0;c[l>>2]=e;c[p>>2]=f}else e=c[l>>2]|0;f=e+(g+1<<4)|0;s=f;s=Sv(c[s>>2]|0,c[s+4>>2]|0,1,0)|0;e=L()|0;c[f>>2]=s;c[f+4>>2]=e;f=g;e=2}}d:do if((q|0)==32){q=0;switch(g|0){case 0:{if(!i){e=0;break d}break}case 1:{if(!i){e=3;break d}break}default:{}}e=c[l>>2]|0;r=e+(f+1<<4)+8|0;j=r;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;s=L()|0;c[r>>2]=j;c[r+4>>2]=s;e=e+8|0;r=e;r=Sv(c[r>>2]|0,c[r+4>>2]|0,1,0)|0;s=L()|0;c[e>>2]=r;c[e+4>>2]=s;e=2}while(0);if((k|0)>=(m|0))break b}if((q|0)==46)return e|0}while(0);c[o>>2]=0;s=0;return s|0}function Tp(a){a=a|0;return c[a+88>>2]|0}function Up(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,c[a+44>>2]|0,c[a+48>>2]|0,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 1:{a=c[a+104>>2]|0;if(!a){if((yc(c[d>>2]|0,40769,-1,1,0)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}g=a+-1|0;a=c[d>>2]|0;e=((g|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){d=a;c[d>>2]=g;c[d+4>>2]=e;b[f>>1]=4;return 0}else{Pg(a,g,e);return 0}}case 2:{g=(c[a+112>>2]|0)+(c[a+104>>2]<<4)|0;f=c[g>>2]|0;g=c[g+4>>2]|0;a=c[d>>2]|0;e=a+8|0;if(!(b[e>>1]&9216)){d=a;c[d>>2]=f;c[d+4>>2]=g;b[e>>1]=4;return 0}else{Pg(a,f,g);return 0}}case 3:{g=(c[a+112>>2]|0)+(c[a+104>>2]<<4)+8|0;f=c[g>>2]|0;g=c[g+4>>2]|0;a=c[d>>2]|0;e=a+8|0;if(!(b[e>>1]&9216)){d=a;c[d>>2]=f;c[d+4>>2]=g;b[e>>1]=4;return 0}else{Pg(a,f,g);return 0}}default:{g=c[a+84>>2]|0;a=c[d>>2]|0;e=((g|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){d=a;c[d>>2]=g;c[d+4>>2]=e;b[f>>1]=4;return 0}else{Pg(a,g,e);return 0}}}return 0}function Vp(a,b){a=a|0;b=b|0;var d=0;d=a+96|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Wp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+16|0;e=g;f=c[a>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=d;h=Ab(b,e)|0;c[a>>2]=h;Ra=g;return}function Xp(d,f,g,h,i,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=Ra;Ra=Ra+32|0;p=M+24|0;z=M+16|0;K=M+8|0;H=M;do if((h|0)<0){p=c[d+256>>2]|0;a:do if(p){v=(l|k|0)!=0;b:do if(v){o=c[p+(g*24|0)+12>>2]|0;c[K>>2]=o;if(!o){n=0;break a}if(!j){p=0;t=0;n=0;q=0;s=o;o=0;while(1){if((t|0)==(n|0)){o=t+16|0;n=o<<2;if(mb()|0){r=0;o=p;n=7;q=0;break b}n=sb(q,(n|0)>0?n:0,0)|0;if(!n){r=0;o=p;n=7;q=0;break b}else{r=o;p=n;o=n;q=n}}else r=n;n=t+1|0;c[p+(t<<2)>>2]=s;s=c[c[K>>2]>>2]|0;c[K>>2]=s;if(!s)break;else{t=n;n=r}}}else{p=0;n=0;s=0;u=o;t=0;o=0;while(1){q=u;r=u;if((c[r+16>>2]|0)>=(j|0)?(Lu(c[r+12>>2]|0,i,j)|0)==0:0){if((n|0)==(s|0)){q=n+16|0;o=q<<2;if(mb()|0){r=0;o=p;n=7;q=0;break b}r=sb(t,(o|0)>0?o:0,0)|0;if(!r){r=0;o=p;n=7;q=0;break b}else{p=r;o=r}}else{q=s;r=t}c[p+(n<<2)>>2]=u;s=q;n=n+1|0;q=c[K>>2]|0}else r=t;u=c[q>>2]|0;c[K>>2]=u;if(!u)break;else t=r}}if((n|0)<=1)if((n|0)==1){n=1;G=31;break}else{r=0;o=p;n=0;q=0;break}else{pv(o,n,4,156);G=31;break}}else{q=p+(g*24|0)+20|0;c:do if((c[q>>2]|0?(r=p+(g*24|0)+4|0,s=Xa[(a[r>>0]<<24>>24==1?154:155)&255](i,j)|0,s=(c[p+(g*24|0)+16>>2]|0)+-1&s,t=c[q>>2]|0,t|0):0)?(o=c[t+(s<<3)>>2]|0,u=(a[r>>0]|0)==1?79:80,n=c[t+(s<<3)+4>>2]|0,(o|0)!=0&(n|0)!=0):0){while(1){o=o+-1|0;if(!(Za[u&127](c[n+12>>2]|0,c[n+16>>2]|0,i,j)|0))break;n=c[n>>2]|0;if(!((o|0)!=0&(n|0)!=0))break c}c[K>>2]=n;n=1;p=K;G=31;break b}while(0);c[K>>2]=0;r=0;o=0;n=0;q=0}while(0);if((G|0)==31){n=n<<2;o=n+100|0;q=pb(o,0)|0;if(!q){r=q;o=p;n=7;q=0}else{gw(q|0,0,o|0)|0;c[q>>2]=2147483647;r=q+96|0;c[q+56>>2]=r;ew(r|0,p|0,n|0)|0;r=q;o=p;n=0}}do if(v?o|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{F=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if((n|0)==0&(r|0)!=0){p=m+4|0;o=c[p>>2]|0;do if(!(o&15)){n=c[m>>2]|0;if((mb()|0)==0?(y=sb(n,(o<<2)+64|0,0)|0,y|0):0){c[m>>2]=y;o=c[p>>2]|0;n=y;break}do if((c[r+56>>2]|0)==0?(w=c[r+64>>2]|0,w|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](w);break}else{F=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);break}while(0);do if((a[r+5>>0]|0)==0?(x=c[r+40>>2]|0,x|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{F=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}while(0);n=c[r+52>>2]|0;do if(n|0){o=c[n+20>>2]|0;gc(c[n+16>>2]|0)|0;if(o|0){if(c[o+480>>2]|0){Xd(o,n);break}F=n;if((c[o+304>>2]|0)>>>0<=F>>>0?(c[o+308>>2]|0)>>>0>F>>>0:0){F=o+300|0;c[n>>2]=c[F>>2];c[F>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{F=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if(!q){n=7;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);n=7;break a}else{n=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);n=7;break a}}else n=c[m>>2]|0;while(0);c[p>>2]=o+1;c[n+(o<<2)>>2]=q;n=0}}else n=0;while(0);if(!((h|0)!=-1&(n|0)==0)){m=0;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}q=d+108|0;F=c[q>>2]|0;c[K>>2]=F;o=F;if(!F){p=c[d+20>>2]|0;c[z>>2]=c[d+16>>2];c[z+4>>2]=p;p=Bb(51885,z)|0;if(!p){n=7;break}n=qd(c[d+12>>2]|0,p,-1,133,0,K,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{F=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}o=c[K>>2]|0;c[q>>2]=o;if(n)break}v=o;n=d+252|0;r=c[n>>2]|0;p=((f|0)<0)<<31>>31;r=Yv(r|0,((r|0)<0)<<31>>31|0,f|0,p|0)|0;q=((g|0)<0)<<31>>31;r=Sv(r|0,L()|0,g|0,q|0)|0;r=cw(r|0,L()|0,10)|0;s=L()|0;do if(!(Vc(v,1)|0)){t=c[v+100>>2]|0;u=t+8|0;if(!(b[u>>1]&9216)){G=t;c[G>>2]=r;c[G+4>>2]=s;b[u>>1]=4;break}else{Pg(t,r,s);break}}while(0);r=c[n>>2]|0;r=Yv(r|0,((r|0)<0)<<31>>31|0,f|0,p|0)|0;r=Sv(r|0,L()|0,g|0,q|0)|0;r=cw(r|0,L()|0,10)|0;q=L()|0;r=r|1023;if(!(Vc(v,2)|0)){p=c[v+100>>2]|0;n=p+40|0;p=p+48|0;if(!(b[p>>1]&9216)){G=n;c[G>>2]=r;c[G+4>>2]=q;b[p>>1]=4;G=98;break}else{Pg(n,r,q);G=98;break}}else G=98}else{q=d+104|0;F=c[q>>2]|0;c[K>>2]=F;o=F;if(!F){F=c[d+20>>2]|0;c[p>>2]=c[d+16>>2];c[p+4>>2]=F;p=Bb(51773,p)|0;if(!p){n=7;break}n=qd(c[d+12>>2]|0,p,-1,133,0,K,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{F=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}o=c[K>>2]|0;c[q>>2]=o;if(n)break}n=o;q=c[d+252>>2]|0;q=Yv(q|0,((q|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;q=Sv(q|0,L()|0,g|0,((g|0)<0)<<31>>31|0)|0;q=cw(q|0,L()|0,10)|0;q=Sv(q|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;r=L()|0;if(!(Vc(n,1)|0)){n=c[n+100>>2]|0;p=n+8|0;if(!(b[p>>1]&9216)){G=n;c[G>>2]=q;c[G+4>>2]=r;b[p>>1]=4;G=98;break}else{Pg(n,q,r);G=98;break}}else G=98}while(0);d:do if((G|0)==98){B=o;C=(o|0)==0;D=(i|0)!=0;E=B+120|0;A=(k|0)==0?0:H;F=m+4|0;f=(l|k|0)==0;g=B+40|0;k=B+144|0;l=f&1;n=Gc(B)|0;if((n|0)==100){while(1){y=Oc(B,1)|0;z=L()|0;h=K;c[h>>2]=y;c[h+4>>2]=z;h=Oc(B,2)|0;z=L()|0;y=H;c[y>>2]=h;c[y+4>>2]=z;y=Oc(B,3)|0;z=L()|0;h=Lc(B,4)|0;if(C)q=mc(29576)|0;else{n=c[E>>2]|0;if((n|0)!=0?(e[k>>1]|0)>4:0)n=n+160|0;else{n=c[B>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576}q=mc(n)|0;n=c[B>>2]|0;p=c[g>>2]|0;if((p|0)==3082|(a[n+81>>0]|0)!=0){og(n);n=7}else n=c[n+68>>2]&p;c[g>>2]=n}p=K;n=c[p>>2]|0;p=c[p+4>>2]|0;if((q|0)!=0&(D&((n|0)!=0|(p|0)!=0))){n=Yp(d,i,j,q,h,K,A)|0;if(n|0){G=152;break}p=K;n=c[p>>2]|0;p=c[p+4>>2]|0;if(f){w=H;c[w>>2]=n;c[w+4>>2]=p;w=n;v=p;u=n;r=p}else G=114}else G=114;if((G|0)==114){G=0;r=H;w=n;v=p;u=c[r>>2]|0;r=c[r+4>>2]|0}p=(c[F>>2]|0)+1|0;if((w|0)==0&(v|0)==0){if(!((u|0)==0&(r|0)==0)){n=267;G=152;break}n=h+20|0}else n=0;x=nb(n+96|0)|0;if(!x){n=7;G=152;break}s=x;t=s+96|0;do{c[s>>2]=0;s=s+4|0}while((s|0)<(t|0));c[x>>2]=p;a[x+4>>0]=l;t=x+8|0;c[t>>2]=w;c[t+4>>2]=v;t=x+16|0;c[t>>2]=u;c[t+4>>2]=r;u=x+24|0;c[u>>2]=y;c[u+4>>2]=z;if(!n){y=Sv(w|0,v|0,-1,-1)|0;z=L()|0;h=x+32|0;c[h>>2]=y;c[h+4>>2]=z}else{n=x+96|0;c[x+40>>2]=n;a[x+5>>0]=1;c[x+44>>2]=h;if(h|0)ew(n|0,q|0,h|0)|0;s=n+h|0;t=s+20|0;do{a[s>>0]=0;s=s+1|0}while((s|0)<(t|0))}n=c[F>>2]|0;if(!(n&15)){p=c[m>>2]|0;if(mb()|0)break;p=sb(p,(n<<2)+64|0,0)|0;if(!p)break;c[m>>2]=p;n=c[F>>2]|0}else p=c[m>>2]|0;c[F>>2]=n+1;c[p+(n<<2)>>2]=x;n=Gc(B)|0;if((n|0)!=100)break d}if((G|0)==152)break;do if((c[x+56>>2]|0)==0?(I=c[x+64>>2]|0,I|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](I);break}else{K=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);break}while(0);do if((a[x+5>>0]|0)==0?(J=c[x+40>>2]|0,J|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{K=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}while(0);n=c[x+52>>2]|0;do if(n|0){p=c[n+20>>2]|0;gc(c[n+16>>2]|0)|0;if(p|0){if(c[p+480>>2]|0){Xd(p,n);break}K=n;if((c[p+304>>2]|0)>>>0<=K>>>0?(c[p+308>>2]|0)>>>0>K>>>0:0){K=p+300|0;c[n>>2]=c[K>>2];c[K>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{K=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](x);else{K=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x)}n=7}}while(0);q=o;if(!o){m=0;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}o=c[q>>2]|0;K=q+136|0;m=c[K+4>>2]|0;if((m|0)>0|(m|0)==0&(c[K>>2]|0)>>>0>0)hc(o,q);p=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((p|0)==3082|(a[o+81>>0]|0)!=0){og(o);m=7;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}else{m=c[o+68>>2]&p;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}return 0}function Yp(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;E=F+4|0;C=F;l=a[g>>0]|0;k=l&255;if(k&128){z=d[g+1>>0]|0;k=z<<7|l&127;if(z&128){z=d[g+2>>0]|0;k=z<<14|k&16383;if(z&128){z=d[g+3>>0]|0;k=z<<21|k&2097151;if(!(z&128))z=k;else z=(a[g+4>>0]&7)<<28|k&268435455}else z=k}else z=k}else z=k;y=g+h|0;if(l<<24>>24<=-1)if((a[g+1>>0]|0)<=-1)if((a[g+2>>0]|0)<=-1)if((a[g+3>>0]|0)>-1)k=4;else{k=28;h=g+4|0;do{x=h;h=h+1|0;k=k+7|0}while(k>>>0<64&(a[x>>0]|0)<0);k=h-g|0}else k=3;else k=2;else k=1;n=g+k|0;h=a[n>>0]|0;k=h&255;do if(!(k&128)){m=1;l=h&255;h=0}else{x=d[n+1>>0]|0;k=x<<7|k&127;if(!(x&128)){m=2;l=k;h=0;break}x=d[n+2>>0]|0;k=x<<14|k&16383;if(!(x&128)){m=3;l=k;h=0;break}x=d[n+3>>0]|0;l=x<<21|k&2097151;if(!(x&128)){m=4;h=0;break}k=28;m=n+4|0;l=l&268435455;h=0;do{x=m;m=m+1|0;x=d[x>>0]|0;w=cw(x&127|0,0,k|0)|0;l=Sv(w|0,L()|0,l|0,h|0)|0;h=L()|0;k=k+7|0}while(k>>>0<64&((x&128|0)!=0|0!=0));m=m-n|0}while(0);o=n+m|0;if(o>>>0>y>>>0){E=267;Ra=F;return E|0}a:do if(o>>>0<y>>>0){w=g;x=y;n=i;m=j;g=1;k=0;r=0;t=0;while(1){u=(n|0)!=0;v=(m|0)!=0;if(!(u|v)){h=0;break a}if(!g){p=a[o>>0]|0;g=p&255;if(g&128){s=d[o+1>>0]|0;g=s<<7|p&127;if(s&128){s=d[o+2>>0]|0;g=s<<14|g&16383;if(s&128){s=d[o+3>>0]|0;g=s<<21|g&2097151;if(!(s&128))p=4;else{g=(a[o+4>>0]&7)<<28|g&268435455;p=5}}else p=3}else p=2}else p=1;o=o+p|0}else g=0;q=a[o>>0]|0;p=q&255;if(p&128){s=d[o+1>>0]|0;p=s<<7|q&127;if(s&128){s=d[o+2>>0]|0;p=s<<14|p&16383;if(s&128){s=d[o+3>>0]|0;p=s<<21|p&2097151;if(!(s&128))q=4;else{p=(a[o+4>>0]&7)<<28|p&268435455;q=5}}else q=3}else q=2}else q=1;s=o+q|0;o=s;if((g|0)>(o-w|0)){h=267;break a}if((p|0)==0|(p|0)>(x-o|0)){h=267;break a}o=Sv(p|0,((p|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;q=L()|0;if((q|0)>(r|0)|(q|0)==(r|0)&o>>>0>t>>>0){q=cw(o|0,q|0,1)|0;r=L()|0;if(mb()|0){h=7;break a}o=sb(k,q,r)|0;if(!o){h=7;break a}else k=o}else q=t;ew(k+g|0,s|0,p|0)|0;t=p+g|0;o=s+p|0;g=(t|0)>(f|0);p=Lu(e,k,g?f:t)|0;do if(u){if((p|0)>=0?(p|0)!=0|g^1:0)break;D=n;c[D>>2]=l;c[D+4>>2]=h;D=49}else D=49;while(0);if((D|0)==49){D=0;if(v&(p|0)<0){n=m;c[n>>2]=l;c[n+4>>2]=h;n=0;m=0}else n=0}l=Sv(l|0,h|0,1,0)|0;h=L()|0;if(o>>>0>=y>>>0){D=52;break}else{g=0;t=q}}}else{n=i;m=j;k=0;D=52}while(0);if((D|0)==52){if(n|0){y=n;c[y>>2]=l;c[y+4>>2]=h}if(!m)h=0;else{y=m;c[y>>2]=l;c[y+4>>2]=h;h=0}}do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);if(!((z|0)>1&(h|0)==0)){E=h;Ra=F;return E|0}c[E>>2]=0;c[C>>2]=0;if((i|0)!=0&(j|0)!=0?(B=i,A=c[B>>2]|0,B=c[B+4>>2]|0,z=j,!((A|0)==(c[z>>2]|0)?(B|0)==(c[z+4>>2]|0):0)):0){k=dq(b,A,B,E,C)|0;if(!k)k=Yp(b,e,f,c[E>>2]|0,c[C>>2]|0,i,0)|0;i=c[E>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{B=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[E>>2]=0;if(!k){k=j;i=0;D=71}}else{k=(i|0)==0?j:i;D=71}do if((D|0)==71){k=dq(b,c[k>>2]|0,c[k+4>>2]|0,E,C)|0;if(!k)k=Yp(b,e,f,c[E>>2]|0,c[C>>2]|0,i,j)|0;i=c[E>>2]|0;if(i)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{E=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);E=k;Ra=F;return E|0}function Zp(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[a>>2]|0;b=c[b>>2]|0;d=c[e+16>>2]|0;a=c[b+16>>2]|0;b=Lu(c[e+12>>2]|0,c[b+12>>2]|0,(d|0)<(a|0)?d:a)|0;return ((b|0)==0?d-a|0:b)|0}function _p(b,c){b=b|0;c=c|0;var d=0;if((c|0)<1){c=Eu(b)|0;if((c|0)<=0){d=0;return d|0}}d=0;while(1){d=d<<3^d^a[b>>0];if((c|0)<=1)break;else{b=b+1|0;c=c+-1|0}}d=d&2147483647;return d|0}function $p(b,c){b=b|0;c=c|0;var d=0;if((c|0)<=0){d=0;return d|0}d=0;while(1){d=d<<3^d^a[b>>0];if((c|0)<=1)break;else{b=b+1|0;c=c+-1|0}}d=d&2147483647;return d|0}function aq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((b|0)==(d|0))a=av(a,c,b)|0;else a=1;return a|0}function bq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((b|0)==(d|0))a=Lu(a,c,b)|0;else a=1;return a|0}function cq(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;k=n+24|0;h=n+16|0;g=n;l=n+32|0;m=a+56+(d<<2)|0;i=c[m>>2]|0;c[l>>2]=i;j=i;if(!i){switch(d|0){case 18:{k=c[a+20>>2]|0;d=c[a+224>>2]|0;c[g>>2]=c[a+16>>2];c[g+4>>2]=k;c[g+8>>2]=d;g=Bb(52240,g)|0;d=133;break}case 7:{c[h>>2]=c[a+220>>2];g=Bb(51509,h)|0;d=129;break}default:{g=c[25936+(d<<2)>>2]|0;d=c[a+20>>2]|0;c[k>>2]=c[a+16>>2];c[k+4>>2]=d;g=Bb(g,k)|0;d=133}}if(!g){d=7;i=0}else{d=qd(c[a+12>>2]|0,g,-1,d,0,l,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{a=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}j=c[l>>2]|0;c[m>>2]=j;i=j}}else d=0;if((f|0)==0|(i|0)==0){f=d;c[e>>2]=j;Ra=n;return f|0}m=b[i+16>>1]|0;h=m<<16>>16;if(!(m<<16>>16>0&(d|0)==0)){f=d;c[e>>2]=j;Ra=n;return f|0}g=0;do{d=g;g=g+1|0;d=Yc(i,g,c[f+(d<<2)>>2]|0)|0}while((g|0)<(h|0)&(d|0)==0);c[e>>2]=j;Ra=n;return d|0}function dq(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l;k=b+248|0;h=c[k>>2]|0;if(!h){i=b+244|0;h=c[i>>2]|0;if(!h){c[j>>2]=c[b+20>>2];h=Bb(53537,j)|0;c[i>>2]=h;if(!h){f=7;Ra=l;return f|0}}h=ad(c[b+12>>2]|0,c[b+16>>2]|0,h,53549,d,e,0,k)|0}else h=ld(h,d,e)|0;if(h|0){f=h;Ra=l;return f|0}h=c[k>>2]|0;if((h|0)!=0?(c[h+16>>2]|0)!=0:0)j=c[h>>2]|0;else j=0;c[g>>2]=j;if(!f){f=0;Ra=l;return f|0}i=nb(j+20|0)|0;do if(i){h=jd(c[k>>2]|0,i,j,0,81)|0;j=i+j|0;b=j+20|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(b|0));if(h)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);i=0;break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);i=0;break}else h=0}else{i=0;h=7}while(0);c[f>>2]=i;f=h;Ra=l;return f|0}function eq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;m=d+4|0;p=c[m>>2]|0;n=d+28|0;a:do if((c[n>>2]|0)==0?(o=(e|0)==0,(p|0)>0):0){l=0;b:while(1){j=c[(c[d>>2]|0)+(l<<2)>>2]|0;k=j+40|0;h=j+60|0;i=j+64|0;c:do if(o){g=fq(b,j)|0;if(g|0){q=43;break b}}else{do{g=fq(b,j)|0;if(g|0){q=43;break b}if(!(c[k>>2]|0))break c;r=c[h>>2]|0;g=Lu(c[i>>2]|0,e,(r|0)>(f|0)?f:r)|0;g=(g|0)==0?r-f|0:g}while((g|0)<0);if((g|0)!=0&(a[j+4>>0]|0)!=0){if(!(a[j+5>>0]|0)){g=c[k>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{r=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=j+52|0;h=c[g>>2]|0;do if(h|0){i=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,h);break}r=h;if((c[i+304>>2]|0)>>>0<=r>>>0?(c[i+308>>2]|0)>>>0>r>>>0:0){r=i+300|0;c[h>>2]=c[r>>2];c[r>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{r=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[g>>2]=0}c[k>>2]=0}}while(0);if(c[n>>2]|0)break a;l=l+1|0;if((l|0)>=(c[m>>2]|0))break a}if((q|0)==43)return g|0}while(0);e=c[d>>2]|0;n=p+-1|0;if((p|0)<=1){r=0;return r|0}b=n;while(1){d=b;b=b+-1|0;d:do if((d|0)<(p|0)){k=b;j=c[e+(b<<2)>>2]|0;do{l=k;k=k+1|0;f=e+(k<<2)|0;i=c[f>>2]|0;h=(c[j+40>>2]|0)==0;m=i;g=c[i+40>>2]|0;if(!h)if(!g){g=0;q=37}else{o=c[j+60>>2]|0;g=c[i+60>>2]|0;r=o-g|0;g=Lu(c[j+64>>2]|0,c[i+64>>2]|0,(r|0)<0?o:g)|0;g=(g|0)==0?r:g}else q=37;if((q|0)==37){q=0;g=(h&1)-((g|0)==0&1)|0}if(!g)g=(c[i>>2]|0)-(c[j>>2]|0)|0;if((g|0)<0)break d;r=e+(l<<2)|0;j=c[r>>2]|0;c[f>>2]=j;c[r>>2]=m}while((k|0)<(n|0))}while(0);if((d|0)<=1){g=0;break}}return g|0}function fq(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=e+72|0;f=c[s>>2]|0;if(!f)f=c[e+40>>2]|0;else f=f+(c[e+76>>2]|0)|0;if((f|0)!=0?(g=e+40|0,h=c[g>>2]|0,f>>>0<(h+(c[e+44>>2]|0)|0)>>>0):0){l=f;i=h;q=g}else r=6;do if((r|0)==6){k=e+56|0;f=c[k>>2]|0;if(f|0){g=c[f>>2]|0;j=e+40|0;f=c[j>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{r=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[j>>2]=0;if(!g){s=0;return s|0}h=c[g+8>>2]|0;i=(c[h>>2]|0)+1|0;c[e+64>>2]=c[g+12>>2];c[e+60>>2]=c[g+16>>2];f=nb(i)|0;if(!f){s=7;return s|0}ew(f|0,c[h+4>>2]|0,i|0)|0;c[e+76>>2]=i;c[e+44>>2]=i;c[s>>2]=f;c[j>>2]=f;c[k>>2]=(c[k>>2]|0)+4;s=0;return s|0}j=e+40|0;if(!(a[e+5>>0]|0)){f=c[j>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=e+52|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}q=g;if((c[h+304>>2]|0)>>>0<=q>>>0?(c[h+308>>2]|0)>>>0>q>>>0:0){q=h+300|0;c[g>>2]=c[q>>2];c[q>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0}c[j>>2]=0;h=e+32|0;g=h;f=c[g>>2]|0;g=c[g+4>>2]|0;q=e+16|0;o=c[q+4>>2]|0;if(!((g|0)<(o|0)|((g|0)==(o|0)?f>>>0<(c[q>>2]|0)>>>0:0))){s=0;return s|0}q=Sv(f|0,g|0,1,0)|0;f=L()|0;o=h;c[o>>2]=q;c[o+4>>2]=f;f=dq(b,q,f,j,e+44|0)|0;if(!f){i=c[j>>2]|0;l=i;q=j;break}else{s=f;return s|0}}while(0);o=e+52|0;h=c[o>>2]|0;a:do if(h){f=i;j=l+20|0;b=e+48|0;k=e+44|0;g=c[b>>2]|0;if((j-f|0)>(g|0)){while(1){i=(c[k>>2]|0)-g|0;i=(i|0)<4096?i:4096;f=jd(h,f+g|0,i,g,81)|0;if(f|0){p=f;r=94;break}h=(c[b>>2]|0)+i|0;c[b>>2]=h;h=(c[q>>2]|0)+h|0;i=h+20|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));g=c[b>>2]|0;m=c[o>>2]|0;if((g|0)==(c[k>>2]|0))break;if(!m){k=0;break a}f=c[q>>2]|0;if((j-f|0)<=(g|0)){k=m;break a}else h=m}if((r|0)==94)return p|0;do if(m|0){f=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,m);break}n=m;if((c[f+304>>2]|0)>>>0<=n>>>0?(c[f+308>>2]|0)>>>0>n>>>0:0){n=f+300|0;c[m>>2]=c[n>>2];c[n>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[o>>2]=0;c[b>>2]=0;k=0}else k=h}else k=0;while(0);g=a[l>>0]|0;f=g&255;if(f&128){n=d[l+1>>0]|0;f=n<<7|g&127;if(n&128){n=d[l+2>>0]|0;f=n<<14|f&16383;if(n&128){n=d[l+3>>0]|0;f=n<<21|f&2097151;if(!(n&128))g=4;else{f=(a[l+4>>0]&7)<<28|f&268435455;g=5}}else g=3}else g=2}else g=1;i=l+g|0;h=a[i>>0]|0;g=h&255;if(g&128){n=d[i+1>>0]|0;g=n<<7|h&127;if(n&128){n=d[i+2>>0]|0;g=n<<14|g&16383;if(n&128){n=d[i+3>>0]|0;g=n<<21|g&2097151;if(!(n&128))h=4;else{g=(a[i+4>>0]&7)<<28|g&268435455;h=5}}else h=3}else h=2}else h=1;m=i+h|0;if((g|0)<1){s=267;return s|0}n=e+44|0;l=m;if(((c[q>>2]|0)+(c[n>>2]|0)-l|0)<(g|0)){s=267;return s|0}b=e+68|0;h=c[b>>2]|0;if((f|0)>(h|0)){s=267;return s|0}i=Sv(g|0,((g|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;j=L()|0;t=((h|0)<0)<<31>>31;do if((j|0)>(t|0)|(j|0)==(t|0)&i>>>0>h>>>0){j=cw(i|0,j|0,1)|0;h=L()|0;k=e+64|0;i=c[k>>2]|0;if(mb()|0){t=7;return t|0}h=sb(i,j,h)|0;if(!h){t=7;return t|0}else{c[k>>2]=h;c[b>>2]=j;h=c[o>>2]|0;break}}else h=k;while(0);b:do if(h|0){b=g+10+l|0;l=e+48|0;i=c[l>>2]|0;k=h;while(1){h=c[q>>2]|0;if((b-h|0)<=(i|0))break b;j=(c[n>>2]|0)-i|0;j=(j|0)<4096?j:4096;h=jd(k,h+i|0,j,i,81)|0;if(h|0){p=h;r=94;break}h=(c[l>>2]|0)+j|0;c[l>>2]=h;h=(c[q>>2]|0)+h|0;i=h+20|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));i=c[l>>2]|0;k=c[o>>2]|0;if((i|0)==(c[n>>2]|0))break;if(!k)break b}if((r|0)==94)return p|0;do if(k|0){h=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,k);break}t=k;if((c[h+304>>2]|0)>>>0<=t>>>0?(c[h+308>>2]|0)>>>0>t>>>0:0){t=h+300|0;c[k>>2]=c[t>>2];c[t>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[o>>2]=0;c[l>>2]=0}while(0);ew((c[e+64>>2]|0)+f|0,m|0,g|0)|0;c[e+60>>2]=g+f;h=m+g|0;f=a[h>>0]|0;g=f&255;i=e+76|0;if(g&128){t=d[h+1>>0]|0;f=t<<7|f&127;if(t&128){t=d[h+2>>0]|0;f=t<<14|f&16383;if(t&128){t=d[h+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){g=f;f=4}else{g=(a[h+4>>0]&7)<<28|f&268435455;f=5}}else{g=f;f=3}}else{g=f;f=2}}else f=1;c[i>>2]=g;f=h+f|0;c[s>>2]=f;c[e+80>>2]=0;if((g|0)>((c[n>>2]|0)-f+(c[q>>2]|0)|0)){t=267;return t|0}if((c[e+48>>2]|0)==0?a[f+(g+-1)>>0]|0:0){t=267;return t|0}t=0;return t|0}
- function qk(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Y=Ra;Ra=Ra+96|0;R=Y+32|0;Q=Y+24|0;O=Y+16|0;w=Y+8|0;u=Y;S=Y+56|0;T=Y+84|0;P=f+40|0;X=c[P>>2]|0;c[P>>2]=X+1;P=f+8|0;l=c[P>>2]|0;a:do if(!l){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))W=15;else{V=0;break a}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];V=n+284|0;c[V>>2]=(c[V>>2]|0)+1;break b}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];V=n+284|0;c[V>>2]=(c[V>>2]|0)+1;break b}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;W=15}while(0);if((W|0)==15)m=_d(n,224,0)|0;if(!m)V=0;else{o=m+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[P>>2]=m;Di(m,61,0,1,0)|0;V=m}}else V=l;while(0);N=(h&4|0)!=0;if(i)if(!(c[g+4>>2]&2048))M=i;else{o=c[c[g+20>>2]>>2]|0;p=c[o>>2]|0;c:do if((p|0)>0){l=0;while(1){m=c[o+4+(l*20|0)>>2]|0;n=a[m>>0]|0;if((n+91&255)<2)do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2);if(n<<24>>24==-88)n=a[m+38>>0]|0;switch(n<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0)break c;n=c[m+44>>2]|0;if(!n)break c;M=b[m+32>>1]|0;if(M<<16>>16>-1?(a[(c[n+4>>2]|0)+(M<<16>>16<<4)+12>>0]|0)==0:0)break c;break}default:break c}l=l+1|0;if((l|0)>=(p|0))break c}}else l=0;while(0);M=(l|0)==(p|0)?0:i}else M=0;d:do if(((((((((c[f+36>>2]|0)==0?(c[g+4>>2]&2080|0)==2048:0)?(s=c[g+20>>2]|0,(c[s+52>>2]|0)==0):0)?(c[s+8>>2]&9|0)==0:0)?(c[s+60>>2]|0)==0:0)?(c[s+36>>2]|0)==0:0)?(r=c[s+32>>2]|0,(c[r>>2]|0)==1):0)?(c[r+28>>2]|0)==0:0)?(x=c[r+24>>2]|0,(c[x+56>>2]|0)==0):0){H=c[s>>2]|0;I=c[H>>2]|0;J=(I|0)>0;if(J){l=0;do{if((a[c[H+4+(l*20|0)>>2]>>0]|0)!=-94){W=191;break d}l=l+1|0}while((l|0)<(I|0));if(!s){W=191;break}}m=c[x+72>>2]|0;if(!m)l=-1e6;else{n=c[(c[f>>2]|0)+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}o=l<<16;K=o>>16;p=c[f+116>>2]|0;p=(p|0)==0?f:p;l=p+84|0;m=c[l>>2]|0;n=1<<K;e:do if((((n&m|0)==0?(c[l>>2]=n|m,(o|0)==65536):0)?(v=c[p>>2]|0,t=v+16|0,(c[(c[t>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){l=Pe(c[v>>2]|0,0,v,S,0,542)|0;if(l|0){cd(p,32157,u);c[p+12>>2]=l;break}G=c[S>>2]|0;c[(c[t>>2]|0)+20>>2]=G;l=c[v+92>>2]|0;o=c[G+4>>2]|0;c[o+4>>2]=c[G>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;i=o+36|0;q=(c[p>>2]|0)-(c[i>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;G=(c[14820]|0)+1|0;c[14820]=G;c[14821]=(G|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;W=68;break}else{l=Wa[c[29352>>2]&127](m)|0;W=68}while(0);do if((W|0)==68){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{G=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);G=Se(c[o>>2]|0,p,q)|0;c[i>>2]=(c[p>>2]|0)-(q&65535);if((G|0)!=7)break;l=v+81|0;do if(!(a[l>>0]|0)){if(a[v+82>>0]|0)break;a[l>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;l=v+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[v+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break e}while(0)}while(0);Hj(f,K,c[x+28>>2]|0,0,c[x>>2]|0);G=(I|0)==1;if(G?(b[(c[H+4>>2]|0)+32>>1]|0)<0:0){m=V+108|0;l=c[m>>2]|0;if((c[V+112>>2]|0)>(l|0)){c[m>>2]=l+1;o=c[V+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0))}else l=Di(V,17,0,0,0)|0;Gj(f,X,K,x,108);c[w>>2]=c[x>>2];nk(f,0,39096,w);m=c[m>>2]|0;if(!(a[(c[V>>2]|0)+81>>0]|0))l=(c[V+104>>2]|0)+(((l|0)<0?m+-1|0:l)*20|0)|0;else l=59308;c[l+8>>2]=m;n=1;break}if(J){r=c[g+12>>2]|0;i=a[r>>0]|0;q=r+38|0;s=r+20|0;t=r+20|0;u=x+4|0;v=i<<24>>24==-125;f:do if(i<<24>>24==-88){p=1;i=0;m=a[q>>0]|0;while(1){switch(m<<24>>24){case -87:{l=s;W=95;break}case -125:{l=c[t>>2]|0;W=95;break}default:o=r}g:do if((W|0)==95){W=0;if((c[c[l>>2]>>2]|0)<2){o=r;break}do if(v)l=m;else{if(m<<24>>24==-125){l=-125;break}o=c[(c[s>>2]|0)+4+(i*20|0)>>2]|0;break g}while(0);o=c[(c[c[t>>2]>>2]|0)+4+(i*20|0)>>2]|0;m=l}while(0);l=b[(c[H+4+(i*20|0)>>2]|0)+32>>1]|0;if(l<<16>>16>-1)n=a[(c[u>>2]|0)+(l<<16>>16<<4)+13>>0]|0;else n=68;l=Xj(o)|0;if(n<<24>>24==0|l<<24>>24==0)l=(l|n)<<24>>24==0?65:(l&255)+(n&255)|0;else l=n<<24>>24>66|l<<24>>24>66?67:65;p=((l<<24>>24)+-65|0)>>>0<2?p:n<<24>>24>66&1;i=i+1|0;l=(p|0)!=0;if(!((i|0)<(I|0)&l))break f}}else{o=1;p=0;while(1){switch(i<<24>>24){case -87:{l=s;W=108;break}case -125:{l=c[t>>2]|0;W=108;break}default:m=r}h:do if((W|0)==108){W=0;if((c[c[l>>2]>>2]|0)<2){m=r;break}do if(!v){if((a[q>>0]|0)==-125)break;m=c[(c[s>>2]|0)+4+(p*20|0)>>2]|0;break h}while(0);m=c[(c[c[t>>2]>>2]|0)+4+(p*20|0)>>2]|0}while(0);l=b[(c[H+4+(p*20|0)>>2]|0)+32>>1]|0;if(l<<16>>16>-1)n=a[(c[u>>2]|0)+(l<<16>>16<<4)+13>>0]|0;else n=68;l=Xj(m)|0;if(n<<24>>24==0|l<<24>>24==0)l=(l|n)<<24>>24==0?65:(l&255)+(n&255)|0;else l=n<<24>>24>66|l<<24>>24>66?67:65;o=((l<<24>>24)+-65|0)>>>0<2?o:n<<24>>24>66&1;p=p+1|0;l=(o|0)!=0;if(!((p|0)<(I|0)&l))break f}}while(0);if(!l){W=191;break}}l=c[x+8>>2]|0;if(l){w=cw(1,0,I|0)|0;w=Sv(w|0,L()|0,-1,-1)|0;x=L()|0;y=g+12|0;z=(j|0)==0;D=V+108|0;A=V+112|0;F=V+104|0;C=(M|0)==0;E=f+44|0;B=l;i:while(1){l=b[B+52>>1]|0;m=l&65535;j:do if((I|0)<=(m|0)){if((l&65535)>62|(c[B+36>>2]|0)!=0)break;do if(N){if((I|0)<(e[B+50>>1]|0))break j;if((I|0)>=(m|0))break;if(!(a[B+54>>0]|0))break j}while(0);k:do if(J){u=B+4|0;v=B+32|0;t=0;m=0;l=0;while(1){n=c[y>>2]|0;p=a[n>>0]|0;if(p<<24>>24==-88)o=a[n+38>>0]|0;else o=p;switch(o<<24>>24){case -87:{o=n+20|0;W=135;break}case -125:{o=c[n+20>>2]|0;W=135;break}default:{}}l:do if((W|0)==135){if((c[c[o>>2]>>2]|0)<2)break;do if(p<<24>>24!=-125){if((a[n+38>>0]|0)==-125)break;n=c[(c[n+20>>2]|0)+4+(t*20|0)>>2]|0;break l}while(0);n=c[(c[c[n+20>>2]>>2]|0)+4+(t*20|0)>>2]|0}while(0);o=c[H+4+(t*20|0)>>2]|0;m:do if(!(c[n+4>>2]&256)){do if(o|0){if(!(c[o+4>>2]&256))break;n=Yi(f,o)|0;W=148;break m}while(0);n=Yi(f,n)|0;if(!n){n=Yi(f,o)|0;W=148;break}else{s=c[u>>2]|0;r=b[o+32>>1]|0;W=152;break}}else{n=Yi(f,n)|0;W=148}while(0);n:do if((W|0)==148){W=0;p=c[u>>2]|0;o=b[o+32>>1]|0;if(n|0){s=p;r=o;W=152;break}n=0;do{if((b[p+(n<<1)>>1]|0)==o<<16>>16)break n;n=n+1|0}while((n|0)<(I|0))}while(0);o:do if((W|0)==152){W=0;o=0;while(1){if((b[s+(o<<1)>>1]|0)==r<<16>>16){i=c[n>>2]|0;q=c[(c[v>>2]|0)+(o<<2)>>2]|0;Z=a[i>>0]|0;p=(d[208+(Z&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0;if(!(Z<<24>>24==0|(p|0)!=0))do{i=i+1|0;q=q+1|0;Z=a[i>>0]|0;p=(d[208+(Z&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(Z<<24>>24==0|(p|0)!=0));if(!p){n=o;break o}}o=o+1|0;if((o|0)>=(I|0)){n=o;break}}}while(0);if((n|0)==(I|0))break k;o=cw(1,0,n|0)|0;p=L()|0;if(!((o&m|0)==0&(p&l|0)==0))break k;m=o|m;l=p|l;if(!z)c[j+(t<<2)>>2]=n;t=t+1|0;if((t|0)>=(I|0))break k}}else{m=0;l=0}while(0);if((m|0)==(w|0)&(l|0)==(x|0))break i}while(0);l=c[B+20>>2]|0;if(!l){W=191;break d}else B=l}l=c[D>>2]|0;if((c[A>>2]|0)>(l|0)){c[D>>2]=l+1;o=c[F>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));o=l}else o=Di(V,17,0,0,0)|0;c[O>>2]=c[B>>2];nk(f,0,39143,O);l=c[B+44>>2]|0;m=c[D>>2]|0;if((c[A>>2]|0)>(m|0)){c[D>>2]=m+1;Z=c[F>>2]|0;a[Z+(m*20|0)>>0]=108;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=X;c[Z+(m*20|0)+8>>2]=l;c[Z+(m*20|0)+12>>2]=K;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(V,108,X,l,K)|0;m=c[P>>2]|0;n=Ij(f,B)|0;p:do if(n|0){l=c[m>>2]|0;if(!(a[l+81>>0]|0)){f=c[m+104>>2]|0;Z=(c[m+108>>2]|0)+-1|0;a[f+(Z*20|0)+1>>0]=-9;c[f+(Z*20|0)+16>>2]=n;break}if(c[l+480>>2]|0)break;Z=(c[n>>2]|0)+-1|0;c[n>>2]=Z;if(Z|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break p}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[n>>2]=c[Z>>2];c[Z>>2]=n;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Z=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);n=(d[c[B+28>>2]>>0]|0)+3|0;do if(!C){l=(c[E>>2]|0)+1|0;c[E>>2]=l;c[M>>2]=l;if(!G)break;sk(V,X,l)}while(0);m=c[D>>2]|0;if(!(a[(c[V>>2]|0)+81>>0]|0))l=(c[F>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m}else W=191}else W=191;while(0);do if((W|0)==191){if(h&1|0?(c[g+4>>2]&2048|0)==0:0){O=g+12|0;h=c[O>>2]|0;c[O>>2]=0;Z=S+20|0;a[Z>>0]=1;c[S+4>>2]=127;c[S+8>>2]=128;c[S+24>>2]=0;_j(S,g)|0;Z=a[Z>>0]|0;c[O>>2]=h;if(!(Z<<24>>24)){n=5;break}if((c[c[g+20>>2]>>2]|0)<3){n=5;break}}F=f+132|0;G=c[F>>2]|0;if(!N)if(!M)E=0;else{Z=f+44|0;E=(c[Z>>2]|0)+1|0;c[Z>>2]=E;c[M>>2]=E}else{c[F>>2]=0;E=0}D=c[P>>2]|0;u=g+4|0;l=c[u>>2]|0;do if((l&32|0)==0?(c[f+52>>2]|0)==0:0){if(!(l&33554432)){c[u>>2]=l|33554432;n=f+44|0;l=(c[n>>2]|0)+1|0;c[n>>2]=l;c[g+48>>2]=l;n=D+108|0;m=c[n>>2]|0;o=D+112|0;if((c[o>>2]|0)>(m|0)){Z=m+1|0;c[n>>2]=Z;W=c[D+104>>2]|0;a[W+(m*20|0)>>0]=70;b[W+(m*20|0)+2>>1]=0;c[W+(m*20|0)+4>>2]=0;c[W+(m*20|0)+8>>2]=l;c[W+(m*20|0)+12>>2]=0;c[W+(m*20|0)+16>>2]=0;a[W+(m*20|0)+1>>0]=0;l=Z}else l=(Di(D,70,0,l,0)|0)+1|0;c[g+44>>2]=l;l=c[n>>2]|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;o=c[D+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));m=l;W=223;break}else{m=Di(D,17,0,0,0)|0;W=223;break}}p=D+108|0;l=c[p>>2]|0;i=D+112|0;if((c[i>>2]|0)>(l|0)){c[p>>2]=l+1;o=c[D+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));o=l}else o=Di(D,17,0,0,0)|0;if(c[u>>2]&2048|0){c[Q>>2]=c[(c[g+20>>2]|0)+20>>2];nk(f,0,39174,Q)}l=c[g+48>>2]|0;m=c[g+44>>2]|0;n=c[p>>2]|0;if((c[i>>2]|0)>(n|0)){c[p>>2]=n+1;Z=c[D+104>>2]|0;a[Z+(n*20|0)>>0]=12;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=l;c[Z+(n*20|0)+8>>2]=m;c[Z+(n*20|0)+12>>2]=0;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else Di(D,12,l,m,0)|0;l=c[g+28>>2]|0;m=c[p>>2]|0;if((c[i>>2]|0)>(m|0)){c[p>>2]=m+1;Z=c[D+104>>2]|0;a[Z+(m*20|0)>>0]=111;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=X;c[Z+(m*20|0)+8>>2]=l;c[Z+(m*20|0)+12>>2]=0;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(D,111,X,l,0)|0;m=c[p>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m}else{m=0;W=223}while(0);do if((W|0)==223){s=g+12|0;v=c[s>>2]|0;l=a[v>>0]|0;if(l<<24>>24==-88)l=a[v+38>>0]|0;switch(l<<24>>24){case -87:{l=v+20|0;W=228;break}case -125:{l=c[v+20>>2]|0;W=228;break}default:t=1}if((W|0)==228)t=c[c[l>>2]>>2]|0;c[g+28>>2]=X;C=D+108|0;l=c[C>>2]|0;B=D+112|0;if((c[B>>2]|0)>(l|0)){c[C>>2]=l+1;A=c[D+104>>2]|0;a[A+(l*20|0)>>0]=113;b[A+(l*20|0)+2>>1]=0;c[A+(l*20|0)+4>>2]=X;c[A+(l*20|0)+8>>2]=t;c[A+(l*20|0)+12>>2]=0;c[A+(l*20|0)+16>>2]=0;a[A+(l*20|0)+1>>0]=0;A=l}else A=Di(D,113,X,t,0)|0;q=c[f>>2]|0;p=t+1|0;i=p*5|0;o=i+20|0;r=q+272|0;q:do if(c[r>>2]|0)if(!(a[q+81>>0]|0))W=242;else{z=0;y=1;x=0}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<o>>>0:0))){l=q+300|0;n=c[l>>2]|0;if(n|0){c[l>>2]=c[n>>2];W=q+284|0;c[W>>2]=(c[W>>2]|0)+1;W=243;break q}l=q+296|0;n=c[l>>2]|0;if(!n){l=q+292|0;break}else{c[l>>2]=c[n>>2];W=q+284|0;c[W>>2]=(c[W>>2]|0)+1;W=243;break q}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;W=242}while(0);if((W|0)==242){n=_d(q,o,0)|0;W=243}do if((W|0)==243){if(n|0){c[n+16>>2]=n+20+(p<<2);b[n+6>>1]=t;b[n+8>>1]=p;a[n+4>>0]=a[q+78>>0]|0;c[n+12>>2]=q;c[n>>2]=1;gw(n+24|0,0,i+-4|0)|0;z=n;y=0;x=n;break}l=q+81|0;if((a[l>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[r>>2]=(c[r>>2]|0)+1;l=c[q+236>>2]|0;if(l){c[l+12>>2]=7;z=0;y=1;x=n}else{z=0;y=1;x=n}}else{z=0;y=1;x=n}}while(0);if(!(c[u>>2]&2048)){o=c[g+20>>2]|0;if(!o)o=m;else{Z=Xj(v)|0;a[T>>0]=Z<<24>>24==0?65:Z;if(x|0){Z=Yi(f,c[s>>2]|0)|0;c[x+20>>2]=Z}w=f+19|0;n=a[w>>0]|0;if(n<<24>>24){Z=n+-1<<24>>24;a[w>>0]=Z;l=c[f+148+((Z&255)<<2)>>2]|0;if(!(Z<<24>>24))W=302;else{v=n+-2<<24>>24;a[w>>0]=v;v=c[f+148+((v&255)<<2)>>2]|0}}else{W=f+44|0;l=(c[W>>2]|0)+1|0;c[W>>2]=l;W=302}if((W|0)==302){Z=f+44|0;v=(c[Z>>2]|0)+1|0;c[Z>>2]=v}n=c[o>>2]|0;if((n|0)>0){q=S+20|0;r=S+4|0;s=S+8|0;t=S+24|0;u=D+104|0;i=o+4|0;p=n;while(1){o=c[i>>2]|0;do if(!m)m=0;else{a[q>>0]=1;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(!o)break;_j(S,o)|0;if(a[q>>0]|0)break;n=c[D>>2]|0;if(a[n+81>>0]|0){m=0;break}Z=c[u>>2]|0;Q=Z+(m*20|0)+1|0;R=Z+(m*20|0)+16|0;kg(n,a[Q>>0]|0,c[R>>2]|0);a[Q>>0]=0;c[R>>2]=0;a[Z+(m*20|0)>>0]=-86;m=0}while(0);o=Jj(f,o,l)|0;n=c[C>>2]|0;if((c[B>>2]|0)>(n|0)){c[C>>2]=n+1;Z=c[u>>2]|0;a[Z+(n*20|0)>>0]=92;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=o;c[Z+(n*20|0)+8>>2]=1;c[Z+(n*20|0)+12>>2]=v;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else n=Di(D,92,o,1,v)|0;if(!(a[(c[D>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[C>>2]|0)+-1|0;Ei(D,(c[u>>2]|0)+(n*20|0)|0,T,1)}n=c[C>>2]|0;if((c[B>>2]|0)>(n|0)){c[C>>2]=n+1;Z=c[u>>2]|0;a[Z+(n*20|0)>>0]=-124;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=X;c[Z+(n*20|0)+8>>2]=v;c[Z+(n*20|0)+12>>2]=o;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else n=Di(D,132,X,v,o)|0;if(!(a[(c[D>>2]|0)+81>>0]|0)){Z=c[u>>2]|0;a[Z+(n*20|0)+1>>0]=-3;c[Z+(n*20|0)+16>>2]=1}if((p|0)>1){i=i+20|0;p=p+-1|0}else break}}if(l|0?(U=a[w>>0]|0,(U&255)<8):0){a[w>>0]=U+1<<24>>24;c[f+148+((U&255)<<2)>>2]=l}do if(v|0){l=a[w>>0]|0;if((l&255)>=8)break;a[w>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=v}while(0);o=m}}else{l=c[g+20>>2]|0;r=c[l>>2]|0;Z=c[l+20>>2]|0;c[R>>2]=(m|0)==0?39084:59952;c[R+4>>2]=Z;nk(f,1,39197,R);if((c[r>>2]|0)==(t|0)){a[R>>0]=11;c[R+4>>2]=X;o=R+16|0;c[R+8>>2]=0;c[R+12>>2]=0;n=pk(f,g)|0;c[o>>2]=n;c[l+12>>2]=0;l=(kj(f,l,R)|0)==0;n=c[f>>2]|0;o=c[o>>2]|0;r:do if(o|0){do if(n|0){if(c[n+480>>2]|0){Xd(n,o);break r}p=o;if((c[n+304>>2]|0)>>>0<=p>>>0){if((c[n+308>>2]|0)>>>0<=p>>>0)break;Z=n+300|0;c[o>>2]=c[Z>>2];c[Z>>2]=o;break r}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{Z=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);if(!l){s:do if(x|0?(Z=(c[x>>2]|0)+-1|0,c[x>>2]=Z,(Z|0)==0):0){l=c[x+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,z);break s}m=x;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[x>>2]=c[Z>>2];c[Z>>2]=x;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{Z=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);break}t:do if((t|0)>0){p=v+38|0;i=v+20|0;q=v+20|0;o=0;while(1){n=a[v>>0]|0;if(n<<24>>24==-88)l=a[p>>0]|0;else l=n;switch(l<<24>>24){case -87:{l=i;W=281;break}case -125:{l=c[q>>2]|0;W=281;break}default:l=v}u:do if((W|0)==281){W=0;if((c[c[l>>2]>>2]|0)<2){l=v;break}do if(n<<24>>24!=-125){if((a[p>>0]|0)==-125)break;l=c[(c[i>>2]|0)+4+(o*20|0)>>2]|0;break u}while(0);l=c[(c[c[q>>2]>>2]|0)+4+(o*20|0)>>2]|0}while(0);n=c[r+4+(o*20|0)>>2]|0;v:do if(!(c[l+4>>2]&256)){do if(n|0){if(!(c[n+4>>2]&256))break;l=Yi(f,n)|0;break v}while(0);l=Yi(f,l)|0;if(l|0)break;l=Yi(f,n)|0}else l=Yi(f,l)|0;while(0);c[x+20+(o<<2)>>2]=l;o=o+1|0;if((o|0)==(t|0))break t}}while(0);o=m}else o=m}w:do if(x|0){l=c[D>>2]|0;if(!(a[l+81>>0]|0)){if((A|0)<0)l=(c[C>>2]|0)+-1|0;else l=A;m=c[D+104>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(D,m+(l*20|0)|0,z,-9);break}if(y)break;c[m+(l*20|0)+16>>2]=z;a[n>>0]=-9;break}if(!(y|(c[l+480>>2]|0)!=0)?(Z=(c[z>>2]|0)+-1|0,c[z>>2]=Z,(Z|0)==0):0){l=c[z+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,z);break w}m=z;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[z>>2]=c[Z>>2];c[Z>>2]=z;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{Z=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}}while(0);if(o|0){m=c[C>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m;l=c[g+48>>2]|0;if((c[B>>2]|0)>(m|0)){c[C>>2]=m+1;Z=c[D+104>>2]|0;a[Z+(m*20|0)>>0]=66;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=l;c[Z+(m*20|0)+8>>2]=0;c[Z+(m*20|0)+12>>2]=0;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(D,66,l,0,0)|0;l=c[g+44>>2]|0;m=c[C>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+((((l|0)<1?m:l)+-1|0)*20|0)|0;else l=59308;c[l+4>>2]=m+-1}}while(0);if(E|0)sk(V,X,E);c[F>>2]=G;n=2}while(0);if(!((j|0)!=0&(n+-3|0)>>>0>1)){c[k>>2]=X;Ra=Y;return n|0}m=c[g+12>>2]|0;l=a[m>>0]|0;if(l<<24>>24==-88)l=a[m+38>>0]|0;switch(l<<24>>24){case -87:{l=m+20|0;W=369;break}case -125:{l=c[m+20>>2]|0;W=369;break}default:l=1}if((W|0)==369){l=c[c[l>>2]>>2]|0;if((l|0)<=0){c[k>>2]=X;Ra=Y;return n|0}}m=0;do{c[j+(m<<2)>>2]=m;m=m+1|0}while((m|0)!=(l|0));c[k>>2]=X;Ra=Y;return n|0}function rk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a+116>>2]|0;f=(f|0)==0?a:f;a=f+84|0;d=c[a>>2]|0;e=1<<b;if(d&e|0)return;c[a>>2]=d|e;if((b|0)!=1)return;Oe(f)|0;return}function sk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=d+108|0;g=c[i>>2]|0;j=d+112|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=70;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=0;c[h+(g*20|0)+8>>2]=f;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0}else Di(d,70,0,f,0)|0;g=c[i>>2]|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=36;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=e;c[h+(g*20|0)+8>>2]=0;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0;h=g}else h=Di(d,36,e,0,0)|0;g=c[i>>2]|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;j=c[d+104>>2]|0;a[j+(g*20|0)>>0]=90;b[j+(g*20|0)+2>>1]=0;c[j+(g*20|0)+4>>2]=e;c[j+(g*20|0)+8>>2]=0;c[j+(g*20|0)+12>>2]=f;c[j+(g*20|0)+16>>2]=0;a[j+(g*20|0)+1>>0]=0}else Di(d,90,e,0,f)|0;g=c[i>>2]|0;if((g|0)>0)b[(c[d+104>>2]|0)+((g+-1|0)*20|0)+2>>1]=128;if(a[(c[d>>2]|0)+81>>0]|0){d=59308;d=d+8|0;c[d>>2]=g;return}d=(c[d+104>>2]|0)+(((h|0)<0?g+-1|0:h)*20|0)|0;d=d+8|0;c[d>>2]=g;return}function tk(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;m=t+8|0;p=t+4|0;s=t;o=c[d+8>>2]|0;c[p>>2]=0;c[s>>2]=0;if((e|0)==0|(o|0)==0){Ra=t;return}j=a[e>>0]|0;k=j&255;a:do switch(j<<24>>24){case 44:{l=d+56|0;m=c[l>>2]|0;h=m+-1|0;c[l>>2]=h;Tj(d,c[e+12>>2]|0,h,g^16);tk(d,c[e+16>>2]|0,f,g);h=c[o+12>>2]|0;g=0-m|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}case 43:{tk(d,c[e+12>>2]|0,f,g);tk(d,c[e+16>>2]|0,f,g);break}case 19:{Tj(d,c[e+12>>2]|0,f,g);break}case -89:{o=(a[e+38>>0]|0)==-96;h=c[e+12>>2]|0;g=o?16:0;if(o^(a[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>0]|0)==0){tk(d,h,f,g);break a}else{Tj(d,h,f,g);break a}}case -96:case 45:{g=128;i=j<<24>>24==45?53:52;n=12;break}case 53:case 52:case 57:case 54:case 55:case 56:{i=k;n=12;break}case 51:case 50:{h=Lj(d,c[e+12>>2]|0,p)|0;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=j;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break a}else{Di(o,k,h,f,0)|0;break a}}case 48:{Sj(d,c[e+12>>2]|0,c[e+20>>2]|0,f,67,g);break}case 49:{h=d+56|0;j=c[h>>2]|0;i=j+-1|0;c[h>>2]=i;Rj(d,e,i,(g|0)==0?i:f);i=o+108|0;h=c[i>>2]|0;if((c[o+112>>2]|0)>(h|0)){c[i>>2]=h+1;e=c[o+104>>2]|0;a[e+(h*20|0)>>0]=11;b[e+(h*20|0)+2>>1]=0;c[e+(h*20|0)+4>>2]=0;c[e+(h*20|0)+8>>2]=f;c[e+(h*20|0)+12>>2]=0;c[e+(h*20|0)+16>>2]=0;a[e+(h*20|0)+1>>0]=0}else Di(o,11,0,f,0)|0;g=c[o+12>>2]|0;h=0-j|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0){mk(g,o,h);break a}else{c[(c[g+64>>2]|0)+(h<<2)>>2]=c[i>>2];break a}}default:{c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)!=0&1;else h=0;n=37}}while(0);do if((n|0)==12){j=e+12|0;k=c[j>>2]|0;h=a[k>>0]|0;if(h<<24>>24==-88)h=a[k+38>>0]|0;switch(h<<24>>24){case -87:{l=k+20|0;n=17;break}case -125:{l=c[k+20>>2]|0;n=17;break}default:{}}if((n|0)==17?(c[c[l>>2]>>2]|0)>=2:0){c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)!=0&1;else h=0;n=37;break}m=Lj(d,k,p)|0;e=e+16|0;o=Lj(d,c[e>>2]|0,s)|0;Mj(d,c[j>>2]|0,c[e>>2]|0,i,m,o,f,g)}while(0);do if((n|0)==37){if(h|0){h=o+108|0;g=c[h>>2]|0;if((c[o+112>>2]|0)>(g|0)){c[h>>2]=g+1;o=c[o+104>>2]|0;a[o+(g*20|0)>>0]=11;b[o+(g*20|0)+2>>1]=0;c[o+(g*20|0)+4>>2]=0;c[o+(g*20|0)+8>>2]=f;c[o+(g*20|0)+12>>2]=0;c[o+(g*20|0)+16>>2]=0;a[o+(g*20|0)+1>>0]=0;break}else{Di(o,11,0,f,0)|0;break}}c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0){if(!(c[m>>2]|0))break}else n=43;j=Lj(d,e,p)|0;h=(g|0)!=0&1;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=18;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=j;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break}else{Di(o,18,j,f,h)|0;break}}while(0);h=c[p>>2]|0;if(h|0?(q=d+19|0,r=a[q>>0]|0,(r&255)<8):0){a[q>>0]=r+1<<24>>24;c[d+148+((r&255)<<2)>>2]=h}h=c[s>>2]|0;if(!h){Ra=t;return}g=d+19|0;i=a[g>>0]|0;if((i&255)>=8){Ra=t;return}a[g>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=h;Ra=t;return}function uk(b,d){b=b|0;d=d|0;var e=0,f=0;f=Ra;Ra=Ra+16|0;e=f;a:do if(!b)b=0;else{if(c[b+4>>2]&1024|0){c[d>>2]=c[b+8>>2];b=1;break}switch(a[b>>0]|0){case -90:{b=uk(c[b+12>>2]|0,d)|0;break a}case -91:break;default:{b=0;break a}}if(!(uk(c[b+12>>2]|0,e)|0))b=0;else{c[d>>2]=0-(c[e>>2]|0);b=1}}while(0);Ra=f;return b|0}function vk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;j=k;f=c[b>>2]|0;if(a[f+165>>0]|0){j=0;Ra=k;return j|0}if(a[b+18>>0]|0){j=0;Ra=k;return j|0}if((e|0)==0|(0==0?(c[f+32>>2]&268435457|0)==1:0)){j=0;Ra=k;return j|0}f=a[e>>0]|0;do if(!(f<<24>>24)){f=39441;h=5}else{l=f&255;f=208+l|0;if((l|32|0)==115){f=a[e+1>>0]|0;if(!(f<<24>>24)){f=39442;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==113){f=a[e+2>>0]|0;if(!(f<<24>>24)){f=39443;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==108){f=a[e+3>>0]|0;if(!(f<<24>>24)){f=39444;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==105){f=a[e+4>>0]|0;if(!(f<<24>>24)){f=39445;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==116){f=a[e+5>>0]|0;if(!(f<<24>>24)){f=39446;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==101){f=a[e+6>>0]|0;if(!(f<<24>>24)){f=39447;h=5;break}if(f<<24>>24==95)break;else{g=95;f=208+(f&255)|0}}else g=101}else g=116}else g=105}else g=108}else g=113}else g=115;i=d[f>>0]|0;h=9}while(0);if((h|0)==5){i=0;g=a[208+(d[f>>0]|0)>>0]|0;h=9}if((h|0)==9?(i|0)!=(g&255|0):0){l=0;Ra=k;return l|0}c[j>>2]=e;cd(b,39449,j);l=1;Ra=k;return l|0}function wk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=qj(b,e)|0;if(!j){k=-1;return k|0}i=c[b+20>>2]|0;e=i+-1|0;if((i|0)>0){i=e;h=(c[b+16>>2]|0)+(e<<4)|0;while(1){f=c[h>>2]|0;if(f|0){g=a[f>>0]|0;e=(d[208+(g&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(g<<24>>24==0|(e|0)!=0)){g=j;do{f=f+1|0;g=g+1|0;l=a[f>>0]|0;e=(d[208+(l&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0}while(!(l<<24>>24==0|(e|0)!=0))}if(!e){e=i;break}}if(!i){k=10;break}e=i+-1|0;if((i|0)>0){i=e;h=h+-16|0}else break}if((k|0)==10){e=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!e){f=j;g=50919;do{g=g+1|0;f=f+1|0;l=a[g>>0]|0;e=(d[208+(l&255)>>0]|0)-(d[208+(d[f>>0]|0)>>0]|0)|0}while(!(l<<24>>24==0|(e|0)!=0))}e=((e|0)!=0)<<31>>31}if(b)k=16}else k=16;if((k|0)==16){if(c[b+480>>2]|0){Xd(b,j);l=e;return l|0}l=j;if((c[b+304>>2]|0)>>>0<=l>>>0?(c[b+308>>2]|0)>>>0>l>>>0:0){l=b+300|0;c[j>>2]=c[l>>2];c[l>>2]=j;l=e;return l|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);l=e;return l|0}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);l=e;return l|0}return 0}function xk(a){a=a|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[(c[a+12>>2]|0)+4>>2]|0;f=b[a+52>>1]|0;if(!(f<<16>>16)){k=0;a=a+48|0;b[a>>1]=k;return}k=c[a+4>>2]|0;i=f&65535;g=0;h=0;do{f=b[k+(g<<1)>>1]|0;if(f<<16>>16<0)f=1;else f=d[j+(f<<16>>16<<4)+14>>0]|0;h=f+h|0;g=g+1|0}while(g>>>0<i>>>0);f=h<<2;if(f>>>0>=8){if(f>>>0>255){h=40;g=0;do{h=(h&65535)+40|0;k=f;f=bw(f|0,g|0,4)|0;j=g;g=L()|0}while(j>>>0>0|(j|0)==0&k>>>0>4095);h=h&65535}else{h=40;g=0}if(g>>>0>0|(g|0)==0&f>>>0>15)do{h=(h&65535)+10&65535;k=f;f=bw(f|0,g|0,1)|0;j=g;g=L()|0}while(j>>>0>0|(j|0)==0&k>>>0>31)}else{if(!f){k=0;a=a+48|0;b[a>>1]=k;return}h=40;g=0;do{h=(h&65535)+65526|0;f=cw(f|0,g|0,1)|0;g=L()|0}while(g>>>0<0|(g|0)==0&f>>>0<8);h=h&65535}k=(h&65535)+65526+(e[3648+((f&7)<<1)>>1]|0)&65535;a=a+48|0;b[a>>1]=k;return}function yk(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=c[d>>2]|0;j=k+32|0;h=j;g=c[h>>2]|0;h=c[h+4>>2]|0;l=j;c[l>>2]=g&-69|64;c[l+4>>2]=h;Kk(d,f,0);c[j>>2]=g;c[j+4>>2]=h;if(c[d+36>>2]|0){l=0;return l|0}j=f;while(1){f=c[j+52>>2]|0;if(!f)break;else j=f}a:do if(!k){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](80)|0;i=27;break}f=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){l=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=l>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){l=0;return l|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){l=0;return l|0}}else{do if((e[k+276>>1]|0)>=80){g=k+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;i=27;break a}g=k+296|0;f=c[g>>2]|0;if(!f){f=k+292|0;break}else{c[g>>2]=c[f>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;i=27;break a}}else f=k+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(k,80,0)|0;i=27}while(0);if((i|0)==27)if(!f){l=0;return l|0}g=f+4|0;h=g+76|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));g=f+32|0;c[g>>2]=1;c[f>>2]=0;b[f+44>>1]=200;Tk(c[d>>2]|0,c[j>>2]|0,f+42|0,f+4|0);Uk(d,f,j);b[f+40>>1]=-1;if(!(a[k+81>>0]|0)){l=f;return l|0}if(c[k+480>>2]|0){Vi(k,f);l=0;return l|0}l=(c[g>>2]|0)+-1|0;c[g>>2]=l;if(l|0){l=0;return l|0}Vi(k,f);l=0;return l|0}function zk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=e+20|0;g=c[l>>2]|0;a:do if(!g){j=c[d>>2]|0;k=e+42|0;i=b[k>>1]|0;g=(i<<16>>16)+1|0;do if(i<<16>>16>=0){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](g)|0;if(!g)break;else j=g}else{i=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<g>>>0)c[14985]=g;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){m=c[14978]|0;h=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=m>>>0)&1}h=Wa[c[29340>>2]&127](i)|0;if(!h)break;g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;j=h}else j=h}if((b[k>>1]|0)>0){h=e+4|0;g=0;do{a[j+g>>0]=a[(c[h>>2]|0)+(g<<4)+13>>0]|0;g=g+1|0}while((g|0)<(b[k>>1]|0))}else g=0;do{a[j+g>>0]=0;if((g|0)<=0)break;g=g+-1|0}while((a[j+g>>0]|0)==65);c[l>>2]=j;break a}while(0);g=j+81|0;if(a[g>>0]|0)return;if(a[j+82>>0]|0)return;a[g>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;g=j+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[j+236>>2]|0;if(!g)return;c[g+12>>2]=7;return}else j=g;while(0);e=(Eu(j)|0)&1073741823;if(!e)return;if(!f){g=c[d>>2]|0;if(!(a[g+81>>0]|0)){Ei(d,(c[d+104>>2]|0)+(((c[d+108>>2]|0)+-1|0)*20|0)|0,j,e);return}else{kg(g,e,j);return}}i=d+108|0;g=c[i>>2]|0;if((c[d+112>>2]|0)>(g|0)){c[i>>2]=g+1;m=c[d+104>>2]|0;a[m+(g*20|0)>>0]=91;b[m+(g*20|0)+2>>1]=0;c[m+(g*20|0)+4>>2]=f;c[m+(g*20|0)+8>>2]=e;c[m+(g*20|0)+12>>2]=0;c[m+(g*20|0)+16>>2]=0;a[m+(g*20|0)+1>>0]=0}else g=Di(d,91,f,e,0)|0;h=c[d>>2]|0;if(a[h+81>>0]|0){kg(h,e,j);return}if((g|0)<0)g=(c[i>>2]|0)+-1|0;Ei(d,(c[d+104>>2]|0)+(g*20|0)|0,j,e);return}function Ak(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+224|0;l=r+192|0;j=r+96|0;o=r+184|0;p=r;c[o>>2]=0;q=c[b>>2]|0;n=b+36|0;if(c[n>>2]|0){Ra=r;return}c[j>>2]=e;h=c[q+108>>2]|0;f=l+4|0;c[f>>2]=r+112;c[l>>2]=q;c[l+8>>2]=70;g=l+12|0;c[g>>2]=h;h=l+16|0;c[h>>2]=0;k=l+20|0;a[k>>0]=0;i=l+21|0;a[i>>0]=1;tb(l,d,j);e=c[f>>2]|0;if(((e|0)!=0?(a[e+(c[h>>2]|0)>>0]=0,(c[g>>2]|0)!=0):0)?(a[i>>0]&4)==0:0)i=$d(l)|0;else i=c[f>>2]|0;if(((a[k>>0]|0)==7?(m=q+81|0,(a[m>>0]|0)==0):0)?(a[q+82>>0]|0)==0:0){a[m>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;e=q+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[q+236>>2]|0;if(e|0)c[e+12>>2]=7}if(!i){if(!(a[q+81>>0]|0))c[b+12>>2]=18;c[n>>2]=(c[n>>2]|0)+1;Ra=r;return}g=b+18|0;a[g>>0]=(a[g>>0]|0)+1<<24>>24;h=b+188|0;e=p;d=h;f=e+88|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));e=h;f=e+88|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));ud(b,i,o)|0;d=c[o>>2]|0;e=q+480|0;do if(d|0){if(c[e>>2]|0){Xd(q,d);break}o=d;if((c[q+304>>2]|0)>>>0<=o>>>0?(c[q+308>>2]|0)>>>0>o>>>0:0){o=q+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);do if(!(c[e>>2]|0)){o=i;if((c[q+304>>2]|0)>>>0<=o>>>0?(c[q+308>>2]|0)>>>0>o>>>0:0){q=q+300|0;c[i>>2]=c[q>>2];c[q>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{q=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(q,i);while(0);e=h;d=p;f=e+88|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));a[g>>0]=(a[g>>0]|0)+-1<<24>>24;Ra=r;return}function Bk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0;h=d+108|0;g=c[h>>2]|0;if((c[d+112>>2]|0)>(g|0)){c[h>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=-115;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=e;c[h+(g*20|0)+8>>2]=0;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0}else g=Di(d,141,e,0,0)|0;gd(d,g,f,-7);if((c[(c[d>>2]|0)+20>>2]|0)<=0)return;g=0;do{fd(d,g);g=g+1|0}while((g|0)<(c[(c[d>>2]|0)+20>>2]|0));return}function Ck(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+32|0;i=m;g=m+4|0;if(!d){l=0;Ra=m;return l|0}k=a+24|0;l=e[k>>1]|0;b[k>>1]=l&28655;f=c[a>>2]|0;c[g>>2]=f;c[g+4>>2]=125;c[g+8>>2]=126;c[g+12>>2]=0;c[g+24>>2]=a;j=d+24|0;h=f+208|0;n=(c[h>>2]|0)+(c[j>>2]|0)|0;c[h>>2]=n;h=c[(c[f>>2]|0)+120>>2]|0;if((h|0)<(n|0)){c[i>>2]=h;cd(f,41637,i);n=1;Ra=m;return n|0}_j(g,d)|0;f=c[g>>2]|0;n=f+208|0;c[n>>2]=(c[n>>2]|0)-(c[j>>2]|0);n=b[k>>1]|0;j=d+4|0;c[j>>2]=c[j>>2]|n&-32752&65535;b[k>>1]=l&36880|n&65535;if((c[a+20>>2]|0)>0){n=1;Ra=m;return n|0}n=(c[f+36>>2]|0)>0&1;Ra=m;return n|0}function Dk(f,h){f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0.0,qa=0;oa=Ra;Ra=Ra+272|0;r=oa+248|0;m=oa+240|0;p=oa+232|0;O=oa+224|0;N=oa+216|0;M=oa+208|0;J=oa+200|0;I=oa+192|0;H=oa+176|0;G=oa+160|0;D=oa+152|0;C=oa+144|0;B=oa+136|0;z=oa+128|0;y=oa+120|0;w=oa+112|0;ja=oa+104|0;ia=oa+88|0;ha=oa+72|0;ba=oa+64|0;ga=oa+56|0;da=oa+48|0;ca=oa+40|0;o=oa+32|0;R=oa;K=oa+252|0;i=c[f+24>>2]|0;na=c[i>>2]|0;a:do switch(a[h>>0]|0){case 55:case 56:case 52:case 53:case 48:case 54:case 57:{ma=385;break}case -95:{F=h+20|0;v=c[F>>2]|0;u=(v|0)==0;if(u)p=0;else p=c[v>>2]|0;j=c[na>>2]|0;m=a[j+78>>0]|0;P=i+24|0;Q=b[P>>1]&16385;t=c[h+8>>2]|0;if(!t)s=0;else s=(Eu(t)|0)&1073741823;r=Jd(j,t,p,m,0)|0;if(r){o=(c[r+20>>2]|0)!=0&1;q=r+4|0;do if(c[q>>2]&1024|0){la=h+4|0;c[la>>2]=c[la>>2]|266240;if((p|0)!=2){c[h+28>>2]=(a[c[r+32>>2]>>0]|0)==117?8388608:125829120;break}j=c[v+24>>2]|0;g[R>>3]=-1.0;if((a[j>>0]|0)==-111){m=c[j+8>>2]|0;if(!m)j=0;else j=(Eu(m)|0)&1073741823;Lg(m,R,j,1)|0;pa=+g[R>>3];j=~~(pa*134217728.0);if(!(pa>1.0)){c[h+28>>2]=j;if((j|0)>=0)break}else ma=247}else ma=247;if((ma|0)==247)c[h+28>>2]=-1;cd(na,39784,w);la=i+20|0;c[la>>2]=(c[la>>2]|0)+1}while(0);p=r+32|0;j=c[p>>2]|0;m=c[na>>2]|0;b:do if(((a[m+165>>0]|0)==0?(a[na+200>>0]|0)==0:0)?(x=c[m+312>>2]|0,x|0):0){j=$a[x&127](c[m+316>>2]|0,31,0,j,0,c[na+240>>2]|0)|0;do if((j|0)!=1)if((j|2|0)==2)if(!j)break b;else break;else{cd(na,39231,z);j=1;ma=259;break}else{cd(na,39216,y);j=23;ma=259}while(0);if((ma|0)==259){c[na+12>>2]=j;c[B>>2]=c[p>>2];cd(na,39855,B);na=i+20|0;c[na>>2]=(c[na>>2]|0)+1}a[h>>0]=114;na=1;Ra=oa;return na|0}while(0);j=c[q>>2]|0;if(j&10240|0){la=h+4|0;c[la>>2]=c[la>>2]|524288}if((j&2048|0)==0?(A=e[P>>1]|0,(A&34|0)!=0):0){c[C>>2]=39890;c[C+4>>2]=(A&32|0)==0?((A&4|0)==0?40098:40144):40126;cd(na,40162,C);j=c[q>>2]|0}if(!(j&262144)){q=0;w=r;p=0}else{w=(a[na+18>>0]|0)==0&(c[7391]|0)==0;q=w;w=w?0:r;p=0}}else{w=Jd(c[na>>2]|0,t,-2,m,0)|0;p=(w|0)==0;q=p;p=(p^1)&1;o=0}c:do if((d[na+200>>0]|0)<2){if(((w|0)!=0?(c[w+24>>2]|0)==0:0)?(c[h+4>>2]&16777216|0)!=0:0){c[D>>2]=s;c[D+4>>2]=t;cd(na,39918,D);ma=287}else ma=273;do if((ma|0)==273){do if(o|0){m=b[P>>1]|0;j=c[w+4>>2]|0;if((m&1?(E=c[h+44>>2]|0,!((j&65536|0)!=0&(E|0)==0)):0)?!((m&16384)==0&(E|0)!=0):0)break;if((j&65536|0)==0?(c[h+44>>2]|0)==0:0){c[G>>2]=39969;c[G+4>>2]=s;c[G+8>>2]=t;cd(na,39979,G)}else{c[H>>2]=39962;c[H+4>>2]=s;c[H+8>>2]=t;cd(na,39979,H)}o=i+20|0;c[o>>2]=(c[o>>2]|0)+1;o=0;break c}while(0);if(q?(a[(c[na>>2]|0)+165>>0]|0)==0:0){c[I>>2]=s;c[I+4>>2]=t;cd(na,40008,I);ma=287;break}if(p|0){c[J>>2]=s;c[J+4>>2]=t;cd(na,40031,J);ma=287}}while(0);if((ma|0)==287){la=i+20|0;c[la>>2]=(c[la>>2]|0)+1}if(!o)o=0;else{b[P>>1]=((c[h+44>>2]|0)==0^49151)&e[P>>1];o=1}}while(0);d:do if(!u?(n=c[v>>2]|0,(n|0)>0):0){j=v+4|0;while(1){m=c[j>>2]|0;if(m|0?_j(f,m)|0:0)break d;if((n|0)>1){n=n+-1|0;j=j+20|0}else break}}while(0);if(!o){na=1;Ra=oa;return na|0}t=h+44|0;r=c[t>>2]|0;e:do if(!r){a[h>>0]=-93;m=h+38|0;a[m>>0]=0;if(i|0){n=R+4|0;o=R+8|0;p=R+24|0;q=K+4|0;r=K+8|0;while(1){na=c[i+4>>2]|0;k=c[F>>2]|0;c[n>>2]=139;c[o>>2]=0;c[p>>2]=K;c[K>>2]=na;c[q>>2]=0;c[r>>2]=0;if(!k){ma=369;break}j=c[k>>2]|0;if((j|0)<=0){ma=369;break}k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(R,l)|0:0)break;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}if((c[r>>2]|0)==0|(c[q>>2]|0)>0)break;a[m>>0]=(a[m>>0]|0)+1<<24>>24;i=c[i+12>>2]|0;if(!i)break e}na=i+24|0;b[na>>1]=c[w+4>>2]&4096|e[na>>1]|16}}else{s=c[i+28>>2]|0;i=c[s+72>>2]|0;o=c[r>>2]|0;q=r+16|0;f:do if((o|0)!=0?(a[q>>0]|0)==0:0){g:do if(i|0){n=d[208+(d[o>>0]|0)>>0]|0;p=i;while(1){j=c[p>>2]|0;h=a[j>>0]|0;i=(d[208+(h&255)>>0]|0)-n|0;if(!(h<<24>>24==0|(i|0)!=0)){m=o;do{j=j+1|0;m=m+1|0;h=a[j>>0]|0;i=(d[208+(h&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(i|0)!=0))}if(!i)break;i=c[p+32>>2]|0;if(!i)break g;else p=i}if(!p)break f;i=gk(c[na>>2]|0,c[p+8>>2]|0,0)|0;c[r+8>>2]=i;i=gk(c[na>>2]|0,c[p+12>>2]|0,0)|0;c[r+12>>2]=i;i=c[p+24>>2]|0;if(!i)i=0;else i=dk(c[na>>2]|0,i,0,0)|0;c[r+24>>2]=i;i=c[p+28>>2]|0;if(!i)i=0;else i=dk(c[na>>2]|0,i,0,0)|0;c[r+28>>2]=i;a[r+17>>0]=a[p+17>>0]|0;a[r+18>>0]=a[p+18>>0]|0;i=a[p+16>>0]|0;a[q>>0]=i;a[r+20>>0]=a[p+20>>0]|0;ma=315;break f}while(0);c[M>>2]=o;cd(na,40596,M)}else ma=314;while(0);if((ma|0)==314){Cj(na,r,i);i=a[q>>0]|0;ma=315}if((ma|0)==315){do if(i<<24>>24==86){if((c[r+24>>2]|0)==0?(c[r+28>>2]|0)==0:0){ma=321;break}h=c[r+12>>2]|0;if(h|0?(c[h>>2]|0)==1:0){ma=321;break}cd(na,40397,N)}else ma=321;while(0);h:do if((ma|0)==321?c[w+4>>2]&65536|0:0){o=c[na>>2]|0;if(c[r+36>>2]|0){cd(na,40468,O);break}i=c[w+32>>2]|0;do if((i|0)!=40531)if((i|0)!=40542)if((i|0)!=40553)if((i|0)!=40558){if((i|0)==40571){m=4;break}if((i|0)==40581){m=5;break}if((i|0)==40587){m=6;break}if((i|0)==40592)m=7;else break h}else m=3;else m=2;else m=1;else m=0;while(0);n=r+24|0;i=c[n>>2]|0;if(i|0)ni(o,i);i=r+28|0;j=c[i>>2]|0;if(j|0)ni(o,j);c[n>>2]=0;c[i>>2]=0;a[q>>0]=c[17952+(m<<4)+4>>2];h=c[17952+(m<<4)+8>>2]&255;a[r+17>>0]=h;a[r+18>>0]=c[17952+(m<<4)+12>>2];a[r+20>>0]=0;if(h<<24>>24==83){c[R>>2]=34874;c[R+4>>2]=1;h=oj(o,147,R,0)|0;c[n>>2]=h}}while(0);c[r+40>>2]=w}i=c[t>>2]|0;j=c[i+8>>2]|0;if((j|0)!=0?(l=c[j>>2]|0,(l|0)>0):0){i=j+4|0;while(1){j=c[i>>2]|0;if(j|0?_j(f,j)|0:0)break;if((l|0)>1){l=l+-1|0;i=i+20|0}else break}i=c[t>>2]|0}j=c[i+12>>2]|0;if((j|0)!=0?(k=c[j>>2]|0,(k|0)>0):0){i=j+4|0;while(1){j=c[i>>2]|0;if(j|0?_j(f,j)|0:0)break;if((k|0)>1){k=k+-1|0;i=i+20|0}else break}i=c[t>>2]|0}i=c[i+36>>2]|0;if(i|0)_j(f,i)|0;k=s+68|0;i=c[k>>2]|0;if(i){if(!(ck(na,i,c[t>>2]|0)|0)){j=k;i=c[k>>2]|0;ma=359}}else{j=k;ma=359}if((ma|0)==359){c[(c[t>>2]|0)+32>>2]=i;c[j>>2]=c[t>>2]}b[P>>1]=b[P>>1]|-32768}while(0);b[P>>1]=b[P>>1]|Q;na=1;Ra=oa;return na|0}case 49:case 20:case -125:{k=h+4|0;if(c[k>>2]&2048|0){l=i+16|0;m=c[l>>2]|0;i=i+24|0;j=e[i>>1]|0;if(j&38|0){c[p>>2]=40076;c[p+4>>2]=(j&32|0)==0?((j&4|0)==0?40098:40144):40126;cd(na,40162,p)}$j(f,c[h+20>>2]|0)|0;if((m|0)!=(c[l>>2]|0)){c[k>>2]=c[k>>2]|32;b[i>>1]=b[i>>1]|64}}break}case -108:{i=e[i+24>>1]|0;if(i&38|0){c[m>>2]=40087;c[m+4>>2]=(i&32|0)==0?((i&4|0)==0?40098:40144):40126;cd(na,40162,m)}break}case -96:case 45:{i=c[h+16>>2]|0;if((a[i>>0]|0)==59){if((Dk(f,i)|0)==2){na=2;Ra=oa;return na|0}if((a[i>>0]|0)==-97){a[h+38>>0]=a[h>>0]|0;a[h>>0]=-89;na=0;Ra=oa;return na|0}else ma=385}else ma=385;break}case 59:{s=c[h+8>>2]|0;W=c[na>>2]|0;Z=h+28|0;c[Z>>2]=-1;t=0;u=0;l=0;v=na+200|0;X=na;ma=28;break}case -122:{l=c[h+12>>2]|0;n=i+24|0;if(b[n>>1]&32){c[o>>2]=39767;c[o+4>>2]=40126;cd(na,40162,o)}k=c[h+16>>2]|0;if((a[k>>0]|0)==59){u=0;m=k}else{u=c[l+8>>2]|0;m=c[k+16>>2]|0;l=c[k+12>>2]|0}t=c[l+8>>2]|0;s=c[m+8>>2]|0;v=na+200|0;i:do if((d[v>>0]|0)>1?(q=na+272|0,j=c[q>>2]|0,j|0):0){k=j;do{if((c[k>>2]|0)==(m|0)){ma=12;break}k=c[k+12>>2]|0}while((k|0)!=0);if((ma|0)==12){c[k>>2]=h;j=c[q>>2]|0}k=h+44|0;if(j|0){while(1){if((c[j>>2]|0)==(l|0))break;j=c[j+12>>2]|0;if(!j)break i}c[j>>2]=k}}while(0);r=c[na>>2]|0;q=h+28|0;c[q>>2]=-1;if((u|0)!=0?(b[n>>1]&6)==0:0){n=c[r+20>>2]|0;if((n|0)>0){p=c[r+16>>2]|0;o=d[208+(d[u>>0]|0)>>0]|0;j=0;while(1){l=c[p+(j<<4)>>2]|0;ma=a[l>>0]|0;k=(d[208+(ma&255)>>0]|0)-o|0;if(!(ma<<24>>24==0|(k|0)!=0)){m=u;do{l=l+1|0;m=m+1|0;ma=a[l>>0]|0;k=(d[208+(ma&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ma<<24>>24==0|(k|0)!=0))}if(!k)break;j=j+1|0;if((j|0)>=(n|0)){l=0;Z=q;W=r;X=na;ma=28;break a}}l=c[p+(j<<4)+12>>2]|0;Z=q;W=r;X=na;ma=28}else{l=0;Z=q;W=r;X=na;ma=28}}else{u=0;l=0;Z=q;W=r;X=na;ma=28}break}default:{}}while(0);if((ma|0)==28){U=(u|0)==0;V=(t|0)!=0;R=V&U;j=na+120|0;P=(t|0)==0;_=h+32|0;f=h+44|0;T=na+272|0;Q=na+144|0;Y=h+4|0;M=h+1|0;N=na+136|0;O=na+140|0;m=i;q=0;S=0;o=162;p=0;r=-1;j:while(1){k=c[m+4>>2]|0;if(k){K=c[k>>2]|0;if((K|0)>0){I=k+8|0;J=0;w=0;while(1){H=c[I+16>>2]|0;k=c[I+20>>2]|0;if((k|0)!=0?(c[k+8>>2]&2048|0)!=0:0){x=c[k>>2]|0;y=c[x>>2]|0;if((y|0)>0){n=0;k=0;do{if(Fk(c[x+4+(n*20|0)+8>>2]|0,s,t,u)|0){b[_>>1]=n;k=1;w=w+1|0;q=2;p=I}n=n+1|0}while((n|0)!=(y|0))}else k=0;if(V&(k|0)==0)ma=40}else ma=40;k:do if((ma|0)==40){ma=0;if(!U?(c[H+72>>2]|0)!=(l|0):0)break;l:do if(!P){n=c[I+12>>2]|0;y=(n|0)==0;if(y){n=c[H>>2]|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(G<<24>>24==0|(k|0)!=0)){x=t;do{n=n+1|0;x=x+1|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(G<<24>>24==0|(k|0)!=0))}}else{G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(G<<24>>24==0|(k|0)!=0)){x=t;do{n=n+1|0;x=x+1|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(G<<24>>24==0|(k|0)!=0))}}if(k|0)break k;if(!(y|(d[v>>0]|0)<2)?($=c[T>>2]|0,$|0):0){k=$;while(1){if((c[k>>2]|0)==(f|0))break;k=c[k+12>>2]|0;if(!k)break l}c[k>>2]=0}}while(0);G=q+1|0;p=(q|0)==0?I:p;n=c[H+4>>2]|0;k=b[H+42>>1]|0;if(k<<16>>16>0){F=d[208+(d[s>>0]|0)>>0]|0;C=I+36|0;D=I+48|0;E=k<<16>>16;m:do if((w|0)==1){k=0;while(1){x=c[n>>2]|0;B=a[x>>0]|0;q=(d[208+(B&255)>>0]|0)-F|0;if(!(B<<24>>24==0|(q|0)!=0)){y=s;do{x=x+1|0;y=y+1|0;B=a[x>>0]|0;q=(d[208+(B&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(q|0)!=0))}n:do if((q|0)==0?(a[C>>0]&4)==0:0){q=c[D>>2]|0;if(!q)break m;B=c[q+4>>2]|0;if((B|0)<=0)break m;A=c[q>>2]|0;z=0;while(1){x=c[A+(z<<3)>>2]|0;y=a[x>>0]|0;q=(d[208+(y&255)>>0]|0)-F|0;if(!(y<<24>>24==0|(q|0)!=0)){y=s;do{x=x+1|0;y=y+1|0;qa=a[x>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}z=z+1|0;if(!q)break n;if((z|0)>=(B|0))break m}}while(0);k=k+1|0;if((k|0)>=(E|0)){w=1;q=G;break k}else n=n+16|0}}else{y=n;k=0;while(1){q=c[y>>2]|0;qa=a[q>>0]|0;n=(d[208+(qa&255)>>0]|0)-F|0;if(!(qa<<24>>24==0|(n|0)!=0)){x=s;do{q=q+1|0;x=x+1|0;qa=a[q>>0]|0;n=(d[208+(qa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(n|0)!=0))}if(!n)break m;k=k+1|0;if((k|0)>=(E|0)){q=G;break k}else y=y+16|0}}while(0);b[_>>1]=(k|0)==(b[H+40>>1]|0)?-1:k&65535;w=w+1|0;q=G;p=I}else q=G}while(0);J=J+1|0;if((J|0)==(K|0))break;else I=I+72|0}}else w=0;if(!p){A=w;C=0}else{n=c[p+40>>2]|0;c[Z>>2]=n;k=c[p+16>>2]|0;c[f>>2]=k;if(a[p+36>>0]&8)c[Y>>2]=c[Y>>2]|1048576;l=c[k+72>>2]|0;A=w;C=p;r=n}}else{A=0;C=p}do if(R&(q|0)==0){q=c[j>>2]|0;do if(q){x=a[Q>>0]|0;w=a[t>>0]|0;k=w|32;if(x<<24>>24==121){if(k<<24>>24!=111){q=0;break}}else{if(k<<24>>24==110){k=t;n=40182;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){c[Z>>2]=1;r=1;break}}if(!(x<<24>>24!=120&(w|32)<<24>>24==111)){q=0;break}}k=t;n=40186;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){c[Z>>2]=0;r=0}else q=0}else q=0;while(0);w=b[m+24>>1]|0;if(((w&512)!=0?(aa=c[m+8>>2]|0,(aa|0)!=0):0)?(a[t>>0]|32)<<24>>24==101:0){k=t;n=40190;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){z=c[(c[aa+20>>2]|0)+24>>2]|0;c[Z>>2]=2;r=2}else z=q}else z=q;if(!z){B=o;q=0;o=A;n=(C|0)!=0;z=w;break}l=c[z+72>>2]|0;qa=b[z+42>>1]|0;y=qa<<16>>16;o:do if(qa<<16>>16>0){x=d[208+(d[s>>0]|0)>>0]|0;n=0;w=c[z+4>>2]|0;while(1){p=c[w>>2]|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-x|0;if(!(qa<<24>>24==0|(k|0)!=0)){q=s;do{p=p+1|0;q=q+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(!k)break;n=n+1|0;if((n|0)<(y|0))w=w+16|0;else break o}n=(n|0)==(b[z+40>>1]|0)?-1:n}else n=0;while(0);do if((n|0)>=(y|0)){x=a[s>>0]|0;w=d[208+(x&255)>>0]|0;k=w+-95|0;x=x<<24>>24==0;if(!(x|(k|0)!=0)){p=58070;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=w+-114|0;if(!(x|(k|0)!=0)){p=40352;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=w+-111|0;if(!(x|(k|0)!=0)){p=58078;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0)break}}n=(c[z+36>>2]&64|0)==0?-1:n}while(0);if((n|0)<(y|0)){p=A+1|0;if((r|0)==2)if((d[v>>0]|0)>1){b[_>>1]=n;c[f>>2]=z;o=162;q=1;r=2;ma=142;break}else{r=(c[(c[m+8>>2]|0)+24>>2]|0)+n|0;c[Z>>2]=r;c[Y>>2]=c[Y>>2]|4194304;o=168;q=1;ma=142;break}do if((n|0)>=0){k=(n|0)>31?-1:1<<n;if(!r){c[N>>2]=c[N>>2]|k;break}else{c[O>>2]=c[O>>2]|k;break}}else a[M>>0]=68;while(0);c[f>>2]=z;b[_>>1]=n;o=77;q=1;ma=142}else{q=1;p=A;ma=142}}else{p=A;ma=142}while(0);do if((ma|0)==142){ma=0;n=(C|0)!=0;z=b[m+24>>1]|0;if(n&((q|0)==1&(p|0)==0))if(!(z&32)){w=a[s>>0]|0;q=d[208+(w&255)>>0]|0;k=q+-95|0;w=w<<24>>24==0;if(!(w|(k|0)!=0)){n=58070;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-114|0;if(!(w|(k|0)!=0)){n=40352;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-111|0;if(!(w|(k|0)!=0)){n=58078;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){B=o;q=1;o=0;n=1;break}}}if(!(c[(c[C+16>>2]|0)+36>>2]&64)){ma=157;break j}else{B=o;q=1;o=0;n=1}}else{B=o;q=1;o=0;n=1}else{B=o;o=p}}while(0);k=(o|0)==0;if(P&(k&(z&128)!=0)){A=c[m+8>>2]|0;w=c[A>>2]|0;if((w|0)>0){y=0;while(1){x=c[A+4+(y*20|0)+4>>2]|0;if(x|0){qa=a[x>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[s>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(k|0)!=0)){o=s;p=x;do{p=p+1|0;o=o+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(!k){ma=166;break j}}k=y+1|0;if((k|0)<(w|0))y=k;else break}}}else if(!k){ma=201;break}m=c[m+12>>2]|0;if(!m){ma=188;break}else{S=S+1|0;o=B;p=C}}p:do if((ma|0)==157){b[_>>1]=-1;a[M>>0]=68;q=m;p=1;n=1;ma=208}else if((ma|0)==166){n=c[A+4+(y*20|0)>>2]|0;if((z&1)==0?c[n+4>>2]&16|0:0){c[ca>>2]=x;cd(na,40199,ca);qa=2;Ra=oa;return qa|0}if((z&16384)==0?c[n+4>>2]&32768|0:0){c[da>>2]=x;cd(na,40230,da);qa=2;Ra=oa;return qa|0}k=a[n>>0]|0;if(k<<24>>24==-88)k=a[n+38>>0]|0;switch(k<<24>>24){case -87:{fa=n+20|0;ma=177;break}case -125:{fa=c[n+20>>2]|0;ma=177;break}default:{}}if((ma|0)==177?(c[c[fa>>2]>>2]|0)!=1:0){cd(na,38899,ga);qa=2;Ra=oa;return qa|0}Gk(na,A,y,h,59952,S);if((d[v>>0]|0)>1?(ea=c[T>>2]|0,(ea|0)!=0):0){k=ea;while(1){if((c[k>>2]|0)==(h|0))break;k=c[k+12>>2]|0;if(!k){n=m;break p}}c[k>>2]=0;n=m}else n=m}else if((ma|0)==188)if(P){k=c[Y>>2]|0;if(k&64|0){c[ba>>2]=s;Db(28,40267,ba);a[h>>0]=110;c[f>>2]=0;qa=1;Ra=oa;return qa|0}if(!(k&67108864)){m=c[h+8>>2]|0;r=a[m>>0]|0;q=d[208+(r&255)>>0]|0;k=q+-116|0;r=r<<24>>24==0;if(!(r|(k|0)!=0)){o=41806;p=m;do{p=p+1|0;o=o+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-102|0;if(!(r|(k|0)!=0)){o=41811;do{m=m+1|0;o=o+1|0;qa=a[m>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){m=0;o=0;k=40302;ma=202;break}}a[h>>0]=-97;qa=1;Ra=oa;return qa|0}else{m=0;o=0;k=40302;ma=202}}else{m=0;o=0;k=40302;ma=202}else if((ma|0)==201)if((o|0)==1){q=m;p=1;o=B;ma=208}else{k=40317;ma=202}while(0);if((ma|0)==202){do if(U)if(V){c[ia>>2]=k;c[ia+4>>2]=t;c[ia+8>>2]=s;cd(na,37010,ia);break}else{c[ja>>2]=k;c[ja+4>>2]=s;cd(na,37020,ja);break}else{c[ha>>2]=k;c[ha+4>>2]=u;c[ha+8>>2]=t;c[ha+12>>2]=s;cd(na,40339,ha)}while(0);a[na+17>>0]=1;q=i+20|0;c[q>>2]=(c[q>>2]|0)+1;q=m;p=o;o=B;ma=208}if((ma|0)==208){qa=b[_>>1]|0;m=qa<<16>>16;k=C+56|0;if(n&qa<<16>>16>-1){ia=cw(1,0,((m|0)<63?m:63)|0)|0;ja=L()|0;ha=k;ja=c[ha+4>>2]|ja;qa=k;c[qa>>2]=c[ha>>2]|ia;c[qa+4>>2]=ja}k=h+12|0;m=c[k>>2]|0;if(m|0)ni(W,m);c[k>>2]=0;k=h+16|0;m=c[k>>2]|0;if(m|0)ni(W,m);c[k>>2]=0;a[h>>0]=o;c[Y>>2]=c[Y>>2]|8388608;if((p|0)==1)n=q;else{qa=2;Ra=oa;return qa|0}}q:do if((c[Y>>2]&4194304|0)==0?(la=c[n+4>>2]|0,ka=c[X>>2]|0,!((l|0)==0|(c[ka+312>>2]|0)==0)):0){k=c[ka+16>>2]|0;m=0;while(1)if((c[k+(m<<4)+12>>2]|0)==(l|0))break;else m=m+1|0;if((a[h>>0]|0)!=77){l=c[la>>2]|0;if((l|0)<=0)break;k=c[Z>>2]|0;j=0;while(1){if((k|0)==(c[la+8+(j*72|0)+40>>2]|0))break;j=j+1|0;if((j|0)>=(l|0))break q}j=la+8+(j*72|0)+16|0}l=c[j>>2]|0;k=b[_>>1]|0;j=k<<16>>16;if(l|0){if(k<<16>>16<=-1){j=b[l+40>>1]|0;if(j<<16>>16>-1){j=j<<16>>16;ma=229}else j=40352}else ma=229;if((ma|0)==229)j=c[(c[l+4>>2]|0)+(j<<4)>>2]|0;if((Ik(na,c[l>>2]|0,j,m)|0)==2)a[h>>0]=114}}while(0);qa=i+16|0;c[qa>>2]=(c[qa>>2]|0)+1;if((n|0)==(i|0)){qa=1;Ra=oa;return qa|0}do{i=c[i+12>>2]|0;qa=i+16|0;c[qa>>2]=(c[qa>>2]|0)+1}while((i|0)!=(n|0));i=1;Ra=oa;return i|0}else if((ma|0)==385?(a[(c[na>>2]|0)+81>>0]|0)==0:0){j=c[h+12>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;ma=391;break}case -125:{i=c[j+20>>2]|0;ma=391;break}default:l=1}if((ma|0)==391)l=c[c[i>>2]>>2]|0;r:do if((a[h>>0]|0)==48){k=c[h+20>>2]|0;j=c[k+4>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;ma=398;break}case -125:{i=c[j+20>>2]|0;ma=398;break}default:i=1}if((ma|0)==398)i=c[c[i>>2]>>2]|0;if((i|0)==(l|0)){j=c[k+24>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=c[c[j+20>>2]>>2]|0;break r}case -125:{i=c[c[c[j+20>>2]>>2]>>2]|0;break r}default:{i=1;break r}}}}else{j=c[h+16>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=c[c[j+20>>2]>>2]|0;break r}case -125:{i=c[c[c[j+20>>2]>>2]>>2]|0;break r}default:{i=1;break r}}}while(0);if((l|0)!=(i|0))cd(na,38899,r)}if(c[na+36>>2]|0){qa=2;Ra=oa;return qa|0}qa=(a[(c[na>>2]|0)+81>>0]|0)==0?0:2;Ra=oa;return qa|0}function Ek(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0;fb=Ra;Ra=Ra+240|0;eb=fb+120|0;bb=fb+112|0;ab=fb+96|0;Sa=fb+88|0;Pa=fb+80|0;La=fb+72|0;Ka=fb+64|0;Ja=fb+56|0;Ia=fb+48|0;Ha=fb+40|0;Oa=fb+32|0;Na=fb+24|0;Ma=fb+16|0;Ga=fb+8|0;Fa=fb;Xa=fb+200|0;Ya=fb+168|0;Za=fb+160|0;qa=fb+128|0;h=c[g+8>>2]|0;if(h&4|0){eb=1;Ra=fb;return eb|0}ma=c[f+24>>2]|0;db=c[f>>2]|0;f=c[db>>2]|0;if(!(h&64)){Kk(db,g,ma);if(c[db+36>>2]|0){eb=2;Ra=fb;return eb|0}eb=(a[f+81>>0]|0)==0?1:2;Ra=fb;return eb|0}Qa=g+52|0;oa=(c[Qa>>2]|0)!=0;W=oa&1;X=qa+28|0;Y=qa+24|0;Z=Xa+4|0;_=Xa+8|0;$=Xa+12|0;aa=Xa+24|0;ba=qa+20|0;ca=qa+4|0;da=qa+12|0;ea=db+240|0;fa=(ma|0)==0;ga=Xa+4|0;ha=Xa+8|0;ia=Xa+12|0;ja=Xa+24|0;ka=db+36|0;s=f+81|0;t=Xa+4|0;u=Xa+8|0;v=Xa+12|0;w=Xa+24|0;x=qa+8|0;y=Xa+4|0;z=Xa+8|0;A=Xa+12|0;B=Xa+24|0;C=Xa+4|0;D=Xa+8|0;E=Xa+12|0;F=Xa+24|0;G=Xa+4|0;H=Xa+8|0;I=Xa+12|0;J=Xa+24|0;K=db+200|0;L=Xa+4|0;M=Xa+8|0;N=Xa+12|0;O=Xa+24|0;P=Xa+4|0;Q=Xa+8|0;R=Xa+12|0;S=Xa+24|0;T=qa+4|0;U=db;V=db+208|0;q=g;r=0;f=h;a:while(1){p=q+8|0;c[p>>2]=f|4;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;c[T+16>>2]=0;c[T+20>>2]=0;c[qa>>2]=db;c[X>>2]=q;f=c[q+60>>2]|0;if(f){b[Y>>1]=0;c[Xa>>2]=U;c[Z>>2]=125;c[_>>2]=126;c[$>>2]=0;c[aa>>2]=qa;h=f+24|0;o=(c[V>>2]|0)+(c[h>>2]|0)|0;c[V>>2]=o;Ea=c[(c[db>>2]|0)+120>>2]|0;if((Ea|0)<(o|0)){K=9;break}_j(Xa,f)|0;i=c[Xa>>2]|0;o=i+208|0;c[o>>2]=(c[o>>2]|0)-(c[h>>2]|0);o=f+4|0;c[o>>2]=c[o>>2]|b[Y>>1]&-32752&65535;if((c[ba>>2]|0)>0){K=11;break}if((c[i+36>>2]|0)>=1){cb=2;K=206;break}}o=q+32|0;h=c[o>>2]|0;if(c[p>>2]&65536|0){n=q+48|0;c[(c[h+28>>2]|0)+48>>2]=c[n>>2];c[n>>2]=0}f=h;b:do if((c[h>>2]|0)>0){if(fa){k=0;while(1){j=c[h+8+(k*72|0)+20>>2]|0;if((j|0)!=0?(c[j+8>>2]&4|0)==0:0){f=c[ea>>2]|0;i=c[h+8+(k*72|0)+8>>2]|0;if(i|0)c[ea>>2]=i;c[ga>>2]=125;c[ha>>2]=126;c[ia>>2]=0;c[Xa>>2]=db;c[ja>>2]=0;$j(Xa,j)|0;c[ea>>2]=f;if(c[ka>>2]|0){cb=2;K=206;break a}if(a[s>>0]|0){cb=2;K=206;break a}f=h+8+(k*72|0)+37|0;a[f>>0]=a[f>>0]&-9;f=c[o>>2]|0;h=f}k=k+1|0;if((k|0)>=(c[h>>2]|0))break b}}l=0;k=h;while(1){j=c[k+8+(l*72|0)+20>>2]|0;if((j|0)!=0?(c[j+8>>2]&4|0)==0:0){i=c[ea>>2]|0;f=0;h=ma;do{f=(c[h+16>>2]|0)+f|0;h=c[h+12>>2]|0}while((h|0)!=0);h=c[k+8+(l*72|0)+8>>2]|0;if(h|0)c[ea>>2]=h;c[ga>>2]=125;c[ha>>2]=126;c[ia>>2]=0;c[Xa>>2]=db;c[ja>>2]=ma;$j(Xa,j)|0;c[ea>>2]=i;if(c[ka>>2]|0){cb=2;K=206;break a}if(a[s>>0]|0){cb=2;K=206;break a}h=ma;do{f=f-(c[h+16>>2]|0)|0;h=c[h+12>>2]|0}while((h|0)!=0);h=k+8+(l*72|0)+37|0;a[h>>0]=a[h>>0]&-9|((f|0)!=0&1)<<3&255;f=c[o>>2]|0;h=f}else h=k;l=l+1|0;if((l|0)>=(c[h>>2]|0))break;else k=h}}while(0);b[Y>>1]=16385;c[ca>>2]=f;c[da>>2]=ma;l=c[q>>2]|0;if((l|0)!=0?(c[l>>2]|0)>0:0){k=0;f=16385;do{i=c[l+4+(k*20|0)>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;ra=c[qa>>2]|0;c[Xa>>2]=ra;c[t>>2]=125;c[u>>2]=126;c[v>>2]=0;c[w>>2]=qa;h=i+24|0;sa=ra;m=sa+208|0;n=(c[m>>2]|0)+(c[h>>2]|0)|0;c[m>>2]=n;sa=c[(c[sa>>2]|0)+120>>2]|0;if((sa|0)<(n|0)){K=46;break a}_j(Xa,i)|0;j=c[Xa>>2]|0;n=j+208|0;c[n>>2]=(c[n>>2]|0)-(c[h>>2]|0);n=b[Y>>1]|0;m=i+4|0;c[m>>2]=c[m>>2]|n&-32752&65535;f=(f&36880|n&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=48;break a}if((c[j+36>>2]|0)>=1){cb=2;K=206;break a}}k=k+1|0}while((k|0)<(c[l>>2]|0))}else f=16385;h=f&-16385;b[Y>>1]=h;n=c[q+40>>2]|0;m=(n|0)!=0;if(!m?(na=h&65535,(na&16|0)==0):0){h=na&49150;b[Y>>1]=h}else c[p>>2]=c[p>>2]|(f&4096|8)&65535;j=c[q+44>>2]|0;i=(j|0)==0;if(!(m|i)){K=55;break}c[x>>2]=c[q>>2];f=h|128;b[Y>>1]=f;if(!i){f=f&65535;b[Y>>1]=f&28655;ta=c[qa>>2]|0;c[Xa>>2]=ta;c[y>>2]=125;c[z>>2]=126;c[A>>2]=0;c[B>>2]=qa;h=j+24|0;ua=ta;k=ua+208|0;l=(c[k>>2]|0)+(c[h>>2]|0)|0;c[k>>2]=l;ua=c[(c[ua>>2]|0)+120>>2]|0;if((ua|0)<(l|0)){K=59;break}_j(Xa,j)|0;i=c[Xa>>2]|0;l=i+208|0;c[l>>2]=(c[l>>2]|0)-(c[h>>2]|0);l=b[Y>>1]|0;k=j+4|0;c[k>>2]=c[k>>2]|l&-32752&65535;f=(f&36880|l&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=61;break}if((c[i+36>>2]|0)>=1){cb=2;K=206;break}}i=c[q+36>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;va=c[qa>>2]|0;c[Xa>>2]=va;c[C>>2]=125;c[D>>2]=126;c[E>>2]=0;c[F>>2]=qa;h=i+24|0;wa=va;k=wa+208|0;l=(c[k>>2]|0)+(c[h>>2]|0)|0;c[k>>2]=l;wa=c[(c[wa>>2]|0)+120>>2]|0;if((wa|0)<(l|0)){K=66;break}_j(Xa,i)|0;j=c[Xa>>2]|0;l=j+208|0;c[l>>2]=(c[l>>2]|0)-(c[h>>2]|0);l=b[Y>>1]|0;k=i+4|0;c[k>>2]=c[k>>2]|l&-32752&65535;f=(f&36880|l&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=68;break}if((c[j+36>>2]|0)>=1){cb=2;K=206;break}}h=c[o>>2]|0;if((c[h>>2]|0)>0){l=0;do{if(((a[h+8+(l*72|0)+37>>0]&4)!=0?(pa=c[h+8+(l*72|0)+64>>2]|0,(pa|0)!=0):0)?(c[pa>>2]|0)>0:0){k=0;do{i=c[pa+4+(k*20|0)>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;xa=c[qa>>2]|0;c[Xa>>2]=xa;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=qa;h=i+24|0;ya=xa;gb=ya+208|0;j=(c[gb>>2]|0)+(c[h>>2]|0)|0;c[gb>>2]=j;ya=c[(c[ya>>2]|0)+120>>2]|0;if((ya|0)<(j|0)){K=80;break a}_j(Xa,i)|0;j=c[Xa>>2]|0;gb=j+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[h>>2]|0);gb=b[Y>>1]|0;i=i+4|0;c[i>>2]=c[i>>2]|gb&-32752&65535;f=(f&36880|gb&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=82;break a}if((c[j+36>>2]|0)>=1){cb=2;K=206;break a}}k=k+1|0}while((k|0)<(c[pa>>2]|0))}l=l+1|0;h=c[o>>2]|0}while((l|0)<(c[h>>2]|0))}c[da>>2]=0;b[Y>>1]=f|16385;if(c[p>>2]&65536|0){gb=(c[h+28>>2]|0)+48|0;c[q+48>>2]=c[gb>>2];c[gb>>2]=0}if(r>>>0>=W>>>0?Lk(qa,q,c[q+48>>2]|0,40659)|0:0){cb=2;K=206;break}if(a[s>>0]|0){cb=2;K=206;break}b[Y>>1]=b[Y>>1]&-16385;if(m){if(Lk(qa,q,n,40665)|0){cb=2;K=206;break}if(a[s>>0]|0){cb=2;K=206;break}i=c[n>>2]|0;if((i|0)>0){f=n+4|0;h=0;while(1){if(c[(c[f>>2]|0)+4>>2]&16|0){K=96;break a}h=h+1|0;if((h|0)>=(i|0))break;else f=f+20|0}}}if((d[K>>0]|0)>1?(la=c[q+72>>2]|0,la|0):0){m=la;do{h=c[m+12>>2]|0;do if(h|0){if((c[h>>2]|0)<=0)break;f=0;do{i=c[h+4+(f*20|0)>>2]|0;if(i){j=e[Y>>1]|0;b[Y>>1]=j&28655;za=c[qa>>2]|0;c[Xa>>2]=za;c[L>>2]=125;c[M>>2]=126;c[N>>2]=0;c[O>>2]=qa;k=i+24|0;Aa=za;p=Aa+208|0;gb=(c[p>>2]|0)+(c[k>>2]|0)|0;c[p>>2]=gb;Aa=c[(c[Aa>>2]|0)+120>>2]|0;if((Aa|0)<(gb|0)){K=108;break a}_j(Xa,i)|0;l=c[Xa>>2]|0;gb=l+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[k>>2]|0);gb=b[Y>>1]|0;p=i+4|0;c[p>>2]=c[p>>2]|gb&-32752&65535;b[Y>>1]=j&36880|gb&65535;if((c[ba>>2]|0)>0){K=110;break a}if((c[l+36>>2]|0)>=1){cb=2;K=206;break a}}f=f+1|0}while((f|0)<(c[h>>2]|0))}while(0);h=c[m+8>>2]|0;do if(h|0){if((c[h>>2]|0)<=0)break;f=0;do{i=c[h+4+(f*20|0)>>2]|0;if(i){j=e[Y>>1]|0;b[Y>>1]=j&28655;Ba=c[qa>>2]|0;c[Xa>>2]=Ba;c[P>>2]=125;c[Q>>2]=126;c[R>>2]=0;c[S>>2]=qa;k=i+24|0;Ca=Ba;p=Ca+208|0;gb=(c[p>>2]|0)+(c[k>>2]|0)|0;c[p>>2]=gb;Ca=c[(c[Ca>>2]|0)+120>>2]|0;if((Ca|0)<(gb|0)){K=119;break a}_j(Xa,i)|0;l=c[Xa>>2]|0;gb=l+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[k>>2]|0);gb=b[Y>>1]|0;p=i+4|0;c[p>>2]=c[p>>2]|gb&-32752&65535;b[Y>>1]=j&36880|gb&65535;if((c[ba>>2]|0)>0){K=121;break a}if((c[l+36>>2]|0)>=1){cb=2;K=206;break a}}f=f+1|0}while((f|0)<(c[h>>2]|0))}while(0);m=c[m+32>>2]|0}while((m|0)!=0)}Da=c[q+56>>2]|0;if(Da|0?(c[c[q>>2]>>2]|0)!=(c[c[Da>>2]>>2]|0):0){K=126;break}f=c[q+52>>2]|0;if(!f){K=135;break}q=f;r=r+1|0;f=c[f+8>>2]|0}switch(K|0){case 9:{c[Fa>>2]=Ea;cd(db,41637,Fa);K=11;break}case 46:{c[Ga>>2]=sa;cd(ra,41637,Ga);K=48;break}case 55:{cd(db,40615,Ma);gb=2;Ra=fb;return gb|0}case 59:{c[Na>>2]=ua;cd(ta,41637,Na);K=61;break}case 66:{c[Oa>>2]=wa;cd(va,41637,Oa);K=68;break}case 80:{c[Ha>>2]=ya;cd(xa,41637,Ha);K=82;break}case 96:{cd(db,40671,Ia);gb=2;Ra=fb;return gb|0}case 108:{c[Ja>>2]=Aa;cd(za,41637,Ja);K=110;break}case 119:{c[Ka>>2]=Ca;cd(Ba,41637,Ka);K=121;break}case 126:{if(c[Da+8>>2]&512|0){cd(db,41381,La);gb=2;Ra=fb;return gb|0}switch(a[Da+4>>0]|0){case -128:{f=41509;break}case -126:{f=41519;break}case -127:{f=41529;break}default:f=41536}c[Pa>>2]=f;cd(db,41427,Pa);gb=2;Ra=fb;return gb|0}case 135:{if(!oa){gb=1;Ra=fb;return gb|0}J=c[g+48>>2]|0;if(!J){gb=1;Ra=fb;return gb|0}I=c[db>>2]|0;i=c[J>>2]|0;if((i|0)>(c[I+116>>2]|0)){cd(db,41542,Sa);gb=2;Ra=fb;return gb|0}if((i|0)>0){f=0;do{gb=J+4+(f*20|0)+13|0;a[gb>>0]=a[gb>>0]&-2;f=f+1|0}while((f|0)!=(i|0))}c[g+56>>2]=0;h=c[Qa>>2]|0;if(!h)h=g;else{f=g;while(1){c[h+56>>2]=f;f=c[h+52>>2]|0;if(!f)break;else{gb=h;h=f;f=gb}}}t=J+4|0;u=db+200|0;v=Xa+4|0;w=I+81|0;x=Ya+12|0;y=Ya+4|0;z=Ya+8|0;A=Ya+24|0;B=Ya+20|0;C=db;D=Xa+4|0;E=Xa+8|0;F=Xa+12|0;G=Xa+24|0;H=db+208|0;f=i;c:while(1){s=c[h>>2]|0;if((f|0)<=0){cb=1;K=206;break}r=h+32|0;q=t;p=0;Va=0;while(1){c[Za>>2]=-1;o=q+13|0;d:do if(!(a[o>>0]&1)){f=c[q>>2]|0;e:do if(!f)f=0;else while(1){i=c[f+4>>2]|0;if(!(i&4096))break e;if(!(i&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break}}while(0);f:do if(!(uk(f,Za)|0)){g:do if((a[f>>0]|0)==59?(_a=c[f+8>>2]|0,$a=c[s>>2]|0,($a|0)>0):0){i=0;while(1){k=c[s+4+(i*20|0)+4>>2]|0;if(k|0){gb=a[k>>0]|0;j=(d[208+(gb&255)>>0]|0)-(d[208+(d[_a>>0]|0)>>0]|0)|0;if(!(gb<<24>>24==0|(j|0)!=0)){l=_a;do{k=k+1|0;l=l+1|0;gb=a[k>>0]|0;j=(d[208+(gb&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(gb<<24>>24==0|(j|0)!=0))}if(!j)break}i=i+1|0;if((i|0)>=($a|0))break g}i=i+1|0;c[Za>>2]=i;break f}while(0);c[Za>>2]=0;if((d[u>>0]|0)<=1)if(!f)n=0;else n=dk(I,f,0,0)|0;else n=f;if(!(a[w>>0]|0)){m=c[h>>2]|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[Ya>>2]=db;c[y>>2]=c[r>>2];c[z>>2]=m;b[A>>1]=129;c[B>>2]=0;i=c[db>>2]|0;j=i+85|0;k=a[j>>0]|0;a[j>>0]=1;h:do if(!n){a[j>>0]=k;K=180}else{b[A>>1]=129;c[Xa>>2]=C;c[D>>2]=125;c[E>>2]=126;c[F>>2]=0;c[G>>2]=Ya;l=n+24|0;gb=(c[H>>2]|0)+(c[l>>2]|0)|0;c[H>>2]=gb;i=c[i+120>>2]|0;do if((i|0)>=(gb|0)){_j(Xa,n)|0;i=c[Xa>>2]|0;gb=i+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[l>>2]|0);gb=n+4|0;c[gb>>2]=c[gb>>2]|b[A>>1]&-32752&65535;if((c[B>>2]|0)>0)break;gb=(c[i+36>>2]|0)<1;a[j>>0]=k;if(gb){K=180;break h}else{Ua=0;break h}}else{c[bb>>2]=i;cd(db,41637,bb)}while(0);a[j>>0]=k;Ua=0}while(0);i:do if((K|0)==180){K=0;if((c[m>>2]|0)<=0){Ua=0;break}i=0;while(1){gb=i;i=i+1|0;if((bk(0,c[m+4+(gb*20|0)>>2]|0,n,-1)|0)<2){Ua=i;break i}if((i|0)>=(c[m>>2]|0)){Ua=0;break}}}while(0);c[Za>>2]=Ua;i=Ua}else i=0;if(!((n|0)==0|(d[u>>0]|0)>1))ni(I,n);if((i|0)<=0){f=1;break d}}else{i=c[Za>>2]|0;Wa=c[s>>2]|0;if((i|0)<1|(i|0)>(Wa|0)){K=158;break c}}while(0);if((d[u>>0]|0)<=1){c[Xa>>2]=0;c[v>>2]=0;l=oj(I,147,Xa,0)|0;if(!l)break c;j=l+4|0;c[j>>2]=c[j>>2]|1024;c[l+8>>2]=i;j=c[q>>2]|0;if((j|0)==(f|0))j=q;else{while(1){k=c[j+12>>2]|0;if((a[k>>0]|0)==106)j=k;else break}j=j+12|0}c[j>>2]=l;if(f|0)ni(I,f);b[q+16>>1]=i}a[o>>0]=a[o>>0]|1;f=p}else f=p;while(0);i=Va+1|0;Ta=c[J>>2]|0;if((i|0)<(Ta|0)){q=q+20|0;p=f;Va=i}else break}h=c[h+56>>2]|0;if((f|0)!=0&(h|0)!=0)f=Ta;else{K=201;break}}if((K|0)==158){c[ab>>2]=Va+1;c[ab+4>>2]=40659;c[ab+8>>2]=Wa;cd(db,41294,ab)}else if((K|0)==201){if((Ta|0)<=0){gb=1;Ra=fb;return gb|0}f=0;while(1){gb=f;f=f+1|0;if(!(a[J+4+(gb*20|0)+13>>0]&1))break;if((f|0)>=(Ta|0)){cb=1;K=206;break}}if((K|0)==206){Ra=fb;return cb|0}c[eb>>2]=f;cd(db,41576,eb);gb=2;Ra=fb;return gb|0}else if((K|0)==206){Ra=fb;return cb|0}gb=2;Ra=fb;return gb|0}case 206:{Ra=fb;return cb|0}}if((K|0)==11){gb=2;Ra=fb;return gb|0}else if((K|0)==48){gb=2;Ra=fb;return gb|0}else if((K|0)==61){gb=2;Ra=fb;return gb|0}else if((K|0)==68){gb=2;Ra=fb;return gb|0}else if((K|0)==82){gb=2;Ra=fb;return gb|0}else if((K|0)==110){gb=2;Ra=fb;return gb|0}else if((K|0)==121){gb=2;Ra=fb;return gb|0}return 0}function Fk(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=0;a:while(1){switch(a[b+l>>0]|0){case 46:case 0:break a;default:{}}l=l+1|0}if(f|0){b:do if(l|0){h=b;k=f;i=l;while(1){g=a[h>>0]|0;if(!(g<<24>>24)){i=8;break}j=a[208+(g&255)>>0]|0;g=a[208+(d[k>>0]|0)>>0]|0;if(j<<24>>24!=g<<24>>24){i=10;break}if((i|0)>1){h=h+1|0;k=k+1|0;i=i+-1|0}else break b}if((i|0)==8){h=0;g=a[208+(d[k>>0]|0)>>0]|0}else if((i|0)==10)h=j&255;if((h|0)!=(g&255|0)){e=0;return e|0}}while(0);if(a[f+l>>0]|0){e=0;return e|0}}b=b+(l+1)|0;l=0;c:while(1){switch(a[b+l>>0]|0){case 46:case 0:break c;default:{}}l=l+1|0}if(e|0){d:do if(l|0){h=b;k=e;i=l;while(1){g=a[h>>0]|0;if(!(g<<24>>24)){i=21;break}j=a[208+(g&255)>>0]|0;g=a[208+(d[k>>0]|0)>>0]|0;if(j<<24>>24!=g<<24>>24){i=23;break}if((i|0)>1){h=h+1|0;k=k+1|0;i=i+-1|0}else break d}if((i|0)==21){h=0;g=a[208+(d[k>>0]|0)>>0]|0}else if((i|0)==23)h=j&255;if((h|0)!=(g&255|0)){e=0;return e|0}}while(0);if(a[e+l>>0]|0){e=0;return e|0}}if(c|0){h=b+(l+1)|0;e=a[h>>0]|0;g=(d[208+(e&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(!(e<<24>>24==0|(g|0)!=0))do{h=h+1|0;c=c+1|0;e=a[h>>0]|0;g=(d[208+(e&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0}while(!(e<<24>>24==0|(g|0)!=0));if(g|0){e=0;return e|0}}e=1;return e|0}function Gk(b,d,f,g,h,i){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+32|0;k=p;d=c[d+4+(f*20|0)>>2]|0;m=c[b>>2]|0;if(!d){o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}d=dk(m,d,0,0)|0;if(!d){o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}if((i|0)>0&(a[h>>0]|0)!=71){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+4>>2]=140;c[k+24>>2]=i;_j(k,d)|0}if((a[g>>0]|0)==106){f=c[g+8>>2]|0;c[k>>2]=f;if(f){i=(Eu(f)|0)&1073741823;c[k+4>>2]=i;if((i|0)!=0?(j=oj(c[b>>2]|0,106,k,0)|0,(j|0)!=0):0){c[j+12>>2]=d;d=j+4|0;c[d>>2]=c[d>>2]|4352;d=j}}else c[k+4>>2]=0}j=g+4|0;c[j>>2]=c[j>>2]|134217728;ni(m,g);f=g;h=d;i=f+52|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));if((c[j>>2]&1024|0)==0?(o=g+8|0,n=c[o>>2]|0,n|0):0){b=(Eu(n)|0)+1|0;a:do if(!m){k=Sv(b|0,0,-1,-1)|0;i=L()|0;if(!(i>>>0>0|(i|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](b)|0;l=38;break}f=Wa[c[29356>>2]&127](b)|0;if((c[14985]|0)>>>0<b>>>0)c[14985]=b;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){k=c[14978]|0;i=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=k>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(f){h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=39}else l=39}else f=0}else f=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){f=0;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<b>>>0:0))){h=m+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];l=m+284|0;c[l>>2]=(c[l>>2]|0)+1;l=38;break a}h=m+296|0;f=c[h>>2]|0;if(!f){f=m+292|0;break}else{c[h>>2]=c[f>>2];l=m+284|0;c[l>>2]=(c[l>>2]|0)+1;l=38;break a}}else f=m+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(m,b,0)|0;l=38}while(0);if((l|0)==38)if(!f)f=0;else l=39;if((l|0)==39)ew(f|0,n|0,b|0)|0;c[o>>2]=f;c[j>>2]=c[j>>2]|65536}if(m|0){if(c[m+480>>2]|0){Xd(m,d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}o=d;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}}function Hk(b,e){b=b|0;e=e|0;if((a[e>>0]|0)!=-93)return 0;e=e+38|0;a[e>>0]=(c[b+24>>2]|0)+(d[e>>0]|0);return 0}function Ik(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+32|0;i=n+24|0;m=n+16|0;l=n+8|0;h=n;j=c[b>>2]|0;k=c[(c[j+16>>2]|0)+(f<<4)>>2]|0;if(a[j+165>>0]|0){m=0;Ra=n;return m|0}g=$a[c[j+312>>2]&127](c[j+316>>2]|0,20,d,e,k,c[b+240>>2]|0)|0;if((g|0)==1){c[h>>2]=d;c[h+4>>2]=e;d=Bb(40358,h)|0;if(f|0?1:(c[j+20>>2]|0)>2){c[l>>2]=k;c[l+4>>2]=d;d=Bb(40364,l)|0}c[m>>2]=d;cd(b,40370,m);c[b+12>>2]=23;m=1;Ra=n;return m|0}else{if((g|2|0)==2){m=g;Ra=n;return m|0}cd(b,39231,i);c[b+12>>2]=1;m=g;Ra=n;return m|0}return 0}function Jk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;switch(a[d>>0]|0){case -92:case -94:break;default:return 0}e=c[b+24>>2]|0;f=c[e>>2]|0;a:do if((f|0)!=0?(g=c[f>>2]|0,(g|0)>0):0){d=c[d+28>>2]|0;b=0;while(1){if((d|0)==(c[f+8+(b*72|0)+40>>2]|0))break;b=b+1|0;if((b|0)>=(g|0)){h=8;break a}}b=e+4|0}else h=8;while(0);if((h|0)==8)b=e+8|0;c[b>>2]=(c[b>>2]|0)+1;return 0}function Kk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;h=i;if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}if(c[d+8>>2]&128|0){Ra=i;return}c[h+4>>2]=141;c[h>>2]=b;f=h+8|0;if(!(a[b+22>>0]|0))g=h+12|0;else{c[f>>2]=142;g=h+12|0;c[g>>2]=0;$j(h,d)|0}c[f>>2]=143;c[g>>2]=68;$j(h,d)|0;f=b+36|0;if(c[f>>2]|0){Ra=i;return}if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}c[h+4>>2]=125;c[h+8>>2]=126;c[h+12>>2]=0;c[h>>2]=b;c[h+24>>2]=e;$j(h,d)|0;if(c[f>>2]|0){Ra=i;return}if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}c[h+8>>2]=132;c[h+12>>2]=69;c[h+4>>2]=141;c[h>>2]=b;$j(h,d)|0;Ra=i;return}function Lk(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=Ra;Ra=Ra+80|0;F=H+24|0;B=H+16|0;A=H;x=H+40|0;y=H+36|0;if(!g){G=0;Ra=H;return G|0}z=c[c[f>>2]>>2]|0;E=c[e>>2]|0;k=g+4|0;j=c[g>>2]|0;a:do if((j|0)>0){t=x+4|0;u=x+24|0;i=0;s=k;b:while(1){r=c[s>>2]|0;q=(r|0)==0;c:do if(q)j=0;else{j=r;while(1){l=c[j+4>>2]|0;if(!(l&4096))break c;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}}while(0);d:do if((a[h>>0]|0)==71)G=23;else{p=c[f>>2]|0;e:do if((a[j>>0]|0)==59?(v=c[j+8>>2]|0,w=c[p>>2]|0,(w|0)>0):0){l=0;while(1){n=c[p+4+(l*20|0)+4>>2]|0;if(n|0){o=a[n>>0]|0;m=(d[208+(o&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0;if(!(o<<24>>24==0|(m|0)!=0)){o=v;do{n=n+1|0;o=o+1|0;I=a[n>>0]|0;m=(d[208+(I&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(I<<24>>24==0|(m|0)!=0))}if(!m)break}l=l+1|0;if((l|0)>=(w|0))break e}I=l+1|0;c[y>>2]=I;b[s+16>>1]=I;break d}while(0);c[y>>2]=0;G=23}while(0);f:do if((G|0)==23){G=0;if(uk(j,y)|0){j=c[y>>2]|0;if((j+-1|0)>>>0>65534)break b;b[s+16>>1]=j;break}m=s+16|0;b[m>>1]=0;if(Ck(e,r)|0){C=1;G=50;break b}j=c[f>>2]|0;if((c[j>>2]|0)>0){if(q){l=0;while(1){I=l;l=l+1|0;if(!(bk(0,0,c[j+4+(I*20|0)>>2]|0,-1)|0))b[m>>1]=l;j=c[f>>2]|0;if((l|0)>=(c[j>>2]|0))break f}}l=0;do{if(!(bk(0,r,c[j+4+(l*20|0)>>2]|0,-1)|0)){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;c[t>>2]=144;c[u>>2]=f;_j(x,r)|0;l=l+1|0;b[m>>1]=l}else l=l+1|0;j=c[f>>2]|0}while((l|0)<(c[j>>2]|0))}}while(0);i=i+1|0;j=c[g>>2]|0;if((i|0)<(j|0))s=s+20|0;else break a}if((G|0)==50){Ra=H;return C|0}c[A>>2]=i+1;c[A+4>>2]=h;c[A+8>>2]=z;cd(E,41294,A);I=1;Ra=H;return I|0}while(0);i=c[E>>2]|0;if(a[i+81>>0]|0){I=0;Ra=H;return I|0}if((j|0)>(c[i+116>>2]|0)){c[B>>2]=h;cd(E,41350,B);I=1;Ra=H;return I|0}m=c[f>>2]|0;if((j|0)<=0){I=0;Ra=H;return I|0}l=0;while(1){i=b[k+16>>1]|0;if(i<<16>>16){i=i&65535;D=c[m>>2]|0;if((D|0)<(i|0))break;Gk(E,m,i+-1|0,c[k>>2]|0,h,0);j=c[g>>2]|0}i=l+1|0;if((i|0)<(j|0)){l=i;k=k+20|0}else{C=0;G=50;break}}if((G|0)==50){Ra=H;return C|0}c[F>>2]=l+1;c[F+4>>2]=h;c[F+8>>2]=D;cd(E,41294,F);I=1;Ra=H;return I|0}function Mk(a,b){a=a|0;b=b|0;return 0}function Nk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+16|0;n=p+8|0;m=p;o=d+52|0;if(!(c[o>>2]|0)){o=0;Ra=p;return o|0}k=c[d+48>>2]|0;if(!k){o=0;Ra=p;return o|0}f=d;a:while(1){switch(a[f+4>>0]|0){case -125:case -128:break;default:break a}f=c[f+52>>2]|0;if(!f){j=0;l=36;break}}if((l|0)==36){Ra=p;return j|0}f=c[k>>2]|0;if((f|0)<=0){o=0;Ra=p;return o|0}while(1){i=f;f=f+-1|0;if(c[(c[k+4+(f*20|0)>>2]|0)+4>>2]&256|0)break;if((i|0)<=1){j=0;l=36;break}}if((l|0)==36){Ra=p;return j|0}b=c[b>>2]|0;k=c[b>>2]|0;b:do if(!k){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](76)|0;l=33;break}f=Wa[c[29356>>2]&127](76)|0;if((c[14985]|0)>>>0<76)c[14985]=76;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){j=c[14978]|0;i=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=j>>>0)&1}h=Wa[c[29340>>2]&127](f)|0;if(!h){o=2;Ra=p;return o|0}f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){o=2;Ra=p;return o|0}}else{do if((e[k+276>>1]|0)>=76){f=k+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break b}f=k+296|0;g=c[f>>2]|0;if(!g){f=k+292|0;break}else{c[f>>2]=c[g>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break b}}else f=k+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}g=_d(k,76,0)|0;l=33}while(0);if((l|0)==33)if(!g){o=2;Ra=p;return o|0}else h=g;i=h;j=i+76|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));f=m;c[f>>2]=0;c[f+4>>2]=0;f=lj(b,0,0,0,m,h,0,0)|0;if(!f){o=2;Ra=p;return o|0}i=h;g=d;j=i+76|0;do{c[i>>2]=c[g>>2];i=i+4|0;g=g+4|0}while((i|0)<(j|0));c[d+32>>2]=f;c[n>>2]=0;c[n+4>>2]=0;n=oj(k,172,n,0)|0;n=nj(c[b>>2]|0,0,n)|0;c[d>>2]=n;a[d+4>>0]=-125;c[d+36>>2]=0;c[h+40>>2]=0;c[h+44>>2]=0;c[h+48>>2]=0;c[o>>2]=0;c[d+56>>2]=0;c[d+64>>2]=0;o=d+8|0;c[o>>2]=c[o>>2]&-65793|65536;c[(c[h+52>>2]|0)+56>>2]=h;c[h+60>>2]=0;o=0;Ra=p;return o|0}function Ok(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0;qa=Ra;Ra=Ra+144|0;pa=qa+128|0;la=qa+120|0;ka=qa+112|0;ja=qa+96|0;ia=qa+88|0;P=qa+80|0;O=qa+72|0;N=qa+64|0;I=qa+56|0;H=qa+48|0;G=qa+40|0;K=qa+24|0;J=qa+16|0;F=qa+8|0;E=qa;ga=qa+136|0;ma=c[f>>2]|0;na=c[ma>>2]|0;oa=g+8|0;h=c[oa>>2]|0;c[oa>>2]=h|64;ha=na+81|0;if(a[ha>>0]|0){pa=2;Ra=qa;return pa|0}if(h&64|0){pa=1;Ra=qa;return pa|0}A=g+32|0;ea=c[A>>2]|0;fa=c[g>>2]|0;h=c[g+64>>2]|0;if(h|0){da=ma+264|0;c[h+4>>2]=c[da>>2];c[da>>2]=h}Qk(ma,ea);da=ea+8|0;a:do if((c[ea>>2]|0)>0){y=0;z=da;b:while(1){x=z+37|0;q=a[x>>0]|0;do if(!(q&32)){u=c[f>>2]|0;s=c[u>>2]|0;v=u+264|0;h=c[v>>2]|0;w=z+4|0;c:do if((c[w>>2]|0)==0?(D=c[z+8>>2]|0,!((h|0)==0|(D|0)==0)):0){d:while(1){o=c[h>>2]|0;e:do if((o|0)>0){ba=a[D>>0]|0;p=a[208+(ba&255)>>0]|0;if(!(ba<<24>>24)){i=0;while(1){j=h+8+(i<<4)|0;k=c[j>>2]|0;i=i+1|0;if(p<<24>>24==(a[208+(d[k>>0]|0)>>0]|0)){m=j;j=k;break d}if((i|0)>=(o|0))break e}}l=0;do{m=h+8+(l<<4)|0;j=c[m>>2]|0;if(p<<24>>24==(a[208+(d[j>>0]|0)>>0]|0)){i=j;k=D;do{k=k+1|0;i=i+1|0;ba=a[k>>0]|0;n=(d[208+(ba&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(n|0)!=0));if(!n)break d}l=l+1|0}while((l|0)<(o|0))}while(0);h=c[h+4>>2]|0;if(!h)break c}t=m+12|0;i=c[t>>2]|0;if(i|0){ca=24;break b}if(q&4){ca=26;break b}l=(s|0)==0;f:do if(l){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](80)|0;ca=50;break}i=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){ba=c[14978]|0;aa=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;$=L()|0;c[14768]=(($|0)<0|($|0)==0&aa>>>0<=ba>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){ca=51;break b}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[s+272>>2]|0){if(a[s+81>>0]|0){ca=51;break b}}else{do if((e[s+276>>1]|0)>=80){j=s+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=50;break f}j=s+296|0;i=c[j>>2]|0;if(!i){i=s+292|0;break}else{c[j>>2]=c[i>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=50;break f}}else i=s+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(s,80,0)|0;ca=50}while(0);if((ca|0)==50){ca=0;if(!i){ca=51;break b}}o=i;p=o+80|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(p|0));c[z+16>>2]=i;r=i+32|0;c[r>>2]=1;n=c[m>>2]|0;g:do if(!n)j=0;else{o=(Eu(n)|0)+1|0;h:do if(l){ba=Sv(o|0,0,-1,-1)|0;aa=L()|0;if(aa>>>0>0|(aa|0)==0&ba>>>0>2147483390){j=0;break g}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;ca=77;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){ba=c[14978]|0;aa=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;$=L()|0;c[14768]=(($|0)<0|($|0)==0&aa>>>0<=ba>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break g}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[s+272>>2]|0){if(a[s+81>>0]|0){j=0;break g}}else{do if(!(0<0|(0==0?(e[s+276>>1]|0)>>>0<o>>>0:0))){k=s+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=77;break h}k=s+296|0;j=c[k>>2]|0;if(!j){j=s+292|0;break}else{c[k>>2]=c[j>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=77;break h}}else j=s+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(s,o,0)|0;ca=77}while(0);if((ca|0)==77){ca=0;if(!j){j=0;break}}ew(j|0,n|0,o|0)|0}while(0);c[i>>2]=j;b[i+40>>1]=-1;b[i+44>>1]=200;q=i+36|0;c[q>>2]=c[q>>2]|66;q=fk(s,c[m+8>>2]|0,0)|0;c[z+20>>2]=q;if(a[s+81>>0]|0){h=2;ca=421;break b}p=((a[q+4>>0]|0)+-127&255)<2;if(p?(B=c[q+32>>2]|0,C=c[B>>2]|0,(C|0)>0):0){o=q+8|0;n=0;do{do if(!(c[B+8+(n*72|0)+4>>2]|0)){k=c[B+8+(n*72|0)+8>>2]|0;if(!k)break;l=c[m>>2]|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(ba<<24>>24==0|(j|0)!=0))do{k=k+1|0;l=l+1|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(j|0)!=0));if(j|0)break;c[B+8+(n*72|0)+16>>2]=i;ba=B+8+(n*72|0)+37|0;a[ba>>0]=a[ba>>0]|32;c[r>>2]=(c[r>>2]|0)+1;c[o>>2]=c[o>>2]|8192}while(0);n=n+1|0}while((n|0)!=(C|0))}if((c[r>>2]|0)>>>0>2){ca=92;break b}c[t>>2]=40892;l=c[v>>2]|0;c[v>>2]=h;if(p){aa=c[q+52>>2]|0;ba=aa+64|0;c[ba>>2]=c[q+64>>2];$j(f,aa)|0;c[ba>>2]=0}else $j(f,q)|0;c[v>>2]=h;h=q;while(1){j=c[h+52>>2]|0;if(!j)break;else h=j}h=c[h>>2]|0;k=c[m+4>>2]|0;do if(k){if(!h){h=k;break}h=c[h>>2]|0;j=c[k>>2]|0;if((h|0)==(j|0))h=k;else{ca=101;break b}}while(0);Tk(c[u>>2]|0,h,i+42|0,i+4|0);if(p){c[t>>2]=(c[q+8>>2]&8192|0)==0?40987:40953;$j(f,q)|0}c[t>>2]=0;c[v>>2]=l}while(0);l=z+16|0;h=c[l>>2]|0;if(!h){k=c[z+8>>2]|0;do if(!k){if($j(f,c[z+20>>2]|0)|0){h=2;ca=421;break b}if(Rk(ma,z)|0){h=2;ca=421;break b}}else{j=c[z>>2]|0;if(!j)h=w;else{i=c[(c[ma>>2]|0)+16>>2]|0;h=0;while(1)if((c[i+(h<<4)+12>>2]|0)==(j|0))break;else h=h+1|0;h=i+(h<<4)|0}h=bd(ma,0,k,c[h>>2]|0)|0;c[l>>2]=h;if(!h){h=2;ca=421;break b}i=h+32|0;j=c[i>>2]|0;if(j>>>0>65534){ca=115;break b}c[i>>2]=j+1;if(!(c[h+56>>2]|0)){if(a[x>>0]&4){ca=118;break b}if(!(c[h+12>>2]|0))break}if(Sk(ma,h)|0){h=2;ca=421;break b}$=fk(na,c[h+12>>2]|0,0)|0;c[z+20>>2]=$;ba=h+42|0;aa=b[ba>>1]|0;b[ba>>1]=-1;$j(f,$)|0;b[ba>>1]=aa}while(0);h=c[l>>2]|0;if(!h)break}if(a[x>>0]&2){m=c[z+64>>2]|0;h=c[h+8>>2]|0;if(!h){ca=132;break b}l=d[208+(d[m>>0]|0)>>0]|0;while(1){j=c[h>>2]|0;ba=a[j>>0]|0;i=(d[208+(ba&255)>>0]|0)-l|0;if(!(ba<<24>>24==0|(i|0)!=0)){k=m;do{j=j+1|0;k=k+1|0;ba=a[j>>0]|0;i=(d[208+(ba&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(i|0)!=0))}if(!i)break;h=c[h+20>>2]|0;if(!h){ca=132;break b}}c[z+68>>2]=h}}while(0);y=y+1|0;if((y|0)>=(c[ea>>2]|0))break a;else z=z+72|0}if((ca|0)==24){c[E>>2]=j;cd(u,i,E);pa=2;Ra=qa;return pa|0}else if((ca|0)==26){c[F>>2]=D;cd(u,41054,F);pa=2;Ra=qa;return pa|0}else if((ca|0)==51){c[z+16>>2]=0;pa=2;Ra=qa;return pa|0}else if((ca|0)==92){c[J>>2]=c[m>>2];cd(u,40849,J);pa=2;Ra=qa;return pa|0}else if((ca|0)==101){c[K>>2]=c[m>>2];c[K+4>>2]=h;c[K+8>>2]=j;cd(u,40915,K);c[v>>2]=l;pa=2;Ra=qa;return pa|0}else if((ca|0)==115){c[G>>2]=c[h>>2];cd(ma,40730,G);c[l>>2]=0;pa=2;Ra=qa;return pa|0}else if((ca|0)==118){c[H>>2]=c[z+8>>2];cd(ma,41054,H);pa=2;Ra=qa;return pa|0}else if((ca|0)==132){c[I>>2]=m;c[I+4>>2]=0;cd(ma,41107,I);a[ma+17>>0]=1;pa=2;Ra=qa;return pa|0}else if((ca|0)==421){Ra=qa;return h|0}}while(0);if(a[ha>>0]|0){pa=2;Ra=qa;return pa|0}G=c[A>>2]|0;i:do if((c[G>>2]|0)>1){H=g+36|0;D=0;E=G+8|0;F=G+80|0;j:while(1){B=c[F+16>>2]|0;if(!((B|0)==0|(c[E+16>>2]|0)==0)){ba=d[F+36>>0]|0;C=ba&32;A=(C|0)==0;f=F+44|0;if(ba&4){if(c[f>>2]|0){ca=142;break}i=F+48|0;if(c[i>>2]|0){ca=142;break}u=B+42|0;h=b[u>>1]|0;if(h<<16>>16>0){v=B+4|0;z=D+1|0;w=(C|0)!=0;x=G+8+(z*72|0)+16|0;y=G+8+(z*72|0)+40|0;z=G+8+(z*72|0)+56|0;t=0;do{p=c[(c[v>>2]|0)+(t<<4)>>2]|0;r=0;k:while(1){s=G+8+(r*72|0)+16|0;j=c[s>>2]|0;k=b[j+42>>1]|0;if(k<<16>>16>0){n=c[j+4>>2]|0;o=d[208+(d[p>>0]|0)>>0]|0;m=k<<16>>16;q=0;while(1){k=c[n+(q<<4)>>2]|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-o|0;if(!(ba<<24>>24==0|(j|0)!=0)){l=p;do{k=k+1|0;l=l+1|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(j|0)!=0))}if(!j){ca=154;break k}j=q+1|0;if((j|0)<(m|0))q=j;else break}}if(r>>>0<D>>>0)r=r+1|0;else break}if((ca|0)==154){ca=0;m=c[ma>>2]|0;l=m+272|0;l:do if(c[l>>2]|0)if(!(a[m+81>>0]|0))ca=164;else k=0;else{do if((e[m+276>>1]|0)>=52){h=m+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=165;break l}h=m+296|0;j=c[h>>2]|0;if(!j){h=m+292|0;break}else{c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=165;break l}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=164}while(0);if((ca|0)==164){j=_d(m,52,0)|0;ca=165}do if((ca|0)==165){ca=0;if(j){o=j;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[j>>0]=-94;b[j+34>>1]=-1;c[j+24>>2]=1;ba=c[s>>2]|0;c[j+44>>2]=ba;c[j+28>>2]=c[G+8+(r*72|0)+40>>2];if((q|0)==(b[ba+40>>1]|0)){b[j+32>>1]=-1;k=j;break}else{b[j+32>>1]=q;aa=cw(1,0,(q>>>0<63?q:63)|0)|0;ba=L()|0;k=G+8+(r*72|0)+56|0;$=k;ba=c[$+4>>2]|ba;c[k>>2]=c[$>>2]|aa;c[k+4>>2]=ba;k=j;break}}else k=0}while(0);m:do if(c[l>>2]|0)if(!(a[m+81>>0]|0))ca=179;else j=0;else{do if((e[m+276>>1]|0)>=52){h=m+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=180;break m}h=m+296|0;j=c[h>>2]|0;if(!j){h=m+292|0;break}else{c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=180;break m}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=179}while(0);if((ca|0)==179){j=_d(m,52,0)|0;ca=180}do if((ca|0)==180){ca=0;if(!j){j=0;break}o=j;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[j>>0]=-94;b[j+34>>1]=-1;c[j+24>>2]=1;ba=c[x>>2]|0;c[j+44>>2]=ba;c[j+28>>2]=c[y>>2];if((t|0)==(b[ba+40>>1]|0)){b[j+32>>1]=-1;break}else{b[j+32>>1]=t;$=cw(1,0,(t>>>0<63?t:63)|0)|0;aa=L()|0;_=z;aa=c[_+4>>2]|aa;ba=z;c[ba>>2]=c[_>>2]|$;c[ba+4>>2]=aa;break}}while(0);h=ej(ma,53,k,j)|0;if(w&(h|0)!=0){ba=h+4|0;c[ba>>2]=c[ba>>2]|1;b[h+36>>1]=c[j+28>>2]}h=Xk(m,c[H>>2]|0,h)|0;c[H>>2]=h;h=b[u>>1]|0}t=t+1|0}while((t|0)<(h<<16>>16|0))}}else i=F+48|0;h=c[f>>2]|0;if(h|0){if(c[i>>2]|0){ca=190;break}if(!A){Wk(h,c[F+40>>2]|0);h=c[f>>2]|0}ba=Xk(c[ma>>2]|0,c[H>>2]|0,h)|0;c[H>>2]=ba;c[f>>2]=0}y=c[i>>2]|0;if(y|0?(M=y+4|0,(c[M>>2]|0)>0):0){z=B+42|0;x=B+4|0;w=D+1|0;t=(C|0)!=0;u=G+8+(w*72|0)+16|0;v=G+8+(w*72|0)+40|0;w=G+8+(w*72|0)+56|0;s=0;do{o=c[(c[y>>2]|0)+(s<<3)>>2]|0;h=b[z>>1]|0;if(h<<16>>16<=0){ca=246;break j}l=c[x>>2]|0;p=d[208+(d[o>>0]|0)>>0]|0;k=h<<16>>16;r=0;while(1){i=c[l+(r<<4)>>2]|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-p|0;if(!(ba<<24>>24==0|(h|0)!=0)){j=o;do{i=i+1|0;j=j+1|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(h|0)!=0))}if(!h)break;h=r+1|0;if((h|0)<(k|0))r=h;else{ca=246;break j}}n=0;n:while(1){q=G+8+(n*72|0)+16|0;h=c[q>>2]|0;i=b[h+42>>1]|0;if(i<<16>>16>0){l=c[h+4>>2]|0;k=i<<16>>16;m=0;while(1){i=c[l+(m<<4)>>2]|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-p|0;if(!(ba<<24>>24==0|(h|0)!=0)){j=o;do{i=i+1|0;j=j+1|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(h|0)!=0))}if(!h)break n;h=m+1|0;if((h|0)<(k|0))m=h;else break}}if(n>>>0<D>>>0)n=n+1|0;else{ca=246;break j}}l=c[ma>>2]|0;k=l+272|0;o:do if(c[k>>2]|0)if(!(a[l+81>>0]|0))ca=223;else j=0;else{do if((e[l+276>>1]|0)>=52){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=224;break o}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=224;break o}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=223}while(0);if((ca|0)==223){i=_d(l,52,0)|0;ca=224}do if((ca|0)==224){ca=0;if(i){o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[i>>0]=-94;b[i+34>>1]=-1;c[i+24>>2]=1;ba=c[q>>2]|0;c[i+44>>2]=ba;c[i+28>>2]=c[G+8+(n*72|0)+40>>2];if((m|0)==(b[ba+40>>1]|0)){b[i+32>>1]=-1;j=i;break}else{b[i+32>>1]=m;aa=cw(1,0,(m>>>0<63?m:63)|0)|0;ba=L()|0;j=G+8+(n*72|0)+56|0;$=j;ba=c[$+4>>2]|ba;c[j>>2]=c[$>>2]|aa;c[j+4>>2]=ba;j=i;break}}else j=0}while(0);p:do if(c[k>>2]|0)if(!(a[l+81>>0]|0))ca=238;else i=0;else{do if((e[l+276>>1]|0)>=52){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=239;break p}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=239;break p}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=238}while(0);if((ca|0)==238){i=_d(l,52,0)|0;ca=239}do if((ca|0)==239){ca=0;if(i){o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[i>>0]=-94;b[i+34>>1]=-1;c[i+24>>2]=1;ba=c[u>>2]|0;c[i+44>>2]=ba;c[i+28>>2]=c[v>>2];if((r|0)==(b[ba+40>>1]|0)){b[i+32>>1]=-1;break}else{b[i+32>>1]=r;$=cw(1,0,(r>>>0<63?r:63)|0)|0;aa=L()|0;_=w;aa=c[_+4>>2]|aa;ba=w;c[ba>>2]=c[_>>2]|$;c[ba+4>>2]=aa;break}}else i=0}while(0);h=ej(ma,53,j,i)|0;if(t&(h|0)!=0){ba=h+4|0;c[ba>>2]=c[ba>>2]|1;b[h+36>>1]=c[i+28>>2]}ba=Xk(l,c[H>>2]|0,h)|0;c[H>>2]=ba;s=s+1|0}while((s|0)<(c[M>>2]|0))}}D=D+1|0;if((D|0)>=((c[G>>2]|0)+-1|0))break i;else{E=E+72|0;F=F+72|0}}if((ca|0)==142){c[N>>2]=0;cd(ma,41125,N);pa=2;Ra=qa;return pa|0}else if((ca|0)==190){cd(ma,41175,O);pa=2;Ra=qa;return pa|0}else if((ca|0)==246){c[P>>2]=o;cd(ma,41230,P);pa=2;Ra=qa;return pa|0}}while(0);k=c[fa>>2]|0;q:do if((k|0)>0){j=0;h=0;r:while(1){i=c[fa+4+(j*20|0)>>2]|0;switch(a[i>>0]|0){case -84:break r;case -122:{if((a[c[i+16>>2]>>0]|0)==-84)break r;break}default:{}}h=c[i+4>>2]|h;j=j+1|0;if((j|0)>=(k|0)){ca=415;break q}}M=0==0?(c[(c[ma>>2]|0)+32>>2]&68|0)==4:0;N=ga+4|0;O=ga+4|0;P=ga+4|0;Q=(na|0)==0;R=ma+200|0;S=na+480|0;T=na+304|0;U=ma+272|0;V=na+308|0;W=na+300|0;X=na+272|0;Y=na+276|0;Z=na+288|0;_=na+296|0;$=na+284|0;aa=na+292|0;ba=na+16|0;i=0;K=0;do{k=fa+4+(K*20|0)|0;j=c[k>>2]|0;h=c[j+4>>2]|h;switch(a[j>>0]|0){case -84:{J=0;ca=260;break}case -122:{if((a[c[j+16>>2]>>0]|0)==-84){J=c[(c[j+12>>2]|0)+8>>2]|0;ca=260}else ca=256;break}default:ca=256}do if((ca|0)==256){ca=0;i=nj(c[ma>>2]|0,i,j)|0;if(i|0){I=fa+4+(K*20|0)+4|0;H=(c[i>>2]|0)+-1|0;c[i+4+(H*20|0)+4>>2]=c[I>>2];J=fa+4+(K*20|0)+8|0;c[i+4+(H*20|0)+8>>2]=c[J>>2];c[I>>2]=0;c[J>>2]=0}c[k>>2]=0}else if((ca|0)==260){ca=0;if((c[ea>>2]|0)>0){H=(J|0)==0;I=(J|0)!=0;j=0;F=0;G=da;while(1){n=c[G+16>>2]|0;l=c[G+20>>2]|0;k=c[G+12>>2]|0;if(!k)E=c[n>>2]|0;else E=k;if(a[ha>>0]|0)break;if((l|0)!=0?(c[l+8>>2]&2048|0)!=0:0){D=0;ca=276}else ca=267;do if((ca|0)==267){ca=0;if(!H){D=a[J>>0]|0;k=(d[208+(D&255)>>0]|0)-(d[208+(d[E>>0]|0)>>0]|0)|0;if(!(D<<24>>24==0|(k|0)!=0)){l=E;m=J;do{m=m+1|0;l=l+1|0;D=a[m>>0]|0;k=(d[208+(D&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(D<<24>>24==0|(k|0)!=0))}if(k|0)break}l=c[n+72>>2]|0;if(!l){D=40769;l=0;ca=276}else{m=c[ba>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;D=c[m+(k<<4)>>2]|0;l=0;ca=276}}while(0);if((ca|0)==276){ca=0;C=n+42|0;if((b[C>>1]|0)>0){v=n+4|0;w=(l|0)!=0;f=I&w;B=H&(F|0)!=0;x=G+36|0;y=G+48|0;z=(E|0)==0;A=(D|0)==0;u=0;do{r=c[v>>2]|0;s=c[r+(u<<4)>>2]|0;s:do if(f){m=c[(c[l>>2]|0)+4+(u*20|0)+8>>2]|0;k=0;t:while(1){switch(a[m+k>>0]|0){case 46:case 0:break t;default:{}}k=k+1|0}k=m+(k+1)|0;q=0;u:while(1){switch(a[k+q>>0]|0){case 46:case 0:break u;default:{}}q=q+1|0}v:do if(q|0){p=J;n=q;while(1){m=a[k>>0]|0;if(!(m<<24>>24)){ca=288;break}m=a[208+(m&255)>>0]|0;o=a[208+(d[p>>0]|0)>>0]|0;if(m<<24>>24!=o<<24>>24){ca=290;break}if((n|0)>1){k=k+1|0;p=p+1|0;n=n+-1|0}else break v}if((ca|0)==288){ca=0;m=0;k=a[208+(d[p>>0]|0)>>0]|0}else if((ca|0)==290){ca=0;m=m&255;k=o}if((m|0)!=(k&255|0))break s}while(0);if(!(a[J+q>>0]|0))ca=294}else ca=294;while(0);w:do if((ca|0)==294){ca=0;if((c[oa>>2]&131072|0)==0?a[r+(u<<4)+15>>0]&2:0)break;do if(B){if(a[x>>0]&4){r=0;do{j=c[ea+8+(r*72|0)+16>>2]|0;k=b[j+42>>1]|0;if(k<<16>>16>0){p=c[j+4>>2]|0;q=d[208+(d[s>>0]|0)>>0]|0;o=k<<16>>16;n=0;do{k=c[p+(n<<4)>>2]|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-q|0;if(!(t<<24>>24==0|(j|0)!=0)){m=s;do{k=k+1|0;m=m+1|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){j=1;break w}n=n+1|0}while((n|0)<(o|0))}r=r+1|0}while(r>>>0<F>>>0)}j=c[y>>2]|0;if(!j)break;q=c[j+4>>2]|0;if((q|0)<=0)break;o=c[j>>2]|0;p=d[208+(d[s>>0]|0)>>0]|0;n=0;do{k=c[o+(n<<3)>>2]|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-p|0;if(!(t<<24>>24==0|(j|0)!=0)){m=s;do{k=k+1|0;m=m+1|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){j=1;break w}n=n+1|0}while((n|0)<(q|0))}while(0);c[ga>>2]=s;if(!s)j=0;else j=(Eu(s)|0)&1073741823;c[N>>2]=j;j=oj(na,59,ga,0)|0;if(!M?(c[ea>>2]|0)<=1:0){t=0;r=s}else ca=319;do if((ca|0)==319){ca=0;c[ga>>2]=E;if(z)k=0;else k=(Eu(E)|0)&1073741823;c[O>>2]=k;j=ej(ma,134,oj(na,59,ga,0)|0,j)|0;if(!A){c[ga>>2]=D;t=(Eu(D)|0)&1073741823;c[P>>2]=t;j=ej(ma,134,oj(na,59,ga,0)|0,j)|0}if(!M){t=0;r=s;break}c[ia>>2]=E;c[ia+4>>2]=s;r=dd(na,40358,ia)|0;t=r}while(0);i=nj(c[ma>>2]|0,i,j)|0;q=r;j=(r|0)==0;if(j)p=0;else p=(Eu(r)|0)&1073741823;do if(i|0){o=(c[i>>2]|0)+-1|0;n=c[ma>>2]|0;x:do if(j)n=0;else{m=p+1|0;y:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))ca=339;else{n=0;break x}else{do if(!(0>0|(0==0?m>>>0>(e[n+276>>1]|0)>>>0:0))){k=n+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];s=n+284|0;c[s>>2]=(c[s>>2]|0)+1;break y}k=n+296|0;j=c[k>>2]|0;if(!j){j=n+292|0;break}else{c[k>>2]=c[j>>2];s=n+284|0;c[s>>2]=(c[s>>2]|0)+1;break y}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;ca=339}while(0);if((ca|0)==339){ca=0;j=_d(n,m,0)|0}if(!j){n=0;break}ew(j|0,r|0,p|0)|0;a[j+p>>0]=0;n=j}while(0);c[i+4+(o*20|0)+4>>2]=n;z:do if((d[R>>0]|0)>1){m=c[ma>>2]|0;A:do if(!m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;ca=366;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){s=c[14978]|0;o=Tv(k|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&o>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j)break z;k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break z}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=366;break A}k=m+296|0;j=c[k>>2]|0;if(!j){j=m+292|0;break}else{c[k>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=366;break A}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(m,16,0)|0;ca=366}while(0);if((ca|0)==366){ca=0;if(!j)break}c[j>>2]=n;c[j+4>>2]=q;c[j+8>>2]=p;c[j+12>>2]=c[U>>2];c[U>>2]=j}while(0);if(!(c[oa>>2]&2048))break;p=(c[i>>2]|0)+-1|0;B:do if(w){n=c[(c[l>>2]|0)+4+(u*20|0)+8>>2]|0;if(!n){j=0;break}o=(Eu(n)|0)+1|0;C:do if(Q){s=Sv(o|0,0,-1,-1)|0;r=L()|0;if(r>>>0>0|(r|0)==0&s>>>0>2147483390){j=0;break B}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;ca=393;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){s=c[14978]|0;r=Tv(k|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break B}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[X>>2]|0){if(a[ha>>0]|0){j=0;break B}}else{do if(0<0|(0==0?(e[Y>>1]|0)>>>0<o>>>0:0))j=Z;else{j=c[W>>2]|0;if(j|0){c[W>>2]=c[j>>2];c[$>>2]=(c[$>>2]|0)+1;ca=393;break C}j=c[_>>2]|0;if(!j){j=aa;break}c[_>>2]=c[j>>2];c[$>>2]=(c[$>>2]|0)+1;ca=393;break C}while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(na,o,0)|0;ca=393}while(0);if((ca|0)==393){ca=0;if(!j){j=0;break}}ew(j|0,n|0,o|0)|0}else{c[ja>>2]=D;c[ja+4>>2]=E;c[ja+8>>2]=r;j=dd(na,40771,ja)|0}while(0);c[i+4+(p*20|0)+8>>2]=j;s=i+4+(p*20|0)+13|0;a[s>>0]=a[s>>0]|2}while(0);if(!t){j=1;break}do if(!Q){if(c[S>>2]|0){Xd(na,t);j=1;break w}j=t;if((c[T>>2]|0)>>>0>j>>>0)break;if((c[V>>2]|0)>>>0<=j>>>0)break;c[t>>2]=c[W>>2];c[W>>2]=t;j=1;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);j=1;break}else{j=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);j=1;break}}while(0);u=u+1|0}while((u|0)<(b[C>>1]|0))}}F=F+1|0;if((F|0)>=(c[ea>>2]|0))break;else G=G+72|0}if(j)break}if(!J){cd(ma,40798,la);break}else{c[ka>>2]=J;cd(ma,40780,ka);break}}while(0);K=K+1|0}while((K|0)<(c[fa>>2]|0));ri(na,fa);c[g>>2]=i}else{h=0;ca=415}while(0);if((ca|0)==415)i=c[g>>2]|0;if(!i){pa=0;Ra=qa;return pa|0}if((c[i>>2]|0)>(c[na+116>>2]|0)){cd(ma,40818,pa);pa=2;Ra=qa;return pa|0}if(!(h&2097156)){pa=0;Ra=qa;return pa|0}c[oa>>2]=c[oa>>2]|262144;pa=0;Ra=qa;return pa|0}function Pk(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+264|0;if(!(c[d>>2]|0))return;if(c[b+52>>2]|0)return;a=b;while(1){b=c[a+56>>2]|0;if(!b)break;else a=b}a=c[a+64>>2]|0;if(!a)return;c[d>>2]=c[a+4>>2];return}function Qk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;d=c[b>>2]|0;if((d|0)<=0)return;h=a+40|0;f=0;g=b+8|0;while(1){e=g+40|0;if((c[e>>2]|0)>-1){d=8;break}i=c[h>>2]|0;c[h>>2]=i+1;c[e>>2]=i;e=c[g+20>>2]|0;if(e){Qk(a,c[e+32>>2]|0);d=c[b>>2]|0}f=f+1|0;if((f|0)>=(d|0)){d=8;break}else g=g+72|0}if((d|0)==8)return}function Rk(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;l=o;g=c[f+20>>2]|0;j=c[d>>2]|0;a:do if(!j){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](80)|0;n=24;break}h=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){m=c[14978]|0;k=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=m>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(i){h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;m=i}else m=i}else n=25}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){n=25;break}}else{do if((e[j+276>>1]|0)>=80){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=24;break a}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=24;break a}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,80,0)|0;n=24}while(0);if((n|0)==24)if(!h)n=25;else m=h;if((n|0)==25){c[f+16>>2]=0;d=7;Ra=o;return d|0}h=m;i=h+80|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));c[f+16>>2]=m;c[m+32>>2]=1;k=c[f+12>>2]|0;j=c[d>>2]|0;b:do if(!k){c[l>>2]=c[g+20>>2];h=dd(j,41042,l)|0}else{f=(Eu(k)|0)+1|0;c:do if(!j){l=Sv(f|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&l>>>0>2147483390){h=0;break b}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;n=51;break}h=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){l=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=l>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){h=0;break b}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){h=0;break b}}else{do if(!(0<0|(0==0?(e[j+276>>1]|0)>>>0<f>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=51;break c}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=51;break c}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,f,0)|0;n=51}while(0);if((n|0)==51)if(!h){h=0;break}ew(h|0,k|0,f|0)|0}while(0);c[m>>2]=h;while(1){h=c[g+52>>2]|0;if(!h)break;else g=h}Tk(c[d>>2]|0,c[g>>2]|0,m+42|0,m+4|0);b[m+40>>1]=-1;b[m+44>>1]=200;d=m+36|0;c[d>>2]=c[d>>2]|2;d=0;Ra=o;return d|0}function Sk(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=Ra;Ra=Ra+32|0;s=v+16|0;r=v+8|0;n=v;o=v+20|0;u=c[e>>2]|0;p=u+56|0;i=c[p>>2]|0;c[p>>2]=i+1;q=f+56|0;g=c[q>>2]|0;a:do if(g){h=c[f+64>>2]|0;if(h|0)do{if((c[h>>2]|0)==(u|0)){t=33;break a}h=c[h+24>>2]|0}while((h|0)!=0);m=c[c[f+60>>2]>>2]|0;j=c[u+348>>2]|0;if(!j){h=u+340|0;g=u+344|0}else{h=a[m>>0]|0;if(!(h<<24>>24))g=0;else{g=0;i=m;do{i=i+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[i>>0]|0}while(h<<24>>24!=0)}g=(g>>>0)%((c[u+336>>2]|0)>>>0)|0;h=j+(g<<3)|0;g=j+(g<<3)+4|0}h=c[h>>2]|0;b:do if(!h)g=59292;else{l=d[208+(d[m>>0]|0)>>0]|0;while(1){g=c[g>>2]|0;h=h+-1|0;j=c[g+12>>2]|0;k=a[j>>0]|0;i=(d[208+(k&255)>>0]|0)-l|0;if(!(k<<24>>24==0|(i|0)!=0)){k=m;do{j=j+1|0;k=k+1|0;w=a[j>>0]|0;i=(d[208+(w&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(i|0)!=0))}if(!i)break b;if(!h){g=59292;break}}}while(0);g=c[g+8>>2]|0;if(!g){c[n>>2]=m;cd(e,36690,n);c[p>>2]=(c[p>>2]|0)+-1;w=1;Ra=v;return w|0}c[o>>2]=0;h=Ai(u,f,g,c[(c[g>>2]|0)+8>>2]|0,o)|0;i=(h|0)==0;g=c[o>>2]|0;if(!i){c[r>>2]=g;cd(e,31408,r);c[e+12>>2]=h}do if(g|0){if(u|0){if(c[u+480>>2]|0){Xd(u,g);break}w=g;if((c[u+304>>2]|0)>>>0<=w>>>0?(c[u+308>>2]|0)>>>0>w>>>0:0){w=u+300|0;c[g>>2]=c[w>>2];c[w>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{w=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[p>>2]=(c[p>>2]|0)+-1;if(i){g=c[q>>2]|0;break}else{w=1;Ra=v;return w|0}}else t=33;while(0);if((t|0)==33)c[p>>2]=i;if(g|0){w=0;Ra=v;return w|0}p=f+42|0;g=b[p>>1]|0;if(g<<16>>16>0){w=0;Ra=v;return w|0}if(g<<16>>16<0){c[s>>2]=c[f>>2];cd(e,41077,s);w=1;Ra=v;return w|0}i=fk(u,c[f+12>>2]|0,0)|0;if(!i)o=1;else{j=e+200|0;k=a[j>>0]|0;a[j>>0]=0;h=e+40|0;w=c[h>>2]|0;Qk(e,c[i+32>>2]|0);b[p>>1]=-1;l=u+272|0;c[l>>2]=(c[l>>2]|0)+1;s=u+312|0;r=c[s>>2]|0;c[s>>2]=0;g=yk(e,i)|0;c[s>>2]=r;c[h>>2]=w;h=c[f+24>>2]|0;do if(!h)if(!g){b[p>>1]=0;g=1;break}else{w=g+42|0;b[p>>1]=b[w>>1]|0;t=g+4|0;c[f+4>>2]=c[t>>2];b[w>>1]=0;c[t>>2]=0;t=50;break}else{Tk(c[e>>2]|0,h,p,f+4|0);if(((a[u+81>>0]|0)==0?(c[e+36>>2]|0)==0:0)?(c[c[i>>2]>>2]|0)==(b[p>>1]|0):0)Uk(e,f,i);if(!g)g=0;else t=50}while(0);do if((t|0)==50){if(c[u+480>>2]|0){Vi(u,g);g=0;break}t=g+32|0;w=(c[t>>2]|0)+-1|0;c[t>>2]=w;if(!w){Vi(u,g);g=0}else g=0}while(0);pi(u,i,1);c[l>>2]=(c[l>>2]|0)+-1;a[j>>0]=k;o=g}w=(c[f+72>>2]|0)+78|0;b[w>>1]=b[w>>1]|2;if(!(a[u+81>>0]|0)){w=o;Ra=v;return w|0}n=f+4|0;g=c[n>>2]|0;do if(g|0){if((b[p>>1]|0)>0){j=u+480|0;k=u+304|0;l=u+308|0;m=u+300|0;i=0;while(1){h=c[g>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(u,h);break}w=h;if((c[k>>2]|0)>>>0<=w>>>0?(c[l>>2]|0)>>>0>w>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[g+4>>2]|0;if(h|0)ni(u,h);h=c[g+8>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(u,h);break}w=h;if((c[k>>2]|0)>>>0<=w>>>0?(c[l>>2]|0)>>>0>w>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;if((i|0)>=(b[p>>1]|0))break;else g=g+16|0}g=c[n>>2]|0}if(g|0){if(u|0){if(c[u+480>>2]|0){Xd(u,g);break}w=g;if((c[u+304>>2]|0)>>>0<=w>>>0?(c[u+308>>2]|0)>>>0>w>>>0:0){w=u+300|0;c[g>>2]=c[w>>2];c[w>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{w=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);c[n>>2]=0;b[p>>1]=0;w=o;Ra=v;return w|0}function Tk(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;R=Ra;Ra=Ra+48|0;P=R+8|0;O=R;N=R+40|0;Q=R+24|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;do if(g){n=c[g>>2]|0;m=n<<4;a:do if(!f){M=Sv(m|0,0,-1,-1)|0;K=L()|0;if(!(K>>>0>0|(K|0)==0&M>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;s=27;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){M=c[14978]|0;K=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;J=L()|0;c[14768]=((J|0)<0|(J|0)==0&K>>>0<=M>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;s=28}else s=28}else M=0}else M=0}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){M=0;break}}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0<m>>>0:0))){k=f+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];s=f+284|0;c[s>>2]=(c[s>>2]|0)+1;s=27;break a}k=f+296|0;j=c[k>>2]|0;if(!j){j=f+292|0;break}else{c[k>>2]=c[j>>2];s=f+284|0;c[s>>2]=(c[s>>2]|0)+1;s=27;break a}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(f,m,0)|0;s=27}while(0);if((s|0)==27)if(!j)M=0;else s=28;if((s|0)==28){gw(j|0,0,m|0)|0;M=j}if((n|0)<32767){b[h>>1]=n;c[i>>2]=M;k=f+81|0;if((n|0)>0)K=k;else{j=M;l=M;s=32;break}}else{b[h>>1]=32767;c[i>>2]=M;n=32767;K=f+81|0}H=(f|0)==0;J=Q+12|0;I=Q+8|0;u=Q+4|0;v=f+272|0;w=f+276|0;x=f+288|0;y=f+300|0;z=f+296|0;A=f+284|0;B=f+292|0;C=f+82|0;D=f+180|0;E=f+264|0;F=f+236|0;t=M;l=0;while(1){if(a[K>>0]|0)break;j=c[g+4+(l*20|0)+4>>2]|0;do if(!j){j=c[g+4+(l*20|0)>>2]|0;b:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break b;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);c:while(1){switch(a[j>>0]|0){case -94:{s=46;break c}case 59:{s=50;break c}case -122:break;default:{s=51;break c}}j=c[j+16>>2]|0}if((s|0)==46){k=b[j+32>>1]|0;m=c[j+44>>2]|0;if(k<<16>>16<0)j=b[m+40>>1]|0;else j=k<<16>>16;if((j|0)<=-1){j=38132;s=53;break}j=(c[m+4>>2]|0)+(j<<4)|0}else if((s|0)==50)j=j+8|0;else if((s|0)==51)j=g+4+(l*20|0)+8|0;j=c[j>>2]|0;if(!j){c[O>>2]=l+1;j=dd(f,41025,O)|0;c[N>>2]=0;if(!j)s=107;else s=78}else s=53}else s=53;while(0);do if((s|0)==53){p=(Eu(j)|0)+1|0;do if(H){s=Sv(p|0,0,-1,-1)|0;r=L()|0;if(!(r>>>0>0|(r|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](p)|0;s=74;break}k=Wa[c[29356>>2]&127](p)|0;if((c[14985]|0)>>>0<p>>>0)c[14985]=p;o=59064;m=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&m>>>0>0){s=c[14978]|0;r=Tv(m|0,o|0,k|0,((k|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){m=Wa[c[29352>>2]&127](k)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;s=75}else s=75}else s=76}else s=76}else{if(!(c[v>>2]|0)){if(!(0<0|(0==0?(e[w>>1]|0)>>>0<p>>>0:0))){k=c[y>>2]|0;if(k|0){c[y>>2]=c[k>>2];c[A>>2]=(c[A>>2]|0)+1;s=74;break}k=c[z>>2]|0;if(!k)k=B;else{c[z>>2]=c[k>>2];c[A>>2]=(c[A>>2]|0)+1;s=74;break}}else k=x;c[k>>2]=(c[k>>2]|0)+1}k=_d(f,p,0)|0;s=74}while(0);if((s|0)==74)if(!k)s=76;else s=75;if((s|0)==75){ew(k|0,j|0,p|0)|0;c[N>>2]=0;j=k;s=78;break}else if((s|0)==76){c[N>>2]=0;s=107;break}}while(0);d:do if((s|0)==78){s=0;while(1){p=c[J>>2]|0;if(!p){m=u;k=I}else{m=a[j>>0]|0;if(!(m<<24>>24))k=0;else{k=0;o=j;do{o=o+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[o>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[Q>>2]|0)>>>0)|0;m=p+(k<<3)|0;k=p+(k<<3)+4|0}m=c[m>>2]|0;e:do if(!m)k=59292;else{r=d[208+(d[j>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;p=c[k+12>>2]|0;q=a[p>>0]|0;o=(d[208+(q&255)>>0]|0)-r|0;if(!(q<<24>>24==0|(o|0)!=0)){q=j;do{p=p+1|0;q=q+1|0;S=a[p>>0]|0;o=(d[208+(S&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(o|0)!=0))}if(!o)break e;if(!m){k=59292;break}}}while(0);if(!(c[k+8>>2]|0))break;S=Eu(j)|0;k=S&1073741823;f:do switch(S&1073741823|0){case 0:break;case 1:{m=0;s=96;break}default:{o=k+-1|0;while(1){if(((d[j+o>>0]|0)+-48|0)>>>0>=10){m=o;s=96;break f}m=o+-1|0;if((o|0)>1)o=m;else{s=96;break}}}}while(0);if((s|0)==96){s=0;k=(a[j+m>>0]|0)==58?m:k}S=(c[N>>2]|0)+1|0;c[N>>2]=S;c[P>>2]=k;c[P+4>>2]=j;c[P+8>>2]=S;j=dd(f,41034,P)|0;if((c[N>>2]|0)>>>0>3)Fb(4,N);if(!j){s=107;break d}}c[t>>2]=j;if(((mi(Q,j,t)|0)==(t|0)?(a[K>>0]|0)==0:0)?(a[C>>0]|0)==0:0){a[K>>0]=1;if((c[D>>2]|0)>0)c[E>>2]=1;c[v>>2]=(c[v>>2]|0)+1;j=c[F>>2]|0;if(j|0)c[j+12>>2]=7}}while(0);if((s|0)==107){s=0;c[t>>2]=0}l=l+1|0;if((l|0)<(n|0))t=t+16|0;else break}j=c[I>>2]|0;k=c[J>>2]|0;c[I>>2]=0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[J>>2]=0;c[Q>>2]=0;if(!j){r=M;q=l;j=K;l=M}else{do{k=j;j=c[j>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((j|0)!=0);r=M;q=l;j=K;l=M}}else{b[h>>1]=0;c[i>>2]=0;j=0;k=f+81|0;l=0;s=32}while(0);if((s|0)==32){c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q>>2]=0;r=j;q=0;j=k}c[Q+4>>2]=0;if(!(a[j>>0]|0)){Ra=R;return}g:do if(q|0){k=f+480|0;m=f+304|0;n=f+308|0;o=f+300|0;if(!f){j=0;while(1){k=c[r+(j<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);j=j+1|0;if((j|0)==(q|0))break g}}j=0;do{p=c[r+(j<<4)>>2]|0;do if(p|0){if(c[k>>2]|0){Xd(f,p);break}S=p;if((c[m>>2]|0)>>>0<=S>>>0?(c[n>>2]|0)>>>0>S>>>0:0){c[p>>2]=c[o>>2];c[o>>2]=p;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{S=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);j=j+1|0}while((j|0)!=(q|0))}while(0);do if(l|0){if(f|0){if(c[f+480>>2]|0){Xd(f,l);break}S=l;if((c[f+304>>2]|0)>>>0<=S>>>0?(c[f+308>>2]|0)>>>0>S>>>0:0){S=f+300|0;c[l>>2]=c[S>>2];c[S>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{S=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[i>>2]=0;b[h>>1]=0;Ra=R;return}function Uk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+32|0;F=I;G=c[d>>2]|0;H=G+81|0;if(a[H>>0]|0){Ra=I;return};c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[F+12>>2]=0;c[F+16>>2]=0;c[F+20>>2]=0;c[F+24>>2]=0;c[F+28>>2]=0;c[F+4>>2]=c[g+32>>2];r=c[g>>2]|0;s=f+42|0;if((b[s>>1]|0)>0){t=G+272|0;u=G+304|0;v=G+276|0;w=G+308|0;x=G+288|0;y=G+300|0;z=G+480|0;A=(G|0)==0;B=G+296|0;C=G+284|0;D=G+292|0;p=0;q=c[f+4>>2]|0;while(1){m=c[r+4+(p*20|0)>>2]|0;l=Vk(F,m)|0;g=Xj(m)|0;n=q+13|0;a[n>>0]=g;if(l){k=(Eu(l)|0)&1073741823;h=c[q>>2]|0;a:do if(!h){h=k+2|0;do if(c[t>>2]|0)if(!(a[H>>0]|0))o=15;else{c[q>>2]=0;break a}else{if(!(0<0|(0==0?(e[v>>1]|0)>>>0<h>>>0:0))){g=c[y>>2]|0;if(g|0){c[y>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;break}g=c[B>>2]|0;if(!g)g=D;else{c[B>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;break}}else g=x;c[g>>2]=(c[g>>2]|0)+1;o=15}while(0);if((o|0)==15){o=0;g=_d(G,h,0)|0}c[q>>2]=g;if(g|0){g=g+1|0;o=32}}else{i=(Eu(h)|0)&1073741823;g=k+2+i|0;j=h;if(((c[u>>2]|0)>>>0<=j>>>0?(c[w>>2]|0)>>>0>j>>>0:0)?!(0<0|(0==0?(e[v>>1]|0)>>>0<g>>>0:0)):0){g=h+(i+1)|0;o=32;break}g=Zd(G,h,g,0)|0;if(g|0){c[q>>2]=g;g=g+(i+1)|0;o=32;break}do if(!(c[z>>2]|0)){if((c[u>>2]|0)>>>0<=j>>>0?(c[w>>2]|0)>>>0>j>>>0:0){c[h>>2]=c[y>>2];c[y>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(G,h);while(0);c[q>>2]=0}while(0);if((o|0)==32){o=0;j=q+15|0;ew(g|0,l|0,k+1|0)|0;a[j>>0]=a[j>>0]|4}g=a[n>>0]|0}if(!(g<<24>>24))a[n>>0]=65;g=Yi(d,m)|0;if(g|0?(E=q+8|0,(c[E>>2]|0)==0):0){j=c[g>>2]|0;b:do if(!j)g=0;else{k=(Eu(j)|0)+1|0;do if(A){n=Sv(k|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&n>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](k)|0;o=61;break}g=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){n=c[14978]|0;m=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[t>>2]|0){if(a[H>>0]|0){g=0;break b}}else{if(!(0<0|(0==0?(e[v>>1]|0)>>>0<k>>>0:0))){g=c[y>>2]|0;if(g|0){c[y>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;o=61;break}g=c[B>>2]|0;if(!g)g=D;else{c[B>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;o=61;break}}else g=x;c[g>>2]=(c[g>>2]|0)+1}g=_d(G,k,0)|0;o=61}while(0);if((o|0)==61){o=0;if(!g){g=0;break}}ew(g|0,j|0,k|0)|0}while(0);c[E>>2]=g}p=p+1|0;if((p|0)>=(b[s>>1]|0))break;else q=q+16|0}}b[f+46>>1]=1;Ra=I;return}function Vk(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;m=o;switch(a[e>>0]|0){case -94:{k=b[e+32>>1]|0;n=k<<16>>16;if(!d){n=0;Ra=o;return n|0}j=e+28|0;f=0;do{i=c[d+4>>2]|0;g=c[i>>2]|0;a:do if((g|0)>0){h=c[j>>2]|0;e=0;while(1){if((c[i+8+(e*72|0)+40>>2]|0)==(h|0))break;e=e+1|0;if((e|0)>=(g|0)){l=9;break a}}g=c[i+8+(e*72|0)+16>>2]|0;f=c[i+8+(e*72|0)+20>>2]|0}else l=9;while(0);if((l|0)==9){l=0;d=c[d+12>>2]|0;g=0}e=(g|0)==0}while(e&(d|0)!=0);if(e){n=0;Ra=o;return n|0}if(!f){if(k<<16>>16<0){n=31453;Ra=o;return n|0}e=c[g+4>>2]|0;if(!(a[e+(n<<4)+15>>0]&4)){n=0;Ra=o;return n|0}n=c[e+(n<<4)>>2]|0;n=n+(Eu(n)|0)+1|0;Ra=o;return n|0}else{if(k<<16>>16<=-1){n=0;Ra=o;return n|0}e=c[f>>2]|0;if((c[e>>2]|0)<=(n|0)){n=0;Ra=o;return n|0}n=c[e+4+(n*20|0)>>2]|0;c[m+4>>2]=c[f+32>>2];c[m+12>>2]=d;c[m>>2]=c[d>>2];n=Vk(m,n)|0;Ra=o;return n|0}}case -125:{l=c[e+20>>2]|0;n=c[(c[l>>2]|0)+4>>2]|0;c[m+4>>2]=c[l+32>>2];c[m+12>>2]=d;c[m>>2]=c[d>>2];n=Vk(m,n)|0;Ra=o;return n|0}default:{n=0;Ra=o;return n|0}}return 0}function Wk(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!d)return;j=e&65535;do{g=d+4|0;c[g>>2]=c[g>>2]|1;b[d+36>>1]=j;if(((a[d>>0]|0)==-95?(h=d+20|0,i=c[h>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){f=0;g=i;do{Wk(c[g+4+(f*20|0)>>2]|0,e);f=f+1|0;g=c[h>>2]|0}while((f|0)<(c[g>>2]|0))}Wk(c[d+12>>2]|0,e);d=c[d+16>>2]|0}while((d|0)!=0);return}function Xk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;h=m;if(!f){l=g;Ra=m;return l|0}if(!g){l=f;Ra=m;return l|0}c[h>>2]=0;l=f+4|0;if((c[l>>2]&1|0)==0?(uk(f,h)|0)!=0:0)if(!(c[h>>2]|0)){ni(d,f);ni(d,g)}else j=7;else j=7;do if((j|0)==7){c[h>>2]=0;k=g+4|0;if((c[k>>2]&1|0)==0?(uk(g,h)|0)!=0:0){if(!(c[h>>2]|0)){ni(d,f);ni(d,g);break}}else j=9;a:do if(c[d+272>>2]|0){if(!(a[d+81>>0]|0))j=24}else{do if((e[d+276>>1]|0)>=52){h=d+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=d+284|0;c[j>>2]=(c[j>>2]|0)+1;j=25;break a}h=d+296|0;i=c[h>>2]|0;if(!i){h=d+292|0;break}else{c[h>>2]=c[i>>2];j=d+284|0;c[j>>2]=(c[j>>2]|0)+1;j=25;break a}}else h=d+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=24}while(0);if((j|0)==24){i=_d(d,52,0)|0;j=25}if((j|0)==25?i|0:0){h=i;j=h+52|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));a[i>>0]=44;b[i+34>>1]=-1;c[i+24>>2]=1;c[i+16>>2]=g;k=c[k>>2]&2097412;g=i+4|0;c[g>>2]=k;c[i+12>>2]=f;c[g>>2]=k|c[l>>2]&2097412;Ym(i);l=i;Ra=m;return l|0}ni(d,f);ni(d,g);l=0;Ra=m;return l|0}while(0);l=oj(d,147,17136,0)|0;Ra=m;return l|0}function Yk(a,b){a=a|0;b=b|0;return 0}function Zk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=b+8|0;e=c[d>>2]|0;if(e&128|0)return;c[d>>2]=e|128;h=c[a>>2]|0;g=c[b+32>>2]|0;a=c[g>>2]|0;if((a|0)<=0)return;b=0;f=g+8|0;while(1){e=c[f+16>>2]|0;if((c[e+36>>2]&2|0)!=0?(i=c[f+20>>2]|0,(i|0)!=0):0){a=i;while(1){d=c[a+52>>2]|0;if(!d)break;else a=d}Uk(h,e,a);a=c[g>>2]|0}b=b+1|0;if((b|0)>=(a|0))break;else f=f+72|0}return}function _k(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!(c[b+4>>2]&16777216))return 0;a=(c[a+24>>2]|0)+68|0;e=c[a>>2]|0;if(!e)return 0;f=c[b+44>>2]|0;d=a;b=e;while(1){a=b+32|0;if((b|0)==(f|0))break;b=c[a>>2]|0;if(!b){g=7;break}else d=a}if((g|0)==7)return 0;c[d>>2]=c[a>>2];return 0}function $k(a,b){a=a|0;b=b|0;var d=0;a=c[(c[a>>2]|0)+272>>2]|0;if(!a)return 0;while(1){if((c[a>>2]|0)==(b|0))break;a=c[a+12>>2]|0;if(!a){d=6;break}}if((d|0)==6)return 0;c[a>>2]=0;return 0}function al(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+16|0;q=r;if(!e){q=0;Ra=r;return q|0}m=c[b+12>>2]|0;if((c[e>>2]|0)<=0){q=0;Ra=r;return q|0}n=b+8|0;p=b+4|0;k=0;l=e+8|0;a:while(1){if(!(c[n>>2]|0)){i=l+4|0;j=c[i>>2]|0;do if(j|0){h=a[j>>0]|0;f=(d[208+(h&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(h<<24>>24==0|(f|0)!=0)){g=m;h=j;do{h=h+1|0;g=g+1|0;s=a[h>>0]|0;f=(d[208+(s&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(f|0)!=0))}h=c[b>>2]|0;if(f|0){g=10;break a}f=c[h>>2]|0;if(f|0){if(c[f+480>>2]|0){Xd(f,j);break}s=j;if((c[f+304>>2]|0)>>>0<=s>>>0?(c[f+308>>2]|0)>>>0>s>>>0:0){s=f+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[i>>2]=0;c[l>>2]=c[p>>2]}if(cl(b,c[l+20>>2]|0)|0){f=1;g=30;break}if(dl(b,c[l+44>>2]|0)|0){f=1;g=30;break}if((a[l+37>>0]&4?(o=c[l+64>>2]|0,o|0):0)?(c[o>>2]|0)>0:0){f=o+4|0;g=0;while(1){if(dl(b,c[f>>2]|0)|0){f=1;g=30;break a}g=g+1|0;if((g|0)>=(c[o>>2]|0))break;else f=f+20|0}}k=k+1|0;if((k|0)>=(c[e>>2]|0)){f=0;g=30;break}else l=l+72|0}if((g|0)==10){s=c[b+20>>2]|0;c[q>>2]=c[b+16>>2];c[q+4>>2]=s;c[q+8>>2]=j;cd(h,42344,q);s=1;Ra=r;return s|0}else if((g|0)==30){Ra=r;return f|0}return 0}function bl(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+16|0;n=A+8|0;m=A;s=A+12|0;q=c[f+12>>2]|0;p=d+40|0;y=c[p>>2]|0;z=y+1|0;c[p>>2]=y+2;k=c[d>>2]|0;i=c[f+24>>2]|0;j=c[k+16>>2]|0;if(!i)t=-1e6;else{h=0;while(1)if((c[j+(h<<4)+12>>2]|0)==(i|0)){t=h;break}else h=h+1|0}i=c[f>>2]|0;h=c[j+(t<<4)>>2]|0;do if(((a[k+165>>0]|0)==0?(a[d+200>>0]|0)==0:0)?(l=c[k+312>>2]|0,l|0):0){h=$a[l&127](c[k+316>>2]|0,27,i,0,h,c[d+240>>2]|0)|0;if((h|0)==1){cd(d,39216,m);c[d+12>>2]=23;Ra=A;return}if((h|2|0)==2){if(!h)break;Ra=A;return}else{cd(d,39231,n);c[d+12>>2]=1;Ra=A;return}}while(0);Hj(d,t,c[q+28>>2]|0,1,c[q>>2]|0);n=d+8|0;h=c[n>>2]|0;if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;a:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))o=26;else{Ra=A;return}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break a}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break a}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;o=26}while(0);if((o|0)==26)j=_d(k,224,0)|0;if(!j){Ra=A;return}h=j+104|0;i=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=k;h=k+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;c[j+8>>2]=i;c[j+4>>2]=0;c[h>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=d;c[n>>2]=j;Di(j,61,0,1,0)|0;w=j}else w=h;if((g|0)>-1)l=g;else l=c[f+44>>2]|0;o=Ij(d,f)|0;x=c[p>>2]|0;c[p>>2]=x+1;r=f+50|0;i=e[r>>1]|0;m=(o|0)==0;if(!m)c[o>>2]=(c[o>>2]|0)+1;u=w+108|0;h=c[u>>2]|0;v=w+112|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;p=c[w+104>>2]|0;a[p+(h*20|0)>>0]=114;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=x;c[p+(h*20|0)+8>>2]=0;c[p+(h*20|0)+12>>2]=i;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0}else h=Di(w,114,x,0,i)|0;i=c[w>>2]|0;do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[u>>2]|0)+-1|0;i=c[w+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(w,i+(h*20|0)|0,o,-9);break}if(!m){c[i+(h*20|0)+16>>2]=o;a[j>>0]=-9}}else if(!(m|(c[i+480>>2]|0)!=0)?(p=(c[o>>2]|0)+-1|0,c[o>>2]=p,(p|0)==0):0){h=c[o+12>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,o);break}p=o;if((c[h+304>>2]|0)>>>0<=p>>>0?(c[h+308>>2]|0)>>>0>p>>>0:0){p=h+300|0;c[o>>2]=c[p>>2];c[p>>2]=o;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{p=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);Gj(d,y,t,q,108);h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;q=c[w+104>>2]|0;a[q+(h*20|0)>>0]=36;b[q+(h*20|0)+2>>1]=0;c[q+(h*20|0)+4>>2]=y;c[q+(h*20|0)+8>>2]=0;c[q+(h*20|0)+12>>2]=0;c[q+(h*20|0)+16>>2]=0;a[q+(h*20|0)+1>>0]=0}else h=Di(w,36,y,0,0)|0;q=d+19|0;i=a[q>>0]|0;if(!(i<<24>>24)){k=d+44|0;p=(c[k>>2]|0)+1|0;c[k>>2]=p}else{p=i+-1<<24>>24;a[q>>0]=p;p=c[d+148+((p&255)<<2)>>2]|0}i=c[d+116>>2]|0;a[((i|0)==0?d:i)+20>>0]=1;el(d,f,y,p,0,s,0,0)|0;i=c[u>>2]|0;if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;k=c[w+104>>2]|0;a[k+(i*20|0)>>0]=-125;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=x;c[k+(i*20|0)+8>>2]=p;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else Di(w,131,x,p,0)|0;i=c[s>>2]|0;do if(i|0){j=c[n>>2]|0;k=c[j+12>>2]|0;i=~i;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,j,i);break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[j+108>>2];break}}while(0);i=h+1|0;j=c[u>>2]|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;s=c[w+104>>2]|0;a[s+(j*20|0)>>0]=5;b[s+(j*20|0)+2>>1]=0;c[s+(j*20|0)+4>>2]=y;c[s+(j*20|0)+8>>2]=i;c[s+(j*20|0)+12>>2]=0;c[s+(j*20|0)+16>>2]=0;a[s+(j*20|0)+1>>0]=0}else Di(w,5,y,i,0)|0;i=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))h=(c[w+104>>2]|0)+(((h|0)<0?i+-1|0:h)*20|0)|0;else h=59308;c[h+8>>2]=i;do if((g|0)<0)if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;s=c[w+104>>2]|0;a[s+(i*20|0)>>0]=-119;b[s+(i*20|0)+2>>1]=0;c[s+(i*20|0)+4>>2]=l;c[s+(i*20|0)+8>>2]=t;c[s+(i*20|0)+12>>2]=0;c[s+(i*20|0)+16>>2]=0;a[s+(i*20|0)+1>>0]=0;break}else{Di(w,137,l,t,0)|0;break}while(0);h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;s=c[w+104>>2]|0;a[s+(h*20|0)>>0]=109;b[s+(h*20|0)+2>>1]=0;c[s+(h*20|0)+4>>2]=z;c[s+(h*20|0)+8>>2]=l;c[s+(h*20|0)+12>>2]=t;c[s+(h*20|0)+16>>2]=0;a[s+(h*20|0)+1>>0]=0}else h=Di(w,109,z,l,t)|0;i=c[w>>2]|0;b:do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[u>>2]|0)+-1|0;i=c[w+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(w,i+(h*20|0)|0,o,-9);break}if(!m){c[i+(h*20|0)+16>>2]=o;a[j>>0]=-9}}else if(!(m|(c[i+480>>2]|0)!=0)?(t=(c[o>>2]|0)+-1|0,c[o>>2]=t,(t|0)==0):0){h=c[o+12>>2]|0;do if(h|0){if(c[h+480>>2]|0){Xd(h,o);break b}i=o;if((c[h+304>>2]|0)>>>0>i>>>0)break;if((c[h+308>>2]|0)>>>0<=i>>>0)break;t=h+300|0;c[o>>2]=c[t>>2];c[t>>2]=o;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);h=c[u>>2]|0;if((h|0)>0)b[(c[w+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=(g>>31)+16&65520|1;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;l=c[w+104>>2]|0;a[l+(h*20|0)>>0]=34;b[l+(h*20|0)+2>>1]=0;c[l+(h*20|0)+4>>2]=x;c[l+(h*20|0)+8>>2]=0;c[l+(h*20|0)+12>>2]=0;c[l+(h*20|0)+16>>2]=0;a[l+(h*20|0)+1>>0]=0;l=h}else l=Di(w,34,x,0,0)|0;h=c[u>>2]|0;if(!(a[f+54>>0]|0))k=h;else{if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;j=c[w+104>>2]|0;a[j+(h*20|0)>>0]=11;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=0;c[j+(h*20|0)+8>>2]=1;c[j+(h*20|0)+12>>2]=0;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0;j=h}else j=Di(w,11,0,1,0)|0;k=c[u>>2]|0;i=e[r>>1]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;h=c[w+104>>2]|0;a[h+(k*20|0)>>0]=125;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=x;c[h+(k*20|0)+8>>2]=j;c[h+(k*20|0)+12>>2]=p;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0;h=k}else h=Di(w,125,x,j,p)|0;if(!(a[(c[w>>2]|0)+81>>0]|0)){g=c[w+104>>2]|0;a[g+(h*20|0)+1>>0]=-3;c[g+(h*20|0)+16>>2]=i}fl(d,2,f);h=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))i=(c[w+104>>2]|0)+(((j|0)<0?h+-1|0:j)*20|0)|0;else i=59308;c[i+8>>2]=h}if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=126;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=x;c[f+(h*20|0)+8>>2]=p;c[f+(h*20|0)+12>>2]=z;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,126,x,p,z)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=-126;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=z;c[f+(h*20|0)+8>>2]=0;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,130,z,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=-124;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=z;c[f+(h*20|0)+8>>2]=p;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,132,z,p,0)|0;h=c[u>>2]|0;if((h|0)>0)b[(c[w+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=16;do if(p){i=a[q>>0]|0;if((i&255)>=8)break;a[q>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=p;h=c[u>>2]|0}while(0);if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;d=c[w+104>>2]|0;a[d+(h*20|0)>>0]=3;b[d+(h*20|0)+2>>1]=0;c[d+(h*20|0)+4>>2]=x;c[d+(h*20|0)+8>>2]=k;c[d+(h*20|0)+12>>2]=0;c[d+(h*20|0)+16>>2]=0;a[d+(h*20|0)+1>>0]=0}else Di(w,3,x,k,0)|0;i=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))h=(c[w+104>>2]|0)+(((l|0)<0?i+-1|0:l)*20|0)|0;else h=59308;c[h+8>>2]=i;if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;d=c[w+104>>2]|0;a[d+(i*20|0)>>0]=117;b[d+(i*20|0)+2>>1]=0;c[d+(i*20|0)+4>>2]=y;c[d+(i*20|0)+8>>2]=0;c[d+(i*20|0)+12>>2]=0;c[d+(i*20|0)+16>>2]=0;a[d+(i*20|0)+1>>0]=0}else Di(w,117,y,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;y=c[w+104>>2]|0;a[y+(h*20|0)>>0]=117;b[y+(h*20|0)+2>>1]=0;c[y+(h*20|0)+4>>2]=z;c[y+(h*20|0)+8>>2]=0;c[y+(h*20|0)+12>>2]=0;c[y+(h*20|0)+16>>2]=0;a[y+(h*20|0)+1>>0]=0}else Di(w,117,z,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;z=c[w+104>>2]|0;a[z+(h*20|0)>>0]=117;b[z+(h*20|0)+2>>1]=0;c[z+(h*20|0)+4>>2]=x;c[z+(h*20|0)+8>>2]=0;c[z+(h*20|0)+12>>2]=0;c[z+(h*20|0)+16>>2]=0;a[z+(h*20|0)+1>>0]=0;Ra=A;return}else{Di(w,117,x,0,0)|0;Ra=A;return}}function cl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!b){a=0;return a|0}a:while(1){f=c[b>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(al(a,c[b+32>>2]|0)|0){b=1;d=28;break}if(dl(a,c[b+36>>2]|0)|0){b=1;d=28;break}f=c[b+40>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(dl(a,c[b+44>>2]|0)|0){b=1;d=28;break}f=c[b+48>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(dl(a,c[b+60>>2]|0)|0){b=1;d=28;break}f=b+64|0;d=c[f>>2]|0;if(d|0?(c[d>>2]|0)>0:0){e=0;do{if(cl(a,c[d+8+(e<<4)+8>>2]|0)|0){b=1;d=28;break a}e=e+1|0;d=c[f>>2]|0}while((e|0)<(c[d>>2]|0))}b=c[b+52>>2]|0;if(!b){b=0;d=28;break}}if((d|0)==28)return b|0;return 0}function dl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+16|0;h=i;if(!d){h=0;Ra=i;return h|0}a:while(1){if((a[d>>0]|0)==-108){e=c[b>>2]|0;if(!(a[(c[e>>2]|0)+165>>0]|0)){f=6;break}a[d>>0]=114}e=c[d+4>>2]|0;if(e&8404992|0){d=0;f=17;break}f=d+20|0;if(!(e&2048)){g=c[f>>2]|0;if(g|0?(c[g>>2]|0)>0:0){e=g+4|0;f=0;while(1){if(dl(b,c[e>>2]|0)|0){d=1;f=17;break a}f=f+1|0;if((f|0)>=(c[g>>2]|0))break;else e=e+20|0}}}else if(cl(b,c[f>>2]|0)|0){d=1;f=17;break}if(dl(b,c[d+16>>2]|0)|0){d=1;f=17;break}d=c[d+12>>2]|0;if(!d){d=0;f=17;break}}if((f|0)==6){c[h>>2]=c[b+16>>2];cd(e,42390,h);h=1;Ra=i;return h|0}else if((f|0)==17){Ra=i;return d|0}return 0}function el(e,f,g,h,i,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;I=e+8|0;K=c[I>>2]|0;if(j|0){n=c[f+36>>2]|0;if(n){o=e+56|0;m=(c[o>>2]|0)+-1|0;c[o>>2]=m;c[j>>2]=m;m=e+52|0;c[m>>2]=g+1;o=c[j>>2]|0;p=c[e>>2]|0;j=dk(p,n,0,0)|0;if(!(a[p+81>>0]|0))Tj(e,j,o,16);if(j)ni(p,j)}else m=j;c[m>>2]=0}if((i|0)!=0?(C=f+55|0,((d[C>>0]|d[C+1>>0]<<8)&8)!=0):0)m=f+50|0;else m=f+52|0;p=b[m>>1]|0;C=p&65535;B=p<<16>>16==1;do if(B){m=e+19|0;j=a[m>>0]|0;if(!(j<<24>>24)){y=e+44|0;z=(c[y>>2]|0)+1|0;c[y>>2]=z;break}else{z=j+-1<<24>>24;a[m>>0]=z;z=c[e+148+((z&255)<<2)>>2]|0;break}}else{m=e+32|0;j=c[m>>2]|0;n=e+28|0;o=c[n>>2]|0;if((o|0)<(C|0)){y=e+44|0;z=c[y>>2]|0;c[y>>2]=z+C;z=z+1|0;break}else{c[m>>2]=j+C;c[n>>2]=o-C;z=j;break}}while(0);do if(!k)m=0;else{if((z|0)==(l|0)?(c[k+36>>2]|0)==0:0){m=k;break}m=0}while(0);if(p<<16>>16){x=(m|0)==0;y=f+4|0;q=m+4|0;r=g+1|0;s=e+52|0;t=f+40|0;u=K+108|0;v=f+12|0;w=K+104|0;l=0;do{if(!x){k=b[(c[q>>2]|0)+(l<<1)>>1]|0;m=b[(c[y>>2]|0)+(l<<1)>>1]|0;if(k<<16>>16==-2?1:k<<16>>16!=m<<16>>16)A=28}else{m=b[(c[y>>2]|0)+(l<<1)>>1]|0;A=28}if((A|0)==28){A=0;k=l+z|0;if(m<<16>>16==-2){c[s>>2]=r;m=c[(c[t>>2]|0)+4+(l*20|0)>>2]|0;i=c[e>>2]|0;if(!m)p=0;else p=dk(i,m,0,0)|0;a:do if(!(a[i+81>>0]|0)){do if(p){if((a[p>>0]|0)!=-88){n=Jj(e,p,k)|0;break}m=c[I>>2]|0;j=c[p+28>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;A=c[m+104>>2]|0;a[A+(o*20|0)>>0]=78;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=j;c[A+(o*20|0)+8>>2]=k;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0;A=45;break a}else{Di(m,78,j,k,0)|0;A=45;break a}}else n=Jj(e,0,k)|0;while(0);if((n|0)!=(k|0)?(D=c[I>>2]|0,(D|0)!=0):0){m=D+108|0;j=c[m>>2]|0;if((c[D+112>>2]|0)>(j|0)){c[m>>2]=j+1;A=c[D+104>>2]|0;a[A+(j*20|0)>>0]=79;b[A+(j*20|0)+2>>1]=0;c[A+(j*20|0)+4>>2]=n;c[A+(j*20|0)+8>>2]=k;c[A+(j*20|0)+12>>2]=0;c[A+(j*20|0)+16>>2]=0;a[A+(j*20|0)+1>>0]=0;A=44;break}else{Di(D,79,n,k,0)|0;A=44;break}}else A=44}else A=44;while(0);if((A|0)==44?(A=0,p|0):0)A=45;if((A|0)==45){A=0;ni(i,p)}c[s>>2]=0}else Vj(c[I>>2]|0,c[v>>2]|0,g,m<<16>>16,k);m=c[u>>2]|0;if(((m|0)>0?(E=c[w>>2]|0,F=m+-1|0,G=E+(F*20|0)|0,(a[G>>0]|0)==84):0)?(H=c[K>>2]|0,(a[H+81>>0]|0)==0):0){i=E+(F*20|0)+1|0;k=E+(F*20|0)+16|0;kg(H,a[i>>0]|0,c[k>>2]|0);a[i>>0]=0;c[k>>2]=0;a[G>>0]=-86}}l=l+1|0}while((l|0)!=(C|0))}if(h|0){m=K+108|0;j=c[m>>2]|0;if((c[K+112>>2]|0)>(j|0)){c[m>>2]=j+1;I=c[K+104>>2]|0;a[I+(j*20|0)>>0]=92;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=z;c[I+(j*20|0)+8>>2]=C;c[I+(j*20|0)+12>>2]=h;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else Di(K,92,z,C,h)|0;if(c[(c[f+12>>2]|0)+12>>2]|0?(J=gl(c[e>>2]|0,f)|0,(a[(c[K>>2]|0)+81>>0]|0)==0):0)Ei(K,(c[K+104>>2]|0)+(((c[m>>2]|0)+-1|0)*20|0)|0,J,0)}if(!B){m=e+28|0;if((c[m>>2]|0)>=(C|0))return z|0;c[m>>2]=C;c[e+32>>2]=z;return z|0}if(!z)return z|0;m=e+19|0;j=a[m>>0]|0;if((j&255)>=8)return z|0;a[m>>0]=j+1<<24>>24;c[e+148+((j&255)<<2)>>2]=z;return z|0}function fl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;i=y;w=y+8|0;s=c[h+12>>2]|0;r=c[f>>2]|0;u=c[r+108>>2]|0;x=w+4|0;c[x>>2]=0;c[w>>2]=r;r=w+8|0;c[r>>2]=0;t=w+12|0;c[t>>2]=u;u=w+16|0;c[u>>2]=0;a[w+20>>0]=0;v=w+21|0;a[v>>0]=0;if(!(c[h+40>>2]|0)){n=h+50|0;if(b[n>>1]|0){o=s+4|0;p=h+4|0;m=0;do{q=c[(c[o>>2]|0)+(b[(c[p>>2]|0)+(m<<1)>>1]<<4)>>2]|0;do if(m|0){i=c[u>>2]|0;j=i+2|0;if(j>>>0<(c[r>>2]|0)>>>0){c[u>>2]=j;l=(c[x>>2]|0)+i|0;a[l>>0]=44;a[l+1>>0]=32;break}else{wb(w,42425,2);break}}while(0);j=c[s>>2]|0;if(!j)i=0;else i=(Eu(j)|0)&1073741823;k=c[u>>2]|0;l=k+i|0;if(l>>>0<(c[r>>2]|0)>>>0){if(i|0){c[u>>2]=l;ew((c[x>>2]|0)+k|0,j|0,i|0)|0}}else wb(w,j,i);i=c[u>>2]|0;j=i+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[u>>2]=j;a[(c[x>>2]|0)+i>>0]=46}else wb(w,31183,1);if(!q)i=0;else i=(Eu(q)|0)&1073741823;j=c[u>>2]|0;k=j+i|0;if(k>>>0<(c[r>>2]|0)>>>0){if(i|0){c[u>>2]=k;ew((c[x>>2]|0)+j|0,q|0,i|0)|0}}else wb(w,q,i);m=m+1|0}while(m>>>0<(e[n>>1]|0)>>>0)}}else{c[i>>2]=c[h>>2];Eb(w,42414,i)}i=c[x>>2]|0;if((i|0?(a[i+(c[u>>2]|0)>>0]=0,c[t>>2]|0):0)?(a[v>>0]&4)==0:0){x=$d(w)|0;w=h+55|0;w=d[w>>0]|d[w+1>>0]<<8;w=w&3;w=w<<16>>16==2;w=w?1555:2067;Uj(f,w,g,x,-7,2);Ra=y;return}x=c[x>>2]|0;w=h+55|0;w=d[w>>0]|d[w+1>>0]<<8;w=w&3;w=w<<16>>16==2;w=w?1555:2067;Uj(f,w,g,x,-7,2);Ra=y;return}function gl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=f+16|0;g=c[m>>2]|0;if(g|0){m=g;return m|0}k=c[f+12>>2]|0;l=f+52|0;h=e[l>>1]|0;g=h+1|0;do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](g)|0;c[m>>2]=g;if(!g)h=15;else h=21}else{i=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<=h>>>0)c[14985]=g;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){j=c[14978]|0;h=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=j>>>0)&1}g=Wa[c[29340>>2]&127](i)|0;if(!g){c[m>>2]=0;h=15;break}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h;c[m>>2]=g;h=21}while(0);if((h|0)==15){g=d+81|0;if(a[g>>0]|0){m=0;return m|0}if(a[d+82>>0]|0){m=0;return m|0}a[g>>0]=1;if((c[d+180>>2]|0)>0)c[d+264>>2]=1;g=d+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[d+236>>2]|0;if(!g){m=0;return m|0}c[g+12>>2]=7;m=0;return m|0}else if((h|0)==21){if(!(b[l>>1]|0))h=0;else{j=f+4|0;d=k+4|0;i=f+40|0;h=0;do{g=b[(c[j>>2]|0)+(h<<1)>>1]|0;if(g<<16>>16<=-1)if(g<<16>>16==-1)g=68;else{g=Xj(c[(c[i>>2]|0)+4+(h*20|0)>>2]|0)|0;g=g<<24>>24==0?65:g}else g=a[(c[d>>2]|0)+(g<<16>>16<<4)+13>>0]|0;a[(c[m>>2]|0)+h>>0]=g;h=h+1|0}while(h>>>0<(e[l>>1]|0)>>>0);g=c[m>>2]|0}a[g+h>>0]=0;m=c[m>>2]|0;return m|0}return 0}function hl(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=c[b>>2]|0;l=g+20|0;f=c[l>>2]|0;if((f|0)<=0)return;k=g+16|0;if(!e){g=0;do{if(c[(c[k>>2]|0)+(g<<4)+4>>2]|0){rk(b,g);f=c[l>>2]|0}g=g+1|0}while((g|0)<(f|0));return}j=0;do{g=c[k>>2]|0;if(c[g+(j<<4)+4>>2]|0){h=c[g+(j<<4)>>2]|0;i=a[e>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=e;do{i=i+1|0;h=h+1|0;m=a[i>>0]|0;g=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(g|0)!=0))}if(!g){rk(b,j);f=c[l>>2]|0}}j=j+1|0}while((j|0)<(f|0));return}function il(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+32|0;y=E+16|0;x=E+8|0;o=E;m=E+28|0;C=c[f>>2]|0;D=C+16|0;v=c[D>>2]|0;B=f+8|0;j=c[B>>2]|0;A=f+116|0;a:do if(!j){if((c[A>>2]|0)==0?(b[C+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[C+272>>2]|0)if(!(a[C+81>>0]|0))w=15;else{z=0;break a}else{do if((e[C+276>>1]|0)>=224){j=C+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];z=C+284|0;c[z>>2]=(c[z>>2]|0)+1;break b}j=C+296|0;k=c[j>>2]|0;if(!k){j=C+292|0;break}else{c[j>>2]=c[k>>2];z=C+284|0;c[z>>2]=(c[z>>2]|0)+1;break b}}else j=C+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;w=15}while(0);if((w|0)==15)k=_d(C,224,0)|0;if(!k)z=0;else{j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=C;j=C+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[B>>2]=k;Di(k,61,0,1,0)|0;z=k}}else z=j;while(0);q=c[A>>2]|0;q=(q|0)==0?f:q;j=q+84|0;k=c[j>>2]|0;p=1<<h;do if((((k&p|0)==0?(c[j>>2]=k|p,(h|0)==1):0)?(t=c[q>>2]|0,n=t+16|0,(c[(c[n>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){j=Pe(c[t>>2]|0,0,t,m,0,542)|0;if(j|0){cd(q,32157,o);c[q+12>>2]=j;break}o=c[m>>2]|0;c[(c[n>>2]|0)+20>>2]=o;j=c[t+92>>2]|0;l=c[o+4>>2]|0;c[l+4>>2]=c[o>>2];if(!(b[l+22>>1]&2)){m=l+32|0;n=l+36|0;o=(c[m>>2]|0)-(c[n>>2]|0)|0;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[m>>2]=j,s=l+80|0,r=c[s>>2]|0,r|0):0){k=r+-4|0;c[s>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;r=(c[14820]|0)+1|0;c[14820]=r;c[14821]=(r|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;w=35;break}else{j=Wa[c[29352>>2]&127](k)|0;w=35}while(0);do if((w|0)==35){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{r=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[s>>2]=0}s=Se(c[l>>2]|0,m,o)|0;c[n>>2]=(c[m>>2]|0)-(o&65535);if((s|0)==7){j=t+81|0;if((a[j>>0]|0)==0?(a[t+82>>0]|0)==0:0){a[j>>0]=1;if((c[t+180>>2]|0)>0)c[t+264>>2]=1;j=t+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[t+236>>2]|0;if(j|0)c[j+12>>2]=7}break}}}while(0);r=q+80|0;c[r>>2]=c[r>>2]|p;r=q+20|0;a[r>>0]=a[r>>0]|1;r=g+56|0;do if(c[r>>2]|0){j=z+108|0;k=c[j>>2]|0;if((c[z+112>>2]|0)>(k|0)){c[j>>2]=k+1;j=c[z+104>>2]|0;a[j+(k*20|0)>>0]=-96;j=j+(k*20|0)+1|0;l=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));break}else{Di(z,160,0,0,0)|0;break}}while(0);j=c[(c[(c[f>>2]|0)+16>>2]|0)+28>>2]|0;do if(!(a[f+146>>0]|0)){q=c[g+72>>2]|0;if((q|0)!=(j|0)?(u=c[j+48>>2]|0,(u|0)!=0):0){p=g+68|0;o=u;j=0;do{n=c[o+8>>2]|0;if((c[n+24>>2]|0)==(q|0)){l=c[n+4>>2]|0;m=c[g>>2]|0;u=a[l>>0]|0;k=(d[208+(u&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(u<<24>>24==0|(k|0)!=0))do{l=l+1|0;m=m+1|0;u=a[l>>0]|0;k=(d[208+(u&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(k|0)!=0));if(!k){if(!j)j=c[p>>2]|0;c[n+32>>2]=j;j=n}}o=c[o>>2]|0}while((o|0)!=0);if(!j)w=66}else w=66;if((w|0)==66){j=c[g+68>>2]|0;if(!j)break}do{jl(f,j);j=c[j+32>>2]|0}while((j|0)!=0)}while(0);j=v+(h<<4)|0;if(!(c[g+36>>2]&8))q=g;else{q=c[g>>2]|0;c[x>>2]=c[j>>2];c[x+4>>2]=q;Ak(f,42781,x);q=g}x=c[q>>2]|0;c[y>>2]=c[j>>2];c[y+4>>2]=34585;c[y+8>>2]=x;Ak(f,42826,y);c:do if(!i)if(!(c[r>>2]|0)){o=c[g+28>>2]|0;p=g+8|0;n=g+72|0;l=0;while(1){m=(l|0)==0;k=m|(o|0)<(l|0)?o:0;j=c[p>>2]|0;if(j)do{g=c[j+44>>2]|0;k=(g|0)>(k|0)&(m|(g|0)<(l|0))?g:k;j=c[j+20>>2]|0}while((j|0)!=0);if(!k){w=83;break c}l=c[n>>2]|0;if(!l)j=-1e6;else{m=c[(c[f>>2]|0)+16>>2]|0;j=0;while(1)if((c[m+(j<<4)+12>>2]|0)==(l|0))break;else j=j+1|0}kl(f,k,j);l=k}}else w=85;else w=83;while(0);if((w|0)==83)if(!(c[r>>2]|0)){m=z+108|0;k=z+112|0}else w=85;if((w|0)==85){l=c[q>>2]|0;m=z+108|0;j=c[m>>2]|0;k=z+112|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;g=c[z+104>>2]|0;a[g+(j*20|0)>>0]=-94;b[g+(j*20|0)+2>>1]=0;c[g+(j*20|0)+4>>2]=h;c[g+(j*20|0)+8>>2]=0;c[g+(j*20|0)+12>>2]=0;c[g+(j*20|0)+16>>2]=0;a[g+(j*20|0)+1>>0]=0}else j=Di(z,162,h,0,0)|0;if(!(a[(c[z>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;Ei(z,(c[z+104>>2]|0)+(j*20|0)|0,l,0)}A=c[A>>2]|0;a[((A|0)==0?f:A)+21>>0]=1}l=c[q>>2]|0;j=c[m>>2]|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;A=c[z+104>>2]|0;a[A+(j*20|0)>>0]=-113;b[A+(j*20|0)+2>>1]=0;c[A+(j*20|0)+4>>2]=h;c[A+(j*20|0)+8>>2]=0;c[A+(j*20|0)+12>>2]=0;c[A+(j*20|0)+16>>2]=0;a[A+(j*20|0)+1>>0]=0}else j=Di(z,143,h,0,0)|0;if(!(a[(c[z>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;Ei(z,(c[z+104>>2]|0)+(j*20|0)|0,l,0)}m=c[B>>2]|0;j=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(h<<4)+12>>2]>>2]|0)+1|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;f=c[m+104>>2]|0;a[f+(l*20|0)>>0]=95;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=h;c[f+(l*20|0)+8>>2]=1;c[f+(l*20|0)+12>>2]=j;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0}else Di(m,95,h,1,j)|0;l=c[(c[D>>2]|0)+(h<<4)+12>>2]|0;k=l+78|0;j=b[k>>1]|0;if(!(j&2)){Ra=E;return}l=c[l+16>>2]|0;if(l){q=C+480|0;r=C+304|0;s=C+308|0;t=C+300|0;do{j=c[l+8>>2]|0;if(c[j+12>>2]|0){p=j+4|0;k=c[p>>2]|0;d:do if(k){j=j+42|0;if((b[j>>1]|0)>0){o=0;while(1){m=c[k>>2]|0;e:do if(m|0){if(c[q>>2]|0){Xd(C,m);break}n=m;do if((c[r>>2]|0)>>>0<=n>>>0){if((c[s>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[t>>2];c[t>>2]=m;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{f=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);m=c[k+4>>2]|0;if(m|0)ni(C,m);m=c[k+8>>2]|0;f:do if(m|0){if(c[q>>2]|0){Xd(C,m);break}n=m;do if((c[r>>2]|0)>>>0<=n>>>0){if((c[s>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[t>>2];c[t>>2]=m;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{f=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);o=o+1|0;if((o|0)>=(b[j>>1]|0))break;else k=k+16|0}k=c[p>>2]|0}if(k){if(c[q>>2]|0){Xd(C,k);break}m=k;do if((c[r>>2]|0)>>>0<=m>>>0){if((c[s>>2]|0)>>>0<=m>>>0)break;c[k>>2]=c[t>>2];c[t>>2]=k;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}}else j=j+42|0;while(0);c[p>>2]=0;b[j>>1]=0}l=c[l>>2]|0}while((l|0)!=0);j=(c[(c[D>>2]|0)+(h<<4)+12>>2]|0)+78|0;k=j;j=b[j>>1]|0}b[k>>1]=j&-3;Ra=E;return}
- function ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](36)|0;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}d=a;e=d+36|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b>>2]=a;f=0;return f|0}function ms(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=c[b>>2]|0;if(d|0){Wa[c[(c[(c[a>>2]|0)+12>>2]|0)+16>>2]&127](d)|0;c[b>>2]=0}d=a+4|0;b=c[d>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[d>>2]=0;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function ns(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;k=c[d>>2]|0;n=d+8|0;f=c[n>>2]|0;if(f|0){Wa[c[(c[k+12>>2]|0)+16>>2]&127](f)|0;c[n>>2]=0}m=d+4|0;f=c[m>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[m>>2]=0;l=d+12|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;if((e|0)!=1){d=1;return d|0}g=c[h>>2]|0;f=b[g+8>>1]|0;if((f&514)==514?(a[g+10>>0]|0)==1:0){i=c[g+16>>2]|0;e=g}else if(!(f&1)){i=Gg(g,1)|0;e=c[h>>2]|0}else{i=0;e=g}f=b[e+8>>1]|0;if((f&2)!=0?(a[e+10>>0]|0)==1:0)e=c[e+12>>2]|0;else j=16;do if((j|0)==16){f=f&65535;if(!(f&16)){if(f&1|0){e=0;break}e=Fg(e,1)|0;break}else{g=c[e+12>>2]|0;if(!(f&16384)){e=g;break}e=(c[e>>2]|0)+g|0;break}}while(0);f=e+1|0;f=pb(f,((f|0)<0)<<31>>31)|0;c[m>>2]=f;if(!f){d=7;return d|0}ew(f|0,i|0,e|0)|0;a[(c[m>>2]|0)+e>>0]=0;g=k+16|0;f=Za[c[(c[k+12>>2]|0)+12>>2]&127](c[g>>2]|0,c[m>>2]|0,e,n)|0;if(f|0){d=f;return d|0}k=c[n>>2]|0;c[k>>2]=c[g>>2];g=c[d>>2]|0;c[l>>2]=(c[l>>2]|0)+1;g=$a[c[(c[g+12>>2]|0)+20>>2]&127](k,d+16|0,d+20|0,d+24|0,d+28|0,d+32|0)|0;if(!g){d=0;return d|0}f=c[n>>2]|0;if(f|0){Wa[c[(c[(c[d>>2]|0)+12>>2]|0)+16>>2]&127](f)|0;c[n>>2]=0}f=c[m>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{d=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[m>>2]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;d=(g|0)==101?0:g;return d|0}function os(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[a>>2]|0;f=a+12|0;c[f>>2]=(c[f>>2]|0)+1;d=a+8|0;e=$a[c[(c[e+12>>2]|0)+20>>2]&127](c[d>>2]|0,a+16|0,a+20|0,a+24|0,a+28|0,a+32|0)|0;if(!e)return 0;b=c[d>>2]|0;if(b|0){Wa[c[(c[(c[a>>2]|0)+12>>2]|0)+16>>2]&127](b)|0;c[d>>2]=0}a=a+4|0;b=c[a>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[a>>2]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;return ((e|0)==101?0:e)|0}function ps(a){a=a|0;return (c[a+16>>2]|0)==0|0}function qs(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,c[a+4>>2]|0,-1,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 1:{if((yc(c[d>>2]|0,c[a+16>>2]|0,c[a+20>>2]|0,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 2:{f=c[a+24>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}case 3:{f=c[a+28>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}default:{f=c[a+32>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}}return 0}function rs(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;c[b>>2]=a;c[b+4>>2]=((a|0)<0)<<31>>31;return 0}function ss(h,i,j){h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;A=Ra;Ra=Ra+64|0;z=A+56|0;y=A+48|0;x=A;i=c[j>>2]|0;k=e[i+8>>1]|0;do if(!(k&4)){if(k&8|0){k=Mg(+g[i>>3])|0;L()|0;break}if(!(k&18)){Ra=A;return}else{k=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0;break}}else k=c[i>>2]|0;while(0);i=k&255;if((i+-1|0)>>>0>4){Ra=A;return}m=i<<1;l=(k<<3)+8|0;j=j+4|0;w=mc(c[j>>2]|0)|0;j=c[j>>2]|0;i=b[j+8>>1]|0;if((i&2)!=0?(a[j+10>>0]|0)==1:0)k=c[j+12>>2]|0;else n=11;do if((n|0)==11){i=i&65535;if(i&16|0){k=c[j+12>>2]|0;if(!(i&16384))break;k=(c[j>>2]|0)+k|0;break}if(!(i&1)){k=Fg(j,1)|0;break}else{Ra=A;return}}while(0);if((k|0)<4){Ra=A;return}u=w+2|0;t=w+3|0;s=l&248;if((k|0)<(G(d[u>>0]<<8|d[t>>0],s)|0)){Ra=A;return}v=zb(0)|0;if(!(d[u>>0]<<8|d[t>>0]))if(!v){i=0;j=7}else n=34;else{n=m&254;o=v+16|0;p=v+8|0;q=v+4|0;r=(n|0)==0;m=0;do{k=G(m,s)|0;j=w+(k|4)|0;E=cw(d[j>>0]|0,0,56)|0;l=L()|0;F=cw(d[j+1>>0]|0,0,48)|0;l=L()|0|l;D=cw(d[j+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[j+3>>0];C=cw(d[j+4>>0]|0,0,24)|0;l=l|(L()|0);B=cw(d[j+5>>0]|0,0,16)|0;l=l|(L()|0);i=cw(d[j+6>>0]|0,0,8)|0;l=l|(L()|0);j=Sv(F|E|D|C|B|i|0,l|0,d[j+7>>0]|0,0)|0;l=L()|0;i=x;c[i>>2]=j;c[i+4>>2]=l;i=0;k=w+(k+12)|0;while(1){c[x+8+(i<<2)>>2]=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];c[x+8+((i|1)<<2)>>2]=d[k+5>>0]<<16|d[k+4>>0]<<24|d[k+6>>0]<<8|d[k+7>>0];i=i+2|0;if(i>>>0>=n>>>0)break;else k=k+8|0}do if(m|0){i=c[o>>2]|0;k=i+1|0;if(k>>>0<(c[p>>2]|0)>>>0){c[o>>2]=k;a[(c[q>>2]|0)+i>>0]=32;break}else{wb(v,44513,1);break}}while(0);F=y;c[F>>2]=j;c[F+4>>2]=l;Eb(v,55646,y);if(!r){i=0;do{g[z>>3]=+f[x+8+(i<<2)>>2];Eb(v,55652,z);i=i+1|0}while((i|0)!=(n|0))}i=c[o>>2]|0;k=i+1|0;if(k>>>0<(c[p>>2]|0)>>>0){c[o>>2]=k;a[(c[q>>2]|0)+i>>0]=125}else wb(v,55656,1);m=m+1|0}while(m>>>0<(d[u>>0]<<8|d[t>>0])>>>0);n=34}do if((n|0)==34){j=d[v+20>>0]|0;if((v|0)!=29632){i=v+4|0;k=c[i>>2]|0;if(((k|0)!=0?(a[k+(c[v+16>>2]|0)>>0]=0,(c[v+12>>2]|0)!=0):0)?(a[v+21>>0]&4)==0:0)i=$d(v)|0;else i=c[i>>2]|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](v);break}else{F=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);break}}else i=0}while(0);k=h+20|0;if((yc(c[h>>2]|0,i,-1,1,90)|0)==18){c[k>>2]=18;yc(c[h>>2]|0,31223,-1,1,0)|0}c[k>>2]=(j|0)==0?-1:j;k=c[h>>2]|0;if(!(b[k+8>>1]&1)){Ra=A;return}switch((j&255)<<24>>24){case 101:{i=50782;break}case 100:{i=50760;break}default:if(j>>>0<29?(520028155>>>j&1|0)!=0:0)i=c[22960+(j<<2)>>2]|0;else i=50724}yc(k,i,-1,1,0)|0;Ra=A;return}function ts(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0;i=c[g>>2]|0;f=b[i+8>>1]|0;a:do if((f&15|16)<<16>>16==16){if((f&2)!=0?(a[i+10>>0]|0)==1:0)f=c[i+12>>2]|0;else h=5;do if((h|0)==5){h=f&65535;if(!(h&16)){if(h&1|0)break a;f=Fg(i,1)|0;break}else{f=c[i+12>>2]|0;if(!(h&16384))break;f=(c[i>>2]|0)+f|0;break}}while(0);if((f|0)>=2){i=mc(c[g>>2]|0)|0;i=d[i>>0]<<8|d[i+1>>0];f=c[e>>2]|0;h=f+8|0;if(!(b[h>>1]&9216)){e=f;c[e>>2]=i;c[e+4>>2]=0;b[h>>1]=4;return}else{Pg(f,i,0);return}}}while(0);c[e+20>>2]=1;yc(c[e>>2]|0,55658,-1,1,-1)|0;return}function us(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+80|0;o=t+16|0;m=t+8|0;k=t;s=t+20|0;if((f+-1|0)>>>0>1){c[d+20>>2]=1;yc(c[d>>2]|0,55691,-1,1,-1)|0;Ra=t;return}i=c[g>>2]|0;do if(i){h=b[i+8>>1]|0;if((h&514)==514?(a[i+10>>0]|0)==1:0){j=c[i+16>>2]|0;break}if(!(h&1))j=Gg(i,1)|0;else j=0}else j=0;while(0);do if((f|0)!=1){h=c[g+4>>2]|0;if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){g=c[h+16>>2]|0;break}if(!(i&1))g=Gg(h,1)|0;else g=0}else g=0}else{g=j;j=50919}while(0);r=c[(c[d>>2]|0)+32>>2]|0;q=s+12|0;h=q;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[s>>2]=r;c[s+4>>2]=j;c[s+8>>2]=g;if(a[r+79>>0]|0){n=nd(r,36223,0,0,0)|0;i=s+40|0;c[i>>2]=n;if(!n){f=1;p=19}else{n=1;h=0;l=i}}else{f=0;i=s+40|0;p=19}if((p|0)==19){c[k>>2]=j;c[k+4>>2]=g;h=vs(s,55742,k)|0;if(!h)h=0;else{p=(e[h+144>>1]|0)+-2|0;gc(h)|0;h=p}c[i>>2]=0;n=f;l=i}c[m>>2]=j;c[m+4>>2]=g;k=vs(s,53869,m)|0;if(k){f=k+144|0;p=(e[f>>1]|0)+~h|0;h=s+16|0;c[h>>2]=(p|0)/2|0;if((p|0)>=2){if((Gc(k)|0)==100){i=c[k+120>>2]|0;if((i|0)!=0?(e[f>>1]|0)>1:0){i=i+40|0;f=k}else{i=c[k>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;f=k}j=b[i+8>>1]&31;i=c[f>>2]|0;g=k+40|0;f=c[g>>2]|0;if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&f;c[g>>2]=i;c[q>>2]=1347440720>>>j&1}}else ws(s,55770,o);i=gc(k)|0;if((i|0)!=11)c[l>>2]=i}else h=s+16|0;if((c[h>>2]|0)>0){if(!(c[l>>2]|0))xs(s,0,0,1,0);q=c[s+32>>2]|0;ys(s,55801,q,((q|0)<0)<<31>>31);q=c[s+36>>2]|0;ys(s,55808,q,((q|0)<0)<<31>>31)}gc(c[s+20>>2]|0)|0;gc(c[s+24>>2]|0)|0;gc(c[s+28>>2]|0)|0;do if(n){h=nd(r,55816,0,0,0)|0;i=c[l>>2]|0;if(!i){c[l>>2]=h;p=46;break}else{h=i;i=c[s+44>>2]|0;p=49;break}}else{h=c[l>>2]|0;p=46}while(0);if((p|0)==46){i=c[s+44>>2]|0;if(!h){if((yc(c[d>>2]|0,(i|0)==0?45704:i,-1,1,-1)|0)==18){c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0}}else p=49}if((p|0)==49){c[d+20>>2]=h;f=c[d>>2]|0;if(b[f+8>>1]&1){switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(f,h,-1,1,0)|0}}h=i;if(!i){Ra=t;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);Ra=t;return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);Ra=t;return}}function vs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+32|0;e=h;f=h+16|0;c[f>>2]=0;c[e>>2]=d;b=Ab(b,e)|0;d=a+40|0;e=(b|0)==0;do if(!(c[d>>2]|0))if(e){c[d>>2]=7;break}else{g=qd(c[a>>2]|0,b,-1,128,0,f,0)|0;c[d>>2]=g;g=6;break}else if(!e)g=6;while(0);do if((g|0)==6)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{g=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);Ra=h;return c[f>>2]|0}function ws(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;h=i+16|0;e=i;c[e>>2]=d;f=a+40|0;if(c[f>>2]|0){Ra=i;return}g=a+48|0;if((c[g>>2]|0)>=100){Ra=i;return}d=Ab(b,e)|0;if(!((d|0)!=0?(a=a+44|0,e=c[a>>2]|0,c[h>>2]=e,c[h+4>>2]=(e|0)==0?59952:35594,c[h+8>>2]=d,h=Bb(55820,h)|0,c[a>>2]=h,(h|0)!=0):0))c[f>>2]=7;c[g>>2]=(c[g>>2]|0)+1;Ra=i;return}function xs(e,g,i,j,k){e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0.0;J=Ra;Ra=Ra+112|0;H=J+88|0;F=J+72|0;E=J+56|0;v=J+40|0;u=J+32|0;t=J+16|0;s=J+8|0;m=J;r=e+40|0;if(c[r>>2]|0){Ra=J;return}q=e+20|0;l=c[q>>2]|0;if(!l){l=c[e+8>>2]|0;c[m>>2]=c[e+4>>2];c[m+4>>2]=l;l=vs(e,55946,m)|0;c[q>>2]=l;if(c[r>>2]|0){Ra=J;return}}do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){D=l;c[D>>2]=j;c[D+4>>2]=k;b[m>>1]=4;break}else{Pg(l,j,k);break}}while(0);do if((Gc(c[q>>2]|0)|0)==100){p=Lc(c[q>>2]|0,0)|0;o=c[q>>2]|0;if(!o)m=mc(29576)|0;else{l=c[o+120>>2]|0;if((l|0)!=0?(b[o+144>>1]|0)!=0:0)n=o;else{l=c[o>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;n=o}m=mc(l)|0;n=c[n>>2]|0;o=o+40|0;l=c[o>>2]|0;if((l|0)==3082|(a[n+81>>0]|0)!=0){og(n);l=7}else l=c[n+68>>2]&l;c[o>>2]=l}l=pb(p,((p|0)<0)<<31>>31)|0;if(!l){c[r>>2]=7;D=0;o=0;break}else{ew(l|0,m|0,p|0)|0;D=l;o=p;break}}else{D=0;o=0}while(0);l=c[q>>2]|0;do if(l){m=c[l>>2]|0;C=l+136|0;B=c[C+4>>2]|0;if((B|0)>0|(B|0)==0&(c[C>>2]|0)>>>0>0)hc(m,l);n=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;C=l+64|0;c[C>>2]=0;c[C+4>>2]=0;if((n|0)==3082|(a[m+81>>0]|0)!=0){og(m);l=7;break}else{l=c[m+68>>2]&n;break}}else l=0;while(0);if((c[r>>2]|0)==0?(c[r>>2]=l,(D|0)==0&(l|0)==0):0){I=s;c[I>>2]=j;c[I+4>>2]=k;ws(e,55991,s);Ra=J;return}if(!D){Ra=J;return}if((o|0)<4){I=t;c[I>>2]=j;c[I+4>>2]=k;c[t+8>>2]=o;ws(e,55827,t);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}C=(i|0)==0;if(C){g=d[D>>0]<<8|d[D+1>>0];if(g>>>0>40){c[u>>2]=g;ws(e,55861,u);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}}A=d[D+2>>0]<<8|d[D+3>>0];B=e+16|0;l=c[B>>2]|0;a:do if((G((l<<3)+8|0,A)|0|4|0)<=(o|0)){if(A|0){y=e+12|0;z=(g|0)>0;v=g+-1|0;w=e+36|0;x=e+32|0;g=0;while(1){u=D+(G((l<<3)+8|0,g)|0|4)|0;o=cw(d[u>>0]|0,0,56)|0;s=L()|0;n=cw(d[u+1>>0]|0,0,48)|0;s=L()|0|s;p=cw(d[u+2>>0]|0,0,40)|0;s=s|(L()|0);s=s|d[u+3>>0];q=cw(d[u+4>>0]|0,0,24)|0;s=s|(L()|0);r=cw(d[u+5>>0]|0,0,16)|0;s=s|(L()|0);t=cw(d[u+6>>0]|0,0,8)|0;s=s|(L()|0);s=Sv(n|o|p|q|r|t|0,s|0,d[u+7>>0]|0,0)|0;t=L()|0;u=u+8|0;b:do if((l|0)>0){if(C){o=0;while(1){n=o<<3;m=u+n|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];n=u+(n|4)|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];if(!(c[y>>2]|0)){K=(c[h>>2]=m,+f[h>>2]);if(K>(c[h>>2]=n,+f[h>>2]))I=52}else if((m|0)>(n|0))I=52;if((I|0)==52){I=0;c[E>>2]=o;c[E+4>>2]=g;l=E+8|0;c[l>>2]=j;c[l+4>>2]=k;ws(e,56023,E);l=c[B>>2]|0}o=o+1|0;if((o|0)>=(l|0))break b}}p=0;do{m=p<<3;q=u+m|0;q=d[q+1>>0]<<16|d[q>>0]<<24|d[q+2>>0]<<8|d[q+3>>0];o=m|4;r=u+o|0;r=d[r+1>>0]<<16|d[r>>0]<<24|d[r+2>>0]<<8|d[r+3>>0];l=c[y>>2]|0;if(!l){K=(c[h>>2]=q,+f[h>>2]);if(K>(c[h>>2]=r,+f[h>>2]))I=57;else l=0}else if((q|0)>(r|0))I=57;if((I|0)==57){I=0;c[F>>2]=p;c[F+4>>2]=g;l=F+8|0;c[l>>2]=j;c[l+4>>2]=k;ws(e,56023,F);l=c[y>>2]|0}n=i+m|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];m=i+o|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];do if(!l){K=(c[h>>2]=q,+f[h>>2]);if(K<(c[h>>2]=n,+f[h>>2])){I=62;break}K=(c[h>>2]=r,+f[h>>2]);if(K>(c[h>>2]=m,+f[h>>2]))I=62}else if((q|0)<(n|0)|(r|0)>(m|0))I=62;while(0);if((I|0)==62){I=0;c[H>>2]=p;c[H+4>>2]=g;r=H+8|0;c[r>>2]=j;c[r+4>>2]=k;ws(e,56071,H)}p=p+1|0}while((p|0)<(c[B>>2]|0))}while(0);if(z){zs(e,0,s,t,j,k);xs(e,v,u,s,t);l=w}else{zs(e,1,s,t,j,k);l=x}c[l>>2]=(c[l>>2]|0)+1;g=g+1|0;if((g|0)==(A|0))break a;l=c[B>>2]|0}}}else{I=v;c[I>>2]=j;c[I+4>>2]=k;c[v+8>>2]=A;c[v+12>>2]=o;ws(e,55891,v)}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}function ys(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+48|0;j=k+16|0;f=k;i=a+40|0;if(c[i>>2]|0){Ra=k;return}l=c[a+8>>2]|0;c[f>>2]=c[a+4>>2];c[f+4>>2]=l;c[f+8>>2]=b;f=vs(a,56360,f)|0;if(!f){Ra=k;return}if((Gc(f)|0)==100?(g=Oc(f,0)|0,h=L()|0,!((g|0)==(d|0)&(h|0)==(e|0))):0){c[j>>2]=b;l=j+8|0;c[l>>2]=d;c[l+4>>2]=e;l=j+16|0;c[l>>2]=g;c[l+4>>2]=h;ws(a,56391,j)}l=gc(f)|0;c[i>>2]=l;Ra=k;return}function zs(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+80|0;o=p+32|0;m=p+8|0;l=p;j=d+24+(e<<2)|0;k=c[j>>2]|0;if(!k){n=c[30860+(e<<2)>>2]|0;k=c[d+8>>2]|0;c[l>>2]=c[d+4>>2];c[l+4>>2]=k;l=vs(d,n,l)|0;c[j>>2]=l}else l=k;n=d+40|0;if(c[n>>2]|0){Ra=p;return}do if(!(Vc(l,1)|0)){j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){c[j>>2]=f;c[j+4>>2]=g;b[k>>1]=4;break}else{Pg(j,f,g);break}}while(0);switch(Gc(l)|0){case 101:{o=m;c[o>>2]=f;c[o+4>>2]=g;o=m+8|0;c[o>>2]=h;c[o+4>>2]=i;c[m+16>>2]=(e|0)==0?56293:56285;ws(d,56240,m);break}case 100:{j=Oc(l,0)|0;k=L()|0;if(!((j|0)==(h|0)&(k|0)==(i|0))){m=o;c[m>>2]=f;c[m+4>>2]=g;m=o+8|0;c[m>>2]=j;c[m+4>>2]=k;c[o+16>>2]=(e|0)==0?56293:56285;e=o+24|0;c[e>>2]=f;c[e+4>>2]=g;g=o+32|0;c[g>>2]=h;c[g+4>>2]=i;ws(d,56302,o)}break}default:{}}do if(l){j=c[l>>2]|0;o=l+136|0;i=c[o+4>>2]|0;if((i|0)>0|(i|0)==0&(c[o>>2]|0)>>>0>0)hc(j,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;o=l+64|0;c[o>>2]=0;c[o+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}else j=0;while(0);if(c[n>>2]|0){Ra=p;return}c[n>>2]=j;Ra=p;return}function As(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Ss(a,b,c,d,e,f,1)|0}function Bs(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Ss(a,b,c,d,e,f,0)|0}function Cs(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+64|0;p=r+48|0;o=r;f=o;h=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));a[o+40>>0]=0;n=c[e>>2]|0;h=(n|0)>0;if(h){i=c[e+4>>2]|0;f=0;j=0;do{j=(a[i+(f*12|0)+4>>0]|0)==64?1:j;f=f+1|0}while((f|0)<(n|0));if(h){k=c[e+4>>2]|0;l=b+21|0;m=e+16|0;a:do if(!j){h=0;f=0;b:while(1){j=k+(f*12|0)|0;c:do if(a[k+(f*12|0)+5>>0]|0){if((c[j>>2]|0)==0?(a[k+(f*12|0)+4>>0]|0)==2:0)break b;i=c[j>>2]|0;d:do if((i|0)>0?(i|0)<=(d[l>>0]|0):0)switch(a[k+(f*12|0)+4>>0]|0){case 2:{i=65;break d}case 64:{q=15;break d}case 4:{i=69;break d}case 8:{i=66;break d}case 16:{i=67;break d}case 32:{i=68;break d}default:break c}else q=13;while(0);if((q|0)==13){q=0;if((a[k+(f*12|0)+4>>0]|0)==64)q=15;else break}if((q|0)==15){q=0;i=70}a[o+h>>0]=i;i=h+2|0;a[o+(h+1)>>0]=(c[j>>2]|0)+47;h=c[m>>2]|0;c[h+(f<<3)>>2]=(i|0)/2|0;a[h+(f<<3)+4>>0]=1;h=i}while(0);f=f+1|0;if(!((f|0)<(n|0)&(h|0)<40)){f=h;break a}}i=c[m>>2]|0;if(!f)f=0;else{h=0;do{c[i+(h<<3)>>2]=0;a[i+(h<<3)+4>>0]=0;h=h+1|0}while((h|0)!=(f|0))}c[e+20>>2]=1;c[i+(f<<3)>>2]=1;a[i+(f<<3)+4>>0]=1;g[e+40>>3]=30.0;q=e+48|0;c[q>>2]=1;c[q+4>>2]=0;c[e+56>>2]=1;e=0;Ra=r;return e|0}else{f=0;j=0;do{e:do if(a[k+(j*12|0)+5>>0]|0){i=k+(j*12|0)|0;h=c[i>>2]|0;f:do if((h|0)>0?(h|0)<=(d[l>>0]|0):0)switch(a[k+(j*12|0)+4>>0]|0){case 2:{h=65;break f}case 64:{q=34;break f}case 4:{h=69;break f}case 8:{h=66;break f}case 16:{h=67;break f}case 32:{h=68;break f}default:break e}else q=28;while(0);if((q|0)==28){q=0;if((a[k+(j*12|0)+4>>0]|0)==64)q=34;else break}if((q|0)==34){q=0;h=70}a[o+f>>0]=h;h=f+2|0;a[o+(f+1)>>0]=(c[i>>2]|0)+47;f=c[m>>2]|0;c[f+(j<<3)>>2]=(h|0)/2|0;a[f+(j<<3)+4>>0]=1;f=h}while(0);j=j+1|0}while((j|0)<(n|0)&(f|0)<40)}while(0);c[e+20>>2]=2;c[e+28>>2]=1;if((f|0)>0?(c[p>>2]=o,p=Bb(31408,p)|0,c[e+24>>2]=p,(p|0)==0):0){e=7;Ra=r;return e|0}}else q=38}else q=38;if((q|0)==38){c[e+20>>2]=2;c[e+28>>2]=1;f=0}b=b+48|0;b=aw(c[b>>2]|0,c[b+4>>2]|0,(f|0)/2|0|0)|0;q=L()|0;g[e+40>>3]=(+(b>>>0)+4294967296.0*+(q|0))*6.0;e=e+48|0;c[e>>2]=b;c[e+4>>2]=q;e=0;Ra=r;return e|0}function Ds(a){a=a|0;Ts(a);return 0}function Es(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+32|0;f=g;d=c[b+32>>2]|0;e=c[b+36>>2]|0;c[f>>2]=d;c[f+4>>2]=e;c[f+8>>2]=d;c[f+12>>2]=e;c[f+16>>2]=d;c[f+20>>2]=e;f=Bb(57667,f)|0;if(!f){f=7;Ra=g;return f|0}d=b+76|0;e=c[d>>2]|0;do if((e|0?(a[b+24>>0]|0)==0:0)?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=nd(c[b+12>>2]|0,f,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(d|0){h=d;Ra=g;return h|0}Ts(b);h=0;Ra=g;return h|0}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){a=7;f=0;c[b>>2]=f;return a|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](248)|0;if(!d){a=7;f=0;c[b>>2]=f;return a|0}}else{f=Wa[c[29356>>2]&127](248)|0;if((c[14985]|0)>>>0<248)c[14985]=248;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=7;a=0;c[b>>2]=a;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}gw(d|0,0,248)|0;c[d>>2]=a;g=a+56|0;c[g>>2]=(c[g>>2]|0)+1;g=0;a=d;c[b>>2]=a;return g|0}function Gs(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=c[b>>2]|0;h=b+16|0;d=c[h>>2]|0;if(d|0){g=b+12|0;if((c[g>>2]|0)>0){f=0;while(1){d=c[d+(f*24|0)+16>>2]|0;do if(d|0){e=c[d+16>>2]|0;if(e|0)ab[e&127](c[d+12>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);d=f+1|0;if((d|0)>=(c[g>>2]|0))break;f=d;d=c[h>>2]|0}d=c[h>>2]|0}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{g=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[h>>2]=0}gc(c[b+36>>2]|0)|0;d=c[b+32>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);Us(i,c[b+64>>2]|0)|0;Us(i,c[b+68>>2]|0)|0;Us(i,c[b+72>>2]|0)|0;Us(i,c[b+76>>2]|0)|0;Us(i,c[b+80>>2]|0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{h=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}e=i+56|0;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;e=i+76|0;f=c[e>>2]|0;if(!f)return 0;if(!((d|0)==0&(a[i+24>>0]|0)==0))return 0;c[e>>2]=0;d=c[f+20>>2]|0;gc(c[f+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,f);return 0}i=f;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[f>>2]=c[i>>2];c[i>>2]=f;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);return 0}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);return 0}return 0}function Hs(f,h,i,j,k){f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=Ra;Ra=Ra+16|0;w=y+4|0;t=y;x=c[f>>2]|0;c[w>>2]=0;v=x+40|0;c[v>>2]=(c[v>>2]|0)+1;v=f+16|0;l=c[v>>2]|0;if(l|0){o=f+12|0;if((c[o>>2]|0)>0){n=0;while(1){l=c[l+(n*24|0)+16>>2]|0;do if(l|0){m=c[l+16>>2]|0;if(m|0)ab[m&127](c[l+12>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=n+1|0;if((l|0)>=(c[o>>2]|0))break;n=l;l=c[v>>2]|0}l=c[v>>2]|0}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[v>>2]=0}l=c[f+32>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);u=f+36|0;s=c[u>>2]|0;gw(f|0,0,248)|0;c[f>>2]=x;c[u>>2]=s;c[f+8>>2]=h;a:do if((h|0)!=1){l=Xs(x,1,0,0,w)|0;if(!((j|0)>0&(l|0)==0)){if(l|0)break}else{l=j*24|0;m=pb(l,0)|0;c[v>>2]=m;c[f+12>>2]=j;if(!m){l=7;break}gw(m|0,0,l|0)|0;r=f+84|0;s=x+28|0;gw(r|0,0,(c[s>>2]<<2)+4|0)|0;t=x+21|0;q=0;do{u=c[v>>2]|0;m=q<<1;o=a[i+m>>0]|0;h=u+(q*24|0)+4|0;c[h>>2]=o<<24>>24;c[u+(q*24|0)>>2]=(a[i+(m|1)>>0]|0)+-48;m=c[k+(q<<2)>>2]|0;l=b[m+8>>1]|0;if(o<<24>>24>69){if((l&-15393)<<16>>16!=-32255){l=1;break a}if((a[m+11>>0]|0)!=112){l=1;break a}if(Bu(c[m>>2]|0,57762)|0){l=1;break a}l=c[m+16>>2]|0;if(!l){l=1;break a}o=pb((c[l>>2]|0)+80|0,0)|0;if(!o){l=7;break a}m=o;n=m+80|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));ew(o+80|0,l|0,c[l>>2]|0)|0;c[o>>2]=c[o+96>>2];c[o+4>>2]=c[o+100>>2];c[o+8>>2]=o+112;c[o+72>>2]=c[o+104>>2];l=c[o+84>>2]|0;if(!l){c[h>>2]=71;c[u+(q*24|0)+8>>2]=c[o+88>>2]}else c[u+(q*24|0)+8>>2]=l;c[u+(q*24|0)+16>>2]=o;c[o+28>>2]=d[t>>0];c[o+24>>2]=r;c[o+36>>2]=(c[s>>2]|0)+1}else{l=l&65535;do if(!(l&8)){if(l&4|0){h=m;p=+((c[h>>2]|0)>>>0)+4294967296.0*+(c[h+4>>2]|0);break}if(!(l&18))p=0.0;else p=+Kg(a[m+10>>0]|0,c[m+12>>2]|0,c[m+16>>2]|0)}else p=+g[m>>3];while(0);g[u+(q*24|0)+8>>3]=p}q=q+1|0}while((q|0)<(j|0))}l=Ws(f,0.0,(c[x+28>>2]|0)+1&255)|0;if(!l){x=7;Ra=y;return x|0}else{k=l+8|0;c[k>>2]=1;c[k+4>>2]=0;a[l+18>>0]=0;a[l+17>>0]=1;c[f+64>>2]=c[w>>2];c[w>>2]=0;l=Ys(f)|0;break}}else{l=c[k>>2]|0;m=e[l+8>>1]|0;do if(!(m&4)){if(m&8|0){s=Mg(+g[l>>3])|0;r=L()|0;break}if(!(m&18)){r=0;s=0}else{s=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;r=L()|0}}else{s=l;r=c[s+4>>2]|0;s=c[s>>2]|0}while(0);c[t>>2]=0;q=x+88|0;l=c[q>>2]|0;do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){k=l;c[k>>2]=s;c[k+4>>2]=r;b[m>>1]=4;break}else{Pg(l,s,r);break}}while(0);k=(Gc(c[q>>2]|0)|0)==100;n=c[q>>2]|0;do if(k){o=Oc(n,0)|0;h=L()|0;l=Xs(x,o,h,0,t)|0;m=c[q>>2]|0;if(m){n=c[m>>2]|0;k=m+136|0;j=c[k+4>>2]|0;if((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)hc(n,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;j=m+64|0;c[j>>2]=0;c[j+4>>2]=0;if((k|0)==3082|(a[n+81>>0]|0)!=0){og(n);n=h;q=45}else{n=h;q=45}}else{n=h;q=45}}else if(n){l=c[n>>2]|0;k=n+136|0;j=c[k+4>>2]|0;if((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)hc(l,n);m=kc(n)|0;c[n+20>>2]=770837923;c[n+36>>2]=-1;c[n+40>>2]=0;a[n+146>>0]=2;c[n+44>>2]=0;c[n+32>>2]=1;a[n+147>>0]=-1;c[n+48>>2]=0;k=n+64|0;c[k>>2]=0;c[k+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);l=7;q=51;break}else{l=c[l+68>>2]&m;o=0;n=0;q=45;break}}else{l=0;o=0;n=0;q=45}while(0);if((q|0)==45){m=c[t>>2]|0;if((l|0)==0&(m|0)!=0){h=Ws(f,0.0,0)|0;c[f+64>>2]=m;l=h+8|0;c[l>>2]=o;c[l+4>>2]=n;a[h+17>>0]=1;l=c[m+24>>2]|0;n=d[l+2>>0]<<8|d[l+3>>0];b:do if(!n){l=267;m=0}else{o=d[x+23>>0]|0;m=0;while(1){f=l+((G(m,o)|0)+4)|0;t=cw(d[f>>0]|0,0,56)|0;k=L()|0;z=cw(d[f+1>>0]|0,0,48)|0;k=L()|0|k;u=cw(d[f+2>>0]|0,0,40)|0;k=k|(L()|0);k=k|d[f+3>>0];v=cw(d[f+4>>0]|0,0,24)|0;k=k|(L()|0);i=cw(d[f+5>>0]|0,0,16)|0;k=k|(L()|0);j=cw(d[f+6>>0]|0,0,8)|0;k=k|(L()|0);f=Sv(z|t|u|v|i|j|0,k|0,d[f+7>>0]|0,0)|0;if((f|0)==(s|0)&(L()|0)==(r|0)){l=0;break b}m=m+1|0;if(m>>>0>=n>>>0){l=267;m=0;break}}}while(0);a[h+18>>0]=m}else q=51}if((q|0)==51)a[f+4>>0]=1}while(0);Us(x,c[w>>2]|0)|0;Ts(x);z=l;Ra=y;return z|0}function Is(b){b=b|0;var d=0,e=0,f=0,g=0;d=b+6|0;if(!(a[d>>0]|0)){Zs(b);b=Ys(b)|0;return b|0}a[d>>0]=0;d=c[b+36>>2]|0;if(!d){Zs(b);b=Ys(b)|0;return b|0}e=c[d>>2]|0;f=d+136|0;g=c[f+4>>2]|0;if((g|0)>0|(g|0)==0&(c[f>>2]|0)>>>0>0)hc(e,d);g=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;f=d+64|0;c[f>>2]=0;c[f+4>>2]=0;if(!((g|0)==3082|(a[e+81>>0]|0)!=0)){Zs(b);g=Ys(b)|0;return g|0}og(e);Zs(b);g=Ys(b)|0;return g|0}function Js(a){a=a|0;return d[a+4>>0]|0|0}function Ks(i,j,k){i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;u=Ra;Ra=Ra+16|0;p=u+8|0;q=u;t=c[i>>2]|0;l=a[i+5>>0]|0;if(!(l<<24>>24))if(!(c[i+24>>2]|0))s=0;else s=c[i+32>>2]|0;else s=i+40|0;l=1-(l&255)|0;n=i+64+(l<<2)|0;m=c[n>>2]|0;if(!m){if(!l)l=i+48|0;else l=(c[i+32>>2]|0)+8|0;l=Xs(t,c[l>>2]|0,c[l+4>>2]|0,0,n)|0;if(!l)m=c[n>>2]|0;else{j=l;Ra=u;return j|0}}if(!s){j=0;Ra=u;return j|0}if(!k){n=(c[m+24>>2]|0)+((G(d[t+23>>0]|0,d[s+18>>0]|0)|0)+4)|0;s=cw(d[n>>0]|0,0,56)|0;i=L()|0;r=cw(d[n+1>>0]|0,0,48)|0;i=L()|0|i;t=cw(d[n+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[n+3>>0];k=cw(d[n+4>>0]|0,0,24)|0;i=i|(L()|0);m=cw(d[n+5>>0]|0,0,16)|0;i=i|(L()|0);l=cw(d[n+6>>0]|0,0,8)|0;i=i|(L()|0);n=Sv(r|s|t|k|m|l|0,i|0,d[n+7>>0]|0,0)|0;i=L()|0;l=c[j>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){j=l;c[j>>2]=n;c[j+4>>2]=i;b[m>>1]=4;j=0;Ra=u;return j|0}else{Pg(l,n,i);j=0;Ra=u;return j|0}}r=t+21|0;l=d[r>>0]|0;if((l|0)>=(k|0)){i=(c[m+24>>2]|0)+((k<<2)+8+(G(d[t+23>>0]|0,d[s+18>>0]|0)|0))|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];if(a[t+22>>0]|0){l=c[j>>2]|0;m=((i|0)<0)<<31>>31;n=l+8|0;if(!(b[n>>1]&9216)){j=l;c[j>>2]=i;c[j+4>>2]=m;b[n>>1]=4;j=0;Ra=u;return j|0}else{Pg(l,i,m);j=0;Ra=u;return j|0}}o=(c[h>>2]=i,+f[h>>2]);l=c[j>>2]|0;m=l+8|0;if(!(b[m>>1]&9216))b[m>>1]=1;else Dg(l);g[p>>3]=o;g[q>>3]=+g[p>>3];if(!(+g[p>>3]==+g[q>>3])){j=0;Ra=u;return j|0}g[l>>3]=o;b[m>>1]=8;j=0;Ra=u;return j|0}p=i+6|0;q=i+36|0;do if(!(a[p>>0]|0)){l=c[q>>2]|0;do if(!l){l=qd(c[t+12>>2]|0,c[t+64>>2]|0,-1,128,0,q,0)|0;if(!l){l=c[q>>2]|0;break}else{j=l;Ra=u;return j|0}}while(0);n=(c[m+24>>2]|0)+((G(d[t+23>>0]|0,d[s+18>>0]|0)|0)+4)|0;w=cw(d[n>>0]|0,0,56)|0;i=L()|0;x=cw(d[n+1>>0]|0,0,48)|0;i=L()|0|i;v=cw(d[n+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[n+3>>0];m=cw(d[n+4>>0]|0,0,24)|0;i=i|(L()|0);s=cw(d[n+5>>0]|0,0,16)|0;i=i|(L()|0);t=cw(d[n+6>>0]|0,0,8)|0;i=i|(L()|0);n=Sv(x|w|v|m|s|t|0,i|0,d[n+7>>0]|0,0)|0;i=L()|0;do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){x=l;c[x>>2]=n;c[x+4>>2]=i;b[m>>1]=4;break}else{Pg(l,n,i);break}}while(0);n=Gc(c[q>>2]|0)|0;if((n|0)==100){a[p>>0]=1;l=d[r>>0]|0;break}l=c[q>>2]|0;if(!l){x=(n|0)==101;x=x?0:n;Ra=u;return x|0}m=c[l>>2]|0;x=l+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(m,l);x=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;w=l+64|0;c[w>>2]=0;c[w+4>>2]=0;if(!((x|0)==3082|(a[m+81>>0]|0)!=0)){x=(n|0)==101;x=x?0:n;Ra=u;return x|0}og(m);x=(n|0)==101;x=x?0:n;Ra=u;return x|0}while(0);p=c[q>>2]|0;l=k-l+1|0;n=(p|0)==0;do if(n)i=29576;else{m=c[p+120>>2]|0;if(m|0?l>>>0<(e[p+144>>1]|0)>>>0:0){i=m+(l*40|0)|0;break}i=c[p>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576}while(0);l=i+8|0;m=e[l>>1]|0;if(m&2048|0)b[l>>1]=m&59391|4096;if(!n){m=c[p>>2]|0;n=p+40|0;l=c[n>>2]|0;if((l|0)==3082|(a[m+81>>0]|0)!=0){og(m);l=7}else l=c[m+68>>2]&l;c[n>>2]=l}Dc(j,i);x=0;Ra=u;return x|0}function Ls(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=a[b+5>>0]|0;if(!(f<<24>>24))if(!(c[b+24>>2]|0))i=0;else i=c[b+32>>2]|0;else i=b+40|0;g=1-(f&255)|0;h=b+64+(g<<2)|0;f=c[h>>2]|0;if(!f){if(!g)f=b+48|0;else f=(c[b+32>>2]|0)+8|0;g=f;g=Xs(c[b>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,h)|0;f=c[h>>2]|0}else g=0;if(!((i|0)!=0&(g|0)==0))return g|0;h=(c[f+24>>2]|0)+((G(d[(c[b>>2]|0)+23>>0]|0,d[i+18>>0]|0)|0)+4)|0;l=cw(d[h>>0]|0|0,0,56)|0;b=L()|0;m=cw(d[h+1>>0]|0|0,0,48)|0;b=L()|0|b;k=cw(d[h+2>>0]|0|0,0,40)|0;b=b|(L()|0);b=b|(d[h+3>>0]|0);j=cw(d[h+4>>0]|0|0,0,24)|0;b=b|(L()|0);f=cw(d[h+5>>0]|0|0,0,16)|0;b=b|(L()|0);i=cw(d[h+6>>0]|0|0,0,8)|0;b=b|(L()|0);h=Sv(m|l|k|j|f|i|0,b|0,d[h+7>>0]|0|0,0)|0;b=L()|0;i=e;c[i>>2]=h;c[i+4>>2]=b;return g|0}function Ms(h,i,j,k){h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=Ra;Ra=Ra+64|0;u=x;v=x+48|0;if(c[h+60>>2]|0){h=518;Ra=x;return h|0}t=h+40|0;c[t>>2]=(c[t>>2]|0)+1;t=u;c[t>>2]=0;c[t+4>>2]=0;t=(i|0)>1;a:do if(t){p=i+-4|0;i=d[h+21>>0]|0;p=(p|0)>(i|0)?i:p;i=(p|0)>0;b:do if(!(a[h+22>>0]|0)){if(i){m=0;while(1){i=c[j+(m+3<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&8)){if(l&4|0){s=i;o=+((c[s>>2]|0)>>>0)+4294967296.0*+(c[s+4>>2]|0);break}if(!(l&18))o=0.0;else o=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else o=+g[i>>3];while(0);r=o;r=o<r?o*(o<0.0?1.0000001192092896:.9999998807907104):r;f[u+8+(m<<2)>>2]=r;i=c[j+(m+4<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&8)){if(l&4|0){s=i;o=+((c[s>>2]|0)>>>0)+4294967296.0*+(c[s+4>>2]|0);break}if(!(l&18))o=0.0;else o=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else o=+g[i>>3];while(0);y=o;o=o>y?o*(o<0.0?.9999998807907104:1.0000001192092896):y;i=m|1;f[u+8+(i<<2)>>2]=o;m=m+2|0;if(r>o)break;if((m|0)>=(p|0))break b}i=_s(h,i)|0;break a}}else if(i){n=0;while(1){i=c[j+(n+3<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&4)){if(l&8|0){m=Mg(+g[i>>3])|0;L()|0;break}if(!(l&18))m=0;else{m=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0}}else m=c[i>>2]|0;while(0);c[u+8+(n<<2)>>2]=m;i=c[j+(n+4<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&4)){if(l&8|0){i=Mg(+g[i>>3])|0;L()|0;break}if(!(l&18))i=0;else{i=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0}}else i=c[i>>2]|0;while(0);l=n|1;c[u+8+(l<<2)>>2]=i;n=n+2|0;if((m|0)>(i|0))break;if((n|0)>=(p|0))break b}i=_s(h,l)|0;break a}while(0);l=c[j+8>>2]|0;i=b[l+8>>1]|0;if(!(-1431655766>>>(i&31)&1)){i=i&65535;do if(!(i&4)){if(i&8|0){p=Mg(+g[l>>3])|0;s=L()|0;break}if(!(i&18)){p=0;s=0}else{p=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;s=L()|0}}else{s=l;p=c[s>>2]|0;s=c[s+4>>2]|0}while(0);l=u;c[l>>2]=p;c[l+4>>2]=s;l=c[j>>2]|0;i=b[l+8>>1]|0;if(!(-1431655766>>>(i&31)&1)){i=i&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[l>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;l=L()|0}}else{i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);if((i|0)==(p|0)&(l|0)==(s|0)){q=1;i=0;n=s;w=67;break}}m=h+88|0;i=c[m>>2]|0;do if(!(Vc(i,1)|0)){i=c[i+100>>2]|0;l=i+8|0;if(!(b[l>>1]&9216)){q=i;c[q>>2]=p;c[q+4>>2]=s;b[l>>1]=4;break}else{Pg(i,p,s);break}}while(0);n=Gc(c[m>>2]|0)|0;i=c[m>>2]|0;do if(i){l=c[i>>2]|0;q=i+136|0;m=c[q+4>>2]|0;if((m|0)>0|(m|0)==0&(c[q>>2]|0)>>>0>0)hc(l,i);m=kc(i)|0;c[i+20>>2]=770837923;c[i+36>>2]=-1;c[i+40>>2]=0;a[i+146>>0]=2;c[i+44>>2]=0;c[i+32>>2]=1;a[i+147>>0]=-1;c[i+48>>2]=0;q=i+64|0;c[q>>2]=0;c[q+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);i=7;break}else{i=c[l+68>>2]&m;break}}else i=0;while(0);if((n|0)==100)if((a[(c[h+12>>2]|0)+86>>0]|0)==5){q=1;i=$s(h,p,s)|0;n=s;w=67;break}else{i=_s(h,0)|0;break}else{q=1;n=s;w=67}}else{q=0;i=0;p=0;n=0;w=67}}else{q=0;i=0;p=0;n=0;w=67}while(0);if((w|0)==67){m=c[j>>2]|0;l=b[m+8>>1]|0;if(!(-1431655766>>>(l&31)&1)){i=l&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[m>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[m+10>>0]|0,c[m+12>>2]|0,c[m+16>>2]|0)|0;l=L()|0}}else{l=m;i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);i=$s(h,i,l)|0}if(t&(i|0)==0){c[v>>2]=0;if(!q){i=h+92|0;Vc(c[i>>2]|0,1)|0;Vc(c[i>>2]|0,2)|0;Gc(c[i>>2]|0)|0;i=c[i>>2]|0;do if(i){l=c[i>>2]|0;t=i+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(l,i);m=kc(i)|0;c[i+20>>2]=770837923;c[i+36>>2]=-1;c[i+40>>2]=0;a[i+146>>0]=2;c[i+44>>2]=0;c[i+32>>2]=1;a[i+147>>0]=-1;c[i+48>>2]=0;t=i+64|0;c[t>>2]=0;c[t+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);i=7;break}else{i=c[l+68>>2]&m;break}}else i=0;while(0);s=(c[h+12>>2]|0)+40|0;q=c[s>>2]|0;s=c[s+4>>2]|0;t=u;c[t>>2]=q;c[t+4>>2]=s;t=k;c[t>>2]=q;c[t+4>>2]=s;if(!i)w=85}else{w=k;c[w>>2]=p;c[w+4>>2]=n;w=85}do if((w|0)==85){i=at(h,u,0,v)|0;if(!i){c[h+72>>2]=-1;w=c[v>>2]|0;i=bt(h,w,u,0)|0;w=Us(h,w)|0;i=(i|0)==0?w:i;if(!i){p=h+25|0;if(a[p>>0]|0){q=c[h+112>>2]|0;l=k;i=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(q,1)|0)){m=c[q+100>>2]|0;n=m+8|0;if(!(b[n>>1]&9216)){k=m;c[k>>2]=i;c[k+4>>2]=l;b[n>>1]=4;break}else{Pg(m,i,l);break}}while(0);if(a[p>>0]|0){l=h+21|0;i=0;do{Yc(q,i+2|0,c[j+(i+3+(d[l>>0]|0)<<2)>>2]|0)|0;i=i+1|0}while(i>>>0<(d[p>>0]|0)>>>0)}Gc(q)|0;if(q){i=c[q>>2]|0;j=q+136|0;k=c[j+4>>2]|0;if((k|0)>0|(k|0)==0&(c[j>>2]|0)>>>0>0)hc(i,q);l=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;j=q+64|0;c[j>>2]=0;c[j+4>>2]=0;if((l|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&l;break}}else i=0}else i=0}}}while(0)}}Ts(h);h=i;Ra=x;return h|0}function Ns(b){b=b|0;b=b+24|0;a[b>>0]=(a[b>>0]|0)+1<<24>>24;return 0}function Os(b){b=b|0;var d=0,e=0;a[b+24>>0]=0;d=b+76|0;e=c[d>>2]|0;if(!e)return 0;if(c[b+56>>2]|0)return 0;c[d>>2]=0;b=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,e);return 0}d=e;if((c[b+304>>2]|0)>>>0<=d>>>0?(c[b+308>>2]|0)>>>0>d>>>0:0){d=b+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return 0}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return 0}return 0}function Ps(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+48|0;f=g;h=c[b+32>>2]|0;e=c[b+36>>2]|0;c[f>>2]=h;c[f+4>>2]=e;c[f+8>>2]=d;c[f+12>>2]=h;c[f+16>>2]=e;c[f+20>>2]=d;c[f+24>>2]=h;c[f+28>>2]=e;c[f+32>>2]=d;f=Bb(57845,f)|0;if(!f){h=7;Ra=g;return h|0}d=b+76|0;e=c[d>>2]|0;do if((e|0?(a[b+24>>0]|0)==0:0)?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=nd(c[b+12>>2]|0,f,0,0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](f);h=d;Ra=g;return h|0}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);h=d;Ra=g;return h|0}return 0}function Qs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+24|0;f=a[e>>0]|0;a[e>>0]=0;d=b+76|0;g=c[d>>2]|0;if(!g){a[e>>0]=f;return 0}if(c[b+56>>2]|0){a[e>>0]=f;return 0}c[d>>2]=0;d=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,g);a[e>>0]=f;return 0}b=g;if((c[d+304>>2]|0)>>>0<=b>>>0?(c[d+308>>2]|0)>>>0>b>>>0:0){b=d+300|0;c[g>>2]=c[b>>2];c[b>>2]=g;a[e>>0]=f;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);a[e>>0]=f;return 0}else{b=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);a[e>>0]=f;return 0}return 0}function Rs(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0;if(!b){h=0;return h|0}h=a[b>>0]|0;g=d[208+(h&255)>>0]|0;c=g+-110|0;h=h<<24>>24==0;if(!(h|(c|0)!=0)){e=57990;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-112|0;if(!(h|(c|0)!=0)){e=38138;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-114|0;if(h|(c|0)!=0){i=c;i=(i|0)==0;i=i&1;return i|0}e=38132;do{b=b+1|0;e=e+1|0;i=a[b>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0));i=(c|0)==0;i=i&1;return i|0}function Ss(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+240|0;s=T+232|0;S=T+224|0;P=T+216|0;O=T+208|0;N=T+192|0;M=T+184|0;K=T+176|0;J=T+168|0;G=T+160|0;D=T+144|0;C=T+136|0;B=T+128|0;A=T+120|0;z=T+112|0;x=T+104|0;v=T+96|0;u=T+88|0;t=T+80|0;r=T+72|0;H=T+64|0;p=T+56|0;q=T+48|0;I=T;l=T+40|0;k=T+32|0;if((f|0)>103){c[k>>2]=56536;S=Bb(31408,k)|0;c[i>>2]=S;i=1;Ra=T;return i|0}c[l>>2]=1;vd(b,1,l)|0;w=g+4|0;l=Eu(c[w>>2]|0)|0;y=g+8|0;m=Eu(c[y>>2]|0)|0;k=l+506+m|0;R=pb(k,0)|0;if(!R){i=7;Ra=T;return i|0}gw(R|0,0,k|0)|0;c[R+40>>2]=1;c[R>>2]=30764;n=R+504|0;E=R+32|0;c[E>>2]=n;o=n+(l+1)|0;F=R+36|0;c[F>>2]=o;a[R+22>>0]=(e|0)!=0&1;ew(n|0,c[w>>2]|0,l|0)|0;ew(o|0,c[y>>2]|0,m|0)|0;o=zb(b)|0;c[I>>2]=c[g+12>>2];Eb(o,56609,I);a:do if((f|0)>4){l=R+25|0;m=R+21|0;k=4;while(1){e=c[g+(k<<2)>>2]|0;n=a[l>>0]|0;if((a[e>>0]|0)==43){a[l>>0]=n+1<<24>>24;c[q>>2]=e+1;Eb(o,56627,q)}else{if(n<<24>>24){m=1;break a}a[m>>0]=(a[m>>0]|0)+1<<24>>24;c[p>>2]=e;Eb(o,56627,p)}k=k+1|0;if((k|0)>=(f|0)){m=0;break}}}else m=0;while(0);Eb(o,56631,H);do if((o|0)!=0&(o|0)!=29632){k=o+4|0;l=c[k>>2]|0;if(((l|0)!=0?(a[l+(c[o+16>>2]|0)>>0]=0,(c[o+12>>2]|0)!=0):0)?(a[o+21>>0]&4)==0:0)e=$d(o)|0;else e=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{q=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}if(e){if(!m){k=td(b,e)|0;if(!k)k=0;else{l=pd(b)|0;Q=24}}else{k=1;l=56572;Q=24}if((Q|0)==24){c[r>>2]=l;r=Bb(31408,r)|0;c[i>>2]=r}if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{r=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}if(!k){k=a[R+21>>0]|0;r=(k&255)>>>1;a[R+20>>0]=r;if(r<<24>>24)if((k&255)<=10)if(!(k&1)){e=R+23|0;a[e>>0]=((k&255)<<2)+8;n=(j|0)==0;k=c[E>>2]|0;do if(n){l=c[F>>2]|0;c[u>>2]=k;c[u+4>>2]=l;l=Bb(56634,u)|0;m=R+16|0;if(!l){k=7;Q=48}else{c[u>>2]=0;k=qd(b,l,-1,128,0,u,0)|0;if(k|0){Q=48;break}k=c[u>>2]|0;if((Gc(k)|0)==100){u=Nc(k,0)|0;c[m>>2]=u}k=gc(k)|0;if(k|0){Q=48;break}if((c[m>>2]|0)>=448){k=0;break}c[v>>2]=c[F>>2];k=Bb(56691,v)|0;c[i>>2]=k;k=267}}else{c[t>>2]=k;l=Bb(54428,t)|0;if(!l){k=7;Q=48}else{c[t>>2]=0;k=qd(b,l,-1,128,0,t,0)|0;if(k|0){Q=48;break}k=c[t>>2]|0;if((Gc(k)|0)==100)m=(Nc(k,0)|0)+-64|0;else m=-64;k=gc(k)|0;if(k|0){Q=48;break}k=((d[e>>0]|0)*51|0)+4|0;c[R+16>>2]=(k|0)<(m|0)?k:m;k=0}}while(0);if((Q|0)==48){v=pd(b)|0;c[x>>2]=v;x=Bb(31408,x)|0;c[i>>2]=x;if(!l)break}if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{x=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}if(k|0)break;f=c[w>>2]|0;o=c[y>>2]|0;c[R+12>>2]=b;do if(!n){m=zb(b)|0;c[z>>2]=f;c[z+4>>2]=o;Eb(m,57135,z);l=R+25|0;if(a[l>>0]|0){k=0;do{c[A>>2]=k;Eb(m,57197,A);k=k+1|0}while(k>>>0<(d[l>>0]|0)>>>0)}c[B>>2]=f;c[B+4>>2]=o;Eb(m,57202,B);c[C>>2]=f;c[C+4>>2]=o;Eb(m,57266,C);C=c[R+16>>2]|0;c[D>>2]=f;c[D+4>>2]=o;c[D+8>>2]=C;Eb(m,57336,D);if(!((m|0)!=0&(m|0)!=29632)){k=7;Q=122;break}k=m+4|0;l=c[k>>2]|0;do if(!l)Q=62;else{a[l+(c[m+16>>2]|0)>>0]=0;if(!(c[m+12>>2]|0)){Q=62;break}if(a[m+21>>0]&4){Q=62;break}l=$d(m)|0}while(0);if((Q|0)==62)l=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{Q=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}if(!l){k=7;Q=122;break}k=nd(b,l,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{Q=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}if(k)Q=122;else Q=71}else Q=71;while(0);b:do if((Q|0)==71){c[I>>2]=R+80;c[I+4>>2]=R+84;c[I+8>>2]=R+88;c[I+12>>2]=R+92;c[I+16>>2]=R+96;c[I+20>>2]=R+100;c[I+24>>2]=R+104;c[I+28>>2]=R+108;k=Rd(b,c[E>>2]|0,35174,0,0,0,0,0,0)|0;do if(!k){e=c[F>>2]|0;c[G>>2]=c[E>>2];c[G+4>>2]=e;e=Bb(57611,G)|0;if(!e){k=7;Q=85;break}k=qd(b,e,-1,128,0,H,0)|0;c:do switch(k|0){case 0:{k=c[H>>2]|0;if((Gc(k)|0)==100){l=Oc(k,0)|0;m=L()|0}else{l=0;m=0}k=gc(k)|0;if(k|0)break c;if((l|0)==0&(m|0)==0){Q=79;break c}H=(m|0)>0|(m|0)==0&l>>>0>100;k=R+48|0;c[k>>2]=H?l:100;c[k+4>>2]=H?m:0;k=0;break}case 7:break;default:Q=79}while(0);if((Q|0)==79){k=R+48|0;c[k>>2]=1048576;c[k+4>>2]=0;k=0}if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{Q=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}if(!k)Q=88;else Q=87}else{Q=R+48|0;c[Q>>2]=1048576;c[Q+4>>2]=0;if((k|0)!=1){Q=85;break}Q=88}while(0);d:do if((Q|0)==85)Q=87;else if((Q|0)==88){e=R+25|0;m=0;while(1){if((m|0)==3?(a[e>>0]|0)!=0:0)k=57385;else k=c[26432+(m<<2)>>2]|0;c[J>>2]=f;c[J+4>>2]=o;l=Bb(k,J)|0;if(!l){k=7;g=e;break d}k=qd(b,l,-1,133,0,c[I+(m<<2)>>2]|0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{H=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}m=m+1|0;if(!(m>>>0<8&(k|0)==0)){g=e;break}}}while(0);if((Q|0)==87)g=R+25|0;do if(a[g>>0]|0){c[K>>2]=f;c[K+4>>2]=o;K=Bb(57493,K)|0;c[R+64>>2]=K;if(!K){k=7;Q=122;break b}p=zb(b)|0;c[M>>2]=f;c[M+4>>2]=o;Eb(p,57538,M);if(a[g>>0]|0){e=R+26|0;n=p+16|0;o=p+8|0;f=p+4|0;m=0;do{do if(m|0){k=c[n>>2]|0;l=k+1|0;if(l>>>0<(c[o>>2]|0)>>>0){c[n>>2]=l;a[(c[f>>2]|0)+k>>0]=44;break}else{wb(p,41685,1);break}}while(0);k=m+2|0;if(m>>>0<(d[e>>0]|0)>>>0){c[N>>2]=m;c[N+4>>2]=k;c[N+8>>2]=m;Eb(p,57565,N)}else{c[O>>2]=m;c[O+4>>2]=k;Eb(p,57587,O)}m=m+1|0}while(m>>>0<(d[g>>0]|0)>>>0)}Eb(p,57595,P);if(!((p|0)!=0&(p|0)!=29632)){k=7;Q=122;break b}k=p+4|0;l=c[k>>2]|0;do if(!l)Q=114;else{a[l+(c[p+16>>2]|0)>>0]=0;if(!(c[p+12>>2]|0)){Q=114;break}if(a[p+21>>0]&4){Q=114;break}l=$d(p)|0}while(0);if((Q|0)==114)l=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{P=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}if(!l){k=7;Q=122;break b}k=qd(b,l,-1,133,0,R+112|0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{P=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(k|0)break;c[h>>2]=R;i=0;Ra=T;return i|0}while(0);b=pd(b)|0;c[S>>2]=b;S=Bb(31408,S)|0;c[i>>2]=S;break}else k=1;else k=3;else k=2;c[s>>2]=c[26400+(k<<2)>>2];k=Bb(31408,s)|0;c[i>>2]=k;k=1}}else k=7}else k=7;while(0);Ts(R);i=k;Ra=T;return i|0}function Ts(b){b=b|0;var d=0,e=0,f=0;d=b+40|0;e=(c[d>>2]|0)+-1|0;c[d>>2]=e;if(e|0)return;a[b+24>>0]=0;d=b+76|0;e=c[d>>2]|0;do if(e|0?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}f=e;if((c[d+304>>2]|0)>>>0<=f>>>0?(c[d+308>>2]|0)>>>0>f>>>0:0){f=d+300|0;c[e>>2]=c[f>>2];c[f>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;d=c[b+64>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{f=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{f=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function Us(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!b){b=0;return b|0}f=b+16|0;g=(c[f>>2]|0)+-1|0;c[f>>2]=g;if(g|0){b=0;return b|0}f=a+60|0;c[f>>2]=(c[f>>2]|0)+-1;f=b+8|0;g=f;if((c[g>>2]|0)==1&(c[g+4>>2]|0)==0)c[a+28>>2]=-1;d=c[b>>2]|0;if((d|0)!=0?(e=Us(a,d)|0,(e|0)!=0):0)g=e;else g=Vs(a,b)|0;d=c[f>>2]|0;if(!((d|0)==0&(c[f+4>>2]|0)==0)){d=a+116+(((d>>>0)%97|0)<<2)|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;else d=e+28|0}a=b+28|0;c[d>>2]=c[a>>2];c[a>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=g;return b|0}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=g;return b|0}return 0}function Vs(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=e+20|0;if(!(c[j>>2]|0)){n=0;return n|0}m=c[d+80>>2]|0;n=e+8|0;g=n;f=c[g>>2]|0;g=c[g+4>>2]|0;do if(((f|0)!=0|(g|0)!=0)&(Vc(m,1)|0)==0){h=c[m+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){c[h>>2]=f;c[h+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);f=c[e+24>>2]|0;g=c[d+16>>2]|0;if((f|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;c[j>>2]=0;if(!m)f=0;else l=12}else{f=yc((c[m+100>>2]|0)+40|0,f,g,0,0)|0;if(f|0?(k=c[m>>2]|0,c[k+64>>2]=f,Ne(k,f),k=c[m>>2]|0,(f|0)==3082|(a[k+81>>0]|0)!=0):0)og(k);Gc(m)|0;c[j>>2]=0;l=12}do if((l|0)==12){f=c[m>>2]|0;l=m+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(f,m);g=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;l=m+64|0;c[l>>2]=0;c[l+4>>2]=0;if((g|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7;break}else{f=c[f+68>>2]&g;break}}while(0);Vc(m,2)|0;m=n;if(!((f|0)==0&((c[m>>2]|0)==0&(c[m+4>>2]|0)==0))){n=f;return n|0}l=(c[d+12>>2]|0)+40|0;m=c[l>>2]|0;l=c[l+4>>2]|0;c[n>>2]=m;c[n+4>>2]=l;n=d+116+(((m>>>0)%97|0)<<2)|0;c[e+28>>2]=c[n>>2];c[n>>2]=e;n=0;return n|0}function Ws(b,e,f){b=b|0;e=+e;f=f|0;var h=0,i=0,j=0,k=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=Ra;Ra=Ra+32|0;t=u;s=b+5|0;i=(a[s>>0]|0)==0;do if(i)if(c[b+24>>2]|0){h=c[b+32>>2]|0;q=b+84+((f&255)<<2)|0;c[q>>2]=(c[q>>2]|0)+1;if(!h)break;else{r=6;break}}else{t=b+84+((f&255)<<2)|0;c[t>>2]=(c[t>>2]|0)+1;break}else{h=b+84+((f&255)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=b+40|0;r=6}while(0);if((r|0)==6){k=+g[h>>3];do if(!(k>e)){if(k==e?(d[h+16>>0]|0)>(f&255):0)break;m=b+24|0;i=c[m>>2]|0;l=b+20|0;h=c[l>>2]|0;do if((i|0)>=(h|0)){i=(h<<1)+8|0;j=b+32|0;h=c[j>>2]|0;if(mb()|0){b=0;Ra=u;return b|0}h=sb(h,i*24|0,0)|0;if(!h){b=0;Ra=u;return b|0}else{c[j>>2]=h;c[l>>2]=i;p=j;i=c[m>>2]|0;j=h;break}}else{j=b+32|0;p=j;j=c[j>>2]|0}while(0);c[m>>2]=i+1;h=j+(i*24|0)|0;g[h>>3]=e;a[j+(i*24|0)+16>>0]=f;if((i|0)<=0){b=h;Ra=u;return b|0}o=b+32|0;a:while(1){l=(i+-1|0)/2|0;m=j+(l*24|0)|0;k=+g[m>>3];if(!(e<k)){if(e>k){r=49;break}if((d[h+16>>0]|0)>=(d[j+(l*24|0)+16>>0]|0)){r=49;break}}h=j+(l*24|0)|0;c[t>>2]=c[h>>2];c[t+4>>2]=c[h+4>>2];c[t+8>>2]=c[h+8>>2];c[t+12>>2]=c[h+12>>2];c[t+16>>2]=c[h+16>>2];c[t+20>>2]=c[h+20>>2];j=j+(i*24|0)|0;c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];c[h+16>>2]=c[j+16>>2];c[h+20>>2]=c[j+20>>2];h=(c[o>>2]|0)+(i*24|0)|0;c[h>>2]=c[t>>2];c[h+4>>2]=c[t+4>>2];c[h+8>>2]=c[t+8>>2];c[h+12>>2]=c[t+12>>2];c[h+16>>2]=c[t+16>>2];c[h+20>>2]=c[t+20>>2];h=l+1|0;j=i+1|0;do if((i|0)<9)if((i|0)<=3){r=b+64+(h<<2)|0;s=c[r>>2]|0;f=b+64+(j<<2)|0;c[r>>2]=c[f>>2];c[f>>2]=s;if((i|0)==3)break;else{h=m;r=49;break a}}else{f=b+64+(h<<2)|0;Us(c[b>>2]|0,c[f>>2]|0)|0;c[f>>2]=0;break}while(0);i=l;h=m;j=c[p>>2]|0;e=+g[m>>3]}if((r|0)==49){Ra=u;return h|0}}while(0);if(!i){m=b+24|0;j=c[m>>2]|0;l=b+20|0;h=c[l>>2]|0;do if((j|0)>=(h|0)){i=(h<<1)+8|0;j=b+32|0;h=c[j>>2]|0;if(mb()|0){b=0;Ra=u;return b|0}h=sb(h,i*24|0,0)|0;if(!h){b=0;Ra=u;return b|0}else{c[j>>2]=h;c[l>>2]=i;q=j;i=h;j=c[m>>2]|0;l=h;break}}else{q=b+32|0;l=c[q>>2]|0;i=l}while(0);c[m>>2]=j+1;h=l+(j*24|0)|0;g[h>>3]=e;a[l+(j*24|0)+16>>0]=f;b:do if((j|0)>0){p=b+32|0;n=e;while(1){m=(j+-1|0)/2|0;o=l+(m*24|0)|0;k=+g[o>>3];if(!(n<k)){if(n>k){r=26;break b}if((d[h+16>>0]|0)>=(d[l+(m*24|0)+16>>0]|0))break b}h=l+(m*24|0)|0;c[t>>2]=c[h>>2];c[t+4>>2]=c[h+4>>2];c[t+8>>2]=c[h+8>>2];c[t+12>>2]=c[h+12>>2];c[t+16>>2]=c[h+16>>2];c[t+20>>2]=c[h+20>>2];i=l+(j*24|0)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];c[h+20>>2]=c[i+20>>2];h=(c[p>>2]|0)+(j*24|0)|0;c[h>>2]=c[t>>2];c[h+4>>2]=c[t+4>>2];c[h+8>>2]=c[t+8>>2];c[h+12>>2]=c[t+12>>2];c[h+16>>2]=c[t+16>>2];c[h+20>>2]=c[t+20>>2];h=m+1|0;i=j+1|0;do if((j|0)<9)if((j|0)<=3){v=b+64+(h<<2)|0;h=c[v>>2]|0;l=b+64+(i<<2)|0;c[v>>2]=c[l>>2];c[l>>2]=h;if((j|0)==3)break;else{h=o;r=26;break b}}else{v=b+64+(h<<2)|0;Us(c[b>>2]|0,c[v>>2]|0)|0;c[v>>2]=0;break}while(0);l=c[q>>2]|0;j=m;h=o;i=l;n=+g[o>>3]}}else r=26;while(0);do if((r|0)==26)if(!h){v=0;Ra=u;return v|0}else{i=c[b+32>>2]|0;break}while(0);i=h-i|0;if((i|0)<96){c[b+64+(((i|0)/24|0)+1<<2)>>2]=c[b+64>>2];i=b+64|0}else{i=b+64|0;Us(c[b>>2]|0,c[i>>2]|0)|0}c[i>>2]=0;v=b+40|0;c[h>>2]=c[v>>2];c[h+4>>2]=c[v+4>>2];c[h+8>>2]=c[v+8>>2];c[h+12>>2]=c[v+12>>2];c[h+16>>2]=c[v+16>>2];c[h+20>>2]=c[v+20>>2]}}v=b+40|0;g[v>>3]=e;a[b+56>>0]=f;a[s>>0]=1;Ra=u;return v|0}function Xs(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+16|0;m=p;i=c[b+116+(((e>>>0)%97|0)<<2)>>2]|0;a:do if(i|0){j=i;while(1){o=j+8|0;if((c[o>>2]|0)==(e|0)?(c[o+4>>2]|0)==(f|0):0)break;i=c[j+28>>2]|0;if(!i)break a;else j=i}do if(g|0?(c[j>>2]|0)==0:0){i=g;while(1){if((i|0)==(j|0)){i=267;n=63;break}i=c[i>>2]|0;if(!i){n=10;break}}if((n|0)==10){b=g+16|0;c[b>>2]=(c[b>>2]|0)+1;c[j>>2]=g;break}else if((n|0)==63){Ra=p;return i|0}}while(0);b=j+16|0;c[b>>2]=(c[b>>2]|0)+1;c[h>>2]=j;h=0;Ra=p;return h|0}while(0);o=b+76|0;k=c[o>>2]|0;do if(k){c[o>>2]=0;i=ld(k,e,f)|0;c[o>>2]=k;if(!i){l=b+16|0;i=c[l>>2]|0;n=48;break}j=b+24|0;do if((a[j>>0]|0)==0?(c[b+56>>2]|0)==0:0){c[o>>2]=0;l=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}n=k;if((c[l+304>>2]|0)>>>0<=n>>>0?(c[l+308>>2]|0)>>>0>n>>>0:0){n=l+300|0;c[k>>2]=c[n>>2];c[n>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if((i|0)!=7){k=c[o>>2]|0;if(!k){n=28;break}else{n=35;break}}else{h=7;Ra=p;return h|0}}else n=28;while(0);do if((n|0)==28){c[m>>2]=c[b+36>>2];j=Bb(57749,m)|0;if(!j){h=7;Ra=p;return h|0}i=ad(c[b+12>>2]|0,c[b+32>>2]|0,j,57757,e,f,0,o)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{n=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}k=c[o>>2]|0;if(!i){l=b+16|0;i=c[l>>2]|0;if(!k){j=0;k=l;n=50;break}else{n=48;break}}if(!k)n=46;else{j=b+24|0;n=35}}while(0);do if((n|0)==35)if((a[j>>0]|0)==0?(c[b+56>>2]|0)==0:0){c[o>>2]=0;j=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(j|0){if(c[j+480>>2]|0){Xd(j,k);n=46;break}b=k;if((c[j+304>>2]|0)>>>0<=b>>>0?(c[j+308>>2]|0)>>>0>b>>>0:0){n=j+300|0;c[k>>2]=c[n>>2];c[n>>2]=k;n=46;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);n=46;break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);n=46;break}}else n=46;else if((n|0)==48)if(!(c[k+16>>2]|0)){j=0;k=l;n=50}else{j=c[k>>2]|0;k=l;n=50}while(0);do if((n|0)==46){c[h>>2]=0;i=(i|0)==1?267:i;j=0}else if((n|0)==50)if((i|0)==(j|0)){j=pb(i+32|0,0)|0;if(j){c[j>>2]=g;i=j+32|0;c[j+24>>2]=i;c[j+16>>2]=1;n=b+60|0;c[n>>2]=(c[n>>2]|0)+1;n=j+8|0;c[n>>2]=e;c[n+4>>2]=f;c[j+20>>2]=0;c[j+28>>2]=0;i=jd(c[o>>2]|0,i,c[k>>2]|0,0,81)|0;if((e|0)==1&(f|0)==0){f=c[j+24>>2]|0;f=d[f>>0]<<8|d[f+1>>0];c[b+28>>2]=f;i=f>>>0>40?267:i}if(!i){f=c[j+24>>2]|0;if((d[f+2>>0]<<8|d[f+3>>0]|0)>(((c[b+16>>2]|0)+-4|0)/(d[b+23>>0]|0)|0|0))i=267;else{if(g|0){g=g+16|0;c[g>>2]=(c[g>>2]|0)+1}i=b+116+((((c[j+8>>2]|0)>>>0)%97|0)<<2)|0;c[j+28>>2]=c[i>>2];c[i>>2]=j;i=0;break}}b=b+60|0;c[b>>2]=(c[b>>2]|0)+-1;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=0;break}else{b=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=0;break}}else{i=7;j=0}}else{i=267;j=0}while(0);c[h>>2]=j;h=i;Ra=p;return h|0}function Ys(b){b=b|0;var e=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0;Pa=Ra;Ra=Ra+96|0;ua=Pa;Fa=Pa+80|0;za=c[b>>2]|0;Ma=c[b+12>>2]|0;Na=(a[za+22>>0]|0)==1;Oa=b+5|0;va=b+24|0;wa=b+40|0;xa=b+32|0;ya=b+48|0;za=za+23|0;Aa=(Ma|0)>0;Ba=b+16|0;Ca=ua+8|0;Da=ua+72|0;Ea=ua+64|0;Ga=ua+56|0;Ha=ua+48|0;Ia=ua+40|0;Ja=ua+32|0;Ka=ua+24|0;La=ua+16|0;m=0;e=0;a:while(1){j=a[Oa>>0]|0;if(!(j<<24>>24)){if(!(c[va>>2]|0)){e=1;ta=66;break}i=c[xa>>2]|0;if(!i){e=1;ta=66;break}}else i=wa;if(!(a[i+16>>0]|0)){e=0;ta=66;break}k=1-(j&255)|0;l=b+64+(k<<2)|0;j=c[l>>2]|0;if(!j){if(!k)e=ya;else e=(c[xa>>2]|0)+8|0;e=Xs(c[b>>2]|0,c[e>>2]|0,c[e+4>>2]|0,0,l)|0;j=c[l>>2]|0}if(e|0){ta=67;break}ra=j+24|0;sa=c[ra>>2]|0;sa=d[sa+2>>0]<<8|d[sa+3>>0];qa=i;j=m;e=0;b:while(1){oa=qa+18|0;k=a[oa>>0]|0;i=k&255;if(sa>>>0<=i>>>0)break;pa=(c[ra>>2]|0)+((G(d[za>>0]|0,i)|0)+4)|0;c:do if(Aa){O=qa+16|0;P=pa+8|0;Q=pa+1|0;R=pa+2|0;S=pa+3|0;T=pa+4|0;U=pa+5|0;V=pa+6|0;W=pa+7|0;X=pa+12|0;Y=pa+13|0;Z=pa+14|0;_=pa+15|0;$=pa+9|0;aa=pa+10|0;ba=pa+11|0;ca=pa+44|0;da=pa+45|0;ea=pa+46|0;fa=pa+47|0;ga=pa+40|0;ha=pa+41|0;ia=pa+42|0;ja=pa+43|0;ka=pa+36|0;la=pa+37|0;ma=pa+38|0;na=pa+39|0;r=pa+32|0;s=pa+33|0;t=pa+34|0;u=pa+35|0;v=pa+28|0;w=pa+29|0;x=pa+30|0;y=pa+31|0;z=pa+24|0;A=pa+25|0;B=pa+26|0;C=pa+27|0;D=pa+20|0;E=pa+21|0;F=pa+22|0;H=pa+23|0;I=pa+16|0;J=pa+17|0;K=pa+18|0;M=pa+19|0;N=qa+17|0;o=2;n=0;p=-1.0;d:do{l=c[Ba>>2]|0;m=c[l+(n*24|0)+4>>2]|0;e:do if((m|0)>69){e=c[l+(n*24|0)+16>>2]|0;i=c[e+28>>2]|0;if((m|0)==71?(a[O>>0]|0)==1:0){Va=cw(d[pa>>0]|0,0,56)|0;Sa=L()|0;Xa=cw(d[Q>>0]|0,0,48)|0;Sa=L()|0|Sa;Ua=cw(d[R>>0]|0,0,40)|0;Sa=Sa|(L()|0);Sa=Sa|d[S>>0];Ta=cw(d[T>>0]|0,0,24)|0;Sa=Sa|(L()|0);k=cw(d[U>>0]|0,0,16)|0;Sa=Sa|(L()|0);Qa=cw(d[V>>0]|0,0,8)|0;Sa=Sa|(L()|0);Sa=Sv(Xa|Va|Ua|Ta|k|Qa|0,Sa|0,d[W>>0]|0,0)|0;Qa=L()|0;k=e+40|0;c[k>>2]=Sa;c[k+4>>2]=Qa}if(Na){switch(i|0){case 10:{g[Da>>3]=+(d[da>>0]<<16|d[ca>>0]<<24|d[ea>>0]<<8|d[fa>>0]|0);g[Ea>>3]=+(d[ha>>0]<<16|d[ga>>0]<<24|d[ia>>0]<<8|d[ja>>0]|0);ta=29;break}case 8:{ta=29;break}case 6:{ta=30;break}case 4:{ta=31;break}default:{}}if((ta|0)==29){g[Ga>>3]=+(d[la>>0]<<16|d[ka>>0]<<24|d[ma>>0]<<8|d[na>>0]|0);g[Ha>>3]=+(d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0]|0);ta=30}if((ta|0)==30){g[Ia>>3]=+(d[w>>0]<<16|d[v>>0]<<24|d[x>>0]<<8|d[y>>0]|0);g[Ja>>3]=+(d[A>>0]<<16|d[z>>0]<<24|d[B>>0]<<8|d[C>>0]|0);ta=31}if((ta|0)==31){ta=0;g[Ka>>3]=+(d[E>>0]<<16|d[D>>0]<<24|d[F>>0]<<8|d[H>>0]|0);g[La>>3]=+(d[J>>0]<<16|d[I>>0]<<24|d[K>>0]<<8|d[M>>0]|0)}g[Ca>>3]=+(d[Y>>0]<<16|d[X>>0]<<24|d[Z>>0]<<8|d[_>>0]|0);q=+(d[$>>0]<<16|d[P>>0]<<24|d[aa>>0]<<8|d[ba>>0]|0)}else{switch(i|0){case 10:{g[Da>>3]=(c[h>>2]=d[da>>0]<<16|d[ca>>0]<<24|d[ea>>0]<<8|d[fa>>0],+f[h>>2]);g[Ea>>3]=(c[h>>2]=d[ha>>0]<<16|d[ga>>0]<<24|d[ia>>0]<<8|d[ja>>0],+f[h>>2]);ta=23;break}case 8:{ta=23;break}case 6:{ta=24;break}case 4:{ta=25;break}default:{}}if((ta|0)==23){g[Ga>>3]=(c[h>>2]=d[la>>0]<<16|d[ka>>0]<<24|d[ma>>0]<<8|d[na>>0],+f[h>>2]);g[Ha>>3]=(c[h>>2]=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0],+f[h>>2]);ta=24}if((ta|0)==24){g[Ia>>3]=(c[h>>2]=d[w>>0]<<16|d[v>>0]<<24|d[x>>0]<<8|d[y>>0],+f[h>>2]);g[Ja>>3]=(c[h>>2]=d[A>>0]<<16|d[z>>0]<<24|d[B>>0]<<8|d[C>>0],+f[h>>2]);ta=25}if((ta|0)==25){ta=0;g[Ka>>3]=(c[h>>2]=d[E>>0]<<16|d[D>>0]<<24|d[F>>0]<<8|d[H>>0],+f[h>>2]);g[La>>3]=(c[h>>2]=d[J>>0]<<16|d[I>>0]<<24|d[K>>0]<<8|d[M>>0],+f[h>>2])}g[Ca>>3]=(c[h>>2]=d[Y>>0]<<16|d[X>>0]<<24|d[Z>>0]<<8|d[_>>0],+f[h>>2]);q=(c[h>>2]=d[$>>0]<<16|d[P>>0]<<24|d[aa>>0]<<8|d[ba>>0],+f[h>>2])}g[ua>>3]=q;if((m|0)==70){c[Fa>>2]=0;e=Za[c[l+(n*24|0)+8>>2]&127](e,i,ua,Fa)|0;p=0.0;o=(c[Fa>>2]|0)==0?0:o}else{c[e+20>>2]=ua;c[e+32>>2]=(d[O>>0]|0)+-1;q=+g[qa>>3];g[e+48>>3]=q;Va=e+64|0;g[Va>>3]=q;Ua=d[N>>0]|0;c[e+56>>2]=Ua;Xa=e+60|0;c[Xa>>2]=Ua;e=Wa[c[l+(n*24|0)+8>>2]&127](e)|0;Xa=c[Xa>>2]|0;q=+g[Va>>3];p=p<0.0|q<p?q:p;o=(Xa|0)<(o|0)?Xa:o}if(!e){e=0;ta=49}else{k=1;j=e}}else{i=c[l+(n*24|0)>>2]<<2;if((a[O>>0]|0)!=1){k=pa+((i&1016)+8)|0;if((m+-65|0)>>>0<3){i=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];q=+g[l+(n*24|0)+8>>3];if(q>=(Na?+(i|0):(c[h>>2]=i,+f[h>>2]))){ta=49;break}if((m|0)!=65){ta=50;break}}else q=+g[l+(n*24|0)+8>>3];i=k+4|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];if(!(q<=(Na?+(i|0):(c[h>>2]=i,+f[h>>2])))){ta=50;break}else{ta=49;break}}i=pa+(i+8)|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];q=Na?+(i|0):(c[h>>2]=i,+f[h>>2]);switch(m|0){case 66:if(!(q<=+g[l+(n*24|0)+8>>3])){ta=50;break e}else{ta=49;break e}case 67:if(q<+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}case 68:if(!(q>=+g[l+(n*24|0)+8>>3])){ta=50;break e}else{ta=49;break e}case 69:if(q>+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}default:if(q==+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}}}while(0);if((ta|0)==49){ta=0;if(!o)ta=50;else k=0}if((ta|0)==50){ta=0;k=6;o=0}switch(k&7){case 6:break d;case 0:break;default:{i=qa;break c}}n=n+1|0}while((n|0)<(Ma|0));i=(a[oa>>0]|0)+1<<24>>24;a[oa>>0]=i;if(!o){i=qa;k=4}else ta=54}else{i=k+1<<24>>24;a[oa>>0]=i;p=-1.0;o=2;ta=54}while(0);if((ta|0)==54){ta=0;n=(d[qa+16>>0]|0)+255&255;if(!(n<<24>>24)){m=qa+8|0;k=i&255;i=k;k=k+255&255;l=c[m>>2]|0;m=c[m+4>>2]|0}else{Ua=cw(d[pa>>0]|0,0,56)|0;l=L()|0;Ta=cw(d[pa+1>>0]|0,0,48)|0;l=L()|0|l;Va=cw(d[pa+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[pa+3>>0];Xa=cw(d[pa+4>>0]|0,0,24)|0;l=l|(L()|0);m=cw(d[pa+5>>0]|0,0,16)|0;l=l|(L()|0);k=cw(d[pa+6>>0]|0,0,8)|0;l=l|(L()|0);l=Sv(Ta|Ua|Va|Xa|m|k|0,l|0,d[pa+7>>0]|0,0)|0;i=i&255;k=0;m=L()|0}if(sa>>>0<=i>>>0)Zs(b);i=Ws(b,p<0.0?0.0:p,n)|0;if(!i){e=7;ta=67;break a}a[i+17>>0]=o;Xa=i+8|0;c[Xa>>2]=l;c[Xa+4>>2]=m;a[i+18>>0]=k;k=5}switch(k|0){case 4:{qa=i;break}case 5:{ta=62;break b}default:{e=j;ta=67;break a}}}if((ta|0)==62){ta=0;i=d[i+18>>0]|0}if(sa>>>0<=i>>>0)Zs(b);m=j}if((ta|0)==66){a[b+4>>0]=e;Xa=0;Ra=Pa;return Xa|0}else if((ta|0)==67){Ra=Pa;return e|0}return 0}function Zs(b){b=b|0;var e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;p=r;i=b+5|0;e=a[i>>0]|0;f=b+64+(1-(e&255)<<2)|0;h=c[f>>2]|0;if(h){Us(c[b>>2]|0,h)|0;c[f>>2]=0;e=a[i>>0]|0}if(e<<24>>24){q=b+84+((d[b+56>>0]|0)<<2)|0;c[q>>2]=(c[q>>2]|0)+-1;a[i>>0]=0;Ra=r;return}e=b+24|0;f=c[e>>2]|0;if(!f){Ra=r;return}n=b+32|0;m=c[n>>2]|0;o=b+84+((d[m+16>>0]|0)<<2)|0;c[o>>2]=(c[o>>2]|0)+-1;o=f+-1|0;c[e>>2]=o;e=m+(o*24|0)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[m+16>>2]=c[e+16>>2];c[m+20>>2]=c[e+20>>2];e=b+64+(f<<2)|0;if((f|0)<5?(c[b+68>>2]=c[e>>2],c[e>>2]=0,(f|0)<=2):0){Ra=r;return}e=0;m=1;a:while(1){l=m+1|0;i=c[n>>2]|0;do if((l|0)<(o|0)){h=i+(l*24|0)|0;k=+g[h>>3];j=+g[i+(m*24|0)>>3];if(!(k<j)){if(k>j){q=21;break}if((d[i+(l*24|0)+16>>0]|0)>=(d[i+(m*24|0)+16>>0]|0)){q=21;break}}f=i+(e*24|0)|0;j=+g[f>>3];if(!(k<j)){if(k>j){q=30;break a}if((d[i+(l*24|0)+16>>0]|0)>=(d[i+(e*24|0)+16>>0]|0)){q=30;break a}};c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];c[p+16>>2]=c[f+16>>2];c[p+20>>2]=c[f+20>>2];c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];f=(c[n>>2]|0)+(l*24|0)|0;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];c[f+20>>2]=c[p+20>>2];f=e+1|0;h=m+2|0;do if((e|0)<4)if((m|0)>2){m=b+64+(f<<2)|0;Us(c[b>>2]|0,c[m>>2]|0)|0;c[m>>2]=0;break}else{f=b+64+(f<<2)|0;i=c[f>>2]|0;m=b+64+(h<<2)|0;c[f>>2]=c[m>>2];c[m>>2]=i;break}while(0);e=l}else q=21;while(0);if((q|0)==21){q=0;f=i+(m*24|0)|0;h=i+(e*24|0)|0;j=+g[f>>3];k=+g[h>>3];if(!(j<k)){if(j>k){q=30;break}if((d[i+(m*24|0)+16>>0]|0)>=(d[i+(e*24|0)+16>>0]|0)){q=30;break}};c[p>>2]=c[h>>2];c[p+4>>2]=c[h+4>>2];c[p+8>>2]=c[h+8>>2];c[p+12>>2]=c[h+12>>2];c[p+16>>2]=c[h+16>>2];c[p+20>>2]=c[h+20>>2];c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];c[h+16>>2]=c[f+16>>2];c[h+20>>2]=c[f+20>>2];f=(c[n>>2]|0)+(m*24|0)|0;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];c[f+20>>2]=c[p+20>>2];f=e+1|0;do if((e|0)<4)if((m|0)>3){l=b+64+(f<<2)|0;Us(c[b>>2]|0,c[l>>2]|0)|0;c[l>>2]=0;break}else{h=b+64+(f<<2)|0;i=c[h>>2]|0;l=b+64+(l<<2)|0;c[h>>2]=c[l>>2];c[l>>2]=i;break}while(0);e=m}m=e<<1|1;if((m|0)>=(o|0)){q=30;break}}if((q|0)==30){Ra=r;return}}function _s(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;l=o+16|0;j=o+8|0;g=o;i=o+28|0;c[i>>2]=0;n=d+36|0;m=c[n>>2]|0;c[g>>2]=c[d+32>>2];c[g+4>>2]=m;g=Bb(53869,g)|0;do if(!g){h=7;g=0}else{h=qd(c[d+12>>2]|0,g,-1,128,0,i,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}if(h|0){g=c[i>>2]|0;break}m=c[i>>2]|0;k=c[m>>2]|0;g=(m|0)==0;if(!f){if(!g?(b[m+144>>1]|0)!=0:0){g=c[m+116>>2]|0;do if(g){h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(h&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);h=k+81|0;if(a[h>>0]|0)if(!(c[k+180>>2]|0)){a[h>>0]=0;c[k+264>>2]=0;g=k+272|0;c[g>>2]=(c[g>>2]|0)+-1;g=0}else g=0}else g=0;c[j>>2]=c[n>>2];c[j+4>>2]=g;g=Bb(57776,j)|0}else{if(!g){j=m+144|0;if((e[j>>1]|0)>>>0>f>>>0){g=c[m+116>>2]|0;h=g+(f*40|0)|0;do if(h){i=b[g+(f*40|0)+8>>1]|0;if((i&514)==514?(a[g+(f*40|0)+10>>0]|0)==1:0){h=c[g+(f*40|0)+16>>2]|0;break}if(!(i&1))h=Gg(h,1)|0;else h=0}else h=0;while(0);g=k+81|0;if(a[g>>0]|0)if(!(c[k+180>>2]|0)){a[g>>0]=0;c[k+264>>2]=0;h=k+272|0;c[h>>2]=(c[h>>2]|0)+-1;h=0}else h=0}else h=0;f=f+1|0;k=c[m>>2]|0;if(f>>>0<(e[j>>1]|0)>>>0){g=c[m+116>>2]|0;i=g+(f*40|0)|0;do if(i){j=b[g+(f*40|0)+8>>1]|0;if((j&514)==514?(a[g+(f*40|0)+10>>0]|0)==1:0){g=c[g+(f*40|0)+16>>2]|0;break}if(!(j&1))g=Gg(i,1)|0;else g=0}else g=0;while(0);i=k+81|0;if(a[i>>0]|0)if(!(c[k+180>>2]|0)){a[i>>0]=0;c[k+264>>2]=0;g=k+272|0;c[g>>2]=(c[g>>2]|0)+-1;g=0}else g=0}else g=0}else{h=0;g=0}c[l>>2]=c[n>>2];c[l+4>>2]=h;c[l+8>>2]=g;g=Bb(57808,l)|0}c[d+8>>2]=g;gc(m)|0;d=19;Ra=o;return d|0}while(0);gc(g)|0;d=h;Ra=o;return d|0}function $s(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;x=Ra;Ra=Ra+64|0;t=x+56|0;u=x;v=x+52|0;w=x+48|0;c[v>>2]=0;c[w>>2]=0;i=Xs(e,1,0,0,w)|0;a:do if(!i){c[v>>2]=0;k=e+88|0;h=c[k>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){s=h;c[s>>2]=f;c[s+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);s=(Gc(c[k>>2]|0)|0)==100;j=c[k>>2]|0;do if(s){i=Oc(j,0)|0;i=Xs(e,i,L()|0,0,v)|0;h=c[k>>2]|0;if(h){j=c[h>>2]|0;s=h+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(j,h);s=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;r=h+64|0;c[r>>2]=0;c[r+4>>2]=0;if((s|0)==3082|(a[j+81>>0]|0)!=0)og(j)}}else if(j){h=c[j>>2]|0;s=j+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(h,j);i=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;s=j+64|0;c[s>>2]=0;c[s+4>>2]=0;if((i|0)==3082|(a[h+81>>0]|0)!=0){og(h);i=7;break a}else{i=c[h+68>>2]&i;break}}else i=0;while(0);l=c[v>>2]|0;b:do if((i|0)==0&(l|0)!=0){i=c[l+24>>2]|0;j=d[i+2>>0]<<8|d[i+3>>0];c:do if(j|0){k=d[e+23>>0]|0;h=0;while(1){s=i+((G(h,k)|0)+4)|0;A=cw(d[s>>0]|0,0,56)|0;r=L()|0;B=cw(d[s+1>>0]|0,0,48)|0;r=L()|0|r;z=cw(d[s+2>>0]|0,0,40)|0;r=r|(L()|0);r=r|d[s+3>>0];y=cw(d[s+4>>0]|0,0,24)|0;r=r|(L()|0);p=cw(d[s+5>>0]|0,0,16)|0;r=r|(L()|0);q=cw(d[s+6>>0]|0,0,8)|0;r=r|(L()|0);s=Sv(B|A|z|y|p|q|0,r|0,d[s+7>>0]|0,0)|0;if((s|0)==(f|0)&(L()|0)==(g|0))break;h=h+1|0;if(h>>>0>=j>>>0)break c}h=ct(e,l,h,0)|0;i=Us(e,l)|0;if(!h)break b;else{i=h;break a}}while(0);Us(e,l)|0;i=267;break a}while(0);if(!i){j=e+96|0;h=c[j>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){B=h;c[B>>2]=f;c[B+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;B=h+136|0;A=c[B+4>>2]|0;if((A|0)>0|(A|0)==0&(c[B>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;B=h+64|0;c[B>>2]=0;c[B+4>>2]=0;if(!((j|0)==3082|(a[i+81>>0]|0)!=0)){i=c[i+68>>2]&j;if(!i)break;else break a}else{og(i);i=7;break a}}while(0);j=e+28|0;if((c[j>>2]|0)>0?(n=c[w>>2]|0,o=n+24|0,m=c[o>>2]|0,(d[m+2>>0]<<8|d[m+3>>0]|0)==1):0){c[t>>2]=0;y=cw(d[m+4>>0]|0,0,56)|0;h=L()|0;s=cw(d[m+5>>0]|0,0,48)|0;h=L()|0|h;z=cw(d[m+6>>0]|0,0,40)|0;h=h|(L()|0);h=h|d[m+7>>0];A=cw(d[m+8>>0]|0,0,24)|0;h=h|(L()|0);B=cw(d[m+9>>0]|0,0,16)|0;h=h|(L()|0);i=cw(d[m+10>>0]|0,0,8)|0;h=h|(L()|0);h=Sv(s|y|z|A|B|i|0,h|0,d[m+11>>0]|0,0)|0;h=Xs(e,h,L()|0,n,t)|0;i=c[t>>2]|0;if(!h)h=dt(e,i,(c[j>>2]|0)+-1|0)|0;i=Us(e,i)|0;i=(h|0)==0?i:h;if(!i){A=(c[j>>2]|0)+-1|0;c[j>>2]=A;B=c[o>>2]|0;a[B>>0]=A>>>8;a[B+1>>0]=A;c[n+20>>2]=1}}else i=0}}while(0);q=e+68|0;j=c[q>>2]|0;c[v>>2]=j;h=(i|0)==0;if(!j){B=i;z=h;A=c[w>>2]|0;A=Us(e,A)|0;B=z?A:B;Ra=x;return B|0}r=e+60|0;p=e+23|0;s=e+21|0;do{o=j;n=j;d:do if(h){f=n+24|0;h=c[f>>2]|0;g=d[h+2>>0]<<8|d[h+3>>0];if(!g)i=0;else{m=n+8|0;l=0;while(1){B=G(l,d[p>>0]|0)|0;A=h+(B+4)|0;D=cw(d[A>>0]|0,0,56)|0;i=L()|0;E=cw(d[A+1>>0]|0,0,48)|0;i=L()|0|i;C=cw(d[A+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[A+3>>0];y=cw(d[A+4>>0]|0,0,24)|0;i=i|(L()|0);z=cw(d[A+5>>0]|0,0,16)|0;i=i|(L()|0);k=cw(d[A+6>>0]|0,0,8)|0;i=i|(L()|0);A=Sv(E|D|C|y|z|k|0,i|0,d[A+7>>0]|0,0)|0;i=L()|0;k=u;c[k>>2]=A;c[k+4>>2]=i;k=d[s>>0]|0;i=0;h=h+(B+12)|0;while(1){c[u+8+(i<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[u+8+((i|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];i=i+2|0;if(i>>>0>=k>>>0)break;else h=h+8|0}i=at(e,u,c[m>>2]|0,t)|0;if(!i){E=c[t>>2]|0;i=bt(e,E,u,c[m>>2]|0)|0;E=Us(e,E)|0;i=(i|0)==0?E:i}h=l+1|0;if(!(h>>>0<g>>>0&(i|0)==0))break d;l=h;h=c[f>>2]|0}}}while(0);h=c[n+28>>2]|0;c[q>>2]=h;c[r>>2]=(c[r>>2]|0)+-1;if(!j)j=h;else{if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{E=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}j=c[q>>2]|0}c[v>>2]=j;h=(i|0)==0}while((j|0)!=0);E=c[w>>2]|0;E=Us(e,E)|0;E=h?E:i;Ra=x;return E|0}function at(b,e,g,h){b=b|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;Ba=Ra;Ra=Ra+112|0;wa=Ba+48|0;za=Ba+96|0;xa=Ba;c[za>>2]=0;i=Xs(b,1,0,0,za)|0;ya=b+28|0;if(i|0){Aa=i;za=c[za>>2]|0;c[h>>2]=za;Ra=Ba;return Aa|0}D=b+23|0;H=b+21|0;E=b+20|0;F=b+22|0;I=wa+12|0;J=wa+8|0;K=wa+44|0;M=wa+40|0;N=wa+36|0;O=wa+32|0;P=wa+28|0;Q=wa+24|0;R=wa+20|0;S=wa+16|0;T=wa+12|0;U=wa+8|0;V=wa+44|0;W=wa+40|0;X=wa+36|0;Y=wa+32|0;Z=wa+28|0;_=wa+24|0;$=wa+20|0;aa=wa+16|0;ba=xa+12|0;ca=xa+8|0;da=xa+44|0;ea=xa+40|0;fa=xa+36|0;ga=xa+32|0;ha=xa+28|0;ia=xa+24|0;ja=xa+20|0;ka=xa+16|0;la=xa+12|0;ma=xa+8|0;na=xa+44|0;oa=xa+40|0;pa=xa+36|0;qa=xa+32|0;ra=xa+28|0;sa=xa+24|0;ta=xa+20|0;ua=xa+16|0;C=0;while(1){if((C|0)>=((c[ya>>2]|0)-g|0)){i=0;Aa=56;break}va=c[za>>2]|0;x=va+24|0;i=c[x>>2]|0;y=d[i+2>>0]<<8|d[i+3>>0];a:do if(!y){j=0;i=0}else{B=a[H>>0]|0;z=d[D>>0]|0;A=B&255;B=B&255;k=0;p=0.0;w=0.0;l=i;u=0;v=0;while(1){t=G(k,z)|0;j=l+(t+4)|0;Ea=cw(d[j>>0]|0,0,56)|0;i=L()|0;Fa=cw(d[j+1>>0]|0,0,48)|0;i=L()|0|i;Da=cw(d[j+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[j+3>>0];Ca=cw(d[j+4>>0]|0,0,24)|0;i=i|(L()|0);o=cw(d[j+5>>0]|0,0,16)|0;i=i|(L()|0);m=cw(d[j+6>>0]|0,0,8)|0;i=i|(L()|0);j=Sv(Fa|Ea|Da|Ca|o|m|0,i|0,d[j+7>>0]|0,0)|0;i=L()|0;m=xa;c[m>>2]=j;c[m+4>>2]=i;m=0;l=l+(t+12)|0;while(1){c[xa+8+(m<<2)>>2]=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];c[xa+8+((m|1)<<2)>>2]=d[l+5>>0]<<16|d[l+4>>0]<<24|d[l+6>>0]<<8|d[l+7>>0];m=m+2|0;if(m>>>0>=A>>>0)break;else l=l+8|0}l=wa;m=xa;o=l+48|0;do{c[l>>2]=c[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(o|0));t=a[E>>0]|0;o=(a[F>>0]|0)==0;if(o){switch(t<<24>>24){case 5:{n=+f[K>>2]-+f[M>>2];Aa=11;break}case 4:{n=1.0;Aa=11;break}case 3:{n=1.0;Aa=12;break}case 2:{n=1.0;Aa=13;break}default:q=1.0}if((Aa|0)==11){n=n*(+f[N>>2]-+f[O>>2]);Aa=12}if((Aa|0)==12){n=n*(+f[P>>2]-+f[Q>>2]);Aa=13}if((Aa|0)==13){Aa=0;q=n*(+f[R>>2]-+f[S>>2])}n=+f[J>>2];r=+f[I>>2]-n;m=0;while(1){s=+f[e+8+(m<<2)>>2];f[wa+8+(m<<2)>>2]=n<s?n:s;Fa=m|1;l=wa+8+(Fa<<2)|0;n=+f[l>>2];s=+f[e+8+(Fa<<2)>>2];f[l>>2]=n>s?n:s;l=m+2|0;if(l>>>0>=B>>>0)break;m=l;n=+f[wa+8+(l<<2)>>2]}s=q*r}else{switch(t<<24>>24){case 5:{Fa=c[V>>2]|0;Aa=c[W>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=16;break}case 4:{n=1.0;Aa=16;break}case 3:{n=1.0;Aa=17;break}case 2:{n=1.0;Aa=18;break}default:n=1.0}if((Aa|0)==16){Ea=c[X>>2]|0;Fa=c[Y>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=17}if((Aa|0)==17){Ea=c[Z>>2]|0;Fa=c[_>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=18}if((Aa|0)==18){Aa=0;Ea=c[$>>2]|0;Fa=c[aa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}m=c[T>>2]|0;l=c[U>>2]|0;m=Tv(m|0,((m|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;q=+(m>>>0)+4294967296.0*+(L()|0);m=0;while(1){Fa=c[e+8+(m<<2)>>2]|0;c[wa+8+(m<<2)>>2]=(l|0)<(Fa|0)?l:Fa;Fa=m|1;l=wa+8+(Fa<<2)|0;Ea=c[l>>2]|0;Fa=c[e+8+(Fa<<2)>>2]|0;c[l>>2]=(Ea|0)>(Fa|0)?Ea:Fa;l=m+2|0;if(l>>>0>=B>>>0)break;m=l;l=c[wa+8+(l<<2)>>2]|0}s=n*q}if(o){switch(t<<24>>24){case 5:{n=+f[K>>2]-+f[M>>2];Aa=30;break}case 4:{n=1.0;Aa=30;break}case 3:{n=1.0;Aa=31;break}case 2:{n=1.0;Aa=32;break}default:n=1.0}if((Aa|0)==30){n=n*(+f[N>>2]-+f[O>>2]);Aa=31}if((Aa|0)==31){n=n*(+f[P>>2]-+f[Q>>2]);Aa=32}if((Aa|0)==32){Aa=0;n=n*(+f[R>>2]-+f[S>>2])}r=n*(+f[I>>2]-+f[J>>2]);switch(t<<24>>24){case 5:{n=+f[da>>2]-+f[ea>>2];Aa=40;break}case 4:{n=1.0;Aa=40;break}case 3:{n=1.0;Aa=41;break}case 2:{n=1.0;Aa=42;break}default:n=1.0}if((Aa|0)==40){n=n*(+f[fa>>2]-+f[ga>>2]);Aa=41}if((Aa|0)==41){n=n*(+f[ha>>2]-+f[ia>>2]);Aa=42}if((Aa|0)==42){Aa=0;n=n*(+f[ja>>2]-+f[ka>>2])}q=n*(+f[ba>>2]-+f[ca>>2]);n=r}else{switch(t<<24>>24){case 5:{Fa=c[V>>2]|0;Aa=c[W>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=35;break}case 4:{n=1.0;Aa=35;break}case 3:{n=1.0;Aa=36;break}case 2:{n=1.0;Aa=37;break}default:n=1.0}if((Aa|0)==35){Ea=c[X>>2]|0;Fa=c[Y>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=36}if((Aa|0)==36){Ea=c[Z>>2]|0;Fa=c[_>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=37}if((Aa|0)==37){Aa=0;Ea=c[$>>2]|0;Fa=c[aa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}Ea=c[T>>2]|0;Fa=c[U>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;r=n*(+(Fa>>>0)+4294967296.0*+(L()|0));switch(t<<24>>24){case 5:{Fa=c[na>>2]|0;Aa=c[oa>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=46;break}case 4:{n=1.0;Aa=46;break}case 3:{n=1.0;Aa=47;break}case 2:{n=1.0;Aa=48;break}default:n=1.0}if((Aa|0)==46){Ea=c[pa>>2]|0;Fa=c[qa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=47}if((Aa|0)==47){Ea=c[ra>>2]|0;Fa=c[sa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=48}if((Aa|0)==48){Aa=0;Ea=c[ta>>2]|0;Fa=c[ua>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}Ea=c[la>>2]|0;Fa=c[ma>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;q=n*(+(Fa>>>0)+4294967296.0*+(L()|0));n=r}n=n-s;if(!((k|0)==0|n<w)?!(n==w&q<p):0){n=w;j=u;i=v}else p=q;k=k+1|0;if((k|0)==(y|0))break a;w=n;l=c[x>>2]|0;u=j;v=i}}while(0);i=Xs(b,j,i,va,za)|0;Us(b,va)|0;if(!i)C=C+1|0;else{Aa=56;break}}if((Aa|0)==56){Fa=c[za>>2]|0;c[h>>2]=Fa;Ra=Ba;return i|0}return 0}function bt(b,e,h,i){b=b|0;e=e|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0.0,H=0,I=0,J=0.0,K=0.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0.0;Sa=Ra;Ra=Ra+192|0;Ea=Sa;Ia=Sa+144|0;Fa=Sa+96|0;Ga=Sa+48|0;Ma=(i|0)>0;a:do if(Ma?(l=h,k=c[l>>2]|0,l=c[l+4>>2]|0,j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0,j|0):0){while(1){Qa=j+8|0;if((c[Qa>>2]|0)==(k|0)?(c[Qa+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break a}Us(b,c[j>>2]|0)|0;if(e|0){Qa=e+16|0;c[Qa>>2]=(c[Qa>>2]|0)+1}c[j>>2]=e}while(0);La=b+16|0;Qa=b+23|0;j=d[Qa>>0]|0;m=((c[La>>2]|0)+-4|0)/(j|0)|0;E=e+24|0;k=c[E>>2]|0;n=d[k+2>>0]<<8|d[k+3>>0];if((n|0)<(m|0)){j=k+((G(n,j)|0)+4)|0;Oa=h;l=c[Oa>>2]|0;Oa=c[Oa+4>>2]|0;Na=bw(l|0,Oa|0,56)|0;L()|0;a[j>>0]=Na;Na=bw(l|0,Oa|0,48)|0;L()|0;a[j+1>>0]=Na;Na=bw(l|0,Oa|0,40)|0;L()|0;a[j+2>>0]=Na;a[j+3>>0]=Oa;Na=bw(l|0,Oa|0,24)|0;L()|0;a[j+4>>0]=Na;Na=bw(l|0,Oa|0,16)|0;L()|0;a[j+5>>0]=Na;Oa=bw(l|0,Oa|0,8)|0;L()|0;a[j+6>>0]=Oa;a[j+7>>0]=l;l=b+21|0;if(a[l>>0]|0){k=0;j=j+8|0;while(1){Oa=c[h+8+(k<<2)>>2]|0;a[j>>0]=Oa>>>24;a[j+1>>0]=Oa>>>16;a[j+2>>0]=Oa>>>8;a[j+3>>0]=Oa;k=k+1|0;if(k>>>0>=(d[l>>0]|0)>>>0)break;else j=j+4|0}}Oa=c[E>>2]|0;Na=n+1|0;a[Oa+2>>0]=Na>>>8;a[Oa+3>>0]=Na;c[e+20>>2]=1}if((n|0)!=(m|0)){j=ft(b,e,h)|0;if(j|0){b=j;Ra=Sa;return b|0}m=h;l=c[m>>2]|0;m=c[m+4>>2]|0;k=e+8|0;j=c[k>>2]|0;k=c[k+4>>2]|0;if(!i){b=gt(b,l,m,j,k)|0;Ra=Sa;return b|0}else{b=ht(b,l,m,j,k)|0;Ra=Sa;return b|0}}j=b+72|0;if((c[j>>2]|0)<(i|0)?(D=e+8|0,Oa=D,!((c[Oa>>2]|0)==1&(c[Oa+4>>2]|0)==0)):0){c[j>>2]=i;m=Ea;I=m+40|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(I|0));z=c[E>>2]|0;z=d[z+2>>0]<<8|d[z+3>>0];w=z+1|0;u=z+2|0;j=u&131070;B=pb(j<<6,0)|0;do if(B){A=B+(j*48|0)|0;x=A+(j<<2)|0;v=x+(j<<2)|0;o=b+20|0;y=b+21|0;t=b+22|0;n=0;do{j=B+(n*48|0)|0;if((n|0)==(z|0)){m=j;H=h;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0))}else{Pa=c[E>>2]|0;k=G(n,d[Qa>>0]|0)|0;Na=Pa+(k+4)|0;Ga=cw(d[Na>>0]|0,0,56)|0;Oa=L()|0;Fa=cw(d[Na+1>>0]|0,0,48)|0;Oa=L()|0|Oa;Ha=cw(d[Na+2>>0]|0,0,40)|0;Oa=Oa|(L()|0);Oa=Oa|d[Na+3>>0];Ja=cw(d[Na+4>>0]|0,0,24)|0;Oa=Oa|(L()|0);Ka=cw(d[Na+5>>0]|0,0,16)|0;Oa=Oa|(L()|0);Ma=cw(d[Na+6>>0]|0,0,8)|0;Oa=Oa|(L()|0);Na=Sv(Fa|Ga|Ha|Ja|Ka|Ma|0,Oa|0,d[Na+7>>0]|0,0)|0;Oa=L()|0;c[j>>2]=Na;c[j+4>>2]=Oa;j=0;k=Pa+(k+12)|0;while(1){c[B+(n*48|0)+8+(j<<2)>>2]=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];c[B+(n*48|0)+8+((j|1)<<2)>>2]=d[k+5>>0]<<16|d[k+4>>0]<<24|d[k+6>>0]<<8|d[k+7>>0];j=j+2|0;if(j>>>0>=(d[y>>0]|0)>>>0)break;else k=k+8|0}}c[A+(n<<2)>>2]=n;m=a[o>>0]|0;l=m<<24>>24==0;if(!l){k=m&255;if(!(a[t>>0]|0)){j=0;do{Oa=j<<1;Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]+ +f[B+(n*48|0)+8+(Oa<<2)>>2]+ +f[B+(n*48|0)+8+((Oa|1)<<2)>>2];j=j+1|0}while(j>>>0<k>>>0)}else{j=0;do{Oa=j<<1;Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]+ +(c[B+(n*48|0)+8+(Oa<<2)>>2]|0)+ +(c[B+(n*48|0)+8+((Oa|1)<<2)>>2]|0);j=j+1|0}while(j>>>0<k>>>0)}}n=n+1|0}while((n|0)!=(w|0));q=m&255;if(!l){p=+(w|0)*2.0;j=0;do{Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]/p;j=j+1|0}while(j>>>0<q>>>0);if(m<<24>>24){n=(a[t>>0]|0)==0;l=0;do{o=v+(l<<3)|0;g[o>>3]=0.0;m=0;s=0.0;do{k=m<<1;j=B+(l*48|0)+8+((k|1)<<2)|0;if(n){r=+f[j>>2];p=+f[B+(l*48|0)+8+(k<<2)>>2]}else{r=+(c[j>>2]|0);p=+(c[B+(l*48|0)+8+(k<<2)>>2]|0)}K=r-p-+g[Ea+(m<<3)>>3];s=s+K*K;g[o>>3]=s;m=m+1|0}while((m|0)!=(q|0));l=l+1|0}while((l|0)!=(w|0))}else Ba=210}else Ba=210;if((Ba|0)==210)gw(B+((u>>>1)*112|0)|0,0,(z<<3)+8|0)|0;jt(A,w,v,x);gw((c[E>>2]|0)+2|0,0,(c[La>>2]|0)+-2|0)|0;t=e+20|0;c[t>>2]=1;u=(i|0)==0;l=0;while(1){k=d[Qa>>0]|0;m=((c[La>>2]|0)+-4|0)/(k|0)|0;if((l|0)>=(z+((m|0)/-3|0)|0)){Ba=224;break}o=c[A+(l<<2)>>2]|0;j=B+(o*48|0)|0;n=c[E>>2]|0;q=d[n+2>>0]<<8|d[n+3>>0];if((q|0)<(m|0)){k=n+((G(q,k)|0)+4)|0;Oa=j;Pa=c[Oa>>2]|0;Oa=c[Oa+4>>2]|0;Na=bw(Pa|0,Oa|0,56)|0;L()|0;a[k>>0]=Na;Na=bw(Pa|0,Oa|0,48)|0;L()|0;a[k+1>>0]=Na;Na=bw(Pa|0,Oa|0,40)|0;L()|0;a[k+2>>0]=Na;a[k+3>>0]=Oa;Na=bw(Pa|0,Oa|0,24)|0;L()|0;a[k+4>>0]=Na;Na=bw(Pa|0,Oa|0,16)|0;L()|0;a[k+5>>0]=Na;Oa=bw(Pa|0,Oa|0,8)|0;L()|0;a[k+6>>0]=Oa;a[k+7>>0]=Pa;if(a[y>>0]|0){m=0;k=k+8|0;while(1){Pa=c[B+(o*48|0)+8+(m<<2)>>2]|0;a[k>>0]=Pa>>>24;a[k+1>>0]=Pa>>>16;a[k+2>>0]=Pa>>>8;a[k+3>>0]=Pa;m=m+1|0;if(m>>>0>=(d[y>>0]|0)>>>0)break;else k=k+4|0}}Pa=c[E>>2]|0;Oa=q+1|0;a[Pa+2>>0]=Oa>>>8;a[Pa+3>>0]=Oa;c[t>>2]=1}k=j;j=c[k>>2]|0;k=c[k+4>>2]|0;Pa=h;do if((j|0)==(c[Pa>>2]|0)?(k|0)==(c[Pa+4>>2]|0):0){n=D;m=c[n>>2]|0;n=c[n+4>>2]|0;if(u){j=gt(b,j,k,m,n)|0;break}else{j=ht(b,j,k,m,n)|0;break}}else j=0;while(0);if(!j)l=l+1|0;else break}b:do if((Ba|0)==224){j=et(b,e)|0;if(!((j|0)!=0|l>>>0>z>>>0))while(1){k=B+((c[A+(l<<2)>>2]|0)*48|0)|0;j=at(b,k,i,Ia)|0;if(j|0)break;Qa=c[Ia>>2]|0;j=bt(b,Qa,k,i)|0;Qa=Us(b,Qa)|0;j=(j|0)==0?Qa:j;if((j|0)!=0|l>>>0>=z>>>0)break b;else l=l+1|0}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{b=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}else j=7;while(0);b=j;Ra=Sa;return b|0}Aa=c[E>>2]|0;Aa=d[Aa+2>>0]<<8|d[Aa+3>>0];Ca=Aa+1|0;Na=pb(Ca*52|0,0)|0;Oa=(Na|0)==0;c:do if(!Oa){n=Ca<<2;gw(Na+(Ca*48|0)|0,0,n|0)|0;o=(Aa|0)==0;if(!o){m=b+21|0;k=0;do{Ja=c[E>>2]|0;l=G(k,d[Qa>>0]|0)|0;Ba=Ja+(l+4)|0;wa=cw(d[Ba>>0]|0,0,56)|0;Ha=L()|0;va=cw(d[Ba+1>>0]|0,0,48)|0;Ha=L()|0|Ha;xa=cw(d[Ba+2>>0]|0,0,40)|0;Ha=Ha|(L()|0);Ha=Ha|d[Ba+3>>0];ya=cw(d[Ba+4>>0]|0,0,24)|0;Ha=Ha|(L()|0);za=cw(d[Ba+5>>0]|0,0,16)|0;Ha=Ha|(L()|0);j=cw(d[Ba+6>>0]|0,0,8)|0;Ha=Ha|(L()|0);Ba=Sv(va|wa|xa|ya|za|j|0,Ha|0,d[Ba+7>>0]|0,0)|0;Ha=L()|0;j=Na+(k*48|0)|0;c[j>>2]=Ba;c[j+4>>2]=Ha;j=0;l=Ja+(l+12)|0;while(1){c[Na+(k*48|0)+8+(j<<2)>>2]=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];c[Na+(k*48|0)+8+((j|1)<<2)>>2]=d[l+5>>0]<<16|d[l+4>>0]<<24|d[l+6>>0]<<8|d[l+7>>0];j=j+2|0;if(j>>>0>=(d[m>>0]|0)>>>0)break;else l=l+8|0}k=k+1|0}while((k|0)!=(Aa|0))}gw((c[E>>2]|0)+2|0,0,(c[La>>2]|0)+-2|0)|0;l=e+20|0;c[l>>2]=1;m=Na+(Aa*48|0)|0;H=h;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));Ha=e+8|0;Ja=Ha;if((c[Ja>>2]|0)==1&(c[Ja+4>>2]|0)==0){j=pb((c[La>>2]|0)+32|0,0)|0;if(j|0){gw(j|0,0,(c[La>>2]|0)+32|0)|0;c[j+24>>2]=j+32;c[j+16>>2]=1;Ja=b+60|0;c[Ja>>2]=(c[Ja>>2]|0)+1;c[j>>2]=e;c[j+20>>2]=1;Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}k=pb((c[La>>2]|0)+32|0,0)|0;if(k|0){gw(k|0,0,(c[La>>2]|0)+32|0)|0;c[k+24>>2]=k+32;c[k+16>>2]=1;Ja=b+60|0;c[Ja>>2]=(c[Ja>>2]|0)+1;c[k>>2]=e;c[k+20>>2]=1;Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}Ja=b+28|0;e=(c[Ja>>2]|0)+1|0;c[Ja>>2]=e;c[l>>2]=1;Ja=c[E>>2]|0;a[Ja>>0]=e>>>8;a[Ja+1>>0]=e;Ja=j;e=k}else{j=c[e>>2]|0;k=pb((c[La>>2]|0)+32|0,0)|0;if(k|0?(gw(k|0,0,(c[La>>2]|0)+32|0)|0,c[k+24>>2]=k+32,c[k+16>>2]=1,Ja=b+60|0,c[Ja>>2]=(c[Ja>>2]|0)+1,c[k>>2]=j,c[k+20>>2]=1,j|0):0){Ja=j+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1;Ja=k}if((e|0)!=0&(Ja|0)!=0?(Pa=e+24|0,gw(c[Pa>>2]|0,0,c[La>>2]|0)|0,Ka=Ja+24|0,gw(c[Ka>>2]|0,0,c[La>>2]|0)|0,t=b+20|0,q=G((d[t>>0]|0)+1|0,n+4|0)|0,Da=pb(q,0)|0,(Da|0)!=0):0){m=d[t>>0]|0;m=Da+(m<<2)+((G(Ca,m)|0)<<2)|0;gw(Da|0,0,q|0)|0;j=a[t>>0]|0;if(j<<24>>24){j=j&255;if(o){l=0;do{k=Da+(j<<2)+((G(l,Ca)|0)<<2)|0;c[Da+(l<<2)>>2]=k;c[k>>2]=0;it(b,k,Ca,l,Na,m);l=l+1|0;k=a[t>>0]|0;j=k&255}while(l>>>0<j>>>0);za=j}else{l=0;do{k=Da+(j<<2)+((G(l,Ca)|0)<<2)|0;c[Da+(l<<2)>>2]=k;c[k>>2]=0;j=1;do{c[k+(j<<2)>>2]=j;j=j+1|0}while((j|0)!=(Ca|0));it(b,k,Ca,l,Na,m);l=l+1|0;k=a[t>>0]|0;j=k&255}while(l>>>0<j>>>0);za=j}if(k<<24>>24){z=Aa>>>0>1;A=b+21|0;B=b+22|0;D=Ea+12|0;E=Ea+8|0;M=Ea+44|0;N=Ea+40|0;O=Ea+36|0;P=Ea+32|0;Q=Ea+28|0;R=Ea+24|0;S=Ea+20|0;T=Ea+16|0;U=Ea+12|0;V=Ea+8|0;W=Ea+44|0;X=Ea+40|0;Y=Ea+36|0;Z=Ea+32|0;_=Ea+28|0;$=Ea+24|0;aa=Ea+20|0;ba=Ea+16|0;ca=Ia+12|0;da=Ia+8|0;ea=Ia+44|0;fa=Ia+40|0;ga=Ia+36|0;ha=Ia+32|0;ia=Ia+28|0;ja=Ia+24|0;ka=Ia+20|0;la=Ia+16|0;ma=Ia+12|0;na=Ia+8|0;oa=Ia+44|0;pa=Ia+40|0;qa=Ia+36|0;ra=Ia+32|0;sa=Ia+28|0;ta=Ia+24|0;ua=Ia+20|0;va=Ia+16|0;wa=(((c[La>>2]|0)+-4|0)/(d[Qa>>0]|0)|0|0)/3|0;xa=Ca-wa|0;ya=(wa|0)>(xa|0);j=0;w=0;K=0.0;y=0;while(1){if(ya){l=0;p=0.0}else{x=Da+(y<<2)|0;v=wa;l=0;J=0.0;r=0.0;p=0.0;while(1){m=Ea;H=Na+((c[c[x>>2]>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));m=Ia;H=Na+((c[(c[x>>2]|0)+(Aa<<2)>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));if(z){o=a[B>>0]|0;u=a[A>>0]|0;t=u&255;if(!(o<<24>>24)){n=1;do{o=c[(c[x>>2]|0)+(n<<2)>>2]|0;if((n|0)<(v|0)){m=0;do{I=Ea+8+(m<<2)|0;F=+f[I>>2];C=+f[Na+(o*48|0)+8+(m<<2)>>2];f[I>>2]=F<C?F:C;I=m|1;Ba=Ea+8+(I<<2)|0;C=+f[Ba>>2];F=+f[Na+(o*48|0)+8+(I<<2)>>2];f[Ba>>2]=C>F?C:F;m=m+2|0}while(m>>>0<t>>>0)}else{m=0;do{I=Ia+8+(m<<2)|0;F=+f[I>>2];C=+f[Na+(o*48|0)+8+(m<<2)>>2];f[I>>2]=F<C?F:C;I=m|1;Ba=Ia+8+(I<<2)|0;C=+f[Ba>>2];F=+f[Na+(o*48|0)+8+(I<<2)>>2];f[Ba>>2]=C>F?C:F;m=m+2|0}while(m>>>0<t>>>0)}n=n+1|0}while((n|0)!=(Aa|0));n=t;o=u;Ba=66}else{n=1;do{q=c[(c[x>>2]|0)+(n<<2)>>2]|0;if((n|0)<(v|0)){m=0;do{I=Ea+8+(m<<2)|0;H=c[I>>2]|0;Ba=c[Na+(q*48|0)+8+(m<<2)>>2]|0;c[I>>2]=(H|0)<(Ba|0)?H:Ba;I=m|1;Ba=Ea+8+(I<<2)|0;H=c[Ba>>2]|0;I=c[Na+(q*48|0)+8+(I<<2)>>2]|0;c[Ba>>2]=(H|0)>(I|0)?H:I;m=m+2|0}while(m>>>0<t>>>0)}else{m=0;do{I=Ia+8+(m<<2)|0;H=c[I>>2]|0;Ba=c[Na+(q*48|0)+8+(m<<2)>>2]|0;c[I>>2]=(H|0)<(Ba|0)?H:Ba;I=m|1;Ba=Ia+8+(I<<2)|0;H=c[Ba>>2]|0;I=c[Na+(q*48|0)+8+(I<<2)>>2]|0;c[Ba>>2]=(H|0)>(I|0)?H:I;m=m+2|0}while(m>>>0<t>>>0)}n=n+1|0}while((n|0)!=(Aa|0));m=o;n=t;o=u;Ba=64}}else{o=a[A>>0]|0;m=a[B>>0]|0;n=o&255;Ba=64}do if((Ba|0)==64){Ba=0;q=m<<24>>24==0;if(q){Ba=66;break}m=n;s=0.0;do{I=m;m=m+-2|0;s=s+(+(c[Ea+8+(I+-1<<2)>>2]|0)-+(c[Ea+8+(m<<2)>>2]|0))}while((I|0)>3)}while(0);if((Ba|0)==66){Ba=0;m=n;s=0.0;do{I=m;m=m+-2|0;s=s+(+f[Ea+8+(I+-1<<2)>>2]-+f[Ea+8+(m<<2)>>2])}while((I|0)>3);q=1}s=p+s;if(q){m=n;p=0.0;do{I=m;m=m+-2|0;p=p+(+f[Ia+8+(I+-1<<2)>>2]-+f[Ia+8+(m<<2)>>2])}while((I|0)>3)}else{m=n;p=0.0;do{I=m;m=m+-2|0;p=p+(+(c[Ia+8+(I+-1<<2)>>2]|0)-+(c[Ia+8+(m<<2)>>2]|0))}while((I|0)>3)}p=s+p;d:do if(o<<24>>24)if(q){s=1.0;m=0;do{Ta=+f[Ea+8+(m<<2)>>2];F=+f[Ia+8+(m<<2)>>2];F=Ta>F?Ta:F;I=m|1;Ta=+f[Ea+8+(I<<2)>>2];C=+f[Ia+8+(I<<2)>>2];C=Ta<C?Ta:C;s=s*(C-F);m=m+2|0;if(C<F){s=0.0;break d}}while(m>>>0<n>>>0)}else{s=1.0;m=0;do{H=Ea+8+(m<<2)|0;I=Ia+8+(m<<2)|0;Ta=+(c[((c[H>>2]|0)>(c[I>>2]|0)?H:I)>>2]|0);I=m|1;C=+(c[Ea+8+(I<<2)>>2]|0);F=+(c[Ia+8+(I<<2)>>2]|0);F=C<F?C:F;s=s*(F-Ta);m=m+2|0;if(F<Ta){s=0.0;break d}}while(m>>>0<n>>>0)}else s=1.0;while(0);F=s+0.0;if(q){switch(k<<24>>24){case 5:{s=+f[M>>2]-+f[N>>2];Ba=85;break}case 4:{s=1.0;Ba=85;break}case 3:{s=1.0;Ba=86;break}case 2:{s=1.0;Ba=87;break}default:s=1.0}if((Ba|0)==85){s=s*(+f[O>>2]-+f[P>>2]);Ba=86}if((Ba|0)==86){s=s*(+f[Q>>2]-+f[R>>2]);Ba=87}if((Ba|0)==87){Ba=0;s=s*(+f[S>>2]-+f[T>>2])}s=s*(+f[D>>2]-+f[E>>2]);switch(k<<24>>24){case 5:{C=+f[ea>>2]-+f[fa>>2];Ba=95;break}case 4:{C=1.0;Ba=95;break}case 3:{C=1.0;Ba=96;break}case 2:{C=1.0;Ba=97;break}default:C=1.0}if((Ba|0)==95){C=C*(+f[ga>>2]-+f[ha>>2]);Ba=96}if((Ba|0)==96){C=C*(+f[ia>>2]-+f[ja>>2]);Ba=97}if((Ba|0)==97)C=C*(+f[ka>>2]-+f[la>>2]);C=C*(+f[ca>>2]-+f[da>>2])}else{switch(k<<24>>24){case 5:{I=c[W>>2]|0;Ba=c[X>>2]|0;s=+((Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Ba=90;break}case 4:{s=1.0;Ba=90;break}case 3:{s=1.0;Ba=91;break}case 2:{s=1.0;Ba=92;break}default:s=1.0}if((Ba|0)==90){H=c[Y>>2]|0;I=c[Z>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));Ba=91}if((Ba|0)==91){H=c[_>>2]|0;I=c[$>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));Ba=92}if((Ba|0)==92){Ba=0;H=c[aa>>2]|0;I=c[ba>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0))}H=c[U>>2]|0;I=c[V>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));switch(k<<24>>24){case 5:{I=c[oa>>2]|0;Ba=c[pa>>2]|0;C=+((Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Ba=101;break}case 4:{C=1.0;Ba=101;break}case 3:{C=1.0;Ba=102;break}case 2:{C=1.0;Ba=103;break}default:C=1.0}if((Ba|0)==101){H=c[qa>>2]|0;I=c[ra>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;C=C*(+(I>>>0)+4294967296.0*+(L()|0));Ba=102}if((Ba|0)==102){H=c[sa>>2]|0;I=c[ta>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;C=C*(+(I>>>0)+4294967296.0*+(L()|0));Ba=103}if((Ba|0)==103){I=c[ua>>2]|0;Ba=c[va>>2]|0;Ba=Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0;C=C*(+(Ba>>>0)+4294967296.0*+(L()|0))}I=c[ma>>2]|0;Ba=c[na>>2]|0;Ba=Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0;C=C*(+(Ba>>>0)+4294967296.0*+(L()|0))}s=s+C;if(!((v|0)==(wa|0)|F<r)?!(F==r&s<J):0)s=J;else{l=v;r=F}if((v|0)<(xa|0)){v=v+1|0;J=s}else break}}m=(y|0)==0|p<K;w=m?l:w;j=m?y:j;y=y+1|0;if((y|0)==(za|0))break;else K=m?p:K}}else{j=0;w=0}}else{j=0;w=0}v=Da+(j<<2)|0;j=c[v>>2]|0;k=c[j>>2]|0;m=Fa;H=Na+(k*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));m=Ga;H=Na+((c[j+(w<<2)>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));x=b+21|0;u=b+22|0;t=0;while(1){q=(t|0)<(w|0);m=q?e:Ja;q=q?Fa:Ga;j=d[Qa>>0]|0;n=m+24|0;l=c[n>>2]|0;o=d[l+2>>0]<<8|d[l+3>>0];if((o|0)<(((c[La>>2]|0)+-4|0)/(j|0)|0|0)){j=l+((G(o,j)|0)+4)|0;Ea=Na+(k*48|0)|0;Ia=c[Ea>>2]|0;Ea=c[Ea+4>>2]|0;Ba=bw(Ia|0,Ea|0,56)|0;L()|0;a[j>>0]=Ba;Ba=bw(Ia|0,Ea|0,48)|0;L()|0;a[j+1>>0]=Ba;Ba=bw(Ia|0,Ea|0,40)|0;L()|0;a[j+2>>0]=Ba;a[j+3>>0]=Ea;Ba=bw(Ia|0,Ea|0,24)|0;L()|0;a[j+4>>0]=Ba;Ba=bw(Ia|0,Ea|0,16)|0;L()|0;a[j+5>>0]=Ba;Ea=bw(Ia|0,Ea|0,8)|0;L()|0;a[j+6>>0]=Ea;a[j+7>>0]=Ia;if(a[x>>0]|0){l=0;j=j+8|0;while(1){Ia=c[Na+(k*48|0)+8+(l<<2)>>2]|0;a[j>>0]=Ia>>>24;a[j+1>>0]=Ia>>>16;a[j+2>>0]=Ia>>>8;a[j+3>>0]=Ia;l=l+1|0;if(l>>>0>=(d[x>>0]|0)>>>0)break;else j=j+4|0}}Ia=c[n>>2]|0;Ea=o+1|0;a[Ia+2>>0]=Ea>>>8;a[Ia+3>>0]=Ea;c[m+20>>2]=1}l=d[x>>0]|0;if(!(a[u>>0]|0)){j=0;do{Ea=q+8+(j<<2)|0;Ta=+f[Ea>>2];K=+f[Na+(k*48|0)+8+(j<<2)>>2];f[Ea>>2]=Ta<K?Ta:K;Ea=j|1;Ia=q+8+(Ea<<2)|0;K=+f[Ia>>2];Ta=+f[Na+(k*48|0)+8+(Ea<<2)>>2];f[Ia>>2]=K>Ta?K:Ta;j=j+2|0}while(j>>>0<l>>>0)}else{j=0;do{Ea=q+8+(j<<2)|0;Ba=c[Ea>>2]|0;Ia=c[Na+(k*48|0)+8+(j<<2)>>2]|0;c[Ea>>2]=(Ba|0)<(Ia|0)?Ba:Ia;Ea=j|1;Ia=q+8+(Ea<<2)|0;Ba=c[Ia>>2]|0;Ea=c[Na+(k*48|0)+8+(Ea<<2)>>2]|0;c[Ia>>2]=(Ba|0)>(Ea|0)?Ba:Ea;j=j+2|0}while(j>>>0<l>>>0)}j=t+1|0;if((j|0)==(Ca|0))break;t=j;k=c[(c[v>>2]|0)+(j<<2)>>2]|0}if(!(c[7324]|0))ab[c[29344>>2]&127](Da);else{La=Wa[c[29352>>2]&127](Da)|0;c[14978]=(c[14978]|0)-La;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Da)}j=Vs(b,Ja)|0;if(!j){u=e+8|0;k=u;j=c[k>>2]|0;k=c[k+4>>2]|0;if((j|0)==0&(k|0)==0){j=Vs(b,e)|0;if(j|0){l=e;k=Ja;break}k=u;j=c[k>>2]|0;k=c[k+4>>2]|0}t=Ja+8|0;Ia=t;q=c[Ia+4>>2]|0;La=Ga;c[La>>2]=c[Ia>>2];c[La+4>>2]=q;La=Fa;c[La>>2]=j;c[La+4>>2]=k;La=Ha;q=c[e>>2]|0;if((c[La>>2]|0)==1&(c[La+4>>2]|0)==0){k=i+1|0;j=bt(b,q,Fa,k)|0;if(!j)j=k;else{l=e;k=Ja;break}}else{e:do if(!q){m=-1;n=d[Qa>>0]|0;l=c[6]|0}else{l=c[q+24>>2]|0;o=d[l+2>>0]<<8|d[l+3>>0];if(!o){l=e;k=Ja;j=267;break c}n=d[Qa>>0]|0;m=0;while(1){La=l+((G(m,n)|0)+4)|0;Aa=cw(d[La>>0]|0,0,56)|0;Ia=L()|0;za=cw(d[La+1>>0]|0,0,48)|0;Ia=L()|0|Ia;Ba=cw(d[La+2>>0]|0,0,40)|0;Ia=Ia|(L()|0);Ia=Ia|d[La+3>>0];Ca=cw(d[La+4>>0]|0,0,24)|0;Ia=Ia|(L()|0);Da=cw(d[La+5>>0]|0,0,16)|0;Ia=Ia|(L()|0);Ea=cw(d[La+6>>0]|0,0,8)|0;Ia=Ia|(L()|0);La=Sv(za|Aa|Ba|Ca|Da|Ea|0,Ia|0,d[La+7>>0]|0,0)|0;if((La|0)==(j|0)&(L()|0)==(k|0))break e;m=m+1|0;if(m>>>0>=o>>>0){l=e;k=Ja;j=267;break c}}}while(0);l=l+((G(m,n)|0)+4)|0;La=bw(j|0,k|0,56)|0;L()|0;a[l>>0]=La;La=bw(j|0,k|0,48)|0;L()|0;a[l+1>>0]=La;La=bw(j|0,k|0,40)|0;L()|0;a[l+2>>0]=La;a[l+3>>0]=k;La=bw(j|0,k|0,24)|0;L()|0;a[l+4>>0]=La;La=bw(j|0,k|0,16)|0;L()|0;a[l+5>>0]=La;La=bw(j|0,k|0,8)|0;L()|0;a[l+6>>0]=La;a[l+7>>0]=j;if(a[x>>0]|0){k=0;j=l+8|0;while(1){La=c[Fa+8+(k<<2)>>2]|0;a[j>>0]=La>>>24;a[j+1>>0]=La>>>16;a[j+2>>0]=La>>>8;a[j+3>>0]=La;k=k+1|0;if(k>>>0>=(d[x>>0]|0)>>>0)break;else j=j+4|0}}c[q+20>>2]=1;j=ft(b,q,Fa)|0;if(j|0){l=e;k=Ja;break}j=i+1|0}j=bt(b,c[Ja>>2]|0,Ga,j)|0;if(!j){k=c[Ka>>2]|0;f:do if(!(d[k+2>>0]<<8|d[k+3>>0]))j=0;else{q=(i|0)==0?80:81;o=Ja+16|0;if(!Ma){m=0;n=0;while(1){k=k+((G(n,d[Qa>>0]|0)|0)+4)|0;Fa=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ea=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ga=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];Ia=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);La=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ea|Fa|Ga|Ia|La|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=t;j=_a[q&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}j=h;j=((k|0)==(c[j>>2]|0)?(l|0)==(c[j+4>>2]|0):0)?1:m;n=n+1|0;k=c[Ka>>2]|0;if(n>>>0>=(d[k+2>>0]<<8|d[k+3>>0])>>>0)break f;else m=j}}m=0;n=0;while(1){k=k+((G(n,d[Qa>>0]|0)|0)+4)|0;Fa=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ea=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ga=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];Ia=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);La=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ea|Fa|Ga|Ia|La|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0;g:do if(j|0){while(1){La=j+8|0;if((c[La>>2]|0)==(k|0)?(c[La+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break g}Us(b,c[j>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+1;c[j>>2]=Ja}while(0);j=t;j=_a[q&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}j=h;j=((k|0)==(c[j>>2]|0)?(l|0)==(c[j+4>>2]|0):0)?1:m;n=n+1|0;k=c[Ka>>2]|0;if(n>>>0>=(d[k+2>>0]<<8|d[k+3>>0])>>>0)break;else m=j}}while(0);La=Ha;h:do if((c[La>>2]|0)==1&(c[La+4>>2]|0)==0){j=c[Pa>>2]|0;if(d[j+2>>0]<<8|d[j+3>>0]|0){o=(i|0)==0?80:81;n=e+16|0;if(!Ma){k=0;while(1){h=j+((G(k,d[Qa>>0]|0)|0)+4)|0;Ia=cw(d[h>>0]|0,0,56)|0;i=L()|0;Ha=cw(d[h+1>>0]|0,0,48)|0;i=L()|0|i;Ka=cw(d[h+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[h+3>>0];La=cw(d[h+4>>0]|0,0,24)|0;i=i|(L()|0);Ma=cw(d[h+5>>0]|0,0,16)|0;i=i|(L()|0);j=cw(d[h+6>>0]|0,0,8)|0;i=i|(L()|0);h=Sv(Ha|Ia|Ka|La|Ma|j|0,i|0,d[h+7>>0]|0,0)|0;i=L()|0;j=u;j=_a[o&127](b,h,i,c[j>>2]|0,c[j+4>>2]|0)|0;k=k+1|0;if(j|0){l=e;k=Ja;break c}j=c[Pa>>2]|0;if(k>>>0>=(d[j+2>>0]<<8|d[j+3>>0])>>>0)break h}}m=0;do{k=j+((G(m,d[Qa>>0]|0)|0)+4)|0;La=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ka=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ma=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];h=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);i=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ka|La|Ma|h|i|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0;i:do if(j|0){while(1){i=j+8|0;if((c[i>>2]|0)==(k|0)?(c[i+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break i}Us(b,c[j>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+1;c[j>>2]=e}while(0);j=u;j=_a[o&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;m=m+1|0;if(j|0){l=e;k=Ja;break c}j=c[Pa>>2]|0}while(m>>>0<(d[j+2>>0]<<8|d[j+3>>0])>>>0)}}else if(!j){m=h;l=c[m>>2]|0;m=c[m+4>>2]|0;k=(i|0)==0?80:81;j:do if(Ma){j=c[b+116+(((l>>>0)%97|0)<<2)>>2]|0;if(!j)break;while(1){i=j+8|0;if((c[i>>2]|0)==(l|0)?(c[i+4>>2]|0)==(m|0):0)break;j=c[j+28>>2]|0;if(!j)break j}Us(b,c[j>>2]|0)|0;i=e+16|0;c[i>>2]=(c[i>>2]|0)+1;c[j>>2]=e}while(0);j=u;j=_a[k&127](b,l,m,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}}while(0);j=Us(b,Ja)|0;if(!j){l=0;k=0;j=Us(b,e)|0}else{l=e;k=0}}else{l=e;k=Ja}}else{l=e;k=Ja}}else{l=e;k=Ja;j=7}}else{l=0;k=0;j=7}while(0);Us(b,k)|0;Us(b,l)|0;do if(!Oa)if(!(c[7324]|0)){ab[c[29344>>2]&127](Na);break}else{b=Wa[c[29352>>2]&127](Na)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Na);break}while(0);b=j;Ra=Sa;return b|0}function ct(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=e+100|0;a:do if(f|0?(j=f+8|0,i=c[j>>2]|0,j=c[j+4>>2]|0,!((i|0)==1&(j|0)==0)):0){m=f;while(1){if(c[m>>2]|0)break a;k=c[n>>2]|0;do if(!(Vc(k,1)|0)){k=c[k+100>>2]|0;l=k+8|0;if(!(b[l>>1]&9216)){c[k>>2]=i;c[k+4>>2]=j;b[l>>1]=4;break}else{Pg(k,i,j);break}}while(0);b:do if((Gc(c[n>>2]|0)|0)==100){j=Oc(c[n>>2]|0,0)|0;k=L()|0;i=f;do{l=i+8|0;if((c[l>>2]|0)==(j|0)?(c[l+4>>2]|0)==(k|0):0){i=0;break b}i=c[i>>2]|0}while((i|0)!=0);i=Xs(e,j,k,0,m)|0}else i=0;while(0);j=c[n>>2]|0;if(j|0){l=c[j>>2]|0;k=j+136|0;o=c[k+4>>2]|0;if((o|0)>0|(o|0)==0&(c[k>>2]|0)>>>0>0)hc(l,j);k=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;o=j+64|0;c[o>>2]=0;c[o+4>>2]=0;if((k|0)==3082|(a[l+81>>0]|0)!=0){j=19;break}j=c[l+68>>2]&k;if(j|0){i=j;j=27;break}}if(i|0){j=27;break}m=c[m>>2]|0;if(!m){i=267;j=27;break}j=m+8|0;i=c[j>>2]|0;j=c[j+4>>2]|0;if((i|0)==1&(j|0)==0)break a}if((j|0)==19){og(l);o=7;return o|0}else if((j|0)==27)return i|0}while(0);i=e+23|0;j=f+24|0;n=c[j>>2]|0;o=d[i>>0]|0;m=n+((G(o,g)|0)+4)|0;fw(m|0,m+o|0,G((d[n+2>>0]<<8|d[n+3>>0])+~g|0,o)|0)|0;o=c[j>>2]|0;n=o+2|0;o=o+3|0;g=(d[n>>0]<<8|d[o>>0])+-1|0;a[n>>0]=g>>>8;a[o>>0]=g;c[f+20>>2]=1;if(!(c[f>>2]|0)){o=0;return o|0}o=c[j>>2]|0;if((d[o+2>>0]<<8|d[o+3>>0]|0)<((((c[e+16>>2]|0)+-4|0)/(d[i>>0]|0)|0|0)/3|0|0)){o=dt(e,f,h)|0;return o|0}else{o=et(e,f)|0;return o|0}return 0}function dt(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;n=c[f>>2]|0;a:do if(!n)h=-1;else{j=f+8|0;m=c[j>>2]|0;j=c[j+4>>2]|0;i=c[n+24>>2]|0;k=d[i+2>>0]<<8|d[i+3>>0];if(k|0){l=d[e+23>>0]|0;h=0;do{o=i+((G(h,l)|0)+4)|0;u=cw(d[o>>0]|0,0,56)|0;p=L()|0;v=cw(d[o+1>>0]|0,0,48)|0;p=L()|0|p;t=cw(d[o+2>>0]|0,0,40)|0;p=p|(L()|0);p=p|d[o+3>>0];s=cw(d[o+4>>0]|0,0,24)|0;p=p|(L()|0);r=cw(d[o+5>>0]|0,0,16)|0;p=p|(L()|0);q=cw(d[o+6>>0]|0,0,8)|0;p=p|(L()|0);o=Sv(v|u|t|s|r|q|0,p|0,d[o+7>>0]|0,0)|0;if((o|0)==(m|0)&(L()|0)==(j|0))break a;h=h+1|0}while(h>>>0<k>>>0)}Us(e,0)|0;v=267;return v|0}while(0);c[f>>2]=0;i=ct(e,n,h,g+1|0)|0;h=Us(e,n)|0;if(i|0){v=i;return v|0}if(h|0){v=h;return v|0}j=e+84|0;h=c[j>>2]|0;m=f+8|0;l=m;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){v=h;c[v>>2]=k;c[v+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;v=h+136|0;u=c[v+4>>2]|0;if((u|0)>0|(u|0)==0&(c[v>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;v=h+64|0;c[v>>2]=0;c[v+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);v=7;return v|0}else{h=c[i+68>>2]&j;if(!h)break;return h|0}}while(0);j=e+108|0;h=c[j>>2]|0;l=m;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){v=h;c[v>>2]=k;c[v+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;v=h+136|0;u=c[v+4>>2]|0;if((u|0)>0|(u|0)==0&(c[v>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;v=h+64|0;c[v>>2]=0;c[v+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);v=7;return v|0}else{h=c[i+68>>2]&j;if(!h)break;return h|0}}while(0);v=m;h=c[v>>2]|0;if((h|0)==0&(c[v+4>>2]|0)==0)h=f+28|0;else{h=e+116+(((h>>>0)%97|0)<<2)|0;while(1){i=c[h>>2]|0;if((i|0)==(f|0))break;else h=i+28|0}v=f+28|0;c[h>>2]=c[v>>2];c[v>>2]=0;h=v}v=m;c[v>>2]=g;c[v+4>>2]=((g|0)<0)<<31>>31;v=e+68|0;c[h>>2]=c[v>>2];u=f+16|0;c[u>>2]=(c[u>>2]|0)+1;c[v>>2]=f;v=0;return v|0}function et(b,e){b=b|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0;t=Ra;Ra=Ra+96|0;q=t+48|0;n=t;r=c[e>>2]|0;if(!r){s=0;Ra=t;return s|0}o=c[e+24>>2]|0;l=d[o+2>>0]|0;k=d[o+3>>0]|0;p=a[b+23>>0]|0;m=cw(d[o+4>>0]|0,0,56)|0;j=L()|0;u=cw(d[o+5>>0]|0,0,48)|0;j=L()|0|j;h=cw(d[o+6>>0]|0,0,40)|0;j=j|(L()|0);j=j|d[o+7>>0];g=cw(d[o+8>>0]|0,0,24)|0;j=j|(L()|0);s=cw(d[o+9>>0]|0,0,16)|0;j=j|(L()|0);i=cw(d[o+10>>0]|0,0,8)|0;j=j|(L()|0);j=Sv(u|m|h|g|s|i|0,j|0,d[o+11>>0]|0,0)|0;i=L()|0;s=q;c[s>>2]=j;c[s+4>>2]=i;s=b+21|0;i=a[s>>0]|0;j=i&255;g=0;h=o+12|0;while(1){c[q+8+(g<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[q+8+((g|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];g=g+2|0;if(g>>>0>=j>>>0)break;else h=h+8|0}m=i&255;i=l<<8|k;if(i>>>0>1){j=p&255;k=b+22|0;l=1;do{h=G(l,j)|0;v=o+(h+4)|0;z=cw(d[v>>0]|0,0,56)|0;u=L()|0;A=cw(d[v+1>>0]|0,0,48)|0;u=L()|0|u;y=cw(d[v+2>>0]|0,0,40)|0;u=u|(L()|0);u=u|d[v+3>>0];x=cw(d[v+4>>0]|0,0,24)|0;u=u|(L()|0);w=cw(d[v+5>>0]|0,0,16)|0;u=u|(L()|0);g=cw(d[v+6>>0]|0,0,8)|0;u=u|(L()|0);v=Sv(A|z|y|x|w|g|0,u|0,d[v+7>>0]|0,0)|0;u=L()|0;g=n;c[g>>2]=v;c[g+4>>2]=u;g=0;h=o+(h+12)|0;while(1){c[n+8+(g<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[n+8+((g|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];g=g+2|0;if(g>>>0>=m>>>0)break;else h=h+8|0}if(!(a[k>>0]|0)){g=0;do{z=q+8+(g<<2)|0;B=+f[z>>2];C=+f[n+8+(g<<2)>>2];f[z>>2]=B<C?B:C;z=g|1;A=q+8+(z<<2)|0;C=+f[A>>2];B=+f[n+8+(z<<2)>>2];f[A>>2]=C>B?C:B;g=g+2|0}while(g>>>0<m>>>0)}else{g=0;do{z=q+8+(g<<2)|0;y=c[z>>2]|0;A=c[n+8+(g<<2)>>2]|0;c[z>>2]=(y|0)<(A|0)?y:A;z=g|1;A=q+8+(z<<2)|0;y=c[A>>2]|0;z=c[n+8+(z<<2)>>2]|0;c[A>>2]=(y|0)>(z|0)?y:z;g=g+2|0}while(g>>>0<m>>>0)}l=l+1|0}while((l|0)!=(i|0))}k=e+8|0;j=c[k>>2]|0;k=c[k+4>>2]|0;i=q;c[i>>2]=j;c[i+4>>2]=k;i=c[r+24>>2]|0;l=d[i+2>>0]<<8|d[i+3>>0];a:do if(!l)g=267;else{h=p&255;g=0;while(1){m=i+((G(g,h)|0)+4)|0;v=cw(d[m>>0]|0,0,56)|0;A=L()|0;u=cw(d[m+1>>0]|0,0,48)|0;A=L()|0|A;w=cw(d[m+2>>0]|0,0,40)|0;A=A|(L()|0);A=A|d[m+3>>0];x=cw(d[m+4>>0]|0,0,24)|0;A=A|(L()|0);y=cw(d[m+5>>0]|0,0,16)|0;A=A|(L()|0);z=cw(d[m+6>>0]|0,0,8)|0;A=A|(L()|0);A=Sv(u|v|w|x|y|z|0,A|0,d[m+7>>0]|0,0)|0;if((A|0)==(j|0)&(L()|0)==(k|0))break;g=g+1|0;if(g>>>0>=l>>>0){g=267;break a}}A=bw(j|0,k|0,56)|0;L()|0;a[m>>0]=A;A=bw(j|0,k|0,48)|0;L()|0;a[m+1>>0]=A;A=bw(j|0,k|0,40)|0;L()|0;a[m+2>>0]=A;a[m+3>>0]=k;A=bw(j|0,k|0,24)|0;L()|0;a[m+4>>0]=A;A=bw(j|0,k|0,16)|0;L()|0;a[m+5>>0]=A;A=bw(j|0,k|0,8)|0;L()|0;a[m+6>>0]=A;a[m+7>>0]=j;if(a[s>>0]|0){h=0;g=m+8|0;while(1){A=c[q+8+(h<<2)>>2]|0;a[g>>0]=A>>>24;a[g+1>>0]=A>>>16;a[g+2>>0]=A>>>8;a[g+3>>0]=A;h=h+1|0;if(h>>>0>=(d[s>>0]|0)>>>0)break;else g=g+4|0}}c[r+20>>2]=1;g=et(b,r)|0}while(0);A=g;Ra=t;return A|0}function ft(b,e,g){b=b|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=Ra;Ra=Ra+48|0;z=C;h=c[e>>2]|0;if(!h){B=0;Ra=C;return B|0}y=b+23|0;A=b+21|0;x=b+22|0;w=0;b=e;a:while(1){if(w>>>0>999)break;w=w+1|0;u=b+8|0;t=c[u>>2]|0;u=c[u+4>>2]|0;j=c[h+24>>2]|0;e=d[j+2>>0]<<8|d[j+3>>0];if(!e)break;i=d[y>>0]|0;b=0;while(1){k=G(b,i)|0;v=j+(k+4)|0;n=cw(d[v>>0]|0,0,56)|0;s=L()|0;m=cw(d[v+1>>0]|0,0,48)|0;s=L()|0|s;o=cw(d[v+2>>0]|0,0,40)|0;s=s|(L()|0);s=s|d[v+3>>0];p=cw(d[v+4>>0]|0,0,24)|0;s=s|(L()|0);q=cw(d[v+5>>0]|0,0,16)|0;s=s|(L()|0);r=cw(d[v+6>>0]|0,0,8)|0;s=s|(L()|0);s=Sv(m|n|o|p|q|r|0,s|0,d[v+7>>0]|0,0)|0;if((s|0)==(t|0)&(L()|0)==(u|0))break;b=b+1|0;if(b>>>0>=e>>>0)break a}l=v+1|0;m=v+2|0;n=v+3|0;o=v+4|0;p=v+5|0;q=v+6|0;r=v+7|0;i=z;c[i>>2]=t;c[i+4>>2]=u;i=a[A>>0]|0;s=i&255;e=0;b=j+(k+12)|0;while(1){c[z+8+(e<<2)>>2]=d[b+1>>0]<<16|d[b>>0]<<24|d[b+2>>0]<<8|d[b+3>>0];c[z+8+((e|1)<<2)>>2]=d[b+5>>0]<<16|d[b+4>>0]<<24|d[b+6>>0]<<8|d[b+7>>0];e=e+2|0;if(e>>>0>=s>>>0)break;else b=b+8|0}b:do if(i<<24>>24){j=a[x>>0]|0;c:do if(j<<24>>24==1){b=0;while(1){e=z+8+(b<<2)|0;i=g+8+(b<<2)|0;if((c[i>>2]|0)<(c[e>>2]|0))break c;if((c[i+4>>2]|0)>(c[e+4>>2]|0))break c;b=b+2|0;if(b>>>0>=s>>>0)break b}}else{b=0;while(1){e=z+8+(b<<2)|0;i=g+8+(b<<2)|0;if(+f[i>>2]<+f[e>>2])break c;if(+f[i+4>>2]>+f[e+4>>2])break c;b=b+2|0;if(b>>>0>=s>>>0)break b}}while(0);if(!(j<<24>>24)){b=0;do{j=z+8+(b<<2)|0;D=+f[j>>2];E=+f[g+8+(b<<2)>>2];f[j>>2]=D<E?D:E;j=b|1;k=z+8+(j<<2)|0;E=+f[k>>2];D=+f[g+8+(j<<2)>>2];f[k>>2]=E>D?E:D;b=b+2|0}while(b>>>0<s>>>0)}else{b=0;do{j=z+8+(b<<2)|0;i=c[j>>2]|0;k=c[g+8+(b<<2)>>2]|0;c[j>>2]=(i|0)<(k|0)?i:k;j=b|1;k=z+8+(j<<2)|0;i=c[k>>2]|0;j=c[g+8+(j<<2)>>2]|0;c[k>>2]=(i|0)>(j|0)?i:j;b=b+2|0}while(b>>>0<s>>>0)}s=bw(t|0,u|0,56)|0;L()|0;a[v>>0]=s;s=bw(t|0,u|0,48)|0;L()|0;a[l>>0]=s;s=bw(t|0,u|0,40)|0;L()|0;a[m>>0]=s;a[n>>0]=u;s=bw(t|0,u|0,24)|0;L()|0;a[o>>0]=s;s=bw(t|0,u|0,16)|0;L()|0;a[p>>0]=s;u=bw(t|0,u|0,8)|0;L()|0;a[q>>0]=u;a[r>>0]=t;if(a[A>>0]|0){e=0;b=v+8|0;while(1){v=c[z+8+(e<<2)>>2]|0;a[b>>0]=v>>>24;a[b+1>>0]=v>>>16;a[b+2>>0]=v>>>8;a[b+3>>0]=v;e=e+1|0;if(e>>>0>=(d[A>>0]|0)>>>0)break;else b=b+4|0}}c[h+20>>2]=1}while(0);b=c[h>>2]|0;if(!b){b=0;B=31;break}else{v=h;h=b;b=v}}if((B|0)==31){Ra=C;return b|0}B=267;Ra=C;return B|0}function gt(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=d+92|0;d=c[j>>2]|0;do if(!(Vc(d,1)|0)){d=c[d+100>>2]|0;i=d+8|0;if(!(b[i>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[i>>1]=4;break}else{Pg(d,e,f);break}}while(0);d=c[j>>2]|0;do if(!(Vc(d,2)|0)){i=c[d+100>>2]|0;d=i+40|0;i=i+48|0;if(!(b[i>>1]&9216)){f=d;c[f>>2]=g;c[f+4>>2]=h;b[i>>1]=4;break}else{Pg(d,g,h);break}}while(0);Gc(c[j>>2]|0)|0;d=c[j>>2]|0;if(!d){h=0;return h|0}i=c[d>>2]|0;h=d+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,d);e=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((e|0)==3082|(a[i+81>>0]|0)!=0){og(i);h=7;return h|0}else{h=c[i+68>>2]&e;return h|0}return 0}function ht(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=d+104|0;d=c[j>>2]|0;do if(!(Vc(d,1)|0)){d=c[d+100>>2]|0;i=d+8|0;if(!(b[i>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[i>>1]=4;break}else{Pg(d,e,f);break}}while(0);d=c[j>>2]|0;do if(!(Vc(d,2)|0)){i=c[d+100>>2]|0;d=i+40|0;i=i+48|0;if(!(b[i>>1]&9216)){f=d;c[f>>2]=g;c[f+4>>2]=h;b[i>>1]=4;break}else{Pg(d,g,h);break}}while(0);Gc(c[j>>2]|0)|0;d=c[j>>2]|0;if(!d){h=0;return h|0}i=c[d>>2]|0;h=d+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,d);e=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((e|0)==3082|(a[i+81>>0]|0)!=0){og(i);h=7;return h|0}else{h=c[i+68>>2]&e;return h|0}return 0}function it(b,d,e,g,h,i){b=b|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if((e|0)<=1)return;t=e>>>1;r=e-t|0;s=d+(t<<2)|0;it(b,d,t,g,h,i);it(b,s,r,g,h,i);ew(i|0,d|0,t<<2|0)|0;if(!((r|0)>0|(t|0)!=0))return;p=g<<1;q=p|1;o=(a[b+22>>0]|0)==0;e=0;g=0;do{n=c[i+(g<<2)>>2]|0;b=h+(n*48|0)+8+(p<<2)|0;if(o){v=c[s+(e<<2)>>2]|0;j=+f[b>>2];k=+f[h+(v*48|0)+8+(p<<2)>>2];l=+f[h+(n*48|0)+8+(q<<2)>>2];m=+f[h+(v*48|0)+8+(q<<2)>>2];b=v}else{v=c[s+(e<<2)>>2]|0;j=+(c[b>>2]|0);k=+(c[h+(v*48|0)+8+(p<<2)>>2]|0);l=+(c[h+(n*48|0)+8+(q<<2)>>2]|0);m=+(c[h+(v*48|0)+8+(q<<2)>>2]|0);b=v}do if((g|0)==(t|0))u=11;else{if(!((e|0)==(r|0)|j<k)?!(j==k&l<m):0){u=11;break}c[d+(g+e<<2)>>2]=n;g=g+1|0}while(0);if((u|0)==11){u=0;c[d+(g+e<<2)>>2]=b;e=e+1|0}}while((e|0)<(r|0)|(g|0)<(t|0));return}function jt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;if((b|0)<=1)return;m=b>>>1;k=b-m|0;l=a+(m<<2)|0;jt(a,m,d,e);jt(l,k,d,e);ew(e|0,a|0,m<<2|0)|0;if(!((k|0)>0|(m|0)!=0))return;b=0;f=0;do do if((f|0)!=(m|0)){h=c[e+(f<<2)>>2]|0;if((b|0)==(k|0)){c[a+(f+k<<2)>>2]=h;f=f+1|0;b=k;break}i=c[l+(b<<2)>>2]|0;j=a+(f+b<<2)|0;if(+g[d+(h<<3)>>3]<+g[d+(i<<3)>>3]){c[j>>2]=h;f=f+1|0;break}else{c[j>>2]=i;b=b+1|0;break}}else{c[a+(m+b<<2)>>2]=c[l+(b<<2)>>2];f=m;b=b+1|0}while(0);while((b|0)<(k|0)|(f|0)<(m|0));return}function kt(b){b=b|0;var e=0,f=0;f=0;do{switch(a[26496+(f*12|0)+5>>0]|0){case 1:{e=b;break}case 2:{e=-1;break}default:e=0}Ed(b,c[26496+(f*12|0)>>2]|0,a[26496+(f*12|0)+4>>0]|0,d[26496+(f*12|0)+6>>0]|0,e,c[26496+(f*12|0)+8>>2]|0,0,0)|0;f=f+1|0}while((f|0)!=40);Ed(b,58197,1,1,0,0,182,99)|0;Ed(b,58203,1,1,0,0,182,100)|0;Ed(b,58212,1,1,0,0,183,101)|0;Ed(b,58217,1,1,0,0,183,102)|0;Ed(b,58224,1,1,0,0,183,103)|0;Ed(b,58239,1,1,0,0,183,104)|0;return 0}function lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j=0,k=0;if((b|0)!=1)Y(58254,58262,1395,58332);a=Hc(a,24)|0;if(($c(c[d>>2]|0)|0)==5)return;b=a+16|0;k=b;k=Sv(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;j=L()|0;i=b;c[i>>2]=k;c[i+4>>2]=j;f=+pc(c[d>>2]|0);e=+g[a>>3];h=f-e;d=b;e=e+h/(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0));g[a>>3]=e;d=a+8|0;g[d>>3]=+g[d>>3]+h*(f-e);return}function mt(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=Hc(a,0)|0;if(b|0?(e=b+16|0,d=c[e>>2]|0,e=c[e+4>>2]|0,(e|0)>0|(e|0)==0&d>>>0>1):0){f=+g[b+8>>3];e=Sv(d|0,e|0,-1,-1)|0;wc(a,+u(+(f/(+(e>>>0)+4294967296.0*+(L()|0)))));return}wc(a,0.0);return}function nt(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=Hc(a,0)|0;if(b|0?(e=b+16|0,d=c[e>>2]|0,e=c[e+4>>2]|0,(e|0)>0|(e|0)==0&d>>>0>1):0){f=+g[b+8>>3];e=Sv(d|0,e|0,-1,-1)|0;wc(a,f/(+(e>>>0)+4294967296.0*+(L()|0)));return}wc(a,0.0);return}function ot(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0.0;if((b|0)!=1)Y(58254,58262,1418,58323);e=$c(c[d>>2]|0)|0;if((e|0)==5)return;a=Hc(a,64)|0;h=a+56|0;do if(!(c[h>>2]|0)){b=nu(1,12)|0;c[h>>2]=b;if((e|0)==1){c[b>>2]=0;c[b+4>>2]=159;b=a+48|0;c[b>>2]=0;c[b+4>>2]=0;b=a+16|0;a=b;a=Sv(c[a>>2]|0,c[a+4>>2]|0,1,0)|0;e=L()|0;c[b>>2]=a;c[b+4>>2]=e;b=c[d>>2]|0;break}else{f=a+48|0;e=f;c[e>>2]=1;c[e+4>>2]=0;c[b>>2]=0;c[b+4>>2]=160;b=f;f=9;break}}else{b=a+48|0;f=9}while(0);if((f|0)==9){f=b;e=c[f>>2]|0;f=c[f+4>>2]|0;b=a+16|0;i=b;i=Sv(c[i>>2]|0,c[i+4>>2]|0,1,0)|0;a=L()|0;c[b>>2]=i;c[b+4>>2]=a;b=c[d>>2]|0;if(!((e|0)==0&(f|0)==0)){j=+pc(b);d=nu(1,8)|0;g[d>>3]=j;b=c[h>>2]|0;e=c[b+4>>2]|0;a=c[b>>2]|0;a:do if(a){while(1){a=Xa[e&255](c[a+8>>2]|0,d)|0;if(!a)break;b=c[b>>2]|0;b=(a|0)>0?b:b+4|0;a=c[b>>2]|0;if(!a)break a}i=(c[b>>2]|0)+16|0;f=i;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;h=L()|0;c[i>>2]=f;c[i+4>>2]=h;mu(d);return}while(0);i=nu(1,24)|0;c[i+8>>2]=d;h=i+16|0;c[h>>2]=1;c[h+4>>2]=0;c[b>>2]=i;return}}a=rc(b)|0;e=L()|0;d=nu(1,8)|0;b=d;c[b>>2]=a;c[b+4>>2]=e;b=c[h>>2]|0;e=c[b+4>>2]|0;a=c[b>>2]|0;b:do if(a){while(1){a=Xa[e&255](c[a+8>>2]|0,d)|0;if(!a)break;b=c[b>>2]|0;b=(a|0)>0?b:b+4|0;a=c[b>>2]|0;if(!a)break b}i=(c[b>>2]|0)+16|0;f=i;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;h=L()|0;c[i>>2]=f;c[i+4>>2]=h;mu(d);return}while(0);i=nu(1,24)|0;c[i+8>>2]=d;h=i+16|0;c[h>>2]=1;c[h+4>>2]=0;c[b>>2]=i;return}function pt(a){a=a|0;var b=0,d=0,e=0;b=Hc(a,0)|0;if(!b)return;d=b+56|0;e=c[d>>2]|0;if(!e)return;vt(c[e>>2]|0,68,b);wt(c[c[d>>2]>>2]|0);mu(c[d>>2]|0);e=b+40|0;if(!((c[e>>2]|0)==1&(c[e+4>>2]|0)==0))return;e=b+48|0;if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0){e=b;Ac(a,c[e>>2]|0,c[e+4>>2]|0);return}else{wc(a,+g[b+8>>3]);return}}function qt(a){a=a|0;var b=0,d=0;b=Hc(a,0)|0;if(!b)return;d=b+16|0;g[b+24>>3]=(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0))*.5;tt(a);return}function rt(a){a=a|0;var b=0,d=0;b=Hc(a,0)|0;if(!b)return;d=b+16|0;g[b+24>>3]=(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0))*.25;tt(a);return}function st(a){a=a|0;var b=0,d=0.0,e=0;b=Hc(a,0)|0;if(!b)return;e=b+16|0;e=Yv(c[e>>2]|0,c[e+4>>2]|0,3,0)|0;d=(+(e>>>0)+4294967296.0*+(L()|0))*.25;g[b+24>>3]=d;tt(a);return}function tt(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;e=Hc(a,0)|0;if(!e)return;b=e+56|0;d=c[b>>2]|0;if(!d)return;c[e+60>>2]=0;vt(c[d>>2]|0,69,e);wt(c[c[b>>2]>>2]|0);mu(c[b>>2]|0);h=e+48|0;if(!((c[h>>2]|0)==0&(c[h+4>>2]|0)==0)){h=e+40|0;wc(a,+g[e+8>>3]/(+((c[h>>2]|0)>>>0)+4294967296.0*+(c[h+4>>2]|0)));return}h=e+40|0;f=c[h>>2]|0;h=c[h+4>>2]|0;d=e;b=c[d>>2]|0;d=c[d+4>>2]|0;if((f|0)==1&(h|0)==0){Ac(a,b,d);return}else{wc(a,(+(b>>>0)+4294967296.0*+(d|0))/(+(f>>>0)+4294967296.0*+(h|0)));return}}function ut(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0.0;l=e+60|0;if((c[l>>2]|0)>0)return;m=+g[e+24>>3];h=e+16|0;f=c[h>>2]|0;h=c[h+4>>2]|0;i=e+32|0;k=i;j=c[k>>2]|0;k=c[k+4>>2]|0;b=Sv(j|0,k|0,b|0,d|0)|0;d=L()|0;do if(m<=+(b|0)){k=Tv(f|0,h|0,j|0,k|0)|0;L()|0;if(!(+(f>>>0)+4294967296.0*+(h|0)-m<=+(k|0))){c[l>>2]=1;break}l=e+40|0;j=l;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=L()|0;c[l>>2]=j;c[l+4>>2]=k;l=e+48|0;if((c[l>>2]|0)==0&(c[l+4>>2]|0)==0){j=c[a>>2]|0;k=e;j=Sv(c[k>>2]|0,c[k+4>>2]|0,j|0,((j|0)<0)<<31>>31|0)|0;k=L()|0;l=e;c[l>>2]=j;c[l+4>>2]=k;break}else{l=e+8|0;g[l>>3]=+g[a>>3]+ +g[l>>3];break}}while(0);l=i;c[l>>2]=b;c[l+4>>2]=d;return}function vt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(!a)return;do{e=c[a>>2]|0;if(e|0)vt(e,b,d);e=a+16|0;db[b&127](c[a+8>>2]|0,c[e>>2]|0,c[e+4>>2]|0,d);a=c[a+4>>2]|0}while((a|0)!=0);return}function wt(a){a=a|0;var b=0;if(!a)return;mu(c[a+8>>2]|0);b=c[a>>2]|0;if(b|0)wt(b);b=c[a+4>>2]|0;if(b|0)wt(b);mu(a);return}function xt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0;i=e+48|0;if((c[i>>2]|0)==0&(c[i+4>>2]|0)==0){a=c[a>>2]|0;f=e+32|0;i=f;h=c[i>>2]|0;i=c[i+4>>2]|0;if((h|0)==(b|0)&(i|0)==(d|0)){e=e+40|0;b=e;b=Sv(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;d=L()|0;c[e>>2]=b;c[e+4>>2]=d;return}if(!((i|0)<(d|0)|(i|0)==(d|0)&h>>>0<b>>>0))return;i=e;c[i>>2]=a;c[i+4>>2]=((a|0)<0)<<31>>31;i=f;c[i>>2]=b;c[i+4>>2]=d;e=e+40|0;c[e>>2]=1;c[e+4>>2]=0;return}else{j=+g[a>>3];a=e+32|0;h=a;f=c[h>>2]|0;h=c[h+4>>2]|0;if((f|0)==(b|0)&(h|0)==(d|0)){e=e+40|0;b=e;b=Sv(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;d=L()|0;c[e>>2]=b;c[e+4>>2]=d;return}if(!((h|0)<(d|0)|(h|0)==(d|0)&f>>>0<b>>>0))return;g[e+8>>3]=j;i=a;c[i>>2]=b;c[i+4>>2]=d;e=e+40|0;c[e>>2]=1;c[e+4>>2]=0;return}}function yt(a,b){a=a|0;b=b|0;var d=0,e=0;e=a;a=c[e>>2]|0;e=c[e+4>>2]|0;d=b;b=c[d>>2]|0;d=c[d+4>>2]|0;return ((a|0)==(b|0)&(e|0)==(d|0)?0:(e|0)<(d|0)|(e|0)==(d|0)&a>>>0<b>>>0?-1:1)|0}function zt(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[a>>3];c=+g[b>>3];return (d==c?0:d<c?-1:1)|0}function At(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,378,58977);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+z(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Bt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,379,58968);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+A(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ct(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,380,58959);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+B(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Dt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;if((b|0)!=2)Y(58580,58262,570,58950);if((sc(c[d>>2]|0)|0)!=5?(e=d+4|0,(sc(c[e>>2]|0)|0)!=5):0){f=+pc(c[d>>2]|0);wc(a,+C(+f,+(+pc(c[e>>2]|0))));return}Bc(a);return}function Et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,394,58940);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Hv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ft(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,402,58930);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Jv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Gt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,410,58920);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Fv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ht(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o+8|0;j=o;if((e|0)!=2)Y(58580,58262,1680,58900);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){h=nc(c[f>>2]|0)|0;i=nc(c[g>>2]|0)|0;e=a[h>>0]|0;a:do if(!(e<<24>>24))n=17;else{f=0;while(1){e=e&255;if(yu(e)|0)break;f=f+1|0;e=a[h+f>>0]|0;if(!(e<<24>>24)){n=17;break a}}e=(zu(e)|0)&255;a[k>>0]=e;e=1;while(1){g=a[h+f>>0]|0;if(!(g<<24>>24)){n=15;break}g=a[27264+(g&127)>>0]|0;if(g<<24>>24){a[k+e>>0]=(g&255)+48;e=e+1|0}if((e|0)<4)f=f+1|0;else break}if((n|0)==15)gw(k+e|0,48,4-e|0)|0;a[k+4>>0]=0}while(0);if((n|0)==17){a[k>>0]=a[58915]|0;a[k+1>>0]=a[58916]|0;a[k+2>>0]=a[58917]|0;a[k+3>>0]=a[58918]|0;a[k+4>>0]=a[58919]|0}e=a[i>>0]|0;b:do if(!(e<<24>>24))n=29;else{f=0;while(1){e=e&255;if(yu(e)|0)break;f=f+1|0;e=a[i+f>>0]|0;if(!(e<<24>>24)){n=29;break b}}e=(zu(e)|0)&255;a[j>>0]=e;e=1;while(1){g=a[i+f>>0]|0;if(!(g<<24>>24)){n=27;break}g=a[27264+(g&127)>>0]|0;if(g<<24>>24){a[j+e>>0]=(g&255)+48;e=e+1|0}if((e|0)<4)f=f+1|0;else break}if((n|0)==27)gw(j+e|0,48,4-e|0)|0;a[j+4>>0]=0}while(0);if((n|0)==29){a[j>>0]=a[58915]|0;a[j+1>>0]=a[58916]|0;a[j+2>>0]=a[58917]|0;a[j+3>>0]=a[58918]|0;a[j+4>>0]=a[58919]|0}g=j;m=0;f=0;h=k;e=a[k>>0]|0;while(1){i=h+1|0;e=e&255;l=a[26976+e>>0]|0;k=l&255;switch(l<<24>>24){case 4:{l=65533;break}case 3:{j=h+2|0;e=(e<<6)+(d[i>>0]|0)|0;n=34;break}case 2:{j=i;n=34;break}case 1:{n=35;break}default:l=e}if((n|0)==34){i=j+1|0;e=(e<<6)+(d[j>>0]|0)|0;n=35}if((n|0)==35){n=0;l=(e<<6)+(d[i>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;l=(l&-2|0)==65534|((l&-2048|0)==55296?1:(l&c[27248+(k<<2)>>2]|0)==0)?65533:l}i=g+1|0;e=d[g>>0]|0;j=a[26976+e>>0]|0;k=j&255;switch(j<<24>>24){case 4:{e=65533;break}case 3:{j=g+2|0;e=(e<<6)+(d[i>>0]|0)|0;n=39;break}case 2:{j=i;n=39;break}case 1:{n=40;break}default:{}}if((n|0)==39){i=j+1|0;e=(e<<6)+(d[j>>0]|0)|0;n=40}if((n|0)==40){n=0;e=(e<<6)+(d[i>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;e=(e&-2|0)==65534|((e&-2048|0)==55296?1:(e&c[27248+(k<<2)>>2]|0)==0)?65533:e}e=(l|0)==(e|0)&1;do{h=h+1|0;i=a[h>>0]|0}while((i&-64)<<24>>24==-128);do g=g+1|0;while((a[g>>0]&-64)<<24>>24==-128);f=f+e|0;e=m+1|0;if((e|0)==4)break;else{m=e;e=i}}zc(b,f);Ra=o;return}Bc(b);Ra=o;return}function It(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,498,58888);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,e*180.0/3.141592653589793);return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Jt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,499,58876);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,e*3.141592653589793/180.0);return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Kt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,420,58868);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+w(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,419,58860);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+x(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Mt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,421,58852);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+y(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,422,58844);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,1.0/+y(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ot(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,446,58835);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Pt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,438,58826);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+jv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Qt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,454,58817);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Rt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,456,58808);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,1.0/+Iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function St(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,474,58800);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+D(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Tt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,472,58792);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+E(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ut(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,473,58782);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Fa(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Vt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0;if((b|0)!=2)Y(58580,58262,546,58772);if((sc(c[d>>2]|0)|0)!=5?(g=d+4|0,(sc(c[g>>2]|0)|0)!=5):0){f=+pc(c[d>>2]|0);e=+pc(c[g>>2]|0);g=uu()|0;c[g>>2]=0;g=uu()|0;if(!(c[g>>2]|0)){wc(a,+v(+f,+e));return}else{d=uu()|0;d=dv(c[d>>2]|0)|0;g=uu()|0;xc(a,d,c[g>>2]|0);return}}Bc(a);return}function Wt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;if((b|0)!=1)Y(58254,58262,590,58763);switch(sc(c[d>>2]|0)|0){case 1:{e=rc(c[d>>2]|0)|0;d=L()|0;b=(d|0)>0|(d|0)==0&e>>>0>0;d=((e|0)!=0|(d|0)!=0)<<31>>31;Ac(a,b?1:d,b?0:((d|0)<0)<<31>>31);return}case 5:{Bc(a);return}default:{f=+pc(c[d>>2]|0);wc(a,f>0.0?1.0:+((f<0.0)<<31>>31));return}}}function Xt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,375,58754);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+u(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Yt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,514,58743);switch(sc(c[d>>2]|0)|0){case 1:{b=rc(c[d>>2]|0)|0;d=L()|0;Ac(a,Yv(b|0,d|0,b|0,d|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+pc(c[d>>2]|0);wc(a,e*e);return}}}function Zt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,620,58734);switch(sc(c[d>>2]|0)|0){case 1:{Ac(a,rc(c[d>>2]|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+F(+(+pc(c[d>>2]|0)));Ac(a,~~e>>>0,+t(e)>=1.0?(e>0.0?~~+H(+s(e/4294967296.0),4294967295.0)>>>0:~~+F((e-+(~~e>>>0))/4294967296.0)>>>0):0);return}}}function _t(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,645,58724);switch(sc(c[d>>2]|0)|0){case 1:{Ac(a,rc(c[d>>2]|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+s(+(+pc(c[d>>2]|0)));Ac(a,~~e>>>0,+t(e)>=1.0?(e>0.0?~~+H(+s(e/4294967296.0),4294967295.0)>>>0:~~+F((e-+(~~e>>>0))/4294967296.0)>>>0):0);return}}}function $t(a,b,c){a=a|0;b=b|0;c=c|0;wc(a,3.141592653589793);return}function au(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if((b|0)!=2)return;if((sc(c[d>>2]|0)|0)==5)return;j=rc(c[d+4>>2]|0)|0;f=L()|0;if((f|0)<0){xc(a,58611,-1);return}g=oc(c[d>>2]|0)|0;h=nb((G(g,j)|0)+1|0)|0;i=nb(g+1|0)|0;b=(h|0)!=0;e=(i|0)!=0;if(b&e){Su(i,nc(c[d>>2]|0)|0)|0;if((f|0)>0|(f|0)==0&j>>>0>0){b=0;e=0;do{Su(h+(G(g,b)|0)|0,i)|0;b=Sv(b|0,e|0,1,0)|0;e=L()|0}while((e|0)<(f|0)|(e|0)==(f|0)&b>>>0<j>>>0)}Cc(a,h,-1,-1);qb(h);qb(i);return}Ec(a);if(b)qb(h);if(!e)return;qb(i);return}function bu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(b|0)==3;if((b|1|0)!=3)Y(58692,58262,1038,58710);if((sc(c[d>>2]|0)|0)!=5?(e=d+4|0,(sc(c[e>>2]|0)|0)!=5):0){f=nc(c[d>>2]|0)|0;if(!f)return;e=nc(c[e>>2]|0)|0;if(g){b=(qc(c[d+8>>2]|0)|0)+-1|0;b=(b|0)>0?b:0}else b=0;zc(a,(ku(f,e,b)|0)+1|0);return}Bc(a);return}function cu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)!=2)Y(58580,58262,1073,58683);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){n=nc(c[f>>2]|0)|0;k=qc(c[g>>2]|0)|0;j=0;i=n;e=a[n>>0]|0;while(1){g=i+1|0;e=e&255;f=a[26976+e>>0]|0;h=f&255;switch(f<<24>>24){case 4:break;case 3:{f=i+2|0;e=(e<<6)+(d[g>>0]|0)|0;q=10;break}case 2:{f=g;q=10;break}case 1:{m=g;l=e;q=11;break}default:{p=e;q=12}}if((q|0)==10){m=f+1|0;l=(e<<6)+(d[f>>0]|0)|0;q=11}if((q|0)==11?(q=0,o=(l<<6)+(d[m>>0]|0)-(c[27232+(h<<2)>>2]|0)|0,!((o&-2|0)==65534|((o&-2048|0)==55296?1:(o&c[27248+(h<<2)>>2]|0)==0))):0){p=o;q=12}if((q|0)==12?(q=0,(p|0)==0):0)break;f=j+1|0;if((j|0)>=(k|0))break;e=i;do{e=e+1|0;g=a[e>>0]|0}while((g&-64)<<24>>24==-128);j=f;i=e;e=g}e=i-n|0;f=nb(e+1|0)|0;if(!f){Ec(b);return}else{nv(f,n,e)|0;a[f+e>>0]=0;Cc(b,f,-1,-1);qb(f);return}}Bc(b);return}function du(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)!=2)Y(58580,58262,1113,58673);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){f=nc(c[f>>2]|0)|0;k=qc(c[g>>2]|0)|0;j=0;q=f;e=a[f>>0]|0;while(1){h=q+1|0;e=e&255;g=a[26976+e>>0]|0;i=g&255;switch(g<<24>>24){case 4:break;case 3:{g=q+2|0;e=(e<<6)+(d[h>>0]|0)|0;p=9;break}case 2:{g=h;p=9;break}case 1:{m=h;l=e;p=10;break}default:{o=e;p=11}}if((p|0)==9){m=g+1|0;l=(e<<6)+(d[g>>0]|0)|0;p=10}if((p|0)==10?(p=0,n=(l<<6)+(d[m>>0]|0)-(c[27232+(i<<2)>>2]|0)|0,!((n&-2|0)==65534|((n&-2048|0)==55296?1:(n&c[27248+(i<<2)>>2]|0)==0))):0){o=n;p=11}if((p|0)==11?(p=0,(o|0)==0):0)break;e=q;do{e=e+1|0;g=a[e>>0]|0}while((g&-64)<<24>>24==-128);j=j+1|0;q=e;e=g}e=j-k|0;if((e|0)>0)while(1){do f=f+1|0;while((a[f>>0]&-64)<<24>>24==-128);if((e|0)>1)e=e+-1|0;else break}e=nb(q+1-f|0)|0;if(!e){Ec(b);return}else{Su(e,f)|0;Cc(b,e,-1,-1);qb(e);return}}Bc(b);return}function eu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((e|0)!=1)Y(58653,58262,1323,58661);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}e=nc(c[f>>2]|0)|0;f=Eu(e)|0;l=nb(f+1|0)|0;if(!l){Ec(b);return}j=l+f|0;a[j>>0]=0;j=j+-1|0;a:while(1){while(1){h=e+1|0;f=d[e>>0]|0;g=a[26976+f>>0]|0;i=g&255;switch(g<<24>>24){case 4:break;case 3:{g=e+2|0;f=(f<<6)+(d[h>>0]|0)|0;p=12;break}case 2:{g=h;p=12;break}case 1:{m=h;k=f;p=13;break}default:{o=f;p=14}}if((p|0)==12){m=g+1|0;k=(f<<6)+(d[g>>0]|0)|0;p=13}if((p|0)==13?(p=0,n=(k<<6)+(d[m>>0]|0)-(c[27232+(i<<2)>>2]|0)|0,!((n&-2|0)==65534|((n&-2048|0)==55296?1:(n&c[27248+(i<<2)>>2]|0)==0))):0){o=n;p=14}if((p|0)==14?(p=0,(o|0)==0):0)break a;f=e;while(1){i=f+1|0;if((a[i>>0]&-64)<<24>>24==-128)f=i;else break}if(f>>>0<e>>>0)e=i;else break}h=1;g=j;while(1){j=g;g=g+-1|0;a[j>>0]=a[f>>0]|0;f=i+~h|0;if(f>>>0<e>>>0)break;else h=h+1|0}j=g;e=i}Cc(b,l,-1,-1);qb(l);return}function fu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((d|0)!=1)Y(58254,58262,724,58642);if((sc(c[e>>2]|0)|0)==5){Bc(b);return}f=nc(c[e>>2]|0)|0;d=nb((Eu(f)|0)+1|0)|0;i=Su(d,f)|0;if(!i){Ec(b);return}e=a[f>>0]|0;if(e<<24>>24){h=1;g=e<<24>>24;while(1){f=f+1|0;if(!(wu(g)|0)){if((h|0)==1)e=zu(g)|0;else e=Du(g)|0;h=0;e=e&255}else h=1;g=d+1|0;a[d>>0]=e;e=a[f>>0]|0;if(!(e<<24>>24)){d=g;break}else{d=g;g=e<<24>>24}}}a[d>>0]=0;Cc(b,i,-1,-1);qb(i);return}function gu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((e|0)!=2)Y(58580,58262,771,58633);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}l=nc(c[f>>2]|0)|0;j=rc(c[f+4>>2]|0)|0;k=L()|0;if((k|0)<0){xc(b,58611,-1);return}e=a[l>>0]|0;if((l|0)==(-1|0)|e<<24>>24==0)f=0;else{f=0;g=l;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)))}i=((f|0)<0)<<31>>31;do if((k|0)>(i|0)|(k|0)==(i|0)&j>>>0>f>>>0){e=nb(j+1-f+(Eu(l)|0)|0)|0;if(!e){Ec(b);return}g=1;h=e;do{m=h;h=h+1|0;a[m>>0]=32;g=g+1|0;m=Sv(g|0,0,f|0,i|0)|0;n=L()|0}while(!((n|0)>(k|0)|(n|0)==(k|0)&m>>>0>j>>>0));Su(h,l)|0}else{e=nb((Eu(l)|0)+1|0)|0;f=Su(e,l)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function hu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;if((e|0)!=2)Y(58580,58262,825,58624);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}h=nc(c[f>>2]|0)|0;j=rc(c[f+4>>2]|0)|0;k=L()|0;if((k|0)<0){xc(b,58611,-1);return}e=a[h>>0]|0;if((h|0)==(-1|0)|e<<24>>24==0)f=0;else{f=0;g=h;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)))}i=((f|0)<0)<<31>>31;do if((k|0)>(i|0)|(k|0)==(i|0)&j>>>0>f>>>0){g=Eu(h)|0;e=nb(j+1-f+g|0)|0;if(!e){Ec(b);return}Su(e,h)|0;h=1;g=e+g|0;do{l=g;g=g+1|0;a[l>>0]=32;h=h+1|0;l=Sv(h|0,0,f|0,i|0)|0;m=L()|0}while(!((m|0)>(k|0)|(m|0)==(k|0)&l>>>0>j>>>0));a[g>>0]=0}else{e=nb((Eu(h)|0)+1|0)|0;f=Su(e,h)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function iu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((e|0)!=2)Y(58580,58262,880,58602);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}l=nc(c[f>>2]|0)|0;m=rc(c[f+4>>2]|0)|0;n=L()|0;if((n|0)<0){xc(b,58611,-1);return}e=a[l>>0]|0;if((l|0)==(-1|0)|e<<24>>24==0)j=0;else{f=0;g=l;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)));j=f}k=((j|0)<0)<<31>>31;do if((n|0)>(k|0)|(n|0)==(k|0)&m>>>0>j>>>0){i=Eu(l)|0;e=nb(m+1-j+i|0)|0;if(!e){Ec(b);return}h=Sv(j|0,k|0,2,0)|0;g=L()|0;if((g|0)>(n|0)|(g|0)==(n|0)&h>>>0>m>>>0){f=e;h=1}else{h=1;g=e;while(1){f=g+1|0;a[g>>0]=32;h=h+1|0;g=Sv(h<<1|0,0,j|0,k|0)|0;o=L()|0;if((o|0)>(n|0)|(o|0)==(n|0)&g>>>0>m>>>0)break;else g=f}}Su(f,l)|0;f=f+i|0;o=Sv(h|0,0,j|0,k|0)|0;l=L()|0;if(!((l|0)>(n|0)|(l|0)==(n|0)&o>>>0>m>>>0))while(1){g=f+1|0;a[f>>0]=32;h=h+1|0;o=Sv(h|0,0,j|0,k|0)|0;l=L()|0;if((l|0)>(n|0)|(l|0)==(n|0)&o>>>0>m>>>0){f=g;break}else f=g}a[f>>0]=0}else{e=nb((Eu(l)|0)+1|0)|0;f=Su(e,l)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function ju(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((e|0)!=2)Y(58580,58262,939,58588);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){e=nc(c[f>>2]|0)|0;m=nc(c[g>>2]|0)|0;n=nb((Eu(e)|0)+1|0)|0;if(!n){Ec(b);return}l=n;f=e;e=a[e>>0]|0;while(1){g=f+1|0;e=e&255;k=a[26976+e>>0]|0;i=k&255;switch(k<<24>>24){case 4:{e=65533;break}case 3:{h=f+2|0;e=(e<<6)+(d[g>>0]|0)|0;o=12;break}case 2:{h=g;o=12;break}case 1:{o=13;break}default:o=14}if((o|0)==12){g=h+1|0;e=(e<<6)+(d[h>>0]|0)|0;o=13}if((o|0)==13){o=0;e=(e<<6)+(d[g>>0]|0)-(c[27232+(i<<2)>>2]|0)|0;if((e&-2|0)==65534|((e&-2048|0)==55296?1:(e&c[27248+(i<<2)>>2]|0)==0))e=65533;else o=14}if((o|0)==14){o=0;if(!e)break}g=m;h=a[m>>0]|0;while(1){j=g+1|0;i=h&255;h=a[26976+i>>0]|0;k=h&255;switch(h<<24>>24){case 4:{i=65533;break}case 3:{h=g+2|0;i=(i<<6)+(d[j>>0]|0)|0;o=20;break}case 2:{h=j;o=20;break}case 1:{o=21;break}default:{}}if((o|0)==20){j=h+1|0;i=(i<<6)+(d[h>>0]|0)|0;o=21}if((o|0)==21){o=0;i=(i<<6)+(d[j>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;i=(i&-2|0)==65534|((i&-2048|0)==55296?1:(i&c[27248+(k<<2)>>2]|0)==0)?65533:i}h=(i|0)!=0;if((i|0)==(e|0)|h^1)break;do{g=g+1|0;h=a[g>>0]|0}while((h&-64)<<24>>24==-128)}if(h){e=g;do e=e+1|0;while((a[e>>0]&-64)<<24>>24==-128);e=e-g|0;nv(l,g,e)|0;e=l+e|0}else e=l;do{f=f+1|0;g=a[f>>0]|0}while((g&-64)<<24>>24==-128);l=e;e=g}a[l>>0]=0;Cc(b,n,-1,-1);qb(n);return}Bc(b);return}function ku(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=a[b>>0]|0;if(!(t<<24>>24)){w=-1;return w|0}g=e;n=0;l=a[e>>0]|0;while(1){j=g+1|0;e=l&255;i=a[26976+e>>0]|0;k=i&255;switch(i<<24>>24){case 4:break;case 3:{h=g+2|0;e=(e<<6)+(d[j>>0]|0)|0;w=6;break}case 2:{h=j;w=6;break}case 1:{o=j;m=e;w=7;break}default:{q=e;w=8}}if((w|0)==6){o=h+1|0;m=(e<<6)+(d[h>>0]|0)|0;w=7}if((w|0)==7?(w=0,p=(m<<6)+(d[o>>0]|0)-(c[27232+(k<<2)>>2]|0)|0,!((p&-2|0)==65534|((p&-2048|0)==55296?1:(p&c[27248+(k<<2)>>2]|0)==0))):0){q=p;w=8}if((w|0)==8?(w=0,(q|0)==0):0)break;h=n+1|0;if((n|0)>=(f|0))break;do{g=g+1|0;e=a[g>>0]|0}while((e&-64)<<24>>24==-128);n=h;l=e}e=0;while(1){j=g+1|0;h=l&255;k=i&255;switch(i<<24>>24){case 4:break;case 3:{i=g+2|0;h=(h<<6)+(d[j>>0]|0)|0;w=15;break}case 2:{i=j;w=15;break}case 1:{s=j;r=h;w=16;break}default:{v=h;w=17}}if((w|0)==15){s=i+1|0;r=(h<<6)+(d[i>>0]|0)|0;w=16}if((w|0)==16?(w=0,u=(r<<6)+(d[s>>0]|0)-(c[27232+(k<<2)>>2]|0)|0,!((u&-2|0)==65534|((u&-2048|0)==55296?1:(u&c[27248+(k<<2)>>2]|0)==0))):0){v=u;w=17}if((w|0)==17?(w=0,(v|0)==0):0){e=-1;f=0;break}i=g;j=b;n=l;h=t;while(1){k=j+1|0;h=h&255;q=a[26976+h>>0]|0;m=q&255;switch(q<<24>>24){case 4:{o=65533;break}case 3:{l=j+2|0;h=(h<<6)+(d[k>>0]|0)|0;w=22;break}case 2:{l=k;w=22;break}case 1:{w=23;break}default:o=h}if((w|0)==22){k=l+1|0;h=(h<<6)+(d[l>>0]|0)|0;w=23}if((w|0)==23){w=0;o=(h<<6)+(d[k>>0]|0)-(c[27232+(m<<2)>>2]|0)|0;o=(o&-2|0)==65534|((o&-2048|0)==55296?1:(o&c[27248+(m<<2)>>2]|0)==0)?65533:o}k=i+1|0;h=n&255;q=a[26976+h>>0]|0;m=q&255;switch(q<<24>>24){case 4:{l=65533;break}case 3:{l=i+2|0;h=(h<<6)+(d[k>>0]|0)|0;w=27;break}case 2:{l=k;w=27;break}case 1:{w=28;break}default:l=h}if((w|0)==27){k=l+1|0;h=(h<<6)+(d[l>>0]|0)|0;w=28}if((w|0)==28){w=0;l=(h<<6)+(d[k>>0]|0)-(c[27232+(m<<2)>>2]|0)|0;l=(l&-2|0)==65534|((l&-2048|0)==55296?1:(l&c[27248+(m<<2)>>2]|0)==0)?65533:l}do{j=j+1|0;h=a[j>>0]|0}while((h&-64)<<24>>24==-128);do{i=i+1|0;k=a[i>>0]|0}while((k&-64)<<24>>24==-128);if((l|0)!=0&((o|0)!=0&(o|0)==(l|0)))n=k;else break}if(!o)break;do{g=g+1|0;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);e=e+1|0;l=h;i=a[26976+(h&255)>>0]|0}w=f+e|0;return w|0}
- function Mh(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Ya=0,Za=0,_a=0,$a=0,bb=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;nb=Ra;Ra=Ra+560|0;lb=nb+416|0;kb=nb+400|0;jb=nb+384|0;ib=nb+368|0;hb=nb+352|0;fb=nb+336|0;eb=nb+320|0;bb=nb+304|0;$a=nb+288|0;mb=nb+272|0;gb=nb+256|0;_a=nb+240|0;da=nb+216|0;la=nb+524|0;va=nb+512|0;La=nb+192|0;Sa=nb+504|0;Ua=nb+160|0;Va=nb+96|0;Ya=nb+64|0;Za=nb+496|0;ea=nb+551|0;fa=nb+32|0;ga=nb;ha=nb+528|0;ia=nb+432|0;ja=nb+538|0;ka=f+20|0;ma=(c[(c[ka>>2]|0)+36>>2]<<1>>>0)/3|0;na=f+68|0;oa=f+116|0;pa=f+124|0;qa=f+70|0;ra=f+72|0;sa=f+120|0;ta=f+3|0;ua=ia+8|0;wa=ja+4|0;ya=Va+4|0;Ca=Va+8|0;Ea=Va+12|0;Fa=Va+16|0;Ga=Va+40|0;Ha=ia+12|0;Ia=ia+4|0;Ja=da+16|0;Ka=da+12|0;Ma=da+18|0;Na=ja;Oa=da+16|0;Pa=da+12|0;Qa=da+18|0;i=0;j=a[na>>0]|0;ca=c[oa>>2]|0;do{g=j<<24>>24;u=ca+20|0;if((c[u>>2]|0)<0?Jh(ca)|0:0){h=0;break}ba=ca+12|0;h=(a[ba>>0]|0)==0;if(!(j<<24>>24)){if(h){h=0;break}c[la>>2]=0;c[va>>2]=0;v=ca+52|0;l=c[v>>2]|0;g=c[ca+72>>2]|0;j=c[g+20>>2]|0;do if((b[g+28>>1]&4)!=0?(c[j+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[j+96>>2]|0)){c[da>>2]=0;aa=17;break}else{h=Ve(g)|0;aa=16;break}else aa=11;while(0);do if((aa|0)==11){h=c[j+40>>2]|0;if(h|0){c[da>>2]=h;aa=26;break}if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(g)|0;aa=16;break}else{h=Xf(g)|0;aa=16;break}}while(0);if((aa|0)==16){c[da>>2]=h;if(!h)aa=17;else aa=26}do if((aa|0)==17){aa=0;j=ca+4|0;h=fg(l,la,va,c[j>>2]|0,0)|0;c[da>>2]=h;k=c[la>>2]|0;w=k;do if(!h){g=c[v>>2]|0;$=c[ca+56>>2]|0;Z=c[k+56>>2]|0;h=d[ca+9>>0]|0;_=(c[k+4>>2]|0)==1?100:0;Y=$+(h+5)|0;Y=d[Y>>0]<<8|d[Y+1>>0];ew(Z+Y|0,$+Y|0,(c[g+36>>2]|0)-Y|0)|0;ew(Z+_|0,$+h|0,(e[ca+24>>1]<<1)+(e[ca+18>>1]|0)|0)|0;a[k>>0]=0;h=Gf(k)|0;if(!h){h=Jh(k)|0;if(!h){if(!(a[g+17>>0]|0)){h=0;break}h=hg(k)|0;c[da>>2]=h;break}}c[da>>2]=h}while(0);if(a[l+17>>0]|0){ig(l,c[va>>2]|0,5,c[j>>2]|0,da);h=c[da>>2]|0}if(h|0){c[pa>>2]=0;if(!k)break;g=c[k+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{ba=c[g+20>>2]|0;aa=ba+120|0;c[aa>>2]=(c[aa>>2]|0)+-1;ba=ba+136|0;c[g+16>>2]=c[ba>>2];c[ba>>2]=g;break}}ew(k+28|0,ca+28|0,d[ba>>0]<<1|0)|0;ew(k+36|0,ca+36|0,d[ba>>0]<<2|0)|0;a[k+12>>0]=a[ba>>0]|0;m=a[c[k+56>>2]>>0]&-9;q=ca+56|0;r=c[q>>2]|0;s=c[v>>2]|0;t=ca+9|0;h=d[t>>0]|0;if(!(b[s+22>>1]&12)){g=r+h|0;p=s+36|0}else{p=s+36|0;g=r+h|0;gw(g|0,0,(c[p>>2]|0)-h|0)|0}a[g>>0]=m;n=h+12|0;o=n&65535;g=r+(h+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[r+(h+7)>>0]=0;g=r+(h+5)|0;a[g>>0]=(c[p>>2]|0)>>>8;a[g+1>>0]=c[p>>2];c[u>>2]=(c[p>>2]|0)-n&65535;g=(m&255)>>>3;j=g&255;a[ca+8>>0]=j;g=4-(g<<2)&255;h=ca+10|0;a[h>>0]=g;k=ca+76|0;c[k>>2]=120;l=c[v>>2]|0;switch(m<<24>>24){case 5:{a[ca+2>>0]=1;h=ca+3|0;if(!(j<<24>>24)){a[h>>0]=0;c[k>>2]=121;h=181}else{a[h>>0]=1;h=180}c[ca+80>>2]=h;b[ca+14>>1]=b[l+28>>1]|0;h=l+30|0;aa=41;break}case 2:{a[ca+2>>0]=0;a[ca+3>>0]=0;c[ca+80>>2]=179;b[ca+14>>1]=b[l+24>>1]|0;h=l+26|0;aa=41;break}default:{c[_a>>2]=32306;c[_a+4>>2]=65035;c[_a+8>>2]=31517;Db(11,32001,_a);g=a[h>>0]|0}}if((aa|0)==41){b[ca+16>>1]=b[h>>1]|0;a[ca+11>>0]=a[l+21>>0]|0}b[ca+18>>1]=o;c[ca+60>>2]=r+(c[p>>2]|0);c[ca+64>>2]=r+n;c[ca+68>>2]=r+(g&255);a[ba>>0]=0;b[ca+26>>1]=(c[s+32>>2]|0)+65535;b[ca+24>>1]=0;a[ca>>0]=1;h=(c[q>>2]|0)+((d[t>>0]|0)+8)|0;ba=c[va>>2]|0;a[h>>0]=ba>>>24;a[h+1>>0]=ba>>>16;a[h+2>>0]=ba>>>8;a[h+3>>0]=ba;c[pa>>2]=w;h=0}else if((aa|0)==26)c[pa>>2]=0;while(0);if(h|0)break;a[na>>0]=1;b[qa>>1]=0;b[ra>>1]=0;c[sa>>2]=ca;h=0;j=1;g=pa}else{if(h?(c[u>>2]|0)<=(ma|0):0){h=0;break}m=g+-1|0;$=c[f+120+(m<<2)>>2]|0;m=b[f+72+(m<<1)>>1]|0;n=m&65535;g=c[$+72>>2]|0;k=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0))aa=56;else{h=Ve(g)|0;aa=55}else aa=51;do if((aa|0)==51){h=c[k+40>>2]|0;if(!h)if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){h=Wf(g)|0;aa=55;break}else{h=Xf(g)|0;aa=55;break}else aa=523}while(0);if((aa|0)==55)if(!h)aa=56;else aa=523;do if((aa|0)==56){aa=0;if((c[$+20>>2]|0)<0?(xa=Jh($)|0,xa|0):0){h=xa;aa=523;break}if(((((a[ca+3>>0]|0)!=0?(a[ba>>0]|0)==1:0)?(za=b[ca+28>>1]|0,Aa=ca+24|0,za<<16>>16==(b[Aa>>1]|0)):0)?(Ba=$+4|0,(c[Ba>>2]|0)!=1):0)?(Da=$+24|0,(b[Da>>1]|0)==m<<16>>16):0){q=c[ca+52>>2]|0;do if(za<<16>>16){h=fg(q,la,La,0,0)|0;c[va>>2]=h;if(!h){r=c[ca+36>>2]|0;c[Sa>>2]=r;r=Xa[c[ca+76>>2]&255](ca,r)|0;b[Ua>>1]=r;r=c[la>>2]|0;m=c[r+56>>2]|0;s=r+52|0;n=c[s>>2]|0;h=d[r+9>>0]|0;if(!(b[n+22>>1]&12)){g=m+h|0;l=n+36|0}else{l=n+36|0;g=m+h|0;gw(g|0,0,(c[l>>2]|0)-h|0)|0}a[g>>0]=13;_=h+8|0;g=m+(h+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[m+(h+7)>>0]=0;g=m+(h+5)|0;a[g>>0]=(c[l>>2]|0)>>>8;a[g+1>>0]=c[l>>2];g=r+20|0;c[g>>2]=(c[l>>2]|0)-_&65535;a[r+8>>0]=1;a[r+10>>0]=0;c[r+76>>2]=120;k=c[s>>2]|0;a[r+2>>0]=1;a[r+3>>0]=1;o=r+80|0;c[o>>2]=180;b[r+14>>1]=b[k+28>>1]|0;j=r+16|0;b[j>>1]=b[k+30>>1]|0;a[r+11>>0]=a[k+21>>0]|0;k=r+18|0;b[k>>1]=_;p=r+60|0;c[p>>2]=m+(c[l>>2]|0);c[r+64>>2]=m+_;c[r+68>>2]=m;a[r+12>>0]=0;b[r+26>>1]=(c[n+32>>2]|0)+65535;b[r+24>>1]=0;a[r>>0]=1;c[Va>>2]=1;c[ya>>2]=ca;c[Ca>>2]=Sa;c[Ea>>2]=Ua;c[Fa>>2]=c[ca+60>>2];c[Ga>>2]=2;h=Rh(Va,0,1,r)|0;c[va>>2]=h;if(h|0){g=c[r+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{$=c[g+20>>2]|0;_=$+120|0;c[_>>2]=(c[_>>2]|0)+-1;$=$+136|0;c[g+16>>2]=c[$>>2];c[$>>2]=g}break}c[g>>2]=(c[q+36>>2]|0)+-2-(e[k>>1]|0)-(e[Ua>>1]|0);do if(a[q+17>>0]|0){ig(q,c[La>>2]|0,5,c[Ba>>2]|0,va);if((e[Ua>>1]|0)<=(e[j>>1]|0))break;j=c[Sa>>2]|0;a:do if(!(c[va>>2]|0)){cb[c[o>>2]&255](r,j,da);h=e[Ja>>1]|0;if((c[Ka>>2]|0)>>>0<=h>>>0)break;g=c[p>>2]|0;do if(g>>>0>=j>>>0){if(g>>>0>=(j+h|0)>>>0)break;c[mb>>2]=32306;c[mb+4>>2]=64569;c[mb+8>>2]=31517;Db(11,32001,mb);c[va>>2]=11;break a}while(0);_=j+((e[Ma>>1]|0)+-4)|0;ig(c[s>>2]|0,d[_+1>>0]<<16|d[_>>0]<<24|d[_+2>>0]<<8|d[_+3>>0],3,c[r+4>>2]|0,va)}while(0)}while(0);k=(c[ca+64>>2]|0)+((e[Aa>>1]<<1)+-2)|0;k=(c[ca+56>>2]|0)+((d[k>>0]<<8|d[k+1>>0])&e[ca+26>>1])|0;c[Sa>>2]=k;g=0;while(1){j=g+1|0;c[Sa>>2]=k+j;if(j>>>0<9&(a[k+g>>0]|0)<0)g=j;else break}l=k+g+10|0;h=wa;g=k+j|0;do{c[Sa>>2]=g+1;_=a[g>>0]|0;Z=h;h=h+1|0;a[Z>>0]=_;g=c[Sa>>2]|0}while(_<<24>>24<0&g>>>0<l>>>0);if(!(c[va>>2]|0))Lh($,e[Da>>1]|0,ja,h-Na|0,0,c[ca+4>>2]|0,va);g=(c[$+56>>2]|0)+((d[$+9>>0]|0)+8)|0;$=c[La>>2]|0;a[g>>0]=$>>>24;a[g+1>>0]=$>>>16;a[g+2>>0]=$>>>8;a[g+3>>0]=$;g=c[la>>2]|0;do if(g|0){g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{$=c[g+20>>2]|0;_=$+120|0;c[_>>2]=(c[_>>2]|0)+-1;$=$+136|0;c[g+16>>2]=c[$>>2];c[$>>2]=g;break}}while(0);h=c[va>>2]|0}}else{c[gb>>2]=32306;c[gb+4>>2]=70410;c[gb+8>>2]=31517;Db(11,32001,gb);h=11}while(0)}else aa=95;b:do if((aa|0)==95){aa=0;l=c[(c[ka>>2]|0)+32>>2]|0;if((c[14813]|0)>=(l|0)?(Ta=c[14819]|0,(Ta|0)!=0):0){c[14819]=c[Ta>>2];_=c[14820]|0;c[14820]=_+-1;c[14821]=(_|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<l>>>0)c[14986]=l;g=(c[14979]|0)+1|0;c[14979]=g;if(g>>>0>(c[14983]|0)>>>0){c[14983]=g;_=Ta}else _=Ta}else aa=101;do if((aa|0)==101){aa=0;_=Sv(l|0,((l|0)<0)<<31>>31|0,-1,-1)|0;Z=L()|0;if(!(Z>>>0>0|(Z|0)==0&_>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](l)|0;if(!g){_=0;break}}else{g=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;k=59064;h=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&h>>>0>0){_=c[14978]|0;Z=Tv(h|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;Y=L()|0;c[14768]=((Y|0)<0|(Y|0)==0&Z>>>0<=_>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){_=0;break}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}h=Wa[c[29352>>2]&127](g)|0;if((c[14986]|0)>>>0<l>>>0)c[14986]=l;h=(c[14980]|0)+h|0;c[14980]=h;if(h>>>0>(c[14984]|0)>>>0){c[14984]=h;_=g}else _=g}else _=0}while(0);W=j<<24>>24==1;I=a[ta>>0]&1;j=I&255;c[la>>2]=0;a[ea>>0]=0;a[ea+1>>0]=0;a[ea+2>>0]=0;a[ea+3>>0]=0;a[ea+4>>0]=0;c[ia>>2]=0;c[ua>>2]=0;Y=c[$+52>>2]|0;if(!_)h=7;else{x=$+12|0;k=d[x>>0]|0;X=$+24|0;l=e[X>>1]|0;g=l+k|0;if(g>>>0<2)h=0;else{do if(m<<16>>16)if((g|0)==(n|0)){h=(j|-2)+n|0;break}else{h=n+-1|0;break}else h=0;while(0);g=2-j|0}Z=g+1|0;j=h-k+g|0;V=$+56|0;if((j|0)==(l|0))j=(d[$+9>>0]|0)+8|0;else{j=(c[$+64>>2]|0)+(j<<1)|0;j=(d[j>>0]<<8|d[j+1>>0])&e[$+26>>1]}K=(c[V>>2]|0)+j|0;M=K+1|0;N=K+2|0;O=K+3|0;k=d[M>>0]<<16|d[K>>0]<<24|d[N>>0]<<8|d[O>>0];c[Za>>2]=k;j=va+(g<<2)|0;U=yh(Y,k,j,0,0)|0;c[la>>2]=U;c:do if(!U){s=$+26|0;t=$+64|0;S=$+76|0;u=Y+22|0;v=$+28|0;D=Y+36|0;w=$+36|0;r=g;while(1){j=c[j>>2]|0;if((c[j+20>>2]|0)<0?(U=Jh(j)|0,c[la>>2]=U,U|0):0){aa=133;break}q=r+-1|0;if(!r){aa=144;break}j=a[x>>0]|0;p=q+h|0;do if(!(j<<24>>24))aa=138;else{if((p|0)!=(e[v>>1]|0)){aa=138;break}U=c[w>>2]|0;c[Sa+(q<<2)>>2]=U;k=d[U+1>>0]<<16|d[U>>0]<<24|d[U+2>>0]<<8|d[U+3>>0];U=(Xa[c[S>>2]&255]($,U)|0)&65535;c[Ya+(q<<2)>>2]=U;a[x>>0]=0}while(0);if((aa|0)==138){aa=0;j=(c[t>>2]|0)+(p-(j&255)<<1)|0;j=(c[V>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[s>>1])|0;l=Sa+(q<<2)|0;c[l>>2]=j;k=d[j+1>>0]<<16|d[j>>0]<<24|d[j+2>>0]<<8|d[j+3>>0];m=(Xa[c[S>>2]&255]($,j)|0)&65535;c[Ya+(q<<2)>>2]=m;n=j;if(b[u>>1]&12){o=n-(c[V>>2]|0)|0;if((o+m|0)>(c[D>>2]|0)){aa=141;break}ew(_+o|0,j|0,m|0)|0;c[l>>2]=_+(n-(c[V>>2]|0))}Kh($,p-(d[x>>0]|0)|0,m,la)}j=va+(q<<2)|0;U=yh(Y,k,j,0,0)|0;c[la>>2]=U;if(U|0){aa=129;break}else r=q}if((aa|0)==129){c[Za>>2]=k;g=q;aa=130;break}else if((aa|0)==133){aa=0;c[Za>>2]=k;gw(va|0,0,r<<2|0)|0;g=0;break}else if((aa|0)==141){aa=0;c[Za>>2]=k;c[$a>>2]=32306;c[$a+4>>2]=70767;c[$a+8>>2]=31517;Db(11,32001,$a);c[la>>2]=11;gw(va|0,0,r<<2|0)|0;g=0;break}else if((aa|0)==144){aa=0;c[Za>>2]=k;j=c[Y+32>>2]|0;m=(G((((j+-8|0)>>>0)/6|0)+4|0,Z)|0)+3&-4;j=(m*6|0)+j|0;U=Sv(j|0,((j|0)<0)<<31>>31|0,-1,-1)|0;T=L()|0;do if(T>>>0>0|(T|0)==0&U>>>0>2147483390)aa=155;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](j)|0;c[ua>>2]=j;if(!j)break}else{l=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){U=c[14978]|0;T=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;R=L()|0;c[14768]=((R|0)<0|(R|0)==0&T>>>0<=U>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){aa=155;break}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;c[ua>>2]=j}r=j+(m<<2)|0;c[Ha>>2]=r;A=r+(m<<1)|0;p=c[va>>2]|0;c[Ia>>2]=p;R=d[p+8>>0]<<2;U=R&65535;C=a[p+3>>0]|0;E=C&255;F=p+56|0;B=C<<24>>24!=0;w=c[F>>2]|0;u=p+18|0;m=e[u>>1]|0;j=0;z=0;y=p;l=w+m|0;x=F;while(1){t=y+24|0;v=b[y+26>>1]|0;k=c[ia>>2]|0;s=y+12|0;gw(r+(k<<1)|0,0,(d[s>>0]|0)+(e[t>>1]|0)<<1|0)|0;s=a[s>>0]|0;if(s<<24>>24){T=b[y+28>>1]|0;r=T&65535;if(T<<16>>16){q=v&65535;o=(r<<1)+m|0;n=0;m=k;while(1){c[(c[ua>>2]|0)+(m<<2)>>2]=w+((d[l>>0]<<8|d[l+1>>0])&q);m=m+1|0;c[ia>>2]=m;n=n+1|0;if((n|0)==(r|0))break;else l=l+2|0}l=w+o|0;k=k+r|0}n=s&255;m=0;o=k;while(1){c[(c[ua>>2]|0)+(o<<2)>>2]=c[y+36+(m<<2)>>2];m=m+1|0;if((m|0)==(n|0))break;else o=o+1|0}k=k+n|0;c[ia>>2]=k}n=e[u>>1]|0;m=e[t>>1]<<1;q=w+n+m|0;if(l>>>0<q>>>0){o=v&65535;n=(w+-1+(m+n-l)|0)>>>1;m=k;do{c[(c[ua>>2]|0)+(m<<2)>>2]=w+((d[l>>0]<<8|d[l+1>>0])&o);l=l+2|0;m=m+1|0;c[ia>>2]=m}while(l>>>0<q>>>0);k=k+1+n|0}c[Va+(z<<2)>>2]=k;if(!(B|(z|0)>=(g|0))){l=c[Ya+(z<<2)>>2]|0;b[(c[Ha>>2]|0)+(k<<1)>>1]=l;T=A+j|0;l=l&65535;j=l+j|0;ew(T|0,c[Sa+(z<<2)>>2]|0,l|0)|0;c[(c[ua>>2]|0)+(k<<2)>>2]=T+R;T=(c[Ha>>2]|0)+(k<<1)|0;l=(e[T>>1]|0)-R&65535;b[T>>1]=l;do if(!(a[y+8>>0]|0)){k=c[(c[ua>>2]|0)+(k<<2)>>2]|0;T=(c[x>>2]|0)+8|0;T=d[T>>0]|d[T+1>>0]<<8|d[T+2>>0]<<16|d[T+3>>0]<<24;a[k>>0]=T;a[k+1>>0]=T>>8;a[k+2>>0]=T>>16;a[k+3>>0]=T>>24;k=c[ia>>2]|0}else{if((l&65535)>=4)break;while(1){l=j+1|0;a[A+j>>0]=0;k=c[ia>>2]|0;Q=(c[Ha>>2]|0)+(k<<1)|0;T=(b[Q>>1]|0)+1<<16>>16;b[Q>>1]=T;if((T&65535)<4)j=l;else{j=l;break}}}while(0);c[ia>>2]=k+1}l=z+1|0;if((z|0)>=(g|0))break;k=c[va+(l<<2)>>2]|0;q=k+56|0;n=c[q>>2]|0;o=k+18|0;m=e[o>>1]|0;if((a[n>>0]|0)!=(a[c[F>>2]>>0]|0)){aa=179;break}z=l;y=k;l=n+m|0;r=c[Ha>>2]|0;w=n;u=o;x=q}if((aa|0)==179){aa=0;c[bb>>2]=32306;c[bb+4>>2]=70833;c[bb+8>>2]=31517;Db(11,32001,bb);c[la>>2]=11;g=0;break c}T=R+-12+(c[D>>2]|0)|0;J=C<<24>>24==0;s=$+60|0;d:do if(J){k=0;r=0;while(1){c[ia+16+(k<<2)>>2]=c[p+60>>2];q=c[Va+(r<<2)>>2]|0;c[ia+40+(k<<2)>>2]=q;j=k+-1|0;if(!k)o=0;else o=(q|0)==(c[ia+40+(j<<2)>>2]|0)?j:k;j=o+1|0;c[ia+16+(j<<2)>>2]=c[s>>2];c[ia+40+(j<<2)>>2]=q+1;j=T-(c[p+20>>2]|0)|0;l=Ya+(r<<2)|0;c[l>>2]=j;m=p+12|0;if(a[m>>0]|0){n=p+76|0;k=0;do{j=j+2+((Xa[c[n>>2]&255](p,c[p+36+(k<<2)>>2]|0)|0)&65535)|0;c[l>>2]=j;k=k+1|0}while(k>>>0<(d[m>>0]|0)>>>0)}c[Ua+(r<<2)>>2]=q;j=r+1|0;if((j|0)==(Z|0))break d;k=o+2|0;r=j;p=c[va+(j<<2)>>2]|0}}else{k=0;r=0;while(1){c[ia+16+(k<<2)>>2]=c[p+60>>2];q=c[Va+(r<<2)>>2]|0;c[ia+40+(k<<2)>>2]=q;j=k+-1|0;if(!k)o=0;else o=(q|0)==(c[ia+40+(j<<2)>>2]|0)?j:k;j=T-(c[p+20>>2]|0)|0;l=Ya+(r<<2)|0;c[l>>2]=j;m=p+12|0;if(a[m>>0]|0){n=p+76|0;k=0;do{j=j+2+((Xa[c[n>>2]&255](p,c[p+36+(k<<2)>>2]|0)|0)&65535)|0;c[l>>2]=j;k=k+1|0}while(k>>>0<(d[m>>0]|0)>>>0)}c[Ua+(r<<2)>>2]=q;j=r+1|0;if((j|0)==(Z|0))break d;k=o+1|0;r=j;p=c[va+(j<<2)>>2]|0}}while(0);e:do if((g|0)>-1){o=Z;j=0;f:while(1){u=Ya+(j<<2)|0;l=c[u>>2]|0;g:do if((l|0)>(T|0)){p=j+1|0;t=Ua+(j<<2)|0;q=j+2|0;s=Ya+(p<<2)|0;r=Ua+(p<<2)|0;if(q>>>0>5){if((p|0)>=(o|0)){aa=232;break f}k=c[t>>2]|0;if(!J){m=l;while(1){k=k+-1|0;l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;Q=(l&65535)+2|0;l=m-Q|0;c[u>>2]=l;c[s>>2]=(c[s>>2]|0)+Q;c[t>>2]=k;if((l|0)>(T|0))m=l;else{r=o;q=t;break g}}}n=k;m=l;while(1){k=n+-1|0;l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;m=m-((l&65535)+2)|0;c[u>>2]=m;if((n|0)<(c[ia>>2]|0)){l=b[(c[Ha>>2]|0)+(n<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,n)|0;l=(l&65535)+2|0}else l=0;c[s>>2]=(c[s>>2]|0)+l;c[t>>2]=k;if((m|0)>(T|0))n=k;else{r=o;q=t;l=m;break g}}}if(!J){k=o;while(1){if((p|0)<(k|0))n=k;else{c[s>>2]=0;c[r>>2]=c[ia>>2];n=q}k=(c[t>>2]|0)+-1|0;m=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,k)|0;Q=(m&65535)+2|0;l=l-Q|0;c[u>>2]=l;c[s>>2]=(c[s>>2]|0)+Q;c[t>>2]=k;if((l|0)>(T|0))k=n;else{r=n;q=t;break g}}}k=o;while(1){if((p|0)<(k|0))o=k;else{c[s>>2]=0;c[r>>2]=c[ia>>2];o=q}n=c[t>>2]|0;k=n+-1|0;m=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,k)|0;l=l+-2-(m&65535)|0;c[u>>2]=l;if((n|0)<(c[ia>>2]|0)){m=b[(c[Ha>>2]|0)+(n<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,n)|0;m=(m&65535)+2|0}else m=0;c[s>>2]=(c[s>>2]|0)+m;c[t>>2]=k;if((l|0)>(T|0))k=o;else{r=o;q=t;break}}}else{k=Ua+(j<<2)|0;r=o;q=k;k=c[k>>2]|0}while(0);h:do if((k|0)<(c[ia>>2]|0)){p=Ya+(j+1<<2)|0;if(!J){m=l;while(1){l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;l=(l&65535)+2|0;m=l+m|0;if((m|0)>(T|0))break h;c[u>>2]=m;k=k+1|0;c[q>>2]=k;c[p>>2]=(c[p>>2]|0)-l;if((k|0)>=(c[ia>>2]|0))break h}}o=l;do{l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;o=o+2+(l&65535)|0;if((o|0)>(T|0))break h;c[u>>2]=o;k=k+1|0;c[q>>2]=k;m=c[ia>>2]|0;if((k|0)<(m|0)){l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16)){l=Sh(ia,k)|0;m=c[ia>>2]|0}n=(l&65535)+2|0;l=m}else{n=0;l=m}c[p>>2]=(c[p>>2]|0)-n}while((k|0)<(l|0))}while(0);if((k|0)>=(c[ia>>2]|0)){aa=254;break}if(!j)l=0;else l=c[Ua+(j+-1<<2)>>2]|0;if((k|0)<=(l|0)){aa=258;break}j=j+1|0;if((j|0)<(r|0))o=r;else{H=r;break e}}if((aa|0)==232){aa=0;c[eb>>2]=32306;c[eb+4>>2]=70953;c[eb+8>>2]=31517;Db(11,32001,eb);c[la>>2]=11;g=0;break c}else if((aa|0)==254){aa=0;H=j+1|0;break}else if((aa|0)==258){aa=0;c[fb>>2]=32306;c[fb+4>>2]=70986;c[fb+8>>2]=31517;Db(11,32001,fb);c[la>>2]=11;g=0;break c}}else H=Z;while(0);t=H+-1|0;i:do if((H|0)>1){j=c[Ya+(t<<2)>>2]|0;j:do if(!(I<<24>>24)){x=t;m=c[Ha>>2]|0;while(1){u=Ya+(x<<2)|0;w=x;x=x+-1|0;v=Ya+(x<<2)|0;n=c[v>>2]|0;s=Ua+(x<<2)|0;l=c[s>>2]|0;k=l-E|0;if(!(b[m+(k<<1)>>1]|0)){Sh(ia,k)|0;m=c[Ha>>2]|0}r=(w|0)==(t|0)?0:-2;while(1){q=l+-1|0;if(!(b[m+(q<<1)>>1]|0)){Sh(ia,q)|0;m=c[Ha>>2]|0}o=b[m+(k<<1)>>1]|0;if(j){p=j+2+(o&65535)|0;o=e[m+(q<<1)>>1]|0;if((p|0)>(n+r-o|0))break;else j=p}else{j=(o&65535)+2|0;o=e[m+(q<<1)>>1]|0}n=n+-2-o|0;c[s>>2]=q;if((l|0)>1){k=k+-1|0;l=q}else{l=q;break}}c[u>>2]=j;c[v>>2]=n;k=(w|0)>1;if(k)j=c[Ua+(w+-2<<2)>>2]|0;else j=0;if((l|0)<=(j|0))break j;if(!k)break i;else j=n}}else while(1){q=Ya+(t<<2)|0;s=t;t=t+-1|0;r=Ya+(t<<2)|0;m=c[r>>2]|0;p=Ua+(t<<2)|0;n=c[p>>2]|0;l=n-E|0;k=c[Ha>>2]|0;if(!(b[k+(l<<1)>>1]|0)){Sh(ia,l)|0;k=c[Ha>>2]|0}o=l;while(1){l=n+-1|0;if(!(b[k+(l<<1)>>1]|0))Sh(ia,l)|0;if(j|0){l=n;break}k=c[Ha>>2]|0;j=(e[k+(o<<1)>>1]|0)+2|0;m=m+-2-(e[k+(l<<1)>>1]|0)|0;c[p>>2]=l;if((n|0)<=1)break;else{o=o+-1|0;n=l}}c[q>>2]=j;c[r>>2]=m;k=(s|0)>1;if(k)j=c[Ua+(s+-2<<2)>>2]|0;else j=0;if((l|0)<=(j|0))break j;if(!k)break i;else j=m}while(0);c[hb>>2]=32306;c[hb+4>>2]=71028;c[hb+8>>2]=31517;Db(11,32001,hb);c[la>>2]=11;g=0;break c}while(0);D=a[c[F>>2]>>0]|0;F=D&255;do if((H|0)>0){v=I<<24>>24==0;w=F>>>1&4^12;y=F>>>3;x=y&255;y=4-(y<<2)&255;C=F&247;z=Y+17|0;A=x<<24>>24==0;B=$+4|0;t=0;u=0;k:while(1){l:do if((u|0)>(g|0)){Q=fg(Y,da,Za,v?c[Za>>2]|0:1,0)|0;c[la>>2]=Q;if(Q|0){g=t;break k}s=c[da>>2]|0;p=c[s+56>>2]|0;l=s+52|0;q=c[l>>2]|0;k=d[s+9>>0]|0;r=s;if(!(b[q+22>>1]&12)){j=p+k|0;o=q+36|0}else{o=q+36|0;j=p+k|0;gw(j|0,0,(c[o>>2]|0)-k|0)|0}a[j>>0]=D;m=w+k|0;n=m&65535;j=p+(k+1)|0;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;a[p+(k+7)>>0]=0;j=p+(k+5)|0;a[j>>0]=(c[o>>2]|0)>>>8;a[j+1>>0]=c[o>>2];c[s+20>>2]=(c[o>>2]|0)-m&65535;a[s+8>>0]=x;j=s+10|0;a[j>>0]=y;k=s+76|0;c[k>>2]=120;l=c[l>>2]|0;switch(C<<24>>24){case 5:{a[s+2>>0]=1;j=s+3|0;if(A){a[j>>0]=0;c[k>>2]=121;j=181}else{a[j>>0]=1;j=180}c[s+80>>2]=j;b[s+14>>1]=b[l+28>>1]|0;j=l+30|0;aa=314;break}case 2:{a[s+2>>0]=0;a[s+3>>0]=0;c[s+80>>2]=179;b[s+14>>1]=b[l+24>>1]|0;j=l+26|0;aa=314;break}default:{c[ib>>2]=32306;c[ib+4>>2]=65035;c[ib+8>>2]=31517;Db(11,32001,ib);j=a[j>>0]|0}}if((aa|0)==314){aa=0;b[s+16>>1]=b[j>>1]|0;a[s+11>>0]=a[l+21>>0]|0;j=y}b[s+18>>1]=n;c[s+60>>2]=p+(c[o>>2]|0);c[s+64>>2]=p+m;c[s+68>>2]=p+(j&255);a[s+12>>0]=0;b[s+26>>1]=(c[q+32>>2]|0)+65535;b[s+24>>1]=0;a[s>>0]=1;c[La+(u<<2)>>2]=r;j=t+1|0;c[Va+(u<<2)>>2]=c[ia>>2];if(!(a[z>>0]|0)){E=j;break}ig(Y,c[s+4>>2]|0,5,c[B>>2]|0,la);if(!(c[la>>2]|0))E=j;else{g=j;break k}}else{k=va+(u<<2)|0;j=c[k>>2]|0;c[La+(u<<2)>>2]=j;c[da>>2]=j;c[k>>2]=0;j=c[j+72>>2]|0;k=c[j+20>>2]|0;do if(b[j+28>>1]&4){if((c[k+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){aa=297;break}if(!(c[k+96>>2]|0)){c[la>>2]=0;E=t+1|0;break l}else{k=Ve(j)|0;break}}else aa=297;while(0);do if((aa|0)==297){aa=0;l=c[k+40>>2]|0;if(l|0){aa=298;break k}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){k=Wf(j)|0;break}else{k=Xf(j)|0;break}}while(0);c[la>>2]=k;j=t+1|0;if(!k)E=j;else{g=j;break k}}while(0);u=u+1|0;if((u|0)>=(H|0)){aa=319;break}else t=E}if((aa|0)==298){aa=0;c[la>>2]=l;g=t+1|0}else if((aa|0)==319){aa=0;if((E|0)<=0){Q=0;break}k=0;m:do{Q=c[La+(k<<2)>>2]|0;l=c[Q+4>>2]|0;c[fa+(k<<2)>>2]=l;c[ga+(k<<2)>>2]=l;b[ha+(k<<1)>>1]=b[(c[Q+72>>2]|0)+28>>1]|0;if(k|0){j=0;do{if((c[fa+(j<<2)>>2]|0)==(l|0)){aa=325;break m}j=j+1|0}while(j>>>0<k>>>0)}k=k+1|0}while((k|0)<(E|0));if((aa|0)==325){aa=0;c[jb>>2]=32306;c[jb+4>>2]=71102;c[jb+8>>2]=31517;Db(11,32001,jb);c[la>>2]=11;g=E;break c}x=(E|0)==1;y=Y+44|0;w=0;do{if(x)j=0;else{j=0;k=1;do{j=(c[ga+(k<<2)>>2]|0)>>>0<(c[ga+(j<<2)>>2]|0)>>>0?k:j;k=k+1|0}while((k|0)<(E|0))}Q=ga+(j<<2)|0;v=c[Q>>2]|0;c[Q>>2]=-1;if((j|0)!=(w|0)){do if((j|0)>(w|0)){t=c[(c[La+(j<<2)>>2]|0)+72>>2]|0;P=j+1+(c[y>>2]|0)|0;u=t+28|0;b[u>>1]=0;k=t+12|0;Q=t+24|0;db[c[29444>>2]&127](c[(c[k>>2]|0)+44>>2]|0,c[t>>2]|0,c[Q>>2]|0,P);c[Q>>2]=P;u=b[u>>1]|0;if((u&10)!=10)break;q=c[k>>2]|0;s=q+8|0;k=c[s>>2]|0;p=t+36|0;m=c[p>>2]|0;if((k|0)==(t|0)){c[s>>2]=m;r=m}else r=k;o=t+32|0;l=c[o>>2]|0;n=(l|0)==0;if(n){c[q+4>>2]=m;k=m}else{c[l+36>>2]=m;k=c[p>>2]|0}do if(!k){c[q>>2]=l;if(n){a[q+33>>0]=2;c[p>>2]=0;c[o>>2]=0;k=q;aa=345;break}else{c[p>>2]=0;k=q;aa=344;break}}else{c[k+32>>2]=l;l=c[q>>2]|0;c[p>>2]=0;c[o>>2]=l;if(!l){k=q;aa=345}else{k=q;aa=344}}while(0);do if((aa|0)==344){aa=0;c[l+36>>2]=t}else if((aa|0)==345){aa=0;c[q+4>>2]=t;if(!(a[q+32>>0]|0))break;a[q+33>>0]=1}while(0);c[k>>2]=t;if(!((u&8)==0&(r|0)==0))break;c[s>>2]=t}while(0);t=La+(w<<2)|0;u=c[(c[t>>2]|0)+72>>2]|0;s=u+28|0;b[s>>1]=b[ha+(j<<1)>>1]|0;j=u+12|0;Q=u+24|0;db[c[29444>>2]&127](c[(c[j>>2]|0)+44>>2]|0,c[u>>2]|0,c[Q>>2]|0,v);c[Q>>2]=v;s=b[s>>1]|0;do if((s&10)==10){p=c[j>>2]|0;r=p+8|0;j=c[r>>2]|0;o=u+36|0;l=c[o>>2]|0;if((j|0)==(u|0)){c[r>>2]=l;q=l}else q=j;n=u+32|0;k=c[n>>2]|0;m=(k|0)==0;if(m){c[p+4>>2]=l;j=l}else{c[k+36>>2]=l;j=c[o>>2]|0}do if(!j){c[p>>2]=k;if(m){a[p+33>>0]=2;c[o>>2]=0;c[n>>2]=0;j=p;aa=361;break}else{c[o>>2]=0;j=p;aa=360;break}}else{c[j+32>>2]=k;k=c[p>>2]|0;c[o>>2]=0;c[n>>2]=k;if(!k){j=p;aa=361}else{j=p;aa=360}}while(0);do if((aa|0)==360){aa=0;c[k+36>>2]=u}else if((aa|0)==361){aa=0;c[p+4>>2]=u;if(!(a[p+32>>0]|0))break;a[p+33>>0]=1}while(0);c[j>>2]=u;if(!((s&8)==0&(q|0)==0))break;c[r>>2]=u}while(0);c[(c[t>>2]|0)+4>>2]=v}w=w+1|0}while((w|0)!=(E|0));c[Za>>2]=v;Q=1;break}break c}else{E=0;Q=0}while(0);v=E+-1|0;j=c[La+(v<<2)>>2]|0;P=c[j+4>>2]|0;a[K>>0]=P>>>24;a[M>>0]=P>>>16;a[N>>0]=P>>>8;a[O>>0]=P;if(!((F&8|0)!=0|(Z|0)==(E|0))){P=(c[j+56>>2]|0)+8|0;O=(c[(c[((E|0)>(Z|0)?La:va)+(g<<2)>>2]|0)+56>>2]|0)+8|0;O=d[O>>0]|d[O+1>>0]<<8|d[O+2>>0]<<16|d[O+3>>0]<<24;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24}P=Y+17|0;do if(a[P>>0]|0){j=c[La>>2]|0;k=c[ia>>2]|0;if((k|0)<=0)break;t=J&1;u=U<<16>>16==0;q=0;l=0;n=(e[j+24>>1]|0)+(d[j+12>>0]|0)|0;p=j;o=j;s=0;while(1){r=c[(c[ua>>2]|0)+(s<<2)>>2]|0;if((s|0)==(n|0)){n=s+t|0;j=q;do{j=j+1|0;o=c[((j|0)<(E|0)?La+(j<<2)|0:va+(j<<2)|0)>>2]|0;m=n+(e[o+24>>1]|0)+(d[o+12>>0]|0)|0}while((s|0)==(m|0));n=m}else j=q;if((s|0)==(c[Ua+(l<<2)>>2]|0)){l=l+1|0;m=c[La+(l<<2)>>2]|0;if(!J){p=m;aa=378}}else aa=378;n:do if((aa|0)==378){aa=0;do if((j|0)<(E|0)){if((c[p+4>>2]|0)!=(c[fa+(j<<2)>>2]|0))break;m=r;if((c[o+56>>2]|0)>>>0>m>>>0)break;if((c[o+60>>2]|0)>>>0>m>>>0){m=p;break n}}while(0);if(u)ig(Y,d[r+1>>0]<<16|d[r>>0]<<24|d[r+2>>0]<<8|d[r+3>>0],5,c[p+4>>2]|0,la);k=b[(c[Ha>>2]|0)+(s<<1)>>1]|0;if(!(k<<16>>16))k=Sh(ia,s)|0;if((k&65535)>(e[p+16>>1]|0))o:do if(!(c[la>>2]|0)){cb[c[p+80>>2]&255](p,r,da);k=e[Oa>>1]|0;if((c[Pa>>2]|0)>>>0<=k>>>0)break;m=c[o+60>>2]|0;do if(m>>>0>=r>>>0){if(m>>>0>=(r+k|0)>>>0)break;c[kb>>2]=32306;c[kb+4>>2]=64569;c[kb+8>>2]=31517;Db(11,32001,kb);c[la>>2]=11;break o}while(0);O=r+((e[Qa>>1]|0)+-4)|0;ig(c[p+52>>2]|0,d[O+1>>0]<<16|d[O>>0]<<24|d[O+2>>0]<<8|d[O+3>>0],3,c[p+4>>2]|0,la)}while(0);if(c[la>>2]|0){g=E;break c}m=p;k=c[ia>>2]|0}while(0);s=s+1|0;if((s|0)>=(k|0))break;else{q=j;p=m}}}while(0);p:do if((E|0)>1){if(J){m=0;n=0;while(1){o=c[La+(n<<2)>>2]|0;l=c[Ua+(n<<2)>>2]|0;j=c[(c[ua>>2]|0)+(l<<2)>>2]|0;l=b[(c[Ha>>2]|0)+(l<<1)>>1]|0;k=R+(l&65535)|0;p=_+m|0;do if(!(a[o+8>>0]|0)){O=(c[o+56>>2]|0)+8|0;N=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[O>>0]=N;a[O+1>>0]=N>>8;a[O+2>>0]=N>>16;a[O+3>>0]=N>>24}else{j=j+-4|0;if(l<<16>>16!=4)break;k=(Xa[c[S>>2]&255]($,j)|0)&65535}while(0);Lh($,n+h|0,j,k,p,c[o+4>>2]|0,la);if(c[la>>2]|0){g=E;break c}n=n+1|0;if((n|0)>=(v|0))break p;else m=k+m|0}}n=0;o=0;while(1){p=c[La+(o<<2)>>2]|0;k=c[Ua+(o<<2)>>2]|0;l=c[ua>>2]|0;j=c[l+(k<<2)>>2]|0;m=_+n|0;if(!(a[p+8>>0]|0)){k=R+(e[(c[Ha>>2]|0)+(k<<1)>>1]|0)|0;l=(c[p+56>>2]|0)+8|0;S=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[l>>0]=S;a[l+1>>0]=S>>8;a[l+2>>0]=S>>16;a[l+3>>0]=S>>24;l=m}else{cb[c[p+80>>2]&255](p,c[l+(k+-1<<2)>>2]|0,da);j=m+4|0;l=da;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(l>>>0<0|(l|0)==0&k>>>0<128))if(l>>>0<0|(l|0)==0&k>>>0<16384){S=bw(k|0,l|0,7)|0;L()|0;a[j>>0]=S&255|-128;a[j+1>>0]=k&127;j=2;break}else{j=wh(j,k,l)|0;break}else{a[j>>0]=k&127;j=1}while(0);k=j+4|0;l=0;j=m}Lh($,o+h|0,j,k,l,c[p+4>>2]|0,la);if(c[la>>2]|0){g=E;break c}o=o+1|0;if((o|0)>=(v|0))break;else n=k+n|0}}while(0);h=1-E|0;q:do if((h|0)<(E|0)){O=c[Ua>>2]|0;N=J&1;r:while(1){K=(h|0)<0?0-h|0:h;M=ea+K|0;do if(!(a[M>>0]|0)){if((h|0)<=-1?(S=K+-1|0,(c[Va+(S<<2)>>2]|0)<(c[Ua+(S<<2)>>2]|0)):0)break;if(!K){J=O;k=0;H=0}else{if((K|0)>(g|0)){j=K+-1|0;k=c[ia>>2]|0}else{k=K+-1|0;j=k;k=(c[Va+(k<<2)>>2]|0)+N|0}H=(c[Ua+(j<<2)>>2]|0)+N|0;J=(c[Ua+(K<<2)>>2]|0)-H|0}I=c[La+(K<<2)>>2]|0;w=I+56|0;z=c[w>>2]|0;x=I+9|0;A=d[x>>0]|0;B=I+64|0;C=(c[B>>2]|0)+(J<<1)|0;D=I+24|0;v=e[D>>1]|0;F=I+12|0;y=k+v+(d[F>>0]|0)|0;q=J+H|0;if((k|0)<(H|0)){s=z+(c[(c[I+52>>2]|0)+36>>2]|0)|0;t=z+(A+8+(d[I+10>>0]|0))|0;u=z;j=0;l=0;m=0;r=k;while(1){p=c[(c[ua>>2]|0)+(r<<2)>>2]|0;if(p>>>0>=t>>>0&p>>>0<s>>>0){n=e[(c[Ha>>2]|0)+(r<<1)>>1]|0;o=p+n|0;if((m|0)!=(o|0)){if(m|0)Oh(I,m-u&65535,l&65535)|0;if(o>>>0>s>>>0){j=0;break}else l=n}else l=l+n|0;j=j+1|0;m=p}r=r+1|0;if((r|0)>=(H|0)){aa=437;break}}if((aa|0)==437){aa=0;if(m|0)Oh(I,m-u&65535,l&65535)|0;if((j|0)>(v|0))break r}u=c[B>>2]|0;fw(u|0,u+(j<<1)|0,v<<1|0)|0;u=v-j|0}else u=v;if((y|0)>(q|0)){s=c[w>>2]|0;t=s+(c[(c[I+52>>2]|0)+36>>2]|0)|0;r=s+((d[x>>0]|0)+8+(d[I+10>>0]|0))|0;j=0;l=0;m=0;while(1){p=c[(c[ua>>2]|0)+(q<<2)>>2]|0;if(p>>>0>=r>>>0&p>>>0<t>>>0){n=e[(c[Ha>>2]|0)+(q<<1)>>1]|0;o=p+n|0;if((m|0)!=(o|0)){if(m|0)Oh(I,m-s&65535,l&65535)|0;if(o>>>0>t>>>0){j=0;break}else l=n}else l=l+n|0;j=j+1|0;m=p}q=q+1|0;if((q|0)>=(y|0)){aa=452;break}}do if((aa|0)==452){aa=0;if(!m)break;Oh(I,m-s&65535,l&65535)|0}while(0);j=u-j|0}else j=u;p=z+(A+5)|0;q=p+1|0;S=z+(((d[p>>0]<<8|d[q>>0])+65535&65535)+1)|0;c[da>>2]=S;s:do if(S>>>0<C>>>0)aa=468;else{if((k|0)>(H|0)){l=k-H|0;l=(l|0)>(J|0)?J:l;S=c[B>>2]|0;fw(S+(l<<1)|0,S|0,j<<1|0)|0;if(!(Th(I,C,da,S,H,l,ia)|0))j=j+l|0;else{aa=468;break}}l=a[F>>0]|0;if(l<<24>>24){o=0;do{m=k+(e[I+28+(o<<1)>>1]|0)|0;n=m-H|0;if((n|0)>-1&(n|0)<(J|0)){l=(c[B>>2]|0)+(n<<1)|0;if((j|0)>(n|0))fw(l+2|0,l|0,j-n<<1|0)|0;if(Th(I,C,da,l,m,1,ia)|0){aa=468;break s}j=j+1|0;l=a[F>>0]|0}o=o+1|0}while(o>>>0<(l&255)>>>0)}if(Th(I,C,da,(c[B>>2]|0)+(j<<1)|0,j+H|0,J-j|0,ia)|0){aa=468;break}b[D>>1]=J;a[F>>0]=0;S=z+(A+3)|0;a[S>>0]=J>>>8;a[S+1>>0]=b[D>>1];S=(c[da>>2]|0)-z|0;a[p>>0]=S>>>8;a[q>>0]=S;c[la>>2]=0}while(0);if((aa|0)==468){aa=0;if((J|0)>0){k=H;l=J;j=c[Ha>>2]|0;while(1){if(!(b[j+(k<<1)>>1]|0)){S=c[Ia>>2]|0;S=Xa[c[S+76>>2]&255](S,c[(c[ua>>2]|0)+(k<<2)>>2]|0)|0;j=c[Ha>>2]|0;b[j+(k<<1)>>1]=S}if((l|0)>1){k=k+1|0;l=l+-1|0}else break}}S=Rh(ia,H,J,I)|0;c[la>>2]=S;if(S|0){g=E;break c}}a[M>>0]=1;c[I+20>>2]=T-(c[Ya+(K<<2)>>2]|0)}while(0);h=h+1|0;if((h|0)>=(E|0))break q}c[lb>>2]=32306;c[lb+4>>2]=70299;c[lb+8>>2]=31517;Db(11,32001,lb);c[la>>2]=11;g=E;break c}while(0);t:do if(W){if(b[X>>1]|0){aa=488;break}l=c[La>>2]|0;if((c[l+20>>2]|0)<(d[$+9>>0]|0)){aa=488;break}Y=Qh(l,-1)|0;c[la>>2]=Y;if(Y|0)break;k=l+52|0;j=c[k>>2]|0;Y=c[l+56>>2]|0;W=c[V>>2]|0;h=d[l+9>>0]|0;X=(c[$+4>>2]|0)==1?100:0;V=Y+(h+5)|0;V=d[V>>0]<<8|d[V+1>>0];ew(W+V|0,Y+V|0,(c[j+36>>2]|0)-V|0)|0;ew(W+X|0,Y+h|0,(e[l+24>>1]<<1)+(e[l+18>>1]|0)|0)|0;a[$>>0]=0;h=Gf($)|0;do if(!h){h=Jh($)|0;if(h|0)break;if(!(a[j+17>>0]|0))h=c[la>>2]|0;else{h=hg($)|0;c[la>>2]=h}if(h|0)break t;$=Bh(c[k>>2]|0,l,c[l+4>>2]|0)|0;c[la>>2]=$;break t}while(0);c[la>>2]=h}else aa=488;while(0);do if((aa|0)==488){aa=0;if(!(Q&(U<<16>>16==0&(a[P>>0]|0)!=0)))break;h=0;do{$=c[La+(h<<2)>>2]|0;X=c[$+56>>2]|0;ig(Y,d[X+9>>0]<<16|d[X+8>>0]<<24|d[X+10>>0]<<8|d[X+11>>0],5,c[$+4>>2]|0,la);h=h+1|0}while((h|0)!=(E|0))}while(0);if((E|0)>(g|0)){g=E;break c}k=E;h=c[la>>2]|0;while(1){j=c[va+(k<<2)>>2]|0;if(!h){h=Bh(c[j+52>>2]|0,j,c[j+4>>2]|0)|0;c[la>>2]=h}if((k|0)<(g|0))k=k+1|0;else{g=E;break c}}}while(0);if((aa|0)==155){aa=0;c[ua>>2]=0}c[la>>2]=7;g=0;break}}else aa=130;while(0);if((aa|0)==130){aa=0;gw(va|0,0,(g<<2)+4|0)|0;g=0}h=c[ua>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{$=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);j=0;do{h=c[va+(j<<2)>>2]|0;do if(h|0){h=c[h+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);break}else{$=c[h+20>>2]|0;Y=$+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;$=$+136|0;c[h+16>>2]=c[$>>2];c[$>>2]=h;break}}while(0);j=j+1|0}while((j|0)!=(Z|0));if((g|0)>0){j=0;do{h=c[La+(j<<2)>>2]|0;do if(h|0){h=c[h+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);break}else{$=c[h+20>>2]|0;Z=$+120|0;c[Z>>2]=(c[Z>>2]|0)+-1;$=$+136|0;c[h+16>>2]=c[$>>2];c[$>>2]=h;break}}while(0);j=j+1|0}while((j|0)!=(g|0))}h=c[la>>2]|0}if(i){g=i;do if((c[14816]|0)>>>0<=g>>>0)if((c[14817]|0)>>>0>g>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;i=(c[14820]|0)+1|0;c[14820]=i;c[14821]=(i|0)<(c[14815]|0)&1;i=_;break b}else{g=Wa[c[29352>>2]&127](i)|0;break}else g=Wa[c[29352>>2]&127](i)|0;while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);i=_;break}else{$=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);i=_;break}}else i=_}while(0);a[ba>>0]=0;if(ca)aa=525}while(0);if((aa|0)==523){a[ba>>0]=0;aa=525}do if((aa|0)==525){g=c[ca+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{ca=c[g+20>>2]|0;ba=ca+120|0;c[ba>>2]=(c[ba>>2]|0)+-1;ca=ca+136|0;c[g+16>>2]=c[ca>>2];c[ca>>2]=g;break}}while(0);g=(a[na>>0]|0)+-1<<24>>24;a[na>>0]=g;j=g;g=f+120+(g<<24>>24<<2)|0}ca=c[g>>2]|0;c[oa>>2]=ca}while(!(h|0));if(!i){Ra=nb;return h|0}g=i;do if((c[14816]|0)>>>0>g>>>0)g=Wa[c[29352>>2]&127](i)|0;else{if((c[14817]|0)>>>0<=g>>>0){g=Wa[c[29352>>2]&127](i)|0;break}c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;mb=(c[14820]|0)+1|0;c[14820]=mb;c[14821]=(mb|0)<(c[14815]|0)&1;Ra=nb;return h|0}while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Ra=nb;return h|0}else{mb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Ra=nb;return h|0}return 0}function Nh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;i=c[f+28>>2]|0;j=i-g|0;if((j|0)<1){if((h|0)<=0){n=0;return n|0}i=0;while(1){if(a[e+i>>0]|0)break;i=i+1|0;if((i|0)>=(h|0)){i=0;n=30;break}}if((n|0)==30)return i|0;l=e+i|0;f=c[d+72>>2]|0;k=c[f+20>>2]|0;if((b[f+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[f+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){m=Ve(f)|0;n=14}}else n=10;do if((n|0)==10){j=c[k+40>>2]|0;if(j|0){n=j;return n|0}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){m=Wf(f)|0;n=14;break}else{m=Xf(f)|0;n=14;break}}while(0);if((n|0)==14?m|0:0){n=m;return n|0}gw(l|0,0,h-i|0)|0;n=0;return n|0}else{if((j|0)<(h|0)){i=Nh(d,e+j|0,f,i,h-j|0)|0;if(!i)l=j;else{n=i;return n|0}}else l=h;k=f+16|0;i=(c[k>>2]|0)+g|0;if(!(Lu(e,i,l)|0)){n=0;return n|0}j=c[d+72>>2]|0;f=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[f+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[f+96>>2]|0){i=Ve(j)|0;n=27}}else n=23;do if((n|0)==23){i=c[f+40>>2]|0;if(i|0){n=i;return n|0}if((c[f+148>>2]|0)>>>0>(c[f+152>>2]|0)>>>0){i=Wf(j)|0;n=27;break}else{i=Xf(j)|0;n=27;break}}while(0);do if((n|0)==27)if(!i){i=(c[k>>2]|0)+g|0;break}else{n=i;return n|0}while(0);fw(e|0,i|0,l|0)|0;n=0;return n|0}return 0}function Oh(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+112|0;B=E+96|0;y=E+80|0;v=E+64|0;t=E+48|0;s=E+32|0;r=E+16|0;q=E;k=f&65535;C=g&65535;u=C+k|0;D=c[e+56>>2]|0;z=d[e+9>>0]|0;A=z+1|0;o=A&65535;p=a[D+(z+2)>>0]|0;h=a[D+A>>0]|0;if(p<<24>>24==0?h<<24>>24==0:0){q=u;p=0;n=0;m=f&255;l=(f&65535)>>>8&255}else w=3;do if((w|0)==3){m=p&255;h=(h&255)<<8|m;i=h&65535;n=(i&65535)>>>8&255;do if(h>>>0<k>>>0){l=A;while(1){if(h>>>0<(l+4|0)>>>0)break;l=i&65535;h=D+l|0;p=a[h+1>>0]|0;m=p&255;h=(d[h>>0]|0)<<8|m;j=h&65535;if(h>>>0<k>>>0){o=i;i=j}else{w=10;break}}if((w|0)==10){o=i;n=(j&65535)>>>8&255;w=11;break}if(!h){n=(i&65535)>>>8&255;j=0;i=c[(c[e+52>>2]|0)+36>>2]|0;break}c[q>>2]=32306;c[q+4>>2]=64915;c[q+8>>2]=31517;Db(11,32001,q);D=11;Ra=E;return D|0}else{l=A;w=11}while(0);if((w|0)==11){i=c[(c[e+52>>2]|0)+36>>2]|0;if(h>>>0>(i+-4|0)>>>0){c[r>>2]=32306;c[r+4>>2]=64920;c[r+8>>2]=31517;Db(11,32001,r);D=11;Ra=E;return D|0}else j=h}do if((j+-1|0)>>>0<(u+3|0)>>>0){if(u>>>0>j>>>0){c[s>>2]=32306;c[s+4>>2]=64932;c[s+8>>2]=31517;Db(11,32001,s);D=11;Ra=E;return D|0}h=D+(j+2)|0;h=((d[h>>0]|0)<<8|(d[h+1>>0]|0))+j|0;if(h>>>0<=i>>>0){n=D+j|0;q=h;g=h-k&65535;h=m-u&255;p=a[n+1>>0]|0;n=a[n>>0]|0;break}c[t>>2]=32306;c[t+4>>2]=64935;c[t+8>>2]=31517;Db(11,32001,t);D=11;Ra=E;return D|0}else{q=u;h=0}while(0);do if(A>>>0<l>>>0?(x=D+(l+2)|0,x=((d[x>>0]|0)<<8|(d[x+1>>0]|0))+l|0,(x+3|0)>>>0>=k>>>0):0){if(x>>>0<=k>>>0){f=o;g=q-l&65535;h=(h&255)+k-x&255;break}c[v>>2]=32306;c[v+4>>2]=64948;c[v+8>>2]=31517;Db(11,32001,v);D=11;Ra=E;return D|0}while(0);i=D+(z+7)|0;j=a[i>>0]|0;if((j&255)>=(h&255)){a[i>>0]=(j&255)-(h&255);m=f&255;l=(f&65535)>>>8&255;k=f&65535;break}c[y>>2]=32306;c[y+4>>2]=64954;c[y+8>>2]=31517;Db(11,32001,y);D=11;Ra=E;return D|0}while(0);h=D+(z+5)|0;i=h+1|0;j=(d[h>>0]|0)<<8|(d[i>>0]|0);do if(j>>>0<k>>>0){B=D+(o&65535)|0;a[B>>0]=l;a[B+1>>0]=m}else{if((A|0)==(o&65535|0)&j>>>0<=k>>>0){B=D+A|0;a[B>>0]=n;a[B+1>>0]=p;a[h>>0]=q>>>8;a[i>>0]=q;break}c[B>>2]=32306;c[B+4>>2]=64962;c[B+8>>2]=31517;Db(11,32001,B);D=11;Ra=E;return D|0}while(0);if(!(b[(c[e+52>>2]|0)+22>>1]&12))h=D+k|0;else{h=D+k|0;gw(h|0,0,g&65535|0)|0}a[h>>0]=n;a[D+k+1>>0]=p;D=D+(k+2)|0;a[D>>0]=(g&65535)>>>8;a[D+1>>0]=g;D=e+20|0;c[D>>2]=(c[D>>2]|0)+C;D=0;Ra=E;return D|0}function Ph(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+48|0;r=t+32|0;o=t+16|0;s=t;n=b&255;i=n+1|0;b=f+i|0;b=(d[b>>0]|0)<<8|(d[b+1>>0]|0);q=e-g|0;a:do if((b|0)<=(q|0)){l=i;while(1){k=f+(b+2)|0;j=(d[k>>0]|0)<<8|(d[k+1>>0]|0);m=j-g|0;if((m|0)>-1)break;i=f+b|0;i=(d[i>>0]|0)<<8|(d[i+1>>0]|0);if((i|0)<=(j+b|0)){p=13;break}if((i|0)>(q|0)){b=i;break a}else{l=b;b=i}}if((p|0)==13){if(!i){f=0;Ra=t;return f|0}c[o>>2]=32306;c[o+4>>2]=64770;c[o+8>>2]=31517;Db(11,32001,o);c[h>>2]=11;f=0;Ra=t;return f|0}i=k+1|0;do if((m|0)<4){i=f+(n+7)|0;if((d[i>>0]|0)>57){f=0;Ra=t;return f|0}else{h=f+l|0;s=f+b|0;s=d[s>>0]|d[s+1>>0]<<8;a[h>>0]=s;a[h+1>>0]=s>>8;a[i>>0]=m+(d[i>>0]|0);b=m+b|0;break}}else{b=m+b|0;if((b|0)<=(q|0)){a[k>>0]=m>>>8;a[i>>0]=m;break}c[s>>2]=32306;c[s+4>>2]=64756;c[s+8>>2]=31517;Db(11,32001,s);c[h>>2]=11;f=0;Ra=t;return f|0}while(0);f=f+b|0;Ra=t;return f|0}while(0);if((b|0)<=(e+-4|0)){f=0;Ra=t;return f|0}c[r>>2]=32306;c[r+4>>2]=64777;c[r+8>>2]=31517;Db(11,32001,r);c[h>>2]=11;f=0;Ra=t;return f|0}function Qh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+144|0;F=G+128|0;x=G+112|0;w=G+96|0;o=G+80|0;p=G+64|0;l=G+48|0;k=G+32|0;i=G+16|0;h=G;D=c[f+56>>2]|0;E=d[f+9>>0]|0;z=e[f+18>>1]|0;q=b[f+24>>1]|0;u=q&65535;B=(u<<1)+z|0;v=f+52|0;y=c[(c[v>>2]|0)+36>>2]|0;C=D+(E+7)|0;do if((d[C>>0]|0)<=(g|0)){s=D+(E+1)|0;s=d[s>>0]<<8|d[s+1>>0];g=y+-4|0;if((s|0)>(g|0)){c[h>>2]=32306;c[h+4>>2]=64627;c[h+8>>2]=31517;Db(11,32001,h);F=11;Ra=G;return F|0}if(s){r=D+s|0;r=d[r>>0]<<8|d[r+1>>0];if((r|0)>(g|0)){c[i>>2]=32306;c[i+4>>2]=64630;c[i+8>>2]=31517;Db(11,32001,i);F=11;Ra=G;return F|0}j=(r|0)==0;if(!j){if(a[D+r>>0]|0){t=g;A=27;break}if(a[D+(r+1)>>0]|0){t=g;A=27;break}}n=D+B|0;m=D+(s+2)|0;m=d[m>>0]<<8|d[m+1>>0];i=D+(E+5)|0;i=d[i>>0]<<8|d[i+1>>0];if(s>>>0<=i>>>0){c[k>>2]=32306;c[k+4>>2]=64638;c[k+8>>2]=31517;Db(11,32001,k);F=11;Ra=G;return F|0}h=m+s|0;do if(j)if((h|0)>(y|0)){c[o>>2]=32306;c[o+4>>2]=64647;c[o+8>>2]=31517;Db(11,32001,o);F=11;Ra=G;return F|0}else l=0;else{if(r>>>0<h>>>0){c[l>>2]=32306;c[l+4>>2]=64641;c[l+8>>2]=31517;Db(11,32001,l);F=11;Ra=G;return F|0}g=D+(r+2)|0;g=d[g>>0]<<8|d[g+1>>0];if((g+r|0)<=(y|0)){fw(D+(g+h)|0,D+h|0,r-h|0)|0;m=g+m|0;l=g;break}c[p>>2]=32306;c[p+4>>2]=64643;c[p+8>>2]=31517;Db(11,32001,p);F=11;Ra=G;return F|0}while(0);g=m+i|0;fw(D+g|0,D+i|0,s-i|0)|0;if(q<<16>>16){i=D+z|0;do{j=i+1|0;k=d[i>>0]<<8|d[j>>0];if(k>>>0>=s>>>0){if(k>>>0<r>>>0){h=l;A=25}}else{h=m;A=25}if((A|0)==25){A=0;z=k+h|0;a[i>>0]=z>>>8;a[j>>0]=z}i=i+2|0}while(i>>>0<n>>>0)}}else{t=g;A=27}}else{t=y+-4|0;A=27}while(0);if((A|0)==27){a:do if(q<<16>>16){q=f+76|0;r=D+(E+5)|0;s=r+1|0;p=0;i=0;h=D;k=y;while(1){l=D+((p<<1)+z)|0;m=l+1|0;n=d[l>>0]<<8|d[m>>0];if(n>>>0<B>>>0|(n|0)>(t|0)){A=30;break}j=h+n|0;o=(Xa[c[q>>2]&255](f,j)|0)&65535;g=k-o|0;if((g|0)<(B|0)|(n+o|0)>(y|0)){A=32;break}a[l>>0]=g>>>8;a[m>>0]=g;if(!i)if((g|0)==(n|0))i=0;else{j=c[(c[c[v>>2]>>2]|0)+208>>2]|0;i=d[r>>0]<<8|d[s>>0];ew(j+i|0,D+i|0,k-i|0)|0;i=j;h=j;j=j+n|0;A=36}else A=36;if((A|0)==36){A=0;ew(D+g|0,j|0,o|0)|0}p=p+1|0;if(p>>>0>=u>>>0)break a;else k=g}if((A|0)==30){c[w>>2]=32306;c[w+4>>2]=64675;c[w+8>>2]=31517;Db(11,32001,w);F=11;Ra=G;return F|0}else if((A|0)==32){c[x>>2]=32306;c[x+4>>2]=64681;c[x+8>>2]=31517;Db(11,32001,x);F=11;Ra=G;return F|0}}else g=y;while(0);a[C>>0]=0}h=g-B|0;if((h+(d[C>>0]|0)|0)==(c[f+20>>2]|0)){F=D+(E+5)|0;a[F>>0]=g>>>8;a[F+1>>0]=g;a[D+(E+1)>>0]=0;a[D+(E+2)>>0]=0;gw(D+B|0,0,h|0)|0;F=0;Ra=G;return F|0}else{c[F>>2]=32306;c[F+4>>2]=64702;c[F+8>>2]=31517;Db(11,32001,F);F=11;Ra=G;return F|0}return 0}function Rh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+48|0;E=F+32|0;D=F+16|0;C=F;A=d[i+9>>0]|0;B=c[i+56>>2]|0;s=c[i+52>>2]|0;x=c[s+36>>2]|0;t=B+x|0;j=c[i+64>>2]|0;s=c[(c[s>>2]|0)+208>>2]|0;y=B+(A+5)|0;z=y+1|0;k=(d[y>>0]|0)<<8|(d[z>>0]|0);k=k>>>0>x>>>0?0:k;ew(s+k|0,B+k|0,x-k|0)|0;k=0;while(1)if(k>>>0<6?(c[f+40+(k<<2)>>2]|0)<=(g|0):0)k=k+1|0;else break;u=h+g|0;v=f+8|0;w=f+12|0;x=B;l=t;a:while(1){q=c[f+16+(k<<2)>>2]|0;r=f+40+(k<<2)|0;p=l;do{l=c[(c[v>>2]|0)+(g<<2)>>2]|0;m=l;o=e[(c[w>>2]|0)+(g<<1)>>1]|0;n=l+o|0;if(!(l>>>0>=B>>>0&l>>>0<t>>>0)){if(l>>>0<q>>>0&n>>>0>q>>>0){g=10;break a}}else{if(n>>>0>t>>>0){g=7;break a}l=s+(m-x)|0}p=p+(0-o)|0;n=p-x|0;m=n>>>8&255;a[j>>0]=m;n=n&255;a[j+1>>0]=n;j=j+2|0;if(p>>>0<j>>>0){g=12;break a}ew(p|0,l|0,o|0)|0;g=g+1|0;if((g|0)>=(u|0)){g=16;break a}}while((c[r>>2]|0)>(g|0));l=p;k=k+1|0}if((g|0)==7){c[C>>2]=32306;c[C+4>>2]=70094;c[C+8>>2]=31517;Db(11,32001,C);E=11;Ra=F;return E|0}else if((g|0)==10){c[D>>2]=32306;c[D+4>>2]=70099;c[D+8>>2]=31517;Db(11,32001,D);E=11;Ra=F;return E|0}else if((g|0)==12){c[E>>2]=32306;c[E+4>>2]=70105;c[E+8>>2]=31517;Db(11,32001,E);E=11;Ra=F;return E|0}else if((g|0)==16){D=i+24|0;b[D>>1]=h;a[i+12>>0]=0;E=B+(A+1)|0;a[E>>0]=0;a[E+1>>0]=0;E=B+(A+3)|0;a[E>>0]=(e[D>>1]|0)>>>8;a[E+1>>0]=b[D>>1];a[y>>0]=m;a[z>>0]=n;a[B+(A+7)>>0]=0;E=0;Ra=F;return E|0}return 0}function Sh(a,d){a=a|0;d=d|0;var e=0;e=c[a+4>>2]|0;e=Xa[c[e+76>>2]&255](e,c[(c[a+8>>2]|0)+(d<<2)>>2]|0)|0;b[(c[a+12>>2]|0)+(d<<1)>>1]=e;return e|0}function Th(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+16|0;y=A;w=A+12|0;x=d+56|0;k=c[x>>2]|0;l=c[f>>2]|0;v=i+h|0;if((i|0)<1){z=0;Ra=A;return z|0}i=0;while(1)if(i>>>0<6?(c[j+40+(i<<2)>>2]|0)<=(h|0):0)i=i+1|0;else break;s=j+12|0;t=k+1|0;u=k+2|0;r=j+8|0;q=d+9|0;p=d+52|0;o=c[j+16+(i<<2)>>2]|0;n=i;while(1){i=b[(c[s>>2]|0)+(h<<1)>>1]|0;if(!(i<<16>>16))i=Sh(j,h)|0;m=i&65535;if((a[t>>0]|0)==0?(a[u>>0]|0)==0:0)z=10;else{i=Ph(a[q>>0]|0,c[(c[p>>2]|0)+36>>2]|0,c[x>>2]|0,m,w)|0;if(!i)z=10}if((z|0)==10){z=0;if((l-e|0)<(m|0))break;l=l+(0-m)|0;i=l}d=c[(c[r>>2]|0)+(h<<2)>>2]|0;if(d>>>0<o>>>0&(d+m|0)>>>0>o>>>0){z=13;break}fw(i|0,d|0,m|0)|0;m=i-k|0;a[g>>0]=m>>>8;a[g+1>>0]=m;h=h+1|0;if((h|0)>=(v|0)){z=19;break}d=n+1|0;if((c[j+40+(n<<2)>>2]|0)>(h|0)){i=o;d=n}else i=c[j+16+(d<<2)>>2]|0;o=i;g=g+2|0;n=d}if((z|0)==13){c[y>>2]=32306;c[y+4>>2]=70190;c[y+8>>2]=31517;Db(11,32001,y)}else if((z|0)==19){c[f>>2]=l;z=0;Ra=A;return z|0}z=1;Ra=A;return z|0}function Uh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+16|0;t=w+4|0;u=w;v=f+12|0;n=f+8|0;h=c[n>>2]|0;do if(!(c[v>>2]|0)){m=c[h+28>>2]|0;l=((e[m+6>>1]|0)*40|0)+56|0;j=c[m+12>>2]|0;a:do if(!j){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;r=25;break}k=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){s=c[14978]|0;q=Tv(h|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=s>>>0)&1}h=Wa[c[29340>>2]&127](k)|0;if(h|0){i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;r=26}else r=26}}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[j+276>>1]|0)>>>0<l>>>0:0))){h=j+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];r=j+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break a}h=j+296|0;i=c[h>>2]|0;if(!i){h=j+292|0;break}else{c[h>>2]=c[i>>2];r=j+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break a}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}i=_d(j,l,0)|0;r=25}while(0);if((r|0)==25?i|0:0){h=i;r=26}if((r|0)==26){c[h+4>>2]=h+16;c[h>>2]=m;c[v>>2]=h;s=c[n>>2]|0;b[h+8>>1]=b[(c[s+28>>2]|0)+6>>1]|0;a[h+11>>0]=0;h=s;break}c[v>>2]=0;v=7;Ra=w;return v|0}while(0);l=c[g>>2]|0;r=a[h+60>>0]|0;s=f+32|0;c[s>>2]=r<<24>>24==1?78:r<<24>>24==2?76:77;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](256)|0;if(!h){v=7;Ra=w;return v|0}}else{h=Wa[c[29356>>2]&127](256)|0;if((c[14985]|0)>>>0<256)c[14985]=256;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;q=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=r>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){v=7;Ra=w;return v|0}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}gw(h|0,0,256)|0;if(l|0){q=g+4|0;k=l;j=l;while(1){i=c[q>>2]|0;if(i)if((j|0)==(i|0)){p=0;j=0}else{j=i+(c[k+4>>2]|0)|0;p=j}else{j=c[k+4>>2]|0;p=j}c[k+4>>2]=0;l=c[h>>2]|0;if(!l)i=h;else{o=0;i=h;do{c[t>>2]=0;c[u>>2]=0;m=t;b:while(1){n=l+8|0;while(1){if(($a[c[s>>2]&127](f,u,k+8|0,c[k>>2]|0,n,c[l>>2]|0)|0)>=1)break;c[m>>2]=k;m=k+4|0;k=c[m>>2]|0;if(!k){r=51;break b}}c[m>>2]=l;m=l+4|0;l=c[m>>2]|0;c[u>>2]=0;if(!l){r=53;break}}if((r|0)==51)c[m>>2]=l;else if((r|0)==53)c[m>>2]=k;k=c[t>>2]|0;c[i>>2]=0;o=o+1|0;i=h+(o<<2)|0;l=c[i>>2]|0}while((l|0)!=0)}c[i>>2]=k;if(!p)break;else k=p}}m=0;i=0;do{k=c[h+(m<<2)>>2]|0;if(k)if(!i)i=k;else{c[t>>2]=0;c[u>>2]=0;j=t;c:while(1){l=k+8|0;while(1){if(($a[c[s>>2]&127](f,u,i+8|0,c[i>>2]|0,l,c[k>>2]|0)|0)>=1)break;c[j>>2]=i;j=i+4|0;i=c[j>>2]|0;if(!i){r=63;break c}}c[j>>2]=k;j=k+4|0;k=c[j>>2]|0;c[u>>2]=0;if(!k){r=65;break}}if((r|0)==63)c[j>>2]=k;else if((r|0)==65)c[j>>2]=i;i=c[t>>2]|0}m=m+1|0}while((m|0)!=64);c[g>>2]=i;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}v=d[(c[v>>2]|0)+11>>0]|0;Ra=w;return v|0}function Vh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;t=x;a[b+56>>0]=1;e=b+64|0;w=b+36|0;g=b+72|0;f=b+104|0;if((c[f>>2]|0)==0?(d=Zh(c[(c[g>>2]|0)+24>>2]|0,f)|0,d|0):0){w=d;Ra=x;return w|0}d=Uh(e,w)|0;if(d|0){w=d;Ra=x;return w|0}k=c[f>>2]|0;j=c[(c[g>>2]|0)+12>>2]|0;v=b+112|0;h=v;g=c[h>>2]|0;h=c[h+4>>2]|0;i=((j|0)<0)<<31>>31;s=Sv(j|0,i|0,-1,-1)|0;r=L()|0;do if(r>>>0>0|(r|0)==0&s>>>0>2147483390){d=7;s=0;q=0;i=0;r=0;f=0;e=0}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](j)|0;if(!d){d=7;s=0;q=0;i=0;r=0;f=0;e=0;break}else e=d}else{d=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){s=c[14978]|0;r=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e){d=7;s=0;q=0;i=0;r=0;f=0;e=0;break}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}i=Zv(g|0,h|0,j|0,i|0)|0;L()|0;f=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;d=0;s=e;q=j;r=k;e=L()|0}while(0);g=b+92|0;c[g>>2]=(c[g>>2]|0)+1;g=c[b+44>>2]|0;h=((g|0)<0)<<31>>31;do if(g>>>0>=128)if(g>>>0>=16384){g=wh(t,g,h)|0;if((g|0)>0){u=22;break}else{h=i;g=i;break}}else{u=bw(g|0,h|0,7)|0;L()|0;a[t>>0]=u&255|-128;a[t+1>>0]=g&127;g=2;u=22;break}else{a[t>>0]=g&127;g=1;u=22}while(0);a:do if((u|0)==22){l=((q|0)<0)<<31>>31;k=g;h=i;while(1){if(d|0){g=i;break a}j=q-i|0;j=(k|0)>(j|0)?j:k;ew(s+i|0,t+(g-k)|0,j|0)|0;i=j+i|0;if((i|0)==(q|0)){i=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,l|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,i,d)|0;h=0;i=0}else d=0;k=k-j|0;if((k|0)<=0){g=i;break}}}while(0);i=c[w>>2]|0;if(i){p=((q|0)<0)<<31>>31;n=b+40|0;o=t+1|0;do{m=i;i=c[i+4>>2]|0;l=c[m>>2]|0;j=((l|0)<0)<<31>>31;do if(l>>>0>=128)if(l>>>0>=16384){j=wh(t,l,j)|0;if((j|0)>0){u=34;break}else break}else{j=bw(l|0,j|0,7)|0;L()|0;a[t>>0]=j&255|-128;j=2;k=o;u=33;break}else{j=1;k=t;u=33}while(0);if((u|0)==33){a[k>>0]=l&127;u=34}b:do if((u|0)==34){u=0;l=j;do{if(d|0)break b;k=q-g|0;k=(l|0)>(k|0)?k:l;ew(s+g|0,t+(j-l)|0,k|0)|0;g=k+g|0;if((g|0)==(q|0)){g=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,p|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,g,d)|0;h=0;g=0}else d=0;l=l-k|0}while((l|0)>0)}while(0);l=m+8|0;b=c[m>>2]|0;c:do if((b|0)>0){k=b;do{if(d|0)break c;j=q-g|0;j=(k|0)>(j|0)?j:k;ew(s+g|0,l+(b-k)|0,j|0)|0;g=j+g|0;if((g|0)==(q|0)){g=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,p|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,g,d)|0;h=0;g=0}else d=0;k=k-j|0}while((k|0)>0)}while(0);do if(!((m|0)==0|(c[n>>2]|0)!=0))if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{b=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0)}while((i|0)!=0)}c[w>>2]=0;if(d){t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u;if(!s){w=d;Ra=x;return w|0}}else{if(!s){t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u;w=0;Ra=x;return w|0}if((g|0)>(h|0)){w=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,g-h|0,w,d)|0}else d=0;t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u}if(!(c[7324]|0)){ab[c[29344>>2]&127](s);w=d;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);w=d;Ra=x;return w|0}return 0}function Wh(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;k=a[g+1>>0]|0;o=k&255;l=a[i+1>>0]|0;p=g+(d[g>>0]|0)|0;q=i+(d[i>>0]|0)|0;a:do if(k<<24>>24!=l<<24>>24){m=(k&255)>7;n=(l&255)>7;k=o-(l&255)|0;do if(!(m&n)){k=n?1:m?-1:k;if((k|0)<=0)if((a[q>>0]|0)<0){k=1;r=12;break a}else break;else{k=(a[p>>0]|0)<0?-1:k;break}}while(0);l=c[(c[b+8>>2]|0)+28>>2]|0;if(k){j=k;i=l;i=i+16|0;i=c[i>>2]|0;i=a[i>>0]|0;i=i<<24>>24==0;r=0-j|0;r=i?j:r;return r|0}}else{m=d[34845+o>>0]|0;b:do if((o+-1|0)>>>0<6){k=0;while(1){l=(d[p+k>>0]|0)-(d[q+k>>0]|0)|0;k=k+1|0;if(l|0)break;if(k>>>0>=m>>>0)break b}k=a[p>>0]|0;k=(a[q>>0]^k)<<24>>24<0?(((k&255)>>>6&2^2)&255)+-1|0:l;r=12;break a}while(0);l=c[(c[b+8>>2]|0)+28>>2]|0}while(0);if((r|0)==12){j=k;i=c[(c[b+8>>2]|0)+28>>2]|0;i=i+16|0;i=c[i>>2]|0;i=a[i>>0]|0;i=i<<24>>24==0;r=0-j|0;r=i?j:r;return r|0}if((e[l+6>>1]|0)<=1){r=0;return r|0}k=c[b+12>>2]|0;if(!(c[f>>2]|0)){_g(l,j,i,k);c[f>>2]=1}r=Fh(h,g,k,1)|0;return r|0}function Xh(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;p=s;r=g+(d[g>>0]|0)|0;q=i+(d[i>>0]|0)|0;k=g+1|0;o=a[k>>0]|0;l=o&255;do if(o<<24>>24<=-1){m=d[g+2>>0]|0;if(!(m&128)){o=l<<7&16256|m;break}n=d[g+3>>0]|0;if(!(n&128)){o=(l<<14|n)&2080895|m<<7&16256;break}else{Of(k,p)|0;n=p;o=c[n>>2]|0;o=((o|0)==(o|0)?0==(c[n+4>>2]|0):0)?o:-1;break}}else o=l;while(0);l=i+1|0;n=a[l>>0]|0;k=n&255;do if(n<<24>>24<=-1){m=d[i+2>>0]|0;if(!(m&128)){k=k<<7&16256|m;break}n=d[i+3>>0]|0;if(!(n&128)){k=(k<<14|n)&2080895|m<<7&16256;break}else{Of(l,p)|0;k=c[p>>2]|0;k=((k|0)==(k|0)?0==(c[p+4>>2]|0):0)?k:-1;break}}while(0);l=Lu(r,q,(((o|0)<(k|0)?o:k)+-13|0)/2|0)|0;m=o-k|0;if(!l){k=c[(c[b+8>>2]|0)+28>>2]|0;if(!m){if((e[k+6>>1]|0)<=1){j=0;Ra=s;return j|0}l=c[b+12>>2]|0;if(!(c[f>>2]|0)){_g(k,j,i,l);c[f>>2]=1}j=Fh(h,g,l,1)|0;Ra=s;return j|0}else l=m}else k=c[(c[b+8>>2]|0)+28>>2]|0;j=(a[c[k+16>>2]>>0]|0)==0?l:0-l|0;Ra=s;return j|0}function Yh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=c[a+12>>2]|0;if(!(c[b>>2]|0)){_g(c[(c[a+8>>2]|0)+28>>2]|0,g,f,h);c[b>>2]=1}return Fh(e,d,h,0)|0}function Zh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;i=j+8|0;h=j;d=c[7389]|0;if(d|0?Wa[d&127](202)|0:0){i=3338;Ra=j;return i|0}g=c[a>>2]|0;f=c[g+4>>2]|0;e=Sv(f|0,((f|0)<0)<<31>>31|0,-1,-1)|0;d=L()|0;do if(d>>>0>0|(d|0)==0&e>>>0>2147483390)a=7;else{if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](f)|0;if(!a){a=7;break}else d=a}else{a=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){k=c[14978]|0;e=Tv(d|0,e|0,a|0,((a|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=k>>>0)&1}d=Wa[c[29340>>2]&127](a)|0;if(!d){a=7;break}a=Wa[c[29352>>2]&127](d)|0;a=(c[14978]|0)+a|0;c[14978]=a;if(a>>>0>(c[14982]|0)>>>0)c[14982]=a;a=(c[14981]|0)+1|0;c[14981]=a;if(a>>>0>(c[14987]|0)>>>0)c[14987]=a}gw(d|0,0,f|0)|0;a=_a[c[g+24>>2]&127](g,0,d,4126,i)|0;if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}c[b>>2]=d;c[i>>2]=0;a=h;c[a>>2]=0;c[a+4>>2]=0;a=c[d>>2]|0;if(!a)a=0;else{Ya[c[a+40>>2]&127](d,18,h)|0;a=c[i>>2]|0}k=a;Ra=j;return k|0}while(0);c[i>>2]=a;k=a;Ra=j;return k|0}function _h(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;o=q;p=b+4|0;c[p>>2]=a;m=c[b>>2]|0;a:do if((m|0)>0){n=b+12|0;l=0;while(1){j=c[n>>2]|0;k=j+(l*56|0)|0;j=c[j+(l*56|0)+48>>2]|0;if(j|0){f=c[j>>2]|0;g=c[(c[f+8>>2]|0)+24>>2]|0;e=_h(f,c[j+4>>2]|0)|0;if(e|0){f=22;break}i=c[j+16>>2]|0;h=f+56|0;e=c[h>>2]|0;if(!e){f=f+64|0;e=Zh(g,h)|0;g=f;c[g>>2]=0;c[g+4>>2]=0;if(e|0){f=22;break}e=c[h>>2]|0;g=0;h=0}else{f=f+64|0;h=f;g=c[h>>2]|0;h=c[h+4>>2]|0}c[j+48>>2]=e;j=j+8|0;c[j>>2]=g;c[j+4>>2]=h;i=Sv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;e=f;c[e>>2]=i;c[e+4>>2]=j;e=ci(k)|0;if(e|0){f=22;break}}l=l+1|0;if((l|0)>=(m|0)){f=11;break}}if((f|0)==11){e=c[b>>2]|0;if((e|0)<=1)break;j=b+12|0;k=b+8|0;i=e;while(1){h=i+-1|0;e=(e|0)/2|0;if((i|0)>(e|0)){f=h-e<<1;e=f;f=f|1}else{n=c[k>>2]|0;f=h<<1;e=c[n+(f<<2)>>2]|0;f=c[n+((f|1)<<2)>>2]|0}g=c[j>>2]|0;if(c[g+(e*56|0)+24>>2]|0){if(c[g+(f*56|0)+24>>2]|0){n=c[p>>2]|0;c[o>>2]=0;n=($a[c[n+32>>2]&127](n,o,c[g+(e*56|0)+32>>2]|0,c[g+(e*56|0)+20>>2]|0,c[g+(f*56|0)+32>>2]|0,c[g+(f*56|0)+20>>2]|0)|0)<1;e=n?e:f}}else e=f;c[(c[k>>2]|0)+(h<<2)>>2]=e;if((i|0)<=2)break a;i=h;e=c[b>>2]|0}}else if((f|0)==22){Ra=q;return e|0}}while(0);p=d[(c[a+12>>2]|0)+11>>0]|0;Ra=q;return p|0}function $h(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+16|0;o=r;f=d;h=c[f>>2]|0;f=c[f+4>>2]|0;l=2;while(1)if((l|0)<(b|0))l=l<<1;else break;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](100)|0)!=0:0)q=17;else q=5;a:do if((q|0)==5){k=(l*60|0)+16|0;p=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;n=L()|0;if(!(n>>>0>0|(n|0)==0&p>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](k)|0;if(!g){q=17;break}else p=g}else{g=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){p=c[14978]|0;n=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=p>>>0)&1}i=Wa[c[29340>>2]&127](g)|0;if(!i){q=17;break}g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;p=i}else p=i}gw(p|0,0,k|0)|0;n=p+16|0;c[p>>2]=l;c[p+4>>2]=0;c[p+12>>2]=n;c[p+8>>2]=n+(l*56|0);c[e>>2]=p;n=(p|0)==0;g=n?7:0;i=n^1;b:do if((b|0)>0&i){l=p+12|0;m=a+40|0;j=0;while(1){i=c[l>>2]|0;k=i+(j*56|0)|0;g=ai(a,k,m,h,f)|0;if(g|0){q=21;break}g=o;c[g>>2]=0;c[g+4>>2]=0;g=bi(k,o)|0;s=k;h=o;s=Sv(c[h>>2]|0,c[h+4>>2]|0,c[s>>2]|0,c[s+4>>2]|0)|0;h=L()|0;f=i+(j*56|0)+8|0;i=f;c[i>>2]=s;c[i+4>>2]=h;if(g|0)break;g=ci(k)|0;h=c[f>>2]|0;f=c[f+4>>2]|0;j=j+1|0;i=(g|0)==0;if(!((j|0)<(b|0)&i)){q=25;break b}}if((q|0)==21)f=i+(j*56|0)+8|0;h=c[f>>2]|0;f=c[f+4>>2]|0}else q=25;while(0);do if((q|0)==25)if(!i)if(n)break a;else break;else{s=g;p=h;q=f;e=d;d=e;c[d>>2]=p;e=e+4|0;c[e>>2]=q;Ra=r;return s|0}while(0);if((c[p>>2]|0)>0){m=p+12|0;l=0;do{j=c[m>>2]|0;k=j+(l*56|0)|0;i=c[j+(l*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[j+(l*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[j+(l*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=k;j=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));l=l+1|0}while((l|0)<(c[p>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{s=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else q=17}while(0);if((q|0)==17){c[e>>2]=0;g=7}c[e>>2]=0;s=g;p=h;q=f;e=d;d=e;c[d>>2]=p;e=e+4|0;c[e>>2]=q;Ra=r;return s|0}function ai(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[7389]|0;if(g|0?Wa[g&127](201)|0:0){b=266;return b|0}h=b+44|0;if(c[h>>2]|0)c[h>>2]=0;n=b;c[n>>2]=e;c[n+4>>2]=f;n=d+8|0;l=c[n>>2]|0;n=c[n+4>>2]|0;k=b+8|0;i=k;c[i>>2]=l;c[i+4>>2]=n;i=c[d>>2]|0;j=b+24|0;c[j>>2]=i;d=a+8|0;g=c[d>>2]|0;a=c[(c[g+24>>2]|0)+156>>2]|0;m=((a|0)<0)<<31>>31;if(!((n|0)>(m|0)|(n|0)==(m|0)&l>>>0>a>>>0)?(c[c[i>>2]>>2]|0)>2:0){c[h>>2]=0;g=c[d>>2]|0}i=c[g+12>>2]|0;d=((i|0)<0)<<31>>31;e=Zv(e|0,f|0,i|0,d|0)|0;L()|0;h=b+36|0;g=c[h>>2]|0;if(!g){n=Sv(i|0,d|0,-1,-1)|0;m=L()|0;do if(!(m>>>0>0|(m|0)==0&n>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](i)|0;break}g=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;a=59064;d=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&d>>>0>0){n=c[14978]|0;m=Tv(d|0,a|0,g|0,((g|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){d=Wa[c[29352>>2]&127](g)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}else g=0}else g=0;while(0);c[h>>2]=g;c[b+40>>2]=i;d=(g|0)==0?7:0}else d=0;if(!((e|0)!=0&(d|0)==0)){n=d;return n|0}l=i-e|0;n=b;m=c[n>>2]|0;n=c[n+4>>2]|0;i=Sv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;h=L()|0;f=k;k=c[f>>2]|0;f=c[f+4>>2]|0;b=Tv(k|0,f|0,m|0,n|0)|0;L()|0;j=c[j>>2]|0;n=_a[c[(c[j>>2]|0)+8>>2]&127](j,g+e|0,(h|0)>(f|0)|(h|0)==(f|0)&i>>>0>k>>>0?b:l,m,n)|0;return n|0}function bi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;i=j;h=j+16|0;f=c[b+44>>2]|0;e=b;g=c[e>>2]|0;e=c[e+4>>2]|0;if(f|0){h=(Of(f+g|0,d)|0)&255;d=b;h=Sv(c[d>>2]|0,c[d+4>>2]|0,h|0,0)|0;d=L()|0;i=b;c[i>>2]=h;c[i+4>>2]=d;i=0;Ra=j;return i|0}f=c[b+40>>2]|0;e=Zv(g|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;L()|0;if((e|0)!=0&(f-e|0)>8){h=(Of((c[b+36>>2]|0)+e|0,d)|0)&255;d=b;h=Sv(c[d>>2]|0,c[d+4>>2]|0,h|0,0)|0;d=L()|0;i=b;c[i>>2]=h;c[i+4>>2]=d;i=0;Ra=j;return i|0}e=0;while(1){f=di(b,1,h)|0;if(f|0){e=9;break}g=a[c[h>>2]>>0]|0;a[i+(e&15)>>0]=g;if(g<<24>>24<0)e=e+1|0;else{e=8;break}}if((e|0)==8){Of(i,d)|0;i=0;Ra=j;return i|0}else if((e|0)==9){i=f;Ra=j;return i|0}return 0}function ci(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;g=i;f=g;c[f>>2]=0;c[f+4>>2]=0;f=a;d=c[f+4>>2]|0;h=a+8|0;e=c[h+4>>2]|0;do if(!((d|0)<(e|0)|((d|0)==(e|0)?(c[f>>2]|0)>>>0<(c[h>>2]|0)>>>0:0))){h=a+48|0;b=c[h>>2]|0;if(b){d=ei(b)|0;j=b+32|0;f=b+48|0;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];j=b+40|0;f=b+8|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if((c[j>>2]|0)==(e|0)?(c[j+4>>2]|0)==(f|0):0)c[b+20>>2]=1;if(!d)if(!(c[b+20>>2]|0)){b=ai(c[b>>2]|0,a,b+32|0,e,f)|0;if(!b)break;Ra=i;return b|0}else g=0;else g=d}else g=0;b=c[a+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+36>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);d=c[h>>2]|0;do if(d|0){e=c[d+4>>2]|0;do if(e|0){if((c[e>>2]|0)>0){f=e+12|0;b=0;do{yg((c[f>>2]|0)+(b*56|0)|0);b=b+1|0}while((b|0)<(c[e>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{j=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);b=a;d=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));j=g;Ra=i;return j|0}while(0);b=bi(a,g)|0;if(b|0){j=b;Ra=i;return j|0}j=c[g>>2]|0;c[a+20>>2]=j;j=di(a,j,a+32|0)|0;Ra=i;return j|0}function di(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;n=o;e=c[a+44>>2]|0;g=a;h=c[g>>2]|0;g=c[g+4>>2]|0;if(e|0){c[d>>2]=e+h;b=Sv(h|0,g|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;n=a;c[n>>2]=b;c[n+4>>2]=d;n=0;Ra=o;return n|0}m=a+40|0;e=c[m>>2]|0;f=((e|0)<0)<<31>>31;l=Zv(h|0,g|0,e|0,f|0)|0;L()|0;do if(!l){k=a+8|0;k=Tv(c[k>>2]|0,c[k+4>>2]|0,h|0,g|0)|0;j=L()|0;i=c[a+24>>2]|0;e=_a[c[(c[i>>2]|0)+8>>2]&127](i,c[a+36>>2]|0,(j|0)>(f|0)|(j|0)==(f|0)&k>>>0>e>>>0?e:k,h,g)|0;if(!e){e=c[m>>2]|0;break}else{n=e;Ra=o;return n|0}}while(0);k=e-l|0;if((k|0)>=(b|0)){c[d>>2]=(c[a+36>>2]|0)+l;d=a;b=Sv(c[d>>2]|0,c[d+4>>2]|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;n=a;c[n>>2]=b;c[n+4>>2]=d;n=0;Ra=o;return n|0}j=a+16|0;e=c[j>>2]|0;do if((e|0)<(b|0)){g=(e|0)<64;i=cw(e|0,((e|0)<0)<<31>>31|0,1)|0;h=L()|0;e=((b|0)<0)<<31>>31;h=g?0:h;i=g?128:i;while(1){f=cw(i|0,h|0,1)|0;g=L()|0;if((h|0)<(e|0)|(h|0)==(e|0)&i>>>0<b>>>0){h=g;i=f}else break}f=a+28|0;e=sb(c[f>>2]|0,i,h)|0;if(!e){n=7;Ra=o;return n|0}else{c[j>>2]=i;c[f>>2]=e;h=f;break}}else{e=a+28|0;h=e;e=c[e>>2]|0}while(0);ew(e|0,(c[a+36>>2]|0)+l|0,k|0)|0;j=a;j=Sv(c[j>>2]|0,c[j+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;l=L()|0;e=a;c[e>>2]=j;c[e+4>>2]=l;e=b-k|0;a:do if((e|0)>0){while(1){g=c[m>>2]|0;g=(e|0)>(g|0)?g:e;f=di(a,g,n)|0;if(f|0)break;ew((c[h>>2]|0)+(b-e)|0,c[n>>2]|0,g|0)|0;e=e-g|0;if((e|0)<=0)break a}n=f;Ra=o;return n|0}while(0);c[d>>2]=c[h>>2];n=0;Ra=o;return n|0}function ei(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+16|0;y=E+4|0;A=E;C=b+8|0;B=c[C>>2]|0;C=c[C+4>>2]|0;z=b+4|0;j=c[z>>2]|0;i=c[b+48>>2]|0;h=c[(c[(c[b>>2]|0)+8>>2]|0)+12>>2]|0;g=((h|0)<0)<<31>>31;x=Sv(h|0,g|0,-1,-1)|0;w=L()|0;do if(w>>>0>0|(w|0)==0&x>>>0>2147483390){d=7;x=0;v=0;e=0;w=0;g=0;f=0}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](h)|0;if(!d){d=7;x=0;v=0;e=0;w=0;g=0;f=0;break}else e=d}else{d=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){x=c[14978]|0;w=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=x>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e){d=7;x=0;v=0;e=0;w=0;g=0;f=0;break}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}w=Zv(B|0,C|0,h|0,g|0)|0;L()|0;g=Tv(B|0,C|0,w|0,((w|0)<0)<<31>>31|0)|0;d=0;x=e;v=h;e=w;w=i;f=L()|0}while(0);u=j+12|0;q=j+8|0;r=b+16|0;s=((v|0)<0)<<31>>31;t=y+1|0;i=e;h=e;while(1){n=c[u>>2]|0;o=c[(c[q>>2]|0)+4>>2]|0;p=c[n+(o*56|0)+20>>2]|0;if(!(c[n+(o*56|0)+24>>2]|0)){D=35;break}j=((h|0)<0)<<31>>31;k=((p|0)<0)<<31>>31;e=1;l=p;m=k;while(1){l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else e=e+1|0}l=Sv(g|0,f|0,h|0,j|0)|0;l=Sv(l|0,L()|0,p|0,k|0)|0;l=Sv(l|0,L()|0,e|0,0)|0;e=L()|0;m=c[r>>2]|0;m=Sv(B|0,C|0,m|0,((m|0)<0)<<31>>31|0)|0;j=L()|0;if((e|0)>(j|0)|(e|0)==(j|0)&l>>>0>m>>>0){D=35;break}do if(p>>>0>=128)if(p>>>0>=16384){e=wh(y,p,k)|0;if((e|0)>0){D=24;break}else break}else{e=bw(p|0,k|0,7)|0;L()|0;a[y>>0]=e&255|-128;e=2;j=t;D=23;break}else{e=1;j=y;D=23}while(0);if((D|0)==23){a[j>>0]=p&127;D=24}a:do if((D|0)==24){D=0;k=e;do{if(d|0)break a;j=v-h|0;j=(k|0)>(j|0)?j:k;ew(x+h|0,y+(e-k)|0,j|0)|0;h=j+h|0;if((h|0)==(v|0)){l=Sv(g|0,f|0,v|0,s|0)|0;m=L()|0;h=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,v-i|0,h,d)|0;i=0;h=0;g=l;f=m}else d=0;k=k-j|0}while((k|0)>0)}while(0);k=c[n+(o*56|0)+32>>2]|0;b:do if((p|0)>0){j=p;do{if(d|0)break b;e=v-h|0;e=(j|0)>(e|0)?e:j;ew(x+h|0,k+(p-j)|0,e|0)|0;h=e+h|0;if((h|0)==(v|0)){n=Sv(g|0,f|0,v|0,s|0)|0;o=L()|0;h=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,v-i|0,h,d)|0;i=0;h=0;g=n;f=o}else d=0;j=j-e|0}while((j|0)>0)}while(0);e=fi(c[z>>2]|0,A)|0;if(e){j=e;break}}if((D|0)==35)j=0;e=b+56|0;if(d){C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b;if(!x){D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}}else{if(!x){C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b;D=0;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}if((h|0)>(i|0)){D=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,h-i|0,D,d)|0}else d=0;C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b}if(!(c[7324]|0)){ab[c[29344>>2]&127](x);D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}else{D=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}return 0}function fi(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;k=q;l=a+8|0;f=c[(c[l>>2]|0)+4>>2]|0;p=c[a+4>>2]|0;n=a+12|0;e=ci((c[n>>2]|0)+(f*56|0)|0)|0;if(e|0){p=e;Ra=q;return p|0}c[k>>2]=0;e=c[n>>2]|0;a=(c[a>>2]|0)+f|0;if((a|0)>1){j=p+32|0;g=e+((f|1)*56|0)|0;f=e+((f&65534)*56|0)|0;h=a;do{i=h;h=(h|0)/2|0;e=f+24|0;do if(!(c[e>>2]|0))o=12;else{if((c[g+24>>2]|0?(m=$a[c[j>>2]&127](p,k,c[f+32>>2]|0,c[f+20>>2]|0,c[g+32>>2]|0,c[g+20>>2]|0)|0,(m|0)>=0):0)?!(f>>>0<g>>>0&(m|0)==0):0){if(!(c[e>>2]|0)){o=12;break}c[k>>2]=0;o=12;break}e=c[n>>2]|0;a=c[l>>2]|0;c[a+(h<<2)>>2]=(f-e|0)/56|0;g=e+((c[a+((h^1)<<2)>>2]|0)*56|0)|0;c[k>>2]=0}while(0);if((o|0)==12){o=0;e=c[n>>2]|0;a=c[l>>2]|0;c[a+(h<<2)>>2]=(g-e|0)/56|0;f=e+((c[a+((h^1)<<2)>>2]|0)*56|0)|0}}while((i|0)>3)}else a=c[l>>2]|0;c[b>>2]=(c[e+((c[a+4>>2]|0)*56|0)+24>>2]|0)==0&1;p=d[(c[p+12>>2]|0)+11>>0]|0;Ra=q;return p|0}function gi(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;j=n+32|0;i=n+24|0;h=n+16|0;g=n;k=c[b>>2]|0;do if(!(a[k+81>>0]|0)){m=b+4|0;if(c[c[m>>2]>>2]|0){Ra=n;return}if(!(c[b+16>>2]&1)){if(!(0==0?(c[k+32>>2]&1|0)==0:0)){c[g>>2]=32306;c[g+4>>2]=123725;c[g+8>>2]=31517;Db(11,32001,g);d=11;break}c[h>>2]=(d|0)==0?35133:d;d=dd(k,35135,h)|0;if((f|0)!=0?(a[f>>0]|0)!=0:0){c[i>>2]=d;c[i+4>>2]=f;d=dd(k,35166,i)|0}c[c[m>>2]>>2]=d;c[j>>2]=32306;c[j+4>>2]=123732;c[j+8>>2]=31517;Db(11,32001,j);d=11;break}a:do if(!f)d=0;else{i=(Eu(f)|0)+1|0;b:do if(!k){k=Sv(i|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&k>>>0>2147483390){d=0;break a}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](i)|0;l=28;break}d=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){k=c[14978]|0;j=Tv(g|0,h|0,d|0,((d|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=k>>>0)&1}d=Wa[c[29340>>2]&127](d)|0;if(!d){d=0;break a}g=Wa[c[29352>>2]&127](d)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(!(c[k+272>>2]|0)){do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<i>>>0:0))){g=k+300|0;d=c[g>>2]|0;if(d|0){c[g>>2]=c[d>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=28;break b}g=k+296|0;d=c[g>>2]|0;if(!d){d=k+292|0;break}else{c[g>>2]=c[d>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=28;break b}}else d=k+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(k,i,0)|0;l=28}while(0);if((l|0)==28)if(!d){d=0;break}ew(d|0,f|0,i|0)|0}while(0);c[c[m>>2]>>2]=d;d=1}else d=7;while(0);c[b+12>>2]=d;Ra=n;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=c[b+20>>2]|0;if((q|0)<=0){r=0;return r|0}o=c[b+16>>2]|0;if(!f){b=0;while(1){g=ji((c[o+((b^b>>>0<2)<<4)+12>>2]|0)+24|0,e)|0;if(g|0)break;b=b+1|0;if((b|0)>=(q|0)){p=0;r=15;break}}if((r|0)==15)return p|0;r=g;return r|0}m=a[f>>0]|0;l=d[208+(m&255)>>0]|0;m=m<<24>>24==0;b=0;k=0;while(1){h=k^k>>>0<2;j=c[o+(h<<4)+12>>2]|0;h=c[o+(h<<4)>>2]|0;g=l-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(m|(g|0)!=0)){i=f;do{i=i+1|0;h=h+1|0;s=a[i>>0]|0;g=(d[208+(s&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(g|0)!=0))}if(!g){n=ji(j+24|0,e)|0;if(!n)b=n;else break}k=k+1|0;if((k|0)>=(q|0)){p=b;r=15;break}}if((r|0)==15)return p|0;s=n;return s|0}function ii(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;a:do switch(e<<24>>24){case 45:{e=1;f=b+1|0;g=15;break}case 43:{e=0;f=b+1|0;g=15;break}case 48:{switch(a[b+1>>0]|0){case 88:case 120:break;default:{h=0;e=48;break a}}e=b+2|0;f=a[e>>0]|0;if(!(a[880+(f&255)>>0]&8)){e=0;f=b;g=15}else{if(f<<24>>24==48){b=b+3|0;while(1){e=a[b>>0]|0;if(e<<24>>24==48)b=b+1|0;else{f=e;break}}}else b=e;if(!(a[880+(f&255)>>0]&8)){e=0;b=1}else{g=0;e=0;do{h=f<<24>>24;e=(0-(h>>>6&1)&9)+h&15|e<<4;g=g+1|0;f=a[b+g>>0]|0;h=a[880+(f&255)>>0]&8}while(g>>>0<8&h<<24>>24!=0);b=h<<24>>24==0}if(!((e|0)>-1&b)){d=0;return d|0}c[d>>2]=e;d=1;return d|0}break}default:h=0}while(0);if((g|0)==15){h=e;b=f;e=a[f>>0]|0}if(((e&255)+-48|0)>>>0>=10){d=0;return d|0}if(e<<24>>24==48)do{b=b+1|0;e=a[b>>0]|0}while(e<<24>>24==48);if((e+-48&255)<10){e=(e<<24>>24)+-48|0;g=((e|0)<0)<<31>>31;f=a[b+1>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+2>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+3>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+4>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+5>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+6>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+7>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+8>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+9>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;f=L()|0;if(((a[b+10>>0]|0)+-48&255)<10){d=0;return d|0}else b=f}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else{e=0;b=0}g=Tv(e|0,b|0,h|0,0)|0;f=L()|0;if((f|0)>0|(f|0)==0&g>>>0>2147483647){d=0;return d|0}c[d>>2]=(h|0)==0?e:0-e|0;d=1;return d|0}function ji(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=c[b+12>>2]|0;if(!i){g=b+4|0;f=b+8|0}else{g=a[e>>0]|0;if(!(g<<24>>24))f=0;else{f=0;h=e;do{h=h+1|0;f=G(f+(d[208+(g&255)>>0]|0)|0,-1640531535)|0;g=a[h>>0]|0}while(g<<24>>24!=0)}f=(f>>>0)%((c[b>>2]|0)>>>0)|0;g=i+(f<<3)|0;f=i+(f<<3)+4|0}g=c[g>>2]|0;if(!g){e=59292;e=e+8|0;e=c[e>>2]|0;return e|0}j=d[208+(d[e>>0]|0)>>0]|0;while(1){f=c[f>>2]|0;g=g+-1|0;b=c[f+12>>2]|0;i=a[b>>0]|0;h=(d[208+(i&255)>>0]|0)-j|0;if(!(i<<24>>24==0|(h|0)!=0)){i=e;do{b=b+1|0;i=i+1|0;k=a[b>>0]|0;h=(d[208+(k&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(h|0)!=0))}if(!h){g=14;break}if(!g){f=59292;g=14;break}}if((g|0)==14){k=f+8|0;k=c[k>>2]|0;return k|0}return 0}function ki(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Ra;Ra=Ra+80|0;l=o;if(!h){Ra=o;return 0}i=c[h>>2]|0;if(!i){Ra=o;return 0}n=c[h+8>>2]|0;if(!n){Ra=o;return 0}k=c[f>>2]|0;j=c[f+4>>2]|0;m=Sd(k,i,j)|0;if(!m){Ra=o;return 0}h=c[h+4>>2]|0;a:do if(h|0){f=a[i>>0]|0;g=(d[208+(f&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(f<<24>>24==0|(g|0)!=0)){f=h;do{i=i+1|0;f=f+1|0;p=a[i>>0]|0;g=(d[208+(p&255)>>0]|0)-(d[208+(d[f>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(g|0)!=0))}if(!g){g=c[m+8>>2]|0;if(!g)break;while(1){f=g+55|0;f=d[f>>0]|d[f+1>>0]<<8;if((f&3)==2)break;g=c[g+20>>2]|0;if(!g)break a}h=g;i=g+55|0;g=f}else{g=hi(k,h,j)|0;if(!g)break;p=g+55|0;h=g;i=p;g=d[p>>0]|d[p+1>>0]<<8}p=(e[h+50>>1]|0)+1|0;g=g&-5;a[i>>0]=g;a[i+1>>0]=g>>8;g=h+8|0;li(n,p,c[g>>2]|0,h);p=d[i>>0]|d[i+1>>0]<<8|128;a[i>>0]=p;a[i+1>>0]=p>>8;if(c[h+36>>2]|0){Ra=o;return 0}b[m+44>>1]=b[c[g>>2]>>1]|0;p=m+36|0;c[p>>2]=c[p>>2]|16;Ra=o;return 0}while(0);p=m+46|0;k=l+48|0;b[k>>1]=b[p>>1]|0;li(n,1,m+44|0,l);b[p>>1]=b[k>>1]|0;p=m+36|0;c[p>>2]=c[p>>2]|16;Ra=o;return 0}function li(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=Ra;Ra=Ra+16|0;o=p;k=a[f>>0]|0;if((g|0)>0&k<<24>>24!=0){m=0;do{do if((k+-48&255)<10){j=0;do{j=(j*10|0)+-48+(k<<24>>24)|0;f=f+1|0;k=a[f>>0]|0}while((k+-48&255)<10);if(j>>>0>=8){if(j>>>0>255){l=40;k=0;do{l=(l&65535)+40|0;q=j;j=bw(j|0,k|0,4)|0;r=k;k=L()|0}while(r>>>0>0|(r|0)==0&q>>>0>4095);l=l&65535}else{l=40;k=0}if(k>>>0>0|(k|0)==0&j>>>0>15)do{l=(l&65535)+10&65535;r=j;j=bw(j|0,k|0,1)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>31)}else{if(j>>>0<2){j=0;break}l=40;k=0;do{l=(l&65535)+65526|0;j=cw(j|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&j>>>0<8);l=l&65535}j=(l&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535}else j=0;while(0);b[h+(m<<1)>>1]=j;f=(a[f>>0]|0)==32?f+1|0:f;m=m+1|0;k=a[f>>0]|0}while((m|0)<(g|0)&k<<24>>24!=0)}g=i+55|0;r=(d[g>>0]|d[g+1>>0]<<8)&-69;a[g>>0]=r;a[g+1>>0]=r>>8;if(!(a[f>>0]|0)){Ra=p;return}m=i+48|0;do{do if(!(md(35228,f,31411,91)|0)){r=d[g>>0]|d[g+1>>0]<<8|4;a[g>>0]=r;a[g+1>>0]=r>>8}else{if(md(35239,f,31411,91)|0){if(md(35249,f,31411,91)|0)break;r=d[g>>0]|d[g+1>>0]<<8|64;a[g>>0]=r;a[g+1>>0]=r>>8;break}c[o>>2]=0;ii(f+3|0,o)|0;j=c[o>>2]|0;k=((j|0)<0)<<31>>31;if(j>>>0<8)if(j>>>0<2)j=0;else{l=40;do{l=(l&65535)+65526|0;j=cw(j|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&j>>>0<8);l=l&65535;n=39}else{if(j>>>0>255){l=40;do{l=(l&65535)+40|0;r=j;j=bw(j|0,k|0,4)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>4095);l=l&65535}else l=40;if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;r=j;j=bw(j|0,k|0,1)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>31);n=39}else n=39}if((n|0)==39){n=0;j=(l&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535}b[m>>1]=j}while(0);a:while(1){j=a[f>>0]|0;switch(j<<24>>24){case 32:{n=45;break a}case 0:break a;default:{}}f=f+1|0}if((n|0)==45){n=0;do{f=f+1|0;j=a[f>>0]|0}while(j<<24>>24==32)}}while(j<<24>>24!=0);Ra=p;return}function mi(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=b+12|0;o=c[t>>2]|0;n=(o|0)==0;if(n){h=0;g=b+4|0;i=b+8|0}else{h=a[e>>0]|0;if(!(h<<24>>24))g=0;else{g=0;i=e;do{i=i+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[i>>0]|0}while(h<<24>>24!=0)}i=(g>>>0)%((c[b>>2]|0)>>>0)|0;h=i;g=o+(i<<3)|0;i=o+(i<<3)+4|0}g=c[g>>2]|0;a:do if(!g)k=59292;else{m=d[208+(d[e>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;g=g+-1|0;k=c[i+12>>2]|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-m|0;if(!(r<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j){k=i;break a}if(!g){k=59292;break}}}while(0);g=k+8|0;l=c[g>>2]|0;i=(f|0)==0;if(l|0){if(!i){c[g>>2]=f;c[k+12>>2]=e;b=l;return b|0}e=c[k+4>>2]|0;g=c[k>>2]|0;if(!e){c[b+8>>2]=g;i=g;j=g}else{c[e>>2]=g;j=c[k>>2]|0;i=j}if(i|0)c[i+4>>2]=e;if(!n){g=o+(h<<3)+4|0;if((c[g>>2]|0)==(k|0))c[g>>2]=j;s=o+(h<<3)|0;c[s>>2]=(c[s>>2]|0)+-1}if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}e=b+4|0;s=(c[e>>2]|0)+-1|0;c[e>>2]=s;if(s|0){b=l;return b|0}h=b+8|0;g=c[h>>2]|0;c[h>>2]=0;h=c[t>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[t>>2]=0;c[b>>2]=0;if(g|0)do{h=g;g=c[g>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);c[e>>2]=0;b=l;return b|0}if(i){b=0;return b|0}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](16)|0;if(!g){b=f;return b|0}else r=g}else{g=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;o=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=r>>>0)&1}i=Wa[c[29340>>2]&127](g)|0;if(!i){b=f;return b|0}g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;r=i}else r=i}c[r+12>>2]=e;c[r+8>>2]=f;f=b+4|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;if((g>>>0>9?(p=c[b>>2]|0,g>>>0>p<<1>>>0):0)?(q=g<<4>>>0>1024?128:g<<1,(q|0)!=(p|0)):0){g=q<<3;q=Sv(g|0,0,-1,-1)|0;p=L()|0;do if(!(p>>>0>0|(p|0)==0&q>>>0>2147483390)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](g)|0;break}j=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<g>>>0)c[14985]=g;i=59064;g=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&g>>>0>0){q=c[14978]|0;p=Tv(g|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&p>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(i){g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else i=0}else i=0;while(0);if(i){g=c[t>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[t>>2]=i;o=Wa[c[29352>>2]&127](i)|0;n=o>>>3;c[b>>2]=n;gw(i|0,0,o&-8|0)|0;o=b+8|0;g=c[o>>2]|0;c[o>>2]=0;if(g|0){j=0;while(1){k=c[g+12>>2]|0;l=a[k>>0]|0;if(!(l<<24>>24))h=0;else{h=0;do{k=k+1|0;h=G(h+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[k>>0]|0}while(l<<24>>24!=0)}k=(h>>>0)%(n>>>0)|0;h=g;g=c[g>>2]|0;l=i+(k<<3)|0;do if(l){m=c[l>>2]|0;if(!m){c[l>>2]=1;c[i+(k<<3)+4>>2]=h;s=86;break}q=i+(k<<3)+4|0;k=c[q>>2]|0;c[l>>2]=m+1;c[q>>2]=h;if(k){c[h>>2]=k;l=k+4|0;c[h+4>>2]=c[l>>2];k=c[l>>2]|0;if(!k){c[o>>2]=h;j=h}else c[k>>2]=h;c[l>>2]=h;h=j}else s=86}else s=86;while(0);if((s|0)==86){s=0;c[h>>2]=j;if(j|0)c[j+4>>2]=h;c[h+4>>2]=0;c[o>>2]=h}if(!g)break;else j=h}}h=a[e>>0]|0;if(!(h<<24>>24))g=0;else{g=0;do{e=e+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[e>>0]|0}while(h<<24>>24!=0)}h=(g>>>0)%((c[b>>2]|0)>>>0)|0}}g=c[t>>2]|0;e=g+(h<<3)|0;do if(!((g|0)==0|(e|0)==0)){i=c[e>>2]|0;if(!i){c[e>>2]=1;c[g+(h<<3)+4>>2]=r;break}t=g+(h<<3)+4|0;g=c[t>>2]|0;c[e>>2]=i+1;c[t>>2]=r;if(g|0){c[r>>2]=g;t=g+4|0;c[r+4>>2]=c[t>>2];s=c[t>>2]|0;c[((s|0)==0?b+8|0:s)>>2]=r;c[t>>2]=r;b=0;return b|0}}while(0);g=b+8|0;h=c[g>>2]|0;c[r>>2]=h;if(h|0)c[h+4>>2]=r;c[r+4>>2]=0;c[g>>2]=r;b=0;return b|0}function ni(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d+4|0;e=c[f>>2]|0;if(!(e&8404992)){e=c[d+12>>2]|0;if(e|0?(a[d>>0]|0)!=-86:0)ni(b,e);e=c[d+16>>2]|0;do if(!e){e=d+20|0;if(!(c[f>>2]&2048)){e=c[e>>2]|0;if(!e)break;ri(b,e);break}else{e=c[e>>2]|0;if(!e)break;pi(b,e,1);break}}else ni(b,e);while(0);e=c[f>>2]|0;if(e&16777216){oi(b,c[d+44>>2]|0);e=c[f>>2]|0}}do if(e&65536|0?(g=c[d+8>>2]|0,g|0):0){if(b|0){if(c[b+480>>2]|0){Xd(b,g);break}e=g;if((c[b+304>>2]|0)>>>0<=e>>>0?(c[b+308>>2]|0)>>>0>e>>>0:0){e=b+300|0;c[g>>2]=c[e>>2];c[e>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{e=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);if(c[f>>2]&134217728|0)return;if(b|0){if(c[b+480>>2]|0){Xd(b,d);return}g=d;if((c[b+304>>2]|0)>>>0<=g>>>0?(c[b+308>>2]|0)>>>0>g>>>0:0){g=b+300|0;c[d>>2]=c[g>>2];c[g>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{g=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function oi(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)return;d=c[b+36>>2]|0;if(d|0)ni(a,d);d=c[b+8>>2]|0;if(d|0)ri(a,d);d=c[b+12>>2]|0;if(d|0)ri(a,d);d=c[b+28>>2]|0;if(d|0)ni(a,d);d=c[b+24>>2]|0;if(d|0)ni(a,d);d=c[b>>2]|0;do if(d|0){if(a|0){if(c[a+480>>2]|0){Xd(a,d);break}e=d;if((c[a+304>>2]|0)>>>0<=e>>>0?(c[a+308>>2]|0)>>>0>e>>>0:0){e=a+300|0;c[d>>2]=c[e>>2];c[e>>2]=d;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);d=c[b+4>>2]|0;a:do if(d){do if(a|0){if(!(c[a+480>>2]|0)){e=d;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[d>>2]=c[e>>2];c[e>>2]=d}else Xd(a,d);d=b;e=34;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);e=33;break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);e=33;break}}else e=33;while(0);if((e|0)==33)if(a){d=b;e=34}if((e|0)==34){if(c[a+480>>2]|0){Xd(a,d);return}e=b;if((c[a+304>>2]|0)>>>0<=e>>>0?(c[a+308>>2]|0)>>>0>e>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}else b=d}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function pi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!b)return;j=(a|0)==0;k=a+480|0;l=a+304|0;m=a+308|0;n=a+300|0;while(1){i=b;b=c[b+52>>2]|0;e=c[i>>2]|0;if(e|0)ri(a,e);qi(a,c[i+32>>2]|0);e=c[i+36>>2]|0;if(e|0)ni(a,e);e=c[i+40>>2]|0;if(e|0)ri(a,e);e=c[i+44>>2]|0;if(e|0)ni(a,e);e=c[i+48>>2]|0;if(e|0)ri(a,e);e=c[i+60>>2]|0;if(e|0)ni(a,e);e=c[i+72>>2]|0;if(e|0)do{h=e;e=c[e+32>>2]|0;oi(a,h)}while((e|0)!=0);h=c[i+64>>2]|0;do if(h|0){a:do if((c[h>>2]|0)>0){if(j){f=0;while(1){e=c[h+8+(f<<4)+4>>2]|0;if(e|0)ri(0,e);e=c[h+8+(f<<4)+8>>2]|0;if(e|0)pi(0,e,1);e=c[h+8+(f<<4)>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{g=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);f=f+1|0;if((f|0)>=(c[h>>2]|0))break a}}g=0;do{e=c[h+8+(g<<4)+4>>2]|0;if(e|0)ri(a,e);e=c[h+8+(g<<4)+8>>2]|0;if(e|0)pi(a,e,1);e=c[h+8+(g<<4)>>2]|0;b:do if(e|0){if(c[k>>2]|0){Xd(a,e);break}f=e;do if((c[l>>2]|0)>>>0<=f>>>0){if((c[m>>2]|0)>>>0<=f>>>0)break;c[e>>2]=c[n>>2];c[n>>2]=e;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);g=g+1|0}while((g|0)<(c[h>>2]|0))}while(0);if(!j){if(c[k>>2]|0){Xd(a,h);break}g=h;if((c[l>>2]|0)>>>0<=g>>>0?(c[m>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[n>>2];c[n>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(d|0){if(!j){if(c[k>>2]|0){Xd(a,i);break}h=i;if((c[l>>2]|0)>>>0<=h>>>0?(c[m>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!b)break;else d=1}return}function qi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(!d)return;if((c[d>>2]|0)>0){n=(b|0)==0;o=b+480|0;q=b+304|0;r=b+308|0;l=b+300|0;j=0;k=d+8|0;while(1){e=c[k+4>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[k+8>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[k+12>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=k+37|0;do if(a[e>>0]&2?(p=c[k+64>>2]|0,p|0):0){if(!n){if(c[o>>2]|0){Xd(b,p);break}i=p;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[p>>2]=c[l>>2];c[l>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{i=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);if(a[e>>0]&4?(m=c[k+64>>2]|0,m|0):0)ri(b,m);e=c[k+16>>2]|0;do if(e|0){if(!n?c[o>>2]|0:0){Vi(b,e);break}h=e+32|0;i=(c[h>>2]|0)+-1|0;c[h>>2]=i;if(!i)Vi(b,e)}while(0);e=c[k+20>>2]|0;if(e|0)pi(b,e,1);e=c[k+44>>2]|0;if(e|0)ni(b,e);e=c[k+48>>2]|0;do if(e|0){i=e+4|0;f=c[e>>2]|0;a:do if((c[i>>2]|0)>0){if(n){g=0;while(1){f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[e>>2]|0;if((g|0)>=(c[i>>2]|0))break a}}h=0;do{f=c[f+(h<<3)>>2]|0;b:do if(f|0){if(c[o>>2]|0){Xd(b,f);break}g=f;do if((c[q>>2]|0)>>>0<=g>>>0){if((c[r>>2]|0)>>>0<=g>>>0)break;c[f>>2]=c[l>>2];c[l>>2]=f;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{g=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);h=h+1|0;f=c[e>>2]|0}while((h|0)<(c[i>>2]|0))}while(0);c:do if(f){do if(!n){if(!(c[o>>2]|0)){g=f;if((c[q>>2]|0)>>>0>g>>>0)break;if((c[r>>2]|0)>>>0<=g>>>0)break;c[f>>2]=c[l>>2];c[l>>2]=f}else Xd(b,f);f=90;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);f=89;break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);f=89;break}}else f=89;while(0);if((f|0)==89){f=0;if(!n)f=90}if((f|0)==90){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);j=j+1|0;if((j|0)>=(c[d>>2]|0))break;else k=k+72|0}}if(b|0){if(c[b+480>>2]|0){Xd(b,d);return}r=d;if((c[b+304>>2]|0)>>>0<=r>>>0?(c[b+308>>2]|0)>>>0>r>>>0:0){r=b+300|0;c[d>>2]=c[r>>2];c[r>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{r=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function ri(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c[b>>2]|0;d=b+4|0;g=(a|0)==0;h=a+480|0;i=a+304|0;j=a+308|0;k=a+300|0;if(g){f=e;while(1){e=c[d>>2]|0;if(e|0)ni(0,e);e=c[d+4>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[d+8>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);if((f|0)>1){d=d+20|0;f=f+-1|0}else break}}else{f=e;while(1){e=c[d>>2]|0;if(e|0)ni(a,e);e=c[d+4>>2]|0;do if(e|0){if(c[h>>2]|0){Xd(a,e);break}l=e;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[e>>2]=c[k>>2];c[k>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[d+8>>2]|0;do if(e|0){if(c[h>>2]|0){Xd(a,e);break}l=e;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[e>>2]=c[k>>2];c[k>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if((f|0)>1){d=d+20|0;f=f+-1|0}else break}}if(!g){if(c[h>>2]|0){Xd(a,b);return}l=b;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{l=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function si(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+176|0;O=P+144|0;I=P+120|0;H=P+112|0;G=P+104|0;F=P+96|0;E=P+72|0;D=P+64|0;C=P+56|0;B=P+32|0;K=P+24|0;J=P+16|0;A=P+8|0;z=P;w=P+164|0;x=P+160|0;y=P+156|0;M=e+20|0;N=c[M>>2]|0;a:do if(!g)i=h;else{r=e+16|0;s=e+12|0;q=e+8|0;t=e+4|0;u=(f|0)==0;v=e+24|0;i=h;while(1){if(!(c[r>>2]|0))break a;if((g+-1|0)>>>0>=(c[s>>2]|0)>>>0){L=5;break}j=(c[q>>2]|0)+(g>>>3)|0;k=d[j>>0]|0;l=1<<(g&7);if(l&k|0){L=7;break}a[j>>0]=l|k;o=i+-1|0;p=c[t>>2]|0;if(Za[c[p+204>>2]&127](p,g,y,0)|0){L=9;break}p=c[(c[y>>2]|0)+4>>2]|0;do if(u){i=c[e>>2]|0;if((o|0)!=0&(a[i+17>>0]|0)!=0){k=d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0];i=eg(i,k,w,x)|0;b:do if((i|0)<7){switch(i|0){case 0:break;default:{L=40;break b}}i=a[w>>0]|0;j=c[x>>2]|0;if(!(i<<24>>24==4&(j|0)==(g|0))){c[I>>2]=k;c[I+4>>2]=4;c[I+8>>2]=g;c[I+12>>2]=i&255;c[I+16>>2]=j;ti(e,35625,I)}}else{if((i|0)<3082)switch(i|0){case 7:break;default:{L=40;break b}}else switch(i|0){case 3082:break;default:{L=40;break b}}c[v>>2]=1;L=40}while(0);if((L|0)==40){L=0;c[H>>2]=k;ti(e,35596,H)}i=o}else i=o}else{n=d[p+5>>0]<<16|d[p+4>>0]<<24|d[p+6>>0]<<8|d[p+7>>0];j=c[e>>2]|0;if(a[j+17>>0]|0){j=eg(j,g,w,x)|0;c:do if((j|0)<7){switch(j|0){case 0:break;default:{L=14;break c}}j=a[w>>0]|0;k=c[x>>2]|0;if(!(j<<24>>24==2&(k|0)==0)){c[B>>2]=g;c[B+4>>2]=2;c[B+8>>2]=0;c[B+12>>2]=j&255;c[B+16>>2]=k;ti(e,35625,B)}}else{if((j|0)<3082)switch(j|0){case 7:break;default:{L=14;break c}}else switch(j|0){case 3082:break;default:{L=14;break c}}c[v>>2]=1;L=14}while(0);if((L|0)==14){L=0;c[K>>2]=g;ti(e,35596,K)}j=c[e>>2]|0}if(n>>>0>(((c[j+36>>2]|0)>>>2)+-2|0)>>>0){c[C>>2]=g;ti(e,35455,C);i=i+-2|0;break}d:do if((n|0)>0){i=0;while(1){m=p+((i<<2)+8)|0;l=d[m+3>>0]|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|l;if(a[j+17>>0]|0){g=eg(j,m,w,x)|0;e:do if((g|0)<7){switch(g|0){case 0:break;default:{L=25;break e}}j=a[w>>0]|0;g=c[x>>2]|0;if(!(j<<24>>24==2&(g|0)==0)){c[E>>2]=m;c[E+4>>2]=2;c[E+8>>2]=0;c[E+12>>2]=j&255;c[E+16>>2]=g;ti(e,35625,E)}}else{if((g|0)<3082)switch(g|0){case 7:break;default:{L=25;break e}}else switch(g|0){case 3082:break;default:{L=25;break e}}c[v>>2]=1;L=25}while(0);if((L|0)==25){L=0;c[D>>2]=m;ti(e,35596,D)}}do if((m+-1|0)>>>0<(c[s>>2]|0)>>>0){j=(c[q>>2]|0)+(m>>>3)|0;k=d[j>>0]|0;g=1<<(l&7);if(!(g&k)){a[j>>0]=g|k;break}else{c[G>>2]=m;ti(e,35569,G);break}}else{c[F>>2]=m;ti(e,35546,F)}while(0);i=i+1|0;if((i|0)==(n|0))break d;j=c[e>>2]|0}}while(0);i=o-n|0}while(0);g=d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0];j=c[y>>2]|0;do if(j|0)if(!(b[j+28>>1]&32)){Df(j);break}else{p=c[j+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[j+16>>2]=c[p>>2];c[p>>2]=j;break}while(0);if(!g)break a}if((L|0)==5){c[z>>2]=g;ti(e,35546,z)}else if((L|0)==7){c[A>>2]=g;ti(e,35569,A)}else if((L|0)==9){c[J>>2]=g;ti(e,35433,J);i=o}}while(0);if(!i){Ra=P;return}if((N|0)!=(c[M>>2]|0)){Ra=P;return}c[O>>2]=(f|0)==0?35525:35520;c[O+4>>2]=h-i;c[O+8>>2]=h;ti(e,35494,O);Ra=P;return}function ti(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;i=j+16|0;h=j;f=b+16|0;g=c[f>>2]|0;if(!g){Ra=j;return}c[f>>2]=g+-1;f=b+20|0;c[f>>2]=(c[f>>2]|0)+1;c[h>>2]=e;f=b+40|0;if(c[b+56>>2]|0)ub(f,35594,1);g=c[b+28>>2]|0;if(g|0){e=c[b+36>>2]|0;c[i>>2]=c[b+32>>2];c[i+4>>2]=e;Eb(f,g,i)}tb(f,d,h);if((a[b+60>>0]|0)!=7){Ra=j;return}c[b+24>>2]=1;Ra=j;return}function ui(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;ma=Ra;Ra=Ra+240|0;fa=ma+216|0;da=ma+208|0;U=ma+200|0;T=ma+176|0;S=ma+168|0;R=ma+144|0;Q=ma+136|0;P=ma+128|0;O=ma+120|0;N=ma+104|0;t=ma+80|0;s=ma+72|0;q=ma+64|0;p=ma+56|0;o=ma+48|0;n=ma+40|0;k=ma+32|0;K=ma+232|0;L=ma+228|0;W=ma+24|0;M=ma;ga=W;c[ga>>2]=i;c[ga+4>>2]=j;ga=f+28|0;ha=c[ga>>2]|0;ia=f+32|0;ja=c[ia>>2]|0;ka=f+36|0;la=c[ka>>2]|0;u=c[f>>2]|0;ea=c[u+36>>2]|0;if(!g){la=0;Ra=ma;return la|0}if((g+-1|0)>>>0>=(c[f+12>>2]|0)>>>0){c[k>>2]=g;ti(f,35546,k);la=0;Ra=ma;return la|0}k=(c[f+8>>2]|0)+(g>>>3)|0;l=d[k>>0]|0;m=1<<(g&7);if(m&l|0){c[n>>2]=g;ti(f,35569,n);la=0;Ra=ma;return la|0}a[k>>0]=m|l;c[ga>>2]=35679;c[ia>>2]=g;k=c[u>>2]|0;k=Za[c[k+204>>2]&127](k,g,K,0)|0;a:do if(!k){k=c[K>>2]|0;ca=c[k+8>>2]|0;l=ca+4|0;if((c[l>>2]|0)!=(g|0)){c[ca+56>>2]=c[k+4>>2];c[ca+72>>2]=k;c[ca+52>>2]=u;c[l>>2]=g;a[ca+9>>0]=(g|0)==1?100:0}J=a[ca>>0]|0;a[ca>>0]=0;k=Gf(ca)|0;do if(!k){k=Jh(ca)|0;if(k|0){c[q>>2]=k;ti(f,35765,q);k=-1;break}aa=c[ca+56>>2]|0;ba=d[ca+9>>0]|0;c[ga>>2]=35787;l=aa+(ba+5)|0;l=(d[l>>0]<<8|d[l+1>>0])+65535&65535;H=l+1|0;o=aa+(ba+3)|0;o=d[o>>0]<<8|d[o+1>>0];I=ca+8|0;G=a[I>>0]|0;X=ba+12-((G&255)<<2)|0;r=o+-1|0;p=aa+(X+(r<<1))|0;if(!(G<<24>>24)){n=aa+(ba+8)|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];if(a[u+17>>0]|0){c[ga>>2]=35813;k=eg(c[f>>2]|0,n,K,L)|0;b:do if((k|0)<7){switch(k|0){case 0:break;default:{V=18;break b}}k=a[K>>0]|0;m=c[L>>2]|0;if(!(k<<24>>24==5&(m|0)==(g|0))){c[t>>2]=n;c[t+4>>2]=5;c[t+8>>2]=g;c[t+12>>2]=k&255;c[t+16>>2]=m;ti(f,35625,t)}}else{if((k|0)<3082)switch(k|0){case 7:break;default:{V=18;break b}}else switch(k|0){case 3082:break;default:{V=18;break b}}c[f+24>>2]=1;V=18}while(0);if((V|0)==18){c[s>>2]=n;ti(f,35596,s)}}k=ui(f,n,W,i,j)|0;n=0;i=0}else{i=c[f+64>>2]|0;c[i>>2]=0;k=-1;n=1}F=f+16|0;G=(o|0)==0;if(!G){y=ea+-4|0;z=ca+80|0;A=M+18|0;B=ca+2|0;C=M+12|0;D=M+16|0;E=ea+-5|0;w=u+17|0;x=f+24|0;v=r;m=1;u=p;while(1){if(!(c[F>>2]|0))break;c[ka>>2]=v;j=d[u>>0]<<8|d[u+1>>0];u=u+-2|0;c:do if(j>>>0<=l>>>0|j>>>0>y>>>0){c[N>>2]=j;c[N+4>>2]=H;c[N+8>>2]=y;ti(f,35841,N);m=0}else{t=aa+j|0;cb[c[z>>2]&255](ca,t,M);if((j+(e[A>>1]|0)|0)>>>0>ea>>>0){ti(f,35871,O);m=0;break}if(a[B>>0]|0){s=M;o=c[s>>2]|0;s=c[s+4>>2]|0;q=W;p=c[q>>2]|0;q=c[q+4>>2]|0;if(!n)if((s|0)<(q|0)|(s|0)==(q|0)&o>>>0<p>>>0)n=s;else V=36;else if((s|0)>(q|0)|(s|0)==(q|0)&o>>>0>p>>>0)V=36;else n=s;if((V|0)==36){V=0;n=P;c[n>>2]=o;c[n+4>>2]=s;ti(f,35895,P);n=M;o=c[n>>2]|0;n=c[n+4>>2]|0}s=W;c[s>>2]=o;c[s+4>>2]=n;n=0}o=c[C>>2]|0;p=e[D>>1]|0;if(o>>>0>p>>>0){q=((E+o-p|0)>>>0)/(y>>>0)|0;s=t+((e[A>>1]|0)+-4)|0;s=d[s+1>>0]<<16|d[s>>0]<<24|d[s+2>>0]<<8|d[s+3>>0];if(a[w>>0]|0){o=eg(c[f>>2]|0,s,K,L)|0;d:do if((o|0)<7){switch(o|0){case 0:break;default:{V=42;break d}}o=a[K>>0]|0;p=c[L>>2]|0;if(o<<24>>24==3&(p|0)==(g|0))break;c[R>>2]=s;c[R+4>>2]=3;c[R+8>>2]=g;c[R+12>>2]=o&255;c[R+16>>2]=p;ti(f,35625,R)}else{if((o|0)<3082)switch(o|0){case 7:break;default:{V=42;break d}}else switch(o|0){case 3082:break;default:{V=42;break d}}c[x>>2]=1;V=42}while(0);if((V|0)==42){V=0;c[Q>>2]=s;ti(f,35596,Q)}}si(f,0,s,q)}if(a[I>>0]|0){p=j+-1+(e[A>>1]|0)|j<<16;o=(c[i>>2]|0)+1|0;c[i>>2]=o;c[i+(o<<2)>>2]=p;q=o>>>1;if(!q)break;s=i+(q<<2)|0;j=c[s>>2]|0;if(j>>>0<=p>>>0)break;while(1){c[s>>2]=p;c[i+(o<<2)>>2]=j;o=q>>>1;if(!o)break c;p=c[s>>2]|0;s=i+(o<<2)|0;j=c[s>>2]|0;if(j>>>0<=p>>>0)break c;else{t=q;q=o;o=t}}}p=d[t+1>>0]<<16|d[t>>0]<<24|d[t+2>>0]<<8|d[t+3>>0];if(a[w>>0]|0){n=eg(c[f>>2]|0,p,K,L)|0;e:do if((n|0)<7){switch(n|0){case 0:break;default:{V=51;break e}}n=a[K>>0]|0;o=c[L>>2]|0;if(n<<24>>24==5&(o|0)==(g|0))break;c[T>>2]=p;c[T+4>>2]=5;c[T+8>>2]=g;c[T+12>>2]=n&255;c[T+16>>2]=o;ti(f,35625,T)}else{if((n|0)<3082)switch(n|0){case 7:break;default:{V=51;break e}}else switch(n|0){case 3082:break;default:{V=51;break e}}c[x>>2]=1;V=51}while(0);if((V|0)==51){V=0;c[S>>2]=p;ti(f,35596,S)}}n=W;n=ui(f,p,W,c[n>>2]|0,c[n+4>>2]|0)|0;if((n|0)==(k|0)){n=0;break}ti(f,35919,U);k=n;n=0}while(0);if((v|0)<=0)break;else v=v+-1|0}U=W;V=c[U+4>>2]|0;W=h;c[W>>2]=c[U>>2];c[W+4>>2]=V;c[ga>>2]=0;if(!m){a[ca>>0]=J;break}}else{U=W;V=c[U+4>>2]|0;W=h;c[W>>2]=c[U>>2];c[W+4>>2]=V;c[ga>>2]=0}f:do if((c[F>>2]|0)>0){if(!(a[I>>0]|0)){i=c[f+64>>2]|0;c[i>>2]=0;if(!G){s=ca+76|0;while(1){n=aa+((r<<1)+X)|0;n=d[n>>0]<<8|d[n+1>>0];n=n+-1+((Xa[c[s>>2]&255](ca,aa+n|0)|0)&65535)|n<<16;m=(c[i>>2]|0)+1|0;c[i>>2]=m;c[i+(m<<2)>>2]=n;o=m>>>1;g:do if(o|0?(Y=i+(o<<2)|0,Z=c[Y>>2]|0,Z>>>0>n>>>0):0){p=Y;q=Z;while(1){c[p>>2]=n;c[i+(m<<2)>>2]=q;m=o>>>1;if(!m)break g;n=c[p>>2]|0;p=i+(m<<2)|0;q=c[p>>2]|0;if(q>>>0<=n>>>0)break;else{W=o;o=m;m=W}}}while(0);if((r|0)>0)r=r+-1|0;else break}}}m=aa+(ba+1)|0;m=d[m>>0]<<8|d[m+1>>0];if(m|0)do{o=aa+(m+2)|0;o=m+-1+(d[o>>0]<<8|d[o+1>>0])|m<<16;n=(c[i>>2]|0)+1|0;c[i>>2]=n;c[i+(n<<2)>>2]=o;p=n>>>1;h:do if(p|0?(_=i+(p<<2)|0,$=c[_>>2]|0,$>>>0>o>>>0):0){q=_;r=$;while(1){c[q>>2]=o;c[i+(n<<2)>>2]=r;n=p>>>1;if(!n)break h;o=c[q>>2]|0;q=i+(n<<2)|0;r=c[q>>2]|0;if(r>>>0<=o>>>0)break;else{Z=p;p=n;n=Z}}}while(0);Z=aa+m|0;m=d[Z>>0]<<8|d[Z+1>>0]}while((m|0)!=0);n=c[i>>2]|0;i:do if(n){t=i+4|0;m=0;while(1){j=c[t>>2]|0;n=i+(n<<2)|0;c[t>>2]=c[n>>2];c[n>>2]=-1;n=(c[i>>2]|0)+-1|0;c[i>>2]=n;j:do if(n>>>0>=2){s=c[t>>2]|0;r=1;o=2;do{p=o|1;q=r;r=(c[i+(o<<2)>>2]|0)>>>0>(c[i+(p<<2)>>2]|0)>>>0?p:o;o=i+(r<<2)|0;p=c[o>>2]|0;if(s>>>0<p>>>0)break j;c[i+(q<<2)>>2]=p;c[o>>2]=s;o=r<<1;n=c[i>>2]|0}while(o>>>0<=n>>>0)}while(0);o=l&65535;p=j>>>16;if(p>>>0<=o>>>0)break;m=m+-1-o+p|0;if(!n){l=j;break i}else l=j}c[da>>2]=p;c[da+4>>2]=g;ti(f,35944,da);if(c[i>>2]|0)break f}else m=0;while(0);m=m+-1+ea-(l&65535)|0;l=d[aa+(ba+7)>>0]|0;if((m|0)!=(l|0)){c[fa>>2]=m;c[fa+4>>2]=l;c[fa+8>>2]=g;ti(f,35981,fa)}}while(0);if(!ca)break a}else{c[p>>2]=k;ti(f,35727,p);k=-1}while(0);l=c[ca+72>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{fa=c[l+20>>2]|0;g=fa+120|0;c[g>>2]=(c[g>>2]|0)+-1;fa=fa+136|0;c[l+16>>2]=c[fa>>2];c[fa>>2]=l;break}}else{c[o>>2]=k;ti(f,35689,o);k=-1}while(0);c[ga>>2]=ha;c[ia>>2]=ja;c[ka>>2]=la;la=k+1|0;Ra=ma;return la|0}function vi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[a>>2]|0;g=a+4|0;if(d|0)do{e=d;d=c[d>>2]|0;f=c[g>>2]|0;do if(f){if(c[f+480>>2]|0){Xd(f,e);break}i=e;if((c[f+304>>2]|0)>>>0<=i>>>0?(c[f+308>>2]|0)>>>0>i>>>0:0){i=f+300|0;c[e>>2]=c[i>>2];c[i>>2]=e}else h=9}else h=9;while(0);do if((h|0)==9){h=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0)}while((d|0)!=0);c[a>>2]=0;b[a+24>>1]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+20>>2]=0;b[a+26>>1]=1;d=c[g>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,a);return}i=a;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[a>>2]=c[i>>2];c[i>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{i=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function wi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;e=g;f=c[a+12>>2]|0;if(!f)c[b>>2]=a;else{wi(f,b,e);c[(c[e>>2]|0)+8>>2]=a}e=a+8|0;b=c[e>>2]|0;if(!b){c[d>>2]=a;Ra=g;return}else{wi(b,e,d);Ra=g;return}}function xi(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if(!d){a=0;return a|0}if((b|0)<=1){e=d+8|0;c[a>>2]=c[e>>2];c[e>>2]=0;c[d+12>>2]=0;a=d;return a|0}b=b+-1|0;d=xi(a,b)|0;e=c[a>>2]|0;if(!e){a=d;return a|0}else{c[e+12>>2]=d;d=e+8|0;c[a>>2]=c[d>>2];a=xi(a,b)|0;c[d>>2]=a;return e|0}return 0}function yi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Ra;Ra=Ra+16|0;g=f;c[g>>2]=e;d=Me(a,d,g)|0;if(!d){g=7;Ra=f;return g|0}g=zi(a,b,d)|0;lb(a,d);Ra=f;return g|0}function zi(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;h=o;g=qd(d,g,-1,128,0,h,0)|0;if(g|0){f=g;Ra=o;return f|0}n=c[h>>2]|0;g=Gc(n)|0;a:do if((g|0)==100){j=n+120|0;k=n+144|0;l=n+40|0;if(!n)while(1){g=Gc(0)|0;if((g|0)!=100)break a}do{g=c[j>>2]|0;if(!((g|0)!=0?(b[k>>1]|0)!=0:0)){g=c[n>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0)i=c[g+16>>2]|0;else if(!(h&1))i=Gg(g,1)|0;else i=0;g=c[n>>2]|0;h=c[l>>2]|0;if((h|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7}else g=c[g+68>>2]&h;c[l>>2]=g;do if(i|0){if(av(i,36682,3)|0?av(i,36686,3)|0:0)break;g=zi(d,f,i)|0;if(g|0)break a}while(0);g=Gc(n)|0}while((g|0)==100)}while(0);l=(g|0)==101?0:g;if(l|0){k=pd(d)|0;g=c[f>>2]|0;do if(g|0){if(d|0){if(c[d+480>>2]|0){Xd(d,g);break}j=g;if((c[d+304>>2]|0)>>>0<=j>>>0?(c[d+308>>2]|0)>>>0>j>>>0:0){j=d+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);b:do if(!k)g=0;else{j=(Eu(k)|0)+1|0;c:do if(!d){d=Sv(j|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&d>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](j)|0;m=59;break}g=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){d=c[14978]|0;i=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=d>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[d+272>>2]|0){if(a[d+81>>0]|0){g=0;break b}}else{do if(!(0<0|(0==0?(e[d+276>>1]|0)>>>0<j>>>0:0))){h=d+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];m=d+284|0;c[m>>2]=(c[m>>2]|0)+1;m=59;break c}h=d+296|0;g=c[h>>2]|0;if(!g){g=d+292|0;break}else{c[h>>2]=c[g>>2];m=d+284|0;c[m>>2]=(c[m>>2]|0)+1;m=59;break c}}else g=d+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(d,j,0)|0;m=59}while(0);if((m|0)==59)if(!g){g=0;break}ew(g|0,k|0,j|0)|0}while(0);c[f>>2]=g}gc(n)|0;f=l;Ra=o;return f|0}function Ai(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+48|0;u=D+24|0;x=D+16|0;w=D+8|0;l=D;q=D+32|0;v=D+28|0;p=g+60|0;s=c[p>>2]|0;r=c[g+56>>2]|0;c[v>>2]=0;t=f+352|0;k=c[t>>2]|0;a:do if(k|0){while(1){if((c[k+4>>2]|0)==(g|0))break;k=c[k+8>>2]|0;if(!k)break a}c[l>>2]=c[g>>2];f=dd(f,36709,l)|0;c[j>>2]=f;f=6;Ra=D;return f|0}while(0);n=c[g>>2]|0;if(!n){f=7;Ra=D;return f|0}o=(Eu(n)|0)+1|0;z=(f|0)==0;b:do if(z){y=Sv(o|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&y>>>0>2147483390){f=7;Ra=D;return f|0}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;A=31;break}k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){y=c[14978]|0;m=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=y>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l){f=7;Ra=D;return f|0}k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;y=l}else y=l}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){f=7;Ra=D;return f|0}}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0<o>>>0:0))){l=f+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];A=f+284|0;c[A>>2]=(c[A>>2]|0)+1;A=31;break b}l=f+296|0;k=c[l>>2]|0;if(!k){k=f+292|0;break}else{c[l>>2]=c[k>>2];A=f+284|0;c[A>>2]=(c[A>>2]|0)+1;A=31;break b}}else k=f+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(f,o,0)|0;A=31}while(0);if((A|0)==31)if(!k){f=7;Ra=D;return f|0}else y=k;ew(y|0,n|0,o|0)|0;if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](28)|0;if(!k)A=43;else n=k}else{k=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){o=c[14978]|0;n=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;n=l}else n=l}else A=43}if((A|0)==43){k=f+81|0;if((a[k>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[k>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;k=f+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[f+236>>2]|0;if(k|0)c[k+12>>2]=7}if(c[f+480>>2]|0){Xd(f,y);f=7;Ra=D;return f|0}C=y;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){f=f+300|0;c[y>>2]=c[f>>2];c[f>>2]=y;f=7;Ra=D;return f|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](y);f=7;Ra=D;return f|0}else{f=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);f=7;Ra=D;return f|0}}k=n+8|0;l=k+20|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));c[n>>2]=f;c[n+4>>2]=h;l=c[g+72>>2]|0;m=c[f+16>>2]|0;if(!l)k=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0}c[(c[p>>2]|0)+4>>2]=c[m+(k<<4)>>2];c[q+4>>2]=g;c[q>>2]=n;p=q+8|0;c[p>>2]=c[t>>2];l=q+12|0;c[l>>2]=0;c[t>>2]=q;m=n+8|0;k=$a[i&127](f,c[h+8>>2]|0,r,s,m,v)|0;c[t>>2]=c[p>>2];c:do switch(k|0){case 7:{l=f+81|0;if((a[l>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[l>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;l=f+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[f+236>>2]|0;if(l){c[l+12>>2]=7;A=67}else A=67}else A=67;break}case 0:{k=c[m>>2]|0;if(k){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[c[m>>2]>>2]=c[h>>2];k=n+12|0;c[k>>2]=1;if(!(c[l>>2]|0)){c[u>>2]=c[g>>2];l=dd(f,36781,u)|0;c[j>>2]=l;l=c[n>>2]|0;C=(c[k>>2]|0)+-1|0;c[k>>2]=C;if(C|0){k=1;A=117;break c}k=c[m>>2]|0;if(k|0)Wa[c[(c[k>>2]|0)+16>>2]&127](k)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,n);k=1;A=117;break c}C=n;if((c[l+304>>2]|0)>>>0<=C>>>0?(c[l+308>>2]|0)>>>0>C>>>0:0){k=l+300|0;c[n>>2]=c[k>>2];c[k>>2]=n;k=1;A=117;break c}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);k=1;A=117;break c}else{k=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);k=1;A=117;break c}}h=g+64|0;c[n+24>>2]=c[h>>2];c[h>>2]=n;h=g+42|0;k=b[h>>1]|0;if(k<<16>>16>0){u=g+4|0;t=g+36|0;m=0;s=0;l=c[u>>2]|0;do{if(!(a[l+(s<<4)+15>>0]&4))i=59952;else{i=c[l+(s<<4)>>2]|0;i=i+(Eu(i)|0)+1|0}q=(Eu(i)|0)&1073741823;d:do if(!q)A=114;else{n=0;e:while(1){r=i+n|0;do if(r|0){j=d[r>>0]|0;o=208+j|0;do if((j|32|0)==104){o=r+1|0;j=d[o>>0]|0;p=208+j|0;if((j|32|0)==105){o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=100){B=208+p|0;C=100;A=103;break}o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=100){B=208+p|0;C=100;A=103;break}o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=101){B=208+p|0;C=101;A=103;break}o=d[o+1>>0]|0;if((o|32|0)!=110){B=208+o|0;C=110;A=103}}else{B=p;C=105;A=103}}else{B=o;C=104;A=103}while(0);if((A|0)==103?(A=0,(C|0)!=(d[B>>0]|0)):0)break;if(n|0?(a[i+(n+-1)>>0]|0)!=32:0)break;o=a[i+(n+6)>>0]|0;switch(o<<24>>24){case 32:case 0:break e;default:{}}}while(0);n=n+1|0;if(n>>>0>=q>>>0){A=114;break d}}o=o<<24>>24==0?6:7;k=n+o|0;if(k>>>0<=q>>>0){m=q+1-o|0;l=n;while(1){a[i+l>>0]=a[i+k>>0]|0;k=l+1|0;if((k|0)==(m|0))break;else{l=k;k=k+o|0}}}if((n|0)!=0&(a[r>>0]|0)==0)a[i+(n+-1)>>0]=0;l=c[u>>2]|0;m=l+(s<<4)+15|0;a[m>>0]=a[m>>0]|2;m=-128;k=b[h>>1]|0}while(0);if((A|0)==114){A=0;c[t>>2]=c[t>>2]|m&255}s=s+1|0}while((s|0)<(k<<16>>16|0))}if(z)k=0;else{k=0;A=117}}else{k=0;A=117}break}default:A=67}while(0);do if((A|0)==67){l=c[v>>2]|0;do if(l){c[x>>2]=l;l=dd(f,31408,x)|0;c[j>>2]=l;l=c[v>>2]|0;if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{C=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else{c[w>>2]=y;C=dd(f,36751,w)|0;c[j>>2]=C}while(0);if(c[f+480>>2]|0){Xd(f,n);A=117;break}C=n;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){A=f+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;A=117;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);A=117;break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);A=117;break}}while(0);if((A|0)==117){if(c[f+480>>2]|0){Xd(f,y);f=k;Ra=D;return f|0}C=y;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){f=f+300|0;c[y>>2]=c[f>>2];c[f>>2]=y;f=k;Ra=D;return f|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](y);f=k;Ra=D;return f|0}else{f=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);f=k;Ra=D;return f|0}return 0}function Bi(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=a[b>>0]|0;do switch(a[3696+(i&255)>>0]|0){case 7:{g=1;while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&1))break;else g=g+1|0;c[f>>2]=174;f=g;return f|0}case 11:{if((a[b+1>>0]|0)!=45){c[f>>2]=101;f=1;return f|0}g=2;a:while(1){switch(a[b+g>>0]|0){case 0:case 10:break a;default:{}}g=g+1|0}c[f>>2]=174;f=g;return f|0}case 17:{c[f>>2]=22;f=1;return f|0}case 18:{c[f>>2]=23;f=1;return f|0}case 19:{c[f>>2]=1;f=1;return f|0}case 20:{c[f>>2]=100;f=1;return f|0}case 21:{c[f>>2]=102;f=1;return f|0}case 16:{if((a[b+1>>0]|0)==42?(g=a[b+2>>0]|0,g<<24>>24):0){h=a[b+3>>0]|0;b:do if(g<<24>>24==42&h<<24>>24==47){h=1;g=3}else{g=3;while(1){if(!(h<<24>>24)){h=0;break b}g=g+1|0;k=h;h=a[b+g>>0]|0;if(k<<24>>24==42&h<<24>>24==47){h=1;break}}}while(0);c[f>>2]=174;f=h+g|0;return f|0}c[f>>2]=103;f=1;return f|0}case 22:{c[f>>2]=104;f=1;return f|0}case 14:{c[f>>2]=53;f=(a[b+1>>0]|0)==61?2:1;return f|0}case 12:switch(a[b+1>>0]|0){case 61:{c[f>>2]=55;f=2;return f|0}case 62:{c[f>>2]=52;f=2;return f|0}case 60:{c[f>>2]=98;f=2;return f|0}default:{c[f>>2]=56;f=1;return f|0}}case 13:switch(a[b+1>>0]|0){case 61:{c[f>>2]=57;f=2;return f|0}case 62:{c[f>>2]=99;f=2;return f|0}default:{c[f>>2]=54;f=1;return f|0}}case 15:if((a[b+1>>0]|0)==61){c[f>>2]=52;f=2;return f|0}else{c[f>>2]=175;f=1;return f|0}case 10:if((a[b+1>>0]|0)==124){c[f>>2]=105;f=2;return f|0}else{c[f>>2]=97;f=1;return f|0}case 23:{c[f>>2]=26;f=1;return f|0}case 24:{c[f>>2]=96;f=1;return f|0}case 25:{c[f>>2]=107;f=1;return f|0}case 8:{h=a[b+1>>0]|0;c:do if(h<<24>>24){g=1;while(1){if(h<<24>>24==i<<24>>24){g=g+1|0;if((a[b+g>>0]|0)!=i<<24>>24)break}g=g+1|0;h=a[b+g>>0]|0;if(!(h<<24>>24))break c}if(i<<24>>24==39){c[f>>2]=110;f=g;return f|0}else{c[f>>2]=59;f=g;return f|0}}else g=1;while(0);c[f>>2]=175;f=g;return f|0}case 26:{if(((d[b+1>>0]|0)+-48|0)>>>0>=10){c[f>>2]=134;f=1;return f|0}break}case 3:break;case 9:{d:do if(i<<24>>24==93){g=1;h=59}else{g=1;while(1){h=a[b+g>>0]|0;if(!(h<<24>>24)){h=175;break d}g=g+1|0;if(h<<24>>24==93){h=59;break}}}while(0);c[f>>2]=h;f=g;return f|0}case 6:{c[f>>2]=148;g=1;while(1)if(((d[b+g>>0]|0)+-48|0)>>>0<10)g=g+1|0;else break;return g|0}case 5:case 4:{c[f>>2]=148;h=a[b+1>>0]|0;if(h<<24>>24){j=0;g=1;while(1){if(!(a[880+(h&255)>>0]&70)){if((j|0)>0&h<<24>>24==40){k=91;break}if(h<<24>>24!=58){h=j;break}h=g+1|0;if((a[b+h>>0]|0)==58){i=j;g=h}else{h=j;break}}else i=j+1|0;g=g+1|0;h=a[b+g>>0]|0;if(!(h<<24>>24)){h=i;break}else j=i}do if((k|0)==91){while(1){i=g+1|0;h=a[b+i>>0]|0;if(!(h<<24>>24))break;if(h<<24>>24!=41?(a[880+(h&255)>>0]&1)==0:0)g=i;else{k=94;break}}if((k|0)==94?h<<24>>24==41:0){h=j;g=g+2|0;break}c[f>>2]=175;h=j;g=i}while(0);if(h){f=g;return f|0}}else g=1;c[f>>2]=175;f=g;return f|0}case 1:{g=1;while(1){h=a[b+g>>0]|0;i=g+1|0;if((d[3696+(h&255)>>0]|0)<2)g=i;else break}if(!(a[880+(h&255)>>0]&70)){c[f>>2]=59;if(g>>>0<=1){f=g;return f|0}h=a[3952+(((d[208+(d[b>>0]|0)>>0]<<2^g^(d[208+(d[b+(g+-1)>>0]|0)>>0]|0)*3)>>>0)%127|0)>>0]|0;if(!(h<<24>>24)){f=g;return f|0}h=h&255;e:while(1){i=h+-1|0;f:do if((g|0)==(d[2064+i>>0]|0)){j=1136+(e[1776+(i<<1)>>1]|0)|0;h=0;while(1){if((a[b+h>>0]&-33)<<24>>24!=(a[j+h>>0]|0))break f;h=h+1|0;if(h>>>0>=g>>>0)break e}}while(0);h=a[4224+i>>0]|0;if(!(h<<24>>24)){k=127;break}else h=h&255}if((k|0)==127)return g|0;c[f>>2]=d[4080+i>>0];f=g;return f|0}else{g=i;k=114}break}case 0:{if((a[b+1>>0]|0)==39){c[f>>2]=146;g=2;while(1){h=a[b+g>>0]|0;if(!(a[880+(h&255)>>0]&8))break;else g=g+1|0}if(h<<24>>24==39&(g&1|0)==0){h=g;g=1}else{c[f>>2]=175;g:while(1){i=a[b+g>>0]|0;switch(i<<24>>24){case 39:case 0:break g;default:{}}g=g+1|0}h=g;g=i<<24>>24!=0&1}f=h+g|0;return f|0}else{g=1;k=114}break}case 2:{g=1;k=114;break}case 28:{c[f>>2]=175;f=0;return f|0}default:{c[f>>2]=175;f=1;return f|0}}while(0);if((k|0)==114){while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&70))break;else g=g+1|0;c[f>>2]=59;f=g;return f|0}c[f>>2]=147;h=a[b>>0]|0;h:do if(h<<24>>24==48){switch(a[b+1>>0]|0){case 88:case 120:break;default:break h}if(a[880+(d[b+2>>0]|0)>>0]&8){g=3;while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&8))break;else g=g+1|0;return g|0}}while(0);if(((h&255)+-48|0)>>>0<10){g=1;while(1){h=a[b+g>>0]|0;if(((h&255)+-48|0)>>>0<10)g=g+1|0;else break}}else g=0;if(h<<24>>24==46){h=g;do h=h+1|0;while(((d[b+h>>0]|0)+-48|0)>>>0<10);c[f>>2]=145;g=h;h=a[b+h>>0]|0}i:do switch(h<<24>>24){case 69:case 101:{i=a[b+(g+1)>>0]|0;if(((i&255)+-48|0)>>>0>=10){switch(i<<24>>24){case 45:case 43:break;default:break i}i=g+2|0;if(((d[b+i>>0]|0)+-48|0)>>>0<10)g=i;else break i}else g=g+2|0;h=g;while(1)if(((d[b+h>>0]|0)+-48|0)>>>0<10)h=h+1|0;else break;c[f>>2]=145;g=h;h=a[b+h>>0]|0;break}default:{}}while(0);if(!(a[880+(h&255)>>0]&70)){f=g;return f|0}do{c[f>>2]=175;g=g+1|0}while((a[880+(d[b+g>>0]|0)>>0]&70)!=0);return g|0}function Ci(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=d+108|0;i=c[h>>2]|0;if((c[d+112>>2]|0)>(i|0)){c[h>>2]=i+1;h=c[d+104>>2]|0;a[h+(i*20|0)>>0]=e;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=f;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=0;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0;return i|0}else{i=Di(d,e,f,g,0)|0;return i|0}return 0}function Di(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=d+12|0;k=c[r>>2]|0;s=d+112|0;l=c[s>>2]|0;j=(l|0)==0;l=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;m=L()|0;l=j?51:l;m=j?0:m;j=c[k>>2]|0;q=c[j+128>>2]|0;p=((q|0)<0)<<31>>31;a:do if(!((m|0)>(p|0)|(m|0)==(p|0)&l>>>0>q>>>0)){q=d+104|0;p=d+108|0;o=k;n=k;d=c[q>>2]|0;b:while(1){l=Yv(l|0,m|0,20,0)|0;m=L()|0;c:do if(!d){if(c[j+272>>2]|0){if(a[j+81>>0]|0){d=1;k=35;break b}}else{do if(!(m>>>0>0|((m|0)==0?l>>>0>(e[j+276>>1]|0)>>>0:0))){k=j+300|0;d=c[k>>2]|0;if(d|0){c[k>>2]=c[d>>2];k=j+284|0;c[k>>2]=(c[k>>2]|0)+1;k=27;break c}k=j+296|0;d=c[k>>2]|0;if(!d){d=j+292|0;break}else{c[k>>2]=c[d>>2];k=j+284|0;c[k>>2]=(c[k>>2]|0)+1;k=27;break c}}else d=j+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(j,l,m)|0;k=27}else{k=d;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){if(!(m>>>0>0|((m|0)==0?l>>>0>(e[j+276>>1]|0)>>>0:0))){k=29;break}d=Zd(j,d,l,m)|0;k=27;break}d=Zd(j,d,l,m)|0;k=27}while(0);if((k|0)==27){if(!d){d=1;k=35;break}j=c[o>>2]|0;if(!j)k=31;else k=29}if((k|0)==29){k=0;o=d;if((c[j+304>>2]|0)>>>0<=o>>>0?(c[j+308>>2]|0)>>>0>o>>>0:0)l=e[j+276>>1]|0;else k=31}if((k|0)==31)l=Wa[c[29352>>2]&127](d)|0;c[n+48>>2]=l;k=(l>>>0)/20|0;c[s>>2]=k;c[q>>2]=d;j=c[p>>2]|0;if((k|0)>(j|0)){k=34;break}n=c[r>>2]|0;m=l>>>0<20;l=m?51:k<<1;m=m?0:0;j=c[n>>2]|0;o=c[j+128>>2]|0;k=((o|0)<0)<<31>>31;if((m|0)>(k|0)|(m|0)==(k|0)&l>>>0>o>>>0)break a;else o=n}if((k|0)==34){c[p>>2]=j+1;a[d+(j*20|0)>>0]=f;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=g;c[d+(j*20|0)+8>>2]=h;c[d+(j*20|0)+12>>2]=i;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;s=j;return s|0}else if((k|0)==35)return d|0}while(0);d=j+81|0;if(a[d>>0]|0){s=1;return s|0}if(a[j+82>>0]|0){s=1;return s|0}a[d>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;d=j+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[j+236>>2]|0;if(!d){s=1;return s|0}c[d+12>>2]=7;s=1;return s|0}function Ei(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=b+104|0;l=b+108|0;if((g|0)<0){while(1){h=d+1|0;i=a[h>>0]|0;if(i<<24>>24){m=d+16|0;kg(c[b>>2]|0,i<<24>>24,c[m>>2]|0);a[h>>0]=0;c[m>>2]=0}h=c[k>>2]|0;i=d-h|0;d=c[b>>2]|0;j=h;if(a[d+81>>0]|0){n=12;break}if((i|0)<0)i=(c[l>>2]|0)+-1|0;else i=(i|0)/20|0;d=j+(i*20|0)+1|0;if(!(a[d>>0]|0))break;d=j+(i*20|0)|0}if((n|0)==12){if((g|0)==-12)return;kg(d,g,f);return}if((g|0)==-3){c[h+(i*20|0)+16>>2]=f;a[d>>0]=-3;return}if(!f)return;c[h+(i*20|0)+16>>2]=f;a[d>>0]=g;if((g|0)!=-12)return;f=f+12|0;c[f>>2]=(c[f>>2]|0)+1;return}else{m=d+1|0;h=a[m>>0]|0;if(h<<24>>24){l=d+16|0;kg(c[b>>2]|0,h<<24>>24,c[l>>2]|0);a[m>>0]=0;c[l>>2]=0}h=(f|0)==0;if(!g)if(h)h=0;else{g=(Eu(f)|0)&1073741823;n=23}else if(h)h=0;else n=23;a:do if((n|0)==23){j=c[b>>2]|0;k=Sv(g|0,((g|0)<0)<<31>>31|0,1,0)|0;l=L()|0;b:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))n=33;else{h=0;break a}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[j+276>>1]|0)>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];b=j+284|0;c[b>>2]=(c[b>>2]|0)+1;break b}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];b=j+284|0;c[b>>2]=(c[b>>2]|0)+1;break b}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=33}while(0);if((n|0)==33)h=_d(j,k,l)|0;if(!h)h=0;else{ew(h|0,f|0,g|0)|0;a[h+g>>0]=0}}while(0);c[d+16>>2]=h;a[m>>0]=-7;return}}function Fi(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;f=c[e>>2]|0;n=c[b+12>>2]|0;o=n+64|0;k=c[o>>2]|0;l=b+149|0;j=(d[l>>0]|d[l+1>>0]<<8)&-769|256;a[l>>0]=j;a[l+1>>0]=j>>8;j=b+104|0;i=(c[j>>2]|0)+(((c[b+108>>2]|0)+-1|0)*20|0)|0;while(1){g=a[i>>0]|0;a:do if((g&255)<62){switch(g<<24>>24){case 2:{if(!(c[i+8>>2]|0))m=6;else{m=(d[l>>0]|d[l+1>>0]<<8)&-257;a[l>>0]=m;a[l+1>>0]=m>>8;m=6}break}case 0:case 1:{m=6;break}case 7:case 8:case 6:{h=(d[l>>0]|d[l+1>>0]<<8)&-769|512;a[l>>0]=h;a[l+1>>0]=h>>8;h=f;break a}case 3:case 5:{c[i+16>>2]=122;a[i+1>>0]=-5;h=f;break a}case 4:{c[i+16>>2]=123;a[i+1>>0]=-5;h=f;break a}case 10:{h=c[i+8>>2]|0;h=(h|0)>(f|0)?h:f;break a}case 9:{h=c[i+-16>>2]|0;f=(h|0)>(f|0)?h:f;break}default:{}}if((m|0)==6){m=0;h=d[l>>0]|d[l+1>>0]<<8|512;a[l>>0]=h;a[l+1>>0]=h>>8;h=f;break}g=i+8|0;h=c[g>>2]|0;if((h|0)<0){c[g>>2]=c[k+(~h<<2)>>2];h=f}else h=f}else h=f;while(0);if((i|0)==(c[j>>2]|0))break;else{f=h;i=i+-20|0}}f=c[b>>2]|0;g=c[o>>2]|0;if(!g){c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}if(f|0){if(c[f+480>>2]|0){Xd(f,g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}m=g;if((c[f+304>>2]|0)>>>0<=m>>>0?(c[f+308>>2]|0)>>>0>m>>>0:0){m=f+300|0;c[g>>2]=c[m>>2];c[m>>2]=g;c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}}function Gi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;i=k;g=a[b>>0]|0;if(g<<24>>24==1){f=4;Ra=k;return f|0}c[i>>2]=0;do if(g<<24>>24==4){g=c[b+4>>2]|0;if(g|0){f=g;Ra=k;return f|0}}else{a[b>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=b+16|0;g=b+56|0;g=th(b,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=b+4|0;if(!h){if(c[g>>2]|0)j=13}else{c[g>>2]=h;j=13}if((j|0)==13?(a[b>>0]|0)==0:0)a[b>>0]=2;break}}l=g;Ra=k;return l|0}while(0);l=cg(b,d,e,f,0)|0;Ra=k;return l|0}function Hi(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if(d){h=(Eu(d)|0)&1073741823;if((h+20|0)>>>0>2147483390)i=0;else{k=h;h=h+21|0;j=3}}else{k=0;h=21;j=3}do if((j|0)==3){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](h)|0;if(!i)break;else{j=i;h=i}}else{j=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){l=c[14978]|0;i=Tv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=l>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(!i){i=0;break}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h;j=i;h=i}i=j+20|0;ew(i|0,d|0,k+1|0)|0;c[j+4>>2]=i;c[j>>2]=e;c[j+8>>2]=f;c[j+12>>2]=g;c[j+16>>2]=0;i=mi(b+336|0,i,j)|0;if(!i){l=h;return l|0}h=b+81|0;if((a[h>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(h|0)c[h+12>>2]=7}if(c[b+480>>2]|0){Xd(b,i);l=0;return l|0}l=i;if((c[b+304>>2]|0)>>>0<=l>>>0?(c[b+308>>2]|0)>>>0>l>>>0:0){l=b+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;l=0;return l|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);l=0;return l|0}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);l=0;return l|0}}while(0);h=b+81|0;if(a[h>>0]|0){l=i;return l|0}if(a[b+82>>0]|0){l=i;return l|0}a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(!h){l=i;return l|0}c[h+12>>2]=7;l=i;return l|0}function Ii(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+256|0;w=y+224|0;g=y+216|0;o=y+208|0;h=y+200|0;u=y+232|0;v=y;p=u+4|0;c[p>>2]=v;c[u>>2]=0;q=u+8|0;c[q>>2]=200;r=u+12|0;s=u+16|0;t=u+21|0;c[r>>2]=0;c[r+4>>2]=0;b[r+8>>1]=0;c[s>>2]=14;l=v;m=37929;n=l+14|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));k=f+7|0;if(a[k>>0]|0){g=d[f+6>>0]|0;x=c[5504+(g<<2)>>2]|0;c[h>>2]=40;c[h+4>>2]=x;Eb(u,37944,h);if((d[k>>0]|0)>1){h=1;do{g=g+1|0;x=c[5504+(g<<2)>>2]|0;c[o>>2]=44;c[o+4>>2]=x;Eb(u,37944,o);h=h+1|0}while(h>>>0<(d[k>>0]|0)>>>0);x=h&255}else x=1}else{c[g>>2]=c[f>>2];Eb(u,37951,g);x=1}k=f+5|0;g=a[k>>0]|0;if(!(g&32))o=0;else{g=c[s>>2]|0;h=g+11|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;l=(c[p>>2]|0)+g|0;m=37957;n=l+11|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0))}else wb(u,37957,11);o=1;g=a[k>>0]|0}if((g&255)>63){g=c[s>>2]|0;h=g+14|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;l=(c[p>>2]|0)+g|0;m=37969;n=l+14|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0))}else wb(u,37969,14);o=o+1|0}g=c[s>>2]|0;h=g+1|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;a[(c[p>>2]|0)+g>>0]=41}else wb(u,34066,1);g=c[p>>2]|0;if((g|0?(a[g+(c[s>>2]|0)>>0]=0,c[r>>2]|0):0)?(a[t>>0]&4)==0:0)$d(u)|0;g=td(e,v)|0;if(g|0){f=pd(e)|0;c[w>>2]=f;f=Bb(31408,w)|0;c[j>>2]=f;f=g;e=0;c[i>>2]=e;Ra=y;return f|0}if(mb()|0){f=7;e=0;c[i>>2]=e;Ra=y;return f|0}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](24)|0;if(!g){f=7;e=g;c[i>>2]=e;Ra=y;return f|0}else h=g}else{g=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;k=59064;h=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&h>>>0>0){j=c[14978]|0;w=Tv(h|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](g)|0;if(!k){f=7;e=0;c[i>>2]=e;Ra=y;return f|0}g=Wa[c[29352>>2]&127](k)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g;h=k;g=k};c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+16>>2]=f;c[h+12>>2]=e;a[h+21>>0]=x;a[h+20>>0]=o;f=0;e=g;c[i>>2]=e;Ra=y;return f|0}function Ji(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o;n=e+40|0;g[n>>3]=1.0;if(!(a[b+20>>0]|0)){Ra=o;return 0}f=c[e+4>>2]|0;c[k>>2]=0;m=k+4|0;c[m>>2]=0;i=c[e>>2]|0;if((i|0)>0){h=b+21|0;b=f;f=0;while(1){if((a[b+5>>0]|0?(a[b+4>>0]|0)==2:0)?(j=c[b>>2]|0,l=d[h>>0]|0,(j|0)>=(l|0)):0)c[k+(j-l<<2)>>2]=f+1;f=f+1|0;if((f|0)>=(i|0))break;else b=b+12|0}b=c[k>>2]|0;if(b|0){b=b+-1|0;f=c[e+16>>2]|0;c[f+(b<<3)>>2]=1;a[f+(b<<3)+4>>0]=1;m=c[m>>2]|0;b=m+-1|0;if(!m){Ra=o;return 0}g[n>>3]=20.0;n=e+48|0;c[n>>2]=20;c[n+4>>2]=0;c[f+(b<<3)>>2]=2;a[f+(b<<3)+4>>0]=1;Ra=o;return 0}}g[n>>3]=2147483647.0;n=e+48|0;c[n>>2]=2147483647;c[n+4>>2]=0;Ra=o;return 0}function Ki(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Li(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](24)|0;if(!d){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=7;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e};c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d>>2]=a;c[b>>2]=d;g=0;return g|0}function Mi(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;gc(c[b>>2]|0)|0;c[b>>2]=0;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;b=a+20|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Ni(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+64|0;u=y+24|0;r=y+16|0;q=y+8|0;l=y;s=y+32|0;t=c[e>>2]|0;v=e+4|0;gc(c[v>>2]|0)|0;c[v>>2]=0;x=e+16|0;f=c[x>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{w=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[x>>2]=0;w=e+20|0;f=c[w>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;o=t+16|0;a:do if((h|0)>0){j=0;k=((d[(c[o>>2]|0)+5>>0]|0)>>>5&1^1)&255;b:while(1){f=c[i+(j<<2)>>2]|0;do if(f|0){g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)f=c[f+16>>2]|0;else{if(g&1)break;f=Gg(f,1)|0}if(f|0?(c[l>>2]=f,p=Bb(31408,l)|0,c[x+(k<<2)>>2]=p,(p|0)==0):0){f=7;break b}}while(0);j=j+1|0;if((j|0)>=(h|0))break a;else k=k+1|0}Ra=y;return f|0}while(0);p=t+12|0;m=c[(c[p>>2]|0)+112>>2]|0;h=s+4|0;c[h>>2]=0;c[s>>2]=0;l=s+8|0;c[l>>2]=0;i=s+12|0;c[i>>2]=m;m=s+16|0;c[m>>2]=0;a[s+20>>0]=0;n=s+21|0;a[n>>0]=0;wb(s,38205,7);f=c[w>>2]|0;if(f|0){c[q>>2]=f;Eb(s,38213,q)}g=c[c[o>>2]>>2]|0;if(!g)f=0;else f=(Eu(g)|0)&1073741823;j=c[m>>2]|0;k=j+f|0;if(k>>>0<(c[l>>2]|0)>>>0){if(f|0){c[m>>2]=k;ew((c[h>>2]|0)+j|0,g|0,f|0)|0}}else wb(s,g,f);f=c[x>>2]|0;if(f|0){c[r>>2]=f;Eb(s,38217,r)}f=c[h>>2]|0;if(((f|0)!=0?(a[f+(c[m>>2]|0)>>0]=0,(c[i>>2]|0)!=0):0)?(a[n>>0]&4)==0:0)f=$d(s)|0;else f=c[h>>2]|0;if(!f){x=7;Ra=y;return x|0}g=qd(c[p>>2]|0,f,-1,128,0,v,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{s=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(g|0){x=pd(c[p>>2]|0)|0;c[u>>2]=x;x=Bb(31408,u)|0;c[t+8>>2]=x;x=g;Ra=y;return x|0}e=e+8|0;t=e;t=Sv(c[t>>2]|0,c[t+4>>2]|0,1,0)|0;u=L()|0;c[e>>2]=t;c[e+4>>2]=u;if((Gc(c[v>>2]|0)|0)==100){x=0;Ra=y;return x|0}g=gc(c[v>>2]|0)|0;c[v>>2]=0;gc(0)|0;c[v>>2]=0;f=c[x>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[x>>2]=0;f=c[w>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;x=g;Ra=y;return x|0}function Oi(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;e=b;e=Sv(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;d=L()|0;c[b>>2]=e;c[b+4>>2]=d;b=a+4|0;if((Gc(c[b>>2]|0)|0)==100){e=0;return e|0}e=gc(c[b>>2]|0)|0;c[b>>2]=0;Si(a);return e|0}function Pi(a){a=a|0;return (c[a+4>>2]|0)==0|0}function Qi(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;i=d[(c[f>>2]|0)+21>>0]|0;if((i|0)<=(h|0)){if((yc(c[g>>2]|0,c[f+16+(h-i<<2)>>2]|0,-1,1,-1)|0)!=18)return 0;c[g+20>>2]=18;yc(c[g>>2]|0,31223,-1,1,0)|0;return 0}k=c[f+4>>2]|0;j=(k|0)==0;do if(j)l=29576;else{f=c[k+120>>2]|0;if(f|0?(e[k+144>>1]|0)>>>0>h>>>0:0){l=f+(h*40|0)|0;break}l=c[k>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576}while(0);f=l+8|0;i=e[f>>1]|0;if(i&2048|0)b[f>>1]=i&59391|4096;if(!j){i=c[k>>2]|0;h=k+40|0;f=c[h>>2]|0;if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7}else f=c[i+68>>2]&f;c[h>>2]=f}Dc(g,l);return 0}function Ri(a,b){a=a|0;b=b|0;var d=0;d=a+8|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Si(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;gc(c[b>>2]|0)|0;c[b>>2]=0;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;a=a+20|0;b=c[a>>2]|0;if(!b){c[a>>2]=0;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);c[a>>2]=0;return}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);c[a>>2]=0;return}}function Ti(b){b=b|0;var e=0,f=0,g=0;f=b+360|0;e=c[f>>2]|0;c[f>>2]=0;if(!e)return;b=c[b+4>>2]|0;if(b|0)do{f=b+149|0;g=(d[f>>0]|d[f+1>>0]<<8)&-4|1;a[f>>0]=g;a[f+1>>0]=g>>8;b=c[b+8>>2]|0}while((b|0)!=0);do{g=e;e=c[e+24>>2]|0;ng(g)}while((e|0)!=0);return}function Ui(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=a+20|0;if((c[g>>2]|0)>2){h=a+16|0;f=2;b=2;do{d=c[h>>2]|0;e=d+(f<<4)|0;if(!(c[d+(f<<4)+4>>2]|0)){lb(a,c[e>>2]|0);c[e>>2]=0}else{if((b|0)<(f|0)){d=d+(b<<4)|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2]}b=b+1|0}f=f+1|0}while((f|0)<(c[g>>2]|0));c[g>>2]=b;if((b|0)>=3)return}else c[g>>2]=2;b=a+16|0;d=c[b>>2]|0;e=a+412|0;if((d|0)==(e|0))return;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];c[e+16>>2]=c[d+16>>2];c[e+20>>2]=c[d+20>>2];c[e+24>>2]=c[d+24>>2];c[e+28>>2]=c[d+28>>2];lb(a,d);c[b>>2]=e;return}
- function jl(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=Ra;Ra=Ra+48|0;v=x+32|0;t=x+24|0;s=x+16|0;q=x+8|0;p=x;h=c[f>>2]|0;j=c[g+20>>2]|0;if(!j)w=-1e6;else{k=c[h+16>>2]|0;i=0;while(1)if((c[k+(i<<4)+12>>2]|0)==(j|0)){w=i;break}else i=i+1|0}o=c[g+4>>2]|0;l=c[g+24>>2]|0;m=c[l+20>>2]|0;if(!m){i=l+12|0;j=l+16|0}else{j=a[o>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=o;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}j=(i>>>0)%((c[l+8>>2]|0)>>>0)|0;i=m+(j<<3)|0;j=m+(j<<3)+4|0}i=c[i>>2]|0;a:do if(!i)j=59292;else{n=d[208+(d[o>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;i=i+-1|0;l=c[j+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=o;do{l=l+1|0;m=m+1|0;y=a[l>>0]|0;k=(d[208+(y&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!i){j=59292;break}}}while(0);o=h+16|0;m=c[(c[o>>2]|0)+(w<<4)>>2]|0;l=(w|0)==1;n=l?34855:34585;l=l?14:16;k=c[g>>2]|0;i=c[c[j+8>>2]>>2]|0;do if((a[h+165>>0]|0)==0?(r=f+200|0,(a[r>>0]|0)==0):0){j=c[h+312>>2]|0;if(j){h=$a[j&127](c[h+316>>2]|0,l,k,i,m,c[f+240>>2]|0)|0;if((h|0)==1){cd(f,39216,p);c[f+12>>2]=23;Ra=x;return}if((h|2|0)!=2){cd(f,39231,q);c[f+12>>2]=1;Ra=x;return}if(h|0){Ra=x;return}h=c[f>>2]|0;if(a[h+165>>0]|0)break;if(a[r>>0]|0)break}i=c[h+312>>2]|0;if(i|0){h=$a[i&127](c[h+316>>2]|0,9,n,0,m,c[f+240>>2]|0)|0;if((h|0)==1){cd(f,39216,s);c[f+12>>2]=23;Ra=x;return}if((h|2|0)==2){if(!h)break;Ra=x;return}else{cd(f,39231,t);c[f+12>>2]=1;Ra=x;return}}}while(0);m=f+8|0;h=c[m>>2]|0;if(!h){k=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))u=47;else{Ra=x;return}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break b}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;u=47}while(0);if((u|0)==47)j=_d(k,224,0)|0;if(!j){Ra=x;return}h=j+104|0;i=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=k;h=k+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;c[j+8>>2]=i;c[j+4>>2]=0;c[h>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[m>>2]=j;Di(j,61,0,1,0)|0;l=j}else l=h;k=c[g>>2]|0;c[v>>2]=c[(c[o>>2]|0)+(w<<4)>>2];c[v+4>>2]=34585;c[v+8>>2]=k;Ak(f,42882,v);k=c[m>>2]|0;h=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(w<<4)+12>>2]>>2]|0)+1|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;y=c[k+104>>2]|0;a[y+(j*20|0)>>0]=95;b[y+(j*20|0)+2>>1]=0;c[y+(j*20|0)+4>>2]=w;c[y+(j*20|0)+8>>2]=1;c[y+(j*20|0)+12>>2]=h;c[y+(j*20|0)+16>>2]=0;a[y+(j*20|0)+1>>0]=0}else Di(k,95,w,1,h)|0;j=c[g>>2]|0;i=l+108|0;h=c[i>>2]|0;if((c[l+112>>2]|0)>(h|0)){c[i>>2]=h+1;y=c[l+104>>2]|0;a[y+(h*20|0)>>0]=-110;b[y+(h*20|0)+2>>1]=0;c[y+(h*20|0)+4>>2]=w;c[y+(h*20|0)+8>>2]=0;c[y+(h*20|0)+12>>2]=0;c[y+(h*20|0)+16>>2]=0;a[y+(h*20|0)+1>>0]=0}else h=Di(l,146,w,0,0)|0;if(a[(c[l>>2]|0)+81>>0]|0){Ra=x;return}if((h|0)<0)h=(c[i>>2]|0)+-1|0;Ei(l,(c[l+104>>2]|0)+(h*20|0)|0,j,0);Ra=x;return}function kl(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;n=o+8|0;m=o;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))j=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);l=d+19|0;i=a[l>>0]|0;if(!(i<<24>>24)){j=d+44|0;k=(c[j>>2]|0)+1|0;c[j>>2]=k}else{k=i+-1<<24>>24;a[l>>0]=k;k=c[d+148+((k&255)<<2)>>2]|0}if((f|0)<2)cd(d,42933,m);i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;m=c[h+104>>2]|0;a[m+(j*20|0)>>0]=-120;b[m+(j*20|0)+2>>1]=0;c[m+(j*20|0)+4>>2]=f;c[m+(j*20|0)+8>>2]=k;c[m+(j*20|0)+12>>2]=g;c[m+(j*20|0)+16>>2]=0;a[m+(j*20|0)+1>>0]=0}else Di(h,136,f,k,g)|0;m=c[d+116>>2]|0;a[((m|0)==0?d:m)+21>>0]=1;c[n>>2]=c[(c[(c[d>>2]|0)+16>>2]|0)+(g<<4)>>2];c[n+4>>2]=34585;c[n+8>>2]=f;c[n+12>>2]=k;c[n+16>>2]=k;Ak(d,42948,n);if(!k){Ra=o;return}h=a[l>>0]|0;if((h&255)>=8){Ra=o;return}a[l>>0]=h+1<<24>>24;c[d+148+((h&255)<<2)>>2]=k;Ra=o;return}function ll(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+32|0;g=h;a:do if(!b){b=0;e=1}else{while(1){e=c[b+4>>2]|0;if(!(e&4096))break;if(!(e&262144))b=b+12|0;else b=(c[b+20>>2]|0)+4|0;b=c[b>>2]|0;if(!b){b=0;e=1;break a}}b:while(1){switch(a[b>>0]|0){case 51:{b=b+12|0;break}case 44:{if(ll(c[b+12>>2]|0,d)|0){b=1;break b}b=b+16|0;break}default:{e=0;break a}}b=c[b>>2]|0;if(!b){b=0;e=1;break a}}Ra=h;return b|0}while(0);c[g+4>>2]=145;c[g+8>>2]=0;c[g+12>>2]=0;f=g+20|0;a[f>>0]=0;c[g+24>>2]=d;if(e)b=0;else{_j(g,b)|0;b=a[f>>0]|0}g=b&255;Ra=h;return g|0}function ml(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d)return;if((e|0)<0){g=d;do{d=g+4|0;f=c[d>>2]|0;if(f&1|0)c[d>>2]=f&-2;if(((a[g>>0]|0)==-95?(h=g+20|0,i=c[h>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){d=0;f=i;do{ml(c[f+4+(d*20|0)>>2]|0,e);d=d+1|0;f=c[h>>2]|0}while((d|0)<(c[f>>2]|0))}ml(c[g+12>>2]|0,e);g=c[g+16>>2]|0}while((g|0)!=0);return}g=d;do{d=g+4|0;f=c[d>>2]|0;if(f&1|0?(b[g+36>>1]|0)==(e|0):0)c[d>>2]=f&-2;if(((a[g>>0]|0)==-95?(j=g+20|0,k=c[j>>2]|0,k|0):0)?(c[k>>2]|0)>0:0){d=0;f=k;do{ml(c[f+4+(d*20|0)>>2]|0,e);d=d+1|0;f=c[j>>2]|0}while((d|0)<(c[f>>2]|0))}ml(c[g+12>>2]|0,e);g=c[g+16>>2]|0}while((g|0)!=0);return}function nl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!a){j=0;return j|0}b=0;do{d=c[a+36>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}d=c[a+44>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}d=c[a+60>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}g=c[a>>2]|0;if((g|0)!=0?(h=c[g>>2]|0,(h|0)>0):0){f=0;e=h;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?h:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}g=c[a+40>>2]|0;if((g|0)!=0?(i=c[g>>2]|0,(i|0)>0):0){f=0;e=i;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?i:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}g=c[a+48>>2]|0;if((g|0)!=0?(j=c[g>>2]|0,(j|0)>0):0){f=0;e=j;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?j:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}a=c[a+52>>2]|0}while((a|0)!=0);return b|0}function ol(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=Ra;Ra=Ra+32|0;n=o;if(!f){n=0;Ra=o;return n|0}if(c[e+8>>2]&8192|0){n=0;Ra=o;return n|0}if(c[e+68>>2]|0){n=0;Ra=o;return n|0}if(c[e+60>>2]|0){n=0;Ra=o;return n|0}if((a[f>>0]|0)==44){i=0;do{i=(ol(d,e,c[f+16>>2]|0,g,h)|0)+i|0;f=c[f+12>>2]|0}while((a[f>>0]|0)==44)}else i=0;j=(c[f+4>>2]&1|0)==0;if(!h){if(!j)k=12}else{if(j){n=0;Ra=o;return n|0}if((b[f+36>>1]|0)==(g|0))k=12;else{n=0;Ra=o;return n|0}}if((k|0)==12?(b[f+36>>1]|0)!=(g|0):0){n=0;Ra=o;return n|0}m=n+20|0;a[m>>0]=3;c[n+4>>2]=127;c[n+8>>2]=128;c[n+24>>2]=g;_j(n,f)|0;if(!(a[m>>0]|0)){n=i;Ra=o;return n|0}i=i+1|0;if(!e){n=i;Ra=o;return n|0}h=n+4|0;k=n+8|0;l=n+12|0;m=n+16|0;j=e;do{r=dk(c[d>>2]|0,f,0,0)|0;ml(r,-1);c[n>>2]=d;c[h>>2]=g;c[k>>2]=g;c[l>>2]=0;c[m>>2]=c[j>>2];r=zl(n,r)|0;q=(c[j+8>>2]&8|0)==0;p=j+36|0;e=j+44|0;r=Xk(c[d>>2]|0,c[(q?p:e)>>2]|0,r)|0;c[(q?p:e)>>2]=r;j=c[j+52>>2]|0}while((j|0)!=0);Ra=o;return i|0}function pl(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+16|0;l=w;q=c[f+60>>2]|0;h=f+12|0;if((q|0)==0|(c[h>>2]|0)!=0){Ra=w;return}s=d+44|0;v=(c[s>>2]|0)+1|0;c[s>>2]=v;c[h>>2]=v;t=d+8|0;h=c[t>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))p=16;else{r=0;break a}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;break b}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;p=16}while(0);if((p|0)==16)i=_d(k,224,0)|0;if(!i)r=0;else{h=i+104|0;j=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));c[i>>2]=k;h=k+4|0;j=c[h>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[h>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=d;c[t>>2]=i;Di(i,61,0,1,0)|0;r=i}}else r=h;while(0);h=q+12|0;do if(!(uk(c[h>>2]|0,l)|0)){h=c[h>>2]|0;do if(h){if((a[h>>0]|0)!=-88){n=Jj(d,h,v)|0;p=67;break}k=c[t>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;o=c[k+104>>2]|0;a[o+(j*20|0)>>0]=78;b[o+(j*20|0)+2>>1]=0;c[o+(j*20|0)+4>>2]=h;c[o+(j*20|0)+8>>2]=v;c[o+(j*20|0)+12>>2]=0;c[o+(j*20|0)+16>>2]=0;a[o+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,v,0)|0;break}}else{n=Jj(d,0,v)|0;p=67}while(0);do if(((p|0)==67?(n|0)!=(v|0):0)?(m=c[t>>2]|0,m|0):0){h=m+108|0;i=c[h>>2]|0;if((c[m+112>>2]|0)>(i|0)){c[h>>2]=i+1;p=c[m+104>>2]|0;a[p+(i*20|0)>>0]=79;b[p+(i*20|0)+2>>1]=0;c[p+(i*20|0)+4>>2]=n;c[p+(i*20|0)+8>>2]=v;c[p+(i*20|0)+12>>2]=0;c[p+(i*20|0)+16>>2]=0;a[p+(i*20|0)+1>>0]=0;break}else{Di(m,79,n,v,0)|0;break}}while(0);i=r+108|0;h=c[i>>2]|0;j=r+112|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=15;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=v;c[p+(h*20|0)+8>>2]=0;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0}else Di(r,15,v,0,0)|0;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=20;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=v;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(r,20,v,g,0)|0;break}}else{h=c[l>>2]|0;j=r+108|0;i=c[j>>2]|0;k=r+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;o=c[r+104>>2]|0;a[o+(i*20|0)>>0]=70;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=v;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(r,70,h,v,0)|0;if(!h){h=c[j>>2]|0;if((c[k>>2]|0)>(h|0)){c[j>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=11;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=0;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(r,11,0,g,0)|0;break}}if((h|0)>-1){o=f+6|0;n=b[o>>1]|0;i=((h|0)<0)<<31>>31;g=h>>>0<8;if(g)if(h>>>0<2)j=0;else{j=40;l=h;k=i;do{j=(j&65535)+65526|0;l=cw(l|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&l>>>0<8);k=j&65535;j=l;p=43}else{if(h>>>0>255){j=40;m=h;k=i;do{j=(j&65535)+40|0;p=m;m=bw(m|0,k|0,4)|0;l=k;k=L()|0}while(l>>>0>0|(l|0)==0&p>>>0>4095);l=j&65535;j=m}else{l=40;k=i;j=h}if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;p=j;j=bw(j|0,k|0,1)|0;m=k;k=L()|0}while(m>>>0>0|(m|0)==0&p>>>0>31);k=l;p=43}else{k=l;p=43}}if((p|0)==43)j=(k&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535;if(n<<16>>16>j<<16>>16){if(g)if(h>>>0<2)h=0;else{j=40;do{j=(j&65535)+65526|0;h=cw(h|0,i|0,1)|0;i=L()|0}while(i>>>0<0|(i|0)==0&h>>>0<8);j=j&65535;p=58}else{if(h>>>0>255){j=40;do{j=(j&65535)+40|0;p=h;h=bw(h|0,i|0,4)|0;g=i;i=L()|0}while(g>>>0>0|(g|0)==0&p>>>0>4095);j=j&65535}else j=40;if(i>>>0>0|(i|0)==0&h>>>0>15){do{j=(j&65535)+10&65535;p=h;h=bw(h|0,i|0,1)|0;g=i;i=L()|0}while(g>>>0>0|(g|0)==0&p>>>0>31);p=58}else p=58}if((p|0)==58)h=(j&65535)+65526+(e[3648+((h&7)<<1)>>1]|0)&65535;b[o>>1]=h;p=f+8|0;c[p>>2]=c[p>>2]|16384}}}while(0);h=c[q+16>>2]|0;if(!h){Ra=w;return}l=c[s>>2]|0;m=l+1|0;c[f+16>>2]=m;l=l+2|0;c[s>>2]=l;do if((a[h>>0]|0)==-88){k=c[t>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;u=c[k+104>>2]|0;a[u+(j*20|0)>>0]=78;b[u+(j*20|0)+2>>1]=0;c[u+(j*20|0)+4>>2]=h;c[u+(j*20|0)+8>>2]=m;c[u+(j*20|0)+12>>2]=0;c[u+(j*20|0)+16>>2]=0;a[u+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,m,0)|0;break}}else{j=Jj(d,h,m)|0;if((j|0)!=(m|0)?(u=c[t>>2]|0,u|0):0){h=u+108|0;i=c[h>>2]|0;if((c[u+112>>2]|0)>(i|0)){c[h>>2]=i+1;u=c[u+104>>2]|0;a[u+(i*20|0)>>0]=79;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=j;c[u+(i*20|0)+8>>2]=m;c[u+(i*20|0)+12>>2]=0;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0;break}else{Di(u,79,j,m,0)|0;break}}}while(0);i=r+108|0;h=c[i>>2]|0;j=r+112|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;u=c[r+104>>2]|0;a[u+(h*20|0)>>0]=15;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=m;c[u+(h*20|0)+8>>2]=0;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else Di(r,15,m,0,0)|0;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;u=c[r+104>>2]|0;a[u+(h*20|0)>>0]=-104;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=v;c[u+(h*20|0)+8>>2]=l;c[u+(h*20|0)+12>>2]=m;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0;Ra=w;return}else{Di(r,152,v,l,m)|0;Ra=w;return}}function ql(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;Ba=Ra;Ra=Ra+176|0;xa=Ba+40|0;ja=Ba+32|0;V=Ba+24|0;y=Ba+16|0;q=Ba+8|0;m=Ba;va=Ba+80|0;U=Ba+48|0;wa=f+8|0;ua=c[wa>>2]|0;Aa=c[f>>2]|0;c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;c[U+16>>2]=0;c[U+20>>2]=0;c[U+24>>2]=0;if(!i)I=0;else I=(c[i>>2]|0)>63?0:i;$=U+8|0;c[$>>2]=I;_=Aa+76|0;ta=(b[_>>1]&16)==0?k:k&-257;i=c[g>>2]|0;if((i|0)>64){c[m>>2]=64;cd(f,43479,m);Aa=0;Ra=Ba;return Aa|0}da=ta&65535;ia=da&32;ea=(ia|0)!=0;o=ea?1:i;n=o*80|0;p=n+759&-16;m=p+72|0;a:do if(c[Aa+272>>2]|0)if(!(a[Aa+81>>0]|0))ka=15;else i=0;else{do if(!(0<0|(0==0?(e[Aa+276>>1]|0)>>>0<m>>>0:0))){k=Aa+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];za=Aa+284|0;c[za>>2]=(c[za>>2]|0)+1;break a}k=Aa+296|0;i=c[k>>2]|0;if(!i){i=Aa+292|0;break}else{c[k>>2]=c[i>>2];za=Aa+284|0;c[za>>2]=(c[za>>2]|0)+1;break a}}else i=Aa+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;ka=15}while(0);if((ka|0)==15)i=_d(Aa,m,0)|0;ra=Aa+81|0;if(a[ra>>0]|0){if(!i){Aa=0;Ra=Ba;return Aa|0}if(c[Aa+480>>2]|0){Xd(Aa,i);Aa=0;Ra=Ba;return Aa|0}za=i;if((c[Aa+304>>2]|0)>>>0<=za>>>0?(c[Aa+308>>2]|0)>>>0>za>>>0:0){Aa=Aa+300|0;c[i>>2]=c[Aa>>2];c[Aa>>2]=i;Aa=0;Ra=Ba;return Aa|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}else{Aa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}}c[i>>2]=f;ca=i+4|0;c[ca>>2]=g;X=i+8|0;c[X>>2]=I;c[i+16>>2]=h;c[i+12>>2]=j;ga=i+24|0;ha=i+28|0;c[ha>>2]=-1;c[ga>>2]=-1;za=i+46|0;a[za>>0]=o;sa=f+56|0;fa=(c[sa>>2]|0)+-1|0;c[sa>>2]=fa;na=i+32|0;c[na>>2]=fa;z=i+36|0;c[z>>2]=fa;fa=i+44|0;b[fa>>1]=ta;b[i+20>>1]=l;oa=f+132|0;pa=i+40|0;c[pa>>2]=c[oa>>2];k=i+47|0;A=k;B=A+33|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0));qa=i+752|0;gw(qa|0,0,n+72|0)|0;aa=i+488|0;c[U>>2]=i;ya=i+80|0;ba=U+4|0;c[ba>>2]=ya;u=i+p|0;O=U+12|0;c[O>>2]=u;c[u+48>>2]=u+56;b[u+40>>1]=0;b[u+44>>1]=3;c[u+36>>2]=0;u=i+492|0;c[u>>2]=0;c[ya>>2]=i;a[i+89>>0]=0;c[i+84>>2]=0;la=i+92|0;c[la>>2]=0;c[i+96>>2]=8;ma=i+100|0;c[ma>>2]=i+104;Il(ya,h,44);v=(o|0)==0;if(v){if(I|0)a[k>>0]=c[I>>2];if(da&256|0)a[i+51>>0]=1;nk(f,0,43507,q)}else{q=0;do{r=g+8+(q*72|0)+40|0;K=c[r>>2]|0;T=c[u>>2]|0;c[u>>2]=T+1;c[aa+8+(T<<2)>>2]=K;b:do if((a[g+8+(q*72|0)+37>>0]&4?(w=c[g+8+(q*72|0)+16>>2]|0,x=c[g+8+(q*72|0)+64>>2]|0,x|0):0)?(c[x>>2]|0)>0:0){s=w+42|0;t=w+4|0;m=0;h=0;c:while(1){n=b[s>>1]|0;if((m|0)>=(n|0))break;p=c[t>>2]|0;while(1){if(a[p+(m<<4)+15>>0]&2)break;k=m+1|0;if((k|0)<(n|0))m=k;else break c}p=c[f>>2]|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))ka=52;else break b;else{do if((e[p+276>>1]|0)>=52){k=p+300|0;n=c[k>>2]|0;if(n|0){c[k>>2]=c[n>>2];T=p+284|0;c[T>>2]=(c[T>>2]|0)+1;break d}k=p+296|0;n=c[k>>2]|0;if(!n){k=p+292|0;break}else{c[k>>2]=c[n>>2];T=p+284|0;c[T>>2]=(c[T>>2]|0)+1;break d}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;ka=52}while(0);if((ka|0)==52){ka=0;n=_d(p,52,0)|0}if(!n)break b;A=n;B=A+52|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));a[n>>0]=-94;b[n+34>>1]=-1;c[n+24>>2]=1;c[n+28>>2]=c[r>>2];b[n+32>>1]=m;c[n+44>>2]=w;k=c[x+4+(h*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;Ml(ya,ej(f,53,n,ej(f,166,k,0)|0)|0,1)|0;k=h+1|0;if((k|0)<(c[x>>2]|0)){m=m+1|0;h=k}else break b}c[y>>2]=c[w>>2];c[y+4>>2]=h;cd(f,43525,y)}while(0);q=q+1|0}while((q|0)<(c[g>>2]|0))}k=c[la>>2]|0;if((k|0)>0)do{T=k;k=k+-1|0;Nl(g,ya,k)}while((T|0)>1);e:do if(!(a[ra>>0]|0)){f:do if((c[i+92>>2]|0)>0){h=va+20|0;q=va+4|0;r=va+8|0;if(v){p=0;k=ya;while(1){m=c[k+20>>2]|0;n=m+(p*48|0)+10|0;if((b[n>>1]&2)==0?(T=m+(p*48|0)+40|0,(c[T>>2]|0)==0&(c[T+4>>2]|0)==0):0){Tj(f,c[m+(p*48|0)>>2]|0,c[z>>2]|0,16);b[n>>1]=b[n>>1]|4;k=c[ba>>2]|0}p=p+1|0;if((p|0)>=(c[k+12>>2]|0))break f}}p=0;k=ya;do{k=c[k+20>>2]|0;n=k+(p*48|0)+10|0;do if((b[n>>1]&2)==0?(T=k+(p*48|0)+40|0,(c[T>>2]|0)==0&(c[T+4>>2]|0)==0):0){k=k+(p*48|0)|0;m=c[k>>2]|0;c[va>>2]=0;c[va+4>>2]=0;c[va+8>>2]=0;c[va+12>>2]=0;c[va+16>>2]=0;c[va+20>>2]=0;c[va+24>>2]=0;a[h>>0]=1;c[q>>2]=146;c[r>>2]=128;if(m){_j(va,m)|0;if(!(a[h>>0]|0))break}Tj(f,c[k>>2]|0,c[z>>2]|0,16);b[n>>1]=b[n>>1]|4}while(0);p=p+1|0;k=c[ba>>2]|0}while((p|0)<(c[k+12>>2]|0))}while(0);T=(da&256|0)==0;g:do if(!T){h:do if((c[g>>2]|0)==1){H=c[g+48>>2]|0;p=c[g+24>>2]|0;h=c[j>>2]|0;i:do if((h|0)>0){n=0;while(1){k=c[j+4+(n*20|0)>>2]|0;j:do if(!k)k=0;else while(1){m=c[k+4>>2]|0;if(!(m&4096))break j;if(!(m&262144))k=k+12|0;else k=(c[k+20>>2]|0)+4|0;k=c[k>>2]|0;if(!k){k=0;break}}while(0);if(((a[k>>0]|0)==-94?(c[k+28>>2]|0)==(H|0):0)?(b[k+32>>1]|0)<0:0)break i;n=n+1|0;if((n|0)>=(h|0)){ka=92;break}}}else ka=92;while(0);k:do if((ka|0)==92){k=c[p+8>>2]|0;if(!k)break h;x=va+4|0;y=va+12|0;z=va+16|0;A=va+8|0;B=va+20|0;C=va+24|0;D=va+28|0;E=va+17|0;F=va+18|0;G=va+72|0;while(1){if(a[k+54>>0]|0){w=k+50|0;l:do if(!(b[w>>1]|0))m=0;else{s=k+4|0;t=k+40|0;u=k+32|0;v=k+12|0;m=0;do{c[va>>2]=ya;c[x>>2]=ya;c[y>>2]=0;a[z>>0]=0;c[A>>2]=0;c[B>>2]=2;c[C>>2]=0;c[D>>2]=H;a[E>>0]=1;a[F>>0]=1;p=b[(c[s>>2]|0)+(m<<1)>>1]|0;n=p<<16>>16;if(p<<16>>16==-2){c[y>>2]=c[(c[t>>2]|0)+4+(m*20|0)>>2];c[A>>2]=c[(c[u>>2]|0)+(m<<2)>>2];b[G>>1]=-2;n=Ul(va)|0}else{h=c[v>>2]|0;do if(p<<16>>16==(b[h+40>>1]|0))n=-1;else{if(p<<16>>16<=-1)break;a[z>>0]=a[(c[h+4>>2]|0)+(n<<4)+13>>0]|0;c[A>>2]=c[(c[u>>2]|0)+(m<<2)>>2]}while(0);b[G>>1]=n;n=Tl(va)|0}do if(n){p=0;while(1){ka=n+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0){if(b[n+12>>1]&2){ka=108;break}p=(p|0)==0?n:p}n=Tl(va)|0;if(!n){ka=111;break}}if((ka|0)==108){ka=0;break}else if((ka|0)==111){ka=0;if(!p){ka=112;break}else break}}else ka=112;while(0);if((ka|0)==112){r=c[(c[u>>2]|0)+(m<<2)>>2]|0;if((c[j>>2]|0)<=0)break l;q=0;m:while(1){h=c[j+4+(q*20|0)>>2]|0;n:do if(!h)n=0;else{n=h;while(1){p=c[n+4>>2]|0;if(!(p&4096))break n;if(!(p&262144))n=n+12|0;else n=(c[n+20>>2]|0)+4|0;n=c[n>>2]|0;if(!n){n=0;break}}}while(0);do if((a[n>>0]|0)==-94){if((b[n+32>>1]|0)!=(b[(c[s>>2]|0)+(m<<1)>>1]|0))break;if((c[n+28>>2]|0)!=(H|0))break;n=Yi(f,h)|0;if(!n)n=c[(c[f>>2]|0)+8>>2]|0;p=c[n>>2]|0;ka=a[p>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(n|0)!=0)){h=r;do{p=p+1|0;h=h+1|0;ka=a[p>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(n|0)!=0))}if(!n)break m}while(0);q=q+1|0;if((q|0)>=(c[j>>2]|0))break l}n=b[(c[s>>2]|0)+(m<<1)>>1]|0;if(n<<16>>16>-1)n=d[(c[(c[v>>2]|0)+4>>2]|0)+(n<<16>>16<<4)+12>>0]|0;else n=n<<16>>16==-1&1;if(!n)break l}m=m+1|0}while(m>>>0<(e[w>>1]|0)>>>0)}while(0);if((m|0)==(e[w>>1]|0))break k}k=c[k+20>>2]|0;if(!k)break h}}while(0);a[i+51>>0]=1;break g}while(0);if(!I){b[fa>>1]=b[fa>>1]|128;c[X>>2]=j}}while(0);if((((o|0)==1?(R=c[U>>2]|0,P=c[O>>2]|0,S=R+44|0,(b[S>>1]&32)==0):0)?(Q=c[R+4>>2]|0,M=c[Q+24>>2]|0,(c[M+56>>2]|0)==0):0)?(a[Q+45>>0]&2)==0:0){I=c[Q+48>>2]|0;J=R+80|0;K=P+36|0;c[K>>2]=0;b[P+42>>1]=0;c[va>>2]=J;c[va+4>>2]=J;c[va+12>>2]=0;a[va+16>>0]=0;c[va+8>>2]=0;c[va+20>>2]=130;c[va+24>>2]=0;c[va+28>>2]=I;a[va+17>>0]=1;a[va+18>>0]=1;b[va+72>>1]=-1;m=Tl(va)|0;do if(!m)ka=154;else{k=0;while(1){ka=m+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?b[m+12>>1]&130:0){ka=150;break}k=(k|0)==0?m:k;m=Tl(va)|0;if(!m){ka=152;break}}if((ka|0)==150)k=m;else if((ka|0)==152)if(!k){ka=154;break}c[K>>2]=4353;c[c[P+48>>2]>>2]=k;b[P+40>>1]=1;b[P+24>>1]=1;b[P+20>>1]=33}while(0);o:do if((ka|0)==154?(N=c[M+8>>2]|0,N|0):0){x=va+4|0;y=va+12|0;z=va+16|0;A=va+8|0;B=va+20|0;C=va+24|0;D=va+28|0;E=va+17|0;F=va+18|0;G=va+72|0;H=P+48|0;k=N;p:while(1){do if(a[k+54>>0]|0){if(c[k+36>>2]|0)break;w=k+50|0;m=b[w>>1]|0;if((m&65535)>3)break;u=k+55|0;u=(d[u>>0]|d[u+1>>0]<<8)<<4&128|2;v=u&65535;q:do if(!(m<<16>>16))m=0;else{q=k+4|0;r=k+40|0;s=k+32|0;t=k+12|0;m=0;while(1){c[va>>2]=J;c[x>>2]=J;c[y>>2]=0;a[z>>0]=0;c[A>>2]=0;c[B>>2]=v;c[C>>2]=0;c[D>>2]=I;a[E>>0]=1;a[F>>0]=1;p=b[(c[q>>2]|0)+(m<<1)>>1]|0;n=p<<16>>16;if(p<<16>>16==-2){c[y>>2]=c[(c[r>>2]|0)+4+(m*20|0)>>2];c[A>>2]=c[(c[s>>2]|0)+(m<<2)>>2];b[G>>1]=-2;p=Ul(va)|0}else{h=c[t>>2]|0;do if(p<<16>>16==(b[h+40>>1]|0))n=-1;else{if(p<<16>>16<=-1)break;a[z>>0]=a[(c[h+4>>2]|0)+(n<<4)+13>>0]|0;c[A>>2]=c[(c[s>>2]|0)+(m<<2)>>2]}while(0);b[G>>1]=n;p=Tl(va)|0}if(!p)break;n=0;while(1){ka=p+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?(b[p+12>>1]&u)<<16>>16:0){ka=172;break}n=(n|0)==0?p:n;p=Tl(va)|0;if(!p){ka=174;break}}if((ka|0)==172)n=p;else if((ka|0)==174)if(!n)break q;c[(c[H>>2]|0)+(m<<2)>>2]=n;m=m+1|0;if(m>>>0>=(e[w>>1]|0)>>>0)break q}}while(0);if((m|0)==(e[w>>1]|0))break p}while(0);k=c[k+20>>2]|0;if(!k)break o}ka=k+55|0;c[K>>2]=4609;if(!(((d[ka>>0]|d[ka+1>>0]<<8)&32)==0?(ka=Q+64|0,Q=k+64|0,!((c[Q>>2]&c[ka>>2]|0)==0?(c[Q+4>>2]&c[ka+4>>2]|0)==0:0)):0))c[K>>2]=4673;ka=m&65535;b[P+40>>1]=ka;b[P+24>>1]=ka;c[P+32>>2]=k;b[P+20>>1]=39}while(0);if(c[K>>2]|0){b[P+22>>1]=1;c[R+816>>2]=P;k=P+8|0;c[k>>2]=1;c[k+4>>2]=0;c[R+756>>2]=I;b[R+72>>1]=1;k=c[R+8>>2]|0;if(k|0)a[R+47>>0]=c[k>>2];if(!(b[S>>1]&256))ka=264;else{a[R+51>>0]=1;ka=264}}else ka=187}else ka=187;if((ka|0)==187){E=c[U>>2]|0;k=c[E+4>>2]|0;S=a[E+46>>0]|0;F=k+8+((S&255)*72|0)|0;H=c[c[E>>2]>>2]|0;G=c[O>>2]|0;I=G+56|0;J=G+48|0;c[J>>2]=I;K=G+40|0;b[K>>1]=0;M=G+44|0;b[M>>1]=3;N=G+36|0;c[N>>2]=0;z=U+24|0;c[z>>2]=2e4;do if(S<<24>>24){A=G+16|0;B=E+492|0;C=G+8|0;D=H+81|0;s=0;y=0;m=k+8|0;p=2e4;r=0;n=0;q=0;x=0;r:while(1){a[A>>0]=y;c[z>>2]=p+1e3;p=c[m+40>>2]|0;t=c[B>>2]|0;h=(t|0)>0;s:do if(h){k=0;while(1){if((c[E+496+(k<<2)>>2]|0)==(p|0))break;k=k+1|0;if((k|0)>=(t|0)){k=0;p=0;break s}}k=cw(1,0,k|0)|0;p=L()|0}else{k=0;p=0}while(0);u=C;c[u>>2]=k;c[u+4>>2]=p;u=a[m+36>>0]|0;w=((u|s)&10)==0;v=w?r:n;w=w?q:x;if(!(c[(c[m+16>>2]|0)+56>>2]|0)){k=Xl(U,v,w)|0;h=0;p=0}else{k=m+72|0;if(k>>>0>=F>>>0|h^1){h=0;p=0}else{q=m;h=0;p=0;while(1){if((h|0)==0&(p|0)==0?(a[q+108>>0]&10)==0:0){h=0;p=0}else{r=c[q+112>>2]|0;q=0;while(1){if((c[E+496+(q<<2)>>2]|0)==(r|0)){ka=202;break}q=q+1|0;if((q|0)>=(t|0)){q=0;r=0;break}}if((ka|0)==202){ka=0;q=cw(1,0,q|0)|0;r=L()|0}h=q|h;p=r|p}q=k+72|0;if(q>>>0<F>>>0){S=k;k=q;q=S}else break}}k=Wl(U,v,w,h,p)|0}do if(!k)if(!(a[(c[ba>>2]|0)+9>>0]|0)){k=C;n=c[k>>2]|n;k=c[k+4>>2]|x;ka=212;break}else{k=Yl(U,v,w,h,p)|0;ka=211;break}else ka=211;while(0);t:do if((ka|0)==211){ka=0;p=C;n=c[p>>2]|n;p=c[p+4>>2]|x;switch(k|0){case 0:{k=p;ka=212;break t}case 101:break;default:break r}Db(28,43626,V);k=p}while(0);if((ka|0)==212){ka=0;if(a[D>>0]|0){k=0;break}}m=m+72|0;if(m>>>0>=F>>>0){k=0;break}s=u;y=y+1|0;p=c[z>>2]|0;r=v;q=w;x=k}m=c[J>>2]|0;if((m|0)!=(I|0)){if(H|0){if(c[H+480>>2]|0){Xd(H,m);p=k;break}V=m;if((c[H+304>>2]|0)>>>0<=V>>>0?(c[H+308>>2]|0)>>>0>V>>>0:0){p=H+300|0;c[m>>2]=c[p>>2];c[p>>2]=m;p=k;break}}if(m)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);p=k;break}else{p=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);p=k;break}else p=k}else p=k}else p=0;while(0);k=c[N>>2]|0;do if(k&17408|0){if(k&1024|0?(Y=G+28|0,a[Y>>0]|0):0){k=G+32|0;m=c[k>>2]|0;do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Z=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);a[Y>>0]=0;c[k>>2]=0;break}if(k&16384|0?(Z=G+32|0,W=c[Z>>2]|0,W|0):0){k=c[W+16>>2]|0;u:do if(k){do if(H|0){m=H+480|0;if(!(c[m>>2]|0)){n=k;if((c[H+304>>2]|0)>>>0>n>>>0)break;if((c[H+308>>2]|0)>>>0<=n>>>0)break;ka=H+300|0;c[k>>2]=c[ka>>2];c[ka>>2]=k}else Xd(H,k);k=c[Z>>2]|0;ka=250;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);ka=248;break}else{ka=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);ka=248;break}}else ka=248;while(0);do if((ka|0)==248){k=c[Z>>2]|0;if(!H){ka=255;break}m=H+480|0;ka=250}while(0);do if((ka|0)==250){if(c[m>>2]|0){Xd(H,k);break}m=k;if((c[H+304>>2]|0)>>>0>m>>>0){ka=255;break}if((c[H+308>>2]|0)>>>0<=m>>>0){ka=255;break}Y=H+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k}while(0);do if((ka|0)==255){if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[Z>>2]=0}}while(0);c[J>>2]=I;b[K>>1]=0;b[M>>1]=3;c[N>>2]=0;if(p|0){ka=625;break}Jl(i,0);if(a[ra>>0]|0){ka=625;break}if(c[X>>2]|0){Jl(i,(e[i+72>>1]|0)+1&65535);if(!(a[ra>>0]|0))ka=264;else break}else ka=265}if((ka|0)==264?(c[X>>2]|0)==0:0)ka=265;if((ka|0)==265?!(0==0?(c[Aa+32>>2]&4096|0)==0:0):0){Z=i+64|0;c[Z>>2]=-1;c[Z+4>>2]=-1}if((c[f+36>>2]|0)==0?(a[ra>>0]|0)==0:0){v:do if((j|0)!=0&(d[za>>0]|0)>1?(b[_>>1]&256)==0:0){k=c[j>>2]|0;if((k|0)>0){q=0;h=0;n=0;while(1){m=c[j+4+(q*20|0)>>2]|0;if(!m){m=0;p=0}else{m=Pl(aa,m)|0;p=L()|0;k=c[j>>2]|0}m=m|h;n=p|n;q=q+1|0;if((q|0)>=(k|0)){t=m;s=n;break}else h=m}}else{t=0;s=0}r=c[$>>2]|0;if(!r)A=t;else{k=c[r>>2]|0;if((k|0)>0){q=0;h=k;m=0;k=0;do{n=c[r+4+(q*20|0)>>2]|0;if(!n){n=0;p=0}else{n=Pl(aa,n)|0;p=L()|0;h=c[r>>2]|0}m=n|m;k=p|k;q=q+1|0}while((q|0)<(h|0))}else{m=0;k=0}s=k|s;A=m|t}k=a[za>>0]|0;m=k&255;n=m+-1|0;if((k&255)>1){if(!T){z=n;x=-1;n=-1;while(1){y=qa+(z*80|0)|0;p=c[qa+(z*80|0)+64>>2]|0;h=c[ca>>2]|0;q=d[p+16>>0]|0;w:do if(!(a[h+8+(q*72|0)+36>>0]&8))m=x;else{w=p+8|0;u=c[w>>2]|0;w=c[w+4>>2]|0;if(!((u&A|0)==0&(w&s|0)==0)){m=x;break}t=c[ba>>2]|0;r=c[t+20>>2]|0;t=c[t+12>>2]|0;v=r+(t*48|0)|0;t=(t|0)>0;do if(t){h=h+8+(q*72|0)+40|0;p=r;do{aa=p+40|0;if(!((c[aa>>2]&u|0)==0?(c[aa+4>>2]&w|0)==0:0)){q=c[p>>2]|0;if(!(c[q+4>>2]&1)){m=x;break w}if((c[h>>2]|0)!=(b[q+36>>1]|0)){m=x;break w}}p=p+48|0}while(p>>>0<v>>>0);h=x&~u;p=n&~w;if(!t)break;n=r;do{aa=n+40|0;if(!((c[aa>>2]&u|0)==0?(c[aa+4>>2]&w|0)==0:0)){aa=n+10|0;b[aa>>1]=b[aa>>1]|4}n=n+48|0}while(n>>>0<v>>>0)}else{h=x&~u;p=n&~w}while(0);n=(k&255)+-1|0;if((n|0)!=(z|0)){fw(y|0,qa+(m*80|0)|0,(n-z|0)*80|0)|0;k=a[za>>0]|0}k=k+-1<<24>>24;a[za>>0]=k;o=o+-1|0;m=h;n=p}while(0);if((z|0)>1){aa=z;z=z+-1|0;x=m;m=aa}else{ba=o;J=m;I=n;break v}}}z=n;x=-1;n=-1;while(1){y=qa+(z*80|0)|0;p=c[qa+(z*80|0)+64>>2]|0;h=c[ca>>2]|0;q=d[p+16>>0]|0;x:do if(!(a[h+8+(q*72|0)+36>>0]&8))m=x;else{if(!(c[p+36>>2]&4096)){m=x;break}w=p+8|0;v=c[w>>2]|0;w=c[w+4>>2]|0;if(!((v&A|0)==0&(w&s|0)==0)){m=x;break}t=c[ba>>2]|0;r=c[t+20>>2]|0;t=c[t+12>>2]|0;u=r+(t*48|0)|0;t=(t|0)>0;do if(t){q=h+8+(q*72|0)+40|0;p=r;do{aa=p+40|0;if(!((c[aa>>2]&v|0)==0?(c[aa+4>>2]&w|0)==0:0)){h=c[p>>2]|0;if(!(c[h+4>>2]&1)){m=x;break x}if((c[q>>2]|0)!=(b[h+36>>1]|0)){m=x;break x}}p=p+48|0}while(p>>>0<u>>>0);h=x&~v;p=n&~w;if(!t)break;n=r;do{aa=n+40|0;if(!((c[aa>>2]&v|0)==0?(c[aa+4>>2]&w|0)==0:0)){aa=n+10|0;b[aa>>1]=b[aa>>1]|4}n=n+48|0}while(n>>>0<u>>>0)}else{h=x&~v;p=n&~w}while(0);n=(k&255)+-1|0;if((n|0)!=(z|0)){fw(y|0,qa+(m*80|0)|0,(n-z|0)*80|0)|0;k=a[za>>0]|0}k=k+-1<<24>>24;a[za>>0]=k;o=o+-1|0;m=h;n=p}while(0);if((z|0)>1){aa=z;z=z+-1|0;x=m;m=aa}else{ba=o;J=m;I=n;break}}}else{ba=o;J=-1;I=-1}}else{ba=o;J=-1;I=-1}while(0);ca=(c[i>>2]|0)+132|0;c[ca>>2]=(c[ca>>2]|0)+(b[i+72>>1]|0);do if(da&4){m=(c[i+816>>2]|0)+36|0;n=c[m>>2]|0;o=n&4096;if(!o){if(!(da&8)){D=0;break}k=c[g+24>>2]|0;if(c[k+56>>2]|0){D=0;break}if((da&16|0)==0&(n&8192|0)!=0){D=0;break}}else k=c[g+24>>2]|0;a[i+49>>0]=2-(o>>>12);if(!((n&64|0)==0?1:(c[k+36>>2]&32|0)!=0)){c[m>>2]=n&-65;D=ta&8}else D=0}else D=0;while(0);H=(ba|0)>0;if(H){E=Aa+16|0;F=f+116|0;G=i+49|0;w=ea^1;x=ua+108|0;y=ua+112|0;C=(l|0)==0|w;z=ua+104|0;A=f+40|0;B=i+51|0;u=qa;v=0;while(1){p=d[u+44>>0]|0;s=g+8+(p*72|0)+16|0;o=c[s>>2]|0;m=c[o+72>>2]|0;if(!m)t=-1e6;else{n=c[E>>2]|0;k=0;while(1)if((c[n+(k<<4)+12>>2]|0)==(m|0)){t=k;break}else k=k+1|0}q=c[u+64>>2]|0;r=o+36|0;do if(!(c[r>>2]&2)){if(c[o+12>>2]|0)break;k=c[q+36>>2]|0;if(k&1024|0){k=c[o+64>>2]|0;y:do if(!k)o=0;else while(1){if((c[k>>2]|0)==(Aa|0)){o=k;break y}k=c[k+24>>2]|0;if(!k){o=0;break}}while(0);m=c[g+8+(p*72|0)+40>>2]|0;k=c[x>>2]|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;ea=c[z>>2]|0;a[ea+(k*20|0)>>0]=-93;b[ea+(k*20|0)+2>>1]=0;c[ea+(k*20|0)+4>>2]=m;c[ea+(k*20|0)+8>>2]=0;c[ea+(k*20|0)+12>>2]=0;c[ea+(k*20|0)+16>>2]=0;a[ea+(k*20|0)+1>>0]=0}else k=Di(ua,163,m,0,0)|0;if(a[(c[ua>>2]|0)+81>>0]|0)break;if((k|0)<0)k=(c[x>>2]|0)+-1|0;m=c[z>>2]|0;n=m+(k*20|0)+1|0;if(a[n>>0]|0){Ei(ua,m+(k*20|0)|0,o,-12);break}if(!o)break;c[m+(k*20|0)+16>>2]=o;a[n>>0]=-12;ea=o+12|0;c[ea>>2]=(c[ea>>2]|0)+1;break}if(c[o+56>>2]|0)break;if(k&64|ia|0){Hj(f,t,c[o+28>>2]|0,0,c[o>>2]|0);break}m=g+8+(p*72|0)+40|0;if(!(a[G>>0]|0))k=108;else{c[ga>>2]=c[m>>2];k=109}Gj(f,c[m>>2]|0,t,o,k);do if(!(a[G>>0]|0)){if((b[o+42>>1]|0)>=64)break;if(c[r>>2]&32|0)break;n=g+8+(p*72|0)+56|0;k=c[n>>2]|0;n=c[n+4>>2]|0;if((k|0)==0&(n|0)==0)m=0;else{m=0;do{k=bw(k|0,n|0,1)|0;n=L()|0;m=m+1|0}while(!((k|0)==0&(n|0)==0))}if(a[(c[ua>>2]|0)+81>>0]|0)break;k=(c[x>>2]|0)+-1|0;n=c[z>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=m;a[o>>0]=-3;break}else{Ei(ua,n+(k*20|0)|0,m,-3);break}}while(0);k=c[x>>2]|0;if((k|0)<=0)break;b[(c[z>>2]|0)+((k+-1|0)*20|0)+2>>1]=D}while(0);h=q+36|0;z:do if(c[h>>2]&512|0){p=c[q+32>>2]|0;do if(c[r>>2]&32|0){ea=p+55|0;if(((d[ea>>0]|d[ea+1>>0]<<8)&3)!=2|w)break;c[u+8>>2]=c[u+4>>2];break z}while(0);do if(!(a[G>>0]|0)){if(!C){o=106;k=l;break}k=c[A>>2]|0;c[A>>2]=k+1;o=108}else{k=c[(c[s>>2]|0)+8>>2]|0;if((k|0)==0|(k|0)==(p|0))k=l;else{m=l;do{m=m+1|0;k=c[k+20>>2]|0}while(!((k|0)==0|(k|0)==(p|0)));k=m}c[ha>>2]=k;o=109}while(0);c[u+8>>2]=k;m=c[p+44>>2]|0;n=c[x>>2]|0;if((c[y>>2]|0)>(n|0)){c[x>>2]=n+1;ea=c[z>>2]|0;a[ea+(n*20|0)>>0]=o;b[ea+(n*20|0)+2>>1]=0;c[ea+(n*20|0)+4>>2]=k;c[ea+(n*20|0)+8>>2]=m;c[ea+(n*20|0)+12>>2]=t;c[ea+(n*20|0)+16>>2]=0;a[ea+(n*20|0)+1>>0]=0}else Di(ua,o,k,m,t)|0;m=c[wa>>2]|0;n=Ij(f,p)|0;A:do if(n|0){k=c[m>>2]|0;if(!(a[k+81>>0]|0)){da=c[m+104>>2]|0;ea=(c[m+108>>2]|0)+-1|0;a[da+(ea*20|0)+1>>0]=-9;c[da+(ea*20|0)+16>>2]=n;break}if(c[k+480>>2]|0)break;ea=(c[n>>2]|0)+-1|0;c[n>>2]=ea;if(ea|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break A}m=n;if((c[k+304>>2]|0)>>>0>m>>>0)break;if((c[k+308>>2]|0)>>>0<=m>>>0)break;ea=k+300|0;c[n>>2]=c[ea>>2];c[ea>>2]=n;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ea=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);ea=c[h>>2]|0;if(!((ea&15|0)!=0&(ea&32770|0)==0))break;if(b[fa>>1]&1)break;if((a[B>>0]|0)==2)break;k=c[x>>2]|0;if((k|0)<=0)break;b[(c[z>>2]|0)+((k+-1|0)*20|0)+2>>1]=2}while(0);B:do if((t|0)>-1){o=c[F>>2]|0;o=(o|0)==0?f:o;k=o+84|0;m=c[k>>2]|0;n=1<<t;if(m&n|0)break;c[k>>2]=m|n;if((t|0)!=1)break;r=c[o>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[r>>2]|0,0,r,va,0,542)|0;if(m|0){cd(o,32157,ja);c[o+12>>2]=m;break}ea=c[va>>2]|0;c[(c[k>>2]|0)+20>>2]=ea;k=c[r+92>>2]|0;o=c[ea+4>>2]|0;c[o+4>>2]=c[ea>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;h=o+36|0;q=(c[p>>2]|0)-(c[h>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[p>>2]=k;n=o+80|0;k=c[n>>2]|0;if(!k)break;m=k+-4|0;c[n>>2]=m;k=m;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ea=(c[14820]|0)+1|0;c[14820]=ea;c[14821]=(ea|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](m)|0;ka=421;break}else{k=Wa[c[29352>>2]&127](m)|0;ka=421}while(0);do if((ka|0)==421){ka=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ea=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ea=Se(c[o>>2]|0,p,q)|0;c[h>>2]=(c[p>>2]|0)-(q&65535);if((ea|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break B}while(0)}while(0);v=v+1|0;if((v|0)==(ba|0)){aa=x;break}else u=u+80|0}}else aa=ua+108|0;c[i+56>>2]=c[aa>>2];if(!(a[ra>>0]|0)){if(!H){Aa=i;Ra=Ba;return Aa|0}W=va+20|0;X=va+4|0;Y=va+8|0;Z=va+24|0;_=f+40|0;j=f+19|0;$=f+44|0;V=0;U=I;do{T=qa+(V*80|0)|0;m=qa+(V*80|0)+64|0;if(c[(c[m>>2]|0)+36>>2]&16384|0){O=qa+(V*80|0)+44|0;I=d[O>>0]|0;S=c[wa>>2]|0;R=S+108|0;k=c[R>>2]|0;P=S+112|0;if((c[P>>2]|0)>(k|0)){c[R>>2]=k+1;A=c[S+104>>2]|0;a[A+(k*20|0)>>0]=17;A=A+(k*20|0)+1|0;B=A+19|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0));Q=k}else Q=Di(S,17,0,0,0)|0;M=g+8+(I*72|0)+16|0;H=c[M>>2]|0;k=c[ma>>2]|0;ja=c[la>>2]|0;N=k+(ja*48|0)|0;G=c[m>>2]|0;C:do if((ja|0)>0){y=g+8+(I*72|0)+40|0;z=g+8+(I*72|0)+36|0;A=H+4|0;B=G+44|0;C=G+48|0;D=G+56|0;w=0;x=k;p=0;k=0;m=0;n=0;while(1){o=c[x>>2]|0;ja=G;do if((c[ja>>2]|0)==0&(c[ja+4>>2]|0)==0){if(b[x+10>>1]&2)break;if(c[o+4>>2]&1|0)break;ja=c[y>>2]|0;a[W>>0]=3;c[X>>2]=127;c[Y>>2]=128;c[Z>>2]=ja;_j(va,o)|0;if(!(a[W>>0]|0))break;ja=c[f>>2]|0;k=Xk(ja,k,dk(ja,o,0,0)|0)|0}while(0);do if((c[x+20>>2]|0)==(c[y>>2]|0)){o=e[x+12>>1]|0;if(!(o&130)){o=w;break}if(a[z>>0]&8?!((o&128|0)==0?1:(c[(c[x>>2]|0)+4>>2]&1|0)!=0):0){o=w;break}ja=x+32|0;if(!((c[ja>>2]&J|0)==0?(c[ja+4>>2]&U|0)==0:0)){o=w;break}o=c[x+28>>2]|0;if((o|0)<0){o=w;break}if(!(Vl(c[x>>2]|0,a[(c[(c[M>>2]|0)+4>>2]|0)+(o<<4)+13>>0]|0)|0)){o=w;break}ja=(o|0)>63;u=cw(1,0,o|0)|0;v=L()|0;u=ja?0:u;v=ja?-2147483648:v;if(!(p<<24>>24)){t=c[(c[A>>2]|0)+(o<<4)>>2]|0;c[xa>>2]=c[H>>2];c[xa+4>>2]=t;Db(284,43705,xa);t=1}else t=p;if(!((u&m|0)==0&(v&n|0)==0)){p=t;o=w;break}r=c[f>>2]|0;o=w+1|0;if((w|0)<(e[B>>1]|0))p=c[C>>2]|0;else{s=w+8&-8;q=s<<2;D:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))ka=471;else break C;else{do if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0<q>>>0:0))){h=r+300|0;p=c[h>>2]|0;if(p|0){c[h>>2]=c[p>>2];ja=r+284|0;c[ja>>2]=(c[ja>>2]|0)+1;break D}h=r+296|0;p=c[h>>2]|0;if(!p){p=r+292|0;break}else{c[h>>2]=c[p>>2];ja=r+284|0;c[ja>>2]=(c[ja>>2]|0)+1;break D}}else p=r+288|0;while(0);c[p>>2]=(c[p>>2]|0)+1;ka=471}while(0);if((ka|0)==471){ka=0;p=_d(r,q,0)|0}if(!p)break C;ew(p|0,c[C>>2]|0,e[B>>1]<<2|0)|0;h=c[C>>2]|0;E:do if((h|0)!=(D|0)){if(c[r+480>>2]|0){Xd(r,h);break}q=h;do if((c[r+304>>2]|0)>>>0<=q>>>0){if((c[r+308>>2]|0)>>>0<=q>>>0)break;ja=r+300|0;c[h>>2]=c[ja>>2];c[ja>>2]=h;break E}while(0);if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{ja=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[C>>2]=p;b[B>>1]=s}c[p+(w<<2)>>2]=x;p=t;m=u|m;n=v|n}else o=w;while(0);x=x+48|0;if(x>>>0>=N>>>0){ka=486;break}else w=o}}else{o=0;k=0;n=0;m=0;ka=486}while(0);F:do if((ka|0)==486){ka=0;K=o&65535;b[G+40>>1]=K;b[G+24>>1]=K;K=G+36|0;c[K>>2]=16961;D=g+8+(I*72|0)+56|0;B=D;h=c[B+4>>2]|0;B=c[B>>2]&~m;z=h&((n|-2147483648)^2147483647);E=H+42|0;y=b[E>>1]|0;p=y<<16>>16;A=(y<<16>>16<63?y:63)<<16>>16;y=y<<16>>16>0;if(y){n=0;m=o;do{ja=cw(1,0,n|0)|0;m=m+(((ja&B|0)!=0|((L()|0)&z|0)!=0)&1)|0;n=n+1|0}while((n|0)<(A|0))}else m=o;q=c[f>>2]|0;C=((h|0)<0?p+-62|0:1)+m|0;s=C&65535;u=C<<16;t=u>>16;h=(u>>14)+7&-8;u=u>>15;r=u+2|0;p=h+72+(t+7+u+r&-8)|0;o=((p|0)<0)<<31>>31;G:do if(!q){ja=Sv(p|0,o|0,-1,-1)|0;l=L()|0;if(l>>>0>0|(l|0)==0&ja>>>0>2147483390)break F;if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](p)|0;ka=513;break}m=Wa[c[29356>>2]&127](p)|0;if((c[14985]|0)>>>0<p>>>0)c[14985]=p;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){ja=c[14978]|0;l=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;ia=L()|0;c[14768]=((ia|0)<0|(ia|0)==0&l>>>0<=ja>>>0)&1}n=Wa[c[29340>>2]&127](m)|0;if(!n)break F;m=Wa[c[29352>>2]&127](n)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){F=n;break}c[14987]=m;F=n}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0)break F}else{do if(!(0<o>>>0|(0==(o|0)?(e[q+276>>1]|0)>>>0<p>>>0:0))){n=q+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ka=q+284|0;c[ka>>2]=(c[ka>>2]|0)+1;ka=513;break G}n=q+296|0;m=c[n>>2]|0;if(!m){m=q+292|0;break}else{c[n>>2]=c[m>>2];ka=q+284|0;c[ka>>2]=(c[ka>>2]|0)+1;ka=513;break G}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(q,p,o)|0;ka=513}while(0);if((ka|0)==513){ka=0;if(!m)break;else F=m}gw(F|0,0,p|0)|0;n=F+72|0;x=F+32|0;c[x>>2]=n;n=n+h|0;c[F+8>>2]=n;n=n+r|0;w=F+4|0;c[w>>2]=n;c[F+28>>2]=n+u;b[F+52>>1]=s;b[F+50>>1]=t+65535;c[G+32>>2]=F;c[F>>2]=43731;c[F+12>>2]=H;n=c[ma>>2]|0;if(n>>>0<N>>>0){v=g+8+(I*72|0)+40|0;u=g+8+(I*72|0)+36|0;m=0;p=0;s=0;while(1){do if((c[n+20>>2]|0)==(c[v>>2]|0)){o=e[n+12>>1]|0;if(!(o&130)){o=s;break}if(a[u>>0]&8?!((o&128|0)==0?1:(c[(c[n>>2]|0)+4>>2]&1|0)!=0):0){o=s;break}ja=n+32|0;if(!((c[ja>>2]&J|0)==0?(c[ja+4>>2]&U|0)==0:0)){o=s;break}q=c[n+28>>2]|0;if((q|0)<0){o=s;break}r=c[n>>2]|0;if(!(Vl(r,a[(c[(c[M>>2]|0)+4>>2]|0)+(q<<4)+13>>0]|0)|0)){o=s;break}ja=(q|0)>63;o=cw(1,0,q|0)|0;h=L()|0;o=ja?0:o;h=ja?-2147483648:h;if(!((o&p|0)==0&(h&s|0)==0)){o=s;break}t=o|p;h=h|s;b[(c[w>>2]|0)+(m<<1)>>1]=q;o=c[r+12>>2]|0;p=c[r+16>>2]|0;H:do if(!(c[o+4>>2]&256)){do if(p|0){if(!(c[p+4>>2]&256))break;o=Yi(f,p)|0;ka=531;break H}while(0);o=Yi(f,o)|0;if(o|0){ka=532;break}o=Yi(f,p)|0;ka=531}else{o=Yi(f,o)|0;ka=531}while(0);if((ka|0)==531){ka=0;if(!o)o=34049;else ka=532}if((ka|0)==532){ka=0;o=c[o>>2]|0}c[(c[x>>2]|0)+(m<<2)>>2]=o;m=m+1|0;p=t;o=h}else o=s;while(0);n=n+48|0;if(n>>>0>=N>>>0)break;else s=o}}else m=0;if(y){n=0;do{ja=cw(1,0,n|0)|0;if(!((ja&B|0)==0&((L()|0)&z|0)==0)){b[(c[w>>2]|0)+(m<<1)>>1]=n;c[(c[x>>2]|0)+(m<<2)>>2]=34049;m=m+1|0}n=n+1|0}while((n|0)<(A|0))}do if((c[D+4>>2]|0)<0){if((b[E>>1]|0)<=63){z=m;break}n=63;do{b[(c[w>>2]|0)+(m<<1)>>1]=n;c[(c[x>>2]|0)+(m<<2)>>2]=34049;m=m+1|0;n=n+1|0}while((n|0)<(b[E>>1]|0));z=m}else z=m;while(0);b[(c[w>>2]|0)+(z<<1)>>1]=-1;c[(c[x>>2]|0)+(z<<2)>>2]=34049;m=c[_>>2]|0;c[_>>2]=m+1;u=qa+(V*80|0)+8|0;c[u>>2]=m;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;ja=c[S+104>>2]|0;a[ja+(n*20|0)>>0]=112;b[ja+(n*20|0)+2>>1]=0;c[ja+(n*20|0)+4>>2]=m;c[ja+(n*20|0)+8>>2]=C;c[ja+(n*20|0)+12>>2]=0;c[ja+(n*20|0)+16>>2]=0;a[ja+(n*20|0)+1>>0]=0}else Di(S,112,m,C,0)|0;m=c[wa>>2]|0;o=Ij(f,F)|0;I:do if(o|0){n=c[m>>2]|0;if(!(a[n+81>>0]|0)){l=c[m+104>>2]|0;ja=(c[m+108>>2]|0)+-1|0;a[l+(ja*20|0)+1>>0]=-9;c[l+(ja*20|0)+16>>2]=o;break}if(c[n+480>>2]|0)break;ja=(c[o>>2]|0)+-1|0;c[o>>2]=ja;if(ja|0)break;m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break I}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;ja=m+300|0;c[o>>2]=c[ja>>2];c[ja>>2]=o;break I}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ja=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);v=c[(c[ya>>2]|0)+4>>2]|0;t=d[O>>0]|0;y=v+8+(t*72|0)+37|0;do if(!(a[y>>0]&16)){m=c[qa+(V*80|0)+4>>2]|0;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;x=c[S+104>>2]|0;a[x+(n*20|0)>>0]=36;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=m;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=0;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0;x=n;m=0;break}else{x=Di(S,36,m,0,0)|0;m=0;break}}else{p=c[v+8+(t*72|0)+28>>2]|0;m=c[R>>2]|0;if((c[P>>2]|0)>(m|0)){c[R>>2]=m+1;A=c[S+104>>2]|0;a[A+(m*20|0)>>0]=70;A=A+(m*20|0)+1|0;B=A+19|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}else m=Di(S,70,0,0,0)|0;n=c[v+8+(t*72|0)+24>>2]|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=13;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=p;c[ja+(o*20|0)+8>>2]=0;c[ja+(o*20|0)+12>>2]=n;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0}else Di(S,13,p,0,n)|0;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;x=c[S+104>>2]|0;a[x+(n*20|0)>>0]=14;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=p;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=0;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0;x=n;break}else{x=Di(S,14,p,0,0)|0;break}}while(0);q=(k|0)!=0;if(q){h=(c[sa>>2]|0)+-1|0;c[sa>>2]=h;Tj(f,k,h,16);c[K>>2]=c[K>>2]|131072}else h=0;n=a[j>>0]|0;if(!(n<<24>>24)){w=(c[$>>2]|0)+1|0;c[$>>2]=w}else{w=n+-1<<24>>24;a[j>>0]=w;w=c[f+148+((w&255)<<2)>>2]|0}s=qa+(V*80|0)+4|0;r=el(f,F,c[s>>2]|0,w,0,0,0,0)|0;n=c[u>>2]|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=-124;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=n;c[ja+(o*20|0)+8>>2]=w;c[ja+(o*20|0)+12>>2]=0;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0}else Di(S,132,n,w,0)|0;p=c[R>>2]|0;if((p|0)>0)b[(c[S+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=16;do if(q){o=c[S+12>>2]|0;n=~h;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,S,n);break}else{c[(c[o+64>>2]|0)+(n<<2)>>2]=p;break}}while(0);do if(!(a[y>>0]&16)){m=c[s>>2]|0;n=x+1|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=5;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=m;c[ja+(o*20|0)+8>>2]=n;c[ja+(o*20|0)+12>>2]=0;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0;break}else{Di(S,5,m,n,0)|0;break}}else{if((m|0)<0)m=(c[R>>2]|0)+-1|0;if(!(a[(c[S>>2]|0)+81>>0]|0))m=(c[S+104>>2]|0)+(m*20|0)|0;else m=59308;c[m+8>>2]=r+z;q=c[s>>2]|0;h=c[v+8+(t*72|0)+32>>2]|0;n=c[wa>>2]|0;if((x|0)<0)m=(c[n+108>>2]|0)+-1|0;else m=x;if(!(a[(c[n>>2]|0)+81>>0]|0))m=(c[n+104>>2]|0)+(m*20|0)|0;else m=59308;p=c[n+108>>2]|0;if((p|0)>(x|0)?(a[(c[f>>2]|0)+81>>0]|0)==0:0){n=x;while(1){o=m+4|0;J:do if((c[o>>2]|0)==(q|0))switch(a[m>>0]|0){case 90:{a[m>>0]=78;l=m+8|0;c[o>>2]=(c[l>>2]|0)+h;ja=m+12|0;c[l>>2]=c[ja>>2];c[ja>>2]=0;break J}case -128:{a[m>>0]=83;ja=m+8|0;c[o>>2]=c[ja>>2];c[ja>>2]=1;break J}default:break J}while(0);n=n+1|0;if((n|0)==(p|0))break;else m=m+20|0}}m=c[R>>2]|0;if((c[P>>2]|0)>(m|0)){c[R>>2]=m+1;ja=c[S+104>>2]|0;a[ja+(m*20|0)>>0]=11;b[ja+(m*20|0)+2>>1]=0;c[ja+(m*20|0)+4>>2]=0;c[ja+(m*20|0)+8>>2]=x;c[ja+(m*20|0)+12>>2]=0;c[ja+(m*20|0)+16>>2]=0;a[ja+(m*20|0)+1>>0]=0}else Di(S,11,0,x,0)|0;a[y>>0]=a[y>>0]&-17}while(0);n=c[R>>2]|0;if((n|0)>0)b[(c[S+104>>2]|0)+((n+-1|0)*20|0)+2>>1]=3;o=(a[(c[S>>2]|0)+81>>0]|0)==0;if(o)m=(c[S+104>>2]|0)+(((x|0)<0?n+-1|0:x)*20|0)|0;else m=59308;c[m+8>>2]=n;do if(w){m=a[j>>0]|0;if((m&255)>=8)break;a[j>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=w;n=c[R>>2]|0}while(0);if(o)m=(c[S+104>>2]|0)+(((Q|0)<0?n+-1|0:Q)*20|0)|0;else m=59308;c[m+8>>2]=n}while(0);if(k|0)ni(c[f>>2]|0,k);if(a[ra>>0]|0){ka=625;break e}}Kl(f,g,T,ta);c[qa+(V*80|0)+32>>2]=c[aa>>2];J=Ll(f,ua,i,V,T,J,U)|0;U=L()|0;c[na>>2]=c[qa+(V*80|0)+24>>2];V=V+1|0}while((V|0)<(ba|0));Ra=Ba;return i|0}}}else ka=625;while(0);if((ka|0)==625?(i|0)==0:0){Aa=0;Ra=Ba;return Aa|0}c[oa>>2]=c[pa>>2];k=a[za>>0]|0;K:do if(k<<24>>24){n=Aa+480|0;o=Aa+304|0;p=Aa+308|0;h=Aa+300|0;if(!Aa){m=0;while(1){xa=c[i+752+(m*80|0)+64>>2]|0;if((xa|0)!=0?(c[xa+36>>2]&2048|0)!=0:0){k=c[i+752+(m*80|0)+60>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{xa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-xa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);k=a[za>>0]|0}m=m+1|0;if(m>>>0>=(k&255)>>>0)break K}}m=0;do{xa=c[i+752+(m*80|0)+64>>2]|0;if((xa|0)!=0?(c[xa+36>>2]&2048|0)!=0:0){k=c[i+752+(m*80|0)+60>>2]|0;do if(k|0){if(c[n>>2]|0){Xd(Aa,k);break}xa=k;if((c[o>>2]|0)>>>0<=xa>>>0?(c[p>>2]|0)>>>0>xa>>>0:0){c[k>>2]=c[h>>2];c[h>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{xa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-xa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=a[za>>0]|0}m=m+1|0}while(m>>>0<(k&255)>>>0)}while(0);om(ya);m=i+60|0;k=c[m>>2]|0;if(k|0)do{c[m>>2]=c[k+52>>2];$l(Aa,k);k=c[m>>2]|0}while((k|0)!=0);if(Aa|0){if(c[Aa+480>>2]|0){Xd(Aa,i);Aa=0;Ra=Ba;return Aa|0}za=i;if((c[Aa+304>>2]|0)>>>0<=za>>>0?(c[Aa+308>>2]|0)>>>0>za>>>0:0){Aa=Aa+300|0;c[i>>2]=c[Aa>>2];c[Aa>>2]=i;Aa=0;Ra=Ba;return Aa|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}else{Aa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}return 0}function rl(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+16|0;u=P;O=c[f+8>>2]|0;K=a[k>>0]|0;y=k+4|0;M=c[y>>2]|0;if(!j)s=0;else s=d[j+1>>0]|0;if(!i)N=0;else N=(c[i>>2]|0)==0?0:i;F=(N|0)!=0;v=(s|0)!=0;do if(!(v|F)?(o=c[g+16>>2]|0,(o|0)>0):0){i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;L=c[O+104>>2]|0;a[L+(n*20|0)>>0]=47;b[L+(n*20|0)+2>>1]=0;c[L+(n*20|0)+4>>2]=o;c[L+(n*20|0)+8>>2]=l;c[L+(n*20|0)+12>>2]=1;c[L+(n*20|0)+16>>2]=0;a[L+(n*20|0)+1>>0]=0;break}else{Di(O,47,o,l,1)|0;break}}while(0);n=c[g>>2]|0;t=c[n>>2]|0;q=k+8|0;r=c[q>>2]|0;if(r){p=f+44|0;o=c[p>>2]|0;if((r+t|0)>(o|0)){i=0;E=16}else{C=0;L=r}}else{if(F){i=(c[c[N>>2]>>2]|0)+((a[N+32>>0]&1^1)&255)|0;p=f+44|0;o=i+(c[p>>2]|0)|0;c[p>>2]=o}else{o=f+44|0;i=0;p=o;o=c[o>>2]|0}r=o+1|0;c[q>>2]=r;E=16}if((E|0)==16){c[p>>2]=o+t;C=i;L=r}c[k+12>>2]=t;a:do if((h|0)>-1)if((t|0)>0){n=O+108|0;o=O+112|0;p=O+104|0;i=0;do{q=i+L|0;r=c[n>>2]|0;if((c[o>>2]|0)>(r|0)){c[n>>2]=r+1;G=c[p>>2]|0;a[G+(r*20|0)>>0]=90;b[G+(r*20|0)+2>>1]=0;c[G+(r*20|0)+4>>2]=h;c[G+(r*20|0)+8>>2]=i;c[G+(r*20|0)+12>>2]=q;c[G+(r*20|0)+16>>2]=0;a[G+(r*20|0)+1>>0]=0}else Di(O,90,h,i,q)|0;i=i+1|0}while((i|0)!=(t|0));G=t;x=L}else{G=t;x=L}else{switch(K<<24>>24){case 3:{G=t;x=L;break a}case 9:case 10:case 13:{i=1;break}default:i=0}if((K|2)<<24>>24!=14&((s|0)==0&F)){i=i|12;q=N+4|0;p=c[q>>2]|0;o=c[N>>2]|0;if((p|0)<(c[o>>2]|0)){n=p;do{p=b[o+4+(n*20|0)+16>>1]|0;if(!(p<<16>>16))n=n+1|0;else{n=n+1|0;b[(c[g>>2]|0)+4+(((p&65535)+-1|0)*20|0)+16>>1]=n-(c[q>>2]|0);o=c[N>>2]|0}}while((n|0)<(c[o>>2]|0));n=c[g>>2]|0;r=c[n>>2]|0}else r=t;if((r|0)>0){p=t;o=L;q=0;do{G=(b[n+4+(q*20|0)+16>>1]|0)==0;o=G?o:0;p=p+((G^1)<<31>>31)|0;q=q+1|0}while((q|0)<(r|0))}else{p=t;o=L}}else{p=t;o=L}c[u>>2]=L;a[u+4>>0]=i;if(c[g+12>>2]|0?(C|0)>0&(i&8)!=0:0){c[N+36>>2]=u;G=p;x=0;break}Oj(f,n,L,0,i);G=p;x=o}while(0);do if(v){b:do switch(a[j+1>>0]|0){case 2:{n=f+44|0;i=c[n>>2]|0;w=i+1|0;c[n>>2]=i+G;n=j+8|0;i=c[n>>2]|0;o=c[O>>2]|0;if(!(a[o+81>>0]|0)){j=c[O+104>>2]|0;u=j+(i*20|0)+1|0;v=j+(i*20|0)+16|0;kg(o,a[u>>0]|0,c[v>>2]|0);a[u>>0]=0;c[v>>2]=0;a[j+(i*20|0)>>0]=-86;i=c[n>>2]|0}if((i|0)<0)i=(c[O+108>>2]|0)+-1|0;if(!(a[(c[O>>2]|0)+81>>0]|0))i=(c[O+104>>2]|0)+(i*20|0)|0;else i=59308;a[i>>0]=73;c[i+4>>2]=1;c[i+8>>2]=w;t=O+108|0;i=c[t>>2]|0;h=i+G|0;u=G+-1|0;v=O+112|0;if((G|0)>0){s=O+104|0;r=0;do{q=Yi(f,c[(c[g>>2]|0)+4+(r*20|0)>>2]|0)|0;i=r+L|0;n=r+w|0;o=c[t>>2]|0;p=(c[v>>2]|0)>(o|0);do if((r|0)<(u|0))if(p){c[t>>2]=o+1;j=c[s>>2]|0;a[j+(o*20|0)>>0]=52;b[j+(o*20|0)+2>>1]=0;c[j+(o*20|0)+4>>2]=i;c[j+(o*20|0)+8>>2]=h;c[j+(o*20|0)+12>>2]=n;c[j+(o*20|0)+16>>2]=0;a[j+(o*20|0)+1>>0]=0;break}else{Di(O,52,i,h,n)|0;break}else if(p){c[t>>2]=o+1;j=c[s>>2]|0;a[j+(o*20|0)>>0]=53;b[j+(o*20|0)+2>>1]=0;c[j+(o*20|0)+4>>2]=i;c[j+(o*20|0)+8>>2]=l;c[j+(o*20|0)+12>>2]=n;c[j+(o*20|0)+16>>2]=0;a[j+(o*20|0)+1>>0]=0;break}else{Di(O,53,i,l,n)|0;break}while(0);do if(!(a[(c[O>>2]|0)+81>>0]|0)){i=(c[t>>2]|0)+-1|0;n=c[s>>2]|0;o=n+(i*20|0)+1|0;if(a[o>>0]|0){Ei(O,n+(i*20|0)|0,q,-2);break}if(q|0){c[n+(i*20|0)+16>>2]=q;a[o>>0]=-2}}while(0);i=c[t>>2]|0;if((i|0)>0)b[(c[s>>2]|0)+((i+-1|0)*20|0)+2>>1]=128;r=r+1|0}while((r|0)!=(G|0))}if((c[v>>2]|0)>(i|0)){c[t>>2]=i+1;j=c[O+104>>2]|0;a[j+(i*20|0)>>0]=78;b[j+(i*20|0)+2>>1]=0;c[j+(i*20|0)+4>>2]=L;c[j+(i*20|0)+8>>2]=w;c[j+(i*20|0)+12>>2]=u;c[j+(i*20|0)+16>>2]=0;a[j+(i*20|0)+1>>0]=0;break b}else{Di(O,78,L,w,u)|0;break b}}case 1:{i=c[j+8>>2]|0;n=c[O>>2]|0;if(!(a[n+81>>0]|0)){j=c[O+104>>2]|0;v=j+(i*20|0)+1|0;w=j+(i*20|0)+16|0;kg(n,a[v>>0]|0,c[w>>2]|0);a[v>>0]=0;c[w>>2]=0;a[j+(i*20|0)>>0]=-86}break}default:ym(f,c[j+4>>2]|0,l,G,L)}while(0);if((N|0)==0?(z=c[g+16>>2]|0,(z|0)>0):0){i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;j=c[O+104>>2]|0;a[j+(n*20|0)>>0]=47;b[j+(n*20|0)+2>>1]=0;c[j+(n*20|0)+4>>2]=z;c[j+(n*20|0)+8>>2]=l;c[j+(n*20|0)+12>>2]=1;c[j+(n*20|0)+16>>2]=0;a[j+(n*20|0)+1>>0]=0;break}else{Di(O,47,z,l,1)|0;break}}}while(0);c:do switch(K<<24>>24){case 1:{q=f+19|0;i=a[q>>0]|0;if(!(i<<24>>24)){K=f+44|0;p=(c[K>>2]|0)+1|0;c[K>>2]=p}else{p=i+-1<<24>>24;a[q>>0]=p;p=c[f+148+((p&255)<<2)>>2]|0}n=O+108|0;i=c[n>>2]|0;o=O+112|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=p;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(O,92,L,G,p)|0;i=c[n>>2]|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=M;c[K+(i*20|0)+8>>2]=p;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,M,p,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=G}if((p|0)!=0?(A=a[q>>0]|0,(A&255)<8):0){a[q>>0]=A+1<<24>>24;c[f+148+((A&255)<<2)>>2]=p;E=237}else E=237;break}case 2:{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;E=c[O+104>>2]|0;a[E+(n*20|0)>>0]=-123;b[E+(n*20|0)+2>>1]=0;c[E+(n*20|0)+4>>2]=M;c[E+(n*20|0)+8>>2]=L;c[E+(n*20|0)+12>>2]=G;c[E+(n*20|0)+16>>2]=0;a[E+(n*20|0)+1>>0]=0;E=237;break c}else{Di(O,133,M,L,G)|0;E=237;break c}}case 12:case 14:case 6:case 5:{t=C+1|0;h=(C|0)==0;do if(h){i=f+19|0;n=a[i>>0]|0;if(!(n<<24>>24)){E=f+44|0;s=(c[E>>2]|0)+1|0;c[E>>2]=s;break}else{s=n+-1<<24>>24;a[i>>0]=s;s=c[f+148+((s&255)<<2)>>2]|0;break}}else{i=f+32|0;n=c[i>>2]|0;o=f+28|0;p=c[o>>2]|0;if((p|0)>(C|0)){c[i>>2]=n+t;c[o>>2]=p-t;s=n;break}else{E=f+44|0;s=c[E>>2]|0;c[E>>2]=s+t;s=s+1|0;break}}while(0);p=s+C|0;q=O+108|0;i=c[q>>2]|0;r=O+112|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;E=c[O+104>>2]|0;a[E+(i*20|0)>>0]=92;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=L;c[E+(i*20|0)+8>>2]=G;c[E+(i*20|0)+12>>2]=p;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0}else Di(O,92,L,G,p)|0;if(K<<24>>24==6){i=c[q>>2]|0;n=i+4|0;o=M+1|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=29;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=o;c[K+(i*20|0)+8>>2]=n;c[K+(i*20|0)+12>>2]=s;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,29,o,n,s)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){K=c[O+104>>2]|0;a[K+(i*20|0)+1>>0]=-3;c[K+(i*20|0)+16>>2]=0}i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=o;c[K+(i*20|0)+8>>2]=s;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,o,s,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){L=c[O+104>>2]|0;a[L+(i*20|0)+1>>0]=-3;c[L+(i*20|0)+16>>2]=G}}if(!F){o=f+19|0;i=a[o>>0]|0;if(!(i<<24>>24)){L=f+44|0;n=(c[L>>2]|0)+1|0;c[L>>2]=n}else{n=i+-1<<24>>24;a[o>>0]=n;n=c[f+148+((n&255)<<2)>>2]|0}i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=121;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=n;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,121,M,n,0)|0;i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=122;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=s;c[L+(i*20|0)+12>>2]=n;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,122,M,s,n)|0;i=c[q>>2]|0;if((i|0)>0)b[(c[O+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=8;if(n|0?(H=a[o>>0]|0,(H&255)<8):0){a[o>>0]=H+1<<24>>24;c[f+148+((H&255)<<2)>>2]=n}}else zm(f,N,g,p,x,1,C);if(!h){i=f+28|0;if((c[i>>2]|0)>(C|0)){E=237;break c}c[i>>2]=t;c[f+32>>2]=s;E=237;break c}if((s|0)!=0?(I=f+19|0,J=a[I>>0]|0,(J&255)<8):0){a[I>>0]=J+1<<24>>24;c[f+148+((J&255)<<2)>>2]=s;E=237}else E=237;break}case 11:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}h=f+19|0;i=a[h>>0]|0;if(!(i<<24>>24)){K=f+44|0;s=(c[K>>2]|0)+1|0;c[K>>2]=s}else{s=i+-1<<24>>24;a[h>>0]=s;s=c[f+148+((s&255)<<2)>>2]|0}p=c[k+16>>2]|0;q=O+108|0;i=c[q>>2]|0;r=O+112|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=s;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,92,L,G,s)|0;n=c[O>>2]|0;do if(a[n+81>>0]|0){if((G|0)!=-12)kg(n,G,p)}else{if((i|0)<0)i=(c[q>>2]|0)+-1|0;n=c[O+104>>2]|0;o=n+(i*20|0)|0;if((G|0)<=-1?(B=n+(i*20|0)+1|0,(a[B>>0]|0)==0):0){if((G|0)==-3){c[n+(i*20|0)+16>>2]=p;a[B>>0]=-3;break}if(!p)break;c[n+(i*20|0)+16>>2]=p;a[B>>0]=G;if((G|0)!=-12)break;K=p+12|0;c[K>>2]=(c[K>>2]|0)+1;break}Ei(O,o,p,G)}while(0);i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=M;c[K+(i*20|0)+8>>2]=s;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,M,s,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=G}if(s|0?(D=a[h>>0]|0,(D&255)<8):0){a[h>>0]=D+1<<24>>24;c[f+148+((D&255)<<2)>>2]=s}break}case 3:{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;E=c[O+104>>2]|0;a[E+(n*20|0)>>0]=70;b[E+(n*20|0)+2>>1]=0;c[E+(n*20|0)+4>>2]=1;c[E+(n*20|0)+8>>2]=M;c[E+(n*20|0)+12>>2]=0;c[E+(n*20|0)+16>>2]=0;a[E+(n*20|0)+1>>0]=0;E=237;break c}else{Di(O,70,1,M,0)|0;E=237;break c}}case 10:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}break}case 9:case 13:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}if(K<<24>>24==13){i=c[y>>2]|0;n=O+108|0;o=c[n>>2]|0;if((c[O+112>>2]|0)>(o|0)){c[n>>2]=o+1;f=c[O+104>>2]|0;a[f+(o*20|0)>>0]=14;b[f+(o*20|0)+2>>1]=0;c[f+(o*20|0)+4>>2]=i;c[f+(o*20|0)+8>>2]=0;c[f+(o*20|0)+12>>2]=0;c[f+(o*20|0)+16>>2]=0;a[f+(o*20|0)+1>>0]=0;break c}else{Di(O,14,i,0,0)|0;break c}}else{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;f=c[O+104>>2]|0;a[f+(n*20|0)>>0]=81;b[f+(n*20|0)+2>>1]=0;c[f+(n*20|0)+4>>2]=L;c[f+(n*20|0)+8>>2]=G;c[f+(n*20|0)+12>>2]=0;c[f+(n*20|0)+16>>2]=0;a[f+(n*20|0)+1>>0]=0;break c}else{Di(O,81,L,G,0)|0;break c}}}case 7:case 8:{v=c[k+20>>2]|0;w=c[v>>2]|0;l=f+19|0;i=a[l>>0]|0;if(!(i<<24>>24)){i=f+44|0;j=(c[i>>2]|0)+1|0;c[i>>2]=j;i=0}else{i=i+-1<<24>>24;a[l>>0]=i;j=c[f+148+((i&255)<<2)>>2]|0}z=w+2|0;y=(z|0)==1;do if(y)if(!(i<<24>>24)){J=f+44|0;x=(c[J>>2]|0)+1|0;c[J>>2]=x;break}else{x=i+-1<<24>>24;a[l>>0]=x;x=c[f+148+((x&255)<<2)>>2]|0;break}else{i=f+32|0;n=c[i>>2]|0;o=f+28|0;p=c[o>>2]|0;if((p|0)<(z|0)){J=f+44|0;x=c[J>>2]|0;c[J>>2]=x+z;x=x+1|0;break}else{c[i>>2]=n+z;c[o>>2]=p-z;x=n;break}}while(0);u=x+w|0;r=u+1|0;q=K<<24>>24==8;if(q){n=M+1|0;o=O+108|0;i=c[o>>2]|0;p=O+112|0;if((c[p>>2]|0)>(i|0)){c[o>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=29;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=0;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,29,n,0,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){t=c[O+104>>2]|0;a[t+(i*20|0)+1>>0]=-3;c[t+(i*20|0)+16>>2]=G;t=i;h=o;s=p}else{t=i;h=o;s=p}}else{t=0;h=O+108|0;s=O+112|0}i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=r;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(O,92,L,G,r)|0;if(q){i=M+1|0;n=c[h>>2]|0;if((c[s>>2]|0)>(n|0)){c[h>>2]=n+1;K=c[O+104>>2]|0;a[K+(n*20|0)>>0]=-124;b[K+(n*20|0)+2>>1]=0;c[K+(n*20|0)+4>>2]=i;c[K+(n*20|0)+8>>2]=r;c[K+(n*20|0)+12>>2]=0;c[K+(n*20|0)+16>>2]=0;a[K+(n*20|0)+1>>0]=0}else Di(O,132,i,r,0)|0;i=c[h>>2]|0;if((i|0)>0)b[(c[O+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=16}if((w|0)>0){n=L+-1|0;o=O+104|0;i=0;do{p=n+(e[v+4+(i*20|0)+16>>1]|0)|0;q=i+x|0;r=c[h>>2]|0;if((c[s>>2]|0)>(r|0)){c[h>>2]=r+1;L=c[o>>2]|0;a[L+(r*20|0)>>0]=79;b[L+(r*20|0)+2>>1]=0;c[L+(r*20|0)+4>>2]=p;c[L+(r*20|0)+8>>2]=q;c[L+(r*20|0)+12>>2]=0;c[L+(r*20|0)+16>>2]=0;a[L+(r*20|0)+1>>0]=0}else Di(O,79,p,q,0)|0;i=i+1|0}while((i|0)!=(w|0))}i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=120;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=u;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,120,M,u,0)|0;i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=92;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=x;c[L+(i*20|0)+8>>2]=z;c[L+(i*20|0)+12>>2]=j;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,92,x,z,j)|0;i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=-124;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=j;c[L+(i*20|0)+12>>2]=x;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else i=Di(O,132,M,j,x)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=z}if(t|0){n=c[h>>2]|0;if(!(a[(c[O>>2]|0)+81>>0]|0))i=(c[O+104>>2]|0)+(((t|0)<0?n+-1|0:t)*20|0)|0;else i=59308;c[i+8>>2]=n}do if(j|0){i=a[l>>0]|0;if((i&255)>=8)break;a[l>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=j}while(0);if(!y){i=f+28|0;if((c[i>>2]|0)>=(z|0)){E=237;break c}c[i>>2]=z;c[f+32>>2]=x;E=237;break c}if(!x){E=237;break c}i=a[l>>0]|0;if((i&255)>=8){E=237;break c}a[l>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=x;E=237;break}default:E=237}while(0);if((E|0)==237?N|0:0){Ra=P;return}i=c[g+12>>2]|0;if(!i){Ra=P;return}n=O+108|0;o=c[n>>2]|0;if((c[O+112>>2]|0)>(o|0)){c[n>>2]=o+1;O=c[O+104>>2]|0;a[O+(o*20|0)>>0]=49;b[O+(o*20|0)+2>>1]=0;c[O+(o*20|0)+4>>2]=i;c[O+(o*20|0)+8>>2]=m;c[O+(o*20|0)+12>>2]=0;c[O+(o*20|0)+16>>2]=0;a[O+(o*20|0)+1>>0]=0;Ra=P;return}else{Di(O,49,i,m,0)|0;Ra=P;return}}function sl(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;D=c[e>>2]|0;E=D+8|0;F=c[E>>2]|0;G=c[e+4>>2]|0;I=c[D>>2]|0;H=e+46|0;g=a[H>>0]|0;if(!(g<<24>>24))f=F+12|0;else{f=F+12|0;u=e+51|0;v=F+108|0;w=F+112|0;x=F+104|0;y=D+44|0;s=g&255;do{t=s;s=s+-1|0;m=c[e+752+(s*80|0)+64>>2]|0;r=e+752+(s*80|0)+45|0;do if((a[r>>0]|0)==-86){g=c[f>>2]|0;h=~c[e+752+(s*80|0)+24>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0){mk(g,F,h);break}else{c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];break}}else{do if((((((a[u>>0]|0)==2?(t|0)==(d[H>>0]|0):0)?(c[m+36>>2]&512|0)!=0:0)?(A=c[m+32>>2]|0,q=A+55|0,((d[q>>0]|d[q+1>>0]<<8)&128)!=0):0)?(q=b[m+30>>1]|0,B=q&65535,q<<16>>16!=0):0)?(b[(c[A+8>>2]|0)+(B<<1)>>1]|0)>35:0){l=(c[y>>2]|0)+1|0;k=e+752+(s*80|0)+8|0;g=0;do{h=c[k>>2]|0;i=g+l|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;q=c[x>>2]|0;a[q+(j*20|0)>>0]=90;b[q+(j*20|0)+2>>1]=0;c[q+(j*20|0)+4>>2]=h;c[q+(j*20|0)+8>>2]=g;c[q+(j*20|0)+12>>2]=i;c[q+(j*20|0)+16>>2]=0;a[q+(j*20|0)+1>>0]=0}else Di(F,90,h,g,i)|0;g=g+1|0}while((g|0)!=(B|0));i=a[r>>0]|0;c[y>>2]=B+1+(c[y>>2]|0);i=i<<24>>24==4?22:25;h=c[k>>2]|0;g=c[v>>2]|0;if((c[w>>2]|0)>(g|0)){c[v>>2]=g+1;q=c[x>>2]|0;a[q+(g*20|0)>>0]=i;b[q+(g*20|0)+2>>1]=0;c[q+(g*20|0)+4>>2]=h;c[q+(g*20|0)+8>>2]=0;c[q+(g*20|0)+12>>2]=l;c[q+(g*20|0)+16>>2]=0;a[q+(g*20|0)+1>>0]=0}else g=Di(F,i,h,0,l)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){q=c[x>>2]|0;a[q+(g*20|0)+1>>0]=-3;c[q+(g*20|0)+16>>2]=B}h=c[e+752+(s*80|0)+52>>2]|0;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;q=c[x>>2]|0;a[q+(i*20|0)>>0]=11;b[q+(i*20|0)+2>>1]=0;c[q+(i*20|0)+4>>2]=1;c[q+(i*20|0)+8>>2]=h;c[q+(i*20|0)+12>>2]=0;c[q+(i*20|0)+16>>2]=0;a[q+(i*20|0)+1>>0]=0;break}else{Di(F,11,1,h,0)|0;break}}else g=0;while(0);h=c[f>>2]|0;i=~c[e+752+(s*80|0)+24>>2];if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0)mk(h,F,i);else c[(c[h+64>>2]|0)+(i<<2)>>2]=c[v>>2];h=a[r>>0]|0;i=c[e+752+(s*80|0)+48>>2]|0;j=c[e+752+(s*80|0)+52>>2]|0;k=d[e+752+(s*80|0)+46>>0]|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;q=c[x>>2]|0;a[q+(l*20|0)>>0]=h;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=i;c[q+(l*20|0)+8>>2]=j;c[q+(l*20|0)+12>>2]=k;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0}else Di(F,h&255,i,j,k)|0;h=c[v>>2]|0;if((h|0)>0)b[(c[x>>2]|0)+((h+-1|0)*20|0)+2>>1]=d[e+752+(s*80|0)+47>>0]|0;if(g|0){if(!(a[(c[F>>2]|0)+81>>0]|0))g=(c[x>>2]|0)+(((g|0)<0?h+-1|0:g)*20|0)|0;else g=59308;c[g+8>>2]=h}}while(0);q=m+36|0;if(c[q>>2]&2048|0?(z=e+752+(s*80|0)+56|0,(c[z>>2]|0)>0):0){g=c[f>>2]|0;h=~c[e+752+(s*80|0)+16>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,F,h);else c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];g=c[z>>2]|0;if((g|0)>0){p=e+752+(s*80|0)+8|0;o=g;n=(c[e+752+(s*80|0)+60>>2]|0)+((g+-1|0)*20|0)|0;l=c[v>>2]|0;h=a[(c[F>>2]|0)+81>>0]|0;while(1){m=n+4|0;g=c[m>>2]|0;if(!(h<<24>>24))g=(c[x>>2]|0)+(((g|0)<-1?l+-1|0:g+1|0)*20|0)|0;else g=59308;c[g+8>>2]=l;j=n+16|0;do if((a[j>>0]|0)!=-86){k=c[n+12>>2]|0;if(k|0){g=c[p>>2]|0;h=l+2|0;i=c[n+8>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;J=c[x>>2]|0;a[J+(l*20|0)>>0]=26;b[J+(l*20|0)+2>>1]=0;c[J+(l*20|0)+4>>2]=g;c[J+(l*20|0)+8>>2]=h;c[J+(l*20|0)+12>>2]=i;c[J+(l*20|0)+16>>2]=0;a[J+(l*20|0)+1>>0]=0;g=l}else g=Di(F,26,g,h,i)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){J=c[x>>2]|0;a[J+(g*20|0)+1>>0]=-3;c[J+(g*20|0)+16>>2]=k}}g=a[j>>0]|0;h=c[n>>2]|0;i=c[m>>2]|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;J=c[x>>2]|0;a[J+(j*20|0)>>0]=g;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=h;c[J+(j*20|0)+8>>2]=i;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0;break}else{Di(F,g&255,h,i,0)|0;break}}while(0);g=c[m>>2]|0;l=c[v>>2]|0;h=a[(c[F>>2]|0)+81>>0]|0;if(!(h<<24>>24))g=(c[x>>2]|0)+((((g|0)<1?l:g)+-1|0)*20|0)|0;else g=59308;c[g+8>>2]=l;if((o|0)<=1)break;else{o=o+-1|0;n=n+-20|0}}}}g=c[f>>2]|0;h=~c[e+752+(s*80|0)+12>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,F,h);else c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];g=e+752+(s*80|0)+20|0;h=c[g>>2]|0;if(h|0){i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=11;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=0;c[J+(i*20|0)+8>>2]=h;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else Di(F,11,0,h,0)|0;g=c[g>>2]|0;h=c[v>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){J=h+-1|0;p=c[x>>2]|0;c[p+(((g|0)<0?J:g)*20|0)+8>>2]=h;g=p+(((g|0)<2?J:g+-2|0)*20|0)|0}else{c[14829]=h;g=59308}c[g+8>>2]=h}g=c[e+752+(s*80|0)+40>>2]|0;do if(g|0){h=(c[e+752+(s*80|0)+36>>2]|0)>>>1;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=49;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=h;c[J+(i*20|0)+8>>2]=g;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0;break}else{Di(F,49,h,g,0)|0;break}}while(0);h=c[e+752+(s*80|0)>>2]|0;if(h|0){i=c[q>>2]|0;g=c[v>>2]|0;if((c[w>>2]|0)>(g|0)){c[v>>2]=g+1;j=c[x>>2]|0;a[j+(g*20|0)>>0]=47;b[j+(g*20|0)+2>>1]=0;c[j+(g*20|0)+4>>2]=h;c[j+(g*20|0)+8>>2]=0;c[j+(g*20|0)+12>>2]=0;c[j+(g*20|0)+16>>2]=0;a[j+(g*20|0)+1>>0]=0;j=g}else j=Di(F,47,h,0,0)|0;do if(!(i&64)){g=c[e+752+(s*80|0)+4>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=-127;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=g;c[J+(h*20|0)+8>>2]=0;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,129,g,0,0)|0;break}}while(0);if(!(i&512)){if(i&8192|0?c[e+752+(s*80|0)+56>>2]|0:0)C=87}else C=87;do if((C|0)==87){C=0;g=c[e+752+(s*80|0)+8>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=-127;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=g;c[J+(h*20|0)+8>>2]=0;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,129,g,0,0)|0;break}}while(0);do if((a[r>>0]|0)==66){g=c[e+752+(s*80|0)+48>>2]|0;h=c[e+752+(s*80|0)+28>>2]|0;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=g;c[J+(i*20|0)+8>>2]=h;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0;break}else{Di(F,12,g,h,0)|0;break}}else{g=c[e+752+(s*80|0)+28>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=11;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=0;c[J+(h*20|0)+8>>2]=g;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,11,0,g,0)|0;break}}while(0);h=c[v>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))g=(c[x>>2]|0)+(((j|0)<0?h+-1|0:j)*20|0)|0;else g=59308;c[g+8>>2]=h}}while((t|0)>1)}f=c[f>>2]|0;g=~c[e+36>>2];if(((c[f+56>>2]|0)+(c[f+60>>2]|0)|0)<0)mk(f,F,g);else c[(c[f+64>>2]|0)+(g<<2)>>2]=c[F+108>>2];f=a[H>>0]|0;a:do if(f<<24>>24){y=e+49|0;z=I+81|0;x=F+108|0;A=F+104|0;B=f&255;v=e+752|0;w=0;while(1){g=d[v+44>>0]|0;i=c[G+8+(g*72|0)+16>>2]|0;h=c[v+64>>2]|0;do if(!(a[G+8+(g*72|0)+37>>0]&16)){g=c[h+36>>2]|0;if(!(g&576)){if(!(g&8192))break;g=v+56|0}else g=h+32|0;g=c[g>>2]|0;if(g|0){if(a[y>>0]|0?(c[(c[g+12>>2]|0)+36>>2]&32|0)==0:0)break;if(!(a[z>>0]|0)){r=c[x>>2]|0;j=c[v+32>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))h=(c[A>>2]|0)+(((j|0)<0?r+-1|0:j)*20|0)|0;else h=59308;if((j|0)<(r|0)){s=i+36|0;t=v+8|0;u=g+52|0;q=i+8|0;p=g+4|0;o=c[v+4>>2]|0;while(1){m=h+4|0;b:do if((c[m>>2]|0)==(o|0))switch(a[h>>0]|0){case 90:{n=h+8|0;g=c[n>>2]|0;if(c[s>>2]&32){i=q;while(1){i=c[i>>2]|0;J=i+55|0;if(((d[J>>0]|d[J+1>>0]<<8)&3)==2)break;else i=i+20|0}g=b[(c[i+4>>2]|0)+(g<<1)>>1]|0}k=g&65535;g=b[u>>1]|0;if(!(g<<16>>16))break b;l=c[p>>2]|0;i=g&65535;g=0;while(1){if((b[l+(g<<1)>>1]|0)==k<<16>>16)break;g=g+1|0;if(g>>>0>=i>>>0)break b}if((g&65535)<<16>>16<=-1)break b;c[n>>2]=g<<16>>16;c[m>>2]=c[t>>2];break b}case -128:{c[m>>2]=c[t>>2];a[h>>0]=-121;break b}case 21:{c[m>>2]=c[t>>2];break b}default:break b}while(0);j=j+1|0;if((j|0)==(r|0))break;else h=h+20|0}}}}}else{k=c[v+32>>2]|0;m=c[v+4>>2]|0;l=c[G+8+(g*72|0)+32>>2]|0;h=c[E>>2]|0;if((k|0)<0)g=(c[h+108>>2]|0)+-1|0;else g=k;if(!(a[(c[h>>2]|0)+81>>0]|0))g=(c[h+104>>2]|0)+(g*20|0)|0;else g=59308;j=c[h+108>>2]|0;if((j|0)>(k|0)?(a[(c[D>>2]|0)+81>>0]|0)==0:0){i=g;g=k;while(1){h=i+4|0;c:do if((c[h>>2]|0)==(m|0))switch(a[i>>0]|0){case 90:{a[i>>0]=78;C=i+8|0;c[h>>2]=(c[C>>2]|0)+l;J=i+12|0;c[C>>2]=c[J>>2];c[J>>2]=0;break c}case -128:{a[i>>0]=73;c[h>>2]=0;c[i+12>>2]=0;break c}default:break c}while(0);g=g+1|0;if((g|0)==(j|0))break;else i=i+20|0}}}while(0);w=w+1|0;if(w>>>0>=B>>>0)break;else v=v+80|0}c[D+132>>2]=c[e+40>>2];if(f<<24>>24){h=I+480|0;i=I+304|0;j=I+308|0;k=I+300|0;if(!I){g=0;while(1){J=c[e+752+(g*80|0)+64>>2]|0;if((J|0)!=0?(c[J+36>>2]&2048|0)!=0:0){f=c[e+752+(g*80|0)+60>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{J=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=a[H>>0]|0}g=g+1|0;if(g>>>0>=(f&255)>>>0)break a}}g=0;do{J=c[e+752+(g*80|0)+64>>2]|0;if((J|0)!=0?(c[J+36>>2]&2048|0)!=0:0){f=c[e+752+(g*80|0)+60>>2]|0;do if(f|0){if(c[h>>2]|0){Xd(I,f);break}J=f;if((c[i>>2]|0)>>>0<=J>>>0?(c[j>>2]|0)>>>0>J>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{J=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=a[H>>0]|0}g=g+1|0}while(g>>>0<(f&255)>>>0)}}else c[D+132>>2]=c[e+40>>2];while(0);om(e+80|0);g=e+60|0;f=c[g>>2]|0;if(f|0)do{c[g>>2]=c[f+52>>2];$l(I,f);f=c[g>>2]|0}while((f|0)!=0);if(I|0){if(c[I+480>>2]|0){Xd(I,e);return}J=e;if((c[I+304>>2]|0)>>>0<=J>>>0?(c[I+308>>2]|0)>>>0>J>>>0:0){J=I+300|0;c[e>>2]=c[J>>2];c[J>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{J=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function tl(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;E=d+8|0;H=c[E>>2]|0;a[f>>0]=1;C=f+44|0;if((c[C>>2]|0)>0){r=d+56|0;s=d+19|0;t=d+32|0;u=d+28|0;v=H+108|0;w=H+112|0;y=d+44|0;z=H+104|0;A=f+36|0;B=H+12|0;p=c[f+40>>2]|0;g=0;q=0;while(1){k=c[(c[p>>2]|0)+20>>2]|0;if(!k){h=0;o=0}else{j=c[k>>2]|0;do if((j|0)==1){h=a[s>>0]|0;if(!(h<<24>>24)){h=(c[y>>2]|0)+1|0;c[y>>2]=h;break}else{h=h+-1<<24>>24;a[s>>0]=h;h=c[d+148+((h&255)<<2)>>2]|0;break}}else{h=c[t>>2]|0;i=c[u>>2]|0;if((i|0)<(j|0)){h=c[y>>2]|0;c[y>>2]=h+j;h=h+1|0;break}else{c[t>>2]=h+j;c[u>>2]=i-j;break}}while(0);Oj(d,k,h,0,1);o=j}i=c[p+12>>2]|0;if((i|0)>-1){n=(c[r>>2]|0)+-1|0;c[r>>2]=n;ym(d,i,n,1,h)}else n=0;m=p+4|0;do if(c[(c[m>>2]|0)+4>>2]&32){if((o|0)>0){l=0;i=k+4|0;while(1){j=Yi(d,c[i>>2]|0)|0;l=l+1|0;k=(j|0)!=0;if(!((l|0)<(o|0)&(k^1)))break;else i=i+20|0}if(!k)G=19}else G=19;if((G|0)==19){G=0;j=c[(c[d>>2]|0)+8>>2]|0}if(!g)if(!(c[A>>2]|0))g=0;else{g=(c[y>>2]|0)+1|0;c[y>>2]=g}i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;l=c[z>>2]|0;a[l+(i*20|0)>>0]=82;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=g;c[l+(i*20|0)+8>>2]=0;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else i=Di(H,82,g,0,0)|0;if(!(a[(c[H>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[v>>2]|0)+-1|0;k=c[z>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(H,k+(i*20|0)|0,j,-2);break}if(j){c[k+(i*20|0)+16>>2]=j;a[l>>0]=-2}}}while(0);i=c[p+8>>2]|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;l=c[z>>2]|0;a[l+(j*20|0)>>0]=-102;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=h;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(H,154,0,h,i)|0;i=c[m>>2]|0;j=c[H>>2]|0;do if(a[j+81>>0]|0){if(c[i+4>>2]&16|0){if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}m=i;if((c[j+304>>2]|0)>>>0<=m>>>0?(c[j+308>>2]|0)>>>0>m>>>0:0){m=j+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}else{l=c[z>>2]|0;m=(c[v>>2]|0)+-1|0;a[l+(m*20|0)+1>>0]=-8;c[l+(m*20|0)+16>>2]=i}while(0);i=c[v>>2]|0;if((i|0)>0)b[(c[z>>2]|0)+((i+-1|0)*20|0)+2>>1]=o&255;if((o|0)==1){if(h|0?(x=a[s>>0]|0,(x&255)<8):0){a[s>>0]=x+1<<24>>24;c[d+148+((x&255)<<2)>>2]=h}}else if((c[u>>2]|0)<(o|0)){c[u>>2]=o;c[t>>2]=h}do if(n|0){i=c[B>>2]|0;h=~n;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0){mk(i,H,h);break}else{c[(c[i+64>>2]|0)+(h<<2)>>2]=c[v>>2];break}}while(0);q=q+1|0;if((q|0)>=(c[C>>2]|0))break;else p=p+16|0}if(g)G=63;else G=62}else G=62;if((G|0)==62)if((e|0)==0|(c[f+36>>2]|0)==0)i=0;else{g=e;G=63}do if((G|0)==63){h=H+108|0;i=c[h>>2]|0;if((c[H+112>>2]|0)>(i|0)){c[h>>2]=i+1;C=c[H+104>>2]|0;a[C+(i*20|0)>>0]=18;b[C+(i*20|0)+2>>1]=0;c[C+(i*20|0)+4>>2]=g;c[C+(i*20|0)+8>>2]=0;c[C+(i*20|0)+12>>2]=0;c[C+(i*20|0)+16>>2]=0;a[C+(i*20|0)+1>>0]=0;break}else{i=Di(H,18,g,0,0)|0;break}}while(0);n=f+36|0;if((c[n>>2]|0)>0){l=c[f+28>>2]|0;m=0;while(1){g=c[l+20>>2]|0;o=c[l+16>>2]|0;do if(g){if((a[g>>0]|0)!=-88){F=Jj(d,g,o)|0;G=75;break}k=c[E>>2]|0;g=c[g+28>>2]|0;h=k+108|0;j=c[h>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[h>>2]=j+1;C=c[k+104>>2]|0;a[C+(j*20|0)>>0]=78;b[C+(j*20|0)+2>>1]=0;c[C+(j*20|0)+4>>2]=g;c[C+(j*20|0)+8>>2]=o;c[C+(j*20|0)+12>>2]=0;c[C+(j*20|0)+16>>2]=0;a[C+(j*20|0)+1>>0]=0;break}else{Di(k,78,g,o,0)|0;break}}else{F=Jj(d,0,o)|0;G=75}while(0);do if(((G|0)==75?(G=0,(F|0)!=(o|0)):0)?(D=c[E>>2]|0,D|0):0){g=D+108|0;h=c[g>>2]|0;if((c[D+112>>2]|0)>(h|0)){c[g>>2]=h+1;C=c[D+104>>2]|0;a[C+(h*20|0)>>0]=79;b[C+(h*20|0)+2>>1]=0;c[C+(h*20|0)+4>>2]=F;c[C+(h*20|0)+8>>2]=o;c[C+(h*20|0)+12>>2]=0;c[C+(h*20|0)+16>>2]=0;a[C+(h*20|0)+1>>0]=0;break}else{Di(D,79,F,o,0)|0;break}}while(0);m=m+1|0;if((m|0)>=(c[n>>2]|0))break;else l=l+24|0}}a[f>>0]=0;if(!i)return;h=c[H+108>>2]|0;if(!(a[(c[H>>2]|0)+81>>0]|0))g=(c[H+104>>2]|0)+(((i|0)<0?h+-1|0:i)*20|0)|0;else g=59308;c[g+8>>2]=h;return}function ul(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;t=u;r=c[d+8>>2]|0;s=f+44|0;if((c[s>>2]|0)==(0-(c[f+32>>2]|0)|0)){Ra=u;return}g=c[f+16>>2]|0;h=c[f+20>>2]|0;p=r+108|0;i=c[p>>2]|0;q=r+112|0;if((c[q>>2]|0)>(i|0)){c[p>>2]=i+1;o=c[r+104>>2]|0;a[o+(i*20|0)>>0]=73;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=0;c[o+(i*20|0)+8>>2]=g;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(r,73,0,g,h)|0;if((c[s>>2]|0)<=0){Ra=u;return}o=r+104|0;m=c[f+40>>2]|0;n=0;while(1){k=m+12|0;do if((c[k>>2]|0)>-1){j=c[(c[m>>2]|0)+20>>2]|0;if(j|0?(c[j>>2]|0)==1:0){i=c[d>>2]|0;f=i+272|0;a:do if(c[f>>2]|0)if(!(a[i+81>>0]|0))l=21;else{j=0;f=1}else{do if((e[i+276>>1]|0)>=30){g=i+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];l=i+284|0;c[l>>2]=(c[l>>2]|0)+1;l=22;break a}g=i+296|0;h=c[g>>2]|0;if(!h){g=i+292|0;break}else{c[g>>2]=c[h>>2];l=i+284|0;c[l>>2]=(c[l>>2]|0)+1;l=22;break a}}else g=i+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;l=21}while(0);if((l|0)==21){h=_d(i,30,0)|0;l=22}do if((l|0)==22){l=0;if(!h){g=i+81|0;if((a[g>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[g>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;c[f>>2]=(c[f>>2]|0)+1;g=c[i+236>>2]|0;if(g|0)c[g+12>>2]=7}if(!h){j=0;f=1;break}else{i=0;f=1}}else{c[h+16>>2]=h+28;b[h+6>>1]=1;b[h+8>>1]=2;a[h+4>>0]=a[i+78>>0]|0;c[h+12>>2]=i;c[h>>2]=1;i=h+24|0;c[i>>2]=0;b[i+4>>1]=0;i=h;f=0}g=Yi(d,c[j+4>>2]|0)|0;if(!g)g=c[(c[d>>2]|0)+8>>2]|0;c[h+20>>2]=g;a[c[h+16>>2]>>0]=a[j+16>>0]|0;j=i}while(0);h=c[k>>2]|0;g=c[p>>2]|0;if((c[q>>2]|0)>(g|0)){c[p>>2]=g+1;k=c[o>>2]|0;a[k+(g*20|0)>>0]=113;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=h;c[k+(g*20|0)+8>>2]=0;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0}else g=Di(r,113,h,0,0)|0;h=c[r>>2]|0;if(!(a[h+81>>0]|0)){if((g|0)<0)g=(c[p>>2]|0)+-1|0;h=c[o>>2]|0;i=h+(g*20|0)+1|0;if(a[i>>0]|0){Ei(r,h+(g*20|0)|0,j,-9);break}if(f)break;c[h+(g*20|0)+16>>2]=j;a[i>>0]=-9;break}if(f|(c[h+480>>2]|0)!=0)break;k=(c[j>>2]|0)+-1|0;c[j>>2]=k;if(k|0)break;g=c[j+12>>2]|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}k=j;if((c[g+304>>2]|0)>>>0<=k>>>0?(c[g+308>>2]|0)>>>0>k>>>0:0){k=g+300|0;c[j>>2]=c[k>>2];c[k>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{k=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}cd(d,44342,t);c[k>>2]=-1}while(0);n=n+1|0;if((n|0)>=(c[s>>2]|0))break;else m=m+16|0}Ra=u;return}function vl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[d+24>>2]|0;i=c[d>>2]|0;d=a[e>>0]|0;a:do if(!(c[j+12>>2]|0)){switch(d<<24>>24){case -94:case -93:break a;case -95:break;default:{j=0;return j|0}}if(!(c[e+4>>2]&16777216)){j=0;return j|0}d=c[j>>2]|0;if(d|0){f=c[e+44>>2]|0;while(1){if((f|0)==(d|0)){d=1;break}d=c[d+32>>2]|0;if(!d)break a}return d|0}}else{if(d<<24>>24!=-94){j=0;return j|0}f=c[j+4>>2]|0;h=c[f>>2]|0;b:do if((h|0)>0){g=c[e+28>>2]|0;d=0;do{if((g|0)==(c[f+8+(d*72|0)+40>>2]|0))break b;d=d+1|0}while((d|0)<(h|0))}else d=0;while(0);if((d|0)==(h|0)){j=0;return j|0}}while(0);h=dk(c[i>>2]|0,e,0,0)|0;g=j+8|0;h=nj(c[i>>2]|0,c[g>>2]|0,h)|0;c[g>>2]=h;if(!h){j=0;return j|0}d=e+4|0;c[d>>2]=c[d>>2]|134217728;ni(c[i>>2]|0,e);c[d>>2]=c[d>>2]&-134217729;d=e;f=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(f|0));a[e>>0]=-94;b[e+32>>1]=(c[c[g>>2]>>2]|0)+65535;c[e+28>>2]=c[(c[j>>2]|0)+44>>2];j=0;return j|0}function wl(a,b){a=a|0;b=b|0;var d=0,e=0;d=(c[a+24>>2]|0)+12|0;e=c[d>>2]|0;if((e|0)==(b|0)){e=0;return e|0}c[d>>2]=b;$j(a,b)|0;c[d>>2]=e;e=1;return e|0}function xl(b,d){b=b|0;d=d|0;if(c[d+4>>2]&1|0){d=1;return d|0}switch(a[d>>0]|0){case -94:{if((c[b+24>>2]|0)!=(c[d+28>>2]|0)){d=1;return d|0}a[b+20>>0]=1;d=2;return d|0}case 57:case 54:case 55:case 56:case 52:case 53:{b=c[d+12>>2]|0;if((a[b>>0]|0)==-94?c[(c[b+44>>2]|0)+56>>2]|0:0){d=1;return d|0}d=c[d+16>>2]|0;if((a[d>>0]|0)==-94?c[(c[d+44>>2]|0)+56>>2]|0:0){d=1;return d|0}break}case -95:case 49:case -107:case 43:case 45:case 51:case 50:case 19:case -96:{d=1;return d|0}default:{}}d=0;return d|0}function yl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d)return;h=(e|0)==0;while(1){f=c[d>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{g=f+4+(e*20|0)|0;j=zl(b,c[g>>2]|0)|0;c[g>>2]=j;e=e+1|0}while((e|0)<(c[f>>2]|0))}f=c[d+40>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{j=f+4+(e*20|0)|0;g=zl(b,c[j>>2]|0)|0;c[j>>2]=g;e=e+1|0}while((e|0)<(c[f>>2]|0))}f=c[d+48>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{j=f+4+(e*20|0)|0;g=zl(b,c[j>>2]|0)|0;c[j>>2]=g;e=e+1|0}while((e|0)<(c[f>>2]|0))}e=d+44|0;f=zl(b,c[e>>2]|0)|0;c[e>>2]=f;e=d+36|0;f=zl(b,c[e>>2]|0)|0;c[e>>2]=f;e=c[d+32>>2]|0;f=c[e>>2]|0;if((f|0)>0){g=e+8|0;while(1){yl(b,c[g+20>>2]|0,1);if((a[g+37>>0]&4?(i=c[g+64>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){e=0;do{j=i+4+(e*20|0)|0;k=zl(b,c[j>>2]|0)|0;c[j>>2]=k;e=e+1|0}while((e|0)<(c[i>>2]|0))}if((f|0)>1){g=g+72|0;f=f+-1|0}else break}}if(h){e=25;break}d=c[d+52>>2]|0;if(!d){e=25;break}}if((e|0)==25)return}function zl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+64|0;j=o+8|0;i=o;f=o+12|0;if(!e){n=0;Ra=o;return n|0}n=e+4|0;if(c[n>>2]&1|0?(g=e+36|0,(c[d+4>>2]|0)==(b[g>>1]|0)):0)b[g>>1]=c[d+8>>2];switch(a[e>>0]|0){case -94:{if((c[e+28>>2]|0)==(c[d+4>>2]|0)){g=b[e+32>>1]|0;if(g<<16>>16<0){a[e>>0]=114;n=e;Ra=o;return n|0}l=c[(c[d+16>>2]|0)+4+((g<<16>>16)*20|0)>>2]|0;k=a[l>>0]|0;if(k<<24>>24==-88)g=a[l+38>>0]|0;else g=k;switch(g<<24>>24){case -87:{h=l+20|0;m=15;break}case -125:{h=c[l+20>>2]|0;m=15;break}default:{g=c[d>>2]|0;m=19}}do if((m|0)==15){g=c[d>>2]|0;if((c[c[h>>2]>>2]|0)>=2)if(!(c[l+4>>2]&2048)){cd(g,38899,j);break}else{c[i>>2]=c[c[c[l+20>>2]>>2]>>2];c[i+4>>2]=1;cd(g,39001,i);break}else m=19}while(0);if((m|0)==19){j=c[g>>2]|0;i=d+12|0;if(k<<24>>24==-94|(c[i>>2]|0)==0)if(!l)f=0;else{f=l;m=22}else{g=f;h=g+52|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));a[f>>0]=-85;c[f+12>>2]=l;c[f+28>>2]=c[d+8>>2];m=22}if((m|0)==22){f=dk(j,f,0,0)|0;if(f){if(c[i>>2]|0){d=f+4|0;c[d>>2]=c[d>>2]|1048576}if(c[n>>2]&1){b[f+36>>1]=b[e+36>>1]|0;n=f+4|0;c[n>>2]=c[n>>2]|1}}else f=0}ni(j,e);e=f}n=e;Ra=o;return n|0}break}case -85:{f=e+28|0;if((c[f>>2]|0)==(c[d+4>>2]|0))c[f>>2]=c[d+8>>2];break}default:{}}f=e+12|0;m=zl(d,c[f>>2]|0)|0;c[f>>2]=m;f=e+16|0;m=zl(d,c[f>>2]|0)|0;c[f>>2]=m;f=e+20|0;if(c[n>>2]&2048|0){yl(d,c[f>>2]|0,1);n=e;Ra=o;return n|0}g=c[f>>2]|0;if(!g){n=e;Ra=o;return n|0}if((c[g>>2]|0)<=0){n=e;Ra=o;return n|0}f=0;do{n=g+4+(f*20|0)|0;m=zl(d,c[n>>2]|0)|0;c[n>>2]=m;f=f+1|0}while((f|0)<(c[g>>2]|0));Ra=o;return e|0}function Al(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+80|0;G=I+40|0;F=I+32|0;p=I+24|0;j=I+16|0;i=I+8|0;E=I+48|0;k=c[e+32>>2]|0;l=c[c[e>>2]>>2]|0;H=c[d+8>>2]|0;C=e+52|0;D=c[C>>2]|0;if(c[e+68>>2]|0){cd(d,43323,I);Ra=I;return}g=c[d>>2]|0;do if(((a[g+165>>0]|0)==0?(a[d+200>>0]|0)==0:0)?(h=c[g+312>>2]|0,h|0):0){g=$a[h&127](c[g+316>>2]|0,33,0,0,0,c[d+240>>2]|0)|0;if((g|0)==1){cd(d,39216,i);c[d+12>>2]=23;Ra=I;return}if((g|2|0)==2){if(!g)break;Ra=I;return}else{cd(d,39231,j);c[d+12>>2]=1;Ra=I;return}}while(0);s=d+56|0;x=c[s>>2]|0;v=x+-1|0;c[s>>2]=v;b[e+6>>1]=320;pl(d,e,v);y=e+60|0;z=c[y>>2]|0;A=e+12|0;w=c[A>>2]|0;B=e+16|0;t=c[B>>2]|0;c[y>>2]=0;c[B>>2]=0;c[A>>2]=0;A=e+48|0;B=c[A>>2]|0;h=c[k>>2]|0;a:do if((h|0)>0){g=0;while(1){if(a[k+8+(g*72|0)+37>>0]&32)break;g=g+1|0;if((g|0)>=(h|0)){q=0;break a}}q=c[k+8+(g*72|0)+40>>2]|0}else q=0;while(0);g=d+40|0;o=c[g>>2]|0;h=o+1|0;c[g>>2]=h;m=(B|0)!=0;if((a[e+4>>0]|0)==127){c[g>>2]=o+2;g=m?8:6}else{h=0;g=m?7:5}a[E>>0]=g;c[E+4>>2]=o;c[E+16>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;u=d+44|0;n=(c[u>>2]|0)+1|0;c[u>>2]=n;u=H+108|0;g=c[u>>2]|0;r=H+112|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=116;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=q;c[k+(g*20|0)+8>>2]=n;c[k+(g*20|0)+12>>2]=l;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0}else Di(H,116,q,n,l)|0;do if(!m){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=113;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=o;c[k+(g*20|0)+8>>2]=l;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0;break}else{Di(H,113,o,l,0)|0;break}}else{k=Dl(d,e)|0;i=(c[B>>2]|0)+2|0;g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;l=c[H+104>>2]|0;a[l+(g*20|0)>>0]=113;b[l+(g*20|0)+2>>1]=0;c[l+(g*20|0)+4>>2]=o;c[l+(g*20|0)+8>>2]=i;c[l+(g*20|0)+12>>2]=0;c[l+(g*20|0)+16>>2]=0;a[l+(g*20|0)+1>>0]=0}else g=Di(H,113,o,i,0)|0;i=c[H>>2]|0;do if(!(a[i+81>>0]|0)){if((g|0)<0)g=(c[u>>2]|0)+-1|0;i=c[H+104>>2]|0;j=i+(g*20|0)+1|0;if(a[j>>0]|0){Ei(H,i+(g*20|0)|0,k,-9);break}if(k|0){c[i+(g*20|0)+16>>2]=k;a[j>>0]=-9}}else if(!((k|0)==0|(c[i+480>>2]|0)!=0)?(l=(c[k>>2]|0)+-1|0,c[k>>2]=l,(l|0)==0):0){g=c[k+12>>2]|0;if(g|0){if(c[g+480>>2]|0){Xd(g,k);break}l=k;if((c[g+304>>2]|0)>>>0<=l>>>0?(c[g+308>>2]|0)>>>0>l>>>0:0){l=g+300|0;c[k>>2]=c[l>>2];c[l>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[E+20>>2]=B}while(0);if(h|0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;l=c[H+104>>2]|0;a[l+(g*20|0)>>0]=113;b[l+(g*20|0)+2>>1]=0;c[l+(g*20|0)+4>>2]=h;c[l+(g*20|0)+8>>2]=0;c[l+(g*20|0)+12>>2]=0;c[l+(g*20|0)+16>>2]=0;a[l+(g*20|0)+1>>0]=0}else g=Di(H,113,h,0,0)|0;c[e+24>>2]=g;l=e+8|0;c[l>>2]=c[l>>2]|32}c[A>>2]=0;l=D+56|0;c[l>>2]=0;nk(d,1,43372,p);p=kj(d,D,E)|0;c[l>>2]=e;do if(!p){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=36;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=o;c[k+(g*20|0)+8>>2]=v;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0;k=g}else k=Di(H,36,o,v,0)|0;g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=-127;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=q;c[p+(g*20|0)+8>>2]=0;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0}else Di(H,129,q,0,0)|0;do if(m){g=(c[B>>2]|0)+1|0;h=c[u>>2]|0;if((c[r>>2]|0)>(h|0)){c[u>>2]=h+1;p=c[H+104>>2]|0;a[p+(h*20|0)>>0]=90;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=o;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=n;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(H,90,o,g,n)|0;break}}else{g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=127;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=o;c[p+(g*20|0)+8>>2]=n;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0;break}else{Di(H,127,o,n,0)|0;break}}while(0);g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=123;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=o;c[p+(g*20|0)+8>>2]=0;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0}else Di(H,123,o,0,0)|0;j=c[s>>2]|0;h=j+-1|0;c[s>>2]=h;do if((t|0)>0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;s=c[H+104>>2]|0;a[s+(g*20|0)>>0]=47;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=t;c[s+(g*20|0)+8>>2]=h;c[s+(g*20|0)+12>>2]=1;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0;break}else{Di(H,47,t,h,1)|0;break}}while(0);rl(d,e,q,0,0,f,h,v);do if(w|0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;f=c[H+104>>2]|0;a[f+(g*20|0)>>0]=49;b[f+(g*20|0)+2>>1]=0;c[f+(g*20|0)+4>>2]=w;c[f+(g*20|0)+8>>2]=v;c[f+(g*20|0)+12>>2]=0;c[f+(g*20|0)+16>>2]=0;a[f+(g*20|0)+1>>0]=0;break}else{Di(H,49,w,v,0)|0;break}}while(0);i=H+12|0;h=c[i>>2]|0;g=0-j|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0)mk(h,H,g);else c[(c[h+64>>2]|0)+(g<<2)>>2]=c[u>>2];if(!(c[e+8>>2]&8)){c[C>>2]=0;nk(d,1,43420,G);kj(d,e,E)|0;c[C>>2]=D}else cd(d,43378,F);g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;G=c[H+104>>2]|0;a[G+(g*20|0)>>0]=11;b[G+(g*20|0)+2>>1]=0;c[G+(g*20|0)+4>>2]=0;c[G+(g*20|0)+8>>2]=k;c[G+(g*20|0)+12>>2]=0;c[G+(g*20|0)+16>>2]=0;a[G+(g*20|0)+1>>0]=0}else Di(H,11,0,k,0)|0;h=c[i>>2]|0;g=0-x|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,H,g);break}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[u>>2];break}}while(0);g=c[A>>2]|0;if(g|0)ri(c[d>>2]|0,g);c[A>>2]=B;c[y>>2]=z;Ra=I;return}function Bl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=Ra;Ra=Ra+128|0;G=Z+64|0;F=Z+56|0;D=Z+48|0;B=Z+32|0;x=Z+24|0;v=Z+8|0;u=Z;p=Z+120|0;H=Z+96|0;I=Z+72|0;X=c[f>>2]|0;Y=f+8|0;U=c[Y>>2]|0;C=f+56|0;T=c[C>>2]|0;L=T+-1|0;R=T+-2|0;c[C>>2]=R;C=g+4|0;J=a[C>>0]|0;V=g+52|0;W=c[V>>2]|0;t=g+48|0;i=c[t>>2]|0;j=c[i>>2]|0;P=J<<24>>24==-128;a:do if(!P?(n=X+81|0,(a[n>>0]|0)==0):0){o=p+4|0;m=1;l=j;while(1){if((m|0)>(c[c[g>>2]>>2]|0)){m=i;S=l;break a}b:do if((l|0)>0){k=i+4|0;j=0;while(1){if((m|0)==(e[k+16>>1]|0))break b;j=j+1|0;if((j|0)<(l|0))k=k+20|0;else break}}else j=0;while(0);if((j|0)==(l|0)){c[p>>2]=0;c[o>>2]=0;j=oj(X,147,p,0)|0;if(!j){i=7;break}S=j+4|0;c[S>>2]=c[S>>2]|1024;c[j+8>>2]=m;i=nj(c[f>>2]|0,i,j)|0;c[t>>2]=i;if(!i){i=0;j=l}else{b[i+4+(l*20|0)+16>>1]=m;j=l+1|0}}else j=l;if(!(a[n>>0]|0)){m=m+1|0;l=j}else{m=i;S=j;break a}}Ra=Z;return i|0}else{m=i;S=j}while(0);k=(S<<2)+4|0;q=X+272|0;c:do if(c[q>>2]|0)if(!(a[X+81>>0]|0))r=24;else{O=0;Q=0;M=0;N=1}else{do if(!(0<0|(0==0?(e[X+276>>1]|0)>>>0<k>>>0:0))){i=X+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];r=X+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break c}i=X+296|0;j=c[i>>2]|0;if(!j){i=X+292|0;break}else{c[i>>2]=c[j>>2];r=X+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break c}}else i=X+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;r=24}while(0);if((r|0)==24){j=_d(X,k,0)|0;r=25}if((r|0)==25)if(!j){O=0;Q=0;M=j;N=1}else{c[j>>2]=S;if((S|0)>=1){i=m+4|0;k=1;while(1){c[j+(k<<2)>>2]=(e[i+16>>1]|0)+-1;if((k|0)==(S|0))break;else{i=i+20|0;k=k+1|0}}}O=j;Q=Dl(f,g)|0;M=j;N=0}c[t>>2]=m;K=gk(c[f>>2]|0,m,0)|0;s=W+48|0;c[s>>2]=K;d:do if(!P){o=c[c[g>>2]>>2]|0;i=f+44|0;j=c[i>>2]|0;p=j+1|0;n=o+1|0;c[i>>2]=j+n;i=U+108|0;j=c[i>>2]|0;if((c[U+112>>2]|0)>(j|0)){c[i>>2]=j+1;K=c[U+104>>2]|0;a[K+(j*20|0)>>0]=70;b[K+(j*20|0)+2>>1]=0;c[K+(j*20|0)+4>>2]=0;c[K+(j*20|0)+8>>2]=p;c[K+(j*20|0)+12>>2]=0;c[K+(j*20|0)+16>>2]=0;a[K+(j*20|0)+1>>0]=0}else Di(U,70,0,p,0)|0;m=n*5|0;k=m+20|0;e:do if(c[q>>2]|0)if(!(a[X+81>>0]|0))r=44;else{z=0;y=0;break d}else{do if(!(0<0|(0==0?(e[X+276>>1]|0)>>>0<k>>>0:0))){i=X+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];l=X+284|0;c[l>>2]=(c[l>>2]|0)+1;l=j;break e}i=X+296|0;j=c[i>>2]|0;if(!j){i=X+292|0;break}else{c[i>>2]=c[j>>2];l=X+284|0;c[l>>2]=(c[l>>2]|0)+1;l=j;break e}}else i=X+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;r=44}while(0);if((r|0)==44)l=_d(X,k,0)|0;if(!l){i=X+81|0;if((a[i>>0]|0)==0?(a[X+82>>0]|0)==0:0){a[i>>0]=1;if((c[X+180>>2]|0)>0)c[X+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;i=c[X+236>>2]|0;if(i|0)c[i+12>>2]=7}if(!l){z=0;y=0;break}else k=0}else{c[l+16>>2]=l+20+(n<<2);b[l+6>>1]=o;b[l+8>>1]=n;a[l+4>>0]=a[X+78>>0]|0;c[l+12>>2]=X;c[l>>2]=1;gw(l+24|0,0,m+-4|0)|0;k=l}if((o|0)>0){j=l+16|0;i=0;do{K=Cl(f,g,i)|0;c[l+20+(i<<2)>>2]=K;a[(c[j>>2]|0)+i>>0]=0;i=i+1|0}while((i|0)!=(o|0));z=l;y=k}else{z=l;y=k}}else{z=0;p=0;y=0}while(0);c[V>>2]=0;K=W+56|0;c[K>>2]=0;n=c[t>>2]|0;i=c[f>>2]|0;f:do if(n|0?(a[i+81>>0]|0)==0:0){k=c[n>>2]|0;if((k|0)>(c[i+116>>2]|0)){c[u>>2]=40659;cd(f,41350,u);break}m=c[g>>2]|0;if((k|0)>0){i=0;l=n+4|0;while(1){j=b[l+16>>1]|0;if(!(j<<16>>16))j=k;else{j=j&65535;k=c[m>>2]|0;if((k|0)<(j|0))break;Gk(f,m,j+-1|0,c[l>>2]|0,40659,0);j=c[n>>2]|0}i=i+1|0;if((i|0)<(j|0)){l=l+20|0;k=j}else break f}c[v>>2]=i+1;c[v+4>>2]=40659;c[v+8>>2]=k;cd(f,41294,v)}}while(0);g:do if(((c[W+52>>2]|0)==0?(A=c[s>>2]|0,w=c[f>>2]|0,A|0):0)?(a[w+81>>0]|0)==0:0){k=c[A>>2]|0;if((k|0)>(c[w+116>>2]|0)){c[x>>2]=40659;cd(f,41350,x);break}m=c[W>>2]|0;if((k|0)>0){i=0;l=A+4|0;while(1){j=b[l+16>>1]|0;if(!(j<<16>>16))j=k;else{j=j&65535;k=c[m>>2]|0;if((k|0)<(j|0))break;Gk(f,m,j+-1|0,c[l>>2]|0,40659,0);j=c[A>>2]|0}i=i+1|0;if((i|0)<(j|0)){l=l+20|0;k=j}else break g}c[B>>2]=i+1;c[B+4>>2]=40659;c[B+8>>2]=k;cd(f,41294,B)}}while(0);pl(f,g,L);o=g+12|0;i=c[o>>2]|0;do if(P&(i|0)!=0){j=f+44|0;m=c[j>>2]|0;n=m+1|0;m=m+2|0;c[j>>2]=m;j=c[g+16>>2]|0;j=(j|0)==0?i:j+1|0;k=U+108|0;i=c[k>>2]|0;l=U+112|0;if((c[l>>2]|0)>(i|0)){c[k>>2]=i+1;E=c[U+104>>2]|0;a[E+(i*20|0)>>0]=78;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=j;c[E+(i*20|0)+8>>2]=n;c[E+(i*20|0)+12>>2]=0;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0}else Di(U,78,j,n,0)|0;i=c[k>>2]|0;if((c[l>>2]|0)>(i|0)){c[k>>2]=i+1;E=c[U+104>>2]|0;a[E+(i*20|0)>>0]=78;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=n;c[E+(i*20|0)+8>>2]=m;c[E+(i*20|0)+12>>2]=0;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0;break}else{Di(U,78,n,m,0)|0;break}}else{m=0;n=0}while(0);i=g+60|0;j=c[i>>2]|0;if(j|0)ni(X,j);c[i>>2]=0;A=f+44|0;v=c[A>>2]|0;w=v+1|0;x=v+2|0;u=v+3|0;v=v+4|0;c[A>>2]=v;a[H>>0]=13;c[H+4>>2]=w;c[H+16>>2]=0;A=H+8|0;c[A>>2]=0;c[H+12>>2]=0;a[I>>0]=13;c[I+4>>2]=x;c[I+16>>2]=0;B=I+8|0;c[B>>2]=0;c[I+12>>2]=0;switch(a[C>>0]|0){case -128:{i=41509;break}case -126:{i=41519;break}case -127:{i=41529;break}default:i=41536}c[D>>2]=i;nk(f,1,43435,D);E=U+108|0;i=c[E>>2]|0;j=i+1|0;D=U+112|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=j;k=c[U+104>>2]|0;a[k+(i*20|0)>>0]=13;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=w;c[k+(i*20|0)+8>>2]=0;c[k+(i*20|0)+12>>2]=j;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;k=i}else k=Di(U,13,w,0,j)|0;c[W+12>>2]=n;nk(f,1,43446,F);kj(f,W,H)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;F=c[U+104>>2]|0;a[F+(i*20|0)>>0]=67;b[F+(i*20|0)+2>>1]=0;c[F+(i*20|0)+4>>2]=w;c[F+(i*20|0)+8>>2]=0;c[F+(i*20|0)+12>>2]=0;c[F+(i*20|0)+16>>2]=0;a[F+(i*20|0)+1>>0]=0}else Di(U,67,w,0,0)|0;C=U+12|0;j=c[C>>2]|0;a[j+19>>0]=0;c[j+28>>2]=0;j=c[E>>2]|0;if(!(a[(c[U>>2]|0)+81>>0]|0))i=(c[U+104>>2]|0)+(((k|0)<0?j+-1|0:k)*20|0)|0;else i=59308;c[i+8>>2]=j;i=j+1|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=i;t=c[U+104>>2]|0;a[t+(j*20|0)>>0]=13;b[t+(j*20|0)+2>>1]=0;c[t+(j*20|0)+4>>2]=x;c[t+(j*20|0)+8>>2]=0;c[t+(j*20|0)+12>>2]=i;c[t+(j*20|0)+16>>2]=0;a[t+(j*20|0)+1>>0]=0;t=j}else t=Di(U,13,x,0,i)|0;s=c[o>>2]|0;i=g+16|0;F=c[i>>2]|0;c[o>>2]=m;c[i>>2]=0;nk(f,1,43451,G);kj(f,g,I)|0;c[o>>2]=s;c[i>>2]=F;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;G=c[U+104>>2]|0;a[G+(i*20|0)>>0]=67;b[G+(i*20|0)+2>>1]=0;c[G+(i*20|0)+4>>2]=x;c[G+(i*20|0)+8>>2]=0;c[G+(i*20|0)+12>>2]=0;c[G+(i*20|0)+16>>2]=0;a[G+(i*20|0)+1>>0]=0}else Di(U,67,x,0,0)|0;q=c[C>>2]|0;a[q+19>>0]=0;c[q+28>>2]=0;q=El(f,g,H,h,u,p,z,L)|0;s=(J+-127&255)<2;if(s)r=El(f,g,I,h,v,p,z,L)|0;else r=0;h:do if(z|0?(I=(c[z>>2]|0)+-1|0,c[z>>2]=I,(I|0)==0):0){i=c[z+12>>2]|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,y);break h}j=z;if((c[i+304>>2]|0)>>>0<=j>>>0){if((c[i+308>>2]|0)>>>0<=j>>>0)break;I=i+300|0;c[z>>2]=c[I>>2];c[I>>2]=y;break h}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{I=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);p=J<<24>>24==-126;if((J+127&255)<2){l=L;n=L}else{i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;J=c[U+104>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=v;c[J+(i*20|0)+8>>2]=r;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else i=Di(U,12,v,r,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;J=c[U+104>>2]|0;a[J+(j*20|0)>>0]=14;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=x;c[J+(j*20|0)+8>>2]=L;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0}else j=Di(U,14,x,L,0)|0;k=c[E>>2]|0;if((c[D>>2]|0)>(k|0)){c[E>>2]=k+1;J=c[U+104>>2]|0;a[J+(k*20|0)>>0]=11;b[J+(k*20|0)+2>>1]=0;c[J+(k*20|0)+4>>2]=0;c[J+(k*20|0)+8>>2]=i;c[J+(k*20|0)+12>>2]=0;c[J+(k*20|0)+16>>2]=0;a[J+(k*20|0)+1>>0]=0}else Di(U,11,0,i,0)|0;o=g+6|0;k=b[o>>1]|0;l=b[W+6>>1]|0;m=k<<16>>16;n=l<<16>>16;do if(k<<16>>16<l<<16>>16){if((m+49|0)<(n|0)){k=l;break}if((m+31|0)<(n|0)){k=n+1&65535;break}else{k=(d[18112+(n-m)>>0]|0)+n&65535;break}}else{if((n+49|0)<(m|0))break;if((n+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-n)>>0]|0)+m&65535;break}}while(0);b[o>>1]=k;l=i;n=j}do if(p){i=g+6|0;j=b[W+6>>1]|0;if((b[i>>1]|0)>j<<16>>16){b[i>>1]=j;m=l}else m=l}else{i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;J=c[U+104>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=u;c[J+(i*20|0)+8>>2]=q;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else i=Di(U,12,u,q,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;J=c[U+104>>2]|0;a[J+(j*20|0)>>0]=14;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=w;c[J+(j*20|0)+8>>2]=L;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0}else Di(U,14,w,L,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;m=c[U+104>>2]|0;a[m+(j*20|0)>>0]=11;b[m+(j*20|0)+2>>1]=0;c[m+(j*20|0)+4>>2]=0;c[m+(j*20|0)+8>>2]=i;c[m+(j*20|0)+12>>2]=0;c[m+(j*20|0)+16>>2]=0;a[m+(j*20|0)+1>>0]=0;m=i;break}else{Di(U,11,0,i,0)|0;m=i;break}}while(0);i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;k=c[U+104>>2]|0;a[k+(i*20|0)>>0]=12;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=u;c[k+(i*20|0)+8>>2]=q;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;k=i}else k=Di(U,12,u,q,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;L=c[U+104>>2]|0;a[L+(i*20|0)>>0]=14;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=w;c[L+(i*20|0)+8>>2]=l;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(U,14,w,l,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;L=c[U+104>>2]|0;a[L+(i*20|0)>>0]=11;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=0;c[L+(i*20|0)+8>>2]=R;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(U,11,0,R,0)|0;do if(!P){if(p){p=k+1|0;l=k;break}i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=14;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=w;c[P+(i*20|0)+8>>2]=l;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else i=Di(U,14,w,l,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;p=c[U+104>>2]|0;a[p+(j*20|0)>>0]=11;b[p+(j*20|0)+2>>1]=0;c[p+(j*20|0)+4>>2]=0;c[p+(j*20|0)+8>>2]=R;c[p+(j*20|0)+12>>2]=0;c[p+(j*20|0)+16>>2]=0;a[p+(j*20|0)+1>>0]=0;p=k;l=i;break}else{Di(U,11,0,R,0)|0;p=k;l=i;break}}else{p=k;l=k}while(0);o=c[E>>2]|0;do if(s)if((c[D>>2]|0)>(o|0)){c[E>>2]=o+1;P=c[U+104>>2]|0;a[P+(o*20|0)>>0]=12;b[P+(o*20|0)+2>>1]=0;c[P+(o*20|0)+4>>2]=v;c[P+(o*20|0)+8>>2]=r;c[P+(o*20|0)+12>>2]=0;c[P+(o*20|0)+16>>2]=0;a[P+(o*20|0)+1>>0]=0;break}else{Di(U,12,v,r,0)|0;break}while(0);i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=14;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=x;c[P+(i*20|0)+8>>2]=m;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else Di(U,14,x,m,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=11;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=0;c[P+(i*20|0)+8>>2]=R;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else Di(U,11,0,R,0)|0;j=c[E>>2]|0;if(!(a[(c[U>>2]|0)+81>>0]|0))i=(c[U+104>>2]|0)+(((t|0)<0?j+-1|0:t)*20|0)|0;else i=59308;c[i+8>>2]=j;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;R=c[U+104>>2]|0;a[R+(j*20|0)>>0]=14;b[R+(j*20|0)+2>>1]=0;c[R+(j*20|0)+4>>2]=w;c[R+(j*20|0)+8>>2]=n;c[R+(j*20|0)+12>>2]=0;c[R+(j*20|0)+16>>2]=0;a[R+(j*20|0)+1>>0]=0}else Di(U,14,w,n,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;R=c[U+104>>2]|0;a[R+(i*20|0)>>0]=14;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=x;c[R+(i*20|0)+8>>2]=m;c[R+(i*20|0)+12>>2]=0;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else Di(U,14,x,m,0)|0;i=c[C>>2]|0;j=1-T|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,U,j);else c[(c[i+64>>2]|0)+(j<<2)>>2]=c[E>>2];i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;j=c[U+104>>2]|0;a[j+(i*20|0)>>0]=86;j=j+(i*20|0)+1|0;k=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0))}else i=Di(U,86,0,0,0)|0;j=c[U>>2]|0;i:do if(a[j+81>>0]|0){if(N)break;do if(j|0){if(c[j+480>>2]|0){Xd(j,O);break i}i=O;if((c[j+304>>2]|0)>>>0>i>>>0)break;if((c[j+308>>2]|0)>>>0<=i>>>0)break;R=j+300|0;c[M>>2]=c[R>>2];c[R>>2]=O;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](O);break}else{R=Wa[c[29352>>2]&127](O)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](O);break}}else{if((i|0)<0)i=(c[E>>2]|0)+-1|0;j=c[U+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(U,j+(i*20|0)|0,O,-15);break}if(N)break;c[j+(i*20|0)+16>>2]=O;a[k>>0]=-15}while(0);k=c[A>>2]|0;j=c[B>>2]|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;R=c[U+104>>2]|0;a[R+(i*20|0)>>0]=87;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=k;c[R+(i*20|0)+8>>2]=j;c[R+(i*20|0)+12>>2]=S;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else i=Di(U,87,k,j,S)|0;j=c[U>>2]|0;j:do if(a[j+81>>0]|0){if((Q|0)==0|(c[j+480>>2]|0)!=0)break;S=(c[Q>>2]|0)+-1|0;c[Q>>2]=S;if(S|0)break;i=c[Q+12>>2]|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,Q);break j}j=Q;if((c[i+304>>2]|0)>>>0>j>>>0)break;if((c[i+308>>2]|0)>>>0<=j>>>0)break;S=i+300|0;c[Q>>2]=c[S>>2];c[S>>2]=Q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{S=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}else{if((i|0)<0)i=(c[E>>2]|0)+-1|0;j=c[U+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(U,j+(i*20|0)|0,Q,-9);break}if(!Q)break;c[j+(i*20|0)+16>>2]=Q;a[k>>0]=-9}while(0);i=c[E>>2]|0;if((i|0)>0)b[(c[U+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=1;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;S=c[U+104>>2]|0;a[S+(i*20|0)>>0]=16;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=p;c[S+(i*20|0)+8>>2]=l;c[S+(i*20|0)+12>>2]=o;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(U,16,p,l,o)|0;j=c[C>>2]|0;i=0-T|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,U,i);else c[(c[j+64>>2]|0)+(i<<2)>>2]=c[E>>2];i=c[V>>2]|0;if(i|0)pi(X,i,1);c[V>>2]=W;c[K>>2]=g;k=f+212|0;i=c[k>>2]|0;if(!i)i=0;else{j=c[Y>>2]|0;if((i|0)<0)i=(c[j+108>>2]|0)+-1|0;if(!(a[(c[j>>2]|0)+81>>0]|0))i=(c[j+104>>2]|0)+(i*20|0)|0;else i=59308;i=c[i+8>>2]|0}c[k>>2]=i;f=(c[f+36>>2]|0)!=0&1;Ra=Z;return f|0}function Cl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[b+52>>2]|0;if(e|0?(f=Cl(a,e,d)|0,f|0):0){d=f;return d|0}b=c[b>>2]|0;if((c[b>>2]|0)<=(d|0)){d=0;return d|0}d=Yi(a,c[b+4+(d*20|0)>>2]|0)|0;return d|0}function Dl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;q=u;r=c[f+48>>2]|0;s=c[r>>2]|0;p=c[d>>2]|0;k=s+1|0;l=s+2|0;m=l*5|0;i=m+20|0;n=p+272|0;a:do if(c[n>>2]|0)if(!(a[p+81>>0]|0))j=11;else{t=0;Ra=u;return t|0}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<i>>>0:0))){h=p+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;break a}h=p+296|0;g=c[h>>2]|0;if(!g){g=p+292|0;break}else{c[h>>2]=c[g>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;break a}}else g=p+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;j=11}while(0);if((j|0)==11)g=_d(p,i,0)|0;if(!g){h=p+81|0;if((a[h>>0]|0)==0?(a[p+82>>0]|0)==0:0){a[h>>0]=1;if((c[p+180>>2]|0)>0)c[p+264>>2]=1;c[n>>2]=(c[n>>2]|0)+1;h=c[p+236>>2]|0;if(h|0)c[h+12>>2]=7}if(!g){t=0;Ra=u;return t|0}}else{c[g+16>>2]=g+20+(l<<2);b[g+6>>1]=k;b[g+8>>1]=l;a[g+4>>0]=a[p+78>>0]|0;c[g+12>>2]=p;c[g>>2]=1;gw(g+24|0,0,m+-4|0)|0}if((s|0)<=0){t=g;Ra=u;return t|0}o=g+16|0;m=p+8|0;n=q+4|0;l=0;do{k=r+4+(l*20|0)|0;i=c[k>>2]|0;if(!(c[i+4>>2]&256)){h=Cl(d,f,(e[r+4+(l*20|0)+16>>1]|0)+-1|0)|0;if(!h)h=c[m>>2]|0;j=c[h>>2]|0;c[q>>2]=j;if(j){p=(Eu(j)|0)&1073741823;c[n>>2]=p;if((p|0)!=0?(t=oj(c[d>>2]|0,106,q,0)|0,(t|0)!=0):0){c[t+12>>2]=i;i=t+4|0;c[i>>2]=c[i>>2]|4352;i=t}}else c[n>>2]=0;c[k>>2]=i}else h=Yi(d,i)|0;c[g+20+(l<<2)>>2]=h;a[(c[o>>2]|0)+l>>0]=a[r+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)!=(s|0));Ra=u;return g|0}function El(d,e,f,g,h,i,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;A=d+8|0;F=c[A>>2]|0;D=F+108|0;E=c[D>>2]|0;u=d+56|0;C=c[u>>2]|0;v=C+-1|0;c[u>>2]=v;do if(i|0){u=F+112|0;if((c[u>>2]|0)>(E|0)){c[D>>2]=E+1;q=c[F+104>>2]|0;a[q+(E*20|0)>>0]=20;b[q+(E*20|0)+2>>1]=0;c[q+(E*20|0)+4>>2]=i;c[q+(E*20|0)+8>>2]=0;c[q+(E*20|0)+12>>2]=0;c[q+(E*20|0)+16>>2]=0;a[q+(E*20|0)+1>>0]=0;q=E}else q=Di(F,20,i,0,0)|0;r=f+8|0;l=c[r>>2]|0;t=i+1|0;s=f+12|0;m=c[s>>2]|0;p=(j|0)==0;if(!p)c[j>>2]=(c[j>>2]|0)+1;n=c[D>>2]|0;if((c[u>>2]|0)>(n|0)){c[D>>2]=n+1;o=c[F+104>>2]|0;a[o+(n*20|0)>>0]=87;b[o+(n*20|0)+2>>1]=0;c[o+(n*20|0)+4>>2]=l;c[o+(n*20|0)+8>>2]=t;c[o+(n*20|0)+12>>2]=m;c[o+(n*20|0)+16>>2]=0;a[o+(n*20|0)+1>>0]=0}else n=Di(F,87,l,t,m)|0;l=c[F>>2]|0;do if(!(a[l+81>>0]|0)){if((n|0)<0)l=(c[D>>2]|0)+-1|0;else l=n;m=c[F+104>>2]|0;o=m+(l*20|0)+1|0;if(a[o>>0]|0){Ei(F,m+(l*20|0)|0,j,-9);break}if(!p){c[m+(l*20|0)+16>>2]=j;a[o>>0]=-9}}else if(!(p|(c[l+480>>2]|0)!=0)?(p=(c[j>>2]|0)+-1|0,c[j>>2]=p,(p|0)==0):0){l=c[j+12>>2]|0;if(l|0){if(c[l+480>>2]|0){Xd(l,j);break}p=j;if((c[l+304>>2]|0)>>>0<=p>>>0?(c[l+308>>2]|0)>>>0>p>>>0:0){p=l+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);l=n+2|0;m=c[D>>2]|0;if((c[u>>2]|0)>(m|0)){c[D>>2]=m+1;j=c[F+104>>2]|0;a[j+(m*20|0)>>0]=16;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=l;c[j+(m*20|0)+8>>2]=v;c[j+(m*20|0)+12>>2]=l;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(F,16,l,v,l)|0;n=c[D>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))l=(c[F+104>>2]|0)+(((q|0)<0?n+-1|0:q)*20|0)|0;else l=59308;c[l+8>>2]=n;m=c[r>>2]|0;l=(c[s>>2]|0)+-1|0;if((c[u>>2]|0)>(n|0)){c[D>>2]=n+1;s=c[F+104>>2]|0;a[s+(n*20|0)>>0]=78;b[s+(n*20|0)+2>>1]=0;c[s+(n*20|0)+4>>2]=m;c[s+(n*20|0)+8>>2]=t;c[s+(n*20|0)+12>>2]=l;c[s+(n*20|0)+16>>2]=0;a[s+(n*20|0)+1>>0]=0}else Di(F,78,m,t,l)|0;l=c[D>>2]|0;if((c[u>>2]|0)>(l|0)){c[D>>2]=l+1;u=c[F+104>>2]|0;a[u+(l*20|0)>>0]=70;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=1;c[u+(l*20|0)+8>>2]=i;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;break}else{Di(F,70,1,i,0)|0;break}}while(0);if(a[(c[d>>2]|0)+81>>0]|0){F=0;return F|0}l=c[e+16>>2]|0;do if((l|0)>0){m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;i=c[F+104>>2]|0;a[i+(m*20|0)>>0]=47;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=l;c[i+(m*20|0)+8>>2]=v;c[i+(m*20|0)+12>>2]=1;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break}else{Di(F,47,l,v,1)|0;break}}while(0);a:do switch(a[g>>0]|0){case 12:{q=d+19|0;m=a[q>>0]|0;if(m<<24>>24){B=m+-1<<24>>24;a[q>>0]=B;l=c[d+148+((B&255)<<2)>>2]|0;if(!(B<<24>>24))w=48;else{j=m+-2<<24>>24;a[q>>0]=j;p=l;j=c[d+148+((j&255)<<2)>>2]|0}}else{w=d+44|0;l=(c[w>>2]|0)+1|0;c[w>>2]=l;w=48}if((w|0)==48){p=d+44|0;j=(c[p>>2]|0)+1|0;c[p>>2]=j;p=l}n=c[f+8>>2]|0;l=c[f+12>>2]|0;m=c[D>>2]|0;o=F+112|0;if((c[o>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[F+104>>2]|0;a[f+(m*20|0)>>0]=92;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=n;c[f+(m*20|0)+8>>2]=l;c[f+(m*20|0)+12>>2]=p;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(F,92,n,l,p)|0;l=g+4|0;m=c[l>>2]|0;n=c[D>>2]|0;if((c[o>>2]|0)>(n|0)){c[D>>2]=n+1;g=c[F+104>>2]|0;a[g+(n*20|0)>>0]=121;b[g+(n*20|0)+2>>1]=0;c[g+(n*20|0)+4>>2]=m;c[g+(n*20|0)+8>>2]=j;c[g+(n*20|0)+12>>2]=0;c[g+(n*20|0)+16>>2]=0;a[g+(n*20|0)+1>>0]=0}else Di(F,121,m,j,0)|0;l=c[l>>2]|0;m=c[D>>2]|0;if((c[o>>2]|0)>(m|0)){c[D>>2]=m+1;g=c[F+104>>2]|0;a[g+(m*20|0)>>0]=122;b[g+(m*20|0)+2>>1]=0;c[g+(m*20|0)+4>>2]=l;c[g+(m*20|0)+8>>2]=p;c[g+(m*20|0)+12>>2]=j;c[g+(m*20|0)+16>>2]=0;a[g+(m*20|0)+1>>0]=0}else Di(F,122,l,p,j)|0;l=c[D>>2]|0;if((l|0)>0)b[(c[F+104>>2]|0)+((l+-1|0)*20|0)+2>>1]=8;if(j|0?(y=a[q>>0]|0,(y&255)<8):0){a[q>>0]=y+1<<24>>24;c[d+148+((y&255)<<2)>>2]=j}if(p|0?(z=a[q>>0]|0,(z&255)<8):0){a[q>>0]=z+1<<24>>24;c[d+148+((z&255)<<2)>>2]=p}break}case 11:{t=d+19|0;l=a[t>>0]|0;if(!(l<<24>>24)){A=d+44|0;s=(c[A>>2]|0)+1|0;c[A>>2]=s}else{s=l+-1<<24>>24;a[t>>0]=s;s=c[d+148+((s&255)<<2)>>2]|0}j=f+8|0;m=c[j>>2]|0;q=f+12|0;o=c[q>>2]|0;p=c[g+16>>2]|0;l=c[D>>2]|0;r=F+112|0;if((c[r>>2]|0)>(l|0)){c[D>>2]=l+1;f=c[F+104>>2]|0;a[f+(l*20|0)>>0]=92;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=m;c[f+(l*20|0)+8>>2]=o;c[f+(l*20|0)+12>>2]=s;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0}else l=Di(F,92,m,o,s)|0;m=c[F>>2]|0;do if(a[m+81>>0]|0){if((o|0)!=-12)kg(m,o,p)}else{if((l|0)<0)l=(c[D>>2]|0)+-1|0;m=c[F+104>>2]|0;n=m+(l*20|0)|0;if((o|0)<=-1?(x=m+(l*20|0)+1|0,(a[x>>0]|0)==0):0){if((o|0)==-3){c[m+(l*20|0)+16>>2]=p;a[x>>0]=-3;break}if(!p)break;c[m+(l*20|0)+16>>2]=p;a[x>>0]=o;if((o|0)!=-12)break;f=p+12|0;c[f>>2]=(c[f>>2]|0)+1;break}Ei(F,n,p,o)}while(0);o=c[g+4>>2]|0;m=c[j>>2]|0;n=c[q>>2]|0;l=c[D>>2]|0;if((c[r>>2]|0)>(l|0)){c[D>>2]=l+1;g=c[F+104>>2]|0;a[g+(l*20|0)>>0]=-124;b[g+(l*20|0)+2>>1]=0;c[g+(l*20|0)+4>>2]=o;c[g+(l*20|0)+8>>2]=s;c[g+(l*20|0)+12>>2]=m;c[g+(l*20|0)+16>>2]=0;a[g+(l*20|0)+1>>0]=0}else l=Di(F,132,o,s,m)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){g=c[F+104>>2]|0;a[g+(l*20|0)+1>>0]=-3;c[g+(l*20|0)+16>>2]=n}if(s|0?(B=a[t>>0]|0,(B&255)<8):0){a[t>>0]=B+1<<24>>24;c[d+148+((B&255)<<2)>>2]=s}break}case 10:{p=c[f+8>>2]|0;o=c[g+4>>2]|0;l=c[A>>2]|0;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;d=c[l+104>>2]|0;a[d+(n*20|0)>>0]=77;b[d+(n*20|0)+2>>1]=0;c[d+(n*20|0)+4>>2]=p;c[d+(n*20|0)+8>>2]=o;c[d+(n*20|0)+12>>2]=1;c[d+(n*20|0)+16>>2]=0;a[d+(n*20|0)+1>>0]=0;break a}else{Di(l,77,p,o,1)|0;break a}}case 13:{j=g+8|0;l=c[j>>2]|0;q=f+12|0;if(!l){p=c[q>>2]|0;do if((p|0)==1){l=d+19|0;m=a[l>>0]|0;if(!(m<<24>>24)){d=d+44|0;l=(c[d>>2]|0)+1|0;c[d>>2]=l;break}else{B=m+-1<<24>>24;a[l>>0]=B;l=c[d+148+((B&255)<<2)>>2]|0;break}}else{m=d+32|0;l=c[m>>2]|0;n=d+28|0;o=c[n>>2]|0;if((o|0)<(p|0)){d=d+44|0;l=c[d>>2]|0;c[d>>2]=l+p;l=l+1|0;break}else{c[m>>2]=l+p;c[n>>2]=o-p;break}}while(0);c[j>>2]=l;c[g+12>>2]=p}j=c[f+8>>2]|0;p=c[q>>2]|0;m=c[A>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;d=c[m+104>>2]|0;a[d+(o*20|0)>>0]=77;b[d+(o*20|0)+2>>1]=0;c[d+(o*20|0)+4>>2]=j;c[d+(o*20|0)+8>>2]=l;c[d+(o*20|0)+12>>2]=p;c[d+(o*20|0)+16>>2]=0;a[d+(o*20|0)+1>>0]=0}else Di(m,77,j,l,p)|0;l=c[g+4>>2]|0;m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;d=c[F+104>>2]|0;a[d+(m*20|0)>>0]=14;b[d+(m*20|0)+2>>1]=0;c[d+(m*20|0)+4>>2]=l;c[d+(m*20|0)+8>>2]=0;c[d+(m*20|0)+12>>2]=0;c[d+(m*20|0)+16>>2]=0;a[d+(m*20|0)+1>>0]=0;break a}else{Di(F,14,l,0,0)|0;break a}}default:{n=c[f+8>>2]|0;l=c[f+12>>2]|0;m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;d=c[F+104>>2]|0;a[d+(m*20|0)>>0]=81;b[d+(m*20|0)+2>>1]=0;c[d+(m*20|0)+4>>2]=n;c[d+(m*20|0)+8>>2]=l;c[d+(m*20|0)+12>>2]=0;c[d+(m*20|0)+16>>2]=0;a[d+(m*20|0)+1>>0]=0;break a}else{Di(F,81,n,l,0)|0;break a}}}while(0);l=c[e+12>>2]|0;do if(l|0){m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;e=c[F+104>>2]|0;a[e+(m*20|0)>>0]=49;b[e+(m*20|0)+2>>1]=0;c[e+(m*20|0)+4>>2]=l;c[e+(m*20|0)+8>>2]=k;c[e+(m*20|0)+12>>2]=0;c[e+(m*20|0)+16>>2]=0;a[e+(m*20|0)+1>>0]=0;break}else{Di(F,49,l,k,0)|0;break}}while(0);m=c[F+12>>2]|0;l=0-C|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,F,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[D>>2];l=c[D>>2]|0;if((c[F+112>>2]|0)>(l|0)){c[D>>2]=l+1;F=c[F+104>>2]|0;a[F+(l*20|0)>>0]=66;b[F+(l*20|0)+2>>1]=0;c[F+(l*20|0)+4>>2]=h;c[F+(l*20|0)+8>>2]=0;c[F+(l*20|0)+12>>2]=0;c[F+(l*20|0)+16>>2]=0;a[F+(l*20|0)+1>>0]=0;F=E;return F|0}else{Di(F,66,h,0,0)|0;F=E;return F|0}return 0}function Fl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+32|0;o=A;if(!f){Ra=A;return}if(c[f+4>>2]&1|0){Ra=A;return}switch(a[f>>0]|0){case 44:{Fl(d,c[f+16>>2]|0);Fl(d,c[f+12>>2]|0);Ra=A;return}case 53:{g=c[f+16>>2]|0;f=c[f+12>>2]|0;do if((a[g>>0]|0)==-94?(j=g+4|0,(c[j>>2]&8|0)==0):0){i=o+20|0;a[i>>0]=1;c[o+4>>2]=127;c[o+8>>2]=128;c[o+24>>2]=0;if(f){_j(o,f)|0;if(!(a[i>>0]|0))break}i=c[d>>2]|0;t=f+4|0;if(!(c[t>>2]&256))if((c[j>>2]&256|0)==0?(k=Yi(i,f)|0,(k|0)!=0):0){l=k;u=14}else{m=g;u=13}else{m=f;u=13}if((u|0)==13?(n=Yi(i,m)|0,n|0):0){l=n;u=14}if((u|0)==14){if((c[l+12>>2]|0)!=78)break;if(c[l+8>>2]|0)break}m=d+4|0;k=c[m>>2]|0;n=d+12|0;do if((k|0)>0){l=c[n>>2]|0;i=c[g+28>>2]|0;j=g+32|0;h=0;while(1){z=c[l+(h<<1<<2)>>2]|0;if((c[z+28>>2]|0)==(i|0)?(b[z+32>>1]|0)==(b[j>>1]|0):0){u=107;break}h=h+1|0;if((h|0)>=(k|0)){u=22;break}}if((u|0)==22){x=n;r=l;break}else if((u|0)==107){Ra=A;return}}else{x=n;r=c[n>>2]|0}while(0);k=k+1|0;c[m>>2]=k;l=c[c[d>>2]>>2]|0;k=k<<3;a:do if(!r){b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))u=34;else{u=48;break a}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0))){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];s=l+284|0;c[s>>2]=(c[s>>2]|0)+1;s=i;break b}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];s=l+284|0;c[s>>2]=(c[s>>2]|0)+1;s=i;break b}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;u=34}while(0);if((u|0)==34)s=_d(l,k,0)|0;c[x>>2]=s;if(s|0){w=s;u=51}}else{i=r;j=l+304|0;if(((c[j>>2]|0)>>>0<=i>>>0?(c[l+308>>2]|0)>>>0>i>>>0:0)?!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0)):0)h=r;else{h=Zd(l,r,k,0)|0;if(!h){if(c[l+480>>2]|0){Xd(l,r);u=48;break}if((c[j>>2]|0)>>>0<=i>>>0?(c[l+308>>2]|0)>>>0>i>>>0:0){u=l+300|0;c[r>>2]=c[u>>2];c[u>>2]=r;u=48;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);u=48;break}else{u=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);u=48;break}}}c[x>>2]=h;w=h;u=51}while(0);if((u|0)==48)c[x>>2]=0;else if((u|0)==51){if(c[t>>2]&8)f=c[f+12>>2]|0;z=c[m>>2]<<1;c[w+(z+-2<<2)>>2]=g;c[(c[n>>2]|0)+(z+-1<<2)>>2]=f;Ra=A;return}c[m>>2]=0;Ra=A;return}while(0);if((a[f>>0]|0)!=-94){Ra=A;return}k=f+4|0;if(c[k>>2]&8|0){Ra=A;return}i=o+20|0;a[i>>0]=1;c[o+4>>2]=127;c[o+8>>2]=128;c[o+24>>2]=0;l=(g|0)==0;if(!l){_j(o,g)|0;if(!(a[i>>0]|0)){Ra=A;return}}j=c[d>>2]|0;do if(!(c[k>>2]&256)){if(!l?c[g+4>>2]&256|0:0){p=Yi(j,g)|0;u=66;break}i=Yi(j,f)|0;if(!i){p=Yi(j,g)|0;u=66}else{q=i;u=67}}else{p=Yi(j,f)|0;u=66}while(0);if((u|0)==66?p|0:0){q=p;u=67}if((u|0)==67){if((c[q+12>>2]|0)!=78){Ra=A;return}if(c[q+8>>2]|0){Ra=A;return}}n=d+4|0;l=c[n>>2]|0;o=d+12|0;do if((l|0)>0){m=c[o>>2]|0;j=c[f+28>>2]|0;k=f+32|0;i=0;while(1){x=c[m+(i<<1<<2)>>2]|0;if((c[x+28>>2]|0)==(j|0)?(b[x+32>>1]|0)==(b[k>>1]|0):0){u=107;break}i=i+1|0;if((i|0)>=(l|0)){u=75;break}}if((u|0)==75){z=o;v=m;break}else if((u|0)==107){Ra=A;return}}else{z=o;v=c[o>>2]|0}while(0);l=l+1|0;c[n>>2]=l;m=c[c[d>>2]>>2]|0;l=l<<3;c:do if(!v){d:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))u=87;else{u=101;break c}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<l>>>0:0))){i=m+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];y=m+284|0;c[y>>2]=(c[y>>2]|0)+1;y=j;break d}i=m+296|0;j=c[i>>2]|0;if(!j){i=m+292|0;break}else{c[i>>2]=c[j>>2];y=m+284|0;c[y>>2]=(c[y>>2]|0)+1;y=j;break d}}else i=m+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;u=87}while(0);if((u|0)==87)y=_d(m,l,0)|0;c[z>>2]=y;if(y|0){h=y;u=104}}else{j=v;k=m+304|0;if(((c[k>>2]|0)>>>0<=j>>>0?(c[m+308>>2]|0)>>>0>j>>>0:0)?!(0<0|(0==0?(e[m+276>>1]|0)>>>0<l>>>0:0)):0)h=v;else{i=Zd(m,v,l,0)|0;if(!i){if(c[m+480>>2]|0){Xd(m,v);u=101;break}if((c[k>>2]|0)>>>0<=j>>>0?(c[m+308>>2]|0)>>>0>j>>>0:0){u=m+300|0;c[v>>2]=c[u>>2];c[u>>2]=v;u=101;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](v);u=101;break}else{u=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);u=101;break}}else h=i}c[z>>2]=h;u=104}while(0);if((u|0)==101)c[z>>2]=0;else if((u|0)==104){if(c[g+4>>2]&8)g=c[g+12>>2]|0;z=c[n>>2]<<1;c[h+(z+-2<<2)>>2]=f;c[(c[o>>2]|0)+(z+-1<<2)>>2]=g;Ra=A;return}c[n>>2]=0;Ra=A;return}default:{Ra=A;return}}}function Gl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((a[e>>0]|0)!=-94){e=0;return e|0}k=e+4|0;l=c[k>>2]|0;if(l&8|0){e=0;return e|0}m=c[d+24>>2]|0;f=c[m+4>>2]|0;if((f|0)<=0){e=1;return e|0}g=c[m+12>>2]|0;h=e+28|0;i=e+32|0;d=0;while(1){j=d<<1;o=c[g+(j<<2)>>2]|0;if(((o|0)!=(e|0)?(c[o+28>>2]|0)==(c[h>>2]|0):0)?(b[o+32>>1]|0)==(b[i>>1]|0):0)break;d=d+1|0;if((d|0)>=(f|0)){d=1;n=12;break}}if((n|0)==12)return d|0;d=m+8|0;c[d>>2]=(c[d>>2]|0)+1;c[k>>2]=l&-8388617|8;d=c[g+((j|1)<<2)>>2]|0;if(!d)d=0;else d=dk(c[c[m>>2]>>2]|0,d,0,0)|0;c[e+12>>2]=d;o=1;return o|0}function Hl(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=(c|0)<(e|0)?c:e;g=Lu(d,f,h)|0;if(g|0){e=g;return e|0}if(b|0){g=d+h|0;b=c-h|0;a:do if((b|0)>0)while(1){d=b+-1|0;if((a[g+d>>0]|0)!=32)break a;if((b|0)>1)b=d;else{b=d;break}}while(0);if(!b){g=f+h|0;b=e-h|0;b:do if((b|0)>0)while(1){d=b+-1|0;if((a[g+d>>0]|0)!=32)break b;if((b|0)>1)b=d;else{b=d;break}}while(0);if(!b){e=0;return e|0}}}e=c-e|0;return e|0}function Il(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=b+8|0;a:do if(d|0){while(1){f=d;while(1){g=c[f+4>>2]|0;if(!(g&4096))break;if(!(g&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f)break a}a[h>>0]=e;if((a[f>>0]|0)!=e<<24>>24)break;Il(b,c[f+12>>2]|0,e);d=c[f+16>>2]|0;if(!d)break a}Ml(b,d,0)|0;return}while(0);a[h>>0]=e;return}function Jl(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;na=Ra;Ra=Ra+16|0;ba=na+8|0;ja=na;aa=c[f>>2]|0;ka=c[aa>>2]|0;la=a[f+46>>0]|0;ma=la&255;Y=(la&255)<2?1:la<<24>>24==2?5:10;ia=f+8|0;h=c[ia>>2]|0;da=g<<16>>16==0;if(da|(h|0)==0)W=0;else W=c[h>>2]|0;l=Y<<1;m=W<<1;j=m+(G(l,(ma<<2)+32|0)|0)|0;k=((j|0)<0)<<31>>31;a:do if(c[ka+272>>2]|0)if(!(a[ka+81>>0]|0))V=13;else{Ra=na;return}else{do if(!(0<k>>>0|(0==(k|0)?(e[ka+276>>1]|0)>>>0<j>>>0:0))){h=ka+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];fa=ka+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=i;break a}h=ka+296|0;i=c[h>>2]|0;if(!i){h=ka+292|0;break}else{c[h>>2]=c[i>>2];fa=ka+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=i;break a}}else h=ka+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;V=13}while(0);if((V|0)==13)fa=_d(ka,j,k)|0;if(!fa){Ra=na;return}o=fa+(Y<<5)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[o+28>>2]=0;h=l;j=o+(Y<<5)|0;i=fa;while(1){c[i+24>>2]=j;j=j+(ma<<2)|0;if((h|0)<=1)break;else{h=h+-1|0;i=i+32|0}}h=(W|0)!=0;if(h)gw(j|0,0,m|0)|0;else j=0;ca=c[aa+132>>2]|0;b[fa+(Y<<5)+16>>1]=ca>>>0<48?ca:48;if(h)a[fa+(Y<<5)+22>>0]=la<<24>>24==0?W&255:-1;ca=la<<24>>24==0;b:do if(!ca){Q=f+60|0;R=f+44|0;S=Y>>>0>1;T=f+20|0;U=((g&65535)<<16)+1048576|0;P=0;l=0;k=0;h=0;i=fa;m=1;while(1){if((m|0)>0){K=P&65535;M=P<<2;N=i+18|0;O=i+16|0;p=0;J=0;I=o;while(1){n=c[Q>>2]|0;if(!n)n=p;else{C=I+22|0;D=I+16|0;E=I+20|0;F=I+8|0;H=I+24|0;x=p;while(1){w=a[C>>0]|0;B=ja;c[B>>2]=0;c[B+4>>2]=0;B=n;v=I;u=c[v>>2]|0;v=c[v+4>>2]|0;c:do if((((c[B>>2]&~u|0)==0?(c[B+4>>2]&~v|0)==0:0)?(Z=n+8|0,$=Z,_=c[$>>2]|0,$=c[$+4>>2]|0,(_&u|0)==0&($&v|0)==0):0)?(X=b[D>>1]|0,!(X<<16>>16<3?(c[n+36>>2]&16384|0)!=0:0)):0){p=b[n+18>>1]|0;t=X&65535;s=t+(e[n+20>>1]|0)|0;q=s&65535;r=p<<16>>16;s=s<<16>>16;do if(p<<16>>16<q<<16>>16){if((r+49|0)<(s|0)){p=q;break}if((r+31|0)<(s|0)){p=s+1&65535;break}else{p=s+(d[18112+(s-r)>>0]|0)&65535;break}}else{if((s+49|0)<(r|0))break;if((s+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);q=b[E>>1]|0;r=p<<16>>16;s=q<<16>>16;do if(p<<16>>16<q<<16>>16){if((r+49|0)<(s|0)){p=q;break}if((r+31|0)<(s|0)){p=s+1&65535;break}else{p=(d[18112+(s-r)>>0]|0)+s&65535;break}}else{if((s+49|0)<(r|0))break;if((s+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);A=(e[n+22>>1]|0)+t|0;B=A&65535;z=_|u;y=$|v;if(w<<24>>24<0)w=hm(f,c[ia>>2]|0,I,b[R>>1]|0,K,n,ja)|0;else{t=F;u=c[t+4>>2]|0;v=ja;c[v>>2]=c[t>>2];c[v+4>>2]=u}r=w<<24>>24;if(w<<24>>24>-1&(W|0)>(r|0)){v=j+(r<<1)|0;q=b[v>>1]|0;if(!(q<<16>>16)){q=((W-r|0)*100|0)/(W|0)|0;r=((q|0)<0)<<31>>31;do if(q>>>0<8){if(q>>>0<2){u=-4325376;break}s=40;do{s=(s&65535)+65526|0;q=cw(q|0,r|0,1)|0;r=L()|0}while(r>>>0<0|(r|0)==0&q>>>0<8);s=s&65535;V=66}else{if(q>>>0>255){s=40;do{s=(s&65535)+40|0;V=q;q=bw(q|0,r|0,4)|0;u=r;r=L()|0}while(u>>>0>0|(u|0)==0&V>>>0>4095);s=s&65535}else s=40;if(!(r>>>0>0|(r|0)==0&q>>>0>15)){V=66;break}do{s=(s&65535)+10&65535;V=q;q=bw(q|0,r|0,1)|0;u=r;r=L()|0}while(u>>>0>0|(u|0)==0&V>>>0>31);V=66}while(0);if((V|0)==66){V=0;u=((s&65535)+65526+(e[3648+((q&7)<<1)>>1]|0)<<16)+-4325376|0}if(!(b[R>>1]&16384))r=g;else{r=b[T>>1]|0;r=r<<16>>16<g<<16>>16?r:g}if(r<<16>>16<11)q=0;else{q=r<<16>>16;t=((q|0)<0)<<31>>31;if((r&65535)>255){s=40;r=t;do{s=(s&65535)+40|0;t=q;q=bw(q|0,r|0,4)|0;oa=r;r=L()|0}while(oa>>>0>0|(oa|0)==0&t>>>0>4095);s=s&65535}else{s=40;r=t}if(r>>>0>0|(r|0)==0&q>>>0>15){do{s=(s&65535)+10&65535;oa=q;q=bw(q|0,r|0,1)|0;t=r;r=L()|0}while(t>>>0>0|(t|0)==0&oa>>>0>31);r=s}else r=s;q=(r&65535)+65493+(e[3648+((q&7)<<1)>>1]|0)&65535}q=q+((U+u|0)>>>16)&65535;b[v>>1]=q}r=p<<16>>16;s=q<<16>>16;do if(p<<16>>16<q<<16>>16){if((r+49|0)<(s|0))break;if((r+31|0)<(s|0)){q=s+1&65535;break}else{q=(d[18112+(s-r)>>0]|0)+s&65535;break}}else{if((s+49|0)<(r|0)){q=p;break}if((s+31|0)<(r|0)){q=r+1&65535;break}else{q=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);v=p;u=(q&65535)+5&65535}else{v=(p&65535)+65534&65535;u=p}d:do if((x|0)>0){p=0;t=i;while(1){oa=t;if(((c[oa>>2]|0)==(z|0)?(c[oa+4>>2]|0)==(y|0):0)?(a[t+22>>0]^w)<<24>>24>-1:0)break;p=p+1|0;if((p|0)>=(x|0)){V=96;break d}else t=t+32|0}q=t+22|0;r=t+18|0;p=b[r>>1]|0;if(p<<16>>16<u<<16>>16){p=x;break c}if(p<<16>>16!=u<<16>>16){s=t;p=t;break}s=b[t+16>>1]|0;p=A<<16>>16;if((p|0)>(s|0)){p=x;break c}if((p|0)!=(s|0)){s=t;p=t;break}if((b[t+20>>1]|0)>v<<16>>16){s=t;p=t}else{p=x;break c}}else V=96;while(0);if((V|0)==96){V=0;p=(x|0)<(Y|0);if(!p){if(u<<16>>16>k<<16>>16){p=x;break}if(!(u<<16>>16!=k<<16>>16?1:v<<16>>16<h<<16>>16)){p=x;break}}q=p?x:l;oa=i+(q<<5)|0;s=oa;x=x+(p&1)|0;r=i+(q<<5)+18|0;q=i+(q<<5)+22|0;p=oa}oa=I;y=Z;A=c[y+4>>2]|c[oa+4>>2];z=p;c[z>>2]=c[y>>2]|c[oa>>2];c[z+4>>2]=A;z=ja;A=c[z+4>>2]|0;oa=s+8|0;c[oa>>2]=c[z>>2];c[oa+4>>2]=A;b[s+16>>1]=B;b[r>>1]=u;b[s+20>>1]=v;a[q>>0]=w;oa=s+24|0;ew(c[oa>>2]|0,c[H>>2]|0,M|0)|0;c[(c[oa>>2]|0)+(P<<2)>>2]=n;if((x|0)<(Y|0)){p=x;break}k=b[N>>1]|0;h=b[O>>1]|0;if(!S){p=x;l=0;break}r=i;s=1;l=0;do{q=b[r+50>>1]|0;do if(q<<16>>16<=k<<16>>16){if(q<<16>>16!=k<<16>>16)break;p=b[r+52>>1]|0;if(p<<16>>16>h<<16>>16){h=p;V=112}}else{h=b[r+52>>1]|0;V=112}while(0);r=r+32|0;if((V|0)==112){V=0;l=s;k=q}s=s+1|0}while((s|0)!=(Y|0));p=x}else p=x;while(0);n=c[n+52>>2]|0;if(!n){n=p;break}else x=p}}J=J+1|0;if((J|0)==(m|0)){m=n;break}else{p=n;I=I+32|0}}}else m=0;P=P+1|0;if((P|0)==(ma|0))break;else{oa=o;o=i;i=oa}}if(m|0){if((m|0)>1){j=1;h=i;do{h=(b[h+18>>1]|0)>(b[i+(j<<5)+18>>1]|0)?i+(j<<5)|0:h;j=j+1|0}while((j|0)!=(m|0));i=h}if(ca){o=i;break}j=c[i+24>>2]|0;k=c[f+4>>2]|0;h=0;while(1){oa=c[j+(h<<2)>>2]|0;c[f+752+(h*80|0)+64>>2]=oa;oa=a[oa+16>>0]|0;a[f+752+(h*80|0)+44>>0]=oa;c[f+752+(h*80|0)+4>>2]=c[k+8+((oa&255)*72|0)+40>>2];h=h+1|0;if((h|0)==(ma|0)){o=i;break b}}}cd(aa,43687,ba);if(ka|0){if(c[ka+480>>2]|0){Xd(ka,fa);Ra=na;return}oa=fa;if((c[ka+304>>2]|0)>>>0<=oa>>>0?(c[ka+308>>2]|0)>>>0>oa>>>0:0){oa=ka+300|0;c[fa>>2]=c[oa>>2];c[oa>>2]=fa;Ra=na;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](fa);Ra=na;return}else{oa=Wa[c[29352>>2]&127](fa)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](fa);Ra=na;return}}while(0);n=f+44|0;if(((b[n>>1]&384)==256?(ea=f+51|0,!(da|(a[ea>>0]|0)!=0)):0)?(da=f+12|0,oa=ma+-1|0,oa=(hm(f,c[da>>2]|0,o,128,oa&65535,c[(c[o+24>>2]|0)+(oa<<2)>>2]|0,ja)|0)<<24>>24,(c[c[da>>2]>>2]|0)==(oa|0)):0)a[ea>>0]=2;l=f+52|0;a[l>>0]=0;h=c[ia>>2]|0;if(h|0){i=b[n>>1]|0;j=a[o+22>>0]|0;if(!(i&128)){k=f+47|0;a[k>>0]=j;da=o+8|0;ea=c[da+4>>2]|0;m=f+64|0;oa=m;c[oa>>2]=c[da>>2];c[oa+4>>2]=ea;if((j<<24>>24<1?(a[k>>0]=0,!ca):0)?(ga=ma+-1|0,ha=c[(c[o+24>>2]|0)+(ga<<2)>>2]|0,oa=c[ha+36>>2]|0,!((oa&4096|0)!=0|(oa&260|0)==260)):0){oa=ja;c[oa>>2]=0;c[oa+4>>2]=0;oa=(hm(f,h,o,2048,ga&65535,ha,ja)|0)<<24>>24;h=c[ia>>2]|0;if((c[h>>2]|0)==(oa|0)){a[l>>0]=1;ga=ja;ha=c[ga+4>>2]|0;oa=m;c[oa>>2]=c[ga>>2];c[oa+4>>2]=ha}i=b[n>>1]|0}}else if((c[h>>2]|0)==(j<<24>>24|0))a[f+51>>0]=2;if((i&512?(la<<24>>24?(c[h>>2]|0)==(a[f+47>>0]|0):0):0)?(oa=ja,c[oa>>2]=0,c[oa+4>>2]=0,oa=ma+-1|0,oa=(hm(f,h,o,0,oa&65535,c[(c[o+24>>2]|0)+(oa<<2)>>2]|0,ja)|0)<<24>>24,(c[c[ia>>2]>>2]|0)==(oa|0)):0){a[f+48>>0]=1;la=ja;ma=c[la+4>>2]|0;oa=f+64|0;c[oa>>2]=c[la>>2];c[oa+4>>2]=ma}}b[f+72>>1]=b[o+16>>1]|0;if(ka|0){if(c[ka+480>>2]|0){Xd(ka,fa);Ra=na;return}oa=fa;if((c[ka+304>>2]|0)>>>0<=oa>>>0?(c[ka+308>>2]|0)>>>0>oa>>>0:0){oa=ka+300|0;c[fa>>2]=c[oa>>2];c[oa>>2]=fa;Ra=na;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](fa);Ra=na;return}else{oa=Wa[c[29352>>2]&127](fa)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](fa);Ra=na;return}}function Kl(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+192|0;o=E+152|0;r=E+144|0;u=E+136|0;t=E+128|0;p=E+120|0;n=E+112|0;m=E+104|0;C=E+160|0;l=E;D=c[f+116>>2]|0;if((a[((D|0)==0?f:D)+199>>0]|0)!=2){Ra=E;return}s=d[h+44>>0]|0;D=c[f+8>>2]|0;k=c[f>>2]|0;x=c[h+64>>2]|0;v=x+36|0;q=c[v>>2]|0;if((q&8192|0)==0?(j=i&65535,(j&32|0)==0):0){i=q&48;do if(!i){if((q&1024|0)==0?b[x+24>>1]|0:0){j=1;break}j=(j&3|0)!=0}else j=1;while(0);B=C+4|0;c[B>>2]=l;c[C>>2]=k;w=C+8|0;c[w>>2]=100;y=C+12|0;c[y>>2]=1e9;z=C+16|0;c[z>>2]=0;a[C+20>>0]=0;A=C+21|0;a[A>>0]=0;h=j?6:4;c[z>>2]=h;ew(l|0,(j?43742:43749)|0,h|0)|0;h=c[g+8+(s*72|0)+20>>2]|0;if(!h){c[n>>2]=c[g+8+(s*72|0)+8>>2];Eb(C,43767,n)}else{c[m>>2]=c[h+20>>2];Eb(C,43754,m)}h=c[g+8+(s*72|0)+12>>2]|0;if(h|0){c[p>>2]=h;Eb(C,43777,p)}do if(!(q&1280)){k=x+32|0;l=c[k>>2]|0;if((c[(c[g+8+(s*72|0)+16>>2]|0)+36>>2]&32|0)!=0?(s=l+55|0,((d[s>>0]|d[s+1>>0]<<8)&3)==2):0)if(j)h=43784;else break;else if(!(q&131072))h=(q&16384|0)==0?((q&64|0)==0?43872:43854):43829;else h=43796;i=c[z>>2]|0;j=i+7|0;if(j>>>0<(c[w>>2]|0)>>>0){c[z>>2]=j;s=(c[B>>2]|0)+i|0;a[s>>0]=a[43881]|0;a[s+1>>0]=a[43882]|0;a[s+2>>0]=a[43883]|0;a[s+3>>0]=a[43884]|0;a[s+4>>0]=a[43885]|0;a[s+5>>0]=a[43886]|0;a[s+6>>0]=a[43887]|0}else wb(C,43881,7);c[t>>2]=c[l>>2];Eb(C,h,t);p=c[k>>2]|0;h=b[x+24>>1]|0;l=b[x+42>>1]|0;i=h&65535;h=h<<16>>16==0;if(h?(c[v>>2]&48|0)==0:0)break;j=c[z>>2]|0;k=j+2|0;if(k>>>0<(c[w>>2]|0)>>>0){c[z>>2]=k;t=(c[B>>2]|0)+j|0;a[t>>0]=32;a[t+1>>0]=40}else wb(C,43974,2);a:do if(h)i=0;else{n=p+4|0;o=p+12|0;m=l&65535;l=0;while(1){h=b[(c[n>>2]|0)+(l<<1)>>1]|0;switch(h<<16>>16){case -2:{h=43996;break}case -1:{h=38132;break}default:h=c[(c[(c[o>>2]|0)+4>>2]|0)+(h<<16>>16<<4)>>2]|0}do if(l|0){j=c[z>>2]|0;k=j+5|0;if(k>>>0<(c[w>>2]|0)>>>0){c[z>>2]=k;t=(c[B>>2]|0)+j|0;a[t>>0]=a[43977]|0;a[t+1>>0]=a[43978]|0;a[t+2>>0]=a[43979]|0;a[t+3>>0]=a[43980]|0;a[t+4>>0]=a[43981]|0;break}else{wb(C,43977,5);break}}while(0);c[u>>2]=h;Eb(C,l>>>0<m>>>0?43988:43983,u);l=l+1|0;if((l|0)==(i|0))break a}}while(0);h=c[v>>2]|0;if(!(h&32))j=i;else{im(C,p,e[x+26>>1]|0,i,i,43905);j=1;h=c[v>>2]|0}if(h&16|0)im(C,p,e[x+28>>1]|0,i,j,43907);h=c[z>>2]|0;i=h+1|0;if(i>>>0<(c[w>>2]|0)>>>0){c[z>>2]=i;a[(c[B>>2]|0)+h>>0]=41;break}else{wb(C,34066,1);break}}else{if((q&256|0)==0|(q&15|0)==0){if(!(q&1024))break;w=c[x+32>>2]|0;c[o>>2]=c[x+24>>2];c[o+4>>2]=w;Eb(C,43947,o);break}if(!(q&5))h=(i|0)==48?43891:(q&32|0)==0?43907:43905;else h=43889;c[r>>2]=h;Eb(C,43909,r)}while(0);h=c[B>>2]|0;if(((h|0)!=0?(a[h+(c[z>>2]|0)>>0]=0,(c[y>>2]|0)!=0):0)?(a[A>>0]&4)==0:0)k=$d(C)|0;else k=c[B>>2]|0;j=D+108|0;h=c[j>>2]|0;i=c[f+212>>2]|0;if((c[D+112>>2]|0)>(h|0)){c[j>>2]=h+1;f=c[D+104>>2]|0;a[f+(h*20|0)>>0]=-85;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=h;c[f+(h*20|0)+8>>2]=i;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else h=Di(D,171,h,i,0)|0;i=c[D>>2]|0;do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[j>>2]|0)+-1|0;i=c[D+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(D,i+(h*20|0)|0,k,-7);break}if(k|0){c[i+(h*20|0)+16>>2]=k;a[j>>0]=-7}}else if(k|0){if(i|0){if(c[i+480>>2]|0){Xd(i,k);break}D=k;if((c[i+304>>2]|0)>>>0<=D>>>0?(c[i+308>>2]|0)>>>0>D>>>0:0){D=i+300|0;c[k>>2]=c[D>>2];c[D>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{D=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);Ra=E;return}Ra=E;return}
- function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r+4|0;j=r;d=c[a>>2]|0;n=c[d>>2]|0;do if(b){if((n+-3|0)>>>0<2){e=b<<2;q=pb(e,0)|0;if(!q){e=7;break}gw(q|0,0,e|0)|0;c[p>>2]=d;if((c[d>>2]|0)==(n|0)){e=d;do e=c[e+12>>2]|0;while((c[e>>2]|0)==(n|0));c[p>>2]=e}else e=d;m=b+-1|0;o=(b|0)>0;a:do if(o){f=0;b:while(1){k=e+8|0;l=c[k>>2]|0;c[k>>2]=0;k=(l|0)==0;if(k)d=0;else c[l+12>>2]=0;e=cr(p,m)|0;if(e|0){k=46;break a}g=c[p>>2]|0;if(g){j=0;e=f;h=c[p>>2]|0;while(1){i=q+(j<<2)|0;f=c[i>>2]|0;if(!f)break;c[e+12>>2]=f;c[e+16>>2]=g;c[f+8>>2]=e;c[g+8>>2]=e;h=e+8|0;f=c[h>>2]|0;c[h>>2]=0;c[i>>2]=0;j=j+1|0;if(!((j|0)<(b|0)&(e|0)!=0))break b;else{g=e;h=e;e=f}}c[p>>2]=h;c[i>>2]=g;c[p>>2]=0;f=e}if(k){k=37;break a}h=l+16|0;e=h;while(1){e=c[e>>2]|0;g=e;if((c[g>>2]|0)==(n|0))e=g+12|0;else break}c[p>>2]=e;i=l+8|0;g=c[h>>2]|0;c[g+8>>2]=c[i>>2];h=c[i>>2]|0;if(!h)d=g;else c[h+12>>2]=g;c[i>>2]=f;f=l}c[p>>2]=e;k=30}else{f=0;while(1){g=e+8|0;j=c[g>>2]|0;c[g>>2]=0;g=(j|0)==0;if(g)d=0;else c[j+12>>2]=0;e=cr(p,m)|0;if(e|0){k=46;break a}e=c[p>>2]|0;if(e|0){k=30;break a}if(g){k=37;break a}h=j+16|0;e=h;while(1){e=c[e>>2]|0;g=e;if((c[g>>2]|0)==(n|0))e=g+12|0;else break}c[p>>2]=e;i=j+8|0;g=c[h>>2]|0;c[g+8>>2]=c[i>>2];h=c[i>>2]|0;if(!h)d=g;else c[h+12>>2]=g;c[i>>2]=f;f=j}}while(0);if((k|0)==30){ar(e);e=18;k=46}else if((k|0)==37){c[p>>2]=0;if(o){h=0;d=0;do{e=q+(h<<2)|0;g=c[e>>2]|0;if(g){if(!d){d=g;e=g+8|0}else{c[f+16>>2]=d;e=c[e>>2]|0;c[f+12>>2]=e;c[e+8>>2]=f;c[d+8>>2]=f;e=f+8|0;d=f;f=c[e>>2]|0}c[e>>2]=0}h=h+1|0}while((h|0)!=(b|0));c[p>>2]=d;e=0}else{e=0;d=0}}if((k|0)==46){if(o){g=0;do{ar(c[q+(g<<2)>>2]|0);g=g+1|0}while((g|0)!=(b|0))}if(f)do{g=f;f=c[f+8>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{b=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0)}if(!(c[7324]|0))ab[c[29344>>2]&127](q);else{b=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q)}}else{if((n|0)!=2){q=0;b=d;c[a>>2]=b;Ra=r;return q|0}h=d+12|0;g=c[h>>2]|0;c[p>>2]=g;i=d+16|0;f=c[i>>2]|0;c[j>>2]=f;c[h>>2]=0;c[i>>2]=0;c[g+8>>2]=0;c[f+8>>2]=0;g=b+-1|0;e=cr(p,g)|0;do if(!e){e=cr(j,g)|0;if(!e){e=c[p>>2]|0;c[h>>2]=e;c[e+8>>2]=d;e=c[j>>2]|0;c[i>>2]=e;c[e+8>>2]=d;e=0;break}else{f=c[j>>2]|0;k=63;break}}else k=63;while(0);if((k|0)==63){ar(f);ar(c[p>>2]|0)}}if(!e){q=0;b=d;c[a>>2]=b;Ra=r;return q|0}}else e=1;while(0);ar(d);q=e;b=0;c[a>>2]=b;Ra=r;return q|0}function dr(a,b){a=a|0;b=b|0;var d=0;if(!a){d=0;return d|0}d=b;while(1){if((d|0)<0){b=18;a=6;break}d=d+-1|0;b=dr(c[a+12>>2]|0,d)|0;if(b|0){a=6;break}a=c[a+16>>2]|0;if(!a){b=0;a=6;break}}if((a|0)==6)return b|0;return 0}function er(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=Ra;Ra=Ra+32|0;R=W+20|0;S=W+16|0;T=W+12|0;U=W+8|0;V=W+4|0;E=W;F=b+24|0;H=b+20|0;I=b+16|0;J=b+32|0;K=b+8|0;M=b+4|0;N=b+12|0;m=0;j=f;l=1;D=e;e=0;a:while(1){c[E>>2]=0;c[F>>2]=0;b:do if((j|0)>0){n=j;k=D;while(1){switch(a[k>>0]|0){case 12:case 11:case 13:case 10:case 9:case 32:break;default:{C=k;break b}}i=n+-1|0;k=k+1|0;if((n|0)>1)n=i;else{w=6;break b}}}else{i=j;k=D;w=6}while(0);if((w|0)==6){w=0;if(!i){k=101;i=0;w=171;break}else{n=i;C=k}}i=C+4|0;k=C+5|0;c:do if((n|0)<2)w=187;else{if(!(Lu(C,54896,2)|0))switch(a[C+2>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=0;q=2;o=10;break}default:w=25}else w=25;d:do if((w|0)==25){w=0;if((n|0)<3){w=187;break c}if(!(Lu(C,54899,3)|0))switch(a[C+3>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=1;q=3;o=10;break d}default:{}}if(!(Lu(C,54903,3)|0))switch(a[C+3>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=2;q=3;o=10;break d}default:{}}if((n|0)<4){w=187;break c}if(Lu(C,54907,4)|0){w=187;break c}i=a[i>>0]|0;if(i<<24>>24==47){i=a[k>>0]|0;if((i+-48&255)>=10){w=187;break c}k=5;o=0;do{o=(o*10|0)+-48+(i<<24>>24)|0;k=k+1|0;i=a[C+k>>0]|0}while((i+-48&255)<10)}else{k=4;o=10}switch(i<<24>>24){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=3;q=k;break}default:{w=187;break c}}}while(0);p=26336+(i<<3)+6|0;if(mb()|0){k=7;i=0;w=171;break a}if(!(c[7324]|0)){n=Wa[c[29340>>2]&127](48)|0;if(!n){k=7;i=0;w=171;break a}t=n;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0))}else{i=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;n=59064;k=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&k>>>0>0){B=c[14978]|0;A=Tv(k|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;z=L()|0;c[14768]=((z|0)<0|(z|0)==0&A>>>0<=B>>>0)&1}n=Wa[c[29340>>2]&127](i)|0;if(!n){k=7;i=0;w=171;break a}i=Wa[c[29352>>2]&127](n)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i;t=n;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0))}c[n>>2]=d[p>>0];c[n+4>>2]=o;c[E>>2]=n;k=0;i=C-D+q|0}while(0);e:do if((w|0)==187){w=0;switch(a[C>>0]|0){case 41:{w=87;break a}case 34:{f:do if((n|0)>1){i=1;while(1){if((a[C+i>>0]|0)==34){k=i;break f}i=i+1|0;if((i|0)>=(n|0)){k=i;break}}}else k=1;while(0);i=k+1-D+C|0;if((k|0)==(n|0)){k=1;w=171;break a}A=C+1|0;z=k+-1|0;o=c[b>>2]|0;B=c[o>>2]|0;n=c[M>>2]|0;c[R>>2]=0;k=Za[c[B+12>>2]&127](o,A,z,R)|0;g:do if(!k){c[c[R>>2]>>2]=o;if((c[B>>2]|0)>0?(G=Xa[c[B+24>>2]&255](c[R>>2]|0,n)|0,G|0):0){Wa[c[B+16>>2]&127](c[R>>2]|0)|0;c[R>>2]=0;k=G;o=0;w=36;break}o=c[R>>2]|0;w=B+20|0;y=o;t=0;r=0;s=0;q=0;n=0;u=0;p=0;while(1){c[S>>2]=0;c[T>>2]=0;c[U>>2]=0;c[V>>2]=0;k=$a[c[w>>2]&127](y,R,S,T,U,V)|0;x=(k|0)==0;if(x){if(mb()|0){w=42;break}v=sb(u,(t*24|0)+144|0,0)|0;if(!v){w=42;break}n=c[S>>2]|0;if(mb()|0){w=48;break}u=n+s|0;u=sb(q,u,((u|0)<0)<<31>>31)|0;if(!u){w=48;break}p=v+120|0;q=p+(t*24|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;ew(u+s|0,c[R>>2]|0,c[S>>2]|0)|0;q=c[S>>2]|0;c[p+(t*24|0)+4>>2]=q;n=c[U>>2]|0;if((n|0)<(z|0))n=(a[A+n>>0]|0)==42;else n=0;c[p+(t*24|0)+8>>2]=n&1;n=c[T>>2]|0;if((n|0)>0)n=(a[C+n>>0]|0)==94;else n=0;c[p+(t*24|0)+12>>2]=n&1;t=t+1|0;n=v;r=t;s=q+s|0;q=u;p=v;u=v}else t=t+1|0;if(!x){w=58;break}}do if((w|0)==42)if(u)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);n=q;k=0;break}else{n=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);n=q;k=0;break}else{n=q;k=0}else if((w|0)==48)if(q)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);n=0;k=v;break}else{n=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);n=0;k=v;break}else{n=0;k=v}else if((w|0)==58){Wa[c[B+16>>2]&127](y)|0;o=0;w=59;break g}while(0);w=75}else{o=c[R>>2]|0;w=36}while(0);if((w|0)==36){n=0;r=0;s=0;q=0;p=0;w=59}h:do if((w|0)==59){w=0;if((k|0)==101){if((mb()|0)==0?(O=sb(p,s+144+(r*24|0)|0,0)|0,O|0):0){n=O+48|0;t=O;u=t+112|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[O>>2]=5;k=O+20|0;c[k>>2]=n;c[O+116>>2]=c[H>>2];c[O+112>>2]=r;n=n+72+(r*24|0)|0;do if(q|0){ew(n|0,q|0,s|0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{C=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);p=c[k>>2]|0;q=c[p+64>>2]|0;if((q|0)<=0){k=0;n=O;break}c[p+72>>2]=n;if((q|0)==1){k=0;n=O;break}k=n+(c[p+76>>2]|0)|0;n=1;while(1){c[p+72+(n*24|0)>>2]=k;o=n+1|0;if((o|0)<(q|0)){k=k+(c[p+72+(n*24|0)+4>>2]|0)|0;n=o}else{k=0;n=O;break h}}}if(p)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);n=q;k=0;w=75;break}else{n=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);n=q;k=0;w=75;break}else{n=q;k=0;w=75}}}while(0);do if((w|0)==75){w=0;if(o|0)Wa[c[B+16>>2]&127](o)|0;do if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{C=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(k)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);k=7;n=0;break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);k=7;n=0;break}else{k=7;n=0}}while(0);c[E>>2]=n;break e}case 40:{c[R>>2]=0;c[J>>2]=(c[J>>2]|0)+1;k=er(b,C+1|0,n+-1|0,E,R)|0;i=1-D+C+(c[R>>2]|0)|0;n=c[E>>2]|0;break e}default:{s=c[H>>2]|0;t=c[I>>2]|0;i:do if((t|0)>0){u=c[K>>2]|0;i=0;j:while(1){k=c[u+(i<<2)>>2]|0;v=Eu(k)|0;if((n|0)>(v|0)?!((k|0)==0?1:(a[C+v>>0]|0)!=58):0){if((v|0)<=0){w=99;break}r=C;p=v;while(1){o=a[k>>0]|0;if(!(o<<24>>24)){w=95;break}o=a[208+(o&255)>>0]|0;q=a[208+(d[r>>0]|0)>>0]|0;if(o<<24>>24!=q<<24>>24){w=97;break}if((p|0)>1){k=k+1|0;r=r+1|0;p=p+-1|0}else{w=99;break j}}if((w|0)==95){w=0;o=0;k=a[208+(d[r>>0]|0)>>0]|0}else if((w|0)==97){w=0;o=o&255;k=q}if((o|0)==(k&255|0)){w=102;break}}i=i+1|0;if((i|0)>=(t|0)){q=s;u=0;break i}}if((w|0)==99){w=0;q=i;u=v+1-D+C|0;break}else if((w|0)==102){w=0;q=i;u=v+1-D+C|0;break}}else{q=s;u=0}while(0);s=D+u|0;p=j-u|0;o=c[b>>2]|0;t=c[o>>2]|0;k:do if((p|0)>0){i=0;while(1){switch(a[s+i>>0]|0){case 34:case 41:case 40:break k;default:{}}i=i+1|0;if((i|0)>=(p|0))break k}}else i=0;while(0);n=c[M>>2]|0;c[R>>2]=0;k=Za[c[t+12>>2]&127](o,s,i,R)|0;do if(!k){c[c[R>>2]>>2]=o;if((c[t>>2]|0)>0?(P=Xa[c[t+24>>2]&255](c[R>>2]|0,n)|0,P|0):0){Wa[c[t+16>>2]&127](c[R>>2]|0)|0;c[R>>2]=0;k=P;w=111;break}r=c[R>>2]|0;c[S>>2]=0;c[T>>2]=0;c[U>>2]=0;c[V>>2]=0;k=$a[c[t+20>>2]&127](r,R,S,T,U,V)|0;l:do if(!k){i=(c[S>>2]|0)+144|0;n=pb(i,0)|0;if(!n){n=0;k=7;i=c[U>>2]|0;break}gw(n|0,0,i|0)|0;c[n>>2]=5;c[n+20>>2]=n+48;c[n+112>>2]=1;c[n+116>>2]=q;i=c[S>>2]|0;c[n+124>>2]=i;C=n+144|0;c[n+120>>2]=C;ew(C|0,c[R>>2]|0,i|0)|0;i=c[U>>2]|0;if((i|0)<(p|0)?(Q=i+1|0,(a[s+i>>0]|0)==42):0){c[n+128>>2]=1;c[U>>2]=Q;i=Q}k=c[T>>2]|0;if((c[N>>2]|0)!=0&(k|0)>0){p=n+132|0;while(1){o=k;k=k+-1|0;if((a[s+k>>0]|0)!=94){k=0;break l}c[p>>2]=1;c[T>>2]=k;if((o|0)<=1){k=0;break}}}else k=0}else{n=0;k=(i|0)!=0&(k|0)==101?0:k}while(0);Wa[c[t+16>>2]&127](r)|0}else w=111;while(0);if((w|0)==111){w=0;n=0}c[E>>2]=n;i=i+u|0;break e}}}while(0);if((k|0)==0&(n|0)!=0){r=c[n>>2]|0;if((r|0)!=5){p=(c[n+12>>2]|0)!=0;o=p^1;k=(l|0)!=0;if(k&o){w=129;break}else q=p}else{k=(l|0)!=0;o=0;q=1}if(k|o)if(!m)m=0;else w=154;else{if(mb()|0){w=152;break}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](48)|0;if(!k){w=152;break}t=k;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0));p=k}else{k=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;p=59064;l=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&l>>>0>0){C=c[14978]|0;B=Tv(l|0,p|0,k|0,((k|0)<0)<<31>>31|0)|0;A=L()|0;c[14768]=((A|0)<0|(A|0)==0&B>>>0<=C>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l){w=152;break}k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;t=l;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0));p=l}c[p>>2]=3;k=m+8|0;l=c[k>>2]|0;m:do if(!l)w=150;else{n=l;while(1){if((c[n>>2]|0)>3)break;k=n+8|0;l=c[k>>2]|0;if(!l){m=n;w=150;break m}else{m=n;n=l}}c[n+16>>2]=p;c[p+8>>2]=c[k>>2]}while(0);if((w|0)==150)e=p;c[p+12>>2]=m;c[k>>2]=p;m=p;w=154}if((w|0)==154){w=0;if(!((r|0)!=1|q)?(c[m>>2]|0)!=5:0){w=158;break}if((r|0)!=5&q?(c[m>>2]|0)==1:0){w=158;break}}if(q){k=c[E>>2]|0;l=k;if(!e){e=k;m=l}else{c[m+16>>2]=k;c[l+8>>2]=m;m=l}}else{q=c[E>>2]|0;k=m+8|0;l=c[k>>2]|0;n:do if(!l)w=167;else{p=c[q>>2]|0;n=l;while(1){if((c[n>>2]|0)>(p|0))break;k=n+8|0;l=c[k>>2]|0;if(!l){m=n;w=167;break n}else{m=n;n=l}}c[n+16>>2]=q;c[q+8>>2]=c[k>>2]}while(0);if((w|0)==167){w=0;e=q}c[q+12>>2]=m;c[k>>2]=q;m=c[E>>2]|0}l=o&1;k=0}j=j-i|0;if(!k)D=D+i|0;else{w=173;break}}if((w|0)==87){c[J>>2]=(c[J>>2]|0)+-1;c[E>>2]=0;k=101;i=1-D+C|0;w=171}else if((w|0)==129){ar(n);i=1;w=170}else if((w|0)==152){ar(n);i=7;w=170}else if((w|0)==158){ar(c[E>>2]|0);i=1;w=170}if((w|0)!=170)if((w|0)==171){j=j-i|0;w=173}if((w|0)==173){i=(e|0)!=0&(k|0)==101&(l|0)!=0?1:k;c[h>>2]=f-j;if((i|0)==101){h=0;f=e;c[g>>2]=f;Ra=W;return h|0}}ar(e);h=i;f=0;c[g>>2]=f;Ra=W;return h|0}function fr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!b)return;while(1){if(c[f>>2]|0){v=38;break}g=c[b>>2]|0;if((g|0)==5){v=5;break}c[e>>2]=(c[e>>2]|0)+((g|0)==4&1);fr(a,c[b+12>>2]|0,d,e,f);b=c[b+16>>2]|0;if(!b){v=38;break}}if((v|0)==5){t=b+20|0;b=c[t>>2]|0;u=c[b+64>>2]|0;c[d>>2]=(c[d>>2]|0)+u;a:do if((u|0)>0){s=a+20|0;r=0;b:while(1){o=c[b+72+(r*24|0)>>2]|0;p=c[b+72+(r*24|0)+4>>2]|0;n=c[b+72+(r*24|0)+8>>2]|0;q=b+72+(r*24|0)+20|0;if(mb()|0){g=0;b=7;v=34;break}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](56)|0;if(!g){g=0;b=7;v=34;break}}else{b=Wa[c[29356>>2]&127](56)|0;if((c[14985]|0)>>>0<56)c[14985]=56;e=59064;g=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&g>>>0>0){m=c[14978]|0;l=Tv(g|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;k=L()|0;c[14768]=((k|0)<0|(k|0)==0&l>>>0<=m>>>0)&1}g=Wa[c[29340>>2]&127](b)|0;if(!g){g=0;b=7;v=34;break}b=Wa[c[29352>>2]&127](g)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0>(c[14987]|0)>>>0)c[14987]=b}m=c[a>>2]|0;l=(n|0)!=0;c:do if(l){h=m+256|0;d=g+36|0;k=c[m+252>>2]|0;i=(k|0)>1;if(i){e=c[h>>2]|0;j=1;while(1){if((c[e+(j*24|0)>>2]|0)==(p|0)){v=25;break}b=j+1|0;if((b|0)<(k|0))j=b;else break}if((v|0)==25){v=0;b=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));b=Xp(m,b,j,-2,o,p,0,0,g)|0;c[d>>2]=1;break}j=p+1|0;if(i){e=c[h>>2]|0;h=1;while(1){if((c[e+(h*24|0)>>2]|0)==(j|0))break;b=h+1|0;if((b|0)<(k|0))h=b;else{v=33;break c}}b=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));b=Xp(m,b,h,-2,o,p,1,0,g)|0;if(b|0){v=34;break b}b=Xp(m,c[s>>2]|0,0,-2,o,p,0,0,g)|0}else v=33}else v=33}else{d=g+36|0;v=33}while(0);if((v|0)==33){v=0;b=(l^1)&1;e=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));p=Xp(m,e,0,-2,o,p,n,0,g)|0;c[d>>2]=b;b=p}c[q>>2]=g;r=r+1|0;if(b|0)break;b=c[t>>2]|0;if((r|0)>=(u|0))break a}if((v|0)==34)c[q>>2]=g;c[f>>2]=b;return}while(0);c[b+44>>2]=-1;return}else if((v|0)==38)return}function gr(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;D=Ra;Ra=Ra+16|0;C=D;if(c[h>>2]|0){Ra=D;return}j=e;a:while(1){switch(c[j>>2]|0){case 5:{e=5;break a}case 2:{e=31;break a}case 4:{i=j+12|0;e=c[i>>2]|0;c[c[g>>2]>>2]=e;c[g>>2]=(c[g>>2]|0)+4;break}default:{e=d;i=j+12|0}}gr(b,e,c[i>>2]|0,f,g,h);i=j+16|0;if((c[j>>2]|0)==4){e=c[i>>2]|0;c[c[g>>2]>>2]=e;c[g>>2]=(c[g>>2]|0)+4}if(!(c[h>>2]|0)){d=e;j=c[i>>2]|0}else{e=31;break}}if((e|0)==5){v=c[j+20>>2]|0;w=v+64|0;x=v+68|0;u=0;while(1){if((u|0)>=(c[w>>2]|0)){e=31;break}y=c[f>>2]|0;c[f>>2]=y+24;c[y>>2]=v;c[y+4>>2]=u;c[y+12>>2]=d;c[y+8>>2]=v+72+(u*24|0);c[y+20>>2]=c[x>>2];m=c[v+72+(u*24|0)+20>>2]|0;y=y+16|0;t=c[b>>2]|0;n=c[t+240>>2]|0;o=m+4|0;p=t+20|0;q=t+248|0;r=t+244|0;s=t+12|0;t=t+16|0;i=0;l=0;while(1){if((l|0)>=(c[o>>2]|0)){e=0;break}e=c[(c[m>>2]|0)+(l<<2)>>2]|0;b:do if(((c[e+56>>2]|0)==0?(a[e+5>>0]|0)==0:0)?(A=e+8|0,z=c[A>>2]|0,A=c[A+4>>2]|0,B=e+16|0,k=B,g=c[k+4>>2]|0,!((A|0)>(g|0)|((A|0)==(g|0)?z>>>0>(c[k>>2]|0)>>>0:0))):0){j=c[q>>2]|0;g=z;k=A;while(1){if(!j){e=c[r>>2]|0;if(!e){c[C>>2]=c[p>>2];e=Bb(53537,C)|0;c[r>>2]=e;if(!e){e=7;break b}}e=ad(c[s>>2]|0,c[t>>2]|0,e,53549,g,k,0,q)|0}else e=ld(j,g,k)|0;if(e|0)break b;j=c[q>>2]|0;if((j|0)!=0?(c[j+16>>2]|0)!=0:0)e=c[j>>2]|0;else e=0;if((e+35|0)>(n|0))i=((e+34|0)/(n|0)|0)+i|0;E=g;g=Sv(g|0,k|0,1,0)|0;G=k;k=L()|0;e=B;F=c[e+4>>2]|0;if(!((G|0)<(F|0)|((G|0)==(F|0)?E>>>0<(c[e>>2]|0)>>>0:0))){e=0;break}}}else e=0;while(0);if(!e)l=l+1|0;else break}c[y>>2]=i;c[h>>2]=e;if(!e)u=u+1|0;else{e=31;break}}if((e|0)==31){Ra=D;return}}else if((e|0)==31){Ra=D;return}}function hr(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;x=B+4|0;y=B;z=c[e>>2]|0;if(c[z+40>>2]|0){A=0;Ra=B;return A|0}v=(h|0)>0;if(!v){A=0;Ra=B;return A|0}i=0;j=0;k=0;while(1){if((c[g+(k*24|0)+12>>2]|0)==(f|0)){u=i+1|0;j=(c[g+(k*24|0)+16>>2]|0)+j|0}else u=i;k=k+1|0;if((k|0)==(h|0))break;else i=u}if((j|0)==0|(u|0)<2){A=0;Ra=B;return A|0}s=e+60|0;i=c[s>>2]|0;do if(!i){i=lr(z,x)|0;if(!i){r=c[x>>2]|0;q=(r|0)==0;if(q)l=mc(29576)|0;else{i=c[r+120>>2]|0;if((i|0)!=0?(b[r+144>>1]|0)!=0:0)j=r;else{i=c[r>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;j=r}l=mc(i)|0;i=c[j>>2]|0;k=r+40|0;j=c[k>>2]|0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&j;c[k>>2]=i}n=Lc(r,0)|0;p=l+n|0;j=a[l>>0]|0;i=j&255;do if(!(i&128)){k=1;i=j&255;o=0}else{t=d[l+1>>0]|0;i=t<<7|i&127;if(!(t&128)){k=2;o=0;break}t=d[l+2>>0]|0;i=t<<14|i&16383;if(!(t&128)){k=3;o=0;break}t=d[l+3>>0]|0;i=t<<21|i&2097151;if(!(t&128)){k=4;o=0;break}j=28;k=l+4|0;i=i&268435455;m=0;do{t=k;k=k+1|0;t=d[t>>0]|0;o=cw(t&127|0,0,j|0)|0;i=Sv(o|0,L()|0,i|0,m|0)|0;m=L()|0;j=j+7|0}while(j>>>0<64&((t&128|0)!=0|0!=0));k=k-l|0;o=m}while(0);if((k|0)<(n|0)){n=l+k|0;do{k=a[n>>0]|0;j=k&255;do if(!(j&128)){l=1;j=k&255;k=0}else{t=d[n+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;k=0;break}t=d[n+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;k=0;break}t=d[n+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;k=0;break}l=28;m=n+4|0;j=j&268435455;k=0;do{t=m;m=m+1|0;t=d[t>>0]|0;C=cw(t&127|0,0,l|0)|0;j=Sv(C|0,L()|0,j|0,k|0)|0;k=L()|0;l=l+7|0}while(l>>>0<64&((t&128|0)!=0|0!=0));l=m-n|0}while(0);n=n+l|0}while(n>>>0<p>>>0);if(!((i|0)==0&(o|0)==0|(j|0)==0&(k|0)==0)){p=e+64|0;c[p>>2]=i;c[p+4>>2]=o;o=Wv(j|0,k|0,i|0,o|0)|0;p=L()|0;t=c[z+240>>2]|0;C=((t|0)<0)<<31>>31;p=Sv(o|0,p|0,t|0,C|0)|0;C=Wv(p|0,L()|0,t|0,C|0)|0;L()|0;c[s>>2]=C;do if(!q){i=c[r>>2]|0;C=r+136|0;t=c[C+4>>2]|0;if((t|0)>0|(t|0)==0&(c[C>>2]|0)>>>0>0)hc(i,r);j=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;C=r+64|0;c[C>>2]=0;c[C+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}else i=0;while(0);t=c[s>>2]|0;break}}if(!q){i=c[r>>2]|0;C=r+136|0;A=c[C+4>>2]|0;if((A|0)>0|(A|0)==0&(c[C>>2]|0)>>>0>0)hc(i,r);C=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;A=r+64|0;c[A>>2]=0;c[A+4>>2]=0;if((C|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=267}else i=267}else i=267}C=i;Ra=B;return C|0}else{t=i;i=0}while(0);if(!((u|0)>0&(i|0)==0)){C=i;Ra=B;return C|0}s=u+-1|0;r=e+28|0;p=0;o=1;q=0;while(1){if(v){i=0;k=0;do{j=g+(k*24|0)|0;do if((c[g+(k*24|0)+8>>2]|0)!=0?(c[g+(k*24|0)+12>>2]|0)==(f|0):0){if(i|0?(c[g+(k*24|0)+16>>2]|0)>=(c[i+16>>2]|0):0)break;i=j}while(0);k=k+1|0}while((k|0)!=(h|0));m=i}else m=0;n=(q|0)==0;do if(n){o=o<<2;A=88}else{C=(o|0)/4|0;if((c[m+16>>2]|0)<(G((p+-1+C|0)/(C|0)|0,t)|0)){j=q>>>0<12?o<<2:o;if(!((q|0)==(s|0)?1:(c[(c[m>>2]|0)+64>>2]|0)<2)){o=j;A=88;break}i=0;l=j;k=p;j=m+8|0;break}j=m+8|0;n=c[j>>2]|0;m=c[m+20>>2]|0;do if(!(mb()|0)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;if(!i){i=7;break}}else{i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){C=c[14978]|0;e=Tv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&e>>>0<=C>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=7;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}c[i+12>>2]=0;c[i>>2]=n;c[i+8>>2]=c[r>>2];c[i+4>>2]=m;c[r>>2]=i;c[n+16>>2]=i;i=0}else i=7;while(0);l=n+20|0;br(c[l>>2]|0);c[l>>2]=0;l=o;k=p}while(0);if((A|0)==88){A=0;j=m+8|0;i=c[j>>2]|0;c[x>>2]=0;c[y>>2]=0;i=jr(z,i,c[m+20>>2]|0,x,y)|0;if(!i){i=kr(z,c[m>>2]|0,c[m+4>>2]|0,c[y>>2]|0,c[x>>2]|0)|0;if(!i){k=c[m>>2]|0;i=c[k>>2]|0;k=c[k+4>>2]|0;if((i|0)!=0?(w=i+k|0,(k|0)>0):0){k=0;do{do{C=i;i=i+1|0}while((a[C>>0]|0)<0);l=0;while(1){m=a[i>>0]|0;i=i+1|0;if(!(l<<24>>24|m))break;else l=m&128}k=k+1|0}while(i>>>0<w>>>0)}else k=0;i=0;k=n|(k|0)<(p|0)?k:p}else k=p}else k=p;l=o}c[j>>2]=0;q=q+1|0;if(!((q|0)<(u|0)&(i|0)==0))break;else{p=k;o=l}}Ra=B;return i|0}function ir(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!d)return;if(c[e>>2]|0)return;if((c[d>>2]|0)!=5){h=d+12|0;ir(b,c[h>>2]|0,e);f=d+16|0;ir(b,c[f>>2]|0,e);if(!(a[(c[h>>2]|0)+34>>0]|0))f=0;else f=(a[(c[f>>2]|0)+34>>0]|0)!=0&1;a[d+34>>0]=f;return}h=c[d+20>>2]|0;g=c[h+64>>2]|0;if(g|0){a:do if((g|0)>0){f=0;do{if(!(c[h+72+(f*24|0)+16>>2]|0))break a;f=f+1|0}while((f|0)<(g|0))}else f=0;while(0);a[d+34>>0]=(f|0)==(g|0)&1}d=pr(b,1,h)|0;c[e>>2]=d;return}function jr(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+160|0;r=x+148|0;s=x+144|0;u=x+16|0;i=x;w=e+20|0;v=c[w>>2]|0;j=u;k=j+128|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[i+12>>2]=((c[e+12>>2]|0)==0?0:32)|((c[e+8>>2]|0)==0?3:11)|((c[b+24>>2]|0)>(f|0)?4:0);c[i+8>>2]=f;q=c[e>>2]|0;c[i>>2]=q;e=c[e+4>>2]|0;c[i+4>>2]=e;c[v+12>>2]=i;e=eq(b,v,q,e)|0;a:do if(!e){n=v+48|0;o=v+52|0;p=u+64|0;q=b+235|0;b:while(1){e=gq(b,v)|0;switch(e|0){case 0:break b;case 100:break;default:break a}m=c[n>>2]|0;f=c[o>>2]|0;e=c[u>>2]|0;c:do if(!e){e=nb(f+11|0)|0;c[u>>2]=e;c[p>>2]=f;if(!e)e=7;else{ew(e|0,m|0,f|0)|0;j=e+f|0;k=j+10|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));e=0}}else{l=0;j=m;i=u;while(1){k=u+64+(l<<2)|0;e=mr(d[q>>0]|0,j,f,e,c[k>>2]|0,r,s)|0;f=(j|0)==(m|0)|(j|0)==0;if(e|0){t=10;break}do if(!f)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);e=c[i>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[i>>2]=0;j=c[r>>2]|0;f=c[s>>2]|0;if((l|0)==15){t=23;break}l=l+1|0;if(l>>>0>=16){e=0;break c}i=u+(l<<2)|0;e=c[i>>2]|0;if(!e){t=8;break}}if((t|0)==8){t=0;c[i>>2]=j;c[u+64+(l<<2)>>2]=f;e=0;break}else if((t|0)==10){t=0;do if(!f)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{m=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);break}else if((t|0)==23){t=0;c[i>>2]=j;c[k>>2]=f;e=0;break}}while(0);if(e|0)break a}l=0;f=0;j=0;d:while(1){i=u+(l<<2)|0;k=c[i>>2]|0;do if(!k)e=j;else{if(!j){f=c[u+64+(l<<2)>>2]|0;c[i>>2]=0;e=k;break}e=mr(d[q>>0]|0,k,c[u+64+(l<<2)>>2]|0,j,f,s,r)|0;f=(c[7324]|0)==0;if(e|0)break d;if(f)ab[c[29344>>2]&127](k);else{b=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{b=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}c[i>>2]=0;f=c[r>>2]|0;e=c[s>>2]|0}while(0);l=l+1|0;if(l>>>0>=16){t=45;break}else j=e}if((t|0)==45){c[u>>2]=e;c[p>>2]=f;c[h>>2]=e;c[g>>2]=f;u=0;br(v);c[w>>2]=0;Ra=x;return u|0}if(f)ab[c[29344>>2]&127](j);else{t=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}}while(0);f=0;do{i=c[u+(f<<2)>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);f=f+1|0}while((f|0)!=16);br(v);c[w>>2]=0;Ra=x;return e|0}function kr(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;M=Ra;Ra=Ra+16|0;F=M+8|0;G=M+4|0;H=M;do if(!g){i=c[e>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{K=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[e>>2]=0;c[e+4>>2]=0;j=0;i=e+44|0}else{i=e+44|0;j=c[i>>2]|0;if((j|0)<0){c[e>>2]=g;c[e+4>>2]=h;j=0;break}l=c[e>>2]|0;if(!l)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);j=0;break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);j=0;break}K=e+4|0;k=c[K>>2]|0;if((j|0)<(f|0)){D=f-j|0;m=k;J=l;l=g}else{D=j-f|0;m=h;J=g;h=k}E=l;p=a[b+235>>0]|0;A=J+m|0;B=l+h|0;c[F>>2]=J;c[G>>2]=l;C=p<<24>>24!=0;if(C){j=Sv(h|0,((h|0)<0)<<31>>31|0,10,0)|0;j=pb(j,L()|0)|0;if(!j){j=7;k=E}else{g=j;k=j;I=19}}else{g=l;k=E;I=19}do if((I|0)==19){c[H>>2]=g;if((m|0)>0){g=a[J>>0]|0;j=g&255;do if(!(j&128)){b=1;j=g&255;g=0}else{z=d[J+1>>0]|0;j=z<<7|j&127;if(!(z&128)){b=2;g=0;break}z=d[J+2>>0]|0;j=z<<14|j&16383;if(!(z&128)){b=3;g=0;break}z=d[J+3>>0]|0;j=z<<21|j&2097151;if(!(z&128)){b=4;g=0;break}g=28;b=J+4|0;j=j&268435455;m=0;do{z=b;b=b+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,g|0)|0;j=Sv(y|0,L()|0,j|0,m|0)|0;m=L()|0;g=g+7|0}while(g>>>0<64&((z&128|0)!=0|0!=0));b=b-J|0;g=m}while(0);o=J+b|0;n=g}else{o=0;j=0;n=0}c[F>>2]=o;if((h|0)>0){g=a[l>>0]|0;h=g&255;do if(!(h&128)){b=1;h=g&255;m=0}else{z=d[l+1>>0]|0;h=z<<7|h&127;if(!(z&128)){b=2;m=0;break}z=d[l+2>>0]|0;h=z<<14|h&16383;if(!(z&128)){b=3;m=0;break}z=d[l+3>>0]|0;h=z<<21|h&2097151;if(!(z&128)){b=4;m=0;break}g=28;b=l+4|0;h=h&268435455;m=0;do{z=b;b=b+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,g|0)|0;h=Sv(y|0,L()|0,h|0,m|0)|0;m=L()|0;g=g+7|0}while(g>>>0<64&((z&128|0)!=0|0!=0));b=b-E|0}while(0);g=l+b|0;c[G>>2]=g;if((o|0)!=0&(g|0)!=0){y=C?-1:1;z=C?-1:0;x=p<<24>>24==0;w=0;s=n;v=0;u=0;t=g;r=o;a:while(1){q=Tv(j|0,s|0,h|0,m|0)|0;q=Yv(q|0,L()|0,y|0,z|0)|0;g=L()|0;do if(!((q|0)==0&(g|0)==0))if((g|0)<0){n=r;g=0;while(1){b=a[n>>0]|0;q=n+1|0;if(!(g<<24>>24|b))break;else{n=q;g=b&128}}p=q;c[F>>2]=q;if(q>>>0>=A>>>0){I=85;break a}b=a[q>>0]|0;g=b&255;do if(!(g&128)){n=1;b=b&255;g=0}else{r=d[n+2>>0]|0;g=r<<7|g&127;if(!(r&128)){n=2;b=g;g=0;break}r=d[n+3>>0]|0;g=r<<14|g&16383;if(!(r&128)){n=3;b=g;g=0;break}r=d[n+4>>0]|0;b=r<<21|g&2097151;if(!(r&128)){n=4;g=0;break}o=28;n=n+5|0;b=b&268435455;g=0;do{r=n;n=n+1|0;r=d[r>>0]|0;N=cw(r&127|0,0,o|0)|0;b=Sv(N|0,L()|0,b|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((r&128|0)!=0|0!=0));n=n-p|0}while(0);p=q+n|0;c[F>>2]=p;o=Tv(0,0,b|0,g|0)|0;q=L()|0;j=Sv((x?b:o)|0,(x?g:q)|0,j|0,s|0)|0;q=w;o=t;n=L()|0;b=v;g=u;break}else{n=t;g=0;while(1){b=a[n>>0]|0;q=n+1|0;if(!(g<<24>>24|b))break;else{n=q;g=b&128}}p=q;c[G>>2]=q;if(q>>>0>=B>>>0){I=100;break a}b=a[q>>0]|0;g=b&255;do if(!(g&128)){n=1;b=b&255;g=0}else{N=d[n+2>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=g;g=0;break}N=d[n+3>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=g;g=0;break}N=d[n+4>>0]|0;b=N<<21|g&2097151;if(!(N&128)){n=4;g=0;break}o=28;n=n+5|0;b=b&268435455;g=0;do{N=n;n=n+1|0;N=d[N>>0]|0;t=cw(N&127|0,0,o|0)|0;b=Sv(t|0,L()|0,b|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((N&128|0)!=0|0!=0));n=n-p|0}while(0);o=q+n|0;c[G>>2]=o;p=Tv(0,0,b|0,g|0)|0;q=L()|0;h=Sv((x?b:p)|0,(x?g:q)|0,h|0,m|0)|0;q=w;p=r;n=s;m=L()|0;b=v;g=u;break}else{b=c[H>>2]|0;t=x|(w|0)==0;r=Tv(j|0,s|0,v|0,u|0)|0;N=L()|0;o=Tv(v|0,u|0,j|0,s|0)|0;q=L()|0;g=b;o=t?r:o;q=t?N:q;while(1){n=o&255;p=g+1|0;a[g>>0]=n|-128;o=bw(o|0,q|0,7)|0;q=L()|0;if((o|0)==0&(q|0)==0)break;else g=p}a[g>>0]=n&127;c[H>>2]=(c[H>>2]|0)+(p-b);if(!(or(H,D,0,1,F,G)|0)){c[H>>2]=b;q=w;t=v}else{q=1;t=j;u=s}p=c[F>>2]|0;if(p>>>0<A>>>0){b=a[p>>0]|0;g=b&255;do if(!(g&128)){n=1;g=b&255;b=0}else{N=d[p+1>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=0;break}N=d[p+2>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=0;break}N=d[p+3>>0]|0;g=N<<21|g&2097151;if(!(N&128)){n=4;b=0;break}n=28;o=p+4|0;g=g&268435455;b=0;do{N=o;o=o+1|0;N=d[N>>0]|0;w=cw(N&127|0,0,n|0)|0;g=Sv(w|0,L()|0,g|0,b|0)|0;b=L()|0;n=n+7|0}while(n>>>0<64&((N&128|0)!=0|0!=0));n=o-p|0}while(0);r=p+n|0;c[F>>2]=r;w=Tv(0,0,g|0,b|0)|0;N=L()|0;j=Sv((x?g:w)|0,(x?b:N)|0,j|0,s|0)|0;s=L()|0}else{c[F>>2]=0;r=0}p=c[G>>2]|0;if(p>>>0>=B>>>0){I=67;break a}b=a[p>>0]|0;g=b&255;do if(!(g&128)){n=1;g=b&255;b=0}else{N=d[p+1>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=0;break}N=d[p+2>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=0;break}N=d[p+3>>0]|0;g=N<<21|g&2097151;if(!(N&128)){n=4;b=0;break}n=28;o=p+4|0;g=g&268435455;b=0;do{N=o;o=o+1|0;N=d[N>>0]|0;w=cw(N&127|0,0,n|0)|0;g=Sv(w|0,L()|0,g|0,b|0)|0;b=L()|0;n=n+7|0}while(n>>>0<64&((N&128|0)!=0|0!=0));n=o-p|0}while(0);o=p+n|0;c[G>>2]=o;n=Tv(0,0,g|0,b|0)|0;p=L()|0;h=Sv((x?g:n)|0,(x?b:p)|0,h|0,m|0)|0;p=r;n=s;m=L()|0;b=t;g=u}while(0);if((o|0)!=0&(p|0)!=0){w=q;s=n;v=b;u=g;t=o;r=p}else break}if((I|0)==67)c[G>>2]=0;else if((I|0)==85)c[F>>2]=0;else if((I|0)==100)c[G>>2]=0;j=c[H>>2]|0}else j=k}else{c[G>>2]=0;j=k}h=j-k|0;if(C)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);j=0;break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);j=0;break}else{j=0;k=E}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](J);else{N=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-N;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J)}c[e>>2]=k;c[K>>2]=h}while(0);if((c[i>>2]|0)>=(f|0)){Ra=M;return j|0}c[i>>2]=f;Ra=M;return j|0}function lr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;f=l;h=l+8|0;i=d+144|0;k=c[i>>2]|0;c[h>>2]=k;g=k;if(!k){k=c[d+20>>2]|0;c[f>>2]=c[d+16>>2];c[f+4>>2]=k;f=Bb(52411,f)|0;if(!f){k=7;j=g;c[e>>2]=j;Ra=l;return k|0}d=qd(c[d+12>>2]|0,f,-1,133,0,h,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}f=c[h>>2]|0;c[i>>2]=f;if(!d)i=f;else{k=d;j=f;c[e>>2]=j;Ra=l;return k|0}}else i=g;k=i;do if(!(Vc(k,1)|0)){f=c[k+100>>2]|0;d=f+8|0;if(!(b[d>>1]&9216)){h=f;c[h>>2]=0;c[h+4>>2]=0;b[d>>1]=4;break}else{Pg(f,0,0);break}}while(0);if((Gc(k)|0)==100){if(i|0){f=c[k+120>>2]|0;if(!((f|0)!=0?(b[k+144>>1]|0)!=0:0)){f=c[k>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}g=b[f+8>>1]&15;f=c[k>>2]|0;h=k+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&d;c[h>>2]=f;if((g|16)<<16>>16==16){k=0;j=i;c[e>>2]=j;Ra=l;return k|0}else j=22}}else j=22;do if((j|0)==22?i|0:0){f=c[k>>2]|0;j=k+136|0;i=c[j+4>>2]|0;if((i|0)>0|(i|0)==0&(c[j>>2]|0)>>>0>0)hc(f,k);d=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;k=k+64|0;c[k>>2]=0;c[k+4>>2]=0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);k=7;j=0;c[e>>2]=j;Ra=l;return k|0}else{f=c[f+68>>2]&d;if(!f)break;else d=0;c[e>>2]=d;Ra=l;return f|0}}while(0);k=267;j=0;c[e>>2]=j;Ra=l;return k|0}function mr(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;y=C+8|0;z=C+4|0;A=C;w=e+f|0;x=g+h|0;c[y>>2]=e;c[z>>2]=g;c[i>>2]=0;c[j>>2]=0;l=Sv(f|0,((f|0)<0)<<31>>31|0,17,0)|0;l=Sv(l|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=pb(l,L()|0)|0;if(!l){B=7;Ra=C;return B|0}c[A>>2]=l;if((f|0)>0){k=a[e>>0]|0;f=k&255;do if(!(f&128)){m=1;f=k&255;k=0}else{v=d[e+1>>0]|0;f=v<<7|f&127;if(!(v&128)){m=2;k=0;break}v=d[e+2>>0]|0;f=v<<14|f&16383;if(!(v&128)){m=3;k=0;break}v=d[e+3>>0]|0;f=v<<21|f&2097151;if(!(v&128)){m=4;k=0;break}m=28;n=e+4|0;f=f&268435455;k=0;do{v=n;n=n+1|0;v=d[v>>0]|0;u=cw(v&127|0,0,m|0)|0;f=Sv(u|0,L()|0,f|0,k|0)|0;k=L()|0;m=m+7|0}while(m>>>0<64&((v&128|0)!=0|0!=0));m=n-e|0}while(0);p=k;o=e+m|0}else{f=0;p=0;o=0}c[y>>2]=o;if((h|0)>0){m=a[g>>0]|0;k=m&255;do if(!(k&128)){n=1;k=m&255;m=0}else{v=d[g+1>>0]|0;k=v<<7|k&127;if(!(v&128)){n=2;m=0;break}v=d[g+2>>0]|0;k=v<<14|k&16383;if(!(v&128)){n=3;m=0;break}v=d[g+3>>0]|0;k=v<<21|k&2097151;if(!(v&128)){n=4;m=0;break}n=28;e=g+4|0;k=k&268435455;m=0;do{v=e;e=e+1|0;v=d[v>>0]|0;u=cw(v&127|0,0,n|0)|0;k=Sv(u|0,L()|0,k|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((v&128|0)!=0|0!=0));n=e-g|0}while(0);e=m;m=g+n|0}else{k=0;e=0;m=0}c[z>>2]=m;n=(o|0)!=0;m=(m|0)!=0;a:do if(n|m){t=(b|0)==0;u=t?1:-1;v=t?0:-1;g=0;s=f;r=p;q=e;b=n;p=m;n=0;m=0;b:while(1){o=Tv(s|0,r|0,k|0,q|0)|0;o=Yv(o|0,L()|0,u|0,v|0)|0;f=L()|0;do if(!((o|0)==0&(f|0)==0&(b&p))){g=t|(g|0)==0;if((f|0)<0&b|p^1){p=Tv(s|0,r|0,n|0,m|0)|0;b=L()|0;o=Tv(n|0,m|0,s|0,r|0)|0;n=L()|0;h=c[A>>2]|0;e=h;o=g?p:o;n=g?b:n;while(1){f=o&255;m=e+1|0;a[e>>0]=f|-128;o=bw(o|0,n|0,7)|0;n=L()|0;if((o|0)==0&(n|0)==0)break;else e=m}a[e>>0]=f&127;n=(c[A>>2]|0)+(m-h)|0;c[A>>2]=n;e=c[y>>2]|0;h=e;f=0;while(1){m=a[h>>0]|0;g=h+1|0;if(!(f<<24>>24|m))break;else{h=g;f=m&128}}o=g;b=o-e|0;ew(n|0,e|0,b|0)|0;c[A>>2]=n+b;c[y>>2]=g;if(g>>>0>=w>>>0){c[y>>2]=0;o=s;f=r;e=k;h=q;n=s;m=r;break}m=a[g>>0]|0;f=m&255;do if(!(f&128)){n=1;m=m&255;f=0}else{b=d[h+2>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=f;f=0;break}b=d[h+3>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=f;f=0;break}b=d[h+4>>0]|0;m=b<<21|f&2097151;if(!(b&128)){n=4;f=0;break}e=28;n=h+5|0;m=m&268435455;f=0;do{b=n;n=n+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,e|0)|0;m=Sv(p|0,L()|0,m|0,f|0)|0;f=L()|0;e=e+7|0}while(e>>>0<64&((b&128|0)!=0|0!=0));n=n-o|0}while(0);c[y>>2]=g+n;e=Tv(0,0,m|0,f|0)|0;o=L()|0;o=Sv((t?m:e)|0,(t?f:o)|0,s|0,r|0)|0;f=L()|0;e=k;h=q;n=s;m=r;break}else{p=Tv(k|0,q|0,n|0,m|0)|0;b=L()|0;o=Tv(n|0,m|0,k|0,q|0)|0;n=L()|0;h=c[A>>2]|0;e=h;o=g?p:o;n=g?b:n;while(1){f=o&255;m=e+1|0;a[e>>0]=f|-128;o=bw(o|0,n|0,7)|0;n=L()|0;if((o|0)==0&(n|0)==0)break;else e=m}a[e>>0]=f&127;n=(c[A>>2]|0)+(m-h)|0;c[A>>2]=n;e=c[z>>2]|0;h=e;f=0;while(1){m=a[h>>0]|0;g=h+1|0;if(!(f<<24>>24|m))break;else{h=g;f=m&128}}o=g;b=o-e|0;ew(n|0,e|0,b|0)|0;c[A>>2]=n+b;c[z>>2]=g;if(g>>>0>=x>>>0){c[z>>2]=0;o=s;f=r;e=k;h=q;n=k;m=q;break}m=a[g>>0]|0;f=m&255;do if(!(f&128)){n=1;m=m&255;f=0}else{b=d[h+2>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=f;f=0;break}b=d[h+3>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=f;f=0;break}b=d[h+4>>0]|0;m=b<<21|f&2097151;if(!(b&128)){n=4;f=0;break}e=28;n=h+5|0;m=m&268435455;f=0;do{b=n;n=n+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,e|0)|0;m=Sv(p|0,L()|0,m|0,f|0)|0;f=L()|0;e=e+7|0}while(e>>>0<64&((b&128|0)!=0|0!=0));n=n-o|0}while(0);c[z>>2]=g+n;o=Tv(0,0,m|0,f|0)|0;e=L()|0;e=Sv((t?m:o)|0,(t?f:e)|0,k|0,q|0)|0;o=s;f=r;h=L()|0;n=k;m=q;break}}else{p=t|(g|0)==0;g=Tv(s|0,r|0,n|0,m|0)|0;b=L()|0;e=Tv(n|0,m|0,s|0,r|0)|0;o=L()|0;m=c[A>>2]|0;f=m;e=p?g:e;o=p?b:o;while(1){n=e&255;h=f+1|0;a[f>>0]=n|-128;e=bw(e|0,o|0,7)|0;o=L()|0;if((e|0)==0&(o|0)==0)break;else f=h}a[f>>0]=n&127;c[A>>2]=(c[A>>2]|0)+(h-m);f=nr(A,y,z)|0;if(f|0)break b;h=c[y>>2]|0;if(h>>>0<w>>>0){m=a[h>>0]|0;f=m&255;do if(!(f&128)){n=1;f=m&255;m=0}else{b=d[h+1>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=0;break}b=d[h+2>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=0;break}b=d[h+3>>0]|0;f=b<<21|f&2097151;if(!(b&128)){n=4;m=0;break}n=28;e=h+4|0;f=f&268435455;m=0;do{b=e;e=e+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,n|0)|0;f=Sv(p|0,L()|0,f|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((b&128|0)!=0|0!=0));n=e-h|0}while(0);c[y>>2]=h+n;g=Tv(0,0,f|0,m|0)|0;o=L()|0;o=Sv((t?f:g)|0,(t?m:o)|0,s|0,r|0)|0;g=L()|0}else{c[y>>2]=0;o=s;g=r}h=c[z>>2]|0;if(h>>>0>=x>>>0){c[z>>2]=0;f=g;e=k;h=q;n=s;m=r;break}m=a[h>>0]|0;f=m&255;do if(!(f&128)){n=1;f=m&255;m=0}else{b=d[h+1>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=0;break}b=d[h+2>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=0;break}b=d[h+3>>0]|0;f=b<<21|f&2097151;if(!(b&128)){n=4;m=0;break}n=28;e=h+4|0;f=f&268435455;m=0;do{b=e;e=e+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,n|0)|0;f=Sv(p|0,L()|0,f|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((b&128|0)!=0|0!=0));n=e-h|0}while(0);c[z>>2]=h+n;h=Tv(0,0,f|0,m|0)|0;e=L()|0;e=Sv((t?f:h)|0,(t?m:e)|0,k|0,q|0)|0;f=g;h=L()|0;n=s;m=r}while(0);b=(c[y>>2]|0)!=0;p=(c[z>>2]|0)!=0;if(!(b|p)){B=104;break a}else{g=1;s=o;r=f;k=e;q=h}}if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{z=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}c[A>>2]=0;l=0;k=0}else B=104;while(0);if((B|0)==104){k=c[A>>2]|0;f=k;B=f;a[B>>0]=0;a[B+1>>0]=0;a[B+2>>0]=0;a[B+3>>0]=0;f=f+4|0;a[f>>0]=0;a[f+1>>0]=0;a[f+2>>0]=0;a[f+3>>0]=0;f=0}c[i>>2]=l;c[j>>2]=k-l;B=f;Ra=C;return B|0}function nr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;g=c[f>>2]|0;p=c[e>>2]|0;h=c[b>>2]|0;a:while(1){r=h;q=p;n=a[q>>0]|0;switch(n<<24>>24){case 0:{if(!(a[g>>0]|0)){i=123;break a}else i=2147483647;break}case 1:{j=a[q+1>>0]|0;i=j&255;if(i&128){y=d[q+2>>0]|0;i=y<<7|j&127;if(y&128){y=d[q+3>>0]|0;i=y<<14|i&16383;if(y&128){y=d[q+4>>0]|0;i=y<<21|i&2097151;if(y&128)i=(a[q+5>>0]&7)<<28|i&268435455}}}if(!i){g=267;i=124;break a}break}default:i=0}o=g;l=a[o>>0]|0;switch(l<<24>>24){case 1:{k=a[o+1>>0]|0;j=k&255;if(j&128){y=d[o+2>>0]|0;j=y<<7|k&127;if(y&128){y=d[o+3>>0]|0;j=y<<14|j&16383;if(y&128){y=d[o+4>>0]|0;j=y<<21|j&2097151;if(y&128)j=(a[o+5>>0]&7)<<28|j&268435455}}}if(!j){g=267;i=124;break a}else m=j;break}case 0:{m=2147483647;break}default:m=0}do if((i|0)!=(m|0))if((i|0)<(m|0)){if(!i){h=0;l=r;i=n}else{l=r+1|0;k=l;m=i;j=((i|0)<0)<<31>>31;while(1){h=m&255;i=k+1|0;a[k>>0]=h|-128;m=bw(m|0,j|0,7)|0;j=L()|0;if((m|0)==0&(j|0)==0)break;else k=i}a[k>>0]=h&127;i=i-l+1|0;a[r>>0]=1;h=i;l=r+i|0;i=a[q+i>>0]|0}j=q+h|0;k=j;i=i<<24>>24;if(!(i&254))h=k;else{h=j;do{h=h+1|0;y=i;i=a[h>>0]|0}while((i&254|y&128|0)!=0)}y=h-k|0;ew(l|0,j|0,y|0)|0;i=h;h=l+y|0;break}else{if(!m){g=0;k=r;h=l}else{k=r+1|0;j=k;l=m;i=((m|0)<0)<<31>>31;while(1){g=l&255;h=j+1|0;a[j>>0]=g|-128;l=bw(l|0,i|0,7)|0;i=L()|0;if((l|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;h=h-k+1|0;a[r>>0]=1;g=h;k=r+h|0;h=a[o+h>>0]|0}i=o+g|0;j=i;h=h<<24>>24;if(!(h&254))g=j;else{g=i;do{g=g+1|0;y=h;h=a[g>>0]|0}while((h&254|y&128|0)!=0)}h=g-j|0;ew(k|0,i|0,h|0)|0;i=p;h=k+h|0;break}else{if(!i){g=0;i=n}else{k=r+1|0;j=k;l=i;i=((i|0)<0)<<31>>31;while(1){g=l&255;h=j+1|0;a[j>>0]=g|-128;l=bw(l|0,i|0,7)|0;i=L()|0;if((l|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;i=h-k+1|0;a[r>>0]=1;g=i;h=r+i|0;i=a[q+i>>0]|0}m=q+g|0;l=m;q=o+g|0;p=q;g=i&255;do if(!(g&128)){j=1;o=i&255;n=0}else{y=d[m+1>>0]|0;g=y<<7|g&127;if(!(y&128)){j=2;o=g;n=0;break}y=d[m+2>>0]|0;g=y<<14|g&16383;if(!(y&128)){j=3;o=g;n=0;break}y=d[m+3>>0]|0;g=y<<21|g&2097151;if(!(y&128)){j=4;o=g;n=0;break}i=28;j=m+4|0;g=g&268435455;k=0;do{y=j;j=j+1|0;y=d[y>>0]|0;x=cw(y&127|0,0,i|0)|0;g=Sv(x|0,L()|0,g|0,k|0)|0;k=L()|0;i=i+7|0}while(i>>>0<64&((y&128|0)!=0|0!=0));j=j-l|0;o=g;n=k}while(0);i=m+j|0;j=a[q>>0]|0;g=j&255;do if(!(g&128)){k=1;j=j&255;l=0}else{y=d[q+1>>0]|0;g=y<<7|g&127;if(!(y&128)){k=2;j=g;l=0;break}y=d[q+2>>0]|0;g=y<<14|g&16383;if(!(y&128)){k=3;j=g;l=0;break}y=d[q+3>>0]|0;g=y<<21|g&2097151;if(!(y&128)){k=4;j=g;l=0;break}j=28;k=q+4|0;g=g&268435455;l=0;do{y=k;k=k+1|0;y=d[y>>0]|0;x=cw(y&127|0,0,j|0)|0;g=Sv(x|0,L()|0,g|0,l|0)|0;l=L()|0;j=j+7|0}while(j>>>0<64&((y&128|0)!=0|0!=0));k=k-p|0;j=g}while(0);g=q+k|0;y=n;x=o;t=j;u=0;v=0;while(1){q=(y|0)<(l|0)|(y|0)==(l|0)&x>>>0<t>>>0;r=q?x:t;s=q?y:l;p=h;m=Tv(r|0,s|0,u|0,v|0)|0;j=p;o=L()|0;while(1){k=m&255;n=j+1|0;a[j>>0]=k|-128;m=bw(m|0,o|0,7)|0;o=L()|0;if((m|0)==0&(o|0)==0)break;else j=n}a[j>>0]=k&127;w=p+(n-h)|0;h=w;u=Sv(r|0,s|0,-2,-1)|0;v=L()|0;do if((x|0)==(t|0)&(y|0)==(l|0)){n=i;k=a[n>>0]|0;if((k&255)>1){j=k&255;do if(!(j&128)){l=1;j=k&255;i=0}else{t=d[n+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;i=0;break}t=d[n+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;i=0;break}t=d[n+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;i=0;break}k=28;l=n+4|0;j=j&268435455;m=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;j=Sv(s|0,L()|0,j|0,m|0)|0;m=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));l=l-i|0;i=m}while(0);m=Sv(x|0,y|0,-2,-1)|0;m=Sv(m|0,L()|0,j|0,i|0)|0;i=n+l|0;p=L()|0}else{m=2147483647;p=0}o=g;k=a[o>>0]|0;if((k&255)>1){j=k&255;do if(!(j&128)){l=1;j=k&255;g=0}else{t=d[o+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;g=0;break}t=d[o+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;g=0;break}t=d[o+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;g=0;break}k=28;l=o+4|0;j=j&268435455;n=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;j=Sv(s|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));l=l-g|0;g=n}while(0);k=Sv(x|0,y|0,-2,-1)|0;k=Sv(k|0,L()|0,j|0,g|0)|0;g=o+l|0;j=p;l=L()|0}else{j=p;k=2147483647;l=0}}else if(q){o=i;k=a[o>>0]|0;if((k&255)<=1){m=2147483647;j=0;k=t;break}j=k&255;do if(!(j&128)){m=1;j=k&255;i=0}else{s=d[o+1>>0]|0;j=s<<7|j&127;if(!(s&128)){m=2;i=0;break}s=d[o+2>>0]|0;j=s<<14|j&16383;if(!(s&128)){m=3;i=0;break}s=d[o+3>>0]|0;j=s<<21|j&2097151;if(!(s&128)){m=4;i=0;break}k=28;m=o+4|0;j=j&268435455;n=0;do{s=m;m=m+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((s&128|0)!=0|0!=0));m=m-i|0;i=n}while(0);k=Sv(x|0,y|0,-2,-1)|0;j=Sv(k|0,L()|0,j|0,i|0)|0;i=o+m|0;m=j;j=L()|0;k=t;break}else{o=g;k=a[o>>0]|0;if((k&255)<=1){m=x;j=y;k=2147483647;l=0;break}j=k&255;do if(!(j&128)){m=1;j=k&255;g=0}else{s=d[o+1>>0]|0;j=s<<7|j&127;if(!(s&128)){m=2;g=0;break}s=d[o+2>>0]|0;j=s<<14|j&16383;if(!(s&128)){m=3;g=0;break}s=d[o+3>>0]|0;j=s<<21|j&2097151;if(!(s&128)){m=4;g=0;break}k=28;m=o+4|0;j=j&268435455;n=0;do{s=m;m=m+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((s&128|0)!=0|0!=0));m=m-g|0;g=n}while(0);k=Sv(t|0,l|0,-2,-1)|0;k=Sv(k|0,L()|0,j|0,g|0)|0;g=o+m|0;m=x;j=y;l=L()|0;break}while(0);if(!((m|0)!=2147483647|(j|0)!=0|((k|0)!=2147483647|(l|0)!=0))){h=w;break}else{y=j;x=m;t=k}}}while(0);p=i}if((i|0)==123){y=h;a[y>>0]=0;c[b>>2]=y+1;c[e>>2]=p+1;c[f>>2]=g+1;f=0;return f|0}else if((i|0)==124)return g|0;return 0}function or(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;j=c[b>>2]|0;k=c[h>>2]|0;n=c[i>>2]|0;m=k;if((a[m>>0]|0)==1){o=m+1|0;l=a[o>>0]|0;k=l&255;if(k&128){D=d[m+2>>0]|0;k=D<<7|l&127;if(D&128){D=d[m+3>>0]|0;k=D<<14|k&16383;if(D&128){D=d[m+4>>0]|0;k=D<<21|k&2097151;if(!(D&128))l=4;else{k=(a[m+5>>0]&7)<<28|k&268435455;l=5}}else l=3}else l=2}else l=1;p=k;k=o+l|0}else p=0;o=n;if((a[o>>0]|0)==1){n=o+1|0;m=a[n>>0]|0;l=m&255;if(l&128){D=d[o+2>>0]|0;l=D<<7|m&127;if(D&128){D=d[o+3>>0]|0;l=D<<14|l&16383;if(D&128){D=d[o+4>>0]|0;l=D<<21|l&2097151;if(!(D&128))m=4;else{l=(a[o+5>>0]&7)<<28|l&268435455;m=5}}else m=3}else m=2}else m=1;n=n+m|0}else l=0;C=((e|0)<0)<<31>>31;D=(f|0)==0;B=(f|0)!=0;A=(g|0)!=0;m=p;a:while(1){b:while(1){while(1){if((m|0)==(l|0))break b;if((m|0)<(l|0))break;l=a[n>>0]|0;o=l<<24>>24;if(o&254)do{n=n+1|0;l=a[n>>0]|0;z=o;o=l<<24>>24}while((o&254|z&128|0)!=0);if(!(l<<24>>24)){l=123;break a}p=n+1|0;o=a[p>>0]|0;l=o&255;if(l&128){z=d[n+2>>0]|0;l=z<<7|o&127;if(z&128){z=d[n+3>>0]|0;l=z<<14|l&16383;if(z&128){z=d[n+4>>0]|0;l=z<<21|l&2097151;if(!(z&128))n=4;else{l=(a[n+5>>0]&7)<<28|l&268435455;n=5}}else n=3}else n=2}else n=1;n=p+n|0}m=a[k>>0]|0;o=m<<24>>24;if(o&254)do{k=k+1|0;m=a[k>>0]|0;z=o;o=m<<24>>24}while((o&254|z&128|0)!=0);if(!(m<<24>>24)){l=124;break a}p=k+1|0;o=a[p>>0]|0;m=o&255;if(m&128){z=d[k+2>>0]|0;m=z<<7|o&127;if(z&128){z=d[k+3>>0]|0;m=z<<14|m&16383;if(z&128){z=d[k+4>>0]|0;m=z<<21|m&2097151;if(!(z&128))k=4;else{m=(a[k+5>>0]&7)<<28|m&268435455;k=5}}else k=3}else k=2}else k=1;k=p+k|0}t=j;if(m){a[t>>0]=1;o=t+1|0;p=m;m=((m|0)<0)<<31>>31;while(1){l=p&255;j=o+1|0;a[o>>0]=l|-128;p=bw(p|0,m|0,7)|0;m=L()|0;if((p|0)==0&(m|0)==0)break;else o=j}a[o>>0]=l&127}f=k;m=a[f>>0]|0;l=m&255;do if(!(l&128)){k=1;l=m&255;p=0}else{z=d[f+1>>0]|0;l=z<<7|l&127;if(!(z&128)){k=2;p=0;break}z=d[f+2>>0]|0;l=z<<14|l&16383;if(!(z&128)){k=3;p=0;break}z=d[f+3>>0]|0;l=z<<21|l&2097151;if(!(z&128)){k=4;p=0;break}m=28;o=f+4|0;l=l&268435455;p=0;do{z=o;o=o+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,m|0)|0;l=Sv(y|0,L()|0,l|0,p|0)|0;p=L()|0;m=m+7|0}while(m>>>0<64&((z&128|0)!=0|0!=0));k=o-k|0}while(0);k=f+k|0;r=Sv(l|0,p|0,-2,-1)|0;s=L()|0;q=n;o=a[q>>0]|0;m=o&255;do if(!(m&128)){n=1;g=0;m=o&255}else{z=d[q+1>>0]|0;m=z<<7|m&127;if(!(z&128)){n=2;g=0;break}z=d[q+2>>0]|0;m=z<<14|m&16383;if(!(z&128)){n=3;g=0;break}z=d[q+3>>0]|0;m=z<<21|m&2097151;if(!(z&128)){n=4;g=0;break}o=28;f=q+4|0;m=m&268435455;g=0;do{z=f;f=f+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,o|0)|0;m=Sv(y|0,L()|0,m|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((z&128|0)!=0|0!=0));n=f-n|0}while(0);n=q+n|0;if((p|0)<0|(p|0)==0&l>>>0<2|((g|0)<0|(g|0)==0&m>>>0<2)){l=120;break}l=Sv(m|0,g|0,-2,-1)|0;f=t;z=r;o=0;p=0;m=L()|0;c:while(1){w=k;u=Sv(z|0,s|0,e|0,C|0)|0;v=L()|0;x=l;y=m;l=p;while(1){if(!((x|0)==(u|0)&(y|0)==(v|0))?(y|0)>(v|0)|(y|0)==(v|0)&x>>>0>u>>>0|(A|((y|0)<(s|0)|(y|0)==(s|0)&x>>>0<=z>>>0)):0){t=f;q=o;r=l}else{q=D?x:z;r=D?y:s;g=j;o=Tv(2,0,o|0,l|0)|0;o=Sv(o|0,L()|0,q|0,r|0)|0;l=g;p=L()|0;while(1){m=o&255;f=l+1|0;a[l>>0]=m|-128;o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else l=f}a[l>>0]=m&127;t=0;j=g+(f-j)|0}if(((y|0)>(s|0)|(y|0)==(s|0)&x>>>0>z>>>0)&(B|((y|0)>(v|0)|(y|0)==(v|0)&x>>>0>u>>>0)))break;g=n;m=a[g>>0]|0;if((m&255)<2)break c;l=m&255;do if(!(l&128)){n=1;l=m&255;m=0}else{f=d[g+1>>0]|0;l=f<<7|l&127;if(!(f&128)){n=2;m=0;break}f=d[g+2>>0]|0;l=f<<14|l&16383;if(!(f&128)){n=3;m=0;break}f=d[g+3>>0]|0;l=f<<21|l&2097151;if(!(f&128)){n=4;m=0;break}o=28;p=g+4|0;l=l&268435455;m=0;do{f=p;p=p+1|0;f=d[f>>0]|0;E=cw(f&127|0,0,o|0)|0;l=Sv(E|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((f&128|0)!=0|0!=0));n=p-n|0}while(0);o=Sv(x|0,y|0,-2,-1)|0;o=Sv(o|0,L()|0,l|0,m|0)|0;f=t;n=g+n|0;x=o;y=L()|0;o=q;l=r}m=a[k>>0]|0;if((m&255)<2)break;l=m&255;do if(!(l&128)){o=1;l=m&255;m=0}else{E=d[k+1>>0]|0;l=E<<7|l&127;if(!(E&128)){o=2;m=0;break}E=d[k+2>>0]|0;l=E<<14|l&16383;if(!(E&128)){o=3;m=0;break}E=d[k+3>>0]|0;l=E<<21|l&2097151;if(!(E&128)){o=4;m=0;break}o=28;p=k+4|0;l=l&268435455;m=0;do{E=p;p=p+1|0;E=d[E>>0]|0;v=cw(E&127|0,0,o|0)|0;l=Sv(v|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((E&128|0)!=0|0!=0));o=p-w|0}while(0);p=Sv(z|0,s|0,-2,-1)|0;p=Sv(p|0,L()|0,l|0,m|0)|0;f=t;k=k+o|0;z=p;s=L()|0;o=q;p=r;l=x;m=y}j=(t|0)==0?j:t;l=a[k>>0]|0;m=l<<24>>24;if(!(m&254))o=l;else{do{k=k+1|0;l=a[k>>0]|0;E=m;m=l<<24>>24}while((m&254|E&128|0)!=0);o=l}l=a[n>>0]|0;m=l<<24>>24;if(m&254)do{n=n+1|0;l=a[n>>0]|0;E=m;m=l<<24>>24}while((m&254|E&128|0)!=0);if(!(o<<24>>24)){l=122;break}if(!(l<<24>>24)){l=121;break}o=k+1|0;l=a[o>>0]|0;m=l&255;if(m&128){E=d[k+2>>0]|0;l=E<<7|l&127;if(E&128){E=d[k+3>>0]|0;l=E<<14|l&16383;if(E&128){E=d[k+4>>0]|0;l=E<<21|l&2097151;if(!(E&128)){m=l;k=4}else{m=(a[k+5>>0]&7)<<28|l&268435455;k=5}}else{m=l;k=3}}else{m=l;k=2}}else k=1;k=o+k|0;p=n+1|0;o=a[p>>0]|0;l=o&255;if(l&128){E=d[n+2>>0]|0;l=E<<7|o&127;if(E&128){E=d[n+3>>0]|0;l=E<<14|l&16383;if(E&128){E=d[n+4>>0]|0;l=E<<21|l&2097151;if(!(E&128))n=4;else{l=(a[n+5>>0]&7)<<28|l&268435455;n=5}}else n=3}else n=2}else n=1;n=p+n|0}l=0;while(1){m=a[n>>0]|0;n=n+1|0;if(!(l<<24>>24|m))break;else l=m&128}l=0;while(1){m=a[k>>0]|0;k=k+1|0;if(!(l<<24>>24|m))break;else l=m&128}c[h>>2]=k;c[i>>2]=n;if((c[b>>2]|0)==(j|0)){E=0;return E|0}a[j>>0]=0;c[b>>2]=j+1;E=1;return E|0}function pr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;z=C+4|0;A=C;B=c[b>>2]|0;a:do if(((e|0)!=0?(a[b+52>>0]|0)==(a[B+235>>0]|0):0)?((c[f+64>>2]|0)+-1|0)>>>0<4:0){v=f+64|0;h=c[v>>2]|0;if((h|0)>0){e=0;g=0;do{if(c[f+72+(e*24|0)+12>>2]|0){y=v;break a}b=c[f+72+(e*24|0)+20>>2]|0;if(b){if(!(c[b+36>>2]|0)){y=v;break a}}else b=0;g=(b|0)==0?g:1;e=e+1|0}while((e|0)<(h|0));if(g){u=c[f+68>>2]|0;u=(u|0)<(c[B+24>>2]|0)?u:-1;t=B+235|0;if((h|0)<=0){B=0;z=1;A=f+40|0;c[A>>2]=z;Ra=C;return B|0}q=0;b:while(1){r=c[f+72+(q*24|0)+20>>2]|0;if(r|0){e=c[f+72+(q*24|0)>>2]|0;g=c[f+72+(q*24|0)+4>>2]|0;h=c[r+4>>2]|0;s=(a[t>>0]|0)==0?157:158;b=eq(B,r,e,g)|0;if(b|0){e=1;k=74;break}do if((h|0)>0){j=c[r>>2]|0;i=0;while(1){b=c[j+(i<<2)>>2]|0;if(!(c[b+40>>2]|0)){k=23;break}o=c[b+60>>2]|0;p=Lu(c[b+64>>2]|0,e,(o|0)>(g|0)?g:o)|0;if(((p|0)==0?o-g|0:p)|0){k=23;break}x=i+1|0;if((x|0)<(h|0))i=x;else{k=22;break}}if((k|0)==22){w=r+8|0;c[w>>2]=x}else if((k|0)==23){b=r+8|0;c[b>>2]=i;if(!i)break;else w=b}p=0;k=j;while(1){o=c[k+(p<<2)>>2]|0;if((a[t>>0]|0)!=0?(c[o+56>>2]|0)!=0:0){a[z>>0]=0;m=o+88|0;n=m;c[n>>2]=0;c[n+4>>2]=0;n=o+84|0;c[n>>2]=0;kq(0,c[o+72>>2]|0,c[o+76>>2]|0,o+80|0,m,n,z)}else{l=o+72|0;j=o+40|0;m=o+52|0;b=c[m>>2]|0;c:do if(b|0){k=(c[l>>2]|0)+10|0;n=o+48|0;i=o+44|0;e=c[n>>2]|0;h=b;while(1){b=c[j>>2]|0;if((k-b|0)<=(e|0))break c;g=(c[i>>2]|0)-e|0;g=(g|0)<4096?g:4096;b=jd(h,b+e|0,g,e,81)|0;if(b|0){e=1;k=74;break b}b=(c[n>>2]|0)+g|0;c[n>>2]=b;b=(c[j>>2]|0)+b|0;e=b+20|0;do{a[b>>0]=0;b=b+1|0}while((b|0)<(e|0));e=c[n>>2]|0;h=c[m>>2]|0;if((e|0)==(c[i>>2]|0))break;if(!h)break c}d:do if(h|0){b=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;do if(b|0){if(c[b+480>>2]|0){Xd(b,h);break d}e=h;if((c[b+304>>2]|0)>>>0>e>>>0)break;if((c[b+308>>2]|0)>>>0<=e>>>0)break;k=b+300|0;c[h>>2]=c[k>>2];c[k>>2]=h;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{k=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[m>>2]=0;c[n>>2]=0}while(0);j=c[l>>2]|0;i=o+88|0;b=a[j>>0]|0;e=b&255;do if(!(e&128)){n=i;c[n>>2]=b&255;c[n+4>>2]=0;b=1}else{n=d[j+1>>0]|0;b=n<<7|e&127;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=2;break}n=d[j+2>>0]|0;b=n<<14|b&16383;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=3;break}n=d[j+3>>0]|0;b=n<<21|b&2097151;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=4;break}g=28;h=j+4|0;b=b&268435455;e=0;do{n=h;h=h+1|0;n=d[n>>0]|0;m=cw(n&127|0,0,g|0)|0;b=Sv(m|0,L()|0,b|0,e|0)|0;e=L()|0;g=g+7|0}while(g>>>0<64&((n&128|0)!=0|0!=0));n=i;c[n>>2]=b;c[n+4>>2]=e;b=h-j|0}while(0);c[o+80>>2]=j+b}b=p+1|0;k=c[r>>2]|0;if((b|0)>=(c[w>>2]|0))break;else p=b}if(p|0){g=p;do{h=g;g=g+-1|0;e:do if((h|0)<=(p|0)){b=g;j=c[k+(g<<2)>>2]|0;do{e=b;b=b+1|0;i=k+(b<<2)|0;if((Xa[s&255](j,c[i>>2]|0)|0)<0)break e;o=k+(e<<2)|0;n=c[i>>2]|0;j=c[o>>2]|0;c[i>>2]=j;c[o>>2]=n}while((b|0)<(p|0))}while(0)}while((h|0)>1)}}else c[r+8>>2]=0;while(0);c[r+24>>2]=u}q=q+1|0;if((q|0)>=(c[v>>2]|0)){b=0;e=1;k=74;break}}if((k|0)==74){B=f+40|0;c[B>>2]=e;Ra=C;return b|0}}else y=v}else y=v}else k=4;while(0);if((k|0)==4)y=f+64|0;g=f+68|0;e=0;while(1){if((e|0)>=(c[y>>2]|0)){b=0;e=0;k=74;break}if(!(c[f+72+(e*24|0)+20>>2]|0))b=0;else{c[z>>2]=0;c[A>>2]=0;b=jr(B,f+72+(e*24|0)|0,c[g>>2]|0,z,A)|0;if(!b)b=kr(B,f,e,c[A>>2]|0,c[z>>2]|0)|0}if(!b)e=e+1|0;else{e=0;k=74;break}}if((k|0)==74){B=f+40|0;c[B>>2]=e;Ra=C;return b|0}return 0}function qr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+112|0;B=F+108|0;x=F;y=F+104|0;z=F+100|0;A=F+96|0;if(c[e>>2]|0){Ra=F;return}h=b+52|0;q=a[h>>0]|0;a[d+33>>0]=1;switch(c[d>>2]|0){case 3:case 1:{n=c[d+12>>2]|0;m=c[d+16>>2]|0;if(a[n+34>>0]|0){qr(b,m,e);D=m+24|0;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=a[m+32>>0]|0;Ra=F;return}D=(a[m+34>>0]|0)==0;qr(b,n,e);if(!D){D=n+24|0;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=a[n+32>>0]|0;Ra=F;return}qr(b,m,e);o=n+32|0;a:do if(!(a[o>>0]|0)){l=m+32|0;h=q<<24>>24==0;g=h?1:-1;h=h?0:-1;f=n+24|0;i=m+24|0;while(1){j=a[l>>0]|0;if(j<<24>>24)break;if(c[e>>2]|0)break;k=f;D=i;D=Tv(c[k>>2]|0,c[k+4>>2]|0,c[D>>2]|0,c[D+4>>2]|0)|0;D=Yv(D|0,L()|0,g|0,h|0)|0;k=L()|0;if((D|0)==0&(k|0)==0)break;if((k|0)<0)qr(b,n,e);else qr(b,m,e);if(a[o>>0]|0){E=17;break a}}C=f;D=c[C+4>>2]|0;f=d+24|0;c[f>>2]=c[C>>2];c[f+4>>2]=D;f=j<<24>>24!=0&1}else{f=n+24|0;E=17}while(0);if((E|0)==17){D=f;E=c[D+4>>2]|0;f=d+24|0;c[f>>2]=c[D>>2];c[f+4>>2]=E;f=1}a[d+32>>0]=f;if(f<<24>>24==0|(c[d>>2]|0)!=1){Ra=F;return}f=c[m+20>>2]|0;b:do if(c[f>>2]|0?(r=m+32|0,(c[e>>2]|0)==0):0){g=f+28|0;f=f+32|0;do{if(a[r>>0]|0)break b;gw(c[g>>2]|0,0,c[f>>2]|0)|0;qr(b,m,e)}while(!(c[e>>2]|0))}while(0);f=c[n+20>>2]|0;if(!f){Ra=F;return}if(!(c[f>>2]|0)){Ra=F;return}if(c[e>>2]|0){Ra=F;return}g=f+28|0;f=f+32|0;while(1){if(a[o>>0]|0){E=120;break}gw(c[g>>2]|0,0,c[f>>2]|0)|0;qr(b,n,e);if(c[e>>2]|0){E=120;break}}if((E|0)==120){Ra=F;return}break}case 4:{h=c[d+12>>2]|0;i=c[d+16>>2]|0;m=q<<24>>24==0;l=m?1:-1;m=m?0:-1;k=h+24|0;g=k;j=i+24|0;f=j;f=Tv(c[g>>2]|0,c[g+4>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0;f=Yv(f|0,L()|0,l|0,m|0)|0;g=L()|0;n=i+32|0;o=h+32|0;do if((a[n>>0]|0)==0?(p=a[o>>0]|0,!((g|0)<0&p<<24>>24==0)):0)if((g|0)>0|(g|0)==0&f>>>0>0|p<<24>>24!=0){qr(b,i,e);break}else{qr(b,h,e);qr(b,i,e);break}else E=33;while(0);if((E|0)==33)qr(b,h,e);if(!(a[o>>0]|0))f=0;else f=(a[n>>0]|0)!=0&1;a[d+32>>0]=f;i=j;h=c[i>>2]|0;i=c[i+4>>2]|0;g=k;f=c[g>>2]|0;g=c[g+4>>2]|0;if((a[n>>0]|0)==0?(e=Tv(f|0,g|0,h|0,i|0)|0,Yv(e|0,L()|0,l|0,m|0)|0,e=L()|0,!((a[o>>0]|0)==0&(e|0)<0)):0){d=d+24|0;c[d>>2]=h;c[d+4>>2]=i;Ra=F;return}d=d+24|0;c[d>>2]=f;c[d+4>>2]=g;Ra=F;return}case 2:{g=c[d+12>>2]|0;k=c[d+16>>2]|0;if(!(a[k+33>>0]|0))qr(b,k,e);qr(b,g,e);l=g+32|0;f=a[l>>0]|0;if(!(f<<24>>24)){j=k+32|0;i=q<<24>>24==0;h=i?1:-1;i=i?0:-1;g=g+24|0;if(!(c[e>>2]|0)){f=k+24|0;do{if(a[j>>0]|0)break;D=g;E=f;E=Tv(c[D>>2]|0,c[D+4>>2]|0,c[E>>2]|0,c[E+4>>2]|0)|0;E=Yv(E|0,L()|0,h|0,i|0)|0;D=L()|0;if(!((D|0)>0|(D|0)==0&E>>>0>0))break;qr(b,k,e)}while(!(c[e>>2]|0));f=a[l>>0]|0}else f=0}else g=g+24|0;D=g;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=f;Ra=F;return}default:{D=c[d+20>>2]|0;u=D+24|0;w=D+28|0;do if(c[u>>2]|0?(f=c[w>>2]|0,f|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{C=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;v=D+32|0;c[v>>2]=0;c[u>>2]=0;C=d+32|0;t=c[b>>2]|0;do if(!(c[D+40>>2]|0)){E=a[t+235>>0]|0;f=E&255;if((a[h>>0]|0)!=E<<24>>24?(g=c[D+4>>2]|0,g|0):0){E=D+8|0;kq(f,c[D>>2]|0,g,E,D+16|0,v,C);c[w>>2]=c[E>>2];f=0;break}sr(t,D,C);f=0}else{a[B>>0]=0;s=D+64|0;do if((c[s>>2]|0)==1){f=tr(t,c[D+92>>2]|0,D+16|0,w,v)|0;if(!(c[w>>2]|0)){a[B>>0]=1;g=1;E=113}else{g=0;E=113}}else{h=a[h>>0]|0;f=x;g=f+96|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));r=D+44|0;b=D+16|0;q=h<<24>>24==0;p=q?1:-1;q=q?0:-1;f=0;while(1){c:do if(!f){g=c[s>>2]|0;if((g|0)>0){k=0;l=0;i=0;j=0;while(1){g=x+(l*24|0)|0;do if((c[r>>2]|0)!=(l|0)){f=c[D+72+(l*24|0)+20>>2]|0;if(!f){c[g>>2]=1;f=0;break}E=x+(l*24|0)+16|0;f=tr(t,f,x+(l*24|0)+8|0,E,x+(l*24|0)+20|0)|0;if(!(c[E>>2]|0))a[B>>0]=1}else{sr(t,D,B);c[x+(l*24|0)+16>>2]=c[w>>2];c[x+(l*24|0)+20>>2]=c[v>>2];o=b;E=c[o+4>>2]|0;f=x+(l*24|0)+8|0;c[f>>2]=c[o>>2];c[f+4>>2]=E;f=0}while(0);do if(!(c[g>>2]|0)){h=x+(l*24|0)+8|0;g=c[h>>2]|0;h=c[h+4>>2]|0;if(k|0?(E=Tv(i|0,j|0,g|0,h|0)|0,Yv(E|0,L()|0,p|0,q|0)|0,(L()|0)>=0):0)break;k=1;i=g;j=h}while(0);if(f|0)break;l=l+1|0;g=a[B>>0]|0;h=c[s>>2]|0;if(!(g<<24>>24==0&(l|0)<(h|0))){f=0;E=81;break c}}g=a[B>>0]|0;E=80}else{f=0;i=0;j=0}}else{g=0;i=0;j=0;E=80}while(0);if((E|0)==80){h=c[s>>2]|0;E=81}if((E|0)==81){E=0;if((h|0)>0){m=0;k=g;o=g;l=g;while(1){if(k<<24>>24==0&(f|0)==0){g=o;while(1){f=x+(m*24|0)|0;if(c[f>>2]|0){h=m;f=0;m=l;k=0;break}k=x+(m*24|0)+8|0;o=k;o=Tv(c[o>>2]|0,c[o+4>>2]|0,i|0,j|0)|0;Yv(o|0,L()|0,p|0,q|0)|0;if((L()|0)>=0){h=m;f=0;m=l;k=0;break}do if((c[r>>2]|0)==(m|0)){sr(t,D,B);c[x+(m*24|0)+16>>2]=c[w>>2];c[x+(m*24|0)+20>>2]=c[v>>2];l=b;f=c[l+4>>2]|0;g=k;c[g>>2]=c[l>>2];c[g+4>>2]=f;g=a[B>>0]|0;f=0;l=g}else{h=c[D+72+(m*24|0)+20>>2]|0;if(!h){c[f>>2]=1;f=0;break}o=x+(m*24|0)+16|0;f=tr(t,h,k,o,x+(m*24|0)+20|0)|0;if(c[o>>2]|0)break;a[B>>0]=1;l=1;g=1}while(0);o=k;k=c[o>>2]|0;o=c[o+4>>2]|0;n=Tv(k|0,o|0,i|0,j|0)|0;n=Yv(n|0,L()|0,p|0,q|0)|0;h=L()|0;n=(h|0)>0|(h|0)==0&n>>>0>0;h=n?0:m;i=n?k:i;j=n?o:j;if(l<<24>>24==0&(f|0)==0){m=h;l=0}else{m=l;k=l;break}}n=h;h=c[s>>2]|0;l=m}else{n=m;g=o}m=n+1|0;if((m|0)>=(h|0))break;else o=g}}if(!(g<<24>>24))g=h;else break}g=c[x+((g+-1|0)*24|0)+20>>2]|0;n=nb(g+8|0)|0;if(!n){E=112;break}ew(n|0,c[x+(((c[s>>2]|0)+-1|0)*24|0)+16>>2]|0,g+1|0)|0;g=n+g|0;o=g;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;g=g+4|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;g=c[s>>2]|0;d:do if((g|0)>1){l=n;k=0;h=0;m=g+-1|0;while(1){if(!(c[x+(h*24|0)>>2]|0)){c[y>>2]=c[x+(h*24|0)+16>>2];c[z>>2]=n;c[A>>2]=n;o=(or(A,m-h|0,0,1,y,z)|0)==0;if(o)break;k=(c[A>>2]|0)-l|0;g=c[s>>2]|0}h=h+1|0;m=g+-1|0;if((m|0)<=(h|0))break d}g=c[s>>2]|0}else{k=0;h=0}while(0);if((h|0)==(g+-1|0)){E=110;break}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{o=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}}if((E|0)==110){g=b;c[g>>2]=i;c[g+4>>2]=j;c[w>>2]=n;c[v>>2]=k;c[u>>2]=1;g=0}else if((E|0)==112){f=7;break}E=113}while(0);if((E|0)==113)a[C>>0]=g}while(0);c[e>>2]=f;E=D+16|0;e=c[E+4>>2]|0;d=d+24|0;c[d>>2]=c[E>>2];c[d+4>>2]=e;Ra=F;return}}}function rr(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;I=Ra;Ra=Ra+32|0;y=I+24|0;F=I+20|0;z=I+16|0;A=I+12|0;B=I+8|0;C=I+4|0;H=I;g=c[f>>2]|0;c[H>>2]=g;if(g|0){f=0;H=g;H=(H|0)==0;H=f&H;H=H&1;Ra=I;return H|0}G=d+28|0;if(c[G>>2]|0?(x=ur(0,d)|0,c[H>>2]=x,(x|0)==0):0){c[F>>2]=0;a:do if(c[G>>2]|0){g=c[d>>2]|0;t=c[g+36>>2]|0;h=c[t>>2]|0;u=d+12|0;v=Oc(c[u>>2]|0,0)|0;w=L()|0;x=g+24|0;i=c[x>>2]|0;if((i|0)>0){q=g+32|0;r=d+20|0;s=h+20|0;p=h+16|0;n=0;h=i;while(1){if(!(a[(c[q>>2]|0)+n>>0]|0)){j=c[u>>2]|0;o=n+1|0;i=(j|0)==0;do if(i)g=29576;else{g=c[j+120>>2]|0;if(g|0?o>>>0<(e[j+144>>1]|0)>>>0:0){g=g+(o*40|0)|0;break}g=c[j>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0)k=c[g+16>>2]|0;else if(!(h&1))k=Gg(g,1)|0;else k=0;if(!i){h=c[j>>2]|0;i=j+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g}h=c[r>>2]|0;i=c[t>>2]|0;c[y>>2]=0;g=Za[c[i+12>>2]&127](t,k,-1,y)|0;do if(!g){c[c[y>>2]>>2]=t;if((c[i>>2]|0)>0?(D=Xa[c[i+24>>2]&255](c[y>>2]|0,h)|0,D|0):0){Wa[c[i+16>>2]&127](c[y>>2]|0)|0;c[y>>2]=0;g=D;h=0;E=29;break}h=c[y>>2]|0;c[F>>2]=0;m=h;do{c[z>>2]=0;c[A>>2]=0;c[B>>2]=0;c[C>>2]=0;g=$a[c[s>>2]&127](m,y,z,A,B,C)|0;c[F>>2]=g;i=c[G>>2]|0;if((g|0)==0&(i|0)!=0){g=0;do{l=c[i>>2]|0;k=c[i+4>>2]|0;do if((k|0)==(n|0)?1:(k|0)>=(c[x>>2]|0)){j=c[C>>2]|0;if(!((c[l+12>>2]|0)==0|(j|0)==0)){j=0;break}k=c[l+4>>2]|0;J=c[z>>2]|0;if((k|0)!=(J|0)?!((k|0)<(J|0)&(c[l+8>>2]|0)!=0):0){j=0;break}if(Lu(c[y>>2]|0,c[l>>2]|0,k)|0){j=0;break}wr(i+12|0,v,w,n,0,j,((j|0)<0)<<31>>31,F)|0;j=c[F>>2]|0;g=j}else j=0;while(0);i=c[i+8>>2]|0}while((j|0)==0&(i|0)!=0)}}while(!(g|0))}else{h=c[y>>2]|0;E=29}while(0);if((E|0)==29){E=0;c[F>>2]=g}if(h|0)Wa[c[p>>2]&127](h)|0;if((g|0)!=101)break a;c[F>>2]=0;g=o;h=c[x>>2]|0}else g=n+1|0;if((g|0)<(h|0))n=g;else break}}g=c[G>>2]|0;if(g){i=g;g=0;do{h=i+12|0;if(!(c[h>>2]|0))h=0;else{g=xr(h,0,0)|0;c[F>>2]=g;h=g}i=c[i+8>>2]|0}while((h|0)==0&(i|0)!=0)}else g=0}else g=0;while(0);c[H>>2]=g}j=(vr(d,c[d+16>>2]|0,H)|0)==0;g=c[G>>2]|0;if(g|0)do{h=g+12|0;i=c[h>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{J=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0;g=c[g+8>>2]|0}while((g|0)!=0);J=c[H>>2]|0;c[f>>2]=J;H=j;J=(J|0)==0;J=H&J;J=J&1;Ra=I;return J|0}function sr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=c[e>>2]|0;n=k+(c[e+4>>2]|0)|0;o=e+8|0;l=c[o>>2]|0;m=(l|0)==0;l=m?k:l;k=l;if(l>>>0>=n>>>0){o=1;a[f>>0]=o;return}h=a[l>>0]|0;g=h&255;do if(!(g&128)){i=1;g=h&255;h=0}else{j=d[l+1>>0]|0;g=j<<7|g&127;if(!(j&128)){i=2;h=0;break}j=d[l+2>>0]|0;g=j<<14|g&16383;if(!(j&128)){i=3;h=0;break}j=d[l+3>>0]|0;g=j<<21|g&2097151;if(!(j&128)){i=4;h=0;break}i=28;j=l+4|0;g=g&268435455;h=0;do{p=j;j=j+1|0;p=d[p>>0]|0;q=cw(p&127|0,0,i|0)|0;g=Sv(q|0,L()|0,g|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((p&128|0)!=0|0!=0));i=j-k|0}while(0);q=l+i|0;j=q;b=m|(a[b+235>>0]|0)==0;m=e+16|0;k=m;i=c[k>>2]|0;k=c[k+4>>2]|0;l=Tv(0,0,g|0,h|0)|0;p=L()|0;p=Sv(i|0,k|0,(b?g:l)|0,(b?h:p)|0)|0;h=L()|0;g=m;c[g>>2]=p;c[g+4>>2]=h;c[e+28>>2]=j;g=q;h=0;while(1){i=a[g>>0]|0;g=g+1|0;if(!(h<<24>>24|i))break;else h=i&128}c[e+32>>2]=g-j;a:do if(g>>>0<n>>>0)do{if(a[g>>0]|0)break a;g=g+1|0}while(g>>>0<n>>>0);while(0);c[o>>2]=g;q=0;a[f>>0]=q;return}function tr(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+16|0;y=D+4|0;z=D;A=c[e+8>>2]|0;B=c[e>>2]|0;t=(a[b+235>>0]|0)==0?157:158;if(!A){c[g>>2]=0;C=0;Ra=D;return C|0}i=c[B>>2]|0;a:do if(c[i+80>>2]|0){u=(A|0)>1;v=A+-1|0;w=e+24|0;x=e+20|0;s=e+16|0;while(1){r=i+88|0;q=c[r>>2]|0;r=c[r+4>>2]|0;i=jq(b,i,y,z)|0;k=(i|0)==0;b:do if(k&u){j=1;while(1){i=c[B+(j<<2)>>2]|0;if(!(c[i+80>>2]|0)){i=j;break b}p=i+88|0;if(!((c[p>>2]|0)==(q|0)?(c[p+4>>2]|0)==(r|0):0)){i=j;break b}i=jq(b,i,0,0)|0;j=j+1|0;k=(i|0)==0;if(!(k&(j|0)<(A|0))){C=11;break}}}else{j=1;C=11}while(0);if((C|0)==11){C=0;if(k)i=j;else{C=45;break}}o=c[e>>2]|0;i=i+(((i|0)==(A|0))<<31>>31)|0;if((i|0)>0)do{l=i;i=i+-1|0;c:do if((l|0)<(A|0)){j=i;n=c[o+(i<<2)>>2]|0;do{k=j;j=j+1|0;m=o+(j<<2)|0;if((Xa[t&255](n,c[m>>2]|0)|0)<0)break c;p=o+(k<<2)|0;k=c[m>>2]|0;n=c[p>>2]|0;c[m>>2]=n;c[p>>2]=k}while((j|0)<(v|0))}while(0)}while((l|0)>1);i=c[z>>2]|0;if((i|0)>0?c[(c[B>>2]|0)+56>>2]|0:0){l=c[y>>2]|0;m=i+1|0;if((c[x>>2]|0)>(i|0))j=c[s>>2]|0;else{j=m<<1;c[x>>2]=j;k=c[s>>2]|0;if(mb()|0){i=7;C=45;break}j=sb(k,(j|0)>0?j:0,0)|0;if(!j){i=7;C=45;break}c[s>>2]=j}ew(j|0,l|0,m|0)|0;c[y>>2]=c[s>>2]}o=c[w>>2]|0;if((o|0)>-1){k=c[y>>2]|0;p=k+i|0;j=k;n=i;m=0;while(1){d:do if(j>>>0<p>>>0){l=0;i=j;while(1){j=a[i>>0]|0;if(!(j&254|l)){l=i;break d}i=i+1|0;if(i>>>0<p>>>0)l=j&128;else{l=i;break}}}else l=j;while(0);i=l-k|0;if((m|0)==(o|0))break;n=n-i|0;if(!n){k=l;i=0;break}k=l+1|0;j=a[k>>0]|0;i=j&255;if(i&128){m=d[l+2>>0]|0;i=m<<7|j&127;if(m&128){m=d[l+3>>0]|0;i=m<<14|i&16383;if(m&128){m=d[l+4>>0]|0;i=m<<21|i&2097151;if(!(m&128))j=4;else{i=(a[l+5>>0]&7)<<28|i&268435455;j=5}}else j=3}else j=2}else j=1;j=k+j|0;k=l;m=i}j=k+i|0;if((j|0)!=(p|0))gw(j|0,0,p-j|0)|0;c[y>>2]=k;c[z>>2]=i}if((i|0)>0){C=46;break}if(!(c[(c[c[e>>2]>>2]|0)+80>>2]|0))break a;i=c[B>>2]|0}if((C|0)==45){C=i;Ra=D;return C|0}else if((C|0)==46){c[g>>2]=c[y>>2];C=f;c[C>>2]=q;c[C+4>>2]=r;c[h>>2]=i;C=0;Ra=D;return C|0}}while(0);c[g>>2]=0;C=0;Ra=D;return C|0}function ur(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;i=m;k=e+7|0;if(!(a[k>>0]|0)){d=0;Ra=m;return d|0}l=e+12|0;f=c[l>>2]|0;do if(!f){h=c[e>>2]|0;g=h+216|0;f=c[g>>2]|0;if(!f){c[i>>2]=c[h+220>>2];f=Bb(54912,i)|0;if(!f){h=7;break}h=qd(c[h+12>>2]|0,f,-1,129,0,l,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(h|0)break;f=c[l>>2]|0}else{c[l>>2]=f;c[g>>2]=0}a[e+8>>0]=1;j=13}else j=13;while(0);a:do if((j|0)==13){i=e+32|0;h=c[i>>2]|0;i=c[i+4>>2]|0;do if(!(Vc(f,1)|0)){f=c[f+100>>2]|0;g=f+8|0;if(!(b[g>>1]&9216)){j=f;c[j>>2]=h;c[j+4>>2]=i;b[g>>1]=4;break}else{Pg(f,h,i);break}}while(0);a[k>>0]=0;if((Gc(c[l>>2]|0)|0)==100){d=0;Ra=m;return d|0}f=c[l>>2]|0;do if(f|0){g=c[f>>2]|0;l=f+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(g,f);h=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;l=f+64|0;c[l>>2]=0;c[l+4>>2]=0;if(!((h|0)==3082|(a[g+81>>0]|0)!=0)){f=c[g+68>>2]&h;if(!f)break;else{h=f;break a}}else{og(g);h=7;break a}}while(0);if(!(c[(c[e>>2]|0)+40>>2]|0)){a[e+6>>0]=1;h=267;break}else{d=0;Ra=m;return d|0}}while(0);if(!((d|0)!=0&(h|0)!=0)){d=h;Ra=m;return d|0}c[d+20>>2]=h;g=c[d>>2]|0;if(!(b[g+8>>1]&1)){d=h;Ra=m;return d|0}switch(h|0){case 516:{f=50738;break}case 100:{f=50760;break}case 101:{f=50782;break}default:{f=h&255;if(f>>>0<29?(520028155>>>f&1|0)!=0:0)f=c[22960+(f<<2)>>2]|0;else f=50724}}yc(g,f,-1,1,0)|0;d=h;Ra=m;return d|0}function vr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=Ra;Ra=Ra+16|0;s=u+8|0;t=u+4|0;p=u;if(c[e>>2]|0){t=1;t=t&1;Ra=u;return t|0}switch(c[d>>2]|0){case 3:case 1:{k=d+12|0;do if(vr(b,c[k>>2]|0,e)|0?(l=d+16|0,vr(b,c[l>>2]|0,e)|0):0){if(c[e>>2]|0){t=1;t=t&1;Ra=u;return t|0}if((c[d>>2]|0)!=1){t=1;t=t&1;Ra=u;return t|0}r=c[d+8>>2]|0;if(r|0?(c[r>>2]|0)==1:0){t=1;t=t&1;Ra=u;return t|0}f=c[k>>2]|0;if(!f){f=d;h=0;g=0}else{h=d;j=0;g=0;while(1){h=c[(c[(c[h+16>>2]|0)+20>>2]|0)+32>>2]|0;h=Sv(j|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;g=L()|0;i=c[f+12>>2]|0;if(!i)break;else{r=f;j=h;f=i;h=r}}}i=f+20|0;r=c[(c[i>>2]|0)+32>>2]|0;h=Sv(h|0,g|0,r|0,((r|0)<0)<<31>>31|0)|0;h=cw(h|0,L()|0,1)|0;h=pb(h,L()|0)|0;if(!h){c[e>>2]=7;break}g=c[i>>2]|0;c[s>>2]=c[g+28>>2];c[t>>2]=c[g+64>>2];g=c[f+8>>2]|0;a:do if(!g)f=1;else{f=1;do{if((c[g>>2]|0)!=1)break a;f=yr(c[g+4>>2]|0,h,s,t,c[(c[g+16>>2]|0)+20>>2]|0)|0;g=c[g+8>>2]|0}while((f|0)!=0&(g|0)!=0)}while(0);g=c[(c[l>>2]|0)+20>>2]|0;c[s>>2]=c[g+28>>2];c[t>>2]=c[g+64>>2];g=c[k>>2]|0;if((f|0)!=0&(g|0)!=0)do{if((c[g>>2]|0)==1)f=c[g+16>>2]|0;else f=g;f=yr(c[(c[g+8>>2]|0)+4>>2]|0,h,s,t,c[f+20>>2]|0)|0;g=c[g+12>>2]|0}while((f|0)!=0&(g|0)!=0);if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}if(f|0){t=1;t=t&1;Ra=u;return t|0}}while(0);if((c[d>>2]|0)!=1){t=0;t=t&1;Ra=u;return t|0}t=c[d+8>>2]|0;if(t|0?(c[t>>2]|0)==1:0){t=0;t=t&1;Ra=u;return t|0}g=c[d+20>>2]|0;i=b+32|0;if(!g){h=d;while(1){d=c[h+16>>2]|0;s=d+24|0;t=i;if((c[s>>2]|0)==(c[t>>2]|0)?(c[s+4>>2]|0)==(c[t+4>>2]|0):0){f=c[d+20>>2]|0;g=f+24|0;d=f+28|0;do if(c[g>>2]|0?(n=c[d>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{t=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);c[d>>2]=0;c[f+32>>2]=0;c[g>>2]=0}d=c[h+12>>2]|0;g=c[d+20>>2]|0;if(!g)h=d;else break}}s=d+24|0;t=i;if(!((c[s>>2]|0)==(c[t>>2]|0)?(c[s+4>>2]|0)==(c[t+4>>2]|0):0)){t=0;t=t&1;Ra=u;return t|0}f=g+24|0;d=g+28|0;do if(c[f>>2]|0?(o=c[d>>2]|0,o|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[d>>2]=0;c[g+32>>2]=0;c[f>>2]=0;t=0;t=t&1;Ra=u;return t|0}case 4:{t=vr(b,c[d+12>>2]|0,e)|0;t=(vr(b,c[d+16>>2]|0,e)|0|t|0)!=0;t=t&1;Ra=u;return t|0}case 2:{if(!(vr(b,c[d+12>>2]|0,e)|0)){t=0;t=t&1;Ra=u;return t|0}t=(vr(b,c[d+16>>2]|0,e)|0)==0;t=t&1;Ra=u;return t|0}default:{do if(c[b+28>>2]|0){q=d+24|0;n=q;r=b+32|0;o=r;f=a[d+34>>0]|0;if((c[n>>2]|0)==(c[o>>2]|0)?(c[n+4>>2]|0)==(c[o+4>>2]|0):0){d=c[d+20>>2]|0;if(!(f<<24>>24))g=d;else{g=d;m=55}}else{if(!(f<<24>>24))break;g=c[d+20>>2]|0;m=55}if((m|0)==55){f=g+24|0;d=g+28|0;do if(c[f>>2]|0?(h=c[d>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{o=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[d>>2]=0;c[g+32>>2]=0;c[f>>2]=0}n=g+64|0;b:do if((c[n>>2]|0)>0){d=g+28|0;o=g+32|0;m=0;b=0;h=0;j=-1;while(1){f=c[g+72+(m*24|0)+16>>2]|0;if(f){h=f+12|0;f=c[h>>2]|0;if(!f){m=66;break}l=nb(c[f>>2]|0)|0;if(!l){f=7;break b}i=c[h>>2]|0;k=c[i+4>>2]|0;if((a[k>>0]|0)<=-1)if((a[k+1>>0]|0)<=-1)if((a[k+2>>0]|0)<=-1)if((a[k+3>>0]|0)>-1)h=4;else{f=28;h=k+4|0;do{v=h;h=h+1|0;f=f+7|0}while(f>>>0<64&(a[v>>0]|0)<0);h=h-k|0}else h=3;else h=2;else h=1;i=(c[i>>2]|0)-h|0;f=l;ew(l|0,k+h|0,i|0)|0;if(!b){j=m;k=l}else{c[s>>2]=f;c[t>>2]=b;c[p>>2]=f;or(s,m-j|0,0,1,t,p)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{v=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}f=(c[s>>2]|0)-f|0;if(!f){m=85;break}j=m;k=l;i=f}}else{k=b;i=h}m=m+1|0;if((m|0)>=(c[n>>2]|0)){m=90;break}else{b=k;h=i}}if((m|0)==66){do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{v=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[d>>2]=0;c[o>>2]=0;f=0;break}else if((m|0)==85){if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{v=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}c[d>>2]=0;c[o>>2]=0;f=0;break}else if((m|0)==90){if((j|0)<=-1){f=0;break}f=c[g+44>>2]|0;if((f|0)<0){c[d>>2]=k;c[o>>2]=i;t=r;v=c[t+4>>2]|0;f=g+16|0;c[f>>2]=c[t>>2];c[f+4>>2]=v;c[g+24>>2]=1;f=0;break}if((f|0)>(j|0)){c[s>>2]=k;c[t>>2]=c[d>>2];h=f-j|0}else{c[s>>2]=c[d>>2];c[t>>2]=k;h=j-f|0}f=nb(i+8|0)|0;c[p>>2]=f;if(!f){do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{v=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);f=7;break}c[d>>2]=f;if(!(or(p,h,0,1,s,t)|0)){f=c[p>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[d>>2]=0;f=0}else{c[g+24>>2]=1;f=(c[p>>2]|0)-(c[d>>2]|0)|0}c[o>>2]=f;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{v=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);f=0;break}}else{f=0;d=g+28|0}while(0);c[e>>2]=f;v=(c[d>>2]|0)!=0;e=r;s=c[e+4>>2]|0;t=q;c[t>>2]=c[e>>2];c[t+4>>2]=s;v=v&1;Ra=u;return v|0}while(0);if(a[d+32>>0]|0){v=0;v=v&1;Ra=u;return v|0}t=d+24|0;v=b+32|0;v=(c[t>>2]|0)==(c[v>>2]|0)?(c[t+4>>2]|0)==(c[v+4>>2]|0):0;v=v&1;Ra=u;return v|0}}return 0}function wr(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;m=n;j=c[a>>2]|0;c[m>>2]=j;if(j){l=j+16|0;k=c[l>>2]|0;l=c[l+4>>2]|0;if((k|0)==(b|0)&(l|0)==(d|0))l=6;else{l=Tv(b|0,d|0,k|0,l|0)|0;k=L()|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=4}}else{j=b;k=d;l=4}if((l|0)==4){j=xr(m,j,k)|0;if(!j){j=c[m>>2]|0;l=j+24|0;c[l>>2]=-1;c[l+4>>2]=-1;l=j+32|0;c[l>>2]=0;c[l+4>>2]=0;l=j+16|0;c[l>>2]=b;c[l+4>>2]=d;l=6}}do if((l|0)==6){if((f|0)>0|(f|0)==0&e>>>0>0){d=j+24|0;if(!((c[d>>2]|0)==(e|0)?(c[d+4>>2]|0)==(f|0):0)){j=xr(m,1,0)|0;if(j|0)break;j=xr(m,e,f)|0;if(j|0)break;j=c[m>>2]|0;d=j+24|0;c[d>>2]=e;c[d+4>>2]=f;f=j+32|0;c[f>>2]=0;c[f+4>>2]=0}}else if(!((f|0)>-1|(f|0)==-1&e>>>0>4294967295)){j=0;break}e=Sv(g|0,h|0,2,0)|0;f=L()|0;j=j+32|0;j=Tv(e|0,f|0,c[j>>2]|0,c[j+4>>2]|0)|0;j=xr(m,j,L()|0)|0;if(!j){j=(c[m>>2]|0)+32|0;c[j>>2]=g;c[j+4>>2]=h;j=0}}while(0);c[i>>2]=j;j=c[m>>2]|0;if((j|0)==(c[a>>2]|0)){a=0;Ra=n;return a|0}c[a>>2]=j;a=1;Ra=n;return a|0}function xr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[b>>2]|0;do if(f){g=c[f+8>>2]|0;if(((c[f>>2]|0)+11|0)>(g|0)){g=g<<1;h=g+40|0;if((mb()|0)==0?(i=sb(f,(h|0)>0?h:0,0)|0,i|0):0){c[i+8>>2]=g;c[i+4>>2]=i+40;f=i;break}f=c[b>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[b>>2]=0;b=7;return b|0}}else{if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](140)|0;if(!f){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](140)|0;if((c[14985]|0)>>>0<140)c[14985]=140;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){l=c[14978]|0;k=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=l>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){b=7;return b|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}c[f+8>>2]=100;c[f+4>>2]=f+40;c[f>>2]=0}while(0);k=f+4|0;l=(c[k>>2]|0)+(c[f>>2]|0)|0;j=l;i=e;while(1){g=d&255;h=j+1|0;a[j>>0]=g|-128;d=bw(d|0,i|0,7)|0;i=L()|0;if((d|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;e=(c[f>>2]|0)+(h-l)|0;c[f>>2]=e;a[(c[k>>2]|0)+e>>0]=0;c[b>>2]=f;b=0;return b|0}function yr(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=Ra;Ra=Ra+32|0;l=r+20|0;k=r+16|0;h=r+12|0;m=r+8|0;i=r+4|0;p=r;q=g+64|0;t=(c[q>>2]|0)+b|0;b=(c[f>>2]|0)+b|0;o=g+28|0;n=c[o>>2]|0;c[p>>2]=n;c[i>>2]=n;c[l>>2]=d;s=c[e>>2]|0;j=d;c[k>>2]=j;or(k,t,0,0,e,i)|0;k=c[k>>2]|0;c[h>>2]=k;c[m>>2]=k;c[e>>2]=s;c[i>>2]=n;or(h,b,1,0,i,e)|0;i=k;b=(c[h>>2]|0)==(i|0);do if((i|0)==(d|0))if(b)b=0;else{b=d;h=0;while(1){i=a[b>>0]|0;b=b+1|0;if(!(h<<24>>24|i))break;else h=i&128}t=b-k|0;ew(n|0,d|0,t|0)|0;c[p>>2]=n+t;c[m>>2]=b;b=1}else{if(!b){nr(p,l,m)|0;b=1;break}b=d;h=0;while(1){i=a[b>>0]|0;b=b+1|0;if(!(h<<24>>24|i))break;else h=i&128}t=b-j|0;ew(n|0,d|0,t|0)|0;c[p>>2]=n+t;c[l>>2]=b;b=1}while(0);if(!b){Ra=r;return b|0}d=c[o>>2]|0;s=(c[p>>2]|0)-d+-1|0;t=g+32|0;gw(d+s|0,0,(c[t>>2]|0)-s|0)|0;c[t>>2]=s;c[e>>2]=c[o>>2];c[f>>2]=c[q>>2];Ra=r;return b|0}function zr(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;w=x+8|0;t=x;v=x+4|0;c[v>>2]=f;c[w>>2]=f;i=cq(d,7,t,w)|0;s=c[t>>2]|0;a:do if(!i){b:do if((Gc(s)|0)==100){if(!(c[d+44>>2]|0))r=0;else r=Nc(s,(c[d+24>>2]|0)+1|0)|0;j=Oc(s,0)|0;k=L()|0;l=d+272|0;i=l;f=c[i>>2]|0;i=c[i+4>>2]|0;do if(!((i|0)>(k|0)|(i|0)==(k|0)&f>>>0>j>>>0)){if((f|0)==(j|0)&(i|0)==(k|0)?(c[d+284>>2]|0)==0:0){u=10;break}f=d+280|0;if((c[f>>2]|0)==(r|0)?(c[d+264>>2]|0)<=(c[d+260>>2]|0):0)u=12;else u=10}else u=10;while(0);if((u|0)==10){f=Sr(d)|0;if(!f){f=d+280|0;u=12}}if((u|0)==12){q=l;c[q>>2]=j;c[q+4>>2]=k;c[f>>2]=r;c[d+284>>2]=1;q=d+24|0;p=d+32|0;m=s+120|0;n=s+144|0;o=s+40|0;if(!s){f=c[q>>2]|0;if((f|0)<1){i=0;f=1;break a}k=c[p>>2]|0;j=1;while(1){i=j+-1|0;if(!(a[k+i>>0]|0)){c[h+(i<<2)>>2]=0;f=c[q>>2]|0}if((j|0)<(f|0))j=j+1|0;else{f=1;break b}}}l=1;while(1){if((l|0)>(c[q>>2]|0)){f=1;break b}k=l+-1|0;if(!(a[(c[p>>2]|0)+k>>0]|0)){f=c[m>>2]|0;if((f|0)!=0?l>>>0<(e[n>>1]|0)>>>0:0)f=f+(l*40|0)|0;else{f=c[s>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}i=b[f+8>>1]|0;if((i&514)==514?(a[f+10>>0]|0)==1:0)j=c[f+16>>2]|0;else if(!(i&1))j=Gg(f,1)|0;else j=0;f=c[s>>2]|0;i=c[o>>2]|0;if((i|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&i;c[o>>2]=f;f=Mr(d,r,j,-1,h+(k<<2)|0)|0;j=Lc(s,l)|0;k=h+(c[q>>2]<<2)|0;c[k>>2]=(c[k>>2]|0)+j}else f=0;if(!f)l=l+1|0;else break}}if(!s){i=f;f=0;break a}i=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(i,s);r=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if(!((r|0)==3082|(a[i+81>>0]|0)!=0)){i=f;f=0;break a}og(i);i=f;f=0;break a}else f=0;while(0);if(s){i=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(i,s);j=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}else i=0}else if(s){f=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(f,s);r=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if((r|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=0}else f=0}else f=0;while(0);if(!((i|0)==0&(f|0)!=0)){w=i;Ra=x;return w|0}c[w>>2]=c[v>>2];l=d+40|0;c:do if(!(c[l>>2]|0)){f=cq(d,1,t,w)|0;do if(!f){f=c[t>>2]|0;if((Gc(f)|0)==100)k=Nc(f,0)|0;else k=0;if(!f){f=k;u=61;break c}i=c[f>>2]|0;t=f+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;t=f+64|0;c[t>>2]=0;c[t+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}f=c[i+68>>2]&j;if(!f){f=k;break c}Ra=x;return f|0}while(0);w=f;Ra=x;return w|0}else{f=0;u=61}while(0);if(f|0){w=Lr(d,1)|0;c[g>>2]=0;gw(h|0,0,(c[d+24>>2]<<3)+8|0)|0;Ra=x;return w|0}c[g>>2]=(c[g>>2]|0)+-1;if(!(c[l>>2]|0)){f=cq(d,0,w,v)|0;do if(!f){f=c[w>>2]|0;Gc(f)|0;if(f){i=c[f>>2]|0;h=f+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;h=f+64|0;c[h>>2]=0;c[h+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}else{f=c[i+68>>2]&j;break}}else f=0}while(0)}else f=0;if(!(a[d+234>>0]|0)){w=f;Ra=x;return w|0}do if(!f){f=cq(d,19,w,v)|0;if(!f){f=c[w>>2]|0;Gc(f)|0;if(f){i=c[f>>2]|0;w=f+136|0;v=c[w+4>>2]|0;if((v|0)>0|(v|0)==0&(c[w>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;w=f+64|0;c[w>>2]=0;c[w+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}else{f=c[i+68>>2]&j;break}}else f=0}}while(0);w=f;Ra=x;return w|0}function Ar(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;q=s;if(c[d+40>>2]|0){k=c[f+((c[d+24>>2]|0)+3<<2)>>2]|0;i=b[k+8>>1]|0;j=i&31;if(-1431655766>>>j&1){k=c[f+4>>2]|0;i=b[k+8>>1]|0;j=i&31}if(!(1347440720>>>j&1)){h=19;Ra=s;return h|0}i=i&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[k>>3])|0;j=L()|0;break}if(!(i&18)){i=0;j=0}else{i=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;j=L()|0}}else{j=k;i=c[j>>2]|0;j=c[j+4>>2]|0}while(0);c[h>>2]=i;c[h+4>>2]=j;h=0;Ra=s;return h|0}r=f+4|0;i=cq(d,18,q,r)|0;if(i|0){h=i;Ra=s;return h|0}do if(c[d+44>>2]|0){n=c[q>>2]|0;i=d+24|0;o=c[i>>2]|0;l=o+2|0;j=c[f+(o+4<<2)>>2]|0;k=e[j+8>>1]|0;do if(!(k&4)){if(k&8|0){m=Mg(+g[j>>3])|0;L()|0;break}if(!(k&18))m=0;else{m=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;L()|0}}else m=c[j>>2]|0;while(0);p=((m|0)<0)<<31>>31;j=Vc(n,l)|0;if(j|0){h=j;Ra=s;return h|0}n=c[n+100>>2]|0;k=o+1|0;j=n+(k*40|0)|0;k=n+(k*40|0)+8|0;if(!(b[k>>1]&9216)){o=j;c[o>>2]=m;c[o+4>>2]=p;b[k>>1]=4;break}else{Pg(j,m,p);break}}else i=d+24|0;while(0);i=c[f+((c[i>>2]|0)+3<<2)>>2]|0;if(!(-1431655766>>>(b[i+8>>1]&31)&1)){if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0?(-1431655766>>>(b[(c[r>>2]|0)+8>>1]&31)&1|0)==0:0){h=1;Ra=s;return h|0}j=c[q>>2]|0;i=Yc(j,1,i)|0;if(i){h=i;Ra=s;return h|0}}else j=c[q>>2]|0;Gc(j)|0;do if(j){i=c[j>>2]|0;f=j+136|0;r=c[f+4>>2]|0;if((r|0)>0|(r|0)==0&(c[f>>2]|0)>>>0>0)hc(i,j);k=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;f=j+64|0;c[f>>2]=0;c[f+4>>2]=0;if((k|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&k;break}}else i=0;while(0);f=(c[d+12>>2]|0)+40|0;d=c[f+4>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=d;h=i;Ra=s;return h|0}function Br(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;p=t;q=t+8|0;if(c[d>>2]|0){Ra=t;return}g=e+24|0;s=c[g>>2]|0;s=Yv(s|0,((s|0)<0)<<31>>31|0,10,0)|0;s=pb(s,L()|0)|0;a:do if(s){o=c[g>>2]|0;if((o|0)>0){n=0;g=0;do{i=s+g|0;h=i;k=c[f+(n<<2)>>2]|0;m=0;while(1){j=k&255;l=h+1|0;a[h>>0]=j|-128;k=bw(k|0,m|0,7)|0;m=L()|0;if((k|0)==0&(m|0)==0)break;else h=l}a[h>>0]=j&127;g=g-i+l|0;n=n+1|0}while((n|0)!=(o|0));m=g}else m=0;i=e+136|0;h=c[i>>2]|0;c[q>>2]=h;do if(!h){h=c[e+20>>2]|0;c[p>>2]=c[e+16>>2];c[p+4>>2]=h;h=Bb(52323,p)|0;if(h){g=qd(c[e+12>>2]|0,h,-1,133,0,q,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[q>>2]|0;c[i>>2]=h;if(!g)break}else g=7;if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break a}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break a}}while(0);l=h;i=e+272|0;g=c[i>>2]|0;i=c[i+4>>2]|0;do if(!(Vc(l,1)|0)){j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){e=j;c[e>>2]=g;c[e+4>>2]=i;b[k>>1]=4;break}else{Pg(j,g,i);break}}while(0);if(Vc(l,2)|0){do if(90!=-1)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);Gc(l)|0;if(!h){g=0;break}}else{g=yc((c[l+100>>2]|0)+40|0,s,m,0,90)|0;if(g|0?(r=c[l>>2]|0,c[r+64>>2]=g,Ne(r,g),r=c[l>>2]|0,(g|0)==3082|(a[r+81>>0]|0)!=0):0)og(r);Gc(l)|0}g=c[l>>2]|0;s=l+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(g,l);h=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;s=l+64|0;c[s>>2]=0;c[s+4>>2]=0;if((h|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7;break}else{g=c[g+68>>2]&h;break}}else g=7;while(0);c[d>>2]=g;Ra=t;return}function Cr(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;D=Ra;Ra=Ra+32|0;x=D+8|0;k=D;y=D+16|0;u=f+24|0;v=c[u>>2]|0;w=v+2|0;if(c[e>>2]|0){Ra=D;return}C=Yv(w|0,((w|0)<0)<<31>>31|0,14,0)|0;C=pb(C,L()|0)|0;if(!C){c[e>>2]=7;Ra=D;return}z=C+(w<<2)|0;l=f+144|0;j=c[l>>2]|0;c[y>>2]=j;do if(!j){t=c[f+20>>2]|0;c[k>>2]=c[f+16>>2];c[k+4>>2]=t;k=Bb(52411,k)|0;if(k){j=qd(c[f+12>>2]|0,k,-1,133,0,y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[y>>2]|0;c[l>>2]=k;if(!j)break}else j=7;if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{B=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}else k=j;while(0);t=k;do if(!(Vc(t,1)|0)){j=c[t+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){s=j;c[s>>2]=0;c[s+4>>2]=0;b[l>>1]=4;break}else{Pg(j,0,0);break}}while(0);if((Gc(t)|0)==100){if(!k)n=mc(29576)|0;else{j=c[t+120>>2]|0;if((j|0)!=0?(b[t+144>>1]|0)!=0:0)l=t;else{j=c[t>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;l=t}n=mc(j)|0;j=c[l>>2]|0;m=t+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j}s=Lc(t,0)|0;if(((s|0)!=0?(a[n+(s+-1)>>0]|0)>-1:0)?(v|0)>-2&(s|0)>0:0){j=0;r=0;do{q=n+r|0;l=d[q>>0]|0;if(l&128){p=d[q+1>>0]|0;l=p<<7|l&127;if(p&128){p=d[q+2>>0]|0;l=p<<14|l&16383;if(p&128){p=d[q+3>>0]|0;l=p<<21|l&2097151;if(!(p&128))m=4;else{o=28;p=q+4|0;l=l&268435455;m=0;do{E=p;p=p+1|0;E=d[E>>0]|0;F=cw(E&127|0,0,o|0)|0;l=Sv(F|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((E&128|0)!=0|0!=0));m=p-q|0}}else m=3}else m=2}else m=1;r=m+r|0;c[C+(j<<2)>>2]=l;j=j+1|0}while((j|0)<(w|0)&(r|0)<(s|0))}else j=0;if((w|0)>(j|0))gw(C+(j<<2)|0,0,w-j<<2|0)|0}else gw(C|0,0,w<<2|0)|0;do if(k|0){j=c[t>>2]|0;F=t+136|0;E=c[F+4>>2]|0;if((E|0)>0|(E|0)==0&(c[F>>2]|0)>>>0>0)hc(j,t);k=kc(t)|0;c[t+20>>2]=770837923;c[t+36>>2]=-1;c[t+40>>2]=0;a[t+146>>0]=2;c[t+44>>2]=0;c[t+32>>2]=1;a[t+147>>0]=-1;c[t+48>>2]=0;F=t+64|0;c[F>>2]=0;c[F+4>>2]=0;if(!((k|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&k;if(!j)break}else{og(j);j=7}if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}while(0);k=c[C>>2]|0;k=(i|0)<0&k>>>0<(0-i|0)>>>0?0:k+i|0;c[C>>2]=k;if((c[u>>2]|0)>=0){j=0;do{F=j;j=j+1|0;E=C+(j<<2)|0;t=(c[g+(F<<2)>>2]|0)+(c[E>>2]|0)|0;i=c[h+(F<<2)>>2]|0;c[E>>2]=t>>>0<i>>>0?0:t-i|0}while((F|0)<(c[u>>2]|0))}a:do if((v|0)>-2){q=0;j=0;while(1){p=z+j|0;o=p;n=0;while(1){l=k&255;m=o+1|0;a[o>>0]=l|-128;k=bw(k|0,n|0,7)|0;n=L()|0;if((k|0)==0&(n|0)==0)break;else o=m}a[o>>0]=l&127;j=j-p+m|0;k=q+1|0;if((k|0)==(w|0)){n=j;break a}q=k;k=c[C+(k<<2)>>2]|0}}else n=0;while(0);l=f+148|0;k=c[l>>2]|0;c[y>>2]=k;do if(!k){k=c[f+20>>2]|0;c[x>>2]=c[f+16>>2];c[x+4>>2]=k;k=Bb(52453,x)|0;if(k){j=qd(c[f+12>>2]|0,k,-1,133,0,y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{F=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[y>>2]|0;c[l>>2]=k;if(!j)break}else j=7;if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}while(0);m=k;do if(!(Vc(m,1)|0)){j=c[m+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){F=j;c[F>>2]=0;c[F+4>>2]=0;b[l>>1]=4;break}else{Pg(j,0,0);break}}while(0);if((z|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;if(!k)j=0;else B=87}else{j=yc((c[m+100>>2]|0)+40|0,z,n,0,0)|0;if(j|0?(A=c[m>>2]|0,c[A+64>>2]=j,Ne(A,j),A=c[m>>2]|0,(j|0)==3082|(a[A+81>>0]|0)!=0):0)og(A);Gc(m)|0;B=87}do if((B|0)==87){j=c[m>>2]|0;F=m+136|0;E=c[F+4>>2]|0;if((E|0)>0|(E|0)==0&(c[F>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;F=m+64|0;c[F>>2]=0;c[F+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}while(0);c[e>>2]=j;Vc(m,2)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](C);Ra=D;return}else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C);Ra=D;return}}function Dr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+16|0;g=m;h=m+8|0;j=d+164|0;f=c[j>>2]|0;c[h>>2]=f;do if(!f){f=c[d+20>>2]|0;c[g>>2]=c[d+16>>2];c[g+4>>2]=f;f=Bb(52546,g)|0;if(!f){j=0;i=7;break}i=qd(c[d+12>>2]|0,f,-1,133,0,h,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}f=c[h>>2]|0;c[j>>2]=f;if(!i)k=9;else j=0}else k=9;while(0);if((k|0)==9){l=f;g=c[d+280>>2]|0;h=((g|0)<0)<<31>>31;do if(!(Vc(l,1)|0)){i=c[l+100>>2]|0;j=i+8|0;if(!(b[j>>1]&9216)){k=i;c[k>>2]=g;c[k+4>>2]=h;b[j>>1]=4;break}else{Pg(i,g,h);break}}while(0);k=d+252|0;g=c[k>>2]|0;h=((g|0)<0)<<31>>31;do if(!(Vc(l,2)|0)){j=c[l+100>>2]|0;i=j+40|0;j=j+48|0;if(!(b[j>>1]&9216)){c[i>>2]=g;c[i+4>>2]=h;b[j>>1]=4;break}else{Pg(i,g,h);break}}while(0);if((Gc(l)|0)==100){g=0;h=0;while(1){j=Nc(l,0)|0;a:do if(!g){i=0;while(1){if((i|0)>=(c[k>>2]|0)){g=0;break a}g=Er(d,j,i,-2)|0;n=(g|0)==101;g=n?0:g;h=n?1:h;if(!g)i=i+1|0;else break}}while(0);if((Gc(l)|0)!=100){i=g;break}}}else{h=0;i=0}do if(f){f=c[l>>2]|0;n=l+136|0;k=c[n+4>>2]|0;if((k|0)>0|(k|0)==0&(c[n>>2]|0)>>>0>0)hc(f,l);g=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;n=l+64|0;c[n>>2]=0;c[n+4>>2]=0;if((g|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7;break}else{f=c[f+68>>2]&g;break}}else f=0;while(0);j=h;i=(i|0)==0?f:i}f=d+248|0;g=c[f>>2]|0;if(!g){c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}n=g;if((c[h+304>>2]|0)>>>0<=n>>>0?(c[h+308>>2]|0)>>>0>n>>>0:0){n=h+300|0;c[g>>2]=c[n>>2];c[n>>2]=g;c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}else{n=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}return 0}function Er(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ca=Ra;Ra=Ra+128|0;R=ca+40|0;Q=ca+32|0;P=ca+24|0;O=ca+16|0;w=ca+8|0;i=ca;S=ca+120|0;x=ca+104|0;aa=ca+48|0;h=aa;j=h+56|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));h=Xp(d,e,f,g,0,0,1,0,aa)|0;ba=aa+4|0;a:do if(!h){q=c[ba>>2]|0;if(!q){h=0;j=c[aa>>2]|0;i=aa;Z=264;break}N=(g|0)!=-1;if(N){j=d+116|0;h=c[j>>2]|0;c[S>>2]=h;if(!h){Y=c[d+20>>2]|0;c[i>>2]=c[d+16>>2];c[i+4>>2]=Y;i=Bb(52072,i)|0;if(!i){h=7;Z=237;break}h=qd(c[d+12>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{Y=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[S>>2]|0;c[j>>2]=i;if(!h)h=i;else{Z=237;break}}n=h;o=d+252|0;i=c[o>>2]|0;p=((e|0)<0)<<31>>31;i=Yv(i|0,((i|0)<0)<<31>>31|0,e|0,p|0)|0;m=((f|0)<0)<<31>>31;i=Sv(i|0,L()|0,f|0,m|0)|0;i=cw(i|0,L()|0,10)|0;j=L()|0;do if(!(Vc(n,1)|0)){k=c[n+100>>2]|0;l=k+8|0;if(!(b[l>>1]&9216)){Y=k;c[Y>>2]=i;c[Y+4>>2]=j;b[l>>1]=4;break}else{Pg(k,i,j);break}}while(0);j=c[o>>2]|0;j=Yv(j|0,((j|0)<0)<<31>>31|0,e|0,p|0)|0;j=Sv(j|0,L()|0,f|0,m|0)|0;j=cw(j|0,L()|0,10)|0;i=L()|0;j=j|1023;do if(!(Vc(n,2)|0)){l=c[n+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){Y=k;c[Y>>2]=j;c[Y+4>>2]=i;b[l>>1]=4;break}else{Pg(k,j,i);break}}while(0);if((Gc(n)|0)==100){k=Oc(n,0)|0;j=L()|0}else{k=0;j=0}do if(h|0){i=c[n>>2]|0;Y=n+136|0;X=c[Y+4>>2]|0;if((X|0)>0|(X|0)==0&(c[Y>>2]|0)>>>0>0)hc(i,n);h=kc(n)|0;c[n+20>>2]=770837923;c[n+36>>2]=-1;c[n+40>>2]=0;a[n+146>>0]=2;c[n+44>>2]=0;c[n+32>>2]=1;a[n+147>>0]=-1;c[n+48>>2]=0;Y=n+64|0;c[Y>>2]=0;c[Y+4>>2]=0;if(!((h|0)==3082|(a[i+81>>0]|0)!=0)){h=c[i+68>>2]&h;if(!h)break;else{Z=237;break a}}else{og(i);h=7;Z=237;break a}}while(0);if((g|0)==-2){if((q|0)==1?(c[(c[c[aa>>2]>>2]|0)+56>>2]|0)==0:0){h=101;Z=237;break};c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;W=0;Y=k;X=j;V=j;U=k;K=1;i=3;h=x+12|0}else{q=e;n=p;p=f;u=j;v=k;Z=33}}else{o=d+252|0;q=e;n=((e|0)<0)<<31>>31;p=f;m=((f|0)<0)<<31>>31;u=0;v=0;Z=33}do if((Z|0)==33){r=g+1|0;s=c[o>>2]|0;s=Yv(q|0,n|0,s|0,((s|0)<0)<<31>>31|0)|0;s=Sv(s|0,L()|0,p|0,m|0)|0;s=cw(s|0,L()|0,10)|0;j=((r|0)<0)<<31>>31;s=Sv(s|0,L()|0,r|0,j|0)|0;t=L()|0;k=d+88|0;l=c[k>>2]|0;c[S>>2]=l;if(!l){i=c[d+20>>2]|0;c[w>>2]=c[d+16>>2];c[w+4>>2]=i;i=Bb(51533,w)|0;if(!i){h=7;Z=237;break a}h=qd(c[d+12>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{Y=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}l=c[S>>2]|0;c[k>>2]=l;if(h|0){Z=237;break a}k=c[o>>2]|0;k=Yv(q|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;k=Sv(k|0,L()|0,p|0,m|0)|0;k=cw(k|0,L()|0,10)|0;j=Sv(k|0,L()|0,r|0,j|0)|0;k=L()|0}else{j=s;k=t}m=l;do if(!(Vc(m,1)|0)){h=c[m+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){Y=h;c[Y>>2]=j;c[Y+4>>2]=k;b[i>>1]=4;break}else{Pg(h,j,k);break}}while(0);if((Gc(m)|0)==100)j=Nc(m,0)|0;else j=0;do if(l|0){h=c[m>>2]|0;Y=m+136|0;X=c[Y+4>>2]|0;if((X|0)>0|(X|0)==0&(c[Y>>2]|0)>>>0>0)hc(h,m);i=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;Y=m+64|0;c[Y>>2]=0;c[Y+4>>2]=0;if(!((i|0)==3082|(a[h+81>>0]|0)!=0)){h=c[h+68>>2]&i;if(!h)break;else{Z=237;break a}}else{og(h);h=7;Z=237;break a}}while(0);if((j|0)>15){h=Er(d,e,f,r)|0;if(!h){i=N&((t|0)>(u|0)|(t|0)==(u|0)&s>>>0>v>>>0);h=0;Z=59}else{Z=237;break a}}else if(N){i=(t|0)>(u|0)|(t|0)==(u|0)&s>>>0>v>>>0;h=j;Z=59}else{c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;h=j;j=x+12|0}if((Z|0)==59){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;j=x+12|0;if(i){W=h;Y=s;X=t;V=u;U=v;K=0;i=3;h=j;break}}W=h;Y=s;X=t;V=u;U=v;K=0;i=1;h=j}while(0);c[h>>2]=i;c[aa+12>>2]=x;h=eq(d,aa,0,0)|0;if(!h){C=aa+40|0;D=aa+44|0;E=aa+48|0;F=aa+52|0;G=d+228|0;H=d+96|0;I=d+16|0;J=d+20|0;M=d+12|0;T=d+52|0;i=0;j=0;b:while(1){h=gq(d,aa)|0;switch(h|0){case 0:{Z=130;break b}case 100:break;default:{Z=223;break b}}A=c[C>>2]|0;B=c[D>>2]|0;y=c[E>>2]|0;z=c[F>>2]|0;if(!i){if(mb()|0){h=7;Z=237;break a}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](64)|0;if(!h){h=7;Z=237;break a}else l=h}else{h=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){x=c[14978]|0;w=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=x>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(!i){h=7;Z=237;break a}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=i}else l=i}h=l;j=h+64|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));x=nb(c[G>>2]|0)|0;c[l+48>>2]=x;if(!x){Z=222;break}c[l+40>>2]=c[G>>2];h=c[H>>2]|0;c[S>>2]=h;if(!h){i=c[J>>2]|0;c[O>>2]=c[I>>2];c[O+4>>2]=i;i=Bb(51657,O)|0;if(!i){Z=81;break}h=qd(c[M>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{x=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[S>>2]|0;c[H>>2]=i;if(!h)h=i;else{Z=224;break}}j=h;if((Gc(j)|0)==100){v=Oc(j,0)|0;w=L()|0;x=l+16|0;c[x>>2]=v;c[x+4>>2]=w;x=l+8|0;c[x>>2]=v;c[x+4>>2]=w}if(h){h=c[j>>2]|0;x=j+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(h,j);i=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;x=j+64|0;c[x>>2]=0;c[x+4>>2]=0;if((i|0)==3082|(a[h+81>>0]|0)!=0){Z=92;break}h=c[h+68>>2]&i;if(h){Z=225;break}else{i=l;j=l}}else{i=l;j=l}}v=i+44|0;q=c[v>>2]|0;w=i+24|0;k=c[w>>2]|0;x=i+28|0;l=c[x>>2]|0;c:do if((l|0)>0){h=0;while(1){if((a[k+h>>0]|0)!=(a[A+h>>0]|0)){o=h;break c}h=h+1|0;if((h|0)>=(l|0)){o=h;break}}}else o=0;while(0);p=B-o|0;if((p|0)<1){h=267;Z=223;break}n=0;h=o;k=((o|0)<0)<<31>>31;do{n=n+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));m=0;h=p;k=((p|0)<0)<<31>>31;do{m=m+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));u=((z|0)<0)<<31>>31;h=0;k=z;l=u;do{h=h+1|0;k=bw(k|0,l|0,7)|0;l=L()|0}while(!((k|0)==0&(l|0)==0));h=p+z+n+m+h|0;if((q|0)>0?(h+q|0)>(c[G>>2]|0):0){s=i+16|0;h=s;t=c[h>>2]|0;h=c[h+4>>2]|0;p=Sv(t|0,h|0,1,0)|0;r=L()|0;c[s>>2]=p;c[s+4>>2]=r;h=Hr(d,t,h,c[i+48>>2]|0,q)|0;if(h|0){k=i;break}c[T>>2]=(c[T>>2]|0)+1;h=Ir(d,i,A,o+1|0)|0;if(h|0){k=i;break}c[x>>2]=0;m=0;h=B;k=((B|0)<0)<<31>>31;while(1){h=bw(h|0,k|0,7)|0;k=L()|0;if((h|0)==0&(k|0)==0)break;else m=m+1|0}l=0;h=z;k=u;do{l=l+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));s=0;q=0;l=B+2+z+m+l|0;r=B}else{s=o;l=h;r=p}k=i+56|0;h=k;h=Sv(c[h>>2]|0,c[h+4>>2]|0,l|0,((l|0)<0)<<31>>31|0)|0;t=L()|0;c[k>>2]=h;c[k+4>>2]=t;k=i+40|0;t=i+48|0;h=c[t>>2]|0;if((l|0)>(c[k>>2]|0)){if(mb()|0){k=i;h=7;break}h=sb(h,(l|0)>0?l:0,0)|0;if(!h){k=i;h=7;break}c[t>>2]=h;c[k>>2]=l}k=h+q|0;h=k;m=s;o=((s|0)<0)<<31>>31;while(1){l=m&255;n=h+1|0;a[h>>0]=l|-128;m=bw(m|0,o|0,7)|0;o=L()|0;if((m|0)==0&(o|0)==0)break;else h=n}a[h>>0]=l&127;k=n-k+q|0;l=(c[t>>2]|0)+k|0;h=l;n=r;p=((r|0)<0)<<31>>31;while(1){m=n&255;o=h+1|0;a[h>>0]=m|-128;n=bw(n|0,p|0,7)|0;p=L()|0;if((n|0)==0&(p|0)==0)break;else h=o}a[h>>0]=m&127;n=o-l+k|0;ew((c[t>>2]|0)+n|0,A+s|0,r|0)|0;n=n+r|0;o=(c[t>>2]|0)+n|0;m=o;p=z;l=u;while(1){h=p&255;k=m+1|0;a[m>>0]=h|-128;p=bw(p|0,l|0,7)|0;l=L()|0;if((p|0)==0&(l|0)==0)break;else m=k}a[m>>0]=h&127;k=k-o+n|0;ew((c[t>>2]|0)+k|0,y|0,z|0)|0;c[v>>2]=k+z;k=i+32|0;if((c[k>>2]|0)<(B|0)){l=i+36|0;h=c[l>>2]|0;m=B<<1;if(mb()|0){k=i;h=7;break}h=sb(h,(m|0)>0?m:0,0)|0;if(!h){k=i;h=7;break}c[k>>2]=m;c[l>>2]=h;c[w>>2]=h}else h=c[w>>2]|0;ew(h|0,A|0,B|0)|0;c[x>>2]=B}d:do if((Z|0)==81){k=l;h=7;j=l}else if((Z|0)==92){og(h);k=l;h=7;j=l}else if((Z|0)==130){if(N){s=c[aa>>2]|0;t=c[ba>>2]|0;do if((t|0)>0){r=d+124|0;q=0;e:while(1){p=c[s+(q<<2)>>2]|0;m=p+8|0;l=m;h=c[l>>2]|0;l=c[l+4>>2]|0;do if((h|0)==0&(l|0)==0)h=0;else{k=c[r>>2]|0;c[S>>2]=k;if(!k){k=c[J>>2]|0;c[P>>2]=c[I>>2];c[P+4>>2]=k;k=Bb(52181,P)|0;if(!k){Z=137;break e}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{Z=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[r>>2]=k;if(h|0){Z=223;break d}l=m;h=c[l>>2]|0;l=c[l+4>>2]|0}o=k;do if(!(Vc(o,1)|0)){m=c[o+100>>2]|0;n=m+8|0;if(!(b[n>>1]&9216)){Z=m;c[Z>>2]=h;c[Z+4>>2]=l;b[n>>1]=4;break}else{Pg(m,h,l);break}}while(0);m=p+24|0;l=c[m>>2]|0;m=c[m+4>>2]|0;if(Vc(o,2)|0){Gc(o)|0;if(!k){h=0;break}}else{k=c[o+100>>2]|0;h=k+40|0;k=k+48|0;if(!(b[k>>1]&9216)){Z=h;c[Z>>2]=l;c[Z+4>>2]=m;b[k>>1]=4}else Pg(h,l,m);Gc(o)|0}k=c[o>>2]|0;Z=o+136|0;O=c[Z+4>>2]|0;if((O|0)>0|(O|0)==0&(c[Z>>2]|0)>>>0>0)hc(k,o);h=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;Z=o+64|0;c[Z>>2]=0;c[Z+4>>2]=0;if((h|0)==3082|(a[k+81>>0]|0)!=0){Z=156;break e}h=c[k+68>>2]&h}while(0);q=q+1|0;k=(h|0)==0;if(!((q|0)<(t|0)&k)){Z=159;break}}if((Z|0)==137){h=7;Z=223;break d}else if((Z|0)==156){og(k);h=7;Z=223;break d}else if((Z|0)==159)if(k)break;else{Z=223;break d}}while(0);do if(K){l=d+160|0;h=c[l>>2]|0;c[S>>2]=h;if(!h){k=c[J>>2]|0;c[Q>>2]=c[I>>2];c[Q+4>>2]=k;k=Bb(52491,Q)|0;if(!k){h=7;Z=223;break d}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[l>>2]=k;if(!h)h=k;else{Z=223;break d}}l=h;k=d+252|0;o=c[k>>2]|0;m=((e|0)<0)<<31>>31;o=Yv(o|0,((o|0)<0)<<31>>31|0,e|0,m|0)|0;n=((f|0)<0)<<31>>31;o=Sv(o|0,L()|0,f|0,n|0)|0;o=cw(o|0,L()|0,10)|0;p=L()|0;do if(!(Vc(l,1)|0)){q=c[l+100>>2]|0;r=q+8|0;if(!(b[r>>1]&9216)){S=q;c[S>>2]=o;c[S+4>>2]=p;b[r>>1]=4;break}else{Pg(q,o,p);break}}while(0);k=c[k>>2]|0;m=Yv(k|0,((k|0)<0)<<31>>31|0,e|0,m|0)|0;m=Sv(m|0,L()|0,f|0,n|0)|0;m=cw(m|0,L()|0,10)|0;k=L()|0;m=m|1023;if(!(Vc(l,2)|0)){o=c[l+100>>2]|0;n=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){f=n;c[f>>2]=m;c[f+4>>2]=k;b[o>>1]=4;break}else{Pg(n,m,k);break}}}else{l=d+120|0;h=c[l>>2]|0;c[S>>2]=h;if(!h){k=c[J>>2]|0;c[R>>2]=c[I>>2];c[R+4>>2]=k;k=Bb(52138,R)|0;if(!k){h=7;Z=223;break d}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[l>>2]=k;if(!h)h=k;else{Z=223;break d}}l=h;k=c[d+252>>2]|0;k=Yv(k|0,((k|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;k=Sv(k|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;k=cw(k|0,L()|0,10)|0;k=Sv(k|0,L()|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;if(!(Vc(l,1)|0)){n=c[l+100>>2]|0;o=n+8|0;if(!(b[o>>1]&9216)){f=n;c[f>>2]=k;c[f+4>>2]=m;b[o>>1]=4;break}else{Pg(n,k,m);break}}}while(0);Gc(l)|0;do if(h){h=c[l>>2]|0;f=l+136|0;e=c[f+4>>2]|0;if((e|0)>0|(e|0)==0&(c[f>>2]|0)>>>0>0)hc(h,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;f=l+64|0;c[f>>2]=0;c[f+4>>2]=0;if((k|0)==3082|(a[h+81>>0]|0)!=0){og(h);h=7;Z=223;break d}else{h=c[h+68>>2]&k;break}}else h=0;while(0);if(!((i|0)!=0&(h|0)==0)){Z=223;break}}else if(!i){h=0;Z=237;break a}f:do if(!(c[i>>2]|0)){h=i+56|0;h=Jr(d,Y,X,W,0,0,0,0,0,0,c[h>>2]|0,c[h+4>>2]|0,c[i+48>>2]|0,c[i+44>>2]|0)|0}else{k=i+16|0;B=k;A=c[B>>2]|0;B=c[B+4>>2]|0;e=Sv(A|0,B|0,1,0)|0;f=L()|0;h=k;c[h>>2]=e;c[h+4>>2]=f;h=Hr(d,A,B,c[i+48>>2]|0,c[i+44>>2]|0)|0;g:do if(!h){m=c[i>>2]|0;z=i+8|0;o=z;r=c[o>>2]|0;o=c[o+4>>2]|0;q=k;l=c[q>>2]|0;q=c[q+4>>2]|0;h=c[m>>2]|0;if(!h){k=m;s=1;u=l;t=q;q=o}else{p=m;y=1;x=m;while(1){k=c[p+8>>2]|0;if(!k){m=l;n=q;k=h}else{w=y&255;m=l;n=q;v=o;do{h=0;o=r;p=v;while(1){o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else h=h+1|0}o=9-h|0;p=k+36|0;a[(c[p>>2]|0)+o>>0]=w;h=(c[p>>2]|0)+(o+1)|0;t=r;u=v;while(1){s=t&255;a[h>>0]=s|-128;t=bw(t|0,u|0,7)|0;u=L()|0;if((t|0)==0&(u|0)==0)break;else h=h+1|0}a[h>>0]=s&127;h=Hr(d,m,n,(c[p>>2]|0)+o|0,(c[k+32>>2]|0)-o|0)|0;m=Sv(m|0,n|0,1,0)|0;n=L()|0;o=(c[k+12>>2]|0)+1|0;r=Sv(r|0,v|0,o|0,((o|0)<0)<<31>>31|0)|0;v=L()|0;k=c[k+4>>2]|0;o=(h|0)==0}while(o&(k|0)!=0);if(!o)break g;k=c[x>>2]|0}y=y+1|0;h=c[k>>2]|0;if(!h)break;else{o=q;r=l;p=k;l=m;q=n;x=k}}s=y&255;u=m;t=n;r=l}h=0;l=r;m=q;while(1){l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else h=h+1|0}o=9-h|0;p=k+36|0;a[(c[p>>2]|0)+o>>0]=s;n=(c[p>>2]|0)+(o+1)|0;m=r;l=q;while(1){h=m&255;a[n>>0]=h|-128;m=bw(m|0,l|0,7)|0;l=L()|0;if((m|0)==0&(l|0)==0)break;else n=n+1|0}a[n>>0]=h&127;e=Sv(u|0,t|0,-1,-1)|0;f=L()|0;S=z;h=i+56|0;h=Jr(d,Y,X,W,c[S>>2]|0,c[S+4>>2]|0,A,B,e,f,c[h>>2]|0,c[h+4>>2]|0,(c[p>>2]|0)+o|0,(c[k+32>>2]|0)-o|0)|0;break f}while(0);c[T>>2]=(c[T>>2]|0)+1;Z=223;break d}while(0);c[T>>2]=(c[T>>2]|0)+1;if(!h)if((g|0)==-1|((X|0)<(V|0)|(X|0)==(V|0)&Y>>>0<U>>>0)){h=i+56|0;k=i;h=Gr(d,Y,X,c[h>>2]|0,c[h+4>>2]|0)|0}else{k=i;h=0}else k=i}else if((Z|0)==222){i=l;h=7;j=l;Z=223}else if((Z|0)==224){k=l;j=l}else if((Z|0)==225){k=l;j=l}while(0);if((Z|0)==223)if(!i){Z=237;break}else k=i;i=c[k+48>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[k+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);Kr(c[k>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);Z=237;break}else{Z=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);Z=237;break}}else Z=237}else Z=237;while(0);if((Z|0)==237){k=c[ba>>2]|0;j=c[aa>>2]|0;if((k|0)>0){i=0;do{l=c[j+(i<<2)>>2]|0;do if(l|0){do if((c[l+56>>2]|0)==0?(_=c[l+64>>2]|0,_|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](_);break}else{d=Wa[c[29352>>2]&127](_)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](_);break}while(0);do if((a[l+5>>0]|0)==0?($=c[l+40>>2]|0,$|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127]($);break}else{d=Wa[c[29352>>2]&127]($)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127]($);break}while(0);m=c[l+52>>2]|0;do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(n|0){if(c[n+480>>2]|0){Xd(n,m);break}d=m;if((c[n+304>>2]|0)>>>0<=d>>>0?(c[n+308>>2]|0)>>>0>d>>>0:0){d=n+300|0;c[m>>2]=c[d>>2];c[d>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{d=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{d=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);i=i+1|0}while((i|0)!=(k|0));i=aa;Z=265}else{i=aa;Z=264}}if((Z|0)==264)if(!j)j=h;else Z=265;do if((Z|0)==265)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=h;break}else{$=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=h;break}while(0);h=c[aa+16>>2]|0;if(!h){c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}return 0}function Fr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=b+252|0;if((c[h>>2]|0)<=0){k=b+264|0;c[k>>2]=0;return}i=b+256|0;g=0;do{k=c[i>>2]|0;f=k+(g*24|0)+12|0;d=c[f>>2]|0;if(!d)d=0;else{do{e=c[d+8>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);d=c[d>>2]|0}while((d|0)!=0);d=c[f>>2]|0}c[f>>2]=0;e=k+(g*24|0)+20|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[k+(g*24|0)+16>>2]=0;if(d|0){f=k+(g*24|0)+5|0;do{e=d;d=c[d>>2]|0;do if(a[f>>0]|0?(j=c[e+12>>2]|0,j|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0)}c[k+(g*24|0)+8>>2]=0;g=g+1|0}while((g|0)<(c[h>>2]|0));l=b+264|0;c[l>>2]=0;return}function Gr(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+32|0;w=A+16|0;v=A+8|0;k=A;x=A+24|0;l=d+204|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[k>>2]=c[d+16>>2];c[k+4>>2]=j;j=Bb(53301,k)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{z=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(k){g=k;Ra=A;return g|0}}n=Wv(f|0,g|0,1024,0)|0;n=cw(n|0,L()|0,10)|0;m=L()|0;n=n|1023;s=Yv(h|0,i|0,3,0)|0;s=Wv(s|0,L()|0,2,0)|0;t=L()|0;z=j;k=Sv(f|0,g|0,1,0)|0;l=L()|0;do if(!(Vc(z,1)|0)){h=c[z+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){y=h;c[y>>2]=k;c[y+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);do if(!(Vc(z,2)|0)){l=c[z+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){y=k;c[y>>2]=n;c[y+4>>2]=m;b[l>>1]=4;break}else{Pg(k,n,m);break}}while(0);a:do if((Gc(z)|0)==100){p=z+120|0;q=z+144|0;r=z+40|0;if(!j){g=0;Ra=A;return g|0}while(1){k=c[p>>2]|0;if((k|0)!=0?(e[q>>1]|0)>2:0)k=k+80|0;else{k=c[z>>2]|0;c[k+64>>2]=25;Ne(k,25);k=29576}l=b[k+8>>1]|0;if((l&514)==514?(a[k+10>>0]|0)==1:0)o=c[k+16>>2]|0;else if(!(l&1))o=Gg(k,1)|0;else o=0;k=c[z>>2]|0;l=c[r>>2]|0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7}else k=c[k+68>>2]&l;c[r>>2]=k;if(!o){l=0;break a}if(((a[o>>0]|0)+-48&255)<10){k=0;do k=k+1|0;while(((a[o+k>>0]|0)+-48&255)<10)}else k=0;b:while(1){l=a[o+k>>0]|0;switch(l<<24>>24){case 45:{u=40;break b}case 32:break;default:{m=1;n=0;break b}}k=k+1|0}if((u|0)==40){u=0;l=k+1|0;k=l;l=a[o+l>>0]|0;m=-1;n=-1}if((l+-48&255)<10){h=0;i=0;do{i=Yv(h|0,i|0,10,0)|0;h=(l&255)+-48|0;h=Sv(i|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;k=k+1|0;l=a[o+k>>0]|0}while((l+-48&255)<10);l=h;k=i}else{l=0;k=0}l=Yv(l|0,k|0,m|0,n|0)|0;y=L()|0;k=(y|0)<0|(y|0)==0&l>>>0<1;l=(y|0)>(t|0)|(y|0)==(t|0)&l>>>0>s>>>0;if(k|l){u=45;break}if((Gc(z)|0)!=100){u=46;break}}if((u|0)==45){l=(k|l)^1;break}else if((u|0)==46){l=(k|l)^1;break}}else l=0;while(0);do if(!j){j=0;y=1}else{j=c[z>>2]|0;y=z+136|0;u=c[y+4>>2]|0;if((u|0)>0|(u|0)==0&(c[y>>2]|0)>>>0>0)hc(j,z);k=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;y=z+64|0;c[y>>2]=0;c[y+4>>2]=0;if(!((k|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&k;y=0;break}og(j);g=7;Ra=A;return g|0}while(0);if(!(l&(j|0)==0)){g=j;Ra=A;return g|0}l=d+208|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[v>>2]=c[d+16>>2];c[v+4>>2]=j;j=Bb(53407,v)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{v=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(!k)h=j;else{g=k;Ra=A;return g|0}}else h=j;l=d+212|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[w>>2]=c[d+16>>2];c[w+4>>2]=j;j=Bb(53480,w)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{d=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(!k)x=j;else{g=k;Ra=A;return g|0}}else x=j;do if(!(Vc(z,1)|0)){j=c[z+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){d=j;c[d>>2]=f;c[d+4>>2]=g;b[k>>1]=4;break}else{Pg(j,f,g);break}}while(0);c:do if((Gc(z)|0)==100){m=h;n=m+100|0;o=m+136|0;p=m+20|0;q=m+36|0;r=m+40|0;s=m+146|0;t=m+44|0;u=m+32|0;v=m+147|0;w=m+48|0;d=m+64|0;d:do if(!h){i=0;while(1){do if(!(Vc(m,1)|0)){j=c[n>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){h=j;c[h>>2]=i;c[h+4>>2]=0;b[k>>1]=4;break}else{Pg(j,i,0);break}}while(0);j=Nc(z,0)|0;k=((j|0)<0)<<31>>31;do if(!(Vc(m,2)|0)){h=c[n>>2]|0;l=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4;break}else{Pg(l,j,k);break}}while(0);j=Nc(z,1)|0;k=((j|0)<0)<<31>>31;if(!(Vc(m,3)|0)){h=c[n>>2]|0;l=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4}else Pg(l,j,k);Gc(m)|0;j=c[m>>2]|0;h=o;l=c[h+4>>2]|0;if((l|0)>0|(l|0)==0&(c[h>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[p>>2]=770837923;c[q>>2]=-1;c[r>>2]=0;a[s>>0]=2;c[t>>2]=0;c[u>>2]=1;a[v>>0]=-1;c[w>>2]=0;h=d;c[h>>2]=0;c[h+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){u=113;break d}j=c[j+68>>2]&k;if(j|0){u=115;break d}}else Gc(m)|0;if((Gc(z)|0)==100)i=i+1|0;else break c}}else{i=0;while(1){do if(!(Vc(m,1)|0)){j=c[n>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){h=j;c[h>>2]=i;c[h+4>>2]=0;b[k>>1]=4;break}else{Pg(j,i,0);break}}while(0);j=Nc(z,0)|0;k=((j|0)<0)<<31>>31;do if(!(Vc(m,2)|0)){h=c[n>>2]|0;l=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4;break}else{Pg(l,j,k);break}}while(0);j=Nc(z,1)|0;k=((j|0)<0)<<31>>31;if(!(Vc(m,3)|0)){h=c[n>>2]|0;l=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4}else Pg(l,j,k);Gc(m)|0}else Gc(m)|0;j=c[m>>2]|0;h=o;l=c[h+4>>2]|0;if((l|0)>0|(l|0)==0&(c[h>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[p>>2]=770837923;c[q>>2]=-1;c[r>>2]=0;a[s>>0]=2;c[t>>2]=0;c[u>>2]=1;a[v>>0]=-1;c[w>>2]=0;h=d;c[h>>2]=0;c[h+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){u=113;break d}j=c[j+68>>2]&k;if(j|0){u=115;break d}if((Gc(z)|0)==100)i=i+1|0;else break c}}while(0);if((u|0)==113){og(j);if(y){g=7;Ra=A;return g|0}else k=7}else if((u|0)==115)if(y){g=j;Ra=A;return g|0}else k=j;j=c[z>>2]|0;g=z+136|0;f=c[g+4>>2]|0;if((f|0)>0|(f|0)==0&(c[g>>2]|0)>>>0>0)hc(j,z);g=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;f=z+64|0;c[f>>2]=0;c[f+4>>2]=0;if(!((g|0)==3082|(a[j+81>>0]|0)!=0)){g=k;Ra=A;return g|0}og(j);g=k;Ra=A;return g|0}while(0);do if(!y){j=c[z>>2]|0;y=z+136|0;d=c[y+4>>2]|0;if((d|0)>0|(d|0)==0&(c[y>>2]|0)>>>0>0)hc(j,z);k=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;z=z+64|0;c[z>>2]=0;c[z+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);g=7;Ra=A;return g|0}else{j=c[j+68>>2]&k;if(!j)break;Ra=A;return j|0}}while(0);l=x;if(Vc(l,1)|0){Gc(l)|0;if(!x){g=0;Ra=A;return g|0}}else{j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){z=j;c[z>>2]=f;c[z+4>>2]=g;b[k>>1]=4}else Pg(j,f,g);Gc(l)|0}j=c[l>>2]|0;g=l+136|0;f=c[g+4>>2]|0;if((f|0)>0|(f|0)==0&(c[g>>2]|0)>>>0>0)hc(j,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;g=l+64|0;c[g>>2]=0;c[g+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);g=7;Ra=A;return g|0}else{g=c[j+68>>2]&k;Ra=A;return g|0}return 0}function Hr(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;j=o;k=o+8|0;l=d+92|0;i=c[l>>2]|0;c[k>>2]=i;if(!i){i=c[d+20>>2]|0;c[j>>2]=c[d+16>>2];c[j+4>>2]=i;i=Bb(51598,j)|0;if(!i){n=7;Ra=o;return n|0}j=qd(c[d+12>>2]|0,i,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[k>>2]|0;c[l>>2]=i;if(j){n=j;Ra=o;return n|0}}k=i;do if(!(Vc(k,1)|0)){j=c[k+100>>2]|0;d=j+8|0;if(!(b[d>>1]&9216)){l=j;c[l>>2]=e;c[l+4>>2]=f;b[d>>1]=4;break}else{Pg(j,e,f);break}}while(0);if((g|0)==0|(Vc(k,2)|0)!=0){Gc(k)|0;if(!i)i=0;else n=19}else{i=yc((c[k+100>>2]|0)+40|0,g,h,0,0)|0;if(i|0?(m=c[k>>2]|0,c[m+64>>2]=i,Ne(m,i),m=c[k>>2]|0,(i|0)==3082|(a[m+81>>0]|0)!=0):0)og(m);Gc(k)|0;n=19}do if((n|0)==19){i=c[k>>2]|0;n=k+136|0;m=c[n+4>>2]|0;if((m|0)>0|(m|0)==0&(c[n>>2]|0)>>>0>0)hc(i,k);j=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;n=k+64|0;c[n>>2]=0;c[n+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}while(0);Vc(k,2)|0;n=i;Ra=o;return n|0}function Ir(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;p=x+4|0;q=x;w=c[d>>2]|0;o=(w|0)!=0;a:do if(o){t=w+32|0;j=c[t>>2]|0;u=w+16|0;n=c[u>>2]|0;v=w+20|0;h=c[v>>2]|0;b:do if((h|0)>0){g=0;while(1){if((a[n+g>>0]|0)!=(a[e+g>>0]|0)){s=g;break b}g=g+1|0;if((g|0)>=(h|0)){s=g;break}}}else s=0;while(0);k=((s|0)<0)<<31>>31;m=0;g=s;h=k;do{m=m+1|0;g=bw(g|0,h|0,7)|0;h=L()|0}while(!((g|0)==0&(h|0)==0));r=f-s|0;i=((r|0)<0)<<31>>31;g=0;h=r;l=i;do{g=g+1|0;h=bw(h|0,l|0,7)|0;l=L()|0}while(!((h|0)==0&(l|0)==0));h=r+j+m+g|0;g=c[b+228>>2]|0;do if((h|0)>(g|0)){if(n|0)break a;d=nb(h)|0;c[w+36>>2]=d;if(!d){f=7;Ra=x;return f|0}else{g=c[u>>2]|0;break}}else g=n;while(0);b=w+36|0;if(g){m=(c[b>>2]|0)+j|0;l=m;n=s;while(1){g=n&255;h=l+1|0;a[l>>0]=g|-128;n=bw(n|0,k|0,7)|0;k=L()|0;if((n|0)==0&(k|0)==0)break;else l=h}a[l>>0]=g&127;j=j-m+h|0}l=(c[b>>2]|0)+j|0;k=l;m=r;while(1){g=m&255;h=k+1|0;a[k>>0]=g|-128;m=bw(m|0,i|0,7)|0;i=L()|0;if((m|0)==0&(i|0)==0)break;else k=h}a[k>>0]=g&127;j=h-l+j|0;ew((c[b>>2]|0)+j|0,e+s|0,r|0)|0;c[t>>2]=j+r;j=w+12|0;c[j>>2]=(c[j>>2]|0)+1;j=w+24|0;i=w+28|0;g=c[i>>2]|0;do if((c[j>>2]|0)<(f|0)){h=f<<1;if(mb()|0){f=7;Ra=x;return f|0}g=sb(g,(h|0)>0?h:0,0)|0;if(!g){f=7;Ra=x;return f|0}else{c[j>>2]=h;c[i>>2]=g;break}}while(0);c[u>>2]=g;ew(g|0,e|0,f|0)|0;c[v>>2]=f;f=0;Ra=x;return f|0}else g=c[b+228>>2]|0;while(0);j=nb(g+40|0)|0;c[p>>2]=j;g=j;if(!j){f=7;Ra=x;return f|0};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;c[j+32>>2]=11;c[j+36>>2]=j+40;if(o){c[q>>2]=c[w>>2];h=Ir(b,q,e,f)|0;i=c[q>>2]|0;if(!(c[w>>2]|0))c[w>>2]=i;c[w+4>>2]=g;c[j+8>>2]=c[w+8>>2];c[j>>2]=i;f=w+28|0;c[j+28>>2]=c[f>>2];c[j+24>>2]=c[w+24>>2];c[f>>2]=0}else{c[j+8>>2]=j;h=Ir(b,p,e,f)|0;g=c[p>>2]|0}c[d>>2]=g;f=h;Ra=x;return f|0}function Jr(d,e,f,g,h,i,j,k,l,m,n,o,p,q){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;v=y+8|0;s=y;t=y+24|0;u=d+100|0;r=c[u>>2]|0;c[t>>2]=r;if(!r){r=c[d+20>>2]|0;c[s>>2]=c[d+16>>2];c[s+4>>2]=r;r=Bb(51725,s)|0;if(!r){x=7;Ra=y;return x|0}s=qd(c[d+12>>2]|0,r,-1,133,0,t,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](r);else{d=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r)}r=c[t>>2]|0;c[u>>2]=r;if(!s)t=r;else{x=s;Ra=y;return x|0}}else t=r;u=t;do if(!(Vc(u,1)|0)){r=c[u+100>>2]|0;s=r+8|0;if(!(b[s>>1]&9216)){d=r;c[d>>2]=e;c[d+4>>2]=f;b[s>>1]=4;break}else{Pg(r,e,f);break}}while(0);r=((g|0)<0)<<31>>31;do if(!(Vc(u,2)|0)){d=c[u+100>>2]|0;s=d+40|0;d=d+48|0;if(!(b[d>>1]&9216)){f=s;c[f>>2]=g;c[f+4>>2]=r;b[d>>1]=4;break}else{Pg(s,g,r);break}}while(0);do if(!(Vc(u,3)|0)){s=c[u+100>>2]|0;r=s+80|0;s=s+88|0;if(!(b[s>>1]&9216)){g=r;c[g>>2]=h;c[g+4>>2]=i;b[s>>1]=4;break}else{Pg(r,h,i);break}}while(0);do if(!(Vc(u,4)|0)){s=c[u+100>>2]|0;r=s+120|0;s=s+128|0;if(!(b[s>>1]&9216)){i=r;c[i>>2]=j;c[i+4>>2]=k;b[s>>1]=4;break}else{Pg(r,j,k);break}}while(0);do if((n|0)==0&(o|0)==0){if(!(Vc(u,5)|0)){s=c[u+100>>2]|0;r=s+160|0;s=s+168|0;if(!(b[s>>1]&9216)){v=r;c[v>>2]=l;c[v+4>>2]=m;b[s>>1]=4;break}else{Pg(r,l,m);break}}}else{r=v;c[r>>2]=l;c[r+4>>2]=m;r=v+8|0;c[r>>2]=n;c[r+4>>2]=o;r=Bb(54991,v)|0;if(!r){x=7;Ra=y;return x|0}else{Tc(u,5,r,-1,90,1)|0;break}}while(0);if((p|0)==0|(Vc(u,6)|0)!=0){Gc(u)|0;if(!t)r=0;else x=38}else{r=yc((c[u+100>>2]|0)+200|0,p,q,0,0)|0;if(r|0?(w=c[u>>2]|0,c[w+64>>2]=r,Ne(w,r),w=c[u>>2]|0,(r|0)==3082|(a[w+81>>0]|0)!=0):0)og(w);Gc(u)|0;x=38}do if((x|0)==38){r=c[u>>2]|0;x=u+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(r,u);s=kc(u)|0;c[u+20>>2]=770837923;c[u+36>>2]=-1;c[u+40>>2]=0;a[u+146>>0]=2;c[u+44>>2]=0;c[u+32>>2]=1;a[u+147>>0]=-1;c[u+48>>2]=0;x=u+64|0;c[x>>2]=0;c[x+4>>2]=0;if((s|0)==3082|(a[r+81>>0]|0)!=0){og(r);r=7;break}else{r=c[r+68>>2]&s;break}}while(0);Vc(u,6)|0;x=r;Ra=y;return x|0}function Kr(a){a=a|0;var b=0,d=0,e=0;if(!a)return;a=c[a+8>>2]|0;Kr(c[a>>2]|0);if(!a)return;do{d=a;a=c[a+4>>2]|0;b=c[d+36>>2]|0;do if(!((b|0)==(d+40|0)|(b|0)==0))if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[d+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((a|0)!=0);return}function Lr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=Ra;Ra=Ra+48|0;j=l+32|0;i=l+24|0;h=l+16|0;g=l+8|0;e=l;k=l+40|0;Fr(b);do if(d|0){f=b+64|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[e>>2]=c[b+16>>2];c[e+4>>2]=d;d=Bb(51372,e)|0;if(!d){k=7;Ra=l;return k|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(d|0){d=c[f>>2]|0;m=f+136|0;e=c[m+4>>2]|0;if((e|0)>0|(e|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);m=7;Ra=l;return m|0}else{d=c[d+68>>2]&e;if(!d)break;Ra=l;return d|0}}}while(0);f=b+68|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[g>>2]=c[b+16>>2];c[g+4>>2]=d;d=Bb(51400,g)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;do if(d|0){e=c[f>>2]|0;m=f+136|0;g=c[m+4>>2]|0;if((g|0)>0|(g|0)==0&(c[m>>2]|0)>>>0>0)hc(e,f);d=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((d|0)==3082|(a[e+81>>0]|0)!=0){og(e);m=7;Ra=l;return m|0}else{d=c[e+68>>2]&d;if(!d)break;Ra=l;return d|0}}while(0);f=b+72|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[h>>2]=c[b+16>>2];c[h+4>>2]=d;d=Bb(51429,h)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;do if(!d)d=0;else{d=c[f>>2]|0;m=f+136|0;h=c[m+4>>2]|0;if((h|0)>0|(h|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if(!((e|0)==3082|(a[d+81>>0]|0)!=0)){d=c[d+68>>2]&e;break}og(d);m=7;Ra=l;return m|0}while(0);do if((d|0)==0&(a[b+234>>0]|0)!=0){f=b+76|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[i>>2]=c[b+16>>2];c[i+4>>2]=d;d=Bb(51456,i)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(!d)d=0;else{d=c[f>>2]|0;m=f+136|0;i=c[m+4>>2]|0;if((i|0)>0|(i|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if(!((e|0)==3082|(a[d+81>>0]|0)!=0)){d=c[d+68>>2]&e;break}og(d);m=7;Ra=l;return m|0}}while(0);if(!((d|0)==0&(a[b+233>>0]|0)!=0)){m=d;Ra=l;return m|0}f=b+80|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[j>>2]=c[b+16>>2];c[j+4>>2]=d;d=Bb(51484,j)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(!d){m=0;Ra=l;return m|0}d=c[f>>2]|0;m=f+136|0;k=c[m+4>>2]|0;if((k|0)>0|(k|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);m=7;Ra=l;return m|0}else{m=c[d+68>>2]&e;Ra=l;return m|0}return 0}function Mr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+32|0;i=s+20|0;n=s+16|0;o=s+12|0;p=s+8|0;q=s+4|0;m=s;c[n>>2]=0;c[o>>2]=0;c[p>>2]=0;c[m>>2]=0;g=c[a+36>>2]|0;r=c[g>>2]|0;if(!d){c[f>>2]=0;f=0;Ra=s;return f|0}c[i>>2]=0;d=Za[c[r+12>>2]&127](g,d,-1,i)|0;do if(!d){c[c[i>>2]>>2]=g;if((c[r>>2]|0)>0?(h=Xa[c[r+24>>2]&255](c[i>>2]|0,b)|0,h|0):0){Wa[c[r+16>>2]&127](c[i>>2]|0)|0;c[i>>2]=0;d=h;break}l=c[i>>2]|0;i=c[r+20>>2]|0;j=a+256|0;k=a+252|0;d=$a[i&127](l,q,m,n,o,p)|0;a:do if(!d){b=0;do{h=c[p>>2]|0;b=(h|0)<(b|0)?b:h+1|0;d=c[q>>2]|0;g=c[m>>2]|0;if((h|0)<0|(d|0)==0|(g|0)<1){d=1;break a}d=Nr(a,e,h,(c[j>>2]|0)+4|0,d,g)|0;if(d|0)break a;h=1;while(1){if((h|0)>=(c[k>>2]|0))break;d=c[j>>2]|0;g=c[d+(h*24|0)>>2]|0;if((c[m>>2]|0)<(g|0))d=0;else d=Nr(a,e,c[p>>2]|0,d+(h*24|0)+4|0,c[q>>2]|0,g)|0;if(!d)h=h+1|0;else break a}d=$a[i&127](l,q,m,n,o,p)|0}while((d|0)==0)}else b=0;while(0);Wa[c[r+16>>2]&127](l)|0;c[f>>2]=(c[f>>2]|0)+b;f=(d|0)==101?0:d;Ra=s;return f|0}while(0);f=d;Ra=s;return f|0}function Nr(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r+4|0;q=r;c[q>>2]=0;a:do if((((f|0)!=0?(m=f+16|0,(c[m>>2]|0)!=0):0)?(k=Xa[(a[f>>0]<<24>>24==1?154:155)&255](g,h)|0,k=(c[f+12>>2]|0)+-1&k,l=c[m>>2]|0,(l|0)!=0):0)?(j=c[l+(k<<3)>>2]|0,n=(a[f>>0]|0)==1?79:80,i=c[l+(k<<3)+4>>2]|0,(j|0)!=0&(i|0)!=0):0){while(1){j=j+-1|0;if(!(Za[n&127](c[i+12>>2]|0,c[i+16>>2]|0,g,h)|0))break;i=c[i>>2]|0;if(!((j|0)!=0&(i|0)!=0)){o=8;break a}}i=c[i+8>>2]|0;c[p>>2]=i;if(!i)i=p;else{n=b+264|0;c[n>>2]=-20-h-(c[i>>2]|0)+(c[n>>2]|0);i=p}}else o=8;while(0);if((o|0)==8){c[p>>2]=0;i=p}o=b+272|0;if(wr(p,c[o>>2]|0,c[o+4>>2]|0,d,((d|0)<0)<<31>>31,e,((e|0)<0)<<31>>31,q)|0?(o=c[p>>2]|0,(o|0)==(Ep(f,g,h,o)|0)):0){i=c[i>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{p=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[q>>2]=7;q=7;Ra=r;return q|0}i=c[q>>2]|0;if(i|0){q=i;Ra=r;return q|0}q=b+264|0;c[q>>2]=h+20+(c[c[p>>2]>>2]|0)+(c[q>>2]|0);q=0;Ra=r;return q|0}
- function Ll(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;ra=Ra;Ra=Ra+160|0;ba=ra+8|0;A=ra;ma=ra+64|0;na=ra+12|0;oa=h+80|0;da=c[f>>2]|0;y=j+64|0;_=c[y>>2]|0;v=h+4|0;ea=c[v>>2]|0;p=a[j+44>>0]|0;fa=p&255;n=ea+8+(fa*72|0)|0;ia=c[ea+8+(fa*72|0)+40>>2]|0;o=c[h+492>>2]|0;a:do if((o|0)>0){m=0;while(1){if((c[h+496+(m<<2)>>2]|0)==(ia|0))break;m=m+1|0;if((m|0)>=(o|0)){m=0;o=0;break a}}m=cw(1,0,m|0)|0;o=L()|0}else{m=0;o=0}while(0);qa=j+72|0;w=qa;c[w>>2]=~m&k;c[w+4>>2]=~o&l;w=h+64|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,i|0)|0;L()|0;aa=w&1;q=f+56|0;pa=c[q>>2]|0;z=pa+-1|0;Q=j+16|0;c[Q>>2]=z;ca=j+12|0;c[ca>>2]=z;pa=pa+-2|0;c[q>>2]=pa;D=j+24|0;c[D>>2]=pa;do if(p<<24>>24?a[ea+8+(fa*72|0)+36>>0]&8:0){o=f+44|0;m=(c[o>>2]|0)+1|0;c[o>>2]=m;c[j>>2]=m;o=g+108|0;p=c[o>>2]|0;if((c[g+112>>2]|0)>(p|0)){c[o>>2]=p+1;$=c[g+104>>2]|0;a[$+(p*20|0)>>0]=70;b[$+(p*20|0)+2>>1]=0;c[$+(p*20|0)+4>>2]=0;c[$+(p*20|0)+8>>2]=m;c[$+(p*20|0)+12>>2]=0;c[$+(p*20|0)+16>>2]=0;a[$+(p*20|0)+1>>0]=0;break}else{Di(g,70,0,m,0)|0;break}}while(0);b:do if((i|0)>0){m=i;while(1){if(c[h+752+(m*80|0)>>2]|0)break b;o=m+-1|0;if((m|0)>1)m=o;else{m=o;break}}}else m=i;while(0);p=c[h+752+(m*80|0)+12>>2]|0;m=a[ea+8+(fa*72|0)+37>>0]|0;c:do if(!(m&16)){$=_+36|0;o=c[$>>2]|0;if(o&1024|0){r=b[_+40>>1]|0;t=r&65535;m=t+2|0;n=f+32|0;o=c[n>>2]|0;p=f+28|0;q=c[p>>2]|0;if((q|0)<(m|0)){ba=f+44|0;u=c[ba>>2]|0;c[ba>>2]=u+m;u=u+1|0}else{c[n>>2]=m+o;c[p>>2]=q-m;u=o}m=c[ca>>2]|0;i=r<<16>>16==0;if(i)p=m;else{q=u+2|0;r=_+48|0;p=0;do{n=q+p|0;o=c[(c[r>>2]|0)+(p<<2)>>2]|0;do if(o)if(!(b[o+12>>1]&1)){km(f,c[(c[o>>2]|0)+16>>2]|0,n,1);break}else{jm(f,o,j,p,aa,n)|0;m=c[Q>>2]|0;break}while(0);p=p+1|0}while((p|0)!=(t|0));p=m}m=c[_+24>>2]|0;o=g+108|0;n=c[o>>2]|0;C=g+112|0;if((c[C>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=70;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=m;c[ca+(n*20|0)+8>>2]=u;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,70,m,u,0)|0;m=u+1|0;n=c[o>>2]|0;if((c[C>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=70;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=t;c[ca+(n*20|0)+8>>2]=m;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,70,t,m,0)|0;q=c[_+32>>2]|0;r=_+28|0;s=(a[r>>0]|0)==0?-1:-7;m=c[o>>2]|0;if((c[C>>2]|0)>(m|0)){c[o>>2]=m+1;ca=c[g+104>>2]|0;a[ca+(m*20|0)>>0]=9;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=ia;c[ca+(m*20|0)+8>>2]=p;c[ca+(m*20|0)+12>>2]=u;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(g,9,ia,p,u)|0;n=c[g>>2]|0;do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[o>>2]|0)+-1|0;n=c[g+104>>2]|0;p=n+(m*20|0)+1|0;if(a[p>>0]|0){Ei(g,n+(m*20|0)|0,q,s);break}if(q|0){c[n+(m*20|0)+16>>2]=q;a[p>>0]=s}}else kg(n,s,q);while(0);a[r>>0]=0;c[j+48>>2]=ia;a[j+45>>0]=(a[h+49>>0]|0)==0?60:-86;c[j+52>>2]=c[o>>2];if(i){E=0;break}B=_+48|0;w=_+30|0;x=da+81|0;y=j+60|0;z=ma+4|0;A=g+104|0;v=u+2|0;m=c[j+56>>2]|0;while(1){u=t;t=t+-1|0;i=c[(c[B>>2]|0)+(t<<2)>>2]|0;if((u|0)<17?(1<<t&e[w>>1]|0)!=0:0)lm(j,i);else if(b[i+12>>1]&1){do if(!(a[x>>0]|0)){m=m+-1|0;n=c[(c[y>>2]|0)+(m*20|0)+4>>2]|0;if((n|0)<0)n=(c[o>>2]|0)+-1|0;if(!(a[(c[g>>2]|0)+81>>0]|0))n=(c[A>>2]|0)+(n*20|0)|0;else n=59308;q=a[n>>0]|0;r=c[n+4>>2]|0;s=c[n+8>>2]|0;n=c[n+12>>2]|0;p=c[o>>2]|0;if((c[C>>2]|0)>(p|0)){c[o>>2]=p+1;ca=c[A>>2]|0;a[ca+(p*20|0)>>0]=q;b[ca+(p*20|0)+2>>1]=0;c[ca+(p*20|0)+4>>2]=r;c[ca+(p*20|0)+8>>2]=s;c[ca+(p*20|0)+12>>2]=n;c[ca+(p*20|0)+16>>2]=0;a[ca+(p*20|0)+1>>0]=0;break}else{Di(g,q&255,r,s,n)|0;break}}while(0);p=ej(f,53,0,0)|0;if(p){q=p+12|0;c[q>>2]=c[(c[i>>2]|0)+12>>2];c[ma>>2]=0;c[z>>2]=0;n=oj(da,168,ma,0)|0;c[p+16>>2]=n;if(n|0){c[n+28>>2]=v+t;Tj(f,p,c[D>>2]|0,0)}c[q>>2]=0;ni(da,p)}}if((u|0)<=1){E=0;break c}}}if(!((o&256|0)==0|(o&5|0)==0)){q=c[c[_+48>>2]>>2]|0;p=f+44|0;m=(c[p>>2]|0)+1|0;c[p>>2]=m;p=jm(f,q,j,0,aa,m)|0;if(!((m|0)==0|(p|0)==(m|0))?(r=f+19|0,s=a[r>>0]|0,(s&255)<8):0){a[r>>0]=s+1<<24>>24;c[f+148+((s&255)<<2)>>2]=m}m=c[Q>>2]|0;o=g+108|0;n=c[o>>2]|0;if((c[g+112>>2]|0)>(n|0)){c[o>>2]=n+1;da=c[g+104>>2]|0;a[da+(n*20|0)>>0]=30;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=ia;c[da+(n*20|0)+8>>2]=m;c[da+(n*20|0)+12>>2]=p;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(g,30,ia,m,p)|0;a[j+45>>0]=-86;da=q+40|0;ca=qa;if(!((c[ca>>2]&c[da>>2]|0)==0?(c[ca+4>>2]&c[da+4>>2]|0)==0:0)){E=0;break}E=q+10|0;b[E>>1]=b[E>>1]|4;E=0;break}if((o&258|0)==258){if(!(o&32)){n=0;m=0}else{n=c[c[_+48>>2]>>2]|0;m=1}if(!(o&16))m=0;else m=c[(c[_+48>>2]|0)+(m<<2)>>2]|0;da=(aa|0)==0;i=da?m:n;n=da?n:m;do if(!n){m=aa<<2^36;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;da=c[g+104>>2]|0;a[da+(o*20|0)>>0]=m;b[da+(o*20|0)+2>>1]=0;c[da+(o*20|0)+4>>2]=ia;c[da+(o*20|0)+8>>2]=p;c[da+(o*20|0)+12>>2]=0;c[da+(o*20|0)+16>>2]=0;a[da+(o*20|0)+1>>0]=0;break}else{Di(g,m,ia,p,0)|0;break}}else{q=c[n>>2]|0;o=c[q+16>>2]|0;m=a[o>>0]|0;if(m<<24>>24==-88)m=a[o+38>>0]|0;switch(m<<24>>24){case -87:{m=o+20|0;ga=90;break}case -125:{m=c[o+20>>2]|0;ga=90;break}default:ga=95}if((ga|0)==90)if((c[c[m>>2]>>2]|0)<2)ga=95;else{m=f+19|0;n=a[m>>0]|0;if(!(n<<24>>24)){da=f+44|0;m=(c[da>>2]|0)+1|0;c[da>>2]=m}else{da=n+-1<<24>>24;a[m>>0]=da;m=c[f+148+((da&255)<<2)>>2]|0}c[ma>>2]=m;km(f,o,m,1);p=m;m=((a[q>>0]|0)+1&2|1)&255}if((ga|0)==95){p=Lj(f,o,ma)|0;lm(j,n);m=(d[q>>0]|0)+-54|0}m=a[44005+m>>0]|0;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;da=c[g+104>>2]|0;a[da+(o*20|0)>>0]=m;b[da+(o*20|0)+2>>1]=0;c[da+(o*20|0)+4>>2]=ia;c[da+(o*20|0)+8>>2]=z;c[da+(o*20|0)+12>>2]=p;c[da+(o*20|0)+16>>2]=0;a[da+(o*20|0)+1>>0]=0}else Di(g,m&255,ia,z,p)|0;m=c[ma>>2]|0;if(m|0?(t=f+19|0,u=a[t>>0]|0,(u&255)<8):0){a[t>>0]=u+1<<24>>24;c[f+148+((u&255)<<2)>>2]=m}}while(0);do if(!i){r=0;q=170}else{o=c[i>>2]|0;s=f+44|0;r=(c[s>>2]|0)+1|0;c[s>>2]=r;s=o+16|0;km(f,c[s>>2]|0,r,1);s=c[s>>2]|0;m=a[s>>0]|0;p=m<<24>>24==-88;if(p)n=a[s+38>>0]|0;else n=m;switch(n<<24>>24){case -87:{n=s+20|0;ga=112;break}case -125:{n=c[s+20>>2]|0;ga=112;break}default:ga=113}if((ga|0)==112)if((c[c[n>>2]>>2]|0)<2)ga=113;else ga=115;d:do if((ga|0)==113){switch(a[o>>0]|0){case 54:case 56:break;default:{ga=115;break d}}q=(aa<<1^2)+55|0}while(0);if((ga|0)==115)q=(aa<<1)+54|0;if(p)m=a[s+38>>0]|0;switch(m<<24>>24){case -87:{x=s+20|0;ga=121;break}case -125:{x=c[s+20>>2]|0;ga=121;break}default:{}}if((ga|0)==121?(c[c[x>>2]>>2]|0)>=2:0)break;lm(j,i)}while(0);o=g+108|0;m=c[o>>2]|0;a[j+45>>0]=5-aa;c[j+48>>2]=ia;c[j+52>>2]=m;if((q|0)==170){E=0;break}p=f+44|0;n=(c[p>>2]|0)+1|0;c[p>>2]=n;p=g+112|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=-128;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=ia;c[da+(m*20|0)+8>>2]=n;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,128,ia,n,0)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=q;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=r;c[da+(m*20|0)+8>>2]=z;c[da+(m*20|0)+12>>2]=n;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,q,r,z,n)|0;m=c[o>>2]|0;if((m|0)<=0){E=0;break}b[(c[g+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=83;E=0;break}if(!(o&512)){if(!(o&8192)){if(m&32){a[j+45>>0]=-86;E=0;o=g+108|0;break}a[j+45>>0]=a[44045+aa>>0]|0;c[j+48>>2]=ia;m=a[44047+aa>>0]|0;o=g+108|0;n=c[o>>2]|0;if((c[g+112>>2]|0)>(n|0)){da=n+1|0;c[o>>2]=da;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=m;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=ia;c[ca+(n*20|0)+8>>2]=p;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0;m=da}else m=(Di(g,m&255,ia,p,0)|0)+1|0;c[j+52>>2]=m;a[j+47>>0]=1;E=0;break}s=f+40|0;Z=c[s>>2]|0;c[s>>2]=Z+1;W=f+44|0;X=(c[W>>2]|0)+1|0;c[W>>2]=X;$=c[q>>2]|0;Y=$+-1|0;c[q>>2]=Y;V=c[ea+8+(fa*72|0)+16>>2]|0;aa=c[c[_+48>>2]>>2]|0;u=c[aa+28>>2]|0;a[j+45>>0]=66;c[j+48>>2]=X;_=h+46|0;m=a[_>>0]|0;if((m&255)>1){r=(m&255)-i|0;q=(r*72|0)+8|0;e:do if(!da){U=Sv(q|0,0,-1,-1)|0;T=L()|0;if(T>>>0>0|(T|0)==0&U>>>0>2147483390){qa=l;f=k;K(qa|0);Ra=ra;return f|0}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](q)|0;ga=627;break}p=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;o=59064;m=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&m>>>0>0){U=c[14978]|0;T=Tv(m|0,o|0,p|0,((p|0)<0)<<31>>31|0)|0;S=L()|0;c[14768]=((S|0)<0|(S|0)==0&T>>>0<=U>>>0)&1}m=Wa[c[29340>>2]&127](p)|0;if(!m){qa=l;f=k;K(qa|0);Ra=ra;return f|0}o=Wa[c[29352>>2]&127](m)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[da+272>>2]|0){if(a[da+81>>0]|0){qa=l;f=k;K(qa|0);Ra=ra;return f|0}}else{do if(!(0<0|(0==0?(e[da+276>>1]|0)>>>0<q>>>0:0))){o=da+300|0;m=c[o>>2]|0;if(m|0){c[o>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=627;break e}o=da+296|0;m=c[o>>2]|0;if(!m){m=da+292|0;break}else{c[o>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=627;break e}}else m=da+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(da,q,0)|0;ga=627}while(0);if((ga|0)==627)if(!m){qa=l;f=k;K(qa|0);Ra=ra;return f|0}q=r&255;c[m+4>>2]=q;c[m>>2]=q;q=m+8|0;E=q;D=E+72|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));p=c[v>>2]|0;if((r|0)>1){o=1;do{E=q+(o*72|0)|0;n=p+8+((d[j+(o*80|0)+44>>0]|0)*72|0)|0;D=E+72|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));o=o+1|0}while((o|0)!=(r|0));T=m;U=m}else{T=m;U=m}}else{U=c[v>>2]|0;T=U}S=h+44|0;if(!(b[S>>1]&16)){f:do if(!(c[V+36>>2]&32)){m=(c[W>>2]|0)+1|0;c[W>>2]=m;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;R=c[g+104>>2]|0;a[R+(o*20|0)>>0]=73;b[R+(o*20|0)+2>>1]=0;c[R+(o*20|0)+4>>2]=0;c[R+(o*20|0)+8>>2]=m;c[R+(o*20|0)+12>>2]=0;c[R+(o*20|0)+16>>2]=0;a[R+(o*20|0)+1>>0]=0;break}else{Di(g,73,0,m,0)|0;break}}else{m=c[V+8>>2]|0;g:do if(!m)m=0;else while(1){R=m+55|0;if(((d[R>>0]|d[R+1>>0]<<8)&3)==2)break g;m=c[m+20>>2]|0;if(!m){m=0;break}}while(0);q=c[s>>2]|0;c[s>>2]=q+1;n=e[m+50>>1]|0;o=g+108|0;p=c[o>>2]|0;if((c[g+112>>2]|0)>(p|0)){c[o>>2]=p+1;R=c[g+104>>2]|0;a[R+(p*20|0)>>0]=113;b[R+(p*20|0)+2>>1]=0;c[R+(p*20|0)+4>>2]=q;c[R+(p*20|0)+8>>2]=n;c[R+(p*20|0)+12>>2]=0;c[R+(p*20|0)+16>>2]=0;a[R+(p*20|0)+1>>0]=0}else Di(g,113,q,n,0)|0;n=c[f+8>>2]|0;o=Ij(f,m)|0;if(o){m=c[n>>2]|0;if(!(a[m+81>>0]|0)){R=c[n+104>>2]|0;m=(c[n+108>>2]|0)+-1|0;a[R+(m*20|0)+1>>0]=-9;c[R+(m*20|0)+16>>2]=o;m=q;break}if(c[m+480>>2]|0){m=q;break}R=(c[o>>2]|0)+-1|0;c[o>>2]=R;if(R|0){m=q;break}m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);m=q;break f}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;m=m+300|0;c[o>>2]=c[m>>2];c[m>>2]=o;m=q;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);m=q;break}else{m=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);m=q;break}}else m=q}while(0);P=(c[W>>2]|0)+1|0;c[W>>2]=P}else{P=0;m=0}o=g+108|0;n=c[o>>2]|0;R=g+112|0;if((c[R>>2]|0)>(n|0)){c[o>>2]=n+1;Q=c[g+104>>2]|0;a[Q+(n*20|0)>>0]=70;b[Q+(n*20|0)+2>>1]=0;c[Q+(n*20|0)+4>>2]=0;c[Q+(n*20|0)+8>>2]=X;c[Q+(n*20|0)+12>>2]=0;c[Q+(n*20|0)+16>>2]=0;a[Q+(n*20|0)+1>>0]=0;Q=n}else Q=Di(g,70,0,X,0)|0;i=h+92|0;n=c[i>>2]|0;if((n|0)>1){t=h+100|0;s=0;p=0;do{q=c[t>>2]|0;O=q+(s*48|0)|0;r=c[O>>2]|0;do if((O|0)!=(aa|0)?(b[q+(s*48|0)+10>>1]&6)==0:0){if(!(b[q+(s*48|0)+12>>1]&8191))break;if(!r)n=0;else n=dk(da,r,0,0)|0;p=Xk(da,p,n)|0;n=c[i>>2]|0}while(0);s=s+1|0}while((s|0)<(n|0));if(p)O=ej(f,65580,0,p)|0;else O=0}else O=0;N=b[S>>1]&1024|32;nk(f,1,44021,A);M=u+12|0;if((c[M>>2]|0)>0){A=u+20|0;B=(O|0)==0;C=O+12|0;D=V+36|0;E=V+8|0;F=g+104|0;G=f+19|0;H=f+32|0;I=f+28|0;p=f+212|0;J=f+8|0;n=0;r=0;q=0;do{s=c[A>>2]|0;do if((c[s+(n*48|0)+20>>2]|0)==(ia|0))ga=679;else{if(b[s+(n*48|0)+12>>1]&1024){ga=679;break}n=n+1|0}while(0);do if((ga|0)==679){ga=0;s=c[s+(n*48|0)>>2]|0;if(!B){c[C>>2]=s;s=O}z=n+1|0;c[ba>>2]=z;nk(f,1,44036,ba);y=ql(f,T,s,0,0,N,Z)|0;if(!y){n=z;break}Kl(f,T,y+752|0,0);do if(!(b[S>>1]&16)){v=(n|0)==((c[M>>2]|0)+-1|0)?-1:n;if(!(c[D>>2]&32)){Vj(g,V,ia,-1,P);s=c[o>>2]|0;if((c[R>>2]|0)>(s|0)){c[o>>2]=s+1;x=c[F>>2]|0;a[x+(s*20|0)>>0]=42;b[x+(s*20|0)+2>>1]=0;c[x+(s*20|0)+4>>2]=m;c[x+(s*20|0)+8>>2]=0;c[x+(s*20|0)+12>>2]=P;c[x+(s*20|0)+16>>2]=0;a[x+(s*20|0)+1>>0]=0}else s=Di(g,42,m,0,P)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;x=c[F>>2]|0;a[x+(s*20|0)+1>>0]=-3;c[x+(s*20|0)+16>>2]=v;break}s=c[E>>2]|0;h:do if(!s)s=0;else while(1){x=s+55|0;if(((d[x>>0]|d[x+1>>0]<<8)&3)==2)break h;s=c[s+20>>2]|0;if(!s){s=0;break}}while(0);u=b[s+50>>1]|0;w=u&65535;x=u<<16>>16==1;do if(x){i=a[G>>0]|0;if(!(i<<24>>24)){i=(c[W>>2]|0)+1|0;c[W>>2]=i;ga=701;break}else{i=i+-1<<24>>24;a[G>>0]=i;i=c[f+148+((i&255)<<2)>>2]|0;ga=701;break}}else{i=c[H>>2]|0;t=c[I>>2]|0;if((t|0)<(w|0)){i=c[W>>2]|0;c[W>>2]=i+w;i=i+1|0}else{c[H>>2]=i+w;c[I>>2]=t-w}if(!(u<<16>>16))u=i;else ga=701}while(0);if((ga|0)==701){ga=0;t=s+4|0;s=0;do{Vj(g,V,ia,b[(c[t>>2]|0)+(s<<1)>>1]|0,s+i|0);s=s+1|0}while((s|0)!=(w|0));u=i}t=(v|0)!=0;if(t){s=c[o>>2]|0;if((c[R>>2]|0)>(s|0)){c[o>>2]=s+1;i=c[F>>2]|0;a[i+(s*20|0)>>0]=29;b[i+(s*20|0)+2>>1]=0;c[i+(s*20|0)+4>>2]=m;c[i+(s*20|0)+8>>2]=0;c[i+(s*20|0)+12>>2]=u;c[i+(s*20|0)+16>>2]=0;a[i+(s*20|0)+1>>0]=0}else s=Di(g,29,m,0,u)|0;if(!(a[(c[g>>2]|0)+81>>0]|0)){i=c[F>>2]|0;a[i+(s*20|0)+1>>0]=-3;c[i+(s*20|0)+16>>2]=w}if((v|0)>-1)ga=710}else{s=0;ga=710}do if((ga|0)==710){ga=0;i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;v=c[F>>2]|0;a[v+(i*20|0)>>0]=92;b[v+(i*20|0)+2>>1]=0;c[v+(i*20|0)+4>>2]=u;c[v+(i*20|0)+8>>2]=w;c[v+(i*20|0)+12>>2]=P;c[v+(i*20|0)+16>>2]=0;a[v+(i*20|0)+1>>0]=0}else Di(g,92,u,w,P)|0;i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;v=c[F>>2]|0;a[v+(i*20|0)>>0]=-124;b[v+(i*20|0)+2>>1]=0;c[v+(i*20|0)+4>>2]=m;c[v+(i*20|0)+8>>2]=P;c[v+(i*20|0)+12>>2]=u;c[v+(i*20|0)+16>>2]=0;a[v+(i*20|0)+1>>0]=0}else i=Di(g,132,m,P,u)|0;if(!(a[(c[g>>2]|0)+81>>0]|0)){v=c[F>>2]|0;a[v+(i*20|0)+1>>0]=-3;c[v+(i*20|0)+16>>2]=w}if(!t)break;i=c[o>>2]|0;if((i|0)<=0)break;b[(c[F>>2]|0)+((i+-1|0)*20|0)+2>>1]=16}while(0);if(!x){if((c[I>>2]|0)>=(w|0))break;c[I>>2]=w;c[H>>2]=u;break}if(!u)break;i=a[G>>0]|0;if((i&255)>=8)break;a[G>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=u}else s=0;while(0);i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;x=c[F>>2]|0;a[x+(i*20|0)>>0]=12;b[x+(i*20|0)+2>>1]=0;c[x+(i*20|0)+4>>2]=X;c[x+(i*20|0)+8>>2]=Y;c[x+(i*20|0)+12>>2]=0;c[x+(i*20|0)+16>>2]=0;a[x+(i*20|0)+1>>0]=0}else Di(g,12,X,Y,0)|0;if(s|0){i=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))s=(c[F>>2]|0)+(((s|0)<0?i+-1|0:s)*20|0)|0;else s=59308;c[s+8>>2]=i}r=(a[y+50>>0]|0)==0?r:1;s=c[y+816>>2]|0;do if(!(c[s+36>>2]&512))q=0;else{if(n|0?(c[s+32>>2]|0)!=(q|0):0){q=0;break}q=c[s+32>>2]|0;if(c[D>>2]&32|0?(x=q+55|0,((d[x>>0]|d[x+1>>0]<<8)&3)==2):0){q=0;break}}while(0);sl(y);n=c[p>>2]|0;if(!n)n=0;else{s=c[J>>2]|0;if((n|0)<0)n=(c[s+108>>2]|0)+-1|0;if(!(a[(c[s>>2]|0)+81>>0]|0))n=(c[s+104>>2]|0)+(n*20|0)|0;else n=59308;n=c[n+8>>2]|0}c[p>>2]=n;n=z}while(0)}while((n|0)<(c[M>>2]|0))}else{r=0;q=0;p=f+212|0}m=c[p>>2]|0;if(!m)m=0;else{n=c[f+8>>2]|0;if((m|0)<0)m=(c[n+108>>2]|0)+-1|0;if(!(a[(c[n>>2]|0)+81>>0]|0))m=(c[n+104>>2]|0)+(m*20|0)|0;else m=59308;m=c[m+8>>2]|0}c[p>>2]=m;c[j+56>>2]=q;if(q|0)c[j+8>>2]=Z;if(O|0){c[O+12>>2]=0;ni(da,O)}n=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((Q|0)<0?n+-1|0:Q)*20|0)|0;else m=59308;c[m+4>>2]=n;m=c[ca>>2]|0;if((c[R>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=11;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=0;c[ca+(n*20|0)+8>>2]=m;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,11,0,m,0)|0;n=c[g+12>>2]|0;m=0-$|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0)mk(n,g,m);else c[(c[n+64>>2]|0)+(m<<2)>>2]=c[o>>2];i:do if(!((U|0)==0|(d[_>>0]|0)<2)){do if(da|0){if(c[da+480>>2]|0){Xd(da,U);break i}m=U;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;da=da+300|0;c[U>>2]=c[da>>2];c[da>>2]=U;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](U);break}else{da=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);break}}while(0);if(r|0){E=0;break}lm(j,aa);E=0;break}M=b[_+24>>1]|0;t=b[_+26>>1]|0;u=b[_+28>>1]|0;Y=c[_+32>>2]|0;x=j+8|0;Z=c[x>>2]|0;X=h+44|0;if((b[X>>1]&1)!=0?(a[h+47>>0]|0)>0:0){i=(e[Y+50>>1]|0)>(M&65535);m=i&1;i=i&1}else{m=0;i=0}p=M&65535;n=t&65535;if(!(o&32)){v=0;n=p}else{v=c[(c[_+48>>2]|0)+(p<<2)>>2]|0;m=m>>>0>n>>>0?m:n;n=p+1|0}do if(o&16){s=c[(c[_+48>>2]|0)+(n<<2)>>2]|0;ba=u&65535;m=(m|0)>(ba|0)?m:ba;if(b[s+10>>1]&256){o=f+44|0;n=(c[o>>2]|0)+1|0;c[o>>2]=n;o=j+36|0;c[o>>2]=n;q=g+108|0;r=c[q>>2]|0;if((c[g+112>>2]|0)>(r|0)){c[q>>2]=r+1;ba=c[g+104>>2]|0;a[ba+(r*20|0)>>0]=70;b[ba+(r*20|0)+2>>1]=0;c[ba+(r*20|0)+4>>2]=1;c[ba+(r*20|0)+8>>2]=n;c[ba+(r*20|0)+12>>2]=0;c[ba+(r*20|0)+16>>2]=0;a[ba+(r*20|0)+1>>0]=0}else Di(g,70,1,n,0)|0;c[j+40>>2]=c[q>>2];ba=c[o>>2]<<1;c[o>>2]=ba;c[o>>2]=aa^(a[(c[Y+28>>2]|0)+p>>0]|0)==1|ba}if(!v){n=b[(c[Y+4>>2]|0)+(p<<1)>>1]|0;if(n<<16>>16>-1){if(a[(c[(c[Y+12>>2]|0)+4>>2]|0)+(n<<16>>16<<4)+12>>0]|0){o=i;break}}else if(n<<16>>16!=-2){o=i;break}o=1}else o=i}else{s=0;o=i}while(0);n=b[Y+50>>1]|0;if((M&65535)<(n&65535)?!(((w&1|0)!=0|0!=0)^(a[(c[Y+28>>2]|0)+p>>0]|0)==0):0)ga=152;else if(aa|0?n<<16>>16==M<<16>>16:0)ga=152;else{N=t;R=0;P=v;v=s;J=o}if((ga|0)==152){N=u;u=t&255;R=o;P=s;J=0}T=f+8|0;I=c[T>>2]|0;w=c[y>>2]|0;y=b[w+24>>1]|0;G=b[w+42>>1]|0;q=c[w+32>>2]|0;V=f+44|0;o=c[V>>2]|0;F=o+1|0;H=y&65535;z=m+H|0;c[V>>2]=o+z;o=c[f>>2]|0;q=gl(o,q)|0;j:do if(!q)U=0;else{r=(Eu(q)|0)+1|0;k:do if(!o){ba=Sv(r|0,0,-1,-1)|0;U=L()|0;if(U>>>0>0|(U|0)==0&ba>>>0>2147483390){U=0;break j}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](r)|0;ga=178;break}m=Wa[c[29356>>2]&127](r)|0;if((c[14985]|0)>>>0<r>>>0)c[14985]=r;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){ba=c[14978]|0;U=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&U>>>0<=ba>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){U=0;break j}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){U=0;break j}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<r>>>0:0))){n=o+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=o+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=178;break k}n=o+296|0;m=c[n>>2]|0;if(!m){m=o+292|0;break}else{c[n>>2]=c[m>>2];ga=o+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=178;break k}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(o,r,0)|0;ga=178}while(0);if((ga|0)==178)if(!m){U=0;break}ew(m|0,q|0,r|0)|0;U=m}while(0);l:do if(G<<16>>16){s=c[x>>2]|0;q=(aa|0)==0;m=aa<<2^36;i=I+108|0;n=c[i>>2]|0;t=I+112|0;if((c[t>>2]|0)>(n|0)){c[i>>2]=n+1;ba=c[I+104>>2]|0;a[ba+(n*20|0)>>0]=m;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=s;c[ba+(n*20|0)+8>>2]=0;c[ba+(n*20|0)+12>>2]=0;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0}else Di(I,m,s,0,0)|0;m=c[i>>2]|0;if((c[t>>2]|0)>(m|0)){c[i>>2]=m+1;E=c[I+104>>2]|0;a[E+(m*20|0)>>0]=11;E=E+(m*20|0)+1|0;D=E+19|0;do{a[E>>0]=0;E=E+1|0}while((E|0)<(D|0));o=m}else o=Di(I,11,0,0,0)|0;n=q?25:22;r=G&65535;m=c[i>>2]|0;if((c[t>>2]|0)>(m|0)){c[i>>2]=m+1;ba=c[I+104>>2]|0;a[ba+(m*20|0)>>0]=n;b[ba+(m*20|0)+2>>1]=0;c[ba+(m*20|0)+4>>2]=s;c[ba+(m*20|0)+8>>2]=0;c[ba+(m*20|0)+12>>2]=F;c[ba+(m*20|0)+16>>2]=0;a[ba+(m*20|0)+1>>0]=0}else m=Di(I,n,s,0,F)|0;do if(!(a[(c[I>>2]|0)+81>>0]|0)){ba=c[I+104>>2]|0;a[ba+(m*20|0)+1>>0]=-3;c[ba+(m*20|0)+16>>2]=r;ba=a[(c[I>>2]|0)+81>>0]|0;c[j+20>>2]=m;n=c[i>>2]|0;if(ba<<24>>24){m=59308;break}m=(c[I+104>>2]|0)+(((o|0)<0?n+-1|0:o)*20|0)|0}else{c[j+20>>2]=m;m=59308;n=c[i>>2]|0}while(0);c[m+8>>2]=n;q=I+104|0;m=0;while(1){o=m+F|0;if((c[t>>2]|0)>(n|0)){c[i>>2]=n+1;ba=c[q>>2]|0;a[ba+(n*20|0)>>0]=90;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=s;c[ba+(n*20|0)+8>>2]=m;c[ba+(n*20|0)+12>>2]=o;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0}else Di(I,90,s,m,o)|0;m=m+1|0;if((m|0)==(r|0))break l;n=c[i>>2]|0}}while(0);if((G&65535)<(y&65535)){C=w+48|0;t=(z|0)==1;w=(U|0)!=0;x=I+108|0;y=I+112|0;z=f+19|0;A=I+104|0;B=(U|0)==0;q=F;i=G&65535;while(1){r=c[(c[C>>2]|0)+(i<<2)>>2]|0;m=i+q|0;o=jm(f,r,j,i,aa,m)|0;do if((o|0)!=(m|0))if(!t){n=c[x>>2]|0;if((c[y>>2]|0)>(n|0)){c[x>>2]=n+1;ba=c[A>>2]|0;a[ba+(n*20|0)>>0]=79;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=o;c[ba+(n*20|0)+8>>2]=m;c[ba+(n*20|0)+12>>2]=0;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0;break}else{Di(I,79,o,m,0)|0;break}}else{if(!q){q=o;break}m=a[z>>0]|0;if((m&255)>=8){q=o;break}a[z>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=q;q=o;break}while(0);m=e[r+12>>1]|0;m:do if(!(m&1)){if(m&256|0)break;s=c[(c[r>>2]|0)+16>>2]|0;n:do if(!(b[r+10>>1]&2048)){n=a[s>>0]|0;if((n+91&255)<2){m=s;do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2)}else m=s;if(n<<24>>24==-88)n=a[m+38>>0]|0;o:do switch(n<<24>>24){case -110:case -111:case 110:case -109:break n;case -94:{if(c[m+4>>2]&1048576|0)break o;n=c[m+44>>2]|0;if(!n)break o;m=b[m+32>>1]|0;if(m<<16>>16<=-1)break n;if(a[(c[n+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0)break n;break}default:{}}while(0);m=q+i|0;n=c[ca>>2]|0;o=c[x>>2]|0;if((c[y>>2]|0)>(o|0)){c[x>>2]=o+1;ba=c[A>>2]|0;a[ba+(o*20|0)>>0]=50;b[ba+(o*20|0)+2>>1]=0;c[ba+(o*20|0)+4>>2]=m;c[ba+(o*20|0)+8>>2]=n;c[ba+(o*20|0)+12>>2]=0;c[ba+(o*20|0)+16>>2]=0;a[ba+(o*20|0)+1>>0]=0;break}else{Di(I,50,m,n,0)|0;break}}while(0);if(B)break;o=U+i|0;r=a[o>>0]|0;m=Xj(s)|0;if(r<<24>>24==0|m<<24>>24==0)if((m|r)<<24>>24==0?1:((m&255)+(r&255)&255)<<24>>24==65)ga=232;else ga=233;else if(r<<24>>24>66|m<<24>>24>66)ga=233;else ga=232;p:do if((ga|0)==232){ga=0;a[o>>0]=65}else if((ga|0)==233){ga=0;if(r<<24>>24==65)break;n=a[s>>0]|0;if((n+91&255)<2){m=s;do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2)}else m=s;if(n<<24>>24==-88)n=a[m+38>>0]|0;switch(n<<24>>24){case -110:break p;case -109:if((r+-67&255)<2)break p;else break m;case -111:switch(r<<24>>24){case 67:case 69:break p;default:break m}case 110:if(r<<24>>24==66)break p;else break m;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0)break p;else break m;default:break m}}while(0);a[o>>0]=65}else{if(!(w&(c[(c[r>>2]|0)+4>>2]&2048|0)!=0))break;a[U+i>>0]=65}while(0);i=i+1|0;if((i|0)==(H|0)){F=q;break}}}G=(U|0)==0;q:do if(!(u<<16>>16==0|G)?(O=U+p|0,(O|0)!=0):0){q=(Eu(O)|0)+1|0;r:do if(!da){ca=Sv(q|0,0,-1,-1)|0;ba=L()|0;if(ba>>>0>0|(ba|0)==0&ca>>>0>2147483390){D=0;break q}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](q)|0;ga=272;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){ca=c[14978]|0;ba=Tv(m|0,n|0,o|0,((o|0)<0)<<31>>31|0)|0;I=L()|0;c[14768]=((I|0)<0|(I|0)==0&ba>>>0<=ca>>>0)&1}m=Wa[c[29340>>2]&127](o)|0;if(!m){D=0;break q}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n}else{if(c[da+272>>2]|0){if(a[da+81>>0]|0){D=0;break q}}else{do if(!(0<0|(0==0?(e[da+276>>1]|0)>>>0<q>>>0:0))){n=da+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=272;break r}n=da+296|0;m=c[n>>2]|0;if(!m){m=da+292|0;break}else{c[n>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=272;break r}}else m=da+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(da,q,0)|0;ga=272}while(0);if((ga|0)==272)if(!m){D=0;break}ew(m|0,O|0,q|0)|0;D=m}else D=0;while(0);E=c[Q>>2]|0;o=(P|0)!=0;if(o)m=(b[P+12>>1]&40)!=0;else m=1;B=m&1;C=(v|0)!=0;if(C)m=(b[v+12>>1]&40)!=0;else m=1;n=m&1;A=(M<<16>>16!=0|o)&1;do if(o){z=c[(c[P>>2]|0)+16>>2]|0;q=F+p|0;y=N&65535;km(f,z,q,y);if(b[P+10>>1]&256){if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((c[g+108>>2]|0)+-1|0)*20|0)|0;else m=59308;ca=c[j+36>>2]|0;c[m+12>>2]=ca>>>1;b[m+2>>1]=ca&1}o=a[z>>0]|0;if((o+91&255)<2){m=z;do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2)}else m=z;if(o<<24>>24==-88)o=a[m+38>>0]|0;s:do switch(o<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0){ga=293;break s}o=c[m+44>>2]|0;if(!o){ga=293;break s}m=b[m+32>>1]|0;if(m<<16>>16<=-1)break s;if(!(a[(c[o+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0))ga=293;break}default:ga=293}while(0);do if((ga|0)==293){m=g+108|0;o=c[m>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[m>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=50;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=q;c[ca+(o*20|0)+8>>2]=E;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0;break}else{Di(g,50,q,E,0)|0;break}}while(0);t:do if(!G){x=U+p|0;if(!(N<<16>>16))break;i=z+38|0;t=z+20|0;w=z+20|0;s=0;while(1){o=a[z>>0]|0;if(o<<24>>24==-88)m=a[i>>0]|0;else m=o;switch(m<<24>>24){case -87:{m=t;ga=303;break}case -125:{m=c[w>>2]|0;ga=303;break}default:m=z}u:do if((ga|0)==303){if((c[c[m>>2]>>2]|0)<2){m=z;break}do if(o<<24>>24!=-125){if((a[i>>0]|0)==-125)break;m=c[(c[t>>2]|0)+4+(s*20|0)>>2]|0;break u}while(0);m=c[(c[c[w>>2]>>2]|0)+4+(s*20|0)>>2]|0}while(0);q=x+s|0;r=a[q>>0]|0;o=Xj(m)|0;if(r<<24>>24==0|o<<24>>24==0)if(r<<24>>24==65|((o|r)<<24>>24==0?1:((o&255)+(r&255)&255)<<24>>24==65))ga=321;else ga=311;else if(r<<24>>24==65|r<<24>>24<67&o<<24>>24<67)ga=321;else ga=311;v:do if((ga|0)==311){ga=0;o=a[m>>0]|0;if((o+91&255)<2)do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2);if(o<<24>>24==-88)o=a[m+38>>0]|0;switch(o<<24>>24){case -110:{ga=321;break v}case -109:if((r+-67&255)<2){ga=321;break v}else break v;case -111:switch(r<<24>>24){case 67:case 69:{ga=321;break v}default:break v}case 110:if(r<<24>>24==66){ga=321;break v}else break v;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0){ga=321;break v}else break v;default:break v}}while(0);if((ga|0)==321){ga=0;a[q>>0]=65}s=s+1|0;if((s|0)==(y|0))break t}}while(0);o=y+p|0;m=a[z>>0]|0;if(m<<24>>24==-88)m=a[z+38>>0]|0;switch(m<<24>>24){case -87:{S=z+20|0;ga=328;break}case -125:{S=c[z+20>>2]|0;ga=328;break}default:{}}if((ga|0)==328?(c[c[S>>2]>>2]|0)>=2:0){x=A;y=o;w=1;m=0;break}lm(j,P);x=A;y=o;w=B;m=0}else{if(!(J<<24>>24)){x=A;y=p;w=B;m=0;break}m=F+p|0;o=g+108|0;q=c[o>>2]|0;if((c[g+112>>2]|0)>(q|0)){c[o>>2]=q+1;ca=c[g+104>>2]|0;a[ca+(q*20|0)>>0]=73;b[ca+(q*20|0)+2>>1]=0;c[ca+(q*20|0)+4>>2]=0;c[ca+(q*20|0)+8>>2]=m;c[ca+(q*20|0)+12>>2]=0;c[ca+(q*20|0)+16>>2]=0;a[ca+(q*20|0)+1>>0]=0}else Di(g,73,0,m,0)|0;x=1;y=p+1|0;w=0;m=J}while(0);m=y-(m&255)|0;t=c[T>>2]|0;w:do if((U|0)!=0&(m|0)>0){q=U;o=F;while(1){if((a[q>>0]|0)!=65){i=q;break}r=m+-1|0;o=o+1|0;q=q+1|0;if((m|0)>1)m=r;else{i=q;m=r;break}}x:do if((m|0)>1){q=m;while(1){m=q+-1|0;if((a[i+m>>0]|0)!=65)break x;if((q|0)>2)q=m;else{ga=343;break}}}else ga=343;while(0);if((ga|0)==343)if((m|0)==1)q=1;else break;r=t+108|0;m=c[r>>2]|0;if((c[t+112>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[t+104>>2]|0;a[ca+(m*20|0)>>0]=91;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=o;c[ca+(m*20|0)+8>>2]=q;c[ca+(m*20|0)+12>>2]=0;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(t,91,o,q,0)|0;o=c[t>>2]|0;if(a[o+81>>0]|0){if((q|0)==-12)break;kg(o,q,i);break}if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[t+104>>2]|0;r=o+(m*20|0)|0;do if((q|0)<=-1){s=o+(m*20|0)+1|0;if(a[s>>0]|0)break;if((q|0)==-3){c[o+(m*20|0)+16>>2]=i;a[s>>0]=-3;break w}c[o+(m*20|0)+16>>2]=i;a[s>>0]=q;if((q|0)!=-12)break w;ca=i+12|0;c[ca>>2]=(c[ca>>2]|0)+1;break w}while(0);Ei(t,r,i,q)}while(0);ca=b[_+42>>1]|0;do if(!(ca<<16>>16!=0&(y|0)==(ca&65535|0))){r=g+108|0;do if(c[$>>2]&262144){m=c[r>>2]|0;o=g+112|0;if((c[o>>2]|0)>(m|0)){c[r>>2]=m+1;q=c[g+104>>2]|0;a[q+(m*20|0)>>0]=119;b[q+(m*20|0)+2>>1]=0;c[q+(m*20|0)+4>>2]=Z;c[q+(m*20|0)+8>>2]=0;c[q+(m*20|0)+12>>2]=0;c[q+(m*20|0)+16>>2]=0;a[q+(m*20|0)+1>>0]=0;q=o;break}else{Di(g,119,Z,0,0)|0;q=o;break}}else q=g+112|0;while(0);o=a[44009+(x<<2|aa|w<<1)>>0]|0;m=c[r>>2]|0;if((c[q>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[g+104>>2]|0;a[ca+(m*20|0)>>0]=o;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=Z;c[ca+(m*20|0)+8>>2]=E;c[ca+(m*20|0)+12>>2]=F;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(g,o&255,Z,E,F)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;ca=c[g+104>>2]|0;a[ca+(m*20|0)+1>>0]=-3;c[ca+(m*20|0)+16>>2]=y}while(0);do if(C){y=c[(c[v>>2]|0)+16>>2]|0;w=F+p|0;x=u&65535;km(f,y,w,x);if(b[v+10>>1]&256){if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((c[g+108>>2]|0)+-1|0)*20|0)|0;else m=59308;ca=c[j+36>>2]|0;c[m+12>>2]=ca>>>1;b[m+2>>1]=ca&1}o=a[y>>0]|0;if((o+91&255)<2){m=y;do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2)}else m=y;if(o<<24>>24==-88)o=a[m+38>>0]|0;y:do switch(o<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0){ga=385;break y}o=c[m+44>>2]|0;if(!o){ga=385;break y}m=b[m+32>>1]|0;if(m<<16>>16<=-1)break y;if(!(a[(c[o+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0))ga=385;break}default:ga=385}while(0);do if((ga|0)==385){m=g+108|0;o=c[m>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[m>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=50;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=w;c[ca+(o*20|0)+8>>2]=E;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0;break}else{Di(g,50,w,E,0)|0;break}}while(0);z:do if(!((D|0)==0|u<<16>>16==0)){i=y+38|0;t=y+20|0;u=y+20|0;s=0;do{o=a[y>>0]|0;if(o<<24>>24==-88)m=a[i>>0]|0;else m=o;switch(m<<24>>24){case -87:{m=t;ga=394;break}case -125:{m=c[u>>2]|0;ga=394;break}default:m=y}A:do if((ga|0)==394){if((c[c[m>>2]>>2]|0)<2){m=y;break}do if(o<<24>>24!=-125){if((a[i>>0]|0)==-125)break;m=c[(c[t>>2]|0)+4+(s*20|0)>>2]|0;break A}while(0);m=c[(c[c[u>>2]>>2]|0)+4+(s*20|0)>>2]|0}while(0);q=D+s|0;r=a[q>>0]|0;o=Xj(m)|0;if(r<<24>>24==0|o<<24>>24==0)if(r<<24>>24==65|((o|r)<<24>>24==0?1:((o&255)+(r&255)&255)<<24>>24==65))ga=412;else ga=402;else if(r<<24>>24==65|r<<24>>24<67&o<<24>>24<67)ga=412;else ga=402;B:do if((ga|0)==402){ga=0;o=a[m>>0]|0;if((o+91&255)<2)do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2);if(o<<24>>24==-88)o=a[m+38>>0]|0;switch(o<<24>>24){case -110:{ga=412;break B}case -109:if((r+-67&255)<2){ga=412;break B}else break B;case -111:switch(r<<24>>24){case 67:case 69:{ga=412;break B}default:break B}case 110:if(r<<24>>24==66){ga=412;break B}else break B;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0){ga=412;break B}else break B;default:break B}}while(0);if((ga|0)==412){ga=0;a[q>>0]=65}s=s+1|0}while((s|0)!=(x|0));t=c[T>>2]|0;q=D;m=x;o=w;while(1){if((a[q>>0]|0)!=65){i=q;break}r=m+-1|0;o=o+1|0;q=q+1|0;if((m|0)>1)m=r;else{i=q;m=r;break}}C:do if((m|0)>1){q=m;while(1){m=q+-1|0;if((a[i+m>>0]|0)!=65)break C;if((q|0)>2)q=m;else{ga=421;break}}}else ga=421;while(0);if((ga|0)==421)if((m|0)==1)q=1;else break;r=t+108|0;m=c[r>>2]|0;if((c[t+112>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[t+104>>2]|0;a[ca+(m*20|0)>>0]=91;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=o;c[ca+(m*20|0)+8>>2]=q;c[ca+(m*20|0)+12>>2]=0;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(t,91,o,q,0)|0;o=c[t>>2]|0;if(a[o+81>>0]|0){if((q|0)==-12)break;kg(o,q,i);break}if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[t+104>>2]|0;r=o+(m*20|0)|0;do if((q|0)<=-1){s=o+(m*20|0)+1|0;if(a[s>>0]|0)break;if((q|0)==-3){c[o+(m*20|0)+16>>2]=i;a[s>>0]=-3;break z}c[o+(m*20|0)+16>>2]=i;a[s>>0]=q;if((q|0)!=-12)break z;ca=i+12|0;c[ca>>2]=(c[ca>>2]|0)+1;break z}while(0);Ei(t,r,i,q)}while(0);p=x+p|0;m=a[y>>0]|0;if(m<<24>>24==-88)m=a[y+38>>0]|0;switch(m<<24>>24){case -87:{W=y+20|0;ga=442;break}case -125:{W=c[y+20>>2]|0;ga=442;break}default:{}}if((ga|0)==442?(c[c[W>>2]>>2]|0)>=2:0){n=1;break}lm(j,v)}else{if(!(R<<24>>24))break;m=F+p|0;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=73;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=0;c[ca+(o*20|0)+8>>2]=m;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0}else Di(g,73,0,m,0)|0;n=0;p=p+1|0}while(0);D:do if(!G){do if(da|0){if(c[da+480>>2]|0){Xd(da,U);break D}m=U;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;ca=da+300|0;c[U>>2]=c[ca>>2];c[ca>>2]=U;break D}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](U);break}else{ca=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);break}}while(0);E:do if(D|0){do if(da|0){if(c[da+480>>2]|0){Xd(da,D);break E}m=D;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;da=da+300|0;c[D>>2]=c[da>>2];c[da>>2]=D;break E}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{da=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);o=g+108|0;m=c[o>>2]|0;c[j+52>>2]=m;do if(p|0){n=a[44017+(n|aa<<1)>>0]|0;if((c[g+112>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=n;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=E;c[da+(m*20|0)+12>>2]=F;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,n&255,Z,E,F)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;da=c[g+104>>2]|0;a[da+(m*20|0)+1>>0]=-3;c[da+(m*20|0)+16>>2]=p}while(0);do if(c[$>>2]&262144|0){m=c[o>>2]|0;if((c[g+112>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=119;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=1;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0;break}else{Di(g,119,Z,1,0)|0;break}}while(0);if((c[$>>2]&64|0)!=0?(b[X>>1]&32)==0:0)w=1;else ga=481;F:do if((ga|0)==481){p=Y+12|0;m=c[p>>2]|0;if(c[m+36>>2]&32|0){if((ia|0)==(Z|0)){w=0;break}m=c[m+8>>2]|0;G:do if(!m)m=0;else while(1){da=m+55|0;if(((d[da>>0]|d[da+1>>0]<<8)&3)==2)break G;m=c[m+20>>2]|0;if(!m){m=0;break}}while(0);x=m+50|0;i=b[x>>1]|0;p=i&65535;do if(i<<16>>16==1){n=f+19|0;p=a[n>>0]|0;if(!(p<<24>>24)){n=(c[V>>2]|0)+1|0;c[V>>2]=n;ga=554;break}else{ga=p+-1<<24>>24;a[n>>0]=ga;n=c[f+148+((ga&255)<<2)>>2]|0;ga=554;break}}else{q=f+32|0;n=c[q>>2]|0;r=f+28|0;s=c[r>>2]|0;if((s|0)<(p|0)){n=c[V>>2]|0;c[V>>2]=n+p;n=n+1|0}else{c[q>>2]=n+p;c[r>>2]=s-p}if(i<<16>>16){ga=554;break}q=0;p=g+112|0}while(0);if((ga|0)==554){t=m+4|0;u=Y+52|0;p=g+112|0;v=Y+4|0;w=g+104|0;i=0;do{r=b[(c[t>>2]|0)+(i<<1)>>1]|0;m=b[u>>1]|0;H:do if(!(m<<16>>16))m=-1;else{s=c[v>>2]|0;q=m&65535;m=0;while(1){if((b[s+(m<<1)>>1]|0)==r<<16>>16)break H;m=m+1|0;if(m>>>0>=q>>>0){m=-1;break}}}while(0);m=m<<16>>16;q=i+n|0;r=c[o>>2]|0;if((c[p>>2]|0)>(r|0)){c[o>>2]=r+1;da=c[w>>2]|0;a[da+(r*20|0)>>0]=90;b[da+(r*20|0)+2>>1]=0;c[da+(r*20|0)+4>>2]=Z;c[da+(r*20|0)+8>>2]=m;c[da+(r*20|0)+12>>2]=q;c[da+(r*20|0)+16>>2]=0;a[da+(r*20|0)+1>>0]=0}else Di(g,90,Z,m,q)|0;i=i+1|0;m=b[x>>1]|0}while(i>>>0<(m&65535)>>>0);q=m&65535}m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=28;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=ia;c[da+(m*20|0)+8>>2]=pa;c[da+(m*20|0)+12>>2]=n;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,28,ia,pa,n)|0;if(a[(c[g>>2]|0)+81>>0]|0){w=0;break}w=c[g+104>>2]|0;a[w+(m*20|0)+1>>0]=-3;c[w+(m*20|0)+16>>2]=q;w=0;break}m=e[X>>1]|0;do if(!(m&1024)){if(m&4096|0?(a[h+49>>0]|0)==1:0)break;m=c[h>>2]|0;u=c[m+8>>2]|0;t=u+108|0;n=c[t>>2]|0;if((c[u+112>>2]|0)>(n|0)){c[t>>2]=n+1;da=c[u+104>>2]|0;a[da+(n*20|0)>>0]=-122;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=Z;c[da+(n*20|0)+8>>2]=0;c[da+(n*20|0)+12>>2]=ia;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(u,134,Z,0,ia)|0;if(!(b[X>>1]&32)){w=0;break F}da=c[m+116>>2]|0;if(c[((da|0)==0?m:da)+80>>2]|0){w=0;break F}q=c[m>>2]|0;s=(c[p>>2]|0)+42|0;i=(b[s>>1]<<2)+4|0;I:do if(!q){da=Sv(i|0,0,-1,-1)|0;ca=L()|0;if(ca>>>0>0|(ca|0)==0&da>>>0>2147483390){w=0;break F}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](i)|0;ga=520;break}m=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;p=59064;n=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&n>>>0>0){da=c[14978]|0;ca=Tv(n|0,p|0,m|0,((m|0)<0)<<31>>31|0)|0;ba=L()|0;c[14768]=((ba|0)<0|(ba|0)==0&ca>>>0<=da>>>0)&1}n=Wa[c[29340>>2]&127](m)|0;if(!n){w=0;break F}m=Wa[c[29352>>2]&127](n)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){r=n;break}c[14987]=m;r=n}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){w=0;break F}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<i>>>0:0))){n=q+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=q+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=520;break I}n=q+296|0;m=c[n>>2]|0;if(!m){m=q+292|0;break}else{c[n>>2]=c[m>>2];ga=q+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=520;break I}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(q,i,0)|0;ga=520}while(0);if((ga|0)==520)if(!m){w=0;break F}else r=m;gw(r|0,0,i|0)|0;c[r>>2]=b[s>>1];m=b[Y+52>>1]|0;if((m&65535)>1){q=c[Y+4>>2]|0;p=(m&65535)+-1|0;m=0;do{n=b[q+(m<<1)>>1]|0;if(n<<16>>16>-1){m=m+1|0;c[r+((n<<16>>16)+1<<2)>>2]=m}else m=m+1|0}while((m|0)<(p|0))}n=c[u>>2]|0;if(!(a[n+81>>0]|0)){m=(c[t>>2]|0)+-1|0;n=c[u+104>>2]|0;p=n+(m*20|0)+1|0;if(!(a[p>>0]|0)){c[n+(m*20|0)+16>>2]=r;a[p>>0]=-15;w=0;break F}else{Ei(u,n+(m*20|0)|0,r,-15);w=0;break F}}do if(n|0){if(c[n+480>>2]|0){Xd(n,r);w=0;break F}m=r;if((c[n+304>>2]|0)>>>0>m>>>0)break;if((c[n+308>>2]|0)>>>0<=m>>>0)break;w=n+300|0;c[r>>2]=c[w>>2];c[w>>2]=r;w=0;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);w=0;break F}else{w=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);w=0;break F}}while(0);p=(c[V>>2]|0)+1|0;c[V>>2]=p;m=c[o>>2]|0;n=g+112|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=-121;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=p;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,135,Z,p,0)|0;m=c[o>>2]|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;w=c[g+104>>2]|0;a[w+(m*20|0)>>0]=31;b[w+(m*20|0)+2>>1]=0;c[w+(m*20|0)+4>>2]=ia;c[w+(m*20|0)+8>>2]=0;c[w+(m*20|0)+12>>2]=p;c[w+(m*20|0)+16>>2]=0;a[w+(m*20|0)+1>>0]=0;w=0;break}else{Di(g,31,ia,0,p)|0;w=0;break}}while(0);do if(!(c[j>>2]|0)){if(b[X>>1]&32)break;r=c[Y+40>>2]|0;do if(r|0){c[ma>>2]=0;c[ma+4>>2]=0;c[ma+8>>2]=0;c[ma+12>>2]=0;c[ma+16>>2]=0;c[ma+20>>2]=0;c[ma+4>>2]=147;c[ma+24>>2]=na;c[na+4>>2]=ia;c[na+8>>2]=Z;if((c[r>>2]|0)<=0)break;s=Y+4|0;i=na+12|0;t=h+16|0;u=h+8|0;v=h+12|0;q=0;do{J:do if((b[(c[s>>2]|0)+(q<<1)>>1]|0)==-2){c[i>>2]=q;c[na>>2]=c[r+4+(q*20|0)>>2];m=c[t>>2]|0;if(m|0)_j(ma,m)|0;n=c[u>>2]|0;K:do if(n|0){m=c[n>>2]|0;if((m|0)<=0)break;n=n+4|0;while(1){p=c[n>>2]|0;if(p|0?_j(ma,p)|0:0)break K;if((m|0)>1){m=m+-1|0;n=n+20|0}else break}}while(0);n=c[v>>2]|0;if(!n)break;m=c[n>>2]|0;if((m|0)<=0)break;n=n+4|0;while(1){p=c[n>>2]|0;if(p|0?_j(ma,p)|0:0)break J;if((m|0)>1){m=m+-1|0;n=n+20|0}else break}}while(0);q=q+1|0}while((q|0)<(c[r>>2]|0))}while(0)}while(0);m=c[Y+36>>2]|0;if(m|0)mm(m,ia,oa);m=c[$>>2]|0;do if(!(m&4096)){n=j+45|0;if(!aa){a[n>>0]=5;break}else{a[n>>0]=4;break}}else a[j+45>>0]=-86;while(0);c[j+48>>2]=Z;a[j+46>>0]=m>>>16&1;if(!(m&15))a[j+47>>0]=1;E=w?0:Y}else{q=c[ea+8+(fa*72|0)+28>>2]|0;m=c[ea+8+(fa*72|0)+24>>2]|0;o=g+108|0;n=c[o>>2]|0;p=g+112|0;if((c[p>>2]|0)>(n|0)){c[o>>2]=n+1;da=c[g+104>>2]|0;a[da+(n*20|0)>>0]=13;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=q;c[da+(n*20|0)+8>>2]=0;c[da+(n*20|0)+12>>2]=m;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(g,13,q,0,m)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=14;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=q;c[da+(m*20|0)+8>>2]=z;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,14,q,z,0)|0;c[j+52>>2]=m;a[j+45>>0]=11;E=0}while(0);H=h+100|0;I=h+92|0;D=ea+8+(fa*72|0)+36|0;w=h+50|0;x=j+4|0;y=na+4|0;z=ma+4|0;A=ma+24|0;v=ma+20|0;B=j+36|0;F=g+112|0;G=g+104|0;m=(E|0)==0?2:1;while(1){n=c[I>>2]|0;if((n|0)<=0){ga=813;break}C=(m|0)==1;u=(m|0)<3;m=0;t=c[H>>2]|0;while(1){i=t+10|0;p=b[i>>1]|0;L:do if(!(p&6)){h=t+40|0;fa=qa;if(!((c[fa>>2]&c[h>>2]|0)==0?(c[fa+4>>2]&c[h+4>>2]|0)==0:0)){a[w>>0]=1;break}s=c[t>>2]|0;if(a[D>>0]&8?(c[s+4>>2]&1|0)==0:0)break;do if(C){h=c[x>>2]|0;c[ma>>2]=0;c[ma+4>>2]=0;c[ma+8>>2]=0;c[ma+12>>2]=0;c[ma+16>>2]=0;c[ma+20>>2]=0;c[y>>2]=h;c[na>>2]=E;c[z>>2]=148;c[A>>2]=na;if((s|0)!=0?(_j(ma,s)|0,(a[v>>0]|0)!=0):0){m=2;break L}else{ga=797;break}}else if(u)ga=797;while(0);if((ga|0)==797){ga=0;p=b[i>>1]|0;if(p&4096){m=(m|0)==0?3:m;break}}if((p&512)!=0?(ha=c[B>>2]|0,(ha|0)!=0):0){q=(ha<<1&2)+18|0;r=ha>>>1;p=c[o>>2]|0;if((c[F>>2]|0)>(p|0)){c[o>>2]=p+1;h=c[G>>2]|0;a[h+(p*20|0)>>0]=q;b[h+(p*20|0)+2>>1]=0;c[h+(p*20|0)+4>>2]=r;c[h+(p*20|0)+8>>2]=0;c[h+(p*20|0)+12>>2]=0;c[h+(p*20|0)+16>>2]=0;a[h+(p*20|0)+1>>0]=0}else p=Di(g,q,r,0,0)|0;Tj(f,s,pa,16);if(p|0){q=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))p=(c[G>>2]|0)+(((p|0)<0?q+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=q}}else Tj(f,s,pa,16);b[i>>1]=b[i>>1]|4}while(0);if((n|0)>1){t=t+48|0;n=n+-1|0}else break}if((m|0)<=0){ga=812;break}}if((ga|0)==812){m=c[I>>2]|0;if((m|0)>0){i=ma+4|0;t=ma+12|0;u=ma+16|0;v=ma+8|0;w=ma+20|0;x=ma+24|0;y=ma+28|0;z=ma+17|0;A=ma+18|0;B=ma+72|0;C=na+12|0;s=c[H>>2]|0;while(1){do if((((((b[s+10>>1]&6)==0?(ha=e[s+12>>1]|0,!((ha&130|0)==0|(ha&2048|0)==0)):0)?(c[s+20>>2]|0)==(ia|0):0)?(c[j>>2]|0)==0:0)?(ja=c[s>>2]|0,ka=c[s+28>>2]|0,c[ma>>2]=oa,c[i>>2]=oa,c[t>>2]=0,a[u>>0]=0,c[v>>2]=0,c[w>>2]=131,c[x>>2]=0,c[y>>2]=ia,a[z>>0]=1,a[A>>0]=1,(ka|0)!=-2):0)?(b[B>>1]=ka,la=Tl(ma)|0,la|0):0){p=0;n=la;while(1){r=n+32|0;q=c[r>>2]|0;r=c[r+4>>2]|0;if((q&k|0)==0&(r&l|0)==0){if((q|0)==0&(r|0)==0?b[n+12>>1]&130:0){ga=825;break}p=(p|0)==0?n:p}n=Tl(ma)|0;if(!n){ga=829;break}}if((ga|0)==825)ga=0;else if((ga|0)==829){ga=0;if(!p)break;else n=p}if(b[n+10>>1]&4)break;if(b[n+12>>1]&1){n=c[n>>2]|0;if((c[n+4>>2]&2048|0)!=0?(c[c[c[n+20>>2]>>2]>>2]|0)>1:0)break}else n=c[n>>2]|0;E=na;D=E+52|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));c[C>>2]=c[ja+12>>2];Tj(f,na,pa,16);break}while(0);if((m|0)>1){s=s+48|0;m=m+-1|0}else{m=j;break}}}else ga=813}if((ga|0)==813)m=j;n=c[m>>2]|0;if(n|0){m=c[o>>2]|0;c[j+28>>2]=m;if((c[F>>2]|0)>(m|0)){c[o>>2]=m+1;j=c[G>>2]|0;a[j+(m*20|0)>>0]=70;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=1;c[j+(m*20|0)+8>>2]=n;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(g,70,1,n,0)|0;m=c[I>>2]|0;if((m|0)>0){o=c[H>>2]|0;p=0;while(1){n=o+10|0;if((b[n>>1]&6)==0?(j=o+40|0,g=qa,(c[g>>2]&c[j>>2]|0)==0?(c[g+4>>2]&c[j+4>>2]|0)==0:0):0){Tj(f,c[o>>2]|0,pa,16);b[n>>1]=b[n>>1]|4;m=c[I>>2]|0}p=p+1|0;if((p|0)>=(m|0))break;else o=o+48|0}}}f=qa;qa=c[f+4>>2]|0;f=c[f>>2]|0;K(qa|0);Ra=ra;return f|0}function Ml(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=d+12|0;h=c[o>>2]|0;m=d+16|0;j=c[m>>2]|0;n=d+20|0;do if((h|0)<(j|0))m=h;else{k=c[n>>2]|0;l=c[c[c[d>>2]>>2]>>2]|0;j=j*96|0;a:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))p=13;else c[n>>2]=0;else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<j>>>0:0))){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=14;break a}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=14;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;p=13}while(0);if((p|0)==13){i=_d(l,j,0)|0;p=14}if((p|0)==14?(c[n>>2]=i,i|0):0){ew(i|0,k|0,(c[o>>2]|0)*48|0)|0;do if(!((k|0)==(d+24|0)|(k|0)==0)){if(c[l+480>>2]|0){Xd(l,k);break}j=k;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);h=c[n>>2]|0;k=h;if((c[l+304>>2]|0)>>>0<=k>>>0?(c[l+308>>2]|0)>>>0>k>>>0:0)h=e[l+276>>1]|0;else h=Wa[c[29352>>2]&127](h)|0;c[m>>2]=(h>>>0)/48|0;m=c[o>>2]|0;break}if(!((f|0)==0|(g&1)==0))ni(l,f);c[n>>2]=k;g=0;return g|0}while(0);l=c[n>>2]|0;c[o>>2]=m+1;b:do if(f){h=c[f+4>>2]|0;if(!(h&262144)){b[l+(m*48|0)+8>>1]=1;if(!(h&4096))break;while(1){if(!(h&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break b}h=c[f+4>>2]|0;if(!(h&4096))break b}}i=c[f+28>>2]|0;j=((i|0)<0)<<31>>31;if(i>>>0<8)if(i>>>0<2)i=-270;else{k=40;do{k=(k&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);k=k&65535;p=48}else{if(i>>>0>255){k=40;do{k=(k&65535)+40|0;p=i;i=bw(i|0,j|0,4)|0;o=j;j=L()|0}while(o>>>0>0|(o|0)==0&p>>>0>4095);k=k&65535}else k=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{k=(k&65535)+10&65535;p=i;i=bw(i|0,j|0,1)|0;o=j;j=L()|0}while(o>>>0>0|(o|0)==0&p>>>0>31);p=48}else p=48}if((p|0)==48)i=(k&65535)+65256+(e[3648+((i&7)<<1)>>1]|0)&65535;b[l+(m*48|0)+8>>1]=i;if(h&4096)do{if(!(h&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break b}h=c[f+4>>2]|0}while((h&4096|0)!=0)}else{b[l+(m*48|0)+8>>1]=1;f=0}while(0);c[l+(m*48|0)>>2]=f;b[l+(m*48|0)+10>>1]=g;c[l+(m*48|0)+4>>2]=d;c[l+(m*48|0)+16>>2]=-1;f=l+(m*48|0)+12|0;h=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));g=m;return g|0}function Nl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0;qa=Ra;Ra=Ra+16|0;q=qa;da=qa+8|0;ea=qa+4|0;p=c[g>>2]|0;la=c[p>>2]|0;ha=c[la>>2]|0;_=ha+81|0;if(a[_>>0]|0){Ra=qa;return}na=g+20|0;t=c[na>>2]|0;w=t+(h*48|0)|0;ga=p+488|0;oa=c[w>>2]|0;pa=oa+12|0;i=c[pa>>2]|0;if(!i){z=0;A=0}else{z=Pl(ga,i)|0;A=L()|0}u=a[oa>>0]|0;s=u&255;a:do switch(u<<24>>24){case 49:{if(ok(la,oa)|0){Ra=qa;return}i=oa+20|0;if(c[oa+4>>2]&2048|0){j=Ol(ga,c[i>>2]|0)|0;i=L()|0;break a}o=c[i>>2]|0;if((o|0)!=0?(j=c[o>>2]|0,(j|0)>0):0){n=0;m=j;j=0;i=0;do{k=c[o+4+(n*20|0)>>2]|0;if(!k){k=0;l=0}else{k=Pl(ga,k)|0;l=L()|0;m=c[o>>2]|0}j=k|j;i=l|i;n=n+1|0}while((n|0)<(m|0))}else{j=0;i=0}break}case 50:{j=0;i=0;break}default:{i=c[oa+16>>2]|0;if(!i){j=0;i=0}else{j=Pl(ga,i)|0;i=L()|0}}}while(0);m=t+(h*48|0)+32|0;c[m>>2]=j;c[m+4>>2]=i;c[ga>>2]=0;m=Pl(ga,oa)|0;n=L()|0;r=t+(h*48|0)+10|0;if(c[ga>>2]|0)b[r>>1]=b[r>>1]|4096;ka=oa+4|0;if(c[ka>>2]&1){j=b[oa+36>>1]|0;k=c[p+492>>2]|0;b:do if((k|0)>0){i=0;while(1){if((c[p+496+(i<<2)>>2]|0)==(j|0))break;i=i+1|0;if((i|0)>=(k|0)){k=0;l=0;break b}}k=cw(1,0,i|0)|0;l=L()|0}else{k=0;l=0}while(0);i=k|m;j=l|n;m=Sv(k|0,l|0,-1,-1)|0;n=L()|0;ja=bw(i|0,j|0,1)|0;ia=L()|0;if(ia>>>0<l>>>0|(ia|0)==(l|0)&ja>>>0<k>>>0){y=i;x=j;ja=m;ia=n}else{cd(la,43561,q);Ra=qa;return}}else{y=m;x=n;ja=0;ia=0}o=t+(h*48|0)+40|0;c[o>>2]=y;c[o+4>>2]=x;o=t+(h*48|0)+20|0;c[o>>2]=-1;c[t+(h*48|0)+16>>2]=-1;m=t+(h*48|0)+12|0;b[m>>1]=0;c:do switch(u<<24>>24){case 45:case 50:case 53:case 54:case 55:case 56:case 57:case 49:{i=c[pa>>2]|0;d:do if(!i)i=0;else while(1){j=c[i+4>>2]|0;if(!(j&4096))break d;if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);j=c[oa+16>>2]|0;e:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break e;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);l=t+(h*48|0)+32|0;v=l;v=((c[v>>2]&z|0)==0?(c[v+4>>2]&A|0)==0:0)?8191:2048;k=c[t+(h*48|0)+24>>2]|0;if((k|0)>0)i=c[(c[i+20>>2]|0)+4+((k+-1|0)*20|0)>>2]|0;k=a[i>>0]|0;n=(s+-54|0)>>>0<4;if(n&k<<24>>24==-87){k=c[(c[i+20>>2]|0)+4>>2]|0;i=k;k=a[k>>0]|0}if(k<<24>>24!=-94){if((!((z|0)==0&(A|0)==0)?(R=Sv(z|0,A|0,-1,-1)|0,(R&z|0)==0&((L()|0)&A|0)==0):0)?Ql(f,z,A,da,i)|0:0){i=c[da>>2]|0;k=c[da+4>>2]|0;fa=51}}else{fa=c[i+28>>2]|0;c[da>>2]=fa;k=b[i+32>>1]|0;c[da+4>>2]=k;i=fa;fa=51}if((fa|0)==51){c[o>>2]=i;c[t+(h*48|0)+28>>2]=k;switch(u<<24>>24){case 49:{i=1;break}case 50:{i=256;break}case 45:{i=128;break}default:i=2<<s+-53&65535}b[m>>1]=i&v}m=u<<24>>24==45;if(m)b[r>>1]=b[r>>1]|2048;do if(!j)i=w;else{k=c[l>>2]|0;l=c[l+4>>2]|0;i=a[j>>0]|0;if(n&i<<24>>24==-87){i=c[(c[j+20>>2]|0)+4>>2]|0;j=i;i=a[i>>0]|0}if(i<<24>>24!=-94){if((k|0)==0&(l|0)==0){i=w;break}R=Sv(k|0,l|0,-1,-1)|0;if(!((R&k|0)==0&((L()|0)&l|0)==0)){i=w;break}if(!(Ql(f,k,l,da,j)|0)){i=w;break}}else{c[da>>2]=c[j+28>>2];c[da+4>>2]=b[j+32>>1]}f:do if((c[o>>2]|0)>-1){if(!oa)s=0;else s=dk(ha,oa,0,0)|0;do if(!(a[_>>0]|0)){i=Ml(g,s,3)|0;if(!i)break;n=c[na>>2]|0;q=n+(i*48|0)|0;c[n+(i*48|0)+16>>2]=h;b[n+(i*48|0)+8>>1]=b[n+(h*48|0)+8>>1]|0;R=n+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;i=n+(i*48|0)+10|0;if(m)b[i>>1]=b[i>>1]|2048;i=n+(h*48|0)|0;R=n+(h*48|0)+10|0;b[R>>1]=b[R>>1]|8;if(b[(c[la>>2]|0)+76>>1]&128){r=0;break f}switch(a[s>>0]|0){case 45:case 53:break;default:{r=0;break f}}if(c[s+4>>2]&1|0){r=0;break f}m=s+12|0;j=c[m>>2]|0;Q=Xj(j)|0;l=s+16|0;k=c[l>>2]|0;R=Xj(k)|0;if(Q<<24>>24!=R<<24>>24?!(Q<<24>>24>66&R<<24>>24>66):0){r=0;break f}g:do if(!(c[j+4>>2]&256)){do if(k|0){if(!(c[k+4>>2]&256))break;j=Yi(la,k)|0;fa=87;break g}while(0);j=Yi(la,j)|0;if(j|0){fa=88;break}j=Yi(la,k)|0;fa=87}else{j=Yi(la,j)|0;fa=87}while(0);if((fa|0)==87?j|0:0)fa=88;do if((fa|0)==88){if((c[j+12>>2]|0)==78?(c[j+8>>2]|0)==0:0)break;k=c[l>>2]|0;j=Yi(la,c[m>>2]|0)|0;if(!j)j=c[(c[la>>2]|0)+8>>2]|0;k=Yi(la,k)|0;if(!k)k=c[(c[la>>2]|0)+8>>2]|0;m=c[j>>2]|0;k=c[k>>2]|0;R=a[m>>0]|0;j=(d[208+(R&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0;if(!(R<<24>>24==0|(j|0)!=0)){l=k;k=m;do{k=k+1|0;l=l+1|0;R=a[k>>0]|0;j=(d[208+(R&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(R<<24>>24==0|(j|0)!=0))}if(j|0){r=0;break f}}while(0);r=n+(h*48|0)+12|0;b[r>>1]=b[r>>1]|2048;r=2048;break f}else{if(!s)break;ni(ha,s)}while(0);Ra=qa;return}else{s=oa;i=w;q=w;r=0}while(0);o=s+16|0;k=(c[o>>2]|0)+4|0;l=c[k>>2]|0;m=l&256;p=s+12|0;n=c[p>>2]|0;j=n;do if((m|0)==(c[n+4>>2]&256|0)){if(m|0){c[k>>2]=l&-257;break}if(!(Yi(la,n)|0)){j=c[p>>2]|0;break}else{j=c[p>>2]|0;R=j+4|0;c[R>>2]=c[R>>2]|256;break}}while(0);R=c[o>>2]|0;c[o>>2]=j;c[p>>2]=R;j=a[s>>0]|0;if((j&255)>53)a[s>>0]=((j&255)+202^2)+54;c[q+20>>2]=c[da>>2];c[q+28>>2]=c[da+4>>2];j=q+32|0;c[j>>2]=ja|z;c[j+4>>2]=ia|A;j=q+40|0;c[j>>2]=y;c[j+4>>2]=x;j=a[s>>0]|0;switch(j<<24>>24){case 49:{j=1;break}case 50:{j=256;break}case 45:{j=128;break}default:j=2<<(j&255)+-53}b[q+12>>1]=j+r&(v&65535)}while(0);break}default:{switch(a[oa>>0]|0){case 48:{if((a[g+8>>0]|0)!=44){i=w;break c}k=c[oa+20>>2]|0;l=oa+36|0;i=c[pa>>2]|0;if(!i)j=0;else j=dk(ha,i,0,0)|0;i=c[k+4>>2]|0;if(!i)i=0;else i=dk(ha,i,0,0)|0;i=ej(la,57,j,i)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[ka>>2]&1;b[i+36>>1]=b[l>>1]|0}R=Ml(g,i,3)|0;Nl(f,g,R);i=c[na>>2]|0;c[i+(R*48|0)+16>>2]=h;b[i+(R*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;i=i+(h*48|0)+14|0;a[i>>0]=(a[i>>0]|0)+1<<24>>24;i=c[pa>>2]|0;if(!i)j=0;else j=dk(ha,i,0,0)|0;i=c[k+24>>2]|0;if(!i)i=0;else i=dk(ha,i,0,0)|0;i=ej(la,55,j,i)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[ka>>2]&1;b[i+36>>1]=b[l>>1]|0}R=Ml(g,i,3)|0;Nl(f,g,R);i=c[na>>2]|0;c[i+(R*48|0)+16>>2]=h;b[i+(R*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;R=i+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;i=i+(h*48|0)|0;break c}case 43:break;default:{i=w;break c}}N=c[g>>2]|0;O=c[N>>2]|0;P=c[O>>2]|0;H=c[na>>2]|0;Q=c[H+(h*48|0)>>2]|0;h:do if(!P){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](416)|0;fa=146;break}i=Wa[c[29356>>2]&127](416)|0;if((c[14985]|0)>>>0<416)c[14985]=416;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){fa=c[14978]|0;J=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;I=L()|0;c[14768]=((I|0)<0|(I|0)==0&J>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;fa=148}else fa=148}else fa=147}else{if(c[P+272>>2]|0){if(a[P+81>>0]|0){fa=147;break}}else{do if((e[P+276>>1]|0)>=416){j=P+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];fa=P+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=146;break h}j=P+296|0;i=c[j>>2]|0;if(!i){i=P+292|0;break}else{c[j>>2]=c[i>>2];fa=P+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=146;break h}}else i=P+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(P,416,0)|0;fa=146}while(0);if((fa|0)==146)if(!i)fa=147;else fa=148;i:do if((fa|0)==147)c[H+(h*48|0)+28>>2]=0;else if((fa|0)==148){gw(i+8|0,0,408)|0;c[H+(h*48|0)+28>>2]=i;j=H+(h*48|0)+10|0;b[j>>1]=b[j>>1]|16;j=i+24|0;gw(j|0,0,384)|0;c[i>>2]=N;a[i+9>>0]=0;c[i+4>>2]=0;I=i+12|0;c[I>>2]=0;c[i+16>>2]=8;J=i+20|0;c[J>>2]=j;Il(i,Q,43);j=c[I>>2]|0;if((j|0)>0)do{G=j;j=j+-1|0;Nl(f,i,j)}while((G|0)>1);y=P+81|0;if(!(a[y>>0]|0)){j=c[I>>2]|0;if((j|0)>0){z=P+272|0;A=P+276|0;B=N+492|0;C=P+288|0;D=P+300|0;E=P+296|0;F=P+284|0;G=P+292|0;x=c[J>>2]|0;v=-1;l=-1;n=-1;o=-1;while(1){w=j;j=j+-1|0;m=x+12|0;u=b[m>>1]|0;j:do if(!(u&511)){do if(c[z>>2]|0)if(!(a[y>>0]|0))fa=164;else{n=0;o=0;p=v;break j}else{if((e[A>>1]|0)>=408){k=c[D>>2]|0;if(k|0){c[D>>2]=c[k>>2];c[F>>2]=(c[F>>2]|0)+1;break}k=c[E>>2]|0;if(!k)k=G;else{c[E>>2]=c[k>>2];c[F>>2]=(c[F>>2]|0)+1;break}}else k=C;c[k>>2]=(c[k>>2]|0)+1;fa=164}while(0);if((fa|0)==164){fa=0;k=_d(P,408,0)|0}if(!k){n=0;o=0;p=v}else{c[x+28>>2]=k;n=x+10|0;b[n>>1]=b[n>>1]|32;b[m>>1]=1024;m=k+24|0;gw(m|0,0,384)|0;c[k>>2]=c[g>>2];a[k+9>>0]=0;n=k+4|0;c[n>>2]=0;o=k+12|0;c[o>>2]=0;c[k+16>>2]=8;p=k+20|0;c[p>>2]=m;Il(k,c[x>>2]|0,44);m=c[o>>2]|0;if((m|0)>0)do{u=m;m=m+-1|0;Nl(f,k,m)}while((u|0)>1);c[n>>2]=g;k:do if((a[y>>0]|0)==0?(K=c[o>>2]|0,(K|0)>0):0){q=c[p>>2]|0;r=0;k=0;m=0;while(1){switch(a[c[q>>2]>>0]|0){case 45:case 50:case 53:case 54:case 55:case 56:case 57:case 49:{fa=174;break}default:if((b[q+12>>1]|0)==64)fa=174}if((fa|0)==174){fa=0;o=c[q+20>>2]|0;p=c[B>>2]|0;l:do if((p|0)>0){n=0;while(1){if((c[N+496+(n<<2)>>2]|0)==(o|0))break;n=n+1|0;if((n|0)>=(p|0)){n=0;o=0;break l}}n=cw(1,0,n|0)|0;o=L()|0}else{n=0;o=0}while(0);k=n|k;m=o|m}r=r+1|0;if((r|0)>=(K|0))break k;else q=q+48|0}}else{k=0;m=0}while(0);n=0;o=0;p=k&v;l=m&l}}else{q=b[x+10>>1]|0;if(!(q&8)){m=c[x+20>>2]|0;s=c[B>>2]|0;r=(s|0)>0;m:do if(r){k=0;while(1){if((c[N+496+(k<<2)>>2]|0)==(m|0))break;k=k+1|0;if((k|0)>=(s|0)){p=0;t=0;break m}}p=cw(1,0,k|0)|0;t=L()|0}else{p=0;t=0}while(0);if(!(q&2))k=t;else{m=c[(c[J>>2]|0)+((c[x+16>>2]|0)*48|0)+20>>2]|0;n:do if(r){k=0;while(1){if((c[N+496+(k<<2)>>2]|0)==(m|0))break;k=k+1|0;if((k|0)>=(s|0)){k=0;m=0;break n}}k=cw(1,0,k|0)|0;m=L()|0}else{k=0;m=0}while(0);p=k|p;k=m|t}u=(u&2)==0;n=u?0:p&n;o=u?0:k&o;p=p&v;l=k&l}else p=v}while(0);k=(p|0)!=0|(l|0)!=0;if(!(k&(w|0)>1))break;else{x=x+48|0;v=p}}K=i+408|0;c[K>>2]=p;c[K+4>>2]=l;b[H+(h*48|0)+12>>1]=512;if(k)fa=198;else r=n}else{n=i+408|0;c[n>>2]=-1;c[n+4>>2]=-1;b[H+(h*48|0)+12>>1]=512;n=-1;o=-1;fa=198}o:do if((fa|0)==198){a[g+9>>0]=1;if((c[I>>2]|0)==2){j=0;k=c[J>>2]|0;while(1){m=j+1|0;if((b[k+12>>1]|0)!=1024)if(!j)j=k;else{r=n;break o}else{i=c[k+28>>2]|0;if((c[i+12>>2]|0)<=(j|0)){r=n;break o}j=(c[i+20>>2]|0)+(j*48|0)|0}if(!j){r=n;break o}l=0;while(1){if((b[k+60>>1]|0)==1024){i=c[k+76>>2]|0;if((c[i+12>>2]|0)<=(l|0))break;i=(c[i+20>>2]|0)+(l*48|0)|0;if(!i)break}else if(!l)i=k+48|0;else break;Rl(f,g,j,i);l=l+1|0;k=c[J>>2]|0}j=m}}else r=n}while(0);if(!((r|0)==0&(o|0)==0)?(R=N+492|0,M=c[I>>2]|0,(M|0)>0):0){n=M;i=c[J>>2]|0;while(1){k=n+-1|0;q=i+10|0;b[q>>1]=b[q>>1]&-65;q=c[i+20>>2]|0;if((q|0)!=-1){l=c[R>>2]|0;p:do if((l|0)>0){j=0;while(1){if((c[N+496+(j<<2)>>2]|0)==(q|0))break;j=j+1|0;if((j|0)>=(l|0)){j=0;l=0;break p}}j=cw(1,0,j|0)|0;l=L()|0}else{j=0;l=0}while(0);if(!((j&r|0)==0&(l&o|0)==0))break}if((n|0)>1){n=k;i=i+48|0}else break i}l=c[i+28>>2]|0;m=c[(c[i>>2]|0)+12>>2]|0;if((n|0)>=1){q:do if((l|0)==-2){j=q;while(1){if((j|0)==(q|0)){if((c[i+28>>2]|0)!=-2){fa=242;break q}if(bk(O,c[(c[i>>2]|0)+12>>2]|0,m,-1)|0){fa=242;break q}M=c[i>>2]|0;K=Xj(c[M+16>>2]|0)|0;if(!(K<<24>>24==0|K<<24>>24==(Xj(c[M+12>>2]|0)|0)<<24>>24)){fa=242;break q}M=i+10|0;b[M>>1]=b[M>>1]|64}else{M=i+10|0;b[M>>1]=b[M>>1]&-65}if((k|0)<=0)break q;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}else{j=q;while(1){if((j|0)==(q|0)){if((c[i+28>>2]|0)!=(l|0)){fa=242;break q}M=c[i>>2]|0;K=Xj(c[M+16>>2]|0)|0;if(!(K<<24>>24==0|K<<24>>24==(Xj(c[M+12>>2]|0)|0)<<24>>24)){fa=242;break q}M=i+10|0;b[M>>1]=b[M>>1]|64}else{M=i+10|0;b[M>>1]=b[M>>1]&-65}if((k|0)<=0)break q;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}while(0);r:do if((fa|0)==242){i=c[I>>2]|0;if((i|0)<=0)break i;n=i;i=c[J>>2]|0;while(1){k=n+-1|0;p=i+10|0;b[p>>1]=b[p>>1]&-65;p=c[i+20>>2]|0;if((p|0)!=(q|0)){l=c[R>>2]|0;s:do if((l|0)>0){j=0;while(1){if((c[N+496+(j<<2)>>2]|0)==(p|0))break;j=j+1|0;if((j|0)>=(l|0)){j=0;l=0;break s}}j=cw(1,0,j|0)|0;l=L()|0}else{j=0;l=0}while(0);if(!((j&r|0)==0&(l&o|0)==0))break}if((n|0)>1){n=k;i=i+48|0}else break i}l=c[i+28>>2]|0;m=c[(c[i>>2]|0)+12>>2]|0;if((n|0)<1)break i;if((l|0)!=-2){j=p;while(1){if((j|0)==(p|0)){if((c[i+28>>2]|0)!=(l|0))break i;R=c[i>>2]|0;M=Xj(c[R+16>>2]|0)|0;if(!(M<<24>>24==0|M<<24>>24==(Xj(c[R+12>>2]|0)|0)<<24>>24))break i;R=i+10|0;b[R>>1]=b[R>>1]|64}else{R=i+10|0;b[R>>1]=b[R>>1]&-65}if((k|0)<=0)break r;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}j=p;while(1){if((j|0)==(p|0)){if((c[i+28>>2]|0)!=-2)break i;if(bk(O,c[(c[i>>2]|0)+12>>2]|0,m,-1)|0)break i;R=c[i>>2]|0;M=Xj(c[R+16>>2]|0)|0;if(!(M<<24>>24==0|M<<24>>24==(Xj(c[R+12>>2]|0)|0)<<24>>24))break i;R=i+10|0;b[R>>1]=b[R>>1]|64}else{R=i+10|0;b[R>>1]=b[R>>1]&-65}if((k|0)<=0)break r;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}while(0);i=c[I>>2]|0;if((i|0)>0){k=0;j=0;m=c[J>>2]|0;while(1){l=i;i=i+-1|0;if(b[m+10>>1]&64){k=c[(c[m>>2]|0)+16>>2]|0;if(!k)k=0;else k=dk(P,k,0,0)|0;j=nj(c[c[N>>2]>>2]|0,j,k)|0;k=c[(c[m>>2]|0)+12>>2]|0}if((l|0)<=1)break;else m=m+48|0}if(!k)i=0;else i=dk(P,k,0,0)|0}else{j=0;i=0}i=ej(O,49,i,0)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[Q+4>>2]&1;b[i+36>>1]=b[Q+36>>1]|0;c[i+20>>2]=j;Q=Ml(g,i,3)|0;Nl(f,g,Q);R=c[na>>2]|0;c[R+(Q*48|0)+16>>2]=h;b[R+(Q*48|0)+8>>1]=b[R+(h*48|0)+8>>1]|0;R=R+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;break}if(j|0)ri(P,j)}}}}while(0);i=(c[na>>2]|0)+(h*48|0)|0}}while(0);C=g+8|0;t:do if((a[C>>0]|0)==44){A=c[la>>2]|0;u:do if((((a[oa>>0]|0)==-95?(Z=oa+20|0,S=c[Z>>2]|0,(S|0)!=0):0)?(T=c[S>>2]|0,U=Jd(A,c[oa+8>>2]|0,T,1,0)|0,(U|0)!=0):0)?(V=c[U+4>>2]|0,(V&4|0)!=0):0){l=c[Z>>2]|0;if((T|0)>=3){j=c[l+44>>2]|0;if((a[j>>0]|0)!=110)break;j=c[j+8>>2]|0;k=a[j>>0]|0;if(!(k<<24>>24))break;if(a[j+1>>0]|0)break}else k=0;w=c[U+8>>2]|0;u=a[w>>0]|0;v=a[w+1>>0]|0;w=a[w+2>>0]|0;B=V&8;y=c[l+24>>2]|0;j=c[l+4>>2]|0;v:do if(!j)z=0;else while(1){l=c[j+4>>2]|0;if(!(l&4096)){z=j;break v}if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){z=0;break}}while(0);j=a[z>>0]|0;x=j<<24>>24==-108;do if(x){if(!(0==0?(c[A+32>>2]&8388608|0)==0:0))break u;j=c[la+220>>2]|0;q=b[z+32>>1]|0;r=q<<16>>16;w:do if((j|0)!=0?(V=c[j+100>>2]|0,X=r+-1|0,W=V+(X*40|0)|0,X=V+(X*40|0)+8|0,(b[X>>1]&1)==0):0){p=c[j>>2]|0;x:do if(!p){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](40)|0;fa=300;break}j=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){V=c[14978]|0;U=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;T=L()|0;c[14768]=((T|0)<0|(T|0)==0&U>>>0<=V>>>0)&1}l=Wa[c[29340>>2]&127](j)|0;if(!l){j=0;m=0;n=0;break w}j=Wa[c[29352>>2]&127](l)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){o=l;break}c[14987]=j;o=l}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){j=0;m=0;n=0;break w}}else{do if((e[p+276>>1]|0)>=40){l=p+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];fa=p+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=300;break x}l=p+296|0;j=c[l>>2]|0;if(!j){j=p+292|0;break}else{c[l>>2]=c[j>>2];fa=p+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=300;break x}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,40,0)|0;fa=300}while(0);if((fa|0)==300)if(!j){j=0;m=0;n=0;break}else o=j;j=o;l=j+40|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));n=o+8|0;b[n>>1]=1;c[o+32>>2]=p;c[o>>2]=c[W>>2];c[o+4>>2]=c[W+4>>2];c[o+8>>2]=c[W+8>>2];c[o+12>>2]=c[W+12>>2];c[o+16>>2]=c[W+16>>2];j=b[n>>1]&-1025;b[n>>1]=j;j=j&65535;y:do if(j&18|0){if(b[X>>1]&2048)break;l=(j|4096)&65535;b[n>>1]=l;do if(j&16384){m=o+12|0;j=(c[o>>2]|0)+(c[m>>2]|0)|0;if((j|0)<1)if(!(l&16)){fa=309;break}else j=1;if(Eg(o,j,1)|0)break y;gw((c[o+16>>2]|0)+(c[m>>2]|0)|0,0,c[o>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+(c[o>>2]|0);j=b[n>>1]&-16897;b[n>>1]=j;if(!(c[o+24>>2]|0)){fa=309;break}if((c[o+16>>2]|0)!=(c[o+20>>2]|0))fa=309}else fa=309;while(0);if((fa|0)==309){if(Jg(o)|0)break;j=b[n>>1]|0}b[n>>1]=j&-4097}while(0);j=b[n>>1]|0;if((j&15|16)<<16>>16!=18){j=0;m=o;n=o;break}do if((j&514)==514){if((a[o+10>>0]|0)!=1)break;j=c[o+16>>2]|0;m=o;n=o;break w}while(0);if(j&1){j=0;m=o;n=o;break}j=Gg(o,1)|0;m=o;n=o}else{j=0;m=0;n=0}while(0);l=c[la+8>>2]|0;if(q<<16>>16>31){s=l+208|0;c[s>>2]=c[s>>2]|-2147483648;s=m;t=n;break}else{s=l+208|0;c[s>>2]=c[s>>2]|1<<r+-1;s=m;t=n;break}}else{if(j<<24>>24!=110)break u;s=0;j=c[z+8>>2]|0;t=0}while(0);do if((j|0)!=0?(Y=a[j>>0]|0,Y<<24>>24!=w<<24>>24&((Y<<24>>24==v<<24>>24|(Y<<24>>24==0?1:Y<<24>>24==u<<24>>24))^1)):0){l=0;n=Y;do{m=l+1|0;if(n<<24>>24==k<<24>>24)l=(a[j+m>>0]|0)==0?m:l+2|0;else l=m;n=a[j+l>>0]|0;m=n<<24>>24==u<<24>>24}while(n<<24>>24!=w<<24>>24&((n<<24>>24==v<<24>>24|(n<<24>>24==0|m))^1));if(((l|0)!=0?(a[j+(l+-1)>>0]|0)!=-1:0)?!((l|0)<2?Y<<24>>24==k<<24>>24:0):0){if(m)q=(a[j+(l+1)>>0]|0)==0&1;else q=0;c[da>>2]=j;r=(Eu(j)|0)&1073741823;c[da+4>>2]=r;r=oj(A,110,da,0)|0;z:do if(r|0){p=c[r+8>>2]|0;a[p+l>>0]=0;if((l|0)>0){o=k&255;m=0;n=0;while(1){Y=n+((a[p+n>>0]|0)==(o|0)&1)|0;k=m+1|0;a[p+m>>0]=a[p+Y>>0]|0;n=Y+1|0;if((n|0)>=(l|0))break;else m=k}}else k=0;a[p+k>>0]=0;Y=a[p>>0]|0;if(!(Y<<24>>24==45|((Y&255)+-48|0)>>>0<10)?!((k|0)==1&Y<<24>>24==47):0)break;do if((a[y>>0]|0)==-94){if((Xj(y)|0)<<24>>24!=66)break;if(!(c[(c[y+44>>2]|0)+56>>2]|0))break z}while(0);ni(A,r);if(!s)break u;if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,t);break u}k=t;if((c[j+304>>2]|0)>>>0>k>>>0)break;if((c[j+308>>2]|0)>>>0<=k>>>0)break;_=j+300|0;c[t>>2]=c[_>>2];c[_>>2]=t;break u}while(0);if(!t)break u;if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break u}else{_=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-_;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break u}}while(0);if(!x){n=q;break}m=c[la+8>>2]|0;k=b[z+32>>1]|0;if(k<<16>>16>31)k=-2147483648;else k=1<<(k<<16>>16)+-1;Y=m+208|0;c[Y>>2]=c[Y>>2]|k;if(!q){n=0;break}if(!(a[(c[z+8>>2]|0)+1>>0]|0)){n=q;break}n=la+19|0;k=a[n>>0]|0;if(!(k<<24>>24)){Y=la+44|0;l=(c[Y>>2]|0)+1|0;c[Y>>2]=l}else{l=k+-1<<24>>24;a[n>>0]=l;l=c[la+148+((l&255)<<2)>>2]|0}Jj(la,z,l)|0;if(!(a[(c[m>>2]|0)+81>>0]|0))k=(c[m+104>>2]|0)+(((c[m+108>>2]|0)+-1|0)*20|0)|0;else k=59308;c[k+12>>2]=0;if(!l){n=q;break}k=a[n>>0]|0;if((k&255)>=8){n=q;break}a[n>>0]=k+1<<24>>24;c[la+148+((k&255)<<2)>>2]=l;n=q}else{n=0;r=0;j=0}}else{n=0;r=0;j=0}while(0);l=(j|0)==0;A:do if(s|0){if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,t);break A}k=t;if((c[j+304>>2]|0)>>>0>k>>>0)break;if((c[j+308>>2]|0)>>>0<=k>>>0)break;Y=j+300|0;c[t>>2]=c[Y>>2];c[Y>>2]=t;break A}while(0);if(t|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{Y=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!l){p=c[(c[Z>>2]|0)+24>>2]|0;if(!r)q=0;else q=dk(ha,r,0,0)|0;o=(B|0)!=0;do if(!o){if(a[(c[la>>2]|0)+81>>0]|0)break;l=i+10|0;b[l>>1]=b[l>>1]|1024;l=r+8|0;j=c[l>>2]|0;i=a[j>>0]|0;if(!(i<<24>>24))break;m=q+8|0;k=0;do{Z=i&255;a[j>>0]=i&~(a[880+Z>>0]&32);a[(c[m>>2]|0)+k>>0]=a[208+Z>>0]|0;k=k+1|0;j=(c[l>>2]|0)+k|0;i=a[j>>0]|0}while(i<<24>>24!=0)}while(0);if(!(a[_>>0]|0)){j=c[q+8>>2]|0;if(!j)i=0;else i=(Eu(j)|0)&1073741823;k=j+(i+-1)|0;i=a[k>>0]|0;if(o){j=i;i=n}else{j=a[208+(i&255)>>0]|0;i=i<<24>>24==64?0:n}a[k>>0]=(j&255)+1;n=i}l=o?34049:43602;k=(p|0)==0;if(k)j=0;else j=dk(ha,p,0,0)|0;c[da>>2]=l;c[da+4>>2]=6;i=oj(c[la>>2]|0,106,da,0)|0;if(!i)i=j;else{c[i+12>>2]=j;_=i+4|0;c[_>>2]=c[_>>2]|4352}i=ej(la,57,i,r)|0;if(i|0){_=i+4|0;c[_>>2]=c[_>>2]|c[ka>>2]&1;b[i+36>>1]=b[oa+36>>1]|0}m=Ml(g,i,259)|0;Nl(f,g,m);if(k)j=0;else j=dk(ha,p,0,0)|0;c[da>>2]=l;c[da+4>>2]=6;i=oj(c[la>>2]|0,106,da,0)|0;if(!i)i=j;else{c[i+12>>2]=j;_=i+4|0;c[_>>2]=c[_>>2]|4352}i=ej(la,56,i,q)|0;if(i|0){_=i+4|0;c[_>>2]=c[_>>2]|c[ka>>2]&1;b[i+36>>1]=b[oa+36>>1]|0}j=Ml(g,i,259)|0;Nl(f,g,j);k=c[na>>2]|0;i=k+(h*48|0)|0;if(!n)break;c[k+(m*48|0)+16>>2]=h;Y=k+(h*48|0)+8|0;b[k+(m*48|0)+8>>1]=b[Y>>1]|0;_=k+(h*48|0)+14|0;Z=a[_>>0]|0;c[k+(j*48|0)+16>>2]=h;b[k+(j*48|0)+8>>1]=b[Y>>1]|0;a[_>>0]=Z+2<<24>>24}}while(0);if((a[C>>0]|0)==44){j=a[oa>>0]|0;B:do switch(j<<24>>24){case -95:{j=c[oa+20>>2]|0;if((j|0)!=0?(c[j>>2]|0)==2:0){o=j+4|0;p=j+24|0;k=c[p>>2]|0;C:do if(((a[k>>0]|0)==-94?c[(c[k+44>>2]|0)+56>>2]|0:0)?(aa=c[oa+8>>2]|0,_=a[aa>>0]|0,$=_&255,_<<24>>24):0){j=(d[208+$>>0]|0)+-109|0;if(!j){l=38025;m=aa;do{m=m+1|0;l=l+1|0;_=a[m>>0]|0;j=(d[208+(_&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(_<<24>>24==0|(j|0)!=0))}D:do if(j){n=$|32;switch((n&255)<<24>>24){case 103:{m=43609;j=aa;do{j=j+1|0;m=m+1|0;fa=a[j>>0]|0;l=(d[208+(fa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(l|0)!=0));if(!l){j=1;break D}else break C}case 108:{fa=425;break}case 114:break;default:break C}if((fa|0)==425){j=43614;l=aa;do{l=l+1|0;j=j+1|0;fa=a[l>>0]|0;m=(d[208+(fa&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(m|0)!=0));if(!m){j=2;break}if((n|0)!=114)break C}m=43619;j=aa;do{j=j+1|0;m=m+1|0;fa=a[j>>0]|0;l=(d[208+(fa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(l|0)!=0));if(!l)j=3;else break C}else j=0;while(0);j=a[18144+(j<<3)+4>>0]|0;m=1;n=c[o>>2]|0;fa=453;break B}while(0);k=c[o>>2]|0;if((a[k>>0]|0)==-94?(ba=c[k+44>>2]|0,(c[ba+56>>2]|0)!=0):0){j=ba+64|0;while(1){j=c[j>>2]|0;if((c[j>>2]|0)==(ha|0))break;else j=j+24|0}j=c[j+8>>2]|0;l=c[(c[j>>2]|0)+72>>2]|0;if(l|0?(ca=_a[l&127](j,2,c[oa+8>>2]|0,da,ea)|0,(ca|0)>149):0){j=ca&255;m=1;n=c[p>>2]|0;fa=453;break B}fa=465}else fa=465}else fa=465;break}case 51:case -96:case 52:{k=c[pa>>2]|0;l=c[oa+16>>2]|0;if((a[k>>0]|0)==-94)m=(c[(c[k+44>>2]|0)+56>>2]|0)!=0&1;else m=0;if(l)if((a[l>>0]|0)==-94){fa=(c[(c[l+44>>2]|0)+56>>2]|0)==0;n=fa?l:k;k=fa?k:l;m=m+((fa^1)&1)|0}else n=l;else n=0;switch(j<<24>>24){case 52:{j=68;break}case -96:{j=69;break}case 51:{j=70;break}default:j=0}if((m|0)>0)fa=453;else fa=465;break}default:{}}while(0);if((fa|0)==453)while(1){u=m;m=m+-1|0;l=n;o=(n|0)==0;if(o){s=0;t=0}else{s=Pl(ga,l)|0;t=L()|0}r=k;if(!k){p=0;q=0}else{p=Pl(ga,r)|0;q=L()|0}if((p&s|0)==0&(q&t|0)==0){if(o)i=0;else i=dk(ha,l,0,0)|0;i=ej(la,46,0,i)|0;if((i|0)!=0&(c[ka>>2]&1|0)!=0){fa=i+4|0;c[fa>>2]=c[fa>>2]|1}fa=Ml(g,i,3)|0;ca=c[na>>2]|0;i=ca+(fa*48|0)+32|0;c[i>>2]=s;c[i+4>>2]=t;c[ca+(fa*48|0)+20>>2]=c[r+28>>2];c[ca+(fa*48|0)+28>>2]=b[r+32>>1];b[ca+(fa*48|0)+12>>1]=64;a[ca+(fa*48|0)+15>>0]=j;i=c[na>>2]|0;c[i+(fa*48|0)+16>>2]=h;b[i+(fa*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;da=i+(h*48|0)+14|0;a[da>>0]=(a[da>>0]|0)+1<<24>>24;da=i+(h*48|0)+10|0;b[da>>1]=b[da>>1]|8;da=i+(h*48|0)+40|0;ea=c[da+4>>2]|0;fa=ca+(fa*48|0)+40|0;c[fa>>2]=c[da>>2];c[fa+4>>2]=ea;i=i+(h*48|0)|0}if((u|0)<=1){fa=465;break}else{fa=n;n=k;k=fa}}if((fa|0)==465){if((a[C>>0]|0)!=44)break;j=a[oa>>0]|0}switch(j<<24>>24){case 45:case 53:{m=c[pa>>2]|0;l=a[m>>0]|0;if(l<<24>>24==-88)j=a[m+38>>0]|0;else j=l;switch(j<<24>>24){case -87:{j=m+20|0;fa=473;break}case -125:{j=c[m+20>>2]|0;fa=473;break}default:{}}do if((fa|0)==473){q=c[c[j>>2]>>2]|0;if((q|0)>1){r=oa+16|0;k=c[r>>2]|0;j=a[k>>0]|0;if(j<<24>>24==-88)j=a[k+38>>0]|0;switch(j<<24>>24){case -87:{j=k+20|0;fa=479;break}case -125:{j=c[k+20>>2]|0;fa=479;break}default:j=1}if((fa|0)==479)j=c[c[j>>2]>>2]|0;if((j|0)==(q|0)){if(c[m+4>>2]&2048|0?c[k+4>>2]&2048|0:0)break;o=la+272|0;p=oa+36|0;n=0;j=l;i=m;while(1){switch(j<<24>>24){case -125:{j=ej(la,170,0,0)|0;if(!j)j=0;else{b[j+32>>1]=n;c[j+12>>2]=i}break}case -87:{i=c[(c[i+20>>2]|0)+4+(n*20|0)>>2]|0;if(!i){k=0;j=0;fa=489}else fa=488;break}default:fa=488}if((fa|0)==488){k=i;j=dk(c[la>>2]|0,i,0,0)|0;fa=489}E:do if((fa|0)==489){fa=0;i=c[o>>2]|0;if(i){while(1){if((c[i>>2]|0)==(k|0))break;i=c[i+12>>2]|0;if(!i)break E}c[i>>2]=j}}while(0);i=c[r>>2]|0;switch(a[i>>0]|0){case -125:{k=ej(la,170,0,0)|0;if(!k)i=0;else{b[k+32>>1]=n;c[k+12>>2]=i;i=k}break}case -87:{i=c[(c[i+20>>2]|0)+4+(n*20|0)>>2]|0;if(!i){l=0;i=0;fa=499}else fa=498;break}default:fa=498}if((fa|0)==498){l=i;i=dk(c[la>>2]|0,i,0,0)|0;fa=499}F:do if((fa|0)==499){fa=0;k=c[o>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break F}c[k>>2]=i}}while(0);i=ej(la,d[oa>>0]|0,j,i)|0;if(i|0){ha=i+4|0;c[ha>>2]=c[ha>>2]|c[ka>>2]&1;b[i+36>>1]=b[p>>1]|0}Nl(f,g,Ml(g,i,1)|0);i=n+1|0;if((i|0)==(q|0))break;ha=c[pa>>2]|0;n=i;j=a[ha>>0]|0;i=ha}la=a[C>>0]|0;i=c[na>>2]|0;ka=i+(h*48|0)+10|0;b[ka>>1]=b[ka>>1]|6;b[i+(h*48|0)+12>>1]=0;if(la<<24>>24==44)i=i+(h*48|0)|0;else break t}}}while(0);j=a[oa>>0]|0;break}default:{}}if(((j<<24>>24==49?(c[i+24>>2]|0)==0:0)?(ma=c[pa>>2]|0,(a[ma>>0]|0)==-87):0)?(c[(c[oa+20>>2]|0)+52>>2]|0)==0:0){k=0;i=-87;j=ma;while(1){if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;fa=520;break}case -125:{i=c[j+20>>2]|0;fa=520;break}default:i=1}if((fa|0)==520){fa=0;i=c[c[i>>2]>>2]|0}if((k|0)>=(i|0))break t;ma=Ml(g,oa,2)|0;i=k+1|0;c[(c[na>>2]|0)+(ma*48|0)+24>>2]=i;Nl(f,g,ma);j=c[na>>2]|0;c[j+(ma*48|0)+16>>2]=h;b[j+(ma*48|0)+8>>1]=b[j+(h*48|0)+8>>1]|0;j=j+(h*48|0)+14|0;a[j>>0]=(a[j>>0]|0)+1<<24>>24;j=c[pa>>2]|0;k=i;i=a[j>>0]|0}}}}while(0);h=(c[na>>2]|0)+(h*48|0)+32|0;oa=h;pa=c[oa+4>>2]|ia;c[h>>2]=c[oa>>2]|ja;c[h+4>>2]=pa;Ra=qa;return}function Ol(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!d){r=0;s=0;K(r|0);return s|0}o=d;d=0;e=0;do{n=c[o+32>>2]|0;l=c[o>>2]|0;if((l|0)!=0?(s=c[l>>2]|0,(s|0)>0):0){k=0;j=s;f=0;g=0;do{h=c[l+4+(k*20|0)>>2]|0;if(!h){h=0;i=0}else{h=Pl(b,h)|0;i=L()|0;j=c[l>>2]|0}f=h|f;g=i|g;k=k+1|0}while((k|0)<(j|0))}else{f=0;g=0}l=f|d;k=g|e;j=c[o+40>>2]|0;if((j|0)!=0?(q=c[j>>2]|0,(q|0)>0):0){i=0;h=q;d=0;e=0;do{f=c[j+4+(i*20|0)>>2]|0;if(!f){f=0;g=0}else{f=Pl(b,f)|0;g=L()|0;h=c[j>>2]|0}d=f|d;e=g|e;i=i+1|0}while((i|0)<(h|0))}else{d=0;e=0}l=l|d;k=k|e;j=c[o+48>>2]|0;if((j|0)!=0?(r=c[j>>2]|0,(r|0)>0):0){i=0;g=r;h=0;e=0;while(1){d=c[j+4+(i*20|0)>>2]|0;if(!d){d=0;f=0}else{d=Pl(b,d)|0;f=L()|0;g=c[j>>2]|0}d=d|h;e=f|e;i=i+1|0;if((i|0)>=(g|0)){h=d;i=e;break}else h=d}}else{h=0;i=0}d=c[o+36>>2]|0;if(!d){e=0;g=0}else{e=Pl(b,d)|0;g=L()|0}d=c[o+44>>2]|0;if(!d){d=0;f=0}else{d=Pl(b,d)|0;f=L()|0}d=l|h|e|d;e=k|i|g|f;if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;do{h=Ol(b,c[n+8+(m*72|0)+20>>2]|0)|0;g=L()|0|e;e=c[n+8+(m*72|0)+44>>2]|0;if(!e){e=0;f=0}else{e=Pl(b,e)|0;f=L()|0}d=h|d|e;e=g|f;if(a[n+8+(m*72|0)+37>>0]&4){l=c[n+8+(m*72|0)+64>>2]|0;if((l|0)!=0?(p=c[l>>2]|0,(p|0)>0):0){k=0;f=0;g=0;i=p;do{h=c[l+4+(k*20|0)>>2]|0;if(!h){h=0;j=0}else{h=Pl(b,h)|0;j=L()|0;i=c[l>>2]|0}f=h|f;g=j|g;k=k+1|0}while((k|0)<(i|0))}else{f=0;g=0}d=f|d;e=g|e}m=m+1|0}while((m|0)<(c[n>>2]|0))}o=c[o+52>>2]|0}while((o|0)!=0);K(e|0);return d|0}function Pl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=a[d>>0]|0;j=d+4|0;f=c[j>>2]|0;if(e<<24>>24==-94&(f&8|0)==0){g=c[d+28>>2]|0;f=c[b+4>>2]|0;if((f|0)<=0){o=0;b=0;K(o|0);return b|0}e=0;while(1){if((c[b+8+(e<<2)>>2]|0)==(g|0))break;e=e+1|0;if((e|0)>=(f|0)){e=0;f=0;i=45;break}}if((i|0)==45){K(e|0);return f|0}b=cw(1,0,e|0)|0;o=L()|0;K(o|0);return b|0}if(f&8404992|0){o=0;b=0;K(o|0);return b|0}a:do if(e<<24>>24==-85?(g=c[d+28>>2]|0,h=c[b+4>>2]|0,(h|0)>0):0){e=0;while(1){if((c[b+8+(e<<2)>>2]|0)==(g|0))break;e=e+1|0;if((e|0)>=(h|0)){f=0;g=0;break a}}f=cw(1,0,e|0)|0;g=L()|0}else{f=0;g=0}while(0);e=c[d+12>>2]|0;if(e){n=Pl(b,e)|0;f=n|f;g=L()|0|g}e=c[d+16>>2]|0;do if(!e){e=c[j>>2]|0;if(e&2048|0){if(e&32|0)c[b>>2]=1;n=Ol(b,c[d+20>>2]|0)|0;f=n|f;g=L()|0|g;break}n=c[d+20>>2]|0;if(n){e=c[n>>2]|0;if((e|0)>0){m=0;k=0;h=0;while(1){i=c[n+4+(m*20|0)>>2]|0;if(!i){i=0;j=0}else{i=Pl(b,i)|0;j=L()|0;e=c[n>>2]|0}i=i|k;h=j|h;m=m+1|0;if((m|0)>=(e|0)){e=i;break}else k=i}}else{e=0;h=0}f=e|f;g=h|g}}else{n=Pl(b,e)|0;f=n|f;g=L()|0|g}while(0);if((a[d>>0]|0)!=-95){o=g;b=f;K(o|0);return b|0}d=d+44|0;e=c[d>>2]|0;if(!e){o=g;b=f;K(o|0);return b|0}n=c[e+8>>2]|0;if((n|0)!=0?(l=c[n>>2]|0,(l|0)>0):0){m=0;h=0;i=0;while(1){e=c[n+4+(m*20|0)>>2]|0;if(!e){j=0;k=0;e=l}else{j=Pl(b,e)|0;k=L()|0;e=c[n>>2]|0}h=j|h;i=k|i;m=m+1|0;if((m|0)>=(e|0))break;else l=e}e=c[d>>2]|0}else{h=0;i=0}m=h|f;l=i|g;k=c[e+12>>2]|0;if((k|0)!=0?(o=c[k>>2]|0,(o|0)>0):0){j=0;f=0;e=0;h=o;do{g=c[k+4+(j*20|0)>>2]|0;if(!g){g=0;i=0}else{g=Pl(b,g)|0;i=L()|0;h=c[k>>2]|0}f=g|f;e=i|e;j=j+1|0}while((j|0)<(h|0))}else{f=0;e=0}o=l|e;b=m|f;K(o|0);return b|0}function Ql(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(e>>>0>0|(e|0)==0&d>>>0>1){h=0;do{h=h+1|0;m=d;d=bw(d|0,e|0,1)|0;l=e;e=L()|0}while(l>>>0>0|(l|0)==0&m>>>0>3)}else h=0;m=c[a+8+(h*72|0)+40>>2]|0;h=c[(c[a+8+(h*72|0)+16>>2]|0)+8>>2]|0;if(!h){p=0;return p|0}l=(g|0)==0;a:while(1){j=h+40|0;b:do if(c[j>>2]|0?(n=h+50|0,o=b[n>>1]|0,o<<16>>16):0){k=h+4|0;if(l){a=0;d=o;while(1){if((b[(c[k>>2]|0)+(a<<1)>>1]|0)==-2){d=c[(c[j>>2]|0)+4+(a*20|0)>>2]|0;c:do if(!d)d=0;else while(1){e=c[d+4>>2]|0;if(!(e&4096))break c;if(!(e&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){d=0;break}}while(0);if(!(bk(0,0,d,m)|0))break a;d=b[n>>1]|0}a=a+1|0;if(a>>>0>=(d&65535)>>>0)break b}}i=0;d=o;do{if((b[(c[k>>2]|0)+(i<<1)>>1]|0)==-2){d=c[(c[j>>2]|0)+4+(i*20|0)>>2]|0;e=g;while(1){a=c[e+4>>2]|0;if(!(a&4096))break;if(!(a&262144))e=e+12|0;else e=(c[e+20>>2]|0)+4|0;e=c[e>>2]|0;if(!e){e=0;break}}d:do if(!d)d=0;else while(1){a=c[d+4>>2]|0;if(!(a&4096))break d;if(!(a&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){d=0;break}}while(0);if(!(bk(0,e,d,m)|0))break a;d=b[n>>1]|0}i=i+1|0}while(i>>>0<(d&65535)>>>0)}while(0);h=c[h+20>>2]|0;if(!h){h=0;p=41;break}}if((p|0)==41)return h|0;c[f>>2]=m;c[f+4>>2]=-2;p=1;return p|0}function Rl(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=b[f+12>>1]|0;i=b[g+12>>1]|0;j=i|h;if((h&62)==0|(i&62)==0)return;i=j&65535;if(!((i&26|0)==(i|0)|(i&38|0)==(i|0)))return;if(bk(0,c[(c[f>>2]|0)+12>>2]|0,c[(c[g>>2]|0)+12>>2]|0,-1)|0)return;if(bk(0,c[(c[f>>2]|0)+16>>2]|0,c[(c[g>>2]|0)+16>>2]|0,-1)|0)return;f=c[f>>2]|0;if(!f)return;h=dk(c[c[c[e>>2]>>2]>>2]|0,f,0,0)|0;if(!h)return;g=((i+65535&i|0)==0?j:(i&24|0)==0?32:8)&65535;f=53;while(1)if((2<<f+-53|0)==(g|0))break;else f=f+1|0;a[h>>0]=f;Nl(d,e,Ml(e,h,3)|0);return}function Sl(b,d){b=b|0;d=d|0;if((a[d>>0]|0)!=-95){d=0;return d|0}if(c[d+4>>2]&524288|0){d=0;return d|0}a[b+20>>0]=0;d=2;return d|0}function Tl(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;t=e+24|0;x=e+4|0;y=e+18|0;z=e+12|0;A=e+20|0;C=e+17|0;D=e+8|0;u=e+16|0;v=e+28|0;w=e+72|0;g=c[t>>2]|0;h=c[x>>2]|0;f=a[y>>0]|0;a:while(1){q=(f&255)+-1|0;s=b[e+72+(q<<1)>>1]|0;q=c[e+28+(q<<2)>>2]|0;r=s<<16>>16;s=s<<16>>16==-2;f=h;while(1){p=f+12|0;if((g|0)<(c[p>>2]|0)){o=(c[f+20>>2]|0)+(g*48|0)|0;while(1){do if((c[o+20>>2]|0)==(q|0)?(c[o+28>>2]|0)==(r|0):0){if(s){i=c[(c[o>>2]|0)+12>>2]|0;h=c[z>>2]|0;b:do if(!i)i=0;else while(1){j=c[i+4>>2]|0;if(!(j&4096))break b;if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);c:do if(!h)h=0;else while(1){j=c[h+4>>2]|0;if(!(j&4096))break c;if(!(j&262144))h=h+12|0;else h=(c[h+20>>2]|0)+4|0;h=c[h>>2]|0;if(!h){h=0;break}}while(0);if(bk(0,i,h,q)|0)break}if((d[y>>0]|0)>=2?c[(c[o>>2]|0)+4>>2]&1|0:0)break;n=o+12|0;h=b[n>>1]|0;if((h&2048)!=0?(B=a[C>>0]|0,(B&255)<11):0){i=c[(c[o>>2]|0)+16>>2]|0;j=c[i+4>>2]|0;if(j&4096)do{if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;j=c[i+4>>2]|0}while((j&4096|0)!=0);if((a[i>>0]|0)==-94){m=B&255;d:do if(!(B<<24>>24))j=0;else{l=c[i+28>>2]|0;k=i+32|0;j=0;do{if((c[e+28+(j<<2)>>2]|0)==(l|0)?(b[e+72+(j<<1)>>1]|0)==(b[k>>1]|0):0)break d;j=j+1|0}while(j>>>0<m>>>0)}while(0);if((j|0)==(m|0)){c[e+28+(m<<2)>>2]=c[i+28>>2];b[e+72+(m<<1)>>1]=b[i+32>>1]|0;a[C>>0]=B+1<<24>>24;h=b[n>>1]|0}}}i=h&65535;if(c[A>>2]&i|0){if((i&256|0)==0&(c[D>>2]|0)!=0){k=c[c[f>>2]>>2]|0;h=c[o>>2]|0;if(!(Vl(h,a[u>>0]|0)|0))break;i=c[h+12>>2]|0;j=c[h+16>>2]|0;do if(!(c[i+4>>2]&256)){if(j|0?c[j+4>>2]&256|0:0){h=Yi(k,j)|0;E=51;break}h=Yi(k,i)|0;if(!h){h=Yi(k,j)|0;E=51}}else{h=Yi(k,i)|0;E=51}while(0);if((E|0)==51){E=0;if(!h)h=c[(c[k>>2]|0)+8>>2]|0}i=c[h>>2]|0;j=c[D>>2]|0;m=a[i>>0]|0;h=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(h|0)!=0))do{i=i+1|0;j=j+1|0;m=a[i>>0]|0;h=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(h|0)!=0));if(h|0)break;h=b[n>>1]|0}if(!(h&130))break a;h=c[(c[o>>2]|0)+16>>2]|0;if((a[h>>0]|0)!=-94)break a;if((c[h+28>>2]|0)!=(c[v>>2]|0))break a;if((b[h+32>>1]|0)!=(b[w>>1]|0))break a}}while(0);g=g+1|0;if((g|0)<(c[p>>2]|0))o=o+48|0;else break}}f=c[f+4>>2]|0;if(!f)break;else g=0}f=a[y>>0]|0;if((f&255)>=(d[C>>0]|0)){f=0;E=67;break}h=c[e>>2]|0;f=f+1<<24>>24;a[y>>0]=f;g=0}if((E|0)==67)return f|0;c[x>>2]=f;c[t>>2]=g+1;E=o;return E|0}function Ul(b){b=b|0;var d=0;d=Xj(c[b+12>>2]|0)|0;a[b+16>>0]=d;return Tl(b)|0}function Vl(a,b){a=a|0;b=b|0;var d=0,e=0;e=Xj(c[a+12>>2]|0)|0;d=c[a+16>>2]|0;do if(!d){if(!(c[a+4>>2]&2048)){a=e<<24>>24==0?65:e;break}a=Xj(c[(c[c[a+20>>2]>>2]|0)+4>>2]|0)|0;if(e<<24>>24==0|a<<24>>24==0){a=(a|e)<<24>>24==0?65:(a&255)+(e&255)&255;break}else{a=e<<24>>24>66|a<<24>>24>66?67:65;break}}else{a=Xj(d)|0;if(e<<24>>24==0|a<<24>>24==0){a=(a|e)<<24>>24==0?65:(a&255)+(e&255)&255;break}else{a=e<<24>>24>66|a<<24>>24>66?67:65;break}}while(0);switch(a<<24>>24|0){case 66:{b=b<<24>>24==66;b=b&1;return b|0}case 65:{b=1;b=b&1;return b|0}default:{b=b<<24>>24>66;b=b&1;return b|0}}return 0}function Wl(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=Ra;Ra=Ra+16|0;p=K;H=K+4|0;s=c[f>>2]|0;J=c[s>>2]|0;r=c[f+4>>2]|0;F=c[f+12>>2]|0;s=c[s+4>>2]|0;x=d[F+16>>0]|0;B=c[f+8>>2]|0;G=r+20|0;q=r+12|0;n=c[q>>2]|0;if((n|0)>0){o=c[s+8+(x*72|0)+40>>2]|0;l=0;k=0;m=c[G>>2]|0;while(1){if((c[m+20>>2]|0)==(o|0)?(E=m+32|0,(c[E>>2]&i|0)==0?(c[E+4>>2]&j|0)==0:0):0)k=k+((b[m+12>>1]&-2049)<<16>>16!=0&1)|0;l=l+1|0;if((l|0)==(n|0)){o=k;break}else m=m+48|0}}else o=0;if(!B)y=0;else{n=c[B>>2]|0;a:do if((n|0)>0){m=s+8+(x*72|0)+40|0;k=0;do{l=c[B+4+(k*20|0)>>2]|0;if((a[l>>0]|0)!=-94)break a;if((c[l+28>>2]|0)!=(c[m>>2]|0))break a;k=k+1|0}while((k|0)<(n|0))}else k=0;while(0);y=(k|0)==(n|0)?n:0}m=c[J>>2]|0;n=(o*20|0)+80+(y<<3)|0;b:do if(!m){E=Sv(n|0,0,-1,-1)|0;C=L()|0;if(!(C>>>0>0|(C|0)==0&E>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;D=38;break}k=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){E=c[14978]|0;C=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&C>>>0<=E>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;E=l}else E=l}else D=39}else D=39}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){D=39;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];D=m+284|0;c[D>>2]=(c[D>>2]|0)+1;D=38;break b}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];D=m+284|0;c[D>>2]=(c[D>>2]|0)+1;D=38;break b}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;D=38}while(0);if((D|0)==38)if(!k)D=39;else E=k;if((D|0)==39){cd(J,34831,p);J=7;Ra=K;return J|0}gw(E|0,0,n|0)|0;v=E+80|0;w=v+(o*12|0)|0;c[E>>2]=o;c[E+8>>2]=y;C=E+4|0;c[C>>2]=v;c[E+12>>2]=w;c[E+16>>2]=w+(y<<3);c[E+72>>2]=r;c[E+76>>2]=J;t=c[q>>2]|0;if((t|0)>0){u=s+8+(x*72|0)+36|0;s=c[s+8+(x*72|0)+40>>2]|0;l=0;k=0;q=c[G>>2]|0;r=0;while(1){do if(((c[q+20>>2]|0)==(s|0)?(x=q+32|0,(c[x>>2]&i|0)==0?(c[x+4>>2]&j|0)==0:0):0)?(z=b[q+12>>1]|0,A=z&65535,(A&63487|0)!=0):0){if(a[u>>0]&8?!((A&384|0)==0?1:(c[(c[q>>2]|0)+4>>2]&1|0)!=0):0)break;c[v+(l*12|0)>>2]=c[q+28>>2];c[v+(l*12|0)+8>>2]=r;p=z&8191;p=p<<16>>16==1?2:p;m=p&65535;c:do if(p<<16>>16!=64){if(m&384|0){m=v+(l*12|0)+4|0;if(p<<16>>16==256){a[m>>0]=71;break}else{a[m>>0]=72;break}}o=v+(l*12|0)+4|0;a[o>>0]=p;if(m&60){n=c[(c[q>>2]|0)+16>>2]|0;m=a[n>>0]|0;if(m<<24>>24==-88)m=a[n+38>>0]|0;switch(m<<24>>24){case -87:{m=n+20|0;break}case -125:{m=c[n+20>>2]|0;break}default:break c}if((c[c[m>>2]>>2]|0)>=2){k=r>>>0<16?(1<<r|k&65535)&65535:k;switch(p&8191){case 16:{a[o>>0]=8;break c}case 4:{a[o>>0]=32;break c}default:break c}}}}else a[v+(l*12|0)+4>>0]=a[q+15>>0]|0;while(0);l=l+1|0}while(0);r=r+1|0;if((r|0)==(t|0)){i=k;break}else q=q+48|0}}else i=0;if((y|0)<=0){if(!E){J=7;Ra=K;return J|0}}else{k=0;do{c[w+(k<<3)>>2]=b[(c[B+4+(k*20|0)>>2]|0)+32>>1];a[w+(k<<3)+4>>0]=a[B+4+(k*20|0)+12>>0]|0;k=k+1|0}while((k|0)!=(y|0))}b[F+18>>1]=0;c[F+36>>2]=1024;b[F+40>>1]=0;a[F+28>>0]=0;A=c[E>>2]|0;k=c[J>>2]|0;o=F+44|0;d:do if((A|0)>(e[o>>1]|0)){p=A+7&-8;n=p<<2;e:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))D=80;else D=94;else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<n>>>0:0))){l=k+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];D=k+284|0;c[D>>2]=(c[D>>2]|0)+1;D=81;break e}l=k+296|0;m=c[l>>2]|0;if(!m){l=k+292|0;break}else{c[l>>2]=c[m>>2];D=k+284|0;c[D>>2]=(c[D>>2]|0)+1;D=81;break e}}else l=k+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;D=80}while(0);if((D|0)==80){m=_d(k,n,0)|0;D=81}do if((D|0)==81){if(!m){k=c[J>>2]|0;if(!k)break;else{D=94;break}}l=F+48|0;ew(m|0,c[l>>2]|0,e[o>>1]<<2|0)|0;n=c[l>>2]|0;do if((n|0)!=(F+56|0)){if(c[k+480>>2]|0){Xd(k,n);break}B=n;if((c[k+304>>2]|0)>>>0<=B>>>0?(c[k+308>>2]|0)>>>0>B>>>0:0){B=k+300|0;c[n>>2]=c[B>>2];c[B>>2]=n;break}if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{B=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[l>>2]=m;b[o>>1]=p;break d}while(0);if((D|0)==94){if(c[k+480>>2]|0){Xd(k,E);J=7;Ra=K;return J|0}J=E;if((c[k+304>>2]|0)>>>0<=J>>>0?(c[k+308>>2]|0)>>>0>J>>>0:0){J=k+300|0;c[E>>2]=c[J>>2];c[J>>2]=E;J=7;Ra=K;return J|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);J=7;Ra=K;return J|0}else{J=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);J=7;Ra=K;return J|0}}while(0);l=Zl(f,g,h,-1,-1,0,E,i,H)|0;if(!l){z=F;w=~g;x=~h;y=c[z>>2]&w;z=c[z+4>>2]&x;k=(c[H>>2]|0)!=0;if((y|0)!=0|(z|0)!=0|k){if(k){l=Zl(f,g,h,-1,-1,1,E,i,H)|0;n=F;k=c[n>>2]&w;n=c[n+4>>2]&x;m=(k|0)==0&(n|0)==0&1;if(!l){v=k;D=106}else k=m}else{m=0;v=0;n=0;D=106}f:do if((D|0)==106){u=(A|0)>0;k=m;o=0;l=0;while(1){if(!u){l=0;break f}q=c[G>>2]|0;r=c[C>>2]|0;while(1){p=0;t=-1;s=-1;do{D=q+((c[r+(p*12|0)+8>>2]|0)*48|0)+32|0;j=c[D>>2]&w;D=c[D+4>>2]&x;B=(D>>>0>l>>>0|(D|0)==(l|0)&j>>>0>o>>>0)&(D>>>0<t>>>0|(D|0)==(t|0)&j>>>0<s>>>0);s=B?j:s;t=B?D:t;p=p+1|0}while((p|0)!=(A|0));if((s|0)==-1&(t|0)==-1){l=0;break f}if((s|0)==(y|0)&(t|0)==(z|0)|(s|0)==(v|0)&(t|0)==(n|0)){l=t;o=s}else break}l=Zl(f,g,h,s|g,t|h,0,E,i,H)|0;D=F;if((c[D>>2]|0)==(g|0)?(c[D+4>>2]|0)==(h|0):0){k=(c[H>>2]|0)==0?1:k;m=1}if(!l){o=s;l=t}else break}}while(0);if(!(m|l)){l=Zl(f,g,h,g,h,0,E,i,H)|0;k=(c[H>>2]|0)==0?1:k}if(!(k|l))l=Zl(f,g,h,g,h,1,E,i,H)|0}else l=0}do if(c[E+28>>2]|0?(I=c[E+24>>2]|0,I|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](I);break}else{H=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);break}while(0);k=c[J>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,E);J=l;Ra=K;return J|0}J=E;if((c[k+304>>2]|0)>>>0<=J>>>0?(c[k+308>>2]|0)>>>0>J>>>0:0){J=k+300|0;c[E>>2]=c[J>>2];c[J>>2]=E;J=l;Ra=K;return J|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);J=l;Ra=K;return J|0}else{J=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);J=l;Ra=K;return J|0}return 0}function Xl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;ja=Ra;Ra=Ra+128|0;ca=ja+80|0;fa=ja+72|0;k=ja;l=ja+112|0;m=ja+108|0;b[m>>1]=-1;ha=c[f+12>>2]|0;_=c[f>>2]|0;P=c[_+4>>2]|0;Q=d[ha+16>>0]|0;$=P+8+(Q*72|0)|0;O=P+8+(Q*72|0)+16|0;R=c[O>>2]|0;aa=c[f+4>>2]|0;ba=P+8+(Q*72|0)+68|0;i=c[ba>>2]|0;o=(i|0)==0;do if(o){if(c[R+36>>2]&32|0){k=c[R+8>>2]|0;break}i=k;j=i+72|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));b[k+50>>1]=1;b[k+52>>1]=1;c[k+4>>2]=m;c[k+8>>2]=l;a[k+54>>0]=5;c[k+12>>2]=R;b[k+48>>1]=b[R+46>>1]|0;Z=k+55|0;a[Z>>0]=3;a[Z+1>>0]=0;b[l>>1]=b[R+44>>1]|0;b[l+2>>1]=0;if(!(a[P+8+(Q*72|0)+37>>0]&1))c[k+20>>2]=c[(c[O>>2]|0)+8>>2]}else k=i;while(0);m=b[R+44>>1]|0;if(m<<16>>16<11)i=0;else{i=m<<16>>16;j=((i|0)<0)<<31>>31;if((m&65535)>255){l=40;do{l=(l&65535)+40|0;Z=i;i=bw(i|0,j|0,4)|0;Y=j;j=L()|0}while(Y>>>0>0|(Y|0)==0&Z>>>0>4095);l=l&65535}else l=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{l=(l&65535)+10&65535;Z=i;i=bw(i|0,j|0,1)|0;Y=j;j=L()|0}while(Y>>>0>0|(Y|0)==0&Z>>>0>31);j=l}else j=l;i=(j&65535)+65493+(e[3648+((i&7)<<1)>>1]|0)&65535}a:do if((((((c[f+16>>2]|0)==0?(b[_+44>>1]&32)==0:0)?!((0==0?(c[(c[c[_>>2]>>2]|0)+32>>2]&32768|0)==0:0)|o^1):0)?(n=a[P+8+(Q*72|0)+37>>0]|0,(n&1)==0):0)?(M=R+36|0,(n&40)==0&(c[M>>2]&32|0)==0):0)?(I=c[aa+20>>2]|0,Z=c[aa+12>>2]|0,N=I+(Z*48|0)|0,(Z|0)>0):0){A=ha+8|0;B=P+8+(Q*72|0)+40|0;C=P+8+(Q*72|0)+36|0;D=ha+24|0;E=ha+42|0;F=ha+32|0;G=ha+40|0;H=ha+48|0;x=(i&65535)+(m&65535)|0;s=x&65535;t=ha+18|0;u=R+12|0;v=ha+22|0;n=i<<16>>16;w=(x&65535)+65526|0;x=(x<<16>>16)+28|0;y=ha+20|0;z=ha+36|0;o=i<<16>>16<12;p=i<<16>>16>74;q=18112+(43-n)|0;r=18112+(n+-43)|0;if(i<<16>>16<43){m=i<<16>>16<-6?43:44;l=I;while(1){j=l+32|0;Z=j;Y=A;do if((((c[Y>>2]&c[Z>>2]|0)==0?(c[Y+4>>2]&c[Z+4>>2]|0)==0:0)?(c[l+20>>2]|0)==(c[B>>2]|0):0)?(J=e[l+12>>1]|0,(J&130|0)!=0):0){if(a[C>>0]&8?!((J&128|0)==0?1:(c[(c[l>>2]|0)+4>>2]&1|0)!=0):0){i=0;break}i=c[l+28>>2]|0;if((i|0)>=0?(Vl(c[l>>2]|0,a[(c[(c[O>>2]|0)+4>>2]|0)+(i<<4)+13>>0]|0)|0)!=0:0){b[D>>1]=1;b[E>>1]=0;c[F>>2]=0;b[G>>1]=1;c[c[H>>2]>>2]=l;b[t>>1]=s;if(!(c[u>>2]|0))i=(c[M>>2]&2|0)==0?x:w;else i=w;b[t>>1]=(i&32768|0)==0?i&65535:0;b[v>>1]=43;if(o)i=m;else i=(d[q>>0]|0)+43&65535;b[y>>1]=i;c[z>>2]=16384;Y=j;Z=c[Y+4>>2]|h;i=ha;c[i>>2]=c[Y>>2]|g;c[i+4>>2]=Z;i=_l(f,ha)|0}else i=0}else i=0;while(0);l=l+48|0;if(!(l>>>0<N>>>0&(i|0)==0))break a}}m=i<<16>>16>92?i:n+1&65535;l=I;do{j=l+32|0;Z=j;Y=A;do if((((c[Y>>2]&c[Z>>2]|0)==0?(c[Y+4>>2]&c[Z+4>>2]|0)==0:0)?(c[l+20>>2]|0)==(c[B>>2]|0):0)?(K=e[l+12>>1]|0,(K&130|0)!=0):0){if(a[C>>0]&8?!((K&128|0)==0?1:(c[(c[l>>2]|0)+4>>2]&1|0)!=0):0){i=0;break}i=c[l+28>>2]|0;if((i|0)>=0?(Vl(c[l>>2]|0,a[(c[(c[O>>2]|0)+4>>2]|0)+(i<<4)+13>>0]|0)|0)!=0:0){b[D>>1]=1;b[E>>1]=0;c[F>>2]=0;b[G>>1]=1;c[c[H>>2]>>2]=l;b[t>>1]=s;if((c[u>>2]|0)==0?(c[M>>2]&2|0)==0:0)i=x;else i=w;b[t>>1]=(i&32768|0)==0?i&65535:0;b[v>>1]=43;if(p)i=m;else i=(d[r>>0]|0)+n&65535;b[y>>1]=i;c[z>>2]=16384;Y=j;Z=c[Y+4>>2]|h;i=ha;c[i>>2]=c[Y>>2]|g;c[i+4>>2]=Z;i=_l(f,ha)|0}else i=0}else i=0;while(0);l=l+48|0}while(l>>>0<N>>>0&(i|0)==0)}else i=0;while(0);Z=ha+36|0;if(!((i|0)==0&(k|0)!=0)){ia=i;Ra=ja;return ia|0}I=P+8+(Q*72|0)+40|0;J=ha+24|0;K=ha+26|0;M=ha+28|0;N=ha+42|0;O=ha+40|0;S=ha+17|0;T=ha+18|0;U=ha+22|0;V=ha+32|0;W=ha+20|0;X=f+20|0;Y=R+36|0;H=P+8+(Q*72|0)+56|0;A=R+46|0;B=_+92|0;C=_+100|0;D=fa+4|0;E=ca+4|0;F=ca+24|0;z=ca+20|0;G=_+44|0;y=1;b:while(1){w=k+36|0;i=c[w>>2]|0;if((i|0)!=0?(bm(c[I>>2]|0,aa,i)|0)==0:0)i=0;else{v=k+55|0;if(!((d[v>>0]|d[v+1>>0]<<8)&256)){x=b[c[k+8>>2]>>1]|0;b[J>>1]=0;b[K>>1]=0;b[M>>1]=0;b[N>>1]=0;b[O>>1]=0;a[S>>0]=0;b[T>>1]=0;r=ha;c[r>>2]=g;c[r+4>>2]=h;b[U>>1]=x;c[V>>2]=k;r=c[I>>2]|0;c:do if((((d[v>>0]|d[v+1>>0]<<8)&4)==0?(da=c[(c[f>>2]|0)+8>>2]|0,(da|0)!=0):0)?(ea=c[da>>2]|0,(ea|0)>0):0){s=k+40|0;t=k+50|0;u=k+4|0;q=0;i=ea;while(1){j=c[da+4+(q*20|0)>>2]|0;d:do if(!j)j=0;else while(1){l=c[j+4>>2]|0;if(!(l&4096))break d;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);if((a[j>>0]|0)==-94?(c[j+28>>2]|0)==(r|0):0){m=b[j+32>>1]|0;if(m<<16>>16<0){j=1;break c}j=b[t>>1]|0;if(j<<16>>16){n=c[u>>2]|0;l=j&65535;j=0;do{if(m<<16>>16==(b[n+(j<<1)>>1]|0)){j=1;break c}j=j+1|0}while(j>>>0<l>>>0)}}else ia=75;e:do if((ia|0)==75){ia=0;p=c[s>>2]|0;if((p|0)!=0?(ga=b[t>>1]|0,ga<<16>>16!=0):0){if(!j){n=c[u>>2]|0;o=ga&65535;m=0;while(1){f:do if((b[n+(m<<1)>>1]|0)==-2){j=c[p+4+(m*20|0)>>2]|0;if(!j){j=1;break c}while(1){l=c[j+4>>2]|0;if(!(l&4096))break f;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=1;break c}}}while(0);m=m+1|0;if(m>>>0>=o>>>0)break e}}n=0;i=ga;do{if((b[(c[u>>2]|0)+(n<<1)>>1]|0)==-2){i=c[p+4+(n*20|0)>>2]|0;l=j;while(1){m=c[l+4>>2]|0;if(!(m&4096))break;if(!(m&262144))l=l+12|0;else l=(c[l+20>>2]|0)+4|0;l=c[l>>2]|0;if(!l){l=0;break}}g:do if(!i)i=0;else while(1){m=c[i+4>>2]|0;if(!(m&4096))break g;if(!(m&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);if(!(bk(0,l,i,r)|0)){j=1;break c}i=b[t>>1]|0}n=n+1|0}while(n>>>0<(i&65535)>>>0);i=c[da>>2]|0}}while(0);q=q+1|0;if((q|0)>=(i|0)){j=0;break}}}else j=0;while(0);i=d[v>>0]|d[v+1>>0]<<8;do if((i&3)==3){c[Z>>2]=256;a[S>>0]=(j|0)==0?0:y&255;b[W>>1]=(x&65535)+16;cm(aa,ha,x);i=_l(f,ha)|0;b[U>>1]=x;if(i|0){ia=147;break b}}else{if(!(i&32)){i=H;m=k+64|0;R=c[m>>2]&c[i>>2];i=c[m+4>>2]&c[i+4>>2];m=R;n=i;i=(R|0)==0&(i|0)==0?576:512}else{m=0;n=0;i=576}c[Z>>2]=i;i=(j|0)!=0;if((!i?(c[Y>>2]&32|0)==0:0)?(c[w>>2]|0)==0:0){if(!((m|0)==0&(n|0)==0))break;if((d[v>>0]|d[v+1>>0]<<8)&4)break;if((b[k+48>>1]|0)>=(b[A>>1]|0))break;if(!((b[G>>1]&4)==0&(c[7328]|0)!=0))break;if(b[(c[c[_>>2]>>2]|0)+76>>1]&32)break}a[S>>0]=i?y&255:0;i=x<<16>>16;l=i+1+(((b[k+48>>1]|0)*15|0)/(b[A>>1]|0)|0)&65535;b[W>>1]=l;if(!((m|0)==0&(n|0)==0)){i=i+16&65535;n=c[I>>2]|0;if((c[B>>2]|0)>0){m=0;do{l=c[C>>2]|0;j=c[l+(m*48|0)>>2]|0;c[ca>>2]=0;c[ca+4>>2]=0;c[ca+8>>2]=0;c[ca+12>>2]=0;c[ca+16>>2]=0;c[ca+20>>2]=0;c[D>>2]=n;c[fa>>2]=k;c[E>>2]=148;c[F>>2]=fa;if(j){_j(ca,j)|0;if(a[z>>0]|0)break}j=b[l+(m*48|0)+8>>1]|0;do if(j<<16>>16<1)i=(j&65535)+(i&65535)&65535;else{i=i+-1<<16>>16;if(!(b[l+(m*48|0)+12>>1]&130))break;i=(i&65535)+65517&65535}while(0);m=m+1|0}while((m|0)<(c[B>>2]|0));l=b[W>>1]|0}j=l<<16>>16;m=i<<16>>16;do if(l<<16>>16<i<<16>>16){if((j+49|0)>=(m|0))if((j+31|0)<(m|0)){i=m+1&65535;break}else{i=(d[18112+(m-j)>>0]|0)+m&65535;break}}else if((m+49|0)>=(j|0))if((m+31|0)<(j|0)){i=j+1&65535;break}else{i=(d[18112+(j-m)>>0]|0)+j&65535;break}else i=l;while(0);b[W>>1]=i}cm(aa,ha,x);i=_l(f,ha)|0;b[U>>1]=x;if(i|0){ia=147;break b}}while(0);c[X>>2]=0;i=dm(f,$,k,0)|0;if((c[X>>2]|0)==1)c[Y>>2]=c[Y>>2]|256}else i=0}if(c[ba>>2]|0){ia=147;break}k=c[k+20>>2]|0;if(!((i|0)==0&(k|0)!=0)){ia=147;break}else y=y+1|0}if((ia|0)==147){Ra=ja;return i|0}return 0}function Yl(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;ia=Ra;Ra=Ra+608|0;ba=ia+168|0;da=ia+576|0;ha=ia+112|0;ea=ia+56|0;fa=ia;k=c[f>>2]|0;_=c[f+4>>2]|0;o=c[_+20>>2]|0;n=c[_+12>>2]|0;$=o+(n*48|0)|0;aa=c[f+12>>2]|0;l=ha;m=l+56|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));k=c[k+4>>2]|0;l=d[aa+16>>0]|0;Z=c[k+8+(l*72|0)+40>>2]|0;if((n|0)<=0){ha=0;Ra=ia;return ha|0}W=aa+8|0;X=da+8|0;Y=da+16|0;E=k+8+(l*72|0)+16|0;F=da+4|0;G=ba+4|0;H=ba+8|0;I=ba+12|0;J=ba+20|0;K=fa+8|0;L=ha+8|0;M=ea+8|0;N=ha+16|0;O=aa+40|0;P=aa+48|0;Q=aa+36|0;R=aa+18|0;S=aa+17|0;T=aa+24|0;U=aa+20|0;V=aa+22|0;k=0;a:while(1){b:do if((b[o+12>>1]&512)!=0?(ca=c[o+28>>2]|0,D=ca+408|0,C=W,!((c[C>>2]&c[D>>2]|0)==0?(c[C+4>>2]&c[D+4>>2]|0)==0:0)):0){l=ca+20|0;D=(c[l>>2]|0)+((c[ca+12>>2]|0)*48|0)|0;c[da>>2]=c[f>>2];c[da+4>>2]=c[f+4>>2];c[da+8>>2]=c[f+8>>2];c[da+12>>2]=c[f+12>>2];c[da+16>>2]=c[f+16>>2];c[da+20>>2]=c[f+20>>2];c[da+24>>2]=c[f+24>>2];c[X>>2]=0;c[Y>>2]=ea;l=c[l>>2]|0;c:do if(l>>>0<D>>>0){n=1;C=l;l=0;do{if(!(b[C+12>>1]&1024)){if((c[C+20>>2]|0)==(Z|0)){c[ba>>2]=c[_>>2];c[G>>2]=_;a[H>>0]=44;c[I>>2]=1;c[J>>2]=C;l=ba;ga=11}}else{l=c[C+28>>2]|0;ga=11}do if((ga|0)==11){ga=0;c[F>>2]=l;b[ea>>1]=0;if(!(c[(c[E>>2]|0)+56>>2]|0))l=Xl(da,g,h)|0;else l=Wl(da,g,h,i,j)|0;if(!l)l=Yl(da,g,h,i,j)|0;m=b[ea>>1]|0;if(!(m<<16>>16)){k=0;break c}if(n|0){ew(L|0,M|0,(m&65535)<<4|0)|0;n=0;k=m;break}b[fa>>1]=k;B=k&65535;ew(K|0,L|0,B<<4|0)|0;if(!(k<<16>>16))k=0;else{x=m&65535;w=0;k=0;do{y=fa+8+(w<<4)|0;z=fa+8+(w<<4)+8|0;A=fa+8+(w<<4)+10|0;v=0;do{u=y;m=ea+8+(v<<4)|0;t=c[m>>2]|c[u>>2];u=c[m+4>>2]|c[u+4>>2];m=b[z>>1]|0;n=b[ea+8+(v<<4)+8>>1]|0;p=m<<16>>16;q=n<<16>>16;do if(m<<16>>16<n<<16>>16){if((p+49|0)<(q|0)){m=n;break}if((p+31|0)<(q|0)){m=q+1&65535;break}else{m=(d[18112+(q-p)>>0]|0)+q&65535;break}}else{if((q+49|0)<(p|0))break;if((q+31|0)<(p|0)){m=p+1&65535;break}else{m=(d[18112+(p-q)>>0]|0)+p&65535;break}}while(0);n=b[A>>1]|0;p=b[ea+8+(v<<4)+10>>1]|0;q=n<<16>>16;r=p<<16>>16;do if(n<<16>>16<p<<16>>16){if((q+49|0)<(r|0))break;if((q+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-q)>>0]|0)+r&65535;break}}else{if((r+49|0)<(q|0)){p=n;break}if((r+31|0)<(q|0)){p=q+1&65535;break}else{p=(d[18112+(q-r)>>0]|0)+q&65535;break}}while(0);d:do if(k<<16>>16){n=k;r=L;while(1){q=b[r+8>>1]|0;if(q<<16>>16>=m<<16>>16?(s=r,(c[s>>2]&t|0)==(t|0)?(c[s+4>>2]&u|0)==(u|0):0):0){ga=52;break}if(q<<16>>16<=m<<16>>16?(s=r,q=c[s>>2]|0,s=c[s+4>>2]|0,(q&t|0)==(q|0)&(s&u|0)==(s|0)):0)break d;n=n+-1<<16>>16;if(!(n<<16>>16))break;else r=r+16|0}if((ga|0)==52){q=r;n=r+8|0;ga=53;break}if((k&65535)<3){ga=48;break}r=k&65535;s=L;n=b[N>>1]|0;q=1;do{s=n<<16>>16>(b[ha+8+(q<<4)+8>>1]|0)?ha+8+(q<<4)|0:s;q=q+1|0;n=b[s+8>>1]|0}while((q|0)!=(r|0));if(n<<16>>16>m<<16>>16){q=s;n=s+8|0;ga=53}}else ga=48;while(0);if((ga|0)==48){n=k&65535;b[ha+8+(n<<4)+10>>1]=p;q=ha+8+(n<<4)|0;n=ha+8+(n<<4)+8|0;k=k+1<<16>>16;ga=53}do if((ga|0)==53){ga=0;s=q;c[s>>2]=t;c[s+4>>2]=u;b[n>>1]=m;m=q+10|0;if((b[m>>1]|0)<=p<<16>>16)break;b[m>>1]=p}while(0);v=v+1|0}while((v|0)!=(x|0));w=w+1|0}while((w|0)!=(B|0))}n=0}while(0);C=C+48|0}while(C>>>0<D>>>0)}else l=0;while(0);b[O>>1]=1;c[c[P>>2]>>2]=o;c[Q>>2]=8192;b[R>>1]=0;a[S>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;if(l|0)break a;n=k&65535;m=0;while(1){if(m>>>0>=n>>>0)break b;b[U>>1]=(e[ha+8+(m<<4)+8>>1]|0)+1;b[V>>1]=b[ha+8+(m<<4)+10>>1]|0;C=ha+8+(m<<4)|0;D=c[C+4>>2]|0;l=aa;c[l>>2]=c[C>>2];c[l+4>>2]=D;l=_l(f,aa)|0;if(!l)m=m+1|0;else break a}}while(0);o=o+48|0;if(o>>>0>=$>>>0){l=0;break}}b[ha>>1]=k;ha=l;Ra=ia;return ha|0}function Zl(f,i,j,k,l,m,n,o,p){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=Ra;Ra=Ra+32|0;P=U+24|0;M=U+16|0;x=U+8|0;y=U;B=c[f+4>>2]|0;G=c[n+16>>2]|0;T=c[f+12>>2]|0;v=c[f>>2]|0;O=c[v>>2]|0;v=c[v+4>>2]|0;w=d[T+16>>0]|0;I=c[n>>2]|0;c[p>>2]=0;C=T;c[C>>2]=i;c[C+4>>2]=j;C=n+4|0;z=(I|0)>0;if(z){q=c[B+20>>2]|0;i=c[C>>2]|0;j=0;while(1){S=c[i+8>>2]|0;u=i+5|0;a[u>>0]=0;Q=q+(S*48|0)+32|0;N=c[Q>>2]|0;Q=c[Q+4>>2]|0;if((N&k|0)==(N|0)&(Q&l|0)==(Q|0)?(b[q+(S*48|0)+12>>1]&m)<<16>>16==0:0)a[u>>0]=1;j=j+1|0;if((j|0)==(I|0))break;else i=i+12|0}}gw(G|0,0,I<<3|0)|0;J=n+24|0;c[J>>2]=0;E=n+20|0;c[E>>2]=0;K=n+32|0;c[K>>2]=0;N=n+40|0;g[N>>3]=5.e+98;Q=n+48|0;S=Q;c[S>>2]=25;c[S+4>>2]=0;S=n+56|0;c[S>>2]=0;j=v+8+(w*72|0)+56|0;i=c[j+4>>2]|0;D=n+64|0;c[D>>2]=c[j>>2];c[D+4>>2]=i;D=v+8+(w*72|0)+16|0;i=c[(c[D>>2]|0)+64>>2]|0;j=c[O>>2]|0;if((c[i>>2]|0)!=(j|0))do i=c[i+24>>2]|0;while((c[i>>2]|0)!=(j|0));q=c[i+8>>2]|0;u=Xa[c[(c[q>>2]|0)+12>>2]&255](q,n)|0;a:do switch(u|0){case 0:case 19:break;case 7:{i=c[O>>2]|0;j=i+81|0;if((a[j>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;A=i+272|0;c[A>>2]=(c[A>>2]|0)+1;i=c[i+236>>2]|0;if(i|0)c[i+12>>2]=7}break}default:{i=c[q+8>>2]|0;if(i|0){c[x>>2]=i;cd(O,31408,x);break a}switch(u|0){case 516:{i=50738;break}case 100:{i=50760;break}case 101:{i=50782;break}default:{i=u&255;if(i>>>0<29?(520028155>>>i&1|0)!=0:0)i=c[22960+(i<<2)>>2]|0;else i=50724}}c[y>>2]=i;cd(O,31408,y)}}while(0);i=q+8|0;j=c[i>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0;switch(u|0){case 0:{do if(z){j=T+48|0;i=0;do{c[(c[j>>2]|0)+(i<<2)>>2]=0;i=i+1|0}while((i|0)!=(I|0));A=T+24|0;i=T+30|0;b[i>>1]=0;if(z){y=B+12|0;z=T+48|0;x=B+20|0;u=-1;v=c[C>>2]|0;w=0;while(1){q=c[G+(w<<3)>>2]|0;k=q+-1|0;if((q|0)>0){l=c[v+8>>2]|0;if((q|0)>(I|0)|(l|0)<0)break;if((l|0)>=(c[y>>2]|0))break;j=(c[z>>2]|0)+(k<<2)|0;if(c[j>>2]|0)break;if(!(a[v+5>>0]|0))break;m=c[x>>2]|0;V=m+(l*48|0)+32|0;W=T;B=c[W+4>>2]|c[V+4>>2];C=T;c[C>>2]=c[W>>2]|c[V>>2];c[C+4>>2]=B;c[j>>2]=m+(l*48|0);u=(k|0)>(u|0)?k:u;if((q|0)<17?a[G+(w<<3)+4>>0]|0:0)b[i>>1]=1<<k|e[i>>1];if(b[m+(l*48|0)+12>>1]&1){c[K>>2]=0;c[S>>2]=c[S>>2]&-2;c[p>>2]=1}}w=w+1|0;if((w|0)>=(I|0)){R=50;break}else v=v+12|0}if((R|0)==50){j=b[i>>1]|0;q=A;k=A;break}c[M>>2]=c[c[D>>2]>>2];cd(O,43661,M);W=1;Ra=U;return W|0}else{u=-1;j=0;q=A;k=A}}else{k=T+24|0;i=T+30|0;b[i>>1]=0;u=-1;j=0;q=k}while(0);b[i>>1]=j&~o;b[T+40>>1]=u+1;b:do if((u|0)>=0){j=c[T+48>>2]|0;i=0;while(1){if(!(c[j+(i<<2)>>2]|0))break;if((i|0)<(u|0))i=i+1|0;else break b}c[P>>2]=c[c[D>>2]>>2];cd(O,43661,P);W=1;Ra=U;return W|0}while(0);c[q>>2]=c[E>>2];u=n+28|0;l=T+28|0;a[l>>0]=c[u>>2];c[u>>2]=0;u=T+32|0;c[u>>2]=c[J>>2];if(!(c[K>>2]|0))i=0;else i=c[n+8>>2]&255;a[k+5>>0]=i;b[T+18>>1]=0;r=+g[N>>3];g[h>>3]=r;i=c[h>>2]|0;j=c[h+4>>2]|0;do if(!(r<=1.0)){if(!(r<=2.0e9)){i=bw(i|0,j|0,52)|0;L()|0;i=(i*10|0)+55316&65535;break}i=~~r>>>0;j=+t(r)>=1.0?(r>0.0?~~+H(+s(r/4294967296.0),4294967295.0)>>>0:~~+F((r-+(~~r>>>0))/4294967296.0)>>>0):0;if(!(j>>>0<0|(j|0)==0&i>>>0<8)){if(j>>>0>0|(j|0)==0&i>>>0>255){q=40;do{q=(q&65535)+40|0;W=i;i=bw(i|0,j|0,4)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>4095);q=q&65535}else q=40;if(j>>>0>0|(j|0)==0&i>>>0>15)do{q=(q&65535)+10&65535;W=i;i=bw(i|0,j|0,1)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>31)}else{if(j>>>0<0|(j|0)==0&i>>>0<2){i=0;break}q=40;do{q=(q&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);q=q&65535}i=(q&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)&65535}else i=0;while(0);b[T+20>>1]=i;j=Q;i=c[j>>2]|0;j=c[j+4>>2]|0;if(j>>>0<0|(j|0)==0&i>>>0<8)if(j>>>0<0|(j|0)==0&i>>>0<2)i=0;else{q=40;do{q=(q&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);q=q&65535;R=88}else{if(j>>>0>0|(j|0)==0&i>>>0>255){q=40;do{q=(q&65535)+40|0;W=i;i=bw(i|0,j|0,4)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>4095);q=q&65535}else q=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{q=(q&65535)+10&65535;W=i;i=bw(i|0,j|0,1)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>31);R=88}else R=88}if((R|0)==88)i=(q&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)&65535;b[T+22>>1]=i;j=T+36|0;W=c[j>>2]|0;c[j>>2]=(c[S>>2]&1|0)==0?W&-4097:W|4096;j=_l(f,T)|0;if(!(a[l>>0]|0)){W=j;Ra=U;return W|0}i=c[u>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{W=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-W;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);a[l>>0]=0;W=j;Ra=U;return W|0}case 19:{W=0;Ra=U;return W|0}default:{W=u;Ra=U;return W|0}}return 0}function _l(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;k=c[f>>2]|0;B=c[c[k>>2]>>2]|0;h=f+24|0;i=c[h>>2]|0;if(!i){f=c[f+16>>2]|0;if(!f){g=101;return g|0}b[f>>1]=0;g=101;return g|0}c[h>>2]=i+-1;p=c[f+16>>2]|0;if(p|0){if(!(b[g+40>>1]|0)){g=0;return g|0}m=g;l=c[m>>2]|0;m=c[m+4>>2]|0;n=b[g+20>>1]|0;o=b[g+22>>1]|0;j=b[p>>1]|0;i=p+8|0;do if(j<<16>>16){f=j;k=i;while(1){h=b[k+8>>1]|0;if(h<<16>>16>=n<<16>>16?(g=k,(c[g>>2]&l|0)==(l|0)?(c[g+4>>2]&m|0)==(m|0):0):0){v=18;break}if(h<<16>>16<=n<<16>>16?(g=k,B=c[g>>2]|0,g=c[g+4>>2]|0,(B&l|0)==(B|0)&(g&m|0)==(g|0)):0){f=0;v=157;break}f=f+-1<<16>>16;if(!(f<<16>>16)){v=13;break}else k=k+16|0}if((v|0)==13){if((j&65535)<3){v=14;break}j=j&65535;f=b[p+16>>1]|0;h=1;do{i=f<<16>>16>(b[p+8+(h<<4)+8>>1]|0)?p+8+(h<<4)|0:i;h=h+1|0;f=b[i+8>>1]|0}while((h|0)!=(j|0));if(f<<16>>16>n<<16>>16){h=i;f=i+8|0;break}else f=0;return f|0}else if((v|0)==18){h=k;f=k+8|0;break}else if((v|0)==157)return f|0}else v=14;while(0);if((v|0)==14){f=j&65535;b[p>>1]=j+1<<16>>16;b[p+8+(f<<4)+10>>1]=o;h=p+8+(f<<4)|0;f=p+8+(f<<4)+8|0}g=h;c[g>>2]=l;c[g+4>>2]=m;b[f>>1]=n;f=h+10|0;if((b[f>>1]|0)<=o<<16>>16){g=0;return g|0}b[f>>1]=o;g=0;return g|0}f=k+60|0;p=c[f>>2]|0;A=g+36|0;n=c[A>>2]|0;k=(p|0)==0;if(!(k|(n&512|0)==0)){l=g+20|0;m=g+22|0;i=a[g+16>>0]|0;h=p;do{do if((a[h+16>>0]|0)==i<<24>>24?c[h+36>>2]&512|0:0){if(am(h,g)|0){b[l>>1]=b[h+20>>1]|0;b[m>>1]=(e[h+22>>1]|0)+65535;break}if(am(g,h)|0){b[l>>1]=b[h+20>>1]|0;b[m>>1]=(e[h+22>>1]|0)+1}}while(0);h=c[h+52>>2]|0}while((h|0)!=0)}a:do if(k)v=57;else{q=a[g+16>>0]|0;r=g+17|0;o=g+42|0;s=g+18|0;t=g+20|0;u=g+22|0;if((n&513|0)!=513){m=p;while(1){if((a[m+16>>0]|0)==q<<24>>24?(a[m+17>>0]|0)==(a[r>>0]|0):0){v=m;p=c[v>>2]|0;v=c[v+4>>2]|0;i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;k=h&p;l=i&v;if((((k|0)==(p|0)&(l|0)==(v|0)?(b[m+18>>1]|0)<=(b[s>>1]|0):0)?(b[m+20>>1]|0)<=(b[t>>1]|0):0)?(b[m+22>>1]|0)<=(b[u>>1]|0):0){f=0;break}if(((k|0)==(h|0)&(l|0)==(i|0)?(b[m+20>>1]|0)>=(b[t>>1]|0):0)?(b[m+22>>1]|0)>=(b[u>>1]|0):0){v=57;break a}}f=m+52|0;m=c[f>>2]|0;if(!m){i=f;v=58;break a}}return f|0}m=p;while(1){if((a[m+16>>0]|0)==q<<24>>24?(a[m+17>>0]|0)==(a[r>>0]|0):0){if((c[m+36>>2]&16384|0?(b[o>>1]|0)==0:0)?(p=m,v=g,n=c[v>>2]|0,v=c[v+4>>2]|0,(n&c[p>>2]|0)==(n|0)?(v&c[p+4>>2]|0)==(v|0):0):0){v=57;break a}v=m;p=c[v>>2]|0;v=c[v+4>>2]|0;i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;k=h&p;l=i&v;if((((k|0)==(p|0)&(l|0)==(v|0)?(b[m+18>>1]|0)<=(b[s>>1]|0):0)?(b[m+20>>1]|0)<=(b[t>>1]|0):0)?(b[m+22>>1]|0)<=(b[u>>1]|0):0){f=0;break}if(((k|0)==(h|0)&(l|0)==(i|0)?(b[m+20>>1]|0)>=(b[t>>1]|0):0)?(b[m+22>>1]|0)>=(b[u>>1]|0):0){v=57;break a}}f=m+52|0;m=c[f>>2]|0;if(!m){i=f;v=58;break a}}return f|0}while(0);b:do if((v|0)==57){u=c[f>>2]|0;if(u){f=u+52|0;h=c[f>>2]|0;if(h){o=g+16|0;p=g+17|0;q=g+42|0;r=g+18|0;s=g+20|0;t=g+22|0;do{n=a[o>>0]|0;while(1){if((a[h+16>>0]|0)==n<<24>>24?(a[h+17>>0]|0)==(a[p>>0]|0):0){if(((c[h+36>>2]&16384|0?(b[q>>1]|0)==0:0)?(c[A>>2]&513|0)==513:0)?(l=h,m=g,k=c[m>>2]|0,m=c[m+4>>2]|0,(k&c[l>>2]|0)==(k|0)?(m&c[l+4>>2]|0)==(m|0):0):0)break;C=h;D=c[C>>2]|0;C=c[C+4>>2]|0;k=g;i=c[k>>2]|0;k=c[k+4>>2]|0;l=i&D;m=k&C;if((((l|0)==(D|0)&(m|0)==(C|0)?(b[h+18>>1]|0)<=(b[r>>1]|0):0)?(b[h+20>>1]|0)<=(b[s>>1]|0):0)?(b[h+22>>1]|0)<=(b[t>>1]|0):0)break b;if(((l|0)==(i|0)&(m|0)==(k|0)?(b[h+20>>1]|0)>=(b[s>>1]|0):0)?(b[h+22>>1]|0)>=(b[t>>1]|0):0)break}f=h+52|0;h=c[f>>2]|0;if(!h)break b}c[f>>2]=c[h+52>>2];$l(B,h);h=c[f>>2]|0}while((h|0)!=0)}}else{i=f;v=58}}while(0);do if((v|0)==58){c:do if(c[B+272>>2]|0)if(!(a[B+81>>0]|0))v=69;else{c[i>>2]=0;D=7;return D|0}else{do if((e[B+276>>1]|0)>=72){h=B+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];D=B+284|0;c[D>>2]=(c[D>>2]|0)+1;break c}h=B+296|0;f=c[h>>2]|0;if(!f){f=B+292|0;break}else{c[h>>2]=c[f>>2];D=B+284|0;c[D>>2]=(c[D>>2]|0)+1;break c}}else f=B+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;v=69}while(0);if((v|0)==69)f=_d(B,72,0)|0;c[i>>2]=f;if(!f){D=7;return D|0}else{c[f+48>>2]=f+56;b[f+40>>1]=0;b[f+44>>1]=3;c[f+36>>2]=0;c[f+52>>2]=0;u=f;break}}while(0);l=u+36|0;f=c[l>>2]|0;do if(f&17408|0){if(f&1024|0?(x=u+28|0,a[x>>0]|0):0){f=u+32|0;h=c[f>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{D=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);a[x>>0]=0;c[f>>2]=0;break}if(f&16384|0?(y=u+32|0,w=c[y>>2]|0,w|0):0){f=c[w+16>>2]|0;d:do if(f){do if(B|0){h=B+480|0;if(!(c[h>>2]|0)){i=f;if((c[B+304>>2]|0)>>>0>i>>>0)break;if((c[B+308>>2]|0)>>>0<=i>>>0)break;D=B+300|0;c[f>>2]=c[D>>2];c[D>>2]=f}else Xd(B,f);f=c[y>>2]|0;v=113;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);v=111;break}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);v=111;break}}else v=111;while(0);if((v|0)==111){f=c[y>>2]|0;if(!B){z=f;v=118}else{h=B+480|0;v=113}}do if((v|0)==113){if(c[h>>2]|0){Xd(B,f);break}D=f;if((c[B+304>>2]|0)>>>0<=D>>>0?(c[B+308>>2]|0)>>>0>D>>>0:0){D=B+300|0;c[f>>2]=c[D>>2];c[D>>2]=f}else{z=f;v=118}}while(0);do if((v|0)==118?z|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{D=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}while(0);c[y>>2]=0}}while(0);f=b[g+40>>1]|0;k=u+44|0;do if((e[k>>1]|0)<(f&65535)){i=(f&65535)+7&131064;h=i<<2;e:do if(c[B+272>>2]|0){if(!(a[B+81>>0]|0))v=135}else{do if(!(0<0|(0==0?(e[B+276>>1]|0)>>>0<h>>>0:0))){f=B+300|0;j=c[f>>2]|0;if(j|0){c[f>>2]=c[j>>2];v=B+284|0;c[v>>2]=(c[v>>2]|0)+1;v=136;break e}f=B+296|0;j=c[f>>2]|0;if(!j){f=B+292|0;break}else{c[f>>2]=c[j>>2];v=B+284|0;c[v>>2]=(c[v>>2]|0)+1;v=136;break e}}else f=B+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;v=135}while(0);if((v|0)==135){j=_d(B,h,0)|0;v=136}if((v|0)==136?j|0:0){f=u+48|0;ew(j|0,c[f>>2]|0,e[k>>1]<<2|0)|0;h=c[f>>2]|0;do if((h|0)!=(u+56|0)){if(c[B+480>>2]|0){Xd(B,h);break}D=h;if((c[B+304>>2]|0)>>>0<=D>>>0?(c[B+308>>2]|0)>>>0>D>>>0:0){D=B+300|0;c[h>>2]=c[D>>2];c[D>>2]=h;break}if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{D=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[f>>2]=j;b[k>>1]=i;v=149;break}i=u+24|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;i=7}else{j=c[u+48>>2]|0;v=149}while(0);do if((v|0)==149){f=u;h=g;i=f+44|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));ew(j|0,c[g+48>>2]|0,e[u+40>>1]<<2|0)|0;f=c[A>>2]|0;if(f&1024|0){a[g+28>>0]=0;i=0;break}if(!(f&16384))i=0;else{c[g+32>>2]=0;i=0}}while(0);if(c[l>>2]&1024|0){D=i;return D|0}f=u+32|0;h=c[f>>2]|0;if(!h){D=i;return D|0}D=h+55|0;if(((d[D>>0]|d[D+1>>0]<<8)&3)!=3){D=i;return D|0}c[f>>2]=0;D=i;return D|0}function $l(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=e+48|0;f=c[l>>2]|0;m=e+56|0;do if((f|0)!=(m|0)){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}k=f;if((c[d+304>>2]|0)>>>0<=k>>>0?(c[d+308>>2]|0)>>>0>k>>>0:0){k=d+300|0;c[f>>2]=c[k>>2];c[k>>2]=f;break}}if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);k=e+36|0;f=c[k>>2]|0;do if(f&17408|0){if(f&1024|0?(h=e+28|0,a[h>>0]|0):0){f=e+32|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);a[h>>0]=0;c[f>>2]=0;break}if(f&16384|0?(i=e+32|0,g=c[i>>2]|0,g|0):0){f=c[g+16>>2]|0;a:do if(f){do if(d|0){g=d+480|0;if(!(c[g>>2]|0)){h=f;if((c[d+304>>2]|0)>>>0>h>>>0)break;if((c[d+308>>2]|0)>>>0<=h>>>0)break;h=d+300|0;c[f>>2]=c[h>>2];c[h>>2]=f}else Xd(d,f);f=c[i>>2]|0;h=35;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);h=33;break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);h=33;break}}else h=33;while(0);if((h|0)==33){f=c[i>>2]|0;if(!d){j=f;h=40}else{g=d+480|0;h=35}}do if((h|0)==35){if(c[g>>2]|0){Xd(d,f);break}g=f;if((c[d+304>>2]|0)>>>0<=g>>>0?(c[d+308>>2]|0)>>>0>g>>>0:0){g=d+300|0;c[f>>2]=c[g>>2];c[g>>2]=f}else{j=f;h=40}}while(0);do if((h|0)==40?j|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{h=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}}while(0);c[l>>2]=m;b[e+40>>1]=0;b[e+44>>1]=3;c[k>>2]=0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);return}m=e;if((c[d+304>>2]|0)>>>0<=m>>>0?(c[d+308>>2]|0)>>>0>m>>>0:0){m=d+300|0;c[e>>2]=c[m>>2];c[m>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{m=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function am(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=b[a+40>>1]|0;g=h&65535;j=b[a+42>>1]|0;i=b[d+40>>1]|0;l=i&65535;k=b[d+42>>1]|0;if((k&65535)>(j&65535)?1:(g-(j&65535)|0)>=(l-(k&65535)|0)){d=0;return d|0}e=b[a+20>>1]|0;f=b[d+20>>1]|0;if(e<<16>>16>=f<<16>>16){if(e<<16>>16>f<<16>>16){d=0;return d|0}if((b[a+22>>1]|0)>(b[d+22>>1]|0)){d=0;return d|0}}e=g+-1|0;a:do if(h<<16>>16){k=c[a+48>>2]|0;j=d+48|0;if(!(i<<16>>16)){while(1){if(c[k+(e<<2)>>2]|0){e=0;break}if((e|0)>0)e=e+-1|0;else break a}return e|0}b:while(1){h=c[k+(e<<2)>>2]|0;c:do if(h|0){i=c[j>>2]|0;f=l;while(1){g=f;f=f+-1|0;if((c[i+(f<<2)>>2]|0)==(h|0))break c;if((g|0)<=1){e=0;break b}}}while(0);if((e|0)>0)e=e+-1|0;else break a}return e|0}while(0);if(c[a+36>>2]&64|0?(c[d+36>>2]&64|0)==0:0){d=0;return d|0}d=1;return d|0}function bm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=c[c[e>>2]>>2]|0;a:do if((a[f>>0]|0)==44){while(1){if(!(bm(d,e,c[f+12>>2]|0)|0)){f=0;break}f=c[f+16>>2]|0;if((a[f>>0]|0)!=44)break a}return f|0}while(0);k=(0==0?(c[(c[g>>2]|0)+32>>2]&8388608|0)==0:0)?g:0;j=e+12|0;g=c[j>>2]|0;if((g|0)<=0){d=0;return d|0}h=c[e+20>>2]|0;i=0;while(1){e=c[h>>2]|0;if(!((c[e+4>>2]&1|0)!=0?(b[e+36>>1]|0)!=(d|0):0)){if(em(k,e,f,d)|0){f=1;g=12;break}g=c[j>>2]|0}i=i+1|0;if((i|0)>=(g|0)){f=0;g=12;break}else h=h+48|0}if((g|0)==12)return f|0;return 0}function cm(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;s=t;r=d;p=d+8|0;g=p;q=~(c[g>>2]|c[r>>2]);r=~(c[g+4>>2]|c[r+4>>2]);g=c[a+12>>2]|0;m=a+20|0;a:do if((g|0)>0){n=d+40|0;o=d+48|0;d=d+22|0;a=0;l=c[m>>2]|0;while(1){if(b[l+10>>1]&2)break a;k=l+40|0;i=c[k>>2]|0;k=c[k+4>>2]|0;j=p;b:do if((i&q|0)==0&(k&r|0)==0&(c[j>>2]&i|0?1:(c[j+4>>2]&k|0)!=0)){h=b[n>>1]|0;if(h<<16>>16){k=c[o>>2]|0;h=h&65535;do{i=h;h=h+-1|0;j=c[k+(h<<2)>>2]|0;if(j|0){if((j|0)==(l|0))break b;j=c[j+16>>2]|0;if((j|0)>-1?((c[m>>2]|0)+(j*48|0)|0)==(l|0):0)break b}}while((i|0)>1)}h=b[l+8>>1]|0;if(h<<16>>16<1){b[d>>1]=(e[d>>1]|0)+(h&65535);break}b[d>>1]=(b[d>>1]|0)+-1<<16>>16;if(b[l+12>>1]&130){k=(uk(c[(c[l>>2]|0)+16>>2]|0,s)|0)!=0;k=k&((c[s>>2]|0)+1|0)>>>0<3?10:20;c[s>>2]=k;a=(k|0)>(a<<16>>16|0)?k&65535:a}}while(0);if((g|0)>1){g=g+-1|0;l=l+48|0}else break}}else{a=0;d=d+22|0}while(0);a=(f<<16>>16)-(a<<16>>16)|0;if((a|0)>=(b[d>>1]|0)){Ra=t;return}b[d>>1]=a;Ra=t;return}function dm(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;Fa=Ra;Ra=Ra+96|0;ga=Fa;ja=c[c[f>>2]>>2]|0;ua=c[ja>>2]|0;va=c[f+12>>2]|0;sa=ua+81|0;if(a[sa>>0]|0){Ea=7;Ra=Fa;return Ea|0}wa=va+36|0;xa=c[wa>>2]|0;da=(xa&32|0)==0?447:24;ra=h+55|0;da=((d[ra>>0]|d[ra+1>>0]<<8)&4)==0?da:da&387;ya=va+24|0;za=b[ya>>1]|0;ka=va+26|0;la=b[ka>>1]|0;ma=va+28|0;na=b[ma>>1]|0;Aa=va+42|0;oa=b[Aa>>1]|0;Ba=va+40|0;m=b[Ba>>1]|0;qa=va;pa=c[qa>>2]|0;qa=c[qa+4>>2]|0;Ca=va+22|0;Da=b[Ca>>1]|0;ha=f+4|0;k=c[ha>>2]|0;ia=g+40|0;ta=c[ia>>2]|0;Ea=za&65535;c[ga>>2]=k;c[ga+4>>2]=k;k=ga+12|0;c[k>>2]=0;l=ga+16|0;a[l>>0]=0;n=ga+8|0;c[n>>2]=0;c[ga+20>>2]=da;c[ga+24>>2]=0;c[ga+28>>2]=ta;a[ga+17>>0]=1;a[ga+18>>0]=1;do if(h){o=b[(c[h+4>>2]|0)+(Ea<<1)>>1]|0;j=o<<16>>16;if(o<<16>>16==-2){c[k>>2]=c[(c[h+40>>2]|0)+4+(Ea*20|0)>>2];c[n>>2]=c[(c[h+32>>2]|0)+(Ea<<2)>>2];b[ga+72>>1]=-2;n=Ul(ga)|0;break}k=c[h+12>>2]|0;if(o<<16>>16!=(b[k+40>>1]|0))if(o<<16>>16>-1){a[l>>0]=a[(c[k+4>>2]|0)+(j<<4)+13>>0]|0;c[n>>2]=c[(c[h+32>>2]|0)+(Ea<<2)>>2];ca=8}else ca=8;else{j=-1;ca=8}}else{j=Ea;ca=8}while(0);if((ca|0)==8){b[ga+72>>1]=j;n=Tl(ga)|0}b[va+18>>1]=0;ta=h+8|0;da=b[c[ta>>2]>>1]|0;if(da<<16>>16<11)M=0;else{j=da<<16>>16;k=((j|0)<0)<<31>>31;if((da&65535)>255){l=40;do{l=(l&65535)+40|0;ba=j;j=bw(j|0,k|0,4)|0;aa=k;k=L()|0}while(aa>>>0>0|(aa|0)==0&ba>>>0>4095);l=l&65535}else l=40;if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;ba=j;j=bw(j|0,k|0,1)|0;aa=k;k=L()|0}while(aa>>>0>0|(aa|0)==0&ba>>>0>31);k=l}else k=l;M=(k&65535)+65493+(e[3648+((j&7)<<1)>>1]|0)&65535}a:do if(!n)j=0;else{v=h+4|0;w=va+8|0;x=h+12|0;y=g+36|0;z=h+54|0;A=f+20|0;B=va+44|0;C=h+50|0;D=va+48|0;E=m&65535;V=E+8&131064;F=V<<2;G=ua+272|0;H=ua+276|0;I=h+48|0;J=g+16|0;K=M<<16>>16;N=ua+288|0;O=ua+300|0;P=va+56|0;Q=i<<16>>16==0;R=K+49|0;S=va+20|0;T=ua+296|0;U=ua+284|0;V=V&65535;W=ua+480|0;X=K+31|0;Y=i<<16>>16;Z=ua+292|0;_=ua+304|0;$=h+52|0;aa=K+1&65535;ba=ua+308|0;t=n;l=0;k=0;do{s=b[t+12>>1]|0;u=s&65535;if(s<<16>>16==256){j=b[(c[v>>2]|0)+(Ea<<1)>>1]|0;if(j<<16>>16>-1)j=d[(c[(c[x>>2]|0)+4>>2]|0)+(j<<16>>16<<4)+12>>0]|0;else j=j<<16>>16==-1&1;if(j)j=0;else ca=26}else ca=26;b:do if((ca|0)==26){ca=0;r=t+32|0;q=r;o=w;n=c[o>>2]|0;o=c[o+4>>2]|0;if(((n&c[q>>2]|0)==0?(o&c[q+4>>2]|0)==0:0)?(ea=t+10|0,!(s<<16>>16==16&(b[ea>>1]&256)!=0)):0){if(a[y>>0]&8?(c[(c[t>>2]|0)+4>>2]&1|0)==0:0){j=0;break}if((a[z>>0]|0)!=0?((e[C>>1]|0)+-1|0)==(Ea|0):0)j=2;else j=1;c[A>>2]=c[A>>2]|j;c[wa>>2]=xa;b[ya>>1]=za;b[ka>>1]=la;b[ma>>1]=na;b[Ba>>1]=m;if((m&65535)<(e[B>>1]|0)){q=E;p=m;j=c[D>>2]|0}else{do if(c[G>>2]|0)if(!(a[sa>>0]|0))ca=43;else{j=0;break a}else{if(!(0<0|(0==0?(e[H>>1]|0)>>>0<F>>>0:0))){j=c[O>>2]|0;if(j|0){c[O>>2]=c[j>>2];c[U>>2]=(c[U>>2]|0)+1;break}j=c[T>>2]|0;if(!j)j=Z;else{c[T>>2]=c[j>>2];c[U>>2]=(c[U>>2]|0)+1;break}}else j=N;c[j>>2]=(c[j>>2]|0)+1;ca=43}while(0);if((ca|0)==43){ca=0;j=_d(ua,F,0)|0}if(!j){j=0;break a}ew(j|0,c[D>>2]|0,e[B>>1]<<2|0)|0;n=c[D>>2]|0;c:do if((n|0)!=(P|0)){if(c[W>>2]|0){Xd(ua,n);break}o=n;do if((c[_>>2]|0)>>>0<=o>>>0){if((c[ba>>2]|0)>>>0<=o>>>0)break;c[n>>2]=c[O>>2];c[O>>2]=n;break c}while(0);if(!n)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{q=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[D>>2]=j;b[B>>1]=V;p=b[Ba>>1]|0;o=w;q=p&65535;n=c[o>>2]|0;o=c[o+4>>2]|0}p=p+1<<16>>16;b[Ba>>1]=p;c[j+(q<<2)>>2]=t;j=r;q=(c[j+4>>2]|qa)&~o;r=va;c[r>>2]=(c[j>>2]|pa)&~n;c[r+4>>2]=q;d:do if(!(u&1)){if(u&130|0){j=b[(c[v>>2]|0)+(Ea<<1)>>1]|0;n=c[wa>>2]|0;o=n|1;c[wa>>2]=o;do if(j<<16>>16!=-1){if(!(Q&j<<16>>16>-1)){s=0;p=o;break d}j=b[C>>1]|0;if(((j&65535)+-1|0)!=(Ea|0)){s=0;p=o;break d}if((d[ra>>0]|d[ra+1>>0]<<8)&8)break;if(j<<16>>16==1?s<<16>>16==2&(a[z>>0]|0)!=0:0)break;p=n|65537;c[wa>>2]=p;s=0;break d}while(0);p=n|4097;c[wa>>2]=p;s=0;break}if(u&256|0){p=c[wa>>2]|8;c[wa>>2]=p;s=0;break}j=c[wa>>2]|0;if(!(u&36)){c[wa>>2]=j|18;j=(gm(ja,c[ia>>2]|0,h,Ea,t)|0)&65535;b[ma>>1]=j;j=c[wa>>2]|0;if(!(j&32)){l=t;k=0;s=0;p=j;break}l=t;k=c[(c[D>>2]|0)+((e[Ba>>1]|0)+-2<<2)>>2]|0;s=0;p=j;break}c[wa>>2]=j|34;s=(gm(ja,c[ia>>2]|0,h,Ea,t)|0)&65535;b[ka>>1]=s;if(!(b[ea>>1]&256)){l=0;k=t;s=0;p=c[wa>>2]|0;break}l=t+48|0;j=b[Ba>>1]|0;if((j&65535)<(e[B>>1]|0))k=c[D>>2]|0;else{o=(j&65535)+8&131064;n=o<<2;e:do if(c[G>>2]|0)if(!(a[sa>>0]|0))ca=117;else{j=0;break a}else{do if(0<0|(0==0?(e[H>>1]|0)>>>0<n>>>0:0))j=N;else{k=c[O>>2]|0;if(k|0){c[O>>2]=c[k>>2];c[U>>2]=(c[U>>2]|0)+1;break e}k=c[T>>2]|0;if(!k){j=Z;break}c[T>>2]=c[k>>2];c[U>>2]=(c[U>>2]|0)+1;break e}while(0);c[j>>2]=(c[j>>2]|0)+1;ca=117}while(0);if((ca|0)==117){ca=0;k=_d(ua,n,0)|0}if(!k){j=0;break a}ew(k|0,c[D>>2]|0,e[B>>1]<<2|0)|0;j=c[D>>2]|0;f:do if((j|0)!=(P|0)){if(c[W>>2]|0){Xd(ua,j);break}n=j;do if((c[_>>2]|0)>>>0<=n>>>0){if((c[ba>>2]|0)>>>0<=n>>>0)break;c[j>>2]=c[O>>2];c[O>>2]=j;break f}while(0);if(!j)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[D>>2]=k;b[B>>1]=o;j=b[Ba>>1]|0}b[Ba>>1]=j+1<<16>>16;c[k+((j&65535)<<2)>>2]=l;p=c[wa>>2]|16;c[wa>>2]=p;b[ma>>1]=1;k=t;s=0}else{q=c[t>>2]|0;if(!(c[q+4>>2]&2048)){j=c[q+20>>2]|0;if((j|0)!=0?(fa=c[j>>2]|0,(fa|0)!=0):0){n=((fa|0)<0)<<31>>31;do if(fa>>>0<8){if(fa>>>0<2){j=0;break}o=40;j=fa;do{o=(o&65535)+65526|0;j=cw(j|0,n|0,1)|0;n=L()|0}while(n>>>0<0|(n|0)==0&j>>>0<8);o=o&65535;ca=78}else{if(fa>>>0>255){o=40;j=fa;do{o=(o&65535)+40|0;ca=j;j=bw(j|0,n|0,4)|0;s=n;n=L()|0}while(s>>>0>0|(s|0)==0&ca>>>0>4095);o=o&65535}else{o=40;j=fa}if(!(n>>>0>0|(n|0)==0&j>>>0>15)){ca=78;break}do{o=(o&65535)+10&65535;ca=j;j=bw(j|0,n|0,1)|0;s=n;n=L()|0}while(s>>>0>0|(s|0)==0&ca>>>0>31);ca=78}while(0);if((ca|0)==78){ca=0;j=(o&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)|0}r=j<<16>>16}else r=0}else{r=(p&65535)+-1|0;if((p&65535)>1){p=c[D>>2]|0;o=0;j=46;do{n=c[p+(o<<2)>>2]|0;if(n)j=(c[n>>2]|0)==(q|0)?0:j;o=o+1|0}while((o|0)!=(r|0));r=j}else r=46}if((d[ra>>0]|d[ra+1>>0]<<8)&128){q=b[(c[ta>>2]|0)+(Ea<<1)>>1]|0;n=r&65535;if(n<<16>>16<11)j=0;else{j=n<<16>>16;p=((j|0)<0)<<31>>31;if((n&65535)>255){o=40;n=p;do{o=(o&65535)+40|0;s=j;j=bw(j|0,n|0,4)|0;p=n;n=L()|0}while(p>>>0>0|(p|0)==0&s>>>0>4095);o=o&65535}else{o=40;n=p}if(n>>>0>0|(n|0)==0&j>>>0>15){do{o=(o&65535)+10&65535;s=j;j=bw(j|0,n|0,1)|0;p=n;n=L()|0}while(p>>>0>0|(p|0)==0&s>>>0>31);n=o}else n=o;j=(n&65535)+65493+(e[3648+((j&7)<<1)>>1]|0)|0}if(((q<<16>>16)+10+(j<<16>>16)|0)<(r+K|0)){j=0;break b}}p=c[wa>>2]|4;c[wa>>2]=p;s=r}while(0);do if(!(p&2)){n=(b[ya>>1]|0)+1<<16>>16;b[ya>>1]=n;n=n&65535;t=b[t+8>>1]|0;j=t&65535;if(t<<16>>16<1?(b[(c[v>>2]|0)+(Ea<<1)>>1]|0)>-1:0){j=j-s+(e[Ca>>1]|0)&65535;ca=152;break}j=c[ta>>2]|0;j=(e[j+(n<<1)>>1]|0)-(e[j+(n+-1<<1)>>1]|0)+(e[Ca>>1]|0)|0;n=j&65535;b[Ca>>1]=n;if(u&256){j=j+10&65535;ca=152}}else{j=b[Ca>>1]|0;o=j<<16>>16;do if(k){n=b[k+8>>1]|0;if(n<<16>>16<1){j=(n&65535)+(j&65535)&65535;break}else{j=(j&65535)+65516&65535;break}}while(0);do if(l){n=b[l+8>>1]|0;if(n<<16>>16<1){j=(n&65535)+(j&65535)&65535;break}else{j=(j&65535)+65516&65535;break}}while(0);n=(k|0)!=0;do if(n){if(!((l|0)!=0&(b[k+8>>1]|0)>0))break;if((b[l+8>>1]|0)<=0)break;j=(j&65535)+65516&65535}while(0);ca=(((l|0)!=0)<<31>>31)+(n<<31>>31)+o|0;j=(j<<16>>16>10?j:10)&65535;j=((ca|0)>(j|0)?j:ca)&65535;ca=152}while(0);if((ca|0)==152){ca=0;b[Ca>>1]=j;n=j}r=n&65535;o=r+1+(((b[I>>1]|0)*15|0)/(b[(c[J>>2]|0)+46>>1]|0)|0)|0;j=o&65535;o=o<<16>>16;do if(M<<16>>16<j<<16>>16){if((R|0)>=(o|0))if((X|0)<(o|0)){j=o+1&65535;break}else{j=o+(d[18112+(o-K)>>0]|0)&65535;break}}else if((o+49|0)>=(K|0))if((o+31|0)<(K|0))j=aa;else j=(d[18112+(K-o)>>0]|0)+K&65535;else j=M;while(0);b[S>>1]=j;if(!(p&320)){q=r+16|0;o=q&65535;p=j<<16>>16;q=q<<16>>16;do if(j<<16>>16<o<<16>>16){if((p+49|0)<(q|0)){j=o;break}if((p+31|0)<(q|0)){j=q+1&65535;break}else{j=q+(d[18112+(q-p)>>0]|0)&65535;break}}else{if((q+49|0)<(p|0))break;if((q+31|0)<(p|0)){j=p+1&65535;break}else{j=(d[18112+(p-q)>>0]|0)+p&65535;break}}while(0);b[S>>1]=j}o=s+Y|0;b[S>>1]=o+(j&65535);b[Ca>>1]=o+r;cm(c[ha>>2]|0,va,da);j=_l(f,va)|0;u=c[wa>>2]|0;b[Ca>>1]=(u&2|0)==0?n:Da;if((u&16|0)==0?(e[ya>>1]|0)<(e[$>>1]|0):0)dm(f,g,h,o&65535)|0;b[Ca>>1]=Da}else j=0}while(0);t=Tl(ga)|0}while((j|0)==0&(t|0)!=0)}while(0);ja=va;c[ja>>2]=pa;c[ja+4>>2]=qa;b[ya>>1]=za;b[ka>>1]=la;b[ma>>1]=na;b[Aa>>1]=oa;c[wa>>2]=xa;b[Ca>>1]=Da;b[Ba>>1]=m;if(za<<16>>16!=oa<<16>>16){Ea=j;Ra=Fa;return Ea|0}p=Ea+1|0;if(p>>>0>=(e[h+50>>1]|0)>>>0){Ea=j;Ra=Fa;return Ea|0}if((d[ra>>0]|d[ra+1>>0]<<8)&64){Ea=j;Ra=Fa;return Ea|0}if(b[ua+76>>1]&16384){Ea=j;Ra=Fa;return Ea|0}if((b[(c[ta>>2]|0)+(p<<1)>>1]|0)<=41){Ea=j;Ra=Fa;return Ea|0}n=va+44|0;if((m&65535)<(e[n>>1]|0)){n=za;o=za;j=c[va+48>>2]|0;k=xa;l=Da}else{m=(m&65535)+8&131064;l=m<<2;g:do if(c[ua+272>>2]|0)if(!(a[sa>>0]|0))ca=194;else{Ea=7;Ra=Fa;return Ea|0}else{do if(!(0<0|(0==0?(e[ua+276>>1]|0)>>>0<l>>>0:0))){k=ua+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];sa=ua+284|0;c[sa>>2]=(c[sa>>2]|0)+1;break g}k=ua+296|0;j=c[k>>2]|0;if(!j){j=ua+292|0;break}else{c[k>>2]=c[j>>2];sa=ua+284|0;c[sa>>2]=(c[sa>>2]|0)+1;break g}}else j=ua+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;ca=194}while(0);if((ca|0)==194)j=_d(ua,l,0)|0;if(!j){Ea=7;Ra=Fa;return Ea|0}k=va+48|0;ew(j|0,c[k>>2]|0,e[n>>1]<<2|0)|0;l=c[k>>2]|0;do if((l|0)!=(va+56|0)){if(c[ua+480>>2]|0){Xd(ua,l);break}va=l;if((c[ua+304>>2]|0)>>>0<=va>>>0?(c[ua+308>>2]|0)>>>0>va>>>0:0){va=ua+300|0;c[l>>2]=c[va>>2];c[va>>2]=l;break}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{va=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-va;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[k>>2]=j;b[n>>1]=m;n=b[ya>>1]|0;o=b[Aa>>1]|0;m=b[Ba>>1]|0;k=c[wa>>2]|0;l=b[Ca>>1]|0}b[ya>>1]=n+1<<16>>16;b[Aa>>1]=o+1<<16>>16;b[Ba>>1]=m+1<<16>>16;c[j+((m&65535)<<2)>>2]=0;c[wa>>2]=k|32768;Ba=c[ta>>2]|0;Ea=(e[Ba+(Ea<<1)>>1]|0)-(e[Ba+(p<<1)>>1]|0)|0;b[Ca>>1]=(l&65535)-Ea;dm(f,g,h,(((Ea<<16)+327680|0)>>>16)+(i&65535)&65535)|0;b[Ca>>1]=Da;b[ya>>1]=za;b[Aa>>1]=za;c[wa>>2]=xa;Ea=0;Ra=Fa;return Ea|0}function em(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if(!(bk(b,d,e,f)|0)){f=1;return f|0}g=a[e>>0]|0;do if(g<<24>>24==43){if(em(b,d,c[e+12>>2]|0,f)|0){f=1;return f|0}if(!(em(b,d,c[e+16>>2]|0,f)|0)){g=a[e>>0]|0;break}else{f=1;return f|0}}while(0);a:do if(g<<24>>24==51){switch(a[d>>0]|0){case 45:case 50:break a;default:{}}g=c[d+12>>2]|0;b:do if(!g)g=0;else while(1){d=c[g+4>>2]|0;if(!(d&4096))break b;if(!(d&262144))g=g+12|0;else g=(c[g+20>>2]|0)+4|0;g=c[g>>2]|0;if(!g){g=0;break}}while(0);if(!(bk(b,g,c[e+12>>2]|0,f)|0)){f=1;return f|0}}while(0);f=0;return f|0}function fm(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;if((a[e>>0]|0)!=-94){d=0;return d|0}f=c[d+24>>2]|0;if((c[e+28>>2]|0)!=(c[f+4>>2]|0)){d=0;return d|0}f=c[f>>2]|0;h=b[e+32>>1]|0;e=b[f+52>>1]|0;a:do if(e<<16>>16){g=c[f+4>>2]|0;e=e&65535;f=0;while(1){if((b[g+(f<<1)>>1]|0)==h<<16>>16)break;f=f+1|0;if(f>>>0>=e>>>0)break a}if((f&65535)<<16>>16>=0){d=0;return d|0}}while(0);a[d+20>>0]=1;d=2;return d|0}
- function gq(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;$=Ra;Ra=Ra+16|0;H=$+4|0;Q=$;W=c[e+12>>2]|0;f=c[W+12>>2]|0;X=c[e>>2]|0;E=c[e+4>>2]|0;F=b+235|0;G=(a[F>>0]|0)==0?157:158;if(!E){_=0;Ra=$;return _|0}_=e+8|0;I=E+-1|0;J=e+44|0;K=e+40|0;M=(f&16|0)!=0;N=(E|0)>1;O=W+4|0;P=(f&32|0)==0;R=(f&34|0)!=0;S=(f&8|0)==0;T=(f&4|0)==0;U=(f&2|0)==0;V=W+8|0;C=(f&1|0)!=0;Y=e+20|0;Z=e+16|0;f=c[_>>2]|0;a:while(1){if((f|0)>0){j=0;do{f=c[X+(j<<2)>>2]|0;if(!(a[f+4>>0]|0)){f=fq(b,f)|0;if(f|0){D=186;break a}}else{i=f+40|0;if(!(a[f+5>>0]|0)){g=c[i>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{B=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);f=f+52|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}B=g;if((c[h+304>>2]|0)>>>0<=B>>>0?(c[h+308>>2]|0)>>>0>B>>>0:0){B=h+300|0;c[g>>2]=c[B>>2];c[B>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{B=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0}c[i>>2]=0}j=j+1|0;f=c[_>>2]|0}while((j|0)<(f|0))}f=f+(((f|0)==(E|0))<<31>>31)|0;if((f|0)>0)do{m=f;f=f+-1|0;b:do if((m|0)<(E|0)){k=f;j=c[X+(f<<2)>>2]|0;do{l=k;k=k+1|0;n=X+(k<<2)|0;i=c[n>>2]|0;h=(c[j+40>>2]|0)==0;o=i;g=c[i+40>>2]|0;if(!h)if(!g){g=0;D=32}else{A=c[j+60>>2]|0;g=c[i+60>>2]|0;B=A-g|0;g=Lu(c[j+64>>2]|0,c[i+64>>2]|0,(B|0)<0?A:g)|0;g=(g|0)==0?B:g}else D=32;if((D|0)==32){D=0;g=(h&1)-((g|0)==0&1)|0}if(!g)g=(c[i>>2]|0)-(c[j>>2]|0)|0;if((g|0)<0)break b;B=X+(l<<2)|0;j=c[B>>2]|0;c[n>>2]=j;c[B>>2]=o}while((k|0)<(I|0))}while(0)}while((m|0)>1);c[_>>2]=0;f=c[X>>2]|0;if(!(c[f+40>>2]|0)){f=0;D=186;break}i=c[f+60>>2]|0;c[J>>2]=i;h=c[f+64>>2]|0;c[K>>2]=h;f=c[W>>2]|0;if(!(M|(f|0)==0)){g=c[O>>2]|0;if((i|0)<(g|0)|S&(i|0)>(g|0)){f=0;D=186;break}if(Lu(h,f,g)|0){f=0;D=186;break}}c:do if(N){f=1;do{g=c[X+(f<<2)>>2]|0;if(!(c[g+40>>2]|0)){D=48;break c}if((c[g+60>>2]|0)!=(i|0)){D=48;break c}if(Lu(h,c[g+64>>2]|0,i)|0){D=48;break c}f=f+1|0}while((f|0)<(E|0))}else{f=1;D=48}while(0);if((D|0)==48){D=0;if(!(R|(f|0)!=1)){f=c[X>>2]|0;g=(c[f+56>>2]|0)==0;if(!(a[F>>0]|0)){D=52;break}if(g){D=51;break}else f=1}}q=0;do{r=c[X+(q<<2)>>2]|0;if((a[F>>0]|0)!=0?(c[r+56>>2]|0)!=0:0){a[H>>0]=0;A=r+88|0;B=A;c[B>>2]=0;c[B+4>>2]=0;B=r+84|0;c[B>>2]=0;kq(0,c[r+72>>2]|0,c[r+76>>2]|0,r+80|0,A,B,H)}else D=64;d:do if((D|0)==64){D=0;n=r+72|0;k=r+40|0;o=r+52|0;g=c[o>>2]|0;e:do if(g|0){l=(c[n>>2]|0)+10|0;p=r+48|0;m=r+44|0;i=c[p>>2]|0;j=g;while(1){g=c[k>>2]|0;if((l-g|0)<=(i|0))break e;h=(c[m>>2]|0)-i|0;h=(h|0)<4096?h:4096;if(jd(j,g+i|0,h,i,81)|0)break d;g=(c[p>>2]|0)+h|0;c[p>>2]=g;g=(c[k>>2]|0)+g|0;h=g+20|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));i=c[p>>2]|0;j=c[o>>2]|0;if((i|0)==(c[m>>2]|0))break;if(!j)break e}do if(j|0){g=c[j+20>>2]|0;gc(c[j+16>>2]|0)|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}B=j;if((c[g+304>>2]|0)>>>0<=B>>>0?(c[g+308>>2]|0)>>>0>B>>>0:0){B=g+300|0;c[j>>2]=c[B>>2];c[B>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{B=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[o>>2]=0;c[p>>2]=0}while(0);l=c[n>>2]|0;k=r+88|0;g=a[l>>0]|0;h=g&255;do if(!(h&128)){B=k;c[B>>2]=g&255;c[B+4>>2]=0;g=1}else{B=d[l+1>>0]|0;g=B<<7|h&127;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=2;break}B=d[l+2>>0]|0;g=B<<14|g&16383;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=3;break}B=d[l+3>>0]|0;g=B<<21|g&2097151;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=4;break}i=28;j=l+4|0;g=g&268435455;h=0;do{B=j;j=j+1|0;B=d[B>>0]|0;A=cw(B&127|0,0,i|0)|0;g=Sv(A|0,L()|0,g|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((B&128|0)!=0|0!=0));B=k;c[B>>2]=g;c[B+4>>2]=h;g=j-l|0}while(0);c[r+80>>2]=l+g}while(0);q=q+1|0}while(q>>>0<f>>>0);B=f+-1|0;A=f>>>0>1;if(A){i=B;do{j=i;i=i+-1|0;f:do if((j|0)<(f|0)){g=i;l=c[X+(i<<2)>>2]|0;do{h=g;g=g+1|0;k=X+(g<<2)|0;if((Xa[G&255](l,c[k>>2]|0)|0)<0)break f;z=X+(h<<2)|0;y=c[k>>2]|0;l=c[z>>2]|0;c[k>>2]=l;c[z>>2]=y}while((g|0)<(B|0))}while(0)}while((j|0)>1)}if(c[(c[X>>2]|0)+80>>2]|0){g=0;y=0;z=0;while(1){c[H>>2]=0;c[Q>>2]=0;x=c[X>>2]|0;n=x+88|0;o=c[n>>2]|0;n=c[n+4>>2]|0;jq(b,x,H,Q)|0;g:do if(A){h=1;do{i=c[X+(h<<2)>>2]|0;if(!(c[i+80>>2]|0))break g;x=i+88|0;if(!((c[x>>2]|0)==(o|0)?(c[x+4>>2]|0)==(n|0):0))break g;jq(b,i,0,0)|0;h=h+1|0}while(h>>>0<f>>>0)}else h=1;while(0);if(T)i=c[Q>>2]|0;else{q=c[V>>2]|0;j=c[H>>2]|0;p=c[Q>>2]|0;r=j+p|0;k=j;m=0;while(1){h:do if(k>>>0<r>>>0){l=0;i=k;while(1){k=a[i>>0]|0;if(!(k&254|l)){l=i;break h}i=i+1|0;if(i>>>0<r>>>0)l=k&128;else{l=i;break}}}else l=k;while(0);i=l-j|0;if((m|0)==(q|0))break;p=p-i|0;if(!p){j=l;i=0;break}k=l+1|0;j=a[k>>0]|0;i=j&255;do if(!(i&128))j=1;else{x=d[l+2>>0]|0;i=x<<7|j&127;if(!(x&128)){j=2;break}x=d[l+3>>0]|0;i=x<<14|i&16383;if(!(x&128)){j=3;break}x=d[l+4>>0]|0;i=x<<21|i&2097151;if(!(x&128)){j=4;break}i=(a[l+5>>0]&7)<<28|i&268435455;j=5}while(0);k=k+j|0;j=l;m=i}c[H>>2]=j;c[Q>>2]=i}do if(U|(i|0)>0){w=(g|0)>0;u=w&(a[F>>0]|0)!=0;t=Tv(y|0,z|0,o|0,n|0)|0;v=L()|0;x=Tv(o|0,n|0,y|0,z|0)|0;k=L()|0;x=u?t:x;k=u?v:k;if((k|0)<0|(k|0)==0&x>>>0<1?!((x|0)==(o|0)&(k|0)==(n|0)&(w^1)):0){f=267;D=184;break a}j=0;l=x;m=k;do{j=j+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));j=(C?i+1|0:0)+g+j|0;if((j|0)>(c[Y>>2]|0)){j=j<<1;c[Y>>2]=j;l=c[Z>>2]|0;if(mb()|0){f=7;D=184;break a}j=sb(l,(j|0)>0?j:0,0)|0;if(!j){f=7;D=184;break a}c[Z>>2]=j}else j=c[Z>>2]|0;w=j+g|0;if(P){m=w;l=x;while(1){i=l&255;j=m+1|0;a[m>>0]=i|-128;l=bw(l|0,k|0,7)|0;k=L()|0;if((l|0)==0&(k|0)==0)break;else m=j}a[m>>0]=i&127;g=j-w+g|0;if(!C)break;z=c[Q>>2]|0;ew((c[Z>>2]|0)+g|0,c[H>>2]|0,z|0)|0;g=z+g|0;a[(c[Z>>2]|0)+g>>0]=0;g=g+1|0;break}l=c[H>>2]|0;v=l+i|0;m=a[l>>0]|0;switch(m<<24>>24){case 1:{i=0;j=0;break}case 2:{i=w;m=x;q=k;while(1){j=m&255;p=i+1|0;a[i>>0]=j|-128;m=bw(m|0,q|0,7)|0;q=L()|0;if((m|0)==0&(q|0)==0)break;else i=p}a[i>>0]=j&127;a[p>>0]=2;i=1-w+p|0;j=1;m=a[l>>0]|0;D=140;break}default:{i=0;j=0;D=140}}if((D|0)==140){D=0;m=m<<24>>24;if(m&254)do{l=l+1|0;u=m;m=a[l>>0]|0}while((m&254|u&128|0)!=0)}if(l>>>0<v>>>0)do{r=l+1|0;p=a[r>>0]|0;m=p&255;do if(!(m&128)){l=1;u=p&255;q=0}else{u=d[l+2>>0]|0;m=u<<7|m&127;if(!(u&128)){l=2;u=m;q=0;break}u=d[l+3>>0]|0;m=u<<14|m&16383;if(!(u&128)){l=3;u=m;q=0;break}u=d[l+4>>0]|0;m=u<<21|m&2097151;if(!(u&128)){l=4;u=m;q=0;break}p=28;l=l+5|0;m=m&268435455;q=0;do{u=l;l=l+1|0;u=d[u>>0]|0;t=cw(u&127|0,0,p|0)|0;m=Sv(t|0,L()|0,m|0,q|0)|0;q=L()|0;p=p+7|0}while(p>>>0<64&((u&128|0)!=0|0!=0));l=l-r|0;u=m}while(0);l=r+l|0;m=a[l>>0]|0;if(m<<24>>24==2){if(!j){m=w+i|0;j=m;r=x;t=k;while(1){p=r&255;s=j+1|0;a[j>>0]=p|-128;r=bw(r|0,t|0,7)|0;t=L()|0;if((r|0)==0&(t|0)==0)break;else j=s}a[j>>0]=p&127;i=i-m+s|0;j=1}t=i+1|0;a[w+i>>0]=1;s=w+t|0;r=s;p=u;while(1){i=p&255;m=r+1|0;a[r>>0]=i|-128;p=bw(p|0,q|0,7)|0;q=L()|0;if((p|0)==0&(q|0)==0)break;else r=m}a[r>>0]=i&127;i=m-s+t|0;a[w+i>>0]=2;i=i+1|0;m=a[l>>0]|0}m=m<<24>>24;if(m&254)do{l=l+1|0;u=m;m=a[l>>0]|0}while((m&254|u&128|0)!=0)}while(l>>>0<v>>>0);if(j){a[w+i>>0]=0;i=i+1|0}x=(i|0)==0;g=i+g|0;o=x?y:o;n=x?z:n}else{o=y;n=z}while(0);h=h+(((h|0)==(f|0))<<31>>31)|0;if((h|0)>0)do{k=h;h=h+-1|0;i:do if((k|0)<(f|0)){i=h;m=c[X+(h<<2)>>2]|0;do{j=i;i=i+1|0;l=X+(i<<2)|0;if((Xa[G&255](m,c[l>>2]|0)|0)<0)break i;z=X+(j<<2)|0;y=c[l>>2]|0;m=c[z>>2]|0;c[l>>2]=m;c[z>>2]=y}while((i|0)<(B|0))}while(0)}while((k|0)>1);if(!(c[(c[X>>2]|0)+80>>2]|0))break;else{y=o;z=n}}if((g|0)>0){D=183;break}}c[_>>2]=f}do if((D|0)==51){c[e+52>>2]=c[f+76>>2];f=f+72|0;g=100}else if((D|0)==52){i=c[f+76>>2]|0;c[e+52>>2]=i;f=f+72|0;if(g)g=100;else{h=c[f>>2]|0;if((c[Y>>2]|0)<(i|0)){g=i<<1;c[Y>>2]=g;f=c[Z>>2]|0;if(mb()|0){f=Z;g=7;break}f=sb(f,(g|0)>0?g:0,0)|0;if(!f){f=Z;g=7;break}c[Z>>2]=f}else f=c[Z>>2]|0;ew(f|0,h|0,i|0)|0;f=Z;g=100}}else if((D|0)==183){c[e+48>>2]=c[Z>>2];c[e+52>>2]=g;c[_>>2]=f;_=100;Ra=$;return _|0}else if((D|0)==184){_=f;Ra=$;return _|0}else if((D|0)==186){Ra=$;return f|0}while(0);c[e+48>>2]=c[f>>2];c[_>>2]=1;_=g;Ra=$;return _|0}function hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=((c[a+80>>2]|0)==0&1)-((c[b+80>>2]|0)==0&1)|0;if(d|0){b=d;return b|0}e=a+88|0;d=c[e>>2]|0;e=c[e+4>>2]|0;g=b+88|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(f|0)&(e|0)==(g|0)){b=(c[b>>2]|0)-(c[a>>2]|0)|0;return b|0}else{b=(e|0)<(g|0)|(e|0)==(g|0)&d>>>0<f>>>0?1:-1;return b|0}return 0}function iq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=((c[a+80>>2]|0)==0&1)-((c[b+80>>2]|0)==0&1)|0;if(d|0){b=d;return b|0}e=a+88|0;d=c[e>>2]|0;e=c[e+4>>2]|0;g=b+88|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(f|0)&(e|0)==(g|0)){b=(c[b>>2]|0)-(c[a>>2]|0)|0;return b|0}else{b=(e|0)>(g|0)|(e|0)==(g|0)&d>>>0>f>>>0?1:-1;return b|0}return 0}function jq(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+16|0;n=v;i=v+4|0;u=e+80|0;h=c[u>>2]|0;c[n>>2]=h;t=b+235|0;b=h;if(a[t>>0]|0?c[e+56>>2]|0:0){a[i>>0]=0;if(!f)b=e+84|0;else{c[f>>2]=h;b=e+84|0;c[g>>2]=(c[b>>2]|0)+-1}kq(0,c[e+72>>2]|0,c[e+76>>2]|0,n,e+88|0,b,i);if(!(a[i>>0]|0))c[u>>2]=c[n>>2];else c[u>>2]=0;u=0;Ra=v;return u|0}m=(c[e+72>>2]|0)+(c[e+76>>2]|0)|0;q=e+52|0;o=e+40|0;r=e+48|0;p=e+44|0;h=0;while(1){i=a[b>>0]|0;if((i|h)<<24>>24)do{b=b+1|0;h=i&-128;i=a[b>>0]|0}while((i|h)<<24>>24!=0);i=c[q>>2]|0;if(!i)break;j=c[r>>2]|0;k=(c[o>>2]|0)+j|0;if(b>>>0<k>>>0)break;l=(c[p>>2]|0)-j|0;l=(l|0)<4096?l:4096;i=jd(i,k,l,j,81)|0;if(i|0){s=67;break}i=(c[r>>2]|0)+l|0;c[r>>2]=i;i=(c[o>>2]|0)+i|0;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));if((c[r>>2]|0)==(c[p>>2]|0)){i=c[q>>2]|0;do if(i|0){j=c[i+20>>2]|0;gc(c[i+16>>2]|0)|0;if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}l=i;if((c[j+304>>2]|0)>>>0<=l>>>0?(c[j+308>>2]|0)>>>0>l>>>0:0){l=j+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[q>>2]=0;c[r>>2]=0}}if((s|0)==67){c[n>>2]=b;u=i;Ra=v;return u|0}b=b+1|0;c[n>>2]=b;if(f|0){c[f>>2]=c[u>>2];c[g>>2]=b+-1-(c[u>>2]|0)}do if(b>>>0<m>>>0){l=b;while(1){if(a[l>>0]|0)break;b=l+1|0;if(b>>>0<m>>>0)l=b;else{s=36;break}}if((s|0)==36){c[n>>2]=b;break}c[n>>2]=l;b=c[q>>2]|0;a:do if(b|0){k=l+10|0;i=c[r>>2]|0;j=b;while(1){b=c[o>>2]|0;if((k-b|0)<=(i|0))break a;h=(c[p>>2]|0)-i|0;h=(h|0)<4096?h:4096;if(jd(j,b+i|0,h,i,81)|0){b=0;s=68;break}i=(c[r>>2]|0)+h|0;c[r>>2]=i;i=(c[o>>2]|0)+i|0;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));i=c[r>>2]|0;j=c[q>>2]|0;if((i|0)==(c[p>>2]|0))break;if(!j)break a}if((s|0)==68){Ra=v;return b|0}do if(j|0){b=c[j+20>>2]|0;gc(c[j+16>>2]|0)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,j);break}s=j;if((c[b+304>>2]|0)>>>0<=s>>>0?(c[b+308>>2]|0)>>>0>s>>>0:0){s=b+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[q>>2]=0;c[r>>2]=0}while(0);h=a[l>>0]|0;b=h&255;do if(!(b&128)){i=1;b=h&255;h=0}else{s=d[l+1>>0]|0;b=s<<7|b&127;if(!(s&128)){i=2;h=0;break}s=d[l+2>>0]|0;b=s<<14|b&16383;if(!(s&128)){i=3;h=0;break}s=d[l+3>>0]|0;b=s<<21|b&2097151;if(!(s&128)){i=4;h=0;break}i=28;j=l+4|0;b=b&268435455;h=0;do{s=j;j=j+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,i|0)|0;b=Sv(r|0,L()|0,b|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((s&128|0)!=0|0!=0));i=j-l|0}while(0);c[u>>2]=l+i;r=(a[t>>0]|0)==0;u=e+88|0;t=u;e=c[t>>2]|0;t=c[t+4>>2]|0;q=Tv(0,0,b|0,h|0)|0;s=L()|0;t=Sv((r?b:q)|0,(r?h:s)|0,e|0,t|0)|0;e=L()|0;c[u>>2]=t;c[u+4>>2]=e;u=0;Ra=v;return u|0}while(0);c[u>>2]=0;u=0;Ra=v;return u|0}function kq(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;k=c[g>>2]|0;if(!k){p=e+f|0;if((f|0)>0){o=(b|0)==0?1:-1;j=1;f=0;b=0;while(1){l=a[e>>0]|0;k=l&255;do if(!(k&128)){n=1;m=l&255;l=0}else{n=d[e+1>>0]|0;k=n<<7|k&127;if(!(n&128)){n=2;m=k;l=0;break}n=d[e+2>>0]|0;k=n<<14|k&16383;if(!(n&128)){n=3;m=k;l=0;break}n=d[e+3>>0]|0;k=n<<21|k&2097151;if(!(n&128)){n=4;m=k;l=0;break}m=28;n=e+4|0;k=k&268435455;l=0;do{q=n;n=n+1|0;q=d[q>>0]|0;r=cw(q&127|0,0,m|0)|0;k=Sv(r|0,L()|0,k|0,l|0)|0;l=L()|0;m=m+7|0}while(m>>>0<64&((q&128|0)!=0|0!=0));n=n-e|0;m=k}while(0);k=e+n|0;m=Yv(m|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;n=L()|0;e=k;l=0;while(1){j=a[e>>0]|0;e=e+1|0;if(!(l<<24>>24|j))break;else l=j&128}f=Sv(m|0,n|0,f|0,b|0)|0;b=L()|0;a:do if(e>>>0<p>>>0)do{if(a[e>>0]|0)break a;e=e+1|0}while(e>>>0<p>>>0);while(0);if(e>>>0<p>>>0)j=o;else break}}else{k=0;f=0;b=0}c[i>>2]=p-k;c[g>>2]=k;r=h;c[r>>2]=f;c[r+4>>2]=b;return}n=(b|0)==0;b=k+-2|0;b:do if(b>>>0<e>>>0)o=b;else while(1){if((a[b>>0]|0)>=0){o=b;break b}b=b+-1|0;if(b>>>0<e>>>0){o=b;break}}while(0);m=o+1|0;p=m;b=a[m>>0]|0;f=b&255;do if(!(f&128)){b=b&255;f=0}else{r=d[o+2>>0]|0;b=r<<7|f&127;if(!(r&128)){f=0;break}r=d[o+3>>0]|0;b=r<<14|b&16383;if(!(r&128)){f=0;break}r=d[o+4>>0]|0;b=r<<21|b&2097151;if(!(r&128)){f=0;break}k=28;l=o+5|0;b=b&268435455;f=0;while(1){r=d[l>>0]|0;q=cw(r&127|0,0,k|0)|0;b=Sv(q|0,L()|0,b|0,f|0)|0;f=L()|0;k=k+7|0;if(!(k>>>0<64&((r&128|0)!=0|0!=0)))break;else l=l+1|0}}while(0);q=Yv(b|0,f|0,(n?1:-1)|0,(n?0:-1)|0)|0;n=L()|0;r=h;n=Tv(c[r>>2]|0,c[r+4>>2]|0,q|0,n|0)|0;q=L()|0;r=h;c[r>>2]=n;c[r+4>>2]=q;if((m|0)==(e|0)){a[j>>0]=1;b=p}else{b=o+-1|0;c:do if(b>>>0>e>>>0){b=-1;while(1){k=b+-1|0;f=a[o+b>>0]|0;b=o+k|0;if(f<<24>>24)break c;if(b>>>0>e>>>0)b=k;else{f=0;break}}}else{f=0;k=-1}while(0);d:do if(b>>>0>e>>>0){b=f;while(1){f=a[o+k>>0]|0;if(!(f&-128&255|b<<24>>24))break;k=k+-1|0;b=o+k|0;if(b>>>0>e>>>0)b=f;else{e=47;break d}}b=o+k+2|0;e=49}else e=47;while(0);if((e|0)==47)if((k|0)<-1&f<<24>>24==0){b=o+(k+2)|0;e=49}do{r=b;b=b+1|0}while((a[r>>0]|0)<0);c[i>>2]=p-b}c[g>>2]=b;return}function lq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](132)|0;if(!f){e=7;return e|0}else i=f}else{h=Wa[c[29356>>2]&127](132)|0;if((c[14985]|0)>>>0<132)c[14985]=132;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){i=c[14978]|0;g=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=i>>>0)&1}g=Wa[c[29340>>2]&127](h)|0;if(!g){e=7;return e|0}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;i=g}else i=g}gw(i|0,0,132)|0;a:do if((b|0)>1){h=d+4|0;f=c[h>>2]|0;b=Eu(f)|0;if((b|0)>0){d=i+4|0;f=a[f>>0]|0;if(f<<24>>24>=0){g=0;do{a[d+(f&255)>>0]=1;g=g+1|0;if((g|0)>=(b|0))break a;f=a[(c[h>>2]|0)+g>>0]|0}while(f<<24>>24>=0)}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);e=1;return e|0}else{e=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);e=1;return e|0}}}else{g=i+4|0;f=1;do{a[g+f>>0]=((f+-48|0)>>>0>9&((f&2147483615)+-65|0)>>>0>25)<<31>>31;f=f+1|0}while((f|0)!=128)}while(0);c[e>>2]=i;e=0;return e|0}function mq(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function nq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;h=a+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e>>2]=a;h=0;return h|0}function oq(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function pq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=c[b>>2]|0;o=c[b+4>>2]|0;p=b+12|0;i=c[p>>2]|0;k=c[b+8>>2]|0;if((i|0)>=(k|0)){p=101;return p|0}while(1){a:do if((i|0)<(k|0))while(1){j=a[o+i>>0]|0;if(j<<24>>24<=-1){n=i;break a}if(!(a[(j&255)+(l+4)>>0]|0)){n=i;break a}i=i+1|0;c[p>>2]=i;if((i|0)>=(k|0)){n=i;break}}else n=i;while(0);if((n|0)<(k|0)){i=n;do{j=a[o+i>>0]|0;if(j<<24>>24>-1?a[(j&255)+(l+4)>>0]|0:0)break;i=i+1|0;c[p>>2]=i}while((i|0)<(k|0));if((i|0)>(n|0))break}else i=n;if((i|0)>=(k|0)){i=101;m=23;break}}if((m|0)==23)return i|0;l=i-n|0;i=b+24|0;do if((l|0)>(c[i>>2]|0)){j=l+20|0;c[i>>2]=j;k=b+20|0;i=c[k>>2]|0;if(mb()|0){p=7;return p|0}i=sb(i,(j|0)>0?j:0,0)|0;if(!i){p=7;return p|0}else{c[k>>2]=i;break}}while(0);j=b+20|0;if((l|0)>0){i=0;do{k=a[o+(i+n)>>0]|0;m=k&255;a[(c[j>>2]|0)+i>>0]=(k+-65&255)<26?m+32|0:m;i=i+1|0}while((i|0)!=(l|0))}c[d>>2]=c[j>>2];c[e>>2]=l;c[f>>2]=n;c[g>>2]=c[p>>2];o=b+16|0;p=c[o>>2]|0;c[o>>2]=p+1;c[h>>2]=p;p=0;return p|0}function qq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(mb()|0){d=7;return d|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](4)|0;if(!a){d=7;return d|0}}else{e=Wa[c[29356>>2]&127](4)|0;if((c[14985]|0)>>>0<4)c[14985]=4;b=59064;a=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&a>>>0>0){f=c[14978]|0;b=Tv(a|0,b|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&b>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0>(c[14987]|0)>>>0)c[14987]=b}c[a>>2]=0;c[d>>2]=a;f=0;return f|0}function rq(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function sq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;h=a+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e>>2]=a;h=0;return h|0}function tq(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function uq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;ka=Ra;Ra=Ra+32|0;q=ka;p=c[b+4>>2]|0;ja=b+12|0;i=c[ja>>2]|0;o=c[b+8>>2]|0;if((i|0)>=(o|0)){ja=101;Ra=ka;return ja|0}while(1){a:do if((i|0)<(o|0))while(1){l=a[p+i>>0]|0;n=l<<24>>24;if(n&128|0){ia=i;break a}if(l<<24>>24>=48?a[26096+(n+-48)>>0]|0:0){ia=i;break a}i=i+1|0;c[ja>>2]=i;if((i|0)>=(o|0)){ia=i;break}}else ia=i;while(0);if((ia|0)<(o|0)){i=ia;do{l=a[p+i>>0]|0;n=l<<24>>24;if(!(n&128)){if(l<<24>>24<48)break;if(!(a[26096+(n+-48)>>0]|0))break}i=i+1|0;c[ja>>2]=i}while((i|0)<(o|0));if((i|0)>(ia|0))break}else i=ia;if((i|0)>=(o|0)){i=101;fa=564;break}}if((fa|0)==564){Ra=ka;return i|0}r=i-ia|0;i=b+24|0;do if((r|0)>(c[i>>2]|0)){l=r+20|0;c[i>>2]=l;n=b+20|0;i=c[n>>2]|0;if(mb()|0){ja=7;Ra=ka;return ja|0}i=sb(i,(l|0)>0?l:0,0)|0;if(!i){ja=7;Ra=ka;return ja|0}else{c[n>>2]=i;ha=n;ga=i;break}}else{ga=b+20|0;ha=ga;ga=c[ga>>2]|0}while(0);o=p+ia|0;do if((r+-3|0)>>>0<=17){l=22;n=0;while(1){i=a[o+n>>0]|0;if((i+-65&255)>=26){if((i+-97&255)>=26){fa=39;break}}else i=(i&255)+32&255;a[q+l>>0]=i;n=n+1|0;if((n|0)>=(r|0))break;else l=l+-1|0}if((fa|0)==39){i=0;k=0;do{j=a[o+k>>0]|0;if((j+-65&255)<26)j=(j&255)+32&255;else i=(j+-48&255)<10?1:i;a[ga+k>>0]=j;k=k+1|0}while((k|0)!=(r|0));j=(i|0)==0?10:3;if((j<<1|0)<(r|0)){i=j;j=r-j|0;do{a[ga+i>>0]=a[ga+j>>0]|0;j=j+1|0;i=i+1|0}while((j|0)<(r|0))}else i=r;a[ga+i>>0]=0;c[e>>2]=i;break}i=q+23|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;a[i+4>>0]=0;i=q+l|0;l=a[i>>0]|0;b:do if(l<<24>>24==115){l=i+1|0;n=a[l>>0]|0;switch(n<<24>>24){case 101:break;case 115:{a[l>>0]=115;a[i>>0]=115;l=115;break b}default:{i=l;l=n;fa=51;break b}}n=i+2|0;switch(a[n>>0]|0){case 115:break;case 105:{a[n>>0]=105;i=n;l=105;break b}default:{fa=82;break b}}i=i+3|0;if((a[i>>0]|0)==115){a[i>>0]=115;a[n>>0]=115;i=n;l=115}else fa=82}else fa=51;while(0);c:do if((fa|0)==51){d:do switch(l<<24>>24){case 100:{p=i+1|0;if((a[p>>0]|0)!=101){l=i;fa=82;break c}o=i+2|0;l=a[o>>0]|0;if(l<<24>>24!=101){n=o;while(1)if(!(yq(n)|0))break;else n=n+1|0;if(!(a[n>>0]|0)){l=i;fa=82;break c}else break d}l=i+3|0;n=a[l>>0]|0;if(!(n<<24>>24)){l=i;fa=82;break c}while(1){n=(n<<24>>24)+-97|0;if((n|0)==24)n=yq(l+1|0)|0;else n=1-(a[26176+n>>0]|0)|0;if(!n)break;l=l+1|0;n=a[l>>0]|0;if(!(n<<24>>24)){l=i;fa=82;break c}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=i;fa=82;break c}a[o>>0]=101;a[p>>0]=101;i=p;l=101;break c}case 103:{if((a[i+1>>0]|0)!=110){l=i;fa=82;break c}if((a[i+2>>0]|0)!=105){l=i;fa=82;break c}n=i+3|0;l=n;while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=i;fa=82;break c}o=n;l=a[n>>0]|0;break}default:{l=i;fa=82;break c}}while(0);switch(l<<24>>24){case 116:{i=o+1|0;if((a[i>>0]|0)==97){a[i>>0]=97;a[o>>0]=116;i=o+-1|0;a[i>>0]=101;l=101;break c}break}case 108:{i=o+1|0;if((a[i>>0]|0)==98){a[i>>0]=98;a[o>>0]=108;i=o+-1|0;a[i>>0]=101;l=101;break c}break}case 122:{i=o+1|0;if((a[i>>0]|0)==105){a[i>>0]=105;a[o>>0]=122;i=o+-1|0;a[i>>0]=101;l=101;break c}break}default:{}}if(yq(o)|0){i=o+1|0;n=a[i>>0]|0;if(l<<24>>24==n<<24>>24)switch(l<<24>>24){case 122:case 115:case 108:break;default:{fa=83;break c}}if(!(n<<24>>24==0|((l+-119&255)<3|(vq(o)|0)==0))){i=(n<<24>>24)+-97|0;if((i|0)==24)i=yq(o+2|0)|0;else i=1-(a[26176+i>>0]|0)|0;if((i|0)!=0?(yq(o+2|0)|0)!=0:0){i=o+-1|0;a[i>>0]=101;l=101}else{l=o;fa=82}}else{l=o;fa=82}}else{l=o;fa=82}}while(0);if((fa|0)==82){i=l;l=a[l>>0]|0;fa=83}if((fa|0)==83)if(l<<24>>24==121){l=i;do l=l+1|0;while((yq(l)|0)!=0);if(!(a[l>>0]|0))l=121;else{a[i>>0]=105;l=105}}q=i+1|0;n=a[q>>0]|0;e:do switch(n<<24>>24|0){case 97:{if(l<<24>>24==108)if((n<<24>>24==97?(J=i+2|0,(a[J>>0]|0)==110):0)?(I=i+3|0,(a[I>>0]|0)==111):0){n=i+4|0;if(((a[n>>0]|0)==105?(N=i+5|0,(a[N>>0]|0)==116):0)?(M=i+6|0,(a[M>>0]|0)==97):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=108;break e}a[M>>0]=97;a[N>>0]=116;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if(((a[n>>0]|0)==105?(H=i+5|0,(a[H>>0]|0)==116):0)?(v=i+6|0,x=a[v>>0]|0,x<<24>>24!=0):0){l=v;m=x;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[H>>0]=116;a[n>>0]=105;a[I>>0]=111;a[J>>0]=110;i=J;l=110}else l=108}else l=108}else l=108;break}case 99:{if(l<<24>>24==105)if(n<<24>>24==99?(Y=i+2|0,(a[Y>>0]|0)==110):0){n=i+3|0;switch(a[n>>0]|0){case 101:{l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=101;a[Y>>0]=110;a[q>>0]=99;a[i>>0]=101;l=101;break e}case 97:{l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[Y>>0]=110;a[q>>0]=99;a[i>>0]=101;l=101;break e}default:{l=105;break e}}}else l=105;break}case 101:{if(l<<24>>24==114)if(((n<<24>>24==101?(E=i+2|0,(a[E>>0]|0)==122):0)?(D=i+3|0,(a[D>>0]|0)==105):0)?(s=i+4|0,m=a[s>>0]|0,m<<24>>24!=0):0){l=s;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[D>>0]=105;a[E>>0]=122;a[q>>0]=101;i=q;l=101}else l=114}else l=114;break}case 103:{if(l<<24>>24==105)if(((n<<24>>24==103?(G=i+2|0,(a[G>>0]|0)==111):0)?(F=i+3|0,(a[F>>0]|0)==108):0)?(t=i+4|0,u=a[t>>0]|0,u<<24>>24!=0):0){l=t;m=u;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[F>>0]=108;a[G>>0]=111;a[q>>0]=103;i=q;l=103}else l=105}else l=105;break}case 108:{if(l<<24>>24==105)if(n<<24>>24==108){p=i+2|0;switch(a[p>>0]|0){case 98:{l=i+3|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[p>>0]=98;a[q>>0]=108;a[i>>0]=101;l=101;break e}case 108:{n=i+3|0;if((a[n>>0]|0)!=97){l=105;break e}l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[p>>0]=108;i=p;l=108;break e}case 116:{o=i+3|0;if((a[o>>0]|0)!=110){l=105;break e}n=i+4|0;if((a[n>>0]|0)!=101){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=101;a[o>>0]=110;a[p>>0]=116;i=p;l=116;break e}case 101:{l=i+3|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[p>>0]=101;i=p;l=101;break e}case 115:{o=i+3|0;if((a[o>>0]|0)!=117){l=105;break e}n=i+4|0;if((a[n>>0]|0)!=111){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=111;a[o>>0]=117;a[p>>0]=115;i=p;l=115;break e}default:{l=105;break e}}}else l=105;break}case 111:{switch(l<<24>>24){case 110:break;case 114:{if(n<<24>>24!=111){l=114;break e}o=i+2|0;if((a[o>>0]|0)!=116){l=114;break e}n=i+3|0;if((a[n>>0]|0)!=97){l=114;break e}l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=114;break e}a[n>>0]=97;a[o>>0]=116;a[q>>0]=101;i=q;l=101;break e}default:break e}if((n<<24>>24==111?(L=i+2|0,(a[L>>0]|0)==105):0)?(K=i+3|0,(a[K>>0]|0)==116):0){n=i+4|0;if(((a[n>>0]|0)==97?(P=i+5|0,(a[P>>0]|0)==122):0)?(O=i+6|0,(a[O>>0]|0)==105):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=110;break e}a[O>>0]=105;a[P>>0]=122;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if((a[n>>0]|0)==97?(w=i+5|0,y=a[w>>0]|0,y<<24>>24!=0):0){l=w;m=y;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[n>>0]=97;a[K>>0]=116;a[L>>0]=101;i=L;l=101}else l=110}else l=110}else l=110;break}case 115:{switch(l<<24>>24){case 109:{if(n<<24>>24!=115){l=109;break e}if((a[i+2>>0]|0)!=105){l=109;break e}o=i+3|0;if((a[o>>0]|0)!=108){l=109;break e}n=i+4|0;if((a[n>>0]|0)!=97){l=109;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=109;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=109;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=109;break e}a[n>>0]=97;a[o>>0]=108;i=o;l=108;break e}case 115:break;default:break e}if((n<<24>>24==115?(a[i+2>>0]|0)==101:0)?(a[i+3>>0]|0)==110:0){n=i+4|0;if(((a[n>>0]|0)==101?(R=i+5|0,(a[R>>0]|0)==118):0)?(Q=i+6|0,(a[Q>>0]|0)==105):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=115;break e}a[Q>>0]=105;a[R>>0]=118;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if(((a[n>>0]|0)==108?(W=i+5|0,(a[W>>0]|0)==117):0)?(V=i+6|0,(a[V>>0]|0)==102):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=115;break e}a[V>>0]=102;a[W>>0]=117;a[n>>0]=108;i=n;l=108;break e}n=i+4|0;if((((a[n>>0]|0)==115?(T=i+5|0,(a[T>>0]|0)==117):0)?(S=i+6|0,(a[S>>0]|0)==111):0)?(z=i+7|0,B=a[z>>0]|0,B<<24>>24!=0):0){l=z;m=B;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[S>>0]=111;a[T>>0]=117;a[n>>0]=115;i=n;l=115}else l=115}else l=115}else l=115;break}case 116:{if(l<<24>>24==105)if(n<<24>>24==116?(X=i+2|0,(a[X>>0]|0)==105):0){o=i+3|0;switch(a[o>>0]|0){case 108:break;case 118:{n=i+4|0;if((a[n>>0]|0)!=105){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=105;a[o>>0]=118;a[X>>0]=101;i=X;l=101;break e}default:{l=105;break e}}n=i+4|0;if((a[n>>0]|0)==97){l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[o>>0]=108;i=o;l=108;break e}n=i+4|0;if(((a[n>>0]|0)==105?(U=i+5|0,(a[U>>0]|0)==98):0)?(A=i+6|0,C=a[A>>0]|0,C<<24>>24!=0):0){l=A;m=C;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[U>>0]=98;a[n>>0]=108;a[o>>0]=101;i=o;l=101}else l=105}else l=105}else l=105;break}default:{}}while(0);f:do switch(l<<24>>24|0){case 101:{if(l<<24>>24==101)switch(a[i+1>>0]|0){case 116:{if((a[i+2>>0]|0)!=97)break f;m=i+3|0;if((a[m>>0]|0)!=99)break f;l=i+4|0;if((a[l>>0]|0)!=105)break f;j=i+5|0;k=a[j>>0]|0;if(!(k<<24>>24))break f;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(!(a[j>>0]|0))break f;a[l>>0]=105;a[m>>0]=99;i=m;break f}case 118:{if((a[i+2>>0]|0)!=105)break f;if((a[i+3>>0]|0)!=116)break f;if((a[i+4>>0]|0)!=97)break f;l=i+5|0;k=a[l>>0]|0;if(!(k<<24>>24))break f;j=l;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:l;break f}case 122:{if((a[i+2>>0]|0)!=105)break f;m=i+3|0;if((a[m>>0]|0)!=108)break f;l=i+4|0;if((a[l>>0]|0)!=97)break f;j=i+5|0;k=a[j>>0]|0;if(!(k<<24>>24))break f;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(!(a[j>>0]|0))break f;a[l>>0]=97;a[m>>0]=108;i=m;break f}default:break f}break}case 105:{if(((((l<<24>>24==105?(a[i+1>>0]|0)==116:0)?(a[i+2>>0]|0)==105:0)?(ba=i+3|0,(a[ba>>0]|0)==99):0)?(aa=i+4|0,(a[aa>>0]|0)==105):0)?(j=i+5|0,Z=a[j>>0]|0,Z<<24>>24!=0):0){k=Z;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(a[j>>0]|0){a[aa>>0]=105;a[ba>>0]=99;i=ba}}break}case 108:{if(l<<24>>24==108){switch(a[i+1>>0]|0){case 97:break;case 117:{if((a[i+2>>0]|0)!=102)break f;l=i+3|0;k=a[l>>0]|0;if(!(k<<24>>24))break f;j=l;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:l;break f}default:break f}l=i+2|0;if(((a[l>>0]|0)==99?(da=i+3|0,(a[da>>0]|0)==105):0)?(_=i+4|0,$=a[_>>0]|0,$<<24>>24!=0):0){j=_;k=$;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(a[j>>0]|0){a[da>>0]=105;a[l>>0]=99;i=l}}}break}case 115:{if((((l<<24>>24==115?(a[i+1>>0]|0)==115:0)?(a[i+2>>0]|0)==101:0)?(a[i+3>>0]|0)==110:0)?(ca=i+4|0,k=a[ca>>0]|0,k<<24>>24!=0):0){j=ca;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:ca}break}default:{}}while(0);l=a[i+1>>0]|0;g:do switch(l<<24>>24|0){case 97:{j=a[i>>0]|0;if(j<<24>>24==108){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 99:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==110){switch(a[i+3>>0]|0){case 101:case 97:break;default:{j=i;fa=399;break g}}j=i+4|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}case 101:{j=a[i>>0]|0;if(j<<24>>24==114){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 105:{j=a[i>>0]|0;if(j<<24>>24==99){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 108:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==98){switch(a[i+3>>0]|0){case 105:case 97:break;default:{j=i;fa=399;break g}}j=i+4|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}case 110:{j=a[i>>0]|0;if(j<<24>>24==116){switch(a[i+2>>0]|0){case 97:{j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}case 101:break;default:break g}if(l<<24>>24==110){j=i+3|0;if((a[j>>0]|0)!=109){fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}j=i+4|0;if((a[j>>0]|0)==101){j=i+5|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}else{fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}}else{j=i;fa=399}}else fa=400;break}case 111:{j=a[i>>0]|0;if(j<<24>>24==117){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}k=i+3|0;if(l<<24>>24==111&(j<<24>>24==110?((a[k>>0]|0)+-115&255)<2:0)?(a[i+2>>0]|0)==105:0){j=(wq(k)|0)==0;j=j?i:k;fa=399}else{j=i;fa=399}break}case 115:{j=a[i>>0]|0;if(j<<24>>24==109)if((a[i+2>>0]|0)==105){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}else fa=400;break}case 116:switch(a[i>>0]|0){case 101:{if(l<<24>>24!=116){j=i;fa=399;break g}if((a[i+2>>0]|0)!=97){j=i;fa=399;break g}j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}case 105:{if(l<<24>>24!=116){j=i;fa=399;break g}if((a[i+2>>0]|0)!=105){j=i;fa=399;break g}j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}default:{j=i;fa=399;break g}}case 117:{j=a[i>>0]|0;if(j<<24>>24==115)if((a[i+2>>0]|0)==111){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}else fa=400;break}case 122:case 118:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==105){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}default:{j=i;fa=399}}while(0);if((fa|0)==399){i=j;j=a[j>>0]|0;fa=400}do if((fa|0)==400)if(j<<24>>24==101){k=i+1|0;if(!(wq(k)|0)){if(vq(k)|0){if((yq(k)|0?((a[k>>0]|0)+-119&255)>=3:0)?(ea=a[i+2>>0]|0,ea<<24>>24):0){j=(ea<<24>>24)+-97|0;if((j|0)==24)j=yq(i+3|0)|0;else j=1-(a[26176+j>>0]|0)|0;if(j|0?yq(i+3|0)|0:0)break}i=k}}else i=k}while(0);if((wq(i)|0)!=0?(a[i>>0]|0)==108:0){fa=i+1|0;i=(a[fa>>0]|0)==108?fa:i}k=Eu(i)|0;c[e>>2]=k;a[ga+k>>0]=0;j=a[i>>0]|0;if(j<<24>>24)do{i=i+1|0;k=k+-1|0;a[ga+k>>0]=j;j=a[i>>0]|0}while(j<<24>>24!=0)}else{if((r|0)>0){i=0;k=0;do{j=a[o+k>>0]|0;if((j+-65&255)<26)j=(j&255)+32&255;else i=(j+-48&255)<10?1:i;a[ga+k>>0]=j;k=k+1|0}while((k|0)!=(r|0));if(!i){i=r;fa=31}else{i=r;j=3}}else{i=0;fa=31}if((fa|0)==31)j=10;if((j<<1|0)<(r|0)){i=j;j=r-j|0;do{a[ga+i>>0]=a[ga+j>>0]|0;j=j+1|0;i=i+1|0}while((j|0)<(r|0))}a[ga+i>>0]=0;c[e>>2]=i}while(0);c[d>>2]=c[ha>>2];c[f>>2]=ia;c[g>>2]=c[ja>>2];g=b+16|0;ja=c[g>>2]|0;c[g>>2]=ja+1;c[h>>2]=ja;ja=0;Ra=ka;return ja|0}function vq(b){b=b|0;var c=0,d=0;c=a[b>>0]|0;if(!(c<<24>>24)){d=0;return d|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;b=b+1|0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;d=17;break}}if((d|0)==17)return b|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;if(!(a[b>>0]|0)){d=0;return d|0}while(1)if(!(xq(b)|0))break;else b=b+1|0;if(!(a[b>>0]|0)){d=1;return d|0}while(1)if(!(yq(b)|0))break;else b=b+1|0;d=(a[b>>0]|0)==0&1;return d|0}function wq(b){b=b|0;var c=0,d=0,e=0,f=0;c=a[b>>0]|0;if(!(c<<24>>24)){f=0;return f|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;d=b+1|0;c=a[d>>0]|0;if(!(c<<24>>24)){e=0;f=20;break}else b=d}if((f|0)==20)return e|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;c=a[b>>0]|0;if(!(c<<24>>24)){f=0;return f|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;d=b+1|0;c=a[d>>0]|0;if(!(c<<24>>24)){e=0;f=20;break}else b=d}if((f|0)==20)return e|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;f=(a[b>>0]|0)!=0&1;return f|0}function xq(b){b=b|0;var c=0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;return b|0}c=(c<<24>>24)+-97|0;if((c|0)==24){b=yq(b+1|0)|0;return b|0}else{b=1-(a[26176+c>>0]|0)|0;return b|0}return 0}function yq(b){b=b|0;var c=0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;return b|0}c=(c<<24>>24)+-97|0;if((c|0)!=24){b=a[26176+c>>0]|0;return b|0}c=a[b+1>>0]|0;if(!(c<<24>>24)){b=1;return b|0}c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+2|0)|0;else c=1-(a[26176+c>>0]|0)|0;b=(c|0)!=0&1;return b|0}function zq(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+32|0;w=x+16|0;s=x+8|0;o=x;v=x+24|0;t=c[(c[d+4>>2]|0)+8>>2]|0;j=c[f>>2]|0;i=b[j+8>>1]|0;if((i&514)==514?(a[j+10>>0]|0)==1:0){u=c[j+16>>2]|0;k=j}else if(!(i&1)){u=Gg(j,1)|0;k=c[f>>2]|0}else{u=0;k=j}i=b[k+8>>1]|0;if((i&2)!=0?(a[k+10>>0]|0)==1:0)i=c[k+12>>2]|0;else p=9;do if((p|0)==9){j=i&65535;if(!(j&16)){if(j&1|0){i=0;break}i=Fg(k,1)|0;break}else{i=c[k+12>>2]|0;if(!(j&16384))break;i=(c[k>>2]|0)+i|0;break}}while(0);k=i+1|0;a:do if((e|0)!=2){b:do if(((!((u|0)==0|(t|0)==0)?(l=t+16|0,c[l>>2]|0):0)?(m=Xa[(a[t>>0]<<24>>24==1?154:155)&255](u,k)|0,m=(c[t+12>>2]|0)+-1&m,n=c[l>>2]|0,n|0):0)?(h=c[n+(m<<3)>>2]|0,q=(a[t>>0]|0)==1?79:80,g=c[n+(m<<3)+4>>2]|0,(h|0)!=0&(g|0)!=0):0){while(1){h=h+-1|0;if(!(Za[q&127](c[g+12>>2]|0,c[g+16>>2]|0,u,k)|0))break;g=c[g>>2]|0;if(!((h|0)!=0&(g|0)!=0))break b}h=c[g+8>>2]|0;if(h|0){g=d;j=h;break a}}while(0);c[s>>2]=u;g=Bb(53600,s)|0;c[d+20>>2]=1;yc(c[d>>2]|0,g,-1,1,-1)|0;if(!g){Ra=x;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=x;return}else{d=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=x;return}}else{i=c[(c[d>>2]|0)+32>>2]|0;c[v>>2]=0;c[o>>2]=-1;c[o+4>>2]=v;yd(i,1004,o)|0;i=f+4|0;j=c[i>>2]|0;g=b[j+8>>1]|0;if((c[v>>2]|0)==0&(g&32)==0){c[d+20>>2]=1;yc(c[d>>2]|0,53578,-1,1,-1)|0;Ra=x;return}if((g&2)!=0?(a[j+10>>0]|0)==1:0){r=c[j+12>>2]|0;p=24}else p=19;do if((p|0)==19){h=g&65535;if(!(h&16)){if(h&1|0)break;r=Fg(j,1)|0;p=24;break}else{g=c[j+12>>2]|0;if(!(h&16384)){r=g;p=24;break}r=(c[j>>2]|0)+g|0;p=24;break}}while(0);if((p|0)==24?!((u|0)==0|(r|0)!=4):0){s=mc(c[i>>2]|0)|0;s=c[s>>2]|0;h=s;if((Ep(t,u,k,s)|0)!=(s|0)){g=d;j=h;break}c[d+20>>2]=1;yc(c[d>>2]|0,34831,-1,1,-1)|0;g=d;j=h;break}c[d+20>>2]=1;yc(c[d>>2]|0,53555,-1,1,-1)|0;Ra=x;return}while(0);u=c[(c[g>>2]|0)+32>>2]|0;c[v>>2]=0;c[w>>2]=-1;c[w+4>>2]=v;yd(u,1004,w)|0;if((c[v>>2]|0)==0?(b[(c[f>>2]|0)+8>>1]&32)==0:0){Ra=x;return}i=c[g>>2]|0;g=c[i+32>>2]|0;if(g|0?(c[g+108>>2]|0)<4:0){g=c[g+236>>2]|0;if(g|0){c[g+12>>2]=18;w=g+36|0;c[w>>2]=(c[w>>2]|0)+1}c[d+20>>2]=18;yc(i,31223,-1,1,0)|0;Ra=x;return}do if((c[i+24>>2]|0)<32)if(!(Eg(i,32,0)|0)){g=i+8|0;h=c[i+16>>2]|0;break}else{Ra=x;return}else{h=c[i+20>>2]|0;c[i+16>>2]=h;g=i+8|0;b[g>>1]=b[g>>1]&13}while(0);a[h>>0]=j;a[h+1>>0]=j>>8;a[h+2>>0]=j>>16;a[h+3>>0]=j>>24;c[i+12>>2]=4;b[g>>1]=16;a[i+10>>0]=1;Ra=x;return}function Aq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Xq(1,a,b,c,d,e,f)|0}function Bq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Xq(0,a,b,c,d,e,f)|0}function Cq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=d+20|0;c[t>>2]=0;o=d+40|0;g[o>>3]=5.0e6;p=c[d>>2]|0;if((p|0)>0){q=c[d+4>>2]|0;r=b+24|0;m=-1;j=-1;n=0;f=-1;l=-1;e=0;a:while(1){b:do if(!(a[q+(n*12|0)+5>>0]|0))if((a[q+(n*12|0)+4>>0]|0)==64){s=18;break a}else{h=m;i=j}else{i=c[q+(n*12|0)>>2]|0;if((i|0)<0)k=1;else k=(i|0)==((c[r>>2]|0)+1|0);h=a[q+(n*12|0)+4>>0]|0;c:do if(!((f|0)<0&(k&h<<24>>24==2))){switch(h<<24>>24){case 2:{s=13;break c}case 64:break;default:{i=j;break c}}if((i|0)>-1?(i|0)<=(c[r>>2]|0):0){e=i+2|0;c[t>>2]=e;g[o>>3]=2.0;i=j;f=n;h=64}else{i=j;h=64}}else{c[t>>2]=1;g[o>>3]=1.0;f=n;e=1;s=13}while(0);if((s|0)==13){s=0;i=(i|0)==((c[r>>2]|0)+2|0)?n:j;h=2}if(k){k=(h&255)+-4|0;switch(k>>>2|k<<30|0){case 0:case 7:{h=n;break b}case 3:case 1:{h=m;l=n;break b}default:{h=m;break b}}}else h=m}while(0);n=n+1|0;if((n|0)>=(p|0))break;else{m=h;j=i}}if((s|0)==18){c[t>>2]=0;g[o>>3]=1.e+50;d=d+48|0;c[d>>2]=0;c[d+4>>2]=262144;return 0}if((e|0)==1){e=d+56|0;c[e>>2]=c[e>>2]|1;e=1}if((f|0)>-1){s=c[d+16>>2]|0;c[s+(f<<3)>>2]=1;a[s+(f<<3)+4>>0]=1;f=2}else f=1;if((i|0)>-1){e=e|65536;c[t>>2]=e;c[(c[d+16>>2]|0)+(i<<3)>>2]=f;f=f+1|0}if((h|0)>-1){e=e|131072;c[t>>2]=e;c[(c[d+16>>2]|0)+(h<<3)>>2]=f;f=f+1|0}if((l|0)>-1){c[t>>2]=e|262144;c[(c[d+16>>2]|0)+(l<<3)>>2]=f}}if((c[d+8>>2]|0)!=1)return 0;e=c[d+12>>2]|0;t=c[e>>2]|0;if((t|0)>=0?(t|0)!=((c[b+24>>2]|0)+1|0):0)return 0;c[d+24>>2]=(a[e+4>>0]|0)==0?54528:54523;c[d+32>>2]=1;return 0}function Dq(a){a=a|0;var b=0,d=0;gc(c[a+216>>2]|0)|0;b=a+56|0;gc(c[b>>2]|0)|0;gc(c[b+4>>2]|0)|0;gc(c[b+8>>2]|0)|0;gc(c[b+12>>2]|0)|0;gc(c[b+16>>2]|0)|0;gc(c[b+20>>2]|0)|0;gc(c[b+24>>2]|0)|0;gc(c[b+28>>2]|0)|0;gc(c[b+32>>2]|0)|0;gc(c[b+36>>2]|0)|0;gc(c[b+40>>2]|0)|0;gc(c[b+44>>2]|0)|0;gc(c[b+48>>2]|0)|0;gc(c[b+52>>2]|0)|0;gc(c[b+56>>2]|0)|0;gc(c[b+60>>2]|0)|0;gc(c[b+64>>2]|0)|0;gc(c[b+68>>2]|0)|0;gc(c[b+72>>2]|0)|0;gc(c[b+76>>2]|0)|0;gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;gc(c[b+116>>2]|0)|0;gc(c[b+120>>2]|0)|0;gc(c[b+124>>2]|0)|0;gc(c[b+128>>2]|0)|0;gc(c[b+132>>2]|0)|0;gc(c[b+136>>2]|0)|0;gc(c[b+140>>2]|0)|0;gc(c[b+144>>2]|0)|0;gc(c[b+148>>2]|0)|0;gc(c[b+152>>2]|0)|0;gc(c[b+156>>2]|0)|0;b=c[a+244>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+220>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+224>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+40>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+44>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);d=c[a+36>>2]|0;Wa[c[(c[d>>2]|0)+8>>2]&127](d)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Eq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;d=Ra;Ra=Ra+48|0;e=d;b=d+44|0;c[b>>2]=0;h=c[a+16>>2]|0;f=c[a+12>>2]|0;g=c[a+20>>2]|0;i=(c[a+40>>2]|0)==0?59952:54718;c[e>>2]=h;c[e+4>>2]=g;c[e+8>>2]=h;c[e+12>>2]=g;c[e+16>>2]=h;c[e+20>>2]=g;c[e+24>>2]=h;c[e+28>>2]=g;c[e+32>>2]=i;c[e+36>>2]=h;c[e+40>>2]=g;_q(b,f,54532,e);b=c[b>>2]|0;if(b|0){i=b;Ra=d;return i|0}Dq(a)|0;i=0;Ra=d;return i|0}function Fq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;do if(!(mb()|0)){if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](96)|0;c[b>>2]=a;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](96)|0;if((c[14985]|0)>>>0<96)c[14985]=96;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a)break;d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d;c[b>>2]=a}d=a+96|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(d|0));f=0;return f|0}while(0);c[b>>2]=0;f=7;return f|0}function Gq(a){a=a|0;var b=0;$q(a);if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Hq(f,h,i,j,k){f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;K=Ra;Ra=Ra+128|0;I=K+104|0;E=K+96|0;F=K+64|0;w=K+56|0;v=K+48|0;z=K+40|0;A=K;B=K+116|0;x=K+112|0;y=K+108|0;G=c[f>>2]|0;r=h&65535;if(!r){j=0;J=0}else{j=1;J=c[k>>2]|0}if(!(h&65536)){t=0;s=0}else{s=c[k+(j<<2)>>2]|0;t=s;j=j+1|0}if(!(h&131072)){D=0;o=0}else{o=c[k+(j<<2)>>2]|0;D=o;j=j+1|0}if(!(h&262144)){C=0;p=0}else{p=c[k+(j<<2)>>2]|0;C=p}$q(f);do if(D){n=D+8|0;j=b[n>>1]|0;u=j&31;k=d[816+u>>0]|0;if((u|16|0)==18){j=a[D+10>>0]|0;k=D+16|0;m=D+12|0;if(!(Lg(c[k>>2]|0,z,c[m>>2]|0,j)|0))j=b[n>>1]|0;else{if(!(Og(c[k>>2]|0,A,c[m>>2]|0,j)|0)){q=A;u=c[q+4>>2]|0;j=D;c[j>>2]=c[q>>2];c[j+4>>2]=u;j=4}else{g[D>>3]=+g[z>>3];j=8}j=b[n>>1]&-3|j;b[n>>1]=j}k=d[816+(j&31)>>0]|0}if((k|0)==1){j=j&65535;if(j&4|0){k=o;j=c[k>>2]|0;k=c[k+4>>2]|0;break}if(j&8|0){j=Mg(+g[D>>3])|0;k=L()|0;break}if(!(j&18)){j=0;k=0}else{j=Ng(a[D+10>>0]|0,c[D+12>>2]|0,c[D+16>>2]|0)|0;k=L()|0}}else{j=0;k=-2147483648}}else{j=0;k=-2147483648}while(0);u=f+72|0;q=u;c[q>>2]=j;c[q+4>>2]=k;do if(C){n=C+8|0;j=b[n>>1]|0;q=j&31;k=d[816+q>>0]|0;if((q|16|0)==18){j=a[C+10>>0]|0;k=C+16|0;m=C+12|0;if(!(Lg(c[k>>2]|0,z,c[m>>2]|0,j)|0))j=b[n>>1]|0;else{if(!(Og(c[k>>2]|0,A,c[m>>2]|0,j)|0)){o=A;q=c[o+4>>2]|0;j=C;c[j>>2]=c[o>>2];c[j+4>>2]=q;j=4}else{g[C>>3]=+g[z>>3];j=8}j=b[n>>1]&-3|j;b[n>>1]=j}k=d[816+(j&31)>>0]|0}if((k|0)==1){j=j&65535;if(j&4|0){k=p;j=c[k>>2]|0;k=c[k+4>>2]|0;break}if(j&8|0){j=Mg(+g[C>>3])|0;k=L()|0;break}if(!(j&18)){j=0;k=0}else{j=Ng(a[C+10>>0]|0,c[C+12>>2]|0,c[C+16>>2]|0)|0;k=L()|0}}else{j=-1;k=2147483647}}else{j=-1;k=2147483647}while(0);q=f+80|0;p=q;c[p>>2]=j;c[p+4>>2]=k;if(!i)j=a[G+235>>0]|0;else j=(a[i>>0]|0)==68&1;a[f+52>>0]=j;h=h&65535;b[f+4>>1]=h;do if(r>>>0>1){o=r+-2|0;k=J+8|0;do if(J){j=b[k>>1]|0;if((j&514)==514?(a[J+10>>0]|0)==1:0)j=c[J+16>>2]|0;else{if(j&1){H=52;break}j=Gg(J,1)|0}if(j){p=j;m=0}else H=52}else H=52;while(0);if((H|0)==52)if(!(-1431655766>>>(b[k>>1]&31)&1)){f=7;Ra=K;return f|0}else{p=0;m=1}k=f+20|0;c[k>>2]=0;if(!t)j=0;else{j=e[t+8>>1]|0;do if(!(j&4)){if(j&8|0){j=Mg(+g[t>>3])|0;L()|0;break}if(!(j&18))j=0;else{j=Ng(a[t+10>>0]|0,c[t+12>>2]|0,c[t+16>>2]|0)|0;L()|0}}else j=c[s>>2]|0;while(0);c[k>>2]=j}k=c[G+36>>2]|0;r=c[G+28>>2]|0;t=d[G+232>>0]|0;s=c[G+24>>2]|0;i=f+16|0;n=G+8|0;M=A+24|0;c[M>>2]=0;c[M+4>>2]=0;c[M+8>>2]=0;c[A>>2]=k;c[A+4>>2]=j;c[A+8>>2]=r;c[A+16>>2]=s;c[A+20>>2]=o;c[A+12>>2]=t;a:do if(m){c[i>>2]=0;j=0}else{j=er(A,p,Eu(p)|0,i,z)|0;do if(!j){j=c[i>>2]|0;if(c[A+32>>2]|0){ar(j);c[i>>2]=0;break}if(!j){j=0;break a}j=cr(i,12)|0;if(!j){j=c[i>>2]|0;k=dr(j,12)|0;if(!k)break a;else{l=k;H=70}}else{l=j;H=70}}else{l=j;H=70}while(0);b:do if((H|0)==70){ar(c[i>>2]|0);c[i>>2]=0;switch(l|0){case 1:break b;case 18:break;default:{M=l;Ra=K;return M|0}}c[v>>2]=12;Wp(n,54811,v);M=1;Ra=K;return M|0}while(0);c[w>>2]=p;Wp(n,54863,w);M=1;Ra=K;return M|0}while(0);M=c[f>>2]|0;c[z>>2]=0;c[A>>2]=0;c[B>>2]=0;fr(f,j,A,B,z);j=c[A>>2]|0;do if((c[z>>2]|0)==0&(j|0)>1?a[M+232>>0]|0:0){k=pb((c[B>>2]<<3)+(j*24|0)|0,0)|0;m=k+((c[A>>2]|0)*24|0)|0;if(!k){c[z>>2]=7;break}c[x>>2]=k;c[y>>2]=m;gr(f,0,c[i>>2]|0,x,y,z);j=((c[x>>2]|0)-k|0)/24|0;c[A>>2]=j;c[B>>2]=(c[y>>2]|0)-m>>2;if((c[z>>2]|0)==0?(M=hr(f,0,k,j)|0,c[z>>2]=M,(M|0)==0&(c[B>>2]|0)>0):0){j=0;do{M=hr(f,c[m+(j<<2)>>2]|0,k,c[A>>2]|0)|0;c[z>>2]=M;j=j+1|0}while((M|0)==0?(j|0)<(c[B>>2]|0):0)}if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{M=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while(0);ir(f,c[i>>2]|0,z);j=c[z>>2]|0;k=G+248|0;m=c[k>>2]|0;do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(n|0){if(c[n+480>>2]|0){Xd(n,m);break}M=m;if((c[n+304>>2]|0)>>>0<=M>>>0?(c[n+308>>2]|0)>>>0>M>>>0:0){M=n+300|0;c[m>>2]=c[M>>2];c[M>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{M=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[k>>2]=0;if(!j){c[f+40>>2]=c[f+44>>2];M=f+32|0;c[M>>2]=0;c[M+4>>2]=0;break}else{M=j;Ra=K;return M|0}}while(0);c:do switch(h<<16>>16){case 0:{l=c[G+220>>2]|0;if((D|0)!=0|(C|0)!=0){H=u;E=c[H>>2]|0;H=c[H+4>>2]|0;J=q;I=c[J>>2]|0;J=c[J+4>>2]|0;j=(a[f+52>>0]|0)==0?54528:54523;c[F>>2]=l;M=F+8|0;c[M>>2]=E;c[M+4>>2]=H;M=F+16|0;c[M>>2]=I;c[M+4>>2]=J;c[F+24>>2]=j;j=Bb(54721,F)|0}else{j=(a[f+52>>0]|0)==0?54528:54523;c[E>>2]=l;c[E+4>>2]=j;j=Bb(54783,E)|0}if(!j){M=7;Ra=K;return M|0}l=qd(c[G+12>>2]|0,j,-1,129,0,f+12|0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);H=116;break c}else{H=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);H=116;break c}}case 1:{m=f+12|0;l=c[m>>2]|0;if(!l){k=c[f>>2]|0;j=k+216|0;l=c[j>>2]|0;do if(!l){c[I>>2]=c[k+220>>2];j=Bb(54912,I)|0;if(!j){M=7;Ra=K;return M|0}l=qd(c[k+12>>2]|0,j,-1,129,0,m,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{M=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}if(!l){l=c[m>>2]|0;break}else{M=l;Ra=K;return M|0}}else{c[m>>2]=l;c[j>>2]=0}while(0);a[f+8>>0]=1}l=Yc(l,1,J)|0;H=116;break}default:{}}while(0);if((H|0)==116?l|0:0){M=l;Ra=K;return M|0}M=Iq(f)|0;Ra=K;return M|0}function Iq(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=Ra;Ra=Ra+16|0;d=q;if((e[b+4>>1]|0)<2){d=b+12|0;if((Gc(c[d>>2]|0)|0)==100){o=Oc(c[d>>2]|0,0)|0;p=L()|0;b=b+32|0;c[b>>2]=o;c[b+4>>2]=p;b=0;Ra=q;return b|0}a[b+6>>0]=1;g=c[d>>2]|0;if(!g){b=0;Ra=q;return b|0}d=c[g>>2]|0;b=g+136|0;p=c[b+4>>2]|0;if((p|0)>0|(p|0)==0&(c[b>>2]|0)>>>0>0)hc(d,g);f=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;b=g+64|0;c[b>>2]=0;c[b+4>>2]=0;if((f|0)==3082|(a[d+81>>0]|0)!=0){og(d);b=7;Ra=q;return b|0}else{b=c[d+68>>2]&f;Ra=q;return b|0}}c[d>>2]=0;f=c[b+16>>2]|0;if(f){g=b+7|0;h=b+12|0;i=f+32|0;j=b+6|0;k=b+88|0;l=f+24|0;o=b+32|0;do{if((a[g>>0]|0)==0?(m=c[h>>2]|0,m|0):0){n=c[m>>2]|0;r=m+136|0;s=c[r+4>>2]|0;if((s|0)>0|(s|0)==0&(c[r>>2]|0)>>>0>0)hc(n,m);s=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;r=m+64|0;c[r>>2]=0;c[r+4>>2]=0;if((s|0)==3082|(a[n+81>>0]|0)!=0)og(n)}qr(b,f,d);s=a[i>>0]|0;a[j>>0]=s;a[g>>0]=1;c[k>>2]=1;t=l;n=c[t+4>>2]|0;r=o;c[r>>2]=c[t>>2];c[r+4>>2]=n;if(s<<24>>24)break}while((rr(b,d)|0)!=0);d=c[d>>2]|0;if(!d){d=o;p=22}}else{a[b+6>>0]=1;d=b+32|0;p=22}do if((p|0)==22){f=d;d=c[f>>2]|0;f=c[f+4>>2]|0;if(!(a[b+52>>0]|0)){t=b+80|0;s=c[t+4>>2]|0;if(!((f|0)>(s|0)|((f|0)==(s|0)?d>>>0>(c[t>>2]|0)>>>0:0))){d=0;break}}else{t=b+72|0;s=c[t+4>>2]|0;if(!((f|0)<(s|0)|((f|0)==(s|0)?d>>>0<(c[t>>2]|0)>>>0:0))){d=0;break}}a[b+6>>0]=1;d=0}while(0);t=d;Ra=q;return t|0}function Jq(b){b=b|0;var c=0;c=b+6|0;if(!(a[c>>0]|0)){c=0;return c|0}$q(b);a[c>>0]=1;c=1;return c|0}function Kq(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=c[d>>2]|0;i=c[h+24>>2]|0;switch(g-i|0){case 0:{g=c[f>>2]|0;h=g+8|0;if(!((b[h>>1]&9216)==0?!(c[g+24>>2]|0):0))Cg(g);c[g>>2]=54938;c[g+16>>2]=d;b[h>>1]=-31231;a[g+11>>0]=112;c[g+36>>2]=97;f=0;return f|0}case 1:{d=d+32|0;i=c[d>>2]|0;d=c[d+4>>2]|0;g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=i;c[f+4>>2]=d;b[h>>1]=4;f=0;return f|0}else{Pg(g,i,d);f=0;return f|0}}case 2:{if(c[d+16>>2]|0){i=c[d+20>>2]|0;d=((i|0)<0)<<31>>31;g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=i;c[f+4>>2]=d;b[h>>1]=4;f=0;return f|0}else{Pg(g,i,d);f=0;return f|0}}if(!(c[h+44>>2]|0)){g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=0;c[f+4>>2]=0;b[h>>1]=4;f=0;return f|0}else{Pg(g,0,0);f=0;return f|0}}break}default:i=g}g=ur(0,d)|0;if(g|0){f=g;return f|0}k=c[d+12>>2]|0;j=(k|0)==0;if(!j?(c[k+120>>2]|0)!=0:0)g=(e[k+144>>1]|0)+-1|0;else g=-1;if((g|0)<=(i|0)){f=0;return f|0}g=i+1|0;do if(j)d=29576;else{h=c[k+120>>2]|0;if(h|0?g>>>0<(e[k+144>>1]|0)>>>0:0){d=h+(g*40|0)|0;break}d=c[k>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);g=d+8|0;h=e[g>>1]|0;if(h&2048|0)b[g>>1]=h&59391|4096;if(!j){h=c[k>>2]|0;i=k+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g}Dc(f,d);f=0;return f|0}function Lq(a,b){a=a|0;b=b|0;var d=0;d=a+32|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Mq(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;ca=Ra;Ra=Ra+160|0;q=ca+48|0;E=ca+40|0;D=ca+32|0;C=ca+24|0;Z=ca+16|0;y=ca+8|0;u=ca;O=ca+136|0;$=ca+80|0;W=ca+72|0;X=ca+68|0;Y=ca+64|0;ba=ca+60|0;z=ca+56|0;c[ba>>2]=0;c[z>>2]=0;x=(h|0)>1;a:do if(x){_=f+24|0;h=c[_>>2]|0;if(-1431655766>>>(b[(c[i>>2]|0)+8>>1]&31)&1|0?(p=c[i+(h+2<<2)>>2]|0,o=p+8|0,k=b[o>>1]|0,(-1431655766>>>(k&31)&1|0)==0):0){do if(p){if((k&514)==514?(a[p+10>>0]|0)==1:0){q=c[p+16>>2]|0;break}if(!(k&1)){q=Gg(p,1)|0;k=b[o>>1]|0}else q=0}else q=0;while(0);if((k&2)!=0?(a[p+10>>0]|0)==1:0)h=c[p+12>>2]|0;else aa=14;do if((aa|0)==14){k=k&65535;if(!(k&16)){if(k&1|0){h=0;break}h=Fg(p,1)|0;break}else{h=c[p+12>>2]|0;if(!(k&16384))break;h=(c[p>>2]|0)+h|0;break}}while(0);b:do if(!q)k=7;else{c:do switch(h|0){case 8:{o=a[q>>0]|0;d:do if(!(o<<24>>24)){k=37598;aa=22}else{_=o&255;k=208+_|0;do if((_|32|0)==111){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=37599;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==112){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=37600;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==116){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=37601;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==105){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=37602;aa=22;break d}k=k&255;if((k|32|0)!=109){n=109;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=37603;aa=22;break d}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=37604;aa=22;break d}k=k&255;if((k|32|0)!=122){n=122;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=37605;aa=22;break d}k=k&255;if((k|32|0)==101)break d;else{n=101;k=208+k|0}}else n=105}else n=116}else n=112}else n=111;while(0);t=d[k>>0]|0;aa=26}while(0);if((aa|0)==22){t=0;n=a[208+(d[k>>0]|0)>>0]|0;aa=26}if((aa|0)==26?(t|0)!=(n&255|0):0)break c;k=Dr(f,0)|0;break b}case 7:{o=a[q>>0]|0;e:do if(!(o<<24>>24)){k=54949;aa=29}else{Z=o&255;k=208+Z|0;do if((Z|32|0)==114){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54950;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==101){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54951;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==98){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54952;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==117){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54953;aa=29;break e}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54954;aa=29;break e}k=k&255;if((k|32|0)!=108){n=108;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54955;aa=29;break e}k=k&255;if((k|32|0)==100)break e;else{n=100;k=208+k|0}}else n=117}else n=98}else n=101}else n=114;while(0);s=d[k>>0]|0;r=n;aa=33}while(0);if((aa|0)==29){s=0;r=a[208+(d[k>>0]|0)>>0]|0;aa=33}if((aa|0)==33?(s|0)!=(r&255|0):0)break c;k=Lr(f,0)|0;c[O>>2]=k;if(!k){c[$>>2]=0;c[u>>2]=c[f+220>>2];k=Bb(55001,u)|0;do if(k){l=qd(c[f+12>>2]|0,k,-1,128,0,$,0)|0;c[O>>2]=l;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{Z=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}if(!l){k=c[_>>2]|0;k=Yv(k|0,((k|0)<0)<<31>>31|0,12,0)|0;k=Sv(k|0,L()|0,12,0)|0;C=pb(k,L()|0)|0;if(!C){c[O>>2]=7;n=0;m=0;l=0;k=0;break}gw(C|0,0,k|0)|0;l=(c[_>>2]|0)+1|0;m=C+(l<<2)|0;l=m+(l<<2)|0;w=f+44|0;x=f+272|0;y=f+284|0;j=f+280|0;i=f+234|0;z=f+32|0;A=f+264|0;B=f+260|0;n=0;v=c[$>>2]|0;while(1){if((Gc(v)|0)!=100){aa=89;break}if(!(c[w>>2]|0))u=0;else u=Nc(v,(c[_>>2]|0)+1|0)|0;o=Oc(v,0)|0;p=L()|0;h=x;k=c[h>>2]|0;h=c[h+4>>2]|0;do if(!((h|0)>(p|0)|(h|0)==(p|0)&k>>>0>o>>>0)){if((k|0)==(o|0)&(h|0)==(p|0)?(c[y>>2]|0)==0:0){aa=52;break}if((c[j>>2]|0)!=(u|0)){aa=52;break}if((c[A>>2]|0)<=(c[B>>2]|0))aa=53;else aa=52}else aa=52;while(0);if((aa|0)==52){aa=0;k=Sr(f)|0;if(!k)aa=53}if((aa|0)==53){aa=0;k=x;c[k>>2]=o;c[k+4>>2]=p;c[j>>2]=u;c[y>>2]=0;k=0}c[O>>2]=k;gw(C|0,0,(c[_>>2]<<2)+4|0)|0;f:do if(!k){r=v+120|0;s=v+144|0;t=v+40|0;g:do if(!v){k=c[_>>2]|0;if((k|0)<=0)break;o=c[z>>2]|0;h=0;do{if(!(a[o+h>>0]|0)){c[C+(h<<2)>>2]=0;k=c[_>>2]|0}h=h+1|0}while((h|0)<(k|0))}else{q=0;do{if((q|0)>=(c[_>>2]|0))break g;p=q;q=q+1|0;if(!(a[(c[z>>2]|0)+p>>0]|0)){k=c[r>>2]|0;do if(!k)aa=66;else{if(q>>>0>=(e[s>>1]|0)>>>0){aa=66;break}k=k+(q*40|0)|0}while(0);if((aa|0)==66){aa=0;k=c[v>>2]|0;c[k+64>>2]=25;Ne(k,25);k=29576}h=b[k+8>>1]|0;do if((h&514)==514){if((a[k+10>>0]|0)!=1){aa=71;break}o=c[k+16>>2]|0}else aa=71;while(0);do if((aa|0)==71){aa=0;if(h&1){o=0;break}o=Gg(k,1)|0}while(0);k=c[v>>2]|0;h=c[t>>2]|0;if((h|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7}else k=c[k+68>>2]&h;c[t>>2]=k;k=Mr(f,u,o,p,C+(p<<2)|0)|0;Y=Lc(v,q)|0;Z=C+(c[_>>2]<<2)|0;c[Z>>2]=(c[Z>>2]|0)+Y}else k=0}while(!(k|0));c[O>>2]=k;break f}while(0);c[O>>2]=0;k=0}while(0);if(a[i>>0]|0){Br(O,f,C);k=c[O>>2]|0}h=(k|0)==0;do if(h){n=n+1|0;if((c[_>>2]|0)<0){k=v;break}k=0;while(1){aa=m+(k<<2)|0;c[aa>>2]=(c[aa>>2]|0)+(c[C+(k<<2)>>2]|0);if((k|0)<(c[_>>2]|0))k=k+1|0;else{k=v;break}}}else{gc(v)|0;k=0}while(0);if(h)v=k;else{aa=88;break}}if((aa|0)==88){c[$>>2]=k;k=C;break}else if((aa|0)==89){c[$>>2]=v;k=C;break}}else{n=0;m=0;l=0;k=0}}else{c[O>>2]=7;n=0;m=0;l=0;k=0}while(0);if(a[f+232>>0]|0)Cr(O,f,m,l,n);do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{_=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-_;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);k=c[$>>2]|0;if(k){k=gc(k)|0;l=c[O>>2]|0;if(!l)c[O>>2]=k;else k=l}else k=c[O>>2]|0}break b}case 15:{o=a[q>>0]|0;h:do if(!(o<<24>>24)){k=54957;aa=103}else{V=o&255;k=208+V|0;do if((V|32|0)==105){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54958;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==110){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54959;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==116){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54960;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==101){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54961;aa=103;break h}k=k&255;if((k|32|0)!=103){n=103;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54962;aa=103;break h}k=k&255;if((k|32|0)!=114){n=114;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54963;aa=103;break h}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=54964;aa=103;break h}k=k&255;if((k|32|0)!=116){n=116;k=208+k|0;break}k=a[q+8>>0]|0;if(!(k<<24>>24)){k=54965;aa=103;break h}k=k&255;if((k|32|0)!=121){n=121;k=208+k|0;break}k=a[q+9>>0]|0;if(!(k<<24>>24)){k=54966;aa=103;break h}if(k<<24>>24!=45){n=45;k=208+(k&255)|0;break}k=a[q+10>>0]|0;if(!(k<<24>>24)){k=54967;aa=103;break h}k=k&255;if((k|32|0)!=99){n=99;k=208+k|0;break}k=a[q+11>>0]|0;if(!(k<<24>>24)){k=54968;aa=103;break h}k=k&255;if((k|32|0)!=104){n=104;k=208+k|0;break}k=a[q+12>>0]|0;if(!(k<<24>>24)){k=54969;aa=103;break h}k=k&255;if((k|32|0)!=101){n=101;k=208+k|0;break}k=a[q+13>>0]|0;if(!(k<<24>>24)){k=54970;aa=103;break h}k=k&255;if((k|32|0)!=99){n=99;k=208+k|0;break}k=a[q+14>>0]|0;if(!(k<<24>>24)){k=54971;aa=103;break h}k=k&255;if((k|32|0)==107)break h;else{n=107;k=208+k|0}}else n=101}else n=116}else n=110}else n=105;while(0);w=d[k>>0]|0;v=n;aa=107}while(0);if((aa|0)==103){w=0;v=a[208+(d[k>>0]|0)>>0]|0;aa=107}if((aa|0)==107?(w|0)!=(v&255|0):0)break c;l=f+164|0;k=c[l>>2]|0;c[O>>2]=k;do if(!k){k=c[f+20>>2]|0;c[y>>2]=c[f+16>>2];c[y+4>>2]=k;k=Bb(52546,y)|0;if(!k){h=7;n=0;m=0;l=0;k=0;break}h=qd(c[f+12>>2]|0,k,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{V=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-V;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[O>>2]|0;c[l>>2]=k;if(!h)aa=116;else{n=0;m=0;l=0;k=0}}else aa=116;while(0);if((aa|0)==116){N=k;l=c[f+280>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(N,1)|0)){n=c[N+100>>2]|0;h=n+8|0;if(!(b[h>>1]&9216)){V=n;c[V>>2]=l;c[V+4>>2]=m;b[h>>1]=4;break}else{Pg(n,l,m);break}}while(0);V=f+252|0;l=c[V>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(N,2)|0)){h=c[N+100>>2]|0;n=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){U=n;c[U>>2]=l;c[U+4>>2]=m;b[h>>1]=4;break}else{Pg(n,l,m);break}}while(0);E=O+12|0;F=$+12|0;G=$+4|0;H=$+16|0;I=$+48|0;J=$+52|0;K=$+40|0;M=$+44|0;n=0;l=0;while(1){if((Gc(N)|0)!=100){m=0;o=1;U=l;break}C=Nc(N,0)|0;if((c[V>>2]|0)>0){D=((C|0)<0)<<31>>31;B=0;do{c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[E>>2]=19;m=$;h=m+56|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(h|0));m=Xp(f,C,B,-2,0,0,0,1,$)|0;do if(!m){c[F>>2]=O;m=eq(f,$,0,0)|0;if(m|0){v=0;o=0;break}m=gq(f,$)|0;if((m|0)!=100){v=0;o=0;break}h=0;o=0;do{t=c[I>>2]|0;s=c[J>>2]|0;A=t+s|0;p=a[t>>0]|0;m=p&255;do if(!(m&128)){q=1;m=p&255;r=0}else{U=d[t+1>>0]|0;m=U<<7|m&127;if(!(U&128)){q=2;r=0;break}U=d[t+2>>0]|0;m=U<<14|m&16383;if(!(U&128)){q=3;r=0;break}U=d[t+3>>0]|0;m=U<<21|m&2097151;if(!(U&128)){q=4;r=0;break}p=28;q=t+4|0;m=m&268435455;r=0;do{U=q;q=q+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,p|0)|0;m=Sv(T|0,L()|0,m|0,r|0)|0;r=L()|0;p=p+7|0}while(p>>>0<64&((U&128|0)!=0|0!=0));q=q-t|0}while(0);if((q|0)<(s|0)){j=c[K>>2]|0;i=c[M>>2]|0;z=(i|0)>0;y=t+q|0;p=0;w=0;x=0;while(1){s=a[y>>0]|0;q=s&255;do if(!(q&128)){v=1;u=0;t=s&255}else{U=d[y+1>>0]|0;q=U<<7|q&127;if(!(U&128)){v=2;u=0;t=q;break}U=d[y+2>>0]|0;q=U<<14|q&16383;if(!(U&128)){v=3;u=0;t=q;break}U=d[y+3>>0]|0;t=U<<21|q&2097151;if(!(U&128)){v=4;u=0;break}q=28;s=y+4|0;t=t&268435455;u=0;do{U=s;s=s+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,q|0)|0;t=Sv(T|0,L()|0,t|0,u|0)|0;u=L()|0;q=q+7|0}while(q>>>0<64&((U&128|0)!=0|0!=0));v=s-y|0}while(0);y=y+v|0;do if(y>>>0<A>>>0){if(!(u>>>0<0|(u|0)==0&t>>>0<2)){v=Sv(w|0,x|0,-2,-1)|0;u=Sv(v|0,L()|0,t|0,u|0)|0;v=L()|0;q=cw(m|0,r|0,3)|0;T=L()|0;U=Sv(m|0,r|0,C|0,D|0)|0;T=Sv(U|0,L()|0,q|0,T|0)|0;q=L()|0;U=cw(T|0,q|0,3)|0;s=L()|0;q=Sv(T|0,q|0,B|0,0)|0;s=Sv(q|0,L()|0,U|0,s|0)|0;U=L()|0;q=cw(s|0,U|0,3)|0;T=L()|0;U=Sv(s|0,U|0,p|0,((p|0)<0)<<31>>31|0)|0;T=Sv(U|0,L()|0,q|0,T|0)|0;q=L()|0;U=aw(0,u|0,32)|0;s=L()|0;q=Yv(T|0,q|0,9,0)|0;q=Sv(U|0,s|0,q|0,L()|0)|0;s=L()|0;if(z){t=0;do{U=a[j+t>>0]|0;q=Yv(q|0,s|0,9,0)|0;q=Sv(q|0,L()|0,U|0,((U|0)<0)<<31>>31|0)|0;s=L()|0;t=t+1|0}while((t|0)!=(i|0))}t=y;h=q^h;o=s^o;s=u;q=v;break}s=a[y>>0]|0;p=s&255;q=(p&128|0)==0;if(!((t|0)==0&(u|0)==0)){do if(q)q=1;else{U=d[y+1>>0]|0;p=U<<7|p&127;if(!(U&128)){q=2;break}U=d[y+2>>0]|0;p=U<<14|p&16383;if(!(U&128)){q=3;break}U=d[y+3>>0]|0;p=U<<21|p&2097151;if(!(U&128)){q=4;break}s=28;t=y+4|0;p=p&268435455;q=0;do{U=t;t=t+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,s|0)|0;p=Sv(T|0,L()|0,p|0,q|0)|0;q=L()|0;s=s+7|0}while(s>>>0<64&((U&128|0)!=0|0!=0));q=t-y|0}while(0);t=y+q|0;s=0;q=0;break}do if(q){t=1;p=s&255;q=0}else{U=d[y+1>>0]|0;p=U<<7|p&127;if(!(U&128)){t=2;q=0;break}U=d[y+2>>0]|0;p=U<<14|p&16383;if(!(U&128)){t=3;q=0;break}U=d[y+3>>0]|0;p=U<<21|p&2097151;if(!(U&128)){t=4;q=0;break}s=28;t=y+4|0;p=p&268435455;q=0;do{U=t;t=t+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,s|0)|0;p=Sv(T|0,L()|0,p|0,q|0)|0;q=L()|0;s=s+7|0}while(s>>>0<64&((U&128|0)!=0|0!=0));t=t-y|0}while(0);m=Sv(p|0,q|0,m|0,r|0)|0;t=y+t|0;p=0;r=L()|0;s=0;q=0}else{t=y;s=w;q=x}while(0);if(t>>>0<A>>>0){y=t;w=s;x=q}else break}}m=gq(f,$)|0}while((m|0)==100);v=h}else{v=0;o=0}while(0);t=c[G>>2]|0;u=c[$>>2]|0;if((t|0)<=0){if(u|0)aa=213}else{r=0;while(1){s=c[u+(r<<2)>>2]|0;do if(s|0){do if(!(c[s+56>>2]|0)){h=c[s+64>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(!(a[s+5>>0]|0)){h=c[s+40>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[s+52>>2]|0;i:do if(h|0){p=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;do if(p|0){if(c[p+480>>2]|0){Xd(p,h);break i}q=h;if((c[p+304>>2]|0)>>>0>q>>>0)break;if((c[p+308>>2]|0)>>>0<=q>>>0)break;aa=p+300|0;c[h>>2]=c[aa>>2];c[aa>>2]=h;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{aa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);r=r+1|0;if((r|0)==(t|0)){aa=213;break}}}do if((aa|0)==213){aa=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{U=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);h=c[H>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{U=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);n=v^n;l=o^l;B=B+1|0}while((B|0)<(c[V>>2]|0))}else m=0;if(m){o=0;U=l;break}}do if(k){k=c[N>>2]|0;T=N+136|0;S=c[T+4>>2]|0;if((S|0)>0|(S|0)==0&(c[T>>2]|0)>>>0>0)hc(k,N);l=kc(N)|0;c[N+20>>2]=770837923;c[N+36>>2]=-1;c[N+40>>2]=0;a[N+146>>0]=2;c[N+44>>2]=0;c[N+32>>2]=1;a[N+147>>0]=-1;c[N+48>>2]=0;T=N+64|0;c[T>>2]=0;c[T+4>>2]=0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);h=7;break}else{h=c[k+68>>2]&l;break}}else h=0;while(0);if(o)if(!h){T=f+36|0;m=c[c[T>>2]>>2]|0;c[O>>2]=0;c[Z>>2]=c[f+220>>2];k=Bb(55001,Z)|0;j:do if(!k){h=7;m=0;k=0;l=0}else{h=qd(c[f+12>>2]|0,k,-1,128,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}l=c[O>>2]|0;if(h|0){m=0;k=0;break}K=f+44|0;M=f+32|0;N=(l|0)==0;O=l+120|0;P=l+144|0;Q=l+40|0;R=m+20|0;S=f+256|0;J=m+16|0;m=0;k=0;do{if((Gc(l)|0)!=100){h=0;break j}h=Oc(l,0)|0;o=L()|0;if(!(c[K>>2]|0))I=0;else I=Nc(l,(c[_>>2]|0)+1|0)|0;H=Yv(h|0,o|0,9,0)|0;H=Sv(H|0,L()|0,I|0,((I|0)<0)<<31>>31|0)|0;G=L()|0;E=Yv(H|0,G|0,81,0)|0;F=L()|0;G=Yv(H|0,G|0,9,0)|0;H=L()|0;D=0;do{if((D|0)>=(c[_>>2]|0)){h=0;break}C=D;D=D+1|0;if(!(a[(c[M>>2]|0)+C>>0]|0)){k:do if(N)h=29576;else{h=c[O>>2]|0;do if(h|0){if(D>>>0>=(e[P>>1]|0)>>>0)break;h=h+(D*40|0)|0;break k}while(0);h=c[l>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);o=b[h+8>>1]|0;do if((o&514)==514){if((a[h+10>>0]|0)!=1){aa=250;break}q=c[h+16>>2]|0}else aa=250;while(0);do if((aa|0)==250){aa=0;if(o&1){q=0;break}q=Gg(h,1)|0}while(0);if(!N){h=c[l>>2]|0;o=c[Q>>2]|0;if((o|0)==3082|(a[h+81>>0]|0)!=0){og(h);h=7}else h=c[h+68>>2]&o;c[Q>>2]=h}h=Lc(l,D)|0;o=c[T>>2]|0;p=c[o>>2]|0;c[Z>>2]=0;h=Za[c[p+12>>2]&127](o,q,h,Z)|0;l:do if(!h){c[c[Z>>2]>>2]=o;do if((c[p>>2]|0)>0){h=Xa[c[p+24>>2]&255](c[Z>>2]|0,I)|0;if(!h)break;Wa[c[p+16>>2]&127](c[Z>>2]|0)|0;c[Z>>2]=0;o=0;aa=262;break l}while(0);o=c[Z>>2]|0;z=o;A=Sv(E|0,F|0,C|0,0)|0;A=Yv(A|0,L()|0,9,0)|0;B=L()|0;do{c[$>>2]=0;c[W>>2]=0;c[X>>2]=0;c[Y>>2]=0;h=$a[c[R>>2]&127](z,Z,$,W,X,Y)|0;i=(h|0)==0;do if(i){w=c[Z>>2]|0;x=c[$>>2]|0;y=c[Y>>2]|0;j=((y|0)<0)<<31>>31;p=Sv(A|0,B|0,y|0,j|0)|0;q=L()|0;if((x|0)>0){r=0;do{v=a[w+r>>0]|0;p=Yv(p|0,q|0,9,0)|0;p=Sv(p|0,L()|0,v|0,((v|0)<0)<<31>>31|0)|0;q=L()|0;r=r+1|0}while((r|0)!=(x|0))}m=p^m;k=q^k;u=c[V>>2]|0;if((u|0)<=1)break;v=c[S>>2]|0;t=1;do{s=c[v+(t*24|0)>>2]|0;if((s|0)<=(x|0)){q=Sv(G|0,H|0,t|0,0)|0;p=L()|0;r=cw(q|0,p|0,3)|0;da=L()|0;p=Sv(q|0,p|0,C|0,0)|0;da=Sv(p|0,L()|0,r|0,da|0)|0;r=L()|0;p=cw(da|0,r|0,3)|0;q=L()|0;r=Sv(da|0,r|0,y|0,j|0)|0;q=Sv(r|0,L()|0,p|0,q|0)|0;p=L()|0;if((s|0)>0){r=0;do{da=a[w+r>>0]|0;q=Yv(q|0,p|0,9,0)|0;q=Sv(q|0,L()|0,da|0,((da|0)<0)<<31>>31|0)|0;p=L()|0;r=r+1|0}while((r|0)!=(s|0))}m=q^m;k=p^k}t=t+1|0}while((t|0)!=(u|0))}while(0)}while(i)}else{o=c[Z>>2]|0;aa=262}while(0);if((aa|0)==262)aa=0;if(o|0)Wa[c[J>>2]&127](o)|0;h=(h|0)==101?0:h}else h=0}while(!(h|0))}while((h|0)==0)}while(0);gc(l)|0;l=U}else{m=0;l=U;k=0}else{h=m;m=0;l=U;k=0}}k=(h|(n|0)==(m|0)&(l|0)==(k|0)&1|0)==0?267:h;break b}default:{if((h|0)<=6){k=1;break b}o=a[q>>0]|0}}while(0);n=o<<24>>24==0;m:do if(n){k=54973;aa=287}else{da=o&255;k=208+da|0;do if((da|32|0)==109){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54974;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==101){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54975;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==114){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54976;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==103){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54977;aa=287;break m}k=k&255;if((k|32|0)!=101){m=101;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54978;aa=287;break m}if(k<<24>>24==61)break m;else{m=61;k=208+(k&255)|0}}else m=103}else m=114}else m=101}else m=109;while(0);A=d[k>>0]|0;aa=291}while(0);if((aa|0)==287){A=0;m=a[208+(d[k>>0]|0)>>0]|0;aa=291}if((aa|0)==291?(A|0)!=(m&255|0):0){if((h|0)<=10){k=1;break}n:do if(n){k=54980;aa=321}else{da=o&255;k=208+da|0;do if((da|32|0)==97){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54981;aa=321;break n}da=k&255;k=208+da|0;if((da|32|0)==117){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54982;aa=321;break n}k=k&255;if((k|32|0)!=116){l=116;k=208+k|0;break}k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54983;aa=321;break n}k=k&255;if((k|32|0)!=111){l=111;k=208+k|0;break}k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54984;aa=321;break n}k=k&255;if((k|32|0)!=109){l=109;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54985;aa=321;break n}k=k&255;if((k|32|0)!=101){l=101;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54986;aa=321;break n}k=k&255;if((k|32|0)!=114){l=114;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=54987;aa=321;break n}k=k&255;if((k|32|0)!=103){l=103;k=208+k|0;break}k=a[q+8>>0]|0;if(!(k<<24>>24)){k=54988;aa=321;break n}k=k&255;if((k|32|0)!=101){l=101;k=208+k|0;break}k=a[q+9>>0]|0;if(!(k<<24>>24)){k=54989;aa=321;break n}if(k<<24>>24==61)break n;else{l=61;k=208+(k&255)|0}}else l=117}else l=97;while(0);B=d[k>>0]|0;aa=325}while(0);if((aa|0)==321){B=0;l=a[208+(d[k>>0]|0)>>0]|0;aa=325}if((aa|0)==325?(B|0)!=(l&255|0):0){k=1;break}k=q+10|0;c[$>>2]=0;l=a[k>>0]|0;o:do if(l<<24>>24>47){n=k;k=0;m=l;l=l<<24>>24;while(1){if(!(m<<24>>24<58&(k|0)<214748363))break o;n=n+1|0;k=l+-48+(k*10|0)|0;l=a[n>>0]|0;if(l<<24>>24<=47)break;else{m=l;l=l<<24>>24}}}else k=0;while(0);n=f+48|0;c[n>>2]=(k|0)==1|(k|0)>16?8:k;l=f+233|0;if(!(a[l>>0]|0)){k=c[f+12>>2]|0;da=c[f+20>>2]|0;c[D>>2]=c[f+16>>2];c[D+4>>2]=da;_q($,k,54351,D);k=c[$>>2]|0;if(!k){a[l>>0]=1;aa=333}}else aa=333;do if((aa|0)==333){m=f+148|0;l=c[m>>2]|0;c[O>>2]=l;if(!l){l=c[f+20>>2]|0;c[E>>2]=c[f+16>>2];c[E+4>>2]=l;l=Bb(52453,E)|0;if(!l){c[$>>2]=7;k=7;break}k=qd(c[f+12>>2]|0,l,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[O>>2]|0;c[m>>2]=l;c[$>>2]=k;if(k)break}else c[$>>2]=0;h=l;do if(!(Vc(h,1)|0)){k=c[h+100>>2]|0;m=k+8|0;if(!(b[m>>1]&9216)){da=k;c[da>>2]=2;c[da+4>>2]=0;b[m>>1]=4;break}else{Pg(k,2,0);break}}while(0);m=c[n>>2]|0;n=((m|0)<0)<<31>>31;if(Vc(h,2)|0){Gc(h)|0;if(!l)k=0;else aa=351}else{l=c[h+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){da=k;c[da>>2]=m;c[da+4>>2]=n;b[l>>1]=4}else Pg(k,m,n);Gc(h)|0;aa=351}do if((aa|0)==351){k=c[h>>2]|0;da=h+136|0;_=c[da+4>>2]|0;if((_|0)>0|(_|0)==0&(c[da>>2]|0)>>>0>0)hc(k,h);l=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;da=h+64|0;c[da>>2]=0;c[da+4>>2]=0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7;break}else{k=c[k+68>>2]&l;break}}while(0);c[$>>2]=k}while(0);break}k=q+6|0;m=a[k>>0]|0;p:do if(m<<24>>24>47){l=0;n=m;m=m<<24>>24;while(1){if(!(n<<24>>24<58&(l|0)<214748363)){aa=302;break p}k=k+1|0;l=m+-48+(l*10|0)|0;m=a[k>>0]|0;if(m<<24>>24>47){n=m;m=m<<24>>24}else{aa=296;break}}}else{l=0;aa=296}while(0);q:do if((aa|0)==296){if(m<<24>>24==44){k=k+1|0;n=a[k>>0]|0;if(n<<24>>24<=47){aa=302;break}m=0;h=n;n=n<<24>>24;while(1){if(!(h<<24>>24<58&(m|0)<214748363)){aa=302;break q}k=k+1|0;m=n+-48+(m*10|0)|0;o=a[k>>0]|0;if(o<<24>>24<=47){n=m;k=o;break}else{h=o;n=o<<24>>24}}}else{n=8;k=m}if(k<<24>>24!=0|(n|0)<2)aa=302;else{c[O>>2]=0;m=f+233|0;if(!(a[m>>0]|0)){k=c[f+12>>2]|0;da=c[f+20>>2]|0;c[C>>2]=c[f+16>>2];c[C+4>>2]=da;_q(O,k,54351,C);k=c[O>>2]|0;if(!k){a[m>>0]=1;aa=306}}else aa=306;if((aa|0)==306){k=Or(f,l,n)|0;c[O>>2]=k}l=f+248|0;m=c[l>>2]|0;r:do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;do if(n|0){if(c[n+480>>2]|0){Xd(n,m);break r}h=m;if((c[n+304>>2]|0)>>>0>h>>>0)break;if((c[n+308>>2]|0)>>>0<=h>>>0)break;da=n+300|0;c[m>>2]=c[da>>2];c[da>>2]=m;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{da=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[l>>2]=0}}while(0);if((aa|0)==302){c[O>>2]=1;k=1}}while(0);c[ba>>2]=k;break}k=c[i+(h+4<<2)>>2]|0;l=e[k+8>>1]|0;do if(!(l&4)){if(l&8|0){k=Mg(+g[k>>3])|0;L()|0;break}if(!(l&18)){r=_;aa=444;break a}k=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0}else k=c[k>>2]|0;while(0);if((k|0)<0)c[ba>>2]=19;else{r=_;aa=444}}else{r=f+24|0;aa=444}while(0);do if((aa|0)==444){t=c[r>>2]|0;t=cw(t|0,((t|0)<0)<<31>>31|0,3)|0;t=Sv(t|0,L()|0,8,0)|0;t=pb(t,L()|0)|0;if(!t){c[ba>>2]=7;break}o=(c[r>>2]|0)+1|0;s=t+(o<<2)|0;gw(t|0,0,o<<3|0)|0;o=f+264|0;s:do if(!(c[o>>2]|0)){m=f+120|0;k=c[m>>2]|0;c[O>>2]=k;do if(!k){l=c[f+20>>2]|0;c[q>>2]=c[f+16>>2];c[q+4>>2]=l;l=Bb(52138,q)|0;if(!l){k=7;break}k=qd(c[f+12>>2]|0,l,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[O>>2]|0;c[m>>2]=l;if(!k){k=l;aa=455}}else aa=455;while(0);do if((aa|0)==455){m=k;Vc(m,1)|0;Gc(m)|0;if(!k){aa=461;break s}k=c[m>>2]|0;da=m+136|0;$=c[da+4>>2]|0;if(($|0)>0|($|0)==0&(c[da>>2]|0)>>>0>0)hc(k,m);l=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;da=m+64|0;c[da>>2]=0;c[da+4>>2]=0;if(!((l|0)==3082|(a[k+81>>0]|0)!=0)){da=c[k+68>>2]&l;c[ba>>2]=da;if(!da){aa=463;break s}else break s}else{og(k);k=7;break}}while(0);c[ba>>2]=k}else aa=461;while(0);if((aa|0)==461){c[ba>>2]=0;aa=463}t:do if((aa|0)==463){do if(x?(c[f+40>>2]|0)==0:0){k=c[i+((c[r>>2]|0)+3<<2)>>2]|0;n=k+8|0;l=b[n>>1]|0;m=-1431655766>>>(l&31);if(m&1){k=c[i+4>>2]|0;n=k+8|0;l=b[n>>1]|0;m=-1431655766>>>(l&31)}if(!(m&1)){h=c[i>>2]|0;m=b[h+8>>1]|0;if(!(-1431655766>>>(m&31)&1)){m=m&65535;do if(!(m&4)){if(m&8|0){n=Mg(+g[h>>3])|0;h=L()|0;break}if(!(m&18)){n=0;h=0}else{da=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;h=L()|0;l=b[n>>1]|0;n=da}}else{n=c[h>>2]|0;h=c[h+4>>2]|0}while(0);l=l&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[k>>3])|0;m=L()|0;break}if(!(l&18)){l=0;m=0}else{l=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;m=L()|0}}else{m=k;l=c[m>>2]|0;m=c[m+4>>2]|0}while(0);if((n|0)==(l|0)&(h|0)==(m|0)){m=0;break}}if((a[(c[f+12>>2]|0)+86>>0]|0)==5){l=0;k=zr(f,k,z,t)|0}else{l=1;k=Ar(f,i,j)|0}c[ba>>2]=k;if(!k)m=l;else break t}else m=0}else m=0;while(0);k=c[i>>2]|0;if(!(-1431655766>>>(b[k+8>>1]&31)&1)){k=zr(f,k,z,t)|0;c[ba>>2]=k}else k=0;if(x&(k|0)==0){k=c[i+((c[r>>2]|0)+4<<2)>>2]|0;l=e[k+8>>1]|0;do if(!(l&4)){if(l&8|0){p=Mg(+g[k>>3])|0;L()|0;break}if(!(l&18))p=0;else{p=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0}}else p=c[k>>2]|0;while(0);u:do if(!m){da=Ar(f,i,j)|0;c[ba>>2]=da;switch(da|0){case 0:{aa=499;break u}case 19:break;default:break u}if(!(c[f+40>>2]|0))c[ba>>2]=267}else aa=499;while(0);v:do if((aa|0)==499){n=j;m=c[n>>2]|0;n=c[n+4>>2]|0;h=f+272|0;l=h;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!((l|0)>(n|0)|(l|0)==(n|0)&k>>>0>m>>>0)){if((k|0)==(m|0)&(l|0)==(n|0)?(c[f+284>>2]|0)==0:0){aa=504;break}k=f+280|0;if(!((c[k>>2]|0)==(p|0)?(c[o>>2]|0)<=(c[f+260>>2]|0):0))aa=504}else aa=504;while(0);do if((aa|0)==504){k=Sr(f)|0;if(!k){k=f+280|0;break}else{c[ba>>2]=k;break v}}while(0);da=h;c[da>>2]=m;c[da+4>>2]=n;c[k>>2]=p;c[f+284>>2]=0;c[ba>>2]=0;k=c[r>>2]|0;w:do if((k|0)>0){o=f+32|0;h=2;while(1){m=h+-2|0;if(!(a[(c[o>>2]|0)+m>>0]|0)){n=i+(h<<2)|0;k=c[n>>2]|0;x:do if(!k)k=0;else{l=b[k+8>>1]|0;do if((l&514)==514){if((a[k+10>>0]|0)!=1)break;k=c[k+16>>2]|0;break x}while(0);if(l&1){k=0;break}k=Gg(k,1)|0}while(0);k=Mr(f,p,k,m,s+(m<<2)|0)|0;if(k|0)break w;m=c[n>>2]|0;k=b[m+8>>1]|0;do if(!(k&2))aa=520;else{if((a[m+10>>0]|0)!=1){aa=520;break}k=c[m+12>>2]|0}while(0);do if((aa|0)==520){aa=0;l=k&65535;if(!(l&16)){if(l&1|0){k=0;break}k=Fg(m,1)|0;break}else{k=c[m+12>>2]|0;if(!(l&16384))break;k=(c[m>>2]|0)+k|0;break}}while(0);da=s+(c[r>>2]<<2)|0;c[da>>2]=(c[da>>2]|0)+k;k=c[r>>2]|0}if((h|0)>(k|0)){k=0;break}else h=h+1|0}}else k=0;while(0);c[ba>>2]=k}while(0);if(a[f+234>>0]|0)Br(ba,f,s);c[z>>2]=(c[z>>2]|0)+1}if(a[f+232>>0]|0)Cr(ba,f,s,t,c[z>>2]|0)}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{da=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);k=f+248|0;l=c[k>>2]|0;if(!l){c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}m=c[l+20>>2]|0;gc(c[l+16>>2]|0)|0;if(m|0){if(c[m+480>>2]|0){Xd(m,l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}da=l;if((c[m+304>>2]|0)>>>0<=da>>>0?(c[m+308>>2]|0)>>>0>da>>>0:0){da=m+300|0;c[l>>2]=c[da>>2];c[da>>2]=l;c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}return 0}function Nq(b){b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;d=g;c[b+52>>2]=0;f=b+233|0;if((a[f>>0]|0)!=2){f=0;Ra=g;return f|0}c[d>>2]=c[b+20>>2];e=Bb(55011,d)|0;if(!e){f=7;Ra=g;return f|0}d=Rd(c[b+12>>2]|0,c[b+16>>2]|0,e,0,0,0,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{b=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}a[f>>0]=(d|0)==0&1;f=0;Ra=g;return f|0}function Oq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;d=o;f=o+8|0;m=b+12|0;l=(c[m>>2]|0)+40|0;n=c[l>>2]|0;l=c[l+4>>2]|0;g=Sr(b)|0;a:do if(!g){j=b+52|0;if((c[j>>2]|0)>>>0>4){k=b+48|0;switch(c[k>>2]|0){case 255:case 0:{g=0;break a}default:{}}h=b+200|0;e=c[h>>2]|0;c[f>>2]=e;do if(!e){g=c[b+20>>2]|0;c[d>>2]=c[b+16>>2];c[d+4>>2]=g;d=Bb(53253,d)|0;if(!d){g=7;d=0;break}g=qd(c[m>>2]|0,d,-1,133,0,f,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[f>>2]|0;c[h>>2]=d;if(!g){e=d;i=12}else d=0}else i=12;while(0);do if((i|0)==12){g=e;if((Gc(g)|0)==100)d=Nc(g,0)|0;else d=0;if(e){e=c[g>>2]|0;i=g+136|0;h=c[i+4>>2]|0;if((h|0)>0|(h|0)==0&(c[i>>2]|0)>>>0>0)hc(e,g);f=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;i=g+64|0;c[i>>2]=0;c[i+4>>2]=0;if((f|0)==3082|(a[e+81>>0]|0)!=0){og(e);g=7;break}else{g=c[e+68>>2]&f;break}}else g=0}while(0);d=G(c[j>>2]|0,d)|0;d=((d|0)/2|0)+d|0;if((d|0)>64)g=Or(b,d,c[k>>2]|0)|0}else g=0}while(0);d=b+248|0;e=c[d>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}b=e;if((c[f+304>>2]|0)>>>0<=b>>>0?(c[f+308>>2]|0)>>>0>b>>>0:0){b=f+300|0;c[e>>2]=c[b>>2];c[b>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{b=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[d>>2]=0;m=(c[m>>2]|0)+40|0;c[m>>2]=n;c[m+4>>2]=l;Ra=o;return g|0}function Pq(a){a=a|0;return 0}function Qq(a){a=a|0;Fr(a);return 0}function Rq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(Bu(d,51022)|0)if(Bu(d,51030)|0)if(Bu(d,37598)|0)if(!(Bu(d,51038)|0))a=3;else{e=0;return e|0}else a=2;else a=1;else a=0;c[e>>2]=c[26368+(a<<3)+4>>2];e=1;return e|0}function Sq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+96|0;p=q+72|0;o=q+56|0;l=q+40|0;j=q+24|0;i=q+8|0;e=q;m=q+84|0;g=b+12|0;n=c[g>>2]|0;k=b+233|0;if((a[k>>0]|0)==2){c[e>>2]=c[b+20>>2];f=Bb(55011,e)|0;if(!f)e=7;else{e=Rd(c[g>>2]|0,c[b+16>>2]|0,f,0,0,0,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}a[k>>0]=(e|0)==0&1;h=7}}else h=7;if((h|0)==7){c[m>>2]=0;e=Sr(b)|0}c[m>>2]=e;if(!(c[b+40>>2]|0)){h=c[b+20>>2]|0;c[i>>2]=c[b+16>>2];c[i+4>>2]=h;c[i+8>>2]=d;_q(m,n,55251,i)}if(a[b+234>>0]|0){i=c[b+20>>2]|0;c[j>>2]=c[b+16>>2];c[j+4>>2]=i;c[j+8>>2]=d;_q(m,n,55304,j)}f=b+16|0;if(!(a[k>>0]|0))e=b+20|0;else{e=b+20|0;k=c[e>>2]|0;c[l>>2]=c[f>>2];c[l+4>>2]=k;c[l+8>>2]=d;_q(m,n,55357,l)}l=c[e>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=l;c[o+8>>2]=d;_q(m,n,55404,o);o=c[e>>2]|0;c[p>>2]=c[f>>2];c[p+4>>2]=o;c[p+8>>2]=d;_q(m,n,55458,p);Ra=q;return c[m>>2]|0}function Tq(b,c){b=b|0;c=c|0;if(a[b+236>>0]|0){c=0;return c|0}c=Oq(b)|0;return c|0}function Uq(a,b){a=a|0;b=b|0;return 0}function Vq(a,b){a=a|0;b=b|0;Fr(a);return 0}function Wq(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0;if(!b){i=0;return i|0}i=a[b>>0]|0;g=d[208+(i&255)>>0]|0;c=g+-99|0;i=i<<24>>24==0;if(!(i|(c|0)!=0)){e=53664;f=b;do{f=f+1|0;e=e+1|0;h=a[f>>0]|0;c=(d[208+(h&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-100|0;if(!(i|(c|0)!=0)){e=55510;f=b;do{f=f+1|0;e=e+1|0;h=a[f>>0]|0;c=(d[208+(h&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}h=g+-115|0;g=i|(h|0)!=0;if(g)c=h;else{e=55518;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}if(g)c=h;else{e=55525;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}if(g){i=h;i=(i|0)==0;i=i&1;return i|0}e=31715;do{b=b+1|0;e=e+1|0;i=a[b>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0));i=(c|0)==0;i=i&1;return i|0}function Xq(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;Ia=Ra;Ra=Ra+320|0;Fa=Ia+296|0;Da=Ia+288|0;Ca=Ia+280|0;Ba=Ia+272|0;za=Ia+264|0;xa=Ia+256|0;wa=Ia+248|0;va=Ia+240|0;ua=Ia+232|0;ta=Ia+216|0;sa=Ia+200|0;ra=Ia+192|0;qa=Ia+176|0;pa=Ia+168|0;oa=Ia+160|0;na=Ia+152|0;Aa=Ia+144|0;ma=Ia+128|0;ha=Ia+120|0;ga=Ia+112|0;fa=Ia+104|0;ka=Ia+96|0;ja=Ia+80|0;ia=Ia+72|0;ea=Ia+64|0;da=Ia+56|0;W=Ia+48|0;R=Ia+40|0;O=Ia+32|0;Q=Ia+24|0;P=Ia+16|0;N=Ia+8|0;M=Ia;la=Ia+316|0;Ha=Ia+312|0;Ga=Ia+308|0;c[Ha>>2]=0;ya=(a[(c[j>>2]|0)+3>>0]|0)==52;c[Ga>>2]=0;_=j+4|0;X=Eu(c[_>>2]|0)|0;$=X+1|0;Y=j+8|0;Z=(Eu(c[Y>>2]|0)|0)+1|0;o=(i<<2)+-8|0;n=pb(o,0)|0;if((n|0)!=0?(gw(n|0,0,o|0)|0,m=pb(o,0)|0,(m|0)!=0):0){gw(m|0,0,o|0)|0;a:do if((i|0)>3){w=3;y=0;v=0;t=0;s=0;r=0;q=0;u=0;F=0;x=0;p=0;o=0;while(1){H=c[j+(w<<2)>>2]|0;do if((o|0)==0?!((H|0)==0|(Eu(H)|0)>>>0<9):0){o=a[H>>0]|0;b:do if(!(o<<24>>24)){o=53622;Ea=9}else{I=o&255;o=208+I|0;do if((I|32|0)==116){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53623;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==111){o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53624;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==107){o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53625;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==101){o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53626;Ea=9;break b}o=o&255;if((o|32|0)!=110){z=110;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53627;Ea=9;break b}o=o&255;if((o|32|0)!=105){z=105;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53628;Ea=9;break b}o=o&255;if((o|32|0)!=122){z=122;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53629;Ea=9;break b}o=o&255;if((o|32|0)==101)break b;else{z=101;o=208+o|0}}else z=101}else z=107}else z=111}else z=116;while(0);K=d[o>>0]|0;J=z;Ea=13}while(0);if((Ea|0)==9){K=0;J=a[208+(d[o>>0]|0)>>0]|0;Ea=13}if((Ea|0)==13?(Ea=0,(K|0)!=(J&255|0)):0){Ea=17;break}I=a[H+8>>0]|0;if((I&128|0)==0?(a[26208+I>>0]|0)==0:0){E=Yq(h,H+9|0,Ga,l)|0;c[Ha>>2]=E;E=y}else Ea=17}else Ea=17;while(0);c:do if((Ea|0)==17){Ea=0;d:do if(ya){o=H;e:while(1){switch(a[o>>0]|0){case 0:break d;case 61:break e;default:{}}o=o+1|0}E=o-H|0;c[M>>2]=o+1;I=Bb(31408,M)|0;if(!I){c[Ha>>2]=7;E=y;break c}o=a[I>>0]|0;switch(o<<24>>24){case 34:case 39:case 91:case 96:{C=o<<24>>24==91?93:o;z=a[I+1>>0]|0;f:do if(!(z<<24>>24))o=0;else{A=1;o=0;do{B=A+1|0;if(z<<24>>24==C<<24>>24){if((a[I+B>>0]|0)!=C<<24>>24)break f;a[I+o>>0]=C;A=A+2|0}else{a[I+o>>0]=z;A=B}o=o+1|0;z=a[I+A>>0]|0}while(z<<24>>24!=0)}while(0);a[I+o>>0]=0;break}default:{}}G=I;g:do if(!H)o=8;else{switch(E|0){case 9:{A=H;C=51038;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=36;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=38;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=0;break g}}if((Ea|0)==36){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}else if((Ea|0)==38){Ea=0;z=z&255}if((z|0)==(o&255|0)){o=0;break g}switch(E|0){case 6:{Ea=42;break}case 8:{o=E;Ea=415;break}default:{}}break}case 6:{Ea=42;break}case 8:{o=E;Ea=415;break}default:{}}if((Ea|0)==42){Ea=0;A=H;C=53631;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=412;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=410;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=1;break g}}if((Ea|0)==410){Ea=0;z=z&255}else if((Ea|0)==412){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=1;break}if((E|0)==8){o=8;Ea=415}}if((Ea|0)==415){Ea=0;B=H;C=53638;A=o;while(1){o=a[B>>0]|0;if(!(o<<24>>24)){Ea=420;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=418;break}if((A|0)>1){B=B+1|0;C=C+1|0;A=A+-1|0}else{o=2;break g}}if((Ea|0)==418){Ea=0;z=z&255}else if((Ea|0)==420){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=2;break}}D=(E|0)==10;if(D){o=a[H>>0]|0;h:do if(!(o<<24>>24)){o=53647;Ea=427}else{C=o&255;o=208+C|0;do if((C|32|0)==117){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53648;Ea=427;break h}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53649;Ea=427;break h}o=o&255;if((o|32|0)!=99){A=99;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53650;Ea=427;break h}o=o&255;if((o|32|0)!=111){A=111;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53651;Ea=427;break h}o=o&255;if((o|32|0)!=109){A=109;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53652;Ea=427;break h}o=o&255;if((o|32|0)!=112){A=112;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53653;Ea=427;break h}o=o&255;if((o|32|0)!=114){A=114;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53654;Ea=427;break h}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53655;Ea=427;break h}o=o&255;if((o|32|0)!=115){A=115;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53656;Ea=427;break h}o=o&255;if((o|32|0)==115){o=3;break g}else{A=115;o=208+o|0}}else A=117;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==427){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=3;break}}switch(E|0){case 5:{A=H;C=53658;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=435;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=433;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=4;break g}}if((Ea|0)==433){Ea=0;z=z&255}else if((Ea|0)==435){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=4;break g}if((E|0)==7){o=7;Ea=438}break}case 7:{o=E;Ea=438;break}default:{}}if((Ea|0)==438){Ea=0;B=H;C=53664;A=o;while(1){o=a[B>>0]|0;if(!(o<<24>>24)){Ea=443;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=441;break}if((A|0)>1){B=B+1|0;C=C+1|0;A=A+-1|0}else{o=5;break g}}if((Ea|0)==441){Ea=0;z=z&255}else if((Ea|0)==443){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=5;break}}if(D){o=a[H>>0]|0;i:do if(!(o<<24>>24)){o=53672;Ea=450}else{E=o&255;o=208+E|0;do if((E|32|0)==108){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53673;Ea=450;break i}o=o&255;if((o|32|0)!=97){A=97;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53674;Ea=450;break i}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53675;Ea=450;break i}o=o&255;if((o|32|0)!=103){A=103;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53676;Ea=450;break i}o=o&255;if((o|32|0)!=117){A=117;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53677;Ea=450;break i}o=o&255;if((o|32|0)!=97){A=97;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53678;Ea=450;break i}o=o&255;if((o|32|0)!=103){A=103;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53679;Ea=450;break i}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53680;Ea=450;break i}o=o&255;if((o|32|0)!=105){A=105;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53681;Ea=450;break i}o=o&255;if((o|32|0)==100){o=6;break g}else{A=100;o=208+o|0}}else A=108;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==450){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=6;break}if(D){o=a[H>>0]|0;j:do if(!(o<<24>>24)){o=53683;Ea=457}else{E=o&255;o=208+E|0;do if((E|32|0)==110){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53684;Ea=457;break j}o=o&255;if((o|32|0)!=111){A=111;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53685;Ea=457;break j}o=o&255;if((o|32|0)!=116){A=116;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53686;Ea=457;break j}o=o&255;if((o|32|0)!=105){A=105;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53687;Ea=457;break j}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53688;Ea=457;break j}o=o&255;if((o|32|0)!=100){A=100;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53689;Ea=457;break j}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53690;Ea=457;break j}o=o&255;if((o|32|0)!=120){A=120;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53691;Ea=457;break j}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53692;Ea=457;break j}o=o&255;if((o|32|0)==100){o=7;break g}else{A=100;o=208+o|0}}else A=110;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==457){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=7;break}}}o=8}while(0);k:do switch(o&15){case 0:{if((Eu(I)|0)==4){o=a[I>>0]|0;l:do if(!(o<<24>>24)){o=51048;Ea=46}else{H=o&255;o=208+H|0;do if((H|32|0)==102){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=51049;Ea=46;break l}o=o&255;if((o|32|0)!=116){z=116;o=208+o|0;break}o=a[I+2>>0]|0;if(!(o<<24>>24)){o=51050;Ea=46;break l}o=o&255;if((o|32|0)!=115){z=115;o=208+o|0;break}o=a[I+3>>0]|0;if(!(o<<24>>24)){o=51051;Ea=46;break l}if(o<<24>>24==51){y=1;o=F;break k}else{z=51;o=208+(o&255)|0}}else z=102;while(0);y=d[o>>0]|0;o=z}while(0);if((Ea|0)==46){Ea=0;y=0;o=a[208+(d[o>>0]|0)>>0]|0}if((y|0)==(o&255|0)){y=1;o=F;break k}}c[N>>2]=I;Wp(l,53694,N);c[Ha>>2]=1;y=1;o=F;break}case 1:{if(!u){E=y;u=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);E=y;u=I;break c}else{E=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);E=y;u=I;break c}}case 2:{if(!q){E=y;q=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);E=y;q=I;break c}else{E=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);E=y;q=I;break c}}case 3:{if(!r){E=y;r=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);E=y;r=I;break c}else{E=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);E=y;r=I;break c}}case 4:{m:do switch(Eu(I)|0){case 3:{B=a[I>>0]|0;do if(!(B<<24>>24)){o=53721;Ea=66}else{H=B&255;o=208+H|0;if((H|32|0)==97){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=53722;Ea=66;break}H=o&255;o=208+H|0;if((H|32|0)==115){o=a[I+2>>0]|0;if(!(o<<24>>24)){o=53723;Ea=66;break}o=o&255;if((o|32|0)==99){o=B;break m}else{A=99;o=208+o|0}}else A=115}else A=97;z=d[o>>0]|0;o=A}while(0);if((Ea|0)==66){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0))o=B;else Ea=77;break}case 4:{B=a[I>>0]|0;n:do if(!(B<<24>>24)){o=38073;Ea=72}else{H=B&255;o=208+H|0;do if((H|32|0)==100){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=38074;Ea=72;break n}H=o&255;o=208+H|0;if((H|32|0)==101){o=a[I+2>>0]|0;if(!(o<<24>>24)){o=38075;Ea=72;break n}o=o&255;if((o|32|0)!=115){A=115;o=208+o|0;break}o=a[I+3>>0]|0;if(!(o<<24>>24)){o=38076;Ea=72;break n}o=o&255;if((o|32|0)==99){o=B;break m}else{A=99;o=208+o|0}}else A=101}else A=100;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==72){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0))o=B;else Ea=77;break}default:Ea=77}while(0);if((Ea|0)==77){Ea=0;c[P>>2]=I;Wp(l,53725,P);c[Ha>>2]=1;o=a[I>>0]|0}o=(o|32)<<24>>24==100&1;break}case 5:{if(!s){E=y;s=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](s);E=y;s=I;break c}else{E=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);E=y;s=I;break c}}case 6:{if(!t){E=y;t=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);E=y;t=I;break c}else{E=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);E=y;t=I;break c}}case 7:{c[m+(v<<2)>>2]=G;E=y;v=v+1|0;break c}default:{c[Q>>2]=H;Wp(l,53748,Q);c[Ha>>2]=1;o=F}}while(0);if(!I){E=y;F=o;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);E=y;F=o;break c}else{E=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);E=y;F=o;break c}}while(0);p=p+1+(Eu(H)|0)|0;c[n+(x<<2)>>2]=H;x=x+1|0;E=y}while(0);w=w+1|0;o=c[Ha>>2]|0;y=(o|0)==0;if(!((w|0)<(i|0)&y))break;y=E;o=c[Ga>>2]|0}o:do if((s|0)!=0&y){do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Q=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Q=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);if(x|0){w=n;r=0;q=0;o=c[Ha>>2]|0;Ea=162;break}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{Q=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}o=c[_>>2]|0;c[la>>2]=0;c[O>>2]=o;c[O+4>>2]=s;o=Bb(53869,O)|0;if(o){n=qd(g,o,-1,0,0,la,0)|0;p=(n|0)==0;if(!p){Q=pd(g)|0;c[R>>2]=Q;Wp(l,31408,R)}if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{R=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}if(p){C=c[la>>2]|0;A=(C|0)==0;p:do if(!A?(T=C+144|0,S=b[T>>1]|0,U=S&65535,S<<16>>16!=0):0){y=C+116|0;o=0;q=S;x=0;n=0;while(1){w=c[C>>2]|0;do if(o>>>0<(q&65535)>>>0){p=c[y>>2]|0;q=p+(o*40|0)|0;q:do if(!q)p=0;else{r=b[p+(o*40|0)+8>>1]|0;do if((r&514)==514){if((a[p+(o*40|0)+10>>0]|0)!=1)break;p=c[p+(o*40|0)+16>>2]|0;break q}while(0);if(r&1){p=0;break}p=Gg(q,1)|0}while(0);q=w+81|0;if(!(a[q>>0]|0))break;if(c[w+180>>2]|0){p=0;break}a[q>>0]=0;c[w+264>>2]=0;p=w+272|0;c[p>>2]=(c[p>>2]|0)+-1;p=0}else p=0;while(0);p=Sv(x|0,n|0,(Eu(p)|0)+1|0,0)|0;n=L()|0;o=o+1|0;if((o|0)==(U|0)){x=U;B=p;o=0;break p}q=b[T>>1]|0;x=p}}else{x=0;B=0;n=0;o=1}while(0);D=Sv(B|0,n|0,x<<2|0,0)|0;D=pb(D,L()|0)|0;n=(D|0)==0;r:do if(o|n)o=n?7:0;else{n=D+(x<<2)|0;y=C+144|0;z=C+116|0;if(A){p=(Eu(0)|0)+1|0;o=0;while(1){ew(n|0,0,p|0)|0;c[D+(o<<2)>>2]=n;o=o+1|0;if((o|0)==(x|0)){o=0;break r}else n=n+p|0}}w=0;while(1){r=c[C>>2]|0;do if(w>>>0<(e[y>>1]|0)>>>0){o=c[z>>2]|0;p=o+(w*40|0)|0;s:do if(!p)o=0;else{q=b[o+(w*40|0)+8>>1]|0;do if((q&514)==514){if((a[o+(w*40|0)+10>>0]|0)!=1)break;o=c[o+(w*40|0)+16>>2]|0;break s}while(0);if(q&1){o=0;break}o=Gg(p,1)|0}while(0);p=r+81|0;if(!(a[p>>0]|0))break;if(c[r+180>>2]|0){o=0;break}a[p>>0]=0;c[r+264>>2]=0;o=r+272|0;c[o>>2]=(c[o>>2]|0)+-1;o=0}else o=0;while(0);p=(Eu(o)|0)+1|0;ew(n|0,o|0,p|0)|0;c[D+(w<<2)>>2]=n;w=w+1|0;if((w|0)==(x|0)){o=0;break}else n=n+p|0}}while(0);gc(C)|0;c[Ha>>2]=o;if(!((t|0)!=0&(o|0)==0)){w=D;p=B;r=0;q=0;n=D;Ea=162;break}if(!x){o=E;p=F;w=D;r=0;q=0;n=D;Ea=164;break a}n=0;while(1){p=c[D+(n<<2)>>2]|0;if(p|0){U=a[t>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0;if(!(U<<24>>24==0|(o|0)!=0)){q=t;do{q=q+1|0;p=p+1|0;U=a[q>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(U<<24>>24==0|(o|0)!=0))}if(!o)break}n=n+1|0;if(n>>>0>=x>>>0){w=D;p=B;r=0;q=0;n=D;break o}}if(n>>>0<x>>>0)do{U=n;n=n+1|0;c[D+(U<<2)>>2]=c[D+(n<<2)>>2]}while((n|0)!=(x|0));w=D;x=x+-1|0;p=B;r=0;q=0;n=D;break}}else n=7;c[Ha>>2]=n;o=0;r=0;q=0;n=0;p=0;break a}else{w=n;Ea=162}while(0);if((Ea|0)==162)if(o){o=0;p=0;break}if(!x){o=E;p=F;Ea=164}else{C=E;B=F;D=w;H=x;A=p;Ea=165}}else{o=0;v=0;t=0;s=0;u=0;p=0;w=n;r=0;q=0;Ea=164}while(0);if((Ea|0)==164){c[w>>2]=53664;C=o;B=p;D=w;H=1;A=8;Ea=165}do if((Ea|0)==165){if((c[Ga>>2]|0)==0?(h=Yq(h,50983,Ga,l)|0,c[Ha>>2]=h,h|0):0){o=0;p=0;break}x=(u|0)!=0;t:do if(x?(V=a[u>>0]|0,V<<24>>24!=0):0){w=u;o=2;p=V;while(1){switch(p<<24>>24){case 0:break t;case 44:{o=o+1|0;break}default:{}}p=w+1|0;w=p;p=a[p>>0]|0}}else o=1;while(0);p=o*24|0;O=pb(p,0)|0;u:do if(O){gw(O|0,0,p|0)|0;if(x&(o|0)>1){z=u;p=1;while(1){x=a[z>>0]|0;if((x+-48&255)>=10)break;y=z;w=0;do{w=(x<<24>>24)+-48+(w*10|0)|0;if((w|0)>1e7){w=0;break}y=y+1|0;x=a[y>>0]|0}while((x+-48&255)<10);if((y|0)==(z|0))break;if(!w){p=p+-1|0;o=o+-1|0}else c[O+(p*24|0)>>2]=w;p=p+1|0;if((p|0)>=(o|0)){p=0;Ea=185;break u}else z=y+1|0}c[Ha>>2]=1;c[W>>2]=u;Wp(l,53775,W);x=0;o=c[Ha>>2]|0}else{p=0;Ea=185}}else{o=0;p=7;Ea=185}while(0);if((Ea|0)==185){c[Ha>>2]=p;x=o;o=p}if(!o){w=x*24|0;p=X+289+Z+A+H+(H<<2)+w|0;o=pb(p,0)|0;if(!o){c[Ha>>2]=7;p=O;break}gw(o|0,0,p|0)|0;N=o+12|0;c[N>>2]=g;j=o+24|0;c[j>>2]=H;c[o+264>>2]=0;p=o+288|0;M=o+28|0;c[M>>2]=p;c[o+36>>2]=c[Ga>>2];c[o+260>>2]=1048576;I=o+234|0;a[I>>0]=ya&(C|0)==0&1;G=ya&1;K=o+233|0;a[K>>0]=G;a[o+232>>0]=G;a[o+235>>0]=B;c[o+48>>2]=255;G=o+40|0;c[G>>2]=s;i=o+44|0;c[i>>2]=t;p=p+(H<<2)|0;t=o+256|0;c[t>>2]=p;ew(p|0,O|0,w|0)|0;c[o+252>>2]=x;p=c[t>>2]|0;if((x|0)>0){s=0;do{a[p+(s*24|0)+4>>0]=1;a[p+(s*24|0)+5>>0]=1;p=p+(s*24|0)+8|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;s=s+1|0;p=c[t>>2]|0}while((s|0)!=(x|0))}p=p+(x*24|0)|0;E=o+32|0;c[E>>2]=p;p=p+H|0;J=o+20|0;c[J>>2]=p;ew(p|0,c[Y>>2]|0,Z|0)|0;p=p+Z|0;F=o+16|0;c[F>>2]=p;ew(p|0,c[_>>2]|0,$|0)|0;B=(H|0)>0;if(B){A=0;z=p+$|0;while(1){y=c[D+(A<<2)>>2]|0;v:while(1){x=a[y>>0]|0;s=x<<24>>24;switch(s|0){case 0:break v;case 96:case 34:case 39:{Ea=198;break v}case 91:{Ea=197;break v}default:{}}if(s&128|0){Ea=206;break}p=y+1|0;if(!(a[26208+s>>0]|0))y=p;else{Ea=208;break}}w:do if((Ea|0)==197){p=y;while(1){s=p+1|0;Ea=a[s>>0]|0;t=Ea<<24>>24==0;if(t^Ea<<24>>24!=93)p=s;else break}p=t?s:p+2|0;Ea=212}else if((Ea|0)==198){p=y+1|0;s=a[p>>0]|0;if(!(s<<24>>24))Ea=212;else{w=y;while(1){if(s<<24>>24==x<<24>>24){p=w+2|0;if((a[p>>0]|0)!=x<<24>>24){Ea=212;break w}}t=p+1|0;s=a[t>>0]|0;if(!(s<<24>>24)){p=t;Ea=212;break}else{w=p;p=t}}}}else if((Ea|0)==206){p=y+1|0;Ea=208}while(0);x:do if((Ea|0)==208)while(1){Ea=a[p>>0]|0;if((Ea&128|0)==0?(a[26208+Ea>>0]|0)==0:0){Ea=212;break x}p=p+1|0}while(0);if((Ea|0)==212){Ea=0;p=p-y|0;if((p|0)>0){ew(z|0,y|0,p|0)|0;s=p}else s=p}a[z+s>>0]=0;p=a[z>>0]|0;switch(p<<24>>24){case 34:case 39:case 91:case 96:{y=p<<24>>24==91?93:p;t=a[z+1>>0]|0;y:do if(!(t<<24>>24))p=0;else{w=1;p=0;do{x=w+1|0;if(t<<24>>24==y<<24>>24){if((a[z+x>>0]|0)!=y<<24>>24)break y;a[z+p>>0]=y;w=w+2|0}else{a[z+p>>0]=t;w=x}p=p+1|0;t=a[z+w>>0]|0}while(t<<24>>24!=0)}while(0);a[z+p>>0]=0;break}default:{}}c[(c[M>>2]|0)+(A<<2)>>2]=z;A=A+1|0;if((A|0)>=(H|0))break;else z=z+(s+1)|0}if(B){C=(v|0)>0;B=0;do{D=Eu(c[(c[M>>2]|0)+(B<<2)>>2]|0)|0;z:do if(C){if((D|0)<=0){p=0;while(1){s=m+(p<<2)|0;t=c[s>>2]|0;do if(t|0){if((D|0)!=(Eu(t)|0))break;if(!(c[(c[M>>2]|0)+(B<<2)>>2]|0))break;a[(c[E>>2]|0)+B>>0]=1;if(!(c[7324]|0))ab[c[29344>>2]&127](t);else{$=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t)}c[s>>2]=0}while(0);p=p+1|0;if((p|0)==(v|0))break z}}y=0;do{z=m+(y<<2)|0;A=c[z>>2]|0;do if(A|0){if((D|0)!=(Eu(A)|0))break;p=c[(c[M>>2]|0)+(B<<2)>>2]|0;if(!p)break;w=A;x=D;while(1){s=a[p>>0]|0;if(!(s<<24>>24)){Ea=238;break}s=a[208+(s&255)>>0]|0;t=a[208+(d[w>>0]|0)>>0]|0;if(s<<24>>24!=t<<24>>24){Ea=236;break}if((x|0)>1){p=p+1|0;w=w+1|0;x=x+-1|0}else break}if((Ea|0)==236){aa=s&255;ba=t;Ea=239}else if((Ea|0)==238){aa=0;ba=a[208+(d[w>>0]|0)>>0]|0;Ea=239}if((Ea|0)==239?(Ea=0,(aa|0)!=(ba&255|0)):0)break;a[(c[E>>2]|0)+B>>0]=1;if(!(c[7324]|0))ab[c[29344>>2]&127](A);else{$=Wa[c[29352>>2]&127](A)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](A)}c[z>>2]=0}while(0);y=y+1|0}while((y|0)!=(v|0))}while(0);B=B+1|0}while((B|0)<(H|0))}}if((v|0)>0){p=0;do{s=c[m+(p<<2)>>2]|0;if(s|0){c[da>>2]=s;Wp(l,44776,da);c[Ha>>2]=1}p=p+1|0}while((p|0)!=(v|0))}if((c[Ha>>2]|0)==0?(ca=(q|0)==0,ca^(r|0)==0):0){c[Ha>>2]=1;c[ea>>2]=ca?53638:53647;Wp(l,53810,ea)}c[la>>2]=0;do if(!(c[G>>2]|0)){if(r){y=((Eu(r)|0)<<1)+3|0;y=pb(y,((y|0)<0)<<31>>31)|0;if(!y){t=0;s=0}else{a[y>>0]=34;x=0;t=y;A:while(1){s=t+1|0;w=r+x|0;p=a[w>>0]|0;switch(p<<24>>24){case 0:break A;case 34:{a[s>>0]=34;s=t+2|0;p=a[w>>0]|0;break}default:{}}a[s>>0]=p;x=x+1|0;t=s}a[s>>0]=34;a[t+2>>0]=0;t=y;s=y}}else{t=59952;s=0;r=0}Zq(Ha,la,53889,ia);if((c[j>>2]|0)>0){p=0;do{ia=c[(c[M>>2]|0)+(p<<2)>>2]|0;c[ja>>2]=t;c[ja+4>>2]=p;c[ja+8>>2]=ia;Zq(Ha,la,53895,ja);p=p+1|0}while((p|0)<(c[j>>2]|0))}if(c[i>>2]|0){c[ka>>2]=53917;Zq(Ha,la,53910,ka)}if(s)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);y=r;break}else{y=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);y=r;break}else y=r}else{Zq(Ha,la,38132,fa);if((c[j>>2]|0)>0){p=0;do{c[ga>>2]=c[(c[M>>2]|0)+(p<<2)>>2];Zq(Ha,la,53924,ga);p=p+1|0}while((p|0)<(c[j>>2]|0))}p=c[i>>2]|0;if(!p)y=r;else{c[ha>>2]=p;Zq(Ha,la,53910,ha);y=r}}while(0);p=c[G>>2]|0;r=(p|0)==0;if(r)p=c[J>>2]|0;c[ma>>2]=c[F>>2];c[ma+4>>2]=p;c[ma+8>>2]=r?53956:59952;Zq(Ha,la,53933,ma);c[o+220>>2]=c[la>>2];c[ma>>2]=0;if(q){x=((Eu(q)|0)<<1)+3|0;x=pb(x,((x|0)<0)<<31>>31)|0;if(!x){s=0;r=0}else{a[x>>0]=34;w=0;s=x;B:while(1){r=s+1|0;t=q+w|0;p=a[t>>0]|0;switch(p<<24>>24){case 0:break B;case 34:{a[r>>0]=34;r=s+2|0;p=a[t>>0]|0;break}default:{}}a[r>>0]=p;w=w+1|0;s=r}a[r>>0]=34;a[s+2>>0]=0;s=x;r=x}}else{s=59952;r=0;q=0}Zq(Ha,ma,35133,Aa);if((c[j>>2]|0)>0){p=0;do{c[na>>2]=s;Zq(Ha,ma,53965,na);p=p+1|0}while((p|0)<(c[j>>2]|0))}if(c[i>>2]|0)Zq(Ha,ma,53972,oa);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{oa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);c[o+224>>2]=c[ma>>2];if(c[Ha>>2]|0){t=0;s=0;r=y;p=O;break}w=(f|0)!=0;if(w){c[Aa>>2]=0;t=c[N>>2]|0;C:do if(!(c[G>>2]|0)){s=c[i>>2]|0;p=Bb(53976,pa)|0;D:do if(p|0){r=0;while(1){if((r|0)>=(c[j>>2]|0))break;pa=c[(c[M>>2]|0)+(r<<2)>>2]|0;c[qa>>2]=p;c[qa+4>>2]=r;c[qa+8>>2]=pa;p=Bb(54002,qa)|0;if(!p)break D;else r=r+1|0}if(s){c[ra>>2]=p;c[ra+4>>2]=s;p=Bb(54014,ra)|0;if(!p)break}sa=c[J>>2]|0;c[ta>>2]=c[F>>2];c[ta+4>>2]=sa;c[ta+8>>2]=p;_q(Aa,t,54025,ta);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break C}else{ta=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break C}}while(0);c[Aa>>2]=7;ta=c[J>>2]|0;c[sa>>2]=c[F>>2];c[sa+4>>2]=ta;c[sa+8>>2]=0;_q(Aa,t,54025,sa)}while(0);ta=c[J>>2]|0;c[ua>>2]=c[F>>2];c[ua+4>>2]=ta;_q(Aa,t,54058,ua);ua=c[J>>2]|0;c[va>>2]=c[F>>2];c[va+4>>2]=ua;_q(Aa,t,54130,va);if(a[I>>0]|0){va=c[J>>2]|0;c[wa>>2]=c[F>>2];c[wa+4>>2]=va;_q(Aa,t,54283,wa)}do if(!(a[K>>0]|0))p=c[Aa>>2]|0;else{p=c[N>>2]|0;wa=c[J>>2]|0;c[xa>>2]=c[F>>2];c[xa+4>>2]=wa;_q(Aa,p,54351,xa);p=c[Aa>>2]|0;if(p|0)break;a[K>>0]=1;p=0}while(0);c[Ha>>2]=p}else p=0;if(!(w|ya))a[K>>0]=2;if(p|0){c[o+228>>2]=(c[o+240>>2]|0)+-35;t=0;s=0;r=y;p=O;break}c[za>>2]=c[F>>2];r=Bb(54428,za)|0;do if(r){p=qd(c[N>>2]|0,r,-1,0,0,Aa,0)|0;switch(p|0){case 0:{p=c[Aa>>2]|0;Gc(p)|0;Aa=Nc(p,0)|0;c[o+240>>2]=Aa;p=gc(p)|0;break}case 23:{c[o+240>>2]=1024;p=0;break}default:{}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Aa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else p=7;while(0);c[Ha>>2]=p;c[o+228>>2]=(c[o+240>>2]|0)+-35;if(p|0){t=0;s=0;r=y;p=O;break}t=c[i>>2]|0;t=(t|0)==0?54448:t;p=c[N>>2]|0;c[Ba>>2]=1;vd(p,1,Ba)|0;c[Ca>>2]=c[c[M>>2]>>2];p=Bb(54457,Ca)|0;E:do if(!p){s=0;p=0}else{r=1;while(1){if((r|0)>=(c[j>>2]|0)){s=p;p=1;break E}Ca=c[(c[M>>2]|0)+(r<<2)>>2]|0;c[Da>>2]=p;c[Da+4>>2]=Ca;p=Bb(54462,Da)|0;if(!p){s=0;p=0;break}else r=r+1|0}}while(0);r=c[J>>2]|0;c[Fa>>2]=s;c[Fa+4>>2]=r;c[Fa+8>>2]=t;r=Bb(54469,Fa)|0;if(!(p&(r|0)!=0))if(!r)p=7;else{p=7;Ea=341}else{p=td(c[N>>2]|0,r)|0;Ea=341}do if((Ea|0)==341)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);do if(s|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{Fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);c[Ha>>2]=p;t=0;s=0;r=y;p=O}else{o=0;p=O}}while(0);do if(u|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Fa=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}while(0);do if(p|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{Fa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}while(0);do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Fa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);do if(s|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{Fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);do if(t|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{Fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}while(0);if((v|0)>0){p=0;do{q=c[m+(p<<2)>>2]|0;do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Fa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);p=p+1|0}while((p|0)!=(v|0))}}else{c[Ha>>2]=7;o=0;m=0}do if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Fa=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Fa=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);if(!(c[Ha>>2]|0)){c[k>>2]=o;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}if(o|0){Dq(o)|0;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}m=c[Ga>>2]|0;if(!m){Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}Wa[c[(c[m>>2]|0)+8>>2]&127](m)|0;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}function Yq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+32|0;w=x+16|0;s=x+8|0;v=x;c[v>>2]=d;v=Bb(31408,v)|0;if(!v){w=7;Ra=x;return w|0}u=v+(Eu(v)|0)|0;l=v;a:while(1){k=a[l>>0]|0;h=k<<24>>24;switch(h|0){case 0:{d=0;break a}case 96:case 34:case 39:{t=5;break a}case 91:{t=4;break a}default:{}}if(h&128|0){t=13;break}d=l+1|0;if(!(a[26208+h>>0]|0))l=d;else{t=15;break}}b:do if((t|0)==4){d=l;while(1){h=d+1|0;t=a[h>>0]|0;i=t<<24>>24==0;if(i^t<<24>>24!=93)d=h;else break}d=i?h:d+2|0;t=19}else if((t|0)==5){d=l+1|0;h=a[d>>0]|0;if(!(h<<24>>24))t=19;else{j=l;while(1){if(h<<24>>24==k<<24>>24){d=j+2|0;if((a[d>>0]|0)!=k<<24>>24){t=19;break b}}i=d+1|0;h=a[i>>0]|0;if(!(h<<24>>24)){d=i;t=19;break}else{j=d;d=i}}}}else if((t|0)==13){d=l+1|0;t=15}while(0);c:do if((t|0)==15)while(1){t=a[d>>0]|0;if((t&128|0)==0?(a[26208+t>>0]|0)==0:0){t=19;break c}d=d+1|0}while(0);if((t|0)==19){h=d-l|0;d=l}m=(d|0)==0?v:d;a[m+h>>0]=0;d=a[m>>0]|0;switch(d<<24>>24){case 34:case 39:case 91:case 96:{l=d<<24>>24==91?93:d;i=a[m+1>>0]|0;d:do if(!(i<<24>>24))d=0;else{j=1;d=0;do{k=j+1|0;if(i<<24>>24==l<<24>>24){if((a[m+k>>0]|0)!=l<<24>>24)break d;a[m+d>>0]=l;j=j+2|0}else{a[m+d>>0]=i;j=k}d=d+1|0;i=a[m+j>>0]|0}while(i<<24>>24!=0)}while(0);a[m+d>>0]=0;break}default:{}}i=(Eu(m)|0)+1|0;e:do if((((b|0)!=0?(n=b+16|0,(c[n>>2]|0)!=0):0)?(o=Xa[(a[b>>0]<<24>>24==1?154:155)&255](m,i)|0,o=(c[b+12>>2]|0)+-1&o,p=c[n>>2]|0,(p|0)!=0):0)?(q=c[p+(o<<3)>>2]|0,r=(a[b>>0]|0)==1?79:80,g=c[p+(o<<3)+4>>2]|0,(q|0)!=0&(g|0)!=0):0){d=q;while(1){d=d+-1|0;if(!(Za[r&127](c[g+12>>2]|0,c[g+16>>2]|0,m,i)|0))break;g=c[g>>2]|0;if(!((d|0)!=0&(g|0)!=0)){t=37;break e}}n=c[g+8>>2]|0;if(n){g=m+(h+1)|0;f:do if(g>>>0<u>>>0){b=0;l=0;d=0;while(1){g:while(1){k=a[g>>0]|0;i=k<<24>>24;switch(i|0){case 0:{h=b;g=l;break f}case 96:case 34:case 39:{t=43;break g}case 91:{t=42;break g}default:{}}if(i&128|0){t=51;break}h=g+1|0;if(!(a[26208+i>>0]|0))g=h;else{t=53;break}}h:do if((t|0)==42){h=g;while(1){i=h+1|0;t=a[i>>0]|0;j=t<<24>>24==0;if(j^t<<24>>24!=93)h=i;else break}h=j?i:h+2|0;t=57}else if((t|0)==43){t=0;i=g+1|0;j=a[i>>0]|0;if(!(j<<24>>24))l=1;else{h=g;while(1){if(j<<24>>24==k<<24>>24){h=h+2|0;if((a[h>>0]|0)!=k<<24>>24){t=57;break h}}else h=i;i=h+1|0;j=a[i>>0]|0;if(!(j<<24>>24)){h=i;t=57;break}}}}else if((t|0)==51){h=g+1|0;t=53}while(0);i:do if((t|0)==53)while(1){t=a[h>>0]|0;if((t&128|0)==0?(a[26208+t>>0]|0)==0:0){t=57;break i}h=h+1|0}while(0);if((t|0)==57){t=0;if(!g){h=b;g=l;break f}else l=h-g|0}h=b;b=b+1|0;if(mb()|0)break;m=sb(d,b<<2,0)|0;if(!m)break;c[m+(h<<2)>>2]=g;a[g+l>>0]=0;d=a[g>>0]|0;switch(d<<24>>24){case 34:case 39:case 91:case 96:{k=d<<24>>24==91?93:d;h=a[g+1>>0]|0;j:do if(!(h<<24>>24))d=0;else{i=1;d=0;do{j=i+1|0;if(h<<24>>24==k<<24>>24){if((a[g+j>>0]|0)!=k<<24>>24)break j;a[g+d>>0]=k;i=i+2|0}else{a[g+d>>0]=h;i=j}d=d+1|0;h=a[g+i>>0]|0}while(h<<24>>24!=0)}while(0);a[g+d>>0]=0;break}default:{}}g=g+(l+1)|0;if(g>>>0>=u>>>0){t=77;break}else{l=m;d=m}}if((t|0)==77){h=b;g=m;d=m;break}if(!(c[7324]|0))ab[c[29344>>2]&127](v);else{w=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v)}if(!d){w=7;Ra=x;return w|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);w=7;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);w=7;Ra=x;return w|0}}else{h=0;g=0;d=0}while(0);g=Ya[c[n+4>>2]&127](h,g,e)|0;if(!g)c[c[e>>2]>>2]=n;else Wp(f,53851,w);if(d)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{w=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}else t=37}else t=37;while(0);if((t|0)==37){c[s>>2]=m;Wp(f,53600,s);g=1}if(!(c[7324]|0)){ab[c[29344>>2]&127](v);w=g;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);w=g;Ra=x;return w|0}return 0}function Zq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;g=i+16|0;f=i;if(c[a>>2]|0){Ra=i;return}c[f>>2]=e;f=Ab(d,f)|0;if(f){d=c[b>>2]|0;if(d){c[g>>2]=d;c[g+4>>2]=f;d=Bb(38967,g)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{g=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(!d)h=8}else d=f}else h=8;if((h|0)==8){c[a>>2]=7;d=0}qb(c[b>>2]|0);c[b>>2]=d;Ra=i;return}function _q(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=Ra;Ra=Ra+16|0;f=g;if(c[a>>2]|0){Ra=g;return}c[f>>2]=e;d=Ab(d,f)|0;if(!d){c[a>>2]=7;Ra=g;return}b=nd(b,d,0,0,0)|0;c[a>>2]=b;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);Ra=g;return}else{b=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);Ra=g;return}}function $q(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=b+8|0;if(a[f>>0]|0){d=(c[b>>2]|0)+216|0;if(!(c[d>>2]|0)){g=b+12|0;e=c[g>>2]|0;c[d>>2]=e;d=e;if(e|0){e=c[d>>2]|0;h=d+136|0;i=c[h+4>>2]|0;if((i|0)>0|(i|0)==0&(c[h>>2]|0)>>>0>0)hc(e,d);i=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((i|0)==3082|(a[e+81>>0]|0)!=0)og(e)}c[g>>2]=0}a[f>>0]=0}gc(c[b+12>>2]|0)|0;g=b+28|0;d=c[g>>2]|0;if(d|0)do{e=d;d=c[d+8>>2]|0;f=c[e+12>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);c[g>>2]=0;d=c[b+44>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+92>>2]|0;do if((d|0?(a[d>>0]=0,(a[d+1>>0]|0)==0):0)?(a[d+2>>0]|0)==0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);ar(c[b+16>>2]|0);d=b+4|0;e=d+92|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));return}function ar(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;if(!a)return;while(1){b=c[a+12>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b)break;else a=b}else a=b}do{g=c[a+8>>2]|0;f=c[a+20>>2]|0;if(f|0){b=c[f>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);do if(c[f+24>>2]|0?(h=c[f+28>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{e=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);e=f+64|0;b=f;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));if((c[e>>2]|0)>0){b=0;do{d=f+72+(b*24|0)+20|0;br(c[d>>2]|0);c[d>>2]=0;b=b+1|0}while((b|0)<(c[e>>2]|0))}}b=c[a+40>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{f=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](a);else{f=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a)}a:do if(g)if((a|0)==(c[g+12>>2]|0)?(i=c[g+16>>2]|0,(i|0)!=0):0){a=i;while(1){b=c[a+12>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b)break a;else a=b}else a=b}}else a=g;else a=0;while(0)}while((a|0)!=0);return}function br(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!b)return;j=b+4|0;d=c[b>>2]|0;if((c[j>>2]|0)>0){g=0;do{f=c[d+(g<<2)>>2]|0;do if(f|0){do if((c[f+56>>2]|0)==0?(h=c[f+64>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{e=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);do if((a[f+5>>0]|0)==0?(i=c[f+40>>2]|0,i|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{e=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);d=c[f+52>>2]|0;do if(d|0){e=c[d+20>>2]|0;gc(c[d+16>>2]|0)|0;if(e|0){if(c[e+480>>2]|0){Xd(e,d);break}k=d;if((c[e+304>>2]|0)>>>0<=k>>>0?(c[e+308>>2]|0)>>>0>k>>>0:0){k=e+300|0;c[d>>2]=c[k>>2];c[k>>2]=d;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);g=g+1|0;d=c[b>>2]|0}while((g|0)<(c[j>>2]|0))}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+16|0;e=c[d>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{k=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[j>>2]=0;c[b>>2]=0;c[d>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}
- function kj(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;Pa=Ra;Ra=Ra+400|0;Ia=Pa+200|0;Ha=Pa+192|0;Ca=Pa+176|0;ya=Pa+168|0;Aa=Pa+160|0;ra=Pa+152|0;qa=Pa+144|0;pa=Pa+136|0;oa=Pa+128|0;ja=Pa+120|0;ha=Pa+112|0;ia=Pa+104|0;fa=Pa+96|0;ea=Pa+88|0;ga=Pa+80|0;ba=Pa+72|0;$=Pa+64|0;_=Pa+56|0;Z=Pa+48|0;aa=Pa+32|0;D=Pa+24|0;C=Pa+16|0;o=Pa+8|0;n=Pa;Da=Pa+360|0;Ea=Pa+308|0;Ga=Pa+296|0;La=Pa+256|0;Ma=Pa+208|0;Na=c[f>>2]|0;Oa=f+8|0;j=c[Oa>>2]|0;a:do if(!j){if((c[f+116>>2]|0)==0?(b[Na+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[Na+272>>2]|0)if(!(a[Na+81>>0]|0))Fa=15;else{Ja=0;break a}else{do if((e[Na+276>>1]|0)>=224){j=Na+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ka=Na+284|0;c[Ka>>2]=(c[Ka>>2]|0)+1;break b}j=Na+296|0;k=c[j>>2]|0;if(!k){j=Na+292|0;break}else{c[j>>2]=c[k>>2];Ka=Na+284|0;c[Ka>>2]=(c[Ka>>2]|0)+1;break b}}else j=Na+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=15}while(0);if((Fa|0)==15)k=_d(Na,224,0)|0;if(!k)Ja=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=Na;j=Na+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;Ja=k}}else Ja=j;while(0);if(!h){Oa=1;Ra=Pa;return Oa|0}xa=Na+81|0;if(a[xa>>0]|0){Oa=1;Ra=Pa;return Oa|0}Ka=f+36|0;if(c[Ka>>2]|0){Oa=1;Ra=Pa;return Oa|0}j=c[f>>2]|0;do if(((a[j+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(m=c[j+312>>2]|0,m|0):0){j=$a[m&127](c[j+316>>2]|0,21,0,0,0,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,n);c[f+12>>2]=23;Oa=1;Ra=Pa;return Oa|0}if((j|2|0)==2){if(!j)break;else j=1;Ra=Pa;return j|0}else{cd(f,39231,o);c[f+12>>2]=1;Oa=1;Ra=Pa;return Oa|0}}while(0);T=Ma;U=T+48|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));if((d[i>>0]|0)<9){j=h+48|0;k=c[j>>2]|0;if(k|0)ri(Na,k);c[j>>2]=0;Ba=h+8|0;c[Ba>>2]=c[Ba>>2]&-2;Kk(f,h,0)}else Kk(f,h,0);c:do if((c[Ka>>2]|0)==0?(a[xa>>0]|0)==0:0){if(((a[i>>0]|0)==9?(A=c[Oa>>2]|0,B=c[f>>2]|0,(a[f+199>>0]|0)==0):0)?(p=f+16|0,(a[p>>0]|0)==0):0){k=h;while(1){j=c[k+52>>2]|0;if(!j)break;else k=j}y=c[k+32>>2]|0;z=c[k>>2]|0;a[p>>0]=1;x=c[B+32>>2]|0;w=(x&4|0)==0&0==0;x=(x&68|0)==0&0==0;Wi(A,c[z>>2]|0);j=c[z>>2]|0;if((j|0)>0){n=A+116|0;o=B+272|0;p=B+276|0;q=B+81|0;r=B+288|0;s=B+300|0;t=B+296|0;u=B+284|0;v=B+292|0;m=0;do{k=c[z+4+(m*20|0)>>2]|0;j=c[z+4+(m*20|0)+4>>2]|0;d:do if(j){if(!(a[(c[A>>2]|0)+81>>0]|0))yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,-1)|0}else{do if(!x){if((a[k>>0]|0)!=-94)break;j=b[k+32>>1]|0;k=c[k+44>>2]|0;if(j<<16>>16<0)j=b[k+40>>1]|0;else j=j<<16>>16;if((j|0)<0)j=38132;else j=c[(c[k+4>>2]|0)+(j<<4)>>2]|0;if(w){if(a[(c[A>>2]|0)+81>>0]|0)break d;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,-1)|0;break d}else{c[C>>2]=c[k>>2];c[C+4>>2]=j;j=dd(B,40358,C)|0;if(a[(c[A>>2]|0)+81>>0]|0)break d;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,116)|0;break d}}while(0);k=c[z+4+(m*20|0)+8>>2]|0;e:do if(!k){c[D>>2]=m+1;j=dd(B,41025,D)|0}else{l=(Eu(k)|0)+1|0;f:do if(c[o>>2]|0)if(!(a[q>>0]|0))Fa=69;else{j=0;break e}else{do if(0<0|(0==0?(e[p>>1]|0)>>>0<l>>>0:0))j=r;else{j=c[s>>2]|0;if(j|0){c[s>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break f}j=c[t>>2]|0;if(!j){j=v;break}c[t>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break f}while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=69}while(0);if((Fa|0)==69){Fa=0;j=_d(B,l,0)|0}if(!j){j=0;break}ew(j|0,k|0,l|0)|0}while(0);if(a[(c[A>>2]|0)+81>>0]|0)break;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,116)|0}while(0);m=m+1|0;j=c[z>>2]|0}while((m|0)<(j|0))}n=c[Oa>>2]|0;c[Da+4>>2]=y;c[Da>>2]=f;c[Da+12>>2]=0;if((j|0)>0){l=n+116|0;m=n+144|0;k=0;do{if(!(a[(c[n>>2]|0)+81>>0]|0)){j=Vk(Da,c[z+4+(k*20|0)>>2]|0)|0;yc((c[l>>2]|0)+((k+(e[m>>1]|0)|0)*40|0)|0,j,-1,1,-1)|0;j=c[z>>2]|0}k=k+1|0}while((k|0)<(j|0))}}wa=h+68|0;ca=h+52|0;if(c[wa>>2]|0?(c[ca>>2]|0)==0:0){j=c[Oa>>2]|0;g:do if(!j){l=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[l+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=97;else{A=0;break g}else{do if((e[l+276>>1]|0)>=224){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ba=l+284|0;c[Ba>>2]=(c[Ba>>2]|0)+1;break h}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];Ba=l+284|0;c[Ba>>2]=(c[Ba>>2]|0)+1;break h}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=97}while(0);if((Fa|0)==97)k=_d(l,224,0)|0;if(!k)A=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=l;j=l+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;A=k}}else A=j;while(0);B=c[f>>2]|0;z=h+32|0;u=c[z>>2]|0;v=c[h+36>>2]|0;w=c[h+40>>2]|0;x=c[h+44>>2]|0;o=c[wa>>2]|0;p=o+8|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;j=gk(B,c[p>>2]|0,0)|0;q=o+12|0;m=c[q>>2]|0;if(m){if(!j)n=0;else n=c[j>>2]|0;if((c[m>>2]|0)>0){l=0;do{k=c[m+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+n|0)*20|0)+12>>0]=a[m+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[m>>2]|0));t=j}else t=j}else t=j;i:do if((t|0?(G=h+48|0,F=c[G>>2]|0,F|0):0)?(E=c[t>>2]|0,(E|0)==(c[F>>2]|0)):0){if((E|0)>0){j=0;do{if((a[t+4+(j*20|0)+12>>0]|0)!=(a[F+4+(j*20|0)+12>>0]|0))break i;if(bk(0,c[t+4+(j*20|0)>>2]|0,c[F+4+(j*20|0)>>2]|0,-1)|0)break i;j=j+1|0}while((j|0)<(c[t>>2]|0));j=c[G>>2]|0;if(j|0)Fa=121}else{j=F;Fa=121}if((Fa|0)==121)ri(B,j);c[G>>2]=0}while(0);j=f+40|0;m=c[j>>2]|0;y=o+44|0;c[y>>2]=m;c[j>>2]=m+4;j=c[h>>2]|0;m=Da+12|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[Ea+12>>2]=0;m=Ea+8|0;c[m>>2]=0;c[Ea>>2]=o;c[Ea+4>>2]=u;c[Da>>2]=f;c[Da+4>>2]=129;c[Da+8>>2]=130;c[Da+24>>2]=Ea;if((j|0)!=0?(H=c[j>>2]|0,(H|0)>0):0){l=H;j=j+4|0;while(1){k=c[j>>2]|0;if(k|0?_j(Da,k)|0:0)break;if((l|0)>1){l=l+-1|0;j=j+20|0}else break}k=c[m>>2]|0}else k=0;j=c[h+48>>2]|0;m=Da+12|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[Ea+12>>2]=0;m=Ea+8|0;c[m>>2]=k;c[Ea>>2]=o;c[Ea+4>>2]=u;c[Da>>2]=f;c[Da+4>>2]=129;c[Da+8>>2]=130;c[Da+24>>2]=Ea;if((j|0)!=0?(I=c[j>>2]|0,(I|0)>0):0){l=I;j=j+4|0;while(1){k=c[j>>2]|0;if(k|0?_j(Da,k)|0:0)break;if((l|0)>1){l=l+-1|0;j=j+20|0}else break}k=c[m>>2]|0}j=k;l=(k|0)==0;if(l)k=0;else k=c[j>>2]|0;c[o+72>>2]=k;n=c[p>>2]|0;do if(n){if(l)m=0;else m=c[j>>2]|0;if((c[n>>2]|0)<=0)break;l=0;do{k=c[n+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+m|0)*20|0)+12>>0]=a[n+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);m=c[q>>2]|0;do if(m){if(!j)n=0;else n=c[j>>2]|0;if((c[m>>2]|0)<=0){Fa=159;break}l=0;do{k=c[m+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;k=(j|0)==0;if(!k)a[j+4+((l+n|0)*20|0)+12>>0]=a[m+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[m>>2]|0));if(o){l=j;Fa=161}}else Fa=159;while(0);if((Fa|0)==159){l=j;k=(j|0)==0;Fa=161}if((Fa|0)==161){p=f+44|0;q=A+108|0;r=A+112|0;s=A+104|0;j=l;do{if(k)l=0;else l=c[j>>2]|0;c[o+76>>2]=l;n=c[(c[o+68>>2]|0)+20>>2]|0;do if(n){if(k)m=0;else m=c[j>>2]|0;if((c[n>>2]|0)<=0)break;l=0;do{k=c[n+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+m|0)*20|0)+12>>0]=a[n+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);k=c[o+36>>2]|0;if(k){Ba=dk(B,k,0,0)|0;j=nj(c[f>>2]|0,j,Ba)|0}l=c[p>>2]|0;k=l+1|0;c[o+48>>2]=k;l=l+2|0;c[p>>2]=l;c[o+52>>2]=l;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Ba=c[s>>2]|0;a[Ba+(l*20|0)>>0]=73;b[Ba+(l*20|0)+2>>1]=0;c[Ba+(l*20|0)+4>>2]=0;c[Ba+(l*20|0)+8>>2]=k;c[Ba+(l*20|0)+12>>2]=0;c[Ba+(l*20|0)+16>>2]=0;a[Ba+(l*20|0)+1>>0]=0}else Di(A,73,0,k,0)|0;o=c[o+32>>2]|0;k=(j|0)==0}while((o|0)!=0)}if(k){l=oj(B,147,17136,0)|0;l=nj(c[f>>2]|0,0,l)|0}else l=j;j=mj(f,l,u,v,w,x,t,0,0)|0;k=pj(f,0,0,0)|0;c[z>>2]=k;do if(k){c[k+28>>2]=j;Qk(f,k);if(!(Rk(f,(c[z>>2]|0)+8|0)|0)){Ba=j+8|0;c[Ba>>2]=c[Ba>>2]|64;Ba=h+8|0;c[Ba>>2]=c[Ba>>2]&-9;Kk(f,j,0);j=0}else j=7;m=c[y>>2]|0;k=c[l>>2]|0;n=A+108|0;l=c[n>>2]|0;o=A+112|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;Ba=c[A+104>>2]|0;a[Ba+(l*20|0)>>0]=113;b[Ba+(l*20|0)+2>>1]=0;c[Ba+(l*20|0)+4>>2]=m;c[Ba+(l*20|0)+8>>2]=k;c[Ba+(l*20|0)+12>>2]=0;c[Ba+(l*20|0)+16>>2]=0;a[Ba+(l*20|0)+1>>0]=0}else Di(A,113,m,k,0)|0;k=c[y>>2]|0;l=k+1|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0}else Di(A,111,l,k,0)|0;k=c[y>>2]|0;l=k+2|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0}else Di(A,111,l,k,0)|0;k=c[y>>2]|0;l=k+3|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0;break}else{Di(A,111,l,k,0)|0;break}}else{if(!j){j=0;break}pi(B,j,1);j=0}while(0);if(!((j|0)==0&(a[B+81>>0]|0)==0)){m=1;break}}va=h+32|0;l=c[va>>2]|0;za=h+8|0;da=(c[za>>2]|0)>>>3&1;T=La+4|0;U=T+36|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));S=h+48|0;c[La>>2]=c[S>>2];j=c[ca>>2]|0;j:do if(!j){sa=h+36|0;ua=Na+76|0;V=f+240|0;K=h+60|0;M=(da|0)!=0;W=f+200|0;N=h+4|0;X=f+12|0;O=Da+4|0;P=Da+8|0;Q=Da+12|0;R=Da+16|0;Ba=f+116|0;k=0;ta=l;k:while(1){j=c[ta>>2]|0;if((k|0)>=(j|0))break;m=c[ta+8+(k*72|0)+20>>2]|0;n=c[ta+8+(k*72|0)+16>>2]|0;j=ta+8+(k*72|0)+36|0;if((a[j>>0]&8?(Y=ta+8+(k*72|0)+40|0,ll(c[sa>>2]|0,c[Y>>2]|0)|0):0)?(b[ua>>1]&8192)==0:0){a[j>>0]=a[j>>0]&-41;ml(c[sa>>2]|0,c[Y>>2]|0)}l:do if(m){j=b[n+42>>1]|0;l=c[c[m>>2]>>2]|0;if((l|0)!=(j<<16>>16|0)){Fa=209;break k}if(!(c[m+8>>2]&8)){do if((k|0)==0&(c[m+48>>2]|0)!=0){if(!(c[za>>2]&262144))break;if((c[ta>>2]|0)==1){j=ta;k=0;break l}if(a[ta+116>>0]&10){j=ta;k=0;break l}}while(0);s=c[V>>2]|0;I=c[f>>2]|0;m:do if(!(b[I+76>>1]&1)){t=c[va>>2]|0;J=c[t+8+(k*72|0)+40>>2]|0;u=t+8+(k*72|0)+20|0;m=c[u>>2]|0;if(c[wa>>2]|0)break;if(c[m+68>>2]|0)break;o=c[m+32>>2]|0;j=c[m+60>>2]|0;n=(j|0)==0;if(!n){if(c[K>>2]|0)break;if(c[j+16>>2]|0)break;j=c[za>>2]|0;if(j&256)break}else j=c[za>>2]|0;l=c[o>>2]|0;if(!l)break;p=c[m+8>>2]|0;if(p&1|0)break;if(!n?M|(c[t>>2]|0)>1:0)break;r=c[S>>2]|0;q=(r|0)==0;if(!q?c[m+48>>2]|0:0)break;if(M?c[m+48>>2]|0:0)break;if(n){if(p&8192|0)break}else if(!((p&8192|j&1|0)==0&(c[sa>>2]|0)==0))break;H=t+8+(k*72|0)+36|0;if(a[H>>0]&32){if(M|(l|0)>1)break;if(!(c[(c[o+24>>2]|0)+56>>2]|0))G=1;else break}else G=0;n=m+52|0;l=c[n>>2]|0;do if(l|0){if(!((j&1|0)==0&((M|(c[m+48>>2]|0)!=0)^1)))break m;if(!((c[t>>2]|0)==1&(p&9|0)==0))break m;j=l;while(1){l=(j|0)==0;if(!l?(a[m+4>>0]|0)!=-128:0)break m;if((c[c[m+32>>2]>>2]|0)<1)break m;if(l)break;if(c[j+8>>2]&9|0)break m;m=j;j=c[j+52>>2]|0}if(q)break;l=c[r>>2]|0;if((l|0)<=0)break;j=0;do{if(!(b[r+4+(j*20|0)+16>>1]|0))break m;j=j+1|0}while((j|0)<(l|0))}while(0);q=t+8+(k*72|0)+8|0;j=c[q>>2]|0;c[V>>2]=j;do if(!(a[I+165>>0]|0)){if(a[W>>0]|0)break;l=c[I+312>>2]|0;if(!l)break;j=$a[l&127](c[I+316>>2]|0,21,0,0,0,j)|0;if((j|0)==1){cd(f,39216,Z);c[X>>2]=23;break}if((j|2|0)==2)break;cd(f,39231,_);c[X>>2]=1}while(0);c[V>>2]=s;j=c[n>>2]|0;n:do if(!j)Fa=267;else{p=I+81|0;o=c[S>>2]|0;n=c[K>>2]|0;m=c[ca>>2]|0;while(1){c[S>>2]=0;c[va>>2]=0;c[ca>>2]=0;c[K>>2]=0;l=fk(I,h,0)|0;c[K>>2]=n;c[S>>2]=o;c[va>>2]=t;a[N>>0]=-128;if(!l)l=m;else{c[l+52>>2]=m;if(m|0)c[m+56>>2]=l;c[l+56>>2]=h}c[ca>>2]=l;if(a[p>>0]|0)break n;j=c[j+52>>2]|0;if(!j){Fa=267;break}else m=l}}while(0);do if((Fa|0)==267){Fa=0;F=c[u>>2]|0;n=t+8+(k*72|0)+4|0;j=c[n>>2]|0;o:do if(j|0){if(c[I+480>>2]|0){Xd(I,j);break}l=j;do if((c[I+304>>2]|0)>>>0<=l>>>0){if((c[I+308>>2]|0)>>>0<=l>>>0)break;ta=I+300|0;c[j>>2]=c[ta>>2];c[ta>>2]=j;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{ta=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[q>>2]|0;p:do if(j|0){if(c[I+480>>2]|0){Xd(I,j);break}l=j;do if((c[I+304>>2]|0)>>>0<=l>>>0){if((c[I+308>>2]|0)>>>0<=l>>>0)break;ta=I+300|0;c[j>>2]=c[ta>>2];c[ta>>2]=j;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{ta=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=t+8+(k*72|0)+12|0;l=c[j>>2]|0;q:do if(l|0){if(c[I+480>>2]|0){Xd(I,l);break}m=l;do if((c[I+304>>2]|0)>>>0<=m>>>0){if((c[I+308>>2]|0)>>>0<=m>>>0)break;ta=I+300|0;c[l>>2]=c[ta>>2];c[ta>>2]=l;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[n>>2]=0;c[q>>2]=0;c[j>>2]=0;c[u>>2]=0;j=t+8+(k*72|0)+16|0;l=c[j>>2]|0;if(l|0){m=l+32|0;n=c[m>>2]|0;if((n|0)==1){ta=c[Ba>>2]|0;ta=((ta|0)==0?f:ta)+256|0;c[l+76>>2]=c[ta>>2];c[ta>>2]=l}else c[m>>2]=n+-1;c[j>>2]=0}y=k+1|0;z=I+480|0;A=I+304|0;B=I+308|0;C=I+300|0;D=(G|0)==0;E=I+81|0;w=h;o=-1;x=F;while(1){t=c[x+32>>2]|0;u=c[t>>2]|0;s=w+32|0;j=c[s>>2]|0;if(!j){j=pj(f,0,0,0)|0;if(!j)break;c[s>>2]=j;v=0}else v=a[H>>0]|0;if((u|0)>1){r=u+-1|0;l=c[j>>2]|0;m=l+r|0;if(m>>>0>(c[j+4>>2]|0)>>>0){l=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;l=Sv(l|0,L()|0,r|0,((r|0)<0)<<31>>31|0)|0;n=L()|0;if((m|0)>199){Fa=307;break}p=c[f>>2]|0;m=(n|0)<0|(n|0)==0&l>>>0<200;q=m?l:200;l=Yv(q|0,(m?n:0)|0,72,0)|0;l=Sv(l|0,L()|0,8,0)|0;m=L()|0;n=j;do if((c[p+304>>2]|0)>>>0<=n>>>0){if((c[p+308>>2]|0)>>>0<=n>>>0){Fa=311;break}if(m>>>0>0|((m|0)==0?l>>>0>(e[p+276>>1]|0)>>>0:0))Fa=311}else Fa=311;while(0);if((Fa|0)==311){Fa=0;j=Zd(p,j,l,m)|0;if(!j)break}c[j+4>>2]=q;n=j;m=j;j=c[j>>2]|0}else{n=j;m=j;j=l}if((j|0)>(y|0)){do{j=j+-1|0;T=n+8+((j+r|0)*72|0)|0;l=n+8+(j*72|0)|0;U=T+72|0;do{c[T>>2]=c[l>>2];T=T+4|0;l=l+4|0}while((T|0)<(U|0))}while((j|0)>(y|0));j=c[m>>2]|0}c[m>>2]=j+r;gw(n+8+(y*72|0)|0,0,r*72|0)|0;l=u+k|0;j=y;do{c[n+8+(j*72|0)+40>>2]=-1;j=j+1|0}while((j|0)<(l|0));c[s>>2]=n;j=n}if((u|0)>0){r=0;while(1){p=r+k|0;q=j+8+(p*72|0)|0;p=c[j+8+(p*72|0)+48>>2]|0;r:do if(p|0){o=p+4|0;l=c[p>>2]|0;if((c[o>>2]|0)>0){n=0;do{l=c[l+(n<<3)>>2]|0;s:do if(l|0){if(c[z>>2]|0){Xd(I,l);break}m=l;do if((c[A>>2]|0)>>>0<=m>>>0){if((c[B>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[C>>2];c[C>>2]=l;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);n=n+1|0;l=c[p>>2]|0}while((n|0)<(c[o>>2]|0))}t:do if(l|0){if(c[z>>2]|0){Xd(I,l);break}m=l;do if((c[A>>2]|0)>>>0<=m>>>0){if((c[B>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[C>>2];c[C>>2]=l;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(c[z>>2]|0){Xd(I,p);break}l=p;do if((c[A>>2]|0)>>>0<=l>>>0){if((c[B>>2]|0)>>>0<=l>>>0)break;c[p>>2]=c[C>>2];c[C>>2]=p;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ta=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);m=t+8+(r*72|0)|0;T=q;l=m;U=T+72|0;do{c[T>>2]=c[l>>2];T=T+4|0;l=l+4|0}while((T|0)<(U|0));l=c[t+8+(r*72|0)+40>>2]|0;T=m;U=T+72|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));r=r+1|0;if((r|0)==(u|0)){o=l;break}}}a[j+8+(k*72|0)+36>>0]=v;l=x+48|0;m=c[l>>2]|0;if(m|0){n=c[m>>2]|0;if((n|0)>0){j=0;do{b[m+4+(j*20|0)+16>>1]=0;j=j+1|0}while((j|0)!=(n|0))}c[w+48>>2]=m;c[l>>2]=0}ta=x+36|0;j=c[ta>>2]|0;c[ta>>2]=0;if(!D)Wk(j,o);ta=w+36|0;U=Xk(I,j,c[ta>>2]|0)|0;c[ta>>2]=U;if(!(a[E>>0]|0)){c[Da>>2]=f;c[O>>2]=J;c[P>>2]=o;c[Q>>2]=G;c[R>>2]=c[x>>2];yl(Da,w,0)}j=w+8|0;c[j>>2]=c[j>>2]|c[x+8>>2]&1;j=x+60|0;l=c[j>>2]|0;if(l|0){c[w+60>>2]=l;c[j>>2]=0}w=c[w+52>>2]|0;if(!w)break;else x=c[x+52>>2]|0}if((Fa|0)==307){Fa=0;c[$>>2]=200;cd(f,43159,$)}if(!F)break;pi(I,F,1)}while(0);if(!(c[Ka>>2]|0))k=-1;else{m=1;break c}}while(0);j=c[va>>2]|0;if(a[xa>>0]|0){m=1;break c}if((d[i>>0]|0)<9)break;c[La>>2]=c[S>>2]}else j=ta}else j=ta;while(0);l=c[ca>>2]|0;if(!l){k=k+1|0;ta=j}else{w=l;break j}}if((Fa|0)==209){m=c[n>>2]|0;c[aa>>2]=j<<16>>16;c[aa+4>>2]=m;c[aa+8>>2]=l;cd(f,43040,aa);m=1;break c}if((j|0)>1)if((b[ua>>1]|0)>-1){c[Da>>2]=f;m=Da+4|0;n=Da+8|0;o=Da+12|0;p=Ea+4|0;q=Ea+8|0;r=Ea+12|0;s=Ea+16|0;t=Ea+24|0;u=Ea+20|0;do{c[m>>2]=0;c[n>>2]=0;c[o>>2]=0;Fl(Da,c[sa>>2]|0);u:do if(c[m>>2]|0){c[u>>2]=0;c[Ea>>2]=f;c[p>>2]=131;c[q>>2]=132;c[r>>2]=0;c[s>>2]=0;c[t>>2]=Da;j=c[sa>>2]|0;if(j|0)_j(Ea,j)|0;j=c[c[Da>>2]>>2]|0;k=c[o>>2]|0;if(!k)break;do if(j|0){if(c[j+480>>2]|0){Xd(j,k);break u}l=k;if((c[j+304>>2]|0)>>>0>l>>>0)break;if((c[j+308>>2]|0)>>>0<=l>>>0)break;Fa=j+300|0;c[k>>2]=c[Fa>>2];c[Fa>>2]=k;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Fa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0)}while((c[n>>2]|0)!=0);j=c[ta>>2]|0;Fa=668}else Fa=669;else Fa=668;if((Fa|0)==668?(j|0)>0:0)Fa=669;v:do if((Fa|0)==669){z=f+208|0;A=f+44|0;B=Ja+108|0;C=Ja+112|0;D=ta+116|0;E=Ja+104|0;F=Da+4|0;G=Da+16|0;H=Da+8|0;I=Da+12|0;J=Ja+12|0;K=ta+8|0;M=f+19|0;N=f+28|0;O=ta+36|0;P=ta+32|0;Q=ta+24|0;R=ta+45|0;S=ta+40|0;y=0;while(1){u=ta+8+(y*72|0)|0;ka=ta+8+(y*72|0)+56|0;do if(((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?(la=c[ta+8+(y*72|0)+8>>2]|0,ma=c[ta+8+(y*72|0)+4>>2]|0,na=c[f>>2]|0,(a[na+165>>0]|0)==0):0)?(a[W>>0]|0)==0:0){j=c[na+312>>2]|0;if(!j)break;j=$a[j&127](c[na+316>>2]|0,20,la,59952,ma,c[V>>2]|0)|0;if((j|0)==1){cd(f,39216,oa);c[X>>2]=23;break}if((j|2|0)==2)break;cd(f,39231,pa);c[X>>2]=1}while(0);s=ta+8+(y*72|0)+20|0;v=c[s>>2]|0;if(v|0){ka=nl(h)|0;c[z>>2]=(c[z>>2]|0)+ka;if(!(b[ua>>1]&4096))ol(f,v,c[sa>>2]|0,c[ta+8+(y*72|0)+40>>2]|0,(d[ta+8+(y*72|0)+36>>0]|0)>>>5&1)|0;x=c[V>>2]|0;t=ta+8+(y*72|0)+8|0;c[V>>2]=c[t>>2];l=(y|0)==0;do if(l){if((c[ta>>2]|0)!=1?(a[D>>0]&10)==0:0){Fa=693;break}l=c[B>>2]|0;j=l+1|0;k=(c[A>>2]|0)+1|0;c[A>>2]=k;c[O>>2]=k;if((c[C>>2]|0)>(l|0)){c[B>>2]=j;ka=c[E>>2]|0;a[ka+(l*20|0)>>0]=13;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=k;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=j;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(Ja,13,k,0,j)|0;c[P>>2]=j;j=c[O>>2]|0;a[Da>>0]=13;c[F>>2]=j;c[G>>2]=0;c[H>>2]=0;c[I>>2]=0;c[qa>>2]=c[v+20>>2];nk(f,1,43080,qa);kj(f,v,Da)|0;b[(c[Q>>2]|0)+44>>1]=b[v+6>>1]|0;a[R>>0]=a[R>>0]|16;c[S>>2]=c[H>>2];j=c[O>>2]|0;k=c[B>>2]|0;if((c[C>>2]|0)>(k|0)){c[B>>2]=k+1;ka=c[E>>2]|0;a[ka+(k*20|0)>>0]=67;b[ka+(k*20|0)+2>>1]=0;c[ka+(k*20|0)+4>>2]=j;c[ka+(k*20|0)+8>>2]=0;c[ka+(k*20|0)+12>>2]=0;c[ka+(k*20|0)+16>>2]=0;a[ka+(k*20|0)+1>>0]=0}else Di(Ja,67,j,0,0)|0;k=c[J>>2]|0;a[k+19>>0]=0;c[k+28>>2]=0;k=c[B>>2]|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[E>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else j=59308;c[j+8>>2]=k}else Fa=693;while(0);if((Fa|0)==693){Fa=0;k=(c[A>>2]|0)+1|0;c[A>>2]=k;w=ta+8+(y*72|0)+28|0;c[w>>2]=k;j=c[B>>2]|0;if((c[C>>2]|0)>(j|0)){ka=j+1|0;c[B>>2]=ka;ja=c[E>>2]|0;a[ja+(j*20|0)>>0]=70;b[ja+(j*20|0)+2>>1]=0;c[ja+(j*20|0)+4>>2]=0;c[ja+(j*20|0)+8>>2]=k;c[ja+(j*20|0)+12>>2]=0;c[ja+(j*20|0)+16>>2]=0;a[ja+(j*20|0)+1>>0]=0;k=ka}else{k=Di(Ja,70,0,k,0)|0;j=k;k=k+1|0}c[ta+8+(y*72|0)+24>>2]=k;do if(!(a[ta+8+(y*72|0)+37>>0]&8)){k=c[B>>2]|0;if((c[C>>2]|0)>(k|0)){c[B>>2]=k+1;T=c[E>>2]|0;a[T+(k*20|0)>>0]=17;T=T+(k*20|0)+1|0;U=T+19|0;do{a[T>>0]=0;T=T+1|0}while((T|0)<(U|0));r=k;break}else{r=Di(Ja,17,0,0,0)|0;break}}else r=0;while(0);w:do if(l)Fa=724;else{p=ta+8+(y*72|0)+4|0;q=K;x:while(1){o=c[q+20>>2]|0;y:do if(o|0){if(a[q+37>>0]&16)break;l=c[q+8>>2]|0;if(!l)break;m=c[q+4>>2]|0;n=c[p>>2]|0;do if(!m)k=((n|0)!=0)<<31>>31;else{if(!n)break y;ka=a[m>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(ka<<24>>24==0|(k|0)!=0)break;do{m=m+1|0;n=n+1|0;ka=a[m>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(k|0)!=0))}while(0);if(k|0)break;m=c[t>>2]|0;if(!m)break;ka=a[l>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(k|0)!=0))do{l=l+1|0;m=m+1|0;ka=a[l>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(k|0)!=0));if(k|0)break;k=c[s>>2]|0;if((c[k+20>>2]|0)!=(c[o+20>>2]|0))break;if(!(bk(0,c[k+36>>2]|0,c[o+36>>2]|0,-1)|0))break x}while(0);k=q+72|0;if(k>>>0<u>>>0)q=k;else{Fa=724;break w}}k=c[ta+8+(y*72|0)+40>>2]|0;l=c[q+40>>2]|0;m=c[B>>2]|0;if((c[C>>2]|0)>(m|0)){c[B>>2]=m+1;ka=c[E>>2]|0;a[ka+(m*20|0)>>0]=111;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=k;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(Ja,111,k,l,0)|0;k=b[(c[q+20>>2]|0)+6>>1]|0;b[v+6>>1]=k}while(0);if((Fa|0)==724){Fa=0;k=c[ta+8+(y*72|0)+40>>2]|0;a[Da>>0]=12;c[F>>2]=k;c[G>>2]=0;c[H>>2]=0;c[I>>2]=0;c[ra>>2]=c[v+20>>2];nk(f,1,43094,ra);kj(f,v,Da)|0;k=b[v+6>>1]|0}b[(c[ta+8+(y*72|0)+16>>2]|0)+44>>1]=k;l=c[B>>2]|0;if(r|0){if(!(a[(c[Ja>>2]|0)+81>>0]|0))k=(c[E>>2]|0)+(((r|0)<0?l+-1|0:r)*20|0)|0;else k=59308;c[k+8>>2]=l}k=c[w>>2]|0;if((c[C>>2]|0)>(l|0)){c[B>>2]=l+1;ka=c[E>>2]|0;a[ka+(l*20|0)>>0]=66;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=k;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;k=l}else k=Di(Ja,66,k,0,0)|0;if((j|0)<0)j=(c[B>>2]|0)+-1|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[E>>2]|0)+(j*20|0)|0;else j=59308;c[j+4>>2]=k}a[M>>0]=0;c[N>>2]=0;if(a[xa>>0]|0)break;ka=nl(h)|0;c[z>>2]=(c[z>>2]|0)-ka;c[V>>2]=x}y=y+1|0;if((y|0)>=(c[ta>>2]|0))break v}m=1;break c}while(0);$=c[h>>2]|0;D=c[sa>>2]|0;t=h+40|0;m=c[t>>2]|0;u=h+44|0;X=c[u>>2]|0;j=c[za>>2]|0;a[Ga>>0]=j&1;z:do if((j&9|0)==1){n=c[La>>2]|0;k=(n|0)==0;l=($|0)==0;do if(!(l&k)){if(l|k){U=m;break z}k=c[n>>2]|0;if((k|0)!=(c[$>>2]|0)){U=m;break z}if((k|0)<=0)break;j=0;do{if((a[n+4+(j*20|0)+12>>0]|0)!=(a[$+4+(j*20|0)+12>>0]|0)){U=m;break z}if(bk(0,c[n+4+(j*20|0)>>2]|0,c[$+4+(j*20|0)>>2]|0,-1)|0){U=m;break z}j=j+1|0}while((j|0)<(c[n>>2]|0));j=c[za>>2]|0}while(0);c[za>>2]=j&-2;U=gk(Na,$,0)|0;c[t>>2]=U}else U=m;while(0);q=c[La>>2]|0;A:do if(q){o=c[f>>2]|0;r=c[q>>2]|0;m=(c[$>>2]|0)+1+r|0;n=m*5|0;l=n+20|0;p=o+272|0;B:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=763;else{n=0;o=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=764;break B}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=764;break B}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=763}while(0);if((Fa|0)==763){k=_d(o,l,0)|0;Fa=764}do if((Fa|0)==764){do if(!k){j=o+81|0;if(a[j>>0]|0){n=0;p=1;break}if(a[o+82>>0]|0){n=0;p=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){n=0;p=1;break}c[j+12>>2]=7;n=0;p=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;n=k;p=0}while(0);if(!((r|0)>0&(k|0)!=0)){o=p;break}o=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[o>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0)){o=p;break}else l=l+20|0}}while(0);l=f+40|0;k=c[l>>2]|0;c[l>>2]=k+1;c[La+8>>2]=k;l=(c[c[La>>2]>>2]|0)+1+(c[$>>2]|0)|0;m=Ja+108|0;j=c[m>>2]|0;if((c[Ja+112>>2]|0)>(j|0)){c[m>>2]=j+1;ra=c[Ja+104>>2]|0;a[ra+(j*20|0)>>0]=113;b[ra+(j*20|0)+2>>1]=0;c[ra+(j*20|0)+4>>2]=k;c[ra+(j*20|0)+8>>2]=l;c[ra+(j*20|0)+12>>2]=0;c[ra+(j*20|0)+16>>2]=0;a[ra+(j*20|0)+1>>0]=0}else j=Di(Ja,113,k,l,0)|0;k=c[Ja>>2]|0;if(!(a[k+81>>0]|0)){if((j|0)<0)k=(c[m>>2]|0)+-1|0;else k=j;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,n,-9);break}if(o)break;c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9;break}if(o|(c[k+480>>2]|0)!=0)break;ra=(c[n>>2]|0)+-1|0;c[n>>2]=ra;if(ra|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break A}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;ra=k+300|0;c[n>>2]=c[ra>>2];c[ra>>2]=n;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ra=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ra;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else j=-1;while(0);c[La+20>>2]=j;do if((a[i>>0]|0)==12){j=c[i+4>>2]|0;k=c[$>>2]|0;l=Ja+108|0;m=c[l>>2]|0;if((c[Ja+112>>2]|0)>(m|0)){c[l>>2]=m+1;ra=c[Ja+104>>2]|0;a[ra+(m*20|0)>>0]=113;b[ra+(m*20|0)+2>>1]=0;c[ra+(m*20|0)+4>>2]=j;c[ra+(m*20|0)+8>>2]=k;c[ra+(m*20|0)+12>>2]=0;c[ra+(m*20|0)+16>>2]=0;a[ra+(m*20|0)+1>>0]=0;break}else{Di(Ja,113,j,k,0)|0;break}}while(0);_=f+56|0;aa=c[_>>2]|0;j=aa+-1|0;c[_>>2]=j;if(!(c[za>>2]&16384))b[h+6>>1]=320;pl(f,h,j);do if(!(c[h+12>>2]|0)){j=c[La+20>>2]|0;if((j|0)<=-1)break;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[Ja+104>>2]|0)+(j*20|0)|0;else j=59308;a[j>>0]=114;ra=La+32|0;a[ra>>0]=a[ra>>0]|1}while(0);do if(!(c[za>>2]&1))j=0;else{q=f+40|0;s=c[q>>2]|0;c[q>>2]=s+1;c[Ga+4>>2]=s;q=c[h>>2]|0;o=c[f>>2]|0;r=c[q>>2]|0;m=r+1|0;n=m*5|0;l=n+20|0;p=o+272|0;C:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=820;else{o=0;n=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=821;break C}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=821;break C}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=820}while(0);if((Fa|0)==820){k=_d(o,l,0)|0;Fa=821}do if((Fa|0)==821){do if(!k){j=o+81|0;if(a[j>>0]|0){o=0;n=1;break}if(a[o+82>>0]|0){o=0;n=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){o=0;n=1;break}c[j+12>>2]=7;o=0;n=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;o=k;n=0}while(0);if(!((r|0)>0&(k|0)!=0))break;p=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[p>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0))break;else l=l+20|0}}while(0);p=Ja+108|0;j=c[p>>2]|0;if((c[Ja+112>>2]|0)>(j|0)){c[p>>2]=j+1;ra=c[Ja+104>>2]|0;a[ra+(j*20|0)>>0]=113;b[ra+(j*20|0)+2>>1]=0;c[ra+(j*20|0)+4>>2]=s;c[ra+(j*20|0)+8>>2]=0;c[ra+(j*20|0)+12>>2]=0;c[ra+(j*20|0)+16>>2]=0;a[ra+(j*20|0)+1>>0]=0}else j=Di(Ja,113,s,0,0)|0;k=c[Ja>>2]|0;D:do if(a[k+81>>0]|0){if(n|(c[k+480>>2]|0)!=0)break;ra=(c[o>>2]|0)+-1|0;c[o>>2]=ra;if(ra|0)break;k=c[o+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,o);break D}l=o;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;ra=k+300|0;c[o>>2]=c[ra>>2];c[ra>>2]=o;break D}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ra=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ra;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else{if((j|0)<0)k=(c[p>>2]|0)+-1|0;else k=j;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,o,-9);break}if(n)break;c[l+(k*20|0)+16>>2]=o;a[m>>0]=-9}while(0);c[Ga+8>>2]=j;j=c[p>>2]|0;if((j|0)<=0){j=3;break}b[(c[Ja+104>>2]|0)+((j+-1|0)*20|0)+2>>1]=8;j=3}while(0);a[Ga+1>>0]=j;l=(U|0)==0;E:do if((da|0)==0&l){B=(((a[Ga>>0]|0)==0?0:256)|c[za>>2]&16384)&65535;q=c[wa>>2]|0;C=(q|0)!=0;do if(C){j=c[Oa>>2]|0;F:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);G:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=873;else{j=0;break F}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break G}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break G}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=873}while(0);if((Fa|0)==873)j=_d(l,224,0)|0;if(!j){j=0;break}T=j+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[Oa>>2]=j;Di(j,61,0,1,0)|0}while(0);k=c[q+8>>2]|0;do if(k){m=c[k>>2]|0;k=f+44|0;o=c[k>>2]|0;l=o+1|0;c[q+64>>2]=l;m=o+m|0;c[k>>2]=m;o=j+108|0;n=c[o>>2]|0;p=j+112|0;if((c[p>>2]|0)>(n|0)){c[o>>2]=n+1;A=c[j+104>>2]|0;a[A+(n*20|0)>>0]=73;b[A+(n*20|0)+2>>1]=0;c[A+(n*20|0)+4>>2]=0;c[A+(n*20|0)+8>>2]=l;c[A+(n*20|0)+12>>2]=m;c[A+(n*20|0)+16>>2]=0;a[A+(n*20|0)+1>>0]=0;A=k;break}else{Di(j,73,0,l,m)|0;A=k;break}}else{A=f+44|0;o=j+108|0;p=j+112|0}while(0);k=(c[A>>2]|0)+1|0;c[A>>2]=k;c[q+80>>2]=k;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=1;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,1,k,0)|0;if(a[q+20>>0]|0){n=c[A>>2]|0;m=n+1|0;c[q+84>>2]=m;n=n+2|0;c[A>>2]=n;k=q+88|0;c[k>>2]=n;n=f+40|0;l=c[n>>2]|0;c[n>>2]=l+1;n=q+56|0;c[n>>2]=l;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=1;c[Ca+(l*20|0)+8>>2]=m;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,1,m,0)|0;k=c[k>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=0;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,0,k,0)|0;m=c[n>>2]|0;k=c[q+44>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=111;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=m;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0;break}else{Di(j,111,m,k,0)|0;break}}x=f+40|0;y=q+44|0;z=j+104|0;w=q;do{v=w+40|0;k=c[v>>2]|0;do if(c[k+4>>2]&4096){if((a[w+17>>0]|0)==87){Fa=944;break}n=c[(c[w+68>>2]|0)+20>>2]|0;t=c[f>>2]|0;u=c[n>>2]|0;r=u+1|0;s=r*5|0;l=s+20|0;q=t+272|0;H:do if(c[q>>2]|0)if(!(a[t+81>>0]|0))Fa=909;else{r=0;m=0;n=1}else{do if(!(0<0|(0==0?(e[t+276>>1]|0)>>>0<l>>>0:0))){k=t+300|0;m=c[k>>2]|0;if(m|0){c[k>>2]=c[m>>2];Fa=t+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=910;break H}k=t+296|0;m=c[k>>2]|0;if(!m){k=t+292|0;break}else{c[k>>2]=c[m>>2];Fa=t+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=910;break H}}else k=t+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=909}while(0);if((Fa|0)==909){m=_d(t,l,0)|0;Fa=910}I:do if((Fa|0)==910){Fa=0;if(m|0){q=m+16|0;c[q>>2]=m+20+(r<<2);b[m+6>>1]=u;b[m+8>>1]=r;a[m+4>>0]=a[t+78>>0]|0;c[m+12>>2]=t;c[m>>2]=1;gw(m+24|0,0,s+-4|0)|0;if((u|0)<=0){r=m;n=0;break}l=n+4|0;n=0;while(1){k=Yi(f,c[l>>2]|0)|0;if(!k)k=c[(c[f>>2]|0)+8>>2]|0;c[m+20+(n<<2)>>2]=k;a[(c[q>>2]|0)+n>>0]=a[l+12>>0]|0;n=n+1|0;if((n|0)==(u|0)){r=m;n=0;break I}else l=l+20|0}}k=t+81|0;if(a[k>>0]|0){r=0;n=1;break}if(a[t+82>>0]|0){r=0;n=1;break}a[k>>0]=1;if((c[t+180>>2]|0)>0)c[t+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[t+236>>2]|0;if(!k){r=0;n=1;break}c[k+12>>2]=7;r=0;n=1}while(0);l=c[x>>2]|0;c[x>>2]=l+1;k=w+56|0;c[k>>2]=l;Ca=c[A>>2]|0;q=w+60|0;c[q>>2]=Ca+1;c[A>>2]=Ca+3;do if(m){if((a[(c[(c[v>>2]|0)+32>>2]|0)+1>>0]|0)!=105)break;a[c[m+16>>2]>>0]=1;l=c[k>>2]|0}while(0);k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ca=c[z>>2]|0;a[Ca+(k*20|0)>>0]=113;b[Ca+(k*20|0)+2>>1]=0;c[Ca+(k*20|0)+4>>2]=l;c[Ca+(k*20|0)+8>>2]=2;c[Ca+(k*20|0)+12>>2]=0;c[Ca+(k*20|0)+16>>2]=0;a[Ca+(k*20|0)+1>>0]=0}else Di(j,113,l,2,0)|0;k=c[j>>2]|0;J:do if(a[k+81>>0]|0){if(n|(c[k+480>>2]|0)!=0)break;Ca=(c[r>>2]|0)+-1|0;c[r>>2]=Ca;if(Ca|0)break;k=c[r+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,r);break J}l=r;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Ca=k+300|0;c[r>>2]=c[Ca>>2];c[Ca>>2]=r;break J}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Ca=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else{Aa=c[z>>2]|0;Ca=(c[o>>2]|0)+-1|0;a[Aa+(Ca*20|0)+1>>0]=-9;c[Aa+(Ca*20|0)+16>>2]=r}while(0);k=(c[q>>2]|0)+1|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[z>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=0;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}else Fa=944;while(0);do if((Fa|0)==944){Fa=0;k=c[k+32>>2]|0;if((k|0)==43457|(k|0)==43467){l=c[A>>2]|0;c[w+60>>2]=l+1;k=c[x>>2]|0;c[x>>2]=k+1;c[w+56>>2]=k;c[A>>2]=l+2;l=c[y>>2]|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;Ca=c[z>>2]|0;a[Ca+(m*20|0)>>0]=111;b[Ca+(m*20|0)+2>>1]=0;c[Ca+(m*20|0)+4>>2]=k;c[Ca+(m*20|0)+8>>2]=l;c[Ca+(m*20|0)+12>>2]=0;c[Ca+(m*20|0)+16>>2]=0;a[Ca+(m*20|0)+1>>0]=0;break}else{Di(j,111,k,l,0)|0;break}}if(!((k|0)==40587|(k|0)==40592))break;k=c[x>>2]|0;c[x>>2]=k+1;c[w+56>>2]=k;l=c[y>>2]|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;Ca=c[z>>2]|0;a[Ca+(m*20|0)>>0]=111;b[Ca+(m*20|0)+2>>1]=0;c[Ca+(m*20|0)+4>>2]=k;c[Ca+(m*20|0)+8>>2]=l;c[Ca+(m*20|0)+12>>2]=0;c[Ca+(m*20|0)+16>>2]=0;a[Ca+(m*20|0)+1>>0]=0;break}else{Di(j,111,k,l,0)|0;break}}while(0);w=c[w+32>>2]|0}while((w|0)!=0)}while(0);k=h+6|0;Q=ql(f,ta,D,c[La>>2]|0,c[h>>2]|0,B,b[k>>1]|0)|0;if(!Q){m=1;break c}j=b[Q+72>>1]|0;if(j<<16>>16<(b[k>>1]|0))b[k>>1]=j;do if(a[Ga>>0]|0){j=a[Q+51>>0]|0;if(!(j<<24>>24))break;a[Ga+1>>0]=j}while(0);k=c[La>>2]|0;do if(!k)Fa=965;else{l=a[Q+47>>0]|0;c[La+4>>2]=l;if(!(a[Q+52>>0]|0))j=Q+32|0;else j=Q+752+(((d[Q+46>>0]|0)+-1|0)*80|0)+16|0;c[La+28>>2]=c[j>>2];if((c[k>>2]|0)!=(l|0))break;c[La>>2]=0;Fa=965}while(0);do if((Fa|0)==965){j=c[La+20>>2]|0;if((j|0)<=-1)break;k=c[Ja>>2]|0;if(a[k+81>>0]|0)break;Ca=c[Ja+104>>2]|0;za=Ca+(j*20|0)+1|0;Aa=Ca+(j*20|0)+16|0;kg(k,a[za>>0]|0,c[Aa>>2]|0);a[za>>0]=0;c[Aa>>2]=0;a[Ca+(j*20|0)>>0]=-86}while(0);if(!C){rl(f,h,-1,La,Ga,i,c[Q+32>>2]|0,c[Q+36>>2]|0);sl(Q);j=0;Fa=1796;break}Z=c[_>>2]|0;m=Z+-1|0;W=Z+-2|0;X=Z+-3|0;c[_>>2]=X;w=f+44|0;Y=(c[w>>2]|0)+1|0;c[w>>2]=Y;V=c[wa>>2]|0;J=c[V+12>>2]|0;j=c[Oa>>2]|0;K:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);L:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=983;else{S=0;break K}else{do if((e[l+276>>1]|0)>=224){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break L}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break L}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=983}while(0);if((Fa|0)==983)k=_d(l,224,0)|0;if(!k){S=0;break}T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=l;j=l+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;S=k}else S=j;while(0);o=c[va>>2]|0;p=c[o+48>>2]|0;o=b[(c[o+24>>2]|0)+42>>1]|0;q=o<<16>>16;K=c[_>>2]|0;E=K+-1|0;c[_>>2]=E;z=Ea+20|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;c[Ea>>2]=f;z=Ea+4|0;c[z>>2]=V;c[Ea+8>>2]=S;c[Ea+12>>2]=Y;c[Ea+16>>2]=m;P=c[V+44>>2]|0;R=Ea+36|0;c[R>>2]=P;O=P+1|0;B=Ea+28|0;c[B>>2]=P+2;H=Ea+44|0;c[H>>2]=P+3;P=V+17|0;M:do switch(a[P>>0]|0){case 83:{if((a[V+16>>0]|0)==86)break M;k=c[V+24>>2]|0;j=c[f>>2]|0;c[Da>>2]=0;do if(k|0){Wj(j,k,a[j+78>>0]|0,67,Da)|0;n=c[Da>>2]|0;if(!n)break;l=n+8|0;m=b[l>>1]|0;j=m&65535;do if(!(j&4)){if(j&8|0){k=Mg(+g[n>>3])|0;L()|0;j=m;break}if(!(j&18)){k=0;j=m;break}k=Ng(a[n+10>>0]|0,c[n+12>>2]|0,c[n+16>>2]|0)|0;L()|0;j=b[l>>1]|0}else{k=c[n>>2]|0;j=m}while(0);l=(k|0)<1;if(!((j&9216)==0?!(c[n+24>>2]|0):0))Cg(n);j=c[n+32>>2]|0;do if(!j)Fa=1007;else{if(c[j+480>>2]|0){Xd(j,n);break}k=n;if((c[j+304>>2]|0)>>>0>k>>>0){Fa=1007;break}if((c[j+308>>2]|0)>>>0<=k>>>0){Fa=1007;break}Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n}while(0);do if((Fa|0)==1007)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(l)break M;c[Ea+24>>2]=1;break M}while(0);break}case 87:{if(c[V+84>>2]|0)break M;j=V;do{Ca=c[(c[j+40>>2]|0)+32>>2]|0;if((Ca|0)==40592|((Ca|0)==40587|((Ca|0)==43457|(Ca|0)==43467)))break M;j=c[j+32>>2]|0}while((j|0)!=0);if((a[V+18>>0]|0)!=85){c[Ea+24>>2]=1;break M}if((a[V+16>>0]|0)==86)break M;k=c[V+28>>2]|0;j=c[f>>2]|0;c[Da>>2]=0;do if(k|0){Wj(j,k,a[j+78>>0]|0,67,Da)|0;n=c[Da>>2]|0;if(!n)break;l=n+8|0;m=b[l>>1]|0;j=m&65535;do if(!(j&4)){if(j&8|0){k=Mg(+g[n>>3])|0;L()|0;j=m;break}if(!(j&18)){k=0;j=m;break}k=Ng(a[n+10>>0]|0,c[n+12>>2]|0,c[n+16>>2]|0)|0;L()|0;j=b[l>>1]|0}else{k=c[n>>2]|0;j=m}while(0);l=(k|0)<1;if(!((j&9216)==0?!(c[n+24>>2]|0):0))Cg(n);j=c[n+32>>2]|0;do if(!j)Fa=1036;else{if(c[j+480>>2]|0){Xd(j,n);break}k=n;if((c[j+304>>2]|0)>>>0>k>>>0){Fa=1036;break}if((c[j+308>>2]|0)>>>0<=k>>>0){Fa=1036;break}Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n}while(0);do if((Fa|0)==1036)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(l)break M;c[Ea+24>>2]=3;break M}while(0);break}default:c[Ea+24>>2]=2}while(0);j=c[w>>2]|0;n=j+1|0;j=j+q|0;t=j+1|0;u=j+2|0;c[w>>2]=u;switch(a[P>>0]|0){case 83:case 85:{j=j+3|0;c[w>>2]=j;G=j;break}default:{G=0;j=u}}F=V+18|0;switch(a[F>>0]|0){case 83:case 85:{j=j+1|0;c[w>>2]=j;D=j;break}default:D=0}C=V+16|0;if((a[C>>0]|0)==76){y=0;x=0}else{if(!J)m=0;else m=c[J>>2]|0;k=(c[V+72>>2]|0)+n|0;l=c[V+8>>2]|0;if(l)k=(c[l>>2]|0)+k|0;y=j+m|0;c[Ea+32>>2]=y+1;y=y+m|0;c[Ea+40>>2]=y+1;y=y+m|0;c[Ea+48>>2]=y+1;c[w>>2]=y+m;y=j+1|0;x=k}M=S+108|0;N=S+112|0;if(o<<16>>16>0){k=S+104|0;j=0;do{l=j+n|0;m=c[M>>2]|0;if((c[N>>2]|0)>(m|0)){c[M>>2]=m+1;Da=c[k>>2]|0;a[Da+(m*20|0)>>0]=90;b[Da+(m*20|0)+2>>1]=0;c[Da+(m*20|0)+4>>2]=p;c[Da+(m*20|0)+8>>2]=j;c[Da+(m*20|0)+12>>2]=l;c[Da+(m*20|0)+16>>2]=0;a[Da+(m*20|0)+1>>0]=0}else Di(S,90,p,j,l)|0;j=j+1|0}while((j|0)!=(q|0))}j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=92;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=n;c[Da+(j*20|0)+8>>2]=q;c[Da+(j*20|0)+12>>2]=t;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,92,n,q,t)|0;I=V+8|0;q=c[I>>2]|0;do if(q){r=c[q>>2]|0;s=(c[V+72>>2]|0)+n|0;o=c[f>>2]|0;m=r+1|0;n=m*5|0;l=n+20|0;p=o+272|0;N:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=1074;else{n=0;l=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1075;break N}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1075;break N}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=1074}while(0);if((Fa|0)==1074){k=_d(o,l,0)|0;Fa=1075}do if((Fa|0)==1075){do if(!k){j=o+81|0;if(a[j>>0]|0){n=0;p=1;break}if(a[o+82>>0]|0){n=0;p=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){n=0;p=1;break}c[j+12>>2]=7;n=0;p=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;n=k;p=0}while(0);if(!((r|0)>0&(k|0)!=0)){l=p;break}o=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[o>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0)){l=p;break}else l=l+20|0}}while(0);o=(c[w>>2]|0)+1|0;c[w>>2]=o;m=V+64|0;j=c[m>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Da=c[S+104>>2]|0;a[Da+(k*20|0)>>0]=87;b[Da+(k*20|0)+2>>1]=0;c[Da+(k*20|0)+4>>2]=s;c[Da+(k*20|0)+8>>2]=j;c[Da+(k*20|0)+12>>2]=r;c[Da+(k*20|0)+16>>2]=0;a[Da+(k*20|0)+1>>0]=0}else k=Di(S,87,s,j,r)|0;j=c[S>>2]|0;O:do if(a[j+81>>0]|0){if(l|(c[j+480>>2]|0)!=0)break;Da=(c[n>>2]|0)+-1|0;c[n>>2]=Da;if(Da|0)break;j=c[n+12>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,n);break O}l=n;if((c[j+304>>2]|0)>>>0>l>>>0)break;if((c[j+308>>2]|0)>>>0<=l>>>0)break;Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n;break O}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else{Ca=c[S+104>>2]|0;Da=(c[M>>2]|0)+-1|0;a[Ca+(Da*20|0)+1>>0]=-9;c[Ca+(Da*20|0)+16>>2]=n}while(0);l=k+2|0;j=k+4|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Da=c[S+104>>2]|0;a[Da+(k*20|0)>>0]=16;b[Da+(k*20|0)+2>>1]=0;c[Da+(k*20|0)+4>>2]=l;c[Da+(k*20|0)+8>>2]=j;c[Da+(k*20|0)+12>>2]=l;c[Da+(k*20|0)+16>>2]=0;a[Da+(k*20|0)+1>>0]=0}else Di(S,16,l,j,l)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=12;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=o;c[Da+(j*20|0)+8>>2]=0;c[Da+(j*20|0)+12>>2]=0;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else j=Di(S,12,o,0,0)|0;m=c[m>>2]|0;k=r+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;v=c[S+104>>2]|0;a[v+(l*20|0)>>0]=78;b[v+(l*20|0)+2>>1]=0;c[v+(l*20|0)+4>>2]=s;c[v+(l*20|0)+8>>2]=m;c[v+(l*20|0)+12>>2]=k;c[v+(l*20|0)+16>>2]=0;a[v+(l*20|0)+1>>0]=0;v=j;A=o;break}else{Di(S,78,s,m,k)|0;v=j;A=o;break}}else{v=0;A=0}while(0);j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=121;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=O;c[Da+(j*20|0)+8>>2]=u;c[Da+(j*20|0)+12>>2]=0;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,121,O,u,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=122;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=O;c[Da+(j*20|0)+8>>2]=t;c[Da+(j*20|0)+12>>2]=u;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,122,O,t,u)|0;j=c[V+80>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;t=c[S+104>>2]|0;a[t+(k*20|0)>>0]=52;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=j;c[t+(k*20|0)+8>>2]=0;c[t+(k*20|0)+12>>2]=u;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=k}else t=Di(S,52,j,0,u)|0;j=c[Oa>>2]|0;P:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);Q:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=1136;else{j=0;break P}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];Da=l+284|0;c[Da>>2]=(c[Da>>2]|0)+1;break Q}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];Da=l+284|0;c[Da>>2]=(c[Da>>2]|0)+1;break Q}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=1136}while(0);if((Fa|0)==1136)j=_d(l,224,0)|0;if(!j){j=0;break}T=j+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[Oa>>2]=j;Di(j,61,0,1,0)|0}while(0);q=j+108|0;r=j+112|0;s=j+104|0;u=V+84|0;o=V;p=0;do{n=c[o+40>>2]|0;k=c[o+48>>2]|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=73;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0}else Di(j,73,0,k,0)|0;k=c[(c[o+68>>2]|0)+20>>2]|0;if(!k)k=0;else k=c[k>>2]|0;p=(p|0)>(k|0)?p:k;do if(!(c[u>>2]|0)){Da=c[n+32>>2]|0;do if((Da|0)==43457|(Da|0)==43467){k=o+60|0;l=c[k>>2]|0;m=c[q>>2]|0;if((c[r>>2]|0)>(m|0)){c[q>>2]=m+1;Da=c[s>>2]|0;a[Da+(m*20|0)>>0]=70;b[Da+(m*20|0)+2>>1]=0;c[Da+(m*20|0)+4>>2]=0;c[Da+(m*20|0)+8>>2]=l;c[Da+(m*20|0)+12>>2]=0;c[Da+(m*20|0)+16>>2]=0;a[Da+(m*20|0)+1>>0]=0}else Di(j,70,0,l,0)|0;k=(c[k>>2]|0)+1|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=70;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}while(0);if(!(c[n+4>>2]&4096))break;k=c[o+56>>2]|0;if(!k)break;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=-118;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=k;c[Da+(l*20|0)+8>>2]=0;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0}else Di(j,138,k,0,0)|0;k=(c[o+60>>2]|0)+1|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=70;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}while(0);o=c[o+32>>2]|0}while((o|0)!=0);n=c[w>>2]|0;c[w>>2]=n+p;c[Ea+20>>2]=n+1;n=(G|0)!=0;if(n){j=c[V+24>>2]|0;do if(j){if((a[j>>0]|0)!=-88){m=Jj(f,j,G)|0;Fa=1172;break}m=c[Oa>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[m+104>>2]|0;a[Da+(l*20|0)>>0]=78;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=j;c[Da+(l*20|0)+8>>2]=G;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,G,0)|0;break}}else{m=Jj(f,0,G)|0;Fa=1172}while(0);do if((Fa|0)==1172){if((m|0)==(G|0))break;j=c[Oa>>2]|0;if(!j)break;k=j+108|0;l=c[k>>2]|0;if((c[j+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[j+104>>2]|0;a[Da+(l*20|0)>>0]=79;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=m;c[Da+(l*20|0)+8>>2]=G;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,79,m,G,0)|0;break}}while(0);pm(f,G,(a[C>>0]|0)==86?3:0)}o=(D|0)!=0;if(o){j=c[V+28>>2]|0;do if(j){if((a[j>>0]|0)!=-88){m=Jj(f,j,D)|0;Fa=1186;break}m=c[Oa>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[m+104>>2]|0;a[Da+(l*20|0)>>0]=78;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=j;c[Da+(l*20|0)+8>>2]=D;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,D,0)|0;break}}else{m=Jj(f,0,D)|0;Fa=1186}while(0);do if((Fa|0)==1186){if((m|0)==(D|0))break;j=c[Oa>>2]|0;if(!j)break;k=j+108|0;l=c[k>>2]|0;if((c[j+112>>2]|0)>(l|0)){c[k>>2]=l+1;Fa=c[j+104>>2]|0;a[Fa+(l*20|0)>>0]=79;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=m;c[Fa+(l*20|0)+8>>2]=D;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(j,79,m,D,0)|0;break}}while(0);pm(f,D,(a[C>>0]|0)==86?4:1)}j=a[P>>0]|0;if(n&j<<24>>24==(a[F>>0]|0)){j=j<<24>>24==83?57:55;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=j;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=G;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=D;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else k=Di(S,j,G,0,D)|0;qm(c[Ea>>2]|0,c[z>>2]|0,0);j=c[R>>2]|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=36;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=1;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;rm(Ea);j=c[R>>2]|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=-118;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,138,j,0,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=E;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,E,0)|0;l=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else j=59308;c[j+8>>2]=l;j=a[P>>0]|0}do if(j<<24>>24==83){if(!(o&(a[C>>0]|0)!=86))break;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=101;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=G;c[Fa+(j*20|0)+8>>2]=D;c[Fa+(j*20|0)+12>>2]=G;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0;break}else{Di(S,101,G,D,G)|0;break}}while(0);do if((a[P>>0]|0)!=87){j=c[B>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,36,j,1,0)|0;break}}while(0);j=c[R>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;j=c[H>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;m=(y|0)!=0;do if((J|0)!=0&m){j=(c[J>>2]|0)+-1|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=78;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=x;c[Fa+(k*20|0)+8>>2]=y;c[Fa+(k*20|0)+12>>2]=j;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,78,x,y,j)|0;j=c[Ea+32>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,78,y,j,k)|0;j=c[Ea+40>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,78,y,j,k)|0;j=c[Ea+48>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(S,78,y,j,k)|0;break}}while(0);j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=E;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,E,0)|0;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((t|0)<0?k+-1|0:t)*20|0)|0;else j=59308;c[j+8>>2]=k;if(m)sm(f,J,x,y,E);j=a[P>>0]|0;R:do if(j<<24>>24==83){tm(Ea,3,0,0)|0;if((a[F>>0]|0)==87)break;if((a[C>>0]|0)!=86){tm(Ea,1,D,0)|0;tm(Ea,2,G,0)|0;break}l=c[_>>2]|0;j=l+-1|0;c[_>>2]=j;k=c[M>>2]|0;um(Ea,57,c[R>>2]|0,D,c[H>>2]|0,j);tm(Ea,2,G,0)|0;tm(Ea,1,0,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;k=c[S+12>>2]|0;j=0-l|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,S,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];break}}else{if((a[F>>0]|0)==85){do if(j<<24>>24==85){Fa=(a[C>>0]|0)==86;tm(Ea,3,D,0)|0;if(!Fa)break;tm(Ea,2,G,0)|0;tm(Ea,1,0,0)|0;break R}else tm(Ea,3,D,0)|0;while(0);tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;break}tm(Ea,3,0,0)|0;if((a[F>>0]|0)==87)break;if((a[C>>0]|0)!=86){do if(o){j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=47;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=D;c[Fa+(j*20|0)+8>>2]=0;c[Fa+(j*20|0)+12>>2]=1;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0;break}else{j=Di(S,47,D,0,1)|0;break}}else j=0;while(0);tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;if(!o)break;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((j|0)<0?k+-1|0:j)*20|0)|0;else j=59308;c[j+8>>2]=k;break}k=c[M>>2]|0;if(o){l=(c[_>>2]|0)+-1|0;c[_>>2]=l;um(Ea,57,c[R>>2]|0,D,c[H>>2]|0,l)}else l=0;tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;if(!o)break;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;k=c[S+12>>2]|0;j=~l;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,S,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];break}}while(0);k=c[S+12>>2]|0;j=0-K|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,S,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];sl(Q);j=c[M>>2]|0;if(!(c[I>>2]|0))p=0;else{if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=70;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=A;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else j=Di(S,70,0,A,0)|0;l=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))k=(c[S+104>>2]|0)+(((v|0)<0?l+-1|0:v)*20|0)|0;else k=59308;c[k+8>>2]=l;p=j;j=l}if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;o=c[S+104>>2]|0;a[o+(j*20|0)>>0]=36;b[o+(j*20|0)+2>>1]=0;c[o+(j*20|0)+4>>2]=O;c[o+(j*20|0)+8>>2]=0;c[o+(j*20|0)+12>>2]=0;c[o+(j*20|0)+16>>2]=0;a[o+(j*20|0)+1>>0]=0;o=j}else o=Di(S,36,O,0,0)|0;j=a[P>>0]|0;do if((a[F>>0]|0)==85){do if(j<<24>>24==85){Fa=(a[C>>0]|0)==86;tm(Ea,3,D,0)|0;if(!Fa)break;tm(Ea,2,G,0)|0}else tm(Ea,3,D,0)|0;while(0);tm(Ea,1,0,0)|0;k=a[(c[S>>2]|0)+81>>0]|0;l=c[M>>2]|0}else{tm(Ea,3,0,0)|0;if(j<<24>>24!=83){k=c[M>>2]|0;m=tm(Ea,1,0,1)|0;tm(Ea,2,G,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;l=c[M>>2]|0;k=a[(c[S>>2]|0)+81>>0]|0;if(!(k<<24>>24))j=(c[S+104>>2]|0)+(((m|0)<0?l+-1|0:m)*20|0)|0;else j=59308;c[j+8>>2]=l;break}do if((a[C>>0]|0)!=86){j=c[M>>2]|0;if((a[F>>0]|0)==87){n=tm(Ea,1,G,1)|0;l=tm(Ea,2,0,1)|0;break}else{n=tm(Ea,1,D,1)|0;l=tm(Ea,2,G,1)|0;break}}else{j=c[M>>2]|0;l=tm(Ea,2,G,1)|0;n=tm(Ea,1,0,1)|0}while(0);k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=11;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,11,0,j,0)|0;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else j=59308;c[j+8>>2]=k;m=tm(Ea,1,0,1)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;l=c[M>>2]|0;k=a[(c[S>>2]|0)+81>>0]|0;if(!(k<<24>>24)){j=l+-1|0;Fa=c[S+104>>2]|0;c[Fa+(((n|0)<0?j:n)*20|0)+8>>2]=l;j=Fa+(((m|0)<0?j:m)*20|0)|0}else{c[14829]=l;j=59308}c[j+8>>2]=l}while(0);if(!(k<<24>>24))j=(c[S+104>>2]|0)+(((o|0)<0?l+-1|0:o)*20|0)|0;else j=59308;c[j+8>>2]=l;j=c[R>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=-118;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,138,j,0,0)|0;do if(c[I>>2]|0){j=c[u>>2]|0;do if(j|0){k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=1;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,70,1,j,0)|0;j=c[V+88>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,70,0,j,0)|0;break}}while(0);k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((p|0)<0?k+-1|0:p)*20|0)|0;else j=59308;c[j+4>>2]=k;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=66;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=A;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,66,A,0,0)|0;break}}while(0);n=Ja+108|0;j=c[n>>2]|0;m=Ja+112|0;if((c[m>>2]|0)>(j|0)){c[n>>2]=j+1;Fa=c[Ja+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=X;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(Ja,11,0,X,0)|0;l=Ja+12|0;j=c[l>>2]|0;k=0-Z|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,Ja,k);else c[(c[j+64>>2]|0)+(k<<2)>>2]=c[n>>2];c[La+28>>2]=0;rl(f,h,-1,La,Ga,i,W,X);j=c[l>>2]|0;k=1-Z|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,Ja,k);else c[(c[j+64>>2]|0)+(k<<2)>>2]=c[n>>2];j=c[n>>2]|0;if((c[m>>2]|0)>(j|0)){c[n>>2]=j+1;Fa=c[Ja+104>>2]|0;a[Fa+(j*20|0)>>0]=66;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=Y;c[Fa+(j*20|0)+8>>2]=0;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(Ja,66,Y,0,0)|0;k=c[l>>2]|0;j=2-Z|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Ja,j);j=0;Fa=1796;break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[n>>2];j=0;Fa=1796;break}}else{z=(U|0)!=0;do if(z){k=c[h>>2]|0;j=c[k>>2]|0;if((j|0)>0){k=k+4|0;while(1){b[k+16+2>>1]=0;if((j|0)>1){k=k+20|0;j=j+-1|0}else break}}j=c[U>>2]|0;if((j|0)>0){k=U+4|0;while(1){b[k+16+2>>1]=0;if((j|0)>1){k=k+20|0;j=j+-1|0}else break}}j=h+6|0;if((b[j>>1]|0)<=66)break;b[j>>1]=66}else b[h+6>>1]=0;while(0);k=c[La>>2]|0;j=(k|0)==0;S:do if(l&j)R=1;else{if(l|j){R=0;break}j=c[U>>2]|0;if((j|0)!=(c[k>>2]|0)){R=0;break}if((j|0)<=0){R=1;break}j=0;while(1){if((a[U+4+(j*20|0)+12>>0]|0)!=(a[k+4+(j*20|0)+12>>0]|0)){R=0;break S}if(bk(0,c[U+4+(j*20|0)>>2]|0,c[k+4+(j*20|0)>>2]|0,-1)|0){R=0;break S}j=j+1|0;if((j|0)>=(c[U>>2]|0)){R=1;break}}}while(0);W=c[_>>2]|0;V=W+-1|0;c[_>>2]=V;S=Ea+12|0;c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;c[Ea>>2]=f;c[Ea+4>>2]=ta;c[Ea+8>>2]=Ma;S=f+44|0;c[Ma+16>>2]=(c[S>>2]|0)+1;if(z)j=c[U>>2]|0;else j=0;A=Ma+12|0;c[A>>2]=j;c[Ma+24>>2]=U;do if($|0){j=c[$>>2]|0;if((j|0)<=0)break;n=Da+4|0;o=Da+8|0;p=Da+12|0;q=Da+16|0;r=Da+24|0;l=$+4|0;m=0;while(1){k=c[l>>2]|0;c[n>>2]=133;c[o>>2]=134;c[p>>2]=67;c[q>>2]=0;c[r>>2]=Ea;c[Da>>2]=0;if(k){_j(Da,k)|0;j=c[$>>2]|0}m=m+1|0;if((m|0)>=(j|0))break;else l=l+20|0}}while(0);n=c[La>>2]|0;do if(n|0){j=c[n>>2]|0;if((j|0)<=0)break;o=Da+4|0;p=Da+8|0;q=Da+12|0;r=Da+16|0;s=Da+24|0;l=n+4|0;m=0;while(1){k=c[l>>2]|0;c[o>>2]=133;c[p>>2]=134;c[q>>2]=67;c[r>>2]=0;c[s>>2]=Ea;c[Da>>2]=0;if(k){_j(Da,k)|0;j=c[n>>2]|0}m=m+1|0;if((m|0)>=(j|0))break;else l=l+20|0}}while(0);do if(!X)C=D;else{if(!z){c[Da+4>>2]=133;c[Da+8>>2]=134;c[Da+12>>2]=67;c[Da+16>>2]=0;c[Da+24>>2]=Ea;c[Da>>2]=0;_j(Da,X)|0;C=D;break}j=Da+8|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[Da>>2]=f;c[Da+4>>2]=135;c[Da+24>>2]=h;j=c[u>>2]|0;if(j|0)_j(Da,j)|0;C=c[sa>>2]|0;c[Da+4>>2]=133;c[Da+8>>2]=134;c[Da+12>>2]=67;c[Da+16>>2]=0;c[Da+24>>2]=Ea;c[Da>>2]=0;_j(Da,X)|0}while(0);I=Ma+32|0;y=Ma+36|0;c[y>>2]=c[I>>2];do if(!(c[t>>2]|0)){if(c[u>>2]|0){x=0;j=0;break}if((c[Ma+44>>2]|0)!=1){x=0;j=0;break}j=c[c[Ma+40>>2]>>2]|0;p=c[j+20>>2]|0;do if(!p){j=0;k=0}else{if((c[p>>2]|0)!=1){j=0;k=0;break}k=c[j+8>>2]|0;o=a[k>>0]|0;j=(d[208+(o&255)>>0]|0)+-109|0;o=o<<24>>24==0|(j|0)!=0;if(o)l=j;else{m=44311;n=k;do{n=n+1|0;m=m+1|0;wa=a[n>>0]|0;l=(d[208+(wa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(l|0)!=0))}if(l){if(!o){l=44315;do{k=k+1|0;l=l+1|0;wa=a[k>>0]|0;j=(d[208+(wa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(j|0)!=0))}if(!j){l=1;k=2}else{j=0;k=0;break}}else{l=0;k=1}j=gk(Na,p,0)|0;if(!j){j=0;break}a[j+16>>0]=l}while(0);x=k&255}else{x=0;j=0}while(0);T=Ma+44|0;n=c[T>>2]|0;if((n|0)>0){q=Ea+24|0;r=Ma+40|0;s=Da+4|0;t=Da+8|0;u=Da+12|0;v=Da+16|0;w=Da+24|0;p=0;k=b[q>>1]|0;do{k=k|8;b[q>>1]=k;o=c[(c[(c[r>>2]|0)+(p<<4)>>2]|0)+20>>2]|0;do if(o){l=c[o>>2]|0;if((l|0)<=0)break;m=o+4|0;n=0;k=l;while(1){l=c[m>>2]|0;c[s>>2]=133;c[t>>2]=134;c[u>>2]=67;c[v>>2]=0;c[w>>2]=Ea;c[Da>>2]=0;if(l){_j(Da,l)|0;k=c[o>>2]|0}n=n+1|0;if((n|0)>=(k|0))break;else m=m+20|0}k=b[q>>1]|0;n=c[T>>2]|0}while(0);k=k&-9;b[q>>1]=k;p=p+1|0}while((p|0)<(n|0))}o=c[S>>2]|0;c[Ma+20>>2]=o;T:do if(!(a[xa>>0]|0)){do if(z){y=f+40|0;p=c[y>>2]|0;c[y>>2]=p+1;O=Ma+4|0;c[O>>2]=p;p=c[f>>2]|0;r=c[U>>2]|0;n=(c[I>>2]|0)+1+r|0;o=n*5|0;m=o+20|0;q=p+272|0;U:do if(c[q>>2]|0)if(!(a[p+81>>0]|0))Fa=1431;else{E=0;q=1;z=0}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<m>>>0:0))){k=p+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Fa=p+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1432;break U}k=p+296|0;l=c[k>>2]|0;if(!l){k=p+292|0;break}else{c[k>>2]=c[l>>2];Fa=p+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1432;break U}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=1431}while(0);if((Fa|0)==1431){l=_d(p,m,0)|0;Fa=1432}do if((Fa|0)==1432){do if(!l){k=p+81|0;if(a[k>>0]|0){m=0;q=1;break}if(a[p+82>>0]|0){m=0;q=1;break}a[k>>0]=1;if((c[p+180>>2]|0)>0)c[p+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[p+236>>2]|0;if(!k){m=0;q=1;break}c[k+12>>2]=7;m=0;q=1}else{c[l+16>>2]=l+20+(n<<2);b[l+6>>1]=r;b[l+8>>1]=n;a[l+4>>0]=a[p+78>>0]|0;c[l+12>>2]=p;c[l>>2]=1;gw(l+24|0,0,o+-4|0)|0;m=l;q=0}while(0);if(!((r|0)>0&(l|0)!=0)){E=m;z=l;break}p=l+16|0;n=U+4|0;o=0;while(1){k=Yi(f,c[n>>2]|0)|0;if(!k)k=c[(c[f>>2]|0)+8>>2]|0;c[l+20+(o<<2)>>2]=k;a[(c[p>>2]|0)+o>>0]=a[n+12>>0]|0;o=o+1|0;if((o|0)==(r|0)){E=m;z=l;break}else n=n+20|0}}while(0);m=c[O>>2]|0;k=c[A>>2]|0;P=Ja+108|0;l=c[P>>2]|0;Q=Ja+112|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;H=c[Ja+104>>2]|0;a[H+(l*20|0)>>0]=114;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=m;c[H+(l*20|0)+8>>2]=k;c[H+(l*20|0)+12>>2]=0;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0;H=l}else H=Di(Ja,114,m,k,0)|0;k=c[Ja>>2]|0;V:do if(a[k+81>>0]|0){if(q|(c[k+480>>2]|0)!=0)break;Ea=(c[E>>2]|0)+-1|0;c[E>>2]=Ea;if(Ea|0){q=0;break}k=c[E+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,E);q=0;break V}l=E;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;q=k+300|0;c[E>>2]=c[q>>2];c[q>>2]=E;q=0;break V}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](E);q=0;break}else{q=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);q=0;break}}else{if((H|0)<0)k=(c[P>>2]|0)+-1|0;else k=H;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,E,-9);break}if(q){q=1;break}c[l+(k*20|0)+16>>2]=E;a[m>>0]=-9;q=0}while(0);A=c[S>>2]|0;M=A+1|0;G=A+2|0;J=A+3|0;K=c[_>>2]|0;F=K+-1|0;N=A+4|0;D=K+-2|0;c[_>>2]=D;A=A+5|0;k=c[U>>2]|0;Ea=k+N|0;B=Ea+1|0;c[S>>2]=Ea+k;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=70;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=0;c[Ea+(k*20|0)+8>>2]=G;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,70,0,G,0)|0;k=(c[U>>2]|0)+N|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=73;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=0;c[Ea+(l*20|0)+8>>2]=A;c[Ea+(l*20|0)+12>>2]=k;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,73,0,A,k)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=12;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=N;c[Ea+(k*20|0)+8>>2]=D;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,12,N,D,0)|0;C=ql(f,ta,C,U,0,R?576:64,0)|0;if(!C)break T;if((c[U>>2]|0)==(a[C+47>>0]|0)){n=0;o=0;m=0}else{if(!(a[Ga>>0]|0))k=43118;else k=(c[za>>2]&1|0)==0?43109:43118;c[Aa>>2]=k;nk(f,0,44319,Aa);u=c[U>>2]|0;p=c[I>>2]|0;if((p|0)>0){n=c[Ma+28>>2]|0;l=u;k=u;m=0;while(1){o=(c[n+(m*24|0)+12>>2]|0)>=(l|0)&1;k=k+o|0;m=m+1|0;if((m|0)>=(p|0)){x=k;break}else l=l+o|0}}else x=u;w=(x|0)==1;do if(w){k=f+19|0;l=a[k>>0]|0;if(!(l<<24>>24)){v=(c[S>>2]|0)+1|0;c[S>>2]=v;break}else{v=l+-1<<24>>24;a[k>>0]=v;v=c[f+148+((v&255)<<2)>>2]|0;break}}else{k=f+32|0;l=c[k>>2]|0;m=f+28|0;n=c[m>>2]|0;if((n|0)<(x|0)){v=c[S>>2]|0;c[S>>2]=v+x;v=v+1|0;break}else{c[k>>2]=l+x;c[m>>2]=n-x;v=l;break}}while(0);t=c[Oa>>2]|0;if((u|0)>0){m=t+108|0;n=t+112|0;o=t+104|0;k=U+4|0;l=0;while(1){p=l+v|0;r=Jj(f,c[k>>2]|0,p)|0;do if((r|0)!=(p|0)){s=c[m>>2]|0;if((c[n>>2]|0)>(s|0)){c[m>>2]=s+1;Ea=c[o>>2]|0;a[Ea+(s*20|0)>>0]=79;b[Ea+(s*20|0)+2>>1]=0;c[Ea+(s*20|0)+4>>2]=r;c[Ea+(s*20|0)+8>>2]=p;c[Ea+(s*20|0)+12>>2]=0;c[Ea+(s*20|0)+16>>2]=0;a[Ea+(s*20|0)+1>>0]=0;break}else{Di(t,79,r,p,0)|0;break}}while(0);l=l+1|0;if((l|0)==(u|0))break;else k=k+20|0}l=c[I>>2]|0}else l=p;if((l|0)>0){o=Ma+28|0;k=u;n=0;do{m=c[o>>2]|0;if((c[m+(n*24|0)+12>>2]|0)>=(k|0)){Vj(Ja,c[m+(n*24|0)>>2]|0,c[m+(n*24|0)+4>>2]|0,c[m+(n*24|0)+8>>2]|0,k+v|0);k=k+1|0;l=c[I>>2]|0}n=n+1|0}while((n|0)<(l|0))}n=f+19|0;k=a[n>>0]|0;if(!(k<<24>>24)){m=(c[S>>2]|0)+1|0;c[S>>2]=m}else{m=k+-1<<24>>24;a[n>>0]=m;m=c[f+148+((m&255)<<2)>>2]|0}k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=92;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=x;c[Ea+(k*20|0)+12>>2]=m;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,92,v,x,m)|0;k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=-125;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=k;c[Ea+(l*20|0)+8>>2]=m;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,131,k,m,0)|0;do if(m|0){k=a[n>>0]|0;if((k&255)>=8)break;a[n>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=m}while(0);do if(w){if(!v)break;k=a[n>>0]|0;if((k&255)>=8)break;a[n>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=v}else{k=f+28|0;if((c[k>>2]|0)>=(x|0))break;c[k>>2]=x;c[f+32>>2]=v}while(0);sl(C);o=c[y>>2]|0;c[y>>2]=o+1;c[Ma+8>>2]=o;k=a[n>>0]|0;if(!(k<<24>>24)){m=(c[S>>2]|0)+1|0;c[S>>2]=m}else{m=k+-1<<24>>24;a[n>>0]=m;m=c[f+148+((m&255)<<2)>>2]|0}k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=116;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=o;c[Ea+(k*20|0)+8>>2]=m;c[Ea+(k*20|0)+12>>2]=x;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,116,o,m,x)|0;k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=34;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=k;c[Ea+(l*20|0)+8>>2]=V;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,34,k,V,0)|0;a[Ma+1>>0]=1;n=1}W:do if(R){if(b[ua>>1]&4){Fa=1537;break}do if(!n){if(a[C+48>>0]|0)break;u=c[P>>2]|0;t=0;break W}while(0);c[La>>2]=0;k=c[La+20>>2]|0;l=c[Ja>>2]|0;if(a[l+81>>0]|0){Fa=1537;break}Fa=c[Ja+104>>2]|0;Da=Fa+(k*20|0)+1|0;Ea=Fa+(k*20|0)+16|0;kg(l,a[Da>>0]|0,c[Ea>>2]|0);a[Da>>0]=0;c[Ea>>2]=0;a[Fa+(k*20|0)>>0]=-86;Fa=1537}else Fa=1537;while(0);do if((Fa|0)==1537){l=c[P>>2]|0;if(!n){u=l;t=0;break}k=c[O>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;u=c[Ja+104>>2]|0;a[u+(l*20|0)>>0]=126;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=m;c[u+(l*20|0)+12>>2]=o;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;t=1;break}else{Di(Ja,126,k,m,o)|0;u=l;t=1;break}}while(0);l=c[U>>2]|0;if((l|0)>0){s=Ja+104|0;r=0;do{X:do if(t){k=r+B|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[s>>2]|0;a[Fa+(l*20|0)>>0]=90;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=o;c[Fa+(l*20|0)+8>>2]=r;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,90,o,r,k)|0;break}}else{a[Ma>>0]=1;k=c[U+4+(r*20|0)>>2]|0;p=r+B|0;do if(k){if((a[k>>0]|0)!=-88){n=Jj(f,k,p)|0;break}n=c[Oa>>2]|0;k=c[k+28>>2]|0;l=n+108|0;m=c[l>>2]|0;if((c[n+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[n+104>>2]|0;a[Fa+(m*20|0)>>0]=78;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=k;c[Fa+(m*20|0)+8>>2]=p;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break X}else{Di(n,78,k,p,0)|0;break X}}else n=Jj(f,0,p)|0;while(0);if((n|0)==(p|0))break;k=c[Oa>>2]|0;if(!k)break;l=k+108|0;m=c[l>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[k+104>>2]|0;a[Fa+(m*20|0)>>0]=79;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=n;c[Fa+(m*20|0)+8>>2]=p;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break}else{Di(k,79,n,p,0)|0;break}}while(0);r=r+1|0;l=c[U>>2]|0}while((r|0)<(l|0))}if(z|0)c[z>>2]=(c[z>>2]|0)+1;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=87;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=A;c[Fa+(k*20|0)+8>>2]=B;c[Fa+(k*20|0)+12>>2]=l;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else k=Di(Ja,87,A,B,l)|0;l=c[Ja>>2]|0;Y:do if(a[l+81>>0]|0){if(q|(c[l+480>>2]|0)!=0)break;Fa=(c[E>>2]|0)+-1|0;c[E>>2]=Fa;if(Fa|0)break;k=c[E+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,E);break Y}l=E;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Fa=k+300|0;c[E>>2]=c[Fa>>2];c[Fa>>2]=E;break Y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{Fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}else{if((k|0)<0)k=(c[P>>2]|0)+-1|0;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,E,-9);break}if(q)break;c[l+(k*20|0)+16>>2]=E;a[m>>0]=-9}while(0);o=c[P>>2]|0;k=o+1|0;if((c[Q>>2]|0)>(o|0)){c[P>>2]=k;Fa=c[Ja+104>>2]|0;a[Fa+(o*20|0)>>0]=16;b[Fa+(o*20|0)+2>>1]=0;c[Fa+(o*20|0)+4>>2]=k;c[Fa+(o*20|0)+8>>2]=0;c[Fa+(o*20|0)+12>>2]=k;c[Fa+(o*20|0)+16>>2]=0;a[Fa+(o*20|0)+1>>0]=0}else Di(Ja,16,k,0,k)|0;l=c[U>>2]|0;k=c[Oa>>2]|0;m=k+108|0;n=c[m>>2]|0;if((c[k+112>>2]|0)>(n|0)){c[m>>2]=n+1;Fa=c[k+104>>2]|0;a[Fa+(n*20|0)>>0]=77;b[Fa+(n*20|0)+2>>1]=0;c[Fa+(n*20|0)+4>>2]=B;c[Fa+(n*20|0)+8>>2]=A;c[Fa+(n*20|0)+12>>2]=l;c[Fa+(n*20|0)+16>>2]=0;a[Fa+(n*20|0)+1>>0]=0}else Di(k,77,B,A,l)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=F;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,J,F,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=47;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=G;c[Fa+(k*20|0)+8>>2]=V;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,47,G,V,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=N;c[Fa+(k*20|0)+8>>2]=D;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,N,D,0)|0;l=c[P>>2]|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))k=(c[Ja+104>>2]|0)+(((o|0)<0?l+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=l;tl(f,M,Ma);k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=1;c[Fa+(k*20|0)+8>>2]=M;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,70,1,M,0)|0;do if(t){k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=3;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=k;c[Fa+(l*20|0)+8>>2]=u;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,3,k,u,0)|0;break}}else{sl(C);k=c[Ja>>2]|0;if(a[k+81>>0]|0)break;Fa=c[Ja+104>>2]|0;Da=Fa+(H*20|0)+1|0;Ea=Fa+(H*20|0)+16|0;kg(k,a[Da>>0]|0,c[Ea>>2]|0);a[Da>>0]=0;c[Ea>>2]=0;a[Fa+(H*20|0)>>0]=-86}while(0);k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=F;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,J,F,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=11;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=V;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,11,0,V,0)|0;v=c[P>>2]|0;if((c[Q>>2]|0)>(v|0)){c[P>>2]=v+1;Fa=c[Ja+104>>2]|0;a[Fa+(v*20|0)>>0]=70;b[Fa+(v*20|0)+2>>1]=0;c[Fa+(v*20|0)+4>>2]=1;c[Fa+(v*20|0)+8>>2]=G;c[Fa+(v*20|0)+12>>2]=0;c[Fa+(v*20|0)+16>>2]=0;a[Fa+(v*20|0)+1>>0]=0}else Di(Ja,70,1,G,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=66;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;k=Ja+12|0;l=c[k>>2]|0;m=0-K|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,m);else c[(c[l+64>>2]|0)+(m<<2)>>2]=c[P>>2];u=c[P>>2]|0;l=u+2|0;if((c[Q>>2]|0)>(u|0)){c[P>>2]=u+1;Fa=c[Ja+104>>2]|0;a[Fa+(u*20|0)>>0]=47;b[Fa+(u*20|0)+2>>1]=0;c[Fa+(u*20|0)+4>>2]=M;c[Fa+(u*20|0)+8>>2]=l;c[Fa+(u*20|0)+12>>2]=0;c[Fa+(u*20|0)+16>>2]=0;a[Fa+(u*20|0)+1>>0]=0}else Di(Ja,47,M,l,0)|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=J;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;q=c[Oa>>2]|0;if((c[T>>2]|0)>0){r=q+108|0;s=q+112|0;t=q+104|0;o=c[Ma+40>>2]|0;p=0;while(1){l=c[(c[o>>2]|0)+20>>2]|0;n=c[o+8>>2]|0;if(!l)m=0;else m=c[l>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;Fa=c[t>>2]|0;a[Fa+(l*20|0)>>0]=-99;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=n;c[Fa+(l*20|0)+8>>2]=m;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(q,157,n,m,0)|0;l=c[o+4>>2]|0;m=c[q>>2]|0;Z:do if(a[m+81>>0]|0){if(!(c[l+4>>2]&16))break;do if(m|0){if(c[m+480>>2]|0){Xd(m,l);break Z}n=l;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;Fa=m+300|0;c[l>>2]=c[Fa>>2];c[Fa>>2]=l;break Z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else{Ea=c[t>>2]|0;Fa=(c[r>>2]|0)+-1|0;a[Ea+(Fa*20|0)+1>>0]=-8;c[Ea+(Fa*20|0)+16>>2]=l}while(0);p=p+1|0;if((p|0)>=(c[T>>2]|0))break;else o=o+16|0}}l=u+1|0;Tj(f,X,l,16);rl(f,h,-1,La,Ga,i,l,v);l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=J;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;m=c[k>>2]|0;l=1-K|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Ja,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[P>>2];ul(f,Ma);l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=70;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=0;c[Fa+(l*20|0)+8>>2]=M;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,70,0,M,0)|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=N;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,66,N,0,0)|0;break}}else{z=Ma+40|0;m=c[z>>2]|0;do if(!(c[sa>>2]|0)){l=c[h>>2]|0;if((c[l>>2]|0)!=1){Fa=1752;break}k=c[va>>2]|0;if((c[k>>2]|0)!=1){Fa=1752;break}if(c[k+28>>2]|0){Fa=1752;break}w=c[k+24>>2]|0;k=c[l+4>>2]|0;if(c[w+56>>2]|0){Fa=1752;break}if((n|0)==0|(a[k>>0]|0)!=-93){Fa=1752;break}if(!(c[(c[m+4>>2]|0)+4>>2]&256)){Fa=1752;break}if((w|0)==0?1:(c[k+4>>2]&2|0)!=0){Fa=1752;break}l=c[w+72>>2]|0;if(!l)u=-1e6;else{m=c[(c[f>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){u=k;break}else k=k+1|0}s=f+40|0;v=c[s>>2]|0;c[s>>2]=v+1;s=w+28|0;t=c[s>>2]|0;n=c[Ba>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<<u;_:do if(!(l&m)){c[k>>2]=l|m;if((u|0)!=1)break;r=c[n>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[n+199>>0]|0)break;l=Pe(c[r>>2]|0,0,r,Da,0,542)|0;if(l|0){cd(n,32157,ya);c[n+12>>2]=l;break}Ea=c[Da>>2]|0;c[(c[k>>2]|0)+20>>2]=Ea;k=c[r+92>>2]|0;n=c[Ea+4>>2]|0;c[n+4>>2]=c[Ea>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Ea=(c[14820]|0)+1|0;c[14820]=Ea;c[14821]=(Ea|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;Fa=1688;break}else{k=Wa[c[29352>>2]&127](l)|0;Fa=1688}while(0);do if((Fa|0)==1688){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Ea=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);Ea=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((Ea|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break _}while(0)}while(0);Hj(f,u,c[s>>2]|0,0,c[w>>2]|0);s=w+36|0;l=c[w+8>>2]|0;$:do if(!(c[s>>2]&32)){k=0;Fa=1706}else{if(!l){l=t;n=0;r=0;q=1;break}k=l;while(1){Fa=k+55|0;if(((d[Fa>>0]|d[Fa+1>>0]<<8)&3)==2){Fa=1706;break $}k=c[k+20>>2]|0;if(!k){k=0;Fa=1706;break}}}while(0);do if((Fa|0)==1706){if(l){n=w+46|0;do{Ea=l+55|0;do if(!((d[Ea>>0]|d[Ea+1>>0]<<8)&4)){m=b[l+48>>1]|0;if(m<<16>>16>=(b[n>>1]|0))break;if(c[l+36>>2]|0)break;if(k|0?m<<16>>16>=(b[k+48>>1]|0):0)break;k=l}while(0);l=c[l+20>>2]|0}while((l|0)!=0)}if(!k){l=t;n=0;r=0;q=1;break}l=c[k+44>>2]|0;n=Ij(f,k)|0;r=k;q=0}while(0);o=Ja+108|0;k=c[o>>2]|0;p=Ja+112|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=108;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=l;c[Ea+(k*20|0)+12>>2]=u;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else k=Di(Ja,108,v,l,u)|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0)){Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)+1>>0]=-3;c[Ea+(k*20|0)+16>>2]=1}aa:do if(n|0){k=c[Ja>>2]|0;if(!(a[k+81>>0]|0)){k=(c[o>>2]|0)+-1|0;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9;break}else{Ei(Ja,l+(k*20|0)|0,n,-9);break}}if(c[k+480>>2]|0)break;Ea=(c[n>>2]|0)+-1|0;c[n>>2]=Ea;if(Ea|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break aa}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Ea=k+300|0;c[n>>2]=c[Ea>>2];c[Ea>>2]=n;break aa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Ea=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);k=c[(c[z>>2]|0)+8>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=93;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=v;c[Ea+(l*20|0)+8>>2]=k;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,93,v,k,0)|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=117;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=0;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,117,v,0,0)|0;if((a[f+199>>0]|0)!=2)break;do if(q){k=c[w>>2]|0;m=59952;l=59952}else{if(c[s>>2]&32){Ea=r+55|0;k=c[w>>2]|0;if(((d[Ea>>0]|d[Ea+1>>0]<<8)&3)==2){m=59952;l=59952;break}}else k=c[w>>2]|0;m=44411;l=c[r>>2]|0}while(0);c[Ca>>2]=k;c[Ca+4>>2]=m;c[Ca+8>>2]=l;nk(f,0,44393,Ca)}else Fa=1752;while(0);do if((Fa|0)==1752){do if(c[y>>2]|0){ba:do if((n|0)>0){k=0;do{if(c[(c[m+(k<<4)+4>>2]|0)+4>>2]&32|0)break ba;k=k+1|0}while((k|0)<(n|0))}else k=0;while(0);if((k|0)!=(n|0)){m=0;break}m=o+1|0;c[S>>2]=m;k=Ja+108|0;l=c[k>>2]|0;if((c[Ja+112>>2]|0)>(l|0)){c[k>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=70;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=0;c[Ea+(l*20|0)+8>>2]=m;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0;break}else{Di(Ja,70,0,m,0)|0;break}}else m=0;while(0);ul(f,Ma);n=ql(f,ta,C,j,0,x,0)|0;if(!n)break T;tl(f,m,Ma);do if(m|0){k=Ja+108|0;l=c[k>>2]|0;if((c[Ja+112>>2]|0)>(l|0)){c[k>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=70;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=1;c[Fa+(l*20|0)+8>>2]=m;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,70,1,m,0)|0;break}}while(0);do if((a[n+47>>0]|0)>0){k=c[n+36>>2]|0;l=Ja+108|0;m=c[l>>2]|0;if((c[Ja+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[Ja+104>>2]|0;a[Fa+(m*20|0)>>0]=11;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=0;c[Fa+(m*20|0)+8>>2]=k;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break}else{Di(Ja,11,0,k,0)|0;break}}while(0);sl(n);p=c[Oa>>2]|0;if((c[T>>2]|0)<=0)break;q=p+108|0;r=p+112|0;s=p+104|0;n=c[z>>2]|0;o=0;while(1){k=c[(c[n>>2]|0)+20>>2]|0;m=c[n+8>>2]|0;if(!k)l=0;else l=c[k>>2]|0;k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Fa=c[s>>2]|0;a[Fa+(k*20|0)>>0]=-99;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=m;c[Fa+(k*20|0)+8>>2]=l;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(p,157,m,l,0)|0;k=c[n+4>>2]|0;l=c[p>>2]|0;ca:do if(a[l+81>>0]|0){if(!(c[k+4>>2]&16))break;do if(l|0){if(c[l+480>>2]|0){Xd(l,k);break ca}m=k;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Fa=l+300|0;c[k>>2]=c[Fa>>2];c[Fa>>2]=k;break ca}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Fa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else{Ea=c[s>>2]|0;Fa=(c[q>>2]|0)+-1|0;a[Ea+(Fa*20|0)+1>>0]=-8;c[Ea+(Fa*20|0)+16>>2]=k}while(0);o=o+1|0;if((o|0)>=(c[T>>2]|0))break;else n=n+16|0}}while(0);c[La>>2]=0;Tj(f,X,V,16);rl(f,h,-1,0,0,i,V,V);k=Ja+12|0}while(0);l=c[k>>2]|0;k=0-W|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[Ja+108>>2];Fa=1796;break E}while(0);k=1}while(0);if((Fa|0)==1796){if((a[Ga+1>>0]|0)==3){c[Ha>>2]=43109;nk(f,0,44319,Ha)}do if(c[La>>2]|0){r=La+4|0;c[Ia>>2]=(c[r>>2]|0)>0?43127:43150;nk(f,0,44319,Ia);p=c[$>>2]|0;I=c[Oa>>2]|0;H=c[La+24>>2]|0;G=c[_>>2]|0;t=G+-1|0;c[_>>2]=t;q=c[La>>2]|0;E=a[i>>0]|0;x=i+4|0;C=c[x>>2]|0;y=c[h>>2]|0;s=La+16|0;k=c[s>>2]|0;do if(k|0){l=c[La+12>>2]|0;o=I+108|0;m=c[o>>2]|0;n=I+112|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;Ia=c[I+104>>2]|0;a[Ia+(m*20|0)>>0]=12;b[Ia+(m*20|0)+2>>1]=0;c[Ia+(m*20|0)+4>>2]=l;c[Ia+(m*20|0)+8>>2]=k;c[Ia+(m*20|0)+12>>2]=0;c[Ia+(m*20|0)+16>>2]=0;a[Ia+(m*20|0)+1>>0]=0}else Di(I,12,l,k,0)|0;k=c[o>>2]|0;if((c[n>>2]|0)>(k|0)){c[o>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=11;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=0;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else Di(I,11,0,H,0)|0;k=c[I+12>>2]|0;l=~c[s>>2];if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,I,l);break}else{c[(c[k+64>>2]|0)+(l<<2)>>2]=c[o>>2];break}}while(0);F=c[La+8>>2]|0;da:do switch(E<<24>>24){case 9:case 10:case 13:{z=p;A=c[i+8>>2]|0;B=0;break}default:{l=f+19|0;k=a[l>>0]|0;if(!(k<<24>>24)){k=f+44|0;o=(c[k>>2]|0)+1|0;c[k>>2]=o;k=0}else{k=k+-1<<24>>24;a[l>>0]=k;o=c[f+148+((k&255)<<2)>>2]|0}if((E|2)<<24>>24==14)if(!(k<<24>>24)){z=f+44|0;A=(c[z>>2]|0)+1|0;c[z>>2]=A;z=0;B=o;break da}else{A=k+-1<<24>>24;a[l>>0]=A;z=0;A=c[f+148+((A&255)<<2)>>2]|0;B=o;break da}if((p|0)==1)if(!(k<<24>>24)){z=f+44|0;A=(c[z>>2]|0)+1|0;c[z>>2]=A;z=1;B=o;break da}else{A=k+-1<<24>>24;a[l>>0]=A;z=1;A=c[f+148+((A&255)<<2)>>2]|0;B=o;break da}else{k=f+32|0;n=c[k>>2]|0;l=f+28|0;m=c[l>>2]|0;if((m|0)<(p|0)){z=f+44|0;A=c[z>>2]|0;c[z>>2]=A+p;z=p;A=A+1|0;B=o;break da}else{c[k>>2]=n+p;c[l>>2]=m-p;z=p;A=n;B=o;break da}}}}while(0);q=(c[q>>2]|0)-(c[r>>2]|0)|0;D=La+32|0;do if(!(a[D>>0]&1)){n=I+108|0;k=c[n>>2]|0;o=I+112|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=35;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=F;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else k=Di(I,35,F,H,0)|0;l=c[h+16>>2]|0;if((l|0)<=0){l=1;v=F;break}m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;v=c[I+104>>2]|0;a[v+(m*20|0)>>0]=47;b[v+(m*20|0)+2>>1]=0;c[v+(m*20|0)+4>>2]=l;c[v+(m*20|0)+8>>2]=t;c[v+(m*20|0)+12>>2]=1;c[v+(m*20|0)+16>>2]=0;a[v+(m*20|0)+1>>0]=0;l=1;v=F;break}else{Di(I,47,l,t,1)|0;l=1;v=F;break}}else{o=f+44|0;p=(c[o>>2]|0)+1|0;c[o>>2]=p;o=f+40|0;v=c[o>>2]|0;c[o>>2]=v+1;o=I+108|0;do if(c[s>>2]|0){k=c[o>>2]|0;l=I+112|0;if((c[l>>2]|0)>(k|0)){c[o>>2]=k+1;T=c[I+104>>2]|0;a[T+(k*20|0)>>0]=17;T=T+(k*20|0)+1|0;U=T+19|0;do{a[T>>0]=0;T=T+1|0}while((T|0)<(U|0));m=k;n=l;break}else{m=Di(I,17,0,0,0)|0;n=l;break}}else{m=0;n=I+112|0}while(0);k=z+1+q|0;l=c[o>>2]|0;if((c[n>>2]|0)>(l|0)){c[o>>2]=l+1;Ia=c[I+104>>2]|0;a[Ia+(l*20|0)>>0]=116;b[Ia+(l*20|0)+2>>1]=0;c[Ia+(l*20|0)+4>>2]=v;c[Ia+(l*20|0)+8>>2]=p;c[Ia+(l*20|0)+12>>2]=k;c[Ia+(l*20|0)+16>>2]=0;a[Ia+(l*20|0)+1>>0]=0}else Di(I,116,v,p,k)|0;k=c[o>>2]|0;if(m|0){if(!(a[(c[I>>2]|0)+81>>0]|0))l=(c[I+104>>2]|0)+(((m|0)<0?k+-1|0:m)*20|0)|0;else l=59308;c[l+8>>2]=k}if((c[n>>2]|0)>(k|0)){c[o>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=34;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=F;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else k=Di(I,34,F,H,0)|0;l=c[h+16>>2]|0;do if((l|0)>0){m=c[o>>2]|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;h=c[I+104>>2]|0;a[h+(m*20|0)>>0]=47;b[h+(m*20|0)+2>>1]=0;c[h+(m*20|0)+4>>2]=l;c[h+(m*20|0)+8>>2]=t;c[h+(m*20|0)+12>>2]=1;c[h+(m*20|0)+16>>2]=0;a[h+(m*20|0)+1>>0]=0;break}else{Di(I,47,l,t,1)|0;break}}while(0);l=c[o>>2]|0;if((c[n>>2]|0)>(l|0)){c[o>>2]=l+1;h=c[I+104>>2]|0;a[h+(l*20|0)>>0]=126;b[h+(l*20|0)+2>>1]=0;c[h+(l*20|0)+4>>2]=F;c[h+(l*20|0)+8>>2]=p;c[h+(l*20|0)+12>>2]=v;c[h+(l*20|0)+16>>2]=0;a[h+(l*20|0)+1>>0]=0;l=0;break}else{Di(I,126,F,p,v)|0;l=0;break}}while(0);w=k+1|0;u=l+q|0;if((z|0)>0){k=0;l=u+-1|0;do{l=l+((b[y+4+(k*20|0)+16>>1]|0)==0&1)|0;k=k+1|0}while((k|0)!=(z|0));r=I+108|0;s=I+112|0;t=I+104|0;q=z;while(1){m=q;q=q+-1|0;k=b[y+4+(q*20|0)+16>>1]|0;n=k<<16>>16==0;k=n?l:(k&65535)+-1|0;o=q+A|0;p=c[r>>2]|0;if((c[s>>2]|0)>(p|0)){c[r>>2]=p+1;h=c[t>>2]|0;a[h+(p*20|0)>>0]=90;b[h+(p*20|0)+2>>1]=0;c[h+(p*20|0)+4>>2]=v;c[h+(p*20|0)+8>>2]=k;c[h+(p*20|0)+12>>2]=o;c[h+(p*20|0)+16>>2]=0;a[h+(p*20|0)+1>>0]=0}else Di(I,90,v,k,o)|0;if((m|0)<=1)break;else l=l+(n<<31>>31)|0}}ea:do switch(E<<24>>24){case 12:case 14:{l=I+108|0;k=c[l>>2]|0;m=I+112|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=90;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=v;c[i+(k*20|0)+8>>2]=u;c[i+(k*20|0)+12>>2]=A;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,90,v,u,A)|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=121;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=B;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,121,C,B,0)|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=122;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=A;c[i+(k*20|0)+12>>2]=B;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,122,C,A,B)|0;k=c[l>>2]|0;if((k|0)<=0)break ea;b[(c[I+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=8;break}case 11:{o=c[i+16>>2]|0;p=I+108|0;k=c[p>>2]|0;q=I+112|0;if((c[q>>2]|0)>(k|0)){c[p>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=92;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=A;c[i+(k*20|0)+8>>2]=z;c[i+(k*20|0)+12>>2]=B;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(I,92,A,z,B)|0;l=c[I>>2]|0;fa:do if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[p>>2]|0)+-1|0;l=c[I+104>>2]|0;m=l+(k*20|0)|0;do if((z|0)<=-1){n=l+(k*20|0)+1|0;if(a[n>>0]|0)break;if((z|0)==-3){c[l+(k*20|0)+16>>2]=o;a[n>>0]=-3;break fa}if(!o)break fa;c[l+(k*20|0)+16>>2]=o;a[n>>0]=z;if((z|0)!=-12)break fa;i=o+12|0;c[i>>2]=(c[i>>2]|0)+1;break fa}while(0);Ei(I,m,o,z)}else{if((z|0)==-12)break;kg(l,z,o)}while(0);k=c[p>>2]|0;if((c[q>>2]|0)>(k|0)){c[p>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=-124;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=B;c[i+(k*20|0)+12>>2]=A;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(I,132,C,B,A)|0;if(a[(c[I>>2]|0)+81>>0]|0)break ea;i=c[I+104>>2]|0;a[i+(k*20|0)+1>>0]=-3;c[i+(k*20|0)+16>>2]=z;break}case 10:break;case 9:{k=c[i+8>>2]|0;l=I+108|0;m=c[l>>2]|0;if((c[I+112>>2]|0)>(m|0)){c[l>>2]=m+1;i=c[I+104>>2]|0;a[i+(m*20|0)>>0]=81;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=k;c[i+(m*20|0)+8>>2]=z;c[i+(m*20|0)+12>>2]=0;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break ea}else{Di(I,81,k,z,0)|0;break ea}}default:{k=c[x>>2]|0;l=I+108|0;m=c[l>>2]|0;if((c[I+112>>2]|0)>(m|0)){c[l>>2]=m+1;i=c[I+104>>2]|0;a[i+(m*20|0)>>0]=14;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=k;c[i+(m*20|0)+8>>2]=0;c[i+(m*20|0)+12>>2]=0;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break ea}else{Di(I,14,k,0,0)|0;break ea}}}while(0);do if(B|0){if(E<<24>>24!=11){l=f+19|0;k=a[l>>0]|0;if(A){if((k&255)>=8)break;i=k+1<<24>>24;a[l>>0]=i;c[f+148+((k&255)<<2)>>2]=A;k=i}if((k&255)>=8)break;a[l>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=B;break}do if((z|0)==1){if(!A)break;k=f+19|0;l=a[k>>0]|0;if((l&255)>=8)break;a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=A}else{k=f+28|0;if((c[k>>2]|0)>=(z|0))break;c[k>>2]=z;c[f+32>>2]=A}while(0);k=f+19|0;l=a[k>>0]|0;if((l&255)>=8)break;a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=B}while(0);o=I+12|0;l=c[o>>2]|0;k=0-G|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0){mk(l,I,k);n=I+108|0}else{n=I+108|0;c[(c[l+64>>2]|0)+(k<<2)>>2]=c[n>>2]}k=c[n>>2]|0;m=I+112|0;l=(c[m>>2]|0)>(k|0);do if(!(a[D>>0]&1))if(l){c[n>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=5;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=F;c[i+(k*20|0)+8>>2]=w;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;break}else{Di(I,5,F,w,0)|0;break}else if(l){c[n>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=3;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=F;c[i+(k*20|0)+8>>2]=w;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;break}else{Di(I,3,F,w,0)|0;break}while(0);k=c[La+12>>2]|0;do if(k|0){l=c[n>>2]|0;if((c[m>>2]|0)>(l|0)){c[n>>2]=l+1;i=c[I+104>>2]|0;a[i+(l*20|0)>>0]=66;b[i+(l*20|0)+2>>1]=0;c[i+(l*20|0)+4>>2]=k;c[i+(l*20|0)+8>>2]=0;c[i+(l*20|0)+12>>2]=0;c[i+(l*20|0)+16>>2]=0;a[i+(l*20|0)+1>>0]=0;break}else{Di(I,66,k,0,0)|0;break}}while(0);l=c[o>>2]|0;k=~H;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0){mk(l,I,k);break}else{c[(c[l+64>>2]|0)+(k<<2)>>2]=c[n>>2];break}}while(0);l=c[Ja+12>>2]|0;k=0-aa|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[Ja+108>>2];k=(c[Ka>>2]|0)>0&1}if(!j){m=k;break c}ri(Na,j);m=k;break c}else w=j;while(0);y=c[f>>2]|0;c[Da>>2]=c[i>>2];c[Da+4>>2]=c[i+4>>2];c[Da+8>>2]=c[i+8>>2];c[Da+12>>2]=c[i+12>>2];c[Da+16>>2]=c[i+16>>2];c[Da+20>>2]=c[i+20>>2];j=(c[w+48>>2]|0)==0;ga:do if(j?(ka=w+60|0,(c[ka>>2]|0)==0):0){j=c[Oa>>2]|0;ha:do if(!j){if((c[f+116>>2]|0)==0?(b[y+76>>1]&8)==0:0)a[f+23>>0]=1;ia:do if(c[y+272>>2]|0)if(!(a[y+81>>0]|0))Fa=393;else{x=0;break ha}else{do if((e[y+276>>1]|0)>=224){j=y+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Na=y+284|0;c[Na>>2]=(c[Na>>2]|0)+1;break ia}j=y+296|0;k=c[j>>2]|0;if(!k){j=y+292|0;break}else{c[j>>2]=c[k>>2];Na=y+284|0;c[Na>>2]=(c[Na>>2]|0)+1;break ia}}else j=y+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=393}while(0);if((Fa|0)==393)k=_d(y,224,0)|0;if(!k)x=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=y;j=y+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;x=k}}else x=j;while(0);if((a[Da>>0]|0)==12){j=c[Da+4>>2]|0;k=c[c[h>>2]>>2]|0;l=x+108|0;m=c[l>>2]|0;if((c[x+112>>2]|0)>(m|0)){c[l>>2]=m+1;Na=c[x+104>>2]|0;a[Na+(m*20|0)>>0]=113;b[Na+(m*20|0)+2>>1]=0;c[Na+(m*20|0)+4>>2]=j;c[Na+(m*20|0)+8>>2]=k;c[Na+(m*20|0)+12>>2]=0;c[Na+(m*20|0)+16>>2]=0;a[Na+(m*20|0)+1>>0]=0}else Di(x,113,j,k,0)|0;a[Da>>0]=14}j=c[za>>2]|0;if(j&1024|0){n=(c[h+60>>2]|0)==0;l=n&1;j=h;k=1;while(1){m=c[j+52>>2]|0;if(!m)break;else{j=m;k=k+l|0}}c[ga>>2]=k;c[ga+4>>2]=(k|0)==1?59952:43321;nk(f,0,43298,ga);k=k&65535;if(!n){rl(f,j,-1,0,0,Da,1,1);k=0;j=0;Fa=640;break}while(1){rl(f,j,-1,0,0,Da,1,1);b[j+6>>1]=k;j=c[j+56>>2]|0;if(!j){k=0;j=0;Fa=640;break ga}}}do if(!(j&8192)){if(c[S>>2]|0){m=Bl(f,h,i)|0;break ga}if(!(c[w+52>>2]|0)){nk(f,1,43243,ea);nk(f,1,43258,fa)}p=h+4|0;switch(a[p>>0]|0){case -128:{o=h+12|0;k=w+12|0;c[k>>2]=c[o>>2];m=h+16|0;l=w+16|0;c[l>>2]=c[m>>2];Na=h+60|0;c[ka>>2]=c[Na>>2];j=kj(f,w,Da)|0;c[Na>>2]=0;if(j|0){k=0;Fa=640;break ga}c[ca>>2]=0;k=c[k>>2]|0;c[o>>2]=k;c[m>>2]=c[l>>2];do if(k){p=x+108|0;j=c[p>>2]|0;q=x+112|0;if((c[q>>2]|0)>(j|0)){c[p>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=20;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=k;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,20,k,0,0)|0;n=c[m>>2]|0;if(!n){u=j;break}k=c[o>>2]|0;l=n+1|0;m=c[p>>2]|0;if((c[q>>2]|0)>(m|0)){c[p>>2]=m+1;u=c[x+104>>2]|0;a[u+(m*20|0)>>0]=-104;b[u+(m*20|0)+2>>1]=0;c[u+(m*20|0)+4>>2]=k;c[u+(m*20|0)+8>>2]=l;c[u+(m*20|0)+12>>2]=n;c[u+(m*20|0)+16>>2]=0;a[u+(m*20|0)+1>>0]=0;u=j;break}else{Di(x,152,k,l,n)|0;u=j;break}}else u=0;while(0);nk(f,1,41509,ia);j=kj(f,h,Da)|0;n=c[ca>>2]|0;c[ca>>2]=w;t=h+6|0;k=b[t>>1]|0;l=b[w+6>>1]|0;m=k<<16>>16;o=l<<16>>16;do if(k<<16>>16<l<<16>>16){if((m+49|0)<(o|0)){k=l;break}if((m+31|0)<(o|0)){k=o+1&65535;break}else{k=(d[18112+(o-m)>>0]|0)+o&65535;break}}else{if((o+49|0)<(m|0))break;if((o+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-o)>>0]|0)+m&65535;break}}while(0);b[t>>1]=k;k=c[ka>>2]|0;do if(k|0){Na=(uk(c[k+12>>2]|0,Ea)|0)!=0;k=c[Ea>>2]|0;if(!(Na&(k|0)>0))break;r=b[t>>1]|0;l=((k|0)<0)<<31>>31;s=k>>>0<8;do if(s){if(k>>>0<2){m=0;break}m=40;p=k;o=l;do{m=(m&65535)+65526|0;p=cw(p|0,o|0,1)|0;o=L()|0}while(o>>>0<0|(o|0)==0&p>>>0<8);o=m&65535;m=p;Fa=450}else{if(k>>>0>255){m=40;q=k;o=l;do{m=(m&65535)+40|0;Na=q;q=bw(q|0,o|0,4)|0;Ma=o;o=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>4095);p=m&65535;m=q}else{p=40;o=l;m=k}if(!(o>>>0>0|(o|0)==0&m>>>0>15)){o=p;Fa=450;break}do{p=(p&65535)+10&65535;Na=m;m=bw(m|0,o|0,1)|0;Ma=o;o=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>31);o=p;Fa=450}while(0);if((Fa|0)==450)m=(o&65535)+65526+(e[3648+((m&7)<<1)>>1]|0)&65535;if(r<<16>>16<=m<<16>>16)break;do if(s){if(k>>>0<2){k=0;break}m=40;do{m=(m&65535)+65526|0;k=cw(k|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&k>>>0<8);m=m&65535;Fa=465}else{if(k>>>0>255){m=40;do{m=(m&65535)+40|0;Na=k;k=bw(k|0,l|0,4)|0;Ma=l;l=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>4095);m=m&65535}else m=40;if(!(l>>>0>0|(l|0)==0&k>>>0>15)){Fa=465;break}do{m=(m&65535)+10&65535;Na=k;k=bw(k|0,l|0,1)|0;Ma=l;l=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>31);Fa=465}while(0);if((Fa|0)==465)k=(m&65535)+65526+(e[3648+((k&7)<<1)>>1]|0)&65535;b[t>>1]=k}while(0);if(u|0){l=c[x+108>>2]|0;if(!(a[(c[x>>2]|0)+81>>0]|0))k=(c[x+104>>2]|0)+(((u|0)<0?l+-1|0:u)*20|0)|0;else k=59308;c[k+8>>2]=l}break}case 127:case -127:{if((a[Da>>0]|0)==1)s=c[Da+4>>2]|0;else{k=f+40|0;l=c[k>>2]|0;c[k>>2]=l+1;k=x+108|0;j=c[k>>2]|0;if((c[x+112>>2]|0)>(j|0)){c[k>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=l;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,l,0,0)|0;c[h+24>>2]=j;j=h;while(1){k=c[j+56>>2]|0;if(!k)break;else j=k}s=j+8|0;c[s>>2]=c[s>>2]|32;s=l}a[Ea>>0]=1;c[Ea+4>>2]=s;c[Ea+16>>2]=0;c[Ea+8>>2]=0;c[Ea+12>>2]=0;j=kj(f,w,Ea)|0;if(j|0){k=0;Fa=640;break ga}Na=a[p>>0]|0;c[ca>>2]=0;q=h+60|0;r=c[q>>2]|0;c[q>>2]=0;a[Ea>>0]=Na<<24>>24==-127?2:1;switch(Na<<24>>24){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ha>>2]=j;nk(f,1,43277,ha);j=kj(f,h,Ea)|0;k=c[S>>2]|0;if(k|0)ri(y,k);n=c[ca>>2]|0;c[ca>>2]=w;c[S>>2]=0;if((a[p>>0]|0)==127){p=h+6|0;k=b[p>>1]|0;l=b[w+6>>1]|0;m=k<<16>>16;o=l<<16>>16;do if(k<<16>>16<l<<16>>16){if((m+49|0)<(o|0)){k=l;break}if((m+31|0)<(o|0)){k=o+1&65535;break}else{k=(d[18112+(o-m)>>0]|0)+o&65535;break}}else{if((o+49|0)<(m|0))break;if((o+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-o)>>0]|0)+m&65535;break}}while(0);b[p>>1]=k}k=c[q>>2]|0;if(k|0)ni(y,k);c[q>>2]=r;c[h+12>>2]=0;c[h+16>>2]=0;do if((a[Da>>0]|0)!=1){q=f+56|0;p=c[q>>2]|0;l=p+-1|0;m=p+-2|0;c[q>>2]=m;pl(f,h,l);q=x+108|0;k=c[q>>2]|0;r=x+112|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=36;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=l;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,36,s,l,0)|0;o=c[q>>2]|0;rl(f,h,s,0,0,Da,m,l);m=x+12|0;k=c[m>>2]|0;l=1-p|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,x,l);else c[(c[k+64>>2]|0)+(l<<2)>>2]=c[q>>2];k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=5;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=o;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,5,s,o,0)|0;l=c[m>>2]|0;k=0-p|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,x,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[q>>2];k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0;break}else{Di(x,117,s,0,0)|0;break}}while(0);break}default:{u=f+40|0;t=c[u>>2]|0;s=t+1|0;c[u>>2]=t+2;u=x+108|0;j=c[u>>2]|0;v=x+112|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=t;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,t,0,0)|0;c[h+24>>2]=j;j=h;while(1){k=c[j+56>>2]|0;if(!k)break;else j=k}k=j+8|0;c[k>>2]=c[k>>2]|32;a[Ea>>0]=1;k=Ea+4|0;c[k>>2]=t;c[Ea+16>>2]=0;c[Ea+8>>2]=0;c[Ea+12>>2]=0;j=kj(f,w,Ea)|0;if(j|0){k=0;Fa=640;break ga}j=c[u>>2]|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=s;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,s,0,0)|0;c[h+28>>2]=j;c[ca>>2]=0;m=h+60|0;o=c[m>>2]|0;c[m>>2]=0;c[k>>2]=s;switch(a[p>>0]|0){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ja>>2]=j;nk(f,1,43277,ja);j=kj(f,h,Ea)|0;n=c[ca>>2]|0;c[ca>>2]=w;l=h+6|0;k=b[w+6>>1]|0;if((b[l>>1]|0)>k<<16>>16)b[l>>1]=k;k=c[m>>2]|0;if(k|0)ni(y,k);c[m>>2]=o;k=f+56|0;r=c[k>>2]|0;o=r+-1|0;p=r+-2|0;c[k>>2]=p;pl(f,h,o);k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=36;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=o;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,36,t,o,0)|0;m=f+19|0;k=a[m>>0]|0;if(!(k<<24>>24)){Na=f+44|0;l=(c[Na>>2]|0)+1|0;c[Na>>2]=l}else{l=k+-1<<24>>24;a[m>>0]=l;l=c[f+148+((l&255)<<2)>>2]|0}k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;q=c[x+104>>2]|0;a[q+(k*20|0)>>0]=127;b[q+(k*20|0)+2>>1]=0;c[q+(k*20|0)+4>>2]=t;c[q+(k*20|0)+8>>2]=l;c[q+(k*20|0)+12>>2]=0;c[q+(k*20|0)+16>>2]=0;a[q+(k*20|0)+1>>0]=0;q=k}else q=Di(x,127,t,l,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=28;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=p;c[Na+(k*20|0)+12>>2]=l;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else k=Di(x,28,s,p,l)|0;if(!(a[(c[x>>2]|0)+81>>0]|0)){Na=c[x+104>>2]|0;a[Na+(k*20|0)+1>>0]=-3;c[Na+(k*20|0)+16>>2]=0}do if(l|0){k=a[m>>0]|0;if((k&255)>=8)break;a[m>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=l}while(0);rl(f,h,t,0,0,Da,p,o);m=x+12|0;k=c[m>>2]|0;l=1-r|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,x,l);else c[(c[k+64>>2]|0)+(l<<2)>>2]=c[u>>2];k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=5;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=q;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,5,t,q,0)|0;l=c[m>>2]|0;k=0-r|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,x,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[u>>2];k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,117,s,0,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,117,t,0,0)|0}}if(c[h+56>>2]|0)break;m=f+212|0;k=c[m>>2]|0;if(!k)k=0;else{l=c[Oa>>2]|0;if((k|0)<0)k=(c[l+108>>2]|0)+-1|0;if(!(a[(c[l>>2]|0)+81>>0]|0))k=(c[l+104>>2]|0)+(k*20|0)|0;else k=59308;k=c[k+8>>2]|0}c[m>>2]=k}else{Al(f,h,Da);j=0;n=0}while(0);if(c[za>>2]&32){w=c[c[h>>2]>>2]|0;o=w+1|0;p=o*5|0;m=p+20|0;q=y+272|0;ja:do if(c[q>>2]|0)if(!(a[y+81>>0]|0))Fa=589;else{k=n;j=7;Fa=640;break ga}else{do if(!(0<0|(0==0?(e[y+276>>1]|0)>>>0<m>>>0:0))){k=y+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];v=y+284|0;c[v>>2]=(c[v>>2]|0)+1;v=l;break ja}k=y+296|0;l=c[k>>2]|0;if(!l){k=y+292|0;break}else{c[k>>2]=c[l>>2];v=y+284|0;c[v>>2]=(c[v>>2]|0)+1;v=l;break ja}}else k=y+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=589}while(0);if((Fa|0)==589)v=_d(y,m,0)|0;if(!v){k=y+81|0;do if(!(a[k>>0]|0)){if(a[y+82>>0]|0)break;a[k>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[y+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);if(!v){k=n;j=7;Fa=640;break}else{u=0;t=1}}else{c[v+16>>2]=v+20+(o<<2);b[v+6>>1]=w;b[v+8>>1]=o;a[v+4>>0]=a[y+78>>0]|0;c[v+12>>2]=y;c[v>>2]=1;gw(v+24|0,0,p+-4|0)|0;u=v;t=0}if((w|0)>0){m=y+8|0;k=v+20|0;l=0;while(1){Na=Cl(f,h,l)|0;c[k>>2]=Na;if(!Na)c[k>>2]=c[m>>2];l=l+1|0;if((l|0)==(w|0))break;else k=k+4|0}}q=x+104|0;r=u+12|0;s=u;p=h;do{o=p+24|0;m=c[o>>2]|0;k=(m|0)<0;do if(t){if(k)break;do if(!(a[(c[x>>2]|0)+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;if(!(a[k+(m*20|0)+1>>0]|0))break;Ei(x,k+(m*20|0)|0,u,-9)}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1}while(0);c[o>>2]=-1;k=p+28|0;l=c[k>>2]|0;if((l|0)<0)break;do if(!(a[(c[x>>2]|0)+81>>0]|0)){m=c[q>>2]|0;c[m+(l*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;if(!(a[m+(l*20|0)+1>>0]|0))break;Ei(x,m+(l*20|0)|0,u,-9)}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1}while(0);c[k>>2]=-1}else{if(k)break;k=c[x>>2]|0;ka:do if(!(a[k+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;l=k+(m*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(m*20|0)+16>>2]=u;a[l>>0]=-9;break}else{Ei(x,k+(m*20|0)|0,u,-9);break}}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1;if(c[k+480>>2]|0)break;Na=(c[u>>2]|0)+-1|0;c[u>>2]=Na;if(Na|0)break;k=c[r>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);break ka}if((c[k+304>>2]|0)>>>0>s>>>0)break;if((c[k+308>>2]|0)>>>0<=s>>>0)break;Na=k+300|0;c[u>>2]=c[Na>>2];c[Na>>2]=u;break ka}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Na=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);c[o>>2]=-1;o=p+28|0;m=c[o>>2]|0;if((m|0)<0)break;k=c[x>>2]|0;la:do if(!(a[k+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;l=k+(m*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(m*20|0)+16>>2]=u;a[l>>0]=-9;break}else{Ei(x,k+(m*20|0)|0,u,-9);break}}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1;if(c[k+480>>2]|0)break;Na=(c[u>>2]|0)+-1|0;c[u>>2]=Na;if(Na|0)break;k=c[r>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);break la}if((c[k+304>>2]|0)>>>0>s>>>0)break;if((c[k+308>>2]|0)>>>0<=s>>>0)break;Na=k+300|0;c[u>>2]=c[Na>>2];c[Na>>2]=u;break la}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Na=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);c[o>>2]=-1}while(0);p=c[p+52>>2]|0}while((p|0)!=0);Na=(c[v>>2]|0)+-1|0;c[v>>2]=Na;if(Na|0){k=n;Fa=640;break}k=c[v+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);k=n;Fa=640;break ga}l=v;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;k=k+300|0;c[v>>2]=c[k>>2];c[k>>2]=v;k=n;Fa=640;break ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);k=n;Fa=640;break}else{k=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);k=n;Fa=640;break}}else{k=n;Fa=640}}else Fa=374;while(0);if((Fa|0)==374){k=j?43237:43150;switch(a[h+4>>0]|0){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ba>>2]=k;c[ba+4>>2]=j;cd(f,43195,ba);k=0;j=1;Fa=640}if((Fa|0)==640){c[i+8>>2]=c[Da+8>>2];c[i+12>>2]=c[Da+12>>2];if(!k)m=j;else{pi(y,k,1);m=j}}if(c[h+56>>2]|0){Oa=m;Ra=Pa;return Oa|0}l=f+212|0;j=c[l>>2]|0;if(!j)j=0;else{k=c[Oa>>2]|0;if((j|0)<0)j=(c[k+108>>2]|0)+-1|0;if(!(a[(c[k>>2]|0)+81>>0]|0))j=(c[k+104>>2]|0)+(j*20|0)|0;else j=59308;j=c[j+8>>2]|0}c[l>>2]=j;Oa=m;Ra=Pa;return Oa|0}else m=1;while(0);j=c[Ma+28>>2]|0;do if(j|0){if(Na|0){if(c[Na+480>>2]|0){Xd(Na,j);break}i=j;if((c[Na+304>>2]|0)>>>0<=i>>>0?(c[Na+308>>2]|0)>>>0>i>>>0:0){i=Na+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[Ma+40>>2]|0;do if(j|0){if(Na|0){if(c[Na+480>>2]|0){Xd(Na,j);break}i=j;if((c[Na+304>>2]|0)>>>0<=i>>>0?(c[Na+308>>2]|0)>>>0>i>>>0:0){i=Na+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);l=f+212|0;j=c[l>>2]|0;if(!j)j=0;else{k=c[Oa>>2]|0;if((j|0)<0)j=(c[k+108>>2]|0)+-1|0;if(!(a[(c[k>>2]|0)+81>>0]|0))j=(c[k+104>>2]|0)+(j*20|0)|0;else j=59308;j=c[j+8>>2]|0}c[l>>2]=j;Oa=m;Ra=Pa;return Oa|0}function lj(b,f,g,h,i,j,k,l){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;m=s;r=c[b>>2]|0;do if(!f){f=(k|0)!=0;if(f|(l|0)!=0){c[m>>2]=f?44504:44507;cd(b,44468,m);break}else{q=pj(b,0,g,h)|0;n=6;break}}else{q=pj(b,f,g,h)|0;n=6}while(0);if((n|0)==6?q|0:0){o=(c[q>>2]|0)+-1|0;a:do if((d[b+200>>0]|0)>1?(p=c[q+8+(o*72|0)+8>>2]|0,p|0):0){if(!((h|0)!=0?(c[h>>2]|0)!=0:0))h=g;g=c[b>>2]|0;b:do if(!g){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](16)|0;n=35;break}f=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;g=59064;m=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&m>>>0>0){t=c[14978]|0;g=Tv(m|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&g>>>0<=t>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f)break a;m=Wa[c[29352>>2]&127](f)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}else{if(c[g+272>>2]|0){if(a[g+81>>0]|0)break a}else{do if((e[g+276>>1]|0)>=16){m=g+300|0;f=c[m>>2]|0;if(f|0){c[m>>2]=c[f>>2];n=g+284|0;c[n>>2]=(c[n>>2]|0)+1;n=35;break b}m=g+296|0;f=c[m>>2]|0;if(!f){f=g+292|0;break}else{c[m>>2]=c[f>>2];n=g+284|0;c[n>>2]=(c[n>>2]|0)+1;n=35;break b}}else f=g+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(g,16,0)|0;n=35}while(0);if((n|0)==35)if(!f)break;m=f+4|0;g=m+12|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(g|0));c[f>>2]=p;n=h;p=c[n+4>>2]|0;t=f+4|0;c[t>>2]=c[n>>2];c[t+4>>2]=p;t=b+272|0;c[f+12>>2]=c[t>>2];c[t>>2]=f}while(0);if(c[i+4>>2]|0){t=qj(r,i)|0;c[q+8+(o*72|0)+12>>2]=t}c[q+8+(o*72|0)+20>>2]=j;c[q+8+(o*72|0)+44>>2]=k;c[q+8+(o*72|0)+48>>2]=l;t=q;Ra=s;return t|0}if(k|0)ni(r,k);do if(l|0){b=l+4|0;f=c[l>>2]|0;c:do if((c[b>>2]|0)>0){g=r+480|0;h=r+304|0;n=r+308|0;o=r+300|0;if(!r){m=0;while(1){f=c[f+(m<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);m=m+1|0;f=c[l>>2]|0;if((m|0)>=(c[b>>2]|0))break c}}m=0;do{f=c[f+(m<<3)>>2]|0;do if(f|0){if(c[g>>2]|0){Xd(r,f);break}t=f;if((c[h>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[f>>2]=c[o>>2];c[o>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);m=m+1|0;f=c[l>>2]|0}while((m|0)<(c[b>>2]|0))}while(0);d:do if(f){do if(r|0){m=r+480|0;if(!(c[m>>2]|0)){g=f;if((c[r+304>>2]|0)>>>0>g>>>0)break;if((c[r+308>>2]|0)>>>0<=g>>>0)break;t=r+300|0;c[f>>2]=c[t>>2];c[t>>2]=f}else Xd(r,f);f=m;n=75;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);n=73;break}else{n=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);n=73;break}}else n=73;while(0);if((n|0)==73)if(r){f=r+480|0;n=75}if((n|0)==75){if(c[f>>2]|0){Xd(r,l);break}t=l;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){t=r+300|0;c[l>>2]=c[t>>2];c[t>>2]=l;break}}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!j){t=0;Ra=s;return t|0}pi(r,j,1);t=0;Ra=s;return t|0}function mj(d,f,g,h,i,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+96|0;q=t+80|0;s=t;p=c[d>>2]|0;a:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))r=11;else n=0;else{do if((e[p+276>>1]|0)>=76){o=p+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}o=p+296|0;n=c[o>>2]|0;if(!n){n=p+292|0;break}else{c[o>>2]=c[n>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}}else n=p+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;r=11}while(0);if((r|0)==11)n=_d(p,76,0)|0;o=(n|0)==0?s:n;if(!f){f=c[d>>2]|0;c[q>>2]=0;c[q+4>>2]=0;f=oj(f,172,q,0)|0;f=nj(c[d>>2]|0,0,f)|0}c[o>>2]=f;a[o+4>>0]=-125;c[o+8>>2]=l;c[o+12>>2]=0;c[o+16>>2]=0;q=d+100|0;l=(c[q>>2]|0)+1|0;c[q>>2]=l;c[o+20>>2]=l;c[o+24>>2]=-1;c[o+28>>2]=-1;b[o+6>>1]=0;if(!g){n=c[d>>2]|0;b:do if(!n){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](80)|0;r=38;break}g=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;n=59064;f=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&f>>>0>0){l=c[14978]|0;q=Tv(f|0,n|0,g|0,((g|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=l>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;r=39}else r=39}else g=0}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0){g=0;break}}else{do if((e[n+276>>1]|0)>=80){f=n+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=38;break b}f=n+296|0;g=c[f>>2]|0;if(!g){g=n+292|0;break}else{c[f>>2]=c[g>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=38;break b}}else g=n+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(n,80,0)|0;r=38}while(0);if((r|0)==38)if(!g)g=0;else r=39;if((r|0)==39){f=g;n=f+80|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(n|0))}}c[o+32>>2]=g;c[o+36>>2]=h;c[o+40>>2]=i;c[o+44>>2]=j;c[o+48>>2]=k;c[o+52>>2]=0;c[o+56>>2]=0;c[o+60>>2]=m;c[o+64>>2]=0;c[o+68>>2]=0;c[o+72>>2]=0;g=c[d>>2]|0;if(!(a[g+81>>0]|0)){s=o;Ra=t;return s|0}pi(g,o,(o|0)!=(s|0)&1);s=0;Ra=t;return s|0}function nj(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;a:do if(!d){b:do if(c[b+272>>2]|0)if(!(a[b+81>>0]|0))i=12;else{d=0;break a}else{do if((e[b+276>>1]|0)>=24){g=b+300|0;d=c[g>>2]|0;if(d|0){c[g>>2]=c[d>>2];h=b+284|0;c[h>>2]=(c[h>>2]|0)+1;break b}g=b+296|0;d=c[g>>2]|0;if(!d){d=b+292|0;break}else{c[g>>2]=c[d>>2];h=b+284|0;c[h>>2]=(c[h>>2]|0)+1;break b}}else d=b+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;i=12}while(0);if((i|0)==12)d=_d(b,24,0)|0;if(d){c[d>>2]=0;i=20}}else{g=c[d>>2]|0;if(!(g+-1&g)){h=Yv(g|0,((g|0)<0)<<31>>31|0,40,0)|0;g=L()|0;h=h|4;j=d;if(((c[b+304>>2]|0)>>>0<=j>>>0?(c[b+308>>2]|0)>>>0>j>>>0:0)?!(g>>>0>0|((g|0)==0?h>>>0>(e[b+276>>1]|0)>>>0:0)):0){i=20;break}g=Zd(b,d,h,g)|0;if(g){d=g;i=20}}else i=20}while(0);if((i|0)==20){j=c[d>>2]|0;c[d>>2]=j+1;i=d+4+(j*20|0)+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[d+4+(j*20|0)>>2]=f;j=d;return j|0}if(f|0)ni(b,f);if(!d){j=0;return j|0}ri(b,d);j=0;return j|0}function oj(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;n=t;c[n>>2]=0;o=(g|0)!=0;do if(o){if(((f|0)==147?(i=c[g>>2]|0,i|0):0)?ii(i,n)|0:0){m=0;break}m=(c[g+4>>2]|0)+1|0}else m=0;while(0);k=m+52|0;a:do if(c[d+272>>2]|0)if(!(a[d+81>>0]|0))l=16;else{s=0;Ra=t;return s|0}else{do if(!(0<0|(0==0?(e[d+276>>1]|0)>>>0<k>>>0:0))){i=d+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];p=d+284|0;c[p>>2]=(c[p>>2]|0)+1;p=j;break a}i=d+296|0;j=c[i>>2]|0;if(!j){i=d+292|0;break}else{c[i>>2]=c[j>>2];p=d+284|0;c[p>>2]=(c[p>>2]|0)+1;p=j;break a}}else i=d+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;l=16}while(0);if((l|0)==16)p=_d(d,k,0)|0;if(!p){s=p;Ra=t;return s|0}i=p;j=i+52|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));a[p>>0]=f;b[p+34>>1]=-1;do if(o){if(!m){c[p+4>>2]=8389632;c[p+8>>2]=c[n>>2];break}k=p+52|0;d=p+8|0;c[d>>2]=k;i=g+4|0;j=c[i>>2]|0;if(!j)i=0;else{ew(k|0,c[g>>2]|0,j|0)|0;i=c[i>>2]|0}a[k+i>>0]=0;if(((h|0?(s=c[d>>2]|0,q=a[s>>0]|0,(a[880+(q&255)>>0]|0)<0):0)?(h=p+4|0,c[h>>2]=(q<<24>>24==34?67108928:67108864)|c[h>>2],s|0):0)?(r=a[s>>0]|0,(a[880+(r&255)>>0]|0)<0):0){d=r<<24>>24==91?93:r;k=0;i=1;while(1){j=a[s+i>>0]|0;if(j<<24>>24==d<<24>>24){i=i+1|0;j=s+k|0;if((a[s+i>>0]|0)!=d<<24>>24)break;a[j>>0]=d}else a[s+k>>0]=j;k=k+1|0;i=i+1|0}a[j>>0]=0}}while(0);c[p+24>>2]=1;s=p;Ra=t;return s|0}function pj(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o;n=c[b>>2]|0;do if(!d){a:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))j=12;else{n=0;Ra=o;return n|0}else{do if((e[n+276>>1]|0)>=80){h=n+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;break a}h=n+296|0;i=c[h>>2]|0;if(!i){h=n+292|0;break}else{c[h>>2]=c[i>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=12}while(0);if((j|0)==12)i=_d(n,80,0)|0;if(!i){n=0;Ra=o;return n|0}else{c[i+4>>2]=1;c[i>>2]=1;j=i+8|0;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));b=i;h=i+48|0;break}}else{m=c[d>>2]|0;h=m+1|0;b:do if(h>>>0>(c[d+4>>2]|0)>>>0){i=cw(m|0,((m|0)<0)<<31>>31|0,1)|0;j=L()|0;i=i|1;do if((h|0)>199){c[k>>2]=200;cd(b,43159,k)}else{h=(j|0)<0|(j|0)==0&i>>>0<200;b=h?i:200;h=Yv(b|0,(h?j:0)|0,72,0)|0;h=Sv(h|0,L()|0,8,0)|0;i=L()|0;l=d;if(((c[n+304>>2]|0)>>>0<=l>>>0?(c[n+308>>2]|0)>>>0>l>>>0:0)?!(i>>>0>0|((i|0)==0?h>>>0>(e[n+276>>1]|0)>>>0:0)):0)h=d;else{h=Zd(n,d,h,i)|0;if(!h)break}c[h+4>>2]=b;i=c[h>>2]|0;if((i|0)<=(m|0)){l=h;b=h;h=i;break b}do{j=h+8+(i*72|0)|0;i=i+-1|0;b=h+8+(i*72|0)|0;k=j+72|0;do{c[j>>2]=c[b>>2];j=j+4|0;b=b+4|0}while((j|0)<(k|0))}while((i|0)>(m|0));l=h;b=h;h=c[h>>2]|0;break b}while(0);qi(n,d);n=0;Ra=o;return n|0}else{l=d;b=d;h=m}while(0);c[b>>2]=h+1;j=l+8+(m*72|0)|0;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));b=l;h=l+8+(m*72|0)+40|0}while(0);c[h>>2]=-1;h=(c[b>>2]|0)+-1|0;if(g|0?c[g>>2]|0:0){g=qj(n,g)|0;c[b+8+(h*72|0)+8>>2]=g;n=qj(n,f)|0;c[b+8+(h*72|0)+4>>2]=n;n=b;Ra=o;return n|0}n=qj(n,f)|0;c[b+8+(h*72|0)+8>>2]=n;c[b+8+(h*72|0)+4>>2]=0;n=b;Ra=o;return n|0}function qj(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d){k=0;return k|0}k=c[d>>2]|0;i=c[d+4>>2]|0;if(!k){k=0;return k|0}g=Sv(i|0,0,1,0)|0;h=L()|0;a:do if(c[b+272>>2]|0)if(!(a[b+81>>0]|0))j=13;else{k=0;return k|0}else{do if(0<0|(0==0?i>>>0<(e[b+276>>1]|0)>>>0:0)){d=b+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];b=b+284|0;c[b>>2]=(c[b>>2]|0)+1;b=f;break a}d=b+296|0;f=c[d>>2]|0;if(!f){d=b+292|0;break}else{c[d>>2]=c[f>>2];b=b+284|0;c[b>>2]=(c[b>>2]|0)+1;b=f;break a}}else d=b+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;j=13}while(0);if((j|0)==13)b=_d(b,g,h)|0;if(!b){k=0;return k|0}ew(b|0,k|0,i|0)|0;a[b+i>>0]=0;d=a[b>>0]|0;if((a[880+(d&255)>>0]|0)>=0){k=b;return k|0}h=d<<24>>24==91?93:d;g=0;d=1;while(1){f=a[b+d>>0]|0;if(f<<24>>24==h<<24>>24){d=d+1|0;f=b+g|0;if((a[b+d>>0]|0)!=h<<24>>24)break;a[f>>0]=h}else a[b+g>>0]=f;g=g+1|0;d=d+1|0}a[f>>0]=0;k=b;return k|0}
- function yj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;Ea=Ra;Ra=Ra+448|0;ha=Ea+424|0;ca=Ea+416|0;ta=Ea+408|0;sa=Ea+400|0;ra=Ea+392|0;qa=Ea+384|0;ma=Ea+376|0;na=Ea+368|0;da=Ea+336|0;W=Ea+328|0;M=Ea+320|0;U=Ea+304|0;ba=Ea+280|0;V=Ea+272|0;ga=Ea+256|0;fa=Ea+240|0;ea=Ea+224|0;Z=Ea+216|0;ja=Ea+184|0;ia=Ea+152|0;X=Ea+144|0;J=Ea+136|0;N=Ea+128|0;K=Ea+120|0;I=Ea+112|0;_=Ea+104|0;T=Ea+96|0;Q=Ea+88|0;S=Ea+80|0;A=Ea+72|0;y=Ea+64|0;z=Ea+56|0;w=Ea+48|0;q=Ea+40|0;o=Ea+32|0;n=Ea+24|0;wa=Ea+16|0;B=Ea;oa=Ea+440|0;va=Ea+436|0;pa=Ea+432|0;Da=c[f>>2]|0;ua=f+8|0;k=c[ua>>2]|0;if(!k){if((c[f+116>>2]|0)==0?(b[Da+76>>1]&8)==0:0)a[f+23>>0]=1;a:do if(c[Da+272>>2]|0)if(!(a[Da+81>>0]|0))za=15;else{Ra=Ea;return}else{do if((e[Da+276>>1]|0)>=224){k=Da+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Ca=Da+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break a}k=Da+296|0;l=c[k>>2]|0;if(!l){k=Da+292|0;break}else{c[k>>2]=c[l>>2];Ca=Da+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break a}}else k=Da+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=15}while(0);if((za|0)==15)l=_d(Da,224,0)|0;if(!l){Ra=Ea;return}$=l+104|0;aa=$+120|0;do{c[$>>2]=0;$=$+4|0}while(($|0)<(aa|0));c[l>>2]=Da;k=Da+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[ua>>2]=l;Di(l,61,0,1,0)|0;Aa=l}else Aa=k;F=Aa+149|0;xa=d[F>>0]|d[F+1>>0]<<8|64;a[F>>0]=xa;a[F+1>>0]=xa>>8;xa=f+44|0;c[xa>>2]=2;k=c[f>>2]|0;ka=h+4|0;if(c[ka>>2]|0){if(a[k+165>>0]|0){cd(f,39404,n);Ra=Ea;return}r=wk(k,g)|0;if((r|0)<0){c[o>>2]=g;cd(f,39421,o);Ra=Ea;return}else g=h}else r=d[k+164>>0]|0;ya=Da+16|0;aa=c[ya>>2]|0;$=(r|0)==1;if(($?(v=c[f>>2]|0,p=v+16|0,(c[(c[p>>2]|0)+20>>2]|0)==0):0)?(a[f+199>>0]|0)==0:0){k=Pe(c[v>>2]|0,0,v,wa,0,542)|0;if(k|0){cd(f,32157,q);c[f+12>>2]=k;Ra=Ea;return}Ca=c[wa>>2]|0;c[(c[p>>2]|0)+20>>2]=Ca;k=c[v+92>>2]|0;p=c[Ca+4>>2]|0;c[p+4>>2]=c[Ca>>2];if(!(b[p+22>>1]&2)){m=p+32|0;n=p+36|0;o=(c[m>>2]|0)-(c[n>>2]|0)|0;if(((k+-512|0)>>>0<65025?(k+-1&k|0)==0:0)?(c[m>>2]=k,t=p+80|0,s=c[t>>2]|0,s|0):0){l=s+-4|0;c[t>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Ca=(c[14820]|0)+1|0;c[14820]=Ca;c[14821]=(Ca|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=40;break}else{k=Wa[c[29352>>2]&127](l)|0;za=40}while(0);do if((za|0)==40){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[t>>2]=0}Ca=Se(c[p>>2]|0,m,o)|0;c[n>>2]=(c[m>>2]|0)-(o&65535);if((Ca|0)==7){k=v+81|0;if((a[k>>0]|0)==0?(a[v+82>>0]|0)==0:0){a[k>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;k=v+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[v+236>>2]|0;if(k|0)c[k+12>>2]=7}Ra=Ea;return}}}Ca=qj(Da,g)|0;if(!Ca){Ra=Ea;return}if(!j)Ba=qj(Da,i)|0;else{c[w>>2]=i;Ba=dd(Da,45384,w)|0}if(!(c[ka>>2]|0))la=0;else la=c[aa+(r<<4)>>2]|0;k=c[f>>2]|0;do if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(x=c[k+312>>2]|0,(x|0)!=0):0){k=$a[x&127](c[k+316>>2]|0,19,Ca,Ba,la,c[f+240>>2]|0)|0;if((k|0)==1){cd(f,39216,z);c[f+12>>2]=23;za=2020;break}if((k|2|0)==2)if(!k){za=67;break}else{za=2020;break}else{cd(f,39231,y);c[f+12>>2]=1;za=2020;break}}else za=67;while(0);b:do if((za|0)==67){c[B>>2]=0;c[B+4>>2]=Ca;c[B+8>>2]=Ba;c[B+12>>2]=0;t=Da+404|0;c[t>>2]=0;k=Td(Da,la)|0;c:do if(k){l=c[k+4>>2]|0;c[l+4>>2]=c[k>>2];k=c[(c[l>>2]|0)+60>>2]|0;l=c[k>>2]|0;d:do if(l|0){k=Ya[c[l+40>>2]&127](k,14,B)|0;switch(k|0){case 12:break d;case 0:break;default:{l=c[B>>2]|0;if(!l)break c;c[A>>2]=l;cd(f,31408,A);l=c[B>>2]|0;if(!l)break c;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break c}else{Aa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break c}}}Wi(Aa,1);if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc(c[Aa+116>>2]|0,c[B>>2]|0,-1,1,-1)|0;l=c[B>>2]|0;if(!l){za=2020;break b}m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;k=c[B>>2]|0;if(!k){za=2020;break b}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);za=2020;break b}else{za=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);za=2020;break b}}while(0);B=a[Ca>>0]|0;q=d[208+(B&255)>>0]|0;e:do if(!(B<<24>>24)){k=0;l=59;do{o=k+l|0;m=(o|0)/2|0;n=q-(d[208+(d[c[4544+(m<<4)>>2]>>0]|0)>>0]|0)|0;if(!n){j=m;za=103;break e}B=(n|0)<0;k=B?k:m+1|0;l=B?m+-1|0:l}while((k|0)<=(l|0))}else{n=0;p=59;do{o=n+p|0;g=(o|0)/2|0;l=c[4544+(g<<4)>>2]|0;k=q-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!k){m=Ca;do{m=m+1|0;l=l+1|0;B=a[m>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0));if(!k){j=g;za=103;break e}}B=(k|0)<0;n=B?n:g+1|0;p=B?g+-1|0:p}while((n|0)<=(p|0))}while(0);f:do if((za|0)==103){s=4544+(j<<4)|0;m=a[4544+(j<<4)+5>>0]|0;g:do if(m&1?(D=c[f>>2]|0,(a[D+165>>0]|0)==0):0){n=f+4|0;p=D+24|0;g=(c[p>>2]&1|0)==0;q=D+16|0;B=c[(c[q>>2]|0)+12>>2]|0;a[D+78>>0]=a[B+77>>0]|0;if((b[B+78>>1]&1)==0?(C=eh(D,0,n,0)|0,(C|0)!=0):0)k=C;else za=107;h:do if((za|0)==107){k=c[D+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[q>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(E=eh(D,k,n,0)|0,E|0):0){k=E;break h}}while((l|0)>2);if(g)c[p>>2]=c[p>>2]&-2;if(!(a[D+89>>0]|0))break g;c[p>>2]=c[p>>2]|16;break g}while(0);c[f+12>>2]=k;Aa=f+36|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break f}while(0);E=m&255;do if((E&2|0)==0?(Ba|0)==0|(E&4|0)==0:0){E=a[4544+(j<<4)+7>>0]|0;m=E&255;E=E<<24>>24==0;Wi(Aa,E?1:m);if(E){if(a[(c[Aa>>2]|0)+81>>0]|0)break;yc(c[Aa+116>>2]|0,c[s>>2]|0,-1,1,0)|0;break}n=Aa+116|0;k=0;l=d[4544+(j<<4)+6>>0]|0;while(1){if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc((c[n>>2]|0)+(k*40|0)|0,c[5504+(l<<2)>>2]|0,-1,1,0)|0;k=k+1|0;if((k|0)==(m|0))break;else l=l+1|0}}while(0);do switch(a[4544+(j<<4)+4>>0]|0){case 11:{u=1<<r;ya=Aa+152|0;c[ya>>2]=c[ya>>2]|u;if(!$?a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0:0){ya=Aa+156|0;c[ya>>2]=c[ya>>2]|u}if(!Ba){c[xa>>2]=(c[xa>>2]|0)+2;Aa=ed(Aa,9,18352)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+124>>2]=-2e3;break f}c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;k=(k|0)>-1?k:(k|0)==-2147483648?2147483647:0-k|0;t=c[f+116>>2]|0;t=(t|0)==0?f:t;l=t+84|0;m=c[l>>2]|0;i:do if(!(m&u)){c[l>>2]=m|u;if(!$)break;s=c[t>>2]|0;l=s+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;m=Pe(c[s>>2]|0,0,s,wa,0,542)|0;if(m|0){cd(t,32157,S);c[t+12>>2]=m;break}ya=c[wa>>2]|0;c[(c[l>>2]|0)+20>>2]=ya;l=c[s+92>>2]|0;o=c[ya+4>>2]|0;c[o+4>>2]=c[ya>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;g=o+36|0;q=(c[p>>2]|0)-(c[g>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;za=147;break}else{l=Wa[c[29352>>2]&127](m)|0;za=147}while(0);do if((za|0)==147){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{za=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);za=Se(c[o>>2]|0,p,q)|0;c[g>>2]=(c[p>>2]|0)-(q&65535);if((za|0)!=7)break;l=s+81|0;do if(!(a[l>>0]|0)){if(a[s+82>>0]|0)break;a[l>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;l=s+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[s+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break i}while(0)}while(0);l=t+80|0;c[l>>2]=c[l>>2]|u;l=Aa+108|0;m=c[l>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[l>>2]=m+1;Aa=c[Aa+104>>2]|0;a[Aa+(m*20|0)>>0]=95;b[Aa+(m*20|0)+2>>1]=0;c[Aa+(m*20|0)+4>>2]=r;c[Aa+(m*20|0)+8>>2]=3;c[Aa+(m*20|0)+12>>2]=k;c[Aa+(m*20|0)+16>>2]=0;a[Aa+(m*20|0)+1>>0]=0}else Di(Aa,95,r,3,k)|0;c[(c[aa+(r<<4)+12>>2]|0)+80>>2]=k;m=c[aa+(r<<4)+4>>2]|0;l=c[m+4>>2]|0;c[l+4>>2]=c[m>>2];l=c[(c[l>>2]|0)+212>>2]|0;c[l+16>>2]=k;m=c[7357]|0;n=c[l+44>>2]|0;if((k|0)<=-1){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(za|0,Aa|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[m&127](n,k);break f}case 28:{k=c[aa+(r<<4)+4>>2]|0;if(Ba|0){c[wa>>2]=0;ii(Ba,wa)|0;l=c[wa>>2]|0;c[Da+92>>2]=l;g=c[k+4>>2]|0;c[g+4>>2]=c[k>>2];if(b[g+22>>1]&2){za=2020;break b}n=g+32|0;o=g+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[n>>2]=l;m=g+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Aa=(c[14820]|0)+1|0;c[14820]=Aa;c[14821]=(Aa|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=219;break}else{k=Wa[c[29352>>2]&127](l)|0;za=219}while(0);do if((za|0)==219){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Aa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);Aa=Se(c[g>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((Aa|0)!=7){za=2020;break b}k=Da+81|0;if(a[k>>0]|0){za=2020;break b}if(a[Da+82>>0]|0){za=2020;break b}a[k>>0]=1;if((c[Da+180>>2]|0)>0)c[Da+264>>2]=1;k=Da+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Da+236>>2]|0;if(!k){za=2020;break b}c[k+12>>2]=7;za=2020;break b}if(!k){n=0;o=0}else{o=c[(c[k+4>>2]|0)+32>>2]|0;n=o;o=((o|0)<0)<<31>>31}m=c[Aa>>2]|0;j:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=179;else za=199;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=180;break j}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=180;break j}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=179}while(0);if((za|0)==179){p=_d(m,8,0)|0;za=180}k:do if((za|0)==180){if(!p){za=199;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break k}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==199){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 30:{g=c[aa+(r<<4)+4>>2]|0;do if(!Ba){m=-1;n=0}else{za=a[Ba>>0]|0;k=(d[208+(za&255)>>0]|0)+-102|0;if(!(za<<24>>24==0|(k|0)!=0)){l=45388;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)m=2;else m=(Zm(Ba,1,0)|0)<<24>>24!=0&1;if(c[ka>>2]|0){n=1;break}p=c[Da+20>>2]|0;if((p|0)<=0){n=1;break}l=c[ya>>2]|0;n=m<<2;k=0;do{o=c[l+(k<<4)+4>>2]|0;if(o|0){za=c[o+4>>2]|0;c[za+4>>2]=c[o>>2];za=za+22|0;b[za>>1]=n|b[za>>1]&-13&65535}k=k+1|0}while((k|0)!=(p|0));n=1}while(0);if(!g)n=0;else{l=c[g+4>>2]|0;c[l+4>>2]=c[g>>2];l=l+22|0;k=b[l>>1]|0;if(n){k=(m<<2|k&-13&65535)&65535;b[l>>1]=k}n=(k&65535)>>>2&3}m=c[Aa>>2]|0;l:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=256;else za=276;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=257;break l}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=257;break l}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=256}while(0);if((za|0)==256){p=_d(m,8,0)|0;za=257}m:do if((za|0)==257){if(!p){za=276;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break m}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break m}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==276){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 24:{n=c[f+116>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<<r;n:do if(((l&m|0)==0?(c[k>>2]=l|m,$):0)?(Y=c[n>>2]|0,O=Y+16|0,(c[(c[O>>2]|0)+20>>2]|0)==0):0){if(a[n+199>>0]|0)break;k=Pe(c[Y>>2]|0,0,Y,wa,0,542)|0;if(k|0){cd(n,32157,Q);c[n+12>>2]=k;break}ya=c[wa>>2]|0;c[(c[O>>2]|0)+20>>2]=ya;k=c[Y+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=302;break}else{k=Wa[c[29352>>2]&127](l)|0;za=302}while(0);do if((za|0)==302){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);ya=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((ya|0)!=7)break;k=Y+81|0;do if(!(a[k>>0]|0)){if(a[Y+82>>0]|0)break;a[k>>0]=1;if((c[Y+180>>2]|0)>0)c[Y+264>>2]=1;k=Y+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Y+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break n}while(0)}while(0);o=(c[xa>>2]|0)+1|0;c[xa>>2]=o;do if((a[Ca>>0]|32)<<24>>24==112){l=Aa+108|0;m=c[l>>2]|0;k=Aa+112|0;if((c[k>>2]|0)>(m|0)){c[l>>2]=m+1;za=c[Aa+104>>2]|0;a[za+(m*20|0)>>0]=-90;b[za+(m*20|0)+2>>1]=0;c[za+(m*20|0)+4>>2]=r;c[za+(m*20|0)+8>>2]=o;c[za+(m*20|0)+12>>2]=0;c[za+(m*20|0)+16>>2]=0;a[za+(m*20|0)+1>>0]=0;m=l;break}else{Di(Aa,166,r,o,0)|0;m=l;break}}else{c[wa>>2]=0;if(Ba){ii(Ba,wa)|0;k=c[wa>>2]|0;if((k|0)<0)k=(k|0)==-2147483648?2147483647:0-k|0;else za=322}else{k=0;za=322}m=Aa+108|0;l=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=-89;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=r;c[za+(l*20|0)+8>>2]=o;c[za+(l*20|0)+12>>2]=k;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0;k=n;break}else{Di(Aa,167,r,o,k)|0;k=n;break}}while(0);l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;Aa=c[Aa+104>>2]|0;a[Aa+(l*20|0)>>0]=81;b[Aa+(l*20|0)+2>>1]=0;c[Aa+(l*20|0)+4>>2]=o;c[Aa+(l*20|0)+8>>2]=1;c[Aa+(l*20|0)+12>>2]=0;c[Aa+(l*20|0)+16>>2]=0;a[Aa+(l*20|0)+1>>0]=0;break f}else{Di(Aa,81,o,1,0)|0;break f}}case 23:{do if(!Ba)za=339;else{o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-101|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45400;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(k){k=n+-110|0;if(!(o|(k|0)!=0)){l=45393;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)l=0;else{za=339;break}}else l=1;if(c[ka>>2]|0){za=350;break}p=c[Da+20>>2]|0;if((p|0)>2){o=c[ya>>2]|0;k=l&255;m=2;do{n=c[c[(c[o+(m<<4)+4>>2]|0)+4>>2]>>2]|0;do if(!(a[n+12>>0]|0)){za=c[n+216>>2]|0;if(za|0?(a[za+43>>0]|0)==2:0)break;a[n+4>>0]=k}while(0);m=m+1|0}while((m|0)!=(p|0))}else k=l&255;a[Da+83>>0]=k;za=350}while(0);if((za|0)==339)if(!(c[ka>>2]|0))m=Da+83|0;else{l=-1;za=350}if((za|0)==350){k=c[c[(c[aa+(r<<4)+4>>2]|0)+4>>2]>>2]|0;do if((l|0)>-1){if(a[k+12>>0]|0)break;za=c[k+216>>2]|0;if(za|0?(a[za+43>>0]|0)==2:0)break;a[k+4>>0]=l}while(0);m=k+4|0}n=Aa+108|0;k=c[n>>2]|0;o=Aa+112|0;l=(c[o>>2]|0)>(k|0);if((a[m>>0]|0)==1){if(l){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,45400,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}else{if(l){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,45393,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}}case 20:{o:do if(Ba){m=(Eu(Ba)|0)&1073741823;if(m){n=Ba;p=36033;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=381;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=383;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=0;break o}}if((za|0)==381){l=0;k=a[208+(d[p>>0]|0)>>0]|0}else if((za|0)==383)l=l&255;if((l|0)!=(k&255|0)){n=Ba;p=36040;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2043;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2041;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=1;break o}}if((za|0)==2041)l=l&255;else if((za|0)==2043){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=1;break}n=Ba;p=36048;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2050;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2048;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=2;break o}}if((za|0)==2048)l=l&255;else if((za|0)==2050){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=2;break}n=Ba;p=36052;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2057;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2055;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=3;break o}}if((za|0)==2055)l=l&255;else if((za|0)==2057){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=3;break}n=Ba;p=36061;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2064;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2062;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=4;break o}}if((za|0)==2062)l=l&255;else if((za|0)==2064){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=4;break}n=Ba;o=36068;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2071;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[o>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2069;break}if((m|0)>1){n=n+1|0;o=o+1|0;m=m+-1|0}else{s=5;break o}}if((za|0)==2069)l=l&255;else if((za|0)==2071){l=0;k=a[208+(d[o>>0]|0)>>0]|0}if((l|0)==(k&255|0))s=5;else za=387}else s=0}else s=0}else za=387;while(0);if((za|0)==387)if(!(c[ka>>2]|0)){c[ka>>2]=1;r=0;s=-1}else s=-1;l=c[Da+20>>2]|0;if((l|0)>0){p=Aa+152|0;m=Aa+108|0;k=Aa+112|0;g=Aa+104|0;q=Aa+156|0;do{o=l;l=l+-1|0;do if(c[(c[ya>>2]|0)+(l<<4)+4>>2]|0){if((l|0)!=(r|0)?c[ka>>2]|0:0)break;n=1<<l;c[p>>2]=c[p>>2]|n;do if((l|0)!=1){if(!(a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(l<<4)+4>>2]|0)+9>>0]|0))break;c[q>>2]=c[q>>2]|n}while(0);n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;za=c[g>>2]|0;a[za+(n*20|0)>>0]=7;b[za+(n*20|0)+2>>1]=0;c[za+(n*20|0)+4>>2]=l;c[za+(n*20|0)+8>>2]=1;c[za+(n*20|0)+12>>2]=s;c[za+(n*20|0)+16>>2]=0;a[za+(n*20|0)+1>>0]=0;break}else{Di(Aa,7,l,1,s)|0;break}}while(0)}while((o|0)>1)}else{m=Aa+108|0;k=Aa+112|0}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=1;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 21:{m=c[c[(c[aa+(r<<4)+4>>2]|0)+4>>2]>>2]|0;za=wa;c[za>>2]=-2;c[za+4>>2]=-1;if(Ba){Vd(Ba,wa)|0;l=wa;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)<-1|(l|0)==-1&k>>>0<4294967295){k=wa;c[k>>2]=-1;c[k+4>>2]=-1;k=-1;n=-1}else n=l;l=m+160|0;c[l>>2]=k;c[l+4>>2]=n;l=c[m+216>>2]|0;if(!l)o=k;else{o=l+16|0;c[o>>2]=k;c[o+4>>2]=n;o=k}}else{n=m+160|0;o=c[n>>2]|0;n=c[n+4>>2]|0}m=wa;c[m>>2]=o;c[m+4>>2]=n;m=c[Aa>>2]|0;p:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=421;else za=441;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=422;break p}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=422;break p}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=421}while(0);if((za|0)==421){p=_d(m,8,0)|0;za=422}q:do if((za|0)==422)if(p){m=p;k=m;a[k>>0]=o;a[k+1>>0]=o>>8;a[k+2>>0]=o>>16;a[k+3>>0]=o>>24;m=m+4|0;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break q}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=441;while(0);do if((za|0)==441){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;break f}case 1:{p=c[aa+(r<<4)+4>>2]|0;if(Ba|0){o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-110|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45841;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}do if(!k)m=0;else{k=n+-102|0;if(!(o|(k|0)!=0)){l=45810;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){m=1;break}k=n+-105|0;if(!(o|(k|0)!=0)){l=45846;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){m=2;break}c[wa>>2]=0;ii(Ba,wa)|0;m=c[wa>>2]|0;m=m>>>0<3?m&255:0}while(0);a[Da+84>>0]=m;n=c[p+4>>2]|0;c[n+4>>2]=c[p>>2];l=m&255;if(b[n+22>>1]&2){k=n+17|0;if(((l|0)!=0|0)!=(d[k>>0]|0)){za=2020;break b}}else k=n+17|0;a[k>>0]=(l|0)!=0&1;a[n+18>>0]=(l|0)==2&1;k=m+-1|0;if(k>>>0>=2){za=2020;break b}ya=c[Aa+108>>2]|0;za=ed(Aa,5,18400)|0;c[za+4>>2]=r;c[za+24>>2]=r;c[za+48>>2]=ya+4;c[za+84>>2]=r;c[za+92>>2]=k;k=1<<r;za=Aa+152|0;c[za>>2]=c[za>>2]|k;if($){za=2020;break b}if(!(a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0)){za=2020;break b}za=Aa+156|0;c[za>>2]=c[za>>2]|k;za=2020;break b}k=c[p+4>>2]|0;c[k+4>>2]=c[p>>2];if(!(a[k+17>>0]|0))n=0;else n=(a[k+18>>0]|0)==0?1:2;m=c[Aa>>2]|0;r:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=466;else za=486;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=467;break r}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=467;break r}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=466}while(0);if((za|0)==466){p=_d(m,8,0)|0;za=467}s:do if((za|0)==467){if(!p){za=486;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break s}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==486){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 16:{if(!((Ba|0)!=0?(ya=(ii(Ba,oa)|0)==0,u=c[oa>>2]|0,!(ya|(u|0)<1)):0)){c[oa>>2]=2147483647;u=2147483647}t=c[f+116>>2]|0;t=(t|0)==0?f:t;k=t+84|0;l=c[k>>2]|0;s=1<<r;t:do if((l&s|0)==0?(c[k>>2]=l|s,$):0){q=c[t>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(t,32157,T);c[t+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=535;break}else{k=Wa[c[29352>>2]&127](l)|0;za=535}while(0);do if((za|0)==535){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break t}while(0)}while(0);m=t+80|0;c[m>>2]=c[m>>2]|s;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=70;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=u;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,70,u,1,0)|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=59;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=r;c[za+(k*20|0)+8>>2]=0;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,59,r,0,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=0;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,0,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=83;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=-1;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,83,1,-1,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=47;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,47,1,k,0)|0;l=c[m>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=(c[Aa+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;break f}case 4:{if(Ba|0){c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;c[(c[aa+(r<<4)+12>>2]|0)+80>>2]=k;m=c[aa+(r<<4)+4>>2]|0;l=c[m+4>>2]|0;c[l+4>>2]=c[m>>2];l=c[(c[l>>2]|0)+212>>2]|0;c[l+16>>2]=k;m=c[7357]|0;n=c[l+44>>2]|0;if((k|0)<=-1){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(za|0,Aa|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[m&127](n,k);break f}n=c[(c[aa+(r<<4)+12>>2]|0)+80>>2]|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;u:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=577;else za=597;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=578;break u}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=578;break u}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=577}while(0);if((za|0)==577){p=_d(m,8,0)|0;za=578}v:do if((za|0)==578)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break v}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break v}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=597;while(0);do if((za|0)==597){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 5:{if(Ba|0){c[wa>>2]=1;do if(!(ii(Ba,wa)|0))k=c[wa>>2]|0;else{Aa=c[aa+(r<<4)+4>>2]|0;k=c[wa>>2]|0;m=c[Aa+4>>2]|0;c[m+4>>2]=c[Aa>>2];m=c[(c[m>>2]|0)+212>>2]|0;if(!k){k=0;break}if((k|0)<0){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;l=(c[m+28>>2]|0)+(c[m+24>>2]|0)|0;l=Wv(za|0,Aa|0,l|0,((l|0)<0)<<31>>31|0)|0;L()|0}else l=k;c[m+20>>2]=l}while(0);f=(Zm(Ba,1,(k|0)!=0&1)|0)<<24>>24==0;r=Da+32|0;za=r;xa=c[za>>2]|0;za=c[za+4>>2]|0;Aa=r;c[Aa>>2]=f?xa&-33:xa|32;c[Aa+4>>2]=f?za:za;do if(a[Da+79>>0]|0){k=c[Da+20>>2]|0;if((k|0)<=0)break;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break;else q=q+16|0}}while(0);break f}if(0==0?(c[Da+32>>2]&32|0)==0:0){n=0;o=0}else{k=c[aa+(r<<4)+4>>2]|0;l=c[k+4>>2]|0;c[l+4>>2]=c[k>>2];l=c[(c[l>>2]|0)+212>>2]|0;k=c[l+16>>2]|0;if((k|0)<=-1){ya=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;za=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(ya|0,za|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}o=c[l+20>>2]|0;o=(k|0)<(o|0)?o:k;n=o;o=((o|0)<0)<<31>>31}m=c[Aa>>2]|0;w:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=626;else za=646;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=627;break w}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=627;break w}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=626}while(0);if((za|0)==626){p=_d(m,8,0)|0;za=627}x:do if((za|0)==627){if(!p){za=646;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break x}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break x}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==646){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 25:{m=c[Aa>>2]|0;y:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=685;else za=705;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];za=m+284|0;c[za>>2]=(c[za>>2]|0)+1;za=686;break y}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];za=m+284|0;c[za>>2]=(c[za>>2]|0)+1;za=686;break y}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=685}while(0);if((za|0)==685){l=_d(m,8,0)|0;za=686}z:do if((za|0)==686)if(l){m=l;k=m;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=l;a[o>>0]=-14;l=p;break}else{Ei(Aa,n+(k*20|0)|0,l,-14);l=p;break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,l);l=p;break z}k=l;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[l>>2]=c[ya>>2];c[ya>>2]=l;l=p;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);l=p;break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);l=p;break}}else za=705;while(0);do if((za|0)==705){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}else m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 35:{if(Ba|0){l=a[Ba>>0]|0;do if((l+-48&255)<3)k=(l<<24>>24)+-48|0;else{n=d[208+(l&255)>>0]|0;k=n+-102|0;o=l<<24>>24==0;if(!(o|(k|0)!=0)){l=38150;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}if(!k){k=1;break}k=n+-109|0;if(!(o|(k|0)!=0)){l=36061;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}k=(k|0)==0?2:0}while(0);l=c[f>>2]|0;m=l+80|0;if((k|0)==(d[m>>0]|0))break f;n=l+16|0;o=c[(c[n>>2]|0)+20>>2]|0;A:do if(o|0){do if(a[l+79>>0]|0){if(a[o+8>>0]|0)break;ug(o);c[(c[n>>2]|0)+20>>2]=0;$b(l);break A}while(0);cd(f,45858,_);break f}while(0);a[m>>0]=k;break f}n=d[Da+80>>0]|0;m=c[Aa>>2]|0;B:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=727;else za=747;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=728;break B}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=728;break B}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=727}while(0);if((za|0)==727){p=_d(m,8,0)|0;za=728}C:do if((za|0)==728)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break C}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=747;while(0);do if((za|0)==747){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 36:{if(!Ba){l=c[14771]|0;if(!l)break f;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}do if(a[Ba>>0]|0){Aa=c[Da>>2]|0;Aa=(Za[c[Aa+32>>2]&127](Aa,Ba,1,wa)|0)!=0;if(Aa|(c[wa>>2]|0)==0){cd(f,45410,I);za=2020;break b}else break}while(0);D:do if((d[Da+80>>0]|0)<2){k=c[f>>2]|0;l=k+16|0;m=c[(c[l>>2]|0)+20>>2]|0;if(!m)break;do if(a[k+79>>0]|0){if(a[m+8>>0]|0)break;ug(m);c[(c[l>>2]|0)+20>>2]=0;$b(k);break D}while(0);cd(f,45858,K)}while(0);k=c[14771]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Aa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);if(!(a[Ba>>0]|0)){c[14771]=0;za=2020;break b}else{c[N>>2]=Ba;za=Bb(31408,N)|0;c[14771]=za;za=2020;break b}}case 33:{if(Ba|0){k=Da+79|0;if(!(a[k>>0]|0)){cd(f,45435,J);za=2020;break b}if($){za=2020;break b}Aa=(Zm(Ba,0,1)|0)+1&7;a[aa+(r<<4)+8>>0]=Aa<<24>>24==0?1:Aa;a[aa+(r<<4)+9>>0]=1;if(!(a[k>>0]|0)){za=2020;break b}k=c[Da+20>>2]|0;if((k|0)<=0){za=2020;break b}r=Da+32|0;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break f;else q=q+16|0}}n=(d[aa+(r<<4)+8>>0]|0)+-1|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;E:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=815;else za=835;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=816;break E}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=816;break E}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=815}while(0);if((za|0)==815){p=_d(m,8,0)|0;za=816}F:do if((za|0)==816)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break F}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=835;while(0);do if((za|0)==835){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 2:{if(Ba|0){l=4544+(j<<4)+8|0;k=c[l>>2]|0;l=c[l+4>>2]|0;m=Da+79|0;za=(a[m>>0]|0)==0;k=za?k&-16385:k;l=za?l:l;do if(!((Zm(Ba,1,0)|0)<<24>>24)){za=Da+32|0;xa=za;f=c[xa+4>>2]&~l;c[za>>2]=c[xa>>2]&~k;c[za+4>>2]=f;if(!((k|0)==524288&(l|0)==0))break;za=Da+472|0;c[za>>2]=0;c[za+4>>2]=0}else{za=Da+32|0;xa=za;f=c[xa+4>>2]|l;c[za>>2]=c[xa>>2]|k;c[za+4>>2]=f}while(0);k=Aa+108|0;l=c[k>>2]|0;if((c[Aa+112>>2]|0)>(l|0)){c[k>>2]=l+1;$=c[Aa+104>>2]|0;a[$+(l*20|0)>>0]=-98;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,158,0,0,0)|0;if(!(a[m>>0]|0)){za=2020;break b}k=c[Da+20>>2]|0;if((k|0)<=0){za=2020;break b}r=Da+32|0;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break f;else q=q+16|0}}za=a[4544+(j<<4)+7>>0]|0;n=za&255;za=za<<24>>24==0;Wi(Aa,za?1:n);if(za)if(!(a[(c[Aa>>2]|0)+81>>0]|0)){yc(c[Aa+116>>2]|0,c[s>>2]|0,-1,1,0)|0;o=Aa}else o=Aa;else{m=Aa+116|0;k=0;l=d[4544+(j<<4)+6>>0]|0;while(1){if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc((c[m>>2]|0)+(k*40|0)|0,c[5504+(l<<2)>>2]|0,-1,1,0)|0;k=k+1|0;if((k|0)==(n|0)){o=Aa;break}else l=l+1|0}}n=Da+32|0;m=4544+(j<<4)+8|0;n=(c[m>>2]&c[n>>2]|0?1:(c[m+4>>2]&c[n+4>>2]|0)!=0)&1;m=c[o>>2]|0;G:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=878;else za=898;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=879;break G}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=879;break G}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=878}while(0);if((za|0)==878){p=_d(m,8,0)|0;za=879}H:do if((za|0)==879){if(!p){za=898;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[o>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break H}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break H}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==898){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[o>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 34:{if(!Ba)break f;s=bd(f,2,Ba,la)|0;if(!s)break f;m=c[s+72>>2]|0;if(!m)n=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0)){n=k;break}else k=k+1|0}k=c[s+8>>2]|0;I:do if(!k)r=0;else while(1){ya=k+55|0;if(((d[ya>>0]|d[ya+1>>0]<<8)&3)==2){r=k;break I}k=c[k+20>>2]|0;if(!k){r=0;break}}while(0);c[xa>>2]=7;o=c[f+116>>2]|0;o=(o|0)==0?f:o;k=o+84|0;l=c[k>>2]|0;m=1<<n;J:do if(!(l&m)){c[k>>2]=l|m;if((n|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,X);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=951;break}else{k=Wa[c[29352>>2]&127](l)|0;za=951}while(0);do if((za|0)==951){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);ya=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((ya|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break J}while(0)}while(0);Sk(f,s)|0;i=s+42|0;l=b[i>>1]|0;if(l<<16>>16<=0)break f;m=c[s+4>>2]|0;t=4544+(j<<4)+8|0;u=r+4|0;if(!r){r=c[t>>2]|0;t=c[t+4>>2]|0;s=(r|0)==0&(t|0)==0;t=(r|0)==0&(t|0)==0?45496:45488;r=0;k=0;q=m;while(1){p=a[q+15>>0]|0;za=p&2;g=(za&255)>>>1&255;if(za<<24>>24!=0&s)k=k+1|0;else{n=c[q>>2]|0;if(!(p&4))m=59952;else m=n+(Eu(n)|0)+1|0;o=(a[q+12>>0]|0)!=0&1;l=c[q+4>>2]|0;if(!l)l=0;else l=c[l+8>>2]|0;c[ia>>2]=r-k;c[ia+4>>2]=n;c[ia+8>>2]=m;c[ia+12>>2]=o;c[ia+16>>2]=l;c[ia+20>>2]=p&1;c[ia+24>>2]=g;_m(Aa,1,t,ia);l=b[i>>1]|0}r=r+1|0;if((r|0)>=(l<<16>>16|0))break f;else q=q+16|0}}s=0;k=0;r=m;p=l<<16>>16;while(1){o=a[r+15>>0]|0;ya=o&2;q=(ya&255)>>>1&255;do if(!(ya<<24>>24))za=979;else{ya=t;if(!((c[ya>>2]|0)==0&(c[ya+4>>2]|0)==0)){za=979;break}k=k+1|0}while(0);if((za|0)==979){za=0;l=(o&1)==0;K:do if(l)l=(l^1)&1;else{if((p|0)<1){l=1;break}m=c[u>>2]|0;l=1;while(1){if((s|0)==(b[m+(l+-1<<1)>>1]|0))break K;n=l+1|0;if((l|0)<(p|0))l=n;else{l=n;break}}}while(0);p=t;p=(c[p>>2]|0)==0&(c[p+4>>2]|0)==0?45496:45488;g=c[r>>2]|0;if(!(o&4))n=59952;else n=g+(Eu(g)|0)+1|0;o=(a[r+12>>0]|0)!=0&1;m=c[r+4>>2]|0;if(!m)m=0;else m=c[m+8>>2]|0;c[ja>>2]=s-k;c[ja+4>>2]=g;c[ja+8>>2]=n;c[ja+12>>2]=o;c[ja+16>>2]=m;c[ja+20>>2]=l;c[ja+24>>2]=q;_m(Aa,1,p,ja);l=b[i>>1]|0}s=s+1|0;p=l<<16>>16;if((s|0)>=(p|0))break;else r=r+16|0}break}case 17:{if(!Ba)break f;i=hi(Da,Ba,la)|0;if(!i)break f;m=c[i+24>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}u=4544+(j<<4)+8|0;u=(c[u>>2]|0)==0&(c[u+4>>2]|0)==0;r=b[(u?i+50|0:i+52|0)>>1]|0;j=r&65535;c[xa>>2]=u?3:6;s=c[i+12>>2]|0;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<k;L:do if(!(m&n)){c[l>>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,Z);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1010;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1010}while(0);do if((za|0)==1010){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break L}while(0)}while(0);if(!(r<<16>>16))break f;t=i+4|0;q=s+4|0;r=Aa+108|0;s=Aa+112|0;o=i+28|0;p=i+32|0;n=i+50|0;g=Aa+104|0;if(u){m=0;do{za=b[(c[t>>2]|0)+(m<<1)>>1]|0;k=za<<16>>16;if(za<<16>>16<0)l=0;else l=c[(c[q>>2]|0)+(k<<4)>>2]|0;c[ea>>2]=m;c[ea+4>>2]=k;c[ea+8>>2]=l;_m(Aa,1,45503,ea);k=c[xa>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;za=c[g>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,k,0)|0;m=m+1|0}while((m|0)!=(j|0))}else{m=0;do{za=b[(c[t>>2]|0)+(m<<1)>>1]|0;k=za<<16>>16;if(za<<16>>16<0)l=0;else l=c[(c[q>>2]|0)+(k<<4)>>2]|0;c[fa>>2]=m;c[fa+4>>2]=k;c[fa+8>>2]=l;_m(Aa,1,45503,fa);l=c[(c[p>>2]|0)+(m<<2)>>2]|0;k=m>>>0<(e[n>>1]|0)>>>0&1;c[ga>>2]=d[(c[o>>2]|0)+m>>0];c[ga+4>>2]=l;c[ga+8>>2]=k;_m(Aa,4,45508,ga);k=c[xa>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;za=c[g>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,k,0)|0;m=m+1|0}while((m|0)!=(j|0))}break}case 18:{if(!Ba)break f;r=Sd(Da,Ba,la)|0;if(!r)break f;m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}c[xa>>2]=5;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<k;M:do if(!(m&n)){c[l>>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,V);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1059;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1059}while(0);do if((za|0)==1059){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break M}while(0)}while(0);k=c[r+8>>2]|0;if(!k)break f;l=0;while(1){xa=c[k>>2]|0;f=(a[k+54>>0]|0)!=0&1;ya=k+55|0;ya=c[30092+(((d[ya>>0]|d[ya+1>>0]<<8)&3)<<2)>>2]|0;za=(c[k+36>>2]|0)!=0&1;c[ba>>2]=l;c[ba+4>>2]=xa;c[ba+8>>2]=f;c[ba+12>>2]=ya;c[ba+16>>2]=za;_m(Aa,1,45517,ba);k=c[k+20>>2]|0;if(!k)break;else l=l+1|0}break}case 10:{c[xa>>2]=3;o=Da+20|0;k=c[o>>2]|0;if((k|0)<=0){za=2020;break b}n=0;while(1){l=c[ya>>2]|0;m=c[l+(n<<4)+4>>2]|0;if(m){l=c[l+(n<<4)>>2]|0;k=c[c[m+4>>2]>>2]|0;if(!(a[k+15>>0]|0))k=c[k+168>>2]|0;else k=59952;c[U>>2]=n;c[U+4>>2]=l;c[U+8>>2]=k;_m(Aa,1,45523,U);k=c[o>>2]|0}n=n+1|0;if((n|0)>=(k|0)){za=2020;break b}}}case 7:{c[xa>>2]=2;k=c[Da+388>>2]|0;if(!k){za=2020;break b}l=0;while(1){za=c[c[k+8>>2]>>2]|0;c[M>>2]=l;c[M+4>>2]=za;_m(Aa,1,45527,M);k=c[k>>2]|0;if(!k)break;else l=l+1|0}break}case 14:{if(!Ba)break f;r=Sd(Da,Ba,la)|0;if(!r)break f;s=c[r+16>>2]|0;if(!s)break f;m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}c[xa>>2]=8;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<k;N:do if(!(m&n)){c[l>>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,W);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1106;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1106}while(0);do if((za|0)==1106){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break N}while(0)}while(0);i=r+4|0;m=s;n=0;while(1){p=m+20|0;O:do if((c[p>>2]|0)>0){g=m+8|0;q=m+26|0;r=m+25|0;o=0;while(1){s=c[g>>2]|0;t=c[(c[i>>2]|0)+(c[m+36+(o<<3)>>2]<<4)>>2]|0;u=c[m+36+(o<<3)+4>>2]|0;switch(a[q>>0]|0){case 8:{k=45928;break}case 9:{k=45937;break}case 10:{k=45949;break}case 7:{k=45957;break}default:k=45966}switch(a[r>>0]|0){case 8:{l=45928;break}case 9:{l=45937;break}case 10:{l=45949;break}case 7:{l=45957;break}default:l=45966}c[da>>2]=n;c[da+4>>2]=o;c[da+8>>2]=s;c[da+12>>2]=t;c[da+16>>2]=u;c[da+20>>2]=k;c[da+24>>2]=l;c[da+28>>2]=45539;_m(Aa,1,45530,da);o=o+1|0;if((o|0)>=(c[p>>2]|0))break O}}while(0);m=c[m+4>>2]|0;if(!m)break;else n=n+1|0}break}case 13:{k=c[xa>>2]|0;J=k+1|0;K=k+5|0;M=k+6|0;c[xa>>2]=M;l=c[(c[(c[ya>>2]|0)+(r<<4)+12>>2]|0)+16>>2]|0;P:do if(l|0){C=(Ba|0)==0;D=f+116|0;E=Aa+108|0;F=Aa+112|0;G=Aa+104|0;H=f+40|0;I=f+56|0;h=k+2|0;w=k+3|0;x=Aa+12|0;y=Da+480|0;z=Da+304|0;A=Da+308|0;B=Da+300|0;k=l;do{if(C){v=c[k+8>>2]|0;k=c[k>>2]|0}else{v=bd(f,0,Ba,la)|0;k=0}do if(v|0){t=v+16|0;if(!(c[t>>2]|0))break;m=c[v+72>>2]|0;if(!m)s=-1e6;else{n=c[ya>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0)){s=l;break}else l=l+1|0}o=c[D>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<s;Q:do if(!(m&n)){c[l>>2]=m|n;if((s|0)!=1)break;r=c[o>>2]|0;l=r+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[r>>2]|0,0,r,wa,0,542)|0;if(m|0){cd(o,32157,na);c[o+12>>2]=m;break}ta=c[wa>>2]|0;c[(c[l>>2]|0)+20>>2]=ta;l=c[r+92>>2]|0;o=c[ta+4>>2]|0;c[o+4>>2]=c[ta>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;g=o+36|0;q=(c[p>>2]|0)-(c[g>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ta=(c[14820]|0)+1|0;c[14820]=ta;c[14821]=(ta|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;za=1159;break}else{l=Wa[c[29352>>2]&127](m)|0;za=1159}while(0);do if((za|0)==1159){za=0;c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ta=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ta=Se(c[o>>2]|0,p,q)|0;c[g>>2]=(c[p>>2]|0)-(q&65535);if((ta|0)!=7)break;l=r+81|0;do if(!(a[l>>0]|0)){if(a[r+82>>0]|0)break;a[l>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;l=r+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[r+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break Q}while(0)}while(0);Hj(f,s,c[v+28>>2]|0,0,c[v>>2]|0);l=M+(b[v+42>>1]|0)|0;if((l|0)>(c[xa>>2]|0)){c[xa>>2]=l;Gj(f,0,s,v,108)}else Gj(f,0,s,v,108);m=c[v>>2]|0;l=c[E>>2]|0;if((c[F>>2]|0)>(l|0)){c[E>>2]=l+1;ta=c[G>>2]|0;a[ta+(l*20|0)>>0]=110;b[ta+(l*20|0)+2>>1]=0;c[ta+(l*20|0)+4>>2]=0;c[ta+(l*20|0)+8>>2]=J;c[ta+(l*20|0)+12>>2]=0;c[ta+(l*20|0)+16>>2]=0;a[ta+(l*20|0)+1>>0]=0}else l=Di(Aa,110,0,J,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[E>>2]|0)+-1|0;Ei(Aa,(c[G>>2]|0)+(l*20|0)|0,m,0)}l=c[t>>2]|0;if(!l)l=1;else{p=l;l=1;do{m=Sd(Da,c[p+8>>2]|0,la)|0;R:do if(m|0){c[oa>>2]=0;Hj(f,s,c[m+28>>2]|0,0,c[m>>2]|0);if(Om(f,m,p,oa,0)|0)break P;o=c[oa>>2]|0;if(!o){Gj(f,l,s,m,108);break}m=c[o+44>>2]|0;n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=108;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=l;c[ta+(n*20|0)+8>>2]=m;c[ta+(n*20|0)+12>>2]=s;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0}else Di(Aa,108,l,m,s)|0;n=c[ua>>2]|0;o=Ij(f,o)|0;if(!o)break;m=c[n>>2]|0;if(!(a[m+81>>0]|0)){sa=c[n+104>>2]|0;ta=(c[n+108>>2]|0)+-1|0;a[sa+(ta*20|0)+1>>0]=-9;c[sa+(ta*20|0)+16>>2]=o;break}if(c[m+480>>2]|0)break;ta=(c[o>>2]|0)+-1|0;c[o>>2]=ta;if(ta|0)break;m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break R}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;ta=m+300|0;c[o>>2]=c[ta>>2];c[ta>>2]=o;break R}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ta=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);l=l+1|0;p=c[p+4>>2]|0}while((p|0)!=0)}if((c[H>>2]|0)<(l|0))c[H>>2]=l;l=c[E>>2]|0;if((c[F>>2]|0)>(l|0)){c[E>>2]=l+1;$=c[G>>2]|0;a[$+(l*20|0)>>0]=36;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0));j=l}else j=Di(Aa,36,0,0,0)|0;l=c[t>>2]|0;if(l|0){i=v+36|0;u=1;while(1){s=l+8|0;m=Sd(Da,c[s>>2]|0,la)|0;c[oa>>2]=0;c[va>>2]=0;p=(m|0)!=0;if(p)Om(f,m,l,oa,va)|0;t=c[I>>2]|0;r=t+-1|0;c[I>>2]=r;g=l+20|0;m=c[g>>2]|0;if((m|0)>0){o=0;do{n=c[va>>2]|0;m=o+M|0;Vj(Aa,v,0,c[((n|0)==0?l+36+(o<<3)|0:n+(o<<2)|0)>>2]|0,m);n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=50;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=m;c[ta+(n*20|0)+8>>2]=r;c[ta+(n*20|0)+12>>2]=0;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0}else Di(Aa,50,m,r,0)|0;o=o+1|0;m=c[g>>2]|0}while((o|0)<(m|0))}n=c[oa>>2]|0;do if(!n){if(!p)break;m=c[E>>2]|0;n=m+2|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=30;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=u;c[ta+(m*20|0)+8>>2]=n;c[ta+(m*20|0)+12>>2]=M;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,30,u,n,M)|0;m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=11;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=r;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,11,0,r,0)|0;break}}else{q=gl(Da,n)|0;g=c[g>>2]|0;n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=92;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=M;c[ta+(n*20|0)+8>>2]=m;c[ta+(n*20|0)+12>>2]=K;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0;m=n}else m=Di(Aa,92,M,m,K)|0;n=c[Aa>>2]|0;S:do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[E>>2]|0)+-1|0;n=c[G>>2]|0;o=n+(m*20|0)|0;do if((g|0)<=-1){p=n+(m*20|0)+1|0;if(a[p>>0]|0)break;if((g|0)==-3){c[n+(m*20|0)+16>>2]=q;a[p>>0]=-3;break S}if(!q)break S;c[n+(m*20|0)+16>>2]=q;a[p>>0]=g;if((g|0)!=-12)break S;ta=q+12|0;c[ta>>2]=(c[ta>>2]|0)+1;break S}while(0);Ei(Aa,o,q,g)}else{if((g|0)==-12)break;kg(n,g,q)}while(0);m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=29;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=u;c[ta+(m*20|0)+8>>2]=r;c[ta+(m*20|0)+12>>2]=K;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else m=Di(Aa,29,u,r,K)|0;if(a[(c[Aa>>2]|0)+81>>0]|0)break;ta=c[G>>2]|0;a[ta+(m*20|0)+1>>0]=-3;c[ta+(m*20|0)+16>>2]=0}while(0);m=c[E>>2]|0;n=(c[F>>2]|0)>(m|0);do if(!(c[i>>2]&32))if(n){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=-128;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=h;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,128,0,h,0)|0;break}else if(n){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=73;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=h;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,73,0,h,0)|0;break}while(0);c[ma>>2]=c[s>>2];c[ma+4>>2]=u+-1;_m(Aa,w,45544,ma);m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=81;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=J;c[ta+(m*20|0)+8>>2]=4;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,81,J,4,0)|0;n=c[x>>2]|0;m=0-t|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0)mk(n,Aa,m);else c[(c[n+64>>2]|0)+(m<<2)>>2]=c[E>>2];m=c[va>>2]|0;T:do if(m|0){if(c[y>>2]|0){Xd(Da,m);break}n=m;do if((c[z>>2]|0)>>>0<=n>>>0){if((c[A>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[B>>2];c[B>>2]=m;break T}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ta=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);l=c[l+4>>2]|0;if(!l)break;else u=u+1|0}}l=j+1|0;m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=5;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=l;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,5,0,l,0)|0;m=c[E>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[G>>2]|0)+(((j|0)<0?m+-1|0:j)*20|0)|0;else l=59308;c[l+8>>2]=m}while(0)}while((k|0)!=0)}while(0);break f}case 6:{if(!Ba)break f;l=(Zm(Ba,1,0)|0)<<24>>24!=0;Aa=l?45976:31415;Hd(Da,43614,2,1,Aa,105,0,0,0,0,0)|0;Hd(Da,43614,3,1,Aa,105,0,0,0,0,0)|0;Hd(Da,43609,2,1,31411,105,0,0,0,0,0)|0;Aa=Jd(Da,43609,2,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|12;Aa=Jd(Da,43609,3,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|12;l=l?12:4;Aa=Jd(Da,43614,2,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|l&255;Aa=Jd(Da,43614,3,1,0)|0;k=Aa+4|0;if(!Aa)break f;c[k>>2]=c[k>>2]|l&255;break f}case 19:{V=(a[Ca>>0]|32)<<24>>24==113;U=(c[h>>2]|0)==0?-1:r;c[xa>>2]=6;c[oa>>2]=100;if(Ba){ii(Ba,oa)|0;k=c[oa>>2]|0;if((k|0)<1){c[oa>>2]=100;S=100}else S=k}else S=100;k=S+-1|0;T=Aa+108|0;l=c[T>>2]|0;R=Aa+112|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[Aa+104>>2]|0;a[oa+(l*20|0)>>0]=70;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=k;c[oa+(l*20|0)+8>>2]=1;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,70,k,1,0)|0;z=Da+81|0;A=Da+20|0;U:do if((c[A>>2]|0)>0){B=(U|0)<0;C=f+116|0;D=Da+272|0;E=Da+276|0;F=Da+288|0;G=Da+300|0;H=Da+296|0;I=Da+284|0;h=f+19|0;J=f+28|0;K=Da+292|0;M=Aa+104|0;N=Da+32|0;O=f+56|0;P=Aa+12|0;Q=f+52|0;y=0;do{do if(B|(y|0)==(U|0)){n=c[C>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<<y;V:do if(!(l&m)){c[k>>2]=l|m;if((y|0)!=1)break;q=c[n>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[n+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(n,32157,qa);c[n+12>>2]=l;break}oa=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=oa;k=c[q+92>>2]|0;n=c[oa+4>>2]|0;c[n+4>>2]=c[oa>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;oa=(c[14820]|0)+1|0;c[14820]=oa;c[14821]=(oa|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1314;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1314}while(0);do if((za|0)==1314){za=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);oa=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((oa|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break V}while(0)}while(0);g=(c[(c[ya>>2]|0)+(y<<4)+12>>2]|0)+16|0;l=c[g>>2]|0;if(!l){m=0;k=0}else{m=0;k=0;do{n=c[l+8>>2]|0;k=((c[n+36>>2]|0)>>>5&1^1)+k|0;n=c[n+8>>2]|0;if(!n)o=0;else{o=0;do{k=k+1|0;o=o+1|0;n=c[n+20>>2]|0}while((n|0)!=0)}m=(o|0)>(m|0)?o:m;l=c[l>>2]|0}while((l|0)!=0)}l=(k<<2)+4|0;W:do if(c[D>>2]|0)if(!(a[z>>0]|0))za=1341;else break U;else{do if(0<0|(0==0?(e[E>>1]|0)>>>0<l>>>0:0))k=F;else{k=c[G>>2]|0;if(k|0){c[G>>2]=c[k>>2];c[I>>2]=(c[I>>2]|0)+1;p=k;break W}k=c[H>>2]|0;if(!k){k=K;break}c[H>>2]=c[k>>2];c[I>>2]=(c[I>>2]|0)+1;p=k;break W}while(0);c[k>>2]=(c[k>>2]|0)+1;za=1341}while(0);if((za|0)==1341){za=0;p=_d(Da,l,0)|0}if(!p)break U;k=c[g>>2]|0;if(!k)l=0;else{l=0;do{o=c[k+8>>2]|0;n=l+1|0;if(!(c[o+36>>2]&32)){c[p+(n<<2)>>2]=c[o+28>>2];l=n}n=c[o+8>>2]|0;if(n)do{l=l+1|0;c[p+(l<<2)>>2]=c[n+44>>2];n=c[n+20>>2]|0}while((n|0)!=0);k=c[k>>2]|0}while((k|0)!=0)}c[p>>2]=l;oa=c[xa>>2]|0;k=m+8|0;c[xa>>2]=(oa|0)>(k|0)?oa:k;a[h>>0]=0;c[J>>2]=0;k=c[T>>2]|0;if((c[R>>2]|0)>(k|0)){c[T>>2]=k+1;oa=c[M>>2]|0;a[oa+(k*20|0)>>0]=-109;b[oa+(k*20|0)+2>>1]=0;c[oa+(k*20|0)+4>>2]=2;c[oa+(k*20|0)+8>>2]=l;c[oa+(k*20|0)+12>>2]=1;c[oa+(k*20|0)+16>>2]=0;a[oa+(k*20|0)+1>>0]=0}else k=Di(Aa,147,2,l,1)|0;l=c[Aa>>2]|0;X:do if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[T>>2]|0)+-1|0;l=c[M>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=p;a[m>>0]=-15;break}else{Ei(Aa,l+(k*20|0)|0,p,-15);break}}else{do if(l|0){if(c[l+480>>2]|0){Xd(l,p);break X}k=p;if((c[l+304>>2]|0)>>>0>k>>>0)break;if((c[l+308>>2]|0)>>>0<=k>>>0)break;oa=l+300|0;c[p>>2]=c[oa>>2];c[oa>>2]=p;break X}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{oa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);k=c[T>>2]|0;if((k|0)>0)b[(c[M>>2]|0)+((k+-1|0)*20|0)+2>>1]=y&255;if((c[R>>2]|0)>(k|0)){c[T>>2]=k+1;oa=c[M>>2]|0;a[oa+(k*20|0)>>0]=50;b[oa+(k*20|0)+2>>1]=0;c[oa+(k*20|0)+4>>2]=2;c[oa+(k*20|0)+8>>2]=0;c[oa+(k*20|0)+12>>2]=0;c[oa+(k*20|0)+16>>2]=0;a[oa+(k*20|0)+1>>0]=0}else k=Di(Aa,50,2,0,0)|0;c[ra>>2]=c[(c[ya>>2]|0)+(y<<4)>>2];o=dd(Da,45548,ra)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=110;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=0;c[oa+(l*20|0)+8>>2]=3;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else l=Di(Aa,110,0,3,0)|0;m=c[Aa>>2]|0;Y:do if(a[m+81>>0]|0){if(!o)break;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break Y}l=o;if((c[m+304>>2]|0)>>>0>l>>>0)break;if((c[m+308>>2]|0)>>>0<=l>>>0)break;oa=m+300|0;c[o>>2]=c[oa>>2];c[oa>>2]=o;break Y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{oa=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else{if((l|0)<0)l=(c[T>>2]|0)+-1|0;m=c[M>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(Aa,m+(l*20|0)|0,o,-7);break}if(!o)break;c[m+(l*20|0)+16>>2]=o;a[n>>0]=-7}while(0);l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=105;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=2;c[oa+(l*20|0)+8>>2]=3;c[oa+(l*20|0)+12>>2]=3;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,105,2,3,3)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=81;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=3;c[oa+(l*20|0)+8>>2]=1;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;l=c[T>>2]|0;m=l+2|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=47;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=1;c[oa+(l*20|0)+8>>2]=m;c[oa+(l*20|0)+12>>2]=1;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,47,1,m,1)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;$=c[M>>2]|0;a[$+(l*20|0)>>0]=69;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;l=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=(c[M>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;k=c[g>>2]|0;if(!k)break;do{u=c[k+8>>2]|0;do if((c[u+28>>2]|0)>=1){Z:do if(!(c[u+36>>2]&32))l=0;else{l=c[u+8>>2]|0;if(!l){l=0;break}while(1){oa=l+55|0;if(((d[oa>>0]|d[oa+1>>0]<<8)&3)==2)break Z;l=c[l+20>>2]|0;if(!l){l=0;break}}}while(0);Hm(f,u,108,0,1,0,wa,va)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=70;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=7;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,70,0,7,0)|0;x=u+8|0;m=c[x>>2]|0;if(m|0){n=0;while(1){o=n+8|0;p=c[T>>2]|0;if((c[R>>2]|0)>(p|0)){c[T>>2]=p+1;oa=c[M>>2]|0;a[oa+(p*20|0)>>0]=70;b[oa+(p*20|0)+2>>1]=0;c[oa+(p*20|0)+4>>2]=0;c[oa+(p*20|0)+8>>2]=o;c[oa+(p*20|0)+12>>2]=0;c[oa+(p*20|0)+16>>2]=0;a[oa+(p*20|0)+1>>0]=0}else Di(Aa,70,0,o,0)|0;m=c[m+20>>2]|0;if(!m)break;else n=n+1|0}}m=c[wa>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=36;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=m;c[oa+(n*20|0)+8>>2]=0;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,36,m,0,0)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;w=c[M>>2]|0;a[w+(m*20|0)>>0]=83;b[w+(m*20|0)+2>>1]=0;c[w+(m*20|0)+4>>2]=7;c[w+(m*20|0)+8>>2]=1;c[w+(m*20|0)+12>>2]=0;c[w+(m*20|0)+16>>2]=0;a[w+(m*20|0)+1>>0]=0;w=m}else w=Di(Aa,83,7,1,0)|0;do if(V)p=u+42|0;else{m=c[wa>>2]|0;p=u+42|0;n=(b[p>>1]|0)+-1|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=90;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=m;c[oa+(o*20|0)+8>>2]=n;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,90,m,n,3)|0;m=c[T>>2]|0;if((m|0)<=0)break;b[(c[M>>2]|0)+((m+-1|0)*20|0)+2>>1]=128}while(0);m=b[p>>1]|0;if(m<<16>>16>0){s=u+40|0;t=u+4|0;r=0;do{do if((r|0)!=(b[s>>1]|0)){if(!(a[(c[t>>2]|0)+(r<<4)+12>>0]|0))break;Vj(Aa,u,c[wa>>2]|0,r,3);m=c[T>>2]|0;if((m|0)>0)b[(c[M>>2]|0)+((m+-1|0)*20|0)+2>>1]=128;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=51;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=3;c[oa+(m*20|0)+8>>2]=0;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,51,3,0,0)|0;q=c[(c[t>>2]|0)+(r<<4)>>2]|0;c[sa>>2]=c[u>>2];c[sa+4>>2]=q;q=dd(Da,45572,sa)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,3,0)|0;o=c[Aa>>2]|0;_:do if(a[o+81>>0]|0){if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break _}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;oa=o+300|0;c[q>>2]=c[oa>>2];c[oa>>2]=q;break _}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{oa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else{if((n|0)<0)n=(c[T>>2]|0)+-1|0;o=c[M>>2]|0;g=o+(n*20|0)+1|0;if(a[g>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[g>>0]=-7}while(0);n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=81;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=3;c[oa+(n*20|0)+8>>2]=1;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;n=c[T>>2]|0;o=n+2|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=47;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=1;c[oa+(n*20|0)+8>>2]=o;c[oa+(n*20|0)+12>>2]=1;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,47,1,o,1)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;$=c[M>>2]|0;a[$+(n*20|0)>>0]=69;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;n=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))m=(c[M>>2]|0)+(((m|0)<0?n+-1|0:m)*20|0)|0;else m=59308;c[m+8>>2]=n;m=b[p>>1]|0}while(0);r=r+1|0}while((r|0)<(m<<16>>16|0))}m=c[u+24>>2]|0;$:do if(m|0){if(!((c[N>>2]&512|0)==0&0==0))break;q=gk(Da,m,0)|0;do if(!(a[z>>0]|0)){g=c[O>>2]|0;n=g+-1|0;o=g+-2|0;c[O>>2]=o;c[Q>>2]=(c[wa>>2]|0)+1;m=c[q>>2]|0;if((m|0)>1)do{oa=m;m=m+-1|0;Tj(f,c[q+4+(m*20|0)>>2]|0,n,0)}while((oa|0)>2);tk(f,c[q+4>>2]|0,o,16);m=c[P>>2]|0;n=0-g|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Aa,n);else c[(c[m+64>>2]|0)+(n<<2)>>2]=c[T>>2];c[Q>>2]=0;c[ta>>2]=c[u>>2];p=dd(Da,45592,ta)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=110;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=3;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,110,0,3,0)|0;n=c[Aa>>2]|0;aa:do if(a[n+81>>0]|0){if(!p)break;do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break aa}m=p;if((c[n+304>>2]|0)>>>0>m>>>0)break;if((c[n+308>>2]|0)>>>0<=m>>>0)break;oa=n+300|0;c[p>>2]=c[oa>>2];c[oa>>2]=p;break aa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{oa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else{if((m|0)<0)m=(c[T>>2]|0)+-1|0;n=c[M>>2]|0;o=n+(m*20|0)+1|0;if(a[o>>0]|0){Ei(Aa,n+(m*20|0)|0,p,-7);break}if(!p)break;c[n+(m*20|0)+16>>2]=p;a[o>>0]=-7}while(0);m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=81;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=3;c[oa+(m*20|0)+8>>2]=1;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;m=c[T>>2]|0;n=m+2|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=47;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=1;c[oa+(m*20|0)+8>>2]=n;c[oa+(m*20|0)+12>>2]=1;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,47,1,n,1)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;$=c[M>>2]|0;a[$+(m*20|0)>>0]=69;$=$+(m*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;n=c[P>>2]|0;m=1-g|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0){mk(n,Aa,m);break}else{c[(c[n+64>>2]|0)+(m<<2)>>2]=c[T>>2];break}}else if(!q)break $;while(0);ri(Da,q)}while(0);if(V){l=c[wa>>2]|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=5;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=l;c[oa+(m*20|0)+8>>2]=w;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,5,l,w,0)|0;m=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[M>>2]|0)+((((w|0)<1?m:w)+-1|0)*20|0)|0;else l=59308;c[l+8>>2]=m;break}m=c[x>>2]|0;if(m|0){v=u+4|0;n=-1;o=0;j=0;while(1){g=(c[O>>2]|0)+-1|0;c[O>>2]=g;do if((l|0)!=(m|0)){i=el(f,m,c[wa>>2]|0,0,0,pa,o,n)|0;n=j+8|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=83;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=1;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,83,n,1,0)|0;n=(c[va>>2]|0)+j|0;p=e[m+52>>1]|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=29;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=g;c[oa+(o*20|0)+12>>2]=i;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0;g=o}else g=Di(Aa,29,n,g,i)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){oa=c[M>>2]|0;a[oa+(g*20|0)+1>>0]=-3;c[oa+(g*20|0)+16>>2]=p}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,3,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,45622,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=7;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,7,3,3)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,45627,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=4;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,4,3,3)|0;p=c[m>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)o=(c[T>>2]|0)+-1|0;else o=n;Ei(Aa,(c[M>>2]|0)+(o*20|0)|0,p,0)}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=105;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=4;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,105,4,3,3)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=81;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=3;c[oa+(o*20|0)+8>>2]=1;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;o=c[T>>2]|0;p=o+2|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;u=c[M>>2]|0;a[u+(o*20|0)>>0]=47;b[u+(o*20|0)+2>>1]=0;c[u+(o*20|0)+4>>2]=1;c[u+(o*20|0)+8>>2]=p;c[u+(o*20|0)+12>>2]=1;c[u+(o*20|0)+16>>2]=0;a[u+(o*20|0)+1>>0]=0;u=o}else u=Di(Aa,47,1,p,1)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;$=c[M>>2]|0;a[$+(o*20|0)>>0]=69;$=$+(o*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;p=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))o=(c[M>>2]|0)+(((g|0)<0?p+-1|0:g)*20|0)|0;else o=59308;c[o+8>>2]=p;do if(a[m+54>>0]|0){t=c[O>>2]|0;s=t+-1|0;c[O>>2]=s;r=m+50|0;if(b[r>>1]|0){p=m+4|0;o=0;do{oa=b[(c[p>>2]|0)+(o<<1)>>1]|0;if(!(oa<<16>>16>-1?(a[(c[v>>2]|0)+(oa<<16>>16<<4)+12>>0]|0)!=0:0))za=1581;do if((za|0)==1581){za=0;g=o+i|0;q=c[T>>2]|0;if((c[R>>2]|0)>(q|0)){c[T>>2]=q+1;oa=c[M>>2]|0;a[oa+(q*20|0)>>0]=50;b[oa+(q*20|0)+2>>1]=0;c[oa+(q*20|0)+4>>2]=g;c[oa+(q*20|0)+8>>2]=s;c[oa+(q*20|0)+12>>2]=0;c[oa+(q*20|0)+16>>2]=0;a[oa+(q*20|0)+1>>0]=0;break}else{Di(Aa,50,g,s,0)|0;break}}while(0);o=o+1|0}while(o>>>0<(e[r>>1]|0)>>>0);p=c[T>>2]|0}o=(c[va>>2]|0)+j|0;if((c[R>>2]|0)>(p|0)){c[T>>2]=p+1;oa=c[M>>2]|0;a[oa+(p*20|0)>>0]=5;b[oa+(p*20|0)+2>>1]=0;c[oa+(p*20|0)+4>>2]=o;c[oa+(p*20|0)+8>>2]=0;c[oa+(p*20|0)+12>>2]=0;c[oa+(p*20|0)+16>>2]=0;a[oa+(p*20|0)+1>>0]=0}else p=Di(Aa,5,o,0,0)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=11;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=s;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,11,0,s,0)|0;o=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))p=(c[M>>2]|0)+(((p|0)<0?o+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=o;p=(c[va>>2]|0)+j|0;g=e[r>>1]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=38;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=p;c[oa+(o*20|0)+8>>2]=s;c[oa+(o*20|0)+12>>2]=i;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,38,p,s,i)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){oa=c[M>>2]|0;a[oa+(o*20|0)+1>>0]=-3;c[oa+(o*20|0)+16>>2]=g}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=110;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,110,0,3,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(o*20|0)|0,45648,0)}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=11;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=n;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,11,0,n,0)|0;o=c[P>>2]|0;n=0-t|0;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,Aa,n);break}else{c[(c[o+64>>2]|0)+(n<<2)>>2]=c[T>>2];break}}while(0);o=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+(((u|0)<0?o+-1|0:u)*20|0)|0;else n=59308;c[n+8>>2]=o;n=c[pa>>2]|0;if(!n){n=i;o=m;break}o=c[ua>>2]|0;p=c[o+12>>2]|0;n=~n;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0){mk(p,o,n);n=i;o=m;break}else{c[(c[p+64>>2]|0)+(n<<2)>>2]=c[o+108>>2];n=i;o=m;break}}while(0);m=c[m+20>>2]|0;if(!m)break;else j=j+1|0}}m=c[wa>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=5;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=m;c[oa+(n*20|0)+8>>2]=w;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,5,m,w,0)|0;m=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+((((w|0)<1?m:w)+-1|0)*20|0)|0;else n=59308;c[n+8>>2]=m;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=110;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=2;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,110,0,2,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(m*20|0)|0,45675,0)}m=c[x>>2]|0;if(!m)break;g=0;while(1){if((l|0)!=(m|0)){n=(c[va>>2]|0)+g|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=93;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,93,n,3,0)|0;n=g+8|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=53;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=0;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,53,n,0,3)|0;n=c[T>>2]|0;if((n|0)>0)b[(c[M>>2]|0)+((n+-1|0)*20|0)+2>>1]=144;p=c[m>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,p,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=4;c[oa+(n*20|0)+8>>2]=2;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,4,2,3)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=81;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=3;c[oa+(n*20|0)+8>>2]=1;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;n=c[T>>2]|0;p=n+2|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=47;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=1;c[oa+(n*20|0)+8>>2]=p;c[oa+(n*20|0)+12>>2]=1;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,47,1,p,1)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;$=c[M>>2]|0;a[$+(n*20|0)>>0]=69;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;p=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+(((o|0)<0?p+-1|0:o)*20|0)|0;else n=59308;c[n+8>>2]=p}m=c[m+20>>2]|0;if(!m)break;else g=g+1|0}}while(0);k=c[k>>2]|0}while((k|0)!=0)}while(0);y=y+1|0}while((y|0)<(c[A>>2]|0))}while(0);k=ed(Aa,7,18432)|0;if(k|0){c[k+8>>2]=1-S;a[k+41>>0]=-1;c[k+56>>2]=45704;a[k+101>>0]=-1;c[k+116>>2]=50394}if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=c[Aa+104>>2]|0;else k=59308;c[k+12>>2]=(c[T>>2]|0)+-2;za=2020;break b}case 12:{if(!Ba){m=c[f>>2]|0;ba:do if(!(a[m+165>>0]|0)){n=f+4|0;o=m+24|0;p=(c[o>>2]&1|0)==0;g=m+16|0;ya=c[(c[g>>2]|0)+12>>2]|0;a[m+78>>0]=a[ya+77>>0]|0;if((b[ya+78>>1]&1)==0?(P=eh(m,0,n,0)|0,(P|0)!=0):0)k=P;else za=1682;ca:do if((za|0)==1682){k=c[m+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[g>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(R=eh(m,k,n,0)|0,R|0):0){k=R;break ca}}while((l|0)>2);if(p)c[o>>2]=c[o>>2]&-2;if(!(a[m+89>>0]|0))break ba;c[o>>2]=c[o>>2]|16;break ba}while(0);c[f+12>>2]=k;Aa=f+36|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break f}while(0);za=a[(c[f>>2]|0)+78>>0]|0;l=c[18464+((za&255)<<3)>>2]|0;if(za<<24>>24==8)break f;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}o=c[(c[ya>>2]|0)+12>>2]|0;if((b[o+78>>1]&5)==1){za=2020;break b}k=a[Ba>>0]|0;da:do if(k<<24>>24){k=(d[208+(k&255)>>0]|0)+-117|0;n=(k|0)==0;if(n){l=45707;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}do if(k){if(!n)break da;k=45712;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18472;break}k=45718;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18480;break}k=45727;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18488;break}k=45736;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18496;break}k=45744;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18504;break}k=45752;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18512;break}k=45759;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m)k=18520;else break da}else k=18464;while(0);za=a[k+4>>0]|0;za=za<<24>>24==0?2:za;a[Da+78>>0]=za;a[o+77>>0]=za;za=2020;break b}while(0);c[ca>>2]=Ba;cd(f,45765,ca);break f}case 0:{k=c[4544+(j<<4)+8>>2]|0;l=1<<r;za=Aa+152|0;c[za>>2]=c[za>>2]|l;if(!$?a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0:0){za=Aa+156|0;c[za>>2]=c[za>>2]|l}ea:do if(Ba|0){switch(o|0){case 24:case 25:case 42:case 43:break ea;default:{}}Aa=ed(Aa,2,45790)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+28>>2]=k;c[wa>>2]=0;ii(Ba,wa)|0;c[Aa+32>>2]=c[wa>>2];break f}while(0);Aa=ed(Aa,3,45798)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+32>>2]=k;Aa=(d[F>>0]|d[F+1>>0]<<8)&-65;a[F>>0]=Aa;a[F+1>>0]=Aa>>8;break f}case 8:{c[xa>>2]=1;n=Aa+108|0;o=Aa+112|0;p=Aa+104|0;m=0;do{l=c[26464+(m<<2)>>2]|0;m=m+1|0;k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[p>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[p>>2]|0)+(k*20|0)|0,l,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[p>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0}while((m|0)!=7);Aa=(d[F>>0]|d[F+1>>0]<<8)&-65;a[F>>0]=Aa;a[F+1>>0]=Aa>>8;break f}case 39:{p=(c[h>>2]|0)==0?10:r;do if(Ba){o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-102|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45810;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)l=1;else{k=n+-114|0;if(!(o|(k|0)!=0)){l=45815;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){l=2;break}k=n+-116|0;if(!(o|(k|0)!=0)){l=36052;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}l=(k|0)==0?3:0}}else l=0;while(0);c[xa>>2]=3;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=6;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=p;c[za+(k*20|0)+8>>2]=l;c[za+(k*20|0)+12>>2]=1;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,6,p,l,1)|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=3;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,3,0)|0;break f}}case 38:{if(!Ba)k=c[Da+240>>2]|0;else{c[wa>>2]=0;ii(Ba,wa)|0;za=c[wa>>2]|0;ya=(za|0)>0;k=ya?76:0;c[Da+240>>2]=k;c[Da+244>>2]=ya?za:0}if((k|0)==76){o=c[Da+244>>2]|0;n=o;o=((o|0)<0)<<31>>31}else{n=0;o=0}m=c[Aa>>2]|0;fa:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1767;else za=1787;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1768;break fa}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1768;break fa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1767}while(0);if((za|0)==1767){p=_d(m,8,0)|0;za=1768}ga:do if((za|0)==1768){if(!p){za=1787;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break ga}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==1787){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 31:{o=Da+20|0;m=c[o>>2]|0;if((m|0)<=0){za=2020;break b}n=c[ya>>2]|0;k=0;do{l=c[n+(k<<4)+4>>2]|0;if(l|0)c[(c[l+4>>2]|0)+4>>2]=c[l>>2];k=k+1|0}while((k|0)!=(m|0));k=0;while(1){l=c[n+(k<<4)+4>>2]|0;if(!l)l=m;else{ab[c[29456>>2]&127](c[(c[(c[c[l+4>>2]>>2]|0)+212>>2]|0)+44>>2]|0);l=c[o>>2]|0}k=k+1|0;if((k|0)>=(l|0)){za=2020;break b}n=c[ya>>2]|0;m=l}}case 27:{if(Ba){c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;if(!(k&2))break f}else k=65534;wa=f+40|0;w=c[wa>>2]|0;c[wa>>2]=w+1;if(!la)j=(c[Da+20>>2]|0)+-1|0;else j=r;if((r|0)>(j|0)){m=Aa+108|0;k=Aa+112|0}else{v=f+116|0;t=k&1;s=(t|0)==0;m=Aa+108|0;t=t|2;k=Aa+112|0;u=f+19|0;i=Aa+104|0;while(1){do if((r|0)!=1){l=c[v>>2]|0;l=((l|0)==0?f:l)+84|0;n=c[l>>2]|0;o=1<<r;if(!(n&o))c[l>>2]=n|o;l=c[(c[(c[ya>>2]|0)+(r<<4)+12>>2]|0)+16>>2]|0;if(!l)break;do{q=c[l+8>>2]|0;ha:do if(c[q+36>>2]&256|0){g=(e[q+44>>1]|0)+46|0;o=g&65535;n=c[q+8>>2]|0;ia:do if(!n)za=1825;else while(1){wa=n+55|0;if(!((d[wa>>0]|d[wa+1>>0]<<8)&128))break ia;n=c[n+20>>2]|0;if(!n){za=1825;break}}while(0);do if((za|0)==1825){za=0;if(!(o<<16>>16))break;Gj(f,w,r,q,108);o=c[m>>2]|0;p=o+t|0;n=g<<16>>16;if((c[k>>2]|0)>(o|0)){c[m>>2]=o+1;wa=c[i>>2]|0;a[wa+(o*20|0)>>0]=33;b[wa+(o*20|0)+2>>1]=0;c[wa+(o*20|0)+4>>2]=w;c[wa+(o*20|0)+8>>2]=p;c[wa+(o*20|0)+12>>2]=n;c[wa+(o*20|0)+16>>2]=0;a[wa+(o*20|0)+1>>0]=0;break}else{Di(Aa,33,w,p,n)|0;break}}while(0);q=c[q>>2]|0;c[ha>>2]=c[(c[ya>>2]|0)+(r<<4)>>2];c[ha+4>>2]=q;q=dd(Da,45823,ha)|0;if(s){n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;$=c[i>>2]|0;a[$+(n*20|0)>>0]=-116;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else n=Di(Aa,140,0,0,0)|0;o=c[Aa>>2]|0;if(!(a[o+81>>0]|0)){if((n|0)<0)n=(c[m>>2]|0)+-1|0;o=c[i>>2]|0;p=o+(n*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[p>>0]=-7;break}if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break ha}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;wa=o+300|0;c[q>>2]=c[wa>>2];c[wa>>2]=q;break ha}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{wa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}n=a[u>>0]|0;if(!(n<<24>>24)){g=(c[xa>>2]|0)+1|0;c[xa>>2]=g}else{g=n+-1<<24>>24;a[u>>0]=g;g=c[f+148+((g&255)<<2)>>2]|0}n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;wa=c[i>>2]|0;a[wa+(n*20|0)>>0]=110;b[wa+(n*20|0)+2>>1]=0;c[wa+(n*20|0)+4>>2]=0;c[wa+(n*20|0)+8>>2]=g;c[wa+(n*20|0)+12>>2]=0;c[wa+(n*20|0)+16>>2]=0;a[wa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,g,0)|0;o=c[Aa>>2]|0;ja:do if(a[o+81>>0]|0){if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break ja}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;wa=o+300|0;c[q>>2]=c[wa>>2];c[wa>>2]=q;break ja}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{wa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else{if((n|0)<0)n=(c[m>>2]|0)+-1|0;o=c[i>>2]|0;p=o+(n*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[p>>0]=-7}while(0);n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;wa=c[i>>2]|0;a[wa+(n*20|0)>>0]=81;b[wa+(n*20|0)+2>>1]=0;c[wa+(n*20|0)+4>>2]=g;c[wa+(n*20|0)+8>>2]=1;c[wa+(n*20|0)+12>>2]=0;c[wa+(n*20|0)+16>>2]=0;a[wa+(n*20|0)+1>>0]=0;break}else{Di(Aa,81,g,1,0)|0;break}}while(0);l=c[l>>2]|0}while((l|0)!=0)}while(0);if((r|0)<(j|0))r=r+1|0;else break}}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;$=c[Aa+104>>2]|0;a[$+(l*20|0)>>0]=-98;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0));break f}else{Di(Aa,158,0,0,0)|0;break f}}case 32:{if((Ba|0?(Vd(Ba,wa)|0)==0:0)?(H=wa,G=c[H>>2]|0,H=c[H+4>>2]|0,!((H|0)<0|(mb()|0)!=0)):0){za=59064;c[za>>2]=G;c[za+4>>2]=H;c[14768]=((G|0)!=0|(H|0)!=0)&((H|0)<0|(H|0)==0&G>>>0<=(c[14978]|0)>>>0)&1}m=(mb()|0)==0;o=59064;n=m?c[o>>2]|0:-1;o=m?c[o+4>>2]|0:-1;m=c[Aa>>2]|0;ka:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1942;else za=1962;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1943;break ka}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1943;break ka}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1942}while(0);if((za|0)==1942){p=_d(m,8,0)|0;za=1943}la:do if((za|0)==1943)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break la}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break la}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=1962;while(0);do if((za|0)==1962){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;break f}case 37:{if(Ba|0?(f=(Vd(Ba,wa)|0)==0,za=wa,ya=c[za+4>>2]|0,f&((ya|0)>-1|(ya|0)==-1&(c[za>>2]|0)>>>0>4294967295)):0)c[Da+152>>2]=0;n=c[Da+152>>2]|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;ma:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1987;else za=2007;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1988;break ma}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1988;break ma}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1987}while(0);if((za|0)==1987){p=_d(m,8,0)|0;za=1988}na:do if((za|0)==1988)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break na}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break na}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=2007;while(0);do if((za|0)==2007){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;za=2020;break b}default:{if(!Ba)k=c[Da+448>>2]|0;else{c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;l=Da+396|0;if((k|0)>0){c[l>>2]=91;c[Da+400>>2]=Da;c[t>>2]=0;a[Da+408>>0]=1}else{c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;a[l+12>>0]=0;k=0}c[Da+448>>2]=k}o=((k|0)<0)<<31>>31;n=c[Aa>>2]|0;oa:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))za=1897;else za=1917;else{do if((e[n+276>>1]|0)>=8){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];za=n+284|0;c[za>>2]=(c[za>>2]|0)+1;za=1898;break oa}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];za=n+284|0;c[za>>2]=(c[za>>2]|0)+1;za=1898;break oa}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;za=1897}while(0);if((za|0)==1897){m=_d(n,8,0)|0;za=1898}pa:do if((za|0)==1898)if(m){p=m;l=p;a[l>>0]=k;a[l+1>>0]=k>>8;a[l+2>>0]=k>>16;a[l+3>>0]=k>>24;p=p+4|0;a[p>>0]=o;a[p+1>>0]=o>>8;a[p+2>>0]=o>>16;a[p+3>>0]=o>>24;p=Aa+108|0;k=c[p>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[p>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[p>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=m;a[o>>0]=-14;m=p;break}else{Ei(Aa,n+(k*20|0)|0,m,-14);m=p;break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,m);m=p;break pa}k=m;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[m>>2]=c[ya>>2];c[ya>>2]=m;m=p;break pa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);m=p;break}else{ya=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);m=p;break}}else za=1917;while(0);do if((za|0)==1917){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}}while(0)}while(0);if(!Da){za=2025;break b}else{za=2020;break b}}else k=1;while(0);za=f+36|0;c[za>>2]=(c[za>>2]|0)+1;c[f+12>>2]=k;za=2020}while(0);do if((za|0)==2020){if(c[Da+480>>2]|0){Xd(Da,Ca);break}Aa=Ca;if((c[Da+304>>2]|0)>>>0<=Aa>>>0?(c[Da+308>>2]|0)>>>0>Aa>>>0:0){Aa=Da+300|0;c[Ca>>2]=c[Aa>>2];c[Aa>>2]=Ca}else za=2025}while(0);do if((za|0)==2025)if(!(c[7324]|0)){ab[c[29344>>2]&127](Ca);break}else{Aa=Wa[c[29352>>2]&127](Ca)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Ca);break}while(0);if(!Ba){Ra=Ea;return}if(Da|0){if(c[Da+480>>2]|0){Xd(Da,Ba);Ra=Ea;return}Ca=Ba;if((c[Da+304>>2]|0)>>>0<=Ca>>>0?(c[Da+308>>2]|0)>>>0>Ca>>>0:0){Da=Da+300|0;c[Ba>>2]=c[Da>>2];c[Da>>2]=Ba;Ra=Ea;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](Ba);Ra=Ea;return}else{Da=Wa[c[29352>>2]&127](Ba)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Ba);Ra=Ea;return}}
- function Or(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,ob=0,qb=0,rb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0;Nb=Ra;Ra=Ra+256|0;Jb=Nb+232|0;Hb=Nb+224|0;Gb=Nb+216|0;Fb=Nb+208|0;Eb=Nb+200|0;Db=Nb+192|0;Cb=Nb+184|0;Ab=Nb+176|0;zb=Nb+168|0;yb=Nb+160|0;xb=Nb+152|0;vb=Nb+144|0;ub=Nb+136|0;tb=Nb+128|0;Ib=Nb+120|0;wb=Nb+112|0;l=Nb+104|0;Kb=Nb+56|0;lb=Nb+244|0;ob=Nb+8|0;qb=Nb;rb=Nb+240|0;if(mb()|0){Mb=7;Ra=Nb;return Mb|0}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](640)|0;if(!i){Mb=7;Ra=Nb;return Mb|0}else Lb=i}else{i=Wa[c[29356>>2]&127](640)|0;if((c[14985]|0)>>>0<640)c[14985]=640;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){Lb=c[14978]|0;jb=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;ib=L()|0;c[14768]=((ib|0)<0|(ib|0)==0&jb>>>0<=Lb>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(!j){Mb=7;Ra=Nb;return Mb|0}i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;Lb=j}else Lb=j}ib=Lb+568|0;jb=Lb+584|0;k=f+144|0;i=c[k>>2]|0;c[Kb>>2]=i;do if(!i){i=c[f+20>>2]|0;c[l>>2]=c[f+16>>2];c[l+4>>2]=i;i=Bb(52411,l)|0;if(!i){j=7;i=0;break}j=qd(c[f+12>>2]|0,i,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{hb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-hb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[Kb>>2]|0;c[k>>2]=i;if(!j){m=i;M=21}else i=0}else{m=i;M=21}while(0);do if((M|0)==21){o=m;do if(!(Vc(o,1)|0)){i=c[o+100>>2]|0;j=i+8|0;if(!(b[j>>1]&9216)){hb=i;c[hb>>2]=1;c[hb+4>>2]=0;b[j>>1]=4;break}else{Pg(i,1,0);break}}while(0);do if((Gc(o)|0)==100){if(!m)j=mc(29576)|0;else{i=c[o+120>>2]|0;if((i|0)!=0?(b[o+144>>1]|0)!=0:0)j=o;else{i=c[o>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;j=o}l=mc(i)|0;i=c[j>>2]|0;k=o+40|0;j=c[k>>2]|0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&j;c[k>>2]=i;j=l}n=Lc(o,0)|0;if(j){if((n|0)>0){if(mb()|0){l=7;i=0;n=0;p=0;break}i=sb(0,n,0)|0;if(!i){l=7;i=0;n=0;p=0;break}else k=n}else{i=0;k=0}ew(i|0,j|0,n|0)|0;l=0;p=k}else{l=0;i=0;n=0;p=0}}else{l=0;i=0;n=0;p=0}while(0);do if(m){j=c[o>>2]|0;hb=o+136|0;gb=c[hb+4>>2]|0;if((gb|0)>0|(gb|0)==0&(c[hb>>2]|0)>>>0>0)hc(j,o);k=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;hb=o+64|0;c[hb>>2]=0;c[hb+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}else j=0;while(0);j=(l|0)==0?j:l;if((j|0)==0&(g|0)>0){eb=f+252|0;fb=f+168|0;gb=f+16|0;hb=f+20|0;Q=(h|0)>2?h:2;R=f+12|0;S=Lb+580|0;T=f+88|0;U=Lb+588|0;V=f+116|0;W=Lb+600|0;X=f+104|0;Y=Lb+596|0;Z=Lb+572|0;_=Lb+624|0;$=Lb+628|0;aa=f+184|0;ba=Lb+40|0;ca=f+172|0;da=Lb+632|0;ea=Lb+636|0;fa=Lb+64|0;ga=Lb+68|0;ha=Lb+76|0;ia=Lb+80|0;ja=f+228|0;ka=Lb+56|0;la=Lb+4|0;ma=Lb+84|0;na=Lb+48|0;oa=Lb+116|0;pa=Lb+108|0;qa=Lb+8|0;ra=Lb+16|0;sa=Lb+24|0;ta=Lb+32|0;ua=f+96|0;va=Lb+112|0;wa=Lb+88|0;xa=Lb+120|0;ya=Lb+152|0;za=Lb+184|0;Aa=Lb+216|0;Ba=Lb+248|0;Ca=Lb+280|0;Da=Lb+312|0;Ea=Lb+344|0;Fa=Lb+376|0;Ga=Lb+408|0;Ha=Lb+440|0;Ia=Lb+472|0;Ja=Lb+504|0;Ka=Lb+536|0;La=f+192|0;Ma=f+176|0;Na=f+124|0;Oa=ob+4|0;Pa=f+188|0;Qa=lb+4|0;Sa=f+196|0;Ta=ob+8|0;Ua=ob+4|0;Va=f+236|0;Xa=ob+16|0;Ya=ob+24|0;Za=ob+28|0;_a=Kb+8|0;$a=Kb+4|0;bb=Kb+16|0;cb=Kb+28|0;P=Kb+24|0;db=f+180|0;K=g;k=0;o=0;h=0;while(1){u=c[eb>>2]<<10;v=((u|0)<0)<<31>>31;O=c[fb>>2]|0;c[Kb>>2]=O;j=O;if((O|0)==0?(kb=c[hb>>2]|0,c[wb>>2]=c[gb>>2],c[wb+4>>2]=kb,kb=Bb(52607,wb)|0,(kb|0)!=0):0){qd(c[R>>2]|0,kb,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](kb);else{O=Wa[c[29352>>2]&127](kb)|0;c[14978]=(c[14978]|0)-O;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](kb)}j=c[Kb>>2]|0;c[fb>>2]=j}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){O=l;c[O>>2]=Q;c[O+4>>2]=0;b[m>>1]=4;break}else{Pg(l,Q,0);break}}while(0);if((Gc(g)|0)==100){o=Oc(g,0)|0;h=L()|0;t=Nc(g,1)|0}else t=-1;do if(j){j=c[g>>2]|0;O=g+136|0;N=c[O+4>>2]|0;if((N|0)>0|(N|0)==0&(c[O>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;O=g+64|0;c[O>>2]=0;c[O+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j){M=67;break}else{M=94;break}}else{og(j);j=7;M=94;break}}else M=67;while(0);if((M|0)==67){M=0;if(n){j=n+-2|0;a:do if((n|0)>2)while(1){l=j+-1|0;if((a[i+l>>0]|0)>=0)break a;if((j|0)>1)j=l;else{j=l;break}}while(0);b:do if((j|0)>0)while(1){l=j+-1|0;if((a[i+l>>0]|0)>=0){l=j;break b}if((j|0)>1)j=l;else break}else l=j;while(0);r=i+l|0;m=a[r>>0]|0;j=m&255;do if(!(j&128)){g=1;s=m&255;q=0}else{O=d[r+1>>0]|0;j=O<<7|j&127;if(!(O&128)){g=2;s=j;q=0;break}O=d[r+2>>0]|0;j=O<<14|j&16383;if(!(O&128)){g=3;s=j;q=0;break}O=d[r+3>>0]|0;j=O<<21|j&2097151;if(!(O&128)){g=4;s=j;q=0;break}m=28;g=r+4|0;j=j&268435455;q=0;do{O=g;g=g+1|0;O=d[O>>0]|0;N=cw(O&127|0,0,m|0)|0;j=Sv(N|0,L()|0,j|0,q|0)|0;q=L()|0;m=m+7|0}while(m>>>0<64&((O&128|0)!=0|0!=0));g=g-r|0;s=j}while(0);r=g+l|0;g=i+r|0;j=a[g>>0]|0;m=j&255;do if(!(m&128))j=1;else{O=d[g+1>>0]|0;j=O<<7|j&127;if(!(O&128)){m=j;j=2;break}O=d[g+2>>0]|0;j=O<<14|j&16383;if(!(O&128)){m=j;j=3;break}O=d[g+3>>0]|0;j=O<<21|j&2097151;if(!(O&128)){m=j;j=4;break}m=(a[g+4>>0]&7)<<28|j&268435455;j=5}while(0);j=(j+r|0)==(n|0)?0:267;if((t|0)<0){E=1;J=m;k=1;n=l;O=s;N=q}else{E=Zv(o|0,h|0,u|0,v|0)|0;O=L()|0;N=Zv(s|0,q|0,u|0,v|0)|0;J=L()|0;N=(O|0)<(J|0)|(O|0)==(J|0)&E>>>0<N>>>0;E=(N^1)&1;J=N?t:m;k=N?k:1;n=N?n:l;O=N?o:s;N=N?h:q}}else{j=0;n=0;M=94}}if((M|0)==94){M=0;if((t|0)<0)break;else{E=0;J=t;O=o;N=h}}gw(Lb|0,0,640)|0;c[S>>2]=1;c:do if(!j){j=c[T>>2]|0;c[Kb>>2]=j;do if(!j){j=c[hb>>2]|0;c[Ib>>2]=c[gb>>2];c[Ib+4>>2]=j;j=Bb(51533,Ib)|0;if(!j){s=0;M=116;break}l=qd(c[R>>2]|0,j,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{M=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[Kb>>2]|0;c[T>>2]=j;if(!l)M=104;else{s=0;M=116}}else M=104;while(0);if((M|0)==104){M=0;g=j;l=Sv(O|0,N|0,1,0)|0;m=L()|0;do if(!(Vc(g,1)|0)){o=c[g+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);Gc(g)|0;m=Nc(g,0)|0;do if(j){j=c[g>>2]|0;I=g+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;I=g+64|0;c[I>>2]=0;c[I+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);if(m)if((E|0)!=0&(m|0)==1){s=1;M=116}else D=m;else{s=0;M=116}}do if((M|0)==116){M=0;g=Sv(O|0,N|0,1,0)|0;q=L()|0;j=c[V>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[tb>>2]=c[gb>>2];c[tb+4>>2]=l;l=Bb(52072,tb)|0;if(!l){m=K;j=7;l=p;M=801;break c}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[V>>2]=l;if(!j)j=l;else{m=K;l=p;M=801;break c}}r=j;l=Sv(O|0,N|0,2,0)|0;m=L()|0;do if(!(Vc(r,1)|0)){o=c[r+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);l=Wv(g|0,q|0,1024,0)|0;l=cw(l|0,L()|0,10)|0;l=Sv(l|0,L()|0,1024,0)|0;m=L()|0;do if(!(Vc(r,2)|0)){h=c[r+100>>2]|0;o=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);if((Gc(r)|0)==100){if(!j)l=1;else{l=c[r+120>>2]|0;do if(!l)M=137;else{if(!(b[r+144>>1]|0)){M=137;break}m=r}while(0);if((M|0)==137){M=0;l=c[r>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;m=r}l=b[l+8>>1]&31;m=c[m>>2]|0;h=r+40|0;o=c[h>>2]|0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);m=7}else m=c[m+68>>2]&o;c[h>>2]=m}m=-1431655766>>>l&1}else m=0;do if(j){j=c[r>>2]|0;I=r+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(j,r);l=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;I=r+64|0;c[I>>2]=0;c[I+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);if(!m){D=s;break}c[S>>2]=c[S>>2]|2;D=s}while(0);if(!j){A=jb;B=A+56|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));j=J<<2;l=pb(j,0)|0;c[jb>>2]=l;if(!l){m=K;j=7;l=p;M=801}else{gw(l|0,0,j|0)|0;j=c[X>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[ub>>2]=c[gb>>2];c[ub+4>>2]=l;l=Bb(51773,ub)|0;if(!l){m=K;j=7;l=p;M=801;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[X>>2]=l;if(!j)j=l;else{m=K;l=p;M=801;break}}C=j;do if(!(Vc(C,1)|0)){l=c[C+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){I=l;c[I>>2]=O;c[I+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);y=(j|0)==0;w=C+120|0;z=C+40|0;x=C+144|0;j=(J|0)>0&(Gc(C)|0)==100;d:do if(y){if(!j){j=0;M=206;break}r=0;while(1){l=Oc(C,1)|0;m=L()|0;o=Oc(C,2)|0;h=L()|0;g=Oc(C,3)|0;q=L()|0;s=mc(29576)|0;t=Lc(C,4)|0;u=(c[jb>>2]|0)+(r<<2)|0;if((l|0)==0&(m|0)==0){if(!((o|0)==0&(h|0)==0)){j=267;break}j=t+20|0}else j=0;v=nb(j+96|0)|0;if(!v){j=7;break}A=v;B=A+96|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[v>>2]=r;a[v+4>>0]=0;M=v+8|0;c[M>>2]=l;c[M+4>>2]=m;M=v+16|0;c[M>>2]=o;c[M+4>>2]=h;M=v+24|0;c[M>>2]=g;c[M+4>>2]=q;if(!j){H=Sv(l|0,m|0,-1,-1)|0;I=L()|0;M=v+32|0;c[M>>2]=H;c[M+4>>2]=I}else{j=v+96|0;c[v+40>>2]=j;a[v+5>>0]=1;c[v+44>>2]=t;if(t|0)ew(j|0,s|0,t|0)|0;A=j+t|0;B=A+20|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}c[u>>2]=v;c[U>>2]=(c[U>>2]|0)+1;r=r+1|0;if(!((r|0)<(J|0)&(Gc(C)|0)==100)){j=0;l=1;M=199;break d}}c[U>>2]=(c[U>>2]|0)+1;l=0;M=199}else{if(!j){j=0;l=1;M=200;break}v=0;while(1){g=Oc(C,1)|0;q=L()|0;r=Oc(C,2)|0;s=L()|0;t=Oc(C,3)|0;u=L()|0;j=c[w>>2]|0;do if(!j)M=184;else{if((e[x>>1]|0)<=4){M=184;break}j=j+160|0}while(0);if((M|0)==184){M=0;j=c[C>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576}h=mc(j)|0;j=c[C>>2]|0;l=c[z>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[z>>2]=j;l=Lc(C,4)|0;m=(c[jb>>2]|0)+(v<<2)|0;if((g|0)==0&(q|0)==0){if(!((r|0)==0&(s|0)==0)){j=267;break}j=l+20|0}else j=0;o=nb(j+96|0)|0;if(!o){j=7;break}A=o;B=A+96|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[o>>2]=v;a[o+4>>0]=0;I=o+8|0;c[I>>2]=g;c[I+4>>2]=q;I=o+16|0;c[I>>2]=r;c[I+4>>2]=s;I=o+24|0;c[I>>2]=t;c[I+4>>2]=u;if(!j){F=Sv(g|0,q|0,-1,-1)|0;H=L()|0;I=o+32|0;c[I>>2]=F;c[I+4>>2]=H}else{j=o+96|0;c[o+40>>2]=j;a[o+5>>0]=1;c[o+44>>2]=l;if(l|0)ew(j|0,h|0,l|0)|0;A=j+l|0;B=A+20|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}c[m>>2]=o;c[U>>2]=(c[U>>2]|0)+1;v=v+1|0;if(!((v|0)<(J|0)&(Gc(C)|0)==100)){j=0;l=1;M=199;break d}}c[U>>2]=(c[U>>2]|0)+1;l=0;M=199}while(0);do if((M|0)==199){M=0;if(!y){M=200;break}if(l){j=0;M=206}}while(0);do if((M|0)==200){M=0;m=c[C>>2]|0;I=C+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(m,C);o=kc(C)|0;c[C+20>>2]=770837923;c[C+36>>2]=-1;c[z>>2]=0;a[C+146>>0]=2;c[C+44>>2]=0;c[C+32>>2]=1;a[C+147>>0]=-1;c[C+48>>2]=0;I=C+64|0;c[I>>2]=0;c[I+4>>2]=0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);if(l){j=7;M=206;break}else break}else if(l){j=c[m+68>>2]&o;M=206;break}else break}while(0);if((M|0)==206)M=0;if(j|0){m=K;l=p;M=801;break}m=c[U>>2]|0;if((m|0)!=(J|0)){q=K;j=0;break}c[Y>>2]=ib;j=eq(f,jb,c[ib>>2]|0,c[Z>>2]|0)|0;if(j|0){m=K;l=p;M=801;break}j=gq(f,jb)|0;if((j|0)!=100){m=K;l=p;M=801;break}e:do if((E|0)!=0&(D|0)>0){x=c[_>>2]|0;y=c[$>>2]|0;z=D+-1|0;j=c[aa>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[vb>>2]=c[gb>>2];c[vb+4>>2]=l;l=Bb(52942,vb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[aa>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}D=j;l=Sv(O|0,N|0,1,0)|0;m=L()|0;do if(!(Vc(D,1)|0)){o=c[D+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);l=((z|0)<0)<<31>>31;do if(!(Vc(D,2)|0)){o=c[D+100>>2]|0;m=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){I=m;c[I>>2]=z;c[I+4>>2]=l;b[o>>1]=4;break}else{Pg(m,z,l);break}}while(0);do if((Gc(D)|0)!=100){if(!j){M=421;break e}j=c[D>>2]|0;M=D+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,D);l=kc(D)|0;c[D+20>>2]=770837923;c[D+36>>2]=-1;c[D+40>>2]=0;a[D+146>>0]=2;c[D+44>>2]=0;c[D+32>>2]=1;a[D+147>>0]=-1;c[D+48>>2]=0;M=D+64|0;c[M>>2]=0;c[M+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);m=K;g=J;j=7;l=p;M=750;break e}else{j=c[j+68>>2]&l;break}}else{v=Oc(D,1)|0;w=L()|0;t=Oc(D,2)|0;u=L()|0;C=(j|0)==0;f:do if(C)j=29576;else{j=c[D+120>>2]|0;do if(j|0){if((e[D+144>>1]|0)<=3)break;j=j+120|0;break f}while(0);j=c[D>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576}while(0);l=b[j+8>>1]|0;do if((l&514)==514){if((a[j+10>>0]|0)!=1){M=237;break}s=c[j+16>>2]|0}else M=237;while(0);do if((M|0)==237){M=0;if(l&1){s=0;break}s=Gg(j,1)|0}while(0);if(!C){j=c[D>>2]|0;m=D+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j}if(!s){h=ba;j=c[h+4>>2]|0;h=c[h>>2]|0;o=0;r=0}else{l=a[s>>0]|0;if((l+-48&255)<10){j=0;o=0;m=0;do{m=Yv(o|0,m|0,10,0)|0;o=(l&255)+-48|0;o=Sv(m|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;m=L()|0;j=j+1|0;l=a[s+j>>0]|0}while((l+-48&255)<10)}else{j=0;o=0;m=0}g:while(1){l=a[s+j>>0]|0;switch(l<<24>>24){case 45:{M=251;break g}case 32:break;default:{q=1;r=0;break g}}j=j+1|0}if((M|0)==251){M=0;l=j+1|0;j=l;l=a[s+l>>0]|0;q=-1;r=-1}if((l+-48&255)<10){h=0;g=0;do{g=Yv(h|0,g|0,10,0)|0;h=(l&255)+-48|0;h=Sv(g|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;g=L()|0;j=j+1|0;l=a[s+j>>0]|0}while((l+-48&255)<10);l=h;j=g}else{l=0;j=0}h=Yv(l|0,j|0,q|0,r|0)|0;j=L()|0;r=ba;c[r>>2]=h;c[r+4>>2]=j;r=m}l=Tv(0,0,h|0,j|0)|0;m=L()|0;if((j|0)<0){j=ba;c[j>>2]=l;c[j+4>>2]=m;j=m}else l=h;a[na>>0]=(l|0)==0&(j|0)==0&1;s=Lc(D,4)|0;if(C)q=mc(29576)|0;else{j=c[D+120>>2]|0;do if(!j)M=263;else{if((e[D+144>>1]|0)<=4){M=263;break}j=j+160|0;l=D}while(0);if((M|0)==263){M=0;j=c[D>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;l=D}h=mc(j)|0;j=c[l>>2]|0;m=D+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j;q=h}j=c[La>>2]|0;c[Kb>>2]=j;do if(!j){j=c[hb>>2]|0;c[xb>>2]=c[gb>>2];c[xb+4>>2]=j;j=Bb(53128,xb)|0;if(!j){m=7;break}m=qd(c[R>>2]|0,j,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{I=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[Kb>>2]|0;c[La>>2]=j;if(!m){m=j;M=277}}else{m=j;M=277}while(0);h:do if((M|0)==277){M=0;g=m;do if(!(Vc(g,1)|0)){j=c[g+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){I=j;c[I>>2]=o;c[I+4>>2]=r;b[l>>1]=4;break}else{Pg(j,o,r);break}}while(0);h=(Gc(g)|0)==100;j=h&1;do if(m){l=c[g>>2]|0;I=g+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(l,g);m=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;I=g+64|0;c[I>>2]=0;c[I+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);m=7;break h}else{m=c[l+68>>2]&m;break}}else m=0;while(0);if(h&(m|0)==0){c[Kb>>2]=0;c[lb>>2]=0;m=dq(f,t,u,Kb,lb)|0;if(!m){m=c[Kb>>2]|0;j=c[lb>>2]|0;A=Ta;B=A+40|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[ob>>2]=m;c[Ua>>2]=j;do if(!(a[m>>0]|0))j=1;else{g=m+1|0;j=a[g>>0]|0;l=j&255;if(!(l&128)){I=Xa;c[I>>2]=j&255;c[I+4>>2]=0;j=2;break}I=d[m+2>>0]|0;j=I<<7|l&127;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=3;break}I=d[m+3>>0]|0;j=I<<14|j&16383;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=4;break}I=d[m+4>>0]|0;j=I<<21|j&2097151;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=5;break}h=28;m=m+5|0;j=j&268435455;l=0;do{I=m;m=m+1|0;I=d[I>>0]|0;H=cw(I&127|0,0,h|0)|0;j=Sv(H|0,L()|0,j|0,l|0)|0;l=L()|0;h=h+7|0}while(h>>>0<64&((I&128|0)!=0|0!=0));I=Xa;c[I>>2]=j;c[I+4>>2]=l;j=1-g+m|0}while(0);c[Ta>>2]=j;m=Pr(ob)|0;if((m|0)==0&(c[ob>>2]|0)!=0)do m=Pr(ob)|0;while((m|0)==0&(c[ob>>2]|0)!=0);l=c[Ya>>2]|0;I=c[Za>>2]|0;j=Lu(x,l,(y|0)<(I|0)?y:I)|0;j=(((j|0)==0?y-I|0:j)|0)>0&1;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0)}else j=1;l=c[Kb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0)}if(!((m|0)==0&(j|0)!=0))break;h=a[q>>0]|0;g=h<<24>>24;l=Tv(o|0,r|0,v|0,w|0)|0;L()|0;l=(l+1|0)/16|0;c[Lb>>2]=l;I=sa;c[I>>2]=v;c[I+4>>2]=w;I=ta;c[I>>2]=o;c[I+4>>2]=r;I=qa;c[I>>2]=O;c[I+4>>2]=N;c[ra>>2]=z;if(h<<24>>24<15){j=g;do{I=j;j=j+1|0;E=G(j,l)|0;E=Sv(v|0,w|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Lb+56+(j<<5)|0;c[H>>2]=E;c[H+4>>2]=F}while((I|0)<14)}o=G(l,g)|0;o=Sv(v|0,w|0,o|0,((o|0)<0)<<31>>31|0)|0;m=L()|0;l=Lb+56+(g<<5)|0;c[l>>2]=o;c[l+4>>2]=m;l=c[ja>>2]|0;l=(s|0)>(l|0)?s:l;m=Lb+56+(g<<5)+28|0;o=Lb+56+(g<<5)+20|0;j=c[o>>2]|0;if((c[m>>2]|0)<(l|0)){if(mb()|0){m=7;break}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){m=7;break}c[m>>2]=l;c[o>>2]=j}ew(j|0,q|0,s|0)|0;c[Lb+56+(g<<5)+24>>2]=s;if(h<<24>>24<=-1){m=0;break}q=g;j=s;while(1){m=c[Lb+56+(q<<5)+20>>2]|0;A=_a;B=A+40|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[Kb>>2]=m;c[$a>>2]=j;if(!(a[m>>0]|0))j=1;else{h=m+1|0;j=a[h>>0]|0;l=j&255;do if(!(l&128)){I=bb;c[I>>2]=j&255;c[I+4>>2]=0;j=1}else{I=d[m+2>>0]|0;j=I<<7|l&127;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=2;break}I=d[m+3>>0]|0;j=I<<14|j&16383;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=3;break}I=d[m+4>>0]|0;j=I<<21|j&2097151;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=4;break}o=28;m=m+5|0;j=j&268435455;l=0;do{I=m;m=m+1|0;I=d[I>>0]|0;H=cw(I&127|0,0,o|0)|0;j=Sv(H|0,L()|0,j|0,l|0)|0;l=L()|0;o=o+7|0}while(o>>>0<64&((I&128|0)!=0|0!=0));I=bb;c[I>>2]=j;c[I+4>>2]=l;j=m-h|0}while(0);j=j+1|0}c[_a>>2]=j;j=Pr(Kb)|0;l=(j|0)==0;if(l&(c[Kb>>2]|0)!=0)do{j=Pr(Kb)|0;l=(j|0)==0}while(l&(c[Kb>>2]|0)!=0);o=c[cb>>2]|0;do if(l){l=Lb+56+(q<<5)+16|0;m=Lb+56+(q<<5)+8|0;if((c[l>>2]|0)<(o|0)){j=c[m>>2]|0;if(mb()|0){j=7;M=364;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;M=364;break}c[l>>2]=o;c[m>>2]=j}else j=c[m>>2]|0;l=c[P>>2]|0;ew(j|0,l|0,o|0)|0;c[Lb+56+(q<<5)+12>>2]=o;if((q|0)<=0){j=0;break}c[lb>>2]=0;c[ob>>2]=0;h=q+-1|0;j=bb;g=c[j>>2]|0;j=c[j+4>>2]|0;o=Lb+56+(h<<5)|0;c[o>>2]=g;c[o+4>>2]=j;j=dq(f,g,j,lb,ob)|0;g=c[ob>>2]|0;o=c[ja>>2]|0;o=(g|0)>(o|0)?g:o;do if(!j){l=Lb+56+(h<<5)+28|0;m=Lb+56+(h<<5)+20|0;j=c[m>>2]|0;if((c[l>>2]|0)<(o|0)){if(mb()|0){j=7;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;break}c[l>>2]=o;c[m>>2]=j}ew(j|0,c[lb>>2]|0,g|0)|0;c[Lb+56+(h<<5)+24>>2]=g;j=0}while(0);l=c[lb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);M=364}else M=364;while(0);if((M|0)==364){M=0;l=c[P>>2]|0}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=q+-1|0;if(!((q|0)>0&(j|0)==0)){m=j;break h}q=l;j=c[Lb+56+(l<<5)+24>>2]|0}}while(0);do if(!C){j=c[D>>2]|0;M=D+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,D);l=kc(D)|0;c[D+20>>2]=770837923;c[D+36>>2]=-1;c[D+40>>2]=0;a[D+146>>0]=2;c[D+44>>2]=0;c[D+32>>2]=1;a[D+147>>0]=-1;c[D+48>>2]=0;M=D+64|0;c[M>>2]=0;c[M+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);j=(m|0)==0?j:m}while(0);if(!j)M=421;else{m=K;g=J;l=p;M=750}}else{j=c[ca>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[yb>>2]=c[gb>>2];c[yb+4>>2]=l;l=Bb(52726,yb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[ca>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){M=l;c[M>>2]=O;c[M+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);l=c[U>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(g,2)|0)){h=c[g+100>>2]|0;o=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){M=o;c[M>>2]=l;c[M+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);if((Gc(g)|0)==100)o=Nc(g,0)|0;else o=0;do if(j|0){j=c[g>>2]|0;M=g+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;M=g+64|0;c[M>>2]=0;c[M+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j)break;else{m=K;g=J;l=p;M=750;break e}}else{og(j);m=K;g=J;j=7;l=p;M=750;break e}}while(0);j=c[ua>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[zb>>2]=c[gb>>2];c[zb+4>>2]=l;l=Bb(51657,zb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[ua>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}m=j;if((Gc(m)|0)==100){F=o<<4;F=Sv(F|0,((F|0)<0)<<31>>31|0,-1,-1)|0;M=L()|0;I=Oc(m,0)|0;H=L()|0;E=sa;c[E>>2]=I;c[E+4>>2]=H;H=Sv(F|0,M|0,I|0,H|0)|0;I=L()|0;M=ta;c[M>>2]=H;c[M+4>>2]=I}do if(j|0){j=c[m>>2]|0;M=m+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,m);l=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;M=m+64|0;c[M>>2]=0;c[M+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j)break;else{m=K;g=J;l=p;M=750;break e}}else{og(j);m=K;g=J;j=7;l=p;M=750;break e}}while(0);j=ta;j=Hr(f,c[j>>2]|0,c[j+4>>2]|0,0,0)|0;if(j|0){m=K;g=J;l=p;M=750;break}I=qa;c[I>>2]=O;c[I+4>>2]=N;c[Lb>>2]=o;c[ra>>2]=D;I=sa;M=c[I>>2]|0;I=c[I+4>>2]|0;H=ka;c[H>>2]=M;c[H+4>>2]=I;H=Sv(M|0,I|0,o|0,((o|0)<0)<<31>>31|0)|0;F=L()|0;E=wa;c[E>>2]=H;c[E+4>>2]=F;E=o<<1;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=xa;c[H>>2]=E;c[H+4>>2]=F;H=o*3|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=ya;c[E>>2]=H;c[E+4>>2]=F;E=o<<2;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=za;c[H>>2]=E;c[H+4>>2]=F;H=o*5|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Aa;c[E>>2]=H;c[E+4>>2]=F;E=o*6|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ba;c[H>>2]=E;c[H+4>>2]=F;H=o*7|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ca;c[E>>2]=H;c[E+4>>2]=F;E=o<<3;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Da;c[H>>2]=E;c[H+4>>2]=F;H=o*9|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ea;c[E>>2]=H;c[E+4>>2]=F;E=o*10|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Fa;c[H>>2]=E;c[H+4>>2]=F;H=o*11|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ga;c[E>>2]=H;c[E+4>>2]=F;E=o*12|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ha;c[H>>2]=E;c[H+4>>2]=F;H=o*13|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ia;c[E>>2]=H;c[E+4>>2]=F;E=o*14|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ja;c[H>>2]=E;c[H+4>>2]=F;H=o*15|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;I=L()|0;M=Ka;c[M>>2]=H;c[M+4>>2]=I;M=421}while(0);i:do if((M|0)==421){M=0;if(!(c[Lb>>2]|0)){m=K;g=J;j=0;l=p;M=750;break}j:while(1){E=c[_>>2]|0;F=c[$>>2]|0;H=c[da>>2]|0;I=c[ea>>2]|0;l=c[fa>>2]|0;m=c[ga>>2]|0;k:do if((m|0)>0){j=0;while(1){if((a[l+j>>0]|0)!=(a[E+j>>0]|0)){A=j;break k}j=j+1|0;if((j|0)>=(m|0)){A=j;break}}}else A=0;while(0);g=0;j=A;l=((A|0)<0)<<31>>31;do{g=g+1|0;j=bw(j|0,l|0,7)|0;l=L()|0}while(!((j|0)==0&(l|0)==0));h=F-A|0;o=0;j=h;l=((h|0)<0)<<31>>31;do{o=o+1|0;j=bw(j|0,l|0,7)|0;l=L()|0}while(!((j|0)==0&(l|0)==0));D=((I|0)<0)<<31>>31;j=0;l=I;m=D;do{j=j+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));l=h+I+g+o+j|0;j=c[ia>>2]|0;do if((j|0)>0){if((j+l|0)<=(c[ja>>2]|0)){M=480;break}C=ka;j=Hr(f,c[C>>2]|0,c[C+4>>2]|0,c[ha>>2]|0,j)|0;c[la>>2]=(c[la>>2]|0)+1;l:do if(!j){C=A+1|0;m=ka;v=1;l=c[m>>2]|0;m=c[m+4>>2]|0;while(1){z=Lb+56+(v<<5)+8|0;o=c[z>>2]|0;B=Lb+56+(v<<5)+12|0;q=c[B>>2]|0;m:do if((q|0)>0){j=0;while(1){if((a[o+j>>0]|0)!=(a[E+j>>0]|0)){x=j;break m}j=j+1|0;if((j|0)>=(q|0)){x=j;break}}}else x=0;while(0);t=((x|0)<0)<<31>>31;g=0;j=x;o=t;do{g=g+1|0;j=bw(j|0,o|0,7)|0;o=L()|0}while(!((j|0)==0&(o|0)==0));w=C-x|0;u=((w|0)<0)<<31>>31;j=0;o=w;h=u;do{j=j+1|0;o=bw(o|0,h|0,7)|0;h=L()|0}while(!((o|0)==0&(h|0)==0));s=g+w+j|0;y=Lb+56+(v<<5)+24|0;j=c[y>>2]|0;if(!q)break;if((j+s|0)<=(c[ja>>2]|0))break;r=Lb+56+(v<<5)|0;o=r;q=Lb+56+(v<<5)+20|0;j=Hr(f,c[o>>2]|0,c[o+4>>2]|0,c[q>>2]|0,j)|0;a[c[q>>2]>>0]=v;q=(c[q>>2]|0)+1|0;o=Sv(l|0,m|0,1,0)|0;l=q;g=L()|0;while(1){m=o&255;h=l+1|0;a[l>>0]=m|-128;o=bw(o|0,g|0,7)|0;g=L()|0;if((o|0)==0&(g|0)==0)break;else l=h}a[l>>0]=m&127;c[y>>2]=1-q+h;m=r;l=c[m>>2]|0;m=c[m+4>>2]|0;x=Sv(l|0,m|0,1,0)|0;y=L()|0;z=r;c[z>>2]=x;c[z+4>>2]=y;c[B>>2]=0;if((j|0)!=0|(l|0)==0&(m|0)==0)break l;j=v+1|0;if(j>>>0<16)v=j;else{j=0;break l}}q=Lb+56+(v<<5)+20|0;if(!j){o=c[ja>>2]|0;r=Lb+56+(v<<5)+28|0;j=c[q>>2]|0;if((c[r>>2]|0)<(o|0)){if(mb()|0){j=7;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;break}c[r>>2]=o;c[q>>2]=j}a[j>>0]=v;g=(c[q>>2]|0)+1|0;h=g;while(1){j=l&255;o=h+1|0;a[h>>0]=j|-128;l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else h=o}a[h>>0]=j&127;j=1-g+o|0;c[y>>2]=j;m=r}else m=Lb+56+(v<<5)+28|0;l=j+s|0;if((c[m>>2]|0)<(l|0)){j=c[q>>2]|0;if(mb()|0){j=7;break}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){j=7;break}c[m>>2]=l;c[q>>2]=j}l=Lb+56+(v<<5)+16|0;if((c[l>>2]|0)<=(A|0)){j=c[z>>2]|0;if(mb()|0){j=7;break}j=sb(j,(C|0)>0?C:0,0)|0;if(!j){j=7;break}c[l>>2]=C;c[z>>2]=j}if(!(c[B>>2]|0))j=c[y>>2]|0;else{h=(c[q>>2]|0)+(c[y>>2]|0)|0;o=h;g=x;m=t;while(1){j=g&255;l=o+1|0;a[o>>0]=j|-128;g=bw(g|0,m|0,7)|0;m=L()|0;if((g|0)==0&(m|0)==0)break;else o=l}a[o>>0]=j&127;j=(c[y>>2]|0)+(l-h)|0;c[y>>2]=j}h=(c[q>>2]|0)+j|0;o=h;g=w;m=u;while(1){j=g&255;l=o+1|0;a[o>>0]=j|-128;g=bw(g|0,m|0,7)|0;m=L()|0;if((g|0)==0&(m|0)==0)break;else o=l}a[o>>0]=j&127;j=(c[y>>2]|0)+(l-h)|0;c[y>>2]=j;ew((c[q>>2]|0)+j|0,E+x|0,w|0)|0;c[y>>2]=(c[y>>2]|0)+w;ew(c[z>>2]|0,E|0,C|0)|0;c[B>>2]=C;j=0}while(0);m=ka;m=Sv(c[m>>2]|0,c[m+4>>2]|0,1,0)|0;l=L()|0;h=ka;c[h>>2]=m;c[h+4>>2]=l;c[ga>>2]=0;c[ia>>2]=0;h=0;l=F;m=((F|0)<0)<<31>>31;do{h=h+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));o=0;m=I;l=D;do{o=o+1|0;m=bw(m|0,l|0,7)|0;l=L()|0}while(!((m|0)==0&(l|0)==0));l=F+1+I+h|0;B=l+o|0;C=ba;B=Sv(c[C>>2]|0,c[C+4>>2]|0,B|0,((B|0)<0)<<31>>31|0)|0;C=L()|0;D=ba;c[D>>2]=B;c[D+4>>2]=C;if(!j){l=l+o|0;j=0;M=482}}else M=480;while(0);if((M|0)==480){B=ba;B=Sv(c[B>>2]|0,c[B+4>>2]|0,l|0,((l|0)<0)<<31>>31|0)|0;C=L()|0;D=ba;c[D>>2]=B;c[D+4>>2]=C;l=l+j|0;M=482}do if((M|0)==482){M=0;if((c[ma>>2]|0)<(l|0)){j=c[ha>>2]|0;if(mb()|0){m=K;g=J;j=7;l=p;M=750;break i}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){m=K;g=J;j=7;l=p;M=750;break i}c[ma>>2]=l;c[ha>>2]=j;j=c[ia>>2]|0}if(!j){c[ia>>2]=1;a[c[ha>>2]>>0]=0}j=Qr(ha,fa,E,F,H,I)|0;if(j|0)break;j=gq(f,jb)|0}while(0);l=c[la>>2]|0;if((j|0)==100&(l|0)>=(K|0))break;switch(j|0){case 100:break;case 0:break j;default:{m=K;g=J;l=p;M=750;break i}}}F=K+-1-l|0;j=c[U>>2]|0;n:do if((j|0)>0){w=0;y=j;l=j;o:while(1){x=y+-1|0;if((l|0)>0){m=c[jb>>2]|0;j=0;do{o=c[m+(j<<2)>>2]|0;j=j+1|0}while((j|0)<(l|0)?(c[o>>2]|0)!=(x|0):0)}else o=0;do if(!(c[o+40>>2]|0)){h=o+8|0;m=h;j=c[m>>2]|0;m=c[m+4>>2]|0;do if(!((j|0)==0&(m|0)==0)){l=c[Na>>2]|0;c[Kb>>2]=l;if(!l){l=c[hb>>2]|0;c[Ab>>2]=c[gb>>2];c[Ab+4>>2]=l;l=Bb(52181,Ab)|0;if(!l){M=502;break o}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Na>>2]=l;if(j|0){g=w;break n}m=h;j=c[m>>2]|0;m=c[m+4>>2]|0}q=l;do if(!(Vc(q,1)|0)){h=c[q+100>>2]|0;g=h+8|0;if(!(b[g>>1]&9216)){K=h;c[K>>2]=j;c[K+4>>2]=m;b[g>>1]=4;break}else{Pg(h,j,m);break}}while(0);h=o+24|0;m=c[h>>2]|0;h=c[h+4>>2]|0;if(Vc(q,2)|0){Gc(q)|0;if(!l)break}else{l=c[q+100>>2]|0;j=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){K=j;c[K>>2]=m;c[K+4>>2]=h;b[l>>1]=4}else Pg(j,m,h);Gc(q)|0}j=c[q>>2]|0;K=q+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,q);l=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){M=521;break o}j=c[j+68>>2]&l;if(j|0){g=w;break n}}while(0);h=c[o>>2]|0;j=c[Ma>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[Cb>>2]=c[gb>>2];c[Cb+4>>2]=l;l=Bb(52829,Cb)|0;if(!l){M=526;break o}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Ma>>2]=l;if(!j)j=l;else{g=w;break n}}o=j;do if(!(Vc(o,1)|0)){l=c[o+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);m=((h|0)<0)<<31>>31;if(Vc(o,2)|0){Gc(o)|0;if(!j){m=w;j=0;break}}else{l=c[o+100>>2]|0;j=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){K=j;c[K>>2]=h;c[K+4>>2]=m;b[l>>1]=4}else Pg(j,h,m);Gc(o)|0}j=c[o>>2]|0;K=o+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,o);l=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;K=o+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){M=544;break o}m=w;j=c[j+68>>2]&l}else{q=c[o+64>>2]|0;t=c[o+60>>2]|0;v=c[o>>2]|0;c[lb>>2]=0;c[lb+4>>2]=0;c[lb+8>>2]=0;c[ob>>2]=0;c[ob+4>>2]=0;c[ob+8>>2]=0;j=qb;c[j>>2]=0;c[j+4>>2]=0;j=c[aa>>2]|0;c[Kb>>2]=j;do if(!j){l=c[hb>>2]|0;c[Db>>2]=c[gb>>2];c[Db+4>>2]=l;l=Bb(52942,Db)|0;if(!l){j=7;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[aa>>2]=l;if(!j){j=l;M=554}}else M=554;while(0);p:do if((M|0)==554){M=0;g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);u=((v|0)<0)<<31>>31;do if(!(Vc(g,2)|0)){m=c[g+100>>2]|0;l=m+40|0;m=m+48|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=v;c[K+4>>2]=u;b[m>>1]=4;break}else{Pg(l,v,u);break}}while(0);if((Gc(g)|0)==100){if(!j)l=mc(29576)|0;else{l=c[g+120>>2]|0;do if(!l)M=567;else{if((e[g+144>>1]|0)<=4){M=567;break}l=l+160|0;m=g}while(0);if((M|0)==567){M=0;l=c[g>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;m=g}l=mc(l)|0;m=c[m>>2]|0;h=g+40|0;o=c[h>>2]|0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);m=7}else m=c[m+68>>2]&o;c[h>>2]=m}m=Lc(g,4)|0;r=Oc(g,1)|0;s=L()|0;m=Rr(l,m,lb,q,t,qb)|0}else{m=0;r=0;s=0}do if(j){j=c[g>>2]|0;K=g+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;K=g+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);j=(m|0)==0?j:m;m=qb;l=c[m>>2]|0;m=c[m+4>>2]|0;do if((j|0)==0&((l|0)!=0|(m|0)!=0)){while(1){c[Kb>>2]=0;c[rb>>2]=0;j=dq(f,l,m,Kb,rb)|0;do if(!j){j=Rr(c[Kb>>2]|0,c[rb>>2]|0,ob,q,t,qb)|0;if(j|0)break;j=Hr(f,l,m,c[ob>>2]|0,c[Oa>>2]|0)|0}while(0);o=c[Kb>>2]|0;do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{K=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);o=(j|0)==0;g=qb;h=c[g>>2]|0;g=c[g+4>>2]|0;if(o&((h|0)!=0|(g|0)!=0)){l=h;m=g}else break}if(!o)break p;j=c[Na>>2]|0;c[Kb>>2]=j;if(!j){o=c[hb>>2]|0;c[Eb>>2]=c[gb>>2];c[Eb+4>>2]=o;o=Bb(52181,Eb)|0;if(!o){j=7;break p}j=qd(c[R>>2]|0,o,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{K=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}o=c[Kb>>2]|0;c[Na>>2]=o;if(!j)j=o;else break p}q=j;do if(!(Vc(q,1)|0)){o=c[q+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=r;c[K+4>>2]=s;b[h>>1]=4;break}else{Pg(o,r,s);break}}while(0);h=Sv(l|0,m|0,-1,-1)|0;g=L()|0;if(Vc(q,2)|0){Gc(q)|0;if(!j){h=l;break}}else{o=c[q+100>>2]|0;j=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){K=j;c[K>>2]=h;c[K+4>>2]=g;b[o>>1]=4}else Pg(j,h,g);Gc(q)|0}j=c[q>>2]|0;K=q+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,q);o=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((o|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break p}else{j=c[j+68>>2]&o;M=614;break}}else{l=0;m=0;M=614}while(0);if((M|0)==614){M=0;if(!j)h=l;else break}j=c[Pa>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[Fb>>2]=c[gb>>2];c[Fb+4>>2]=l;l=Bb(53049,Fb)|0;if(!l){j=7;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Pa>>2]=l;if(!j)j=l;else break}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;o=l+8|0;if(!(b[o>>1]&9216)){K=l;c[K>>2]=h;c[K+4>>2]=m;b[o>>1]=4;break}else{Pg(l,h,m);break}}while(0);l=c[lb>>2]|0;m=c[Qa>>2]|0;do if(!((l|0)==0|(Vc(g,2)|0)!=0)){l=yc((c[g+100>>2]|0)+40|0,l,m,0,0)|0;if(!l)break;m=c[g>>2]|0;c[m+64>>2]=l;Ne(m,l);m=c[g>>2]|0;if(!((l|0)==3082|(a[m+81>>0]|0)!=0))break;og(m)}while(0);do if(!(Vc(g,3)|0)){m=c[g+100>>2]|0;l=m+80|0;m=m+88|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);if(Vc(g,4)|0){Gc(g)|0;if(!j)j=0;else M=641}else{l=c[g+100>>2]|0;j=l+120|0;l=l+128|0;if(!(b[l>>1]&9216)){M=j;c[M>>2]=v;c[M+4>>2]=u;b[l>>1]=4}else Pg(j,v,u);Gc(g)|0;M=641}do if((M|0)==641){M=0;j=c[g>>2]|0;K=g+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;K=g+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}while(0);Vc(g,2)|0}while(0);l=c[lb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[ob>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=w+1|0}while(0);l=(j|0)==0;if(!((y|0)>1&l)){M=658;break}w=m;y=x;l=c[U>>2]|0}if((M|0)==502){M=0;g=w;j=7;break}else if((M|0)==521){M=0;og(j);g=w;j=7;break}else if((M|0)==526){M=0;g=w;j=7;break}else if((M|0)==544){M=0;og(j);g=w;j=7;break}else if((M|0)==658){M=0;if(!l){g=m;break}E=m;j=c[U>>2]|0;M=660;break}}else{E=0;M=660}while(0);do if((M|0)==660){M=0;if((E|0)==(j|0)){g=j;j=0;break}j=c[Sa>>2]|0;c[Kb>>2]=j;do if(!j){l=c[hb>>2]|0;c[Gb>>2]=c[gb>>2];c[Gb+4>>2]=l;l=Bb(53193,Gb)|0;if(!l){j=7;l=0;M=698;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Sa>>2]=l;if(!j){j=l;M=669}else{l=0;M=698}}else M=669;while(0);q:do if((M|0)==669){M=0;r=j;do if(!(Vc(r,1)|0)){l=c[r+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);r:do if((Gc(r)|0)==100){g=0;o=0;q=0;h=0;l=0;while(1){if((q|0)>=(o|0)){o=o+16|0;m=o<<2;if(mb()|0){o=7;break r}m=sb(h,(m|0)>0?m:0,0)|0;if(!m){o=7;break r}else{g=m;l=m;h=m}}K=Nc(r,0)|0;m=q+1|0;c[g+(q<<2)>>2]=K;if((Gc(r)|0)==100)q=m;else{q=m;o=0;break}}}else{q=0;o=0;g=0;l=0}while(0);do if(j){j=c[r>>2]|0;K=r+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,r);m=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;K=r+64|0;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&m;break}}else j=0;while(0);j=(o|0)==0?j:o;if(j|0){M=698;break}j=c[db>>2]|0;c[Kb>>2]=j;if(!j){m=c[hb>>2]|0;c[Hb>>2]=c[gb>>2];c[Hb+4>>2]=m;m=Bb(52884,Hb)|0;if(!m){j=7;M=698;break}j=qd(c[R>>2]|0,m,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{K=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}m=c[Kb>>2]|0;c[db>>2]=m;if(!j)j=m;else{M=698;break}}D=j;do if(!(Vc(D,2)|0)){o=c[D+100>>2]|0;m=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){K=m;c[K>>2]=O;c[K+4>>2]=N;b[o>>1]=4;break}else{Pg(m,O,N);break}}while(0);a[Va>>0]=1;if(!q){j=0;break}s=D+100|0;t=D+136|0;u=D+20|0;v=D+36|0;w=D+40|0;x=D+146|0;y=D+44|0;z=D+32|0;A=D+147|0;B=D+48|0;C=D+64|0;if(!j){r=0;s:while(1){j=c[g+(r<<2)>>2]|0;do if((j|0)==(r|0))j=0;else{m=((j|0)<0)<<31>>31;do if(!(Vc(D,3)|0)){h=c[s>>2]|0;o=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=j;c[K+4>>2]=m;b[h>>1]=4;break}else{Pg(o,j,m);break}}while(0);if(Vc(D,1)|0){Gc(D)|0;j=0;break}j=c[s>>2]|0;m=j+8|0;if(!(b[m>>1]&9216)){K=j;c[K>>2]=r;c[K+4>>2]=0;b[m>>1]=4}else Pg(j,r,0);Gc(D)|0;j=c[D>>2]|0;K=t;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,D);m=kc(D)|0;c[u>>2]=770837923;c[v>>2]=-1;c[w>>2]=0;a[x>>0]=2;c[y>>2]=0;c[z>>2]=1;a[A>>0]=-1;c[B>>2]=0;K=C;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0)break s;j=c[j+68>>2]&m}while(0);r=r+1|0;if(!(r>>>0<q>>>0&(j|0)==0))break q}og(j);j=7;break}r=0;while(1){j=c[g+(r<<2)>>2]|0;if((j|0)==(r|0))j=0;else{m=((j|0)<0)<<31>>31;do if(!(Vc(D,3)|0)){h=c[s>>2]|0;o=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=j;c[K+4>>2]=m;b[h>>1]=4;break}else{Pg(o,j,m);break}}while(0);if(!(Vc(D,1)|0)){j=c[s>>2]|0;m=j+8|0;if(!(b[m>>1]&9216)){K=j;c[K>>2]=r;c[K+4>>2]=0;b[m>>1]=4}else Pg(j,r,0);Gc(D)|0}else Gc(D)|0;j=c[D>>2]|0;K=t;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,D);m=kc(D)|0;c[u>>2]=770837923;c[v>>2]=-1;c[w>>2]=0;a[x>>0]=2;c[y>>2]=0;c[z>>2]=1;a[A>>0]=-1;c[B>>2]=0;K=C;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0)break;j=c[j+68>>2]&m}r=r+1|0;if(!(r>>>0<q>>>0&(j|0)==0))break q}og(j);j=7}while(0);if((M|0)==698){M=0;a[Va>>0]=1}a[Va>>0]=0;if(!l){g=E;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);g=E;break}else{g=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);g=E;break}}while(0);if(!g){t=F;s=p;r=1;break}k=n+20|0;if(j|0){m=F;k=1;l=p;M=751;break}if((p|0)<(k|0)){if(mb()|0){m=F;k=1;j=7;l=p;M=751;break}j=sb(i,(k|0)>0?k:0,0)|0;if(!j){m=F;k=1;j=7;l=p;M=751;break}else{i=j;p=k}}k=i+n|0;j=k;m=O;h=N;while(1){l=m&255;o=j+1|0;a[j>>0]=l|-128;m=bw(m|0,h|0,7)|0;h=L()|0;if((m|0)==0&(h|0)==0)break;else j=o}a[j>>0]=l&127;n=o-k+n|0;o=i+n|0;j=o;l=g;m=((g|0)<0)<<31>>31;while(1){k=l&255;h=j+1|0;a[j>>0]=k|-128;l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else j=h}a[j>>0]=k&127;m=F;k=1;j=0;n=n-o+h|0;l=p;M=750}while(0);if((M|0)==750){M=0;if(!g){t=m;s=l;r=1}else M=751}if((M|0)==751){M=0;r=ba;r=Tv(0,0,c[r>>2]|0,c[r+4>>2]|0)|0;s=L()|0;t=ba;c[t>>2]=r;c[t+4>>2]=s;t=m;s=l;r=0}m=15;while(1){if((c[Lb+56+(m<<5)+24>>2]|0)>0){M=763;break}l=c[Lb+56+(m<<5)+20>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(m<<5)+8>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);if(!m)break;else m=m+-1|0}do if((M|0)==763){M=0;do if(m){if((m|0)>0)M=773}else{if(j|0){m=1;M=773;break}j=c[pa>>2]|0;if((c[oa>>2]|0)<11){if(mb()|0){j=7;m=1;M=773;break}j=sb(j,11,0)|0;if(!j){j=7;m=1;M=773;break}c[oa>>2]=11;c[pa>>2]=j}a[j>>0]=1;l=(c[pa>>2]|0)+1|0;p=ka;j=l;o=c[p>>2]|0;p=c[p+4>>2]|0;while(1){m=o&255;h=j+1|0;a[j>>0]=m|-128;o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else j=h}a[j>>0]=m&127;c[va>>2]=1-l+h;j=0;m=1;M=773}while(0);if((M|0)==773){h=0;do{l=c[Lb+56+(h<<5)+24>>2]|0;o=Lb+56+(h<<5)+20|0;if((j|0)==0&(l|0)>0){j=Lb+56+(h<<5)|0;j=Hr(f,c[j>>2]|0,c[j+4>>2]|0,c[o>>2]|0,l)|0}l=c[o>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(h<<5)+8>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);h=h+1|0}while((h|0)!=(m|0))}if(!j){j=qa;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;l=L()|0;o=sa;h=ka;p=ta;if(!(a[na>>0]|0)){q=ba;g=c[q>>2]|0;q=c[q+4>>2]|0}else{g=0;q=0}M=Lb+56+(m<<5)+20|0;j=Jr(f,j,l,c[ra>>2]|0,c[o>>2]|0,c[o+4>>2]|0,c[h>>2]|0,c[h+4>>2]|0,c[p>>2]|0,c[p+4>>2]|0,g,q,c[M>>2]|0,c[Lb+56+(m<<5)+24>>2]|0)|0;l=M}else l=Lb+56+(m<<5)+20|0;l=c[l>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(m<<5)+8>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!r){m=t;l=s;M=801;break}if(a[na>>0]|0){m=t;l=s;M=801;break}M=Sv(O|0,N|0,1,0)|0;l=L()|0;m=ba;Gr(f,M,l,c[m>>2]|0,c[m+4>>2]|0)|0;m=t;l=s;M=801}}else{m=K;l=p;M=801}}else{m=K;l=p;M=801}while(0);if((M|0)==801){M=0;q=m;p=l;m=c[U>>2]|0}l=c[jb>>2]|0;if((m|0)>0){g=0;do{h=c[l+(g<<2)>>2]|0;do if(h|0){do if(!(c[h+56>>2]|0)){l=c[h+64>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);do if(!(a[h+5>>0]|0)){l=c[h+40>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[h+52>>2]|0;t:do if(l|0){m=c[l+20>>2]|0;gc(c[l+16>>2]|0)|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,l);break t}o=l;if((c[m+304>>2]|0)>>>0>o>>>0)break;if((c[m+308>>2]|0)>>>0<=o>>>0)break;K=m+300|0;c[l>>2]=c[K>>2];c[K>>2]=l;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);g=g+1|0;l=c[jb>>2]|0}while((g|0)<(c[U>>2]|0))}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[W>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[U>>2]=0;c[jb>>2]=0;c[W>>2]=0;if((j|0)==0&(q|0)>0){K=q;o=O;h=N}else break}if((k|0)!=0&(j|0)==0){l=f+148|0;k=c[l>>2]|0;c[Kb>>2]=k;if(!k){k=c[f+20>>2]|0;c[Jb>>2]=c[f+16>>2];c[Jb+4>>2]=k;k=Bb(52453,Jb)|0;if(!k){j=7;break}j=qd(c[f+12>>2]|0,k,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[Kb>>2]|0;c[l>>2]=k;if(j)break}m=k;do if(!(Vc(m,1)|0)){j=c[m+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){Kb=j;c[Kb>>2]=1;c[Kb+4>>2]=0;b[l>>1]=4;break}else{Pg(j,1,0);break}}while(0);if((i|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;if(!k)j=0;else M=857}else{j=yc((c[m+100>>2]|0)+40|0,i,n,0,0)|0;if(j|0?(Mb=c[m>>2]|0,c[Mb+64>>2]=j,Ne(Mb,j),Mb=c[m>>2]|0,(j|0)==3082|(a[Mb+81>>0]|0)!=0):0)og(Mb);Gc(m)|0;M=857}do if((M|0)==857){j=c[m>>2]|0;Mb=m+136|0;Kb=c[Mb+4>>2]|0;if((Kb|0)>0|(Kb|0)==0&(c[Mb>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;Mb=m+64|0;c[Mb>>2]=0;c[Mb+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}while(0);Vc(m,2)|0}}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](Lb);else{Mb=Wa[c[29352>>2]&127](Lb)|0;c[14978]=(c[14978]|0)-Mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Lb)}if(!i){Mb=j;Ra=Nb;return Mb|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Mb=j;Ra=Nb;return Mb|0}else{Mb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Mb=j;Ra=Nb;return Mb|0}return 0}function Pr(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=b+28|0;g=(c[m>>2]|0)!=0;n=b+16|0;e=n;f=c[e>>2]|0;e=c[e+4>>2]|0;if(g&((f|0)!=0|(e|0)!=0)){l=Sv(f|0,e|0,1,0)|0;o=L()|0;p=n;c[p>>2]=l;c[p+4>>2]=o}o=b+8|0;j=c[o>>2]|0;p=b+4|0;k=c[p>>2]|0;if((j|0)>=(k|0)){c[b>>2]=0;b=0;return b|0}h=c[b>>2]|0;if(g){g=h+j|0;f=a[g>>0]|0;e=f&255;if(e&128){l=d[g+1>>0]|0;e=l<<7|f&127;if(l&128){l=d[g+2>>0]|0;e=l<<14|e&16383;if(l&128){l=d[g+3>>0]|0;e=l<<21|e&2097151;if(!(l&128))f=4;else{e=(a[g+4>>0]&7)<<28|e&268435455;f=5}}else f=3}else f=2}else f=1;j=f+j|0;c[o>>2]=j}else e=0;i=h+j|0;f=a[i>>0]|0;g=f&255;if(g&128){l=d[i+1>>0]|0;f=l<<7|f&127;if(l&128){l=d[i+2>>0]|0;f=l<<14|f&16383;if(l&128){l=d[i+3>>0]|0;f=l<<21|f&2097151;if(!(l&128)){l=f;f=4}else{l=(a[i+4>>0]&7)<<28|f&268435455;f=5}}else{l=f;f=3}}else{l=f;f=2}}else{l=g;f=1}g=f+j|0;c[o>>2]=g;if((e|0)>(g|0)|(l|0)>(k-g|0)){b=267;return b|0}k=l+e|0;i=b+32|0;j=b+24|0;do if((c[i>>2]|0)<(k|0)){f=c[j>>2]|0;if(mb()|0){b=7;return b|0}f=sb(f,(k|0)>0?k:0,0)|0;if(!f){b=7;return b|0}else{c[i>>2]=k;c[j>>2]=f;h=c[b>>2]|0;g=c[o>>2]|0;break}}else f=c[j>>2]|0;while(0);ew(f+e|0,h+g|0,l|0)|0;c[m>>2]=k;i=(c[o>>2]|0)+l|0;c[o>>2]=i;if(!((c[n>>2]|0)==0&(c[n+4>>2]|0)==0)){b=0;return b|0}j=c[b>>2]|0;g=j+i|0;e=a[g>>0]|0;f=e&255;h=b+40|0;do if(f&128){n=d[g+1>>0]|0;f=n<<7|e&127;if(!(n&128)){c[h>>2]=f;e=2;break}n=d[g+2>>0]|0;f=n<<14|f&16383;if(!(n&128)){c[h>>2]=f;e=3;break}n=d[g+3>>0]|0;f=n<<21|f&2097151;if(!(n&128)){c[h>>2]=f;e=4;break}else{f=(a[g+4>>0]&7)<<28|f&268435455;c[h>>2]=f;e=5;break}}else{c[h>>2]=f;e=1}while(0);e=e+i|0;c[o>>2]=e;if(((c[p>>2]|0)-e|0)<(f|0)){b=267;return b|0}c[b+36>>2]=j+e;c[o>>2]=f+e;b=0;return b|0}function Qr(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=d+4|0;k=c[m>>2]|0;j=d+8|0;i=c[d>>2]|0;do if((c[j>>2]|0)<(f|0)){if(mb()|0){h=7;return h|0}i=sb(i,(f|0)>0?f:0,0)|0;if(!i){h=7;return h|0}else{c[j>>2]=f;c[d>>2]=i;l=c[m>>2]|0;break}}else l=k;while(0);j=(k|0)==0;a:do if((l|0)>0){d=0;while(1){if((a[i+d>>0]|0)!=(a[e+d>>0]|0)){n=d;break a}d=d+1|0;if((d|0)>=(l|0)){n=d;break}}}else n=0;while(0);o=f-n|0;ew(i|0,e|0,f|0)|0;c[m>>2]=f;if(j){d=b+4|0;m=d;d=c[d>>2]|0}else{m=b+4|0;i=(c[b>>2]|0)+(c[m>>2]|0)|0;d=i;k=n;f=((n|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;d=l-i+(c[m>>2]|0)|0;c[m>>2]=d}i=(c[b>>2]|0)+d|0;d=i;k=o;f=((o|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;d=(c[m>>2]|0)+(l-i)|0;c[m>>2]=d;ew((c[b>>2]|0)+d|0,e+n|0,o|0)|0;d=(c[m>>2]|0)+o|0;c[m>>2]=d;if(!g){h=0;return h|0}i=(c[b>>2]|0)+d|0;d=i;k=h;f=((h|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;e=(c[m>>2]|0)+(l-i)|0;c[m>>2]=e;ew((c[b>>2]|0)+e|0,g|0,h|0)|0;c[m>>2]=(c[m>>2]|0)+h;h=0;return h|0}function Rr(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+64|0;x=z;y=z+48|0;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;v=(a[b>>0]|0)!=0;k=f+8|0;do if((c[k>>2]|0)<(e|0)){j=c[f>>2]|0;if(mb()|0){y=7;Ra=z;return y|0}j=sb(j,(e|0)>0?e:0,0)|0;if(!j){y=7;Ra=z;return y|0}else{c[k>>2]=e;c[f>>2]=j;break}}while(0);w=f+4|0;c[w>>2]=0;o=x+8|0;j=o;k=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[x>>2]=b;c[x+4>>2]=e;do if(!(a[b>>0]|0))j=1;else{m=b+1|0;n=x+16|0;j=a[m>>0]|0;k=j&255;if(!(k&128)){t=n;c[t>>2]=j&255;c[t+4>>2]=0;j=2;break}t=d[b+2>>0]|0;j=t<<7|k&127;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=3;break}t=d[b+3>>0]|0;j=t<<14|j&16383;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=4;break}t=d[b+4>>0]|0;j=t<<21|j&2097151;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=5;break}e=28;l=b+5|0;j=j&268435455;k=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,e|0)|0;j=Sv(s|0,L()|0,j|0,k|0)|0;k=L()|0;e=e+7|0}while(e>>>0<64&((t&128|0)!=0|0!=0));t=n;c[t>>2]=j;c[t+4>>2]=k;j=1-m+l|0}while(0);c[o>>2]=j;j=Pr(x)|0;a:do if((j|0)==0&(c[x>>2]|0)!=0){o=x+24|0;q=x+28|0;r=x+36|0;s=x+40|0;t=x+16|0;while(1){if(!(c[w>>2]|0)){m=c[q>>2]|0;n=Lu(c[o>>2]|0,g,(m|0)<(h|0)?m:h)|0;n=(n|0)==0?m-h|0:n;if(!((n|0)<0|v&(n|0)==0)){k=t;j=c[k>>2]|0;k=c[k+4>>2]|0;a[c[f>>2]>>0]=a[b>>0]|0;if((j|0)==0&(k|0)==0){k=0;e=0;j=1}else{n=(c[f>>2]|0)+1|0;l=n;while(1){e=j&255;m=l+1|0;a[l>>0]=e|-128;j=bw(j|0,k|0,7)|0;k=L()|0;if((j|0)==0&(k|0)==0)break;else l=m}a[l>>0]=e&127;e=t;k=c[e>>2]|0;e=c[e+4>>2]|0;j=1-n+m|0}c[w>>2]=j;u=i;c[u>>2]=k;c[u+4>>2]=e;u=26}}else u=26;if((u|0)==26?(u=0,p=Qr(f,y,c[o>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0,p|0):0)break a;j=Pr(x)|0;if(!((j|0)==0&(c[x>>2]|0)!=0)){p=j;break}}}else p=j;while(0);if(!(c[w>>2]|0)){n=x+16|0;e=n;j=c[e>>2]|0;e=c[e+4>>2]|0;a[c[f>>2]>>0]=a[b>>0]|0;if((j|0)==0&(e|0)==0){k=0;e=0;j=1}else{o=(c[f>>2]|0)+1|0;l=o;while(1){k=j&255;m=l+1|0;a[l>>0]=k|-128;j=bw(j|0,e|0,7)|0;e=L()|0;if((j|0)==0&(e|0)==0)break;else l=m}a[l>>0]=k&127;e=n;k=c[e>>2]|0;e=c[e+4>>2]|0;j=1-o+m|0}c[w>>2]=j;c[i>>2]=k;c[i+4>>2]=e}j=c[x+24>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{x=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);j=c[y>>2]|0;if(!j){y=p;Ra=z;return y|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);y=p;Ra=z;return y|0}else{y=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);y=p;Ra=z;return y|0}return 0}function Sr(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;i=m;j=m+8|0;f=d+252|0;g=d+280|0;a:do if((c[f>>2]|0)>0){e=0;b:while(1){h=Er(d,c[g>>2]|0,e,-1)|0;e=e+1|0;switch(h|0){case 0:case 101:break;default:break b}if((e|0)>=(c[f>>2]|0))break a}Fr(d);l=h;Ra=m;return l|0}while(0);Fr(d);if(!(a[d+233>>0]|0)){l=0;Ra=m;return l|0}k=d+48|0;if((c[k>>2]|0)!=255){l=0;Ra=m;return l|0}if(!(c[d+52>>2]|0)){l=0;Ra=m;return l|0}g=d+144|0;e=c[g>>2]|0;c[j>>2]=e;if(!e){e=c[d+20>>2]|0;c[i>>2]=c[d+16>>2];c[i+4>>2]=e;e=Bb(52411,i)|0;if(!e){l=7;Ra=m;return l|0}f=qd(c[d+12>>2]|0,e,-1,133,0,j,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}e=c[j>>2]|0;c[g>>2]=e;if(f){l=f;Ra=m;return l|0}}h=e;do if(!(Vc(h,1)|0)){f=c[h+100>>2]|0;g=f+8|0;if(!(b[g>>1]&9216)){j=f;c[j>>2]=2;c[j+4>>2]=0;b[g>>1]=4;break}else{Pg(f,2,0);break}}while(0);switch(Gc(h)|0){case 100:{f=Nc(h,0)|0;f=(f|0)==1?8:f;l=22;break}case 101:{f=0;l=22;break}default:{}}if((l|0)==22)c[k>>2]=f;if(!e){l=0;Ra=m;return l|0}e=c[h>>2]|0;l=h+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(e,h);f=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;l=h+64|0;c[l>>2]=0;c[l+4>>2]=0;if((f|0)==3082|(a[e+81>>0]|0)!=0){og(e);l=7;Ra=m;return l|0}else{l=c[e+68>>2]&f;Ra=m;return l|0}return 0}function Tr(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;Aa=Ra;Ra=Ra+176|0;m=Aa+96|0;sa=Aa+164|0;ta=Aa+152|0;ua=Aa+128|0;va=Aa+124|0;xa=Aa+120|0;ya=Aa+116|0;za=Aa+112|0;na=Aa+108|0;oa=Aa+104|0;pa=Aa+100|0;qa=Aa;if((h|0)>6){c[f+20>>2]=1;yc(c[f>>2]|0,55039,-1,1,-1)|0;Ra=Aa;return}j=c[i>>2]|0;if((((b[j+8>>1]&-15393)<<16>>16==-32255?(a[j+11>>0]|0)==112:0)?(Bu(c[j>>2]|0,54938)|0)==0:0)?(ra=c[j+16>>2]|0,ra|0):0){a:do switch(h|0){case 6:{h=c[i+20>>2]|0;j=e[h+8>>1]|0;if(j&4|0){k=c[h>>2]|0;ga=18;break a}if(j&8|0){k=Mg(+g[h>>3])|0;L()|0;ga=18;break a}if(!(j&18)){k=0;ga=18}else{k=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;ga=18}break}case 5:{k=15;ga=18;break}case 4:{l=-1;k=15;ga=24;break}case 3:{m=55028;l=-1;k=15;ga=30;break}case 2:{o=55023;n=55028;l=-1;k=15;ga=36;break}default:{ka=55019;la=55023;ma=55028;fa=-1;q=15;ga=42}}while(0);do if((ga|0)==18){h=c[i+16>>2]|0;j=e[h+8>>1]|0;if(j&4|0){l=c[h>>2]|0;ga=24;break}if(j&8|0){l=Mg(+g[h>>3])|0;L()|0;ga=24;break}if(!(j&18)){l=0;ga=24}else{l=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;ga=24}}while(0);do if((ga|0)==24){h=c[i+12>>2]|0;if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){m=c[h+16>>2]|0;ga=30;break}if(!(j&1)){m=Gg(h,1)|0;ga=30}else{m=0;ga=30}}else{m=0;ga=30}}while(0);do if((ga|0)==30){h=c[i+8>>2]|0;if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){o=c[h+16>>2]|0;n=m;ga=36;break}if(!(j&1)){o=Gg(h,1)|0;n=m;ga=36}else{o=0;n=m;ga=36}}else{o=0;n=m;ga=36}}while(0);do if((ga|0)==36?(p=c[i+4>>2]|0,p|0):0){h=b[p+8>>1]|0;if((h&514)==514?(a[p+10>>0]|0)==1:0){ka=c[p+16>>2]|0;la=o;ma=n;fa=l;q=k;ga=42;break}if(!(h&1)){ka=Gg(p,1)|0;la=o;ma=n;fa=l;q=k;ga=42}}while(0);if((ga|0)==42?(ka|0)!=0&((la|0)!=0&(ma|0)!=0):0){if(!q){if((yc(c[f>>2]|0,59952,-1,1,0)|0)!=18){Ra=Aa;return}c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;Ra=Aa;return}if(ur(f,ra)|0){Ra=Aa;return}ja=c[ra>>2]|0;ea=ra+16|0;b:do if(!(c[ea>>2]|0)){if((yc(c[f>>2]|0,59952,0,1,0)|0)==18){c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0}}else{V=(q|0)>-64?q:-64;V=(V|0)<64?V:64;W=(V|0)>-1;X=ja+24|0;Y=(fa|0)<0;Z=ta+4|0;_=ua+16|0;$=ua+4|0;aa=ua+8|0;ba=ua+12|0;ca=ua+20|0;da=0-V|0;ia=1;h=0;c:while(1){if(W)ha=(ia+-1+V|0)/(ia|0)|0;else ha=da;U=0;k=0;j=0;T=0;l=0;d:while(1){S=qa+(U*24|0)|0;c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;c[S+20>>2]=0;e:do if((c[X>>2]|0)>0){Q=qa+(U*24|0)+4|0;m=qa+(U*24|0)+8|0;R=qa+(U*24|0)+16|0;P=0;O=-1;s=j;f:while(1){g:do if(Y|(P|0)==(fa|0)){c[ua>>2]=0;c[ua+4>>2]=0;c[ua+8>>2]=0;c[ua+12>>2]=0;c[ua+16>>2]=0;c[ua+20>>2]=0;h=Z;c[h>>2]=0;c[h+4>>2]=0;c[ta>>2]=ra;h=c[ea>>2]|0;c[sa>>2]=0;h=Zr(h,sa,92,ta)|0;i=c[Z>>2]|0;do if(!h){h=i*24|0;j=pb(h,0)|0;c[_>>2]=j;if(!j){h=7;break}gw(j|0,0,h|0)|0;c[ua>>2]=ra;c[$>>2]=P;c[aa>>2]=ha;c[ba>>2]=i;c[ca>>2]=-1;h=c[ea>>2]|0;c[sa>>2]=0;h=Zr(h,sa,93,ua)|0;N=(h|0)==0;h:do if(N){if((i|0)>0){o=c[_>>2]|0;n=0;j=s;do{K=(c[o+(n*24|0)+12>>2]|0)==0;J=cw(1,0,n|0)|0;M=L()|0;k=(K?0:J)|k;j=(K?0:M)|j;n=n+1|0}while((n|0)!=(i|0))}else j=s;n=-1;I=0;o=c[ca>>2]|0;J=0;p=0;K=0;M=0;while(1){i:do if((o|0)<0){c[ca>>2]=0;o=c[ba>>2]|0;if((o|0)<=0){s=0;t=0;r=0;q=0;i=0;o=0;break}v=0;while(1){u=c[_>>2]|0;t=u+(v*24|0)+12|0;u=u+(v*24|0)+8|0;s=c[aa>>2]|0;q=c[t>>2]|0;if(q){i=c[u>>2]|0;o=q;j:do if((i|0)<(s|0)){o=q;do{r=a[o>>0]|0;if((r&255)<2){i=-1;o=0;break j}q=r&255;do if(!(q&128))r=1;else{ga=d[o+1>>0]|0;q=ga<<7|r&127;if(!(ga&128)){r=2;break}ga=d[o+2>>0]|0;q=ga<<14|q&16383;if(!(ga&128)){r=3;break}ga=d[o+3>>0]|0;q=ga<<21|q&2097151;if(!(ga&128)){r=4;break}q=(a[o+4>>0]&7)<<28|q&268435455;r=5}while(0);o=o+r|0;i=i+-2+q|0}while((i|0)<(s|0))}while(0);c[u>>2]=i;c[t>>2]=o;o=c[ba>>2]|0}v=v+1|0;if((v|0)>=(o|0)){ga=123;break}}}else{q=c[ba>>2]|0;if((q|0)<=0){t=P;r=I;s=j;q=J;i=K;o=M;break h}r=c[_>>2]|0;o=2147483647;i=0;while(1){if(!(c[r+(i*24|0)+12>>2]|0))x=o;else{x=c[r+(i*24|0)+8>>2]|0;x=(x|0)<(o|0)?x:o}i=i+1|0;if((i|0)==(q|0))break;else o=x}if((x|0)==2147483647){t=P;r=I;s=j;q=J;i=K;o=M;break h}w=x-(c[aa>>2]|0)|0;c[ca>>2]=w+1;i=0;while(1){u=r+(i*24|0)+12|0;v=r+(i*24|0)+8|0;o=c[u>>2]|0;if(o|0){q=c[v>>2]|0;k:do if((q|0)<=(x|0))do{t=a[o>>0]|0;if((t&255)<2){q=-1;o=0;break k}s=t&255;do if(!(s&128))t=1;else{ga=d[o+1>>0]|0;s=ga<<7|t&127;if(!(ga&128)){t=2;break}ga=d[o+2>>0]|0;s=ga<<14|s&16383;if(!(ga&128)){t=3;break}ga=d[o+3>>0]|0;s=ga<<21|s&2097151;if(!(ga&128)){t=4;break}s=(a[o+4>>0]&7)<<28|s&268435455;t=5}while(0);o=o+t|0;q=q+-2+s|0}while((q|0)<=(x|0));while(0);c[v>>2]=q;c[u>>2]=o}u=r+(i*24|0)+20|0;t=r+(i*24|0)+16|0;o=c[u>>2]|0;if(o|0){q=c[t>>2]|0;l:do if((q|0)<=(w|0))do{s=a[o>>0]|0;if((s&255)<2){q=-1;o=0;break l}r=s&255;do if(!(r&128))s=1;else{ga=d[o+1>>0]|0;r=ga<<7|s&127;if(!(ga&128)){s=2;break}ga=d[o+2>>0]|0;r=ga<<14|r&16383;if(!(ga&128)){s=3;break}ga=d[o+3>>0]|0;r=ga<<21|r&2097151;if(!(ga&128)){s=4;break}r=(a[o+4>>0]&7)<<28|r&268435455;s=5}while(0);o=o+s|0;q=q+-2+r|0}while((q|0)<=(w|0));while(0);c[t>>2]=q;c[u>>2]=o}i=i+1|0;o=c[ba>>2]|0;if((i|0)>=(o|0)){ga=123;break i}r=c[_>>2]|0}}while(0);do if((ga|0)==123){ga=0;H=c[ca>>2]|0;if((o|0)<=0){s=0;t=0;r=0;q=0;i=0;o=H;break}F=c[_>>2]|0;G=(c[aa>>2]|0)+H|0;s=0;E=0;t=0;r=0;q=0;i=0;while(1){v=c[F+(E*24|0)+20>>2]|0;m:do if(v){u=c[F+(E*24|0)+16>>2]|0;if((u|0)<(H|0)|(u|0)>=(G|0))break;C=cw(1,0,E|0)|0;D=L()|0;B=c[F+(E*24|0)>>2]|0;if((B|0)<=0){x=v;while(1){s=(((t|T)&C|0)==0&((r|l)&D|0)==0?1e3:1)+s|0;t=t|C;r=r|D;w=a[x>>0]|0;if((w&255)<2)break m;v=w&255;do if(!(v&128))w=1;else{B=d[x+1>>0]|0;v=B<<7|w&127;if(!(B&128)){w=2;break}B=d[x+2>>0]|0;v=B<<14|v&16383;if(!(B&128)){w=3;break}B=d[x+3>>0]|0;v=B<<21|v&2097151;if(!(B&128)){w=4;break}v=(a[x+4>>0]&7)<<28|v&268435455;w=5}while(0);u=u+-2+v|0;if((u|0)<(H|0)|(u|0)>=(G|0))break m;else x=x+w|0}}A=v;while(1){w=cw(1,0,u-H|0)|0;x=L()|0;y=(t|T)&C;z=(r|l)&D;v=0;do{Ba=bw(w|0,x|0,v|0)|0;q=Ba|q;i=L()|0|i;v=v+1|0}while((v|0)!=(B|0));s=((y|0)==0&(z|0)==0?1e3:1)+s|0;t=t|C;r=r|D;w=a[A>>0]|0;if((w&255)<2)break m;v=w&255;do if(!(v&128))w=1;else{Ba=d[A+1>>0]|0;v=Ba<<7|w&127;if(!(Ba&128)){w=2;break}Ba=d[A+2>>0]|0;v=Ba<<14|v&16383;if(!(Ba&128)){w=3;break}Ba=d[A+3>>0]|0;v=Ba<<21|v&2097151;if(!(Ba&128)){w=4;break}v=(a[A+4>>0]&7)<<28|v&268435455;w=5}while(0);u=u+-2+v|0;if((u|0)<(H|0)|(u|0)>=(G|0))break;else A=A+w|0}}while(0);E=E+1|0;if((E|0)==(o|0)){o=H;break}}}while(0);Ba=(s|0)>(n|0);n=Ba?s:n;I=Ba?o:I;J=Ba?t:J;p=Ba?r:p;K=Ba?q:K;M=Ba?i:M}}else{n=0;t=0;r=0;q=0;p=0;i=0;o=0}while(0);j=c[_>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{Ba=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);if(!N){j=11;n=O;o=s;break g}if((n|0)<=(O|0)){j=0;n=O;h=0;o=s;break g}c[S>>2]=t;c[Q>>2]=r;j=m;c[j>>2]=q;c[j+4>>2]=p;j=R;c[j>>2]=i;c[j+4>>2]=o;j=0;h=0;o=s;break g}while(0);j=11;n=O;o=s}else{j=10;n=O;o=s}while(0);switch(j&15){case 10:case 0:break;default:break f}P=P+1|0;if((P|0)>=(c[X>>2]|0)){j=o;ga=158;break e}else{O=n;s=o}}if(!j){m=T;j=o}else break d}else{m=qa+(U*24|0)+8|0;ga=158}while(0);if((ga|0)==158){ga=0;Ba=m;m=c[Ba>>2]|T;l=c[Ba+4>>2]|l}U=U+1|0;if(U>>>0>=ia>>>0){ga=161;break}else T=m}if((ga|0)==161){ga=0;j=(ia|0)==4|(k|0)==(m|0)&(j|0)==(l|0)?2:0}switch(j|0){case 2:{ga=164;break c}case 11:{m=0;break c}case 0:break;default:break b}ia=ia+1|0}n:do if((ga|0)==164)if(!h){F=ia+-1|0;G=ra+12|0;H=ra+20|0;I=ha+-1|0;E=0;m=0;k=0;s=0;while(1){B=(E|0)==(F|0);i=c[qa+(E*24|0)>>2]|0;p=c[qa+(E*24|0)+4>>2]|0;r=qa+(E*24|0)+16|0;q=c[r>>2]|0;r=c[r+4>>2]|0;o=c[ra>>2]|0;c[ya>>2]=0;i=i+1|0;n=c[G>>2]|0;l=(n|0)==0;do if(l)h=29576;else{h=c[n+120>>2]|0;if(h|0?i>>>0<(e[n+144>>1]|0)>>>0:0){h=h+(i*40|0)|0;break}h=c[n>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0)A=c[h+16>>2]|0;else if(!(j&1))A=Gg(h,1)|0;else A=0;if(!l){j=c[n>>2]|0;l=n+40|0;h=c[l>>2]|0;if((h|0)==3082|(a[j+81>>0]|0)!=0){og(j);h=7}else h=c[j+68>>2]&h;c[l>>2]=h}n=c[G>>2]|0;if(!A){if(!n)h=1;else{h=c[n+120>>2]|0;do if(!h)ga=186;else{if(i>>>0>=(e[n+144>>1]|0)>>>0){ga=186;break}h=h+(i*40|0)|0;j=n}while(0);if((ga|0)==186){ga=0;h=c[n>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576;j=n}h=b[h+8>>1]&31;l=c[j>>2]|0;n=n+40|0;j=c[n>>2]|0;if((j|0)==3082|(a[l+81>>0]|0)!=0){og(l);j=7}else j=c[l+68>>2]&j;c[n>>2]=j}h=(-1431655766>>>h&1|0)==0?7:0;j=s}else{z=Lc(n,i)|0;y=o+36|0;j=c[y>>2]|0;D=c[j>>2]|0;l=c[H>>2]|0;c[sa>>2]=0;h=Za[c[D+12>>2]&127](j,A,z,sa)|0;if(h|0)break;c[c[sa>>2]>>2]=j;if((c[D>>2]|0)>0?(wa=Xa[c[D+24>>2]&255](c[sa>>2]|0,l)|0,wa|0):0){ga=195;break}C=c[sa>>2]|0;w=D+20|0;x=(E|0)!=0;t=p;v=0;o=0;j=s;s=q;o:while(1){c[na>>2]=-1;c[oa>>2]=0;c[pa>>2]=0;h=$a[c[w>>2]&127](C,za,na,oa,pa,ya)|0;switch(h|0){case 101:{ga=199;break o}case 0:break;default:{ga=274;break o}}h=c[ya>>2]|0;p:do if((h|0)<(t|0)){p=v;i=t;h=0;n=s;l=r}else{if(!o){o=c[oa>>2]|0;n=z-o|0;i=c[H>>2]|0;o=A+o|0;q:do if((s|0)==0&(r|0)==0){i=t;q=0;r=0}else{h=0;while(1){Ba=cw(1,0,h|0)|0;if((Ba&s|0)==0&((L()|0)&r|0)==0)h=h+1|0;else break}l=0;while(1){Ba=cw(1,0,I-l|0)|0;if((Ba&s|0)==0&((L()|0)&r|0)==0)l=l+1|0;else break}Ba=h-l|0;p=(Ba|0)/2|0;if((Ba|0)<=1){i=t;q=s;break}c[ta>>2]=0;l=c[y>>2]|0;q=c[l>>2]|0;c[sa>>2]=0;h=Za[c[q+12>>2]&127](l,o,n,sa)|0;r:do if(!h){c[c[sa>>2]>>2]=l;do if((c[q>>2]|0)>0){h=Xa[c[q+24>>2]&255](c[sa>>2]|0,i)|0;if(!h)break;Wa[c[q+16>>2]&127](c[sa>>2]|0)|0;c[sa>>2]=0;ga=216;break r}while(0);o=c[sa>>2]|0;l=p+ha|0;n=q+20|0;while(1){if((c[ta>>2]|0)>=(l|0)){ga=219;break}c[ua>>2]=0;c[va>>2]=0;c[xa>>2]=0;h=$a[c[n>>2]&127](o,sa,ua,va,xa,ta)|0;if(h|0){ga=221;break}}if((ga|0)==219){ga=0;Wa[c[q+16>>2]&127](o)|0;h=0}else if((ga|0)==221){ga=0;Wa[c[q+16>>2]&127](o)|0;if((h|0)==101)h=1;else break}i=h-ha+(c[ta>>2]|0)|0;Ba=(i|0)>0;q=bw(s|0,r|0,(Ba?i:0)|0)|0;r=L()|0;i=(Ba?i:0)+t|0;break q}else ga=216;while(0);if((ga|0)==216)ga=0;p=v;o=1;i=t;n=s;l=r;break p}while(0);do if(x|(i|0)>0){n=Eu(ma)|0;if((k+1+n|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){p=v;o=1;h=7;n=q;l=r;break p}h=sb(m,l,h)|0;if(!h){p=v;o=1;h=7;n=q;l=r;break p}m=h;j=l}ew(m+k|0,ma|0,n|0)|0;k=n+k|0;h=m+k|0;ga=238}else{h=c[oa>>2]|0;if(!h)break;if((h|0)<0)h=Eu(A)|0;if((k+1+h|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){p=v;o=1;h=7;n=q;l=r;break p}l=sb(m,n,l)|0;if(!l){p=v;o=1;h=7;n=q;l=r;break p}m=l;j=n}ew(m+k|0,A|0,h|0)|0;k=h+k|0;h=m+k|0;ga=238}while(0);if((ga|0)==238){ga=0;a[h>>0]=0}h=c[ya>>2]|0;if((h|0)<(i|0)){p=v;o=1;h=0;n=q;l=r;break}else{u=1;t=i}}else{u=o;q=s}if((h|0)>=(t+ha|0)){ga=241;break o}p=cw(1,0,h-t|0)|0;p=(p&q|0)!=0|((L()|0)&r|0)!=0;do if((h|0)>(t|0)){o=A+v|0;h=(c[oa>>2]|0)-v|0;if((h|0)<0)h=Eu(o)|0;if((k+1+h|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){h=7;break}l=sb(m,n,l)|0;if(!l){h=7;break}m=l;j=n}ew(m+k|0,o|0,h|0)|0;k=h+k|0;a[m+k>>0]=0;ga=255}else ga=255;while(0);do if((ga|0)==255){ga=0;if(p){n=Eu(ka)|0;o=n+k|0;if((o+1|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;break}h=sb(m,l,h)|0;if(!h){h=7;break}m=h;j=l}ew(m+k|0,ka|0,n|0)|0;a[m+o>>0]=0;k=o}h=c[oa>>2]|0;o=A+h|0;h=(c[pa>>2]|0)-h|0;if((h|0)<0)h=Eu(o)|0;i=h+k|0;if((i+1|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){h=7;break}l=sb(m,n,l)|0;if(!l){h=7;break}m=l;j=n}ew(m+k|0,o|0,h|0)|0;h=m+i|0;a[h>>0]=0;if(!p){h=0;k=i;break}o=Eu(la)|0;k=o+i|0;if((k+1|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;k=i;break}l=sb(m,n,h)|0;if(!l){h=7;k=i;break}h=l+i|0;m=l;j=n}ew(h|0,la|0,o|0)|0;a[m+k>>0]=0;h=0}while(0);p=c[pa>>2]|0;o=u;i=t;n=q;l=r}while(0);if(!h){t=i;v=p;s=n;r=l}else break}do if((ga|0)==199){n=A+v|0;o=Eu(n)|0;if((k+1+o|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;ga=274;break}h=sb(m,l,h)|0;if(!h){h=7;ga=274;break}m=h;j=l}ew(m+k|0,n|0,o|0)|0;k=o+k|0;a[m+k>>0]=0;h=0;ga=274}else if((ga|0)==241){if(!B){h=0;ga=274;break}n=Eu(ma)|0;if((k+1+n|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;ga=274;break}h=sb(m,l,h)|0;if(!h){h=7;ga=274;break}m=h;j=l}ew(m+k|0,ma|0,n|0)|0;k=n+k|0;a[m+k>>0]=0;h=0;ga=274}while(0);if((ga|0)==274)ga=0;Wa[c[D+16>>2]&127](C)|0}E=E+1|0;if(!(E>>>0<ia>>>0&(h|0)==0))break n;else s=j}if((ga|0)==195){Wa[c[D+16>>2]&127](c[sa>>2]|0)|0;c[sa>>2]=0;h=wa}}else m=0;while(0);j=ja+248|0;k=c[j>>2]|0;do if(k|0){l=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Ba=k;if((c[l+304>>2]|0)>>>0<=Ba>>>0?(c[l+308>>2]|0)>>>0>Ba>>>0:0){Ba=l+300|0;c[k>>2]=c[Ba>>2];c[Ba>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Ba=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[j>>2]=0;if(!h){if((yc(c[f>>2]|0,m,-1,1,90)|0)!=18)break;c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;break}c[f+20>>2]=h;j=c[f>>2]|0;if(b[j+8>>1]&1){switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(j,h,-1,1,0)|0}if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Ba=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);Ra=Aa;return}h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(h);h=c[f>>2]|0}c[f+20>>2]=7;h=c[h+32>>2]|0;j=h+81|0;if(a[j>>0]|0){Ra=Aa;return}if(a[h+82>>0]|0){Ra=Aa;return}a[j>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;Ba=h+272|0;c[Ba>>2]=(c[Ba>>2]|0)+1;h=c[h+236>>2]|0;if(!h){Ra=Aa;return}c[h+12>>2]=7;Ra=Aa;return}c[m>>2]=51022;h=Bb(55087,m)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(!h){Ra=Aa;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);Ra=Aa;return}else{Ba=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);Ra=Aa;return}}function Ur(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;R=Ra;Ra=Ra+160|0;M=R+104|0;i=R+96|0;E=R;F=R+136|0;O=R+64|0;G=R+132|0;I=R+128|0;J=R+124|0;K=R+120|0;g=c[h>>2]|0;if((((b[g+8>>1]&-15393)<<16>>16==-32255?(a[g+11>>0]|0)==112:0)?(Bu(c[g>>2]|0,54938)|0)==0:0)?(j=c[g+16>>2]|0,j|0):0){if(ur(f,j)|0){Ra=R;return}P=c[j>>2]|0;C=P+36|0;h=c[c[C>>2]>>2]|0;D=j+16|0;g=c[D>>2]|0;do if(!g){if((yc(c[f>>2]|0,59952,0,1,0)|0)==18){c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0}}else{c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[O+24>>2]=0;c[O+28>>2]=0;k=F+4|0;c[k>>2]=0;c[k+4>>2]=0;c[F>>2]=j;c[E>>2]=0;k=Zr(g,E,92,F)|0;B=c[F+8>>2]|0;a:do if(!k){A=pb(B*12|0,0)|0;H=O+24|0;c[H>>2]=A;if(A){z=j+32|0;A=c[z+4>>2]|0;x=O+16|0;c[x>>2]=c[z>>2];c[x+4>>2]=A;c[O>>2]=j;x=P+24|0;if((c[x>>2]|0)>0){y=O+4|0;z=O+8|0;A=j+12|0;t=j+20|0;u=h+20|0;v=(B|0)>0;w=P+40|0;s=h+16|0;r=0;h=0;j=0;n=0;b:while(1){c[G>>2]=0;c[I>>2]=0;c[J>>2]=0;c[K>>2]=0;c[y>>2]=r;c[z>>2]=0;l=c[D>>2]|0;c[E>>2]=0;Zr(l,E,94,O)|0;l=c[A>>2]|0;q=r;r=r+1|0;k=(l|0)==0;do if(k)g=29576;else{g=c[l+120>>2]|0;if(g|0?r>>>0<(e[l+144>>1]|0)>>>0:0){g=g+(r*40|0)|0;break}g=c[l>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0)m=c[g+16>>2]|0;else if(!(i&1))m=Gg(g,1)|0;else m=0;if(!k){i=c[l>>2]|0;k=l+40|0;g=c[k>>2]|0;if((g|0)==3082|(a[i+81>>0]|0)!=0){og(i);g=7}else g=c[i+68>>2]&g;c[k>>2]=g}g=Lc(c[A>>2]|0,r)|0;if(!m){l=c[A>>2]|0;if(!l)g=1;else{g=c[l+120>>2]|0;do if(!g)Q=38;else{if(r>>>0>=(e[l+144>>1]|0)>>>0){Q=38;break}g=g+(r*40|0)|0;i=l}while(0);if((Q|0)==38){Q=0;g=c[l>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;i=l}g=b[g+8>>1]&31;k=c[i>>2]|0;l=l+40|0;i=c[l>>2]|0;if((i|0)==3082|(a[k+81>>0]|0)!=0){og(k);i=7}else i=c[k+68>>2]&i;c[l>>2]=i}if(!(-1431655766>>>g&1)){k=7;g=H;Q=83;break a}else g=n}else{i=c[C>>2]|0;k=c[t>>2]|0;l=c[i>>2]|0;c[E>>2]=0;g=Za[c[l+12>>2]&127](i,m,g,E)|0;if(g|0){Q=47;break}c[c[E>>2]>>2]=i;if((c[l>>2]|0)>0?(N=Xa[c[l+24>>2]&255](c[E>>2]|0,k)|0,N|0):0){Q=46;break}p=c[E>>2]|0;g=$a[c[u>>2]&127](p,F,G,I,J,K)|0;i=n;c:while(1){d:while(1){switch(g|0){case 101:break c;case 0:break;default:{Q=79;break b}}do if(v){n=c[H>>2]|0;k=0;l=2147483647;m=0;while(1){g=n+(m*12|0)|0;if(!(c[g>>2]|0))o=k;else{S=(c[n+(m*12|0)+4>>2]|0)-(c[n+(m*12|0)+8>>2]|0)|0;T=(S|0)<(l|0);o=T?g:k;l=T?S:l}m=m+1|0;if((m|0)==(B|0))break;else k=o}if(!o){g=101;break}m=c[o>>2]|0;k=a[m>>0]|0;if((k&255)<2)c[o>>2]=0;else{n=o+4|0;g=k&255;do if(!(g&128))k=1;else{T=d[m+1>>0]|0;g=T<<7|k&127;if(!(T&128)){k=2;break}T=d[m+2>>0]|0;g=T<<14|g&16383;if(!(T&128)){k=3;break}T=d[m+3>>0]|0;g=T<<21|g&2097151;if(!(T&128)){k=4;break}g=(a[m+4>>0]&7)<<28|g&268435455;k=5}while(0);c[o>>2]=m+k;c[n>>2]=g+-2+(c[n>>2]|0)}if((c[K>>2]|0)>=(l|0))break d;do{g=$a[c[u>>2]&127](p,F,G,I,J,K)|0;k=(g|0)==0}while(k&(c[K>>2]|0)<(l|0));if(k)break d;if((g|0)!=101)break;g=(c[w>>2]|0)==0?267:101}else g=101;while(0)}T=(o-(c[H>>2]|0)|0)/12|0;m=c[I>>2]|0;l=(c[J>>2]|0)-m|0;c[M>>2]=q;c[M+4>>2]=T;c[M+8>>2]=m;c[M+12>>2]=l;Cb(64,E,55116,M)|0;l=Eu(E)|0;m=l+j|0;do if((m+1|0)<(i|0))Q=73;else{k=Sv(i|0,((i|0)<0)<<31>>31|0,100,0)|0;k=Sv(k|0,L()|0,l|0,((l|0)<0)<<31>>31|0)|0;g=L()|0;if(mb()|0){g=7;break}g=sb(h,k,g)|0;if(!g){g=7;break}h=g;i=k;Q=73}while(0);if((Q|0)==73){Q=0;ew(h+j|0,E|0,l|0)|0;a[h+m>>0]=0;g=0;j=m}}Wa[c[s>>2]&127](p)|0;g=i}if((r|0)>=(c[x>>2]|0)){k=0;g=H;Q=83;break a}else n=g}if((Q|0)==46){Wa[c[l+16>>2]&127](c[E>>2]|0)|0;c[E>>2]=0;g=N;Q=47}else if((Q|0)==79)Wa[c[s>>2]&127](p)|0;k=g;g=H;Q=83}else{k=0;g=H;h=0;j=0;Q=83}}else{k=7;l=0;j=0}}else{g=O+24|0;h=0;j=0;Q=83}while(0);do if((Q|0)==83){g=c[g>>2]|0;if(g)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);l=h;break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);l=h;break}else l=h}while(0);g=P+248|0;h=c[g>>2]|0;do if(h|0){i=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,h);break}T=h;if((c[i+304>>2]|0)>>>0<=T>>>0?(c[i+308>>2]|0)>>>0>T>>>0:0){T=i+300|0;c[h>>2]=c[T>>2];c[T>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{T=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[g>>2]=0;if(!k){if((yc(c[f>>2]|0,l,j+-1|0,1,90)|0)!=18)break;c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;break}c[f+20>>2]=k;h=c[f>>2]|0;if(b[h+8>>1]&1){switch(k|0){case 516:{g=50738;break}case 100:{g=50760;break}case 101:{g=50782;break}default:{g=k&255;if(g>>>0<29?(520028155>>>g&1|0)!=0:0)g=c[22960+(g<<2)>>2]|0;else g=50724}}yc(h,g,-1,1,0)|0}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{T=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);Ra=R;return}c[i>>2]=51030;g=Bb(55087,i)|0;c[f+20>>2]=1;yc(c[f>>2]|0,g,-1,1,-1)|0;if(!g){Ra=R;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=R;return}else{T=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=R;return}}function Vr(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;g=i;e=c[f>>2]|0;if((((b[e+8>>1]&-15393)<<16>>16==-32255?(a[e+11>>0]|0)==112:0)?(Bu(c[e>>2]|0,54938)|0)==0:0)?(h=c[e+16>>2]|0,h|0):0){g=c[h>>2]|0;f=g+12|0;e=nd(c[f>>2]|0,55167,0,0,0)|0;a:do if(!e){e=Dr(g,1)|0;switch(e|0){case 0:case 101:{h=nd(c[f>>2]|0,55182,0,0,0)|0;e=(h|0)==0?e:h;break a}default:{nd(c[f>>2]|0,55195,0,0,0)|0;nd(c[f>>2]|0,55182,0,0,0)|0;break a}}}while(0);f=g+248|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}j=g;if((c[h+304>>2]|0)>>>0<=j>>>0?(c[h+308>>2]|0)>>>0>j>>>0:0){j=h+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,55129,-1,1,0)|0)!=18){Ra=i;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=i;return}case 101:{if((yc(c[d>>2]|0,55145,-1,1,0)|0)!=18){Ra=i;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=i;return}default:{c[d+20>>2]=(e|0)==0?-1:e;f=c[d>>2]|0;if(!(b[f+8>>1]&1)){Ra=i;return}switch(e|0){case 516:{e=50738;break}case 100:{e=50760;break}default:{e=e&255;if(e>>>0<29?(520028155>>>e&1|0)!=0:0)e=c[22960+(e<<2)>>2]|0;else e=50724}}yc(f,e,-1,1,0)|0;Ra=i;return}}}c[g>>2]=37598;e=Bb(55087,g)|0;c[d+20>>2]=1;yc(c[d>>2]|0,e,-1,1,-1)|0;if(!e){Ra=i;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);Ra=i;return}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);Ra=i;return}}function Wr(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;$=Ra;Ra=Ra+80|0;X=$+48|0;o=$+40|0;i=$+32|0;Y=$+76|0;U=$+64|0;V=$+60|0;Z=$+56|0;W=$;h=c[g>>2]|0;if((((b[h+8>>1]&-15393)<<16>>16==-32255?(a[h+11>>0]|0)==112:0)?(Bu(c[h>>2]|0,54938)|0)==0:0)?(T=c[h+16>>2]|0,T|0):0){do if((f|0)>1?(j=c[g+4>>2]|0,(j|0)!=0):0){f=b[j+8>>1]|0;if((f&514)==514?(a[j+10>>0]|0)==1:0){f=c[j+16>>2]|0;break}if(!(f&1))f=Gg(j,1)|0;else f=0}else f=0;while(0);_=c[T>>2]|0;O=(f|0)==0?55212:f;P=T+16|0;f=c[P>>2]|0;if(!f){if((yc(c[e>>2]|0,59952,0,0,0)|0)!=18){Ra=$;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=$;return}Q=W+8|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[W>>2]=T;R=W+4|0;c[R>>2]=c[_+24>>2];S=T+92|0;g=c[S>>2]|0;if(g)if(!(Bu(c[g+12>>2]|0,O)|0)){j=0;u=47}else{a[g>>0]=0;do if((a[g+1>>0]|0)==0?(a[g+2>>0]|0)==0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{N=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-N;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[S>>2]=0;f=c[P>>2]|0;u=27}else u=27;a:do if((u|0)==27){c[U>>2]=0;c[Y>>2]=0;Zr(f,Y,95,U)|0;g=c[U>>2]|0;c[T+24>>2]=g;c[Q>>2]=g;f=a[O>>0]|0;b:do if(!(f<<24>>24))f=0;else{j=_+232|0;k=_+234|0;l=c[R>>2]|0;m=G(l,g)|0;n=m*3|0;i=G((l+31|0)/32|0,g)|0;h=0;g=0;c:while(1){c[Y>>2]=0;switch(f<<24>>24){case 98:case 121:case 120:case 115:case 99:case 112:break;case 110:{if(!(a[j>>0]|0)){f=110;break c}break}case 97:{if(!(a[j>>0]|0)){f=97;break c}break}case 108:{if(!(a[k>>0]|0)){f=108;break c}break}default:break c}switch(f<<24>>24|0){case 99:case 112:case 110:{f=1;break}case 115:case 108:case 97:{f=l;break}case 121:{f=m;break}case 98:{f=i;break}default:f=n}g=f+g|0;h=h+1|0;f=a[O+h>>0]|0;if(!(f<<24>>24)){f=g;break b}}c[o>>2]=f<<24>>24;Wp(Y,55216,o);f=c[Y>>2]|0;c[e+20>>2]=1;yc(c[e>>2]|0,f,-1,1,-1)|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);break a}while(0);g=cw(f|0,0,3)|0;i=L()|0;g=g|4;h=Eu(O)|0;N=Sv(h|0,0,21,0)|0;i=Sv(N|0,L()|0,g|0,i|0)|0;i=pb(i,L()|0)|0;if(!i){c[S>>2]=0;c[T+88>>2]=1;i=0;f=7;h=0;u=303;break}else{j=g+20|0;gw(i|0,0,j|0)|0;u=i+16|0;c[u>>2]=20;g=f+1|0;c[u+(g<<2)>>2]=(g<<2)+20;c[i+4>>2]=f;j=i+j|0;c[i+12>>2]=j;ew(j|0,O|0,h+1|0)|0;a[i>>0]=1;c[S>>2]=i;c[T+88>>2]=1;j=1;g=i;u=47;break}}while(0);d:do if((u|0)==47){f=g+1|0;do if(a[f>>0]|0){f=g+2|0;if(!(a[f>>0]|0)){a[f>>0]=1;N=g+16+((c[g+4>>2]|0)+2<<2)|0;i=98;break}f=g+4|0;h=pb(c[f>>2]<<2,0)|0;if(!h){i=0;f=7;h=0;u=303;break d}if(!(c[g+8>>2]|0)){N=h;i=90}else{ew(h|0,g+20|0,c[f>>2]<<2|0)|0;N=h;i=90}}else{a[f>>0]=1;N=g+20|0;i=98}while(0);h=N;F=W+28|0;c[F>>2]=h;H=T+24|0;c[Q>>2]=c[H>>2];c[V>>2]=0;I=c[T>>2]|0;c[Z>>2]=0;J=W+24|0;K=U+4|0;M=(j|0)==0;x=T+32|0;y=I+140|0;z=U+4|0;A=I+16|0;B=I+20|0;C=T+28|0;D=I+12|0;E=W+16|0;w=0;g=N;while(1){v=O+w|0;f=a[v>>0]|0;if(!(f<<24>>24)){f=0;break}a[J>>0]=f;e:do switch(f<<24>>24|0){case 112:{if(M)f=0;else{c[g>>2]=c[Q>>2];f=0}break}case 99:{if(M)f=0;else{c[g>>2]=c[R>>2];f=0}break}case 110:{if(M)f=0;else{f=c[Z>>2]|0;if(!f){f=lr(I,Z)|0;if(!f){f=c[Z>>2]|0;if(!f){k=mc(29576)|0;u=74}else u=65}else j=0}else u=65;if((u|0)==65){g=c[f+120>>2]|0;if((g|0)!=0?(b[f+144>>1]|0)!=0:0)j=f;else{g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;u=74}if((u|0)==74){u=0;f=a[k>>0]|0;g=f&255;do if(!(g&128)){f=f&255;g=0}else{t=d[k+1>>0]|0;f=t<<7|g&127;if(!(t&128)){g=0;break}t=d[k+2>>0]|0;f=t<<14|f&16383;if(!(t&128)){g=0;break}t=d[k+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){g=0;break}l=28;j=k+4|0;f=f&268435455;g=0;while(1){t=d[j>>0]|0;s=cw(t&127|0,0,l|0)|0;f=Sv(s|0,L()|0,f|0,g|0)|0;g=L()|0;l=l+7|0;if(!(l>>>0<64&((t&128|0)!=0|0!=0)))break;else j=j+1|0}}while(0);j=f;f=(f|0)==0&(g|0)==0?267:0}c[V>>2]=f;c[c[F>>2]>>2]=j}break}case 97:{if(M)f=0;else{f=c[Z>>2]|0;if(!f){f=lr(I,Z)|0;if(!f){f=c[Z>>2]|0;if(!f){l=mc(29576)|0;u=99}else u=90}}else u=90;if((u|0)==90){g=c[f+120>>2]|0;if((g|0)!=0?(b[f+144>>1]|0)!=0:0)j=f;else{g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;l=k;u=99}if((u|0)==99){u=0;g=a[l>>0]|0;f=g&255;do if(!(f&128)){j=1;f=g&255;g=0}else{t=d[l+1>>0]|0;f=t<<7|f&127;if(!(t&128)){j=2;g=0;break}t=d[l+2>>0]|0;f=t<<14|f&16383;if(!(t&128)){j=3;g=0;break}t=d[l+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){j=4;g=0;break}j=28;k=l+4|0;f=f&268435455;g=0;do{t=k;k=k+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,j|0)|0;f=Sv(s|0,L()|0,f|0,g|0)|0;g=L()|0;j=j+7|0}while(j>>>0<64&((t&128|0)!=0|0!=0));j=k-l|0}while(0);if((f|0)==0&(g|0)==0)f=267;else{c[V>>2]=0;if((c[R>>2]|0)<=0){f=0;break e}o=bw(f|0,0,1)|0;p=L()|0;n=0;m=l+j|0;while(1){j=a[m>>0]|0;g=j&255;do if(!(g&128)){k=1;g=j&255}else{t=d[m+1>>0]|0;g=t<<7|g&127;if(!(t&128)){k=2;break}t=d[m+2>>0]|0;g=t<<14|g&16383;if(!(t&128)){k=3;break}t=d[m+3>>0]|0;g=t<<21|g&2097151;if(!(t&128)){k=4;break}k=28;l=m+4|0;g=g&268435455;j=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;g=Sv(s|0,L()|0,g|0,j|0)|0;j=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));k=l-m|0}while(0);t=Sv(g|0,0,o|0,p|0)|0;t=_v(t|0,L()|0,f|0,0)|0;L()|0;c[(c[F>>2]|0)+(n<<2)>>2]=t;n=n+1|0;if((n|0)>=(c[R>>2]|0)){f=0;break e}else m=m+k|0}}}c[V>>2]=f}break}case 108:{l=x;k=c[l>>2]|0;l=c[l+4>>2]|0;u=c[y>>2]|0;c[Y>>2]=u;g=u;do if(!u){j=c[B>>2]|0;c[X>>2]=c[A>>2];c[X+4>>2]=j;j=Bb(52364,X)|0;if(!j){f=7;u=156;break}f=qd(c[D>>2]|0,j,-1,133,0,Y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{u=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}g=c[Y>>2]|0;c[y>>2]=g;if(!f)u=134;else u=156}else u=134;while(0);f:do if((u|0)==134){u=0;o=g;do if(!(Vc(o,1)|0)){f=c[o+100>>2]|0;j=f+8|0;if(!(b[j>>1]&9216)){t=f;c[t>>2]=k;c[t+4>>2]=l;b[j>>1]=4;break}else{Pg(f,k,l);break}}while(0);f=(g|0)==0;do if((Gc(o)|0)==100){if(!f){m=o+120|0;f=c[m>>2]|0;do if(!f)u=143;else{if(!(b[o+144>>1]|0)){u=143;break}j=f;f=o}while(0);if((u|0)==143){u=0;j=c[o>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;f=o}l=b[j+8>>1]&15;j=c[f>>2]|0;n=o+40|0;k=c[n>>2]|0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&k;c[n>>2]=j;if((l|16)<<16>>16!=16){u=150;break}c[V>>2]=0;f=c[m>>2]|0;do if(!f)u=160;else{if(!(b[o+144>>1]|0)){u=160;break}j=o}while(0);if((u|0)==160){u=0;f=c[o>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576;j=o}k=mc(f)|0;f=c[j>>2]|0;j=c[n>>2]|0;if((j|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&j;c[n>>2]=f;if((c[R>>2]|0)<=0){k=o;g=o;f=0;break f}m=k;n=0;while(1){f=d[m>>0]|0;do if(!(f&128))j=1;else{u=d[m+1>>0]|0;f=u<<7|f&127;if(!(u&128)){j=2;break}u=d[m+2>>0]|0;f=u<<14|f&16383;if(!(u&128)){j=3;break}u=d[m+3>>0]|0;f=u<<21|f&2097151;if(!(u&128)){j=4;break}k=28;l=m+4|0;f=f&268435455;j=0;do{u=l;l=l+1|0;u=d[u>>0]|0;t=cw(u&127|0,0,k|0)|0;f=Sv(t|0,L()|0,f|0,j|0)|0;j=L()|0;k=k+7|0}while(k>>>0<64&((u&128|0)!=0|0!=0));j=l-m|0}while(0);c[(c[F>>2]|0)+(n<<2)>>2]=f;n=n+1|0;if((n|0)>=(c[R>>2]|0)){j=o;f=0;u=174;break f}else m=m+j|0}}}else if(!f){f=o;u=150}while(0);do if((u|0)==150){f=c[f>>2]|0;u=o+136|0;t=c[u+4>>2]|0;if((t|0)>0|(t|0)==0&(c[u>>2]|0)>>>0>0)hc(f,o);g=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;u=o+64|0;c[u>>2]=0;c[u+4>>2]=0;if(!((g|0)==3082|(a[f+81>>0]|0)!=0)){f=c[f+68>>2]&g;if(!f)break;else{g=0;u=156;break f}}else{og(f);f=7;g=0;u=156;break f}}while(0);f=267;g=0;u=156}while(0);if((u|0)==156){c[V>>2]=f;j=g;u=174}if((u|0)==174){u=0;if(!g)break e;k=j;g=j}g=c[g>>2]|0;t=k+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(g,k);t=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;s=k+64|0;c[s>>2]=0;c[s+4>>2]=0;if((t|0)==3082|(a[g+81>>0]|0)!=0)og(g);break}case 115:{f=z;c[f>>2]=0;c[f+4>>2]=0;c[U>>2]=T;f=c[P>>2]|0;c[Y>>2]=0;f=Zr(f,Y,92,U)|0;c[V>>2]=f;if(!f){t=pb(c[H>>2]<<4,0)|0;do if(t){gw(t|0,0,c[H>>2]<<4|0)|0;f=c[P>>2]|0;c[Y>>2]=0;Zr(f,Y,96,t)|0;f=c[Q>>2]|0;if((f|0)>0){g=0;j=0;do{g=g-(c[(c[(c[t+(j<<4)>>2]|0)+20>>2]|0)+64>>2]|0)|0;c[t+(j<<4)+4>>2]=g;j=j+1|0}while((j|0)!=(f|0))}g:do if((c[R>>2]|0)>0){s=0;h:while(1){i:do if((f|0)>0){g=0;q=0;do{p=t+(q<<4)+8|0;f=_r(T,c[t+(q<<4)>>2]|0,s,p)|0;if(f|0)break g;m=c[p>>2]|0;if(m){n=c[t+(q<<4)+4>>2]|0;o=t+(q<<4)+12|0;c[o>>2]=n;j=a[m>>0]|0;f=j&255;do if(!(f&128)){k=1;l=0;f=j&255}else{r=d[m+1>>0]|0;f=r<<7|f&127;if(!(r&128)){k=2;l=0;break}r=d[m+2>>0]|0;f=r<<14|f&16383;if(!(r&128)){k=3;l=0;break}r=d[m+3>>0]|0;f=r<<21|f&2097151;if(!(r&128)){k=4;l=0;break}j=28;k=m+4|0;f=f&268435455;l=0;do{r=k;k=k+1|0;r=d[r>>0]|0;aa=cw(r&127|0,0,j|0)|0;f=Sv(aa|0,L()|0,f|0,l|0)|0;l=L()|0;j=j+7|0}while(j>>>0<64&((r&128|0)!=0|0!=0));k=k-m|0}while(0);if(l>>>0<0|(l|0)==0&f>>>0<2)break h;c[o>>2]=n+-2+f;c[p>>2]=m+k;g=g+1|0}q=q+1|0;r=c[Q>>2]|0}while((q|0)<(r|0));if((g|0)<=0){f=0;break}if((r|0)<=0){f=g;g=c[2]|0;while(1){k=a[g>>0]|0;j=k&255;do if(!(j&128)){l=1;m=0;j=k&255}else{aa=d[g+1>>0]|0;j=aa<<7|j&127;if(!(aa&128)){l=2;m=0;break}aa=d[g+2>>0]|0;j=aa<<14|j&16383;if(!(aa&128)){l=3;m=0;break}aa=d[g+3>>0]|0;j=aa<<21|j&2097151;if(!(aa&128)){l=4;m=0;break}k=28;l=g+4|0;j=j&268435455;m=0;do{aa=l;l=l+1|0;aa=d[aa>>0]|0;r=cw(aa&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,m|0)|0;m=L()|0;k=k+7|0}while(k>>>0<64&((aa&128|0)!=0|0!=0));l=l-g|0}while(0);if(m>>>0<0|(m|0)==0&j>>>0<2){c[2]=0;g=0;f=f+-1|0}else{g=g+l|0;c[3]=j+-2+(c[3]|0);c[2]=g}if((f|0)<=0){f=0;break i}}}f=0;do{l=0;k=0;m=0;do{j=t+(m<<4)|0;if(!(c[t+(m<<4)+8>>2]|0))l=0;else{if(!((k|0)!=0?(c[t+(m<<4)+12>>2]|0)>=(c[k+12>>2]|0):0))k=j;if((l|0)!=0?(c[t+(m<<4)+12>>2]|0)!=(c[j+-16+12>>2]|0):0)j=1;else j=l+1|0;l=j;f=(j|0)>(f|0)?j:f}m=m+1|0}while((m|0)!=(r|0));p=k+8|0;o=c[p>>2]|0;l=a[o>>0]|0;j=l&255;do if(!(j&128)){m=1;n=0;j=l&255}else{aa=d[o+1>>0]|0;j=aa<<7|j&127;if(!(aa&128)){m=2;n=0;break}aa=d[o+2>>0]|0;j=aa<<14|j&16383;if(!(aa&128)){m=3;n=0;break}aa=d[o+3>>0]|0;j=aa<<21|j&2097151;if(!(aa&128)){m=4;n=0;break}l=28;m=o+4|0;j=j&268435455;n=0;do{aa=m;m=m+1|0;aa=d[aa>>0]|0;q=cw(aa&127|0,0,l|0)|0;j=Sv(q|0,L()|0,j|0,n|0)|0;n=L()|0;l=l+7|0}while(l>>>0<64&((aa&128|0)!=0|0!=0));m=m-o|0}while(0);if(n>>>0<0|(n|0)==0&j>>>0<2){c[p>>2]=0;g=g+-1|0}else{aa=k+12|0;c[aa>>2]=j+-2+(c[aa>>2]|0);c[p>>2]=o+m}}while((g|0)>0)}else f=0;while(0);c[(c[F>>2]|0)+(s<<2)>>2]=f;f=s+1|0;if((f|0)>=(c[R>>2]|0)){f=0;break g}s=f;f=c[Q>>2]|0}c[p>>2]=0;f=267}else f=0;while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{aa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else f=7;while(0);c[V>>2]=f}break}case 98:{f=G(((c[R>>2]|0)+31|0)/32|0,c[Q>>2]|0)|0;u=258;break}case 121:{f=G(c[Q>>2]|0,c[R>>2]|0)|0;u=258;break}default:{m=c[P>>2]|0;f=K;c[f>>2]=0;c[f+4>>2]=0;c[U>>2]=T;c[Y>>2]=0;f=Zr(m,Y,92,U)|0;c[V>>2]=f;if(!f){if(!M){j:do if(c[C>>2]|0){f=c[Z>>2]|0;do if(!f){f=lr(I,Z)|0;if(f|0)break;f=c[Z>>2]|0;if(f|0){u=265;break}k=mc(29576)|0;u=274}else u=265;while(0);if((u|0)==265){u=0;g=c[f+120>>2]|0;do if(!g)u=268;else{if(!(b[f+144>>1]|0)){u=268;break}j=f}while(0);if((u|0)==268){g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;u=274}do if((u|0)==274){u=0;f=a[k>>0]|0;g=f&255;do if(!(g&128)){f=f&255;g=0}else{aa=d[k+1>>0]|0;f=aa<<7|g&127;if(!(aa&128)){g=0;break}aa=d[k+2>>0]|0;f=aa<<14|f&16383;if(!(aa&128)){g=0;break}aa=d[k+3>>0]|0;f=aa<<21|f&2097151;if(!(aa&128)){g=0;break}l=28;j=k+4|0;f=f&268435455;g=0;while(1){aa=d[j>>0]|0;t=cw(aa&127|0,0,l|0)|0;f=Sv(t|0,L()|0,f|0,g|0)|0;g=L()|0;l=l+7|0;if(!(l>>>0<64&((aa&128|0)!=0|0!=0)))break;else j=j+1|0}}while(0);if((f|0)==0&(g|0)==0){f=267;break}aa=E;c[aa>>2]=f;c[aa+4>>2]=0;c[V>>2]=0;break j}while(0);c[V>>2]=f;break e}while(0);c[Y>>2]=0;f=Zr(m,Y,97,W)|0;c[V>>2]=f;rr(T,V)|0;f=c[V>>2]|0;if(f|0)break e}c[Y>>2]=0;Zr(m,Y,98,W)|0;f=0}}}while(0);if((u|0)==258){u=0;gw(g|0,0,f<<2|0)|0;f=ds(c[P>>2]|0,W)|0;c[V>>2]=f}switch(a[v>>0]|0){case 99:case 112:case 110:{g=1;break}case 115:case 108:case 97:{g=c[R>>2]|0;break}case 121:{g=G(c[Q>>2]|0,c[R>>2]|0)|0;break}case 98:{g=G(((c[R>>2]|0)+31|0)/32|0,c[Q>>2]|0)|0;break}default:g=G((c[R>>2]|0)*3|0,c[Q>>2]|0)|0}g=(c[F>>2]|0)+(g<<2)|0;c[F>>2]=g;if(f|0)break;else w=w+1|0}g=c[Z>>2]|0;if(g|0){j=c[g>>2]|0;aa=g+136|0;Z=c[aa+4>>2]|0;if((Z|0)>0|(Z|0)==0&(c[aa>>2]|0)>>>0>0)hc(j,g);aa=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;Z=g+64|0;c[Z>>2]=0;c[Z+4>>2]=0;if((aa|0)==3082|(a[j+81>>0]|0)!=0)og(j)}if(!M){Z=c[S>>2]|0;c[Z+8>>2]=1;aa=c[Z+4>>2]|0;ew(Z+16+(aa+2<<2)|0,Z+20|0,aa<<2|0)|0}if(!f){if((yc(c[e>>2]|0,N,c[(c[S>>2]|0)+4>>2]<<2,0,i)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}}else u=303}while(0);if((u|0)==303){c[e+20>>2]=f;g=c[e>>2]|0;if(b[g+8>>1]&1){switch(f|0){case 516:{f=50738;break}case 100:{f=50760;break}case 101:{f=50782;break}default:{f=f&255;if(f>>>0<29?(520028155>>>f&1|0)!=0:0)f=c[22960+(f<<2)>>2]|0;else f=50724}}yc(g,f,-1,1,0)|0}if(i|0)ab[i&127](h)}f=_+248|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}aa=g;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[g>>2]=c[aa>>2];c[aa>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{aa=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0;Ra=$;return}c[i>>2]=51038;f=Bb(55087,i)|0;c[e+20>>2]=1;yc(c[e>>2]|0,f,-1,1,-1)|0;if(!f){Ra=$;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=$;return}else{aa=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=$;return}}function Xr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;i=k;j=c[f+16>>2]|0;c[j+(e*24|0)>>2]=c[(c[b+20>>2]|0)+64>>2];h=_r(c[f>>2]|0,b,c[f+4>>2]|0,i)|0;g=c[i>>2]|0;if(!g){j=h;Ra=k;return j|0}c[j+(e*24|0)+4>>2]=g;f=a[g>>0]|0;b=f&255;if(b&128){l=d[g+1>>0]|0;b=l<<7|f&127;if(l&128){l=d[g+2>>0]|0;b=l<<14|b&16383;if(l&128){l=d[g+3>>0]|0;b=l<<21|b&2097151;if(!(l&128))f=4;else{b=(a[g+4>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;g=g+f|0;c[i>>2]=g;f=b+-2|0;if((b|0)<2){l=267;Ra=k;return l|0}c[j+(e*24|0)+12>>2]=g;c[j+(e*24|0)+20>>2]=g;c[j+(e*24|0)+8>>2]=f;c[j+(e*24|0)+16>>2]=f;l=h;Ra=k;return l|0}function Yr(a,b,d){a=a|0;b=b|0;d=d|0;b=c[a+20>>2]|0;a=d+4|0;c[a>>2]=(c[a>>2]|0)+1;d=d+8|0;c[d>>2]=(c[d>>2]|0)+(c[b+64>>2]|0);return 0}function Zr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[a>>2]|0;a:do if((f|0)!=5){g=a;while(1){a=Zr(c[g+12>>2]|0,b,d,e)|0;if(!((f|0)!=2&(a|0)==0))break;a=c[g+16>>2]|0;f=c[a>>2]|0;if((f|0)==5)break a;else g=a}return a|0}while(0);e=Ya[d&127](a,c[b>>2]|0,e)|0;c[b>>2]=(c[b>>2]|0)+1;return e|0}function _r(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;G=Ra;Ra=Ra+32|0;F=G+16|0;C=G;o=G+12|0;D=G+20|0;E=G+8|0;A=c[e+20>>2]|0;i=c[b>>2]|0;c[g>>2]=0;B=c[A+68>>2]|0;if(!((B|0)==(f|0)?1:(B|0)>=(c[i+24>>2]|0))){g=0;Ra=G;return g|0}n=e+24|0;m=c[n>>2]|0;n=c[n+4>>2]|0;h=C;c[h>>2]=m;c[h+4>>2]=n;h=c[A+28>>2]|0;c[F>>2]=h;B=b+32|0;z=B;if(!(((m|0)==(c[z>>2]|0)?(n|0)==(c[z+4>>2]|0):0)?(a[e+32>>0]|0)==0:0))x=4;a:do if((x|0)==4){c[o>>2]=0;y=a[i+235>>0]|0;z=y&255;h=c[e+8>>2]|0;b:do if(h){i=0;l=0;do{x=c[h>>2]|0;i=(x|0)==4?1:i;e=(x|0)==1?h:e;l=(a[h+32>>0]|0)==0?l:1;h=c[h+8>>2]|0}while((h|0)!=0);if(i){c:do if(c[A+40>>2]|0){k=e+32|0;i=a[k>>0]|0;$r(b,e,o);j=e+24|0;h=c[o>>2]|0;if(!h)if(!(i<<24>>24))do{if(a[k>>0]|0){h=0;break c}qr(b,e,o);x=j;h=c[o>>2]|0}while(((c[x>>2]|0)!=(m|0)?1:(c[x+4>>2]|0)!=(n|0))&(h|0)==0);else do{if(a[k>>0]|0){h=0;break c}qr(b,e,o);h=c[o>>2]|0}while(!(h|0))}else h=0;while(0);i=(h|0)==0;d:do if(!(l<<24>>24)){if(!i)break b;if(!e)x=81;else x=24}else{if(!i)break b;i=e+32|0;while(1){if(a[i>>0]|0){x=24;break d}qr(b,e,o);h=c[o>>2]|0;if(h|0)break b}}while(0);if((x|0)==24){u=b+52|0;w=y<<24>>24==0;v=w?1:-1;w=w?0:-1;h=1;do{a[D>>0]=0;if((c[e>>2]|0)==1)i=c[e+16>>2]|0;else i=e;r=c[i+20>>2]|0;s=r+48|0;j=c[s>>2]|0;c[F>>2]=j;t=r+56|0;m=t;i=c[m>>2]|0;m=c[m+4>>2]|0;b=C;c[b>>2]=i;c[b+4>>2]=m;b=r+4|0;q=c[b>>2]|0;k=(q|0)!=0;l=j;e:do if((a[u>>0]|0)==y<<24>>24){if(k)k=((c[r>>2]|0)+q|0)>>>0<=l>>>0;else k=1;n=k&1;a[D>>0]=n;p=n;b=l;while(1){f:do if(!b){if(p<<24>>24){h=m;x=76;break e}n=c[r>>2]|0;l=n;i=a[n>>0]|0;j=i&255;do if(!(j&128)){i=i&255;j=C;c[j>>2]=i;c[j+4>>2]=0;j=1;m=0}else{p=d[n+1>>0]|0;i=p<<7|j&127;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=2;m=0;break}p=d[n+2>>0]|0;i=p<<14|i&16383;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=3;m=0;break}p=d[n+3>>0]|0;i=p<<21|i&2097151;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=4;m=0;break}j=28;k=n+4|0;i=i&268435455;m=0;do{p=k;k=k+1|0;p=d[p>>0]|0;o=cw(p&127|0,0,j|0)|0;i=Sv(o|0,L()|0,i|0,m|0)|0;m=L()|0;j=j+7|0}while(j>>>0<64&((p&128|0)!=0|0!=0));j=C;c[j>>2]=i;c[j+4>>2]=m;j=k-l|0}while(0);k=0;j=n+j|0;n=0}else{k=B;l=c[k>>2]|0;k=c[k+4>>2]|0;o=Tv(i|0,m|0,l|0,k|0)|0;Yv(o|0,L()|0,v|0,w|0)|0;if(!(n<<24>>24==0&(L()|0)<0)){x=77;break e}n=c[r>>2]|0;l=b;j=0;while(1){k=a[l>>0]|0;l=l+1|0;if(!(j<<24>>24|k))break;else j=k&128}j=l;k=n+q|0;do if(l>>>0<k>>>0){while(1){n=a[l>>0]|0;if(n<<24>>24)break;j=l+1|0;if(j>>>0<k>>>0)l=j;else{x=52;break}}if((x|0)==52){x=0;break}k=n&255;do if(!(k&128)){b=1;k=n&255;j=0}else{o=d[l+1>>0]|0;k=o<<7|k&127;if(!(o&128)){b=2;j=0;break}o=d[l+2>>0]|0;k=o<<14|k&16383;if(!(o&128)){b=3;j=0;break}o=d[l+3>>0]|0;k=o<<21|k&2097151;if(!(o&128)){b=4;j=0;break}n=28;b=l+4|0;k=k&268435455;o=0;do{H=b;b=b+1|0;H=d[H>>0]|0;I=cw(H&127|0,0,n|0)|0;k=Sv(I|0,L()|0,k|0,o|0)|0;o=L()|0;n=n+7|0}while(n>>>0<64&((H&128|0)!=0|0!=0));b=b-j|0;j=o}while(0);k=Yv(k|0,j|0,v|0,w|0)|0;i=Sv(i|0,m|0,k|0,L()|0)|0;m=L()|0;k=C;c[k>>2]=i;c[k+4>>2]=m;k=p;j=l+b|0;n=0;break f}while(0);a[D>>0]=1;k=1;n=1}while(0);c[F>>2]=j;p=k;b=j}}else{if(k)if(!j)i=0;else i=(c[r>>2]|0)>>>0>=l>>>0;else i=1;a[D>>0]=i&1;i=l;while(1){if(!i){if(a[D>>0]|0)break}else{m=C;i=c[m>>2]|0;m=c[m+4>>2]|0;k=B;l=c[k>>2]|0;k=c[k+4>>2]|0;I=Tv(i|0,m|0,l|0,k|0)|0;I=Yv(I|0,L()|0,v|0,w|0)|0;H=L()|0;n=a[D>>0]|0;if(!(n<<24>>24==0&((H|0)>0|(H|0)==0&I>>>0>0))){x=77;break e}}kq(z,c[r>>2]|0,c[b>>2]|0,F,C,E,D);j=c[F>>2]|0;i=j}h=C;i=c[h>>2]|0;h=c[h+4>>2]|0;x=76}while(0);if((x|0)==76){c[s>>2]=j;I=t;c[I>>2]=i;c[I+4>>2]=h;x=78}else if((x|0)==77){x=0;c[s>>2]=j;I=t;c[I>>2]=i;c[I+4>>2]=m;if(!(n<<24>>24==0&((i|0)==(l|0)&(m|0)==(k|0))))x=78}if((x|0)==78){x=0;h=0}e=c[e+12>>2]|0}while((e|0)!=0);if(!h)h=0;else x=81}if((x|0)==81)h=c[A+48>>2]|0;c[F>>2]=h;break a}else h=0}else h=0;while(0);I=h;Ra=G;return I|0}while(0);if(!h){I=0;Ra=G;return I|0}if((a[h>>0]|0)==1){j=h+1|0;c[F>>2]=j;i=a[j>>0]|0;e=i&255;if(e&128){I=d[h+2>>0]|0;i=I<<7|i&127;if(I&128){I=d[h+3>>0]|0;i=I<<14|i&16383;if(I&128){I=d[h+4>>0]|0;i=I<<21|i&2097151;if(!(I&128)){h=i;i=4}else{h=(a[h+5>>0]&7)<<28|i&268435455;i=5}}else{h=i;i=3}}else{h=i;i=2}}else{h=e;i=1}I=j+i|0;c[F>>2]=I;i=h;h=I}else i=0;e=a[h>>0]|0;g:do if((i|0)<(f|0)){while(1){i=e<<24>>24;if(i&254)do{h=h+1|0;I=i;i=a[h>>0]|0}while((i&254|I&128|0)!=0);c[F>>2]=h;if(!(a[h>>0]|0)){h=0;break}j=h+1|0;c[F>>2]=j;e=a[j>>0]|0;i=e&255;if(i&128){I=d[h+2>>0]|0;i=I<<7|e&127;if(I&128){I=d[h+3>>0]|0;i=I<<14|i&16383;if(I&128){I=d[h+4>>0]|0;i=I<<21|i&2097151;if(!(I&128))h=4;else{i=(a[h+5>>0]&7)<<28|i&268435455;h=5}}else h=3}else h=2}else h=1;h=j+h|0;c[F>>2]=h;e=a[h>>0]|0;if((i|0)>=(f|0))break g}Ra=G;return h|0}while(0);if(!(e<<24>>24)){c[F>>2]=0;h=0}c[g>>2]=(i|0)==(f|0)?h:0;I=0;Ra=G;return I|0}function $r(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;m=p+4|0;n=p;if(!d){Ra=p;return}if(c[e>>2]|0){Ra=p;return}o=c[d+20>>2]|0;if(o|0){g=o+24|0;f=o+28|0;do if(c[g>>2]|0?(h=c[f>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[f>>2]=0;c[o+32>>2]=0;c[g>>2]=0;l=o+40|0;if(c[l>>2]|0){k=o+64|0;j=c[k>>2]|0;if((j|0)>0){h=0;do{f=c[o+72+(h*24|0)+20>>2]|0;if(f|0?(c[f+8>>2]=0,c[f+28>>2]=1,i=c[f+4>>2]|0,(i|0)>0):0){g=c[f>>2]|0;f=0;do{q=g+(f<<2)|0;c[(c[q>>2]|0)+80>>2]=0;q=c[q>>2]|0;c[q+84>>2]=0;q=q+88|0;c[q>>2]=0;c[q+4>>2]=0;f=f+1|0}while((f|0)!=(i|0))}h=h+1|0}while((h|0)<(j|0))}h=c[b>>2]|0;i=o+68|0;a:do if((j|0)>0){g=0;while(1){if(c[o+72+(g*24|0)+20>>2]|0){c[m>>2]=0;c[n>>2]=0;f=jr(h,o+72+(g*24|0)|0,c[i>>2]|0,m,n)|0;if(f|0)break;f=kr(h,o,g,c[n>>2]|0,c[m>>2]|0)|0;if(f|0)break a}g=g+1|0;if((g|0)>=(c[k>>2]|0)){f=0;break a}}}else f=0;while(0);c[l>>2]=0;c[e>>2]=f}c[o+8>>2]=0;q=o+16|0;c[q>>2]=0;c[q+4>>2]=0;c[o+48>>2]=0}q=d+24|0;c[q>>2]=0;c[q+4>>2]=0;a[d+32>>0]=0;a[d+33>>0]=0;$r(b,c[d+12>>2]|0,e);$r(b,c[d+16>>2]|0,e);Ra=p;return}function as(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;h=n;m=_r(c[f>>2]|0,b,c[f+4>>2]|0,h)|0;l=c[(c[b+20>>2]|0)+64>>2]|0;g=c[h>>2]|0;if(!g){i=0;j=0}else{b=a[g>>0]|0;e=b&255;if(e&128){k=d[g+1>>0]|0;e=k<<7|b&127;if(k&128){k=d[g+2>>0]|0;e=k<<14|e&16383;if(k&128){k=d[g+3>>0]|0;e=k<<21|e&2097151;if(!(k&128))b=4;else{e=(a[g+4>>0]&7)<<28|e&268435455;b=5}}else b=3}else b=2}else b=1;j=g+b|0;c[h>>2]=j;i=e+-2|0}if((l|0)<=0){Ra=n;return m|0}k=c[f+24>>2]|0;g=f+8|0;h=l+-1|0;b=c[g>>2]|0;e=0;f=b;while(1){c[k+(f*12|0)+8>>2]=h-e;c[k+(f*12|0)>>2]=j;c[k+(f*12|0)+4>>2]=i;e=e+1|0;if((e|0)==(l|0))break;else f=f+1|0}c[g>>2]=b+l;Ra=n;return m|0}function bs(a,b,d){a=a|0;b=b|0;d=d|0;c[d>>2]=(c[d>>2]|0)+1;c[a+36>>2]=b;return 0}function cs(b){b=b|0;var d=0;d=b+(0-(c[b+-4>>2]|0))|0;if((d+16+4|0)==(b|0))a[d+1>>0]=0;else a[d+2>>0]=0;if(a[d>>0]|0)return;if(a[d+1>>0]|0)return;if(a[d+2>>0]|0)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{b=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function ds(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(a[b+32>>0]|0){n=0;return n|0}while(1){m=b+24|0;h=c[e>>2]|0;n=h+32|0;if(!((c[m>>2]|0)==(c[n>>2]|0)?(c[m+4>>2]|0)==(c[n+4>>2]|0):0)){g=0;f=36;break}f=c[b+12>>2]|0;if(!f){f=7;break}f=ds(f,e)|0;if(f|0){g=f;f=36;break}f=c[b+16>>2]|0;if(!(a[f+32>>0]|0))b=f;else{g=0;f=36;break}}if((f|0)==7){m=c[b+20>>2]|0;f=c[m+28>>2]|0;i=(a[e+24>>0]|0)==121;n=e+4|0;l=c[n>>2]|0;l=G(i?l:(l+31|0)/32|0,c[b+36>>2]|0)|0;m=m+68|0;k=(c[h>>2]|0)+24|0;j=e+28|0;if(i){i=0;while(1){b=a[f>>0]|0;g=b<<24>>24;if(!(g&254)){h=0;e=f}else{b=0;while(1){f=f+1|0;e=g&128;h=(e>>>7^1)+b|0;b=a[f>>0]|0;g=b<<24>>24;if(!(g&254|e)){e=f;break}else b=h}}g=c[m>>2]|0;if((g|0)==(i|0)?1:(g|0)>=(c[k>>2]|0)){c[(c[j>>2]|0)+(i+l<<2)>>2]=h;b=a[e>>0]|0}if(b<<24>>24!=1){g=0;f=36;break}g=e+1|0;f=a[g>>0]|0;b=f&255;if(b&128){i=d[e+2>>0]|0;b=i<<7|f&127;if(i&128){i=d[e+3>>0]|0;b=i<<14|b&16383;if(i&128){i=d[e+4>>0]|0;b=i<<21|b&2097151;if(!(i&128))f=4;else{b=(a[e+5>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;if((b|0)>=(c[n>>2]|0)){g=267;f=36;break}i=b;f=g+f|0}if((f|0)==36)return g|0}else{i=0;while(1){b=a[f>>0]|0;g=b<<24>>24;if(!(g&254)){h=0;e=f}else{b=0;while(1){f=f+1|0;e=g&128;h=(e>>>7^1)+b|0;b=a[f>>0]|0;g=b<<24>>24;if(!(g&254|e)){e=f;break}else b=h}}g=c[m>>2]|0;if(!((h|0)==0|((g|0)!=(i|0)?(g|0)<(c[k>>2]|0):0))){b=(c[j>>2]|0)+(((i+1|0)/32|0)+l<<2)|0;c[b>>2]=c[b>>2]|1<<(i&31);b=a[e>>0]|0}if(b<<24>>24!=1){g=0;f=36;break}g=e+1|0;f=a[g>>0]|0;b=f&255;if(b&128){i=d[e+2>>0]|0;b=i<<7|f&127;if(i&128){i=d[e+3>>0]|0;b=i<<14|b&16383;if(i&128){i=d[e+4>>0]|0;b=i<<21|b&2097151;if(!(i&128))f=4;else{b=(a[e+5>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;if((b|0)>=(c[n>>2]|0)){g=267;f=36;break}i=b;f=g+f|0}if((f|0)==36)return g|0}}else if((f|0)==36)return g|0;return 0}function es(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=Ra;Ra=Ra+16|0;s=w;u=c[e>>2]|0;v=(c[e+28>>2]|0)+((G(d*3|0,c[e+4>>2]|0)|0)<<2)|0;f=c[u>>2]|0;if(a[b+34>>0]|0?(c[c[b+8>>2]>>2]|0)!=1:0){b=f+24|0;if((c[b>>2]|0)<=0){v=0;Ra=w;return v|0}e=c[u+64>>2]|0;d=0;do{u=d*3|0;c[v+(u+1<<2)>>2]=e;c[v+(u+2<<2)>>2]=e;d=d+1|0}while((d|0)<(c[b>>2]|0));d=0;Ra=w;return d|0}c[s>>2]=0;t=b+40|0;if(!(c[t>>2]|0)){o=u+32|0;q=o;p=c[q>>2]|0;q=c[q+4>>2]|0;e=c[b+8>>2]|0;a:do if(!e)e=b;else{d=b;while(1){if((c[e>>2]|0)!=1){e=d;break a}d=c[e+8>>2]|0;if(!d)break;else{n=e;e=d;d=n}}}while(0);l=e+24|0;n=l;m=c[n>>2]|0;n=c[n+4>>2]|0;j=e+32|0;k=a[j>>0]|0;b=f+24|0;d=e;do{if((c[d>>2]|0)==5)g=d;else g=c[d+16>>2]|0;f=pb((c[b>>2]|0)*12|0,0)|0;c[g+40>>2]=f;if(!f){h=16;break}gw(f|0,0,(c[b>>2]|0)*12|0)|0;d=c[d+12>>2]|0}while((d|0)!=0);if((h|0)==16){v=7;Ra=w;return v|0}$r(u,e,s);i=u+6|0;d=c[s>>2]|0;b:do if((a[i>>0]|0)==0&(d|0)==0){f=u+7|0;g=u+12|0;h=u+88|0;while(1){if((a[f>>0]|0)==0?(r=c[g>>2]|0,r|0):0){d=c[r>>2]|0;x=r+136|0;y=c[x+4>>2]|0;if((y|0)>0|(y|0)==0&(c[x>>2]|0)>>>0>0)hc(d,r);y=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;x=r+64|0;c[x>>2]=0;c[x+4>>2]=0;if((y|0)==3082|(a[d+81>>0]|0)!=0)og(d)}qr(u,e,s);y=a[j>>0]|0;a[i>>0]=y;a[f>>0]=1;c[h>>2]=1;z=l;d=c[z+4>>2]|0;x=o;c[x>>2]=c[z>>2];c[x+4>>2]=d;if(!((y<<24>>24==0?(c[e>>2]|0)==1:0)?(rr(u,s)|0)!=0:0)){d=c[s>>2]|0;if(d|0)break b;if(a[i>>0]|0){d=0;break b}hs(e,c[b>>2]|0);d=c[s>>2]|0;if(!((d|0)==0&(a[i>>0]|0)==0))break b}}}while(0);a[i>>0]=0;z=o;c[z>>2]=p;c[z+4>>2]=q;if(!(k<<24>>24)){$r(u,e,s);do{qr(u,e,s);z=l;d=c[s>>2]|0}while(((c[z>>2]|0)!=(m|0)?1:(c[z+4>>2]|0)!=(n|0))&(d|0)==0)}else a[j>>0]=k;if(d){z=d;Ra=w;return z|0}}else b=f+24|0;if((c[b>>2]|0)<=0){z=0;Ra=w;return z|0}e=c[t>>2]|0;d=0;do{z=d*3|0;y=z+1|0;c[v+(y<<2)>>2]=c[e+(y<<2)>>2];z=z+2|0;c[v+(z<<2)>>2]=c[e+(z<<2)>>2];d=d+1|0}while((d|0)<(c[b>>2]|0));d=0;Ra=w;return d|0}function fs(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+16|0;l=n;m=e+4|0;k=c[m>>2]|0;j=G(d*3|0,k)|0;if((k|0)<=0){m=0;Ra=n;return m|0}k=e+28|0;i=0;do{d=_r(c[e>>2]|0,b,i,l)|0;g=c[l>>2]|0;if(!g)f=0;else{h=a[g>>0]|0;if(!(h&254))f=0;else{f=0;do{g=g+1|0;o=h&128;f=(o>>>7^1)+f|0;h=a[g>>0]|0}while((h&254|o|0)!=0)}c[l>>2]=g}c[(c[k>>2]|0)+((i*3|0)+j<<2)>>2]=f;i=i+1|0}while((d|0)==0?(i|0)<(c[m>>2]|0):0);Ra=n;return d|0}function gs(a,b,d){a=a|0;b=b|0;d=d|0;c[d+(b<<4)>>2]=a;return 0}function hs(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!b)return;do{f=c[b+20>>2]|0;a:do if(f|0?(m=c[f+28>>2]|0,m|0):0){l=b+40|0;i=m;f=0;while(1){h=a[i>>0]|0;if((h&255)<2)g=0;else{g=0;j=0;while(1){g=g+((j|0)==0&1)|0;k=i+1|0;i=h&-128;h=a[k>>0]|0;if(!((h&-2|i)<<24>>24)){i=k;break}else{j=i&255;i=k}}}j=c[l>>2]|0;k=f*3|0;h=j+(k+1<<2)|0;c[h>>2]=(c[h>>2]|0)+g;k=j+(k+2<<2)|0;c[k>>2]=(c[k>>2]|0)+((g|0)!=0&1);if(!(a[i>>0]|0))break a;h=i+1|0;g=a[h>>0]|0;f=g&255;if(f&128){k=d[i+2>>0]|0;f=k<<7|g&127;if(k&128){k=d[i+3>>0]|0;f=k<<14|f&16383;if(k&128){k=d[i+4>>0]|0;f=k<<21|f&2097151;if(!(k&128))g=4;else{f=(a[i+5>>0]&7)<<28|f&268435455;g=5}}else g=3}else g=2}else g=1;if((f|0)<(e|0))i=h+g|0;else break}}while(0);hs(c[b+12>>2]|0,e);b=c[b+16>>2]|0}while((b|0)!=0);return}function is(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;x=z;y=z+4|0;c[y>>2]=0;b=td(b,55547)|0;if(b|0){y=b;Ra=z;return y|0}s=e+-3|0;r=f+12|0;a:do if(s){k=(e|0)>3;if(k){f=0;b=0;do{b=b+1+(Eu(c[r+(f<<2)>>2]|0)|0)|0;f=f+1|0}while((f|0)!=(s|0))}else b=0;q=pb(b+(s<<2)|0,0)|0;b=(q|0)==0;b:do if(b|k^1){if(b){f=7;j=0;b=0;m=44;break a}}else{n=q+(s<<2)|0;o=0;while(1){b=r+(o<<2)|0;p=Eu(c[b>>2]|0)|0;c[q+(o<<2)>>2]=n;p=p+1|0;ew(n|0,c[b>>2]|0,p|0)|0;b=a[n>>0]|0;switch(b<<24>>24){case 34:case 39:case 91:case 96:{m=b<<24>>24==91?93:b;f=a[n+1>>0]|0;c:do if(!(f<<24>>24))b=0;else{k=1;b=0;do{l=k+1|0;if(f<<24>>24==m<<24>>24){if((a[n+l>>0]|0)!=m<<24>>24)break c;a[n+b>>0]=m;k=k+2|0}else{a[n+b>>0]=f;k=l}b=b+1|0;f=a[n+k>>0]|0}while(f<<24>>24!=0)}while(0);a[n+b>>0]=0;break}default:{}}o=o+1|0;if((o|0)==(s|0))break b;else n=n+p|0}}while(0);if((e|0)<4){k=50983;l=q;b=q;m=21}else{k=c[q>>2]|0;l=q;b=q;m=21}}else{k=50983;l=0;b=0;m=21}while(0);d:do if((m|0)==21){f=(Eu(k)|0)+1|0;e:do if(((d|0?(t=d+16|0,c[t>>2]|0):0)?(u=Xa[(a[d>>0]<<24>>24==1?154:155)&255](k,f)|0,u=(c[d+12>>2]|0)+-1&u,v=c[t>>2]|0,v|0):0)?(j=c[v+(u<<3)>>2]|0,w=(a[d>>0]|0)==1?79:80,i=c[v+(u<<3)+4>>2]|0,(j|0)!=0&(i|0)!=0):0){while(1){j=j+-1|0;if(!(Za[w&127](c[i+12>>2]|0,c[i+16>>2]|0,k,f)|0))break;i=c[i>>2]|0;if(!((j|0)!=0&(i|0)!=0))break e}i=c[i+8>>2]|0;if(i|0){j=i;i=Ya[c[i+4>>2]&127]((e|0)>4?e+-4|0:0,l+4|0,y)|0;if(i|0){f=i;m=44;break d}if(mb()|0){f=7;m=44;break d}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](20)|0;if(!i){f=7;m=44;break d}}else{i=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;k=59064;f=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&f>>>0>0){e=c[14978]|0;x=Tv(f|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&x>>>0<=e>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){f=7;m=44;break d}f=Wa[c[29352>>2]&127](i)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f};c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=j;c[i+16>>2]=c[y>>2];c[g>>2]=i;i=0;break d}}while(0);c[x>>2]=k;Wp(h,53600,x);f=1;j=0;m=44}while(0);if((m|0)==44){i=c[y>>2]|0;if(!i)i=f;else{Wa[c[j+8>>2]&127](i)|0;i=f}}if(!b){y=i;Ra=z;return y|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);y=i;Ra=z;return y|0}else{y=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);y=i;Ra=z;return y|0}return 0}function js(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[d>>2]|0;a:do if((e|0)>0){f=c[d+4>>2]|0;b=0;while(1){if((a[f+(b*12|0)+5>>0]|0?(c[f+(b*12|0)>>2]|0)==0:0)?(a[f+(b*12|0)+4>>0]|0)==2:0)break;b=b+1|0;if((b|0)>=(e|0))break a}c[d+20>>2]=1;f=c[d+16>>2]|0;c[f+(b<<3)>>2]=1;a[f+(b<<3)+4>>0]=1;g[d+40>>3]=1.0;return 0}while(0);c[d+20>>2]=0;return 0}function ks(a){a=a|0;var b=0;Wa[c[(c[a+12>>2]|0)+8>>2]&127](c[a+16>>2]|0)|0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}
- function Xf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;o=u;t=c[e+20>>2]|0;s=t+16|0;f=a[s>>0]|0;if(f<<24>>24==2){r=c[t>>2]|0;f=c[t+40>>2]|0;if(f|0){e=f;Ra=u;return e|0}do if((c[t+216>>2]|0)==0?(l=t+5|0,(a[l>>0]|0)!=2):0){k=t+24|0;i=c[k>>2]|0;if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](512)|0;if(!f)q=16}else{f=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){p=c[14978]|0;j=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=p>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(f){g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else q=16}if((q|0)==16){c[t+56>>2]=0;e=7;Ra=u;return e|0}gw(f+4|0,0,508)|0;c[f>>2]=i;p=t+56|0;c[p>>2]=f;j=t+64|0;f=c[j>>2]|0;a:do if(!(c[f>>2]|0)){if((a[l>>0]|0)==4){j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[f+4>>2]=1020;c[f>>2]=29896;c[f+8>>2]=-1;c[f+56>>2]=0;c[f+64>>2]=0;c[f+60>>2]=0;q=33;break}do if(!(a[t+12>>0]|0)){c[o>>2]=0;if((c[k>>2]|0)!=0?(m=c[t+60>>2]|0,n=c[m>>2]|0,(n|0)!=0):0){f=Ya[c[n+40>>2]&127](m,20,o)|0;if((f|0)==12){h=2054;i=0;f=c[j>>2]|0;q=29;break}g=(f|0)==0;if(g&(c[o>>2]|0)!=0){f=1032;break a}if(g){g=c[t+172>>2]|0;f=c[j>>2]|0;j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));h=2054;q=30}}else{h=2054;i=0;q=29}}else{i=c[7334]|0;c[o>>2]=0;h=4110;q=29}while(0);if((q|0)==29){g=c[t+172>>2]|0;j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));if(!i)q=30;else{c[f+4>>2]=(i|0)>0?i:1020;c[f>>2]=29896;c[f+8>>2]=i;c[f+56>>2]=h;c[f+64>>2]=g;c[f+60>>2]=r;q=33;break}}if((q|0)==30)f=_a[c[r+24>>2]&127](r,g,f,h&556927,0)|0;if(!f)q=33}else q=33;while(0);if((q|0)==33){c[t+44>>2]=0;f=t+72|0;a[t+19>>0]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;f=of(t)|0;if(!f)break}yf(c[p>>2]|0);c[p>>2]=0;e=f;Ra=u;return e|0}while(0);a[s>>0]=3;m=3}else m=f;n=e+28|0;f=b[n>>1]|0;h=f&65535;if(h&17){g=h&65519;f=g&65535;b[n>>1]=f;if(h&1){f=(g^3)&65535;b[n>>1]=f;g=c[e+12>>2]|0;c[e+36>>2]=0;h=c[g>>2]|0;c[e+32>>2]=h;if(!h){c[g+4>>2]=e;if(a[g+32>>0]|0)a[g+33>>0]=1}else c[h+36>>2]=e;c[g>>2]=e;g=g+8|0;if((f&8)==0&(c[g>>2]|0)==0)c[g>>2]=e}}j=c[t+56>>2]|0;b:do if(j){l=c[e+24>>2]|0;h=l+-1|0;g=c[j>>2]|0;c:do if(h>>>0<g>>>0){i=c[j+8>>2]|0;if(i){k=j;do{g=(h>>>0)/(i>>>0)|0;k=c[k+12+(g<<2)>>2]|0;if(!k)break c;h=h-(G(g,i)|0)|0;i=c[k+8>>2]|0}while((i|0)!=0);j=k;g=c[k>>2]|0}if(g>>>0<4001)if(!(1<<(h&7)&d[j+12+(h>>>3)>>0]))break;else break b;i=h+1|0;g=(h>>>0)%125|0;h=c[j+12+(g<<2)>>2]|0;if(h|0)do{if((h|0)==(i|0))break b;g=((g+1|0)>>>0)%125|0;h=c[j+12+(g<<2)>>2]|0}while((h|0)!=0)}while(0);if(l>>>0>(c[t+28>>2]|0)>>>0){if(m<<24>>24==4)break;f=f|8;b[n>>1]=f;break}f=Yf(e)|0;if(!f){f=b[n>>1]|0;break}else{e=f;Ra=u;return e|0}}while(0);b[n>>1]=f|4;if((c[t+96>>2]|0)>0)h=Ve(e)|0;else h=0;g=t+24|0;f=c[e+24>>2]|0;if((c[g>>2]|0)>>>0>=f>>>0){e=h;Ra=u;return e|0}c[g>>2]=f;e=h;Ra=u;return e|0}function Yf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=Ra;Ra=Ra+16|0;p=t;s=c[e+20>>2]|0;r=s+72|0;h=r;n=c[h>>2]|0;h=c[h+4>>2]|0;o=c[e+4>>2]|0;f=c[s+48>>2]|0;q=s+152|0;g=c[q>>2]|0;if((g|0)>200)do{m=g;g=g+-200|0;f=f+(d[o+g>>0]|0)|0}while((m|0)>400);l=e+28|0;b[l>>1]=b[l>>1]|8;l=s+64|0;g=c[l>>2]|0;m=e+24|0;e=c[m>>2]|0;a[p>>0]=e>>>24;i=p+1|0;a[i>>0]=e>>>16;j=p+2|0;a[j>>0]=e>>>8;k=p+3|0;a[k>>0]=e;g=_a[c[(c[g>>2]|0)+12>>2]&127](g,p,4,n,h)|0;if(g|0){s=g;Ra=t;return s|0}u=c[l>>2]|0;g=c[q>>2]|0;e=Sv(n|0,h|0,4,0)|0;h=L()|0;g=_a[c[(c[u>>2]|0)+12>>2]&127](u,o,g,e,h)|0;if(g|0){u=g;Ra=t;return u|0}n=c[l>>2]|0;o=c[q>>2]|0;o=Sv(e|0,h|0,o|0,((o|0)<0)<<31>>31|0)|0;u=L()|0;a[p>>0]=f>>>24;a[i>>0]=f>>>16;a[j>>0]=f>>>8;a[k>>0]=f;f=_a[c[(c[n>>2]|0)+12>>2]&127](n,p,4,o,u)|0;if(f|0){u=f;Ra=t;return u|0}k=(c[q>>2]|0)+8|0;j=r;k=Sv(c[j>>2]|0,c[j+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;j=L()|0;l=r;c[l>>2]=k;c[l+4>>2]=j;l=s+44|0;c[l>>2]=(c[l>>2]|0)+1;l=df(c[s+56>>2]|0,c[m>>2]|0)|0;j=c[m>>2]|0;k=s+96|0;g=c[k>>2]|0;if((g|0)>0){i=s+92|0;f=0;h=0;do{e=c[i>>2]|0;if((c[e+(h*48|0)+20>>2]|0)>>>0>=j>>>0){f=df(c[e+(h*48|0)+16>>2]|0,j)|0|f;g=c[k>>2]|0}h=h+1|0}while((h|0)<(g|0))}else f=0;u=f|l;Ra=t;return u|0}function Zf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+4>>2]|0;f=c[d>>2]|0;a[j+19>>0]=0;k=d+8|0;do if(a[k>>0]|0){if((c[f+172>>2]|0)>1){f=j+76|0;if((c[f>>2]|0)==(d|0)?(c[f>>2]=0,e=j+22|0,b[e>>1]=b[e>>1]&-193,e=c[j+72>>2]|0,e|0):0)do{a[e+8>>0]=1;e=c[e+12>>2]|0}while((e|0)!=0);a[k>>0]=1;return}e=j+72|0;f=c[e>>2]|0;if(f|0)while(1){g=f+12|0;do if((c[f>>2]|0)==(d|0)){h=c[g>>2]|0;c[e>>2]=h;if((c[f+4>>2]|0)!=1)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);i=15;break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);i=15;break}else{g=e;f=h}}else{e=g;i=15}while(0);if((i|0)==15){i=0;g=e;f=c[e>>2]|0}if(!f)break;else e=g}e=j+76|0;if((c[e>>2]|0)!=(d|0)){e=j+40|0;f=c[e>>2]|0;if((f|0)==2){d=j+22|0;b[d>>1]=b[d>>1]&-129;c[e>>2]=1;break}}else{c[e>>2]=0;f=j+22|0;b[f>>1]=b[f>>1]&-193;f=j+40|0;e=f;f=c[f>>2]|0}d=f+-1|0;c[e>>2]=d;if(!d)a[j+20>>0]=0}while(0);a[k>>0]=0;if(a[j+20>>0]|0)return;e=j+12|0;f=c[e>>2]|0;if(!f)return;c[e>>2]=0;k=c[f+72>>2]|0;e=c[k+20>>2]|0;Df(k);if(c[(c[e+212>>2]|0)+12>>2]|0)return;switch(a[e+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[e+4>>0]|0))uf(e,0,0)|0;break}default:tf(e)|0}vf(e);return}function _f(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=Ra;Ra=Ra+32|0;k=r;m=r+20|0;j=r+24|0;o=r+16|0;p=r+12|0;if(g>>>0<2)i=0;else{i=g+-2|0;i=i-((i>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+i|0}a:do if((i|0)!=(g|0)?((1073741824/((c[e+32>>2]|0)>>>0)|0)+1|0)!=(g|0):0){n=c[(c[e+12>>2]|0)+56>>2]|0;b:do if((d[n+37>>0]|0)<<16|(d[n+36>>0]|0)<<24|(d[n+38>>0]|0)<<8|(d[n+39>>0]|0)){i=eg(e,g,j,o)|0;if(!i){n=a[j>>0]|0;c:do switch(n<<24>>24){case 1:{c[k>>2]=32306;c[k+4>>2]=66936;c[k+8>>2]=31517;Db(11,32001,k);i=11;break b}case 2:{if(!h){i=fg(e,p,m,g,1)|0;if(i|0)break b;i=c[p>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{q=c[i+20>>2]|0;p=q+120|0;c[p>>2]=(c[p>>2]|0)+-1;q=q+136|0;c[i+16>>2]=c[q>>2];c[q>>2]=i;break}}while(0)}break}default:{i=c[e>>2]|0;i=Za[c[i+204>>2]&127](i,g,m,0)|0;do if(!i){i=c[m>>2]|0;l=c[i+8>>2]|0;j=l+4|0;if((c[j>>2]|0)!=(g|0)){c[l+56>>2]=c[i+4>>2];c[l+72>>2]=i;c[l+52>>2]=e;c[j>>2]=g;a[l+9>>0]=(g|0)==1?100:0}i=(h|0)==0;j=i?2:0;k=i?f:0;d:do if(i){i=fg(e,m,p,k,j)|0;if(!i){i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{m=c[i+20>>2]|0;f=m+120|0;c[f>>2]=(c[f>>2]|0)+-1;m=m+136|0;c[i+16>>2]=c[m>>2];c[m>>2]=i;break}}while(0);i=c[p>>2]|0}else q=30}else do{i=fg(e,m,p,k,j)|0;if(i|0){q=30;break d}i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{s=c[i+20>>2]|0;t=s+120|0;c[t>>2]=(c[t>>2]|0)+-1;s=s+136|0;c[i+16>>2]=c[s>>2];c[s>>2]=i;break}}while(0);i=c[p>>2]|0}while(i>>>0>f>>>0);while(0);if((q|0)==30){do if(l|0){j=c[l+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{t=c[j+20>>2]|0;s=t+120|0;c[s>>2]=(c[s>>2]|0)+-1;t=t+136|0;c[j+16>>2]=c[t>>2];c[t>>2]=j;break}}while(0);break}i=gg(e,l,n,c[o>>2]|0,i,h)|0;do if(l|0){j=c[l+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{t=c[j+20>>2]|0;s=t+120|0;c[s>>2]=(c[s>>2]|0)+-1;t=t+136|0;c[j+16>>2]=c[t>>2];c[t>>2]=j;break}}while(0);if(!i)break c}while(0);break b}}while(0);break a}}else i=101;while(0);t=i;Ra=r;return t|0}while(0);if(h|0){t=0;Ra=r;return t|0}k=1073741824/((c[e+32>>2]|0)>>>0)|0;f=k+1|0;l=e+36|0;i=g;while(1){j=i+-1|0;if((j|0)!=(f|0)){if(j>>>0<2)i=0;else{i=i+-3|0;i=i-((i>>>0)%(((((c[l>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(k|0)?3:2)+i|0}if((i|0)!=(j|0))break}i=j}a[e+19>>0]=1;c[e+44>>2]=j;t=0;Ra=r;return t|0}function $f(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=(e|0)==0;a:while(1){b:do if((d|0)!=(f|0)){if(!k?(c[d+64>>2]|0)!=(e|0):0)break;switch(a[d>>0]|0){case 2:{a[d>>0]=0;break}case 0:{c[d+4>>2]=0;break}default:{j=d+68|0;g=a[j>>0]|0;if(g<<24>>24<=-1)break b;if(g<<24>>24){i=0;do{h=c[(c[d+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{m=c[h+20>>2]|0;n=m+120|0;c[n>>2]=(c[n>>2]|0)+-1;m=m+136|0;c[h+16>>2]=c[m>>2];c[m>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{n=c[g+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[g+16>>2]=c[n>>2];c[n>>2]=g}a[j>>0]=-1;break b}}g=ag(d)|0;if(g|0)break a;j=d+68|0;g=a[j>>0]|0;if(g<<24>>24>-1){if(g<<24>>24){i=0;do{h=c[(c[d+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{n=c[h+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[h+16>>2]=c[n>>2];c[n>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{n=c[g+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[g+16>>2]=c[n>>2];c[n>>2]=g}a[j>>0]=-1}a[d>>0]=3;n=d+1|0;a[n>>0]=a[n>>0]&-15}while(0);d=c[d+24>>2]|0;if(!d){d=0;l=34;break}}if((l|0)==34)return d|0;n=d+1|0;a[n>>0]=a[n>>0]&-15;n=g;return n|0}function ag(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(a[b+69>>0]|0)==0;bg(b);if(!g){f=b+32|0;g=c[f+4>>2]|0;b=b+56|0;c[b>>2]=c[f>>2];c[b+4>>2]=g;b=0;return b|0}f=c[b+44>>2]|0;g=b+56|0;d=g;c[d>>2]=f;c[d+4>>2]=0;d=Sv(f|0,0,17,0)|0;L()|0;f=Sv(f|0,0,16,0)|0;e=L()|0;if(e>>>0>0|(e|0)==0&f>>>0>2147483390){b=7;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](d)|0;if(!d){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0<d>>>0)c[14985]=d;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){h=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=h>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){h=7;return h|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}e=cg(b,0,c[g>>2]|0,d,0)|0;if(!e){e=d+(c[g>>2]|0)|0;f=e+17|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));c[b+16>>2]=d;h=0;return h|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);h=e;return h|0}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);h=e;return h|0}return 0}function bg(f){f=f|0;var g=0,h=0;if(b[f+50>>1]|0)return;g=f+1|0;a[g>>0]=a[g>>0]|2;g=c[f+116>>2]|0;h=(c[g+64>>2]|0)+(e[f+70>>1]<<1)|0;cb[c[g+80>>2]&255](g,(c[g+56>>2]|0)+((d[h>>0]<<8|d[h+1>>0])&e[g+26>>1])|0,f+32|0);return}function cg(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+48|0;z=A+16|0;m=A;w=A+32|0;x=A+28|0;n=c[f+116>>2]|0;v=c[f+20>>2]|0;bg(f);r=c[f+40>>2]|0;p=v+36|0;q=f+48|0;l=e[q>>1]|0;if((r-(c[n+56>>2]|0)|0)>>>0>((c[p>>2]|0)-l|0)>>>0){c[m>>2]=32306;c[m+4>>2]=67944;c[m+8>>2]=31517;Db(11,32001,m);z=11;Ra=A;return z|0}if(l>>>0>g>>>0){o=(h+g|0)>>>0>l>>>0?l-g|0:h;g=r+g|0;l=c[n+72>>2]|0;a:do if(!j){ew(i|0,g|0,o|0)|0;k=0}else{m=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){k=Ve(l)|0;y=13}}else y=9;do if((y|0)==9){k=c[m+40>>2]|0;if(k|0)break a;if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){k=Wf(l)|0;y=13;break}else{k=Xf(l)|0;y=13;break}}while(0);if((y|0)==13?k|0:0)break;ew(g|0,i|0,o|0)|0;k=0}while(0);s=0;h=h-o|0;i=i+o|0}else{s=g-l|0;k=0}do if((k|0)==0&(h|0)!=0){l=c[p>>2]|0;t=l+-4|0;k=e[q>>1]|0;o=r+k|0;o=(d[o+1>>0]|0)<<16|(d[o>>0]|0)<<24|(d[o+2>>0]|0)<<8|(d[o+3>>0]|0);c[w>>2]=o;n=f+1|0;do if(a[n>>0]&4){k=(s>>>0)/(t>>>0)|0;l=c[(c[f+12>>2]|0)+(k<<2)>>2]|0;if(!l)y=28;else{c[w>>2]=l;g=k;m=s-(G(k,t)|0)|0;y=29}}else{g=((l+-5-k+(c[f+44>>2]|0)|0)>>>0)/(t>>>0)|0;m=f+12|0;k=c[m>>2]|0;if(k){l=g<<2;r=(l|0)>(Wa[c[29352>>2]&127](k)|0);k=c[m>>2]|0;if(r)y=23}else y=23;if((y|0)==23){k=sb(k,g<<3,0)|0;if(!k){k=7;break}c[m>>2]=k;l=g<<2}gw(k|0,0,l|0)|0;a[n>>0]=a[n>>0]|4;y=28}while(0);if((y|0)==28)if(!o){k=0;y=55}else{g=0;m=s;l=o;y=29}b:do if((y|0)==29){r=f+12|0;p=(j|0)==0;q=p?2:0;o=g;while(1){k=c[r>>2]|0;c[k+(o<<2)>>2]=l;if(m>>>0<t>>>0){n=(m+h|0)>>>0>t>>>0?t-m|0:h;k=c[v>>2]|0;k=Za[c[k+204>>2]&127](k,l,x,q)|0;do if(!k){g=c[x>>2]|0;l=c[g+4>>2]|0;c[w>>2]=(d[l+1>>0]|0)<<16|(d[l>>0]|0)<<24|(d[l+2>>0]|0)<<8|(d[l+3>>0]|0);l=l+(m+4)|0;c:do if(p){ew(i|0,l|0,n|0)|0;k=0}else{m=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){u=Ve(g)|0;y=46}}else y=42;do if((y|0)==42){y=0;k=c[m+40>>2]|0;if(k|0)break c;if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){u=Wf(g)|0;y=46;break}else{u=Xf(g)|0;y=46;break}}while(0);if((y|0)==46?(y=0,u|0):0){k=u;break}ew(l|0,i|0,n|0)|0;k=0}while(0);l=c[x>>2]|0;if(l)if(!(b[l+28>>1]&32)){Df(l);m=0;break}else{m=c[l+20>>2]|0;j=m+120|0;c[j>>2]=(c[j>>2]|0)+-1;m=m+136|0;c[l+16>>2]=c[m>>2];c[m>>2]=l;m=0;break}else m=0}while(0);h=h-n|0;if(!h)break b;else g=i+n|0}else{k=c[k+(o+1<<2)>>2]|0;if(!k)k=dg(v,l,0,w)|0;else{c[w>>2]=k;k=0}g=i;m=m-t|0}if(k|0){y=55;break b}l=c[w>>2]|0;if(!l){k=0;y=55;break}else{i=g;o=o+1|0}}}while(0);if((y|0)==55)break;z=k;Ra=A;return z|0}while(0);if(!((k|0)==0&(h|0)!=0)){z=k;Ra=A;return z|0}c[z>>2]=32306;c[z+4>>2]=68089;c[z+8>>2]=31517;Db(11,32001,z);z=11;Ra=A;return z|0}function dg(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;o=s;l=s+4|0;do if(a[e+17>>0]|0){m=e+36|0;k=1073741824/((c[e+32>>2]|0)>>>0)|0;p=f;do{i=p;p=p+1|0;if(p>>>0<2)j=0;else{j=i+-1|0;j=j-((j>>>0)%(((((c[m>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;j=((j+1|0)==(k|0)?3:2)+j|0}}while((j|0)==(p|0)|(i|0)==(k|0));if(p>>>0<=(c[e+44>>2]|0)>>>0?(n=eg(e,p,l,o)|0,m=(n|0)==0,q=m&(a[l>>0]|0)==4&(c[o>>2]|0)==(f|0),q|m^1):0){k=0;j=q?101:n;i=q?p:0;break}else{r=9;break}}else r=9;while(0);do if((r|0)==9){i=c[e>>2]|0;i=Za[c[i+204>>2]&127](i,f,o,(g|0)==0?2:0)|0;if(i|0){k=0;j=i;i=0;break}i=c[o>>2]|0;k=c[i+8>>2]|0;j=k+4|0;if((c[j>>2]|0)==(f|0))i=c[k+56>>2]|0;else{r=c[i+4>>2]|0;c[k+56>>2]=r;c[k+72>>2]=i;c[k+52>>2]=e;c[j>>2]=f;a[k+9>>0]=(f|0)==1?100:0;i=r}j=0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0]}while(0);c[h>>2]=i;if(g|0){c[g>>2]=k;h=(j|0)==101;h=h?0:j;Ra=s;return h|0}if(!k){h=(j|0)==101;h=h?0:j;Ra=s;return h|0}i=c[k+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);h=(j|0)==101;h=h?0:j;Ra=s;return h|0}else{h=c[i+20>>2]|0;g=h+120|0;c[g>>2]=(c[g>>2]|0)+-1;h=h+136|0;c[i+16>>2]=c[h>>2];c[h>>2]=i;h=(j|0)==101;h=h?0:j;Ra=s;return h|0}return 0}function eg(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;n=o+16|0;m=o;i=o+28|0;if(f>>>0<2)l=0;else{l=f+-2|0;l=l-((l>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;l=((l+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+l|0}e=c[e>>2]|0;e=Za[c[e+204>>2]&127](e,l,i,0)|0;if(e|0){n=e;Ra=o;return n|0}k=c[i>>2]|0;j=c[k+4>>2]|0;e=(f-l|0)*5|0;i=e+-5|0;if((i|0)<0){do if(k|0)if(!(b[k+28>>1]&32)){Df(k);break}else{n=c[k+20>>2]|0;h=n+120|0;c[h>>2]=(c[h>>2]|0)+-1;n=n+136|0;c[k+16>>2]=c[n>>2];c[n>>2]=k;break}while(0);c[m>>2]=32306;c[m+4>>2]=64247;c[m+8>>2]=31517;Db(11,32001,m);n=11;Ra=o;return n|0}a[g>>0]=a[j+i>>0]|0;if(h|0){m=j+(e+-4)|0;c[h>>2]=(d[m+1>>0]|0)<<16|(d[m>>0]|0)<<24|(d[m+2>>0]|0)<<8|(d[m+3>>0]|0)}do if(k|0)if(!(b[k+28>>1]&32)){Df(k);break}else{m=c[k+20>>2]|0;h=m+120|0;c[h>>2]=(c[h>>2]|0)+-1;m=m+136|0;c[k+16>>2]=c[m>>2];c[m>>2]=k;break}while(0);if(((a[g>>0]|0)+-1&255)<=4){n=0;Ra=o;return n|0}c[n>>2]=32306;c[n+4>>2]=64255;c[n+8>>2]=31517;Db(11,32001,n);n=11;Ra=o;return n|0}function fg(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=Ra;Ra=Ra+160|0;r=Z+144|0;o=Z+128|0;T=Z+112|0;R=Z+96|0;U=Z+80|0;Q=Z+64|0;P=Z+48|0;V=Z+32|0;S=Z+16|0;j=Z;Y=Z+156|0;q=e+12|0;k=c[q>>2]|0;p=e+44|0;W=c[p>>2]|0;O=k+56|0;N=c[O>>2]|0;N=d[N+37>>0]<<16|d[N+36>>0]<<24|d[N+38>>0]<<8|d[N+39>>0];if(N>>>0>=W>>>0){c[j>>2]=32306;c[j+4>>2]=69057;c[j+8>>2]=31517;Db(11,32001,j);f=11;Ra=Z;return f|0}if(!N){i=(a[e+19>>0]|0)==0&1;k=c[k+72>>2]|0;l=c[k+20>>2]|0;if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0))k=W;else{j=Ve(k)|0;X=190}else X=186;do if((X|0)==186){j=c[l+40>>2]|0;if(j|0){f=j;Ra=Z;return f|0}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(k)|0;X=190;break}else{j=Xf(k)|0;X=190;break}}while(0);do if((X|0)==190)if(!j){k=c[p>>2]|0;break}else{f=j;Ra=Z;return f|0}while(0);j=k+1|0;c[p>>2]=j;n=e+32|0;l=1073741824/((c[n>>2]|0)>>>0)|0;if((k|0)==(l|0)){j=k+2|0;c[p>>2]=j}if(a[e+17>>0]|0){if(j>>>0<2)k=0;else{k=j+-2|0;k=k-((k>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(l|0)?3:2)+k|0}if((k|0)==(j|0)){k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,j,Y,i)|0;if(k|0){f=k;Ra=Z;return f|0}k=c[Y>>2]|0;m=c[k+8>>2]|0;l=m+4|0;if((c[l>>2]|0)==(j|0))j=c[m+72>>2]|0;else{c[m+56>>2]=c[k+4>>2];c[m+72>>2]=k;c[m+52>>2]=e;c[l>>2]=j;a[m+9>>0]=(j|0)==1?100:0;j=k}if((b[j+30>>1]|0)>1){j=c[m+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[o>>2]=32306;c[o+4>>2]=65442;c[o+8>>2]=31517;Db(11,32001,o);f=11;Ra=Z;return f|0}a[m>>0]=0;m=m+72|0;j=c[m>>2]|0;l=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0))k=0;else k=Ve(j)|0;else X=212;do if((X|0)==212){k=c[l+40>>2]|0;if(!k)if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){k=Wf(j)|0;break}else{k=Xf(j)|0;break}}while(0);j=c[m>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{X=c[j+20>>2]|0;W=X+120|0;c[W>>2]=(c[W>>2]|0)+-1;X=X+136|0;c[j+16>>2]=c[X>>2];c[X>>2]=j}if(k|0){f=k;Ra=Z;return f|0}k=c[p>>2]|0;j=k+1|0;c[p>>2]=j;if((k|0)==(1073741824/((c[n>>2]|0)>>>0)|0|0)){j=k+2|0;c[p>>2]=j}}}m=c[(c[q>>2]|0)+56>>2]|0;a[m+28>>0]=j>>>24;a[m+29>>0]=j>>>16;a[m+30>>0]=j>>>8;a[m+31>>0]=j;m=c[p>>2]|0;c[g>>2]=m;j=c[e>>2]|0;j=Za[c[j+204>>2]&127](j,m,Y,i)|0;if(j|0){c[f>>2]=0;f=j;Ra=Z;return f|0}j=c[Y>>2]|0;k=c[j+8>>2]|0;l=k+4|0;if((c[l>>2]|0)==(m|0))j=k+72|0;else{c[k+56>>2]=c[j+4>>2];Y=k+72|0;c[Y>>2]=j;c[k+52>>2]=e;c[l>>2]=m;a[k+9>>0]=(m|0)==1?100:0;j=Y}c[f>>2]=k;m=c[j>>2]|0;if((b[m+30>>1]|0)>1){do if(k|0)if(!(b[m+28>>1]&32)){Df(m);break}else{e=c[m+20>>2]|0;Y=e+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;e=e+136|0;c[m+16>>2]=c[e>>2];c[e>>2]=m;break}while(0);c[f>>2]=0;c[r>>2]=32306;c[r+4>>2]=65442;c[r+8>>2]=31517;Db(11,32001,r);f=11;Ra=Z;return f|0}a[k>>0]=0;l=c[m+20>>2]|0;do if((b[m+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[m+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){f=0;Ra=Z;return f|0}else{j=Ve(m)|0;X=241;break}else X=237;while(0);do if((X|0)==237){j=c[l+40>>2]|0;if(!j)if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(m)|0;X=241;break}else{j=Xf(m)|0;X=241;break}else X=243}while(0);do if((X|0)==241)if(j){k=c[f>>2]|0;if(!k)break;else{X=243;break}}else{f=0;Ra=Z;return f|0}while(0);do if((X|0)==243){k=c[k+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);break}else{e=c[k+20>>2]|0;Y=e+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;e=e+136|0;c[k+16>>2]=c[e>>2];c[e>>2]=k;break}}while(0);c[f>>2]=0;f=j;Ra=Z;return f|0}a:do switch(i<<24>>24){case 1:{if(W>>>0<h>>>0)n=0;else{j=eg(e,h,Y,0)|0;if(!j){n=(a[Y>>0]|0)==2&1;break a}f=j;Ra=Z;return f|0}break}case 2:{n=1;break}default:n=0}while(0);k=c[k+72>>2]|0;l=c[k+20>>2]|0;if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0){if(c[l+96>>2]|0){m=Ve(k)|0;X=18}}else X=14;do if((X|0)==14){j=c[l+40>>2]|0;if(j|0){f=j;Ra=Z;return f|0}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){m=Wf(k)|0;X=18;break}else{m=Xf(k)|0;X=18;break}}while(0);if((X|0)==18?m|0:0){f=m;Ra=Z;return f|0}F=c[O>>2]|0;H=N+-1|0;a[F+36>>0]=H>>>24;a[F+37>>0]=H>>>16;a[F+38>>0]=H>>>8;a[F+39>>0]=H;F=e+36|0;H=(h|0)==0;E=i<<24>>24==2;D=e+60|0;C=0;l=0;b:while(1){B=l;x=(l|0)!=0;if(x){k=c[B+56>>2]|0;j=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8;k=k+3|0}else{k=c[O>>2]|0;j=d[k+33>>0]<<16|d[k+32>>0]<<24|d[k+34>>0]<<8;k=k+35|0}i=j|d[k>>0];if(i>>>0>W>>>0){X=25;break}if(C>>>0>N>>>0){X=25;break}C=C+1|0;k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,i,Y,0)|0;if(k|0){X=35;break}j=c[Y>>2]|0;A=c[j+8>>2]|0;k=A+4|0;if((c[k>>2]|0)==(i|0))v=c[A+72>>2]|0;else{c[A+56>>2]=c[j+4>>2];c[A+72>>2]=j;c[A+52>>2]=e;c[k>>2]=i;a[A+9>>0]=(i|0)==1?100:0;v=j}j=A;if((b[v+30>>1]|0)>1){X=31;break}a[A>>0]=0;y=A+56|0;w=c[y>>2]|0;r=w+4|0;s=w+5|0;t=w+6|0;u=w+7|0;z=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0];q=n<<24>>24!=0;c:do if(q|(z|0)!=0){if(z>>>0>(((c[F>>2]|0)>>>2)+-2|0)>>>0){X=49;break b}if(n<<24>>24?(i|0)==(h|0)|E&i>>>0<h>>>0:0){c[g>>2]=i;c[f>>2]=j;j=c[A+72>>2]|0;m=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){I=Ve(j)|0;X=60}}else X=56;do if((X|0)==56){k=c[m+40>>2]|0;if(k|0){X=251;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){I=Wf(j)|0;X=60;break}else{I=Xf(j)|0;X=60;break}}while(0);if((X|0)==60?(X=0,I|0):0){X=248;break b}if(!z){if(!x){X=63;break b}i=B+72|0;j=c[i>>2]|0;m=c[j+20>>2]|0;do if(!(b[j+28>>1]&4))X=68;else{if((c[m+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){X=68;break}if(!(c[m+96>>2]|0))break;J=Ve(j)|0;X=72}while(0);do if((X|0)==68){k=c[m+40>>2]|0;if(k|0){X=252;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){J=Wf(j)|0;X=72;break}else{J=Xf(j)|0;X=72;break}}while(0);if((X|0)==72?(0,J|0):0){X=249;break b}n=c[B+56>>2]|0;k=c[y>>2]|0;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;a[n>>0]=k;a[n+1>>0]=k>>8;a[n+2>>0]=k>>16;a[n+3>>0]=k>>24;n=0;k=0;l=i;j=0;X=178;break}s=c[y>>2]|0;p=a[s+8>>0]|0;q=a[s+9>>0]|0;r=a[s+10>>0]|0;s=a[s+11>>0]|0;m=(q&255)<<16|(p&255)<<24|(r&255)<<8|s&255;if(m>>>0>W>>>0){X=75;break b}k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,m,Y,0)|0;if(k|0){X=85;break b}j=c[Y>>2]|0;o=c[j+8>>2]|0;k=o+4|0;if((c[k>>2]|0)==(m|0))j=c[o+72>>2]|0;else{c[o+56>>2]=c[j+4>>2];c[o+72>>2]=j;c[o+52>>2]=e;c[k>>2]=m;a[o+9>>0]=(m|0)==1?100:0}if((b[j+30>>1]|0)>1){X=81;break b}a[o>>0]=0;j=o+72|0;n=c[j>>2]|0;i=c[n+20>>2]|0;m=b[n+28>>1]|0;do if(!(m&4))X=90;else{if((c[i+24>>2]|0)>>>0<(c[n+24>>2]|0)>>>0){X=90;break}if(!(c[i+96>>2]|0))break;K=Ve(n)|0;X=94}while(0);do if((X|0)==90){k=c[i+40>>2]|0;if(k|0){X=96;break b}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){K=Wf(n)|0;X=94;break}else{K=Xf(n)|0;X=94;break}}while(0);if((X|0)==94?(X=0,K|0):0){X=95;break b}w=o+56|0;v=c[w>>2]|0;u=c[y>>2]|0;u=d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24;a[v>>0]=u;a[v+1>>0]=u>>8;a[v+2>>0]=u>>16;a[v+3>>0]=u>>24;v=c[w>>2]|0;z=z+-1|0;a[v+4>>0]=z>>>24;a[v+5>>0]=z>>>16;a[v+6>>0]=z>>>8;a[v+7>>0]=z;ew((c[w>>2]|0)+8|0,(c[y>>2]|0)+12|0,z<<2|0)|0;j=c[j>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{z=c[j+20>>2]|0;y=z+120|0;c[y>>2]=(c[y>>2]|0)+-1;z=z+136|0;c[j+16>>2]=c[z>>2];c[z>>2]=j}if(!x){X=103;break b}i=B+72|0;j=c[i>>2]|0;m=c[j+20>>2]|0;do if(!(b[j+28>>1]&4))X=108;else{if((c[m+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){X=108;break}if(!(c[m+96>>2]|0))break;L=Ve(j)|0;X=112}while(0);do if((X|0)==108){k=c[m+40>>2]|0;if(k|0){X=254;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){L=Wf(j)|0;X=112;break}else{L=Xf(j)|0;X=112;break}}while(0);if((X|0)==112?(0,L|0):0){X=253;break b}n=c[B+56>>2]|0;a[n>>0]=p;a[n+1>>0]=q;a[n+2>>0]=r;a[n+3>>0]=s;n=0;k=0;l=i;j=0;X=178;break}if(z){d:do if(!H)if(E){k=0;while(1){y=w+((k<<2)+8)|0;if((d[y+1>>0]<<16|d[y>>0]<<24|d[y+2>>0]<<8|d[y+3>>0])>>>0<=h>>>0){i=k;break d}k=k+1|0;if(k>>>0>=z>>>0){i=0;break}}}else{k=(d[w+9>>0]<<16|d[w+8>>0]<<24|d[w+10>>0]<<8|d[w+11>>0])-h|0;if(z>>>0<=1){i=0;break}m=(k|0)>-1?k:(k|0)==-2147483648?2147483647:0-k|0;k=0;i=1;while(1){p=w+((i<<2)+8)|0;p=(d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0])-h|0;p=(p|0)>-1?p:(p|0)==-2147483648?2147483647:0-p|0;o=(p|0)<(m|0);k=o?i:k;i=i+1|0;if((i|0)==(z|0)){i=k;break}else m=o?p:m}}else i=0;while(0);o=w+((i<<2)+8)|0;k=d[o+1>>0]<<16|d[o>>0]<<24|d[o+2>>0]<<8|d[o+3>>0];if(k>>>0>W>>>0){X=124;break b}if((k|0)==(h|0)|q^1|E&k>>>0<h>>>0){c[g>>2]=k;m=c[v+20>>2]|0;do if(!(b[v+28>>1]&4))X=130;else{if((c[m+24>>2]|0)>>>0<(c[v+24>>2]|0)>>>0){X=130;break}if(!(c[m+96>>2]|0))break;M=Ve(v)|0;X=134}while(0);do if((X|0)==130){k=c[m+40>>2]|0;if(k|0){X=256;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){M=Wf(v)|0;X=134;break}else{M=Xf(v)|0;X=134;break}}while(0);if((X|0)==134?(0,M|0):0){X=255;break b}k=z+-1|0;if(i>>>0<k>>>0){X=w+((z<<2)+4)|0;X=d[X>>0]|d[X+1>>0]<<8|d[X+2>>0]<<16|d[X+3>>0]<<24;a[o>>0]=X;a[o+1>>0]=X>>8;a[o+2>>0]=X>>16;a[o+3>>0]=X>>24}a[r>>0]=k>>>24;a[s>>0]=k>>>16;a[t>>0]=k>>>8;a[u>>0]=k;p=c[g>>2]|0;i=c[D>>2]|0;e:do if(!i)k=0;else{k=c[i>>2]|0;if(k>>>0<p>>>0){k=1;break}m=p+-1|0;if(m>>>0>=k>>>0){k=0;break}n=c[i+8>>2]|0;if(n){o=i;do{k=(m>>>0)/(n>>>0)|0;o=c[o+12+(k<<2)>>2]|0;if(!o){k=0;break e}m=m-(G(k,n)|0)|0;n=c[o+8>>2]|0}while((n|0)!=0);i=o;k=c[o>>2]|0}if(k>>>0<4001){k=(1<<(m&7)&d[i+12+(m>>>3)>>0]|0)!=0&1;break}n=m+1|0;k=(m>>>0)%125|0;m=c[i+12+(k<<2)>>2]|0;if(!m){k=0;break}while(1){if((m|0)==(n|0)){k=1;break e}k=((k+1|0)>>>0)%125|0;m=c[i+12+(k<<2)>>2]|0;if(!m){k=0;break}}}while(0);X=c[e>>2]|0;k=Za[c[X+204>>2]&127](X,p,Y,k^1)|0;if(k|0){c[f>>2]=0;n=0;X=176;break}k=c[Y>>2]|0;m=c[k+8>>2]|0;n=m+4|0;if((c[n>>2]|0)==(p|0))k=m+72|0;else{c[m+56>>2]=c[k+4>>2];X=m+72|0;c[X>>2]=k;c[m+52>>2]=e;c[n>>2]=p;a[m+9>>0]=(p|0)==1?100:0;k=X}c[f>>2]=m;if((b[(c[k>>2]|0)+30>>1]|0)>1){do if(m|0){k=c[m+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);break}else{X=c[k+20>>2]|0;A=X+120|0;c[A>>2]=(c[A>>2]|0)+-1;X=X+136|0;c[k+16>>2]=c[X>>2];c[X>>2]=k;break}}while(0);c[f>>2]=0;c[T>>2]=32306;c[T+4>>2]=65442;c[T+8>>2]=31517;Db(11,32001,T);n=0;k=11;X=176;break}a[m>>0]=0;n=c[m+72>>2]|0;i=c[n+20>>2]|0;do if(!(b[n+28>>1]&4))X=166;else{if((c[i+24>>2]|0)>>>0<(c[n+24>>2]|0)>>>0){X=166;break}if(!(c[i+96>>2]|0)){n=0;k=0;X=176;break c}k=Ve(n)|0;X=170}while(0);do if((X|0)==166){k=c[i+40>>2]|0;if(k|0){X=172;break}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){k=Wf(n)|0;X=170;break}else{k=Xf(n)|0;X=170;break}}while(0);if((X|0)==170){X=0;if(!k){n=0;k=0;X=176;break}m=c[f>>2]|0;if(m)X=172}do if((X|0)==172){m=c[m+72>>2]|0;if(!(b[m+28>>1]&32)){Df(m);break}else{X=c[m+20>>2]|0;A=X+120|0;c[A>>2]=(c[A>>2]|0)+-1;X=X+136|0;c[m+16>>2]=c[X>>2];c[X>>2]=m;break}}while(0);c[f>>2]=0;n=0;X=176}else{k=0;X=176}}else{k=0;X=176}}else{m=c[v+20>>2]|0;if((b[v+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[v+24>>2]|0)>>>0:0)if(!(c[m+96>>2]|0))k=w;else{k=Ve(v)|0;X=45}else X=41;do if((X|0)==41){k=c[m+40>>2]|0;if(k|0){X=250;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){k=Wf(v)|0;X=45;break}else{k=Xf(v)|0;X=45;break}}while(0);if((X|0)==45){if(k|0){X=247;break b}k=c[y>>2]|0}c[g>>2]=i;n=(c[O>>2]|0)+32|0;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;a[n>>0]=k;a[n+1>>0]=k>>8;a[n+2>>0]=k>>16;a[n+3>>0]=k>>24;c[f>>2]=j;n=0;k=0;j=0;X=176}while(0);if((X|0)==176){X=0;if(l){l=B+72|0;X=178}}do if((X|0)==178){X=0;l=c[l>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{B=c[l+20>>2]|0;A=B+120|0;c[A>>2]=(c[A>>2]|0)+-1;B=B+136|0;c[l+16>>2]=c[B>>2];c[B>>2]=l;break}}while(0);if(!(n<<24>>24)){l=0;X=257;break}else l=j}switch(X|0){case 25:{c[S>>2]=32306;c[S+4>>2]=69113;c[S+8>>2]=31517;Db(11,32001,S);j=l;k=11;break}case 31:{j=c[A+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[V>>2]=32306;c[V+4>>2]=65442;c[V+8>>2]=31517;Db(11,32001,V);j=l;k=11;break}case 35:{j=l;break}case 49:{c[P>>2]=32306;c[P+4>>2]=69142;c[P+8>>2]=31517;Db(11,32001,P);k=11;j=A;X=257;break}case 63:{f=(c[O>>2]|0)+32|0;e=c[y>>2]|0;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;a[f>>0]=e;a[f+1>>0]=e>>8;a[f+2>>0]=e>>16;a[f+3>>0]=e>>24;f=0;Ra=Z;return f|0}case 75:{c[Q>>2]=32306;c[Q+4>>2]=69176;c[Q+8>>2]=31517;Db(11,32001,Q);k=11;j=A;X=257;break}case 81:{j=c[o+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[U>>2]=32306;c[U+4>>2]=65442;c[U+8>>2]=31517;Db(11,32001,U);k=11;j=A;X=257;break}case 85:{j=A;X=257;break}case 95:{m=c[j>>2]|0;k=K;n=m;m=b[m+28>>1]|0;X=96;break}case 103:{f=c[O>>2]|0;a[f+32>>0]=p;a[f+33>>0]=q;a[f+34>>0]=r;a[f+35>>0]=s;f=0;Ra=Z;return f|0}case 124:{c[R>>2]=32306;c[R+4>>2]=69241;c[R+8>>2]=31517;Db(11,32001,R);k=11;j=A;X=257;break}case 247:{j=A;X=257;break}case 248:{k=I;j=A;X=257;break}case 249:{k=J;j=A;X=257;break}case 250:{j=A;X=257;break}case 251:{j=A;X=257;break}case 252:{j=A;X=257;break}case 253:{k=L;j=A;X=257;break}case 254:{j=A;X=257;break}case 255:{k=M;j=A;X=257;break}case 256:{j=A;X=257;break}}do if((X|0)==96){j=A;if(!(m&32)){Df(n);X=257;break}else{X=c[n+20>>2]|0;f=X+120|0;c[f>>2]=(c[f>>2]|0)+-1;X=X+136|0;c[n+16>>2]=c[X>>2];c[X>>2]=n;X=257;break}}while(0);do if((X|0)==257)if(j){j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);j=l;break}else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;j=l;break}}else j=l;while(0);if(!j){f=k;Ra=Z;return f|0}j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);f=k;Ra=Z;return f|0}else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;f=k;Ra=Z;return f|0}return 0}function gg(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=Ra;Ra=Ra+112|0;P=S+88|0;N=S+72|0;L=S+56|0;q=S+40|0;l=S+24|0;M=S;R=S+100|0;H=g+4|0;Q=c[H>>2]|0;F=c[f>>2]|0;if(Q>>>0<3){c[l>>2]=32306;c[l+4>>2]=66838;c[l+8>>2]=31517;Db(11,32001,l);R=11;Ra=S;return R|0}C=c[g+72>>2]|0;D=F+12|0;a:do if(a[D>>0]|0){n=c[C+20>>2]|0;p=C+28|0;if((b[p>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[C+24>>2]|0)>>>0:0){if(!(c[n+96>>2]|0)){O=14;break}l=Ve(C)|0}else O=9;do if((O|0)==9){l=c[n+40>>2]|0;if(l|0)break a;if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){l=Wf(C)|0;break}else{l=Xf(C)|0;break}}while(0);if(!l)O=14}else{p=C+28|0;O=14}while(0);b:do if((O|0)==14){l=b[p>>1]|0;if(l&2){l=Ve(C)|0;if(l|0)break;l=b[p>>1]|0}if((k|0)!=0|(l&8)==0)E=0;else E=c[C+24>>2]|0;b[p>>1]=l&-9;l=F+212|0;n=Ya[c[29436>>2]&127](c[(c[l>>2]|0)+44>>2]|0,j,0)|0;do if(n){l=c[l>>2]|0;k=c[n+4>>2]|0;if(!(c[k>>2]|0)){l=sf(l,j,n)|0;if(!l){A=0;y=0;break}x=l;y=1;l=b[l+30>>1]|0}else{x=l+12|0;c[x>>2]=(c[x>>2]|0)+1;x=k+30|0;l=(b[x>>1]|0)+1<<16>>16;b[x>>1]=l;x=k;y=(k|0)!=0}k=x+28|0;n=b[k>>1]|0;if(l<<16>>16>1){if(!(n&32))Df(x);else{j=c[x+20>>2]|0;i=j+120|0;c[i>>2]=(c[i>>2]|0)+-1;j=j+136|0;c[x+16>>2]=c[j>>2];c[j>>2]=x}c[q>>2]=32306;c[q+4>>2]=57762;c[q+8>>2]=31517;Db(11,32001,q);l=11;break b}b[p>>1]=b[p>>1]|n&8;if(!(a[D>>0]|0)){s=c[x+12>>2]|0;do if(b[k>>1]&2){l=s+8|0;n=x+36|0;k=c[n>>2]|0;if((c[l>>2]|0)==(x|0))c[l>>2]=k;q=c[x+32>>2]|0;r=(q|0)==0;if(r){c[s+4>>2]=k;l=k}else{c[q+36>>2]=k;l=c[n>>2]|0}if(l|0){c[l+32>>2]=q;break}c[s>>2]=q;if(r)a[s+33>>0]=2}while(0);A=s+12|0;c[A>>2]=(c[A>>2]|0)+-1;cb[c[29440>>2]&255](c[s+44>>2]|0,c[x>>2]|0,1);A=x;break}A=(c[F+24>>2]|0)+1|0;l=x+12|0;w=x+24|0;db[c[29444>>2]&127](c[(c[l>>2]|0)+44>>2]|0,c[x>>2]|0,c[w>>2]|0,A);c[w>>2]=A;w=b[k>>1]|0;if((w&10)==10){t=c[l>>2]|0;v=t+8|0;l=c[v>>2]|0;s=x+36|0;k=c[s>>2]|0;if((l|0)==(x|0)){c[v>>2]=k;u=k}else u=l;r=x+32|0;n=c[r>>2]|0;q=(n|0)==0;if(q){c[t+4>>2]=k;l=k}else{c[n+36>>2]=k;l=c[s>>2]|0}do if(!l){c[t>>2]=n;if(q){a[t+33>>0]=2;c[s>>2]=0;c[r>>2]=0;l=t;O=42;break}else{c[s>>2]=0;l=t;O=41;break}}else{c[l+32>>2]=n;n=c[t>>2]|0;c[s>>2]=0;c[r>>2]=n;if(!n){l=t;O=42}else{l=t;O=41}}while(0);if((O|0)==41)c[n+36>>2]=x;else if((O|0)==42){c[t+4>>2]=x;if(a[t+32>>0]|0)a[t+33>>0]=1}c[l>>2]=x;if((w&8)==0&(u|0)==0){c[v>>2]=x;A=x}else A=x}else A=x}else{A=0;y=0}while(0);v=C+24|0;z=c[v>>2]|0;x=C+12|0;db[c[29444>>2]&127](c[(c[x>>2]|0)+44>>2]|0,c[C>>2]|0,z,j);c[v>>2]=j;v=b[p>>1]|0;if((v&10)==10){t=c[x>>2]|0;w=t+8|0;l=c[w>>2]|0;s=C+36|0;k=c[s>>2]|0;if((l|0)==(C|0)){c[w>>2]=k;u=k}else u=l;r=C+32|0;n=c[r>>2]|0;q=(n|0)==0;if(q){c[t+4>>2]=k;l=k}else{c[n+36>>2]=k;l=c[s>>2]|0}do if(!l){c[t>>2]=n;if(q){a[t+33>>0]=2;c[s>>2]=0;c[r>>2]=0;l=t;O=69;break}else{c[s>>2]=0;l=t;O=68;break}}else{c[l+32>>2]=n;n=c[t>>2]|0;c[s>>2]=0;c[r>>2]=n;if(!n){l=t;O=69}else{l=t;O=68}}while(0);if((O|0)==68)c[n+36>>2]=C;else if((O|0)==69){c[t+4>>2]=C;if(a[t+32>>0]|0)a[t+33>>0]=1}c[l>>2]=C;if((v&8)==0&(u|0)==0)c[w>>2]=C}l=v&65535;if(l&17|0?(B=l&65519,b[p>>1]=B,l&1|0):0){k=(B^3)&65535;b[p>>1]=k;l=c[x>>2]|0;c[C+36>>2]=0;n=c[l>>2]|0;c[C+32>>2]=n;if(!n){c[l+4>>2]=C;if(a[l+32>>0]|0)a[l+33>>0]=1}else c[n+36>>2]=C;c[l>>2]=C;l=l+8|0;if((k&8)==0&(c[l>>2]|0)==0)c[l>>2]=C}do if(y&(a[D>>0]|0)!=0){l=A+12|0;v=A+24|0;db[c[29444>>2]&127](c[(c[l>>2]|0)+44>>2]|0,c[A>>2]|0,c[v>>2]|0,z);c[v>>2]=z;v=b[A+28>>1]|0;if((v&10)==10){s=c[l>>2]|0;u=s+8|0;l=c[u>>2]|0;r=A+36|0;p=c[r>>2]|0;if((l|0)==(A|0)){c[u>>2]=p;t=p}else t=l;q=A+32|0;n=c[q>>2]|0;k=(n|0)==0;if(k){c[s+4>>2]=p;l=p}else{c[n+36>>2]=p;l=c[r>>2]|0}do if(!l){c[s>>2]=n;if(k){a[s+33>>0]=2;c[r>>2]=0;c[q>>2]=0;l=s;O=94;break}else{c[r>>2]=0;l=s;O=93;break}}else{c[l+32>>2]=n;n=c[s>>2]|0;c[r>>2]=0;c[q>>2]=n;if(!n){l=s;O=94}else{l=s;O=93}}while(0);if((O|0)==93)c[n+36>>2]=A;else if((O|0)==94){c[s+4>>2]=A;if(a[s+32>>0]|0)a[s+33>>0]=1}c[l>>2]=A;if((v&8)==0&(t|0)==0)c[u>>2]=A}if(!(v&32)){Df(A);break}else{D=c[A+20>>2]|0;C=D+120|0;c[C>>2]=(c[C>>2]|0)+-1;D=D+136|0;c[A+16>>2]=c[D>>2];c[D>>2]=A;break}}while(0);do if(E|0){r=Za[c[F+204>>2]&127](F,E,M,0)|0;if(!r){l=c[M>>2]|0;p=l+28|0;n=b[p>>1]|8;b[p>>1]=n;k=n&65535;if(k&17){o=k&65519;n=o&65535;b[p>>1]=n;if(k&1){b[p>>1]=o^3;n=c[l+12>>2]|0;c[l+36>>2]=0;o=c[n>>2]|0;c[l+32>>2]=o;if(!o){c[n+4>>2]=l;if(a[n+32>>0]|0)a[n+33>>0]=1}else c[o+36>>2]=l;c[n>>2]=l;l=c[M>>2]|0;n=b[l+28>>1]|0}}if(!(n&32))Df(l);else{J=c[l+20>>2]|0;F=J+120|0;c[F>>2]=(c[F>>2]|0)+-1;J=J+136|0;c[l+16>>2]=c[J>>2];c[J>>2]=l}break}if(E>>>0<=(c[F+28>>2]|0)>>>0?(o=c[F+56>>2]|0,J=c[F+208>>2]|0,o|0):0){l=E+-1|0;m=c[o+8>>2]|0;c:do if(!m)O=109;else while(1){n=(l>>>0)/(m>>>0)|0;o=c[o+12+(n<<2)>>2]|0;if(!o)break c;l=l-(G(n,m)|0)|0;m=c[o+8>>2]|0;if(!m){O=109;break}}while(0);do if((O|0)==109){if((c[o>>2]|0)>>>0<4001){j=o+12+(l>>>3)|0;a[j>>0]=(1<<(l&7)^255)&d[j>>0];break}q=o+12|0;ew(J|0,q|0,500)|0;gw(q|0,0,500)|0;q=o+4|0;c[q>>2]=0;p=l+1|0;n=0;do{k=J+(n<<2)|0;l=c[k>>2]|0;if(!((l|0)==0|(l|0)==(p|0))){m=((l+-1|0)>>>0)%125|0;c[q>>2]=(c[q>>2]|0)+1;l=o+12+(m<<2)|0;if(c[l>>2]|0)do{l=m+1|0;m=l>>>0>124?0:l;l=o+12+(m<<2)|0}while((c[l>>2]|0)!=0);c[l>>2]=c[k>>2]}n=n+1|0}while((n|0)!=125)}while(0);c[R>>2]=r;R=r;Ra=S;return R|0}c[R>>2]=r;R=r;Ra=S;return R|0}while(0);c[R>>2]=0;c[H>>2]=j;switch(h<<24>>24){case 1:case 5:{l=hg(g)|0;c[R>>2]=l;if(l|0){R=l;Ra=S;return R|0}if(h<<24>>24==1){R=0;Ra=S;return R|0}break}default:{l=c[g+56>>2]|0;l=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];if(l|0?(ig(f,l,4,j,R),I=c[R>>2]|0,I|0):0){R=I;Ra=S;return R|0}}}l=c[f>>2]|0;l=Za[c[l+204>>2]&127](l,i,M,0)|0;if(l|0){c[R>>2]=l;R=l;Ra=S;return R|0}l=c[M>>2]|0;v=c[l+8>>2]|0;n=v+4|0;if((c[n>>2]|0)==(i|0))w=v+72|0;else{c[v+56>>2]=c[l+4>>2];w=v+72|0;c[w>>2]=l;c[v+52>>2]=f;c[n>>2]=i;a[v+9>>0]=(i|0)==1?100:0}c[R>>2]=0;l=c[w>>2]|0;n=c[l+20>>2]|0;do if((b[l+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[n+96>>2]|0)){c[R>>2]=0;break}else{m=Ve(l)|0;O=152;break}else O=147;while(0);do if((O|0)==147){m=c[n+40>>2]|0;if(m|0){c[R>>2]=m;O=153;break}if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){m=Wf(l)|0;O=152;break}else{m=Xf(l)|0;O=152;break}}while(0);if((O|0)==152?(c[R>>2]=m,m|0):0)O=153;if((O|0)==153){if(!v){R=m;Ra=S;return R|0}l=c[w>>2]|0;if(!(b[l+28>>1]&32)){Df(l);R=m;Ra=S;return R|0}else{R=c[l+20>>2]|0;j=R+120|0;c[j>>2]=(c[j>>2]|0)+-1;R=R+136|0;c[l+16>>2]=c[R>>2];c[R>>2]=l;R=m;Ra=S;return R|0}}d:do if(h<<24>>24==4){l=c[v+56>>2]|0;m=l+1|0;n=l+2|0;o=l+3|0;if((d[m>>0]<<16|d[l>>0]<<24|d[n>>0]<<8|d[o>>0]|0)==(Q|0)){a[l>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;l=0;O=181;break}else{c[L>>2]=32306;c[L+4>>2]=66766;c[L+8>>2]=31517;Db(11,32001,L);l=11;O=181;break}}else{if((a[v>>0]|0)==0?(K=Gf(v)|0,K|0):0){l=K;O=181;break}L=b[v+24>>1]|0;u=L&65535;e:do if(L<<16>>16){n=v+56|0;t=v+26|0;s=v+64|0;o=v+80|0;p=M+16|0;k=M+12|0;q=M+18|0;r=v+52|0;if(h<<24>>24!=3){p=c[n>>2]|0;o=c[s>>2]|0;n=e[t>>1]|0;l=0;while(1){m=o+(l<<1)|0;m=p+((d[m>>0]<<8|d[m+1>>0])&n)|0;if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(Q|0))break;l=l+1|0;if(l>>>0>=u>>>0)break e}a[m>>0]=j>>>24;a[m+1>>0]=j>>>16;a[m+2>>0]=j>>>8;a[m+3>>0]=j;break}l=0;while(1){m=(c[s>>2]|0)+(l<<1)|0;m=(c[n>>2]|0)+((d[m>>0]<<8|d[m+1>>0])&e[t>>1])|0;cb[c[o>>2]&255](v,m,M);if((c[k>>2]|0)>>>0>(e[p>>1]|0)>>>0){m=m+(e[q>>1]|0)|0;if(m>>>0>((c[n>>2]|0)+(c[(c[r>>2]|0)+36>>2]|0)|0)>>>0){O=172;break}m=m+-4|0;if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(Q|0)){O=174;break}}l=l+1|0;if(l>>>0>=u>>>0)break e}if((O|0)==172){c[N>>2]=32306;c[N+4>>2]=66785;c[N+8>>2]=31517;Db(11,32001,N);l=11;O=181;break d}else if((O|0)==174){a[m>>0]=j>>>24;a[m+1>>0]=j>>>16;a[m+2>>0]=j>>>8;a[m+3>>0]=j;break}}else l=0;while(0);if((l|0)==(u|0)){do if(h<<24>>24==5){l=(c[v+56>>2]|0)+((d[v+9>>0]|0)+8)|0;m=l+1|0;n=l+2|0;o=l+3|0;if((d[m>>0]<<16|d[l>>0]<<24|d[n>>0]<<8|d[o>>0]|0)!=(Q|0))break;a[l>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;l=0;O=181;break d}while(0);c[P>>2]=32306;c[P+4>>2]=66803;c[P+8>>2]=31517;Db(11,32001,P);l=11}else l=0;c[R>>2]=l;if(v)O=183}while(0);if((O|0)==181){c[R>>2]=l;O=183}do if((O|0)==183){m=c[w>>2]|0;if(!(b[m+28>>1]&32)){Df(m);break}else{Q=c[m+20>>2]|0;P=Q+120|0;c[P>>2]=(c[P>>2]|0)+-1;Q=Q+136|0;c[m+16>>2]=c[Q>>2];c[Q>>2]=m;break}}while(0);if(l|0){R=l;Ra=S;return R|0}ig(f,j,h,i,R);R=c[R>>2]|0;Ra=S;return R|0}while(0);c[R>>2]=l;R=l;Ra=S;return R|0}function hg(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+48|0;x=B+24|0;t=B;y=B+36|0;u=f+52|0;z=c[u>>2]|0;w=f+4|0;A=c[w>>2]|0;if(!(a[f>>0]|0)){g=Gf(f)|0;c[y>>2]=g;if(g|0){A=g;Ra=B;return A|0}}else c[y>>2]=0;s=b[f+24>>1]|0;k=s&65535;a:do if(!(s<<16>>16))g=f+8|0;else{l=f+56|0;m=f+26|0;n=f+64|0;o=f+80|0;p=t+16|0;q=t+12|0;g=f+8|0;r=f+60|0;s=t+18|0;h=0;j=0;while(1){i=(c[n>>2]|0)+(h<<1)|0;i=(c[l>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[m>>1])|0;do if((j|0)==0?(cb[c[o>>2]&255](f,i,t),v=e[p>>1]|0,(c[q>>2]|0)>>>0>v>>>0):0){j=c[r>>2]|0;if(j>>>0>=i>>>0?j>>>0<(i+v|0)>>>0:0){c[x>>2]=32306;c[x+4>>2]=64569;c[x+8>>2]=31517;Db(11,32001,x);c[y>>2]=11;break}j=i+((e[s>>1]|0)+-4)|0;ig(c[u>>2]|0,d[j+1>>0]<<16|d[j>>0]<<24|d[j+2>>0]<<8|d[j+3>>0],3,c[w>>2]|0,y)}while(0);if(!(a[g>>0]|0))ig(z,d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0],5,A,y);h=h+1|0;if((h|0)==(k|0))break a;j=c[y>>2]|0}}while(0);if(!(a[g>>0]|0)){f=(c[f+56>>2]|0)+((d[f+9>>0]|0)+8)|0;ig(z,d[f+1>>0]<<16|d[f>>0]<<24|d[f+2>>0]<<8|d[f+3>>0],5,A,y)}A=c[y>>2]|0;Ra=B;return A|0}function ig(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+48|0;m=r+32|0;l=r+16|0;j=r;q=r+44|0;if(c[i>>2]|0){Ra=r;return}switch(f|0){case 0:{c[j>>2]=32306;c[j+4>>2]=64184;c[j+8>>2]=31517;Db(11,32001,j);c[i>>2]=11;Ra=r;return}case 1:{k=0;break}default:{k=f+-2|0;k=k-((k>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+k|0}}j=c[e>>2]|0;j=Za[c[j+204>>2]&127](j,k,q,0)|0;if(j|0){c[i>>2]=j;Ra=r;return}n=c[q>>2]|0;a:do if(!(a[c[n+8>>2]>>0]|0)){l=(f-k|0)*5|0;j=l+-5|0;if((j|0)<0){c[m>>2]=32306;c[m+4>>2]=64202;c[m+8>>2]=31517;Db(11,32001,m);c[i>>2]=11;break}f=c[n+4>>2]|0;e=f+j|0;if((a[e>>0]|0)==g<<24>>24?(m=f+(l+-4)|0,(d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(h|0)):0)break;k=c[n+20>>2]|0;do if((b[n+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[n+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[i>>2]=0;break}else{o=Ve(n)|0;p=23;break}else p=18;while(0);do if((p|0)==18){j=c[k+40>>2]|0;if(j|0){c[i>>2]=j;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){o=Wf(n)|0;p=23;break}else{o=Xf(n)|0;p=23;break}}while(0);if((p|0)==23?(c[i>>2]=o,o|0):0)break;a[e>>0]=g;i=f+(l+-4)|0;a[i>>0]=h>>>24;a[i+1>>0]=h>>>16;a[i+2>>0]=h>>>8;a[i+3>>0]=h}else{c[l>>2]=32306;c[l+4>>2]=64197;c[l+8>>2]=31517;Db(11,32001,l);c[i>>2]=11}while(0);j=c[q>>2]|0;if(!j){Ra=r;return}if(!(b[j+28>>1]&32)){Df(j);Ra=r;return}else{q=c[j+20>>2]|0;i=q+120|0;c[i>>2]=(c[i>>2]|0)+-1;q=q+136|0;c[j+16>>2]=c[q>>2];c[q>>2]=j;Ra=r;return}}function jg(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!d){n=0;return n|0}n=d+4|0;g=c[n>>2]|0;c[g+4>>2]=c[d>>2];g=c[g+8>>2]|0;if(!g){n=0;return n|0}k=(f|0)==0;a:while(1){b:do if(k){f=g+16|0;h=c[f>>2]|0;if(h)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);m=58;break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);m=58;break}else m=58}else{l=g+1|0;if(a[l>>0]&1){f=g+16|0;h=c[f>>2]|0;if(!h){m=58;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);m=58;break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);m=58;break}}switch(a[g>>0]|0){case 0:{c[g+4>>2]=0;f=ag(g)|0;if(f|0){k=f;break a}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{o=c[h+20>>2]|0;p=o+120|0;c[p>>2]=(c[p>>2]|0)+-1;o=o+136|0;c[h+16>>2]=c[o>>2];c[o>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}break}case 2:{a[g>>0]=0;f=ag(g)|0;if(f|0){k=f;break a}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}break}default:break b}a[g>>0]=3;a[l>>0]=a[l>>0]&-15}while(0);if((m|0)==58){m=0;c[f>>2]=0;a[g>>0]=4;c[g+4>>2]=e}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}g=c[g+24>>2]|0;if(!g){f=0;m=71;break}}if((m|0)==71)return f|0;a[l>>0]=a[l>>0]&-15;f=c[n>>2]|0;c[f+4>>2]=c[d>>2];f=c[f+8>>2]|0;if(!f){p=k;return p|0}do{g=f+16|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;a[f>>0]=4;c[f+4>>2]=k;j=f+68|0;g=a[j>>0]|0;if(g<<24>>24>-1){if(g<<24>>24){i=0;do{h=c[(c[f+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[f+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{p=c[g+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[g+16>>2]=c[p>>2];c[p>>2]=g}a[j>>0]=-1}f=c[f+24>>2]|0}while((f|0)!=0);f=k;return f|0}function kg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;switch(d|0){case -16:{lg(a,e);return}case -15:case -17:case -7:case -14:case -13:{if(!e)return;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -9:{if((e|0)==0|(c[a+480>>2]|0)!=0)return;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;if(d|0)return;a=c[e+12>>2]|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -8:{if(!(c[e+4>>2]&16))return;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -11:{if(c[a+480>>2]|0){mg(a,e);return}if(!e)return;if(!((b[e+8>>1]&9216)==0?!(c[e+24>>2]|0):0))Cg(e);a=c[e+32>>2]|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -12:{if(c[a+480>>2]|0)return;a=c[e>>2]|0;f=e+12|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if(d|0)return;d=c[e+8>>2]|0;if(d|0)Wa[c[(c[d>>2]|0)+16>>2]&127](d)|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}f=e;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){f=a+300|0;c[e>>2]=c[f>>2];c[f>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}default:return}}function lg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b+4>>2]|0;a:do if(c[f+4>>2]&16){do if(a|0){d=a+480|0;if(!(c[d>>2]|0)){e=f;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[f>>2]=c[e>>2];c[e>>2]=f}else Xd(a,f);e=14;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);e=12;break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);e=12;break}}else e=12;while(0);if((e|0)==12)if(a){d=a+480|0;e=14}if((e|0)==14){if(c[d>>2]|0){Xd(a,b);return}f=b;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:do if((c[b+24>>2]|0)!=0?(f=c[b+20>>2]|0,(f|0)!=0):0){do if(a|0){d=a+480|0;if(!(c[d>>2]|0)){e=f;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[f>>2]=c[e>>2];c[e>>2]=f}else Xd(a,f);e=15;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);e=13;break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);e=13;break}}else e=13;while(0);if((e|0)==13)if(a){d=a+480|0;e=15}if((e|0)==15){if(c[d>>2]|0){Xd(a,b);return}f=b;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function ng(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;e=a+12|0;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;if(d|0)return;d=c[a+8>>2]|0;if(d|0)Wa[c[(c[d>>2]|0)+16>>2]&127](d)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,a);return}e=a;if((c[b+304>>2]|0)>>>0<=e>>>0?(c[b+308>>2]|0)>>>0>e>>>0:0){e=b+300|0;c[a>>2]=c[e>>2];c[e>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function og(b){b=b|0;var d=0;d=b+81|0;if(a[d>>0]|0?(c[b+180>>2]|0)==0:0){a[d>>0]=0;c[b+264>>2]=0;d=b+272|0;c[d>>2]=(c[d>>2]|0)+-1}c[b+64>>2]=7;Ne(b,7);return}function pg(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;N=Ra;Ra=Ra+64|0;C=N+40|0;F=N+32|0;E=N+24|0;D=N+16|0;z=N+8|0;y=N;B=N+48|0;J=c[f>>2]|0;K=f+20|0;if((c[K>>2]|0)!=770837923){M=0;Ra=N;return M|0}M=J+81|0;if(a[M>>0]|0)c[f+40>>2]=7;i=f+196|0;g=c[i>>2]|0;if(g|0){while(1){h=c[g+4>>2]|0;if(!h)break;else g=h}sg(g)|0;c[i>>2]=0;c[f+204>>2]=0}k=f+96|0;h=c[k>>2]|0;a:do if(h|0?(l=f+28|0,j=c[l>>2]|0,(j|0)>0):0){g=0;i=j;while(1){h=c[h+(g<<2)>>2]|0;if(!h)h=i;else{tg(f,h);c[(c[k>>2]|0)+(g<<2)>>2]=0;h=c[l>>2]|0}g=g+1|0;if((g|0)>=(h|0))break a;i=h;h=c[k>>2]|0}}while(0);g=c[f+88>>2]|0;b:do if(g|0?(m=c[f+24>>2]|0,m|0):0){p=g+(m*40|0)|0;k=c[g+32>>2]|0;l=k+480|0;h=(k|0)==0;m=k+304|0;n=k+308|0;o=k+300|0;if(c[l>>2]|0){if(h)while(1){do if(c[g+24>>2]|0?(q=c[g+20>>2]|0,q|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{G=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);g=g+40|0;if(g>>>0>=p>>>0)break b}while(1){do if(c[g+24>>2]|0?(r=c[g+20>>2]|0,r|0):0){if(c[l>>2]|0){Xd(k,r);break}G=r;if((c[m>>2]|0)>>>0<=G>>>0?(c[n>>2]|0)>>>0>G>>>0:0){c[r>>2]=c[o>>2];c[o>>2]=r;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{G=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);g=g+40|0;if(g>>>0>=p>>>0)break b}}if(h)while(1){i=g+8|0;if(!(b[i>>1]&9216)){j=g+24|0;if(c[j>>2]|0){h=c[g+20>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[j>>2]=0}}else Cg(g);b[i>>1]=128;g=g+40|0;if(g>>>0>=p>>>0)break b}do{h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(!(c[l>>2]|0)){G=j;if((c[m>>2]|0)>>>0<=G>>>0?(c[n>>2]|0)>>>0>G>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{G=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else Xd(k,j);while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0}while(g>>>0<p>>>0)}while(0);s=f+200|0;g=c[s>>2]|0;if(g|0)do{c[s>>2]=c[g+4>>2];h=g+80|0;j=g+60|0;i=c[j>>2]|0;k=h+(i*40|0)|0;l=g+64|0;if((c[l>>2]|0)>0){i=0;do{tg(c[g>>2]|0,c[k+(i<<2)>>2]|0);i=i+1|0}while((i|0)<(c[l>>2]|0));i=c[j>>2]|0}c:do if(i|0){r=h+(i*40|0)|0;m=c[g+112>>2]|0;n=m+480|0;i=(m|0)==0;o=m+304|0;p=m+308|0;q=m+300|0;if(c[n>>2]|0){if(i)while(1){do if(c[h+24>>2]|0?(t=c[h+20>>2]|0,t|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{G=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}while(0);h=h+40|0;if(h>>>0>=r>>>0)break c}while(1){d:do if(c[h+24>>2]|0?(u=c[h+20>>2]|0,u|0):0){if(c[n>>2]|0){Xd(m,u);break}i=u;do if((c[o>>2]|0)>>>0<=i>>>0){if((c[p>>2]|0)>>>0<=i>>>0)break;c[u>>2]=c[q>>2];c[q>>2]=u;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{G=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);h=h+40|0;if(h>>>0>=r>>>0)break c}}if(i)while(1){i=h+8|0;if(!(b[i>>1]&9216)){j=h+24|0;if(c[j>>2]|0){k=c[h+20>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{G=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[j>>2]=0}}else Cg(h);b[i>>1]=128;h=h+40|0;if(h>>>0>=r>>>0)break c}do{i=h+8|0;if(!(b[i>>1]&9216)){j=h+24|0;if(c[j>>2]|0){k=c[h+20>>2]|0;e:do if(!(c[n>>2]|0)){l=k;do if((c[o>>2]|0)>>>0<=l>>>0){if((c[p>>2]|0)>>>0<=l>>>0)break;c[k>>2]=c[q>>2];c[q>>2]=k;break e}while(0);if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{G=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(m,k);while(0);c[j>>2]=0}}else Cg(h);b[i>>1]=128;h=h+40|0}while(h>>>0<r>>>0)}while(0);j=c[c[g>>2]>>2]|0;o=g+40|0;h=c[o>>2]|0;f:do if(h|0){k=j+480|0;l=j+304|0;m=j+308|0;n=j+300|0;if(!j)while(1){i=c[h+12>>2]|0;if(i|0)ab[i&127](c[h+8>>2]|0);c[o>>2]=c[h+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[o>>2]|0;if(!h)break f}do{i=c[h+12>>2]|0;if(i|0)ab[i&127](c[h+8>>2]|0);c[o>>2]=c[h+16>>2];do if(!(c[k>>2]|0)){G=h;if((c[l>>2]|0)>>>0<=G>>>0?(c[m>>2]|0)>>>0>G>>>0:0){c[h>>2]=c[n>>2];c[n>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(j,h);while(0);h=c[o>>2]|0}while((h|0)!=0)}while(0);h=c[c[g>>2]>>2]|0;do if(h){if(c[h+480>>2]|0){Xd(h,g);break}G=g;if((c[h+304>>2]|0)>>>0<=G>>>0?(c[h+308>>2]|0)>>>0>G>>>0:0){G=h+300|0;c[g>>2]=c[G>>2];c[G>>2]=g}else H=145}else H=145;while(0);do if((H|0)==145){H=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[s>>2]|0}while((g|0)!=0);n=f+216|0;g=c[n>>2]|0;g:do if(g|0){i=c[f>>2]|0;j=i+480|0;k=i+304|0;l=i+308|0;m=i+300|0;if(!i)while(1){h=c[g+12>>2]|0;if(h|0)ab[h&127](c[g+8>>2]|0);c[n>>2]=c[g+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}g=c[n>>2]|0;if(!g)break g}do{h=c[g+12>>2]|0;if(h|0)ab[h&127](c[g+8>>2]|0);c[n>>2]=c[g+16>>2];do if(!(c[j>>2]|0)){G=g;if((c[k>>2]|0)>>>0<=G>>>0?(c[l>>2]|0)>>>0>G>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else Xd(i,g);while(0);g=c[n>>2]|0}while((g|0)!=0)}while(0);u=f+36|0;if((c[u>>2]|0)>-1){G=f+149|0;if((d[G>>0]|d[G+1>>0]<<8)&512){h=c[f+156>>2]|0;if(h|0?(w=c[f>>2]|0,v=c[w+16>>2]|0,w=c[w+20>>2]|0,(w|0)>0):0){g=0;do{if(((g|0)!=1?1<<g&h|0:0)?(x=c[v+(g<<4)+4>>2]|0,x|0):0)c[(c[x+4>>2]|0)+4>>2]=c[x>>2];g=g+1|0}while((g|0)!=(w|0))}t=f+40|0;h=c[t>>2]|0;i=h&255;h:do switch(i<<24>>24){case 13:case 7:case 9:case 10:{g=d[G>>0]|d[G+1>>0]<<8;if((h&255|0)!=9|(g&256)==0){switch(i<<24>>24){case 7:case 13:{if(g&128){g=2;i=1;break h}break}default:{}}rg(J,516);i=J+444|0;g=c[i>>2]|0;if(g|0){j=J+480|0;k=J+304|0;l=J+308|0;m=J+300|0;do{c[i>>2]=c[g+24>>2];i:do if(!(c[j>>2]|0)){h=g;do if((c[k>>2]|0)>>>0<=h>>>0){if((c[l>>2]|0)>>>0<=h>>>0)break;c[g>>2]=c[m>>2];c[m>>2]=g;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else Xd(J,g);while(0);g=c[i>>2]|0}while((g|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0;g=0;h=c[t>>2]|0;i=1}else{g=0;i=1}break}default:{g=0;i=0}}while(0);if((h|0)==0?(x=f+64|0,w=c[x+4>>2]|0,(w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0):0){c[t>>2]=787;a[f+146>>0]=2;Ag(f,32436,y)}s=J+332|0;h=c[s>>2]|0;if((h|0)>0?(c[J+356>>2]|0)==0:0)H=460;else if((a[J+79>>0]|0)!=0?(c[J+176>>2]|0)==((((d[G>>0]|d[G+1>>0]<<8)&65535)>>>8&1^1)&65535|0):0){if((c[t>>2]|0)!=0?i|(a[f+146>>0]|0)!=3:0){rg(J,0);c[f+44>>2]=0}else H=205;j:do if((H|0)==205){x=c[f>>2]|0;y=x+464|0;x=x+472|0;y=Sv(c[x>>2]|0,c[x+4>>2]|0,c[y>>2]|0,c[y+4>>2]|0)|0;x=L()|0;k:do if((x|0)>0|(x|0)==0&y>>>0>0){c[t>>2]=787;a[f+146>>0]=2;Ag(f,32436,z);if(!((d[G>>0]|d[G+1>>0]<<8)&256)){h=787;break}else g=1;Ra=N;return g|0}else{r=J+356|0;p=c[r>>2]|0;c[r>>2]=0;q=f+124|0;l:do if((h|0)>0){o=0;m:while(1){i=c[(c[p+(o<<2)>>2]|0)+8>>2]|0;do if(i|0){h=c[(c[i>>2]|0)+60>>2]|0;if(!h)break;h=Wa[h&127](i)|0;n=i+8|0;if(c[n>>2]|0){k=c[f>>2]|0;i=c[q>>2]|0;n:do if(i|0){do if(k|0){if(c[k+480>>2]|0){Xd(k,i);break n}j=i;if((c[k+304>>2]|0)>>>0>j>>>0)break;if((c[k+308>>2]|0)>>>0<=j>>>0)break;z=k+300|0;c[i>>2]=c[z>>2];c[z>>2]=i;break n}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{z=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);l=c[n>>2]|0;o:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;p:do if(!k){z=Sv(m|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){i=0;break o}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;H=247;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){z=c[14978]|0;y=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break o}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){i=0;break o}}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<m>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];H=k+284|0;c[H>>2]=(c[H>>2]|0)+1;H=247;break p}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];H=k+284|0;c[H>>2]=(c[H>>2]|0)+1;H=247;break p}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(k,m,0)|0;H=247}while(0);if((H|0)==247){H=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[q>>2]=i;i=c[n>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{z=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[n>>2]=0}if(h|0)break m}while(0);o=o+1|0;if((o|0)>=(c[s>>2]|0)){H=257;break l}}c[r>>2]=p;H=454}else H=257;while(0);q:do if((H|0)==257){c[r>>2]=p;p=J+20|0;q=J+16|0;o=0;i=0;j=0;while(1){if((o|0)>=(c[p>>2]|0))break;k=c[q>>2]|0;h=c[k+(o<<4)+4>>2]|0;r:do if(!h)h=0;else{if((a[h+8>>0]|0)!=2){h=0;break}j=c[h+4>>2]|0;c[j+4>>2]=c[h>>2];j=c[j>>2]|0;do if((a[k+(o<<4)+8>>0]|0)!=1){if(!(11>>>(d[j+5>>0]|0)&1))break;i=i+((a[j+12>>0]|0)==0&1)|0}while(0);h=c[j+40>>2]|0;if(h|0){j=1;break}if(c[j+216>>2]|0){h=0;j=1;break}k=j+17|0;l=j+13|0;m=j+60|0;n=j+176|0;j=j+180|0;s:while(1){switch(a[k>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:{h=0;j=1;break r}}if(a[l>>0]|0)break;h=c[m>>2]|0;h=Xa[c[(c[h>>2]|0)+28>>2]&255](h,4)|0;switch(h|0){case 0:break s;case 5:break;default:{j=1;break r}}if(!(Wa[c[n>>2]&127](c[j>>2]|0)|0)){h=5;j=1;break r}}a[k>>0]=4;h=0;j=1}while(0);if(!h)o=o+1|0;else{H=454;break q}}do if(j|0){h=c[J+216>>2]|0;if(!h)break;if(Wa[h&127](c[J+212>>2]|0)|0){h=531;break k}}while(0);j=c[c[(c[(c[q>>2]|0)+4>>2]|0)+4>>2]>>2]|0;k=(a[j+15>>0]|0)==0;if(k){h=c[j+168>>2]|0;if(h|0)H=278}else{h=59952;H=278}do if((H|0)==278){if((i|0)<2|((Eu(h)|0)&1073741823|0)==0)break;n=c[J>>2]|0;if(k){h=c[j+168>>2]|0;if(!h){i=0;h=0}else H=320}else{h=59952;H=320}if((H|0)==320)i=(Eu(h)|0)&1073741823;c[D>>2]=h;o=dd(J,32466,D)|0;t:do if(o){j=o+i|0;k=n+32|0;i=0;u:while(1){do if(i|0){if(i>>>0>100){H=327;break u}if((i|0)!=1)break;c[E>>2]=o;Db(13,32496,E)}while(0);Fb(4,D);h=c[D>>2]|0;c[C>>2]=h>>>8;c[C+4>>2]=h&255;Cb(13,j,32511,C)|0;h=Za[c[k>>2]&127](n,o,0,B)|0;l=(h|0)==0;if(l&(c[B>>2]|0)!=0)i=i+1|0;else{H=329;break}}if((H|0)==327){c[F>>2]=o;Db(13,32482,F);Ya[c[n+28>>2]&127](n,o,0)|0;H=330}else if((H|0)==329)if(l)H=330;v:do if((H|0)==330){k=c[n+4>>2]|0;F=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;E=L()|0;if(E>>>0>0|(E|0)==0&F>>>0>2147483390){h=7;break}do if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h){h=7;break v}else m=h}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){F=c[14978]|0;E=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;D=L()|0;c[14768]=((D|0)<0|(D|0)==0&E>>>0<=F>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(!i){h=7;break v}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0<=(c[14987]|0)>>>0){m=i;break}c[14987]=h;m=i}while(0);gw(m|0,0,k|0)|0;h=_a[c[n+24>>2]&127](n,o,m,16406,0)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}h=c[p>>2]|0;w:do if((h|0)>0){l=0;k=0;j=0;x:while(1){i=c[(c[q>>2]|0)+(l<<4)+4>>2]|0;do if(!i)i=k;else{if((a[i+8>>0]|0)!=2){i=k;break}i=c[(c[c[i+4>>2]>>2]|0)+172>>2]|0;if(!i){i=k;break}h=((Eu(i)|0)&1073741823)+1|0;h=_a[c[(c[m>>2]|0)+12>>2]&127](m,i,h,k,j)|0;if(h|0)break x;i=Sv(k|0,j|0,((Eu(i)|0)&1073741823)+1|0,0)|0;j=L()|0;h=c[p>>2]|0}while(0);l=l+1|0;if((l|0)>=(h|0))break w;else k=i}i=c[m>>2]|0;if(i|0){Wa[c[i+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}Ya[c[n+28>>2]&127](n,o,0)|0;if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}while(0);do if(!((Wa[c[(c[m>>2]|0)+48>>2]&127](m)|0)&1024)){h=Xa[c[(c[m>>2]|0)+20>>2]&255](m,2)|0;if(!h)break;i=c[m>>2]|0;if(i|0){Wa[c[i+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}Ya[c[n+28>>2]&127](n,o,0)|0;if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}while(0);i=0;while(1){if((i|0)>=(c[p>>2]|0)){h=0;i=1;break}h=c[(c[q>>2]|0)+(i<<4)+4>>2]|0;if(!h)h=0;else h=cc(h,o)|0;if(!h)i=i+1|0;else{i=0;break}}j=c[m>>2]|0;if(j|0){Wa[c[j+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}if(!i){if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}h=Ya[c[n+28>>2]&127](n,o,1)|0;n=J+480|0;y:do if(!(c[n>>2]|0)){i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;F=J+300|0;c[o>>2]=c[F>>2];c[F>>2]=o;break y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{F=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else Xd(J,o);while(0);if(h|0)break t;h=c[p>>2]|0;if((h|0)>0){j=0;do{i=c[(c[q>>2]|0)+(j<<4)+4>>2]|0;if(i){bc(i,1)|0;h=c[p>>2]|0}j=j+1|0}while((j|0)<(h|0))}m=c[r>>2]|0;if(m|0){c[r>>2]=0;if((c[s>>2]|0)>0){k=0;do{l=c[m+(k<<2)>>2]|0;j=l+8|0;h=c[j>>2]|0;do if(h|0){i=c[(c[h>>2]|0)+64>>2]|0;if(!i)break;Wa[i&127](h)|0}while(0);c[l+20>>2]=0;i=c[l>>2]|0;E=l+12|0;F=(c[E>>2]|0)+-1|0;c[E>>2]=F;z:do if(!F){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break z}h=l;if((c[i+304>>2]|0)>>>0>h>>>0)break;if((c[i+308>>2]|0)>>>0<=h>>>0)break;F=i+300|0;c[l>>2]=c[F>>2];c[F>>2]=l;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{F=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);k=k+1|0}while((k|0)<(c[s>>2]|0))}A:do if(!(c[n>>2]|0)){h=m;do if((c[J+304>>2]|0)>>>0<=h>>>0){if((c[J+308>>2]|0)>>>0<=h>>>0)break;F=J+300|0;c[m>>2]=c[F>>2];c[F>>2]=m;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(J,m);while(0);c[s>>2]=0}break q}while(0);do if(J|0){if(c[J+480>>2]|0){Xd(J,o);break t}i=o;if((c[J+304>>2]|0)>>>0>i>>>0)break;if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else h=7;while(0);H=454;break q}while(0);i=0;while(1){h=c[p>>2]|0;if((i|0)>=(h|0))break;h=c[(c[q>>2]|0)+(i<<4)+4>>2]|0;if(!h)h=0;else h=cc(h,0)|0;if(!h)i=i+1|0;else{H=454;break q}}if((h|0)>0){h=0;do{i=c[(c[q>>2]|0)+(h<<4)+4>>2]|0;if(i|0?(A=bc(i,0)|0,A|0):0){h=A;H=454;break q}h=h+1|0}while((h|0)<(c[p>>2]|0))}m=c[r>>2]|0;if(!m)break;c[r>>2]=0;if((c[s>>2]|0)>0){k=0;do{l=c[m+(k<<2)>>2]|0;j=l+8|0;h=c[j>>2]|0;do if(h|0){i=c[(c[h>>2]|0)+64>>2]|0;if(!i)break;Wa[i&127](h)|0}while(0);c[l+20>>2]=0;i=c[l>>2]|0;E=l+12|0;F=(c[E>>2]|0)+-1|0;c[E>>2]=F;B:do if(!F){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break B}h=l;if((c[i+304>>2]|0)>>>0>h>>>0)break;if((c[i+308>>2]|0)>>>0<=h>>>0)break;F=i+300|0;c[l>>2]=c[F>>2];c[F>>2]=l;break B}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{F=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);k=k+1|0}while((k|0)<(c[s>>2]|0))}C:do if(!(c[J+480>>2]|0)){h=m;do if((c[J+304>>2]|0)>>>0<=h>>>0){if((c[J+308>>2]|0)>>>0<=h>>>0)break;F=J+300|0;c[m>>2]=c[F>>2];c[F>>2]=m;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(J,m);while(0);c[s>>2]=0}while(0);D:do if((H|0)==454){switch(h|0){case 0:break D;case 5:break;default:break k}if(!((d[G>>0]|d[G+1>>0]<<8)&256)){h=5;break k}else g=5;Ra=N;return g|0}while(0);E=J+464|0;H=J+32|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;E=H;F=c[E+4>>2]|0;c[H>>2]=c[E>>2]&-524289;c[H+4>>2]=F;H=J+24|0;c[H>>2]=c[H>>2]&-2;break j}while(0);c[t>>2]=h;rg(J,0);c[f+44>>2]=0}while(0);c[J+456>>2]=0;H=476}else H=460;E:do if((H|0)==460)if(!g)if(!(c[t>>2]|0)){g=1;H=477}else{switch(a[f+146>>0]|0){case 3:{g=1;H=477;break E}case 2:{g=2;H=477;break E}default:{}}rg(J,516);j=J+444|0;h=c[j>>2]|0;if(h|0){k=J+480|0;l=J+304|0;m=J+308|0;n=J+300|0;do{c[j>>2]=c[h+24>>2];F:do if(!(c[k>>2]|0)){i=h;do if((c[l>>2]|0)>>>0<=i>>>0){if((c[m>>2]|0)>>>0<=i>>>0)break;c[h>>2]=c[n>>2];c[n>>2]=h;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{H=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(J,h);while(0);h=c[j>>2]|0}while((h|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0;H=476}else H=477;while(0);if((H|0)==476)if(!g)g=0;else H=477;if((H|0)==477)if(((c[(c[f>>2]|0)+456>>2]|0)!=0?(c[f+48>>2]|0)!=0:0)?(I=Bg(f,g)|0,(I|0)!=0):0){H=c[t>>2]|0;if((H|0)==0|(H&255|0)==19){c[t>>2]=I;h=f+124|0;i=c[h>>2]|0;G:do if(i|0){if(c[J+480>>2]|0){Xd(J,i);break}j=i;do if((c[J+304>>2]|0)>>>0<=j>>>0){if((c[J+308>>2]|0)>>>0<=j>>>0)break;I=J+300|0;c[i>>2]=c[I>>2];c[I>>2]=i;break G}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[h>>2]=0}rg(J,516);j=J+444|0;h=c[j>>2]|0;if(h|0){k=J+480|0;l=J+304|0;m=J+308|0;n=J+300|0;do{c[j>>2]=c[h+24>>2];H:do if(!(c[k>>2]|0)){i=h;do if((c[l>>2]|0)>>>0<=i>>>0){if((c[m>>2]|0)>>>0<=i>>>0)break;c[h>>2]=c[n>>2];c[n>>2]=h;break H}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{I=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(J,h);while(0);h=c[j>>2]|0}while((h|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0}if((d[G>>0]|d[G+1>>0]<<8)&32){h=f+44|0;if((g|0)==2)g=0;else{g=c[h>>2]|0;I=J+104|0;c[I>>2]=(c[I>>2]|0)+g}c[J+100>>2]=g;c[h>>2]=0}}if((c[u>>2]|0)>-1){g=J+168|0;c[g>>2]=(c[g>>2]|0)+-1;g=d[G>>0]|d[G+1>>0]<<8;if(!(g&256)){g=J+176|0;c[g>>2]=(c[g>>2]|0)+-1;g=d[G>>0]|d[G+1>>0]<<8}if(g&512){J=J+172|0;c[J>>2]=(c[J>>2]|0)+-1}}}c[K>>2]=832317811;g=f+40|0;if(!(a[M>>0]|0)){M=(c[g>>2]|0)==5?5:0;Ra=N;return M|0}else{c[g>>2]=7;M=0;Ra=N;return M|0}return 0}function qg(d){d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=c[d>>2]|0;l=c[d+40>>2]|0;i=d+124|0;if(!(c[i>>2]|0)){d=c[k+260>>2]|0;if(!d){k=k+64|0;c[k>>2]=l;return l|0}f=d+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;k=k+64|0;c[k>>2]=l;return l|0}else{Dg(d);k=k+64|0;c[k>>2]=l;return l|0}}j=k+82|0;a[j>>0]=(a[j>>0]|0)+1<<24>>24;h=k+260|0;d=c[h>>2]|0;do if(!d){a:do if(c[k+272>>2]|0){if(!(a[k+81>>0]|0))g=13}else{do if((e[k+276>>1]|0)>=40){d=k+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];g=k+284|0;c[g>>2]=(c[g>>2]|0)+1;g=14;break a}d=k+296|0;f=c[d>>2]|0;if(!f){d=k+292|0;break}else{c[d>>2]=c[f>>2];g=k+284|0;c[g>>2]=(c[g>>2]|0)+1;g=14;break a}}else d=k+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;g=13}while(0);if((g|0)==13){f=_d(k,40,0)|0;g=14}if((g|0)==14?f|0:0){d=f;g=d+40|0;do{a[d>>0]=0;d=d+1|0}while((d|0)<(g|0));b[f+8>>1]=1;c[f+32>>2]=k;c[h>>2]=f;d=f;g=17;break}c[h>>2]=0}else g=17;while(0);if((g|0)==17)yc(d,c[i>>2]|0,-1,1,-1)|0;a[j>>0]=(a[j>>0]|0)+-1<<24>>24;k=k+64|0;c[k>>2]=l;return l|0}function rg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+20|0;l=c[m>>2]|0;i=(l|0)>0;if(i){g=c[b+16>>2]|0;f=0;do{h=c[g+(f<<4)+4>>2]|0;if(h|0)c[(c[h+4>>2]|0)+4>>2]=c[h>>2];f=f+1|0}while((f|0)!=(l|0))}if(!(c[b+24>>2]&1))n=0;else n=(a[b+165>>0]|0)==0;if(i){j=b+16|0;k=(n^1)&1;f=0;i=0;h=l;while(1){g=c[(c[j>>2]|0)+(i<<4)+4>>2]|0;if(!g)g=h;else{f=(a[g+8>>0]|0)==2?1:f;ec(g,e,k);g=c[m>>2]|0}i=i+1|0;if((i|0)>=(g|0)){e=f;break}else h=g}}else e=0;f=b+356|0;l=c[f>>2]|0;if(l|0){c[f>>2]=0;j=b+332|0;if((c[j>>2]|0)>0){i=0;do{k=c[l+(i<<2)>>2]|0;g=k+8|0;f=c[g>>2]|0;if(f|0?(o=c[(c[f>>2]|0)+68>>2]|0,o|0):0)Wa[o&127](f)|0;c[k+20>>2]=0;h=c[k>>2]|0;f=k+12|0;m=(c[f>>2]|0)+-1|0;c[f>>2]=m;do if(!m){f=c[g>>2]|0;if(f|0)Wa[c[(c[f>>2]|0)+16>>2]&127](f)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,k);break}m=k;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);i=i+1|0}while((i|0)<(c[j>>2]|0))}do if(!(c[b+480>>2]|0)){o=l;if((c[b+304>>2]|0)>>>0<=o>>>0?(c[b+308>>2]|0)>>>0>o>>>0:0){o=b+300|0;c[l>>2]=c[o>>2];c[o>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(b,l);while(0);c[j>>2]=0}if(n){f=c[b+4>>2]|0;if(f|0)do{o=f+149|0;n=(d[o>>0]|d[o+1>>0]<<8)&-4|1;a[o>>0]=n;a[o+1>>0]=n>>8;f=c[f+8>>2]|0}while((f|0)!=0);$b(b)}n=b+464|0;f=b+32|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;n=f;o=c[n+4>>2]|0;c[f>>2]=c[n>>2]&-524289;c[f+4>>2]=o;f=c[b+224>>2]|0;if(!f)return;if((e|0)==0?a[b+79>>0]|0:0)return;ab[f&127](c[b+220>>2]|0);return}function sg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=c[a>>2]|0;g=h+96|0;e=c[g>>2]|0;f=h+28|0;a:do if(e|0?(d=c[f>>2]|0,(d|0)>0):0){b=0;while(1){e=c[e+(b<<2)>>2]|0;if(e){tg(h,e);c[(c[g>>2]|0)+(b<<2)>>2]=0;d=c[f>>2]|0}b=b+1|0;if((b|0)>=(d|0))break a;e=c[g>>2]|0}}while(0);c[h+104>>2]=c[a+8>>2];c[h+108>>2]=c[a+52>>2];c[h+88>>2]=c[a+16>>2];c[h+24>>2]=c[a+56>>2];c[g>>2]=c[a+20>>2];c[f>>2]=c[a+44>>2];g=a+32|0;b=c[g+4>>2]|0;i=c[h>>2]|0;j=i+40|0;c[j>>2]=c[g>>2];c[j+4>>2]=b;c[h+44>>2]=c[a+68>>2];c[i+100>>2]=c[a+72>>2];j=h+216|0;b=c[j>>2]|0;if(!b){i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}e=i+480|0;f=i+304|0;g=i+308|0;h=i+300|0;if(!i){do{d=c[b+12>>2]|0;if(d|0)ab[d&127](c[b+8>>2]|0);c[j>>2]=c[b+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{i=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}b=c[j>>2]|0}while((b|0)!=0);i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}do{d=c[b+12>>2]|0;if(d|0)ab[d&127](c[b+8>>2]|0);c[j>>2]=c[b+16>>2];do if(!(c[e>>2]|0)){d=b;if((c[f>>2]|0)>>>0<=d>>>0?(c[g>>2]|0)>>>0>d>>>0:0){c[b>>2]=c[h>>2];c[h>>2]=b;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}else Xd(i,b);while(0);b=c[j>>2]|0}while((b|0)!=0);i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}function tg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;if(!d)return;switch(a[d>>0]|0){case 1:{f=c[b>>2]|0;b=d+40|0;d=c[b>>2]|0;if(!d)return;wg(f,d);e=c[d+40>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);do if(f){if(c[f+480>>2]|0){Xd(f,d);break}h=d;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[d>>2]=c[h>>2];c[h>>2]=d}else g=14}else g=14;while(0);do if((g|0)==14)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;return}case 0:{if(!(a[d+5>>0]&1)){vg(c[d+40>>2]|0);return}b=c[d+8>>2]|0;if(!b)return;ug(b);return}case 2:{h=c[d+40>>2]|0;f=c[h>>2]|0;g=c[f>>2]|0;f=f+4|0;c[f>>2]=(c[f>>2]|0)+-1;Wa[c[g+28>>2]&127](h)|0;return}default:return}}function ug(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=c[b+4>>2]|0;c[i+4>>2]=c[b>>2];d=c[i+8>>2]|0;if(d|0)do{e=d;d=c[d+24>>2]|0;if((c[e+8>>2]|0)==(b|0))vg(e)}while((d|0)!=0);ec(b,0,0);a:do if(a[b+9>>0]|0){e=i+64|0;f=c[e>>2]|0;c[e>>2]=f+-1;if((f|0)<2){d=c[14822]|0;if((d|0)==(i|0)){c[14822]=c[i+68>>2];h=15;break}if(!d)h=15;else{while(1){e=c[d+68>>2]|0;if((e|0)==(i|0))break;if(!e){h=15;break a}else d=e}c[d+68>>2]=c[i+68>>2];h=15}}}else h=15;while(0);do if((h|0)==15){Te(c[i>>2]|0,c[b>>2]|0);e=c[i+52>>2]|0;d=i+48|0;if(e){f=c[d>>2]|0;if(f|0){ab[e&127](f);h=18}}else h=18;do if((h|0)==18?(g=c[d>>2]|0,g|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{f=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);f=i+80|0;d=c[f>>2]|0;if(d|0){e=d+-4|0;c[f>>2]=e;d=e;do if((c[14816]|0)>>>0<=d>>>0)if((c[14817]|0)>>>0>d>>>0){c[14979]=(c[14979]|0)+-1;c[e>>2]=c[14819];c[14819]=e;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;break}else{d=Wa[c[29352>>2]&127](e)|0;h=28;break}else{d=Wa[c[29352>>2]&127](e)|0;h=28}while(0);do if((h|0)==28){c[14980]=(c[14980]|0)-d;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[f>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);e=c[b+28>>2]|0;d=b+24|0;if(e|0)c[e+24>>2]=c[d>>2];d=c[d>>2]|0;if(d|0)c[d+28>>2]=e;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{i=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function vg(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=d+8|0;e=c[m>>2]|0;if(!e)return;i=c[d+20>>2]|0;c[(c[e+4>>2]|0)+4>>2]=c[e>>2];f=i+8|0;e=c[f>>2]|0;a:do if((e|0)==(d|0))c[f>>2]=c[d+24>>2];else{while(1){f=c[e+24>>2]|0;if((f|0)==(d|0))break;if(!f)break a;else e=f}c[e+24>>2]=c[d+24>>2]}while(0);h=d+68|0;e=a[h>>0]|0;if(e<<24>>24>-1){if(e<<24>>24){g=0;do{f=c[(c[d+120+(g<<2)>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32)){Df(f);e=a[h>>0]|0}else{n=c[f+20>>2]|0;o=n+120|0;c[o>>2]=(c[o>>2]|0)+-1;n=n+136|0;c[f+16>>2]=c[n>>2];c[n>>2]=f}g=g+1|0}while((g|0)<(e<<24>>24|0))}e=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[e+28>>1]&32))Df(e);else{o=c[e+20>>2]|0;n=o+120|0;c[n>>2]=(c[n>>2]|0)+-1;o=o+136|0;c[e+16>>2]=c[o>>2];c[o>>2]=e}a[h>>0]=-1}if(((a[i+20>>0]|0)==0?(j=i+12|0,k=c[j>>2]|0,k|0):0)?(c[j>>2]=0,o=c[k+72>>2]|0,l=c[o+20>>2]|0,Df(o),(c[(c[l+212>>2]|0)+12>>2]|0)==0):0){switch(a[l+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[l+4>>0]|0))uf(l,0,0)|0;break}default:tf(l)|0}vf(l)}e=c[d+12>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{o=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[d+16>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{o=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[m>>2]=0;return}function wg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=e+20|0;l=c[k>>2]|0;do if(l|0){if((c[l>>2]|0)>0){m=l+12|0;j=0;do{h=c[m>>2]|0;i=h+(j*56|0)|0;g=c[h+(j*56|0)+28>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=c[h+(j*56|0)+36>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=c[h+(j*56|0)+48>>2]|0;do if(g|0){xg(c[g+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(g|0));j=j+1|0}while((j|0)<(c[l>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{p=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[k>>2]=0;k=e+59|0;if(a[k>>0]|0){l=(b|0)==0;m=b+480|0;n=b+304|0;o=b+308|0;p=b+300|0;j=0;do{i=e+64+(j*72|0)|0;g=c[e+64+(j*72|0)+12>>2]|0;do if(g|0){if(!l){if(c[m>>2]|0){Xd(b,g);break}h=g;if((c[n>>2]|0)>>>0<=h>>>0?(c[o>>2]|0)>>>0>h>>>0:0){c[g>>2]=c[p>>2];c[p>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{h=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[e+64+(j*72|0)+16>>2]|0;if(g|0)do{h=g;g=c[g+4>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);g=c[e+64+(j*72|0)+40>>2]|0;do if(g|0){h=c[g>>2]|0;if(h|0){Wa[c[h+4>>2]&127](g)|0;c[g>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[e+64+(j*72|0)+56>>2]|0;do if(g|0){h=c[g>>2]|0;if(h|0){Wa[c[h+4>>2]&127](g)|0;c[g>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=i+72|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(g|0));c[e+64+(j*72|0)+8>>2]=e;j=j+1|0}while(j>>>0<(d[k>>0]|0)>>>0)}h=e+36|0;if((c[e+40>>2]|0)==0?(f=c[h>>2]|0,f|0):0)do{g=f;f=c[f+4>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[h>>2]=0;c[e+44>>2]=0;a[e+56>>0]=0;c[e+48>>2]=0;c[e+8>>2]=0;f=e+32|0;g=c[f>>2]|0;if(!g){c[f>>2]=0;return}if(b|0){if(c[b+480>>2]|0){Xd(b,g);c[f>>2]=0;return}q=g;if((c[b+304>>2]|0)>>>0<=q>>>0?(c[b+308>>2]|0)>>>0>q>>>0:0){q=b+300|0;c[g>>2]=c[q>>2];c[q>>2]=g;c[f>>2]=0;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[f>>2]=0;return}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[f>>2]=0;return}}function xg(a){a=a|0;var b=0,d=0;if(!a)return;if((c[a>>2]|0)>0){d=a+12|0;b=0;do{yg((c[d>>2]|0)+(b*56|0)|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function yg(a){a=a|0;var b=0,d=0;b=c[a+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+36>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);zg(c[a+48>>2]|0);b=a;a=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function zg(a){a=a|0;var b=0;if(!a)return;xg(c[a+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function Ag(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+112|0;h=n+16|0;l=n+88|0;k=n;f=c[b>>2]|0;m=b+124|0;g=c[m>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}j=g;if((c[f+304>>2]|0)>>>0<=j>>>0?(c[f+308>>2]|0)>>>0>j>>>0:0){j=f+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[k>>2]=e;j=c[b>>2]|0;g=c[j+108>>2]|0;i=l+4|0;c[i>>2]=h;c[l>>2]=j;c[l+8>>2]=70;f=l+12|0;c[f>>2]=g;g=l+16|0;c[g>>2]=0;h=l+20|0;a[h>>0]=0;e=l+21|0;a[e>>0]=1;tb(l,d,k);b=c[i>>2]|0;if(((b|0)!=0?(a[b+(c[g>>2]|0)>>0]=0,(c[f>>2]|0)!=0):0)?(a[e>>0]&4)==0:0)f=$d(l)|0;else f=c[i>>2]|0;if((a[h>>0]|0)!=7){c[m>>2]=f;Ra=n;return}b=j+81|0;if(a[b>>0]|0){c[m>>2]=f;Ra=n;return}if(a[j+82>>0]|0){c[m>>2]=f;Ra=n;return}a[b>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;b=j+272|0;c[b>>2]=(c[b>>2]|0)+1;b=c[j+236>>2]|0;if(!b){c[m>>2]=f;Ra=n;return}c[b+12>>2]=7;c[m>>2]=f;Ra=n;return}function Bg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=c[e>>2]|0;q=e+48|0;r=c[q>>2]|0;s=r+-1|0;p=t+20|0;h=c[p>>2]|0;if((h|0)>0){n=t+16|0;o=(r|0)<1;if((f|0)==2){l=0;g=0;do{k=c[(c[n>>2]|0)+(l<<4)+4>>2]|0;if(k){i=k+8|0;do if((a[i>>0]|0)==2){j=c[k+4>>2]|0;c[j+4>>2]=c[k>>2];h=c[j+8>>2]|0;if(h|0?(m=$f(h,0,0)|0,m|0):0){h=m;break}h=wf(c[j>>2]|0,2,s)|0;if(!h){if(o?b[j+22>>1]&16:0)c[j+44>>2]=0;h=Rf(j)|0;u=c[(c[j+12>>2]|0)+56>>2]|0;c[j+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0];if(!h)if((a[i>>0]|0)==2){i=c[k+4>>2]|0;c[i+4>>2]=c[k>>2];h=wf(c[i>>2]|0,1,s)|0;if(!h){if(o?b[i+22>>1]&16:0)c[i+44>>2]=0;h=Rf(i)|0;u=c[(c[i+12>>2]|0)+56>>2]|0;c[i+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0]}}else h=0}}else h=0;while(0);g=(g|0)==0?h:g;h=c[p>>2]|0}l=l+1|0}while((l|0)<(h|0))}else{k=0;g=0;do{i=c[(c[n>>2]|0)+(k<<4)+4>>2]|0;if(i){if((a[i+8>>0]|0)==2){j=c[i+4>>2]|0;c[j+4>>2]=c[i>>2];h=wf(c[j>>2]|0,1,s)|0;if(!h){if(o?b[j+22>>1]&16:0)c[j+44>>2]=0;h=Rf(j)|0;u=c[(c[j+12>>2]|0)+56>>2]|0;c[j+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0]}}else h=0;g=(g|0)==0?h:g;h=c[p>>2]|0}k=k+1|0}while((k|0)<(h|0))}u=t+456|0;c[u>>2]=(c[u>>2]|0)+-1;c[q>>2]=0;if(!g)h=33;else h=76}else{h=t+456|0;c[h>>2]=(c[h>>2]|0)+-1;c[q>>2]=0;h=33}a:do if((h|0)==33){o=t+356|0;b:do if((f|0)==2){if(!(c[o>>2]|0)){g=0;break a}n=t+332|0;m=0;while(1){if((m|0)>=(c[n>>2]|0))break b;l=c[(c[o>>2]|0)+(m<<2)>>2]|0;g=c[c[l+4>>2]>>2]|0;j=l+8|0;i=c[j>>2]|0;do if((i|0)!=0?(c[g>>2]|0)>1:0){k=l+12|0;h=(c[k>>2]|0)+1|0;c[k>>2]=h;g=c[g+88>>2]|0;if((g|0)!=0?(c[l+20>>2]|0)>=(r|0):0){g=Xa[g&255](i,s)|0;h=c[k>>2]|0}else g=0;i=c[l>>2]|0;u=h+-1|0;c[k>>2]=u;if(!u){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,l);break}u=l;if((c[i+304>>2]|0)>>>0<=u>>>0?(c[i+308>>2]|0)>>>0>u>>>0:0){u=i+300|0;c[l>>2]=c[u>>2];c[u>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else g=0;while(0);if(!g)m=m+1|0;else{h=76;break a}}}while(0);if(!(c[o>>2]|0)){g=0;h=76}else{n=t+332|0;m=0;while(1){if((m|0)>=(c[n>>2]|0)){g=0;h=76;break a}l=c[(c[o>>2]|0)+(m<<2)>>2]|0;g=c[c[l+4>>2]>>2]|0;j=l+8|0;i=c[j>>2]|0;do if((i|0)!=0?(c[g>>2]|0)>1:0){k=l+12|0;h=(c[k>>2]|0)+1|0;c[k>>2]=h;g=c[g+84>>2]|0;if((g|0)!=0?(c[l+20>>2]|0)>=(r|0):0){g=Xa[g&255](i,s)|0;h=c[k>>2]|0}else g=0;i=c[l>>2]|0;u=h+-1|0;c[k>>2]=u;if(!u){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,l);break}u=l;if((c[i+304>>2]|0)>>>0<=u>>>0?(c[i+308>>2]|0)>>>0>u>>>0:0){u=i+300|0;c[l>>2]=c[u>>2];c[u>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else g=0;while(0);if(!g)m=m+1|0;else{h=76;break}}}}while(0);if((h|0)==76)if((f|0)!=2){u=g;return u|0}s=e+72|0;u=c[s+4>>2]|0;f=t+464|0;c[f>>2]=c[s>>2];c[f+4>>2]=u;f=e+80|0;e=c[f+4>>2]|0;u=t+472|0;c[u>>2]=c[f>>2];c[u+4>>2]=e;u=g;return u|0}function Cg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0;if(b[a+8>>1]&9216)Dg(a);e=a+24|0;if(!(c[e>>2]|0)){g=a+16|0;c[g>>2]=0;return}f=c[a+32>>2]|0;d=c[a+20>>2]|0;do if(f){if(c[f+480>>2]|0){Xd(f,d);break}h=d;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[d>>2]=c[h>>2];c[h>>2]=d}else g=10}else g=10;while(0);do if((g|0)==10?d|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[e>>2]=0;h=a+16|0;c[h>>2]=0;return}function Dg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+80|0;h=k+40|0;i=k;j=a+8|0;d=b[j>>1]|0;if(d&8192){e=c[a>>2]|0;f=h+12|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;f=i;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));b[i+8>>1]=1;d=a+32|0;c[i+32>>2]=c[d>>2];c[h>>2]=i;c[h+8>>2]=a;c[h+4>>2]=e;ab[c[e+20>>2]&127](h);do if((c[a+24>>2]|0)>0){d=c[d>>2]|0;e=c[a+20>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);f=a;d=i;g=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(g|0));d=b[j>>1]|0}if(!(d&1024)){b[j>>1]=1;Ra=k;return}ab[c[a+36>>2]&127](c[a+16>>2]|0);b[j>>1]=1;Ra=k;return}function Eg(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=d+24|0;h=(c[p>>2]|0)>0;if((g|0)!=0&h?(m=d+16|0,j=c[m>>2]|0,k=d+20|0,(j|0)==(c[k>>2]|0)):0){l=c[d+32>>2]|0;g=((f|0)<0)<<31>>31;i=(j|0)==0;a:do if(!i){h=j;if(((c[l+304>>2]|0)>>>0<=h>>>0?(c[l+308>>2]|0)>>>0>h>>>0:0)?!(0<g>>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0<f>>>0:0)):0){h=j;break}h=Zd(l,j,f,g)|0;if(!(i|(h|0)!=0)){if(c[l+480>>2]|0){Xd(l,j);h=0;break}f=j;if((c[l+304>>2]|0)>>>0<=f>>>0?(c[l+308>>2]|0)>>>0>f>>>0:0){h=l+300|0;c[j>>2]=c[h>>2];c[h>>2]=j;h=0;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);h=0;break}else{h=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);h=0;break}}}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){h=0;break}}else{do if(!(0<g>>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0<f>>>0:0))){i=l+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=l+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}i=l+296|0;h=c[i>>2]|0;if(!h){h=l+292|0;break}else{c[i>>2]=c[h>>2];f=l+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,f,g)|0}while(0);c[k>>2]=h;c[m>>2]=h;j=0}else{j=d+32|0;do if(h){h=c[j>>2]|0;i=c[d+20>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,i);break}m=i;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);j=c[j>>2]|0;k=((f|0)<0)<<31>>31;b:do if(!j){m=Sv(f|0,k|0,-1,-1)|0;l=L()|0;if(!(l>>>0>0|(l|0)==0&m>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;break}j=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){f=c[14978]|0;m=Tv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=f>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(i){h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;h=i}else h=i}else h=0}else h=0}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){h=0;break}}else{do if(!(0<k>>>0|(0==(k|0)?(e[j+276>>1]|0)>>>0<f>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=j+284|0;c[f>>2]=(c[f>>2]|0)+1;break b}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];f=j+284|0;c[f>>2]=(c[f>>2]|0)+1;break b}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,f,k)|0}while(0);k=d+20|0;c[k>>2]=h;j=g}if(!h){h=d+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else Dg(d);c[d+16>>2]=0;c[p>>2]=0;d=7;return d|0}i=c[d+32>>2]|0;if(((i|0)!=0?(n=h,(c[i+304>>2]|0)>>>0<=n>>>0):0)?(c[i+308>>2]|0)>>>0>n>>>0:0)h=e[i+276>>1]|0;else h=Wa[c[29352>>2]&127](h)|0;c[p>>2]=h;if(j|0?(o=c[d+16>>2]|0,o|0):0)ew(c[k>>2]|0,o|0,c[d+12>>2]|0)|0;j=d+8|0;h=b[j>>1]|0;if(!(h&1024))i=d+16|0;else{i=d+16|0;ab[c[d+36>>2]&127](c[i>>2]|0);h=b[j>>1]|0}c[i>>2]=c[k>>2];b[j>>1]=h&-7169;d=0;return d|0}function Fg(a,b){a=a|0;b=b|0;if(!(Gg(a,b)|0)){b=0;return b|0}b=c[a+12>>2]|0;return b|0}function Gg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=e+8|0;g=b[l>>1]|0;h=g&65535;if(h&18){do if(h&16384){i=e+12|0;h=(c[e>>2]|0)+(c[i>>2]|0)|0;if((h|0)<1)if(!(g&16))break;else g=1;else g=h;if(!(Eg(e,g,1)|0)){gw((c[e+16>>2]|0)+(c[i>>2]|0)|0,0,c[e>>2]|0)|0;c[i>>2]=(c[i>>2]|0)+(c[e>>2]|0);g=b[l>>1]&-16897;b[l>>1]=g;break}else{f=0;return f|0}}while(0);b[l>>1]=g|2;g=e+10|0;h=f&255;i=h&247;if((i|0)!=(d[g>>0]|0))Ig(e,i&255)|0;if(h&8|0?(k=e+16|0,c[k>>2]&1|0):0){h=b[l>>1]|0;i=h&65535;do if(i&18){do if(i&16384){j=e+12|0;i=(c[e>>2]|0)+(c[j>>2]|0)|0;if((i|0)<1)if(!(h&16))break;else h=1;else h=i;if(!(Eg(e,h,1)|0)){gw((c[k>>2]|0)+(c[j>>2]|0)|0,0,c[e>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[e>>2]|0);h=b[l>>1]&-16897;b[l>>1]=h;break}else{f=0;return f|0}}while(0);if(c[e+24>>2]|0?(c[k>>2]|0)==(c[e+20>>2]|0):0)break;if(!(Jg(e)|0)){h=b[l>>1]|0;break}else{f=0;return f|0}}while(0);b[l>>1]=h&-4097}if((b[l>>1]&514)==2)Jg(e)|0}else{Hg(e,f,0)|0;g=e+10|0}if((a[g>>0]|0)!=(f&-9)<<24>>24){f=0;return f|0}f=c[e+16>>2]|0;return f|0}function Hg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+16|0;m=n+8|0;l=n;j=d+8|0;k=b[j>>1]|0;do if((c[d+24>>2]|0)<32){if(!(Eg(d,32,0)|0)){i=d+16|0;h=i;i=c[i>>2]|0;break}a[d+10>>0]=0;m=7;Ra=n;return m|0}else{i=c[d+20>>2]|0;h=d+16|0;c[h>>2]=i;b[j>>1]=k&13}while(0);if(!(k&4)){g[m>>3]=+g[d>>3];Cb(32,i,32529,m)|0}else{o=d;k=c[o+4>>2]|0;m=l;c[m>>2]=c[o>>2];c[m+4>>2]=k;Cb(32,i,32524,l)|0}o=(Eu(c[h>>2]|0)|0)&1073741823;c[d+12>>2]=o;a[d+10>>0]=1;o=b[j>>1]|514;b[j>>1]=f<<24>>24==0?o:o&-13;if(e<<24>>24==1){o=0;Ra=n;return o|0}Ig(d,e)|0;o=0;Ra=n;return o|0}function Ig(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=f+10|0;h=g<<24>>24==1;if(!(h|(a[w>>0]|0)==1)){k=f+8|0;h=b[k>>1]|0;i=h&65535;do if(i&18){do if(i&16384){j=f+12|0;i=(c[f>>2]|0)+(c[j>>2]|0)|0;if((i|0)<1)if(!(h&16))break;else h=1;else h=i;if(!(Eg(f,h,1)|0)){gw((c[f+16>>2]|0)+(c[j>>2]|0)|0,0,c[f>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[f>>2]|0);h=b[k>>1]&-16897;b[k>>1]=h;break}else{w=7;return w|0}}while(0);if(c[f+24>>2]|0?(c[f+16>>2]|0)==(c[f+20>>2]|0):0)break;if(!(Jg(f)|0)){h=b[k>>1]|0;break}else{w=7;return w|0}}while(0);b[k>>1]=h&-4097;h=c[f+16>>2]|0;f=c[f+12>>2]&-2;i=h+f|0;if((f|0)>0)do{v=a[h>>0]|0;f=h+1|0;a[h>>0]=a[f>>0]|0;h=h+2|0;a[f>>0]=v}while(h>>>0<i>>>0);a[w>>0]=g;w=0;return w|0}s=f+12|0;i=c[s>>2]|0;if(h){i=i&-2;c[s>>2]=i;n=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;m=L()|0;n=n|1}else{n=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;n=Sv(n|0,L()|0,2,0)|0;m=L()|0}t=f+16|0;k=c[t>>2]|0;r=k+i|0;u=f+32|0;l=c[u>>2]|0;a:do if(!l){q=Sv(n|0,m|0,-1,-1)|0;p=L()|0;if(p>>>0>0|(p|0)==0&q>>>0>2147483390){w=7;return w|0}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](n)|0;o=43;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){q=c[14978]|0;p=Tv(h|0,j|0,l|0,((l|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&p>>>0<=q>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){w=7;return w|0}h=Wa[c[29352>>2]&127](j)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;q=j}else q=j}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){w=7;return w|0}}else{do if(!(m>>>0>0|((m|0)==0?n>>>0>(e[l+276>>1]|0)>>>0:0))){j=l+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=43;break a}j=l+296|0;h=c[j>>2]|0;if(!h){h=l+292|0;break}else{c[j>>2]=c[h>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=43;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,n,m)|0;o=43}while(0);if((o|0)==43)if(!h){w=7;return w|0}else q=h;switch(a[w>>0]|0){case 1:{h=(i|0)>0;if(g<<24>>24==2)if(h){h=q;i=k;do{k=i+1|0;p=a[i>>0]|0;i=p&255;if((p&255)>191){i=d[2736+(i+-192)>>0]|0;b:do if((k|0)==(r|0)){j=i;i=r}else{j=i;i=k;while(1){k=a[i>>0]|0;if((k&-64)<<24>>24!=-128)break b;i=i+1|0;j=j<<6|k&63;if((i|0)==(r|0)){i=r;break}}}while(0);if(!((j&-2|0)==65534|(j>>>0<128|(j&-2048|0)==55296)))if(j>>>0<65536)o=55;else{l=j+-65536|0;a[h>>0]=l>>>10&192|j>>>10&63;a[h+1>>0]=l>>>18&3|216;a[h+2>>0]=j;l=h+3|0;k=4;j=j>>>8&3|220}else{j=65533;o=55}}else{j=i;i=k;o=55}if((o|0)==55){o=0;a[h>>0]=j;l=h+1|0;k=2;j=j>>>8}h=h+k|0;a[l>>0]=j}while(i>>>0<r>>>0)}else h=q;else if(h){n=q;h=k;while(1){i=h+1|0;p=a[h>>0]|0;h=p&255;if((p&255)>191){h=d[2736+(h+-192)>>0]|0;c:do if((i|0)==(r|0))i=r;else while(1){j=a[i>>0]|0;if((j&-64)<<24>>24!=-128)break c;i=i+1|0;h=h<<6|j&63;if((i|0)==(r|0)){i=r;break}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<65536)o=67;else{m=h+-65536|0;a[n>>0]=m>>>18&3|216;a[n+1>>0]=m>>>10&192|h>>>10&63;m=h;j=4;k=n+2|0;l=3;h=h>>>8&3|220}else{h=65533;o=67}}else o=67;if((o|0)==67){o=0;m=h;j=2;k=n;l=1;h=h>>>8}a[k>>0]=h;h=n+j|0;a[n+l>>0]=m;if(i>>>0<r>>>0){n=h;h=i}else break}}else h=q;c[s>>2]=h-q;a[h>>0]=0;h=h+1|0;break}case 2:{if((i|0)>0){h=q;do{i=d[k>>0]|0;l=k+2|0;p=d[k+1>>0]|0;j=p<<8|i;if(l>>>0<r>>>0&(p&248|0)==216){j=(j<<10&983040)+65536|i<<10&64512|d[l>>0]|d[k+3>>0]<<8&768;k=k+4|0}else k=l;if(j>>>0<128){l=h;i=1}else{if(j>>>0<2048){o=h;i=2;l=1;m=192;n=31}else{if(j>>>0<65536){m=h;i=3;l=2;n=1;o=224;p=15}else{a[h>>0]=j>>>18&7|240;m=h+1|0;i=4;l=3;n=2;o=128;p=63}a[m>>0]=j>>>12&p|o;o=h+n|0;m=128;n=63}a[o>>0]=j>>>6&n|m;l=h+l|0;j=j&63|128}h=h+i|0;a[l>>0]=j}while(k>>>0<r>>>0);o=93}else{h=q;o=93}break}default:if((i|0)>0){h=q;while(1){p=d[k>>0]|0;i=k+2|0;l=d[k+1>>0]|0;j=p<<8|l;if(i>>>0<r>>>0&(p&248|0)==216){p=k+4|0;j=(j<<10&983040)+65536|l<<10&64512|d[k+3>>0]|d[i>>0]<<8&768}else p=i;if(j>>>0<128){k=h;i=1}else{if(j>>>0<2048){n=h;i=2;k=1;l=192;m=31}else{if(j>>>0<65536){l=h;i=3;k=2;m=1;n=224;o=15}else{a[h>>0]=j>>>18&7|240;l=h+1|0;i=4;k=3;m=2;n=128;o=63}a[l>>0]=j>>>12&o|n;n=h+m|0;l=128;m=63}a[n>>0]=j>>>6&m|l;k=h+k|0;j=j&63|128}h=h+i|0;a[k>>0]=j;if(p>>>0<r>>>0)k=p;else{o=93;break}}}else{h=q;o=93}}if((o|0)==93)c[s>>2]=h-q;a[h>>0]=0;h=f+8|0;i=b[h>>1]|0;if(!((i&9216)==0?!(c[f+24>>2]|0):0))Cg(f);b[h>>1]=i&-32739|514;a[w>>0]=g;c[t>>2]=q;c[f+20>>2]=q;h=c[u>>2]|0;if(((h|0)!=0?(v=q,(c[h+304>>2]|0)>>>0<=v>>>0):0)?(c[h+308>>2]|0)>>>0>v>>>0:0)h=e[h+276>>1]|0;else h=Wa[c[29352>>2]&127](q)|0;c[f+24>>2]=h;w=0;return w|0}function Jg(d){d=d|0;var e=0,f=0;e=d+12|0;if(Eg(d,(c[e>>2]|0)+2|0,1)|0){e=7;return e|0}f=d+16|0;a[(c[f>>2]|0)+(c[e>>2]|0)>>0]=0;a[(c[f>>2]|0)+((c[e>>2]|0)+1)>>0]=0;e=d+8|0;b[e>>1]=b[e>>1]|512;e=0;return e|0}function Kg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=Ra;Ra=Ra+16|0;d=e;g[d>>3]=0.0;Lg(c,d,b,a)|0;Ra=e;return +(+g[d>>3])}function Lg(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;g[c>>3]=0.0;j=f&255;if(f<<24>>24==1){j=b;i=1;q=1;f=e}else{f=3-j|0;a:do if((f|0)<(e|0))while(1){if(a[b+f>>0]|0){i=0;break a}f=f+2|0;if((f|0)>=(e|0)){i=1;break}}else i=1;while(0);j=b+(j&1)|0;q=2;f=f^1}u=b+f|0;if(j>>>0>=u>>>0){c=0;return c|0}f=j;while(1){j=a[f>>0]|0;if(!(a[880+(j&255)>>0]&1))break;f=f+q|0;if(f>>>0>=u>>>0){f=0;t=69;break}}if((t|0)==69)return f|0;switch(j<<24>>24){case 45:{s=-1;f=f+q|0;break}case 43:{s=1;f=f+q|0;break}default:s=1}b:do if(f>>>0<u>>>0){j=0;m=0;b=0;do{e=a[f>>0]|0;if(!(((m|0)<214748364|(m|0)==214748364&b>>>0<3435973835)&((e&255)+-48|0)>>>0<10))break b;m=Yv(b|0,m|0,10,0)|0;b=(e<<24>>24)+-48|0;b=Sv(m|0,L()|0,b|0,((b|0)<0)<<31>>31|0)|0;m=L()|0;f=f+q|0;j=j+1|0}while(f>>>0<u>>>0)}else{j=0;b=0;m=0}while(0);c:do if(f>>>0<u>>>0){l=0;while(1){e=a[f>>0]|0;if(((e&255)+-48|0)>>>0>=10)break;f=f+q|0;j=j+1|0;e=l+1|0;if(f>>>0<u>>>0)l=e;else{q=1;l=0;p=1;break c}}d:do if(e<<24>>24==46){f=f+q|0;if(f>>>0<u>>>0)while(1){e=a[f>>0]|0;if(((e&255)+-48|0)>>>0>=10){e=l;break d}p=(m|0)<214748364|(m|0)==214748364&b>>>0<3435973835;n=Yv(b|0,m|0,10,0)|0;o=(e<<24>>24)+-48|0;o=Sv(n|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;e=L()|0;b=p?o:b;m=p?e:m;e=l+(p<<31>>31)|0;j=j+1|0;f=f+q|0;if(f>>>0<u>>>0)l=e;else break}else e=l}else e=l;while(0);if(f>>>0<u>>>0){e:do switch(a[f>>0]|0){case 69:case 101:{f=f+q|0;if(f>>>0>=u>>>0){q=0;l=0;p=1;break c}switch(a[f>>0]|0){case 45:{p=-1;f=f+q|0;break}case 43:{p=1;f=f+q|0;break}default:p=1}if(f>>>0<u>>>0){n=0;o=0;while(1){l=a[f>>0]|0;if(((l&255)+-48|0)>>>0>=10){l=o;break e}l=(o|0)<1e4?(o*10|0)+-48+(l<<24>>24)|0:1e4;f=f+q|0;if(f>>>0<u>>>0){n=1;o=l}else{n=1;break}}}else{n=0;l=0}break}default:{n=1;l=0;p=1}}while(0);if(f>>>0<u>>>0)while(1){if(!(a[880+(d[f>>0]|0)>>0]&1)){q=n;break c}f=f+q|0;if(f>>>0>=u>>>0){q=n;break}}else q=n}else{q=1;l=0;p=1}}else{q=1;l=0;p=1;e=0}while(0);e=(G(l,p)|0)+e|0;p=(e|0)<0;l=e>>31|1;f:do if((b|0)==0&(m|0)==0)h=(s|0)<0?-0.0:0.0;else{e=p?0-e|0:e;g:do if((e|0)>0){h:do if((l|0)>0)while(1){if((m|0)>214748364|(m|0)==214748364&b>>>0>3435973835){l=e;break h}b=Yv(b|0,m|0,10,0)|0;m=L()|0;l=e+-1|0;if((e|0)>1)e=l;else{t=51;break g}}else while(1){n=Wv(b|0,m|0,10,0)|0;o=L()|0;l=Yv(n|0,o|0,10,0)|0;l=Tv(b|0,m|0,l|0,L()|0)|0;if(!((l|0)==0&(L()|0)==0)){l=e;break h}l=e+-1|0;if((e|0)>1){e=l;b=n;m=o}else{b=n;m=o;t=51;break g}}while(0);o=(s|0)<0;e=Tv(0,0,b|0,m|0)|0;s=L()|0;e=o?e:b;b=o?s:m;if((l|0)>307){if((l|0)>=342){h=+(e>>>0)+4294967296.0*+(b|0);if(p){h=h*0.0;break f}else{h=h*r;break f}}l=l+-308|0;k=(l&1|0)==0?1.0:10.0;l=l>>1;if(l){h=10.0;do{h=h*h;k=(l&1|0)==0?k:k*h;l=l>>1}while((l|0)!=0)}h=+(e>>>0)+4294967296.0*+(b|0);if(p){h=h/k/1.e+308;break f}else{h=k*h*1.e+308;break f}}}else{l=e;t=51}while(0);if((t|0)==51){s=(s|0)<0;e=Tv(0,0,b|0,m|0)|0;t=L()|0;e=s?e:b;b=s?t:m;if(!l){h=+(e>>>0)+4294967296.0*+(b|0);break}}h=(l&1|0)==0?1.0:10.0;l=l>>1;if(l){k=10.0;do{k=k*k;h=(l&1|0)==0?h:h*k;l=l>>1}while((l|0)!=0)}k=+(e>>>0)+4294967296.0*+(b|0);h=p?k/h:h*k}while(0);g[c>>3]=h;c=(q|0)!=0&((j|0)>0&(f|0)==(u|0))?i:0;return c|0}function Mg(a){a=+a;var b=0,c=0;if(!(a<=-9223372036854775808.0))if(!(a>=9223372036854775808.0)){c=+t(a)>=1.0?(a>0.0?~~+H(+s(a/4294967296.0),4294967295.0)>>>0:~~+F((a-+(~~a>>>0))/4294967296.0)>>>0):0;b=~~a>>>0}else{c=2147483647;b=-1}else{c=-2147483648;b=0}K(c|0);return b|0}function Ng(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=Ra;Ra=Ra+16|0;f=e;g=f;c[g>>2]=0;c[g+4>>2]=0;Og(d,f,b,a)|0;b=f;d=c[b>>2]|0;K(c[b+4>>2]|0);Ra=e;return d|0}function Og(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;i=g&255;if(g<<24>>24==1){h=0;o=1;i=b;g=f}else{g=3-i|0;a:do if((g|0)<(f|0))while(1){if(a[b+g>>0]|0){h=1;break a}g=g+2|0;if((g|0)>=(f|0)){h=0;break}}else h=0;while(0);o=2;i=b+(i&1)|0;g=g^1}n=b+g|0;b:do if(i>>>0<n>>>0){while(1){g=a[i>>0]|0;if(!(a[880+(g&255)>>0]&1))break;g=i+o|0;if(g>>>0<n>>>0)i=g;else{m=0;break b}}switch(g<<24>>24){case 45:{m=1;g=i+o|0;break b}case 43:{m=0;g=i+o|0;break b}default:{m=0;g=i;break b}}}else{m=0;g=i}while(0);c:do if(g>>>0<n>>>0){i=g;do{if((a[i>>0]|0)!=48)break c;i=i+o|0}while(i>>>0<n>>>0)}else i=g;while(0);do if(i>>>0<n>>>0){k=0;l=i;j=0;f=0;while(1){b=a[l>>0]|0;if((b+-48&255)>=10){b=k;k=1;break}f=Yv(j|0,f|0,10,0)|0;j=b<<24>>24;f=Sv(f|0,L()|0,-48,-1)|0;j=Sv(f|0,L()|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;b=k+o|0;l=i+b|0;if(l>>>0>=n>>>0){k=0;break}else k=b}l=(m|0)!=0;if((f|0)>=0)if(l){p=26;break}else{l=0;break}else{j=l?0:-1;f=l?-2147483648:2147483647;break}}else if(!m){b=0;k=0;j=0;f=0;l=0}else{b=0;k=0;j=0;f=0;p=26}while(0);if((p|0)==26){j=Tv(0,0,j|0,f|0)|0;f=L()|0;l=1}m=e;c[m>>2]=j;c[m+4>>2]=f;if(!b){g=(g|0)==(i|0);if((h|0)!=0|g|k^1)h=h|g&1;else p=30}else if(!((h|0)!=0|k^1))p=30;d:do if((p|0)==30){g=b;while(1){if(!(a[880+(d[i+g>>0]|0)>>0]&1)){h=1;break d}g=g+o|0;if((i+g|0)>>>0>=n>>>0){h=0;break}}}while(0);g=o*19|0;if(b>>>0<g>>>0){e=h;return e|0}if(b>>>0>g>>>0){c[e>>2]=l?0:-1;c[e+4>>2]=l?-2147483648:2147483647;e=2;return e|0}g=0;do{f=i+(G(g,o)|0)|0;f=(a[f>>0]|0)-(a[32536+g>>0]|0)|0;g=g+1|0;b=(f|0)==0}while(g>>>0<18&b);if(b)g=(a[i+(o*18|0)>>0]|0)+-56|0;else g=f*10|0;if((g|0)<0){e=h;return e|0}else{c[e>>2]=l?0:-1;c[e+4>>2]=l?-2147483648:2147483647;return ((g|0)==0?(l?h:3):2)|0}return 0}function Pg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=a+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(a);c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}function Qg(a){a=a|0;return}
- function Sg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0;k=d+8|0;h=b[k>>1]|0;j=h&65535;if(j&1|0)return;switch(e<<24>>24){case 65:{if(j&16|0){b[k>>1]=j&15920;return}if(!((j&2|0)!=0|(j&12|0)==0)){Hg(d,f,1)|0;h=b[k>>1]|0}h=h&-13;b[k>>1]=h;h=h&65535;if(!(h&2))return;b[k>>1]=h&15904|16;return}case 67:{oh(d);return}case 68:{do if(!(j&4)){if(j&8|0){e=Mg(+g[d>>3])|0;f=L()|0;break}if(!(j&18)){e=0;f=0}else{e=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;f=L()|0;h=b[k>>1]|0}}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}while(0);c[d>>2]=e;c[d+4>>2]=f;b[k>>1]=h&15904|4;return}case 69:{do if(!(j&8)){if(j&4|0){j=d;i=+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0);break}if(!(j&18))i=0.0;else{i=+Kg(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0);h=b[k>>1]|0}}else i=+g[d>>3];while(0);g[d>>3]=i;b[k>>1]=h&15904|8;return}default:{e=j>>>3&2|j;h=e&65535;b[k>>1]=h;if(!((j&12|0)==0|(e&2|0)!=0)){Hg(d,f,1)|0;h=b[k>>1]|0}b[k>>1]=h&-16413;return}}}function Tg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,l=0,m=0;j=b[a+8>>1]|0;l=j&65535;k=b[d+8>>1]|0;m=k&65535;i=(k|j)&65535;if(i&1|0){d=(m&1)-(l&1)|0;return d|0}if(!(i&12)){if(i&2|0){if(!(l&2)){d=1;return d|0}if(!(m&2)){d=-1;return d|0}if(e|0){d=ph(a,d,e,0)|0;return d|0}}d=qh(a,d)|0;return d|0}i=k&j&65535;if(i&4|0){l=a;a=c[l>>2]|0;l=c[l+4>>2]|0;m=d;d=c[m>>2]|0;m=c[m+4>>2]|0;return ((l|0)<(m|0)|(l|0)==(m|0)&a>>>0<d>>>0?-1:((l|0)>(m|0)|(l|0)==(m|0)&a>>>0>d>>>0)&1)|0}if(i&8|0){h=+g[a>>3];f=+g[d>>3];if(h<f){d=-1;return d|0}d=h>f&1;return d|0}if(l&4|0){if(!(m&8)){d=-1;return d|0}k=a;j=c[k>>2]|0;k=c[k+4>>2]|0;h=+g[d>>3];if(h<-9223372036854775808.0){d=1;return d|0}if(h>=9223372036854775808.0){d=-1;return d|0}i=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;if((k|0)<(e|0)|(k|0)==(e|0)&j>>>0<i>>>0){d=-1;return d|0}if((k|0)>(e|0)|(k|0)==(e|0)&j>>>0>i>>>0){d=1;return d|0}f=+(j>>>0)+4294967296.0*+(k|0);if(h>f){d=-1;return d|0}d=h<f&1;return d|0}if(!(l&8)){d=1;return d|0}if(!(m&4)){d=-1;return d|0}k=d;j=c[k>>2]|0;k=c[k+4>>2]|0;h=+g[a>>3];if(h<-9223372036854775808.0){d=-1;return d|0}if(h>=9223372036854775808.0){d=1;return d|0}i=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;if((k|0)<(e|0)|(k|0)==(e|0)&j>>>0<i>>>0){d=1;return d|0}if((k|0)>(e|0)|(k|0)==(e|0)&j>>>0>i>>>0){d=-1;return d|0}f=+(j>>>0)+4294967296.0*+(k|0);if(h>f){d=1;return d|0}d=(h<f)<<31>>31;return d|0}function Ug(e,f,g){e=e|0;f=f|0;g=g|0;var h=0;do switch(f|0){case 10:{b[g+8>>1]=16385;c[g+12>>2]=0;c[g>>2]=0;g=0;return g|0}case 0:case 11:{b[g+8>>1]=1;g=0;return g|0}case 1:{e=a[e>>0]|0;f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=1;return g|0}case 2:{e=a[e>>0]<<8|d[e+1>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=2;return g|0}case 3:{e=d[e+1>>0]<<8|a[e>>0]<<16|d[e+2>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=3;return g|0}case 4:{e=d[e+1>>0]<<16|a[e>>0]<<24|d[e+2>>0]<<8|d[e+3>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=4;return g|0}case 5:{h=a[e>>0]<<8|d[e+1>>0];f=g;c[f>>2]=d[e+3>>0]<<16|d[e+2>>0]<<24|d[e+4>>0]<<8|d[e+5>>0];c[f+4>>2]=h;b[g+8>>1]=4;g=6;return g|0}case 7:case 6:{vh(e,f,g);h=8;return h|0}case 9:case 8:{h=g;c[h>>2]=f+-8;c[h+4>>2]=0;b[g+8>>1]=4;h=0;return h|0}default:{c[g+16>>2]=e;h=(f+-12|0)>>>1;c[g+12>>2]=h;b[g+8>>1]=b[31116+((f&1)<<1)>>1]|0;return h|0}}while(0);return 0}function Vg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;i=o;if((d|0)<1){c[i>>2]=32306;c[i+4>>2]=67596;c[i+8>>2]=31517;Db(11,32001,i);g=11;Ra=o;return g|0}n=c[b+4>>2]|0;c[n+4>>2]=c[b>>2];l=(e|0)!=0;if(l?(m=n+80|0,(c[m>>2]|0)==0):0){k=c[n+32>>2]|0;if((c[14813]|0)>=(k|0)?(h=c[14819]|0,(h|0)!=0):0){c[14819]=c[h>>2];e=c[14820]|0;c[14820]=e+-1;c[14821]=(e|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0)c[14983]=i}else j=11;a:do if((j|0)==11){j=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;e=L()|0;do if(!(e>>>0>0|(e|0)==0&j>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;e=59064;i=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&i>>>0>0){j=c[14978]|0;e=Tv(i|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&e>>>0<=j>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h)break;i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}i=Wa[c[29352>>2]&127](h)|0;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14980]|0)+i|0;c[14980]=i;if(i>>>0<=(c[14984]|0)>>>0)break a;c[14984]=i;break a}while(0);c[m>>2]=0;g=7;Ra=o;return g|0}while(0);c[m>>2]=h;k=h;j=k;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;c[m>>2]=(c[m>>2]|0)+4}if((d|0)==1)d=(c[n+44>>2]|0)!=0&1;c[g+64>>2]=d;a[g+68>>0]=-1;c[g+112>>2]=f;c[g+8>>2]=b;c[g+20>>2]=n;j=g+1|0;a[j>>0]=l&1;a[g+2>>0]=l?0:2;i=n+8|0;h=c[i>>2]|0;e=h;if(h|0)do{if((c[h+64>>2]|0)==(d|0)){n=h+1|0;a[n>>0]=a[n>>0]|32;a[j>>0]=a[j>>0]|32}h=c[h+24>>2]|0}while((h|0)!=0);c[g+24>>2]=e;c[i>>2]=g;a[g>>0]=1;g=0;Ra=o;return g|0}function Wg(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+64|0;y=A+16|0;p=A;r=A+52|0;s=A+48|0;z=A+44|0;x=A+40|0;l=A+36|0;m=A+32|0;n=A+56|0;o=A+28|0;i=c[e>>2]|0;v=e+4|0;u=c[v>>2]|0;j=u+4|0;c[j>>2]=i;a:do if(!(a[u+17>>0]|0)){h=fg(u,s,z,1,0)|0;c[x>>2]=h;if(!h){q=c[s>>2]|0;break}else{z=h;Ra=A;return z|0}}else{k=u+8|0;h=c[k>>2]|0;if(h|0)do{w=h+1|0;a[w>>0]=a[w>>0]&-5;h=c[h+24>>2]|0}while((h|0)!=0);c[j>>2]=i;q=c[(c[u+12>>2]|0)+56>>2]|0;q=d[q+53>>0]<<16|d[q+52>>0]<<24|d[q+54>>0]<<8|d[q+55>>0];c[z>>2]=q;i=u+36|0;j=1073741824/((c[u+32>>2]|0)>>>0)|0;while(1){w=q+1|0;if(w>>>0<2)h=0;else{h=q+-1|0;h=h-((h>>>0)%(((((c[i>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;h=((h+1|0)==(j|0)?3:2)+h|0}if((q|0)==(j|0)|(w|0)==(h|0))q=w;else break}c[z>>2]=w;h=fg(u,m,l,w,1)|0;c[x>>2]=h;b:do if(!h){l=c[l>>2]|0;c:do if((l|0)==(w|0)){l=c[m>>2]|0;c[s>>2]=l}else{a[n>>0]=0;c[o>>2]=0;h=c[k>>2]|0;if(!h)h=0;else h=$f(h,0,0)|0;c[x>>2]=h;i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{t=c[i+20>>2]|0;m=t+120|0;c[m>>2]=(c[m>>2]|0)+-1;t=t+136|0;c[i+16>>2]=c[t>>2];c[t>>2]=i;break}}while(0);do if(!h){h=c[u>>2]|0;h=Za[c[h+204>>2]&127](h,w,r,0)|0;if(h|0){c[x>>2]=h;break}h=c[r>>2]|0;j=c[h+8>>2]|0;i=j+4|0;if((c[i>>2]|0)!=(w|0)){c[j+56>>2]=c[h+4>>2];c[j+72>>2]=h;c[j+52>>2]=u;c[i>>2]=w;a[j+9>>0]=(q|0)==0?100:0}c[s>>2]=j;h=eg(u,w,n,o)|0;c[x>>2]=h;i=a[n>>0]|0;if((i+-1&255)>=2){if(!h){h=gg(u,j,i,c[o>>2]|0,l,0)|0;c[x>>2]=h;do if(j|0){i=c[j+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{t=c[i+20>>2]|0;p=t+120|0;c[p>>2]=(c[p>>2]|0)+-1;t=t+136|0;c[i+16>>2]=c[t>>2];c[t>>2]=i;break}}while(0);if(h|0)break;h=c[u>>2]|0;h=Za[c[h+204>>2]&127](h,w,r,0)|0;if(h|0){c[x>>2]=h;break}h=c[r>>2]|0;l=c[h+8>>2]|0;i=l+4|0;if((c[i>>2]|0)==(w|0))k=l+72|0;else{c[l+56>>2]=c[h+4>>2];k=l+72|0;c[k>>2]=h;c[l+52>>2]=u;c[i>>2]=w;a[l+9>>0]=(q|0)==0?100:0}c[s>>2]=l;c[x>>2]=0;i=c[k>>2]|0;j=c[i+20>>2]|0;do if(b[i+28>>1]&4){if((c[j+24>>2]|0)>>>0<(c[i+24>>2]|0)>>>0){t=44;break}if(!(c[j+96>>2]|0)){c[x>>2]=0;t=55;break}else{h=Ve(i)|0;t=49;break}}else t=44;while(0);do if((t|0)==44){h=c[j+40>>2]|0;if(h|0){c[x>>2]=h;break}if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(i)|0;t=49;break}else{h=Xf(i)|0;t=49;break}}while(0);if((t|0)==49){c[x>>2]=h;if(!h)t=55}if((t|0)==55)break c;if(!l)break;i=c[k>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}else{c[p>>2]=32306;c[p+4>>2]=72254;c[p+8>>2]=31517;Db(11,32001,p);c[x>>2]=11;h=11}if(j){i=c[j+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}while(0);break b}while(0);ig(u,w,1,0,x);h=c[x>>2]|0;if(h|0){if(!l)break;i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}i=c[v>>2]|0;c[i+4>>2]=c[e>>2];i=c[i+12>>2]|0;k=c[i+56>>2]|0;i=c[i+72>>2]|0;j=c[i+20>>2]|0;if((b[i+28>>1]&4)!=0?(c[j+24>>2]|0)>>>0>=(c[i+24>>2]|0)>>>0:0)if(!(c[j+96>>2]|0))t=76;else{h=Ve(i)|0;t=70}else t=66;do if((t|0)==66){h=c[j+40>>2]|0;if(!h)if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(i)|0;t=70;break}else{h=Xf(i)|0;t=70;break}}while(0);if((t|0)==70)if(!h)t=76;if((t|0)==76){a[k+52>>0]=w>>>24;a[k+53>>0]=w>>>16;a[k+54>>0]=w>>>8;a[k+55>>0]=w;c[x>>2]=0;q=l;break a}c[x>>2]=h;if(l){i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}while(0);z=h;Ra=A;return z|0}while(0);k=(g&1|0)==0?10:13;o=c[q+56>>2]|0;j=q+52|0;p=c[j>>2]|0;i=d[q+9>>0]|0;if(!(b[p+22>>1]&12)){h=o+i|0;n=p+36|0}else{n=p+36|0;h=o+i|0;gw(h|0,0,(c[n>>2]|0)-i|0)|0}a[h>>0]=k;l=i+8|0;m=l&65535;h=o+(i+1)|0;a[h>>0]=0;a[h+1>>0]=0;a[h+2>>0]=0;a[h+3>>0]=0;a[o+(i+7)>>0]=0;h=o+(i+5)|0;a[h>>0]=(c[n>>2]|0)>>>8;a[h+1>>0]=c[n>>2];c[q+20>>2]=(c[n>>2]|0)-l&65535;a[q+8>>0]=1;h=q+10|0;a[h>>0]=0;c[q+76>>2]=120;i=c[j>>2]|0;switch(k&7){case 5:{a[q+2>>0]=1;a[q+3>>0]=1;c[q+80>>2]=180;b[q+14>>1]=b[i+28>>1]|0;h=i+30|0;t=86;break}case 2:{a[q+2>>0]=0;a[q+3>>0]=0;c[q+80>>2]=179;b[q+14>>1]=b[i+24>>1]|0;h=i+26|0;t=86;break}default:{c[y>>2]=32306;c[y+4>>2]=65035;c[y+8>>2]=31517;Db(11,32001,y);h=a[h>>0]|0}}if((t|0)==86){b[q+16>>1]=b[h>>1]|0;a[q+11>>0]=a[i+21>>0]|0;h=0}b[q+18>>1]=m;c[q+60>>2]=o+(c[n>>2]|0);c[q+64>>2]=o+l;c[q+68>>2]=o+(h&255);a[q+12>>0]=0;b[q+26>>1]=(c[p+32>>2]|0)+65535;b[q+24>>1]=0;a[q>>0]=1;h=c[q+72>>2]|0;do if(h|0)if(!(b[h+28>>1]&32)){Df(h);break}else{y=c[h+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[h+16>>2]=c[y>>2];c[y>>2]=h;break}while(0);c[f>>2]=c[z>>2];z=0;Ra=A;return z|0}function Xg(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;V=Ra;Ra=Ra+80|0;R=V+56|0;T=V+40|0;S=V+24|0;Q=V+8|0;P=V;a:do if(!g)if((a[f>>0]|0)==0?(l=d[f+1>>0]|0,(l&2|0)!=0):0){o=f+32|0;n=o;m=c[n>>2]|0;n=c[n+4>>2]|0;if((m|0)==(h|0)&(n|0)==(i|0)){c[k>>2]=0;U=0;Ra=V;return U|0}if((n|0)<(i|0)|(n|0)==(i|0)&m>>>0<h>>>0){if(l&8|0){c[k>>2]=-1;U=0;Ra=V;return U|0}N=Sv(m|0,n|0,1,0)|0;if((N|0)==(h|0)&(L()|0)==(i|0)){c[k>>2]=0;l=Yg(f,0)|0;switch(l|0){case 101:{N=0;break a}case 0:break;default:{U=l;Ra=V;return U|0}}bg(f);N=o;if((c[N>>2]|0)==(h|0)?(c[N+4>>2]|0)==(i|0):0){U=0;Ra=V;return U|0}else N=0}else N=0}else N=0}else N=0;else{l=c[g>>2]|0;do if((e[l+8>>1]|0)<14){m=e[(c[g+4>>2]|0)+8>>1]|0;N=(a[c[l+16>>2]>>0]|0)==0;a[g+12>>0]=N?-1:1;a[g+13>>0]=N?1:-1;if(!(m&4)){if(m&25|0){l=88;break}if(!(c[l+20>>2]|0))l=90;else{l=88;break}}else l=89}else l=88;while(0);a[g+11>>0]=0;N=l}while(0);l=xh(f)|0;switch(l|0){case 0:{K=f+116|0;B=1-j|0;C=f+70|0;D=(N|0)==0;E=f+1|0;F=f+32|0;M=f+50|0;G=f+32|0;H=f+20|0;I=f+68|0;J=f+2|0;l=0;m=0;b:while(1){A=c[K>>2]|0;x=A+24|0;o=(e[x>>1]|0)+-1|0;j=o>>B;b[C>>1]=j;w=A+68|0;y=A+26|0;z=A+64|0;c:do if(D){t=A+3|0;u=A+60|0;n=A+8|0;s=j;r=o;o=0;d:while(1){j=(c[z>>2]|0)+(s<<1)|0;j=(c[w>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[y>>1])|0;e:do if(a[t>>0]|0){p=j+1|0;if((a[j>>0]|0)<0){q=c[u>>2]|0;while(1){if(p>>>0>=q>>>0)break;j=p+1|0;if((a[p>>0]|0)<0)p=j;else{U=29;break e}}c[Q>>2]=32306;c[Q+4>>2]=68640;c[Q+8>>2]=31517;Db(11,32001,Q);q=1;j=s;l=11;p=r}else{j=p;U=29}}else U=29;while(0);f:do if((U|0)==29){U=0;Of(j,P)|0;p=P;j=c[p>>2]|0;p=c[p+4>>2]|0;do if((p|0)<(i|0)|(p|0)==(i|0)&j>>>0<h>>>0){o=s+1|0;if((s|0)<(r|0))p=r;else{q=4;j=s;m=-1;p=r;break f}}else{if((p|0)>(i|0)|(p|0)==(i|0)&j>>>0>h>>>0){p=s+-1|0;if((o|0)<(s|0))break;else{q=4;j=s;m=1;break f}}b[C>>1]=s;if(!(a[n>>0]|0)){q=8;j=s;p=r;o=s;break f}a[E>>0]=a[E>>0]|2;q=F;c[q>>2]=j;c[q+4>>2]=p;b[M>>1]=0;c[k>>2]=0;q=1;j=s;l=0;p=r;break f}while(0);q=0;j=p+o>>1}while(0);switch(q&15){case 4:{U=74;break c}case 8:{U=76;break c}case 0:{s=j;r=p;break}default:break d}}if(q){U=85;break b}}else{s=A+11|0;t=A+14|0;u=A+10|0;v=A+80|0;n=o;o=0;while(1){p=(c[z>>2]|0)+(j<<1)|0;p=(c[w>>2]|0)+((d[p>>0]<<8|d[p+1>>0])&e[y>>1])|0;r=a[p>>0]|0;q=r&255;m=p+1|0;do if((r&255)>(d[s>>0]|0)){m=d[m>>0]|0;if((m&128|0)==0?(O=(q<<7&16256)+m|0,O>>>0<=(e[t>>1]|0)>>>0):0){m=Ya[N&127](O,p+2|0,g)|0;break}cb[c[v>>2]&255](A,p+(0-(d[u>>0]|0))|0,G);r=c[G>>2]|0;if((r|0)<2){U=45;break b}q=c[H>>2]|0;if(((r>>>0)/((c[q+36>>2]|0)>>>0)|0)>>>0>(c[q+44>>2]|0)>>>0){U=45;break b}m=r+18|0;q=Sv(m|0,((m|0)<0)<<31>>31|0,-1,-1)|0;p=L()|0;if(p>>>0>0|(p|0)==0&q>>>0>2147483390){l=7;break b}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](m)|0;if(!m){l=7;break b}else p=m}else{q=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;p=59064;m=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&m>>>0>0){W=c[14978]|0;p=Tv(m|0,p|0,q|0,((q|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&p>>>0<=W>>>0)&1}p=Wa[c[29340>>2]&127](q)|0;if(!p){l=7;break b}m=Wa[c[29352>>2]&127](p)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}b[C>>1]=j;m=cg(f,0,r,p,0)|0;a[E>>0]=a[E>>0]&-5;if(m|0){U=59;break b}m=Fh(r,p,g,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{W=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-W;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else m=Ya[N&127](q,m,g)|0;while(0);if((m|0)<0)o=j+1|0;else{if(!m){U=69;break b}n=j+-1|0}if((o|0)>(n|0))break;j=n+o>>1}n=A+8|0;U=74}while(0);if((U|0)==74)if(!(a[n>>0]|0))U=76;else{U=75;break}if((U|0)==76){U=0;if((o|0)<(e[x>>1]|0)){n=(c[z>>2]|0)+(o<<1)|0;n=(d[n>>0]<<8|d[n+1>>0])&e[y>>1]}else n=(d[A+9>>0]|0)+8|0;r=(c[A+56>>2]|0)+n|0;j=a[r>>0]|0;p=a[r+1>>0]|0;q=a[r+2>>0]|0;r=a[r+3>>0]|0;n=o&65535;b[C>>1]=n;o=a[I>>0]|0;if(o<<24>>24>18){U=80;break}W=c[H>>2]|0;b[M>>1]=0;a[E>>0]=a[E>>0]&-7;A=o<<24>>24;b[f+72+(A<<1)>>1]=n;c[f+120+(A<<2)>>2]=c[K>>2];b[C>>1]=0;a[I>>0]=o+1<<24>>24;n=yh(W,(p&255)<<16|(j&255)<<24|(q&255)<<8|r&255,K,f,d[J>>0]|0)|0;if(n){l=n;break}}}do if((U|0)==45){c[S>>2]=32306;c[S+4>>2]=68714;c[S+8>>2]=31517;Db(11,32001,S);l=11}else if((U|0)==59)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);l=m;break}else{l=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);l=m;break}else if((U|0)==69){c[k>>2]=0;b[C>>1]=j;if(!(a[g+11>>0]|0))l=0;else{c[T>>2]=32306;c[T+4>>2]=68745;c[T+8>>2]=31517;Db(11,32001,T);l=11}}else if((U|0)==75){b[C>>1]=j;c[k>>2]=m;l=0}else if((U|0)==80){c[R>>2]=32306;c[R+4>>2]=68229;c[R+8>>2]=31517;Db(11,32001,R);l=11}else if((U|0)==85){Ra=V;return l|0}while(0);b[M>>1]=0;W=l;Ra=V;return W|0}case 16:{c[k>>2]=-1;W=0;Ra=V;return W|0}default:{W=l;Ra=V;return W|0}}return 0}function Yg(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=Ra;Ra=Ra+16|0;r=s;o=f+50|0;b[o>>1]=0;p=f+1|0;a[p>>0]=a[p>>0]&-7;if(a[f>>0]|0){r=Gh(f)|0;Ra=s;return r|0}q=f+116|0;h=c[q>>2]|0;n=f+70|0;g=b[n>>1]|0;m=g+1<<16>>16;b[n>>1]=m;if((m&65535)>=(e[h+24>>1]|0)){b[n>>1]=g;r=Gh(f)|0;Ra=s;return r|0}if(a[h+8>>0]|0){r=0;Ra=s;return r|0}k=f+68|0;l=f+20|0;m=f+2|0;while(1){g=b[n>>1]|0;i=(c[h+64>>2]|0)+((g&65535)<<1)|0;i=(c[h+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[h+26>>1])|0;j=a[k>>0]|0;if(j<<24>>24>18){h=8;break}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];t=c[l>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;u=j<<24>>24;b[f+72+(u<<1)>>1]=g;c[f+120+(u<<2)>>2]=h;b[n>>1]=0;a[k>>0]=j+1<<24>>24;g=yh(t,i,q,f,d[m>>0]|0)|0;if(g|0){h=11;break}h=c[q>>2]|0;if(a[h+8>>0]|0){g=0;h=11;break}}if((h|0)==8){c[r>>2]=32306;c[r+4>>2]=68229;c[r+8>>2]=31517;Db(11,32001,r);u=11;Ra=s;return u|0}else if((h|0)==11){Ra=s;return g|0}return 0}function Zg(d,e){d=d|0;e=e|0;var f=0,g=0;e=d+1|0;a[e>>0]=a[e>>0]&-15;b[d+50>>1]=0;if(((a[d>>0]|0)==0?(f=d+70|0,g=b[f>>1]|0,g<<16>>16):0)?a[(c[d+116>>2]|0)+8>>0]|0:0){b[f>>1]=g+-1<<16>>16;g=0;return g|0}g=Hh(d)|0;return g|0}function _g(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+16|0;u=v;m=c[i+4>>2]|0;a[i+10>>0]=0;t=a[h>>0]|0;j=t&255;do if(t<<24>>24<=-1){k=d[h+1>>0]|0;if(!(k&128)){t=j<<7&16256|k;j=2;break}l=d[h+2>>0]|0;if(!(l&128)){t=(j<<14|l)&2080895|k<<7&16256;j=3;break}else{j=Of(h,u)|0;s=u;t=c[s>>2]|0;t=((t|0)==(t|0)?0==(c[s+4>>2]|0):0)?t:-1;break}}else{t=j;j=1}while(0);j=j&255;if(t>>>0>g>>>0|t>>>0<=j>>>0){u=0;i=i+8|0;b[i>>1]=u;Ra=v;return}s=f+4|0;q=f+12|0;r=i+8|0;p=0;o=t;while(1){l=h+j|0;n=a[l>>0]|0;k=n&255;if(n<<24>>24>-1)l=1;else{f=d[l+1>>0]|0;do if(f&128){n=d[l+2>>0]|0;if(!(n&128)){k=(k<<14|n)&2080895|f<<7&16256;l=3;break}else{l=Of(l,u)|0;n=u;k=c[n>>2]|0;k=((k|0)==(k|0)?0==(c[n+4>>2]|0):0)?k:-1;break}}else{k=k<<7&16256|f;l=2}while(0);l=l&255}a[m+10>>0]=a[s>>0]|0;c[m+32>>2]=c[q>>2];c[m+24>>2]=0;c[m+16>>2]=0;o=(Ug(h+o|0,k,m)|0)+o|0;p=p+1<<16>>16;j=l+j|0;if((p&65535)>=(e[r>>1]|0))break;if(o>>>0>g>>>0|j>>>0>=t>>>0)break;else m=m+40|0}if(o>>>0<=g>>>0|p<<16>>16==0){u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}j=m+8|0;if(!(b[j>>1]&9216)){b[j>>1]=1;u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}else{Dg(m);u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}}function $g(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=Ra;Ra=Ra+16|0;u=w;if((a[f>>0]|0)==0?a[f+1>>0]&8:0){v=0;Ra=w;return v|0}h=xh(f)|0;switch(h|0){case 0:{c[g>>2]=0;r=f+116|0;h=c[r>>2]|0;s=f+70|0;a:do if(!(a[h+8>>0]|0)){n=f+68|0;o=f+20|0;p=f+50|0;t=f+1|0;q=f+2|0;while(1){k=(c[h+56>>2]|0)+((d[h+9>>0]|0)+8)|0;g=a[k>>0]|0;i=a[k+1>>0]|0;j=a[k+2>>0]|0;k=a[k+3>>0]|0;l=b[h+24>>1]|0;b[s>>1]=l;m=a[n>>0]|0;if(m<<24>>24>18){v=9;break}x=c[o>>2]|0;b[p>>1]=0;a[t>>0]=a[t>>0]&-7;y=m<<24>>24;b[f+72+(y<<1)>>1]=l;c[f+120+(y<<2)>>2]=h;b[s>>1]=0;a[n>>0]=m+1<<24>>24;g=yh(x,(i&255)<<16|(g&255)<<24|(j&255)<<8|k&255,r,f,d[q>>0]|0)|0;if(g|0)break;h=c[r>>2]|0;if(a[h+8>>0]|0){g=t;break a}}if((v|0)==9){c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);g=11}a[t>>0]=a[t>>0]&-9;y=g;Ra=w;return y|0}else g=f+1|0;while(0);b[s>>1]=(e[h+24>>1]|0)+65535;a[g>>0]=a[g>>0]|8;y=0;Ra=w;return y|0}case 16:{c[g>>2]=1;y=0;Ra=w;return y|0}default:{y=h;Ra=w;return y|0}}return 0}function ah(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;N=Ra;Ra=Ra+80|0;H=N+40|0;G=N;A=N+64|0;B=N+60|0;M=N+56|0;C=N+52|0;c[C>>2]=i;o=c[f+8>>2]|0;q=o+4|0;F=c[q>>2]|0;if((a[f>>0]|0)==4){M=c[f+4>>2]|0;Ra=N;return M|0}I=f+1|0;l=a[I>>0]|0;a:do if(l&32){m=c[f+64>>2]|0;j=c[F+8>>2]|0;b:do if(!j)K=14;else{c:do if(m){do{if((j|0)!=(f|0)?(c[j+64>>2]|0)==(m|0):0)break c;j=c[j+24>>2]|0}while((j|0)!=0);if(!f)break b;else{K=14;break b}}else{k=f+24|0;while(1){if((j|0)!=(f|0))break c;j=c[k>>2]|0;if(!j){K=14;break b}}}while(0);j=$f(j,m,f)|0;c[M>>2]=j;if(!j)break a;Ra=N;return j|0}while(0);if((K|0)==14)a[I>>0]=l&-33;c[M>>2]=0}while(0);J=f+112|0;z=c[J>>2]|0;k=z;do if(!z){l=c[f+64>>2]|0;n=g+8|0;m=c[n>>2]|0;n=c[n+4>>2]|0;k=o+11|0;if(a[k>>0]|0?(a[k>>0]=0,p=c[(c[q>>2]|0)+8>>2]|0,p|0):0){j=p;do{if((a[j+1>>0]&16?(a[k>>0]=1,(c[j+64>>2]|0)==(l|0)):0)?(z=j+32|0,(c[z>>2]|0)==(m|0)?(c[z+4>>2]|0)==(n|0):0):0)a[j>>0]=1;j=c[j+24>>2]|0}while((j|0)!=0)}if(a[I>>0]&2?(z=f+32|0,(m|0)==(c[z>>2]|0)?(n|0)==(c[z+4>>2]|0):0):0){if(!(b[f+50>>1]|0))break;if((c[f+44>>2]|0)!=((c[g+32>>2]|0)+(c[g+28>>2]|0)|0))break;M=Ih(f,g)|0;Ra=N;return M|0}if((i|0)==0?(r=Xg(f,0,m,n,(h|0)!=0&1,C)|0,c[M>>2]=r,r|0):0){M=r;Ra=N;return M|0}}else{do if(!(h&2|i)){j=b[g+24>>1]|0;if(!(j<<16>>16)){j=g+8|0;j=th(f,c[g>>2]|0,c[j>>2]|0,c[j+4>>2]|0,(h|0)!=0&1,C)|0;c[M>>2]=j}else{c[G>>2]=k;c[G+4>>2]=c[g+20>>2];b[G+8>>1]=j;j=G+10|0;b[j>>1]=0;b[j+2>>1]=0;a[j+4>>0]=0;j=Xg(f,G,0,0,(h|0)!=0&1,C)|0;c[M>>2]=j}if(!j){j=c[C>>2]|0;break}else{M=j;Ra=N;return M|0}}else j=i;while(0);if((j|0)==0?(bg(f),y=f+32|0,n=c[y>>2]|0,z=g+8|0,(n|0)==(c[z>>2]|0)?(c[y+4>>2]|0)==(c[z+4>>2]|0):0):0){c[G+16>>2]=c[g>>2];c[G+28>>2]=n;c[G+32>>2]=0;M=Ih(f,G)|0;Ra=N;return M|0}}while(0);z=f+116|0;y=c[z>>2]|0;if((c[y+20>>2]|0)<0?(s=Jh(y)|0,c[M>>2]=s,s|0):0){M=s;Ra=N;return M|0}x=c[F+80>>2]|0;o=d[y+10>>0]|0;if(!(a[y+2>>0]|0)){m=c[g+8>>2]|0;l=c[g>>2]|0;do if(m>>>0>=128){j=x+o|0;k=((m|0)<0)<<31>>31;if(m>>>0<16384){w=bw(m|0,k|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=m&127;j=2;break}else{j=(wh(j,m,k)|0)&255;break}}else{a[x+o>>0]=m;j=1}while(0);r=m;n=j+o|0;q=m}else{q=c[g+28>>2]|0;n=(c[g+32>>2]|0)+q|0;p=c[g+16>>2]|0;do if(n>>>0>=128){j=x+o|0;k=((n|0)<0)<<31>>31;if(n>>>0<16384){w=bw(n|0,k|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=n&127;j=2;break}else{j=(wh(j,n,k)|0)&255;break}}else{a[x+o>>0]=n;j=1}while(0);m=j+o|0;j=x+m|0;l=g+8|0;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(l>>>0<0|(l|0)==0&k>>>0<128))if(l>>>0<0|(l|0)==0&k>>>0<16384){w=bw(k|0,l|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=k&127;j=2;break}else{j=wh(j,k,l)|0;break}else{a[j>>0]=k&127;j=1}while(0);r=n;n=j+m|0;l=p}k=x+n|0;j=e[y+14>>1]|0;d:do if((r|0)>(j|0)){i=e[y+16>>1]|0;v=c[y+52>>2]|0;w=v+36|0;m=(((r-i|0)>>>0)%(((c[w>>2]|0)+-4|0)>>>0)|0)+i|0;m=(m|0)>(j|0)?i:m;i=m+n|0;n=i+4|0;c[A>>2]=0;s=v+17|0;t=v+32|0;i=x+i|0;u=0;j=r;e:while(1){r=j;while(1){j=(r|0)>(m|0)?m:r;do if((q|0)<(j|0))if((q|0)>0){ew(k|0,l|0,q|0)|0;j=q;break}else{gw(k|0,0,j|0)|0;break}else ew(k|0,l|0,j|0)|0;while(0);r=r-j|0;if((r|0)<1){K=96;break e}l=l+j|0;q=q-j|0;m=m-j|0;if(!m)break;else k=k+j|0}c[B>>2]=0;p=c[A>>2]|0;if(!(a[s>>0]|0))j=p;else{m=1073741824/((c[t>>2]|0)>>>0)|0;j=p;do{o=j;j=j+1|0;if(j>>>0<2)k=0;else{k=o+-1|0;k=k-((k>>>0)%(((((c[w>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(m|0)?3:2)+k|0}}while((o|0)==(m|0)|(k|0)==(j|0));c[A>>2]=j}k=fg(v,B,A,j,0)|0;c[G>>2]=k;j=(k|0)==0;if(j&(a[s>>0]|0)!=0){j=c[A>>2]|0;ig(v,j,(p|0)==0?3:4,p,G);k=c[G>>2]|0;if(k){K=81;break}}else{if(!j)break;j=c[A>>2]|0}a[i>>0]=j>>>24;a[i+1>>0]=j>>>16;a[i+2>>0]=j>>>8;a[i+3>>0]=j;do if(u|0){j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{u=c[j+20>>2]|0;i=u+120|0;c[i>>2]=(c[i>>2]|0)+-1;u=u+136|0;c[j+16>>2]=c[u>>2];c[u>>2]=j;break}}while(0);u=c[B>>2]|0;k=u+56|0;i=c[k>>2]|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;k=(c[k>>2]|0)+4|0;m=(c[w>>2]|0)+-4|0;j=r}do if((K|0)==81){j=c[B>>2]|0;if(j){j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{f=c[j+20>>2]|0;g=f+120|0;c[g>>2]=(c[g>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;break}}}else if((K|0)==96){if(!u)break d;j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break d}else{B=c[j+20>>2]|0;A=B+120|0;c[A>>2]=(c[A>>2]|0)+-1;B=B+136|0;c[j+16>>2]=c[B>>2];c[B>>2]=j;break d}}while(0);do if(u|0){j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{f=c[j+20>>2]|0;g=f+120|0;c[g>>2]=(c[g>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;break}}while(0);c[M>>2]=k;M=k;Ra=N;return M|0}else{n=r+n|0;ew(k|0,l|0,q|0)|0;gw(k+q|0,0,r-q|0)|0;n=(n|0)>4?n:4}while(0);c[M>>2]=0;k=f+70|0;l=b[k>>1]|0;m=l&65535;j=c[C>>2]|0;if(!j){k=c[y+72>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[M>>2]=0;break}else{E=Ve(k)|0;K=112;break}else K=107;while(0);do if((K|0)==107){j=c[l+40>>2]|0;if(j|0){c[M>>2]=j;K=123;break}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){E=Wf(k)|0;K=112;break}else{E=Xf(k)|0;K=112;break}}while(0);if((K|0)==112?(c[M>>2]=E,E|0):0){j=E;K=123}if((K|0)==123){M=j;Ra=N;return M|0}j=(c[y+64>>2]|0)+(m<<1)|0;j=(c[y+56>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[y+26>>1])|0;if(!(a[y+8>>0]|0)){E=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[x>>0]=E;a[x+1>>0]=E>>8;a[x+2>>0]=E>>16;a[x+3>>0]=E>>24}k=Ah(y,j,G)|0;c[M>>2]=k;k=e[G+18>>1]|0;do if((n|0)==(k|0)?(c[G+12>>2]|0)==(e[G+16>>1]|0):0){if(a[F+17>>0]|0?(n|0)>=(e[y+16>>1]|0):0)break;if((j+n|0)>>>0>(c[y+60>>2]|0)>>>0){c[H>>2]=32306;c[H+4>>2]=71903;c[H+8>>2]=31517;Db(11,32001,H);j=11}else{ew(j|0,x|0,n|0)|0;j=0}M=j;Ra=N;return M|0}while(0);Kh(y,m,k,M);j=c[M>>2]|0;if(!j)j=m;else{M=j;Ra=N;return M|0}}else if((j|0)<0?(D=l+1<<16>>16,(b[y+24>>1]|0)!=0):0){b[k>>1]=D;a[I>>0]=a[I>>0]&-3;j=D&65535}else j=m;Lh(y,j,x,n,0,0,M);b[f+50>>1]=0;if(!(a[y+12>>0]|0)){M=c[M>>2]|0;Ra=N;return M|0}a[I>>0]=a[I>>0]&-3;k=Mh(f)|0;c[M>>2]=k;j=c[z>>2]|0;a[j+12>>0]=0;a[f>>0]=1;if(!((h&2|0)!=0&(k|0)==0)){M=k;Ra=N;return M|0}m=f+68|0;k=a[m>>0]|0;if(k<<24>>24>-1){if(k<<24>>24){l=0;j=k;do{k=c[(c[f+120+(l<<2)>>2]|0)+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);j=a[m>>0]|0}else{h=c[k+20>>2]|0;I=h+120|0;c[I>>2]=(c[I>>2]|0)+-1;h=h+136|0;c[k+16>>2]=c[h>>2];c[h>>2]=k}l=l+1|0}while((l|0)<(j<<24>>24|0));j=c[z>>2]|0}j=c[j+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{h=c[j+20>>2]|0;I=h+120|0;c[I>>2]=(c[I>>2]|0)+-1;h=h+136|0;c[j+16>>2]=c[h>>2];c[h>>2]=j}a[m>>0]=-1}m=g+8|0;f:do if(!(c[J>>2]|0))j=0;else{J=m;j=c[J>>2]|0;J=Sv(j|0,c[J+4>>2]|0,-1,-1)|0;h=L()|0;do if(h>>>0>0|(h|0)==0&J>>>0>2147483390)K=155;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](j)|0;c[f+16>>2]=j;if(!j)break}else{l=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){K=c[14978]|0;J=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&J>>>0<=K>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){K=155;break}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;c[f+16>>2]=j}ew(j|0,c[g>>2]|0,c[m>>2]|0)|0;j=0;break f}while(0);if((K|0)==155)c[f+16>>2]=0;c[M>>2]=7;j=7}while(0);a[f>>0]=3;K=m;g=c[K+4>>2]|0;M=f+56|0;c[M>>2]=c[K>>2];c[M+4>>2]=g;M=j;Ra=N;return M|0}function bh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=Ra;Ra=Ra+48|0;B=N+24|0;i=N+40|0;M=N+36|0;x=N;q=c[f+8>>2]|0;r=q+4|0;C=c[r>>2]|0;j=g&2;do if((a[f>>0]|0)==3){c[i>>2]=0;a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{L=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-L;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=f+4|0;if(!h){if(c[g>>2]|0)D=12}else{c[g>>2]=h;D=12}if((D|0)==12?(a[f>>0]|0)==0:0)a[f>>0]=2;c[M>>2]=0;break}}c[M>>2]=g;M=g;Ra=N;return M|0}while(0);L=f+68|0;F=a[L>>0]|0;p=F<<24>>24;I=f+70|0;J=b[I>>1]|0;z=J&65535;K=f+116|0;G=c[K>>2]|0;m=(c[G+64>>2]|0)+(z<<1)|0;m=(c[G+56>>2]|0)+((d[m>>0]<<8|d[m+1>>0])&e[G+26>>1])|0;g=G+20|0;if((c[g>>2]|0)<0?Jh(G)|0:0){M=11;Ra=N;return M|0}H=j<<24>>24!=0;n=G+8|0;do if(H){if(a[n>>0]|0){k=c[g>>2]|0;i=m+(d[G+10>>0]|0)|0;A=a[i>>0]|0;h=A&255;if(A<<24>>24<0){g=0;h=h&127;do{g=g+1|0;A=a[i+g>>0]|0;h=h<<7|A&127}while(A<<24>>24<0&g>>>0<8);i=i+g|0;j=h}else j=h;if(!(a[G+2>>0]|0))g=i+1|0;else{g=1;do{A=g;g=g+1|0}while((a[i+A>>0]|0)<0&g>>>0<10);g=i+g|0}h=e[G+14>>1]|0;if(j>>>0>h>>>0){i=e[G+16>>1]|0;A=(((j-i|0)>>>0)%(((c[(c[G+52>>2]|0)+36>>2]|0)+-4|0)>>>0)|0)+i|0;g=(g-m&65535)+4+(A>>>0>h>>>0?i:A)|0}else{g=g-m+j|0;g=g>>>0>4?g:4}if((k+2+(g&65535)|0)<=((c[C+36>>2]<<1>>>0)/3|0|0)?(b[G+24>>1]|0)!=1:0){A=1;break}}g=ag(f)|0;c[M>>2]=g;if(g){M=g;Ra=N;return M|0}else A=0}else A=0;while(0);k=f+1|0;do if(!(a[n>>0]|0)){a[k>>0]=a[k>>0]&-15;b[f+50>>1]=0;if(((a[f>>0]|0)==0?(l=b[I>>1]|0,l<<16>>16):0)?a[(c[K>>2]|0)+8>>0]|0:0){b[I>>1]=l+-1<<16>>16;c[M>>2]=0;break}g=Hh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}}while(0);i=a[k>>0]|0;a:do if(i&32){j=c[f+64>>2]|0;g=c[C+8>>2]|0;b:do if(!g)D=51;else{c:do if(j){do{if((g|0)!=(f|0)?(c[g+64>>2]|0)==(j|0):0)break c;g=c[g+24>>2]|0}while((g|0)!=0);if(!f)break b;else{D=51;break b}}else{h=f+24|0;while(1){if((g|0)!=(f|0))break c;g=c[h>>2]|0;if(!g){D=51;break b}}}while(0);g=$f(g,j,f)|0;c[M>>2]=g;if(!g)break a;Ra=N;return g|0}while(0);if((D|0)==51)a[k>>0]=i&-33;c[M>>2]=0}while(0);if(((c[f+112>>2]|0)==0?(s=c[f+64>>2]|0,u=f+32|0,t=c[u>>2]|0,u=c[u+4>>2]|0,v=q+11|0,a[v>>0]|0):0)?(a[v>>0]=0,o=c[(c[r>>2]|0)+8>>2]|0,o|0):0){g=o;do{if((a[g+1>>0]&16?(a[v>>0]=1,(c[g+64>>2]|0)==(s|0)):0)?(r=g+32|0,(c[r>>2]|0)==(t|0)?(c[r+4>>2]|0)==(u|0):0):0)a[g>>0]=1;g=c[g+24>>2]|0}while((g|0)!=0)}h=c[G+72>>2]|0;i=c[h+20>>2]|0;do if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0)){c[M>>2]=0;break}else{w=Ve(h)|0;D=73;break}else D=68;while(0);do if((D|0)==68){g=c[i+40>>2]|0;if(g|0){c[M>>2]=g;M=g;Ra=N;return M|0}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){w=Wf(h)|0;D=73;break}else{w=Xf(h)|0;D=73;break}}while(0);if((D|0)==73?(c[M>>2]=w,w|0):0){M=w;Ra=N;return M|0}g=Ah(G,m,x)|0;c[M>>2]=g;Kh(G,z,e[x+18>>1]|0,M);g=c[M>>2]|0;if(g|0){M=g;Ra=N;return M|0}if(!(a[n>>0]|0)){o=c[K>>2]|0;if((c[o+20>>2]|0)<0?(y=Jh(o)|0,c[M>>2]=y,y|0):0){M=y;Ra=N;return M|0}l=c[(c[(((a[L>>0]|0)+-1|0)>(p|0)?f+120+(p+1<<2)|0:K)>>2]|0)+4>>2]|0;m=o+24|0;D=(c[o+64>>2]|0)+((e[m>>1]<<1)+-2)|0;D=(d[D>>0]<<8|d[D+1>>0])&e[o+26>>1];n=(c[o+56>>2]|0)+D|0;if(D>>>0<4){c[B>>2]=32306;c[B+4>>2]=72100;c[B+8>>2]=31517;Db(11,32001,B);M=11;Ra=N;return M|0}k=(Xa[c[o+76>>2]&255](o,n)|0)&65535;g=c[C+80>>2]|0;h=c[o+72>>2]|0;i=c[h+20>>2]|0;do if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0)){c[M>>2]=0;D=91;break}else{E=Ve(h)|0;D=90;break}else D=85;while(0);do if((D|0)==85){j=c[i+40>>2]|0;if(j|0){c[M>>2]=j;break}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){E=Wf(h)|0;D=90;break}else{E=Xf(h)|0;D=90;break}}while(0);if((D|0)==90?(c[M>>2]=E,(E|0)==0):0)D=91;if((D|0)==91)Lh(G,z,n+-4|0,k+4|0,g,l,M);Kh(o,(e[m>>1]|0)+-1|0,k,M);g=c[M>>2]|0;if(g|0){M=g;Ra=N;return M|0}}g=Mh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}g=a[L>>0]|0;if(g<<24>>24>F<<24>>24){h=c[(c[K>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[L>>0]|0}else{E=c[h+20>>2]|0;D=E+120|0;c[D>>2]=(c[D>>2]|0)+-1;E=E+136|0;c[h+16>>2]=c[E>>2];c[E>>2]=h}h=g+-1<<24>>24;a[L>>0]=h;g=h<<24>>24;if(h<<24>>24>F<<24>>24)do{h=h+-1<<24>>24;a[L>>0]=h;g=c[f+120+(g<<2)>>2]|0;do if(g){g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);h=a[L>>0]|0;break}else{E=c[g+20>>2]|0;D=E+120|0;c[D>>2]=(c[D>>2]|0)+-1;E=E+136|0;c[g+16>>2]=c[E>>2];c[E>>2]=g;break}}while(0);g=h<<24>>24}while(h<<24>>24>F<<24>>24);c[K>>2]=c[f+120+(g<<2)>>2];g=Mh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}}if(A|0){a[f>>0]=2;h=b[G+24>>1]|0;g=f+4|0;if((J&65535)<(h&65535)){c[g>>2]=1;M=0;Ra=N;return M|0}else{c[g>>2]=-1;b[I>>1]=(h&65535)+65535;M=0;Ra=N;return M|0}}g=xh(f)|0;c[M>>2]=g;if(H){h=a[L>>0]|0;if(h<<24>>24>-1){if(h<<24>>24){i=0;g=h;do{h=c[(c[f+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[L>>0]|0}else{J=c[h+20>>2]|0;I=J+120|0;c[I>>2]=(c[I>>2]|0)+-1;J=J+136|0;c[h+16>>2]=c[J>>2];c[J>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[K>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{K=c[g+20>>2]|0;J=K+120|0;c[J>>2]=(c[J>>2]|0)+-1;K=K+136|0;c[g+16>>2]=c[K>>2];c[K>>2]=g}a[L>>0]=-1;g=c[M>>2]|0}a[f>>0]=3}if((g|0)!=16){M=g;Ra=N;return M|0}c[M>>2]=0;M=0;Ra=N;return M|0}function ch(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=Ra;Ra=Ra+16|0;r=s;h=xh(f)|0;switch(h|0){case 0:{c[g>>2]=0;k=f+116|0;l=f+70|0;m=f+68|0;n=f+20|0;o=f+50|0;p=f+1|0;q=f+2|0;while(1){g=c[k>>2]|0;if(a[g+8>>0]|0){g=0;h=8;break}h=b[l>>1]|0;i=(c[g+64>>2]|0)+((h&65535)<<1)|0;i=(c[g+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[g+26>>1])|0;j=a[m>>0]|0;if(j<<24>>24>18){h=5;break}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];t=c[n>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;u=j<<24>>24;b[f+72+(u<<1)>>1]=h;c[f+120+(u<<2)>>2]=g;b[l>>1]=0;a[m>>0]=j+1<<24>>24;g=yh(t,i,k,f,d[q>>0]|0)|0;if(g|0){h=8;break}}if((h|0)==5){c[r>>2]=32306;c[r+4>>2]=68229;c[r+8>>2]=31517;Db(11,32001,r);u=11;Ra=s;return u|0}else if((h|0)==8){Ra=s;return g|0}break}case 16:{c[g>>2]=1;u=0;Ra=s;return u|0}default:{u=h;Ra=s;return u|0}}return 0}function dh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=a+8|0;d=c[a+16>>2]|0;o=c[a+20>>2]|0;g=a+40|0;e=c[a+48>>2]|0;m=c[a+52>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;g=a+24|0;h=a+32|0;f=c[h>>2]|0;c[h>>2]=0;h=a+36|0;i=c[h>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0;c[g>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[a+28>>2]=0;k=(e|0)==0;if(!k){j=e;do{l=c[j+8>>2]|0;do if(l|0){Xi(0,c[l+28>>2]|0);f=c[l>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[l+4>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[l+12>>2]|0;if(f|0)ni(0,f);i=c[l+16>>2]|0;do if(i|0){h=i+4|0;f=c[i>>2]|0;if((c[h>>2]|0)>0){g=0;do{f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[i>>2]|0}while((g|0)<(c[h>>2]|0))}do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{p=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{p=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);j=c[j>>2]|0}while((j|0)!=0)}do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{p=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);if(!k)do{f=e;e=c[e>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}}while((e|0)!=0);c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;f=(d|0)==0;if(!f){e=d;do{g=c[e+8>>2]|0;if(g|0?(n=g+32|0,p=(c[n>>2]|0)+-1|0,c[n>>2]=p,(p|0)==0):0)Vi(0,g);e=c[e>>2]|0}while((e|0)!=0)}do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{p=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if(!f)do{e=d;d=c[d>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);e=a+56|0;f=a+64|0;d=c[f>>2]|0;c[f>>2]=0;f=a+68|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[f>>2]=0;c[e>>2]=0;if(d|0)do{e=d;d=c[d>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);c[a+60>>2]=0;c[a+72>>2]=0;d=a+78|0;e=b[d>>1]|0;if(!(e&1)){p=e&-10;b[d>>1]=p;return}p=a+4|0;c[p>>2]=(c[p>>2]|0)+1;p=e&-10;b[d>>1]=p;return}function eh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+48|0;x=G+16|0;C=G;A=G+24|0;F=f+165|0;a[F>>0]=1;w=(g|0)==1?34855:34585;c[C>>2]=w;c[C+4>>2]=34874;c[C+8>>2]=34876;c[C+12>>2]=0;c[A>>2]=f;c[A+8>>2]=g;y=A+12|0;c[y>>2]=0;c[A+4>>2]=h;c[A+16>>2]=i;c[A+20>>2]=0;fh(A,3,C,0)|0;i=c[y>>2]|0;a:do if(!i){z=f+16|0;u=c[z>>2]|0;C=u+(g<<4)+4|0;i=c[C>>2]|0;if(!i){f=(c[u+28>>2]|0)+78|0;b[f>>1]=b[f>>1]|1;f=0;a[F>>0]=0;Ra=G;return f|0}l=c[i>>2]|0;m=c[i+4>>2]|0;k=m+4|0;c[k>>2]=l;b:do if(!(a[i+8>>0]|0)){m=Zb(i,0,0)|0;switch(m|0){case 0:{l=c[C>>2]|0;m=c[l+4>>2]|0;B=1;k=m+4|0;l=c[l>>2]|0;break b}case 516:{l=50738;break}case 100:{l=50760;break}case 101:{l=50782;break}default:{j=m&255;if(j>>>0<29?(520028155>>>j&1|0)!=0:0)l=c[22960+(j<<2)>>2]|0;else l=50724}}j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}E=j;if((c[f+304>>2]|0)>>>0<=E>>>0?(c[f+308>>2]|0)>>>0>E>>>0:0){E=f+300|0;c[j>>2]=c[E>>2];c[E>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{E=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c:do if(l){k=(Eu(l)|0)+1|0;d:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=32;else{j=0;break c}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0<k>>>0:0))){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];E=f+284|0;c[E>>2]=(c[E>>2]|0)+1;break d}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];E=f+284|0;c[E>>2]=(c[E>>2]|0)+1;break d}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=32}while(0);if((D|0)==32)j=_d(f,k,0)|0;if(j)ew(j|0,l|0,k|0)|0;else j=0}else j=0;while(0);c[h>>2]=j;j=m;break a}else B=0;while(0);c[k>>2]=l;t=c[(c[m+12>>2]|0)+56>>2]|0;p=a[t+40>>0]|0;q=a[t+41>>0]|0;r=a[t+42>>0]|0;s=a[t+43>>0]|0;c[k>>2]=l;o=d[t+45>>0]<<16|d[t+44>>0]<<24|d[t+46>>0]<<8|d[t+47>>0];c[k>>2]=l;n=d[t+49>>0]<<16|d[t+48>>0]<<24|d[t+50>>0]<<8|d[t+51>>0];c[k>>2]=l;k=d[t+59>>0]|0;t=d[t+57>>0]<<16|d[t+56>>0]<<24|d[t+58>>0]<<8|k;v=f+32|0;u=u+(g<<4)+12|0;i=c[u>>2]|0;do if((c[v>>2]&33554432|0)==0&0==0){c[i>>2]=(q&255)<<16|(p&255)<<24|(r&255)<<8|s&255;if(t){if(!g){k=k&3;k=(k|0)==0?1:k&255;a[f+78>>0]=k;D=66;break}k=a[f+78>>0]|0;if((t|0)==(k&255|0))D=66;else{j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}A=j;if((c[f+304>>2]|0)>>>0<=A>>>0?(c[f+308>>2]|0)>>>0>A>>>0:0){A=f+300|0;c[j>>2]=c[A>>2];c[A>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);e:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=61;else j=0;else{do if((e[f+276>>1]|0)>=68){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=62;break e}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=62;break e}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=61}while(0);if((D|0)==61){j=_d(f,68,0)|0;D=62}if((D|0)==62)if(!j)j=0;else{i=j;k=34948;l=i+68|0;do{a[i>>0]=a[k>>0]|0;i=i+1|0;k=k+1|0}while((i|0)<(l|0))}c[h>>2]=j;j=1}}else D=65}else{c[i>>2]=0;n=0;o=0;D=65}while(0);if((D|0)==65){k=(c[(c[z>>2]|0)+(g<<4)+12>>2]|0)+78|0;b[k>>1]=b[k>>1]|4;k=a[f+78>>0]|0;D=66}do if((D|0)==66){a[i+77>>0]=k;k=i+80|0;if(!(c[k>>2]|0)){i=(n|0)>-1?n:(n|0)==-2147483648?2147483647:0-n|0;i=(i|0)==0?-2e3:i;c[k>>2]=i;c[m+4>>2]=l;k=c[(c[m>>2]|0)+212>>2]|0;c[k+16>>2]=i;l=c[7357]|0;m=c[k+44>>2]|0;if((i|0)<=-1){s=Yv(i|0,((i|0)<0)<<31>>31|0,-1024,-1)|0;t=L()|0;i=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;i=Wv(s|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0}bb[l&127](m,i);i=c[u>>2]|0}k=o&255;i=i+76|0;a[i>>0]=k;if(k<<24>>24){if((k&255)>4){j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}A=j;if((c[f+304>>2]|0)>>>0<=A>>>0?(c[f+308>>2]|0)>>>0>A>>>0:0){A=f+300|0;c[j>>2]=c[A>>2];c[A>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);f:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=92;else j=0;else{do if((e[f+276>>1]|0)>=24){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=93;break f}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=93;break f}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=92}while(0);if((D|0)==92){j=_d(f,24,0)|0;D=93}if((D|0)==93)if(!j)j=0;else{i=j;k=35016;l=i+24|0;do{a[i>>0]=a[k>>0]|0;i=i+1|0;k=k+1|0}while((i|0)<(l|0))}c[h>>2]=j;j=1;break}}else a[i>>0]=1;if((g|0)==0&(o|0)>3){t=v;u=c[t+4>>2]|0;h=v;c[h>>2]=c[t>>2]&-3;c[h+4>>2]=u}c[x>>2]=c[(c[z>>2]|0)+(g<<4)>>2];c[x+4>>2]=w;i=dd(f,35040,x)|0;h=f+312|0;x=c[h>>2]|0;c[h>>2]=0;k=nd(f,i,77,A,0)|0;c[h>>2]=x;k=(k|0)==0?c[y>>2]|0:k;do if(i|0){if(c[f+480>>2]|0){Xd(f,i);break}h=i;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[i>>2]=c[h>>2];c[h>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=(k|0)==0;if(i)gh(f,g)|0;if(!(a[f+81>>0]|0)){if(!i){j=k;D=112}}else{$b(f);j=7;D=112}if((D|0)==112?(c[v>>2]&134217728|0)==0&0==0:0)break;j=(c[(c[z>>2]|0)+(g<<4)+12>>2]|0)+78|0;b[j>>1]=b[j>>1]|1;j=0}while(0);if((B|0)!=0?(E=c[C>>2]|0,c[(c[E+4>>2]|0)+4>>2]=c[E>>2],(cc(E,0)|0)==0):0)bc(E,0)|0}else j=i;while(0);g:do if((j|0)>=7){if((j|0)<3082)switch(j|0){case 7:break;default:break g}else switch(j|0){case 3082:break;default:break g}i=f+81|0;if((a[i>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;i=f+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[f+236>>2]|0;if(i|0)c[i+12>>2]=7}}else{switch(j|0){case 0:break;default:break g}a[F>>0]=0;Ra=G;return j|0}while(0);if((g|0)>-1){h=c[f+16>>2]|0;g=(c[h+(g<<4)+12>>2]|0)+78|0;b[g>>1]=b[g>>1]|8;g=(c[h+28>>2]|0)+78|0;b[g>>1]=b[g>>1]|8;g=f+24|0;c[g>>2]=c[g>>2]&-17}if(c[f+56>>2]|0){f=j;a[F>>0]=0;Ra=G;return f|0}n=f+20|0;i=c[n>>2]|0;if((i|0)<=0){f=j;a[F>>0]=0;Ra=G;return f|0}m=f+16|0;l=0;do{k=c[(c[m>>2]|0)+(l<<4)+12>>2]|0;if(b[k+78>>1]&8){dh(k);i=c[n>>2]|0}l=l+1|0}while((l|0)<(i|0));a[F>>0]=0;Ra=G;return j|0}function fh(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+96|0;x=B+64|0;w=B+56|0;v=B+40|0;l=B+24|0;k=B+16|0;j=B;n=B+80|0;s=B+76|0;A=c[e>>2]|0;t=c[e+8>>2]|0;r=c[A+16>>2]|0;q=(c[r+(t<<4)+12>>2]|0)+78|0;b[q>>1]=b[q>>1]&-5;q=e+20|0;c[q>>2]=(c[q>>2]|0)+1;q=A+81|0;if(a[q>>0]|0){c[e+12>>2]=7;e=1;Ra=B;return e|0}if(!g){e=0;Ra=B;return e|0}u=c[g+4>>2]|0;if(!u){f=c[g>>2]|0;h=e+4|0;i=c[h>>2]|0;if(c[i>>2]|0){e=0;Ra=B;return e|0}if(c[e+16>>2]&1|0){c[i>>2]=0;c[e+12>>2]=1;e=0;Ra=B;return e|0}if(0==0?(c[A+32>>2]&1|0)==0:0){c[k>>2]=(f|0)==0?35133:f;g=dd(A,35135,k)|0;c[c[h>>2]>>2]=g;c[l>>2]=32306;c[l+4>>2]=123732;c[l+8>>2]=31517;Db(11,32001,l);c[e+12>>2]=11;e=0;Ra=B;return e|0}else{c[j>>2]=32306;c[j+4>>2]=123725;c[j+8>>2]=31517;Db(11,32001,j);c[e+12>>2]=11;e=0;Ra=B;return e|0}}i=g+8|0;k=c[i>>2]|0;l=(k|0)==0;do if(!l){f=a[k>>0]|0;do if(!(f<<24>>24)){f=35095;o=13}else{j=f&255;f=208+j|0;if((j|32|0)==99){f=a[k+1>>0]|0;if(!(f<<24>>24)){f=35096;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==114){f=a[k+2>>0]|0;if(!(f<<24>>24)){f=35097;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==101){f=a[k+3>>0]|0;if(!(f<<24>>24)){f=35098;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==97){f=a[k+4>>0]|0;if(!(f<<24>>24)){f=35099;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==116){f=a[k+5>>0]|0;if(!(f<<24>>24)){f=35100;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==101){f=a[k+6>>0]|0;if(!(f<<24>>24)){f=35101;o=13;break}if(f<<24>>24==32)break;else{h=32;f=208+(f&255)|0}}else h=101}else h=116}else h=97}else h=101}else h=114}else h=99;p=d[f>>0]|0;m=h;o=17}while(0);if((o|0)==13){p=0;m=a[208+(d[f>>0]|0)>>0]|0;o=17}if((o|0)==17?(p|0)!=(m&255|0):0)break;y=A+164|0;x=a[y>>0]|0;a[y>>0]=t;c[n>>2]=0;ii(u,n)|0;c[A+160>>2]=c[n>>2];z=A+166|0;a[z>>0]=a[z>>0]&-2;qd(A,c[i>>2]|0,-1,0,0,s,0)|0;f=c[A+64>>2]|0;a[y>>0]=x;a:do if(f|0?(a[z>>0]&1)==0:0){c[e+12>>2]=f;switch(f|0){case 9:break a;case 7:break;default:{if((f&255|0)==6)break a;gi(e,c[g>>2]|0,pd(A)|0);break a}}if((a[q>>0]|0)==0?(a[A+82>>0]|0)==0:0){a[q>>0]=1;if((c[A+180>>2]|0)>0)c[A+264>>2]=1;f=A+272|0;c[f>>2]=(c[f>>2]|0)+1;f=c[A+236>>2]|0;if(f|0)c[f+12>>2]=7}}while(0);gc(c[s>>2]|0)|0;e=0;Ra=B;return e|0}while(0);i=c[g>>2]|0;j=(i|0)==0;do if(!j){if(!l?a[k>>0]|0:0)break;h=hi(A,i,c[r+(t<<4)>>2]|0)|0;i=(h|0)==0;b:do if((!i?(y=h+44|0,ii(u,y)|0):0)?(z=c[y>>2]|0,(z|0)>=2):0){f=c[(c[h+12>>2]|0)+8>>2]|0;if(!f){e=0;Ra=B;return e|0}while(1){if(!((f|0)==(h|0)?1:(c[f+44>>2]|0)!=(z|0)))break b;f=c[f+20>>2]|0;if(!f){f=0;break}}Ra=B;return f|0}while(0);gi(e,c[g>>2]|0,i?35120:35103);e=0;Ra=B;return e|0}while(0);f=e+4|0;h=c[f>>2]|0;if(c[h>>2]|0){e=0;Ra=B;return e|0}if(c[e+16>>2]&1|0){c[h>>2]=0;c[e+12>>2]=1;e=0;Ra=B;return e|0}if(0==0?(c[A+32>>2]&1|0)==0:0){c[w>>2]=j?35133:i;g=dd(A,35135,w)|0;c[c[f>>2]>>2]=g;c[x>>2]=32306;c[x+4>>2]=123732;c[x+8>>2]=31517;Db(11,32001,x);c[e+12>>2]=11;e=0;Ra=B;return e|0}else{c[v>>2]=32306;c[v+4>>2]=123725;c[v+8>>2]=31517;Db(11,32001,v);c[e+12>>2]=11;e=0;Ra=B;return e|0}return 0}function gh(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+16|0;k=m;l=m+8|0;j=e+16|0;g=c[j>>2]|0;i=c[g+(f<<4)+12>>2]|0;h=c[i+16>>2]|0;if(h|0)do{n=(c[h+8>>2]|0)+36|0;c[n>>2]=c[n>>2]&-17;h=c[h>>2]|0}while((h|0)!=0);i=i+32|0;h=c[i>>2]|0;if(h){g=h;do{n=(c[g+8>>2]|0)+55|0;h=(d[n>>0]|d[n+1>>0]<<8)&-129;a[n>>0]=h;a[n+1>>0]=h>>8;g=c[g>>2]|0}while((g|0)!=0);g=c[j>>2]|0}c[l>>2]=e;g=c[g+(f<<4)>>2]|0;c[l+4>>2]=g;do if(Sd(e,35174,g)|0){c[k>>2]=g;h=dd(e,35187,k)|0;if(h){g=nd(e,h,78,l,0)|0;if(c[e+480>>2]|0){Xd(e,h);l=g;break}n=h;if((c[e+304>>2]|0)>>>0<=n>>>0?(c[e+308>>2]|0)>>>0>n>>>0:0){l=e+300|0;c[h>>2]=c[l>>2];c[l>>2]=h;l=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);l=g;break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);l=g;break}}else l=7}else l=0;while(0);g=c[i>>2]|0;if(g|0)do{f=c[g+8>>2]|0;n=f+55|0;if(!((d[n>>0]|d[n+1>>0]<<8)&128)){k=c[f+8>>2]|0;j=f+50|0;i=b[j>>1]|0;i=(i&65535)<5?i:5;h=b[(c[f+12>>2]|0)+44>>1]|0;b[k>>1]=h;if(c[f+36>>2]|0){h=(h&65535)+65526&65535;b[k>>1]=h}if(h<<16>>16<33)b[k>>1]=33;ew(k+2|0,31120,i<<1&65535|0)|0;n=b[j>>1]|0;h=n&65535;if((i&65535)<(n&65535)){h=i&65535;do{h=h+1|0;b[k+(h<<1)>>1]=23;i=b[j>>1]|0}while(h>>>0<(i&65535)>>>0);h=i&65535}if(a[f+54>>0]|0)b[k+(h<<1)>>1]=0}g=c[g>>2]|0}while((g|0)!=0);if((l|0)!=7){Ra=m;return l|0}g=e+81|0;if(a[g>>0]|0){Ra=m;return l|0}if(a[e+82>>0]|0){Ra=m;return l|0}a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;g=e+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[e+236>>2]|0;if(!g){Ra=m;return l|0}c[g+12>>2]=7;Ra=m;return l|0}function hh(d){d=d|0;var f=0,g=0,h=0,i=0,j=0;i=c[d+32>>2]|0;j=d+8|0;if(!((b[j>>1]&9216)==0?!(c[d+24>>2]|0):0))Cg(d);a:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))h=14;else{j=7;return j|0}else{do if((e[i+276>>1]|0)>=32){f=i+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];f=i+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}f=i+296|0;g=c[f>>2]|0;if(!g){f=i+292|0;break}else{c[f>>2]=c[g>>2];f=i+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}}else f=i+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;h=14}while(0);if((h|0)==14)g=_d(i,32,0)|0;if(!g){j=7;return j|0}h=g;if((c[i+304>>2]|0)>>>0<=h>>>0?(c[i+308>>2]|0)>>>0>h>>>0:0)f=e[i+276>>1]|0;else f=Wa[c[29352>>2]&127](g)|0;c[g>>2]=0;c[g+4>>2]=i;c[g+8>>2]=0;c[g+12>>2]=0;c[g+20>>2]=0;c[g+16>>2]=g+32;b[g+24>>1]=(f+1048544|0)>>>4;b[g+26>>1]=1;c[g+28>>2]=0;c[d+16>>2]=g;b[j>>1]=1040;c[d+36>>2]=94;j=0;return j|0}function ih(a){a=a|0;var b=0;b=(c[a>>2]|0)+200|0;c[a+4>>2]=c[b>>2];c[b>>2]=a;return}function jh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=b+5|0;f=a[k>>0]|0;if(!(a[b+15>>0]|0))j=3;else switch(e|0){case 2:case 4:{j=3;break}default:{}}do if((j|0)==3?(g=f&255,(g|0)!=(e|0)):0){a[k>>0]=e;if(!((e&1|0)==0&((g&5|0)==1&(a[b+4>>0]|0)==0))){if((e|0)!=2)break;e=c[b+64>>2]|0;f=c[e>>2]|0;if(!f)break;Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0;break}e=c[b+64>>2]|0;f=c[e>>2]|0;if(f|0){Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0}i=b+17|0;if((d[i>>0]|0)>1){j=c[b>>2]|0;Ya[c[j+28>>2]&127](j,c[b+172>>2]|0,0)|0;break}e=b+16|0;g=a[e>>0]|0;h=g<<24>>24==0;if(h){f=Sf(b)|0;e=a[e>>0]|0}else{f=0;e=g}a:do if(e<<24>>24==1){e=a[i>>0]|0;switch(e<<24>>24){case 0:case 1:case 5:break;default:{j=19;break a}}if(!(a[b+13>>0]|0)){f=c[b+60>>2]|0;if(Xa[c[(c[f>>2]|0)+28>>2]&255](f,2)|0)break;e=a[i>>0]|0}if(e<<24>>24==5)j=19;else{a[i>>0]=2;j=19}}else if(!f)j=19;while(0);if((j|0)==19?(j=c[b>>2]|0,Ya[c[j+28>>2]&127](j,c[b+172>>2]|0,0)|0,g<<24>>24==1):0){e=c[b+60>>2]|0;f=c[e>>2]|0;if(!f)break;if(!(a[b+13>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[i>>0]|0)==5)break;a[i>>0]=1;break}if(h)vf(b)}while(0);return d[k>>0]|0}function kh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+80|0;A=T+32|0;y=T+24|0;x=T+16|0;w=T+8|0;q=T;S=g+79|0;if(!(a[S>>0]|0)){j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=21;else j=0;else{do if((e[g+276>>1]|0)>=40){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=22;break a}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=22;break a}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=21}while(0);if((R|0)==21){j=_d(g,40,0)|0;R=22}if((R|0)==22)if(!j)j=0;else{l=j;k=36072;n=l+40|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}if((c[g+168>>2]|0)>1){j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);b:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=45;else j=0;else{do if((e[g+276>>1]|0)>=43){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=46;break b}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=46;break b}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=45}while(0);if((R|0)==45){j=_d(g,43,0)|0;R=46}if((R|0)==46)if(!j)j=0;else{l=j;k=36112;n=l+43|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}m=g+60|0;n=c[m>>2]|0;p=(i|0)!=0;do if(p){j=b[i+8>>1]|0;if((j&15|16)<<16>>16==18){if((j&514)==514?(a[i+10>>0]|0)==1:0){j=c[i+16>>2]|0;k=n}else if(!(j&1)){j=Gg(i,1)|0;k=c[m>>2]|0}else{j=0;k=n}c[m>>2]=k&-8|6;break}j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=70;else j=0;else{do if((e[g+276>>1]|0)>=18){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=71;break c}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=71;break c}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=70}while(0);if((R|0)==70){j=_d(g,18,0)|0;R=71}if((R|0)==71)if(!j)j=0;else{l=j;k=36155;n=l+18|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}else j=59952;while(0);E=g+32|0;G=E;F=c[G>>2]|0;G=c[G+4>>2]|0;H=g+24|0;I=c[H>>2]|0;J=g+100|0;K=c[J>>2]|0;M=g+104|0;N=c[M>>2]|0;O=g+88|0;P=a[O>>0]|0;c[H>>2]=I|6;o=E;c[o>>2]=F&-268456578|513;c[o+4>>2]=G;a[O>>0]=0;o=g+16|0;Q=c[o>>2]|0;v=c[Q+(h<<4)>>2]|0;Q=c[Q+(h<<4)+4>>2]|0;D=Q+4|0;r=a[(c[c[D>>2]>>2]|0)+12>>0]|0;u=c[g+20>>2]|0;c[q>>2]=j;j=yi(g,f,36173,q)|0;c[m>>2]=n;d:do if(!j){j=c[o>>2]|0;C=j+(u<<4)|0;z=c[j+(u<<4)+4>>2]|0;B=z+4|0;if(p){k=c[(c[c[B>>2]>>2]|0)+60>>2]|0;m=q;c[m>>2]=0;c[m+4>>2]=0;m=c[k>>2]|0;do if(m){n=(Xa[c[m+24>>2]&255](k,q)|0)!=0;p=c[q+4>>2]|0;if(!(n|((p|0)>0|(p|0)==0&(c[q>>2]|0)>>>0>0))){j=c[o>>2]|0;break}j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}B=j;if((c[g+304>>2]|0)>>>0<=B>>>0?(c[g+308>>2]|0)>>>0>B>>>0:0){B=g+300|0;c[j>>2]=c[B>>2];c[B>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{B=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);e:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=104;else j=0;else{do if((e[g+276>>1]|0)>=27){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=105;break e}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=105;break e}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=104}while(0);if((R|0)==104){j=_d(g,27,0)|0;R=105}if((R|0)==105)if(!j)j=0;else{l=j;k=36196;n=l+27|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;m=C;l=1;break d}while(0);c[H>>2]=c[H>>2]|8}m=c[D>>2]|0;c[m+4>>2]=c[Q>>2];m=(c[m+32>>2]|0)-(c[m+36>>2]|0)|0;j=c[(c[j+(h<<4)+12>>2]|0)+80>>2]|0;k=c[B>>2]|0;c[k+4>>2]=c[z>>2];k=c[(c[k>>2]|0)+212>>2]|0;c[k+16>>2]=j;n=c[7357]|0;o=c[k+44>>2]|0;if((j|0)<=-1){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}bb[n&127](o,j);k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];k=c[(c[k>>2]|0)+212>>2]|0;j=c[k+16>>2]|0;if((j|0)<=-1){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}p=c[k+20>>2]|0;j=(j|0)<(p|0)?p:j;p=c[B>>2]|0;n=c[z>>2]|0;o=p+4|0;c[o>>2]=n;p=c[p>>2]|0;k=c[p+212>>2]|0;if(j|0){if((j|0)<0){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}c[k+20>>2]=j}c[o>>2]=n;a[p+7>>0]=1;j=p+20|0;c[p+8>>2]=0;a[j>>0]=a[j>>0]&-2;j=zi(g,f,36223)|0;if(!j){h=(i|0)==0;j=Zb(Q,h?2:0,0)|0;if(!j){j=c[D>>2]|0;if((a[(c[j>>2]|0)+5>>0]|0)==5)c[g+92>>2]=0;j=c[j+32>>2]|0;o=c[B>>2]|0;c[o+4>>2]=c[z>>2];if(!(b[o+22>>1]&2)){i=(m|0)<0;if(i)n=(c[o+32>>2]|0)-(c[o+36>>2]|0)|0;else n=m;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[o+32>>2]=j,t=o+80|0,s=c[t>>2]|0,s|0):0){k=s+-4|0;c[t>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;s=(c[14820]|0)+1|0;c[14820]=s;c[14821]=(s|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=132;break}else{j=Wa[c[29352>>2]&127](k)|0;R=132}while(0);do if((R|0)==132){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[t>>2]=0}s=o+32|0;t=Se(c[o>>2]|0,s,n)|0;c[o+36>>2]=(c[s>>2]|0)-(n&65535);if(!t){if(!(r<<24>>24)){j=c[g+92>>2]|0;p=c[B>>2]|0;c[p+4>>2]=c[z>>2];if(b[p+22>>1]&2){m=C;l=7;break}if(i)o=(c[p+32>>2]|0)-(c[p+36>>2]|0)|0;else o=m;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[p+32>>2]=j;n=p+80|0;j=c[n>>2]|0;if(!j)break;k=j+-4|0;c[n>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=149;break}else{j=Wa[c[29352>>2]&127](k)|0;R=149}while(0);do if((R|0)==149){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[n>>2]=0}while(0);s=p+32|0;t=Se(c[p>>2]|0,s,o)|0;c[p+36>>2]=(c[s>>2]|0)-(o&65535);if(t|0){m=C;l=7;break}}if(!(a[g+81>>0]|0)){j=a[g+84>>0]|0;do if(j<<24>>24>-1)j=j<<24>>24;else{j=c[D>>2]|0;c[j+4>>2]=c[Q>>2];if(!(a[j+17>>0]|0)){j=0;break}j=(a[j+18>>0]|0)==0?1:2}while(0);n=c[B>>2]|0;c[n+4>>2]=c[z>>2];k=j&255;if(b[n+22>>1]&2){j=n+17|0;if(((k|0)!=0|0)==(d[j>>0]|0))R=162}else{j=n+17|0;R=162}if((R|0)==162){a[j>>0]=(k|0)!=0&1;a[n+18>>0]=(k|0)==2&1}k=g+164|0;a[k>>0]=u;c[w>>2]=v;j=yi(g,f,36229,w)|0;if(j|0){m=C;l=j;break}c[x>>2]=v;j=yi(g,f,36337,x)|0;if(j|0){m=C;l=j;break}a[k>>0]=0;c[y>>2]=v;j=yi(g,f,36391,y)|0;c[H>>2]=c[H>>2]&-5;if(j|0){m=C;l=j;break}c[A>>2]=v;j=yi(g,f,36542,A)|0;if(j|0){m=C;l=j;break}j=0;do{k=d[36672+j>>0]|0;n=c[D>>2]|0;c[n+4>>2]=c[Q>>2];k=(k<<2)+36|0;n=(c[(c[n+12>>2]|0)+56>>2]|0)+k|0;n=(d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0])+(d[36672+(j|1)>>0]|0)|0;p=c[B>>2]|0;c[p+4>>2]=c[z>>2];p=c[p+12>>2]|0;o=c[p+56>>2]|0;p=c[p+72>>2]|0;q=c[p+20>>2]|0;do if(!(b[p+28>>1]&4))R=172;else{if((c[q+24>>2]|0)>>>0<(c[p+24>>2]|0)>>>0){R=172;break}if(!(c[q+96>>2]|0))break;l=Ve(p)|0;R=176}while(0);do if((R|0)==172){l=c[q+40>>2]|0;if(l|0){m=C;break d}if((c[q+148>>2]|0)>>>0>(c[q+152>>2]|0)>>>0){l=Wf(p)|0;R=176;break}else{l=Xf(p)|0;R=176;break}}while(0);if((R|0)==176?(R=0,l|0):0){m=C;break d}f=o+k|0;a[f>>0]=n>>>24;a[f+1>>0]=n>>>16;a[f+2>>0]=n>>>8;a[f+3>>0]=n;j=j+2|0}while(j>>>0<10);f:do if(h){k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];j=c[z>>2]|0;l=c[B>>2]|0;c[l+4>>2]=j;k=c[(c[k>>2]|0)+60>>2]|0;n=c[k>>2]|0;do if(!n)R=182;else{x=c[l+32>>2]|0;x=Yv(c[l+44>>2]|0,0,x|0,((x|0)<0)<<31>>31|0)|0;f=L()|0;j=y;c[j>>2]=x;c[j+4>>2]=f;j=Ya[c[n+40>>2]&127](k,11,y)|0;j=(j|0)==12?0:j;if(j|0)break;j=c[z>>2]|0;R=182}while(0);do if((R|0)==182){l=A;n=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(n|0));c[A+20>>2]=j;c[A+24>>2]=z;j=A+4|0;c[j>>2]=Q;c[A+16>>2]=1;Yb(A,2147483647)|0;k=dc(A)|0;if(!k){f=(c[D>>2]|0)+22|0;b[f>>1]=b[f>>1]&-3;break f}j=c[c[(c[j>>2]|0)+4>>2]>>2]|0;if(a[j+12>>0]|0){j=k;break}Ff(j);j=k}while(0);m=C;l=j;break d}while(0);c[(c[B>>2]|0)+4>>2]=c[z>>2];l=cc(z,0)|0;if(l|0){m=C;break}l=bc(z,0)|0;k=(l|0)!=0;j=h^1;do if(k|j)k=k?2:0;else{j=c[B>>2]|0;c[j+4>>2]=c[z>>2];if(!(a[j+17>>0]|0))l=0;else l=(a[j+18>>0]|0)==0?1:2;k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];if(b[k+22>>1]&2){j=k+17|0;if(((l|0)!=0|0)!=(d[j>>0]|0)){k=0;l=0;j=0;break}}else j=k+17|0;a[j>>0]=(l|0)!=0&1;a[k+18>>0]=(l|0)==2&1;k=0;l=0;j=0}while(0);if(j|(k&3)!=0){m=C;break}j=c[(c[B>>2]|0)+32>>2]|0;n=c[D>>2]|0;c[n+4>>2]=c[Q>>2];o=n+22|0;if(b[o>>1]&2){m=C;l=8;break}if(i)m=(c[n+32>>2]|0)-(c[n+36>>2]|0)|0;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[n+32>>2]=j;l=n+80|0;j=c[l>>2]|0;if(!j)break;k=j+-4|0;c[l>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;f=(c[14820]|0)+1|0;c[14820]=f;c[14821]=(f|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=207;break}else{j=Wa[c[29352>>2]&127](k)|0;R=207}while(0);do if((R|0)==207){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[l>>2]=0}while(0);R=n+32|0;l=Se(c[n>>2]|0,R,m)|0;c[n+36>>2]=(c[R>>2]|0)-(m&65535);b[o>>1]=b[o>>1]|2;m=C}else{m=C;l=7}}else{m=C;l=7}}else{m=C;l=7}}else{m=C;l=j}}else{m=C;l=j}}else{m=0;l=j}while(0);a[g+164>>0]=0;c[H>>2]=I;k=E;c[k>>2]=F;c[k+4>>2]=G;c[J>>2]=K;c[M>>2]=N;a[O>>0]=P;k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];j=k+22|0;if(!(b[j>>1]&2)){P=k+32|0;R=k+36|0;Q=(c[P>>2]|0)-(c[R>>2]|0)|0;Se(c[k>>2]|0,P,Q)|0;c[R>>2]=(c[P>>2]|0)-(Q&65535);b[j>>1]=b[j>>1]|2}a[S>>0]=1;if(m|0){S=m+4|0;ug(c[S>>2]|0);c[S>>2]=0;c[m+12>>2]=0}$b(g);g=l;Ra=T;return g|0}function lh(a){a=a|0;var c=0;c=a+8|0;if(!(b[c>>1]&9216)){b[c>>1]=1;b[c>>1]=4;return a|0}else{Dg(a);b[c>>1]=4;return a|0}return 0}function mh(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=a+8|0;do Dg(a);while((b[f>>1]&9216)!=0);c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];if(b[d+8>>1]&2048)return;b[f>>1]=b[f>>1]&-7169&65535|e;return}function nh(d){d=d|0;var e=0,f=0,g=0,h=0;g=d+8|0;f=b[g>>1]|0;h=d+12|0;do if(f&16384){e=(c[d>>2]|0)+(c[h>>2]|0)|0;if((e|0)<1)if(!(f&16))break;else e=1;if(!(Eg(d,e,1)|0)){gw((c[d+16>>2]|0)+(c[h>>2]|0)|0,0,c[d>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+(c[d>>2]|0);b[g>>1]=b[g>>1]&-16897}}while(0);e=d+16|0;f=d+10|0;if(!(Lg(c[e>>2]|0,d,c[h>>2]|0,a[f>>0]|0)|0)){d=0;return d|0}d=(Og(c[e>>2]|0,d,c[h>>2]|0,a[f>>0]|0)|0)==0;d=d?4:8;return d|0}function oh(d){d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;l=o+8|0;m=o;n=d+8|0;e=b[n>>1]|0;if(e&13){m=e;m=m&-16403;b[n>>1]=m;Ra=o;return}j=d+16|0;k=d+12|0;e=d+10|0;f=Og(c[j>>2]|0,d,c[k>>2]|0,a[e>>0]|0)|0;if(f){i=d;h=c[i>>2]|0;i=c[i+4>>2]|0;Lg(c[j>>2]|0,d,c[k>>2]|0,a[e>>0]|0)|0;if((f|0)==1?(g[l>>3]=+g[d>>3],g[m>>3]=+(h>>>0)+4294967296.0*+(i|0),(Lu(l,m,8)|0)==0):0){e=d;c[e>>2]=h;c[e+4>>2]=i;e=4}else e=8}else e=4;m=b[n>>1]&15904|e;b[n>>1]=m;m=m&-16403;b[n>>1]=m;Ra=o;return}function ph(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+80|0;n=p+40|0;o=p;i=f+4|0;h=a[i>>0]|0;if((a[d+10>>0]|0)==h<<24>>24){o=_a[c[f+12>>2]&127](c[f+8>>2]|0,c[d+12>>2]|0,c[d+16>>2]|0,c[e+12>>2]|0,c[e+16>>2]|0)|0;Ra=p;return o|0}m=c[d+32>>2]|0;j=n+8|0;c[n+32>>2]=m;k=n+24|0;c[k>>2]=0;l=o+8|0;b[l>>1]=1;c[o+32>>2]=m;m=o+24|0;c[m>>2]=0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[n+16>>2]=c[d+16>>2];if(!(b[d+8>>1]&2048))b[j>>1]=b[j>>1]&-7169|4096;c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];c[o+16>>2]=c[e+16>>2];if(!(b[e+8>>1]&2048))b[l>>1]=b[l>>1]&-7169|4096;d=b[j>>1]|0;if((d&514)==514?(a[n+10>>0]|0)==h<<24>>24:0)e=c[n+16>>2]|0;else if(!(d&1)){e=Gg(n,h)|0;h=a[i>>0]|0}else e=0;d=b[l>>1]|0;if((d&514)==514?(a[o+10>>0]|0)==h<<24>>24:0){d=c[o+16>>2]|0;h=17}else if(!(d&1)){d=Gg(o,h)|0;h=17}else h=18;if((h|0)==17)if((e|0)==0|(d|0)==0)h=18;else d=_a[c[f+12>>2]&127](c[f+8>>2]|0,c[n+12>>2]|0,e,c[o+12>>2]|0,d)|0;if((h|0)==18)if(!g)d=0;else{a[g>>0]=7;d=0}if(!((b[j>>1]&9216)==0&(c[k>>2]|0)==0))Cg(n);if(!((b[l>>1]&9216)==0&(c[m>>2]|0)==0))Cg(o);o=d;Ra=p;return o|0}function qh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=c[d+12>>2]|0;i=c[e+12>>2]|0;f=b[d+8>>1]|0;g=b[e+8>>1]|0;if(!((g|f)&16384)){e=Lu(c[d+16>>2]|0,c[e+16>>2]|0,(h|0)>(i|0)?i:h)|0;return ((e|0)==0?h-i|0:e)|0}f=f&16384;if((f&g)<<16>>16){i=(c[d>>2]|0)-(c[e>>2]|0)|0;return i|0}if(!(f<<16>>16)){g=c[d+16>>2]|0;a:do if((h|0)>0){f=0;while(1){if(a[g+f>>0]|0){f=1;break}f=f+1|0;if((f|0)>=(h|0))break a}return f|0}while(0);i=h-(c[e>>2]|0)|0;return i|0}else{g=c[e+16>>2]|0;b:do if((i|0)>0){f=0;while(1){if(a[g+f>>0]|0){f=-1;break}f=f+1|0;if((f|0)>=(i|0))break b}return f|0}while(0);i=(c[d>>2]|0)-i|0;return i|0}return 0}function rh(b){b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;f=g;d=g+12|0;e=b+64|0;e=Xg(c[b+40>>2]|0,0,c[e>>2]|0,c[e+4>>2]|0,0,d)|0;if(e|0){f=e;Ra=g;return f|0}if(!(c[d>>2]|0)){a[b+3>>0]=0;c[b+28>>2]=0;f=0;Ra=g;return f|0}else{c[f>>2]=32306;c[f+4>>2]=79626;c[f+8>>2]=31517;Db(11,32001,f);f=11;Ra=g;return f|0}return 0}function sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;f=i;g=c[b+40>>2]|0;d=a[g>>0]|0;do if((d&255)>2){c[f>>2]=0;if(d<<24>>24==4){d=c[g+4>>2]|0;if(!d)d=0;else h=19}else{a[g>>0]=1;d=c[7389]|0;if((d|0)!=0?(Wa[d&127](410)|0)!=0:0)d=10;else{e=g+16|0;d=g+56|0;d=th(g,c[e>>2]|0,c[d>>2]|0,c[d+4>>2]|0,0,f)|0;if(!d){d=c[e>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{j=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[e>>2]=0;e=c[f>>2]|0;d=g+4|0;if(!e)if(!(c[d>>2]|0))d=a[g>>0]|0;else h=14;else{c[d>>2]=e;h=14}if((h|0)==14){d=a[g>>0]|0;if(!(d<<24>>24)){a[g>>0]=2;d=2}}h=20;break}}h=19}c[b+28>>2]=0}else h=20;while(0);if((h|0)==20){c[b+28>>2]=0;if(!(d<<24>>24)){j=0;Ra=i;return j|0}else d=0}a[b+2>>0]=1;j=d;Ra=i;return j|0}function th(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;r=t;if(!f){s=Xg(d,0,g,h,i,j)|0;Ra=t;return s|0}s=d+112|0;q=c[s>>2]|0;p=q+6|0;n=((e[p>>1]|0)*40|0)+56|0;m=c[q+12>>2]|0;a:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;o=26;break}m=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){n=c[14978]|0;l=Tv(k|0,l|0,m|0,((m|0)<0)<<31>>31|0)|0;k=L()|0;c[14768]=((k|0)<0|(k|0)==0&l>>>0<=n>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){s=7;Ra=t;return s|0}k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){s=7;Ra=t;return s|0}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];o=m+284|0;c[o>>2]=(c[o>>2]|0)+1;o=26;break a}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];o=m+284|0;c[o>>2]=(c[o>>2]|0)+1;o=26;break a}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;o=26}while(0);if((o|0)==26)if(!k){s=7;Ra=t;return s|0}else m=k;c[m+4>>2]=m+16;c[m>>2]=q;o=m+8|0;b[o>>1]=(e[p>>1]|0)+1;_g(q,g,f,m);p=b[o>>1]|0;if(p<<16>>16!=0?(p&65535)<=(e[q+8>>1]|0):0)l=Xg(d,m,g,h,i,j)|0;else{c[r>>2]=32306;c[r+4>>2]=64001;c[r+8>>2]=31517;Db(11,32001,r);l=11}k=c[(c[s>>2]|0)+12>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,m);s=l;Ra=t;return s|0}s=m;if((c[k+304>>2]|0)>>>0<=s>>>0?(c[k+308>>2]|0)>>>0>s>>>0:0){s=k+300|0;c[m>>2]=c[s>>2];c[s>>2]=m;s=l;Ra=t;return s|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);s=l;Ra=t;return s|0}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);s=l;Ra=t;return s|0}return 0}function uh(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;h=l;k=g+8|0;b[k>>1]=1;j=c[d+20>>2]|0;j=Yv(c[j+44>>2]|0,0,c[j+32>>2]|0,0)|0;i=L()|0;if(i>>>0<0|(i|0)==0&j>>>0<(f+e|0)>>>0){c[h>>2]=32306;c[h+4>>2]=75549;c[h+8>>2]=31517;Db(11,32001,h);k=11;Ra=l;return k|0}h=f+1|0;j=g+24|0;do if((c[j>>2]|0)<(h|0)){h=Eg(g,h,0)|0;if(!h){h=g+16|0;i=h;h=c[h>>2]|0;break}else{k=h;Ra=l;return k|0}}else{h=c[g+20>>2]|0;i=g+16|0;c[i>>2]=h;b[k>>1]=1}while(0);h=cg(d,e,f,h,0)|0;if(!h){a[(c[i>>2]|0)+f>>0]=0;b[k>>1]=16;c[g+12>>2]=f;k=0;Ra=l;return k|0}if((b[k>>1]&9216)==0?(c[j>>2]|0)==0:0){k=h;Ra=l;return k|0}Cg(g);k=h;Ra=l;return k|0}function vh(a,e,f){a=a|0;e=e|0;f=f|0;var i=0,j=0,k=0,l=0,m=0;l=Ra;Ra=Ra+16|0;j=l+8|0;k=l;i=(d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0);a=(d[a+5>>0]|0)<<16|(d[a+4>>0]|0)<<24|(d[a+6>>0]|0)<<8|(d[a+7>>0]|0);m=f;c[m>>2]=a;c[m+4>>2]=i;if((e|0)==6){k=4;m=f+8|0;b[m>>1]=k;Ra=l;return}c[h>>2]=a;c[h+4>>2]=i;g[j>>3]=+g[h>>3];g[k>>3]=+g[j>>3];k=+g[j>>3]==+g[k>>3]?8:1;m=f+8|0;b[m>>1]=k;Ra=l;return}function wh(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;g=h;if(d>>>0>16777215|(d|0)==16777215&c>>>0>4294967295){a[b+8>>0]=c;g=bw(c|0,d|0,8)|0;L()|0;a[b+7>>0]=g&255|-128;g=bw(c|0,d|0,15)|0;L()|0;a[b+6>>0]=g&255|-128;g=bw(c|0,d|0,22)|0;L()|0;a[b+5>>0]=g&255|-128;g=bw(c|0,d|0,29)|0;L()|0;a[b+4>>0]=g&255|-128;g=bw(c|0,d|0,36)|0;L()|0;a[b+3>>0]=g&255|-128;g=bw(c|0,d|0,43)|0;L()|0;a[b+2>>0]=g&255|-128;g=bw(c|0,d|0,50)|0;L()|0;a[b+1>>0]=g&255|-128;g=bw(c|0,d|0,57)|0;L()|0;a[b>>0]=g&255|-128;g=9;Ra=h;return g|0}e=0;f=c;while(1){c=e+1|0;a[g+e>>0]=f&255|-128;f=bw(f|0,d|0,7)|0;d=L()|0;if((f|0)==0&(d|0)==0)break;else e=c}a[g>>0]=a[g>>0]&127;d=0;while(1){a[b+d>>0]=a[g+e>>0]|0;if((e|0)>0){e=e+-1|0;d=d+1|0}else break}Ra=h;return c|0}function xh(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=Ra;Ra=Ra+32|0;n=o+16|0;i=o;m=e+68|0;f=a[m>>0]|0;do if(f<<24>>24>-1){h=e+116|0;g=c[h>>2]|0;if(!(f<<24>>24)){f=h;j=26}else{g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);f=a[m>>0]|0}else{l=c[g+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[g+16>>2]=c[l>>2];c[l>>2]=g}f=f+-1<<24>>24;a[m>>0]=f;if(f<<24>>24)do{g=c[(c[e+120+(f<<24>>24<<2)>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);f=a[m>>0]|0}else{l=c[g+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[g+16>>2]=c[l>>2];c[l>>2]=g}f=f+-1<<24>>24;a[m>>0]=f}while(f<<24>>24!=0);k=c[e+120>>2]|0;c[h>>2]=k;f=h;l=k}}else{h=e+64|0;f=c[h>>2]|0;if(!f){a[e>>0]=1;n=16;Ra=o;return n|0}g=a[e>>0]|0;if((g&255)>2){if(g<<24>>24==4){n=c[e+4>>2]|0;Ra=o;return n|0}f=e+16|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[f>>2]=0;a[e>>0]=1;f=c[h>>2]|0}h=e+116|0;f=yh(c[(c[e+8>>2]|0)+4>>2]|0,f,h,0,d[e+2>>0]|0)|0;if(!f){a[m>>0]=0;g=c[h>>2]|0;a[e+69>>0]=a[g+2>>0]|0;f=h;j=26;break}a[e>>0]=1;n=f;Ra=o;return n|0}while(0);do if((j|0)==26){if(a[g>>0]|0?((c[e+112>>2]|0)==0|0)==(d[g+2>>0]|0):0){l=g;k=g;break}c[i>>2]=32306;c[i+4>>2]=68367;c[i+8>>2]=31517;Db(11,32001,i);n=11;Ra=o;return n|0}while(0);g=e+70|0;b[g>>1]=0;h=e+50|0;b[h>>1]=0;i=e+1|0;j=a[i>>0]&-15;a[i>>0]=j;if(b[k+24>>1]|0){a[e>>0]=0;n=0;Ra=o;return n|0}if(a[k+8>>0]|0){a[e>>0]=1;n=16;Ra=o;return n|0}if((c[k+4>>2]|0)==1){n=(c[k+56>>2]|0)+((d[k+9>>0]|0)+8)|0;p=a[n>>0]|0;q=a[n+1>>0]|0;k=a[n+2>>0]|0;n=a[n+3>>0]|0;a[e>>0]=0;r=c[e+20>>2]|0;b[h>>1]=0;a[i>>0]=j;b[e+72>>1]=0;c[e+120>>2]=l;b[g>>1]=0;a[m>>0]=1;n=yh(r,(q&255)<<16|(p&255)<<24|(k&255)<<8|n&255,f,e,d[e+2>>0]|0)|0;Ra=o;return n|0}else{c[n>>2]=32306;c[n+4>>2]=68380;c[n+8>>2]=31517;Db(11,32001,n);r=11;Ra=o;return r|0}return 0}function yh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+32|0;l=n+16|0;i=n;j=n+28|0;do if((c[d+44>>2]|0)>>>0>=e>>>0){k=c[d>>2]|0;h=Za[c[k+204>>2]&127](k,e,j,h)|0;if(!h){k=c[j>>2]|0;i=k+8|0;h=c[i>>2]|0;c[f>>2]=h;if(!(a[h>>0]|0)){i=c[i>>2]|0;j=i+4|0;if((c[j>>2]|0)!=(e|0)){c[i+56>>2]=c[k+4>>2];c[i+72>>2]=k;c[i+52>>2]=d;c[j>>2]=e;a[i+9>>0]=(e|0)==1?100:0;h=c[f>>2]|0}h=Gf(h)|0;if(!h)m=8}else m=8;if((m|0)==8){if(!g){g=0;Ra=n;return g|0}m=c[f>>2]|0;if(b[m+24>>1]|0?(a[m+2>>0]|0)==(a[g+69>>0]|0):0){g=0;Ra=n;return g|0}c[l>>2]=32306;c[l+4>>2]=65376;c[l+8>>2]=31517;Db(11,32001,l);h=11}i=c[f>>2]|0;if(i){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{m=c[i+20>>2]|0;f=m+120|0;c[f>>2]=(c[f>>2]|0)+-1;m=m+136|0;c[i+16>>2]=c[m>>2];c[m>>2]=i;break}}}}else{c[i>>2]=32306;c[i+4>>2]=65355;c[i+8>>2]=31517;Db(11,32001,i);h=11}while(0);if(!g){g=h;Ra=n;return g|0}f=g+68|0;m=(a[f>>0]|0)+-1<<24>>24;a[f>>0]=m;c[g+116>>2]=c[g+120+(m<<24>>24<<2)>>2];g=h;Ra=n;return g|0}function zh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+80|0;m=z+56|0;x=z+40|0;k=z+24|0;l=z+68|0;p=z;if((c[f+44>>2]|0)>>>0<g>>>0){c[k>>2]=32306;c[k+4>>2]=72344;c[k+8>>2]=31517;Db(11,32001,k);y=11;Ra=z;return y|0}g=yh(f,g,l,0,0)|0;if(g|0){y=g;Ra=z;return y|0}w=c[l>>2]|0;v=w+1|0;if(a[v>>0]|0){c[m>>2]=32306;c[m+4>>2]=72349;c[m+8>>2]=31517;Db(11,32001,m);a[v>>0]=0;if(!w){y=11;Ra=z;return y|0}else j=11}else{a[v>>0]=1;t=w+9|0;s=d[t>>0]|0;u=w+24|0;a:do if(!(b[u>>1]|0)){g=0;r=w+8|0;y=13}else{l=w+56|0;m=w+26|0;n=w+64|0;o=w+8|0;k=0;do{g=(c[n>>2]|0)+(k<<1)|0;g=(c[l>>2]|0)+((d[g>>0]<<8|d[g+1>>0])&e[m>>1])|0;if((a[o>>0]|0)==0?(q=zh(f,d[g+1>>0]<<16|d[g>>0]<<24|d[g+2>>0]<<8|d[g+3>>0],1,i)|0,q|0):0){j=q;break a}g=Ah(w,g,p)|0;k=k+1|0;if(g|0){j=g;break a}g=b[u>>1]|0}while(k>>>0<(g&65535)>>>0);g=g&65535;r=o;y=13}while(0);b:do if((y|0)==13){if(!(a[r>>0]|0)){g=(c[w+56>>2]|0)+(s+8)|0;g=zh(f,d[g+1>>0]<<16|d[g>>0]<<24|d[g+2>>0]<<8|d[g+3>>0],1,i)|0;if(g|0){j=g;break}}else if(i|0)c[i>>2]=(c[i>>2]|0)+g;if(h|0){j=Bh(c[w+52>>2]|0,w,c[w+4>>2]|0)|0;break}g=c[w+72>>2]|0;k=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){j=Ve(g)|0;y=27}}else y=23;do if((y|0)==23){j=c[k+40>>2]|0;if(j|0)break b;if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){j=Wf(g)|0;y=27;break}else{j=Xf(g)|0;y=27;break}}while(0);if((y|0)==27?j|0:0)break;f=c[w+56>>2]|0;j=a[f+s>>0]|8;o=j&255;l=w+52|0;q=c[l>>2]|0;k=d[t>>0]|0;if(!(b[q+22>>1]&12)){g=f+k|0;p=q+36|0}else{p=q+36|0;g=f+k|0;gw(g|0,0,(c[p>>2]|0)-k|0)|0}a[g>>0]=j;m=k+8|0;n=m&65535;g=f+(k+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[f+(k+7)>>0]=0;g=f+(k+5)|0;a[g>>0]=(c[p>>2]|0)>>>8;a[g+1>>0]=c[p>>2];c[w+20>>2]=(c[p>>2]|0)-m&65535;g=o>>>3;a[r>>0]=g;g=4-(g<<2)&255;j=w+10|0;a[j>>0]=g;c[w+76>>2]=120;k=c[l>>2]|0;switch((o&247)<<24>>24){case 5:{a[w+2>>0]=1;a[w+3>>0]=1;c[w+80>>2]=180;b[w+14>>1]=b[k+28>>1]|0;j=k+30|0;y=35;break}case 2:{a[w+2>>0]=0;a[w+3>>0]=0;c[w+80>>2]=179;b[w+14>>1]=b[k+24>>1]|0;j=k+26|0;y=35;break}default:{c[x>>2]=32306;c[x+4>>2]=65035;c[x+8>>2]=31517;Db(11,32001,x);g=a[j>>0]|0}}if((y|0)==35){b[w+16>>1]=b[j>>1]|0;a[w+11>>0]=a[k+21>>0]|0}b[w+18>>1]=n;c[w+60>>2]=f+(c[p>>2]|0);c[w+64>>2]=f+m;c[w+68>>2]=f+(g&255);a[w+12>>0]=0;b[w+26>>1]=(c[q+32>>2]|0)+65535;b[u>>1]=0;a[w>>0]=1;j=0}while(0);a[v>>0]=0}g=c[w+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);y=j;Ra=z;return y|0}else{y=c[g+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[g+16>>2]=c[y>>2];c[y>>2]=g;y=j;Ra=z;return y|0}return 0}function Ah(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+64|0;s=t+32|0;r=t+16|0;i=t;o=t+48|0;p=t+44|0;cb[c[f+80>>2]&255](f,g,h);k=e[h+16>>1]|0;j=c[h+12>>2]|0;if((j|0)==(k|0)){s=0;Ra=t;return s|0}g=g+(e[h+18>>1]|0)|0;if(g>>>0>(c[f+60>>2]|0)>>>0){c[i>>2]=32306;c[i+4>>2]=69515;c[i+8>>2]=31517;Db(11,32001,i);s=11;Ra=t;return s|0}h=g+-4|0;n=c[f+52>>2]|0;i=(c[n+36>>2]|0)+-4|0;g=j+~k+i|0;if(i>>>0>g>>>0){s=0;Ra=t;return s|0}l=n+44|0;f=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];j=(g>>>0)/(i>>>0)|0;while(1){j=j+-1|0;c[o>>2]=0;c[p>>2]=0;if(f>>>0<2){m=8;break}if(f>>>0>(c[l>>2]|0)>>>0){m=8;break}k=(j|0)==0;if(!k){g=dg(n,f,p,o)|0;if(g|0)break;g=c[p>>2]|0;if(g)m=20;else m=12}else m=12;a:do if((m|0)==12){g=(c[n>>2]|0)+212|0;i=Ya[c[29436>>2]&127](c[(c[g>>2]|0)+44>>2]|0,f,0)|0;do if(i|0){g=c[g>>2]|0;h=c[i+4>>2]|0;if(!(c[h>>2]|0)){g=sf(g,f,i)|0;if(!g)break;else h=g}else{m=g+12|0;c[m>>2]=(c[m>>2]|0)+1;m=h+30|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16}g=c[h+8>>2]|0;i=g+4|0;if((c[i>>2]|0)==(f|0)){c[p>>2]=g;if(!g){m=22;break a}else{m=20;break a}}else{c[g+56>>2]=c[h+4>>2];c[g+72>>2]=h;c[g+52>>2]=n;c[i>>2]=f;a[g+9>>0]=0;c[p>>2]=g;m=20;break a}}while(0);c[p>>2]=0;g=0;m=22}while(0);if((m|0)==20){m=0;if((b[(c[g+72>>2]|0)+30>>1]|0)==1)m=22;else{c[s>>2]=32306;c[s+4>>2]=69552;c[s+8>>2]=31517;Db(11,32001,s);g=11}}if((m|0)==22){m=0;g=Bh(n,g,f)|0}h=c[p>>2]|0;do if(h|0?(q=c[h+72>>2]|0,q|0):0)if(!(b[q+28>>1]&32)){Df(q);break}else{f=c[q+20>>2]|0;i=f+120|0;c[i>>2]=(c[i>>2]|0)+-1;f=f+136|0;c[q+16>>2]=c[f>>2];c[f>>2]=q;break}while(0);if((g|0)!=0|k){m=30;break}else f=c[o>>2]|0}if((m|0)==8){c[r>>2]=32306;c[r+4>>2]=69532;c[r+8>>2]=31517;Db(11,32001,r);g=11}else if((m|0)==30){Ra=t;return g|0}s=g;Ra=t;return s|0}function Bh(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+48|0;r=B+16|0;j=B;s=B+32|0;A=B+28|0;m=c[f+12>>2]|0;if(h>>>0>=2?(x=f+44|0,(c[x>>2]|0)>>>0>=h>>>0):0){do if(!g){g=(c[f>>2]|0)+212|0;k=Ya[c[29436>>2]&127](c[(c[g>>2]|0)+44>>2]|0,h,0)|0;if(k){g=c[g>>2]|0;j=c[k+4>>2]|0;if(!(c[j>>2]|0)){g=sf(g,h,k)|0;if(!g){g=0;break}else j=g}else{z=g+12|0;c[z>>2]=(c[z>>2]|0)+1;z=j+30|0;b[z>>1]=(b[z>>1]|0)+1<<16>>16}g=c[j+8>>2]|0;k=g+4|0;if((c[k>>2]|0)!=(h|0)){c[g+56>>2]=c[j+4>>2];c[g+72>>2]=j;c[g+52>>2]=f;c[k>>2]=h;a[g+9>>0]=0}}else g=0}else{z=c[g+72>>2]|0;q=z+30|0;b[q>>1]=(b[q>>1]|0)+1<<16>>16;z=(c[z+12>>2]|0)+12|0;c[z>>2]=(c[z>>2]|0)+1}while(0);k=c[m+72>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[A>>2]=0;z=23;break}else{j=Ve(k)|0;z=22;break}else z=17;while(0);do if((z|0)==17){j=c[l+40>>2]|0;if(j|0){c[A>>2]=j;i=0;z=105;break}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(k)|0;z=22;break}else{j=Xf(k)|0;z=22;break}}while(0);if((z|0)==22){c[A>>2]=j;if(!j)z=23;else{i=0;z=105}}a:do if((z|0)==23){q=m+56|0;p=c[q>>2]|0;j=p+36|0;k=p+37|0;m=p+38|0;p=p+39|0;l=d[k>>0]<<16|d[j>>0]<<24|d[m>>0]<<8|d[p>>0];o=l+1|0;a[j>>0]=o>>>24;a[k>>0]=o>>>16;a[m>>0]=o>>>8;a[p>>0]=o;p=f+22|0;if(!(b[p>>1]&4))m=g;else{if(!g){g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,h,s,0)|0;if(g|0){c[A>>2]=g;break}i=c[s>>2]|0;g=c[i+8>>2]|0;j=g+4|0;if((c[j>>2]|0)!=(h|0)){c[g+56>>2]=c[i+4>>2];c[g+72>>2]=i;c[g+52>>2]=f;c[j>>2]=h;a[g+9>>0]=0}c[A>>2]=0}j=c[g+72>>2]|0;k=c[j+20>>2]|0;do if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[A>>2]=0;break}else{n=Ve(j)|0;z=40;break}else z=35;while(0);do if((z|0)==35){i=c[k+40>>2]|0;if(i|0){c[A>>2]=i;i=0;z=105;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){n=Wf(j)|0;z=40;break}else{n=Xf(j)|0;z=40;break}}while(0);if((z|0)==40?(c[A>>2]=n,n|0):0){i=0;z=105;break}gw(c[g+56>>2]|0,0,c[(c[g+52>>2]|0)+32>>2]|0)|0;m=g}if(a[f+17>>0]|0?(ig(f,h,2,0,A),c[A>>2]|0):0){i=0;g=m;z=105;break}if(l){n=c[q>>2]|0;n=d[n+33>>0]<<16|d[n+32>>0]<<24|d[n+34>>0]<<8|d[n+35>>0];g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,n,s,0)|0;if(g|0){c[A>>2]=g;i=0;g=m;z=105;break}g=c[s>>2]|0;i=c[g+8>>2]|0;j=i+4|0;if((c[j>>2]|0)==(n|0)){g=i+56|0;l=g;g=c[g>>2]|0}else{o=c[g+4>>2]|0;l=i+56|0;c[l>>2]=o;c[i+72>>2]=g;c[i+52>>2]=f;c[j>>2]=n;a[i+9>>0]=(n|0)==1?100:0;g=o}c[A>>2]=0;o=d[g+5>>0]<<16|d[g+4>>0]<<24|d[g+6>>0]<<8|d[g+7>>0];j=(c[f+36>>2]|0)>>>2;if(o>>>0>(j+-2|0)>>>0){c[r>>2]=32306;c[r+4>>2]=69422;c[r+8>>2]=31517;Db(11,32001,r);c[A>>2]=11;g=m;z=105;break}if(o>>>0<(j+-8|0)>>>0){j=c[i+72>>2]|0;k=c[j+20>>2]|0;do if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[A>>2]=0;break}else{g=Ve(j)|0;z=63;break}else z=58;while(0);do if((z|0)==58){g=c[k+40>>2]|0;if(g|0){c[A>>2]=g;g=m;z=105;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){g=Wf(j)|0;z=63;break}else{g=Xf(j)|0;z=63;break}}while(0);if((z|0)==63){c[A>>2]=g;if(g|0){g=m;z=105;break}g=c[l>>2]|0}z=o+1|0;a[g+4>>0]=z>>>24;a[g+5>>0]=z>>>16;a[g+6>>0]=z>>>8;a[g+7>>0]=z;z=(c[l>>2]|0)+((o<<2)+8)|0;a[z>>0]=h>>>24;a[z+1>>0]=h>>>16;a[z+2>>0]=h>>>8;a[z+3>>0]=h;do if(((m|0?(b[p>>1]&4)==0:0)?(t=c[m+72>>2]|0,u=c[t+20>>2]|0,(a[u+12>>0]|0)==0):0)?(v=t+28|0,w=e[v>>1]|0,w&2|0):0){if(c[u+96>>2]|0)break;b[v>>1]=w&65515|16}while(0);n=f+60|0;g=c[n>>2]|0;do if(!g){l=c[x>>2]|0;do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](512)|0;if(!g)z=83;else z=84}else{g=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){z=c[14978]|0;f=Tv(j|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&f>>>0<=z>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){z=83;break}j=Wa[c[29352>>2]&127](g)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){z=84;break}c[14987]=j;z=84}while(0);if((z|0)==83){c[n>>2]=0;g=7;break}else if((z|0)==84){gw(g+4|0,0,508)|0;c[g>>2]=l;c[n>>2]=g;z=85;break}}else z=85;while(0);if((z|0)==85)if((c[g>>2]|0)>>>0<h>>>0)g=0;else g=df(g,h)|0;c[A>>2]=g;g=m;z=105;break}}else{n=0;i=0}if(!m){g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,h,s,0)|0;if(g|0){c[A>>2]=g;z=111;break}j=c[s>>2]|0;g=c[j+8>>2]|0;k=g+4|0;if((c[k>>2]|0)!=(h|0)){c[g+56>>2]=c[j+4>>2];c[g+72>>2]=j;c[g+52>>2]=f;c[k>>2]=h;a[g+9>>0]=0}c[A>>2]=0;m=g}g=m+72|0;k=c[g>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[A>>2]=0;break}else{y=Ve(k)|0;z=104;break}else z=99;while(0);do if((z|0)==99){j=c[l+40>>2]|0;if(j|0){c[A>>2]=j;g=m;z=105;break a}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){y=Wf(k)|0;z=104;break}else{y=Xf(k)|0;z=104;break}}while(0);if((z|0)==104?(c[A>>2]=y,y|0):0){g=m;z=105;break}z=m+56|0;f=c[z>>2]|0;a[f>>0]=n>>>24;a[f+1>>0]=n>>>16;a[f+2>>0]=n>>>8;a[f+3>>0]=n;z=(c[z>>2]|0)+4|0;a[z>>0]=0;a[z+1>>0]=0;a[z+2>>0]=0;a[z+3>>0]=0;z=c[q>>2]|0;a[z+32>>0]=h>>>24;a[z+33>>0]=h>>>16;a[z+34>>0]=h>>>8;a[z+35>>0]=h;a[m>>0]=0;if(!m)z=111;else z=108}while(0);if((z|0)==105)if(!g)z=111;else{a[g>>0]=0;g=g+72|0;z=108}do if((z|0)==108){g=c[g>>2]|0;if(!(b[g+28>>1]&32)){Df(g);z=111;break}else{z=c[g+20>>2]|0;h=z+120|0;c[h>>2]=(c[h>>2]|0)+-1;z=z+136|0;c[g+16>>2]=c[z>>2];c[z>>2]=g;z=111;break}}while(0);do if((z|0)==111?i|0:0){g=c[i+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{h=c[g+20>>2]|0;z=h+120|0;c[z>>2]=(c[z>>2]|0)+-1;h=h+136|0;c[g+16>>2]=c[h>>2];c[h>>2]=g;break}}while(0);A=c[A>>2]|0;Ra=B;return A|0}c[j>>2]=32306;c[j+4>>2]=69368;c[j+8>>2]=31517;Db(11,32001,j);A=11;Ra=B;return A|0}function Ch(a,b,c){a=a|0;b=b|0;c=c|0;return Fh(a,b,c,0)|0}function Dh(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=f+(a[f>>0]&63)|0;switch(a[f+1>>0]|0){case 1:{k=a[h>>0]|0;j=((k|0)<0)<<31>>31;break}case 2:{k=a[h>>0]<<8|d[h+1>>0];j=((k|0)<0)<<31>>31;break}case 3:{k=d[h+1>>0]<<8|a[h>>0]<<16|d[h+2>>0];j=((k|0)<0)<<31>>31;break}case 4:{k=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];j=((k|0)<0)<<31>>31;break}case 5:{k=h+2|0;j=a[h>>0]<<8|d[h+1>>0];k=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];break}case 6:{k=h+4|0;j=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];k=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];break}case 8:{j=0;k=0;break}case 9:{j=0;k=1;break}case 7:case 0:{g=Fh(b,f,g,0)|0;return g|0}default:{g=Fh(b,f,g,0)|0;return g|0}}i=c[g+4>>2]|0;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>(j|0)|(i|0)==(j|0)&h>>>0>k>>>0){g=a[g+12>>0]|0;return g|0}if((i|0)<(j|0)|(i|0)==(j|0)&h>>>0<k>>>0){g=a[g+13>>0]|0;return g|0}if((e[g+8>>1]|0)>1){g=Fh(b,f,g,1)|0;return g|0}else{f=a[g+10>>0]|0;a[g+14>>0]=1;g=f;return g|0}return 0}function Eh(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+32|0;o=p+8|0;j=p;k=f+1|0;i=a[k>>0]|0;l=i&255;do if(i<<24>>24<=-1){h=d[f+2>>0]|0;if(!(h&128)){n=l<<7&16256|h;m=7;break}i=d[f+3>>0]|0;if(i&128){Of(k,j)|0;l=j;h=c[l>>2]|0;if((h|0)==(h|0)?0==(c[l+4>>2]|0):0){n=h;m=7;break}else break}else{n=(l<<14|i)&2080895|h<<7&16256;m=7;break}}else{n=l;m=7}while(0);if((m|0)==7?(n|0)>=12:0){if(!(n&1)){g=a[g+13>>0]|0;Ra=p;return g|0}h=d[f>>0]|0;j=(n+-12|0)/2|0;if((j+h|0)>(b|0)){c[o>>2]=32306;c[o+4>>2]=80874;c[o+8>>2]=31517;Db(11,32001,o);a[g+11>>0]=11;g=0;Ra=p;return g|0}o=c[g+4>>2]|0;i=c[o+12>>2]|0;h=Lu(f+h|0,c[o+16>>2]|0,(j|0)>(i|0)?i:j)|0;if(h|0)if((h|0)>0){g=a[g+13>>0]|0;Ra=p;return g|0}else{g=a[g+12>>0]|0;Ra=p;return g|0}h=j-i|0;if(!h)if((e[g+8>>1]|0)>1){g=Fh(b,f,g,1)|0;Ra=p;return g|0}else{f=a[g+10>>0]|0;a[g+14>>0]=1;g=f;Ra=p;return g|0}else if((h|0)>0){g=a[g+13>>0]|0;Ra=p;return g|0}else{g=a[g+12>>0]|0;Ra=p;return g|0}}g=a[g+12>>0]|0;Ra=p;return g|0}function Fh(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+96|0;O=P+80|0;N=P+64|0;q=P+48|0;K=P+40|0;M=P;p=c[i+4>>2]|0;if(!j){G=a[h>>0]|0;j=G&255;do if(G<<24>>24<=-1){k=d[h+1>>0]|0;if(!(k&128)){j=j<<7&16256|k;k=2;break}l=d[h+2>>0]|0;if(!(l&128)){j=(j<<14|l)&2080895|k<<7&16256;k=3;break}else{k=Of(h,K)|0;G=K;j=c[G>>2]|0;j=((j|0)==(j|0)?0==(c[G+4>>2]|0):0)?j:-1;break}}else k=1;while(0);m=j;r=0;k=k&255;l=j}else{m=h+1|0;G=a[m>>0]|0;j=G&255;do if(G<<24>>24>-1){l=d[h>>0]|0;k=2;w=12}else{k=d[h+2>>0]|0;do if(k&128){l=d[h+3>>0]|0;if(!(l&128)){j=(j<<14|l)&2080895|k<<7&16256;k=3;w=10;break}k=Of(m,K)|0;G=K;j=c[G>>2]|0;if((j|0)==(j|0)?0==(c[G+4>>2]|0):0)w=10;else{j=-1;l=d[h>>0]|0;k=(k&255)+1|0}}else{j=j<<7&16256|k;k=2;w=10}while(0);if((w|0)==10){k=(k&255)+1|0;l=d[h>>0]|0;if(j>>>0<=127){w=12;break}}j=(j+-12|0)>>>1}while(0);if((w|0)==12)j=d[3520+j>>0]|0;m=j+l|0;r=1;p=p+40|0}if(m>>>0>f>>>0){c[q>>2]=32306;c[q+4>>2]=80583;c[q+8>>2]=31517;Db(11,32001,q);a[i+11>>0]=11;i=0;Ra=P;return i|0}E=i+8|0;G=M+12|0;z=M+10|0;A=M+32|0;B=M+8|0;C=M+16|0;D=i+11|0;y=m;x=p;a:while(1){v=x+8|0;j=e[v>>1]|0;b:do if(j&4){j=a[h+k>>0]|0;q=j&255;if((j&255)>9){j=1;w=88;break a}switch(j<<24>>24){case 0:{j=-1;w=88;break a}case 7:{Ug(h+y|0,q,M)|0;m=x;j=c[m>>2]|0;m=c[m+4>>2]|0;o=+g[M>>3];if(!(o<-9223372036854775808.0))if(!(o>=9223372036854775808.0)?(I=~~o>>>0,J=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0,!((m|0)<(J|0)|(m|0)==(J|0)&j>>>0<I>>>0)):0)if(!((m|0)>(J|0)|(m|0)==(J|0)&j>>>0>I>>>0)){n=+(j>>>0)+4294967296.0*+(m|0);if(o>n)j=-1;else j=o<n&1}else j=1;else j=-1;else j=1;q=7;j=0-j|0;w=87;break b}default:{}}m=h+y|0;switch(j<<24>>24){case 6:{u=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];p=d[m+5>>0]<<16|d[m+4>>0]<<24|d[m+6>>0]<<8|d[m+7>>0];break}case 1:{p=a[m>>0]|0;u=((p|0)<0)<<31>>31;break}case 2:{p=a[m>>0]<<8|d[m+1>>0];u=((p|0)<0)<<31>>31;break}case 3:{p=d[m+1>>0]<<8|a[m>>0]<<16|d[m+2>>0];u=((p|0)<0)<<31>>31;break}case 4:{p=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];u=((p|0)<0)<<31>>31;break}case 5:{u=a[m>>0]<<8|d[m+1>>0];p=d[m+3>>0]<<16|d[m+2>>0]<<24|d[m+4>>0]<<8|d[m+5>>0];break}default:{u=0;p=q+-8|0}}m=x;j=c[m>>2]|0;m=c[m+4>>2]|0;if((u|0)<(m|0)|(u|0)==(m|0)&p>>>0<j>>>0){j=-1;w=88;break a}else{j=((u|0)>(m|0)|(u|0)==(m|0)&p>>>0>j>>>0)&1;w=87}}else{if(j&8|0){j=a[h+k>>0]|0;u=j&255;if((j&255)>9){j=1;w=88;break a}if(!(j<<24>>24)){j=-1;w=88;break a}Ug(h+y|0,u,M)|0;if(j<<24>>24==7){n=+g[M>>3];o=+g[x>>3];if(n<o){j=-1;w=88;break a}if(n>o){j=1;w=88;break a}else{j=7;break}}m=M;j=c[m>>2]|0;m=c[m+4>>2]|0;o=+g[x>>3];if(o<-9223372036854775808.0){j=1;w=88;break a}if(o>=9223372036854775808.0){j=-1;w=88;break a}p=~~o>>>0;q=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0;if((m|0)<(q|0)|(m|0)==(q|0)&j>>>0<p>>>0){j=-1;w=88;break a}if((m|0)>(q|0)|(m|0)==(q|0)&j>>>0>p>>>0){j=1;w=88;break a}n=+(j>>>0)+4294967296.0*+(m|0);if(o>n){j=-1;w=88;break a}else{q=u;j=o<n&1;w=87;break}}if(j&2|0){m=h+k|0;v=a[m>>0]|0;j=v&255;do if(v<<24>>24<=-1){p=d[m+1>>0]|0;if(!(p&128)){j=j<<7&16256|p;w=61;break}q=d[m+2>>0]|0;if(q&128){Of(m,K)|0;v=K;j=c[v>>2]|0;if((j|0)==(j|0)?0==(c[v+4>>2]|0):0){w=61;break}else{p=-1;break}}else{j=(j<<14|q)&2080895|p<<7&16256;w=61;break}}else w=61;while(0);if((w|0)==61){if(j>>>0<12){j=-1;w=88;break a}if(!(j&1)){j=1;w=88;break a}else p=j}u=(p+-12|0)>>>1;c[G>>2]=u;if((u+y|0)>>>0>f>>>0){w=65;break a}j=c[i>>2]|0;if(r>>>0>=(e[j+8>>1]|0)>>>0){w=65;break a}m=c[j+20+(r<<2)>>2]|0;if(!m){m=c[x+12>>2]|0;j=Lu(h+y|0,c[x+16>>2]|0,(u|0)<(m|0)?u:m)|0;if(!j){q=p;j=u-m|0;w=87;break}else{w=88;break a}}else{a[z>>0]=a[j+4>>0]|0;c[A>>2]=c[j+12>>2];b[B>>1]=2;c[C>>2]=h+y;q=p;j=ph(M,x,m,D)|0;w=87;break}}q=h+k|0;m=a[q>>0]|0;p=m&255;if(!(j&16)){q=p;j=m<<24>>24!=0&1;w=87;break}do if(m<<24>>24<=-1){j=d[q+1>>0]|0;if(!(j&128)){p=p<<7&16256|j;break}m=d[q+2>>0]|0;if(!(m&128)){p=(p<<14|m)&2080895|j<<7&16256;break}else{Of(q,K)|0;w=K;p=c[w>>2]|0;p=((p|0)==(p|0)?0==(c[w+4>>2]|0):0)?p:-1;break}}while(0);if(!(p>>>0>11&(p&1|0)==0)){j=-1;w=88;break a}u=(p+-12|0)>>>1;if((u+y|0)>>>0>f>>>0){w=85;break a}if(!(b[v>>1]&16384)){m=c[x+12>>2]|0;j=Lu(h+y|0,c[x+16>>2]|0,(u|0)<(m|0)?u:m)|0;if(!j){q=p;j=u-m|0;w=87;break}else{w=88;break a}}m=h+y|0;if(u|0){j=0;do{if(a[m+j>>0]|0){j=1;w=88;break a}j=j+1|0}while(j>>>0<u>>>0)}q=p;j=u-(c[x>>2]|0)|0;w=87}while(0);if((w|0)==87){w=0;if(!j)j=q;else{w=88;break}}r=r+1|0;if((r|0)==(e[E>>1]|0)){w=96;break}x=x+40|0;if(j>>>0>127)q=(j+-12|0)>>>1;else q=d[3520+j>>0]|0;p=1;m=0;while(1){j=bw(j|0,m|0,7)|0;m=L()|0;if((j|0)==0&(m|0)==0)break;else p=p+1|0}y=q+y|0;k=p+k|0;if(y>>>0>f>>>0|k>>>0>=l>>>0){w=96;break}}if((w|0)==65){c[N>>2]=32306;c[N+4>>2]=80658;c[N+8>>2]=31517;Db(11,32001,N);a[D>>0]=11;i=0;Ra=P;return i|0}else if((w|0)==85){c[O>>2]=32306;c[O+4>>2]=80688;c[O+8>>2]=31517;Db(11,32001,O);a[D>>0]=11;i=0;Ra=P;return i|0}else if((w|0)==88){i=(a[(c[(c[i>>2]|0)+16>>2]|0)+r>>0]|0)==0?j:0-j|0;Ra=P;return i|0}else if((w|0)==96){a[i+14>>0]=1;i=a[i+10>>0]|0;Ra=P;return i|0}return 0}function Gh(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;A=Ra;Ra=Ra+64|0;u=A+48|0;z=A+32|0;v=A+16|0;l=A;j=A+60|0;g=a[f>>0]|0;a:do if(g<<24>>24){do if((g&255)>2){c[j>>2]=0;if(g<<24>>24==4){g=c[f+4>>2]|0;if(!g)break a;else y=g;Ra=A;return y|0}a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,j)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[j>>2]|0;g=f+4|0;if(!h)if(!(c[g>>2]|0))k=a[f>>0]|0;else n=15;else{c[g>>2]=h;n=15}if((n|0)==15){g=a[f>>0]|0;if(!(g<<24>>24)){a[f>>0]=2;k=2}else k=g}g=k;break}}f=g;Ra=A;return f|0}while(0);switch(g<<24>>24){case 2:break;case 1:{f=101;Ra=A;return f|0}default:break a}a[f>>0]=0;if((c[f+4>>2]|0)>0){f=0;Ra=A;return f|0}}while(0);w=f+116|0;j=c[w>>2]|0;x=f+70|0;s=(b[x>>1]|0)+1<<16>>16;b[x>>1]=s;t=j;if(!(a[j>>0]|0)){c[l>>2]=32306;c[l+4>>2]=68870;c[l+8>>2]=31517;Db(11,32001,l);f=11;Ra=A;return f|0}r=(a[j+8>>0]|0)!=0;if((s&65535)<(e[j+24>>1]|0)){if(r){f=0;Ra=A;return f|0}m=f+68|0;n=f+20|0;o=f+50|0;p=f+1|0;q=f+2|0;h=j;l=t;while(1){k=b[x>>1]|0;g=(c[h+64>>2]|0)+((k&65535)<<1)|0;g=(c[h+56>>2]|0)+((d[g>>0]<<8|d[g+1>>0])&e[h+26>>1])|0;h=a[m>>0]|0;if(h<<24>>24>18){n=46;break}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];B=c[n>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;C=h<<24>>24;b[f+72+(C<<1)>>1]=k;c[f+120+(C<<2)>>2]=l;b[x>>1]=0;a[m>>0]=h+1<<24>>24;g=yh(B,g,w,f,d[q>>0]|0)|0;if(g|0){y=g;n=49;break}g=c[w>>2]|0;if(!(a[g+8>>0]|0)){h=g;l=g}else{y=0;n=49;break}}if((n|0)==46){c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);C=11;Ra=A;return C|0}else if((n|0)==49){Ra=A;return y|0}}if(r){k=f+68|0;l=f+50|0;m=f+1|0;while(1){h=a[k>>0]|0;if(!(h<<24>>24)){n=36;break}b[l>>1]=0;a[m>>0]=a[m>>0]&-7;g=b[f+72+((h<<24>>24)+-1<<1)>>1]|0;b[x>>1]=g;i=h+-1<<24>>24;a[k>>0]=i;i=c[f+120+(i<<24>>24<<2)>>2]|0;c[w>>2]=i;h=c[j+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);i=c[w>>2]|0;g=b[x>>1]|0}else{C=c[h+20>>2]|0;B=C+120|0;c[B>>2]=(c[B>>2]|0)+-1;C=C+136|0;c[h+16>>2]=c[C>>2];c[C>>2]=h}if((g&65535)<(e[i+24>>1]|0))break;else j=i}if((n|0)==36){a[f>>0]=1;C=101;Ra=A;return C|0}if(!(a[i+2>>0]|0)){C=0;Ra=A;return C|0}C=Yg(f,0)|0;Ra=A;return C|0}g=(c[j+56>>2]|0)+((d[j+9>>0]|0)+8)|0;o=f+68|0;h=a[o>>0]|0;if(h<<24>>24>18){c[v>>2]=32306;c[v+4>>2]=68229;c[v+8>>2]=31517;Db(11,32001,v);C=11;Ra=A;return C|0}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];l=f+20|0;C=c[l>>2]|0;m=f+50|0;b[m>>1]=0;n=f+1|0;a[n>>0]=a[n>>0]&-7;k=h<<24>>24;b[f+72+(k<<1)>>1]=s;c[f+120+(k<<2)>>2]=t;b[x>>1]=0;a[o>>0]=h+1<<24>>24;k=f+2|0;g=yh(C,g,w,f,d[k>>0]|0)|0;if(g|0){C=g;Ra=A;return C|0}while(1){g=c[w>>2]|0;if(a[g+8>>0]|0){y=0;n=49;break}h=b[x>>1]|0;i=(c[g+64>>2]|0)+((h&65535)<<1)|0;i=(c[g+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[g+26>>1])|0;j=a[o>>0]|0;if(j<<24>>24>18){n=32;break}C=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];B=c[l>>2]|0;b[m>>1]=0;a[n>>0]=a[n>>0]&-7;v=j<<24>>24;b[f+72+(v<<1)>>1]=h;c[f+120+(v<<2)>>2]=g;b[x>>1]=0;a[o>>0]=j+1<<24>>24;g=yh(B,C,w,f,d[k>>0]|0)|0;if(g|0){y=g;n=49;break}}if((n|0)==32){c[z>>2]=32306;c[z+4>>2]=68229;c[z+8>>2]=31517;Db(11,32001,z);C=11;Ra=A;return C|0}else if((n|0)==49){Ra=A;return y|0}return 0}function Hh(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=Ra;Ra=Ra+32|0;u=w+16|0;k=w;i=w+28|0;g=a[f>>0]|0;a:do if(g<<24>>24){do if((g&255)>2){c[i>>2]=0;if(g<<24>>24==4){g=c[f+4>>2]|0;if(!g)break a;Ra=w;return g|0}a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{t=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=f+4|0;if(!h)if(!(c[g>>2]|0))g=a[f>>0]|0;else v=15;else{c[g>>2]=h;v=15}if((v|0)==15){g=a[f>>0]|0;if(!(g<<24>>24)){a[f>>0]=2;g=2}}break}}f=g;Ra=w;return f|0}while(0);switch(g<<24>>24){case 2:break;case 1:{f=101;Ra=w;return f|0}default:break a}a[f>>0]=0;if((c[f+4>>2]|0)<0){f=0;Ra=w;return f|0}}while(0);s=f+116|0;g=c[s>>2]|0;t=f+70|0;h=b[t>>1]|0;j=g;if(!(a[g+8>>0]|0)){r=(c[g+64>>2]|0)+((h&65535)<<1)|0;g=(c[g+56>>2]|0)+((d[r>>0]<<8|d[r+1>>0])&e[g+26>>1])|0;r=f+68|0;i=a[r>>0]|0;if(i<<24>>24>18){c[k>>2]=32306;c[k+4>>2]=68229;c[k+8>>2]=31517;Db(11,32001,k);f=11;Ra=w;return f|0}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];o=f+20|0;m=c[o>>2]|0;p=f+50|0;b[p>>1]=0;q=f+1|0;a[q>>0]=a[q>>0]&-7;n=i<<24>>24;b[f+72+(n<<1)>>1]=h;c[f+120+(n<<2)>>2]=j;b[t>>1]=0;a[r>>0]=i+1<<24>>24;n=f+2|0;g=yh(m,g,s,f,d[n>>0]|0)|0;if(g|0){f=g;Ra=w;return f|0}g=c[s>>2]|0;b:do if(!(a[g+8>>0]|0)){while(1){k=(c[g+56>>2]|0)+((d[g+9>>0]|0)+8)|0;h=a[k>>0]|0;i=a[k+1>>0]|0;j=a[k+2>>0]|0;k=a[k+3>>0]|0;l=b[g+24>>1]|0;b[t>>1]=l;m=a[r>>0]|0;if(m<<24>>24>18)break;x=c[o>>2]|0;b[p>>1]=0;a[q>>0]=a[q>>0]&-7;y=m<<24>>24;b[f+72+(y<<1)>>1]=l;c[f+120+(y<<2)>>2]=g;b[t>>1]=0;a[r>>0]=m+1<<24>>24;g=yh(x,(i&255)<<16|(h&255)<<24|(j&255)<<8|k&255,s,f,d[n>>0]|0)|0;if(g|0){v=45;break}g=c[s>>2]|0;if(a[g+8>>0]|0)break b}if((v|0)==45){Ra=w;return g|0}c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);y=11;Ra=w;return y|0}while(0);b[t>>1]=(e[g+24>>1]|0)+65535;y=0;Ra=w;return y|0}do if(!(h<<16>>16)){i=f+68|0;j=f+50|0;k=f+1|0;while(1){g=a[i>>0]|0;if(!(g<<24>>24))break;b[j>>1]=0;a[k>>0]=a[k>>0]&-7;h=b[f+72+((g<<24>>24)+-1<<1)>>1]|0;b[t>>1]=h;y=c[s>>2]|0;g=g+-1<<24>>24;a[i>>0]=g;c[s>>2]=c[f+120+(g<<24>>24<<2)>>2];g=c[y+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);h=b[t>>1]|0}else{y=c[g+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[g+16>>2]=c[y>>2];c[y>>2]=g}if(h<<16>>16){v=41;break}}if((v|0)==41){g=c[s>>2]|0;break}a[f>>0]=1;y=101;Ra=w;return y|0}while(0);b[t>>1]=h+-1<<16>>16;if(!(a[g+2>>0]|0)){y=0;Ra=w;return y|0}if(a[g+8>>0]|0){y=0;Ra=w;return y|0}y=f+1|0;a[y>>0]=a[y>>0]&-15;b[f+50>>1]=0;y=Hh(f)|0;Ra=w;return y|0}function Ih(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;q=r+16|0;j=r;o=r+28|0;p=(c[g+32>>2]|0)+(c[g+28>>2]|0)|0;l=c[f+116>>2]|0;k=f+40|0;h=c[k>>2]|0;i=f+48|0;f=e[i>>1]|0;if((h+f|0)>>>0>(c[l+60>>2]|0)>>>0){c[j>>2]=32306;c[j+4>>2]=71650;c[j+8>>2]=31517;Db(11,32001,j);q=11;Ra=r;return q|0}f=Nh(l,h,g,0,f)|0;if(f|0){q=f;Ra=r;return q|0}f=e[i>>1]|0;if((p|0)==(f|0)){q=0;Ra=r;return q|0}i=(c[k>>2]|0)+f|0;n=c[l+52>>2]|0;j=(c[n+36>>2]|0)+-4|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];m=f;while(1){f=c[n>>2]|0;f=Za[c[f+204>>2]&127](f,i,o,0)|0;if(f|0){h=10;break}h=c[o>>2]|0;k=c[h+8>>2]|0;f=k+4|0;if((c[f>>2]|0)==(i|0)){f=k+72|0;l=f;f=c[f>>2]|0}else{c[k+56>>2]=c[h+4>>2];l=k+72|0;c[l>>2]=h;c[k+52>>2]=n;c[f>>2]=i;a[k+9>>0]=(i|0)==1?100:0;f=h}if((b[f+30>>1]|0)==1){if((j+m|0)>>>0<p>>>0){f=c[k+56>>2]|0;h=j;i=d[f+1>>0]<<16|d[f>>0]<<24|d[f+2>>0]<<8|d[f+3>>0]}else{h=p-m|0;f=c[k+56>>2]|0}f=Nh(k,f+4|0,g,m,h)|0;j=h}else{c[q>>2]=32306;c[q+4>>2]=71669;c[q+8>>2]=31517;Db(11,32001,q);f=11}h=c[l>>2]|0;do if(h|0)if(!(b[h+28>>1]&32)){Df(h);break}else{l=c[h+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[h+16>>2]=c[l>>2];c[l>>2]=h;break}while(0);if(f|0){h=23;break}m=j+m|0;if((m|0)>=(p|0)){f=0;h=23;break}}if((h|0)==10){q=f;Ra=r;return q|0}else if((h|0)==23){Ra=r;return f|0}return 0}function Jh(a){a=a|0;var b=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+80|0;o=p+64|0;j=p+48|0;l=p+32|0;k=p+16|0;g=p;n=c[(c[a+52>>2]|0)+36>>2]|0;i=c[a+56>>2]|0;b=d[a+9>>0]|0;q=i+(b+5)|0;m=b+8+(d[a+10>>0]|0)+((e[a+24>>1]|0)<<1)|0;h=n+-4|0;f=i+(b+1)|0;f=(d[f>>0]|0)<<8|(d[f+1>>0]|0);b=(((d[q>>0]|0)<<8|(d[q+1>>0]|0))+65535&65535)+1+(d[i+(b+7)>>0]|0)|0;a:do if(f){if(f>>>0<m>>>0){c[g>>2]=32306;c[g+4>>2]=65086;c[g+8>>2]=31517;Db(11,32001,g);q=11;Ra=p;return q|0}b:do if((f|0)<=(h|0)){while(1){q=i+f|0;g=f;f=(d[q>>0]|0)<<8|(d[q+1>>0]|0);q=i+(g+2)|0;q=(d[q>>0]|0)<<8|(d[q+1>>0]|0);b=q+b|0;g=q+g|0;if(f>>>0<=(g+3|0)>>>0)break;if((f|0)>(h|0))break b}if(f|0){c[l>>2]=32306;c[l+4>>2]=65101;c[l+8>>2]=31517;Db(11,32001,l);q=11;Ra=p;return q|0}if(g>>>0<=n>>>0)break a;c[j>>2]=32306;c[j+4>>2]=65105;c[j+8>>2]=31517;Db(11,32001,j);q=11;Ra=p;return q|0}while(0);c[k>>2]=32306;c[k+4>>2]=65091;c[k+8>>2]=31517;Db(11,32001,k);q=11;Ra=p;return q|0}while(0);if((b|0)>(n|0)){c[o>>2]=32306;c[o+4>>2]=65117;c[o+8>>2]=31517;Db(11,32001,o);q=11;Ra=p;return q|0}else{c[a+20>>2]=b-m&65535;q=0;Ra=p;return q|0}return 0}function Kh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;k=q;if(c[i>>2]|0){Ra=q;return}p=c[f+56>>2]|0;l=(c[f+64>>2]|0)+(g<<1)|0;j=(d[l>>0]|0)<<8|(d[l+1>>0]|0);m=f+9|0;n=d[m>>0]|0;o=f+52|0;if((j+h|0)>>>0>(c[(c[o>>2]|0)+36>>2]|0)>>>0){c[k>>2]=32306;c[k+4>>2]=69788;c[k+8>>2]=31517;Db(11,32001,k);c[i>>2]=11;Ra=q;return}j=Oh(f,j&65535,h&65535)|0;if(j|0){c[i>>2]=j;Ra=q;return}j=f+24|0;h=(b[j>>1]|0)+-1<<16>>16;b[j>>1]=h;if(!(h<<16>>16)){l=p+(n+1)|0;a[l>>0]=0;a[l+1>>0]=0;a[l+2>>0]=0;a[l+3>>0]=0;a[p+(n+7)>>0]=0;p=p+(n+5)|0;a[p>>0]=(c[(c[o>>2]|0)+36>>2]|0)>>>8;a[p+1>>0]=c[(c[o>>2]|0)+36>>2];c[f+20>>2]=(c[(c[o>>2]|0)+36>>2]|0)+-8-(d[m>>0]|0)-(d[f+10>>0]|0);Ra=q;return}else{fw(l|0,l+2|0,(h&65535)-g<<1|0)|0;p=p+(n+3)|0;a[p>>0]=(e[j>>1]|0)>>>8;a[p+1>>0]=b[j>>1];p=f+20|0;c[p>>2]=(c[p>>2]|0)+2;Ra=q;return}}function Lh(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+64|0;A=B+40|0;o=B+24|0;z=B;n=f+12|0;if((a[n>>0]|0)==0?(w=i+2|0,x=f+20|0,(w|0)<=(c[x>>2]|0)):0){j=c[f+72>>2]|0;n=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[n+96>>2]|0){m=Ve(j)|0;v=16}}else v=12;do if((v|0)==12){m=c[n+40>>2]|0;if(!m)if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){m=Wf(j)|0;v=16;break}else{m=Xf(j)|0;v=16;break}else v=17}while(0);if((v|0)==16?m|0:0)v=17;if((v|0)==17){c[l>>2]=m;Ra=B;return}s=c[f+56>>2]|0;t=f+9|0;n=a[t>>0]|0;j=n&255;c[z>>2]=0;u=f+24|0;p=(e[u>>1]<<1)+(e[f+18>>1]|0)|0;q=s+(j+5)|0;r=q+1|0;m=d[q>>0]<<8|d[r>>0];do if(p>>>0>m>>>0){if((m|0)==0?(c[(c[f+52>>2]|0)+36>>2]|0)==65536:0){o=65536;v=22;break}c[o>>2]=32306;c[o+4>>2]=64824;c[o+8>>2]=31517;Db(11,32001,o);m=11}else{o=m;v=22}while(0);a:do if((v|0)==22){if(!(a[s+(j+2)>>0]|0)){m=p+2|0;if((m|0)>(o|0)?1:(a[s+(j+1)>>0]|0)==0)v=29;else v=25}else{m=p+2|0;if((m|0)>(o|0))v=29;else v=25}do if((v|0)==25){m=Ph(n,c[(c[f+52>>2]|0)+36>>2]|0,s,i,z)|0;if(m|0){m=m-s|0;break}m=c[z>>2]|0;if(m|0)break a;m=p+2|0;v=29}while(0);if((v|0)==29){if((m+i|0)>(o|0)){m=(c[x>>2]|0)+(-2-i)|0;m=Qh(f,(m|0)<4?m:4)|0;c[z>>2]=m;if(m|0)break;m=((d[q>>0]<<8|d[r>>0])+65535&65535)+1|0}else m=o;m=m-i|0;a[q>>0]=m>>>8;a[r>>0]=m}c[x>>2]=(c[x>>2]|0)-(w&65535);if(!k)ew(s+m|0,h|0,i|0)|0;else{ew(s+(m+4)|0,h+4|0,i+-4|0)|0;i=s+m|0;a[i>>0]=k>>>24;a[i+1>>0]=k>>>16;a[i+2>>0]=k>>>8;a[i+3>>0]=k}k=(c[f+64>>2]|0)+(g<<1)|0;fw(k+2|0,k|0,(e[u>>1]|0)-g<<1|0)|0;a[k>>0]=m>>>8;a[k+1>>0]=m;b[u>>1]=(b[u>>1]|0)+1<<16>>16;g=s+((d[t>>0]|0)+4)|0;k=(a[g>>0]|0)+1<<24>>24;a[g>>0]=k;if(!(k<<24>>24)){k=s+((d[t>>0]|0)+3)|0;a[k>>0]=(a[k>>0]|0)+1<<24>>24}m=f+52|0;if(!(a[(c[m>>2]|0)+17>>0]|0)){Ra=B;return}do if((c[l>>2]|0)==0?(cb[c[f+80>>2]&255](f,h,z),y=e[z+16>>1]|0,(c[z+12>>2]|0)>>>0>y>>>0):0){k=c[f+60>>2]|0;if(k>>>0>=h>>>0?k>>>0<(h+y|0)>>>0:0){c[A>>2]=32306;c[A+4>>2]=64569;c[A+8>>2]=31517;Db(11,32001,A);c[l>>2]=11;break}A=h+((e[z+18>>1]|0)+-4)|0;ig(c[m>>2]|0,d[A+1>>0]<<16|d[A>>0]<<24|d[A+2>>0]<<8|d[A+3>>0],3,c[f+4>>2]|0,l)}while(0);Ra=B;return}while(0);c[l>>2]=m;Ra=B;return}if(!j)m=h;else{ew(j|0,h|0,i|0)|0;m=j}if(k|0){a[m>>0]=k>>>24;a[m+1>>0]=k>>>16;a[m+2>>0]=k>>>8;a[m+3>>0]=k}l=a[n>>0]|0;a[n>>0]=l+1<<24>>24;l=l&255;c[f+36+(l<<2)>>2]=m;b[f+28+(l<<1)>>1]=g;Ra=B;return}
- function lu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+16|0;n=w;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=c[14832]|0;d=m>>>a;if(d&3|0){b=(d&1^1)+a|0;a=59368+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[14832]=m&~(1<<b);else{c[g+12>>2]=a;c[d>>2]=g}v=b<<3;c[e+4>>2]=v|3;v=e+v+4|0;c[v>>2]=c[v>>2]|1;v=f;Ra=w;return v|0}l=c[14834]|0;if(k>>>0>l>>>0){if(d|0){b=2<<a;b=d<<a&(b|0-b);b=(b&0-b)+-1|0;i=b>>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=59368+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=m&~(1<<e);c[14832]=a}else{c[d+12>>2]=b;c[a>>2]=d;a=m}v=e<<3;h=v-k|0;c[g+4>>2]=k|3;f=g+k|0;c[f+4>>2]=h|1;c[g+v>>2]=h;if(l|0){e=c[14837]|0;b=l>>>3;d=59368+(b<<1<<2)|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[14834]=h;c[14837]=f;v=i;Ra=w;return v|0}g=c[14833]|0;if(g){d=(g&0-g)+-1|0;f=d>>>12&16;d=d>>>f;e=d>>>5&8;d=d>>>e;h=d>>>2&4;d=d>>>h;i=d>>>1&2;d=d>>>i;j=d>>>1&1;j=c[59632+((e|f|h|i|j)+(d>>>j)<<2)>>2]|0;d=j;i=j;j=(c[j+4>>2]&-8)-k|0;while(1){a=c[d+16>>2]|0;if(!a){a=c[d+20>>2]|0;if(!a)break}h=(c[a+4>>2]&-8)-k|0;f=h>>>0<j>>>0;d=a;i=f?a:i;j=f?h:j}h=i+k|0;if(h>>>0>i>>>0){f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[i+28>>2]|0;a=59632+(b<<2)|0;if((i|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14833]=g&~(1<<b);break}}else{v=f+16|0;c[((c[v>>2]|0)==(i|0)?v:f+20|0)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[i+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[i+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(j>>>0<16){v=j+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[h+4>>2]=j|1;c[h+j>>2]=j;if(l|0){e=c[14837]|0;b=l>>>3;d=59368+(b<<1<<2)|0;b=1<<b;if(!(b&m)){c[14832]=b|m;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[14834]=j;c[14837]=h}v=i+8|0;Ra=w;return v|0}else m=k}else m=k}else m=k}else if(a>>>0<=4294967231){a=a+11|0;k=a&-8;e=c[14833]|0;if(e){f=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)j=31;else{m=(a+1048320|0)>>>16&8;q=a<<m;i=(q+520192|0)>>>16&4;q=q<<i;j=(q+245760|0)>>>16&2;j=14-(i|m|j)+(q<<j>>>15)|0;j=k>>>(j+7|0)&1|j<<1}else j=0;d=c[59632+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;q=61}else{a=0;i=k<<((j|0)==31?0:25-(j>>>1)|0);g=0;while(1){h=(c[d+4>>2]&-8)-k|0;if(h>>>0<f>>>0)if(!h){a=d;f=0;q=65;break a}else{a=d;f=h}q=c[d+20>>2]|0;d=c[d+16+(i>>>31<<2)>>2]|0;g=(q|0)==0|(q|0)==(d|0)?g:q;if(!d){d=g;q=61;break}else i=i<<1}}while(0);if((q|0)==61){if((d|0)==0&(a|0)==0){a=2<<j;a=(a|0-a)&e;if(!a){m=k;break}m=(a&0-a)+-1|0;h=m>>>12&16;m=m>>>h;g=m>>>5&8;m=m>>>g;i=m>>>2&4;m=m>>>i;j=m>>>1&2;m=m>>>j;d=m>>>1&1;a=0;d=c[59632+((g|h|i|j|d)+(m>>>d)<<2)>>2]|0}if(!d){i=a;h=f}else q=65}if((q|0)==65){g=d;while(1){m=(c[g+4>>2]&-8)-k|0;d=m>>>0<f>>>0;f=d?m:f;a=d?g:a;d=c[g+16>>2]|0;if(!d)d=c[g+20>>2]|0;if(!d){i=a;h=f;break}else g=d}}if(((i|0)!=0?h>>>0<((c[14834]|0)-k|0)>>>0:0)?(l=i+k|0,l>>>0>i>>>0):0){g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){f=b+20|0;d=c[f>>2]|0;if(!d){f=b+16|0;d=c[f>>2]|0;if(!d)break;else{b=d;a=f}}else{b=d;a=f}}c[a>>2]=0}else{v=c[i+8>>2]|0;c[v+12>>2]=b;c[b+8>>2]=v}while(0);do if(g){a=c[i+28>>2]|0;d=59632+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=e&~(1<<a);c[14833]=e;break}}else{v=g+16|0;c[((c[v>>2]|0)==(i|0)?v:g+20|0)>>2]=b;if(!b)break}c[b+24>>2]=g;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b}}while(0);b:do if(h>>>0<16){v=h+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[l+4>>2]=h|1;c[l+h>>2]=h;b=h>>>3;if(h>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=l;c[b+12>>2]=l;c[l+8>>2]=b;c[l+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)d=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;d=(v+245760|0)>>>16&2;d=14-(t|u|d)+(v<<d>>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;b=59632+(d<<2)|0;c[l+28>>2]=d;a=l+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<d;if(!(e&a)){c[14833]=e|a;c[b>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(h|0)){e=h<<((d|0)==31?0:25-(d>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(h|0)){b=a;break c}else{e=e<<1;b=a}}c[d>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break b}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=l;c[u>>2]=l;c[l+8>>2]=v;c[l+12>>2]=b;c[l+24>>2]=0}while(0);v=i+8|0;Ra=w;return v|0}else m=k}else m=k}else m=-1;while(0);d=c[14834]|0;if(d>>>0>=m>>>0){b=d-m|0;a=c[14837]|0;if(b>>>0>15){v=a+m|0;c[14837]=v;c[14834]=b;c[v+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=m|3}else{c[14834]=0;c[14837]=0;c[a+4>>2]=d|3;v=a+d+4|0;c[v>>2]=c[v>>2]|1}v=a+8|0;Ra=w;return v|0}h=c[14835]|0;if(h>>>0>m>>>0){t=h-m|0;c[14835]=t;v=c[14838]|0;u=v+m|0;c[14838]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;Ra=w;return v|0}if(!(c[14950]|0)){c[14952]=4096;c[14951]=4096;c[14953]=-1;c[14954]=-1;c[14955]=0;c[14943]=0;c[14950]=n&-16^1431655768;a=4096}else a=c[14952]|0;i=m+48|0;j=m+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=m>>>0){v=0;Ra=w;return v|0}a=c[14942]|0;if(a|0?(l=c[14940]|0,n=l+k|0,n>>>0<=l>>>0|n>>>0>a>>>0):0){v=0;Ra=w;return v|0}d:do if(!(c[14943]&4)){d=c[14838]|0;e:do if(d){e=59776;while(1){n=c[e>>2]|0;if(n>>>0<=d>>>0?(n+(c[e+4>>2]|0)|0)>>>0>d>>>0:0)break;a=c[e+8>>2]|0;if(!a){q=128;break e}else e=a}b=g-h&f;if(b>>>0<2147483647){a=hw(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[e+4>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;q=145;break d}}else{e=a;q=136}}else b=0}else q=128;while(0);do if((q|0)==128){d=hw(0)|0;if((d|0)!=(-1|0)?(b=d,o=c[14951]|0,p=o+-1|0,b=((p&b|0)==0?0:(p+b&0-o)-b|0)+k|0,o=c[14940]|0,p=b+o|0,b>>>0>m>>>0&b>>>0<2147483647):0){n=c[14942]|0;if(n|0?p>>>0<=o>>>0|p>>>0>n>>>0:0){b=0;break}a=hw(b|0)|0;if((a|0)==(d|0)){h=b;g=d;q=145;break d}else{e=a;q=136}}else b=0}while(0);do if((q|0)==136){d=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;q=145;break d}a=c[14952]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;q=145;break d}if((hw(a|0)|0)==(-1|0)){hw(d|0)|0;b=0;break}else{h=a+b|0;g=e;q=145;break d}}while(0);c[14943]=c[14943]|4;q=143}else{b=0;q=143}while(0);if(((q|0)==143?k>>>0<2147483647:0)?(t=hw(k|0)|0,p=hw(0)|0,r=p-t|0,s=r>>>0>(m+40|0)>>>0,!((t|0)==(-1|0)|s^1|t>>>0<p>>>0&((t|0)!=(-1|0)&(p|0)!=(-1|0))^1)):0){h=s?r:b;g=t;q=145}if((q|0)==145){b=(c[14940]|0)+h|0;c[14940]=b;if(b>>>0>(c[14941]|0)>>>0)c[14941]=b;j=c[14838]|0;f:do if(j){b=59776;while(1){a=c[b>>2]|0;d=c[b+4>>2]|0;if((g|0)==(a+d|0)){q=154;break}e=c[b+8>>2]|0;if(!e)break;else b=e}if(((q|0)==154?(u=b+4|0,(c[b+12>>2]&8|0)==0):0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[u>>2]=d+h;v=(c[14835]|0)+h|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;u=j+t|0;t=v-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[j+v+4>>2]=40;c[14839]=c[14954];break}if(g>>>0<(c[14836]|0)>>>0)c[14836]=g;d=g+h|0;b=59776;while(1){if((c[b>>2]|0)==(d|0)){q=162;break}a=c[b+8>>2]|0;if(!a)break;else b=a}if((q|0)==162?(c[b+12>>2]&8|0)==0:0){c[b>>2]=g;l=b+4|0;c[l>>2]=(c[l>>2]|0)+h;l=g+8|0;l=g+((l&7|0)==0?0:0-l&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;k=l+m|0;i=b-l-m|0;c[l+4>>2]=m|3;g:do if((j|0)==(b|0)){v=(c[14835]|0)+i|0;c[14835]=v;c[14838]=k;c[k+4>>2]=v|1}else{if((c[14837]|0)==(b|0)){v=(c[14834]|0)+i|0;c[14834]=v;c[14837]=k;c[k+4>>2]=v|1;c[k+v>>2]=v;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;h:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14832]=c[14832]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){d=b+16|0;e=d+4|0;a=c[e>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}}else d=e;while(1){f=a+20|0;e=c[f>>2]|0;if(!e){f=a+16|0;e=c[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}c[d>>2]=0}else{v=c[b+8>>2]|0;c[v+12>>2]=a;c[a+8>>2]=v}while(0);if(!g)break;d=c[b+28>>2]|0;e=59632+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){v=g+16|0;c[((c[v>>2]|0)==(b|0)?v:g+20|0)>>2]=a;if(!a)break h}else{c[e>>2]=a;if(a|0)break;c[14833]=c[14833]&~(1<<d);break h}while(0);c[a+24>>2]=g;d=b+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=59632+(e<<2)|0;c[k+28>>2]=e;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14833]|0;d=1<<e;if(!(a&d)){c[14833]=a|d;c[b>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;break}b=c[b>>2]|0;i:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(f|0)){b=a;break i}else{e=e<<1;b=a}}c[d>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;break g}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=k;c[u>>2]=k;c[k+8>>2]=v;c[k+12>>2]=b;c[k+24>>2]=0}while(0);v=l+8|0;Ra=w;return v|0}b=59776;while(1){a=c[b>>2]|0;if(a>>>0<=j>>>0?(v=a+(c[b+4>>2]|0)|0,v>>>0>j>>>0):0)break;b=c[b+8>>2]|0}f=v+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0<f>>>0?j:a;b=a+8|0;d=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=d-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[g+d+4>>2]=40;c[14839]=c[14954];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14944];c[b+4>>2]=c[14945];c[b+8>>2]=c[14946];c[b+12>>2]=c[14947];c[14944]=g;c[14945]=h;c[14947]=0;c[14946]=b;b=a+24|0;do{u=b;b=b+4|0;c[b>>2]=7}while((u+8|0)>>>0<v>>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=59632+(e<<2)|0;c[j+28>>2]=e;c[j+20>>2]=0;c[f>>2]=0;b=c[14833]|0;a=1<<e;if(!(b&a)){c[14833]=b|a;c[d>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}b=c[d>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(g|0)){b=a;break j}else{e=e<<1;b=a}}c[d>>2]=j;c[j+24>>2]=b;c[j+12>>2]=j;c[j+8>>2]=j;break f}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=j;c[u>>2]=j;c[j+8>>2]=v;c[j+12>>2]=b;c[j+24>>2]=0}}else{v=c[14836]|0;if((v|0)==0|g>>>0<v>>>0)c[14836]=g;c[14944]=g;c[14945]=h;c[14947]=0;c[14841]=c[14950];c[14840]=-1;c[14845]=59368;c[14844]=59368;c[14847]=59376;c[14846]=59376;c[14849]=59384;c[14848]=59384;c[14851]=59392;c[14850]=59392;c[14853]=59400;c[14852]=59400;c[14855]=59408;c[14854]=59408;c[14857]=59416;c[14856]=59416;c[14859]=59424;c[14858]=59424;c[14861]=59432;c[14860]=59432;c[14863]=59440;c[14862]=59440;c[14865]=59448;c[14864]=59448;c[14867]=59456;c[14866]=59456;c[14869]=59464;c[14868]=59464;c[14871]=59472;c[14870]=59472;c[14873]=59480;c[14872]=59480;c[14875]=59488;c[14874]=59488;c[14877]=59496;c[14876]=59496;c[14879]=59504;c[14878]=59504;c[14881]=59512;c[14880]=59512;c[14883]=59520;c[14882]=59520;c[14885]=59528;c[14884]=59528;c[14887]=59536;c[14886]=59536;c[14889]=59544;c[14888]=59544;c[14891]=59552;c[14890]=59552;c[14893]=59560;c[14892]=59560;c[14895]=59568;c[14894]=59568;c[14897]=59576;c[14896]=59576;c[14899]=59584;c[14898]=59584;c[14901]=59592;c[14900]=59592;c[14903]=59600;c[14902]=59600;c[14905]=59608;c[14904]=59608;c[14907]=59616;c[14906]=59616;v=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=v-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[g+v+4>>2]=40;c[14839]=c[14954]}while(0);b=c[14835]|0;if(b>>>0>m>>>0){t=b-m|0;c[14835]=t;v=c[14838]|0;u=v+m|0;c[14838]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;Ra=w;return v|0}}v=uu()|0;c[v>>2]=12;v=0;Ra=w;return v|0}function mu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=c[14836]|0;a=c[a+-4>>2]|0;b=a&-8;j=d+b|0;do if(!(a&1)){e=c[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+b|0;if(h>>>0<f>>>0)return;if((c[14837]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14834]=g;c[a>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=c[h+8>>2]|0;b=c[h+12>>2]|0;if((b|0)==(a|0)){c[14832]=c[14832]&~(1<<d);i=h;b=g;break}else{c[a+12>>2]=b;c[b+8>>2]=a;i=h;b=g;break}}f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){b=h+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){a=0;break}}else b=d;while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0}else{i=c[h+8>>2]|0;c[i+12>>2]=a;c[a+8>>2]=i}while(0);if(f){b=c[h+28>>2]|0;d=59632+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14833]=c[14833]&~(1<<b);i=h;b=g;break}}else{i=f+16|0;c[((c[i>>2]|0)==(h|0)?i:f+20|0)>>2]=a;if(!a){i=h;b=g;break}}c[a+24>>2]=f;b=h+16|0;d=c[b>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}b=c[b+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=c[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((c[14838]|0)==(j|0)){j=(c[14835]|0)+b|0;c[14835]=j;c[14838]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14837]|0))return;c[14837]=0;c[14834]=0;return}if((c[14837]|0)==(j|0)){j=(c[14834]|0)+b|0;c[14834]=j;c[14837]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){b=c[j+8>>2]|0;a=c[j+12>>2]|0;if((a|0)==(b|0)){c[14832]=c[14832]&~(1<<d);break}else{c[b+12>>2]=a;c[a+8>>2]=b;break}}else{g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){b=j+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){d=0;break}}else b=d;while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0;d=a}else{d=c[j+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[j+28>>2]|0;b=59632+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14833]=c[14833]&~(1<<a);break}}else{e=g+16|0;c[((c[e>>2]|0)==(j|0)?e:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;a=j+16|0;b=c[a>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}a=c[a+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[14837]|0)){c[14834]=f;return}}else{c[a>>2]=e&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=59368+(a<<1<<2)|0;b=c[14832]|0;a=1<<a;if(!(b&a)){c[14832]=b|a;a=d;b=d+8|0}else{b=d+8|0;a=c[b>>2]|0}c[b>>2]=i;c[a+12>>2]=i;c[i+8>>2]=a;c[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)e=31;else{h=(a+1048320|0)>>>16&8;j=a<<h;g=(j+520192|0)>>>16&4;j=j<<g;e=(j+245760|0)>>>16&2;e=14-(g|h|e)+(j<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;a=59632+(e<<2)|0;c[i+28>>2]=e;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14833]|0;d=1<<e;a:do if(!(b&d)){c[14833]=b|d;c[a>>2]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i}else{a=c[a>>2]|0;b:do if((c[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(f|0)){a=b;break b}else{e=e<<1;a=b}}c[d>>2]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i;break a}while(0);h=a+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=a;c[i+24>>2]=0}while(0);j=(c[14840]|0)+-1|0;c[14840]=j;if(j|0)return;a=59784;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14840]=-1;return}function nu(a,b){a=a|0;b=b|0;var d=0;if(a){d=G(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=lu(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;gw(a|0,0,d|0)|0;return a|0}function ou(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=lu(b)|0;return b|0}if(b>>>0>4294967231){b=uu()|0;c[b>>2]=12;b=0;return b|0}d=pu(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=lu(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;ew(d|0,a|0,(e>>>0<b>>>0?e:b)|0)|0;mu(a);b=d;return b|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=c[l>>2]|0;d=m&-8;i=a+d|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[14952]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;k=a+b|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|3;m=i+4|0;c[m>>2]=c[m>>2]|1;qu(k,d);return a|0}if((c[14838]|0)==(i|0)){k=(c[14835]|0)+d|0;d=k-b|0;e=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}c[l>>2]=m&1|b|2;c[e+4>>2]=d|1;c[14838]=e;c[14835]=d;return a|0}if((c[14837]|0)==(i|0)){e=(c[14834]|0)+d|0;if(e>>>0<b>>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){k=a+b|0;e=a+e|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|1;c[e>>2]=d;e=e+4|0;c[e>>2]=c[e>>2]&-2;e=k}else{c[l>>2]=m&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[14834]=d;c[14837]=e;return a|0}e=c[i+4>>2]|0;if(e&2|0){a=0;return a|0}j=(e&-8)+d|0;if(j>>>0<b>>>0){a=0;return a|0}k=j-b|0;f=e>>>3;do if(e>>>0<256){e=c[i+8>>2]|0;d=c[i+12>>2]|0;if((d|0)==(e|0)){c[14832]=c[14832]&~(1<<f);break}else{c[e+12>>2]=d;c[d+8>>2]=e;break}}else{h=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){e=i+16|0;f=e+4|0;d=c[f>>2]|0;if(!d){d=c[e>>2]|0;if(!d){f=0;break}}else e=f;while(1){g=d+20|0;f=c[g>>2]|0;if(!f){g=d+16|0;f=c[g>>2]|0;if(!f)break;else{d=f;e=g}}else{d=f;e=g}}c[e>>2]=0;f=d}else{f=c[i+8>>2]|0;c[f+12>>2]=d;c[d+8>>2]=f;f=d}while(0);if(h|0){d=c[i+28>>2]|0;e=59632+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14833]=c[14833]&~(1<<d);break}}else{g=h+16|0;c[((c[g>>2]|0)==(i|0)?g:h+20|0)>>2]=f;if(!f)break}c[f+24>>2]=h;d=i+16|0;e=c[d>>2]|0;if(e|0){c[f+16>>2]=e;c[e+24>>2]=f}d=c[d+4>>2]|0;if(d|0){c[f+20>>2]=d;c[d+24>>2]=f}}}while(0);if(k>>>0<16){c[l>>2]=m&1|j|2;m=a+j+4|0;c[m>>2]=c[m>>2]|1;return a|0}else{i=a+b|0;c[l>>2]=m&1|b|2;c[i+4>>2]=k|3;m=a+j+4|0;c[m>>2]=c[m>>2]|1;qu(i,k);return a|0}return 0}function qu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;h=a+(0-f)|0;b=f+b|0;if((c[14837]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14834]=b;c[a>>2]=d&-2;c[h+4>>2]=b|1;c[i>>2]=b;return}e=f>>>3;if(f>>>0<256){a=c[h+8>>2]|0;d=c[h+12>>2]|0;if((d|0)==(a|0)){c[14832]=c[14832]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}g=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;e=d+4|0;a=c[e>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}}else d=e;while(1){f=a+20|0;e=c[f>>2]|0;if(!e){f=a+16|0;e=c[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}c[d>>2]=0}else{f=c[h+8>>2]|0;c[f+12>>2]=a;c[a+8>>2]=f}while(0);if(g){d=c[h+28>>2]|0;e=59632+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14833]=c[14833]&~(1<<d);break}}else{f=g+16|0;c[((c[f>>2]|0)==(h|0)?f:g+20|0)>>2]=a;if(!a)break}c[a+24>>2]=g;d=h+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(d){c[a+20>>2]=d;c[d+24>>2]=a}}}else h=a;while(0);a=i+4|0;e=c[a>>2]|0;if(!(e&2)){if((c[14838]|0)==(i|0)){i=(c[14835]|0)+b|0;c[14835]=i;c[14838]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14837]|0))return;c[14837]=0;c[14834]=0;return}if((c[14837]|0)==(i|0)){i=(c[14834]|0)+b|0;c[14834]=i;c[14837]=h;c[h+4>>2]=i|1;c[h+i>>2]=i;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){a=c[i+8>>2]|0;b=c[i+12>>2]|0;if((b|0)==(a|0)){c[14832]=c[14832]&~(1<<d);break}else{c[a+12>>2]=b;c[b+8>>2]=a;break}}else{g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+16|0;d=a+4|0;b=c[d>>2]|0;if(!b){b=c[a>>2]|0;if(!b){d=0;break}}else a=d;while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);if(g|0){b=c[i+28>>2]|0;a=59632+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14833]=c[14833]&~(1<<b);break}}else{e=g+16|0;c[((c[e>>2]|0)==(i|0)?e:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;b=i+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}b=c[b+4>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}}while(0);c[h+4>>2]=f|1;c[h+f>>2]=f;if((h|0)==(c[14837]|0)){c[14834]=f;return}}else{c[a>>2]=e&-2;c[h+4>>2]=b|1;c[h+b>>2]=b;f=b}b=f>>>3;if(f>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;return}b=f>>>8;if(b)if(f>>>0>16777215)e=31;else{g=(b+1048320|0)>>>16&8;i=b<<g;d=(i+520192|0)>>>16&4;i=i<<d;e=(i+245760|0)>>>16&2;e=14-(d|g|e)+(i<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;b=59632+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14833]|0;d=1<<e;if(!(a&d)){c[14833]=a|d;c[b>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;return}b=c[b>>2]|0;a:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(f|0)){b=a;break a}else{e=e<<1;b=a}}c[d>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;return}while(0);g=b+8|0;i=c[g>>2]|0;c[i+12>>2]=h;c[g>>2]=h;c[h+8>>2]=i;c[h+12>>2]=b;c[h+24>>2]=0;return}function ru(a,b){a=a|0;b=b|0;if(a>>>0<9){b=lu(b)|0;return b|0}else{b=su(a,b)|0;return b|0}return 0}function su(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a>>>0>16?a:16;if(!(d+-1&d))a=d;else{a=16;while(1)if(a>>>0<d>>>0)a=a<<1;else break}if((-64-a|0)>>>0<=b>>>0){h=uu()|0;c[h>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;d=lu(g+12+a|0)|0;if(!d){h=0;return h|0}f=d+-8|0;do if(a+-1&d){e=(d+a+-1&0-a)+-8|0;b=f;e=(e-b|0)>>>0>15?e:e+a|0;b=e-b|0;a=d+-4|0;i=c[a>>2]|0;d=(i&-8)-b|0;if(!(i&3)){c[e>>2]=(c[f>>2]|0)+b;c[e+4>>2]=d;a=e;b=e;break}else{i=e+4|0;c[i>>2]=d|c[i>>2]&1|2;d=e+d+4|0;c[d>>2]=c[d>>2]|1;c[a>>2]=b|c[a>>2]&1|2;c[i>>2]=c[i>>2]|1;qu(f,b);a=e;b=e;break}}else{a=f;b=f}while(0);a=a+4|0;d=c[a>>2]|0;if(d&3|0?(h=d&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;f=b+g|0;c[a>>2]=g|d&1|2;c[f+4>>2]=i|3;h=b+h+4|0;c[h>>2]=c[h>>2]|1;qu(f,i)}i=b+8|0;return i|0}function tu(a){a=a|0;var b=0;if(a>>>0>4294963200){b=uu()|0;c[b>>2]=0-a;a=-1}return a|0}function uu(){return 59888}function vu(a){a=a|0;return a|0}function wu(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function xu(){return 30868}function yu(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function zu(a){a=a|0;var b=0;b=(Au(a)|0)==0;return (b?a:a&95)|0}function Au(a){a=a|0;return (a+-97|0)>>>0<26|0}function Bu(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)b=e;else{do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));b=e}return (d&255)-(b&255)|0}function Cu(a){a=a|0;return (a+-65|0)>>>0<26|0}function Du(a){a=a|0;var b=0;b=(Cu(a)|0)==0;return (b?a:a|32)|0}function Eu(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=5;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){e=5;break}}}while(0);if((e|0)==5){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function Fu(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Gu(c[b>>2]|0,c[b+4>>2]|0,a)|0;return ((b|0)==0?a:b)|0}function Gu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=Hu(c[b+8>>2]|0,o)|0;f=Hu(c[b+12>>2]|0,o)|0;g=Hu(c[b+16>>2]|0,o)|0;a:do if((h>>>0<d>>>2>>>0?(n=d-(h<<2)|0,f>>>0<n>>>0&g>>>0<n>>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;f=Hu(c[b+(g<<2)>>2]|0,o)|0;g=Hu(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0<d>>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=Bu(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}l=f?l:k;h=f?j:h-j|0}f=i+m|0;g=Hu(c[b+(f<<2)>>2]|0,o)|0;f=Hu(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0<d>>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function Hu(a,b){a=a|0;b=b|0;var c=0;c=dw(a|0)|0;return ((b|0)==0?a:c)|0}function Iu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+192|0;i=r+168|0;h=r+152|0;q=r+136|0;p=r+120|0;o=r+112|0;l=r+96|0;k=r+80|0;f=r+64|0;m=r+48|0;g=r+32|0;e=r+16|0;s=r;j=r+184|0;c[s>>2]=d;d=(c[s>>2]|0)+(4-1)&~(4-1);n=c[d>>2]|0;c[s>>2]=d+4;n=(b|0)==4?n|32768:n;a:do switch(b|0){case 14:{c[e>>2]=a;c[e+4>>2]=14;c[e+8>>2]=n;d=tu(oa(221,e|0)|0)|0;break}case 9:{c[g>>2]=a;c[g+4>>2]=16;c[g+8>>2]=j;d=oa(221,g|0)|0;switch(d|0){case -22:{c[m>>2]=a;c[m+4>>2]=9;c[m+8>>2]=n;d=oa(221,m|0)|0;break}case 0:{d=c[j+4>>2]|0;d=(c[j>>2]|0)==2?0-d|0:d;break}default:d=tu(d)|0}break}case 1030:{c[f>>2]=a;c[f+4>>2]=1030;c[f+8>>2]=n;d=oa(221,f|0)|0;if((d|0)!=-22){if((d|0)>-1){c[k>>2]=d;c[k+4>>2]=2;c[k+8>>2]=1;oa(221,k|0)|0}d=tu(d)|0;break a}c[l>>2]=a;c[l+4>>2]=1030;c[l+8>>2]=0;d=oa(221,l|0)|0;if((d|0)==-22){c[p>>2]=a;c[p+4>>2]=0;c[p+8>>2]=n;d=oa(221,p|0)|0;if((d|0)>-1){c[q>>2]=d;c[q+4>>2]=2;c[q+8>>2]=1;oa(221,q|0)|0}d=tu(d)|0;break a}else{if((d|0)>-1){c[o>>2]=d;va(6,o|0)|0}d=tu(-22)|0;break a}}case 15:case 16:case 12:case 13:{c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=n;d=tu(oa(221,h|0)|0)|0;break}default:{c[i>>2]=a;c[i+4>>2]=b;c[i+8>>2]=n;d=tu(oa(221,i|0)|0)|0}}while(0);Ra=r;return d|0}function Ju(){var a=0,b=0;b=Ra;Ra=Ra+16|0;a=ja(20,b|0)|0;Ra=b;return a|0}function Ku(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(Eu(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=G(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function Lu(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function Mu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+48|0;g=h+32|0;f=h+16|0;e=h;if(!(b&4194368))e=0;else{c[e>>2]=d;i=(c[e>>2]|0)+(4-1)&~(4-1);d=c[i>>2]|0;c[e>>2]=i+4;e=d}c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=e;e=ua(5,f|0)|0;if(!((b&524288|0)==0|(e|0)<0)){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;oa(221,g|0)|0}i=tu(e)|0;Ra=h;return i|0}function Nu(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;a=vu(a)|0;c[d>>2]=a;a=va(6,d|0)|0;a=tu((a|0)==-4?0:a)|0;Ra=b;return a|0}function Ou(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ha(196,e|0)|0)|0;Ra=d;return b|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ga(195,e|0)|0)|0;Ra=d;return b|0}function Qu(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(qa(33,e|0)|0)|0;Ra=d;return b|0}function Ru(a,b){a=a|0;b=b|0;return Uu(a,b,(Eu(a)|0)+1|0)|0}function Su(a,b){a=a|0;b=b|0;Tu(a,b)|0;return a|0}function Tu(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=10}else f=10;while(0);if((f|0)==10){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function Uu(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(!d)d=0;else{c=c&255;while(1){d=d+-1|0;if((a[b+d>>0]|0)==c<<24>>24)break;if(!d){d=0;break a}}d=b+d|0}while(0);return d|0}function Vu(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=b;e=58986;f=d+15|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{e=c;d=14;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;do{f=c;c=(c>>>0)/10|0;d=d+-1|0;a[b+d>>0]=f-(c*10|0)|48}while(f>>>0>=10)}return}function Wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(wa(85,f|0)|0)|0;Ra=e;return d|0}function Xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+48|0;f=g+40|0;e=g;d=g+32|0;c[d>>2]=a;c[d+4>>2]=b;d=ia(197,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(oa(221,e|0)|0)>=0):0){Vu(e,a);c[f>>2]=e;c[f+4>>2]=b;b=tu(ga(195,f|0)|0)|0}else b=tu(d)|0;Ra=g;return b|0}function Yu(a){a=a|0;var b=0,c=0;b=(Eu(a)|0)+1|0;c=lu(b)|0;if(!c)a=0;else a=ew(c|0,a|0,b|0)|0;return a|0}function Zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+4112|0;e=g+4096|0;d=g;if(a)if(!b){a=uu()|0;c[a>>2]=22;a=0}else f=4;else{b=4096;a=d;f=4}if((f|0)==4){c[e>>2]=a;c[e+4>>2]=b;if((tu(da(183,e|0)|0)|0)>=0){if((a|0)==(d|0))a=Yu(d)|0}else a=0}Ra=g;return a|0}function _u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(sa(4,f|0)|0)|0;Ra=e;return d|0}function $u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(pa(3,f|0)|0)|0;Ra=e;return d|0}function av(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);f=(f&255)-(d[c>>0]|0)|0}return f|0}function bv(b,e){b=b|0;e=e|0;var f=0,g=0;f=0;while(1){if((d[27392+f>>0]|0)==(b|0)){g=4;break}f=f+1|0;if((f|0)==87){b=87;g=5;break}}if((g|0)==4)if(!f)f=27488;else{b=f;g=5}if((g|0)==5){f=27488;do{do{g=f;f=f+1|0}while((a[g>>0]|0)!=0);b=b+-1|0}while((b|0)!=0)}return cv(f,c[e+20>>2]|0)|0}function cv(a,b){a=a|0;b=b|0;return Fu(a,b)|0}function dv(a){a=a|0;var b=0;b=(ev()|0)+188|0;return bv(a,c[b>>2]|0)|0}function ev(){return xu()|0}function fv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ra(39,e|0)|0)|0;Ra=d;return b|0}function gv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(xa(91,e|0)|0)|0;Ra=d;return b|0}function hv(){return}function iv(a){a=+a;var b=0;g[h>>3]=a;b=c[h+4>>2]&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=b;a=+g[h>>3];do if(b>>>0<1072049730)if(b>>>0<1045430272)a=1.0;else{a=+kv(a);a=a*a/((a+1.0)*2.0)+1.0}else if(b>>>0<1082535490){a=+D(+a);a=(a+1.0/a)*.5;break}else{a=+lv(a);break}while(0);return +a}function jv(a){a=+a;var b=0.0,d=0,e=0.0;g[h>>3]=a;d=c[h+4>>2]|0;e=(d|0)<0?-.5:.5;d=d&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=d;b=+g[h>>3];do if(d>>>0<1082535490){b=+kv(b);if(d>>>0>=1072693248){a=e*(b+b/(b+1.0));break}if(d>>>0>=1045430272)a=e*(b*2.0-b*b/(b+1.0))}else a=e*2.0*+lv(b);while(0);return +a}function kv(a){a=+a;var b=0,d=0,e=0.0,f=0.0,i=0.0,j=0,k=0,l=0.0;g[h>>3]=a;d=c[h+4>>2]|0;b=d&2147483647;d=bw(c[h>>2]|0,d|0,63)|0;L()|0;do if(b>>>0>1078159481){j=mv(a)|0;b=(L()|0)&2147483647;if(!(b>>>0>2146435072|(b|0)==2146435072&j>>>0>0))if(!d)if(a>709.782712893384)a=a*8988465674311579538646525.0e283;else k=11;else a=-1.0}else{if(b>>>0<=1071001154)if(b>>>0<1016070144)break;else{i=0.0;j=0;k=14;break}if(b>>>0<1072734898)if(!d){b=1;e=a+-.6931471803691238;f=1.9082149292705877e-10;k=12;break}else{b=-1;e=a+.6931471803691238;f=-1.9082149292705877e-10;k=12;break}else k=11}while(0);if((k|0)==11){b=~~(a*1.4426950408889634+((d|0)==0?.5:-.5));f=+(b|0);e=a-f*.6931471803691238;f=f*1.9082149292705877e-10;k=12}if((k|0)==12){i=e-f;a=i;i=e-i-f;j=b;k=14}a:do if((k|0)==14){f=a*.5;e=a*f;l=e*(e*(e*(e*(4.008217827329362e-06-e*2.0109921818362437e-07)+-7.93650757867488e-05)+1.5873015872548146e-03)+-.03333333333333313)+1.0;f=3.0-f*l;f=e*((l-f)/(6.0-a*f));if(!j){a=a-(a*f-e);break}f=a*(f-i)-i-e;switch(j|0){case -1:{a=(a-f)*.5+-.5;break a}case 1:if(a<-.25){a=(f-(a+.5))*-2.0;break a}else{a=(a-f)*2.0+1.0;break a}default:{d=cw(j+1023|0,0,52)|0;k=L()|0;c[h>>2]=d;c[h+4>>2]=k;i=+g[h>>3];if(j>>>0>56){a=a-f+1.0;a=((j|0)==1024?a*2.0*8988465674311579538646525.0e283:a*i)+-1.0;break a}b=cw(1023-j|0,0,52)|0;d=L()|0;if((j|0)<20){c[h>>2]=b;c[h+4>>2]=d;e=1.0-+g[h>>3];a=a-f}else{c[h>>2]=b;c[h+4>>2]=d;e=a-(f+ +g[h>>3]);a=1.0}a=(e+a)*i;break a}}}while(0);return +a}function lv(a){a=+a;return +(+D(+(a+-1416.0996898839683))*2247116418577894884661631.0e283*2247116418577894884661631.0e283)}function mv(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;K(c[h+4>>2]|0);return b|0}function nv(a,b,c){a=a|0;b=b|0;c=c|0;ov(a,b,c)|0;return a|0}function ov(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;a:do if(!((g^b)&3)){f=(e|0)!=0;if(f&(g&3|0)!=0)do{g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0}while(f&(d&3|0)!=0);if(f){if(a[d>>0]|0){b:do if(e>>>0>3){f=d;while(1){d=c[f>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=f;break b}c[b>>2]=d;e=e+-4|0;d=f+4|0;b=b+4|0;if(e>>>0>3)f=d;else break}}while(0);h=13}}else e=0}else h=13;while(0);c:do if((h|0)==13)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);gw(b|0,0,e|0)|0;return b|0}function pv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+208|0;j=m;k=m+192|0;h=G(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0<h>>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)qv(a,d,e,f,j);else sv(a,d,e,k,f,0,j);if((f|0)==1){tv(k,1);f=0;break}else{tv(k,b);f=1;break}}else{qv(a,d,e,f,j);rv(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0<g>>>0)}else{f=1;b=1}sv(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1)if(!(c[g>>2]|0))break a;else l=19;else if((f|0)<2)l=19;else{tv(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;rv(k,1);sv(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);tv(k,1);b=c[k>>2]|1;c[k>>2]=b;a=a+i|0;sv(a,d,e,k,n,1,j);f=n}if((l|0)==19){l=0;b=uv(k)|0;rv(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}}while(0);Ra=m;return}function qv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+240|0;l=m;c[l>>2]=a;a:do if((e|0)>1){k=0-b|0;i=a;g=e;e=1;h=a;while(1){i=i+k|0;j=g+-2|0;a=i+(0-(c[f+(j<<2)>>2]|0))|0;if((Xa[d&255](h,a)|0)>-1?(Xa[d&255](h,i)|0)>-1:0)break a;h=l+(e<<2)|0;if((Xa[d&255](a,i)|0)>-1){c[h>>2]=a;g=g+-1|0}else{c[h>>2]=i;a=i;g=j}e=e+1|0;if((g|0)<=1)break a;i=a;h=c[l>>2]|0}}else e=1;while(0);wv(b,l,e);Ra=m;return}function rv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function sv(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Ra;Ra=Ra+240|0;m=o+232|0;n=o;p=c[e>>2]|0;c[m>>2]=p;j=c[e+4>>2]|0;k=m+4|0;c[k>>2]=j;c[n>>2]=a;a:do if((p|0)!=1|(j|0)!=0?(l=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Xa[d&255](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+l|0;i=c[h+(f+-2<<2)>>2]|0;if((Xa[d&255](g,j)|0)>-1){i=10;break a}if((Xa[d&255](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[n+(e<<2)>>2]=j;p=uv(m)|0;rv(m,p);f=p+f|0;if(!((c[m>>2]|0)!=1|(c[k>>2]|0)!=0)){e=g;a=j;i=10;break a}a=j+(0-(c[h+(f<<2)>>2]|0))|0;if((Xa[d&255](a,c[n>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{p=j;e=g;g=1;j=a;a=p}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){wv(b,n,e);qv(a,b,d,f,h)}Ra=o;return}function tv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[a>>2]|0;c[f>>2]=e;c[a>>2]=0;b=b+-32|0;d=0}else{d=c[a>>2]|0;e=c[f>>2]|0}c[f>>2]=d>>>(32-b|0)|e<<b;c[a>>2]=d<<b;return}function uv(a){a=a|0;var b=0;b=vv((c[a>>2]|0)+-1|0)|0;if(!b){b=vv(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function vv(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;while(1){a=a+1|0;if(!(b&2))b=b>>>1;else break}}else a=0;else a=32;return a|0}function wv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0<256?a:256;ew(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;ew(c[i>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while((e|0)!=(d|0));a=a-f|0;if(!a)break a;e=c[g>>2]|0}while(0);Ra=h;return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=Ra;Ra=Ra+32|0;g=f;e=f+20|0;c[g>>2]=a;c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;d=(tu(ba(140,g|0)|0)|0)==0;Ra=f;return (d?c[e>>2]|0:-1)|0}function yv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=0;c[e+8>>2]=b;c[e+12>>2]=b>>31;b=tu(fa(194,e|0)|0)|0;Ra=d;return b|0}function zv(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu(aa(118,d|0)|0)|0;Ra=b;return a|0}function Av(a){a=a|0;var b=0,d=0;d=Ra;Ra=Ra+16|0;b=d;c[b>>2]=a;c[b+4>>2]=0;a=(Ja(b|0,b|0)|0)==0;Ra=d;return (a?0:c[b>>2]|0)|0}function Bv(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu($(10,d|0)|0)|0;Ra=b;return a|0}function Cv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+64|0;g=h+48|0;f=h;e=h+32|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;e=ma(207,e|0)|0;if((e|0)==-9?(c[f>>2]=a,c[f+4>>2]=1,(oa(221,f|0)|0)>=0):0){Vu(f,a);c[g>>2]=f;c[g+4>>2]=b;c[g+8>>2]=d;a=tu(na(212,g|0)|0)|0}else a=tu(e)|0;Ra=h;return a|0}function Dv(){var a=0,b=0;b=Ra;Ra=Ra+16|0;a=ka(201,b|0)|0;Ra=b;return a|0}function Ev(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu(ta(40,d|0)|0)|0;Ra=b;return a|0}function Fv(a){a=+a;var b=0,d=0,e=0,f=0,i=0.0;g[h>>3]=a;f=c[h>>2]|0;d=c[h+4>>2]|0;b=bw(f|0,d|0,52)|0;L()|0;b=b&2047;c[h>>2]=f;c[h+4>>2]=d&2147483647;a=+g[h>>3];if(b>>>0<1022){if(b>>>0>=991){i=a*2.0;a=i+i*a/(1.0-a);e=5}}else{a=a/(1.0-a)*2.0;e=5}if((e|0)==5)a=+Gv(a)*.5;return +((d|0)<0?-a:a)}function Gv(a){a=+a;var b=0.0,d=0,e=0.0,f=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0;g[h>>3]=a;d=c[h+4>>2]|0;do if((d|0)<0|d>>>0<1071284858)if(d>>>0<=3220176895){i=cw(d|0,0,1)|0;L()|0;if(i>>>0<2034237440)break;if(d>>>0<3218259653){e=0.0;b=0.0;f=11;break}else{f=8;break}}else{if(a==-1.0){a=-r;break}a=(a-a)/0.0;break}else if(d>>>0<=2146435071)f=8;while(0);if((f|0)==8){b=a+1.0;g[h>>3]=b;d=(c[h+4>>2]|0)+614242|0;if(d>>>0<1129316352)b=(d>>>0>1074790399?1.0-(b-a):a-(b+-1.0))/b;else b=0.0;c[h>>2]=c[h>>2];c[h+4>>2]=(d&1048575)+1072079006;e=+((d>>>20)+-1023|0);a=+g[h>>3]+-1.0;f=11}if((f|0)==11){j=a*(a*.5);m=a/(a+2.0);l=m*m;k=l*l;a=e*.6931471803691238+(a+(b+e*1.9082149292705877e-10+m*(j+(k*(k*(k*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(k*(k*(k*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))-j))}return +a}function Hv(a){a=+a;var b=0;g[h>>3]=a;b=bw(c[h>>2]|0,c[h+4>>2]|0,52)|0;L()|0;b=b&2047;do if(b>>>0>=1024)if(b>>>0<1049){a=+E(+(a*2.0-1.0/(+u(+(a*a+-1.0))+a)));break}else{a=+E(+a)+.6931471805599453;break}else{a=a+-1.0;a=+Gv(a+ +u(+(a*a+a*2.0)))}while(0);return +a}function Iv(a){a=+a;var b=0,d=0;g[h>>3]=a;d=c[h+4>>2]|0;b=d&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=b;a=+g[h>>3];do if(b>>>0>1071748074)if(b>>>0>1077149696){a=1.0-0.0/a;break}else{a=1.0-2.0/(+kv(a*2.0)+2.0);break}else{if(b>>>0>1070618798){a=+kv(a*2.0);a=a/(a+2.0);break}if(b>>>0>1048575){a=+kv(a*-2.0);a=-a/(a+2.0)}}while(0);return +((d|0)<0?-a:a)}function Jv(a){a=+a;var b=0,d=0,e=0,f=0.0;g[h>>3]=a;e=c[h>>2]|0;d=c[h+4>>2]|0;b=bw(e|0,d|0,52)|0;L()|0;b=b&2047;c[h>>2]=e;c[h+4>>2]=d&2147483647;a=+g[h>>3];do if(b>>>0<=1048){if(b>>>0>1023){a=+E(+(a*2.0+1.0/(+u(+(a*a+1.0))+a)));break}if(b>>>0>996){f=a*a;a=+Gv(f/(+u(+(f+1.0))+1.0)+a)}}else a=+E(+a)+.6931471805599453;while(0);return +((d|0)<0?-a:a)}function Kv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+48|0;f=g+40|0;e=g;d=g+32|0;c[d>>2]=a;c[d+4>>2]=b;d=ya(94,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(oa(221,e|0)|0)>=0):0){Vu(e,a);c[f>>2]=e;c[f+4>>2]=b;a=tu(ca(15,f|0)|0)|0}else a=tu(d)|0;Ra=g;return a|0}function Lv(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=Ra;Ra=Ra+32|0;h=i;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){a=uu()|0;c[a>>2]=12;a=-1;break}c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=d;c[h+12>>2]=e;c[h+16>>2]=f;c[h+20>>2]=g>>12;a=tu(ea(192,h|0)|0)|0}else{a=uu()|0;c[a>>2]=22;a=-1}while(0);Ra=i;return a|0}function Mv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=Ra;Ra=Ra+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){gw(f|0,0,32)|0;e=a[d>>0]|0;if(e<<24>>24)do{j=e&255;i=f+(j>>>5<<2)|0;c[i>>2]=c[i>>2]|1<<(j&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;if(!(d<<24>>24))e=b;else{e=b;do{j=d&255;if(c[f+(j>>>5<<2)>>2]&1<<(j&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)e=Ku(b,e<<24>>24)|0;Ra=h;return e-b|0}function Nv(){Z(59908);return}function Ov(){return 59892}function Pv(){return 59900}function Qv(){return 59904}function Rv(){return 59908}function Sv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (K(b+d+(c>>>0<a>>>0|0)>>>0|0),c|0)|0}function Tv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (K(d|0),a-c>>>0|0)|0}function Uv(a){a=a|0;return (a?31-(I(a^a-1)|0)|0:32)|0}function Vv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (K(n|0),f)|0}else{if(!g){n=0;f=0;return (K(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (K(n|0),f)|0}}g=(i|0)==0;do if(h){if(!g){g=(I(i|0)|0)-(I(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<<i;b=k>>>(m>>>0)&b;g=0;i=l<<i;break}if(!f){n=0;f=0;return (K(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (K(n|0),f)|0}g=h-1|0;if(g&h|0){i=(I(h|0)|0)+33-(I(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<<m|l>>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (K(o|0),p)|0}else{p=Uv(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (K(o|0),p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (K(o|0),p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (K(o|0),p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((Uv(i|0)|0)>>>0);return (K(o|0),p)|0}g=(I(i|0)|0)-(I(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<<i|l>>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return (K(o|0),p)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (K(o|0),p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Sv(m|0,l|0,-1,-1)|0;d=L()|0;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;Tv(k|0,d|0,e|0,n|0)|0;p=L()|0;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Tv(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=L()|0;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (K(o|0),p)|0}function Wv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=Tv(j^a|0,i^b|0,j|0,i|0)|0;g=L()|0;a=f^j;b=e^i;return Tv((Vv(h,g,Tv(f^c|0,e^d|0,f|0,e|0)|0,L()|0,0)|0)^a|0,(L()|0)^b|0,a|0,b|0)|0}function Xv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=G(e,f)|0;d=a>>>16;a=(c>>>16)+(G(e,d)|0)|0;e=b>>>16;b=G(e,f)|0;return (K((a>>>16)+(G(e,d)|0)+(((a&65535)+b|0)>>>16)|0),a+b<<16|c&65535|0)|0}function Yv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=Xv(e,f)|0;a=L()|0;return (K((G(b,f)|0)+(G(d,e)|0)+a|a&0|0),c|0|0)|0}function Zv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=Ra;Ra=Ra+16|0;i=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;j=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=Tv(h^a|0,g^b|0,h|0,g|0)|0;b=L()|0;Vv(a,b,Tv(k^d|0,j^e|0,k|0,j|0)|0,L()|0,i)|0;e=Tv(c[i>>2]^h|0,c[i+4>>2]^g|0,h|0,g|0)|0;d=L()|0;Ra=f;return (K(d|0),e)|0}function _v(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Vv(a,b,c,d,0)|0}function $v(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=Ra;Ra=Ra+16|0;f=g|0;Vv(a,b,d,e,f)|0;Ra=g;return (K(c[f+4>>2]|0),c[f>>2]|0)|0}function aw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}K(((b|0)<0?-1:0)|0);return b>>c-32|0}function bw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b>>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}K(0);return b>>>c-32|0}function cw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b<<c|(a&(1<<c)-1<<32-c)>>>32-c|0);return a<<c}K(a<<c-32|0);return 0}function dw(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function ew(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){Aa(b|0,d|0,e|0)|0;return b|0}h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function fw(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else ew(b,c,d)|0;return b|0}function gw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;i=d|d<<8|d<<16|d<<24;g=f-64|0;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function hw(a){a=a|0;var b=0,d=0;d=c[i>>2]|0;b=d+a|0;if((a|0)>0&(b|0)<(d|0)|(b|0)<0){Pa(b|0)|0;_(12);return -1}if((b|0)>(za()|0)?(Ba(b|0)|0)==0:0){_(12);return -1}c[i>>2]=b;return d|0}function iw(a){a=a|0;return Va[a&127]()|0}function jw(){return M(0)|0}function kw(){return M(1)|0}function lw(){return M(2)|0}function mw(){return M(3)|0}function nw(){return M(4)|0}function ow(){return M(5)|0}function pw(){return M(6)|0}function qw(){return M(7)|0}function rw(){return M(8)|0}function sw(){return M(9)|0}function tw(){return M(10)|0}function uw(){return M(11)|0}function vw(){return M(12)|0}function ww(){return M(13)|0}function xw(){return M(14)|0}function yw(){return M(15)|0}function zw(){return M(16)|0}function Aw(){return M(17)|0}function Bw(){return M(18)|0}function Cw(){return M(19)|0}function Dw(){return M(20)|0}function Ew(){return M(21)|0}function Fw(){return M(22)|0}function Gw(){return M(23)|0}function Hw(){return M(24)|0}function Iw(){return M(25)|0}function Jw(){return M(26)|0}function Kw(){return M(27)|0}function Lw(){return M(28)|0}function Mw(){return M(29)|0}function Nw(){return M(30)|0}function Ow(){return M(31)|0}function Pw(){return M(32)|0}function Qw(){return M(33)|0}function Rw(){return M(34)|0}function Sw(){return M(35)|0}function Tw(){return M(36)|0}function Uw(){return M(37)|0}function Vw(){return M(38)|0}function Ww(){return M(39)|0}function Xw(){return M(40)|0}function Yw(){return M(41)|0}function Zw(){return M(42)|0}function _w(){return M(43)|0}function $w(){return M(44)|0}function ax(){return M(45)|0}function bx(){return M(46)|0}function cx(){return M(47)|0}function dx(){return M(48)|0}function ex(){return M(49)|0}function fx(){return M(50)|0}function gx(){return M(51)|0}function hx(){return M(52)|0}function ix(){return M(53)|0}function jx(){return M(54)|0}function kx(){return M(55)|0}function lx(){return M(56)|0}function mx(){return M(57)|0}function nx(){return M(58)|0}function ox(){return M(59)|0}function px(){return M(60)|0}function qx(){return M(61)|0}function rx(){return M(62)|0}function sx(){return M(63)|0}function tx(a,b){a=a|0;b=b|0;return Wa[a&127](b|0)|0}function ux(a){a=a|0;return N(0,a|0)|0}function vx(a){a=a|0;return N(1,a|0)|0}function wx(a){a=a|0;return N(2,a|0)|0}function xx(a){a=a|0;return N(3,a|0)|0}function yx(a){a=a|0;return N(4,a|0)|0}function zx(a){a=a|0;return N(5,a|0)|0}function Ax(a){a=a|0;return N(6,a|0)|0}function Bx(a){a=a|0;return N(7,a|0)|0}function Cx(a){a=a|0;return N(8,a|0)|0}function Dx(a){a=a|0;return N(9,a|0)|0}function Ex(a){a=a|0;return N(10,a|0)|0}function Fx(a){a=a|0;return N(11,a|0)|0}function Gx(a){a=a|0;return N(12,a|0)|0}function Hx(a){a=a|0;return N(13,a|0)|0}function Ix(a){a=a|0;return N(14,a|0)|0}function Jx(a){a=a|0;return N(15,a|0)|0}function Kx(a){a=a|0;return N(16,a|0)|0}function Lx(a){a=a|0;return N(17,a|0)|0}function Mx(a){a=a|0;return N(18,a|0)|0}function Nx(a){a=a|0;return N(19,a|0)|0}function Ox(a){a=a|0;return N(20,a|0)|0}function Px(a){a=a|0;return N(21,a|0)|0}function Qx(a){a=a|0;return N(22,a|0)|0}function Rx(a){a=a|0;return N(23,a|0)|0}function Sx(a){a=a|0;return N(24,a|0)|0}function Tx(a){a=a|0;return N(25,a|0)|0}function Ux(a){a=a|0;return N(26,a|0)|0}function Vx(a){a=a|0;return N(27,a|0)|0}function Wx(a){a=a|0;return N(28,a|0)|0}function Xx(a){a=a|0;return N(29,a|0)|0}function Yx(a){a=a|0;return N(30,a|0)|0}function Zx(a){a=a|0;return N(31,a|0)|0}function _x(a){a=a|0;return N(32,a|0)|0}function $x(a){a=a|0;return N(33,a|0)|0}function ay(a){a=a|0;return N(34,a|0)|0}function by(a){a=a|0;return N(35,a|0)|0}function cy(a){a=a|0;return N(36,a|0)|0}function dy(a){a=a|0;return N(37,a|0)|0}function ey(a){a=a|0;return N(38,a|0)|0}function fy(a){a=a|0;return N(39,a|0)|0}function gy(a){a=a|0;return N(40,a|0)|0}function hy(a){a=a|0;return N(41,a|0)|0}function iy(a){a=a|0;return N(42,a|0)|0}function jy(a){a=a|0;return N(43,a|0)|0}function ky(a){a=a|0;return N(44,a|0)|0}function ly(a){a=a|0;return N(45,a|0)|0}function my(a){a=a|0;return N(46,a|0)|0}function ny(a){a=a|0;return N(47,a|0)|0}function oy(a){a=a|0;return N(48,a|0)|0}function py(a){a=a|0;return N(49,a|0)|0}function qy(a){a=a|0;return N(50,a|0)|0}function ry(a){a=a|0;return N(51,a|0)|0}function sy(a){a=a|0;return N(52,a|0)|0}function ty(a){a=a|0;return N(53,a|0)|0}function uy(a){a=a|0;return N(54,a|0)|0}function vy(a){a=a|0;return N(55,a|0)|0}function wy(a){a=a|0;return N(56,a|0)|0}function xy(a){a=a|0;return N(57,a|0)|0}function yy(a){a=a|0;return N(58,a|0)|0}function zy(a){a=a|0;return N(59,a|0)|0}function Ay(a){a=a|0;return N(60,a|0)|0}function By(a){a=a|0;return N(61,a|0)|0}function Cy(a){a=a|0;return N(62,a|0)|0}function Dy(a){a=a|0;return N(63,a|0)|0}function Ey(a,b,c){a=a|0;b=b|0;c=c|0;return Xa[a&255](b|0,c|0)|0}function Fy(a,b){a=a|0;b=b|0;return O(0,a|0,b|0)|0}function Gy(a,b){a=a|0;b=b|0;return O(1,a|0,b|0)|0}function Hy(a,b){a=a|0;b=b|0;return O(2,a|0,b|0)|0}function Iy(a,b){a=a|0;b=b|0;return O(3,a|0,b|0)|0}function Jy(a,b){a=a|0;b=b|0;return O(4,a|0,b|0)|0}function Ky(a,b){a=a|0;b=b|0;return O(5,a|0,b|0)|0}function Ly(a,b){a=a|0;b=b|0;return O(6,a|0,b|0)|0}function My(a,b){a=a|0;b=b|0;return O(7,a|0,b|0)|0}function Ny(a,b){a=a|0;b=b|0;return O(8,a|0,b|0)|0}function Oy(a,b){a=a|0;b=b|0;return O(9,a|0,b|0)|0}function Py(a,b){a=a|0;b=b|0;return O(10,a|0,b|0)|0}function Qy(a,b){a=a|0;b=b|0;return O(11,a|0,b|0)|0}function Ry(a,b){a=a|0;b=b|0;return O(12,a|0,b|0)|0}function Sy(a,b){a=a|0;b=b|0;return O(13,a|0,b|0)|0}function Ty(a,b){a=a|0;b=b|0;return O(14,a|0,b|0)|0}function Uy(a,b){a=a|0;b=b|0;return O(15,a|0,b|0)|0}function Vy(a,b){a=a|0;b=b|0;return O(16,a|0,b|0)|0}function Wy(a,b){a=a|0;b=b|0;return O(17,a|0,b|0)|0}function Xy(a,b){a=a|0;b=b|0;return O(18,a|0,b|0)|0}function Yy(a,b){a=a|0;b=b|0;return O(19,a|0,b|0)|0}function Zy(a,b){a=a|0;b=b|0;return O(20,a|0,b|0)|0}function _y(a,b){a=a|0;b=b|0;return O(21,a|0,b|0)|0}function $y(a,b){a=a|0;b=b|0;return O(22,a|0,b|0)|0}function az(a,b){a=a|0;b=b|0;return O(23,a|0,b|0)|0}function bz(a,b){a=a|0;b=b|0;return O(24,a|0,b|0)|0}function cz(a,b){a=a|0;b=b|0;return O(25,a|0,b|0)|0}function dz(a,b){a=a|0;b=b|0;return O(26,a|0,b|0)|0}function ez(a,b){a=a|0;b=b|0;return O(27,a|0,b|0)|0}function fz(a,b){a=a|0;b=b|0;return O(28,a|0,b|0)|0}function gz(a,b){a=a|0;b=b|0;return O(29,a|0,b|0)|0}function hz(a,b){a=a|0;b=b|0;return O(30,a|0,b|0)|0}function iz(a,b){a=a|0;b=b|0;return O(31,a|0,b|0)|0}function jz(a,b){a=a|0;b=b|0;return O(32,a|0,b|0)|0}function kz(a,b){a=a|0;b=b|0;return O(33,a|0,b|0)|0}function lz(a,b){a=a|0;b=b|0;return O(34,a|0,b|0)|0}function mz(a,b){a=a|0;b=b|0;return O(35,a|0,b|0)|0}function nz(a,b){a=a|0;b=b|0;return O(36,a|0,b|0)|0}function oz(a,b){a=a|0;b=b|0;return O(37,a|0,b|0)|0}function pz(a,b){a=a|0;b=b|0;return O(38,a|0,b|0)|0}function qz(a,b){a=a|0;b=b|0;return O(39,a|0,b|0)|0}function rz(a,b){a=a|0;b=b|0;return O(40,a|0,b|0)|0}function sz(a,b){a=a|0;b=b|0;return O(41,a|0,b|0)|0}function tz(a,b){a=a|0;b=b|0;return O(42,a|0,b|0)|0}function uz(a,b){a=a|0;b=b|0;return O(43,a|0,b|0)|0}function vz(a,b){a=a|0;b=b|0;return O(44,a|0,b|0)|0}function wz(a,b){a=a|0;b=b|0;return O(45,a|0,b|0)|0}function xz(a,b){a=a|0;b=b|0;return O(46,a|0,b|0)|0}function yz(a,b){a=a|0;b=b|0;return O(47,a|0,b|0)|0}function zz(a,b){a=a|0;b=b|0;return O(48,a|0,b|0)|0}function Az(a,b){a=a|0;b=b|0;return O(49,a|0,b|0)|0}function Bz(a,b){a=a|0;b=b|0;return O(50,a|0,b|0)|0}function Cz(a,b){a=a|0;b=b|0;return O(51,a|0,b|0)|0}function Dz(a,b){a=a|0;b=b|0;return O(52,a|0,b|0)|0}function Ez(a,b){a=a|0;b=b|0;return O(53,a|0,b|0)|0}function Fz(a,b){a=a|0;b=b|0;return O(54,a|0,b|0)|0}function Gz(a,b){a=a|0;b=b|0;return O(55,a|0,b|0)|0}function Hz(a,b){a=a|0;b=b|0;return O(56,a|0,b|0)|0}function Iz(a,b){a=a|0;b=b|0;return O(57,a|0,b|0)|0}function Jz(a,b){a=a|0;b=b|0;return O(58,a|0,b|0)|0}function Kz(a,b){a=a|0;b=b|0;return O(59,a|0,b|0)|0}function Lz(a,b){a=a|0;b=b|0;return O(60,a|0,b|0)|0}function Mz(a,b){a=a|0;b=b|0;return O(61,a|0,b|0)|0}function Nz(a,b){a=a|0;b=b|0;return O(62,a|0,b|0)|0}function Oz(a,b){a=a|0;b=b|0;return O(63,a|0,b|0)|0}function Pz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ya[a&127](b|0,c|0,d|0)|0}function Qz(a,b,c){a=a|0;b=b|0;c=c|0;return P(0,a|0,b|0,c|0)|0}function Rz(a,b,c){a=a|0;b=b|0;c=c|0;return P(1,a|0,b|0,c|0)|0}function Sz(a,b,c){a=a|0;b=b|0;c=c|0;return P(2,a|0,b|0,c|0)|0}function Tz(a,b,c){a=a|0;b=b|0;c=c|0;return P(3,a|0,b|0,c|0)|0}function Uz(a,b,c){a=a|0;b=b|0;c=c|0;return P(4,a|0,b|0,c|0)|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;return P(5,a|0,b|0,c|0)|0}function Wz(a,b,c){a=a|0;b=b|0;c=c|0;return P(6,a|0,b|0,c|0)|0}function Xz(a,b,c){a=a|0;b=b|0;c=c|0;return P(7,a|0,b|0,c|0)|0}function Yz(a,b,c){a=a|0;b=b|0;c=c|0;return P(8,a|0,b|0,c|0)|0}function Zz(a,b,c){a=a|0;b=b|0;c=c|0;return P(9,a|0,b|0,c|0)|0}function _z(a,b,c){a=a|0;b=b|0;c=c|0;return P(10,a|0,b|0,c|0)|0}function $z(a,b,c){a=a|0;b=b|0;c=c|0;return P(11,a|0,b|0,c|0)|0}function aA(a,b,c){a=a|0;b=b|0;c=c|0;return P(12,a|0,b|0,c|0)|0}function bA(a,b,c){a=a|0;b=b|0;c=c|0;return P(13,a|0,b|0,c|0)|0}function cA(a,b,c){a=a|0;b=b|0;c=c|0;return P(14,a|0,b|0,c|0)|0}function dA(a,b,c){a=a|0;b=b|0;c=c|0;return P(15,a|0,b|0,c|0)|0}function eA(a,b,c){a=a|0;b=b|0;c=c|0;return P(16,a|0,b|0,c|0)|0}function fA(a,b,c){a=a|0;b=b|0;c=c|0;return P(17,a|0,b|0,c|0)|0}function gA(a,b,c){a=a|0;b=b|0;c=c|0;return P(18,a|0,b|0,c|0)|0}function hA(a,b,c){a=a|0;b=b|0;c=c|0;return P(19,a|0,b|0,c|0)|0}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return P(20,a|0,b|0,c|0)|0}function jA(a,b,c){a=a|0;b=b|0;c=c|0;return P(21,a|0,b|0,c|0)|0}function kA(a,b,c){a=a|0;b=b|0;c=c|0;return P(22,a|0,b|0,c|0)|0}function lA(a,b,c){a=a|0;b=b|0;c=c|0;return P(23,a|0,b|0,c|0)|0}function mA(a,b,c){a=a|0;b=b|0;c=c|0;return P(24,a|0,b|0,c|0)|0}function nA(a,b,c){a=a|0;b=b|0;c=c|0;return P(25,a|0,b|0,c|0)|0}function oA(a,b,c){a=a|0;b=b|0;c=c|0;return P(26,a|0,b|0,c|0)|0}function pA(a,b,c){a=a|0;b=b|0;c=c|0;return P(27,a|0,b|0,c|0)|0}function qA(a,b,c){a=a|0;b=b|0;c=c|0;return P(28,a|0,b|0,c|0)|0}function rA(a,b,c){a=a|0;b=b|0;c=c|0;return P(29,a|0,b|0,c|0)|0}function sA(a,b,c){a=a|0;b=b|0;c=c|0;return P(30,a|0,b|0,c|0)|0}function tA(a,b,c){a=a|0;b=b|0;c=c|0;return P(31,a|0,b|0,c|0)|0}function uA(a,b,c){a=a|0;b=b|0;c=c|0;return P(32,a|0,b|0,c|0)|0}function vA(a,b,c){a=a|0;b=b|0;c=c|0;return P(33,a|0,b|0,c|0)|0}function wA(a,b,c){a=a|0;b=b|0;c=c|0;return P(34,a|0,b|0,c|0)|0}function xA(a,b,c){a=a|0;b=b|0;c=c|0;return P(35,a|0,b|0,c|0)|0}function yA(a,b,c){a=a|0;b=b|0;c=c|0;return P(36,a|0,b|0,c|0)|0}function zA(a,b,c){a=a|0;b=b|0;c=c|0;return P(37,a|0,b|0,c|0)|0}function AA(a,b,c){a=a|0;b=b|0;c=c|0;return P(38,a|0,b|0,c|0)|0}function BA(a,b,c){a=a|0;b=b|0;c=c|0;return P(39,a|0,b|0,c|0)|0}function CA(a,b,c){a=a|0;b=b|0;c=c|0;return P(40,a|0,b|0,c|0)|0}function DA(a,b,c){a=a|0;b=b|0;c=c|0;return P(41,a|0,b|0,c|0)|0}function EA(a,b,c){a=a|0;b=b|0;c=c|0;return P(42,a|0,b|0,c|0)|0}function FA(a,b,c){a=a|0;b=b|0;c=c|0;return P(43,a|0,b|0,c|0)|0}function GA(a,b,c){a=a|0;b=b|0;c=c|0;return P(44,a|0,b|0,c|0)|0}function HA(a,b,c){a=a|0;b=b|0;c=c|0;return P(45,a|0,b|0,c|0)|0}function IA(a,b,c){a=a|0;b=b|0;c=c|0;return P(46,a|0,b|0,c|0)|0}function JA(a,b,c){a=a|0;b=b|0;c=c|0;return P(47,a|0,b|0,c|0)|0}function KA(a,b,c){a=a|0;b=b|0;c=c|0;return P(48,a|0,b|0,c|0)|0}function LA(a,b,c){a=a|0;b=b|0;c=c|0;return P(49,a|0,b|0,c|0)|0}function MA(a,b,c){a=a|0;b=b|0;c=c|0;return P(50,a|0,b|0,c|0)|0}function NA(a,b,c){a=a|0;b=b|0;c=c|0;return P(51,a|0,b|0,c|0)|0}function OA(a,b,c){a=a|0;b=b|0;c=c|0;return P(52,a|0,b|0,c|0)|0}function PA(a,b,c){a=a|0;b=b|0;c=c|0;return P(53,a|0,b|0,c|0)|0}function QA(a,b,c){a=a|0;b=b|0;c=c|0;return P(54,a|0,b|0,c|0)|0}function RA(a,b,c){a=a|0;b=b|0;c=c|0;return P(55,a|0,b|0,c|0)|0}function SA(a,b,c){a=a|0;b=b|0;c=c|0;return P(56,a|0,b|0,c|0)|0}function TA(a,b,c){a=a|0;b=b|0;c=c|0;return P(57,a|0,b|0,c|0)|0}function UA(a,b,c){a=a|0;b=b|0;c=c|0;return P(58,a|0,b|0,c|0)|0}function VA(a,b,c){a=a|0;b=b|0;c=c|0;return P(59,a|0,b|0,c|0)|0}function WA(a,b,c){a=a|0;b=b|0;c=c|0;return P(60,a|0,b|0,c|0)|0}function XA(a,b,c){a=a|0;b=b|0;c=c|0;return P(61,a|0,b|0,c|0)|0}function YA(a,b,c){a=a|0;b=b|0;c=c|0;return P(62,a|0,b|0,c|0)|0}function ZA(a,b,c){a=a|0;b=b|0;c=c|0;return P(63,a|0,b|0,c|0)|0}function _A(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Za[a&127](b|0,c|0,d|0,e|0)|0}function $A(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(0,a|0,b|0,c|0,d|0)|0}function aB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(1,a|0,b|0,c|0,d|0)|0}function bB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(2,a|0,b|0,c|0,d|0)|0}function cB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(3,a|0,b|0,c|0,d|0)|0}function dB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(4,a|0,b|0,c|0,d|0)|0}function eB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(5,a|0,b|0,c|0,d|0)|0}function fB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(6,a|0,b|0,c|0,d|0)|0}function gB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(7,a|0,b|0,c|0,d|0)|0}function hB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(8,a|0,b|0,c|0,d|0)|0}function iB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(9,a|0,b|0,c|0,d|0)|0}function jB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(10,a|0,b|0,c|0,d|0)|0}function kB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(11,a|0,b|0,c|0,d|0)|0}function lB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(12,a|0,b|0,c|0,d|0)|0}function mB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(13,a|0,b|0,c|0,d|0)|0}function nB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(14,a|0,b|0,c|0,d|0)|0}function oB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(15,a|0,b|0,c|0,d|0)|0}function pB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(16,a|0,b|0,c|0,d|0)|0}function qB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(17,a|0,b|0,c|0,d|0)|0}function rB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(18,a|0,b|0,c|0,d|0)|0}function sB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(19,a|0,b|0,c|0,d|0)|0}function tB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(20,a|0,b|0,c|0,d|0)|0}function uB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(21,a|0,b|0,c|0,d|0)|0}function vB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(22,a|0,b|0,c|0,d|0)|0}function wB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(23,a|0,b|0,c|0,d|0)|0}function xB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(24,a|0,b|0,c|0,d|0)|0}function yB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(25,a|0,b|0,c|0,d|0)|0}function zB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(26,a|0,b|0,c|0,d|0)|0}function AB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(27,a|0,b|0,c|0,d|0)|0}function BB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(28,a|0,b|0,c|0,d|0)|0}function CB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(29,a|0,b|0,c|0,d|0)|0}function DB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(30,a|0,b|0,c|0,d|0)|0}function EB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(31,a|0,b|0,c|0,d|0)|0}function FB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(32,a|0,b|0,c|0,d|0)|0}function GB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(33,a|0,b|0,c|0,d|0)|0}function HB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(34,a|0,b|0,c|0,d|0)|0}function IB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(35,a|0,b|0,c|0,d|0)|0}function JB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(36,a|0,b|0,c|0,d|0)|0}function KB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(37,a|0,b|0,c|0,d|0)|0}function LB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(38,a|0,b|0,c|0,d|0)|0}function MB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(39,a|0,b|0,c|0,d|0)|0}function NB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(40,a|0,b|0,c|0,d|0)|0}function OB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(41,a|0,b|0,c|0,d|0)|0}function PB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(42,a|0,b|0,c|0,d|0)|0}function QB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(43,a|0,b|0,c|0,d|0)|0}function RB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(44,a|0,b|0,c|0,d|0)|0}function SB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(45,a|0,b|0,c|0,d|0)|0}function TB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(46,a|0,b|0,c|0,d|0)|0}function UB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(47,a|0,b|0,c|0,d|0)|0}function VB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(48,a|0,b|0,c|0,d|0)|0}function WB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(49,a|0,b|0,c|0,d|0)|0}function XB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(50,a|0,b|0,c|0,d|0)|0}function YB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(51,a|0,b|0,c|0,d|0)|0}function ZB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(52,a|0,b|0,c|0,d|0)|0}function _B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(53,a|0,b|0,c|0,d|0)|0}function $B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(54,a|0,b|0,c|0,d|0)|0}function aC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(55,a|0,b|0,c|0,d|0)|0}function bC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(56,a|0,b|0,c|0,d|0)|0}function cC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(57,a|0,b|0,c|0,d|0)|0}function dC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(58,a|0,b|0,c|0,d|0)|0}function eC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(59,a|0,b|0,c|0,d|0)|0}function fC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(60,a|0,b|0,c|0,d|0)|0}function gC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(61,a|0,b|0,c|0,d|0)|0}function hC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(62,a|0,b|0,c|0,d|0)|0}function iC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(63,a|0,b|0,c|0,d|0)|0}function jC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return _a[a&127](b|0,c|0,d|0,e|0,f|0)|0}function kC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(0,a|0,b|0,c|0,d|0,e|0)|0}function lC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(1,a|0,b|0,c|0,d|0,e|0)|0}function mC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(2,a|0,b|0,c|0,d|0,e|0)|0}function nC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(3,a|0,b|0,c|0,d|0,e|0)|0}function oC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(4,a|0,b|0,c|0,d|0,e|0)|0}function pC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(5,a|0,b|0,c|0,d|0,e|0)|0}function qC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(6,a|0,b|0,c|0,d|0,e|0)|0}function rC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(7,a|0,b|0,c|0,d|0,e|0)|0}function sC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(8,a|0,b|0,c|0,d|0,e|0)|0}function tC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(9,a|0,b|0,c|0,d|0,e|0)|0}function uC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(10,a|0,b|0,c|0,d|0,e|0)|0}function vC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(11,a|0,b|0,c|0,d|0,e|0)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(12,a|0,b|0,c|0,d|0,e|0)|0}function xC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(13,a|0,b|0,c|0,d|0,e|0)|0}function yC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(14,a|0,b|0,c|0,d|0,e|0)|0}function zC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(15,a|0,b|0,c|0,d|0,e|0)|0}function AC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(16,a|0,b|0,c|0,d|0,e|0)|0}function BC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(17,a|0,b|0,c|0,d|0,e|0)|0}function CC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(18,a|0,b|0,c|0,d|0,e|0)|0}function DC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(19,a|0,b|0,c|0,d|0,e|0)|0}function EC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(20,a|0,b|0,c|0,d|0,e|0)|0}function FC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(21,a|0,b|0,c|0,d|0,e|0)|0}function GC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(22,a|0,b|0,c|0,d|0,e|0)|0}function HC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(23,a|0,b|0,c|0,d|0,e|0)|0}function IC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(24,a|0,b|0,c|0,d|0,e|0)|0}function JC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(25,a|0,b|0,c|0,d|0,e|0)|0}function KC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(26,a|0,b|0,c|0,d|0,e|0)|0}function LC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(27,a|0,b|0,c|0,d|0,e|0)|0}function MC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(28,a|0,b|0,c|0,d|0,e|0)|0}function NC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(29,a|0,b|0,c|0,d|0,e|0)|0}function OC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(30,a|0,b|0,c|0,d|0,e|0)|0}function PC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(31,a|0,b|0,c|0,d|0,e|0)|0}function QC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(32,a|0,b|0,c|0,d|0,e|0)|0}function RC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(33,a|0,b|0,c|0,d|0,e|0)|0}function SC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(34,a|0,b|0,c|0,d|0,e|0)|0}function TC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(35,a|0,b|0,c|0,d|0,e|0)|0}function UC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(36,a|0,b|0,c|0,d|0,e|0)|0}function VC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(37,a|0,b|0,c|0,d|0,e|0)|0}function WC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(38,a|0,b|0,c|0,d|0,e|0)|0}function XC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(39,a|0,b|0,c|0,d|0,e|0)|0}function YC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(40,a|0,b|0,c|0,d|0,e|0)|0}function ZC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(41,a|0,b|0,c|0,d|0,e|0)|0}function _C(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(42,a|0,b|0,c|0,d|0,e|0)|0}function $C(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(43,a|0,b|0,c|0,d|0,e|0)|0}function aD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(44,a|0,b|0,c|0,d|0,e|0)|0}function bD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(45,a|0,b|0,c|0,d|0,e|0)|0}function cD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(46,a|0,b|0,c|0,d|0,e|0)|0}function dD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(47,a|0,b|0,c|0,d|0,e|0)|0}function eD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(48,a|0,b|0,c|0,d|0,e|0)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(49,a|0,b|0,c|0,d|0,e|0)|0}function gD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(50,a|0,b|0,c|0,d|0,e|0)|0}function hD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(51,a|0,b|0,c|0,d|0,e|0)|0}function iD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(52,a|0,b|0,c|0,d|0,e|0)|0}function jD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(53,a|0,b|0,c|0,d|0,e|0)|0}function kD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(54,a|0,b|0,c|0,d|0,e|0)|0}function lD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(55,a|0,b|0,c|0,d|0,e|0)|0}function mD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(56,a|0,b|0,c|0,d|0,e|0)|0}function nD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(57,a|0,b|0,c|0,d|0,e|0)|0}function oD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(58,a|0,b|0,c|0,d|0,e|0)|0}function pD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(59,a|0,b|0,c|0,d|0,e|0)|0}function qD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(60,a|0,b|0,c|0,d|0,e|0)|0}function rD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(61,a|0,b|0,c|0,d|0,e|0)|0}function sD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(62,a|0,b|0,c|0,d|0,e|0)|0}function tD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(63,a|0,b|0,c|0,d|0,e|0)|0}function uD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return $a[a&127](b|0,c|0,d|0,e|0,f|0,g|0)|0}function vD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(0,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(1,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(2,a|0,b|0,c|0,d|0,e|0,f|0)|0}function yD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(3,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(4,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(5,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(6,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(7,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(8,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ED(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(9,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(10,a|0,b|0,c|0,d|0,e|0,f|0)|0}function GD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(11,a|0,b|0,c|0,d|0,e|0,f|0)|0}function HD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(12,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ID(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(13,a|0,b|0,c|0,d|0,e|0,f|0)|0}function JD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(14,a|0,b|0,c|0,d|0,e|0,f|0)|0}function KD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(15,a|0,b|0,c|0,d|0,e|0,f|0)|0}function LD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(16,a|0,b|0,c|0,d|0,e|0,f|0)|0}function MD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(17,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ND(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(18,a|0,b|0,c|0,d|0,e|0,f|0)|0}function OD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(19,a|0,b|0,c|0,d|0,e|0,f|0)|0}function PD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(20,a|0,b|0,c|0,d|0,e|0,f|0)|0}function QD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(21,a|0,b|0,c|0,d|0,e|0,f|0)|0}function RD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(22,a|0,b|0,c|0,d|0,e|0,f|0)|0}function SD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(23,a|0,b|0,c|0,d|0,e|0,f|0)|0}function TD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(24,a|0,b|0,c|0,d|0,e|0,f|0)|0}function UD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(25,a|0,b|0,c|0,d|0,e|0,f|0)|0}function VD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(26,a|0,b|0,c|0,d|0,e|0,f|0)|0}function WD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(27,a|0,b|0,c|0,d|0,e|0,f|0)|0}function XD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(28,a|0,b|0,c|0,d|0,e|0,f|0)|0}function YD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(29,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ZD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(30,a|0,b|0,c|0,d|0,e|0,f|0)|0}function _D(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(31,a|0,b|0,c|0,d|0,e|0,f|0)|0}function $D(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(32,a|0,b|0,c|0,d|0,e|0,f|0)|0}function aE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(33,a|0,b|0,c|0,d|0,e|0,f|0)|0}function bE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(34,a|0,b|0,c|0,d|0,e|0,f|0)|0}function cE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(35,a|0,b|0,c|0,d|0,e|0,f|0)|0}function dE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(36,a|0,b|0,c|0,d|0,e|0,f|0)|0}function eE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(37,a|0,b|0,c|0,d|0,e|0,f|0)|0}function fE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(38,a|0,b|0,c|0,d|0,e|0,f|0)|0}function gE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(39,a|0,b|0,c|0,d|0,e|0,f|0)|0}function hE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(40,a|0,b|0,c|0,d|0,e|0,f|0)|0}function iE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(41,a|0,b|0,c|0,d|0,e|0,f|0)|0}function jE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(42,a|0,b|0,c|0,d|0,e|0,f|0)|0}function kE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(43,a|0,b|0,c|0,d|0,e|0,f|0)|0}function lE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(44,a|0,b|0,c|0,d|0,e|0,f|0)|0}function mE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(45,a|0,b|0,c|0,d|0,e|0,f|0)|0}function nE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(46,a|0,b|0,c|0,d|0,e|0,f|0)|0}function oE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(47,a|0,b|0,c|0,d|0,e|0,f|0)|0}function pE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(48,a|0,b|0,c|0,d|0,e|0,f|0)|0}function qE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(49,a|0,b|0,c|0,d|0,e|0,f|0)|0}function rE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(50,a|0,b|0,c|0,d|0,e|0,f|0)|0}function sE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(51,a|0,b|0,c|0,d|0,e|0,f|0)|0}function tE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(52,a|0,b|0,c|0,d|0,e|0,f|0)|0}function uE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(53,a|0,b|0,c|0,d|0,e|0,f|0)|0}function vE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(54,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(55,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(56,a|0,b|0,c|0,d|0,e|0,f|0)|0}function yE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(57,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(58,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(59,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(60,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(61,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(62,a|0,b|0,c|0,d|0,e|0,f|0)|0}function EE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(63,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FE(a,b){a=a|0;b=b|0;ab[a&127](b|0)}function GE(a){a=a|0;T(0,a|0)}function HE(a){a=a|0;T(1,a|0)}function IE(a){a=a|0;T(2,a|0)}function JE(a){a=a|0;T(3,a|0)}function KE(a){a=a|0;T(4,a|0)}function LE(a){a=a|0;T(5,a|0)}function ME(a){a=a|0;T(6,a|0)}function NE(a){a=a|0;T(7,a|0)}function OE(a){a=a|0;T(8,a|0)}function PE(a){a=a|0;T(9,a|0)}function QE(a){a=a|0;T(10,a|0)}function RE(a){a=a|0;T(11,a|0)}function SE(a){a=a|0;T(12,a|0)}function TE(a){a=a|0;T(13,a|0)}function UE(a){a=a|0;T(14,a|0)}function VE(a){a=a|0;T(15,a|0)}function WE(a){a=a|0;T(16,a|0)}function XE(a){a=a|0;T(17,a|0)}function YE(a){a=a|0;T(18,a|0)}function ZE(a){a=a|0;T(19,a|0)}function _E(a){a=a|0;T(20,a|0)}function $E(a){a=a|0;T(21,a|0)}function aF(a){a=a|0;T(22,a|0)}function bF(a){a=a|0;T(23,a|0)}function cF(a){a=a|0;T(24,a|0)}function dF(a){a=a|0;T(25,a|0)}function eF(a){a=a|0;T(26,a|0)}function fF(a){a=a|0;T(27,a|0)}function gF(a){a=a|0;T(28,a|0)}function hF(a){a=a|0;T(29,a|0)}function iF(a){a=a|0;T(30,a|0)}function jF(a){a=a|0;T(31,a|0)}function kF(a){a=a|0;T(32,a|0)}function lF(a){a=a|0;T(33,a|0)}function mF(a){a=a|0;T(34,a|0)}function nF(a){a=a|0;T(35,a|0)}function oF(a){a=a|0;T(36,a|0)}function pF(a){a=a|0;T(37,a|0)}function qF(a){a=a|0;T(38,a|0)}function rF(a){a=a|0;T(39,a|0)}function sF(a){a=a|0;T(40,a|0)}function tF(a){a=a|0;T(41,a|0)}function uF(a){a=a|0;T(42,a|0)}function vF(a){a=a|0;T(43,a|0)}function wF(a){a=a|0;T(44,a|0)}function xF(a){a=a|0;T(45,a|0)}function yF(a){a=a|0;T(46,a|0)}function zF(a){a=a|0;T(47,a|0)}function AF(a){a=a|0;T(48,a|0)}function BF(a){a=a|0;T(49,a|0)}function CF(a){a=a|0;T(50,a|0)}function DF(a){a=a|0;T(51,a|0)}function EF(a){a=a|0;T(52,a|0)}function FF(a){a=a|0;T(53,a|0)}function GF(a){a=a|0;T(54,a|0)}function HF(a){a=a|0;T(55,a|0)}function IF(a){a=a|0;T(56,a|0)}function JF(a){a=a|0;T(57,a|0)}function KF(a){a=a|0;T(58,a|0)}function LF(a){a=a|0;T(59,a|0)}function MF(a){a=a|0;T(60,a|0)}function NF(a){a=a|0;T(61,a|0)}function OF(a){a=a|0;T(62,a|0)}function PF(a){a=a|0;T(63,a|0)}function QF(a,b,c){a=a|0;b=b|0;c=c|0;bb[a&127](b|0,c|0)}function RF(a,b){a=a|0;b=b|0;U(0,a|0,b|0)}function SF(a,b){a=a|0;b=b|0;U(1,a|0,b|0)}function TF(a,b){a=a|0;b=b|0;U(2,a|0,b|0)}function UF(a,b){a=a|0;b=b|0;U(3,a|0,b|0)}function VF(a,b){a=a|0;b=b|0;U(4,a|0,b|0)}function WF(a,b){a=a|0;b=b|0;U(5,a|0,b|0)}function XF(a,b){a=a|0;b=b|0;U(6,a|0,b|0)}function YF(a,b){a=a|0;b=b|0;U(7,a|0,b|0)}function ZF(a,b){a=a|0;b=b|0;U(8,a|0,b|0)}function _F(a,b){a=a|0;b=b|0;U(9,a|0,b|0)}function $F(a,b){a=a|0;b=b|0;U(10,a|0,b|0)}function aG(a,b){a=a|0;b=b|0;U(11,a|0,b|0)}function bG(a,b){a=a|0;b=b|0;U(12,a|0,b|0)}function cG(a,b){a=a|0;b=b|0;U(13,a|0,b|0)}function dG(a,b){a=a|0;b=b|0;U(14,a|0,b|0)}function eG(a,b){a=a|0;b=b|0;U(15,a|0,b|0)}function fG(a,b){a=a|0;b=b|0;U(16,a|0,b|0)}function gG(a,b){a=a|0;b=b|0;U(17,a|0,b|0)}function hG(a,b){a=a|0;b=b|0;U(18,a|0,b|0)}function iG(a,b){a=a|0;b=b|0;U(19,a|0,b|0)}function jG(a,b){a=a|0;b=b|0;U(20,a|0,b|0)}function kG(a,b){a=a|0;b=b|0;U(21,a|0,b|0)}function lG(a,b){a=a|0;b=b|0;U(22,a|0,b|0)}function mG(a,b){a=a|0;b=b|0;U(23,a|0,b|0)}function nG(a,b){a=a|0;b=b|0;U(24,a|0,b|0)}function oG(a,b){a=a|0;b=b|0;U(25,a|0,b|0)}function pG(a,b){a=a|0;b=b|0;U(26,a|0,b|0)}function qG(a,b){a=a|0;b=b|0;U(27,a|0,b|0)}function rG(a,b){a=a|0;b=b|0;U(28,a|0,b|0)}function sG(a,b){a=a|0;b=b|0;U(29,a|0,b|0)}function tG(a,b){a=a|0;b=b|0;U(30,a|0,b|0)}function uG(a,b){a=a|0;b=b|0;U(31,a|0,b|0)}function vG(a,b){a=a|0;b=b|0;U(32,a|0,b|0)}function wG(a,b){a=a|0;b=b|0;U(33,a|0,b|0)}function xG(a,b){a=a|0;b=b|0;U(34,a|0,b|0)}function yG(a,b){a=a|0;b=b|0;U(35,a|0,b|0)}function zG(a,b){a=a|0;b=b|0;U(36,a|0,b|0)}function AG(a,b){a=a|0;b=b|0;U(37,a|0,b|0)}function BG(a,b){a=a|0;b=b|0;U(38,a|0,b|0)}function CG(a,b){a=a|0;b=b|0;U(39,a|0,b|0)}function DG(a,b){a=a|0;b=b|0;U(40,a|0,b|0)}function EG(a,b){a=a|0;b=b|0;U(41,a|0,b|0)}function FG(a,b){a=a|0;b=b|0;U(42,a|0,b|0)}function GG(a,b){a=a|0;b=b|0;U(43,a|0,b|0)}function HG(a,b){a=a|0;b=b|0;U(44,a|0,b|0)}function IG(a,b){a=a|0;b=b|0;U(45,a|0,b|0)}function JG(a,b){a=a|0;b=b|0;U(46,a|0,b|0)}function KG(a,b){a=a|0;b=b|0;U(47,a|0,b|0)}function LG(a,b){a=a|0;b=b|0;U(48,a|0,b|0)}function MG(a,b){a=a|0;b=b|0;U(49,a|0,b|0)}function NG(a,b){a=a|0;b=b|0;U(50,a|0,b|0)}function OG(a,b){a=a|0;b=b|0;U(51,a|0,b|0)}function PG(a,b){a=a|0;b=b|0;U(52,a|0,b|0)}function QG(a,b){a=a|0;b=b|0;U(53,a|0,b|0)}function RG(a,b){a=a|0;b=b|0;U(54,a|0,b|0)}function SG(a,b){a=a|0;b=b|0;U(55,a|0,b|0)}function TG(a,b){a=a|0;b=b|0;U(56,a|0,b|0)}function UG(a,b){a=a|0;b=b|0;U(57,a|0,b|0)}function VG(a,b){a=a|0;b=b|0;U(58,a|0,b|0)}function WG(a,b){a=a|0;b=b|0;U(59,a|0,b|0)}function XG(a,b){a=a|0;b=b|0;U(60,a|0,b|0)}function YG(a,b){a=a|0;b=b|0;U(61,a|0,b|0)}function ZG(a,b){a=a|0;b=b|0;U(62,a|0,b|0)}function _G(a,b){a=a|0;b=b|0;U(63,a|0,b|0)}function $G(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;cb[a&255](b|0,c|0,d|0)}function aH(a,b,c){a=a|0;b=b|0;c=c|0;V(0,a|0,b|0,c|0)}function bH(a,b,c){a=a|0;b=b|0;c=c|0;V(1,a|0,b|0,c|0)}function cH(a,b,c){a=a|0;b=b|0;c=c|0;V(2,a|0,b|0,c|0)}function dH(a,b,c){a=a|0;b=b|0;c=c|0;V(3,a|0,b|0,c|0)}function eH(a,b,c){a=a|0;b=b|0;c=c|0;V(4,a|0,b|0,c|0)}function fH(a,b,c){a=a|0;b=b|0;c=c|0;V(5,a|0,b|0,c|0)}function gH(a,b,c){a=a|0;b=b|0;c=c|0;V(6,a|0,b|0,c|0)}function hH(a,b,c){a=a|0;b=b|0;c=c|0;V(7,a|0,b|0,c|0)}function iH(a,b,c){a=a|0;b=b|0;c=c|0;V(8,a|0,b|0,c|0)}function jH(a,b,c){a=a|0;b=b|0;c=c|0;V(9,a|0,b|0,c|0)}function kH(a,b,c){a=a|0;b=b|0;c=c|0;V(10,a|0,b|0,c|0)}function lH(a,b,c){a=a|0;b=b|0;c=c|0;V(11,a|0,b|0,c|0)}function mH(a,b,c){a=a|0;b=b|0;c=c|0;V(12,a|0,b|0,c|0)}function nH(a,b,c){a=a|0;b=b|0;c=c|0;V(13,a|0,b|0,c|0)}function oH(a,b,c){a=a|0;b=b|0;c=c|0;V(14,a|0,b|0,c|0)}function pH(a,b,c){a=a|0;b=b|0;c=c|0;V(15,a|0,b|0,c|0)}function qH(a,b,c){a=a|0;b=b|0;c=c|0;V(16,a|0,b|0,c|0)}function rH(a,b,c){a=a|0;b=b|0;c=c|0;V(17,a|0,b|0,c|0)}function sH(a,b,c){a=a|0;b=b|0;c=c|0;V(18,a|0,b|0,c|0)}function tH(a,b,c){a=a|0;b=b|0;c=c|0;V(19,a|0,b|0,c|0)}function uH(a,b,c){a=a|0;b=b|0;c=c|0;V(20,a|0,b|0,c|0)}function vH(a,b,c){a=a|0;b=b|0;c=c|0;V(21,a|0,b|0,c|0)}function wH(a,b,c){a=a|0;b=b|0;c=c|0;V(22,a|0,b|0,c|0)}function xH(a,b,c){a=a|0;b=b|0;c=c|0;V(23,a|0,b|0,c|0)}function yH(a,b,c){a=a|0;b=b|0;c=c|0;V(24,a|0,b|0,c|0)}function zH(a,b,c){a=a|0;b=b|0;c=c|0;V(25,a|0,b|0,c|0)}function AH(a,b,c){a=a|0;b=b|0;c=c|0;V(26,a|0,b|0,c|0)}function BH(a,b,c){a=a|0;b=b|0;c=c|0;V(27,a|0,b|0,c|0)}function CH(a,b,c){a=a|0;b=b|0;c=c|0;V(28,a|0,b|0,c|0)}function DH(a,b,c){a=a|0;b=b|0;c=c|0;V(29,a|0,b|0,c|0)}function EH(a,b,c){a=a|0;b=b|0;c=c|0;V(30,a|0,b|0,c|0)}function FH(a,b,c){a=a|0;b=b|0;c=c|0;V(31,a|0,b|0,c|0)}function GH(a,b,c){a=a|0;b=b|0;c=c|0;V(32,a|0,b|0,c|0)}function HH(a,b,c){a=a|0;b=b|0;c=c|0;V(33,a|0,b|0,c|0)}function IH(a,b,c){a=a|0;b=b|0;c=c|0;V(34,a|0,b|0,c|0)}function JH(a,b,c){a=a|0;b=b|0;c=c|0;V(35,a|0,b|0,c|0)}function KH(a,b,c){a=a|0;b=b|0;c=c|0;V(36,a|0,b|0,c|0)}function LH(a,b,c){a=a|0;b=b|0;c=c|0;V(37,a|0,b|0,c|0)}function MH(a,b,c){a=a|0;b=b|0;c=c|0;V(38,a|0,b|0,c|0)}function NH(a,b,c){a=a|0;b=b|0;c=c|0;V(39,a|0,b|0,c|0)}function OH(a,b,c){a=a|0;b=b|0;c=c|0;V(40,a|0,b|0,c|0)}function PH(a,b,c){a=a|0;b=b|0;c=c|0;V(41,a|0,b|0,c|0)}function QH(a,b,c){a=a|0;b=b|0;c=c|0;V(42,a|0,b|0,c|0)}function RH(a,b,c){a=a|0;b=b|0;c=c|0;V(43,a|0,b|0,c|0)}function SH(a,b,c){a=a|0;b=b|0;c=c|0;V(44,a|0,b|0,c|0)}function TH(a,b,c){a=a|0;b=b|0;c=c|0;V(45,a|0,b|0,c|0)}function UH(a,b,c){a=a|0;b=b|0;c=c|0;V(46,a|0,b|0,c|0)}function VH(a,b,c){a=a|0;b=b|0;c=c|0;V(47,a|0,b|0,c|0)}function WH(a,b,c){a=a|0;b=b|0;c=c|0;V(48,a|0,b|0,c|0)}function XH(a,b,c){a=a|0;b=b|0;c=c|0;V(49,a|0,b|0,c|0)}function YH(a,b,c){a=a|0;b=b|0;c=c|0;V(50,a|0,b|0,c|0)}function ZH(a,b,c){a=a|0;b=b|0;c=c|0;V(51,a|0,b|0,c|0)}function _H(a,b,c){a=a|0;b=b|0;c=c|0;V(52,a|0,b|0,c|0)}function $H(a,b,c){a=a|0;b=b|0;c=c|0;V(53,a|0,b|0,c|0)}function aI(a,b,c){a=a|0;b=b|0;c=c|0;V(54,a|0,b|0,c|0)}function bI(a,b,c){a=a|0;b=b|0;c=c|0;V(55,a|0,b|0,c|0)}function cI(a,b,c){a=a|0;b=b|0;c=c|0;V(56,a|0,b|0,c|0)}function dI(a,b,c){a=a|0;b=b|0;c=c|0;V(57,a|0,b|0,c|0)}function eI(a,b,c){a=a|0;b=b|0;c=c|0;V(58,a|0,b|0,c|0)}function fI(a,b,c){a=a|0;b=b|0;c=c|0;V(59,a|0,b|0,c|0)}function gI(a,b,c){a=a|0;b=b|0;c=c|0;V(60,a|0,b|0,c|0)}function hI(a,b,c){a=a|0;b=b|0;c=c|0;V(61,a|0,b|0,c|0)}function iI(a,b,c){a=a|0;b=b|0;c=c|0;V(62,a|0,b|0,c|0)}function jI(a,b,c){a=a|0;b=b|0;c=c|0;V(63,a|0,b|0,c|0)}function kI(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;db[a&127](b|0,c|0,d|0,e|0)}function lI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(0,a|0,b|0,c|0,d|0)}function mI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(1,a|0,b|0,c|0,d|0)}function nI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(2,a|0,b|0,c|0,d|0)}function oI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(3,a|0,b|0,c|0,d|0)}function pI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(4,a|0,b|0,c|0,d|0)}function qI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(5,a|0,b|0,c|0,d|0)}function rI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(6,a|0,b|0,c|0,d|0)}function sI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(7,a|0,b|0,c|0,d|0)}function tI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(8,a|0,b|0,c|0,d|0)}function uI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(9,a|0,b|0,c|0,d|0)}function vI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(10,a|0,b|0,c|0,d|0)}function wI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(11,a|0,b|0,c|0,d|0)}function xI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(12,a|0,b|0,c|0,d|0)}function yI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(13,a|0,b|0,c|0,d|0)}function zI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(14,a|0,b|0,c|0,d|0)}function AI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(15,a|0,b|0,c|0,d|0)}function BI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(16,a|0,b|0,c|0,d|0)}function CI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(17,a|0,b|0,c|0,d|0)}function DI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(18,a|0,b|0,c|0,d|0)}function EI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(19,a|0,b|0,c|0,d|0)}function FI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(20,a|0,b|0,c|0,d|0)}function GI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(21,a|0,b|0,c|0,d|0)}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(22,a|0,b|0,c|0,d|0)}function II(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(23,a|0,b|0,c|0,d|0)}function JI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(24,a|0,b|0,c|0,d|0)}function KI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(25,a|0,b|0,c|0,d|0)}function LI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(26,a|0,b|0,c|0,d|0)}function MI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(27,a|0,b|0,c|0,d|0)}function NI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(28,a|0,b|0,c|0,d|0)}function OI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(29,a|0,b|0,c|0,d|0)}function PI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(30,a|0,b|0,c|0,d|0)}function QI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(31,a|0,b|0,c|0,d|0)}function RI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(32,a|0,b|0,c|0,d|0)}function SI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(33,a|0,b|0,c|0,d|0)}function TI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(34,a|0,b|0,c|0,d|0)}function UI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(35,a|0,b|0,c|0,d|0)}function VI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(36,a|0,b|0,c|0,d|0)}function WI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(37,a|0,b|0,c|0,d|0)}function XI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(38,a|0,b|0,c|0,d|0)}function YI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(39,a|0,b|0,c|0,d|0)}function ZI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(40,a|0,b|0,c|0,d|0)}function _I(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(41,a|0,b|0,c|0,d|0)}function $I(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(42,a|0,b|0,c|0,d|0)}function aJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(43,a|0,b|0,c|0,d|0)}function bJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(44,a|0,b|0,c|0,d|0)}function cJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(45,a|0,b|0,c|0,d|0)}function dJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(46,a|0,b|0,c|0,d|0)}function eJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(47,a|0,b|0,c|0,d|0)}function fJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(48,a|0,b|0,c|0,d|0)}function gJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(49,a|0,b|0,c|0,d|0)}function hJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(50,a|0,b|0,c|0,d|0)}function iJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(51,a|0,b|0,c|0,d|0)}function jJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(52,a|0,b|0,c|0,d|0)}function kJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(53,a|0,b|0,c|0,d|0)}function lJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(54,a|0,b|0,c|0,d|0)}function mJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(55,a|0,b|0,c|0,d|0)}function nJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(56,a|0,b|0,c|0,d|0)}function oJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(57,a|0,b|0,c|0,d|0)}function pJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(58,a|0,b|0,c|0,d|0)}function qJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(59,a|0,b|0,c|0,d|0)}function rJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(60,a|0,b|0,c|0,d|0)}function sJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(61,a|0,b|0,c|0,d|0)}function tJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(62,a|0,b|0,c|0,d|0)}function uJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(63,a|0,b|0,c|0,d|0)}function vJ(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;eb[a&127](b|0,c|0,d|0,e|0,f|0,g|0)}function wJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(0,a|0,b|0,c|0,d|0,e|0,f|0)}function xJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(1,a|0,b|0,c|0,d|0,e|0,f|0)}function yJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(2,a|0,b|0,c|0,d|0,e|0,f|0)}function zJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(3,a|0,b|0,c|0,d|0,e|0,f|0)}function AJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(4,a|0,b|0,c|0,d|0,e|0,f|0)}function BJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(5,a|0,b|0,c|0,d|0,e|0,f|0)}function CJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(6,a|0,b|0,c|0,d|0,e|0,f|0)}function DJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(7,a|0,b|0,c|0,d|0,e|0,f|0)}function EJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(8,a|0,b|0,c|0,d|0,e|0,f|0)}function FJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(9,a|0,b|0,c|0,d|0,e|0,f|0)}function GJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(10,a|0,b|0,c|0,d|0,e|0,f|0)}function HJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(11,a|0,b|0,c|0,d|0,e|0,f|0)}function IJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(12,a|0,b|0,c|0,d|0,e|0,f|0)}function JJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(13,a|0,b|0,c|0,d|0,e|0,f|0)}function KJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(14,a|0,b|0,c|0,d|0,e|0,f|0)}function LJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(15,a|0,b|0,c|0,d|0,e|0,f|0)}function MJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(16,a|0,b|0,c|0,d|0,e|0,f|0)}function NJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(17,a|0,b|0,c|0,d|0,e|0,f|0)}function OJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(18,a|0,b|0,c|0,d|0,e|0,f|0)}function PJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(19,a|0,b|0,c|0,d|0,e|0,f|0)}function QJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(20,a|0,b|0,c|0,d|0,e|0,f|0)}function RJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(21,a|0,b|0,c|0,d|0,e|0,f|0)}function SJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(22,a|0,b|0,c|0,d|0,e|0,f|0)}function TJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(23,a|0,b|0,c|0,d|0,e|0,f|0)}function UJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(24,a|0,b|0,c|0,d|0,e|0,f|0)}function VJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(25,a|0,b|0,c|0,d|0,e|0,f|0)}function WJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(26,a|0,b|0,c|0,d|0,e|0,f|0)}function XJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(27,a|0,b|0,c|0,d|0,e|0,f|0)}function YJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(28,a|0,b|0,c|0,d|0,e|0,f|0)}function ZJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(29,a|0,b|0,c|0,d|0,e|0,f|0)}function _J(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(30,a|0,b|0,c|0,d|0,e|0,f|0)}function $J(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(31,a|0,b|0,c|0,d|0,e|0,f|0)}function aK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(32,a|0,b|0,c|0,d|0,e|0,f|0)}function bK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(33,a|0,b|0,c|0,d|0,e|0,f|0)}function cK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(34,a|0,b|0,c|0,d|0,e|0,f|0)}function dK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(35,a|0,b|0,c|0,d|0,e|0,f|0)}function eK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(36,a|0,b|0,c|0,d|0,e|0,f|0)}function fK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(37,a|0,b|0,c|0,d|0,e|0,f|0)}function gK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(38,a|0,b|0,c|0,d|0,e|0,f|0)}function hK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(39,a|0,b|0,c|0,d|0,e|0,f|0)}function iK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(40,a|0,b|0,c|0,d|0,e|0,f|0)}function jK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(41,a|0,b|0,c|0,d|0,e|0,f|0)}function kK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(42,a|0,b|0,c|0,d|0,e|0,f|0)}function lK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(43,a|0,b|0,c|0,d|0,e|0,f|0)}function mK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(44,a|0,b|0,c|0,d|0,e|0,f|0)}function nK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(45,a|0,b|0,c|0,d|0,e|0,f|0)}function oK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(46,a|0,b|0,c|0,d|0,e|0,f|0)}function pK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(47,a|0,b|0,c|0,d|0,e|0,f|0)}function qK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(48,a|0,b|0,c|0,d|0,e|0,f|0)}function rK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(49,a|0,b|0,c|0,d|0,e|0,f|0)}function sK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(50,a|0,b|0,c|0,d|0,e|0,f|0)}function tK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(51,a|0,b|0,c|0,d|0,e|0,f|0)}function uK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(52,a|0,b|0,c|0,d|0,e|0,f|0)}function vK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(53,a|0,b|0,c|0,d|0,e|0,f|0)}function wK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(54,a|0,b|0,c|0,d|0,e|0,f|0)}function xK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(55,a|0,b|0,c|0,d|0,e|0,f|0)}function yK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(56,a|0,b|0,c|0,d|0,e|0,f|0)}function zK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(57,a|0,b|0,c|0,d|0,e|0,f|0)}function AK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(58,a|0,b|0,c|0,d|0,e|0,f|0)}function BK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(59,a|0,b|0,c|0,d|0,e|0,f|0)}function CK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(60,a|0,b|0,c|0,d|0,e|0,f|0)}function DK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(61,a|0,b|0,c|0,d|0,e|0,f|0)}function EK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(62,a|0,b|0,c|0,d|0,e|0,f|0)}function FK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(63,a|0,b|0,c|0,d|0,e|0,f|0)}function GK(){J(0);return 0}function HK(a){a=a|0;J(1);return 0}function IK(a,b){a=a|0;b=b|0;J(2);return 0}function JK(a,b,c){a=a|0;b=b|0;c=c|0;J(3);return 0}function KK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;J(4);return 0}function LK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;J(5);return 0}function MK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;J(6);return 0}function NK(a){a=a|0;J(7)}function OK(a,b){a=a|0;b=b|0;J(8)}function PK(a,b,c){a=a|0;b=b|0;c=c|0;J(9)}function QK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;J(10)}function RK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;J(11)}
- function aj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;do switch(b<<16>>16){case 240:case 228:case 227:case 195:{b=c[d>>2]|0;if(!b)return;pi(c[a>>2]|0,b,1);return}case 294:case 280:case 275:case 268:case 265:case 263:case 248:case 236:case 234:case 206:case 205:{b=c[d>>2]|0;if(!b)return;ni(c[a>>2]|0,b);return}case 293:case 264:case 262:case 254:case 250:case 242:case 241:case 237:case 235:case 232:case 220:case 219:case 210:{b=c[d>>2]|0;if(!b)return;ri(c[a>>2]|0,b);return}case 251:case 245:case 244:case 233:case 226:{qi(c[a>>2]|0,c[d>>2]|0);return}case 229:{i=c[a>>2]|0;h=c[d>>2]|0;if(!h)return;a:do if((c[h>>2]|0)>0){d=i+480|0;e=i+304|0;f=i+308|0;g=i+300|0;if(!i){a=0;while(1){b=c[h+8+(a<<4)+4>>2]|0;if(b|0)ri(0,b);b=c[h+8+(a<<4)+8>>2]|0;if(b|0)pi(0,b,1);b=c[h+8+(a<<4)>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);a=a+1|0;if((a|0)>=(c[h>>2]|0))break a}}a=0;do{b=c[h+8+(a<<4)+4>>2]|0;if(b|0)ri(i,b);b=c[h+8+(a<<4)+8>>2]|0;if(b|0)pi(i,b,1);b=c[h+8+(a<<4)>>2]|0;do if(b|0){if(c[d>>2]|0){Xd(i,b);break}j=b;if((c[e>>2]|0)>>>0<=j>>>0?(c[f>>2]|0)>>>0>j>>>0:0){c[b>>2]=c[g>>2];c[g>>2]=b;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}while(0);a=a+1|0}while((a|0)<(c[h>>2]|0))}while(0);if(i|0){if(c[i+480>>2]|0){Xd(i,h);return}j=h;if((c[i+304>>2]|0)>>>0<=j>>>0?(c[i+308>>2]|0)>>>0>j>>>0:0){j=i+300|0;c[h>>2]=c[j>>2];c[j>>2]=h;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{j=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}case 289:case 239:{a=c[a>>2]|0;b=c[d>>2]|0;if(!b)return;do{j=b;b=c[b+32>>2]|0;oi(a,j)}while((b|0)!=0);return}case 256:case 252:case 249:{j=c[a>>2]|0;b=c[d>>2]|0;if(!b)return;i=b+4|0;a=c[b>>2]|0;b:do if((c[i>>2]|0)>0){e=j+480|0;f=j+304|0;g=j+308|0;h=j+300|0;if(!j){d=0;while(1){a=c[a+(d<<3)>>2]|0;do if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{h=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}while(0);d=d+1|0;a=c[b>>2]|0;if((d|0)>=(c[i>>2]|0))break b}}d=0;do{a=c[a+(d<<3)>>2]|0;do if(a|0){if(c[e>>2]|0){Xd(j,a);break}k=a;if((c[f>>2]|0)>>>0<=k>>>0?(c[g>>2]|0)>>>0>k>>>0:0){c[a>>2]=c[h>>2];c[h>>2]=a;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);d=d+1|0;a=c[b>>2]|0}while((d|0)<(c[i>>2]|0))}while(0);c:do if(a){do if(j|0){d=j+480|0;if(!(c[d>>2]|0)){e=a;if((c[j+304>>2]|0)>>>0>e>>>0)break;if((c[j+308>>2]|0)>>>0<=e>>>0)break;k=j+300|0;c[a>>2]=c[k>>2];c[k>>2]=a}else Xd(j,a);a=d;d=82;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);d=80;break}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);d=80;break}}else d=80;while(0);if((d|0)==80)if(j){a=j+480|0;d=82}if((d|0)==82){if(c[a>>2]|0){Xd(j,b);return}k=b;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){k=j+300|0;c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}case 292:case 291:case 290:case 258:{oi(c[a>>2]|0,c[d>>2]|0);return}case 276:case 271:{Xi(c[a>>2]|0,c[d>>2]|0);return}case 273:{j=c[a>>2]|0;b=c[d+4>>2]|0;if(!b)return;i=b+4|0;a=c[b>>2]|0;d:do if((c[i>>2]|0)>0){e=j+480|0;f=j+304|0;g=j+308|0;h=j+300|0;if(!j){d=0;while(1){a=c[a+(d<<3)>>2]|0;do if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}while(0);d=d+1|0;a=c[b>>2]|0;if((d|0)>=(c[i>>2]|0))break d}}d=0;do{a=c[a+(d<<3)>>2]|0;do if(a|0){if(c[e>>2]|0){Xd(j,a);break}k=a;if((c[f>>2]|0)>>>0<=k>>>0?(c[g>>2]|0)>>>0>k>>>0:0){c[a>>2]=c[h>>2];c[h>>2]=a;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);d=d+1|0;a=c[b>>2]|0}while((d|0)<(c[i>>2]|0))}while(0);e:do if(a){do if(j|0){d=j+480|0;if(!(c[d>>2]|0)){e=a;if((c[j+304>>2]|0)>>>0>e>>>0)break;if((c[j+308>>2]|0)>>>0<=e>>>0)break;k=j+300|0;c[a>>2]=c[k>>2];c[k>>2]=a}else Xd(j,a);a=d;d=126;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);d=124;break}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);d=124;break}}else d=124;while(0);if((d|0)==124)if(j){a=j+480|0;d=126}if((d|0)==126){if(c[a>>2]|0){Xd(j,b);return}k=b;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){k=j+300|0;c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}case 298:case 297:case 296:{b=c[d+4>>2]|0;if(!b)return;ni(c[a>>2]|0,b);return}default:return}while(0)}function bj(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0;Q=Ra;Ra=Ra+96|0;J=Q+80|0;D=Q+72|0;G=Q+64|0;C=Q+56|0;z=Q+48|0;A=Q+40|0;v=Q+32|0;u=Q+24|0;s=Q+16|0;q=Q+8|0;p=Q;K=Q+84|0;P=c[f>>2]|0;H=P+165|0;n=(a[H>>0]|0)==0;do if(!n?(c[P+160>>2]|0)==1:0){h=a[P+164>>0]|0;q=h&255;h=h<<24>>24==1;p=h?34855:34585;h=h?19:14;a:do if(c[P+272>>2]|0){if(!(a[P+81>>0]|0))O=13}else{do if(!(0<0|(0==0?(e[P+276>>1]|0)>>>0<h>>>0:0))){n=P+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=14;break a}n=P+296|0;o=c[n>>2]|0;if(!o){n=P+292|0;break}else{c[n>>2]=c[o>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=14;break a}}else n=P+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;O=13}while(0);if((O|0)==13){o=_d(P,h,0)|0;O=14}if((O|0)==14?o|0:0){ew(o|0,p|0,h|0)|0;F=g;M=c[F+4>>2]|0;E=f+180|0;c[E>>2]=c[F>>2];c[E+4>>2]=M;E=o;M=q;break}O=g;P=c[O+4>>2]|0;f=f+180|0;c[f>>2]=c[O>>2];c[f+4>>2]=P;Ra=Q;return}else O=16;while(0);if((O|0)==16){r=h+4|0;if(c[r>>2]|0){if(!n){cd(f,39404,p);Ra=Q;return}n=wk(P,g)|0;if((n|0)<0){c[q>>2]=g;cd(f,39421,q);Ra=Q;return}}else{h=g;n=d[P+164>>0]|0}o=(i|0)!=0;if(o?(n|0)!=1&(c[r>>2]|0)!=0:0){cd(f,39278,s);Ra=Q;return}r=o?1:n;q=qj(P,h)|0;b:do if((d[f+200>>0]|0)>1){p=c[f>>2]|0;c:do if(!p){if(!(c[7324]|0)){n=Wa[c[29340>>2]&127](16)|0;O=49;break}n=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;p=59064;o=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&o>>>0>0){M=c[14978]|0;F=Tv(o|0,p|0,n|0,((n|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=M>>>0)&1}n=Wa[c[29340>>2]&127](n)|0;if(!n)break b;o=Wa[c[29352>>2]&127](n)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0>(c[14987]|0)>>>0)c[14987]=o}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0)break b}else{do if((e[p+276>>1]|0)>=16){o=p+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];O=p+284|0;c[O>>2]=(c[O>>2]|0)+1;O=49;break c}o=p+296|0;n=c[o>>2]|0;if(!n){n=p+292|0;break}else{c[o>>2]=c[n>>2];O=p+284|0;c[O>>2]=(c[O>>2]|0)+1;O=49;break c}}else n=p+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1}n=_d(p,16,0)|0;O=49}while(0);if((O|0)==49)if(!n)break;o=n+4|0;p=o;s=p+12|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));c[n>>2]=q;E=h;F=c[E+4>>2]|0;M=o;c[M>>2]=c[E>>2];c[M+4>>2]=F;M=f+272|0;c[n+12>>2]=c[M>>2];c[M>>2]=n}while(0);E=h;F=c[E+4>>2]|0;M=f+180|0;c[M>>2]=c[E>>2];c[M+4>>2]=F;if(!q){Ra=Q;return}else{E=q;g=h;M=r}}d:do if(!(vk(f,E)|0)){h=(a[P+164>>0]|0)==1?1:i;i=P+16|0;p=c[(c[i>>2]|0)+(M<<4)>>2]|0;n=(h|0)==1?34855:34585;o=c[f>>2]|0;do if(((a[o+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(t=c[o+312>>2]|0,t|0):0){n=$a[t&127](c[o+316>>2]|0,18,n,0,p,c[f+240>>2]|0)|0;if((n|0)==1){cd(f,39216,u);c[f+12>>2]=23;O=271;break d}if((n|2|0)==2)if(!n)break;else{O=271;break d}else{cd(f,39231,v);c[f+12>>2]=1;O=271;break d}}while(0);F=(k|0)==0;do if(((F?(w=d[39319+(h+(j<<1))>>0]|0,x=c[f>>2]|0,(a[x+165>>0]|0)==0):0)?(a[f+200>>0]|0)==0:0)?(y=c[x+312>>2]|0,y|0):0){n=$a[y&127](c[x+316>>2]|0,w,E,0,p,c[f+240>>2]|0)|0;if((n|0)==1){cd(f,39216,A);c[f+12>>2]=23;O=271;break d}if((n|2|0)==2)if(!n)break;else{O=271;break d}else{cd(f,39231,z);c[f+12>>2]=1;O=271;break d}}while(0);do if(!(a[f+200>>0]|0)){o=c[(c[i>>2]|0)+(M<<4)>>2]|0;p=c[f>>2]|0;e:do if(!(a[p+165>>0]|0)){h=f+4|0;q=p+24|0;r=(c[q>>2]&1|0)==0;s=p+16|0;A=c[(c[s>>2]|0)+12>>2]|0;a[p+78>>0]=a[A+77>>0]|0;if(!((b[A+78>>1]&1)==0?(m=eh(p,0,h,0)|0,(m|0)!=0):0))O=75;f:do if((O|0)==75){m=c[p+20>>2]|0;if((m|0)>1)do{n=m;m=m+-1|0;if((b[(c[(c[s>>2]|0)+(m<<4)+12>>2]|0)+78>>1]&1)==0?(B=eh(p,m,h,0)|0,B|0):0){m=B;break f}}while((n|0)>2);if(r)c[q>>2]=c[q>>2]&-2;if(!(a[p+89>>0]|0))break e;c[q>>2]=c[q>>2]|16;break e}while(0);c[f+12>>2]=m;O=f+36|0;c[O>>2]=(c[O>>2]|0)+1;O=270;break d}while(0);if(!(Sd(P,E,o)|0)){if(hi(P,E,o)|0){c[D>>2]=E;cd(f,39347,D);O=270;break d}if(P|0){O=119;break}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](80)|0;O=141;break}m=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){G=c[14978]|0;D=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;C=L()|0;c[14768]=((C|0)<0|(C|0)==0&D>>>0<=G>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){O=142;break}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n;break}if(!l){c[C>>2]=g;cd(f,39323,C);O=270;break d}p=c[f+116>>2]|0;p=(p|0)==0?f:p;m=p+84|0;n=c[m>>2]|0;o=1<<M;if(n&o|0){O=270;break d}c[m>>2]=n|o;if((M|0)!=1){O=270;break d}s=c[p>>2]|0;m=s+16|0;if(c[(c[m>>2]|0)+20>>2]|0){O=270;break d}if(a[p+199>>0]|0){O=270;break d}n=Pe(c[s>>2]|0,0,s,K,0,542)|0;if(n|0){cd(p,32157,G);c[p+12>>2]=n;O=270;break d}f=c[K>>2]|0;c[(c[m>>2]|0)+20>>2]=f;m=c[s+92>>2]|0;p=c[f+4>>2]|0;c[p+4>>2]=c[f>>2];if(!(b[p+22>>1]&2)){h=p+32|0;q=p+36|0;r=(c[h>>2]|0)-(c[q>>2]|0)|0;do if((m+-512|0)>>>0<65025?(m+-1&m|0)==0:0){c[h>>2]=m;o=p+80|0;m=c[o>>2]|0;if(!m)break;n=m+-4|0;c[o>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;f=(c[14820]|0)+1|0;c[14820]=f;c[14821]=(f|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;O=103;break}else{m=Wa[c[29352>>2]&127](n)|0;O=103}while(0);do if((O|0)==103){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[o>>2]=0}while(0);f=Se(c[p>>2]|0,h,r)|0;c[q>>2]=(c[h>>2]|0)-(r&65535);if((f|0)==7){m=s+81|0;do if(!(a[m>>0]|0)){if(a[s+82>>0]|0)break;a[m>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;m=s+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[s+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);O=270;break d}}O=270;break d}else O=119;while(0);g:do if((O|0)==119){if(c[P+272>>2]|0){if(a[P+81>>0]|0){O=142;break}}else{do if((e[P+276>>1]|0)>=80){n=P+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=141;break g}n=P+296|0;m=c[n>>2]|0;if(!m){m=P+292|0;break}else{c[n>>2]=c[m>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=141;break g}}else m=P+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(P,80,0)|0;O=141}while(0);if((O|0)==141)if(!m)O=142;if((O|0)==142){c[f+12>>2]=7;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;O=270;break}p=m+4|0;s=p+76|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));c[m>>2]=E;b[m+40>>1]=-1;n=c[(c[i>>2]|0)+(M<<4)+12>>2]|0;c[m+72>>2]=n;c[m+32>>2]=1;b[m+44>>1]=200;c[f+228>>2]=m;if((a[f+18>>0]|0)==0?(Bu(E,39382)|0)==0:0)c[n+72>>2]=m;if(a[H>>0]|0){Ra=Q;return}u=f+8|0;m=c[u>>2]|0;t=f+116|0;if(!m){o=c[f>>2]|0;if((c[t>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))O=161;else{Ra=Q;return}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;n=c[m>>2]|0;if(n|0){c[m>>2]=c[n>>2];H=o+284|0;c[H>>2]=(c[H>>2]|0)+1;break h}m=o+296|0;n=c[m>>2]|0;if(!n){m=o+292|0;break}else{c[m>>2]=c[n>>2];H=o+284|0;c[H>>2]=(c[H>>2]|0)+1;break h}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;O=161}while(0);if((O|0)==161)n=_d(o,224,0)|0;if(!n){Ra=Q;return}p=n+104|0;s=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(s|0));c[n>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=n;c[n+8>>2]=o;c[n+4>>2]=0;c[m>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[u>>2]=n;Di(n,61,0,1,0)|0;v=n}else v=m;s=c[t>>2]|0;s=(s|0)==0?f:s;m=s+84|0;n=c[m>>2]|0;g=1<<M;do if((((n&g|0)==0?(c[m>>2]=n|g,(M|0)==1):0)?(N=c[s>>2]|0,I=N+16|0,(c[(c[I>>2]|0)+20>>2]|0)==0):0)?(a[s+199>>0]|0)==0:0){m=Pe(c[N>>2]|0,0,N,K,0,542)|0;if(m|0){cd(s,32157,J);c[s+12>>2]=m;break}K=c[K>>2]|0;c[(c[I>>2]|0)+20>>2]=K;m=c[N+92>>2]|0;p=c[K+4>>2]|0;c[p+4>>2]=c[K>>2];if(!(b[p+22>>1]&2)){h=p+32|0;q=p+36|0;r=(c[h>>2]|0)-(c[q>>2]|0)|0;do if((m+-512|0)>>>0<65025?(m+-1&m|0)==0:0){c[h>>2]=m;o=p+80|0;m=c[o>>2]|0;if(!m)break;n=m+-4|0;c[o>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;K=(c[14820]|0)+1|0;c[14820]=K;c[14821]=(K|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;O=181;break}else{m=Wa[c[29352>>2]&127](n)|0;O=181}while(0);do if((O|0)==181){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{K=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[o>>2]=0}while(0);K=Se(c[p>>2]|0,h,r)|0;c[q>>2]=(c[h>>2]|0)-(r&65535);if((K|0)==7){m=N+81|0;do if(!(a[m>>0]|0)){if(a[N+82>>0]|0)break;a[m>>0]=1;if((c[N+180>>2]|0)>0)c[N+264>>2]=1;m=N+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[N+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);break}}}while(0);i=s+80|0;c[i>>2]=c[i>>2]|g;i=s+20|0;a[i>>0]=a[i>>0]|1;i=v+108|0;do if(!F){m=c[i>>2]|0;n=v+112|0;if((c[n>>2]|0)>(m|0)){c[i>>2]=m+1;p=c[v+104>>2]|0;a[p+(m*20|0)>>0]=-96;p=p+(m*20|0)+1|0;s=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));r=n;break}else{Di(v,160,0,0,0)|0;r=n;break}}else r=v+112|0;while(0);m=f+44|0;q=c[m>>2]|0;h=q+1|0;c[f+88>>2]=h;p=q+2|0;c[f+92>>2]=p;q=q+3|0;c[m>>2]=q;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;N=c[v+104>>2]|0;a[N+(m*20|0)>>0]=94;b[N+(m*20|0)+2>>1]=0;c[N+(m*20|0)+4>>2]=M;c[N+(m*20|0)+8>>2]=q;c[N+(m*20|0)+12>>2]=2;c[N+(m*20|0)+16>>2]=0;a[N+(m*20|0)+1>>0]=0}else Di(v,94,M,q,2)|0;N=v+152|0;c[N>>2]=c[N>>2]|g;if((M|0)!=1?a[(c[(c[(c[v>>2]|0)+16>>2]|0)+(M<<4)+4>>2]|0)+9>>0]|0:0){N=v+156|0;c[N>>2]=c[N>>2]|g}m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;o=c[v+104>>2]|0;a[o+(m*20|0)>>0]=18;b[o+(m*20|0)+2>>1]=0;c[o+(m*20|0)+4>>2]=q;c[o+(m*20|0)+8>>2]=0;c[o+(m*20|0)+12>>2]=0;c[o+(m*20|0)+16>>2]=0;a[o+(m*20|0)+1>>0]=0;o=m}else o=Di(v,18,q,0,0)|0;m=(0==0?(c[P+32>>2]&2|0)==0:0)?4:1;n=c[i>>2]|0;if((c[r>>2]|0)>(n|0)){c[i>>2]=n+1;N=c[v+104>>2]|0;a[N+(n*20|0)>>0]=95;b[N+(n*20|0)+2>>1]=0;c[N+(n*20|0)+4>>2]=M;c[N+(n*20|0)+8>>2]=2;c[N+(n*20|0)+12>>2]=m;c[N+(n*20|0)+16>>2]=0;a[N+(n*20|0)+1>>0]=0}else Di(v,95,M,2,m)|0;m=d[P+78>>0]|0;n=c[i>>2]|0;if((c[r>>2]|0)>(n|0)){c[i>>2]=n+1;P=c[v+104>>2]|0;a[P+(n*20|0)>>0]=95;b[P+(n*20|0)+2>>1]=0;c[P+(n*20|0)+4>>2]=M;c[P+(n*20|0)+8>>2]=5;c[P+(n*20|0)+12>>2]=m;c[P+(n*20|0)+16>>2]=0;a[P+(n*20|0)+1>>0]=0}else Di(v,95,M,5,m)|0;m=c[i>>2]|0;if(!(a[(c[v>>2]|0)+81>>0]|0))n=(c[v+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else n=59308;c[n+8>>2]=m;n=(c[r>>2]|0)>(m|0);do if(k|j)if(n){c[i>>2]=m+1;P=c[v+104>>2]|0;a[P+(m*20|0)>>0]=70;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=0;c[P+(m*20|0)+8>>2]=p;c[P+(m*20|0)+12>>2]=0;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0;break}else{Di(v,70,0,p,0)|0;break}else{if(n){c[i>>2]=m+1;P=c[v+104>>2]|0;a[P+(m*20|0)>>0]=-117;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=M;c[P+(m*20|0)+8>>2]=p;c[P+(m*20|0)+12>>2]=1;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0}else m=Di(v,139,M,p,1)|0;c[f+128>>2]=m}while(0);o=c[u>>2]|0;i:do if(!o){n=c[f>>2]|0;do if(!(c[t>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);j:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))O=238;else{o=0;break i}else{do if((e[n+276>>1]|0)>=224){m=n+300|0;o=c[m>>2]|0;if(o|0){c[m>>2]=c[o>>2];P=n+284|0;c[P>>2]=(c[P>>2]|0)+1;break j}m=n+296|0;o=c[m>>2]|0;if(!o){m=n+292|0;break}else{c[m>>2]=c[o>>2];P=n+284|0;c[P>>2]=(c[P>>2]|0)+1;break j}}else m=n+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;O=238}while(0);if((O|0)==238)o=_d(n,224,0)|0;if(!o){o=0;break}p=o+104|0;s=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(s|0));c[o>>2]=n;m=n+4|0;n=c[m>>2]|0;if(n|0)c[n+4>>2]=o;c[o+8>>2]=n;c[o+4>>2]=0;c[m>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[u>>2]=o;Di(o,61,0,1,0)|0}while(0);Hj(f,M,1,1,34585);n=o+108|0;m=c[n>>2]|0;if((c[o+112>>2]|0)>(m|0)){c[n>>2]=m+1;P=c[o+104>>2]|0;a[P+(m*20|0)>>0]=109;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=0;c[P+(m*20|0)+8>>2]=1;c[P+(m*20|0)+12>>2]=M;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0}else m=Di(o,109,0,1,M)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){P=c[o+104>>2]|0;a[P+(m*20|0)+1>>0]=-3;c[P+(m*20|0)+16>>2]=5}m=f+40|0;if(!(c[m>>2]|0))c[m>>2]=1;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=121;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=0;c[f+(m*20|0)+8>>2]=h;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(v,121,0,h,0)|0;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=75;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=6;c[f+(m*20|0)+8>>2]=q;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else m=Di(v,75,6,q,0)|0;do if(!(a[(c[v>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[i>>2]|0)+-1|0;n=c[v+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=39398;a[o>>0]=-1;break}else{Ei(v,n+(m*20|0)|0,39398,-1);break}}while(0);m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=122;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=0;c[f+(m*20|0)+8>>2]=q;c[f+(m*20|0)+12>>2]=h;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(v,122,0,q,h)|0;m=c[i>>2]|0;if((m|0)>0)b[(c[v+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=8;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;p=c[v+104>>2]|0;a[p+(m*20|0)>>0]=117;p=p+(m*20|0)+1|0;s=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));Ra=Q;return}else{Di(v,117,0,0,0)|0;Ra=Q;return}}else O=270;while(0);if((O|0)==270?P|0:0)O=271;if((O|0)==271){if(c[P+480>>2]|0){Xd(P,E);Ra=Q;return}f=E;if((c[P+304>>2]|0)>>>0<=f>>>0?(c[P+308>>2]|0)>>>0>f>>>0:0){f=P+300|0;c[E>>2]=c[f>>2];c[f>>2]=E;Ra=Q;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);Ra=Q;return}else{f=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);Ra=Q;return}}function cj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;da=Ra;Ra=Ra+272|0;$=da+192|0;_=da+184|0;Y=da+152|0;R=da+136|0;X=da+128|0;W=da+120|0;T=da+112|0;P=da+104|0;w=da+96|0;v=da+88|0;u=da+80|0;S=da+232|0;N=da;O=da+200|0;ba=c[f>>2]|0;Q=(j|0)==0;if((h|0)==0&Q){Ra=da;return}aa=f+228|0;ca=c[aa>>2]|0;if(!ca){Ra=da;return}if(((Q?(k=c[ca>>2]|0,r=Ru(k,95)|0,r|0):0)?(a[r>>0]=0,l=Sd(ba,k,0)|0,a[r>>0]=95,l|0):0)?c[l+56>>2]|0:0){q=c[c[l+60>>2]>>2]|0;n=c[ba+348>>2]|0;if(!n){l=ba+340|0;k=ba+344|0}else{l=a[q>>0]|0;if(!(l<<24>>24))k=0;else{k=0;m=q;do{m=m+1|0;k=G(k+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[m>>0]|0}while(l<<24>>24!=0)}k=(k>>>0)%((c[ba+336>>2]|0)>>>0)|0;l=n+(k<<3)|0;k=n+(k<<3)+4|0}l=c[l>>2]|0;a:do if(!l)k=59292;else{p=d[208+(d[q>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;l=l+-1|0;n=c[k+12>>2]|0;V=a[n>>0]|0;m=(d[208+(V&255)>>0]|0)-p|0;if(!(V<<24>>24==0|(m|0)!=0)){o=q;do{n=n+1|0;o=o+1|0;V=a[n>>0]|0;m=(d[208+(V&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(V<<24>>24==0|(m|0)!=0))}if(!m)break a;if(!l){k=59292;break}}}while(0);k=c[k+8>>2]|0;if(((k|0?(s=c[k>>2]|0,(c[s>>2]|0)>=3):0)?(t=c[s+92>>2]|0,t|0):0)?Wa[t&127](r+1|0)|0:0){V=ca+36|0;c[V>>2]=c[V>>2]|1024}}V=ba+165|0;do if(a[V>>0]|0)if(Q){M=c[ba+160>>2]|0;c[ca+28>>2]=M;if((M|0)!=1)break;M=ca+36|0;c[M>>2]=c[M>>2]|1;break}else{cd(f,59952,u);Ra=da;return}while(0);b:do if(i&32){k=ca+36|0;l=c[k>>2]|0;if(l&8|0){cd(f,39491,v);Ra=da;return}if(!(l&4)){c[w>>2]=c[ca>>2];cd(f,39541,w);break}c[k>>2]=l|96;M=c[f>>2]|0;v=c[f+8>>2]|0;u=M+166|0;if((a[u>>0]&2)==0?(x=b[ca+42>>1]|0,x<<16>>16>0):0){m=c[ca+4>>2]|0;l=x<<16>>16;k=0;do{if(a[m+(k<<4)+15>>0]&1)a[m+(k<<4)+12>>0]=2;k=k+1|0}while((k|0)!=(l|0))}k=c[f+128>>2]|0;if(k|0){if((k|0)<0)k=(c[v+108>>2]|0)+-1|0;if(!(a[(c[v>>2]|0)+81>>0]|0))k=(c[v+104>>2]|0)+(k*20|0)|0;else k=59308;c[k+12>>2]=2}l=ca+40|0;k=b[l>>1]|0;do if(k<<16>>16>-1){k=c[(c[ca+4>>2]|0)+(k<<16>>16<<4)>>2]|0;c[S>>2]=k;if(!k)k=0;else k=(Eu(k)|0)&1073741823;c[S+4>>2]=k;k=oj(M,59,S,0)|0;k=nj(c[f>>2]|0,0,k)|0;if((k|0?(a[k+16>>0]=a[f+198>>0]|0,hj(f,0,0,0,k,d[ca+48>>0]|0,0,0,0,0,2),(a[M+81>>0]|0)==0):0)?(c[f+36>>2]|0)==0:0){k=c[ca+8>>2]|0;c:do if(!k)k=0;else while(1){K=k+55|0;if(((d[K>>0]|d[K+1>>0]<<8)&3)==2)break c;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);b[l>>1]=-1;K=k;break}break b}else{k=c[ca+8>>2]|0;d:do if(!k)k=0;else while(1){K=k+55|0;if(((d[K>>0]|d[K+1>>0]<<8)&3)==2)break d;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);t=k+50|0;m=b[t>>1]|0;if((m&65535)>1){r=c[k+4>>2]|0;s=k+52|0;l=1;q=1;do{p=b[r+(q<<1)>>1]|0;e:do if((l|0)>0){n=r;o=l;while(1){if((b[n>>1]|0)==p<<16>>16)break;if((o|0)>1){n=n+2|0;o=o+-1|0}else{U=70;break e}}b[s>>1]=(b[s>>1]|0)+-1<<16>>16}else U=70;while(0);if((U|0)==70){U=0;b[r+(l<<1)>>1]=p;l=l+1|0;m=b[t>>1]|0}q=q+1|0}while(q>>>0<(m&65535)>>>0)}else l=1;b[t>>1]=l;K=k}while(0);I=K+55|0;k=d[I>>0]|d[I+1>>0]<<8;J=k|32;a[I>>0]=J;a[I+1>>0]=J>>8;if(!(a[u>>0]&2)){J=k|40;a[I>>0]=J;a[I+1>>0]=J>>8}m=b[K+50>>1]|0;J=m&65535;l=K+44|0;if(v|0?(y=c[l>>2]|0,(y|0)>0):0){if(!(a[(c[v>>2]|0)+81>>0]|0))k=(c[v+104>>2]|0)+(y*20|0)|0;else k=59308;a[k>>0]=11}c[l>>2]=c[ca+28>>2];k=c[ca+8>>2]|0;if(k|0){w=m<<16>>16==0;x=K+4|0;y=M+272|0;z=K+32|0;A=M+276|0;B=M+81|0;C=M+288|0;D=M+300|0;E=M+296|0;F=M+284|0;H=M+292|0;do{u=k+55|0;f:do if(((d[u>>0]|d[u+1>>0]<<8)&3)!=2){v=k+50|0;l=b[v>>1]|0;do if(!w){s=c[x>>2]|0;t=l&65535;if(!(l<<16>>16)){m=J;n=0}else{r=c[k+4>>2]|0;m=0;q=0;do{p=b[s+(q<<1)>>1]|0;n=r;o=t;while(1){if((b[n>>1]|0)==p<<16>>16)break;if((o|0)>1){n=n+2|0;o=o+-1|0}else{U=89;break}}if((U|0)==89){U=0;m=m+1|0}q=q+1|0}while((q|0)!=(J|0));n=l}if(!m){l=n;break}o=m+(n&65535)|0;p=k+52|0;if((o|0)>(e[p>>1]|0)){n=o*7|0;m=((n|0)<0)<<31>>31;g:do if(c[y>>2]|0)if(!(a[B>>0]|0))U=103;else break b;else{do if(0<m>>>0|(0==(m|0)?(e[A>>1]|0)>>>0<n>>>0:0))l=C;else{l=c[D>>2]|0;if(l|0){c[D>>2]=c[l>>2];c[F>>2]=(c[F>>2]|0)+1;break g}l=c[E>>2]|0;if(!l){l=H;break}c[E>>2]=c[l>>2];c[F>>2]=(c[F>>2]|0)+1;break g}while(0);c[l>>2]=(c[l>>2]|0)+1;U=103}while(0);if((U|0)==103){U=0;l=_d(M,n,m)|0}if(!l)break b;gw(l|0,0,n|0)|0;s=k+32|0;ew(l|0,c[s>>2]|0,e[p>>1]<<2|0)|0;c[s>>2]=l;m=l+(o<<2)|0;r=k+4|0;ew(m|0,c[r>>2]|0,e[p>>1]<<1|0)|0;c[r>>2]=m;m=m+(o<<1)|0;l=k+28|0;ew(m|0,c[l>>2]|0,e[p>>1]|0)|0;c[l>>2]=m;b[p>>1]=o;l=d[u>>0]|d[u+1>>0]<<8|16;a[u>>0]=l;a[u+1>>0]=l>>8;l=b[v>>1]|0;m=l&65535}else{m=t;r=k+4|0;s=k+32|0}n=0;while(1){p=c[r>>2]|0;q=b[(c[x>>2]|0)+(n<<1)>>1]|0;h:do if(!(l<<16>>16))U=111;else{o=p;l=l&65535;while(1){if((b[o>>1]|0)==q<<16>>16){l=m;break h}if((l|0)>1){o=o+2|0;l=l+-1|0}else{U=111;break}}}while(0);if((U|0)==111){U=0;b[p+(m<<1)>>1]=q;c[(c[s>>2]|0)+(m<<2)>>2]=c[(c[z>>2]|0)+(n<<2)>>2];l=m+1|0}n=n+1|0;if((n|0)==(J|0))break f;m=l;l=b[v>>1]|0}}while(0);b[k+52>>1]=l}while(0);k=c[k+20>>2]|0}while((k|0)!=0)}s=ca+42|0;l=b[s>>1]|0;p=l<<16>>16;t=K+52|0;if((J|0)<(p|0)){k=b[t>>1]|0;if((k&65535|0)<(p|0)){o=p*7|0;n=((o|0)<0)<<31>>31;i:do if(!M){M=Sv(o|0,n|0,-1,-1)|0;H=L()|0;if(H>>>0>0|(H|0)==0&M>>>0>2147483390)break b;if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;U=141;break}k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){M=c[14978]|0;H=Tv(m|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;F=L()|0;c[14768]=((F|0)<0|(F|0)==0&H>>>0<=M>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break b;m=Wa[c[29352>>2]&127](k)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[M+272>>2]|0){if(a[M+81>>0]|0)break b}else{do if(!(0<n>>>0|(0==(n|0)?(e[M+276>>1]|0)>>>0<o>>>0:0))){m=M+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];U=M+284|0;c[U>>2]=(c[U>>2]|0)+1;U=141;break i}m=M+296|0;k=c[m>>2]|0;if(!k){k=M+292|0;break}else{c[m>>2]=c[k>>2];U=M+284|0;c[U>>2]=(c[U>>2]|0)+1;U=141;break i}}else k=M+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(M,o,n)|0;U=141}while(0);if((U|0)==141)if(!k)break;gw(k|0,0,o|0)|0;M=K+32|0;ew(k|0,c[M>>2]|0,e[t>>1]<<2|0)|0;c[M>>2]=k;M=k+(p<<2)|0;k=K+4|0;ew(M|0,c[k>>2]|0,e[t>>1]<<1|0)|0;c[k>>2]=M;M=M+(p<<1)|0;k=K+28|0;ew(M|0,c[k>>2]|0,e[t>>1]|0)|0;c[k>>2]=M;b[t>>1]=l;k=d[I>>0]|d[I+1>>0]<<8|16;a[I>>0]=k;a[I+1>>0]=k>>8;k=l;l=b[s>>1]|0}if(l<<16>>16>0){q=K+4|0;r=K+32|0;p=0;k=J;do{o=c[q>>2]|0;j:do if((k|0)>0){m=o;n=k;while(1){if((p|0)==(b[m>>1]|0))break j;if((n|0)>1){m=m+2|0;n=n+-1|0}else{U=149;break}}}else U=149;while(0);if((U|0)==149){U=0;b[o+(k<<1)>>1]=p;c[(c[r>>2]|0)+(k<<2)>>2]=34049;k=k+1|0;l=b[s>>1]|0}p=p+1|0}while((p|0)<(l<<16>>16|0));k=b[t>>1]|0}}else{b[t>>1]=l;k=l}if(!(k<<16>>16)){l=-1;k=-1}else{m=c[K+4>>2]|0;k=k&65535;l=0;n=0;do{M=k;k=k+-1|0;H=b[m+(k<<1)>>1]|0;I=(H&65535)<63;H=cw(1,0,H<<16>>16|0)|0;J=L()|0;l=(I?H:0)|l;n=(I?J:0)|n}while((M|0)>1);l=~l;k=~n}M=K+64|0;c[M>>2]=l;c[M+4>>2]=k}while(0);F=ca+72|0;l=c[F>>2]|0;if(!l)E=-1e6;else{m=c[ba+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){E=k;break}else k=k+1|0}w=c[ca+24>>2]|0;if(w|0){k=O+8|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;k=N;n=k+80|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(n|0));c[N>>2]=1;c[N+16>>2]=c[ca>>2];c[N+24>>2]=ca;c[N+48>>2]=-1;c[O>>2]=f;c[O+4>>2]=N;q=O+24|0;b[q>>1]=4;k:do if((c[w>>2]|0)>0){r=S+4|0;s=S+8|0;t=S+12|0;u=S+24|0;v=O+20|0;p=0;k=4;while(1){o=c[w+4+(p*20|0)>>2]|0;if(o){m=k&65535;b[q>>1]=m&28655;k=c[O>>2]|0;c[S>>2]=k;c[r>>2]=125;c[s>>2]=126;c[t>>2]=0;c[u>>2]=O;n=o+24|0;l=k;M=l+208|0;N=(c[M>>2]|0)+(c[n>>2]|0)|0;c[M>>2]=N;l=c[(c[l>>2]|0)+120>>2]|0;if((l|0)<(N|0)){U=168;break}_j(S,o)|0;l=c[S>>2]|0;k=l+208|0;c[k>>2]=(c[k>>2]|0)-(c[n>>2]|0);k=b[q>>1]|0;N=o+4|0;c[N>>2]=c[N>>2]|k&-32752&65535;k=(m&36880|k&65535)&65535;b[q>>1]=k;if((c[v>>2]|0)>0)break;if((c[l+36>>2]|0)>=1)break k}p=p+1|0;if((p|0)>=(c[w>>2]|0))break k}if((U|0)==168){c[P>>2]=l;cd(k,41637,P)}}while(0)}D=ca+42|0;l=b[D>>1]|0;if(l<<16>>16>0){m=c[ca+4>>2]|0;k=0;l=l<<16>>16;while(1){k=k+(d[m+14>>0]|0)|0;if((l|0)>1){m=m+16|0;l=l+-1|0}else break}}else k=0;k=k+((e[ca+40>>1]|0)>>>15&65535)<<2;if(k>>>0<8)if(!k)k=0;else{m=40;l=0;do{m=(m&65535)+65526|0;k=cw(k|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&k>>>0<8);m=m&65535;U=189}else{if(k>>>0>255){m=40;l=0;do{m=(m&65535)+40|0;U=k;k=bw(k|0,l|0,4)|0;P=l;l=L()|0}while(P>>>0>0|(P|0)==0&U>>>0>4095);m=m&65535}else{m=40;l=0}if(l>>>0>0|(l|0)==0&k>>>0>15){do{m=(m&65535)+10&65535;U=k;k=bw(k|0,l|0,1)|0;P=l;l=L()|0}while(P>>>0>0|(P|0)==0&U>>>0>31);U=189}else U=189}if((U|0)==189)k=(m&65535)+65526+(e[3648+((k&7)<<1)>>1]|0)&65535;b[ca+46>>1]=k;k=c[ca+8>>2]|0;if(k|0)do{xk(k);k=c[k+20>>2]|0}while((k|0)!=0);if(!(a[V>>0]|0)){C=f+8|0;k=c[C>>2]|0;if(!k){m=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;l:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))U=209;else{Ra=da;return}else{do if((e[m+276>>1]|0)>=224){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];P=m+284|0;c[P>>2]=(c[P>>2]|0)+1;break l}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];P=m+284|0;c[P>>2]=(c[P>>2]|0)+1;break l}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;U=209}while(0);if((U|0)==209)l=_d(m,224,0)|0;if(!l){Ra=da;return}k=l+104|0;n=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(n|0));c[l>>2]=m;k=m+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[C>>2]=l;Di(l,61,0,1,0)|0;B=l}else B=k;u=B+108|0;k=c[u>>2]|0;v=B+112|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;n=c[B+104>>2]|0;a[n+(k*20|0)>>0]=117;k=n+(k*20|0)+1|0;n=k+19|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(n|0))}else Di(B,117,0,0,0)|0;A=(c[ca+12>>2]|0)==0;n=A?39573:39584;A=A?37991:39579;m:do if(Q){l=i<<24>>24==0?h:f+188|0;X=c[l>>2]|0;m=c[f+180>>2]|0;k=X-m|0;if((a[X>>0]|0)!=59)k=(c[l+4>>2]|0)+k|0;c[R>>2]=n;c[R+4>>2]=k;c[R+8>>2]=m;m=dd(ba,39589,R)|0;l=f+92|0;k=ca}else{l=f+44|0;t=c[l>>2]|0;p=t+1|0;s=t+2|0;t=t+3|0;c[l>>2]=t;l=c[f+116>>2]|0;a[((l|0)==0?f:l)+21>>0]=1;l=f+92|0;k=c[l>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;R=c[B+104>>2]|0;a[R+(m*20|0)>>0]=109;b[R+(m*20|0)+2>>1]=0;c[R+(m*20|0)+4>>2]=1;c[R+(m*20|0)+8>>2]=k;c[R+(m*20|0)+12>>2]=E;c[R+(m*20|0)+16>>2]=0;a[R+(m*20|0)+1>>0]=0}else Di(B,109,1,k,E)|0;o=c[u>>2]|0;if((o|0)>0)b[(c[B+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=16;c[f+40>>2]=2;k=o+1|0;if((c[v>>2]|0)>(o|0)){c[u>>2]=k;R=c[B+104>>2]|0;a[R+(o*20|0)>>0]=13;b[R+(o*20|0)+2>>1]=0;c[R+(o*20|0)+4>>2]=p;c[R+(o*20|0)+8>>2]=0;c[R+(o*20|0)+12>>2]=k;c[R+(o*20|0)+16>>2]=0;a[R+(o*20|0)+1>>0]=0}else Di(B,13,p,0,k)|0;m=f+36|0;do if(!(c[m>>2]|0)){k=yk(f,j)|0;if(!k)break;i=k+42|0;b[D>>1]=b[i>>1]|0;R=k+4|0;w=ca+4|0;c[w>>2]=c[R>>2];b[i>>1]=0;c[R>>2]=0;do if(!(c[ba+480>>2]|0)){i=k+32|0;R=(c[i>>2]|0)+-1|0;c[i>>2]=R;if(R|0)break;Vi(ba,k)}else Vi(ba,k);while(0);a[S>>0]=13;n=S+4|0;c[n>>2]=p;c[S+16>>2]=0;q=S+8|0;c[q>>2]=0;r=S+12|0;c[r>>2]=0;kj(f,j,S)|0;if(c[m>>2]|0)break;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=67;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=p;c[S+(k*20|0)+8>>2]=0;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,67,p,0,0)|0;m=c[B+12>>2]|0;a[m+19>>0]=0;c[m+28>>2]=0;m=c[u>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))k=(c[B+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=m;k=c[n>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;o=c[B+104>>2]|0;a[o+(m*20|0)>>0]=14;b[o+(m*20|0)+2>>1]=0;c[o+(m*20|0)+4>>2]=k;c[o+(m*20|0)+8>>2]=0;c[o+(m*20|0)+12>>2]=0;c[o+(m*20|0)+16>>2]=0;a[o+(m*20|0)+1>>0]=0;o=m}else o=Di(B,14,k,0,0)|0;n=c[q>>2]|0;k=c[r>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;S=c[B+104>>2]|0;a[S+(m*20|0)>>0]=92;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=n;c[S+(m*20|0)+8>>2]=k;c[S+(m*20|0)+12>>2]=s;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0}else Di(B,92,n,k,s)|0;zk(B,ca,0);k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=121;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=1;c[S+(k*20|0)+8>>2]=t;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,121,1,t,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=122;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=1;c[S+(k*20|0)+8>>2]=s;c[S+(k*20|0)+12>>2]=t;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,122,1,s,t)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=o;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,11,0,o,0)|0;m=c[u>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))k=(c[B+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=m;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;S=c[B+104>>2]|0;a[S+(m*20|0)>>0]=117;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=1;c[S+(m*20|0)+8>>2]=0;c[S+(m*20|0)+12>>2]=0;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0}else Di(B,117,1,0,0)|0;S=b[D>>1]|0;r=S<<16>>16;if(S<<16>>16>0){o=0;p=c[w>>2]|0;k=0;while(1){m=0;n=c[p>>2]|0;n:while(1){switch(a[n>>0]|0){case 0:break n;case 34:{m=m+1|0;break}default:{}}m=m+1|0;n=n+1|0}k=k+7+m|0;o=o+1|0;if((o|0)==(r|0)){n=k;break}else p=p+16|0}}else n=0;k=0;m=c[ca>>2]|0;o:while(1){switch(a[m>>0]|0){case 0:break o;case 34:{k=k+1|0;break}default:{}}k=k+1|0;m=m+1|0}x=n+2+k|0;z=(x|0)<50;q=z?59952:41687;y=z?41685:41691;z=z?34066:41696;x=(r*6|0)+35+x|0;S=Sv(x|0,((x|0)<0)<<31>>31|0,-1,-1)|0;j=L()|0;p:do if(!(j>>>0>0|(j|0)==0&S>>>0>2147483390)){do if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](x)|0;if(!m)break p}else{k=Wa[c[29356>>2]&127](x)|0;if((c[14985]|0)>>>0<x>>>0)c[14985]=x;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){S=c[14978]|0;j=Tv(m|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;R=L()|0;c[14768]=((R|0)<0|(R|0)==0&j>>>0<=S>>>0)&1}m=Wa[c[29340>>2]&127](k)|0;if(!m)break p;k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}while(0);Cb(x,m,41699,T)|0;k=(Eu(m)|0)&1073741823;u=c[ca>>2]|0;t=a[u>>0]|0;q:do if(!(t<<24>>24)){n=0;s=0}else{n=0;o=t;while(1){if(!(o<<24>>24==95?1:(a[880+(o&255)>>0]&6)!=0)){s=1;break q}n=n+1|0;o=a[u+n>>0]|0;if(!(o<<24>>24)){s=0;break}}}while(0);o=t&255;r:do if((o+-48|0)>>>0>=10){do if((n|0)>1){o=a[3952+((d[208+o>>0]<<2^n^(d[208+(d[u+(n+-1)>>0]|0)>>0]|0)*3|0)%127|0)>>0]|0;if(!(o<<24>>24))break;o=o&255;while(1){p=o+-1|0;s:do if((n|0)==(d[2064+p>>0]|0)){r=1136+(e[1776+(p<<1)>>1]|0)|0;o=0;while(1){if((a[u+o>>0]&-33)<<24>>24!=(a[r+o>>0]|0))break s;o=o+1|0;if((o|0)>=(n|0)){U=302;break r}}}while(0);o=a[4224+p>>0]|0;if(!(o<<24>>24))break;else o=o&255}}while(0);if(!((n|0)==0|s)){p=t;t=0}else U=302}else U=302;while(0);if((U|0)==302){a[m+k>>0]=34;k=k+1|0;p=a[u>>0]|0;t=1}n=k+1|0;o=m+k|0;if(p<<24>>24){s=0;r=u;do{a[o>>0]=p;if((a[r>>0]|0)==34){a[m+n>>0]=34;k=k+2|0}else k=n;s=s+1|0;r=u+s|0;p=a[r>>0]|0;n=k+1|0;o=m+k|0}while(p<<24>>24!=0)}if(t){a[o>>0]=34;k=n}o=k+1|0;a[m+k>>0]=40;k=x-o|0;n=m+o|0;if((b[D>>1]|0)>0){p=0;v=c[w>>2]|0;while(1){Cb(k,n,q,W)|0;k=((Eu(n)|0)&1073741823)+o|0;u=c[v>>2]|0;t=a[u>>0]|0;t:do if(!(t<<24>>24)){n=0;s=0}else{n=0;o=t;while(1){if(!(o<<24>>24==95?1:(a[880+(o&255)>>0]&6)!=0)){s=1;break t}n=n+1|0;o=a[u+n>>0]|0;if(!(o<<24>>24)){s=0;break}}}while(0);o=t&255;u:do if((o+-48|0)>>>0>=10){do if((n|0)>1){o=a[3952+((d[208+o>>0]<<2^n^(d[208+(d[u+(n+-1)>>0]|0)>>0]|0)*3|0)%127|0)>>0]|0;if(!(o<<24>>24))break;o=o&255;while(1){q=o+-1|0;v:do if((n|0)==(d[2064+q>>0]|0)){r=1136+(e[1776+(q<<1)>>1]|0)|0;o=0;while(1){if((a[u+o>>0]&-33)<<24>>24!=(a[r+o>>0]|0))break v;o=o+1|0;if((o|0)>=(n|0)){U=326;break u}}}while(0);o=a[4224+q>>0]|0;if(!(o<<24>>24))break;else o=o&255}}while(0);if(!((n|0)==0|s)){q=t;t=0}else U=326}else U=326;while(0);if((U|0)==326){U=0;a[m+k>>0]=34;k=k+1|0;q=a[u>>0]|0;t=1}n=k+1|0;o=m+k|0;if(q<<24>>24){s=0;r=u;do{a[o>>0]=q;if((a[r>>0]|0)==34){a[m+n>>0]=34;k=k+2|0}else k=n;s=s+1|0;r=u+s|0;q=a[r>>0]|0;n=k+1|0;o=m+k|0}while(q<<24>>24!=0)}if(t){a[o>>0]=34;k=n}T=m+k|0;a[T>>0]=0;n=c[18080+((a[v+13>>0]|0)+-65<<2)>>2]|0;o=(Eu(n)|0)&1073741823;ew(T|0,n|0,o|0)|0;o=o+k|0;p=p+1|0;k=x-o|0;n=m+o|0;if((p|0)<(b[D>>1]|0)){v=v+16|0;q=y}else break}}c[X>>2]=z;Cb(k,n,31408,X)|0;k=ca;break m}while(0);k=ba+81|0;if(a[k>>0]|0){m=0;k=ca;break m}if(a[ba+82>>0]|0){m=0;k=ca;break m}a[k>>0]=1;if((c[ba+180>>2]|0)>0)c[ba+264>>2]=1;k=ba+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[ba+236>>2]|0;if(!k){m=0;k=ca;break m}c[k+12>>2]=7;m=0;k=ca;break m}while(0);Ra=da;return}while(0);p=ba+16|0;U=c[k>>2]|0;W=c[l>>2]|0;X=c[f+88>>2]|0;c[Y>>2]=c[(c[p>>2]|0)+(E<<4)>>2];c[Y+4>>2]=34585;c[Y+8>>2]=A;c[Y+12>>2]=U;c[Y+16>>2]=U;c[Y+20>>2]=W;c[Y+24>>2]=m;c[Y+28>>2]=X;Ak(f,39604,Y);w:do if(m|0){if(c[ba+480>>2]|0){Xd(ba,m);break}l=m;do if((c[ba+304>>2]|0)>>>0<=l>>>0){if((c[ba+308>>2]|0)>>>0<=l>>>0)break;Y=ba+300|0;c[m>>2]=c[Y>>2];c[Y>>2]=m;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Y=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);l=c[C>>2]|0;m=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(E<<4)+12>>2]>>2]|0)+1|0;n=l+108|0;o=c[n>>2]|0;if((c[l+112>>2]|0)>(o|0)){c[n>>2]=o+1;Y=c[l+104>>2]|0;a[Y+(o*20|0)>>0]=95;b[Y+(o*20|0)+2>>1]=0;c[Y+(o*20|0)+4>>2]=E;c[Y+(o*20|0)+8>>2]=1;c[Y+(o*20|0)+12>>2]=m;c[Y+(o*20|0)+16>>2]=0;a[Y+(o*20|0)+1>>0]=0}else Di(l,95,E,1,m)|0;if(c[ca+36>>2]&8|0?(Z=c[p>>2]|0,(c[(c[Z+(E<<4)+12>>2]|0)+72>>2]|0)==0):0){c[_>>2]=c[Z+(E<<4)>>2];Ak(f,39691,_)}c[$>>2]=c[k>>2];Bk(B,E,dd(ba,39733,$)|0);if(!(a[V>>0]|0)){Ra=da;return}}else k=ca;if(mi((c[F>>2]|0)+8|0,c[k>>2]|0,ca)|0){k=ba+81|0;if(a[k>>0]|0){Ra=da;return}if(a[ba+82>>0]|0){Ra=da;return}a[k>>0]=1;if((c[ba+180>>2]|0)>0)c[ba+264>>2]=1;k=ba+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[ba+236>>2]|0;if(!k){Ra=da;return}c[k+12>>2]=7;Ra=da;return}c[aa>>2]=0;ba=ba+24|0;c[ba>>2]=c[ba>>2]|1;if(c[ca+12>>2]|0){Ra=da;return}k=c[f+180>>2]|0;o=(c[((c[g>>2]|0)==0?h:g)>>2]|0)-k|0;o=(o|0)>-1?k+o|0:-1;l=a[k>>0]|0;if(l<<24>>24!=0&o>>>0>k>>>0){n=0;while(1){m=k+1|0;if((l&255)>191){k=m;while(1){l=a[k>>0]|0;if((l&-64)<<24>>24==-128)k=k+1|0;else break}}else{k=m;l=a[m>>0]|0}if(l<<24>>24!=0&k>>>0<o>>>0)n=n+1|0;else break}k=n+14|0}else k=13;c[ca+52>>2]=k;Ra=da;return}function dj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+64|0;n=s;q=s+4|0;r=c[f>>2]|0;j=c[f+228>>2]|0;do if(j|0){m=c[j+4>>2]|0;l=(b[j+42>>1]|0)+-1|0;j=(d[r+165>>0]|0)+4&255;k=q+20|0;a[k>>0]=j;c[q+4>>2]=127;c[q+8>>2]=128;c[q+24>>2]=0;if(g){_j(q,g)|0;j=a[k>>0]|0}if(!(j<<24>>24)){c[n>>2]=c[m+(l<<4)>>2];cd(f,41761,n);break}o=m+(l<<4)+4|0;j=c[o>>2]|0;if(j|0)ni(r,j);j=q;k=j+52|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));a[q>>0]=-83;while(1)if(!(a[880+(d[h>>0]|0)>>0]&1))break;else h=h+1|0;j=i-h|0;a:do if((j|0)<=0)if(!h)j=0;else{k=j;p=15}else while(1){k=j+-1|0;if(!(a[880+(d[h+k>>0]|0)>>0]&1)){k=j;p=15;break a}if((j|0)>1)j=k;else{p=15;break}}while(0);b:do if((p|0)==15){m=Sv(k|0,((k|0)<0)<<31>>31|0,1,0)|0;n=L()|0;c:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))p=25;else{j=0;break b}else{do if(!(n>>>0>0|((n|0)==0?m>>>0>(e[r+276>>1]|0)>>>0:0))){l=r+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];i=r+284|0;c[i>>2]=(c[i>>2]|0)+1;break c}l=r+296|0;j=c[l>>2]|0;if(!j){j=r+292|0;break}else{c[l>>2]=c[j>>2];i=r+284|0;c[i>>2]=(c[i>>2]|0)+1;break c}}else j=r+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;p=25}while(0);if((p|0)==25)j=_d(r,m,n)|0;if(!j)j=0;else{ew(j|0,h|0,k|0)|0;a[j+k>>0]=0}}while(0);p=q+8|0;c[p>>2]=j;c[q+12>>2]=g;c[q+4>>2]=4096;j=dk(r,q,1,0)|0;c[o>>2]=j;j=c[p>>2]|0;do if(j|0){if(r|0){if(c[r+480>>2]|0){Xd(r,j);break}p=j;if((c[r+304>>2]|0)>>>0<=p>>>0?(c[r+308>>2]|0)>>>0>p>>>0:0){p=r+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0)}while(0);if((d[f+200>>0]|0)>1?(p=q+8|0,c[p>>2]=0,c[p+4>>2]=0,c[p+8>>2]=0,c[p+12>>2]=0,c[p+16>>2]=0,c[q>>2]=f,c[q+4>>2]=124,g|0):0)_j(q,g)|0;if(!g){Ra=s;return}ni(r,g);Ra=s;return}function ej(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;m=n;if(((g|0)==44?(c[f+36>>2]|0)==0:0)?(d[f+200>>0]|0)<=1:0){j=Xk(c[f>>2]|0,h,i)|0;if(!j){m=0;Ra=n;return m|0}else k=f}else l=4;a:do if((l|0)==4){j=c[f>>2]|0;b:do if(c[j+272>>2]|0){if(!(a[j+81>>0]|0))l=14}else{do if((e[j+276>>1]|0)>=52){k=j+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=15;break b}k=j+296|0;l=c[k>>2]|0;if(!l){k=j+292|0;break}else{c[k>>2]=c[l>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=15;break b}}else k=j+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;l=14}while(0);if((l|0)==14){j=_d(j,52,0)|0;l=15}do if((l|0)==15){if(!j){j=c[f>>2]|0;break}k=j;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[j>>0]=g;b[j+34>>1]=-1;if(!i)k=0;else{c[j+16>>2]=i;k=c[i+4>>2]&2097412;c[j+4>>2]=k}if(h|0){c[j+12>>2]=h;c[j+4>>2]=k|c[h+4>>2]&2097412}Ym(j);k=f;break a}while(0);if(h|0)ni(j,h);if(!i){m=0;Ra=n;return m|0}ni(j,i);m=0;Ra=n;return m|0}while(0);k=c[(c[k>>2]|0)+120>>2]|0;if((k|0)>=(c[j+24>>2]|0)){m=j;Ra=n;return m|0}c[m>>2]=k;cd(f,41637,m);m=j;Ra=n;return m|0}function fj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=h;l=c[f>>2]|0;m=i+53|0;a:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))p=11;else{q=0;return q|0}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<m>>>0:0))){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=k;break a}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=k;break a}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;p=11}while(0);if((p|0)==11)o=_d(l,m,0)|0;if(!o){q=o;return q|0}a[o>>0]=g;a[o+1>>0]=0;k=o+4|0;c[k>>2]=8388608;b[o+34>>1]=-1;c[o+16>>2]=0;c[o+12>>2]=0;c[o+20>>2]=0;c[o+40>>2]=0;c[o+44>>2]=0;a[o+38>>0]=0;c[o+28>>2]=0;b[o+32>>1]=0;j=o+52|0;g=o+8|0;c[g>>2]=j;ew(j|0,h|0,i|0)|0;a[j+i>>0]=0;g=c[g>>2]|0;j=a[g>>0]|0;if(((a[880+(j&255)>>0]|0)<0?(c[k>>2]=(j<<24>>24==34?67108928:67108864)|c[k>>2],g|0):0)?(n=a[g>>0]|0,(a[880+(n&255)>>0]|0)<0):0){m=n<<24>>24==91?93:n;l=0;j=1;while(1){k=a[g+j>>0]|0;if(k<<24>>24==m<<24>>24){j=j+1|0;k=g+l|0;if((a[g+j>>0]|0)!=m<<24>>24)break;a[k>>0]=m}else a[g+l>>0]=k;l=l+1|0;j=j+1|0}a[k>>0]=0}c[o+24>>2]=1;if((d[f+200>>0]|0)<=1){q=o;return q|0}l=c[f>>2]|0;b:do if(!l){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;p=47;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){n=c[14978]|0;h=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=n>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){q=o;return q|0}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){q=o;return q|0}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=47;break b}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=47;break b}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(l,16,0)|0;p=47}while(0);if((p|0)==47)if(!j){q=o;return q|0}c[j>>2]=o;c[j+4>>2]=q;c[j+8>>2]=i;q=f+272|0;c[j+12>>2]=c[q>>2];c[q>>2]=j;q=o;return q|0}function gj(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;w=B+8|0;k=B;y=c[e+228>>2]|0;do if(!y)A=60;else{z=y+36|0;j=c[z>>2]|0;if(j&4|0){c[k>>2]=c[y>>2];cd(e,41817,k);A=60;break}x=j|4;c[z>>2]=x;if(f){v=c[f>>2]|0;if((v|0)>0){t=y+42|0;u=y+4|0;l=0;m=-1;s=0;while(1){j=c[f+4+(s*20|0)>>2]|0;a:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break a;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);k=a[j>>0]|0;switch(k<<24>>24){case 110:{a[j>>0]=59;A=20;break}case 106:{k=c[j+12>>2]|0;if((a[k>>0]|0)==110){a[k>>0]=59;k=a[j>>0]|0;A=19}else j=m;break}default:A=19}if((A|0)==19){A=0;if(k<<24>>24==59)A=20;else j=m}b:do if((A|0)==20){A=0;o=c[j+8>>2]|0;j=b[t>>1]|0;if(j<<16>>16>0){r=c[u>>2]|0;n=a[o>>0]|0;q=a[208+(n&255)>>0]|0;p=j<<16>>16;c:do if(!(n<<24>>24)){j=0;while(1){if(q<<24>>24==(a[208+(d[c[r+(j<<4)>>2]>>0]|0)>>0]|0))break c;j=j+1|0;if((j|0)>=(p|0))break b}}else{j=0;while(1){k=c[r+(j<<4)>>2]|0;if(q<<24>>24==(a[208+(d[k>>0]|0)>>0]|0)){m=o;do{m=m+1|0;k=k+1|0;C=a[m>>0]|0;n=(d[208+(C&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(n|0)!=0));if(!n)break c}j=j+1|0;if((j|0)>=(p|0))break b}}while(0);l=r+(j<<4)+15|0;a[l>>0]=a[l>>0]|1;l=r+(j<<4)|0}else j=0}while(0);s=s+1|0;if((s|0)==(v|0))break;else m=j}m=(v|0)==1;n=j;A=34}}else{n=(b[y+42>>1]|0)+-1|0;l=c[y+4>>2]|0;m=l+(n<<4)+15|0;a[m>>0]=a[m>>0]|1;m=1;l=l+(n<<4)|0;A=34}if((A|0)==34?m&(l|0)!=0:0){if(!(a[l+15>>0]&4))k=59952;else{k=c[l>>2]|0;k=k+(Eu(k)|0)+1|0}C=a[k>>0]|0;j=(d[208+(C&255)>>0]|0)+-105|0;if(!(C<<24>>24==0|(j|0)!=0)){l=31453;do{k=k+1|0;l=l+1|0;C=a[k>>0]|0;j=(d[208+(C&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(j|0)!=0))}if((i|0)!=1&(j|0)==0){m=(f|0)!=0;d:do if(m&(d[e+200>>0]|0)>1){j=c[f+4>>2]|0;e:do if(!j)l=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096)){l=j;break e}if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){l=0;break}}while(0);j=y+40|0;k=c[e+272>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break d}c[k>>2]=j}}else j=y+40|0;while(0);b[j>>1]=n;a[y+48>>0]=g;c[z>>2]=x|h<<3;if(m){a[e+198>>0]=a[f+16>>0]|0;break}else{Ra=B;return}}}if(h|0){cd(e,41858,w);A=60;break}hj(e,0,0,0,f,g,0,0,i,0,2);Ra=B;return}while(0);if((A|0)==60?(f|0)==0:0){Ra=B;return}ri(c[e>>2]|0,f);Ra=B;return}function hj(f,g,h,i,j,k,l,m,n,o,p){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;ya=Ra;Ra=Ra+416|0;ta=ya+320|0;sa=ya+296|0;ra=ya+280|0;oa=ya+272|0;na=ya+256|0;ma=ya+248|0;ga=ya+240|0;fa=ya+232|0;ba=ya+224|0;aa=ya+216|0;Y=ya+208|0;U=ya+200|0;T=ya+192|0;S=ya+184|0;Q=ya+176|0;P=ya+168|0;M=ya+160|0;N=ya+152|0;K=ya+144|0;J=ya+136|0;I=ya+128|0;H=ya+120|0;G=ya+112|0;D=ya+104|0;A=ya+96|0;y=ya+88|0;x=ya+80|0;pa=ya+384|0;_=ya;$=ya+352|0;B=ya+328|0;xa=c[f>>2]|0;la=xa+81|0;a:do if(((a[la>>0]|0)==0?(ca=f+36|0,(c[ca>>2]|0)<=0):0)?(ua=f+200|0,da=p<<24>>24==2,da|(a[ua>>0]|0)!=1):0){va=xa+165|0;b:do if(!(a[va>>0]|0)){s=f+4|0;t=xa+24|0;u=(c[t>>2]&1|0)==0;v=xa+16|0;qa=c[(c[v>>2]|0)+12>>2]|0;a[xa+78>>0]=a[qa+77>>0]|0;if(!((b[qa+78>>1]&1)==0?(q=eh(xa,0,s,0)|0,(q|0)!=0):0))wa=7;c:do if((wa|0)==7){q=c[xa+20>>2]|0;if((q|0)>1)do{r=q;q=q+-1|0;if((b[(c[(c[v>>2]|0)+(q<<4)+12>>2]|0)+78>>1]&1)==0?(w=eh(xa,q,s,0)|0,w|0):0){q=w;break c}}while((r|0)>2);if(u)c[t>>2]=c[t>>2]&-2;if(!(a[xa+89>>0]|0))break b;c[t>>2]=c[t>>2]|16;break b}while(0);c[f+12>>2]=q;c[ca>>2]=(c[ca>>2]|0)+1;r=m;q=0;wa=468;break a}while(0);qa=(i|0)!=0;d:do if(qa){q=c[f>>2]|0;z=h+4|0;if(c[z>>2]|0){if(a[q+165>>0]|0){cd(f,39404,x);r=m;q=0;wa=468;break a}q=wk(q,g)|0;if((q|0)<0){c[y>>2]=g;cd(f,39421,y);r=m;q=0;wa=468;break a}else{u=q;g=h}}else u=d[q+164>>0]|0;y=i+8|0;e:do if(!(a[va>>0]|0)){r=c[y>>2]|0;if(!r)q=i+12|0;else{s=c[(c[f>>2]|0)+16>>2]|0;q=0;while(1)if((c[s+(q<<4)+12>>2]|0)==(r|0))break;else q=q+1|0;q=s+(q<<4)|0}x=bd(f,0,c[i+16>>2]|0,c[q>>2]|0)|0;q=c[f>>2]|0;r=i+24|0;s=c[r>>2]|0;do if(s|0){if(q|0?c[q+480>>2]|0:0){Vi(q,s);break}ja=s+32|0;ka=(c[ja>>2]|0)+-1|0;c[ja>>2]=ka;if(!ka)Vi(q,s)}while(0);c[r>>2]=x;if(x){ka=x+32|0;c[ka>>2]=(c[ka>>2]|0)+1;f:do if(a[i+45>>0]&2){v=c[i+72>>2]|0;q=c[x+8>>2]|0;g:do if(q|0){w=d[208+(d[v>>0]|0)>>0]|0;while(1){s=c[q>>2]|0;ka=a[s>>0]|0;r=(d[208+(ka&255)>>0]|0)-w|0;if(!(ka<<24>>24==0|(r|0)!=0)){t=v;do{s=s+1|0;t=t+1|0;ka=a[s>>0]|0;r=(d[208+(ka&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(r|0)!=0))}if(!r)break;q=c[q+20>>2]|0;if(!q)break g}c[i+76>>2]=q;break f}while(0);c[A>>2]=v;c[A+4>>2]=0;cd(f,41107,A);a[f+17>>0]=1;break e}while(0);if(!(c[z>>2]|0))u=(c[x+72>>2]|0)==(c[(c[xa+16>>2]|0)+28>>2]|0)?1:u}}while(0);t=c[f>>2]|0;c[B>>2]=f;t=c[t+16>>2]|0;c[B+12>>2]=c[t+(u<<4)>>2];c[B+4>>2]=c[t+(u<<4)+12>>2];c[B+16>>2]=41914;c[B+20>>2]=g;t=(u|0)==1;c[B+8>>2]=t&1;al(B,i)|0;r=c[y>>2]|0;if(!r)q=i+12|0;else{s=c[(c[f>>2]|0)+16>>2]|0;q=0;while(1)if((c[s+(q<<4)+12>>2]|0)==(r|0))break;else q=q+1|0;q=s+(q<<4)|0}r=bd(f,0,c[i+16>>2]|0,c[q>>2]|0)|0;if(!r){r=m;q=0;wa=468;break a}if(t?(c[(c[xa+16>>2]|0)+28>>2]|0)!=(c[r+72>>2]|0):0){c[D>>2]=c[r>>2];cd(f,41920,D);r=m;q=0;wa=468;break a}if((c[r+36>>2]&32|0)!=0?(C=c[r+8>>2]|0,(C|0)!=0):0){q=C;while(1){ka=q+55|0;if(((d[ka>>0]|d[ka+1>>0]<<8)&3)==2){ka=r;Z=q;ja=u;ha=g;break d}q=c[q+20>>2]|0;if(!q){ka=r;Z=0;ja=u;ha=g;break}}}else{ka=r;Z=0;ja=u;ha=g}}else{q=c[f+228>>2]|0;if(!q){r=m;q=0;wa=468;break a}r=c[q+72>>2]|0;if(!r){ka=q;Z=0;ja=-1e6;ha=0}else{s=c[xa+16>>2]|0;t=0;while(1)if((c[s+(t<<4)+12>>2]|0)==(r|0)){ka=q;Z=0;ja=t;ha=0;break}else t=t+1|0}}while(0);ia=xa+16|0;A=c[ia>>2]|0;t=A+(ja<<4)|0;s=c[ka>>2]|0;do if(s|0){q=a[s>>0]|0;h:do if(!(q<<24>>24)){q=39441;wa=69}else{ea=q&255;q=208+ea|0;do if((ea|32|0)==115){q=a[s+1>>0]|0;if(!(q<<24>>24)){q=39442;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==113){q=a[s+2>>0]|0;if(!(q<<24>>24)){q=39443;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==108){q=a[s+3>>0]|0;if(!(q<<24>>24)){q=39444;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==105){q=a[s+4>>0]|0;if(!(q<<24>>24)){q=39445;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==116){q=a[s+5>>0]|0;if(!(q<<24>>24)){q=39446;wa=69;break h}q=q&255;if((q|32|0)!=101){r=101;q=208+q|0;break}q=a[s+6>>0]|0;if(!(q<<24>>24)){q=39447;wa=69;break h}if(q<<24>>24==95)break h;else{r=95;q=208+(q&255)|0}}else r=116}else r=105}else r=108}else r=113}else r=115;while(0);F=d[q>>0]|0;E=r;wa=73}while(0);if((wa|0)==69){F=0;E=a[208+(d[q>>0]|0)>>0]|0;wa=73}if((wa|0)==73?(F|0)!=(E&255|0):0)break;if(qa&(a[va>>0]|0)==0){c[G>>2]=s;cd(f,41970,G);r=m;q=0;wa=468;break a}}while(0);if(c[ka+12>>2]|0){cd(f,41998,H);r=m;q=0;wa=468;break}if(c[ka+56>>2]|0){cd(f,42023,I);r=m;q=0;wa=468;break}if(!ha){q=c[ka+8>>2]|0;if(!q)q=1;else{r=1;do{r=r+1|0;q=c[q+20>>2]|0}while((q|0)!=0);q=r}c[M>>2]=s;c[M+4>>2]=q;q=dd(xa,42115,M)|0;if(!q){r=m;q=0;wa=468;break}if(a[ua>>0]|0){r=q+7|0;a[r>>0]=(a[r>>0]|0)+1<<24>>24;r=a[ua>>0]|0;if((r&255)<=1)wa=124}else{r=0;wa=124}}else{y=qj(xa,ha)|0;if(!y){r=m;q=0;wa=468;break}if(vk(f,y)|0){r=m;q=y;wa=468;break}r=a[ua>>0]|0;if((r&255)<=1){if((a[va>>0]|0)==0?Sd(xa,y,0)|0:0){c[J>>2]=y;cd(f,42057,J);r=m;q=y;wa=468;break}if(!(hi(xa,y,c[t>>2]|0)|0)){q=y;wa=124}else{if(!o){c[K>>2]=y;cd(f,42091,K);r=m;q=y;wa=468;break}t=c[f+116>>2]|0;t=(t|0)==0?f:t;q=t+84|0;r=c[q>>2]|0;s=1<<ja;if(r&s|0){r=m;q=y;wa=468;break}c[q>>2]=r|s;if((ja|0)!=1){r=m;q=y;wa=468;break}x=c[t>>2]|0;q=x+16|0;if(c[(c[q>>2]|0)+20>>2]|0){r=m;q=y;wa=468;break}if(a[t+199>>0]|0){r=m;q=y;wa=468;break}r=Pe(c[x>>2]|0,0,x,pa,0,542)|0;if(r|0){cd(t,32157,N);c[t+12>>2]=r;r=m;q=y;wa=468;break}k=c[pa>>2]|0;c[(c[q>>2]|0)+20>>2]=k;q=c[x+92>>2]|0;t=c[k+4>>2]|0;c[t+4>>2]=c[k>>2];do if(!(b[t+22>>1]&2)){u=t+32|0;v=t+36|0;w=(c[u>>2]|0)-(c[v>>2]|0)|0;do if((q+-512|0)>>>0<65025){if(q+-1&q|0)break;c[u>>2]=q;s=t+80|0;q=c[s>>2]|0;if(!q)break;r=q+-4|0;c[s>>2]=r;q=r;do if((c[14816]|0)>>>0<=q>>>0)if((c[14817]|0)>>>0>q>>>0){c[14979]=(c[14979]|0)+-1;c[r>>2]=c[14819];c[14819]=r;k=(c[14820]|0)+1|0;c[14820]=k;c[14821]=(k|0)<(c[14815]|0)&1;break}else{q=Wa[c[29352>>2]&127](r)|0;wa=105;break}else{q=Wa[c[29352>>2]&127](r)|0;wa=105}while(0);do if((wa|0)==105){c[14980]=(c[14980]|0)-q;if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);c[s>>2]=0}while(0);wa=Se(c[t>>2]|0,u,w)|0;c[v>>2]=(c[u>>2]|0)-(w&65535);if((wa|0)!=7)break;q=x+81|0;do if(!(a[q>>0]|0)){if(a[x+82>>0]|0)break;a[q>>0]=1;if((c[x+180>>2]|0)>0)c[x+264>>2]=1;q=x+272|0;c[q>>2]=(c[q>>2]|0)+1;q=c[x+236>>2]|0;if(!q)break;c[q+12>>2]=7}while(0);r=m;q=y;wa=468;break a}while(0);r=m;q=y;wa=468;break}}else q=y}do if((wa|0)==124){w=c[t>>2]|0;v=(ja|0)==1;s=v?34855:34585;t=c[f>>2]|0;u=a[t+165>>0]|0;if((u|r)<<24>>24==0?(O=c[t+312>>2]|0,(O|0)!=0):0){r=$a[O&127](c[t+316>>2]|0,18,s,0,w,c[f+240>>2]|0)|0;if((r|0)==1){cd(f,39216,P);c[f+12>>2]=23;r=m;wa=468;break a}if((r|2|0)!=2){cd(f,39231,Q);c[f+12>>2]=1;r=m;wa=468;break a}if(r|0){r=m;wa=468;break a}t=c[f>>2]|0;u=a[t+165>>0]|0}s=v?3:1;r=c[ka>>2]|0;if((u<<24>>24==0?(a[ua>>0]|0)==0:0)?(R=c[t+312>>2]|0,(R|0)!=0):0){r=$a[R&127](c[t+316>>2]|0,s,q,r,w,c[f+240>>2]|0)|0;if((r|0)==1){cd(f,39216,S);c[f+12>>2]=23;r=m;wa=468;break a}if((r|2|0)==2)if(!r)break;else{r=m;wa=468;break a}else{cd(f,39231,T);c[f+12>>2]=1;r=m;wa=468;break a}}}while(0);if(j){if((c[j>>2]|0)>(c[(c[f>>2]|0)+116>>2]|0)){c[U>>2]=41914;cd(f,44753,U)}if(!(c[ca>>2]|0))T=j;else{r=m;wa=468;break}}else{ea=c[ka+4>>2]|0;j=(b[ka+42>>1]|0)+-1|0;X=ea+(j<<4)+15|0;a[X>>0]=a[X>>0]|8;j=c[ea+(j<<4)>>2]|0;c[pa>>2]=j;if(!j)j=0;else j=(Eu(j)|0)&1073741823;c[pa+4>>2]=j;r=oj(xa,59,pa,0)|0;r=nj(c[f>>2]|0,0,r)|0;if(!r){r=m;j=0;wa=468;break}if((n|0)<0)j=r;else{a[r+4+(((c[r>>2]|0)+-1|0)*20|0)+12>>0]=n;j=r}T=r}u=c[j>>2]|0;if((u|0)>0){t=0;r=0;do{s=c[T+4+(t*20|0)>>2]|0;if((a[s>>0]|0)==106){s=c[s+8>>2]|0;if(!s)s=0;else s=(Eu(s)|0)&1073741823;r=r+1+s|0}t=t+1|0}while((t|0)!=(u|0));if(!q)t=0;else wa=160}else{r=0;wa=160}if((wa|0)==160)t=(Eu(q)|0)&1073741823;V=(Z|0)!=0;if(V)s=e[Z+50>>1]|0;else s=1;y=s+u|0;v=y&65535;y=y<<16;w=y>>16;x=(y>>14)+7&-8;y=y>>15;g=y+2|0;h=x+72+(w+7+y+g&-8)|0;z=t+1|0;u=z+r+h|0;t=((u|0)<0)<<31>>31;ea=(xa|0)==0;i:do if(ea){X=Sv(u|0,t|0,-1,-1)|0;W=L()|0;if(!(W>>>0>0|(W|0)==0&X>>>0>2147483390)){if(!(c[7324]|0)){r=Wa[c[29340>>2]&127](u)|0;wa=187;break}r=Wa[c[29356>>2]&127](u)|0;if((c[14985]|0)>>>0<u>>>0)c[14985]=u;t=59064;s=c[t>>2]|0;t=c[t+4>>2]|0;if((t|0)>0|(t|0)==0&s>>>0>0){X=c[14978]|0;W=Tv(s|0,t|0,r|0,((r|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&W>>>0<=X>>>0)&1}r=Wa[c[29340>>2]&127](r)|0;if(r){s=Wa[c[29352>>2]&127](r)|0;s=(c[14978]|0)+s|0;c[14978]=s;if(s>>>0>(c[14982]|0)>>>0)c[14982]=s;s=(c[14981]|0)+1|0;c[14981]=s;if(s>>>0<=(c[14987]|0)>>>0){wa=188;break}c[14987]=s;wa=188}else{s=0;t=0;r=0}}else{s=0;t=0;r=0}}else{if(c[xa+272>>2]|0){if(a[la>>0]|0){r=m;j=T;wa=468;break a}}else{do if(!(0<t>>>0|(0==(t|0)?(e[xa+276>>1]|0)>>>0<u>>>0:0))){s=xa+300|0;r=c[s>>2]|0;if(r|0){c[s>>2]=c[r>>2];wa=xa+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=187;break i}s=xa+296|0;r=c[s>>2]|0;if(!r){r=xa+292|0;break}else{c[s>>2]=c[r>>2];wa=xa+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=187;break i}}else r=xa+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1}r=_d(xa,u,t)|0;wa=187}while(0);if((wa|0)==187)if(!r){s=0;t=0;r=0}else wa=188;if((wa|0)==188){gw(r|0,0,u|0)|0;s=r+72|0;c[r+32>>2]=s;s=s+x|0;c[r+8>>2]=s;s=s+g|0;c[r+4>>2]=s;c[r+28>>2]=s+y;b[r+52>>1]=v;b[r+50>>1]=w+65535;s=r;t=r+h|0}j:do if(!(a[la>>0]|0)){c[s>>2]=t;U=t;x=U+z|0;ew(U|0,q|0,z|0)|0;U=s+12|0;c[U>>2]=ka;W=s+54|0;a[W>>0]=k;X=s+55|0;p=p&3;n=((k|0)!=0&1)<<3&65535|p|(d[X>>0]|d[X+1>>0]<<8)&-12;a[X>>0]=n;a[X+1>>0]=n>>8;c[s+24>>2]=c[(c[ia>>2]|0)+(ja<<4)+12>>2];n=s+50|0;b[n>>1]=c[j>>2];if(m|0){c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;c[$+16>>2]=0;c[$+20>>2]=0;c[$+24>>2]=0;c[$+28>>2]=0;h=_;z=h+80|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));if(ka|0){c[_>>2]=1;c[_+16>>2]=c[ka>>2];c[_+24>>2]=ka;c[_+48>>2]=-1}c[$>>2]=f;c[$+4>>2]=_;j=$+24|0;b[j>>1]=2;c[pa>>2]=f;c[pa+4>>2]=125;c[pa+8>>2]=126;c[pa+12>>2]=0;c[pa+24>>2]=$;t=m+24|0;u=f+208|0;S=(c[u>>2]|0)+(c[t>>2]|0)|0;c[u>>2]=S;u=c[(c[f>>2]|0)+120>>2]|0;if((u|0)<(S|0)){c[Y>>2]=u;cd(f,41637,Y)}else{_j(pa,m)|0;Y=(c[pa>>2]|0)+208|0;c[Y>>2]=(c[Y>>2]|0)-(c[t>>2]|0);Y=m+4|0;c[Y>>2]=c[Y>>2]|b[j>>1]&-32752&65535}c[s+36>>2]=m}g=(d[(c[A+(ja<<4)+12>>2]|0)+76>>0]|0)>3;if((d[ua>>0]|0)>1){c[s+40>>2]=T;j=0}else j=T;k:do if(!(b[n>>1]|0)){u=0;w=0}else{A=(ka|0)==0;B=$+4|0;C=$+24|0;D=_+16|0;E=_+24|0;F=_+48|0;G=pa+4|0;H=pa+8|0;I=pa+12|0;o=pa+24|0;J=f+228|0;K=ka+40|0;M=s+4|0;N=ka+4|0;O=s+40|0;P=s+32|0;Q=s+28|0;R=f;S=f+208|0;y=T+4|0;u=0;while(1){w=c[y>>2]|0;l:do switch(a[w>>0]|0){case 110:{a[w>>0]=59;break}case 106:{t=c[w+12>>2]|0;if((a[t>>0]|0)!=110)break l;a[t>>0]=59;break}default:{}}while(0);c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;c[$+16>>2]=0;c[$+20>>2]=0;c[$+24>>2]=0;c[$+28>>2]=0;h=_;z=h+80|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));if(!A){c[_>>2]=1;c[D>>2]=c[ka>>2];c[E>>2]=ka;c[F>>2]=-1}c[$>>2]=f;c[B>>2]=_;b[C>>1]=32;do if(w|0){b[C>>1]=32;c[pa>>2]=R;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[o>>2]=$;t=w+24|0;m=(c[S>>2]|0)+(c[t>>2]|0)|0;c[S>>2]=m;v=c[(c[f>>2]|0)+120>>2]|0;if((v|0)<(m|0)){c[aa>>2]=v;cd(f,41637,aa);break}else{_j(pa,w)|0;m=(c[pa>>2]|0)+208|0;c[m>>2]=(c[m>>2]|0)-(c[t>>2]|0);m=w+4|0;c[m>>2]=c[m>>2]|b[C>>1]&-32752&65535;break}}while(0);if(c[ca>>2]|0){u=0;v=s;t=r;break j}t=c[y>>2]|0;m:do if(!t)t=0;else while(1){v=c[t+4>>2]|0;if(!(v&4096))break m;if(!(v&262144))t=t+12|0;else t=(c[t+20>>2]|0)+4|0;t=c[t>>2]|0;if(!t){t=0;break}}while(0);if((a[t>>0]|0)==-94){m=b[t+32>>1]|0;t=m<<16>>16;do if(m<<16>>16<0)t=b[K>>1]|0;else{if(a[(c[N>>2]|0)+(t<<4)+12>>0]|0)break;m=(d[X>>0]|d[X+1>>0]<<8)&-9;a[X>>0]=m;a[X+1>>0]=m>>8}while(0);b[(c[M>>2]|0)+(u<<1)>>1]=t}else{if((ka|0)==(c[J>>2]|0))break;if(!(c[O>>2]|0)){c[O>>2]=j;j=0}b[(c[M>>2]|0)+(u<<1)>>1]=-2;t=(d[X>>0]|d[X+1>>0]<<8)&-9;a[X>>0]=t;a[X+1>>0]=t>>8;t=-2}v=c[y>>2]|0;do if((a[v>>0]|0)==106){v=c[v+8>>2]|0;if(!v)t=0;else t=(Eu(v)|0)&1073741823;m=t+1|0;ew(x|0,v|0,m|0)|0;t=x;x=x+m|0}else{if((t|0)<=-1){t=0;break}t=c[(c[N>>2]|0)+(t<<4)+8>>2]|0}while(0);w=(t|0)==0?34049:t;n:do if(!(a[va>>0]|0)){t=c[f>>2]|0;v=a[t+78>>0]|0;m=a[t+165>>0]|0;t=Zi(t,v,w,m&255)|0;do if(!(m<<24>>24)){if(!t){t=_i(f,v,0,w)|0;break}if(c[t+12>>2]|0)break n;t=_i(f,v,t,w)|0}while(0);if(!t){u=0;v=s;t=r;break j}}while(0);c[(c[P>>2]|0)+(u<<2)>>2]=w;a[(c[Q>>2]|0)+u>>0]=g?a[y+12>>0]|0:0;u=u+1|0;w=b[n>>1]|0;if(u>>>0<(w&65535)>>>0)y=y+20|0;else break k}cd(f,42138,ba);u=0;wa=432;break j}while(0);o:do if(V){B=Z+50|0;v=b[B>>1]|0;if(!(v<<16>>16))break;C=Z+4|0;D=s+4|0;E=Z+32|0;F=s+32|0;h=Z+28|0;z=s+28|0;A=s+52|0;t=0;while(1){y=b[(c[C>>2]|0)+(t<<1)>>1]|0;g=c[D>>2]|0;p:do if(!(w<<16>>16))wa=252;else{x=g;w=w&65535;while(1){if((b[x>>1]|0)==y<<16>>16)break;if((w|0)>1){x=x+2|0;w=w+-1|0}else{wa=252;break p}}b[A>>1]=(b[A>>1]|0)+-1<<16>>16}while(0);if((wa|0)==252){wa=0;b[g+(u<<1)>>1]=y;c[(c[F>>2]|0)+(u<<2)>>2]=c[(c[E>>2]|0)+(t<<2)>>2];a[(c[z>>2]|0)+u>>0]=a[(c[h>>2]|0)+t>>0]|0;u=u+1|0;v=b[B>>1]|0}t=t+1|0;if(t>>>0>=(v&65535)>>>0)break o;w=b[n>>1]|0}}else{b[(c[s+4>>2]|0)+(u<<1)>>1]=-1;c[(c[s+32>>2]|0)+(u<<2)>>2]=34049}while(0);v=c[s+8>>2]|0;u=b[n>>1]|0;u=(u&65535)<5?u:5;t=b[(c[U>>2]|0)+44>>1]|0;b[v>>1]=t;if(c[s+36>>2]|0){t=(t&65535)+65526&65535;b[v>>1]=t}if(t<<16>>16<33)b[v>>1]=33;ew(v+2|0,31120,u<<1&65535|0)|0;ca=b[n>>1]|0;t=ca&65535;if((u&65535)<(ca&65535)){t=u&65535;do{t=t+1|0;b[v+(t<<1)>>1]=23;u=b[n>>1]|0}while(t>>>0<(u&65535)>>>0);t=u&65535}if(a[W>>0]|0)b[v+(t<<1)>>1]=0;B=f+228|0;if(!(c[B>>2]|0))xk(s);x=b[s+52>>1]|0;A=x<<16>>16==0;if(A){u=-1;t=-1}else{u=c[s+4>>2]|0;t=x&65535;v=0;w=0;do{ca=t;t=t+-1|0;$=b[u+(t<<1)>>1]|0;aa=($&65535)<63;$=cw(1,0,$<<16>>16|0)|0;ba=L()|0;v=(aa?$:0)|v;w=(aa?ba:0)|w}while((ca|0)>1);u=~v;t=~w}ca=s+64|0;c[ca>>2]=u;c[ca+4>>2]=t;q:do if(qa){h=x&65535;t=ka+42|0;if((h|0)<(b[t>>1]|0))break;z=d[X>>0]|d[X+1>>0]<<8;ca=z|32;a[X>>0]=ca;a[X+1>>0]=ca>>8;t=b[t>>1]|0;if(t<<16>>16<=0)break;u=b[ka+40>>1]|0;y=u<<16>>16;g=s+4|0;r:do if(A){if(!((y+1|0)<(t<<16>>16|0)|u<<16>>16==0^1))break q}else{v=t<<16>>16;u=0;while(1){if((u|0)!=(y|0)){w=u&65535;x=c[g>>2]|0;t=0;while(1){if((b[x+(t<<1)>>1]|0)==w<<16>>16)break;t=t+1|0;if(t>>>0>=h>>>0)break r}if((t&65535)<<16>>16<=-1)break r}u=u+1|0;if((u|0)>=(v|0))break q}}while(0);ca=z&-33;a[X>>0]=ca;a[X+1>>0]=ca>>8}while(0);s:do if((ka|0)==(c[B>>2]|0)){t=c[ka+8>>2]|0;if(!t){v=s;E=r;t=r;break}C=f+232|0;t:do if(da){B=t;t=r;while(1){u=b[B+50>>1]|0;do if(u<<16>>16==(b[s+50>>1]|0)){A=u&65535;u:do if(!(u<<16>>16))u=0;else{y=c[B+4>>2]|0;g=c[s+4>>2]|0;h=B+32|0;z=s+32|0;u=0;do{if((b[y+(u<<1)>>1]|0)!=(b[g+(u<<1)>>1]|0))break u;w=c[(c[h>>2]|0)+(u<<2)>>2]|0;x=c[(c[z>>2]|0)+(u<<2)>>2]|0;ga=a[w>>0]|0;v=(d[208+(ga&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(ga<<24>>24==0|(v|0)!=0))do{w=w+1|0;x=x+1|0;ga=a[w>>0]|0;v=(d[208+(ga&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(ga<<24>>24==0|(v|0)!=0));if(v|0)break u;u=u+1|0}while(u>>>0<A>>>0)}while(0);if((u|0)!=(A|0)){u=0;break}w=B+54|0;u=a[w>>0]|0;x=s+54|0;v=a[x>>0]|0;do if(u<<24>>24!=v<<24>>24){if(!(u<<24>>24==11|v<<24>>24==11)){c[fa>>2]=0;cd(f,42199,fa);u=a[w>>0]|0}if(u<<24>>24!=11)break;a[w>>0]=a[x>>0]|0}while(0);ga=B+55|0;da=(d[ga>>0]|d[ga+1>>0]<<8)&-4|p;a[ga>>0]=da;a[ga+1>>0]=da>>8;if((d[ua>>0]|0)<=1){u=2;break}c[s+20>>2]=c[C>>2];c[C>>2]=s;s=0;u=2;r=0;t=0}else u=20;while(0);switch(u&31){case 20:case 0:break;default:break t}B=c[B+20>>2]|0;if(!B){v=s;E=t;t=r;break s}}}else{B=t;t=r;while(1){u=b[B+50>>1]|0;do if(u<<16>>16==(b[s+50>>1]|0)){A=u&65535;v:do if(!(u<<16>>16))u=0;else{y=c[B+4>>2]|0;g=c[s+4>>2]|0;h=B+32|0;z=s+32|0;u=0;do{if((b[y+(u<<1)>>1]|0)!=(b[g+(u<<1)>>1]|0))break v;w=c[(c[h>>2]|0)+(u<<2)>>2]|0;x=c[(c[z>>2]|0)+(u<<2)>>2]|0;fa=a[w>>0]|0;v=(d[208+(fa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(fa<<24>>24==0|(v|0)!=0))do{w=w+1|0;x=x+1|0;fa=a[w>>0]|0;v=(d[208+(fa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(v|0)!=0));if(v|0)break v;u=u+1|0}while(u>>>0<A>>>0)}while(0);if((u|0)!=(A|0)){u=0;break}w=B+54|0;u=a[w>>0]|0;x=s+54|0;v=a[x>>0]|0;do if(u<<24>>24!=v<<24>>24){if(!(u<<24>>24==11|v<<24>>24==11)){c[ga>>2]=0;cd(f,42199,ga);u=a[w>>0]|0}if(u<<24>>24!=11)break;a[w>>0]=a[x>>0]|0}while(0);if((d[ua>>0]|0)<=1){u=2;break}c[s+20>>2]=c[C>>2];c[C>>2]=s;s=0;u=2;r=0;t=0}else u=20;while(0);switch(u&31){case 20:case 0:break;default:break t}B=c[B+20>>2]|0;if(!B){v=s;E=t;t=r;break s}}}while(0);if(!u){v=s;E=t;t=r}else{u=0;wa=432;break j}}else{v=s;E=r;t=r}while(0);do if((d[ua>>0]|0)>1)wa=420;else{if(a[va>>0]|0){w:do if(qa){s=c[xa+160>>2]|0;c[v+44>>2]=s;r=c[(c[v+12>>2]|0)+8>>2]|0;if(!r)break;while(1){if(!((r|0)==(v|0)?1:(c[r+44>>2]|0)!=(s|0)))break;r=c[r+20>>2]|0;if(!r)break w}cd(f,35103,ma);c[na>>2]=32306;c[na+4>>2]=110349;c[na+8>>2]=31517;Db(11,32001,na);c[f+12>>2]=11;u=0;s=v;r=t;wa=432;break j}while(0);if(!(mi((c[v+24>>2]|0)+24|0,c[v>>2]|0,E)|0)){wa=xa+24|0;c[wa>>2]=c[wa>>2]|1;wa=420;break}if(a[la>>0]|0){u=0;break j}if(a[xa+82>>0]|0){u=0;break j}a[la>>0]=1;if((c[xa+180>>2]|0)>0)c[xa+264>>2]=1;r=xa+272|0;c[r>>2]=(c[r>>2]|0)+1;r=c[xa+236>>2]|0;if(!r){u=0;break j}c[r+12>>2]=7;u=0;break j}if(!(qa|(c[ka+36>>2]&32|0)==0))break;D=f+44|0;C=(c[D>>2]|0)+1|0;c[D>>2]=C;D=f+8|0;r=c[D>>2]|0;w=f+116|0;if(!r){u=c[f>>2]|0;do if(!(c[w>>2]|0)){if(b[u+76>>1]&8)break;a[f+23>>0]=1}while(0);x:do if(c[u+272>>2]|0)if(!(a[u+81>>0]|0))wa=360;else{u=0;s=v;r=t;wa=432;break j}else{do if((e[u+276>>1]|0)>=224){r=u+300|0;s=c[r>>2]|0;if(s|0){c[r>>2]=c[s>>2];na=u+284|0;c[na>>2]=(c[na>>2]|0)+1;break x}r=u+296|0;s=c[r>>2]|0;if(!s){r=u+292|0;break}else{c[r>>2]=c[s>>2];na=u+284|0;c[na>>2]=(c[na>>2]|0)+1;break x}}else r=u+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1;wa=360}while(0);if((wa|0)==360)s=_d(u,224,0)|0;if(!s){u=0;s=v;r=t;wa=432;break j}h=s+104|0;z=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));c[s>>2]=u;r=u+4|0;u=c[r>>2]|0;if(u|0)c[u+4>>2]=s;c[s+8>>2]=u;c[s+4>>2]=0;c[r>>2]=s;c[s+20>>2]=381479589;c[s+12>>2]=f;c[D>>2]=s;Di(s,61,0,1,0)|0;B=s}else B=r;A=c[w>>2]|0;A=(A|0)==0?f:A;r=A+84|0;s=c[r>>2]|0;z=1<<ja;y:do if(!(s&z)){c[r>>2]=s|z;if((ja|0)!=1)break;h=c[A>>2]|0;r=h+16|0;if(c[(c[r>>2]|0)+20>>2]|0)break;if(a[A+199>>0]|0)break;s=Pe(c[h>>2]|0,0,h,pa,0,542)|0;if(s|0){cd(A,32157,oa);c[A+12>>2]=s;break}pa=c[pa>>2]|0;c[(c[r>>2]|0)+20>>2]=pa;r=c[h+92>>2]|0;w=c[pa+4>>2]|0;c[w+4>>2]=c[pa>>2];do if(!(b[w+22>>1]&2)){x=w+32|0;y=w+36|0;g=(c[x>>2]|0)-(c[y>>2]|0)|0;do if((r+-512|0)>>>0<65025){if(r+-1&r|0)break;c[x>>2]=r;u=w+80|0;r=c[u>>2]|0;if(!r)break;s=r+-4|0;c[u>>2]=s;r=s;do if((c[14816]|0)>>>0<=r>>>0)if((c[14817]|0)>>>0>r>>>0){c[14979]=(c[14979]|0)+-1;c[s>>2]=c[14819];c[14819]=s;pa=(c[14820]|0)+1|0;c[14820]=pa;c[14821]=(pa|0)<(c[14815]|0)&1;break}else{r=Wa[c[29352>>2]&127](s)|0;wa=380;break}else{r=Wa[c[29352>>2]&127](s)|0;wa=380}while(0);do if((wa|0)==380){c[14980]=(c[14980]|0)-r;if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{wa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);c[u>>2]=0}while(0);wa=Se(c[w>>2]|0,x,g)|0;c[y>>2]=(c[x>>2]|0)-(g&65535);if((wa|0)!=7)break;r=h+81|0;do if(!(a[r>>0]|0)){if(a[h+82>>0]|0)break;a[r>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;r=h+272|0;c[r>>2]=(c[r>>2]|0)+1;r=c[h+236>>2]|0;if(!r)break;c[r+12>>2]=7}while(0);break y}while(0)}while(0);g=A+80|0;c[g>>2]=c[g>>2]|z;g=A+20|0;a[g>>0]=a[g>>0]|1;g=B+108|0;r=c[g>>2]|0;y=B+112|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;h=c[B+104>>2]|0;a[h+(r*20|0)>>0]=-86;h=h+(r*20|0)+1|0;z=h+19|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(z|0))}else r=Di(B,170,0,0,0)|0;x=v+44|0;c[x>>2]=r;r=c[g>>2]|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;wa=c[B+104>>2]|0;a[wa+(r*20|0)>>0]=-117;b[wa+(r*20|0)+2>>1]=0;c[wa+(r*20|0)+4>>2]=ja;c[wa+(r*20|0)+8>>2]=C;c[wa+(r*20|0)+12>>2]=2;c[wa+(r*20|0)+16>>2]=0;a[wa+(r*20|0)+1>>0]=0}else Di(B,139,ja,C,2)|0;if(!l)s=0;else{s=c[ha>>2]|0;wa=(c[f+188>>2]|0)-s+(c[f+192>>2]|0)|0;l=wa+-1|0;wa=(a[s+l>>0]|0)==59?l:wa;c[ra>>2]=(k|0)==0?59952:42261;c[ra+4>>2]=wa;c[ra+8>>2]=s;s=dd(xa,42241,ra)|0}ra=c[v>>2]|0;wa=c[ka>>2]|0;c[sa>>2]=c[(c[ia>>2]|0)+(ja<<4)>>2];c[sa+4>>2]=34585;c[sa+8>>2]=ra;c[sa+12>>2]=wa;c[sa+16>>2]=C;c[sa+20>>2]=s;Ak(f,42269,sa);z:do if(s|0){if(c[xa+480>>2]|0){Xd(xa,s);break}r=s;do if((c[xa+304>>2]|0)>>>0<=r>>>0){if((c[xa+308>>2]|0)>>>0<=r>>>0)break;wa=xa+300|0;c[s>>2]=c[wa>>2];c[wa>>2]=s;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{wa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);do if(qa){bl(f,v,C);r=c[D>>2]|0;s=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(ja<<4)+12>>2]>>2]|0)+1|0;u=r+108|0;w=c[u>>2]|0;if((c[r+112>>2]|0)>(w|0)){c[u>>2]=w+1;wa=c[r+104>>2]|0;a[wa+(w*20|0)>>0]=95;b[wa+(w*20|0)+2>>1]=0;c[wa+(w*20|0)+4>>2]=ja;c[wa+(w*20|0)+8>>2]=1;c[wa+(w*20|0)+12>>2]=s;c[wa+(w*20|0)+16>>2]=0;a[wa+(w*20|0)+1>>0]=0}else Di(r,95,ja,1,s)|0;c[ta>>2]=c[v>>2];Bk(B,ja,dd(xa,42317,ta)|0);r=c[g>>2]|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;wa=c[B+104>>2]|0;a[wa+(r*20|0)>>0]=-98;b[wa+(r*20|0)+2>>1]=0;c[wa+(r*20|0)+4>>2]=0;c[wa+(r*20|0)+8>>2]=1;c[wa+(r*20|0)+12>>2]=0;c[wa+(r*20|0)+16>>2]=0;a[wa+(r*20|0)+1>>0]=0;break}else{Di(B,158,0,1,0)|0;break}}while(0);r=c[x>>2]|0;s=c[g>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))r=(c[B+104>>2]|0)+(((r|0)<0?s+-1|0:r)*20|0)|0;else r=59308;c[r+8>>2]=s;wa=420}while(0);do if((wa|0)==420){if((i|0)==0|(a[va>>0]|0)!=0)break;if((d[ua>>0]|0)<=1){u=0;s=v;r=t;wa=432;break j}c[f+232>>2]=E;break a}while(0);s=ka+8|0;do if((k|0)==5){r=c[s>>2]|0;if(!r)break;if((a[r+54>>0]|0)==5)break;r=r+20|0;s=c[r>>2]|0;A:do if(!s)s=0;else while(1){if((a[s+54>>0]|0)==5)break A;r=s+20|0;s=c[r>>2]|0;if(!s){s=0;break}}while(0);c[v+20>>2]=s;c[r>>2]=v;break a}while(0);c[v+20>>2]=c[s>>2];c[s>>2]=v;break a}else{u=m;j=T;wa=432}while(0);if((wa|0)==432)if(!s){r=u;wa=468;break}else{v=s;t=r}r=c[v+36>>2]|0;if(r|0)ni(xa,r);r=c[v+40>>2]|0;if(r|0)ri(xa,r);r=c[v+16>>2]|0;B:do if(r|0){do if(!ea){if(c[xa+480>>2]|0){Xd(xa,r);break B}s=r;if((c[xa+304>>2]|0)>>>0>s>>>0)break;if((c[xa+308>>2]|0)>>>0<=s>>>0)break;wa=xa+300|0;c[r>>2]=c[wa>>2];c[wa>>2]=r;break B}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);wa=v+55|0;C:do if((d[wa>>0]|d[wa+1>>0]<<8)&16){r=c[v+32>>2]|0;if(!r)break;do if(!ea){if(c[xa+480>>2]|0){Xd(xa,r);break C}s=r;if((c[xa+304>>2]|0)>>>0>s>>>0)break;if((c[xa+308>>2]|0)>>>0<=s>>>0)break;wa=xa+300|0;c[r>>2]=c[wa>>2];c[wa>>2]=r;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(t){do if(!ea){if(c[xa+480>>2]|0){Xd(xa,t);r=u;wa=468;break a}r=t;if((c[xa+304>>2]|0)>>>0>r>>>0)break;if((c[xa+308>>2]|0)>>>0<=r>>>0)break;r=xa+300|0;c[t>>2]=c[r>>2];c[r>>2]=t;r=u;wa=468;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);r=u;wa=468;break}else{r=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);r=u;wa=468;break}}else{r=u;wa=468}}else{r=m;q=0;wa=468}while(0);if((wa|0)==468)if(r)ni(xa,r);if(j|0)ri(xa,j);qi(xa,i);if(!q){Ra=ya;return}if(xa|0){if(c[xa+480>>2]|0){Xd(xa,q);Ra=ya;return}i=q;if((c[xa+304>>2]|0)>>>0<=i>>>0?(c[xa+308>>2]|0)>>>0>i>>>0:0){i=xa+300|0;c[q>>2]=c[i>>2];c[i>>2]=q;Ra=ya;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);Ra=ya;return}else{i=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);Ra=ya;return}}function ij(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;M=Ra;Ra=Ra+32|0;G=M+16|0;m=M+8|0;l=M;K=c[f>>2]|0;I=c[f+228>>2]|0;a:do if((I|0)!=0?(J=f+200|0,(a[J>>0]|0)!=1):0){r=(g|0)==0;do if(r){D=b[I+42>>1]|0;k=(D<<16>>16)+-1|0;if(D<<16>>16<1){C=130;break a}if(i)if((c[i>>2]|0)==1){k=1;C=13}else{c[l>>2]=c[(c[I+4>>2]|0)+(k<<4)>>2];c[l+4>>2]=h;cd(f,42428,l);break a}else{k=1;C=12}}else{if(!i){k=c[g>>2]|0;C=12;break}k=c[i>>2]|0;if((k|0)==(c[g>>2]|0))C=13;else{cd(f,42491,m);C=129;break a}}while(0);if((C|0)==12){p=h+4|0;l=(k<<3)+37+(c[p>>2]|0)|0;D=k;A=0}else if((C|0)==13){p=h+4|0;l=(k<<3)+37+(c[p>>2]|0)|0;o=c[i>>2]|0;if((o|0)>0){n=0;do{m=c[i+4+(n*20|0)+4>>2]|0;if(!m)m=0;else m=(Eu(m)|0)&1073741823;l=l+1+m|0;n=n+1|0}while((n|0)<(o|0));D=k;A=1}else{D=k;A=1}}n=((l|0)<0)<<31>>31;B=(K|0)==0;b:do if(B){z=Sv(l|0,n|0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){C=128;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](l)|0;C=42;break}n=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){z=c[14978]|0;y=Tv(k|0,m|0,n|0,((n|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}m=Wa[c[29340>>2]&127](n)|0;if(!m){C=128;break a}k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;z=m}else z=m}else{if(c[K+272>>2]|0){if(a[K+81>>0]|0){C=128;break a}}else{do if(!(0<n>>>0|(0==(n|0)?(e[K+276>>1]|0)>>>0<l>>>0:0))){m=K+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];C=K+284|0;c[C>>2]=(c[C>>2]|0)+1;C=42;break b}m=K+296|0;k=c[m>>2]|0;if(!k){k=K+292|0;break}else{c[m>>2]=c[k>>2];C=K+284|0;c[C>>2]=(c[C>>2]|0)+1;C=42;break b}}else k=K+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(K,l,n)|0;C=42}while(0);if((C|0)==42)if(!k){C=128;break}else z=k;gw(z|0,0,l|0)|0;c[z>>2]=I;y=I+16|0;c[z+4>>2]=c[y>>2];w=z+36|0;o=w+(D<<3)|0;x=z+8|0;c[x>>2]=o;c:do if((d[J>>0]|0)>1){m=c[f>>2]|0;d:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;C=67;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){v=c[14978]|0;u=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;t=L()|0;c[14768]=((t|0)<0|(t|0)==0&u>>>0<=v>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break c;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break c}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];C=m+284|0;c[C>>2]=(c[C>>2]|0)+1;C=67;break d}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];C=m+284|0;c[C>>2]=(c[C>>2]|0)+1;C=67;break d}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;C=67}while(0);if((C|0)==67)if(!k)break;l=k+4|0;m=l+12|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));c[k>>2]=o;t=h;u=c[t+4>>2]|0;v=k+4|0;c[v>>2]=c[t>>2];c[v+4>>2]=u;v=f+272|0;c[k+12>>2]=c[v>>2];c[v>>2]=k}while(0);ew(o|0,c[h>>2]|0,c[p>>2]|0)|0;a[o+(c[p>>2]|0)>>0]=0;if(o|0?(q=a[o>>0]|0,(a[880+(q&255)>>0]|0)<0):0){n=q<<24>>24==91?93:q;m=0;k=1;while(1){l=a[o+k>>0]|0;if(l<<24>>24==n<<24>>24){k=k+1|0;l=o+m|0;if((a[o+k>>0]|0)!=n<<24>>24)break;a[l>>0]=n}else a[o+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0}m=o+((c[p>>2]|0)+1)|0;c[z+20>>2]=D;e:do if(!r)if((D|0)>0){s=I+4|0;t=f+272|0;v=b[I+42>>1]|0;u=v<<16>>16>0;v=v<<16>>16;r=0;f:while(1){if(!u){C=117;break}h=c[s>>2]|0;k=c[g+4+(r*20|0)+4>>2]|0;q=d[208+(d[k>>0]|0)>>0]|0;l=0;while(1){o=c[h+(l<<4)>>2]|0;p=a[o>>0]|0;n=(d[208+(p&255)>>0]|0)-q|0;if(!(p<<24>>24==0|(n|0)!=0)){p=k;do{o=o+1|0;p=p+1|0;N=a[o>>0]|0;n=(d[208+(N&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(n|0)!=0))}if(!n)break;l=l+1|0;if((l|0)>=(v|0))break f}c[w+(r<<3)>>2]=l;g:do if((d[J>>0]|0)>1?(F=w+(r<<3)|0,E=c[t>>2]|0,E|0):0){l=E;while(1){if((c[l>>2]|0)==(k|0))break;l=c[l+12>>2]|0;if(!l)break g}c[l>>2]=F}while(0);k=r+1|0;if((k|0)<(D|0))r=k;else{C=96;break e}}if((C|0)==117)k=c[g+4+(r*20|0)+4>>2]|0;c[G>>2]=k;cd(f,42585,G);if(!z){C=129;break a}if(!B)C=120}else C=107;else{c[w>>2]=(b[I+42>>1]|0)+-1;C=96}while(0);if((C|0)==96)if(A&(D|0)>0){p=f+272|0;n=0;while(1){o=c[i+4+(n*20|0)+4>>2]|0;if(!o)l=0;else l=(Eu(o)|0)&1073741823;c[w+(n<<3)+4>>2]=m;h:do if((d[J>>0]|0)>1?(H=c[p>>2]|0,H|0):0){k=H;while(1){if((c[k>>2]|0)==(o|0))break;k=c[k+12>>2]|0;if(!k)break h}c[k>>2]=m}while(0);ew(m|0,o|0,l|0)|0;a[m+l>>0]=0;n=n+1|0;if((n|0)==(D|0)){C=107;break}else m=m+(l+1)|0}}else C=107;if((C|0)==107){a[z+24>>0]=0;a[z+25>>0]=j;a[z+26>>0]=j>>>8;k=mi((c[I+72>>2]|0)+56|0,c[x>>2]|0,z)|0;if((k|0)!=(z|0)){if(k|0){c[z+12>>2]=k;c[k+16>>2]=z}c[y>>2]=z;C=128;break}k=K+81|0;if((a[k>>0]|0)==0?(a[K+82>>0]|0)==0:0){a[k>>0]=1;if((c[K+180>>2]|0)>0)c[K+264>>2]=1;k=K+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[K+236>>2]|0;if(k){c[k+12>>2]=7;C=120}else C=120}else C=120}if((C|0)==120){if(c[K+480>>2]|0){Xd(K,z);C=128;break}N=z;if((c[K+304>>2]|0)>>>0<=N>>>0?(c[K+308>>2]|0)>>>0>N>>>0:0){C=K+300|0;c[z>>2]=c[C>>2];c[C>>2]=z;C=128;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);C=128;break}else{C=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);C=128;break}}else C=128;while(0);if((C|0)==128)if(!g)C=130;else C=129;if((C|0)==129){ri(K,g);C=130}if((C|0)==130?(i|0)==0:0){Ra=M;return}ri(K,i);Ra=M;return}function jj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+208|0;Q=U+184|0;O=U+176|0;N=U+160|0;M=U+152|0;L=U+136|0;K=U+128|0;J=U+112|0;I=U+104|0;D=U+96|0;A=U+88|0;z=U+80|0;y=U+72|0;x=U+64|0;w=U+56|0;u=U+48|0;t=U+40|0;s=U+32|0;r=U+24|0;P=U;T=c[f>>2]|0;if(a[T+81>>0]|0){qi(T,g);Ra=U;return}a:do if(!(a[T+165>>0]|0)){l=f+4|0;m=T+24|0;n=(c[m>>2]&1|0)==0;o=T+16|0;S=c[(c[o>>2]|0)+12>>2]|0;a[T+78>>0]=a[S+77>>0]|0;if(!((b[S+78>>1]&1)==0?(j=eh(T,0,l,0)|0,(j|0)!=0):0))E=5;b:do if((E|0)==5){j=c[T+20>>2]|0;if((j|0)>1)do{k=j;j=j+-1|0;if((b[(c[(c[o>>2]|0)+(j<<4)+12>>2]|0)+78>>1]&1)==0?(p=eh(T,j,l,0)|0,p|0):0){j=p;break b}}while((k|0)>2);if(n)c[m>>2]=c[m>>2]&-2;if(!(a[T+89>>0]|0))break a;c[m>>2]=c[m>>2]|16;break a}while(0);c[f+12>>2]=j;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;qi(T,g);Ra=U;return}while(0);m=(i|0)!=0;if(m){S=T+85|0;a[S>>0]=(a[S>>0]|0)+1<<24>>24}k=c[g+8>>2]|0;if(!k)j=g+12|0;else{l=c[(c[f>>2]|0)+16>>2]|0;j=0;while(1)if((c[l+(j<<4)+12>>2]|0)==(k|0))break;else j=j+1|0;j=l+(j<<4)|0}S=bd(f,h,c[g+16>>2]|0,c[j>>2]|0)|0;if(m){R=T+85|0;a[R>>0]=(a[R>>0]|0)+-1<<24>>24}if(!S){if(!m){qi(T,g);Ra=U;return}hl(f,c[g+12>>2]|0);qi(T,g);Ra=U;return}H=S+72|0;k=c[H>>2]|0;if(!k)R=-1e6;else{l=c[T+16>>2]|0;j=0;while(1)if((c[l+(j<<4)+12>>2]|0)==(k|0)){R=j;break}else j=j+1|0}B=S+56|0;if(c[B>>2]|0?Sk(f,S)|0:0){qi(T,g);Ra=U;return}i=(R|0)==1;j=i?34855:34585;o=c[(c[T+16>>2]|0)+(R<<4)>>2]|0;k=c[f>>2]|0;do if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(q=c[k+312>>2]|0,q|0):0){j=$a[q&127](c[k+316>>2]|0,9,j,0,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,r);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)==2){if(!j)break;qi(T,g);Ra=U;return}else{cd(f,39231,s);c[f+12>>2]=1;qi(T,g);Ra=U;return}}while(0);do if(!h){if(!(c[B>>2]|0)){l=0;m=i?13:11;break}j=S+64|0;while(1){j=c[j>>2]|0;if((c[j>>2]|0)==(T|0))break;else j=j+24|0}l=c[(c[j+4>>2]|0)+4>>2]|0;m=30}else{l=0;m=i?15:17}while(0);j=c[S>>2]|0;k=c[f>>2]|0;do if((a[k+165>>0]|0)==0?(v=f+200|0,(a[v>>0]|0)==0):0){n=c[k+312>>2]|0;if(n){j=$a[n&127](c[k+316>>2]|0,m,j,l,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,t);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)!=2){cd(f,39231,u);c[f+12>>2]=1;qi(T,g);Ra=U;return}if(j|0){qi(T,g);Ra=U;return}j=c[S>>2]|0;k=c[f>>2]|0;if(a[k+165>>0]|0){o=j;break}if(a[v>>0]|0){o=j;break}}l=c[k+312>>2]|0;if(l){j=$a[l&127](c[k+316>>2]|0,9,j,0,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,w);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)!=2){cd(f,39231,x);c[f+12>>2]=1;qi(T,g);Ra=U;return}if(!j){o=c[S>>2]|0;break}else{qi(T,g);Ra=U;return}}else o=j}else o=j;while(0);c:do if(o|0){m=a[o>>0]|0;n=m<<24>>24==0;d:do if(n){j=39441;E=66}else{E=m&255;j=208+E|0;do if((E|32|0)==115){j=a[o+1>>0]|0;if(!(j<<24>>24)){j=39442;E=66;break d}E=j&255;j=208+E|0;if((E|32|0)==113){j=a[o+2>>0]|0;if(!(j<<24>>24)){j=39443;E=66;break d}j=j&255;if((j|32|0)!=108){l=108;j=208+j|0;break}j=a[o+3>>0]|0;if(!(j<<24>>24)){j=39444;E=66;break d}j=j&255;if((j|32|0)!=105){l=105;j=208+j|0;break}j=a[o+4>>0]|0;if(!(j<<24>>24)){j=39445;E=66;break d}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;break}j=a[o+5>>0]|0;if(!(j<<24>>24)){j=39446;E=66;break d}j=j&255;if((j|32|0)!=101){l=101;j=208+j|0;break}j=a[o+6>>0]|0;if(!(j<<24>>24)){j=39447;E=66;break d}if(j<<24>>24==95){E=75;break d}else{l=95;j=208+(j&255)|0}}else l=113}else l=115;while(0);k=d[j>>0]|0;j=l;E=70}while(0);if((E|0)==66){k=0;j=a[208+(d[j>>0]|0)>>0]|0;E=70}if((E|0)==70){if((k|0)!=(j&255|0))break;if(!n){j=m&255;if((j|32|0)==115)E=75;else{l=115;j=208+j|0;E=74}}else{j=42631;E=72}}do if((E|0)==75){j=a[o+1>>0]|0;if(j<<24>>24){x=j&255;j=208+x|0;if((x|32|0)==113){j=a[o+2>>0]|0;if(j<<24>>24){x=j&255;j=208+x|0;if((x|32|0)==108){j=a[o+3>>0]|0;if(j<<24>>24){j=j&255;if((j|32|0)!=105){l=105;j=208+j|0;E=74;break}j=a[o+4>>0]|0;if(!(j<<24>>24)){j=42635;E=72;break}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;E=74;break}j=a[o+5>>0]|0;if(!(j<<24>>24)){j=42636;E=72;break}j=j&255;if((j|32|0)!=101){l=101;j=208+j|0;E=74;break}j=a[o+6>>0]|0;if(!(j<<24>>24)){j=42637;E=72;break}if(j<<24>>24!=95){l=95;j=208+(j&255)|0;E=74;break}j=a[o+7>>0]|0;if(!(j<<24>>24)){j=42638;E=72;break}j=j&255;if((j|32|0)!=115){l=115;j=208+j|0;E=74;break}j=a[o+8>>0]|0;if(!(j<<24>>24)){j=42639;E=72;break}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;E=74;break}j=a[o+9>>0]|0;if(!(j<<24>>24)){j=42640;E=72;break}j=j&255;if((j|32|0)!=97){l=97;j=208+j|0;E=74;break}j=a[o+10>>0]|0;if(!(j<<24>>24)){j=42641;E=72;break}j=j&255;if((j|32|0)==116)break c;else{l=116;j=208+j|0;E=74}}else{j=42634;E=72}}else{l=108;E=74}}else{j=42633;E=72}}else{l=113;E=74}}else{j=42632;E=72}}while(0);if((E|0)==72){k=0;j=a[208+(d[j>>0]|0)>>0]|0}else if((E|0)==74){k=d[j>>0]|0;j=l}if((k|0)!=(j&255|0)){c[y>>2]=o;cd(f,42643,y);qi(T,g);Ra=U;return}}while(0);r=(h|0)!=0;j=(c[S+12>>2]|0)==0;if(r){if(j){c[z>>2]=o;cd(f,42671,z);qi(T,g);Ra=U;return}}else if(!j){c[A>>2]=o;cd(f,42705,A);qi(T,g);Ra=U;return}t=f+8|0;s=f+116|0;if(!(c[t>>2]|0)){m=c[f>>2]|0;if((c[s>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;e:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))E=97;else{qi(T,g);Ra=U;return}else{do if((e[m+276>>1]|0)>=224){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];A=m+284|0;c[A>>2]=(c[A>>2]|0)+1;break e}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];A=m+284|0;c[A>>2]=(c[A>>2]|0)+1;break e}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;E=97}while(0);if((E|0)==97)k=_d(m,224,0)|0;if(!k){qi(T,g);Ra=U;return}j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=m;j=m+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[t>>2]=k;Di(k,61,0,1,0)|0}q=c[s>>2]|0;q=(q|0)==0?f:q;j=q+84|0;k=c[j>>2]|0;p=1<<R;f:do if((((k&p|0)==0?(c[j>>2]=k|p,i):0)?(F=c[q>>2]|0,C=F+16|0,(c[(c[C>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){j=Pe(c[F>>2]|0,0,F,P,0,542)|0;if(j|0){cd(q,32157,D);c[q+12>>2]=j;break}D=c[P>>2]|0;c[(c[C>>2]|0)+20>>2]=D;j=c[F+92>>2]|0;m=c[D+4>>2]|0;c[m+4>>2]=c[D>>2];do if(!(b[m+22>>1]&2)){n=m+32|0;o=m+36|0;i=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[n>>2]=j;l=m+80|0;j=c[l>>2]|0;if(!j)break;k=j+-4|0;c[l>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;D=(c[14820]|0)+1|0;c[14820]=D;c[14821]=(D|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;E=117;break}else{j=Wa[c[29352>>2]&127](k)|0;E=117}while(0);do if((E|0)==117){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{D=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[l>>2]=0}while(0);D=Se(c[m>>2]|0,n,i)|0;c[o>>2]=(c[n>>2]|0)-(i&65535);if((D|0)!=7)break;j=F+81|0;do if(!(a[j>>0]|0)){if(a[F+82>>0]|0)break;a[j>>0]=1;if((c[F+180>>2]|0)>0)c[F+264>>2]=1;j=F+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[F+236>>2]|0;if(!j)break;c[j+12>>2]=7}while(0);break f}while(0)}while(0);F=q+80|0;c[F>>2]=c[F>>2]|p;F=q+20|0;a[F>>0]=a[F>>0]|1;if(r){il(f,S,R,h);qi(T,g);Ra=U;return}k=c[S>>2]|0;l=c[(c[(c[f>>2]|0)+16>>2]|0)+(R<<4)>>2]|0;c[I>>2]=1;Cb(24,P,42737,I)|0;if(Sd(c[f>>2]|0,P,l)|0){c[J>>2]=l;c[J+4>>2]=P;c[J+8>>2]=38087;c[J+12>>2]=k;Ak(f,42751,J)}c[K>>2]=2;Cb(24,P,42737,K)|0;if(Sd(c[f>>2]|0,P,l)|0){c[L>>2]=l;c[L+4>>2]=P;c[L+8>>2]=38087;c[L+12>>2]=k;Ak(f,42751,L)}c[M>>2]=3;Cb(24,P,42737,M)|0;if(Sd(c[f>>2]|0,P,l)|0){c[N>>2]=l;c[N+4>>2]=P;c[N+8>>2]=38087;c[N+12>>2]=k;Ak(f,42751,N)}c[O>>2]=4;Cb(24,P,42737,O)|0;j=c[f>>2]|0;if(!(Sd(j,P,l)|0))q=j;else{c[Q>>2]=l;c[Q+4>>2]=P;c[Q+8>>2]=38087;c[Q+12>>2]=k;Ak(f,42751,Q);q=c[f>>2]|0}r=q+32|0;g:do if(!((c[r>>2]&16384|0)==0&0==0)){if(c[B>>2]|0)break;j=c[t>>2]|0;h:do if(!j){do if(!(c[s>>2]|0)){if(b[q+76>>1]&8)break;a[f+23>>0]=1}while(0);i:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))E=149;else{p=0;break h}else{do if((e[q+276>>1]|0)>=224){j=q+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Q=q+284|0;c[Q>>2]=(c[Q>>2]|0)+1;break i}j=q+296|0;k=c[j>>2]|0;if(!k){j=q+292|0;break}else{c[j>>2]=c[k>>2];Q=q+284|0;c[Q>>2]=(c[Q>>2]|0)+1;break i}}else j=q+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;E=149}while(0);if((E|0)==149)k=_d(q,224,0)|0;if(!k){p=0;break}j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=q;j=q+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[t>>2]=k;Di(k,61,0,1,0)|0;p=k}else p=j;while(0);i=c[S>>2]|0;m=c[H>>2]|0;n=c[m+68>>2]|0;if(!n){k=m+60|0;j=m+64|0}else{k=a[i>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=i;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[m+56>>2]|0)>>>0)|0;k=n+(j<<3)|0;j=n+(j<<3)+4|0}k=c[k>>2]|0;j:do if(!k)j=59292;else{o=d[208+(d[i>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;Q=a[m>>0]|0;l=(d[208+(Q&255)>>0]|0)-o|0;if(!(Q<<24>>24==0|(l|0)!=0)){n=i;do{m=m+1|0;n=n+1|0;Q=a[m>>0]|0;l=(d[208+(Q&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Q<<24>>24==0|(l|0)!=0))}if(!l)break j;if(!k){j=59292;break}}}while(0);do if(!(c[j+8>>2]|0)){j=c[S+16>>2]|0;if(!j)break g;while(1){if(a[j+24>>0]|0)break;if(!((c[r>>2]&524288|0)==0&0==0))break;j=c[j+4>>2]|0;if(!j)break g}k=f+56|0;j=(c[k>>2]|0)+-1|0;c[k>>2]=j;k=p+108|0;l=c[k>>2]|0;if((c[p+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[p+104>>2]|0;a[m+(l*20|0)>>0]=46;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=1;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;m=j;break}else{Di(p,46,1,j,0)|0;m=j;break}}else m=0;while(0);Q=f+146|0;a[Q>>0]=1;sj(f,ik(q,g,0)|0,0);a[Q>>0]=0;if((c[r>>2]&524288|0)==0&0==0){j=p+108|0;k=c[j>>2]|0;l=k+2|0;if((c[p+112>>2]|0)>(k|0)){c[j>>2]=k+1;Q=c[p+104>>2]|0;a[Q+(k*20|0)>>0]=46;b[Q+(k*20|0)+2>>1]=0;c[Q+(k*20|0)+4>>2]=0;c[Q+(k*20|0)+8>>2]=l;c[Q+(k*20|0)+12>>2]=0;c[Q+(k*20|0)+16>>2]=0;a[Q+(k*20|0)+1>>0]=0}else Di(p,46,0,l,0)|0;Uj(f,787,2,0,-1,4)}if(!m)break;k=c[p+12>>2]|0;j=~m;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,p,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[p+108>>2];break}}while(0);il(f,S,R,0);qi(T,g);Ra=U;return}
- function rj(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+48|0;s=u+32|0;t=u+16|0;r=u;p=u+36|0;c[p>>2]=e;c[p+4>>2]=f;c[p+8>>2]=g;a:do if(!e)h=0;else{o=0;h=0;n=e;b:while(1){m=c[n+4>>2]|0;if((m|0)<=0)break;c:do if((m|0)==7){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;d:do if(!(i<<24>>24)){i=18240;q=10}else{l=i&255;i=208+l|0;do if((l|32|0)==110){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18241;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==97){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18242;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==116){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18243;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==117){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18244;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==114){i=a[j+5>>0]|0;if(!(i<<24>>24)){i=18245;q=10;break d}i=i&255;if((i|32|0)!=97){k=97;i=208+i|0;break}i=a[j+6>>0]|0;if(!(i<<24>>24)){i=18246;q=10;break d}i=i&255;if((i|32|0)==108){i=0;break c}else{k=108;i=208+i|0}}else k=114}else k=117}else k=116}else k=97}else k=110;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==10){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0))i=0;else q=12}else q=12;while(0);e:do if((q|0)==12){q=0;l=(m|0)==4;if(l){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18246;q=28}else{k=i&255;i=208+k|0;if((k|32|0)==108){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18247;q=28;break}k=i&255;i=208+k|0;if((k|32|0)==101){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18248;q=28;break}k=i&255;i=208+k|0;if((k|32|0)==102){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18249;q=28;break}i=i&255;if((i|32|0)==116){i=1;break e}else{k=116;i=208+i|0}}else k=102}else k=101}else k=108;j=d[i>>0]|0;i=k}while(0);if((q|0)==28){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=1;break}}else l=0;m=(m|0)==5;if(m){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18250;q=37}else{k=i&255;i=208+k|0;if((k|32|0)==111){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18251;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==117){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18252;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==116){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18253;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==101){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18254;q=37;break}i=i&255;if((i|32|0)==114){i=2;break e}else{k=114;i=208+i|0}}else k=101}else k=116}else k=117}else k=111;j=d[i>>0]|0;i=k}while(0);if((q|0)==37){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=2;break}if(m){j=c[n>>2]|0;if(j){i=a[j>>0]|0;f:do if(!(i<<24>>24)){i=18254;q=45}else{m=i&255;i=208+m|0;do if((m|32|0)==114){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18255;q=45;break f}i=i&255;if((i|32|0)!=105){k=105;i=208+i|0;break}i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18256;q=45;break f}i=i&255;if((i|32|0)!=103){k=103;i=208+i|0;break}i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18257;q=45;break f}i=i&255;if((i|32|0)!=104){k=104;i=208+i|0;break}i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18258;q=45;break f}i=i&255;if((i|32|0)==116){i=3;break e}else{k=116;i=208+i|0}}else k=114;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==45){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=3;break}else i=1}else i=1}else i=0;if(l){l=i;q=48}else l=i}else if(l){l=0;q=48}else break b;if((q|0)==48){q=0;j=c[n>>2]|0;if(j){i=a[j>>0]|0;do if(!(i<<24>>24)){i=18259;q=53}else{m=i&255;i=208+m|0;if((m|32|0)==102){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18260;q=53;break}m=i&255;i=208+m|0;if((m|32|0)==117){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18261;q=53;break}m=i&255;i=208+m|0;if((m|32|0)==108){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18262;q=53;break}i=i&255;if((i|32|0)==108){i=4;break e}else{k=108;i=208+i|0}}else k=108}else k=117}else k=102;j=d[i>>0]|0;i=k}while(0);if((q|0)==53){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=4;break}}}if(!l)break b;j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18263;q=61}else{m=i&255;i=208+m|0;if((m|32|0)==105){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18264;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==110){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18265;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==110){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18266;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==101){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18267;q=61;break}i=i&255;if((i|32|0)==114){i=5;break e}else{k=114;i=208+i|0}}else k=101}else k=110}else k=110}else k=105;j=d[i>>0]|0;i=k}while(0);if((q|0)==61){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)!=(i&255|0)){if(!l)break b;j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;g:do if(!(i<<24>>24)){i=18268;q=69}else{n=i&255;i=208+n|0;do if((n|32|0)==99){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18269;q=69;break g}n=i&255;i=208+n|0;if((n|32|0)==114){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18270;q=69;break g}i=i&255;if((i|32|0)!=111){k=111;i=208+i|0;break}i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18271;q=69;break g}i=i&255;if((i|32|0)!=115){k=115;i=208+i|0;break}i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18272;q=69;break g}i=i&255;if((i|32|0)==115){i=6;break e}else{k=115;i=208+i|0}}else k=114}else k=99;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==69){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0))i=6;else break b}else i=5}while(0);h=h|(d[18288+(i*3|0)+2>>0]|0);o=o+1|0;if(o>>>0>=3)break a;n=c[p+(o<<2)>>2]|0;if(!n)break a}h=h|64}while(0);if((h&33|0)!=33&(h&64|0)==0){if((h&32|0)==0|(h&24|0)==8){t=h;Ra=u;return t|0}cd(b,44559,s);t=1;Ra=u;return t|0}if(!g){c[t>>2]=e;c[t+4>>2]=f;c[t+8>>2]=44514;c[t+12>>2]=0;cd(b,44515,t);t=1;Ra=u;return t|0}else{c[r>>2]=e;c[r+4>>2]=f;c[r+8>>2]=44513;c[r+12>>2]=g;cd(b,44515,r);t=1;Ra=u;return t|0}return 0}function sj(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+112|0;E=U+32|0;C=U+24|0;w=U+16|0;v=U+8|0;o=U;D=U+80|0;P=U+76|0;Q=U+72|0;F=U+40|0;c[P>>2]=0;c[Q>>2]=0;T=c[f>>2]|0;a:do if((c[f+36>>2]|0)==0?(K=T+81|0,(a[K>>0]|0)==0):0){j=c[g+8>>2]|0;if(!j)i=g+12|0;else{k=c[T+16>>2]|0;i=0;while(1)if((c[k+(i<<4)+12>>2]|0)==(j|0))break;else i=i+1|0;i=k+(i<<4)|0}R=bd(f,0,c[g+16>>2]|0,c[i>>2]|0)|0;i=c[f>>2]|0;j=g+24|0;k=c[j>>2]|0;do if(k|0){if(i|0?c[i+480>>2]|0:0){Vi(i,k);break}N=k+32|0;O=(c[N>>2]|0)+-1|0;c[N>>2]=O;if(!O)Vi(i,k)}while(0);c[j>>2]=R;if(R){O=R+32|0;c[O>>2]=(c[O>>2]|0)+1;b:do if(a[g+45>>0]&2){m=c[g+72>>2]|0;i=c[R+8>>2]|0;c:do if(i|0){n=d[208+(d[m>>0]|0)>>0]|0;while(1){k=c[i>>2]|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-n|0;if(!(O<<24>>24==0|(j|0)!=0)){l=m;do{k=k+1|0;l=l+1|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(j|0)!=0))}if(!j)break;i=c[i+20>>2]|0;if(!i)break c}c[g+76>>2]=i;break b}while(0);c[o>>2]=m;c[o+4>>2]=0;cd(f,41107,o);a[f+17>>0]=1;i=0;break a}while(0);i=c[f>>2]|0;s=c[i+32>>2]|0;do if(!((s&262144|0)==0&0==0)?(q=c[(c[i+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){p=c[R+72>>2]|0;if((p|0)!=(q|0)?(r=c[q+48>>2]|0,(r|0)!=0):0){o=R+68|0;n=r;i=0;do{m=c[n+8>>2]|0;if((c[m+24>>2]|0)==(p|0)){k=c[m+4>>2]|0;l=c[R>>2]|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(O<<24>>24==0|(j|0)!=0))do{k=k+1|0;l=l+1|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(j|0)!=0));if(!j){if(!i)i=c[o>>2]|0;c[m+32>>2]=i;i=m}}n=c[n>>2]|0}while((n|0)!=0);if(!i)S=40}else S=40;if((S|0)==40){i=c[R+68>>2]|0;if(!i){S=46;break}}j=0;k=i;do{if((a[k+8>>0]|0)==121)j=j|d[k+9>>0];k=c[k+32>>2]|0}while((k|0)!=0);if(j){j=(c[R+12>>2]|0)!=0;if(!i)S=48;else{I=i;x=1;i=1}}else S=46}else S=46;while(0);if((S|0)==46){j=(c[R+12>>2]|0)!=0;S=48}if((S|0)==48){if(!((s&16384|0)==0&0==0)){p=c[R>>2]|0;m=c[R+72>>2]|0;n=c[m+68>>2]|0;if(!n){k=m+60|0;i=m+64|0}else{k=a[p>>0]|0;if(!(k<<24>>24))i=0;else{i=0;l=p;do{l=l+1|0;i=G(i+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}i=(i>>>0)%((c[m+56>>2]|0)>>>0)|0;k=n+(i<<3)|0;i=n+(i<<3)+4|0}k=c[k>>2]|0;d:do if(!k)i=59292;else{o=d[208+(d[p>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;k=k+-1|0;m=c[i+12>>2]|0;O=a[m>>0]|0;l=(d[208+(O&255)>>0]|0)-o|0;if(!(O<<24>>24==0|(l|0)!=0)){n=p;do{m=m+1|0;n=n+1|0;O=a[m>>0]|0;l=(d[208+(O&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(l|0)!=0))}if(!l)break d;if(!k){i=59292;break}}}while(0);if(!(c[i+8>>2]|0))i=(c[R+16>>2]|0)!=0&1;else i=1}else i=0;I=0;x=(i|0)!=0;i=0}u=x&1;if((Sk(f,R)|0)==0?(Fm(f,R,i)|0)==0:0){k=c[R+72>>2]|0;l=c[T+16>>2]|0;if(!k)z=-1e6;else{i=0;while(1)if((c[l+(i<<4)+12>>2]|0)==(k|0)){z=i;break}else i=i+1|0}m=c[R>>2]|0;i=c[l+(z<<4)>>2]|0;k=c[f>>2]|0;if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(t=c[k+312>>2]|0,(t|0)!=0):0){i=$a[t&127](c[k+316>>2]|0,9,m,0,i,c[f+240>>2]|0)|0;if((i|0)==1){cd(f,39216,v);c[f+12>>2]=23;i=0;break}if((i|2|0)!=2){cd(f,39231,w);c[f+12>>2]=1;i=0;break}}else i=0;w=f+40|0;J=c[w>>2]|0;A=J+1|0;c[w>>2]=A;c[g+48>>2]=J;y=R+8|0;k=c[y>>2]|0;if(!k)B=0;else{l=0;m=A;do{m=m+1|0;l=l+1|0;k=c[k+20>>2]|0}while((k|0)!=0);c[w>>2]=m;B=l}if(j){O=f+240|0;N=c[O>>2]|0;c[O>>2]=c[R>>2];O=f}else{N=0;O=0}v=f+8|0;k=c[v>>2]|0;e:do if(!k){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;f:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))S=97;else{i=0;break e}else{do if((e[n+276>>1]|0)>=224){k=n+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break f}k=n+296|0;l=c[k>>2]|0;if(!l){k=n+292|0;break}else{c[k>>2]=c[l>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break f}}else k=n+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;S=97}while(0);if((S|0)==97)m=_d(n,224,0)|0;if(!m)i=0;else{o=m+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[m>>2]=n;k=n+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[v>>2]=m;Di(m,61,0,1,0)|0;M=m;S=102}}else{M=k;S=102}while(0);g:do if((S|0)==102){L=f+18|0;if(!(a[L>>0]|0)){H=M+149|0;t=d[H>>0]|d[H+1>>0]<<8|32;a[H>>0]=t;a[H+1>>0]=t>>8}H=f+116|0;t=c[H>>2]|0;t=(t|0)==0?f:t;k=t+84|0;l=c[k>>2]|0;s=1<<z;h:do if((l&s|0)==0?(c[k>>2]=l|s,(z|0)==1):0){r=c[t>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;l=Pe(c[r>>2]|0,0,r,D,0,542)|0;if(l|0){cd(t,32157,C);c[t+12>>2]=l;break}C=c[D>>2]|0;c[(c[k>>2]|0)+20>>2]=C;k=c[r+92>>2]|0;n=c[C+4>>2]|0;c[n+4>>2]=c[C>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;C=(c[14820]|0)+1|0;c[14820]=C;c[14821]=(C|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;S=119;break}else{k=Wa[c[29352>>2]&127](l)|0;S=119}while(0);do if((S|0)==119){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{C=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);C=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((C|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break h}while(0)}while(0);C=t+80|0;c[C>>2]=c[C>>2]|s;C=t+20|0;a[C>>0]=d[C>>0]|u;if(j){Gm(f,R,h,J);c[Q>>2]=J;c[P>>2]=J}C=F+8|0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;c[C+20>>2]=0;c[F>>2]=f;c[F+4>>2]=g;i:do if(h){l=F+24|0;b[l>>1]=0;c[D>>2]=f;c[D+4>>2]=125;c[D+8>>2]=126;c[D+12>>2]=0;c[D+24>>2]=F;m=h+24|0;k=f+208|0;C=(c[k>>2]|0)+(c[m>>2]|0)|0;c[k>>2]=C;k=c[(c[f>>2]|0)+120>>2]|0;do if((k|0)>=(C|0)){_j(D,h)|0;k=c[D>>2]|0;E=k+208|0;c[E>>2]=(c[E>>2]|0)-(c[m>>2]|0);E=h+4|0;c[E>>2]=c[E>>2]|b[l>>1]&-32752&65535;if((c[F+20>>2]|0)>0)break;if((c[k+36>>2]|0)<1)break i;else{i=0;break g}}else{c[E>>2]=k;cd(f,41637,E)}while(0);i=0;break g}while(0);do if(!(0==0?(c[T+32>>2]&128|0)==0:0)){if(a[L>>0]|0){D=0;break}if(c[f+120>>2]|0){D=0;break}l=f+44|0;k=(c[l>>2]|0)+1|0;c[l>>2]=k;l=M+108|0;m=c[l>>2]|0;if((c[M+112>>2]|0)>(m|0)){c[l>>2]=m+1;D=c[M+104>>2]|0;a[D+(m*20|0)>>0]=70;b[D+(m*20|0)+2>>1]=0;c[D+(m*20|0)+4>>2]=0;c[D+(m*20|0)+8>>2]=k;c[D+(m*20|0)+12>>2]=0;c[D+(m*20|0)+16>>2]=0;a[D+(m*20|0)+1>>0]=0;D=k;break}else{Di(M,70,0,k,0)|0;D=k;break}}else D=0;while(0);do if(x|((h|0)!=0|(i|0)!=0))S=166;else{if(c[R+56>>2]|0){S=166;break}i=R+28|0;Hj(f,z,c[i>>2]|0,1,c[R>>2]|0);do if(!(c[R+36>>2]&32)){j=c[i>>2]|0;k=(D|0)==0?-1:D;m=c[R>>2]|0;l=M+108|0;i=c[l>>2]|0;if((c[M+112>>2]|0)>(i|0)){c[l>>2]=i+1;R=c[M+104>>2]|0;a[R+(i*20|0)>>0]=-119;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=j;c[R+(i*20|0)+8>>2]=z;c[R+(i*20|0)+12>>2]=k;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else i=Di(M,137,j,z,k)|0;if(a[(c[M>>2]|0)+81>>0]|0)break;if((i|0)<0)i=(c[l>>2]|0)+-1|0;j=c[M+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(M,j+(i*20|0)|0,m,-1);break}if(!m)break;c[j+(i*20|0)+16>>2]=m;a[k>>0]=-1}while(0);i=c[y>>2]|0;if(!i){i=0;break}l=M+108|0;m=M+112|0;n=M+104|0;do{j=c[i+44>>2]|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;R=c[n>>2]|0;a[R+(k*20|0)>>0]=-119;b[R+(k*20|0)+2>>1]=0;c[R+(k*20|0)+4>>2]=j;c[R+(k*20|0)+8>>2]=z;c[R+(k*20|0)+12>>2]=0;c[R+(k*20|0)+16>>2]=0;a[R+(k*20|0)+1>>0]=0}else Di(M,137,j,z,0)|0;i=c[i+20>>2]|0}while((i|0)!=0);i=0}while(0);do if((S|0)==166){r=x|(b[F+24>>1]&64)!=0?1044:1052;j:do if(!(c[R+36>>2]&32)){i=f+44|0;l=(c[i>>2]|0)+1|0;c[i>>2]=l;i=M+108|0;k=c[i>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[i>>2]=k+1;s=c[M+104>>2]|0;a[s+(k*20|0)>>0]=73;b[s+(k*20|0)+2>>1]=0;c[s+(k*20|0)+4>>2]=0;c[s+(k*20|0)+8>>2]=l;c[s+(k*20|0)+12>>2]=0;c[s+(k*20|0)+16>>2]=0;a[s+(k*20|0)+1>>0]=0;s=0;C=0;p=1;u=0;i=0;break}else{Di(M,73,0,l,0)|0;s=0;C=0;p=1;u=0;i=0;break}}else{i=c[y>>2]|0;k:do if(!i)i=0;else while(1){F=i+55|0;if(((d[F>>0]|d[F+1>>0]<<8)&3)==2)break k;i=c[i+20>>2]|0;if(!i){i=0;break}}while(0);p=b[i+50>>1]|0;o=f+44|0;k=c[o>>2]|0;q=k+1|0;m=p<<16>>16;c[o>>2]=k+m;o=c[w>>2]|0;c[w>>2]=o+1;k=M+108|0;l=c[k>>2]|0;if((c[M+112>>2]|0)>(l|0)){c[k>>2]=l+1;F=c[M+104>>2]|0;a[F+(l*20|0)>>0]=113;b[F+(l*20|0)+2>>1]=0;c[F+(l*20|0)+4>>2]=o;c[F+(l*20|0)+8>>2]=m;c[F+(l*20|0)+12>>2]=0;c[F+(l*20|0)+16>>2]=0;a[F+(l*20|0)+1>>0]=0}else l=Di(M,113,o,m,0)|0;k=c[v>>2]|0;n=Ij(f,i)|0;if(!n){s=l;l=0;C=o;u=q;break}m=c[k>>2]|0;if(!(a[m+81>>0]|0)){C=c[k+104>>2]|0;s=(c[k+108>>2]|0)+-1|0;a[C+(s*20|0)+1>>0]=-9;c[C+(s*20|0)+16>>2]=n;s=l;l=0;C=o;u=q;break}if(c[m+480>>2]|0){s=l;l=0;C=o;u=q;break}F=(c[n>>2]|0)+-1|0;c[n>>2]=F;if(F|0){s=l;l=0;C=o;u=q;break}k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);s=l;l=0;C=o;u=q;break j}m=n;if((c[k+304>>2]|0)>>>0>m>>>0)break;if((c[k+308>>2]|0)>>>0<=m>>>0)break;s=k+300|0;c[n>>2]=c[s>>2];c[s>>2]=n;s=l;l=0;C=o;u=q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);s=l;l=0;C=o;u=q;break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);s=l;l=0;C=o;u=q;break}}while(0);A=ql(f,g,h,0,0,r,A)|0;if(!A){i=0;break g}v=A+24|0;o=c[v>>2]|0;v=c[v+4>>2]|0;w=a[A+49>>0]|0;x=w<<24>>24==1;if(!x){F=c[H>>2]|0;a[((F|0)==0?f:F)+20>>0]=1}do if(D|0){k=M+108|0;m=c[k>>2]|0;if((c[M+112>>2]|0)>(m|0)){c[k>>2]=m+1;F=c[M+104>>2]|0;a[F+(m*20|0)>>0]=83;b[F+(m*20|0)+2>>1]=0;c[F+(m*20|0)+4>>2]=D;c[F+(m*20|0)+8>>2]=1;c[F+(m*20|0)+12>>2]=0;c[F+(m*20|0)+16>>2]=0;a[F+(m*20|0)+1>>0]=0;break}else{Di(M,83,D,1,0)|0;break}}while(0);z=(i|0)!=0;do if(!z){m=f+44|0;k=(c[m>>2]|0)+1|0;c[m>>2]=k;m=M+108|0;n=c[m>>2]|0;if((c[M+112>>2]|0)>(n|0)){c[m>>2]=n+1;F=c[M+104>>2]|0;a[F+(n*20|0)>>0]=-128;b[F+(n*20|0)+2>>1]=0;c[F+(n*20|0)+4>>2]=J;c[F+(n*20|0)+8>>2]=k;c[F+(n*20|0)+12>>2]=0;c[F+(n*20|0)+16>>2]=0;a[F+(n*20|0)+1>>0]=0;n=k;break}else{Di(M,128,J,k,0)|0;n=k;break}}else{m=p<<16>>16;if(p<<16>>16<=0){n=u;break}n=i+4|0;k=0;do{Vj(M,R,J,b[(c[n>>2]|0)+(k<<1)>>1]|0,k+u|0);k=k+1|0}while((k|0)!=(m|0));n=u}while(0);y=w<<24>>24!=0;l:do if(y){m=B+2|0;m:do if(c[T+272>>2]|0){if(!(a[K>>0]|0))S=216}else{do if(!(0<0|(0==0?(e[T+276>>1]|0)>>>0<m>>>0:0))){k=T+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];S=T+284|0;c[S>>2]=(c[S>>2]|0)+1;S=217;break m}k=T+296|0;i=c[k>>2]|0;if(!i){i=T+292|0;break}else{c[k>>2]=c[i>>2];S=T+284|0;c[S>>2]=(c[S>>2]|0)+1;S=217;break m}}else i=T+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;S=216}while(0);if((S|0)==216){i=_d(T,m,0)|0;S=217}do if((S|0)==217){if(!i)break;K=B+1|0;gw(i|0,1,K|0)|0;a[i+K>>0]=0;if((o|0)>-1)a[i+(o-J)>>0]=0;if((v|0)>-1)a[i+(v-J)>>0]=0;do if(s|0){k=c[M>>2]|0;if(a[k+81>>0]|0)break;K=c[M+104>>2]|0;E=K+(s*20|0)+1|0;F=K+(s*20|0)+16|0;kg(k,a[E>>0]|0,c[F>>2]|0);a[E>>0]=0;c[F>>2]=0;a[K+(s*20|0)>>0]=-86}while(0);r=f+56|0;s=(c[r>>2]|0)+-1|0;c[r>>2]=s;r=n;break l}while(0);sl(A);i=0;break g}else{do if(!z){i=M+108|0;k=c[i>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[i>>2]=k+1;i=c[M+104>>2]|0;a[i+(k*20|0)>>0]=-108;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=l;c[i+(k*20|0)+8>>2]=n;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;i=1;k=n;break}else{Di(M,148,l,n,0)|0;i=1;k=n;break}}else{t=f+44|0;k=(c[t>>2]|0)+1|0;c[t>>2]=k;t=p<<16>>16;q=gl(c[f>>2]|0,i)|0;r=M+108|0;i=c[r>>2]|0;s=M+112|0;if((c[s>>2]|0)>(i|0)){c[r>>2]=i+1;K=c[M+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=u;c[K+(i*20|0)+8>>2]=t;c[K+(i*20|0)+12>>2]=k;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(M,92,u,t,k)|0;m=c[M>>2]|0;n:do if(!(a[m+81>>0]|0)){if((i|0)<0)i=(c[r>>2]|0)+-1|0;m=c[M+104>>2]|0;n=m+(i*20|0)|0;do if(p<<16>>16<=-1){o=m+(i*20|0)+1|0;if(a[o>>0]|0)break;if(p<<16>>16==-3){c[m+(i*20|0)+16>>2]=q;a[o>>0]=-3;break n}if(!q)break n;c[m+(i*20|0)+16>>2]=q;a[o>>0]=p;if(p<<16>>16!=-12)break n;K=q+12|0;c[K>>2]=(c[K>>2]|0)+1;break n}while(0);Ei(M,n,q,t)}else{if(p<<16>>16==-12)break;kg(m,t,q)}while(0);i=c[r>>2]|0;if((c[s>>2]|0)>(i|0)){c[r>>2]=i+1;K=c[M+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=C;c[K+(i*20|0)+8>>2]=k;c[K+(i*20|0)+12>>2]=u;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(M,132,C,k,u)|0;if(a[(c[M>>2]|0)+81>>0]|0){i=0;break}K=c[M+104>>2]|0;a[K+(i*20|0)+1>>0]=-3;c[K+(i*20|0)+16>>2]=t;i=0}while(0);sl(A);s=0;p=i;i=0;r=k}while(0);do if(!j){if(w<<24>>24!=2){Hm(f,R,109,8,J,i,P,Q)|0;break}k=M+108|0;j=c[k>>2]|0;if((c[M+112>>2]|0)>(j|0)){c[k>>2]=j+1;o=c[M+104>>2]|0;a[o+(j*20|0)>>0]=17;o=o+(j*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0))}else j=Di(M,17,0,0,0)|0;Hm(f,R,109,8,J,i,P,Q)|0;k=c[k>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((j|0)<0?k+-1|0:j)*20|0)|0;else j=59308;c[j+8>>2]=k}while(0);do if(!y){n=M+108|0;k=c[n>>2]|0;m=M+112|0;j=(c[m>>2]|0)>(k|0);if(!z)if(j){c[n>>2]=k+1;q=c[M+104>>2]|0;a[q+(k*20|0)>>0]=41;b[q+(k*20|0)+2>>1]=0;c[q+(k*20|0)+4>>2]=l;c[q+(k*20|0)+8>>2]=0;c[q+(k*20|0)+12>>2]=r;c[q+(k*20|0)+16>>2]=0;a[q+(k*20|0)+1>>0]=0;q=k;break}else{q=Di(M,41,l,0,r)|0;break}if(j){c[n>>2]=k+1;K=c[M+104>>2]|0;a[K+(k*20|0)>>0]=36;b[K+(k*20|0)+2>>1]=0;c[K+(k*20|0)+4>>2]=C;c[K+(k*20|0)+8>>2]=0;c[K+(k*20|0)+12>>2]=0;c[K+(k*20|0)+16>>2]=0;a[K+(k*20|0)+1>>0]=0}else k=Di(M,36,C,0,0)|0;l=c[n>>2]|0;j=(c[m>>2]|0)>(l|0);if(!(c[R+56>>2]|0))if(j){c[n>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=127;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=C;c[q+(l*20|0)+8>>2]=r;c[q+(l*20|0)+12>>2]=0;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=k;break}else{Di(M,127,C,r,0)|0;q=k;break}else if(j){c[n>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=90;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=C;c[q+(l*20|0)+8>>2]=0;c[q+(l*20|0)+12>>2]=r;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=k;break}else{Di(M,90,C,0,r)|0;q=k;break}}else{if(c[R+56>>2]|0){q=0;break}k=c[P>>2]|0;if(!(a[i+(k-J)>>0]|0)){q=0;break}l=M+108|0;j=c[l>>2]|0;if((c[M+112>>2]|0)>(j|0)){c[l>>2]=j+1;K=c[M+104>>2]|0;a[K+(j*20|0)>>0]=28;b[K+(j*20|0)+2>>1]=0;c[K+(j*20|0)+4>>2]=k;c[K+(j*20|0)+8>>2]=s;c[K+(j*20|0)+12>>2]=r;c[K+(j*20|0)+16>>2]=0;a[K+(j*20|0)+1>>0]=0}else j=Di(M,28,k,s,r)|0;if(a[(c[M>>2]|0)+81>>0]|0){q=0;break}q=c[M+104>>2]|0;a[q+(j*20|0)+1>>0]=-3;c[q+(j*20|0)+16>>2]=p<<16>>16;q=0}while(0);do if(!(c[R+56>>2]|0))Im(f,R,I,c[P>>2]|0,c[Q>>2]|0,r,p,(a[L>>0]|0)==0&1,11,w,v);else{j=c[R+64>>2]|0;o:do if(!j)p=0;else while(1){if((c[j>>2]|0)==(T|0)){p=j;break o}j=c[j+24>>2]|0;if(!j){p=0;break}}while(0);o=c[H>>2]|0;o=(o|0)==0?f:o;n=o+204|0;m=c[n>>2]|0;l=o+252|0;p:do if((m|0)>0){j=c[l>>2]|0;k=0;do{if((c[j+(k<<2)>>2]|0)==(R|0))break p;k=k+1|0}while((k|0)<(m|0));k=l;S=295}else{k=l;j=c[l>>2]|0;S=295}while(0);q:do if((S|0)==295){do if(!(mb()|0)){S=(m<<2)+4|0;j=sb(j,S,((S|0)<0)<<31>>31)|0;if(!j)break;c[k>>2]=j;S=c[n>>2]|0;c[n>>2]=S+1;c[j+(S<<2)>>2]=R;break q}while(0);j=c[o>>2]|0;k=j+81|0;if(a[k>>0]|0)break;if(a[j+82>>0]|0)break;a[k>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;S=j+272|0;c[S>>2]=(c[S>>2]|0)+1;j=c[j+236>>2]|0;if(!j)break;c[j+12>>2]=7}while(0);m=c[H>>2]|0;a[((m|0)==0?f:m)+21>>0]=1;m=M+108|0;do if(x){j=c[m>>2]|0;k=M+112|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;S=c[M+104>>2]|0;a[S+(j*20|0)>>0]=117;b[S+(j*20|0)+2>>1]=0;c[S+(j*20|0)+4>>2]=J;c[S+(j*20|0)+8>>2]=0;c[S+(j*20|0)+12>>2]=0;c[S+(j*20|0)+16>>2]=0;a[S+(j*20|0)+1>>0]=0}else Di(M,117,J,0,0)|0;if(c[H>>2]|0)break;a[f+20>>0]=0}else k=M+112|0;while(0);j=c[m>>2]|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;S=c[M+104>>2]|0;a[S+(j*20|0)>>0]=10;b[S+(j*20|0)+2>>1]=0;c[S+(j*20|0)+4>>2]=0;c[S+(j*20|0)+8>>2]=1;c[S+(j*20|0)+12>>2]=r;c[S+(j*20|0)+16>>2]=0;a[S+(j*20|0)+1>>0]=0}else j=Di(M,10,0,1,r)|0;do if(!(a[(c[M>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;k=c[M+104>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(M,k+(j*20|0)|0,p,-12);break}if(!p)break;c[k+(j*20|0)+16>>2]=p;a[l>>0]=-12;S=p+12|0;c[S>>2]=(c[S>>2]|0)+1}while(0);j=c[m>>2]|0;if((j|0)<=0)break;b[(c[M+104>>2]|0)+((j+-1|0)*20|0)+2>>1]=2}while(0);if(y){k=c[M+12>>2]|0;j=~s;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,M,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M+108>>2];sl(A);break}if(z){j=q+1|0;k=M+108|0;l=c[k>>2]|0;if((c[M+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[M+104>>2]|0;a[S+(l*20|0)>>0]=5;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=C;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else Di(M,5,C,j,0)|0;k=c[k>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((q|0)<0?k+-1|0:q)*20|0)|0;else j=59308;c[j+8>>2]=k;break}else{j=M+108|0;k=c[j>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[j>>2]=k+1;S=c[M+104>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=q;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(M,11,0,q,0)|0;k=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((q|0)<0?k+-1|0:q)*20|0)|0;else j=59308;c[j+8>>2]=k;break}}while(0);do if(!(a[L>>0]|0)){if(c[f+120>>2]|0)break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!D)break;j=M+108|0;k=c[j>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[j>>2]=k+1;f=c[M+104>>2]|0;a[f+(k*20|0)>>0]=81;b[f+(k*20|0)+2>>1]=0;c[f+(k*20|0)+4>>2]=D;c[f+(k*20|0)+8>>2]=1;c[f+(k*20|0)+12>>2]=0;c[f+(k*20|0)+16>>2]=0;a[f+(k*20|0)+1>>0]=0}else Di(M,81,D,1,0)|0;Wi(M,1);if(a[(c[M>>2]|0)+81>>0]|0)break;yc(c[M+116>>2]|0,44614,-1,1,0)|0}while(0);if(O)c[O+240>>2]=N}else i=0}else i=0}else i=0;while(0);qi(T,g);if(h|0)ni(T,h);if(!i){Ra=U;return}if(T|0){if(c[T+480>>2]|0){Xd(T,i);Ra=U;return}h=i;if((c[T+304>>2]|0)>>>0<=h>>>0?(c[T+308>>2]|0)>>>0>h>>>0:0){T=T+300|0;c[i>>2]=c[T>>2];c[T>>2]=i;Ra=U;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Ra=U;return}else{T=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Ra=U;return}}function tj(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;Aa=Ra;Ra=Ra+128|0;ea=Aa+48|0;aa=Aa+40|0;S=Aa+32|0;V=Aa+24|0;U=Aa+16|0;T=Aa+8|0;r=Aa;da=Aa+88|0;fa=Aa+56|0;va=Aa+52|0;c[va>>2]=0;za=c[f>>2]|0;a:do if((c[f+36>>2]|0)==0?(y=za+81|0,(a[y>>0]|0)==0):0){m=c[g+8>>2]|0;if(!m)l=g+12|0;else{n=c[za+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0;l=n+(l<<4)|0}ya=bd(f,0,c[g+16>>2]|0,c[l>>2]|0)|0;l=c[f>>2]|0;m=g+24|0;n=c[m>>2]|0;do if(n|0){if(l|0?c[l+480>>2]|0:0){Vi(l,n);break}ua=n+32|0;wa=(c[ua>>2]|0)+-1|0;c[ua>>2]=wa;if(!wa)Vi(l,n)}while(0);c[m>>2]=ya;if(ya|0){wa=ya+32|0;c[wa>>2]=(c[wa>>2]|0)+1;b:do if(a[g+45>>0]&2){p=c[g+72>>2]|0;l=c[ya+8>>2]|0;c:do if(l|0){q=d[208+(d[p>>0]|0)>>0]|0;while(1){n=c[l>>2]|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-q|0;if(!(wa<<24>>24==0|(m|0)!=0)){o=p;do{n=n+1|0;o=o+1|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(m|0)!=0))}if(!m)break;l=c[l+20>>2]|0;if(!l)break c}c[g+76>>2]=l;break b}while(0);c[r>>2]=p;c[r+4>>2]=0;cd(f,41107,r);a[f+17>>0]=1;break a}while(0);n=c[f>>2]|0;ua=ya+72|0;s=c[ua>>2]|0;if(!s)Z=-1e6;else{m=c[n+16>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(s|0)){Z=l;break}else l=l+1|0}do if(!(0==0?(c[n+32>>2]&262144|0)==0:0)?(t=c[(c[n+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){if((s|0)!=(t|0)?(u=c[t+48>>2]|0,(u|0)!=0):0){r=ya+68|0;q=u;l=0;do{p=c[q+8>>2]|0;if((c[p+24>>2]|0)==(s|0)){n=c[p+4>>2]|0;o=c[ya>>2]|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(wa<<24>>24==0|(m|0)!=0))do{n=n+1|0;o=o+1|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(m|0)!=0));if(!m){if(!l)l=c[r>>2]|0;c[p+32>>2]=l;l=p}}q=c[q>>2]|0}while((q|0)!=0);if(!l)xa=43}else xa=43;if((xa|0)==43){l=c[ya+68>>2]|0;if(!l){xa=65;break}}if(!h){m=0;n=l;do{if((a[n+8>>0]|0)==122)m=m|d[n+9>>0];n=c[n+32>>2]|0}while((n|0)!=0)}else{m=0;x=l;do{d:do if((a[x+8>>0]|0)==122){n=c[x+16>>2]|0;e:do if(n|0){w=c[h>>2]|0;if((w|0)<=0)break d;v=c[n+4>>2]|0;if((v|0)<=0)break d;s=c[n>>2]|0;q=0;while(1){t=c[h+4+(q*20|0)+4>>2]|0;u=d[208+(d[t>>0]|0)>>0]|0;r=0;do{o=c[s+(r<<3)>>2]|0;wa=a[o>>0]|0;n=(d[208+(wa&255)>>0]|0)-u|0;if(!(wa<<24>>24==0|(n|0)!=0)){p=t;do{o=o+1|0;p=p+1|0;wa=a[o>>0]|0;n=(d[208+(wa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(n|0)!=0))}if(!n)break e;r=r+1|0}while((r|0)<(v|0));q=q+1|0;if((q|0)>=(w|0))break d}}while(0);m=m|d[x+9>>0]}while(0);x=c[x+32>>2]|0}while((x|0)!=0)}if(!m)xa=65}else xa=65;while(0);if((xa|0)==65){m=0;l=0}sa=(c[ya+12>>2]|0)!=0;if((Sk(f,ya)|0)==0?(Fm(f,ya,m)|0)==0:0){_=f+40|0;ga=c[_>>2]|0;s=ga+1|0;c[_>>2]=s;ha=ya+36|0;ba=ya+8|0;o=c[ba>>2]|0;f:do if(c[ha>>2]&32)if(!o){p=0;o=ga;n=0}else{n=o;while(1){xa=n+55|0;if(((d[xa>>0]|d[xa+1>>0]<<8)&3)==2){xa=73;break f}n=c[n+20>>2]|0;if(!n){n=0;xa=73;break}}}else{n=0;xa=73}while(0);if((xa|0)==73)if(!o){p=0;o=ga}else{p=0;r=ga;q=s;do{r=(n|0)==(o|0)?q:r;q=q+1|0;p=p+1|0;o=c[o+20>>2]|0}while((o|0)!=0);c[_>>2]=q;o=r}$=(k|0)!=0;if($){o=c[k+28>>2]|0;s=c[k+32>>2]|0;c[_>>2]=ga}Y=g+48|0;c[Y>>2]=o;ta=ya+42|0;t=p+2+(p+(b[ta>>1]|0)<<2)|0;g:do if(c[za+272>>2]|0)if(!(a[y>>0]|0))xa=89;else break a;else{do if(!(0<0|(0==0?(e[za+276>>1]|0)>>>0<t>>>0:0))){q=za+300|0;r=c[q>>2]|0;if(r|0){c[q>>2]=c[r>>2];wa=za+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=r;break g}q=za+296|0;r=c[q>>2]|0;if(!r){q=za+292|0;break}else{c[q>>2]=c[r>>2];wa=za+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=r;break g}}else q=za+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;xa=89}while(0);if((xa|0)==89)wa=_d(za,t,0)|0;if(wa|0){ra=wa+(b[ta>>1]<<2)|0;ca=ra+(p<<2)|0;W=p+1|0;gw(ca|0,1,W|0)|0;a[ca+W>>0]=0;qa=b[ta>>1]|0;q=qa<<16>>16;if(qa<<16>>16>0)gw(wa|0,-1,((q|0)>1?q:1)<<2|0)|0;X=fa+12|0;c[X>>2]=0;c[X+4>>2]=0;c[X+8>>2]=0;c[X+12>>2]=0;c[X+16>>2]=0;c[fa>>2]=f;c[fa+4>>2]=g;c[fa+8>>2]=k;X=fa+24|0;b[X>>1]=512;h:do if((c[h>>2]|0)>0){F=da+4|0;H=da+8|0;I=da+12|0;J=da+24|0;K=(n|0)==0;M=za+16|0;N=ya+4|0;O=fa+20|0;P=f+200|0;Q=f+240|0;R=ya+40|0;B=0;t=0;D=0;E=0;i:while(1){C=h+4+(E*20|0)|0;u=c[C>>2]|0;if(u){v=e[X>>1]|0;b[X>>1]=v&28655;q=c[fa>>2]|0;c[da>>2]=q;c[F>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=fa;w=u+24|0;r=q;pa=r+208|0;qa=(c[pa>>2]|0)+(c[w>>2]|0)|0;c[pa>>2]=qa;r=c[(c[r>>2]|0)+120>>2]|0;if((r|0)<(qa|0)){xa=98;break}_j(da,u)|0;q=c[da>>2]|0;qa=q+208|0;c[qa>>2]=(c[qa>>2]|0)-(c[w>>2]|0);qa=b[X>>1]|0;pa=u+4|0;c[pa>>2]=c[pa>>2]|qa&-32752&65535;b[X>>1]=v&36880|qa&65535;if((c[O>>2]|0)>0)break;if((c[q+36>>2]|0)>=1){xa=919;break h}}q=b[ta>>1]|0;j:do if(q<<16>>16>0){A=c[N>>2]|0;x=c[h+4+(E*20|0)+4>>2]|0;z=d[208+(d[x>>0]|0)>>0]|0;w=q<<16>>16;y=0;while(1){v=c[A+(y<<4)>>2]|0;qa=a[v>>0]|0;q=(d[208+(qa&255)>>0]|0)-z|0;if(!(qa<<24>>24==0|(q|0)!=0)){r=x;u=v;do{u=u+1|0;r=r+1|0;qa=a[u>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(!q)break;q=y+1|0;if((q|0)<(w|0))y=q;else{xa=114;break j}}do if((y|0)==(b[R>>1]|0)){r=c[C>>2]|0;t=1;q=D}else{if(K){r=B;q=D;break}r=B;q=(a[A+(y<<4)+15>>0]&1)==0?D:1}while(0);c[wa+(y<<2)>>2]=E;z=q;w=r;x=t}else{x=c[h+4+(E*20|0)+4>>2]|0;xa=114}while(0);if((xa|0)==114){xa=0;if(!K){xa=128;break}v=a[x>>0]|0;u=d[208+(v&255)>>0]|0;q=u+-95|0;v=v<<24>>24==0;if(!(v|(q|0)!=0)){r=58070;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}do if(q|0){q=u+-114|0;if(!(v|(q|0)!=0)){r=40352;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(!q)break;q=u+-111|0;if(!(v|(q|0)!=0)){r=58078;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(q|0){xa=128;break i}}while(0);y=-1;z=D;w=c[C>>2]|0;x=1;v=40352}q=c[ya>>2]|0;r=c[(c[M>>2]|0)+(Z<<4)>>2]|0;t=c[f>>2]|0;do if(!(a[t+165>>0]|0)){if(a[P>>0]|0)break;u=c[t+312>>2]|0;if(!u)break;q=$a[u&127](c[t+316>>2]|0,23,q,v,r,c[Q>>2]|0)|0;if((q|0)==1){xa=134;break i}if((q|2|0)!=2){xa=136;break i}if((q|0)!=2)break;c[wa+(y<<2)>>2]=-1}while(0);E=E+1|0;if((E|0)>=(c[h>>2]|0)){S=w;N=x;O=z;xa=140;break h}else{B=w;t=x;D=z}}if((xa|0)==98){c[T>>2]=r;cd(q,41637,T)}else if((xa|0)==128){c[U>>2]=x;cd(f,44776,U);a[f+17>>0]=1;xa=918;break}else if((xa|0)==134){cd(f,39216,V);c[f+12>>2]=23;xa=919;break}else if((xa|0)==136){cd(f,39231,S);c[f+12>>2]=1;xa=919;break}xa=919}else{S=0;N=0;O=0;xa=140}while(0);k:do if((xa|0)==140){pa=(N&255)+(O&255)|0;ja=pa&255;M=ya+56|0;oa=((c[M>>2]|0)!=0)<<31>>31;qa=g+64|0;c[qa>>2]=oa;c[qa+4>>2]=((oa|0)<0)<<31>>31;pa=pa&255;l:do if(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)ia=0;else{q=c[ya+16>>2]|0;y=c[ya>>2]|0;m:do if(!q)x=0;else{w=ya+40|0;r=(y|0)==0;if(!pa){if(r){u=q;q=0;while(1){if(!(c[u+8>>2]|0)){ia=2;break l}t=c[u+20>>2]|0;n:do if((t|0)>0){r=0;do{if((c[wa+(c[u+36+(r<<3)>>2]<<2)>>2]|0)>-1){q=1;break n}r=r+1|0}while((r|0)<(t|0))}while(0);u=c[u+4>>2]|0;if(!u){x=q;break m}}}v=q;q=0;while(1){t=c[v+8>>2]|0;if(t|0){qa=a[y>>0]|0;r=(d[208+(qa&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(r|0)!=0)){u=y;do{u=u+1|0;t=t+1|0;qa=a[u>>0]|0;r=(d[208+(qa&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(r|0)!=0))}if(!r){ia=2;break l}}t=c[v+20>>2]|0;o:do if((t|0)>0){r=0;do{if((c[wa+(c[v+36+(r<<3)>>2]<<2)>>2]|0)>-1){q=1;break o}r=r+1|0}while((r|0)<(t|0))}while(0);v=c[v+4>>2]|0;if(!v){x=q;break m}}}if(r){r=0;while(1){if(!(c[q+8>>2]|0)){ia=2;break l}u=c[q+20>>2]|0;p:do if((u|0)>0){t=0;do{v=c[q+36+(t<<3)>>2]|0;if((c[wa+(v<<2)>>2]|0)>-1){r=1;break p}t=t+1|0;if((v|0)==(b[w>>1]|0)){r=1;break p}}while((t|0)<(u|0))}while(0);q=c[q+4>>2]|0;if(!q){x=r;break m}}}r=0;while(1){u=c[q+8>>2]|0;if(u|0){qa=a[y>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(t|0)!=0)){v=y;do{v=v+1|0;u=u+1|0;qa=a[v>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(t|0)!=0))}if(!t){ia=2;break l}}u=c[q+20>>2]|0;q:do if((u|0)>0){t=0;do{v=c[q+36+(t<<3)>>2]|0;if((c[wa+(v<<2)>>2]|0)>-1){r=1;break q}t=t+1|0;if((v|0)==(b[w>>1]|0)){r=1;break q}}while((t|0)<(u|0))}while(0);q=c[q+4>>2]|0;if(!q){x=r;break}}}while(0);u=c[ua>>2]|0;v=c[u+68>>2]|0;if(!v){r=u+60|0;q=u+64|0}else{r=a[y>>0]|0;if(!(r<<24>>24))q=0;else{q=0;t=y;do{t=t+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[t>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[u+56>>2]|0)>>>0)|0;r=v+(q<<3)|0;q=v+(q<<3)+4|0}r=c[r>>2]|0;r:do if(!r)q=59292;else{w=d[208+(d[y>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;u=c[q+12>>2]|0;qa=a[u>>0]|0;t=(d[208+(qa&255)>>0]|0)-w|0;if(!(qa<<24>>24==0|(t|0)!=0)){v=y;do{u=u+1|0;v=v+1|0;qa=a[u>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(t|0)!=0))}if(!t)break r;if(!r){q=59292;break}}}while(0);q=c[q+8>>2]|0;if(!q){ia=x;break}r=q;q=x;while(1){if(Jm(ya,r,wa,pa)|0)if(!(a[r+26>>0]|0))q=1;else{ia=2;break l}r=c[r+12>>2]|0;if(!r){ia=q;break}}}while(0);if((j|0)==5){c[va>>2]=1;q=1}else q=0;r=c[ba>>2]|0;if(r){J=(pa|0)!=0|(ia|0)>1;z=f+44|0;A=da+20|0;B=da+4|0;C=da+24|0;D=N<<24>>24==0;E=da+20|0;F=da+4|0;H=da+24|0;I=(j|0)==11;y=0;while(1){s:do if(J|(r|0)==(n|0))xa=210;else{t=c[r+36>>2]|0;if(t|0){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[B>>2]=136;c[C>>2]=wa;_j(da,t)|0;t=a[A>>0]|0;u=t&-3;if(D){a[A>>0]=u;t=u}if(t<<24>>24){xa=210;break}}v=r+50|0;if(!(b[v>>1]|0)){xa=233;break}w=r+4|0;x=r+40|0;t:do if(D){u=0;while(1){t=b[(c[w>>2]|0)+(u<<1)>>1]|0;if(t<<16>>16>-1)t=(c[wa+(t<<16>>16<<2)>>2]|0)>>>31^1;else{t=c[(c[x>>2]|0)+4+(u*20|0)>>2]|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[F>>2]=136;c[H>>2]=wa;if(!t)t=0;else{_j(da,t)|0;t=a[E>>0]|0}t=(t&-3)<<24>>24!=0&1}u=u+1|0;if(t|0)break t;if(u>>>0>=(e[v>>1]|0)>>>0){xa=233;break s}}}else{u=0;while(1){t=b[(c[w>>2]|0)+(u<<1)>>1]|0;if(t<<16>>16>-1)t=(c[wa+(t<<16>>16<<2)>>2]|0)>>>31^1;else{t=c[(c[x>>2]|0)+4+(u*20|0)>>2]|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[F>>2]=136;c[H>>2]=wa;if(!t)t=0;else{_j(da,t)|0;t=a[E>>0]|0}t=t<<24>>24!=0&1}u=u+1|0;if(t|0)break t;if(u>>>0>=(e[v>>1]|0)>>>0){xa=233;break s}}}while(0);t=(c[z>>2]|0)+1|0;c[z>>2]=t+(e[r+52>>1]|0);if(!I){xa=231;break}q=(a[r+54>>0]|0)==5?1:q;xa=231}while(0);if((xa|0)==210){t=(c[z>>2]|0)+1|0;c[z>>2]=t+(e[r+52>>1]|0);xa=231}do if((xa|0)==231){xa=0;if(!t){xa=233;break}u=y+1|0}while(0);if((xa|0)==233){xa=0;u=y+1|0;a[ca+u>>0]=0;t=0}c[ra+(y<<2)>>2]=t;r=c[r+20>>2]|0;if(!r)break;else y=u}c[va>>2]=q}if(q|0)gw(ca|0,1,W|0)|0;ma=f+8|0;q=c[ma>>2]|0;if(!q){t=c[f>>2]|0;do if(!(c[f+116>>2]|0)){if(b[t+76>>1]&8)break;a[f+23>>0]=1}while(0);u:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))xa=252;else{xa=918;break k}else{do if((e[t+276>>1]|0)>=224){q=t+300|0;r=c[q>>2]|0;if(r|0){c[q>>2]=c[r>>2];qa=t+284|0;c[qa>>2]=(c[qa>>2]|0)+1;break u}q=t+296|0;r=c[q>>2]|0;if(!r){q=t+292|0;break}else{c[q>>2]=c[r>>2];qa=t+284|0;c[qa>>2]=(c[qa>>2]|0)+1;break u}}else q=t+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;xa=252}while(0);if((xa|0)==252)r=_d(t,224,0)|0;if(!r){xa=918;break}D=r+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[r>>2]=t;q=t+4|0;t=c[q>>2]|0;if(t|0)c[t+4>>2]=r;c[r+8>>2]=t;c[r+4>>2]=0;c[q>>2]=r;c[r+20>>2]=381479589;c[r+12>>2]=f;c[ma>>2]=r;Di(r,61,0,1,0)|0;la=r}else la=q;ka=f+18|0;if(!(a[ka>>0]|0)){qa=la+149|0;oa=d[qa>>0]|d[qa+1>>0]<<8|32;a[qa>>0]=oa;a[qa+1>>0]=oa>>8}J=(l|0)!=0;T=(ia|0)!=0;z=(J|T)&1;qa=f+116|0;B=c[qa>>2]|0;B=(B|0)==0?f:B;q=B+84|0;r=c[q>>2]|0;A=1<<Z;v:do if(!(r&A)){c[q>>2]=r|A;if((Z|0)!=1)break;y=c[B>>2]|0;q=y+16|0;if(c[(c[q>>2]|0)+20>>2]|0)break;if(a[B+199>>0]|0)break;r=Pe(c[y>>2]|0,0,y,da,0,542)|0;if(r|0){cd(B,32157,aa);c[B+12>>2]=r;break}oa=c[da>>2]|0;c[(c[q>>2]|0)+20>>2]=oa;q=c[y+92>>2]|0;u=c[oa+4>>2]|0;c[u+4>>2]=c[oa>>2];do if(!(b[u+22>>1]&2)){v=u+32|0;w=u+36|0;x=(c[v>>2]|0)-(c[w>>2]|0)|0;do if((q+-512|0)>>>0<65025){if(q+-1&q|0)break;c[v>>2]=q;t=u+80|0;q=c[t>>2]|0;if(!q)break;r=q+-4|0;c[t>>2]=r;q=r;do if((c[14816]|0)>>>0<=q>>>0)if((c[14817]|0)>>>0>q>>>0){c[14979]=(c[14979]|0)+-1;c[r>>2]=c[14819];c[14819]=r;oa=(c[14820]|0)+1|0;c[14820]=oa;c[14821]=(oa|0)<(c[14815]|0)&1;break}else{q=Wa[c[29352>>2]&127](r)|0;xa=274;break}else{q=Wa[c[29352>>2]&127](r)|0;xa=274}while(0);do if((xa|0)==274){c[14980]=(c[14980]|0)-q;if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{oa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);c[t>>2]=0}while(0);oa=Se(c[u>>2]|0,v,x)|0;c[w>>2]=(c[v>>2]|0)-(x&65535);if((oa|0)!=7)break;q=y+81|0;do if(!(a[q>>0]|0)){if(a[y+82>>0]|0)break;a[q>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;q=y+272|0;c[q>>2]=(c[q>>2]|0)+1;q=c[y+236>>2]|0;if(!q)break;c[q+12>>2]=7}while(0);break v}while(0)}while(0);oa=B+80|0;c[oa>>2]=c[oa>>2]|A;oa=B+20|0;a[oa>>0]=d[oa>>0]|z;if(!(c[M>>2]|0)){t=f+44|0;u=c[t>>2]|0;w=u+2|0;c[t>>2]=w;if(J|O<<24>>24!=0|T){q=w+(b[ta>>1]|0)|0;c[t>>2]=q;x=u+3|0}else{x=0;q=w}r=q+1|0;if(J|(ia|pa|0)!=0){c[t>>2]=r;y=r;v=q+2|0;q=r}else{y=w;v=r}c[t>>2]=q+(b[ta>>1]|0);F=u+1|0;aa=w;K=x;Q=y}else{F=0;v=0;aa=0;K=0;Q=0}if(sa){oa=f+240|0;na=c[oa>>2]|0;c[oa>>2]=c[ya>>2];Gm(f,ya,i,o);oa=f}else{na=0;oa=0}w:do if(!i)xa=302;else{t=e[X>>1]|0;b[X>>1]=t&28655;q=c[fa>>2]|0;c[da>>2]=q;c[da+4>>2]=125;c[da+8>>2]=126;c[da+12>>2]=0;c[da+24>>2]=fa;u=i+24|0;r=q+208|0;Z=(c[r>>2]|0)+(c[u>>2]|0)|0;c[r>>2]=Z;r=c[(c[q>>2]|0)+120>>2]|0;do if((r|0)>=(Z|0)){_j(da,i)|0;q=c[da>>2]|0;ea=q+208|0;c[ea>>2]=(c[ea>>2]|0)-(c[u>>2]|0);ea=b[X>>1]|0;da=i+4|0;c[da>>2]=c[da>>2]|ea&-32752&65535;b[X>>1]=t&36880|ea&65535;if((c[fa+20>>2]|0)>0)break;if((c[q+36>>2]|0)<1){xa=302;break w}else break w}else{c[ea>>2]=r;cd(q,41637,ea)}while(0)}while(0);x:do if((xa|0)==302){if(c[M>>2]|0){H=c[ma>>2]|0;m=c[f>>2]|0;l=c[ya+64>>2]|0;y:do if(!l)C=0;else while(1){if((c[l>>2]|0)==(m|0)){C=l;break y}l=c[l+24>>2]|0;if(!l){C=0;break}}while(0);y=b[ta>>1]|0;A=(y<<16>>16)+2|0;x=c[Y>>2]|0;F=c[_>>2]|0;c[_>>2]=F+1;D=H+108|0;l=c[D>>2]|0;E=H+112|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;r=c[H+104>>2]|0;a[r+(l*20|0)>>0]=113;b[r+(l*20|0)+2>>1]=0;c[r+(l*20|0)+4>>2]=F;c[r+(l*20|0)+8>>2]=A;c[r+(l*20|0)+12>>2]=0;c[r+(l*20|0)+16>>2]=0;a[r+(l*20|0)+1>>0]=0;r=l}else r=Di(H,113,F,A,0)|0;B=f+44|0;u=c[B>>2]|0;z=u+1|0;w=u+A|0;v=w+1|0;w=w+2|0;c[B>>2]=w;B=ql(f,g,i,0,0,4,0)|0;if(!B)break;if((b[ta>>1]|0)>0){s=u+3|0;t=H+104|0;q=0;do{l=c[wa+(q<<2)>>2]|0;z:do if((l|0)>-1){l=c[h+4+(l*20|0)>>2]|0;p=q+s|0;do if(l){if((a[l>>0]|0)!=-88){o=Jj(f,l,p)|0;break}o=c[ma>>2]|0;l=c[l+28>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[o+104>>2]|0;a[va+(n*20|0)>>0]=78;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=l;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break z}else{Di(o,78,l,p,0)|0;break z}}else o=Jj(f,0,p)|0;while(0);if((o|0)==(p|0))break;l=c[ma>>2]|0;if(!l)break;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[l+104>>2]|0;a[va+(n*20|0)>>0]=79;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=o;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(l,79,o,p,0)|0;break}}else{l=q+s|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[t>>2]|0;a[va+(m*20|0)>>0]=-92;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=x;c[va+(m*20|0)+8>>2]=q;c[va+(m*20|0)+12>>2]=l;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else Di(H,164,x,q,l)|0;l=c[D>>2]|0;if((l|0)<=0)break;b[(c[t>>2]|0)+((l+-1|0)*20|0)+2>>1]=1}while(0);q=q+1|0}while((q|0)<(b[ta>>1]|0))}do if(!(c[ha>>2]&32)){l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=-128;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=z;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,128,x,z,0)|0;p=u+2|0;if(!S){l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=-128;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=p;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0;break}else{Di(H,128,x,p,0)|0;break}}if((a[S>>0]|0)==-88){o=c[ma>>2]|0;l=c[S+28>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[o+104>>2]|0;a[va+(n*20|0)>>0]=78;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=l;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(o,78,l,p,0)|0;break}}o=Jj(f,S,p)|0;if((o|0)==(p|0))break;l=c[ma>>2]|0;if(!l)break;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[l+104>>2]|0;a[va+(n*20|0)>>0]=79;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=o;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(l,79,o,p,0)|0;break}}else{l=ba;while(1){l=c[l>>2]|0;va=l+55|0;if(((d[va>>0]|d[va+1>>0]<<8)&3)==2)break;else l=l+20|0}l=b[c[l+4>>2]>>1]|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[H+104>>2]|0;a[va+(m*20|0)>>0]=-92;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=x;c[va+(m*20|0)+8>>2]=l;c[va+(m*20|0)+12>>2]=z;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else Di(H,164,x,l,z)|0;n=u+3+l|0;l=u+2|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[H+104>>2]|0;a[va+(m*20|0)>>0]=79;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=n;c[va+(m*20|0)+8>>2]=l;c[va+(m*20|0)+12>>2]=0;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0;break}else{Di(H,79,n,l,0)|0;break}}while(0);s=(a[B+49>>0]|0)==0;do if(!s){l=c[H>>2]|0;if(!(a[l+81>>0]|0)){va=c[H+104>>2]|0;ta=va+(r*20|0)+1|0;ua=va+(r*20|0)+16|0;kg(l,a[ta>>0]|0,c[ua>>2]|0);a[ta>>0]=0;c[ua>>2]=0;a[va+(r*20|0)>>0]=-86}l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=117;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=0;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0;break}else{Di(H,117,x,0,0)|0;break}}else{l=c[qa>>2]|0;a[((l|0)==0?f:l)+20>>0]=1;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=92;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=z;c[va+(l*20|0)+8>>2]=A;c[va+(l*20|0)+12>>2]=v;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,92,z,A,v)|0;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=121;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=w;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,121,F,w,0)|0;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=122;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=v;c[va+(l*20|0)+12>>2]=w;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,122,F,v,w)|0;sl(B);l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=36;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=0;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else l=Di(H,36,F,0,0)|0;if(y<<16>>16<=-2){r=l;break}n=H+104|0;m=0;do{o=m+z|0;p=c[D>>2]|0;if((c[E>>2]|0)>(p|0)){c[D>>2]=p+1;va=c[n>>2]|0;a[va+(p*20|0)>>0]=90;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=F;c[va+(p*20|0)+8>>2]=m;c[va+(p*20|0)+12>>2]=o;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0}else Di(H,90,F,m,o)|0;m=m+1|0}while((m|0)<(A|0));r=l}while(0);q=c[qa>>2]|0;q=(q|0)==0?f:q;p=q+204|0;o=c[p>>2]|0;n=q+252|0;A:do if((o|0)>0){l=c[n>>2]|0;m=0;do{if((c[l+(m<<2)>>2]|0)==(ya|0))break A;m=m+1|0}while((m|0)<(o|0));m=n;xa=387}else{m=n;l=c[n>>2]|0;xa=387}while(0);B:do if((xa|0)==387){do if(!(mb()|0)){xa=(o<<2)+4|0;l=sb(l,xa,((xa|0)<0)<<31>>31)|0;if(!l)break;c[m>>2]=l;xa=c[p>>2]|0;c[p>>2]=xa+1;c[l+(xa<<2)>>2]=ya;break B}while(0);l=c[q>>2]|0;m=l+81|0;if(a[m>>0]|0)break;if(a[l+82>>0]|0)break;a[m>>0]=1;if((c[l+180>>2]|0)>0)c[l+264>>2]=1;ya=l+272|0;c[ya>>2]=(c[ya>>2]|0)+1;l=c[l+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;ya=c[H+104>>2]|0;a[ya+(l*20|0)>>0]=10;b[ya+(l*20|0)+2>>1]=0;c[ya+(l*20|0)+4>>2]=0;c[ya+(l*20|0)+8>>2]=A;c[ya+(l*20|0)+12>>2]=z;c[ya+(l*20|0)+16>>2]=0;a[ya+(l*20|0)+1>>0]=0}else l=Di(H,10,0,A,z)|0;do if(!(a[(c[H>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[D>>2]|0)+-1|0;m=c[H+104>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(H,m+(l*20|0)|0,C,-12);break}if(!C)break;c[m+(l*20|0)+16>>2]=C;a[n>>0]=-12;ya=C+12|0;c[ya>>2]=(c[ya>>2]|0)+1}while(0);m=c[D>>2]|0;if((m|0)>0)b[(c[H+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=(j|0)==11?2:j&65535;j=c[qa>>2]|0;a[((j|0)==0?f:j)+21>>0]=1;if(!s){sl(B);break}l=r+1|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[H+104>>2]|0;a[f+(m*20|0)>>0]=5;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=F;c[f+(m*20|0)+8>>2]=l;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(H,5,F,l,0)|0;m=c[D>>2]|0;if(!(a[(c[H>>2]|0)+81>>0]|0))l=(c[H+104>>2]|0)+(((r|0)<0?m+-1|0:r)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[H+104>>2]|0;a[f+(m*20|0)>>0]=117;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=F;c[f+(m*20|0)+8>>2]=0;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0;break}else{Di(H,117,F,0,0)|0;break}}H=f+56|0;Z=c[H>>2]|0;I=Z+-1|0;c[H>>2]=I;do if(!(0==0?(c[za+32>>2]&128|0)==0:0)){if(c[f+120>>2]|0){Y=0;break}if(!((k|0)==0&(a[ka>>0]|0)==0)){Y=0;break}r=f+44|0;q=(c[r>>2]|0)+1|0;c[r>>2]=q;r=la+108|0;t=c[r>>2]|0;if((c[la+112>>2]|0)>(t|0)){c[r>>2]=t+1;Y=c[la+104>>2]|0;a[Y+(t*20|0)>>0]=70;b[Y+(t*20|0)+2>>1]=0;c[Y+(t*20|0)+4>>2]=0;c[Y+(t*20|0)+8>>2]=q;c[Y+(t*20|0)+12>>2]=0;c[Y+(t*20|0)+16>>2]=0;a[Y+(t*20|0)+1>>0]=0;Y=q;break}else{Di(la,70,0,q,0)|0;Y=q;break}}else Y=0;while(0);C:do if(!(c[ha>>2]&32)){q=la+108|0;r=c[q>>2]|0;if((c[la+112>>2]|0)>(r|0)){c[q>>2]=r+1;E=c[la+104>>2]|0;a[E+(r*20|0)>>0]=73;b[E+(r*20|0)+2>>1]=0;c[E+(r*20|0)+4>>2]=0;c[E+(r*20|0)+8>>2]=F;c[E+(r*20|0)+12>>2]=aa;c[E+(r*20|0)+16>>2]=0;a[E+(r*20|0)+1>>0]=0;E=0;C=0;D=0;x=0;X=0;break}else{Di(la,73,0,F,aa)|0;E=0;C=0;D=0;x=0;X=0;break}}else{y=b[n+50>>1]|0;fa=f+44|0;r=c[fa>>2]|0;z=r+1|0;w=y<<16>>16;r=r+w|0;x=r+1|0;c[fa>>2]=x;if(k|0){E=x;C=y;D=z;x=0;X=0;break}A=c[_>>2]|0;c[_>>2]=A+1;t=la+108|0;q=c[t>>2]|0;u=la+112|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;fa=c[la+104>>2]|0;a[fa+(q*20|0)>>0]=73;b[fa+(q*20|0)+2>>1]=0;c[fa+(q*20|0)+4>>2]=0;c[fa+(q*20|0)+8>>2]=z;c[fa+(q*20|0)+12>>2]=r;c[fa+(q*20|0)+16>>2]=0;a[fa+(q*20|0)+1>>0]=0}else Di(la,73,0,z,r)|0;q=c[t>>2]|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;fa=c[la+104>>2]|0;a[fa+(q*20|0)>>0]=113;b[fa+(q*20|0)+2>>1]=0;c[fa+(q*20|0)+4>>2]=A;c[fa+(q*20|0)+8>>2]=w;c[fa+(q*20|0)+12>>2]=0;c[fa+(q*20|0)+16>>2]=0;a[fa+(q*20|0)+1>>0]=0}else q=Di(la,113,A,w,0)|0;r=c[ma>>2]|0;u=Ij(f,n)|0;if(!u){E=x;C=y;D=z;x=q;X=A;break}t=c[r>>2]|0;if(!(a[t+81>>0]|0)){C=c[r+104>>2]|0;E=(c[r+108>>2]|0)+-1|0;a[C+(E*20|0)+1>>0]=-9;c[C+(E*20|0)+16>>2]=u;E=x;C=y;D=z;x=q;X=A;break}if(c[t+480>>2]|0){E=x;C=y;D=z;x=q;X=A;break}fa=(c[u>>2]|0)+-1|0;c[u>>2]=fa;if(fa|0){E=x;C=y;D=z;x=q;X=A;break}r=c[u+12>>2]|0;do if(r|0){if(c[r+480>>2]|0){Xd(r,u);E=x;C=y;D=z;x=q;X=A;break C}t=u;if((c[r+304>>2]|0)>>>0>t>>>0)break;if((c[r+308>>2]|0)>>>0<=t>>>0)break;E=r+300|0;c[u>>2]=c[E>>2];c[E>>2]=u;E=x;C=y;D=z;x=q;X=A;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);E=x;C=y;D=z;x=q;X=A;break}else{E=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);E=x;C=y;D=z;x=q;X=A;break}}while(0);do if($){Tj(f,i,I,16);W=0;V=1;u=0;w=0}else{q=ql(f,g,i,0,0,(c[va>>2]|0)!=0|(ja<<24>>24!=0|(T|(J|(a[ka>>0]|0)!=0)))?4100:4108,s)|0;if(!q)break x;w=q+24|0;u=c[w>>2]|0;w=c[w+4>>2]|0;r=a[q+49>>0]|0;t=r&255;if(r<<24>>24==1){W=q;V=1;break}fa=c[qa>>2]|0;a[((fa|0)==0?f:fa)+20>>0]=1;if(r<<24>>24!=2){W=q;V=t;break}if((w|0)<0|(o|0)==(w|0)){W=q;V=2;break}W=q;V=(a[ca+(w-ga)>>0]|0)==0?t:0}while(0);do if(!(c[ha>>2]&32)){r=la+108|0;q=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=-128;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=o;c[ha+(q*20|0)+8>>2]=aa;c[ha+(q*20|0)+12>>2]=0;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else Di(la,128,o,aa,0)|0;if(V|0){M=0;break}q=c[r>>2]|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;M=c[la+104>>2]|0;a[M+(q*20|0)>>0]=-108;b[M+(q*20|0)+2>>1]=0;c[M+(q*20|0)+4>>2]=F;c[M+(q*20|0)+8>>2]=aa;c[M+(q*20|0)+12>>2]=0;c[M+(q*20|0)+16>>2]=0;a[M+(q*20|0)+1>>0]=0;M=0;break}else{Di(la,148,F,aa,0)|0;M=0;break}}else{B=C<<16>>16;if(C<<16>>16>0){r=n+4|0;q=0;do{Vj(la,ya,o,b[(c[r>>2]|0)+(q<<1)>>1]|0,q+D|0);q=q+1|0}while((q|0)!=(B|0))}if(V|0){if(!x){M=B;E=D;break}q=c[la>>2]|0;if(a[q+81>>0]|0){M=B;E=D;break}M=c[la+104>>2]|0;ha=M+(x*20|0)+1|0;E=M+(x*20|0)+16|0;kg(q,a[ha>>0]|0,c[E>>2]|0);a[ha>>0]=0;c[E>>2]=0;a[M+(x*20|0)>>0]=-86;M=B;E=D;break}y=gl(za,n)|0;z=la+108|0;q=c[z>>2]|0;A=la+112|0;if((c[A>>2]|0)>(q|0)){c[z>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=92;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=D;c[ha+(q*20|0)+8>>2]=B;c[ha+(q*20|0)+12>>2]=E;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else q=Di(la,92,D,B,E)|0;r=c[la>>2]|0;D:do if(!(a[r+81>>0]|0)){if((q|0)<0)q=(c[z>>2]|0)+-1|0;r=c[la+104>>2]|0;t=r+(q*20|0)|0;do if(C<<16>>16<=-1){x=r+(q*20|0)+1|0;if(a[x>>0]|0)break;if(C<<16>>16==-3){c[r+(q*20|0)+16>>2]=y;a[x>>0]=-3;break D}if(!y)break D;c[r+(q*20|0)+16>>2]=y;a[x>>0]=C;if(C<<16>>16!=-12)break D;ha=y+12|0;c[ha>>2]=(c[ha>>2]|0)+1;break D}while(0);Ei(la,t,y,B)}else{if(C<<16>>16==-12)break;kg(r,B,y)}while(0);q=c[z>>2]|0;if((c[A>>2]|0)>(q|0)){c[z>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=-124;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=X;c[ha+(q*20|0)+8>>2]=E;c[ha+(q*20|0)+12>>2]=D;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else q=Di(la,132,X,E,D)|0;if(a[(c[la>>2]|0)+81>>0]|0){M=0;break}M=c[la+104>>2]|0;a[M+(q*20|0)+1>>0]=-3;c[M+(q*20|0)+16>>2]=B;M=0}while(0);U=(k|0)==0;E:do if(U){q=(V|0)==2;if(!q)sl(W);F:do if(sa)xa=511;else{do if(V|0){if((u|0)>-1)a[ca+(u-ga)>>0]=0;if((w|0)>-1)a[ca+(w-ga)>>0]=0;if(!q)break;if(p>>>0<=(w>>>31^1)>>>0)break;r=la+108|0;p=c[r>>2]|0;q=la+112|0;if((c[q>>2]|0)>(p|0)){c[r>>2]=p+1;D=c[la+104>>2]|0;a[D+(p*20|0)>>0]=17;D=D+(p*20|0)+1|0;F=D+19|0;do{a[D>>0]=0;D=D+1|0}while((D|0)<(F|0))}else p=Di(la,17,0,0,0)|0;Hm(f,ya,109,0,ga,ca,0,0)|0;if(p|0){t=c[r>>2]|0;if(!(a[(c[la>>2]|0)+81>>0]|0))p=(c[la+104>>2]|0)+(((p|0)<0?t+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=t}if((w|0)==(o|0)|(u|0)==(o|0)){xa=521;break F}else{xa=515;break F}}while(0);Hm(f,ya,109,0,ga,ca,0,0)|0;xa=511}while(0);do if((xa|0)==511){if(V|0){if((w|0)==(o|0)|(sa|(u|0)==(o|0))){xa=520;break}r=la+108|0;q=la+112|0;xa=515;break}if(!n){r=la+108|0;q=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;k=c[la+104>>2]|0;a[k+(q*20|0)>>0]=41;b[k+(q*20|0)+2>>1]=0;c[k+(q*20|0)+4>>2]=F;c[k+(q*20|0)+8>>2]=I;c[k+(q*20|0)+12>>2]=aa;c[k+(q*20|0)+16>>2]=0;a[k+(q*20|0)+1>>0]=0}else q=Di(la,41,F,I,aa)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;R=c[la+104>>2]|0;a[R+(p*20|0)>>0]=31;b[R+(p*20|0)+2>>1]=0;c[R+(p*20|0)+4>>2]=o;c[R+(p*20|0)+8>>2]=q;c[R+(p*20|0)+12>>2]=aa;c[R+(p*20|0)+16>>2]=0;a[R+(p*20|0)+1>>0]=0;R=0;P=q;break E}else{Di(la,31,o,q,aa)|0;R=0;P=q;break E}}u=(c[H>>2]|0)+-1|0;c[H>>2]=u;r=la+108|0;p=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;k=c[la+104>>2]|0;a[k+(p*20|0)>>0]=36;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=X;c[k+(p*20|0)+8>>2]=I;c[k+(p*20|0)+12>>2]=0;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else Di(la,36,X,I,0)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;q=c[la+104>>2]|0;a[q+(p*20|0)>>0]=127;b[q+(p*20|0)+2>>1]=0;c[q+(p*20|0)+4>>2]=X;c[q+(p*20|0)+8>>2]=E;c[q+(p*20|0)+12>>2]=0;c[q+(p*20|0)+16>>2]=0;a[q+(p*20|0)+1>>0]=0;q=p}else q=Di(la,127,X,E,0)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;k=c[la+104>>2]|0;a[k+(p*20|0)>>0]=28;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=o;c[k+(p*20|0)+8>>2]=u;c[k+(p*20|0)+12>>2]=E;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else p=Di(la,28,o,u,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){R=q;P=u;break E}R=c[la+104>>2]|0;a[R+(p*20|0)+1>>0]=-3;c[R+(p*20|0)+16>>2]=0;R=q;P=u;break E}while(0);do if((xa|0)==515){p=c[r>>2]|0;if((c[q>>2]|0)>(p|0)){c[r>>2]=p+1;xa=c[la+104>>2]|0;a[xa+(p*20|0)>>0]=28;b[xa+(p*20|0)+2>>1]=0;c[xa+(p*20|0)+4>>2]=o;c[xa+(p*20|0)+8>>2]=I;c[xa+(p*20|0)+12>>2]=E;c[xa+(p*20|0)+16>>2]=0;a[xa+(p*20|0)+1>>0]=0}else p=Di(la,28,o,I,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){xa=520;break}xa=c[la+104>>2]|0;a[xa+(p*20|0)+1>>0]=-3;c[xa+(p*20|0)+16>>2]=M;xa=520}while(0);if((xa|0)==520)if((V|0)==1)t=I;else xa=521;if((xa|0)==521){t=(c[H>>2]|0)+-1|0;c[H>>2]=t}p=(n|0)==0?aa:E;q=la+108|0;r=c[q>>2]|0;if((c[la+112>>2]|0)>(r|0)){c[q>>2]=r+1;R=c[la+104>>2]|0;a[R+(r*20|0)>>0]=50;b[R+(r*20|0)+2>>1]=0;c[R+(r*20|0)+4>>2]=p;c[R+(r*20|0)+8>>2]=I;c[R+(r*20|0)+12>>2]=0;c[R+(r*20|0)+16>>2]=0;a[R+(r*20|0)+1>>0]=0;R=0;P=t;break}else{Di(la,50,p,I,0)|0;R=0;P=t;break}}else{R=0;P=I}while(0);I=N<<24>>24==0;do if(!I){do if(S){if((a[S>>0]|0)!=-88){t=Jj(f,S,Q)|0;xa=551;break}t=c[ma>>2]|0;p=c[S+28>>2]|0;q=t+108|0;r=c[q>>2]|0;if((c[t+112>>2]|0)>(r|0)){c[q>>2]=r+1;k=c[t+104>>2]|0;a[k+(r*20|0)>>0]=78;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=p;c[k+(r*20|0)+8>>2]=Q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(t,78,p,Q,0)|0;break}}else{t=Jj(f,0,Q)|0;xa=551}while(0);do if((xa|0)==551){if((t|0)==(Q|0))break;p=c[ma>>2]|0;if(!p)break;q=p+108|0;r=c[q>>2]|0;if((c[p+112>>2]|0)>(r|0)){c[q>>2]=r+1;k=c[p+104>>2]|0;a[k+(r*20|0)>>0]=79;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=t;c[k+(r*20|0)+8>>2]=Q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(p,79,t,Q,0)|0;break}}while(0);p=la+108|0;q=c[p>>2]|0;if((c[la+112>>2]|0)>(q|0)){c[p>>2]=q+1;k=c[la+104>>2]|0;a[k+(q*20|0)>>0]=15;b[k+(q*20|0)+2>>1]=0;c[k+(q*20|0)+4>>2]=Q;c[k+(q*20|0)+8>>2]=0;c[k+(q*20|0)+12>>2]=0;c[k+(q*20|0)+16>>2]=0;a[k+(q*20|0)+1>>0]=0;break}else{Di(la,15,Q,0,0)|0;break}}while(0);G:do if(J|(O<<24>>24!=0|T)){if(T)D=Km(f,ya)|0;else D=0;H=(h|0)==0;J=H?121:122;F=(l|0)==0;H:do if(F)p=0;else{if(H){p=0;r=l;while(1){do if((J|0)==(d[r+8>>0]|0)){if(!(a[r+9>>0]&3))break;q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;I:do if(!q)xa=574;else while(1){if((c[q>>2]|0)==(r|0)?(c[q+12>>2]|0)==(j|0):0)break I;q=c[q+4>>2]|0;if(!q){xa=574;break}}while(0);if((xa|0)==574){xa=0;q=Nm(f,r,ya,j)|0;if(!q)break}p=c[q+16>>2]|p}while(0);r=c[r+32>>2]|0;if(!r)break H}}p=0;C=l;do{J:do if((J|0)==(d[C+8>>0]|0)){if(!(a[C+9>>0]&3))break;q=c[C+16>>2]|0;K:do if(q|0){B=c[h>>2]|0;if((B|0)<=0)break J;A=c[q+4>>2]|0;if((A|0)<=0)break J;x=c[q>>2]|0;u=0;while(1){y=c[h+4+(u*20|0)+4>>2]|0;z=d[208+(d[y>>0]|0)>>0]|0;w=0;do{r=c[x+(w<<3)>>2]|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-z|0;if(!(k<<24>>24==0|(q|0)!=0)){t=y;do{r=r+1|0;t=t+1|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(q|0)!=0))}if(!q)break K;w=w+1|0}while((w|0)<(A|0));u=u+1|0;if((u|0)>=(B|0))break J}}while(0);q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;L:do if(!q)xa=595;else while(1){if((c[q>>2]|0)==(C|0)?(c[q+12>>2]|0)==(j|0):0)break L;q=c[q+4>>2]|0;if(!q){xa=595;break}}while(0);if((xa|0)==595){xa=0;q=Nm(f,C,ya,j)|0;if(!q)break}p=c[q+16>>2]|p}while(0);C=c[C+32>>2]|0}while((C|0)!=0)}while(0);q=p|D;M:do if((b[ta>>1]|0)>0){r=ya+4|0;t=la+108|0;u=la+112|0;w=la+104|0;if((q|0)==-1){p=0;while(1){Vj(la,ya,o,p,p+K|0);p=p+1|0;if((p|0)>=(b[ta>>1]|0))break M}}p=0;do{if(p>>>0<32?(1<<p&q|0)!=0:0)xa=606;else xa=605;do if((xa|0)==605){xa=0;if(a[(c[r>>2]|0)+(p<<4)+15>>0]&1){xa=606;break}x=p+K|0;y=c[t>>2]|0;if((c[u>>2]|0)>(y|0)){c[t>>2]=y+1;k=c[w>>2]|0;a[k+(y*20|0)>>0]=73;b[k+(y*20|0)+2>>1]=0;c[k+(y*20|0)+4>>2]=0;c[k+(y*20|0)+8>>2]=x;c[k+(y*20|0)+12>>2]=0;c[k+(y*20|0)+16>>2]=0;a[k+(y*20|0)+1>>0]=0;break}else{Di(la,73,0,x,0)|0;break}}while(0);if((xa|0)==606){xa=0;Vj(la,ya,o,p,p+K|0)}p=p+1|0}while((p|0)<(b[ta>>1]|0))}while(0);do if((n|0)==0&I){n=la+108|0;p=c[n>>2]|0;if((c[la+112>>2]|0)>(p|0)){c[n>>2]=p+1;n=c[la+104>>2]|0;a[n+(p*20|0)>>0]=78;b[n+(p*20|0)+2>>1]=0;c[n+(p*20|0)+4>>2]=aa;c[n+(p*20|0)+8>>2]=Q;c[n+(p*20|0)+12>>2]=0;c[n+(p*20|0)+16>>2]=0;a[n+(p*20|0)+1>>0]=0;n=0;break}else{Di(la,78,aa,Q,0)|0;n=0;break}}while(0);if(F){p=0;I=1;break}if(H){p=0;r=l;while(1){do if((J|0)==(d[r+8>>0]|0)){if(!(a[r+9>>0]&1))break;q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;N:do if(!q)xa=626;else while(1){if((c[q>>2]|0)==(r|0)?(c[q+12>>2]|0)==(j|0):0)break N;q=c[q+4>>2]|0;if(!q){xa=626;break}}while(0);if((xa|0)==626){xa=0;q=Nm(f,r,ya,j)|0;if(!q)break}p=c[q+20>>2]|p}while(0);r=c[r+32>>2]|0;if(!r){H=1;I=0;break G}}}p=0;C=l;while(1){O:do if((J|0)==(d[C+8>>0]|0)){if(!(a[C+9>>0]&1))break;q=c[C+16>>2]|0;P:do if(q|0){B=c[h>>2]|0;if((B|0)<=0)break O;A=c[q+4>>2]|0;if((A|0)<=0)break O;x=c[q>>2]|0;u=0;while(1){y=c[h+4+(u*20|0)+4>>2]|0;z=d[208+(d[y>>0]|0)>>0]|0;w=0;do{r=c[x+(w<<3)>>2]|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-z|0;if(!(k<<24>>24==0|(q|0)!=0)){t=y;do{r=r+1|0;t=t+1|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(q|0)!=0))}if(!q)break P;w=w+1|0}while((w|0)<(A|0));u=u+1|0;if((u|0)>=(B|0))break O}}while(0);q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;Q:do if(!q)xa=647;else while(1){if((c[q>>2]|0)==(C|0)?(c[q+12>>2]|0)==(j|0):0)break Q;q=c[q+4>>2]|0;if(!q){xa=647;break}}while(0);if((xa|0)==647){xa=0;q=Nm(f,C,ya,j)|0;if(!q)break}p=c[q+20>>2]|p}while(0);C=c[C+32>>2]|0;if(!C){H=0;I=0;break}}}else{p=0;H=(h|0)==0;I=1}while(0);if((b[ta>>1]|0)>0){z=ya+40|0;A=la+108|0;B=la+112|0;C=la+104|0;m=m&1;y=(m|0)==0;x=0;do{R:do if((x|0)==(b[z>>1]|0)){q=x+v|0;r=c[A>>2]|0;if((c[B>>2]|0)>(r|0)){c[A>>2]=r+1;k=c[C>>2]|0;a[k+(r*20|0)>>0]=73;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=0;c[k+(r*20|0)+8>>2]=q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(la,73,0,q,0)|0;break}}else{q=c[wa+(x<<2)>>2]|0;if((q|0)<=-1){do if(!(y|x>>>0>31)){if(1<<x&p|0)break;q=x+v|0;r=c[A>>2]|0;if((c[B>>2]|0)>(r|0)){c[A>>2]=r+1;k=c[C>>2]|0;a[k+(r*20|0)>>0]=73;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=0;c[k+(r*20|0)+8>>2]=q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break R}else{Di(la,73,0,q,0)|0;break R}}while(0);Vj(la,ya,o,x,x+v|0);break}q=c[h+4+(q*20|0)>>2]|0;w=x+v|0;do if(q){if((a[q>>0]|0)!=-88){u=Jj(f,q,w)|0;break}u=c[ma>>2]|0;q=c[q+28>>2]|0;r=u+108|0;t=c[r>>2]|0;if((c[u+112>>2]|0)>(t|0)){c[r>>2]=t+1;k=c[u+104>>2]|0;a[k+(t*20|0)>>0]=78;b[k+(t*20|0)+2>>1]=0;c[k+(t*20|0)+4>>2]=q;c[k+(t*20|0)+8>>2]=w;c[k+(t*20|0)+12>>2]=0;c[k+(t*20|0)+16>>2]=0;a[k+(t*20|0)+1>>0]=0;break R}else{Di(u,78,q,w,0)|0;break R}}else u=Jj(f,0,w)|0;while(0);if((u|0)==(w|0))break;q=c[ma>>2]|0;if(!q)break;r=q+108|0;t=c[r>>2]|0;if((c[q+112>>2]|0)>(t|0)){c[r>>2]=t+1;k=c[q+104>>2]|0;a[k+(t*20|0)>>0]=79;b[k+(t*20|0)+2>>1]=0;c[k+(t*20|0)+4>>2]=u;c[k+(t*20|0)+8>>2]=w;c[k+(t*20|0)+12>>2]=0;c[k+(t*20|0)+16>>2]=0;a[k+(t*20|0)+1>>0]=0;break}else{Di(q,79,u,w,0)|0;break}}while(0);x=x+1|0}while((x|0)<(b[ta>>1]|0))}else m=m&1;do if(m|0){zk(la,ya,v);if(!I){B=f+23|0;C=f+44|0;A=l;do{S:do if((a[A+8>>0]|0)==122){if((a[A+9>>0]|0)!=1)break;m=c[A+16>>2]|0;T:do if(!(H|(m|0)==0)){z=c[h>>2]|0;if((z|0)<=0)break S;y=c[m+4>>2]|0;if((y|0)<=0)break S;u=c[m>>2]|0;r=0;while(1){w=c[h+4+(r*20|0)+4>>2]|0;x=d[208+(d[w>>0]|0)>>0]|0;t=0;do{p=c[u+(t<<3)>>2]|0;k=a[p>>0]|0;m=(d[208+(k&255)>>0]|0)-x|0;if(!(k<<24>>24==0|(m|0)!=0)){q=w;do{p=p+1|0;q=q+1|0;k=a[p>>0]|0;m=(d[208+(k&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(m|0)!=0))}if(!m)break T;t=t+1|0}while((t|0)<(y|0));r=r+1|0;if((r|0)>=(z|0))break S}}while(0);m=c[ma>>2]|0;U:do if(!m){q=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[q+76>>1]&8)break;a[B>>0]=1}while(0);V:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))xa=707;else{m=0;break U}else{do if((e[q+276>>1]|0)>=224){p=q+300|0;m=c[p>>2]|0;if(m|0){c[p>>2]=c[m>>2];k=q+284|0;c[k>>2]=(c[k>>2]|0)+1;break V}p=q+296|0;m=c[p>>2]|0;if(!m){m=q+292|0;break}else{c[p>>2]=c[m>>2];k=q+284|0;c[k>>2]=(c[k>>2]|0)+1;break V}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;xa=707}while(0);if((xa|0)==707){xa=0;m=_d(q,224,0)|0}if(!m){m=0;break}D=m+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[m>>2]=q;p=q+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=m;c[m+8>>2]=q;c[m+4>>2]=0;c[p>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ma>>2]=m;Di(m,61,0,1,0)|0}while(0);p=c[qa>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;W:do if(!p)xa=717;else while(1){if((c[p>>2]|0)==(A|0)?(c[p+12>>2]|0)==(j|0):0)break W;p=c[p+4>>2]|0;if(!p){xa=717;break}}while(0);if((xa|0)==717){xa=0;p=Nm(f,A,ya,j)|0;if(!p)break}if(!(c[A>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}q=(c[C>>2]|0)+1|0;c[C>>2]=q;t=c[p+8>>2]|0;u=m+108|0;p=c[u>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[u>>2]=p+1;k=c[m+104>>2]|0;a[k+(p*20|0)>>0]=45;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=aa;c[k+(p*20|0)+8>>2]=P;c[k+(p*20|0)+12>>2]=q;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else p=Di(m,45,aa,P,q)|0;do if(!(a[(c[m>>2]|0)+81>>0]|0)){if((p|0)<0)p=(c[u>>2]|0)+-1|0;q=c[m+104>>2]|0;r=q+(p*20|0)+1|0;if(a[r>>0]|0){Ei(m,q+(p*20|0)|0,t,-4);break}if(!t)break;c[q+(p*20|0)+16>>2]=t;a[r>>0]=-4}while(0);p=c[u>>2]|0;if((p|0)<=0)break;b[(c[m+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=w}while(0);A=c[A+32>>2]|0}while((A|0)!=0)}p=la+108|0;m=c[p>>2]|0;q=(c[la+112>>2]|0)>(m|0);do if(!n)if(q){c[p>>2]=m+1;k=c[la+104>>2]|0;a[k+(m*20|0)>>0]=31;b[k+(m*20|0)+2>>1]=0;c[k+(m*20|0)+4>>2]=o;c[k+(m*20|0)+8>>2]=P;c[k+(m*20|0)+12>>2]=aa;c[k+(m*20|0)+16>>2]=0;a[k+(m*20|0)+1>>0]=0;break}else{Di(la,31,o,P,aa)|0;break}else{if(q){c[p>>2]=m+1;k=c[la+104>>2]|0;a[k+(m*20|0)>>0]=28;b[k+(m*20|0)+2>>1]=0;c[k+(m*20|0)+4>>2]=o;c[k+(m*20|0)+8>>2]=P;c[k+(m*20|0)+12>>2]=E;c[k+(m*20|0)+16>>2]=0;a[k+(m*20|0)+1>>0]=0}else m=Di(la,28,o,P,E)|0;if(a[(c[la>>2]|0)+81>>0]|0)break;k=c[la+104>>2]|0;a[k+(m*20|0)+1>>0]=-3;c[k+(m*20|0)+16>>2]=M}while(0);m=b[ta>>1]|0;if(m<<16>>16<=0)break;q=ya+40|0;p=0;do{do if((c[wa+(p<<2)>>2]|0)<0){if((p|0)==(b[q>>1]|0))break;Vj(la,ya,o,p,p+v|0);m=b[ta>>1]|0}while(0);p=p+1|0}while((p|0)<(m<<16>>16|0))}while(0);do if(!sa){Tm(f,ya,ra,o,s,Q,aa,ja,j&255,P,va,wa,0);if(T)Lm(f,ya,aa,0,wa,pa);r=(pa|0)==0;t=(c[va>>2]|pa|0)==0;do if(t)q=0;else{p=la+108|0;m=c[p>>2]|0;q=(c[la+112>>2]|0)>(m|0);if(!n)if(q){c[p>>2]=m+1;q=c[la+104>>2]|0;a[q+(m*20|0)>>0]=31;b[q+(m*20|0)+2>>1]=0;c[q+(m*20|0)+4>>2]=o;c[q+(m*20|0)+8>>2]=0;c[q+(m*20|0)+12>>2]=aa;c[q+(m*20|0)+16>>2]=0;a[q+(m*20|0)+1>>0]=0;q=m;break}else{q=Di(la,31,o,0,aa)|0;break}if(q){c[p>>2]=m+1;va=c[la+104>>2]|0;a[va+(m*20|0)>>0]=28;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=o;c[va+(m*20|0)+8>>2]=0;c[va+(m*20|0)+12>>2]=E;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else m=Di(la,28,o,0,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){q=m;break}q=c[la+104>>2]|0;a[q+(m*20|0)+1>>0]=-3;c[q+(m*20|0)+16>>2]=M;q=m}while(0);Mm(f,ya,o,s,ra,-1);do if(!(r&(ia|0)<2)){m=la+108|0;p=c[m>>2]|0;if((c[la+112>>2]|0)>(p|0)){c[m>>2]=p+1;va=c[la+104>>2]|0;a[va+(p*20|0)>>0]=123;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=o;c[va+(p*20|0)+8>>2]=0;c[va+(p*20|0)+12>>2]=0;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0;break}else{Di(la,123,o,0,0)|0;break}}while(0);if(!t){p=c[la+108>>2]|0;if(!(a[(c[la>>2]|0)+81>>0]|0))m=(c[la+104>>2]|0)+(((q|0)<0?p+-1|0:q)*20|0)|0;else m=59308;c[m+8>>2]=p}if(!T){Um(f,ya,o,s,Q,ra,(V|0)==2?6:4,0,0);break}Lm(f,ya,0,Q,wa,pa);Um(f,ya,o,s,Q,ra,(V|0)==2?6:4,0,0);if(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)break;t=c[ya>>2]|0;q=c[ua>>2]|0;r=c[q+68>>2]|0;if(!r){o=q+60|0;m=q+64|0}else{o=a[t>>0]|0;if(!(o<<24>>24))m=0;else{m=0;p=t;do{p=p+1|0;m=G(m+(d[208+(o&255)>>0]|0)|0,-1640531535)|0;o=a[p>>0]|0}while(o<<24>>24!=0)}m=(m>>>0)%((c[q+56>>2]|0)>>>0)|0;o=r+(m<<3)|0;m=r+(m<<3)+4|0}o=c[o>>2]|0;X:do if(!o)m=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){m=c[m>>2]|0;o=o+-1|0;q=c[m+12>>2]|0;va=a[q>>0]|0;p=(d[208+(va&255)>>0]|0)-s|0;if(!(va<<24>>24==0|(p|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;va=a[q>>0]|0;p=(d[208+(va&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(va<<24>>24==0|(p|0)!=0))}if(!p)break X;if(!o){m=59292;break}}}while(0);m=c[m+8>>2]|0;if(!m)break;v=f+23|0;w=f+44|0;do{do if(Jm(ya,m,wa,pa)|0){r=Rm(f,ya,m,h)|0;if(!r)break;o=c[ma>>2]|0;Y:do if(!o){q=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[q+76>>1]&8)break;a[v>>0]=1}while(0);Z:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))xa=802;else{o=0;break Y}else{do if((e[q+276>>1]|0)>=224){p=q+300|0;o=c[p>>2]|0;if(o|0){c[p>>2]=c[o>>2];va=q+284|0;c[va>>2]=(c[va>>2]|0)+1;break Z}p=q+296|0;o=c[p>>2]|0;if(!o){o=q+292|0;break}else{c[p>>2]=c[o>>2];va=q+284|0;c[va>>2]=(c[va>>2]|0)+1;break Z}}else o=q+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;xa=802}while(0);if((xa|0)==802){xa=0;o=_d(q,224,0)|0}if(!o){o=0;break}D=o+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[o>>2]=q;p=q+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=o;c[o+8>>2]=q;c[o+4>>2]=0;c[p>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[ma>>2]=o;Di(o,61,0,1,0)|0}while(0);p=c[qa>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;_:do if(!p)xa=812;else while(1){if((c[p>>2]|0)==(r|0)?(c[p+12>>2]|0)==2:0)break _;p=c[p+4>>2]|0;if(!p){xa=812;break}}while(0);if((xa|0)==812){xa=0;p=Nm(f,r,ya,2)|0;if(!p)break}if(!(c[r>>2]|0))u=0;else{u=(c[f>>2]|0)+32|0;u=bw(c[u>>2]|0,c[u+4>>2]|0,13)|0;L()|0;u=u&1^1}q=(c[w>>2]|0)+1|0;c[w>>2]=q;s=c[p+8>>2]|0;t=o+108|0;p=c[t>>2]|0;if((c[o+112>>2]|0)>(p|0)){c[t>>2]=p+1;va=c[o+104>>2]|0;a[va+(p*20|0)>>0]=45;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=aa;c[va+(p*20|0)+8>>2]=0;c[va+(p*20|0)+12>>2]=q;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0}else p=Di(o,45,aa,0,q)|0;do if(!(a[(c[o>>2]|0)+81>>0]|0)){if((p|0)<0)p=(c[t>>2]|0)+-1|0;q=c[o+104>>2]|0;r=q+(p*20|0)+1|0;if(a[r>>0]|0){Ei(o,q+(p*20|0)|0,s,-4);break}if(!s)break;c[q+(p*20|0)+16>>2]=s;a[r>>0]=-4}while(0);p=c[t>>2]|0;if((p|0)<=0)break;b[(c[o+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=u}while(0);m=c[m+12>>2]|0}while((m|0)!=0)}while(0);z=(Y|0)!=0;do if(z){m=la+108|0;o=c[m>>2]|0;if((c[la+112>>2]|0)>(o|0)){c[m>>2]=o+1;va=c[la+104>>2]|0;a[va+(o*20|0)>>0]=83;b[va+(o*20|0)+2>>1]=0;c[va+(o*20|0)+4>>2]=Y;c[va+(o*20|0)+8>>2]=1;c[va+(o*20|0)+12>>2]=0;c[va+(o*20|0)+16>>2]=0;a[va+(o*20|0)+1>>0]=0;break}else{Di(la,83,Y,1,0)|0;break}}while(0);if(!I){x=f+23|0;y=f+44|0;do{$:do if((a[l+8>>0]|0)==122){if((a[l+9>>0]|0)!=2)break;m=c[l+16>>2]|0;aa:do if(!(H|(m|0)==0)){w=c[h>>2]|0;if((w|0)<=0)break $;v=c[m+4>>2]|0;if((v|0)<=0)break $;s=c[m>>2]|0;q=0;while(1){t=c[h+4+(q*20|0)+4>>2]|0;u=d[208+(d[t>>0]|0)>>0]|0;r=0;do{o=c[s+(r<<3)>>2]|0;va=a[o>>0]|0;m=(d[208+(va&255)>>0]|0)-u|0;if(!(va<<24>>24==0|(m|0)!=0)){p=t;do{o=o+1|0;p=p+1|0;va=a[o>>0]|0;m=(d[208+(va&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(va<<24>>24==0|(m|0)!=0))}if(!m)break aa;r=r+1|0}while((r|0)<(v|0));q=q+1|0;if((q|0)>=(w|0))break $}}while(0);m=c[ma>>2]|0;ba:do if(!m){p=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[p+76>>1]&8)break;a[x>>0]=1}while(0);ca:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))xa=862;else{m=0;break ba}else{do if((e[p+276>>1]|0)>=224){o=p+300|0;m=c[o>>2]|0;if(m|0){c[o>>2]=c[m>>2];va=p+284|0;c[va>>2]=(c[va>>2]|0)+1;break ca}o=p+296|0;m=c[o>>2]|0;if(!m){m=p+292|0;break}else{c[o>>2]=c[m>>2];va=p+284|0;c[va>>2]=(c[va>>2]|0)+1;break ca}}else m=p+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;xa=862}while(0);if((xa|0)==862){xa=0;m=_d(p,224,0)|0}if(!m){m=0;break}D=m+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[m>>2]=p;o=p+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=m;c[m+8>>2]=p;c[m+4>>2]=0;c[o>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ma>>2]=m;Di(m,61,0,1,0)|0}while(0);o=c[qa>>2]|0;o=c[((o|0)==0?f:o)+260>>2]|0;da:do if(!o)xa=872;else while(1){if((c[o>>2]|0)==(l|0)?(c[o+12>>2]|0)==(j|0):0)break da;o=c[o+4>>2]|0;if(!o){xa=872;break}}while(0);if((xa|0)==872){xa=0;o=Nm(f,l,ya,j)|0;if(!o)break}if(!(c[l>>2]|0))t=0;else{t=(c[f>>2]|0)+32|0;t=bw(c[t>>2]|0,c[t+4>>2]|0,13)|0;L()|0;t=t&1^1}p=(c[y>>2]|0)+1|0;c[y>>2]=p;r=c[o+8>>2]|0;s=m+108|0;o=c[s>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[s>>2]=o+1;va=c[m+104>>2]|0;a[va+(o*20|0)>>0]=45;b[va+(o*20|0)+2>>1]=0;c[va+(o*20|0)+4>>2]=aa;c[va+(o*20|0)+8>>2]=P;c[va+(o*20|0)+12>>2]=p;c[va+(o*20|0)+16>>2]=0;a[va+(o*20|0)+1>>0]=0}else o=Di(m,45,aa,P,p)|0;do if(!(a[(c[m>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[s>>2]|0)+-1|0;p=c[m+104>>2]|0;q=p+(o*20|0)+1|0;if(a[q>>0]|0){Ei(m,p+(o*20|0)|0,r,-4);break}if(!r)break;c[p+(o*20|0)+16>>2]=r;a[q>>0]=-4}while(0);o=c[s>>2]|0;if((o|0)<=0)break;b[(c[m+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=t}while(0);l=c[l+32>>2]|0}while((l|0)!=0)}ea:do switch(V|0){case 1:break;case 2:{m=c[la+12>>2]|0;l=~P;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,la,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[la+108>>2];sl(W);break}default:{if(!n){l=la+108|0;m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[la+104>>2]|0;a[j+(m*20|0)>>0]=11;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=0;c[j+(m*20|0)+8>>2]=P;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break ea}else{Di(la,11,0,P,0)|0;break ea}}m=c[la+12>>2]|0;l=~P;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0){mk(m,la,l);l=la+108|0}else{j=la+108|0;c[(c[m+64>>2]|0)+(l<<2)>>2]=c[j>>2];l=j}m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[la+104>>2]|0;a[j+(m*20|0)>>0]=5;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=X;c[j+(m*20|0)+8>>2]=R;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break ea}else{Di(la,5,X,R,0)|0;break ea}}}while(0);m=c[la+12>>2]|0;l=0-Z|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,la,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[la+108>>2];do if(!(a[ka>>0]|0)){if(!(U&(c[f+120>>2]|0)==0))break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!z)break;l=la+108|0;m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;f=c[la+104>>2]|0;a[f+(m*20|0)>>0]=81;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=Y;c[f+(m*20|0)+8>>2]=1;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(la,81,Y,1,0)|0;Wi(la,1);if(a[(c[la>>2]|0)+81>>0]|0)break;yc(c[la+116>>2]|0,44795,-1,1,0)|0}while(0);if(!oa){xa=918;break}c[oa+240>>2]=na;xa=918}while(0);if((xa|0)==918?za|0:0)xa=919;do if((xa|0)==919){if(c[za+480>>2]|0){Xd(za,wa);break a}l=wa;if((c[za+304>>2]|0)>>>0<=l>>>0){if((c[za+308>>2]|0)>>>0<=l>>>0)break;f=za+300|0;c[wa>>2]=c[f>>2];c[f>>2]=wa;break a}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](wa);break}else{f=Wa[c[29352>>2]&127](wa)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](wa);break}}}}}while(0);qi(za,g);if(h|0)ri(za,h);if(!i){Ra=Aa;return}ni(za,i);Ra=Aa;return}function uj(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+48|0;k=u;r=u+8|0;t=c[e>>2]|0;if(!f)p=0;else p=c[f>>2]|0;s=(g|0)==0;do if(!(s|(h|0)==0)){l=a[h>>0]|0;o=g+4|0;i=c[o>>2]|0;switch(l<<24>>24){case -125:break;case -88:{j=a[h+38>>0]|0;q=6;break}default:{j=l;q=6}}if((q|0)==6){switch(j<<24>>24){case -87:{j=h+20|0;q=9;break}case -125:{j=c[h+20>>2]|0;q=9;break}default:j=1}if((q|0)==9)j=c[c[j>>2]>>2]|0;if((i|0)!=(j|0)){c[k>>2]=i;c[k+4>>2]=j;cd(e,38869,k);n=f;break}}a:do if((i|0)>0){m=e+272|0;n=h+20|0;j=0;i=l;while(1){switch(i<<24>>24){case -125:{i=ej(e,170,0,0)|0;if(!i)i=0;else{b[i+32>>1]=j;c[i+12>>2]=h}break}case -87:{i=c[(c[n>>2]|0)+4+(j*20|0)>>2]|0;if(!i){l=0;i=0;q=19}else q=18;break}default:{i=h;q=18}}if((q|0)==18){l=i;i=dk(c[e>>2]|0,i,0,0)|0;q=19}b:do if((q|0)==19){q=0;k=c[m>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break b}c[k>>2]=i}}while(0);f=nj(c[e>>2]|0,f,i)|0;if(f|0){l=(c[g>>2]|0)+(j<<3)|0;c[f+4+(((c[f>>2]|0)+-1|0)*20|0)+4>>2]=c[l>>2];c[l>>2]=0}j=j+1|0;i=c[o>>2]|0;if((j|0)>=(i|0))break a;i=a[h>>0]|0}}while(0);if((a[t+81>>0]|0)==0?(f|0)!=0&(a[h>>0]|0)==-125:0){n=c[f+4+(p*20|0)>>2]|0;c[n+16>>2]=h;c[n+28>>2]=i;h=0;n=f}else n=f}else n=f;while(0);if((d[e+200>>0]|0)>1?(q=r+8|0,c[q>>2]=0,c[q+4>>2]=0,c[q+8>>2]=0,c[q+12>>2]=0,c[q+16>>2]=0,c[r>>2]=e,c[r+4>>2]=124,h|0):0)_j(r,h)|0;if(h|0)ni(t,h);if(s){Ra=u;return n|0}m=g+4|0;h=c[g>>2]|0;c:do if((c[m>>2]|0)>0){f=t+480|0;j=t+304|0;k=t+308|0;l=t+300|0;if(!t){i=0;while(1){h=c[h+(i<<3)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);i=i+1|0;h=c[g>>2]|0;if((i|0)>=(c[m>>2]|0))break c}}i=0;do{h=c[h+(i<<3)>>2]|0;do if(h|0){if(c[f>>2]|0){Xd(t,h);break}s=h;if((c[j>>2]|0)>>>0<=s>>>0?(c[k>>2]|0)>>>0>s>>>0:0){c[h>>2]=c[l>>2];c[l>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;h=c[g>>2]|0}while((i|0)<(c[m>>2]|0))}while(0);d:do if(h){do if(t|0){i=t+480|0;if(!(c[i>>2]|0)){f=h;if((c[t+304>>2]|0)>>>0>f>>>0)break;if((c[t+308>>2]|0)>>>0<=f>>>0)break;s=t+300|0;c[h>>2]=c[s>>2];c[s>>2]=h}else Xd(t,h);h=i;q=70;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);q=68;break}else{q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);q=68;break}}else q=68;while(0);if((q|0)==68)if(t){h=t+480|0;q=70}if((q|0)==70){if(c[h>>2]|0){Xd(t,g);Ra=u;return n|0}s=g;if((c[t+304>>2]|0)>>>0<=s>>>0?(c[t+308>>2]|0)>>>0>s>>>0:0){t=t+300|0;c[g>>2]=c[t>>2];c[t>>2]=g;Ra=u;return n|0}}if(!g){Ra=u;return n|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=u;return n|0}else{t=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=u;return n|0}return 0}
- function vj(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;Ga=Ra;Ra=Ra+336|0;ma=Ga+232|0;ia=Ga+224|0;ga=Ga+216|0;ca=Ga+208|0;aa=Ga+200|0;$=Ga+184|0;X=Ga+176|0;T=Ga+160|0;R=Ga+152|0;Q=Ga+144|0;A=Ga+136|0;x=Ga+128|0;t=Ga+120|0;s=Ga+112|0;q=Ga+104|0;ta=Ga+304|0;ja=Ga+272|0;la=Ga;xa=Ga+268|0;wa=Ga+264|0;U=Ga+240|0;c[xa>>2]=0;c[wa>>2]=0;Fa=c[f>>2]|0;V=f+36|0;do if((c[V>>2]|0)==0?(ba=Fa+81|0,(a[ba>>0]|0)==0):0){na=U+4|0;c[na>>2]=0;if(h)if((c[h+8>>2]&512|0)!=0?(c[h+52>>2]|0)==0:0){Ea=c[h>>2]|0;c[h>>2]=0;pi(Fa,h,1);Da=0}else{Da=h;Ea=0}else{Da=0;Ea=0}h=c[g+8>>2]|0;if(!h)l=g+12|0;else{m=c[(c[f>>2]|0)+16>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(h|0))break;else l=l+1|0;l=m+(l<<4)|0}Ca=bd(f,0,c[g+16>>2]|0,c[l>>2]|0)|0;l=c[f>>2]|0;ha=g+24|0;h=c[ha>>2]|0;do if(h|0){if(l|0?c[l+480>>2]|0:0){Vi(l,h);break}za=h+32|0;Aa=(c[za>>2]|0)+-1|0;c[za>>2]=Aa;if(!Aa)Vi(l,h)}while(0);c[ha>>2]=Ca;a:do if(Ca){Aa=Ca+32|0;c[Aa>>2]=(c[Aa>>2]|0)+1;b:do if(a[g+45>>0]&2){o=c[g+72>>2]|0;l=c[Ca+8>>2]|0;c:do if(l|0){p=d[208+(d[o>>0]|0)>>0]|0;while(1){m=c[l>>2]|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-p|0;if(!(Aa<<24>>24==0|(h|0)!=0)){n=o;do{m=m+1|0;n=n+1|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(h|0)!=0))}if(!h)break;l=c[l+20>>2]|0;if(!l)break c}c[g+76>>2]=l;break b}while(0);c[q>>2]=o;c[q+4>>2]=0;cd(f,41107,q);a[f+17>>0]=1;l=0;Ba=1038;break a}while(0);ra=Ca+72|0;h=c[ra>>2]|0;m=c[Fa+16>>2]|0;if(!h)W=-1e6;else{l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(h|0)){W=l;break}else l=l+1|0}n=c[Ca>>2]|0;h=c[m+(W<<4)>>2]|0;l=c[f>>2]|0;if(((a[l+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(r=c[l+312>>2]|0,(r|0)!=0):0){l=$a[r&127](c[l+316>>2]|0,18,n,0,h,c[f+240>>2]|0)|0;if((l|0)==1){cd(f,39216,s);c[f+12>>2]=23;l=0;Ba=1038;break}if((l|2|0)!=2){cd(f,39231,t);c[f+12>>2]=1;l=0;Ba=1038;break}if(l|0){l=0;Ba=1038;break}l=c[f>>2]|0}S=Ca+36|0;pa=(c[S>>2]|0)>>>5&1;do if(!(0==0?(c[l+32>>2]&262144|0)==0:0)?(u=c[(c[l+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){r=c[ra>>2]|0;if((r|0)!=(u|0)?(v=c[u+48>>2]|0,(v|0)!=0):0){q=Ca+68|0;p=v;l=0;do{o=c[p+8>>2]|0;do if((c[o+24>>2]|0)==(r|0)){m=c[o+4>>2]|0;n=c[Ca>>2]|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(Aa<<24>>24==0|(h|0)!=0))do{m=m+1|0;n=n+1|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(h|0)!=0));if(h|0)break;if(!l)l=c[q>>2]|0;c[o+32>>2]=l;l=o}while(0);p=c[p>>2]|0}while((p|0)!=0);if(!l)Ba=56}else Ba=56;if((Ba|0)==56){l=c[Ca+68>>2]|0;if(!l){Ba=62;break}}h=0;m=l;do{if((a[m+8>>0]|0)==120)h=h|d[m+9>>0];m=c[m+32>>2]|0}while((m|0)!=0);if(h)t=l;else Ba=62}else Ba=62;while(0);if((Ba|0)==62){h=0;t=0}oa=(c[Ca+12>>2]|0)!=0;if((Sk(f,Ca)|0)==0?(Fm(f,Ca,h)|0)==0:0){ya=f+8|0;l=c[ya>>2]|0;if(!l){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;d:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=79;else{l=0;Ba=1038;break a}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];Aa=n+284|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break d}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];Aa=n+284|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break d}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=79}while(0);if((Ba|0)==79)m=_d(n,224,0)|0;if(!m){l=0;Ba=1038;break}p=m+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ya>>2]=m;Di(m,61,0,1,0)|0;Aa=m}else Aa=l;za=f+18|0;if(!(a[za>>0]|0)){va=Aa+149|0;ua=d[va>>0]|d[va+1>>0]<<8|32;a[va>>0]=ua;a[va+1>>0]=ua>>8}va=(Da|0)!=0;sa=(t|0)!=0;s=(va|sa)&1;ua=f+116|0;v=c[ua>>2]|0;v=(v|0)==0?f:v;l=v+84|0;m=c[l>>2]|0;u=1<<W;e:do if(((m&u|0)==0?(c[l>>2]=m|u,(W|0)==1):0)?(y=c[v>>2]|0,w=y+16|0,(c[(c[w>>2]|0)+20>>2]|0)==0):0){if(a[v+199>>0]|0)break;l=Pe(c[y>>2]|0,0,y,ta,0,542)|0;if(l|0){cd(v,32157,x);c[v+12>>2]=l;break}qa=c[ta>>2]|0;c[(c[w>>2]|0)+20>>2]=qa;l=c[y+92>>2]|0;o=c[qa+4>>2]|0;c[o+4>>2]=c[qa>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;q=o+36|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;qa=(c[14820]|0)+1|0;c[14820]=qa;c[14821]=(qa|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=101;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=101}while(0);do if((Ba|0)==101){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{qa=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-qa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);qa=Se(c[o>>2]|0,p,r)|0;c[q>>2]=(c[p>>2]|0)-(r&65535);if((qa|0)!=7)break;l=y+81|0;do if(!(a[l>>0]|0)){if(a[y+82>>0]|0)break;a[l>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;l=y+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[y+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break e}while(0)}while(0);qa=v+80|0;c[qa>>2]=c[qa>>2]|u;qa=v+20|0;a[qa>>0]=d[qa>>0]|s;qa=(i|0)==0;f:do if(qa?(P=c[f>>2]|0,(Da|0)!=0):0){if(c[f+264>>2]|0){Ba=424;break}if(c[Da+64>>2]|0){Ba=424;break}w=P+16|0;u=c[w>>2]|0;l=c[u+28>>2]|0;if(!(a[f+146>>0]|0)){s=c[ra>>2]|0;do if((s|0)!=(l|0)){l=c[l+48>>2]|0;if(!l)break;r=Ca+68|0;m=0;do{q=c[l+8>>2]|0;do if((c[q+24>>2]|0)==(s|0)){o=c[q+4>>2]|0;p=c[Ca>>2]|0;ka=a[o>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(n|0)!=0))do{o=o+1|0;p=p+1|0;ka=a[o>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(n|0)!=0));if(n|0)break;if(!m)m=c[r>>2]|0;c[q+32>>2]=m;m=q}while(0);l=c[l>>2]|0}while((l|0)!=0);if(m|0){Ba=424;break f}}while(0);if(c[Ca+68>>2]|0){Ba=424;break}}if(c[Ca+56>>2]|0){Ba=424;break}do if((j|0)==11){if((b[Ca+40>>1]|0)>-1?(z=a[Ca+48>>0]|0,z<<24>>24!=11):0){I=z&255;break}I=2}else I=j;while(0);n=c[Da+32>>2]|0;if((c[n>>2]|0)!=1){Ba=424;break}if(c[n+28>>2]|0){Ba=424;break}if(c[Da+36>>2]|0){Ba=424;break}if(c[Da+48>>2]|0){Ba=424;break}if(c[Da+40>>2]|0){Ba=424;break}if(c[Da+60>>2]|0){Ba=424;break}if(c[Da+52>>2]|0){Ba=424;break}if(c[Da+8>>2]&1|0){Ba=424;break}l=c[Da>>2]|0;if((c[l>>2]|0)!=1){Ba=424;break}if((a[c[l+4>>2]>>0]|0)!=-84){Ba=424;break}m=c[n+8>>2]|0;if(!m)l=n+12|0;else{l=0;while(1)if((c[u+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0;l=u+(l<<4)|0}K=bd(f,0,c[n+16>>2]|0,c[l>>2]|0)|0;if(!K){Ba=424;break}x=K+28|0;y=Ca+28|0;if((c[x>>2]|0)==(c[y>>2]|0)?(c[K+72>>2]|0)==(c[ra>>2]|0):0){Ba=424;break}O=K+36|0;if((c[O>>2]^c[S>>2])&32|0){Ba=424;break}if(c[K+56>>2]|0){Ba=424;break}if(c[K+12>>2]|0){Ba=424;break}l=b[Ca+42>>1]|0;if(l<<16>>16!=(b[K+42>>1]|0)){Ba=424;break}B=Ca+40|0;if((b[B>>1]|0)!=(b[K+40>>1]|0)){Ba=424;break}r=l<<16>>16;if(l<<16>>16>0){p=c[Ca+4>>2]|0;q=c[K+4>>2]|0;o=0;do{if((a[p+(o<<4)+13>>0]|0)!=(a[q+(o<<4)+13>>0]|0)){Ba=424;break f}m=c[p+(o<<4)+8>>2]|0;n=c[q+(o<<4)+8>>2]|0;do if(!m)l=((n|0)!=0)<<31>>31;else{if(!n){Ba=424;break f}ka=a[m>>0]|0;l=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(ka<<24>>24==0|(l|0)!=0)break;do{m=m+1|0;n=n+1|0;ka=a[m>>0]|0;l=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(l|0)!=0))}while(0);if(l|0){Ba=424;break f}if(a[p+(o<<4)+12>>0]|0?(a[q+(o<<4)+12>>0]|0)==0:0){Ba=424;break f}do if(o|0){l=c[p+(o<<4)+4>>2]|0;m=(l|0)==0;n=c[q+(o<<4)+4>>2]|0;if(m^(n|0)==0){Ba=424;break f}if(m)break;if(Bu(c[l+8>>2]|0,c[n+8>>2]|0)|0){Ba=424;break f}}while(0);o=o+1|0}while((o|0)<(r|0))}H=Ca+8|0;l=c[H>>2]|0;if(!l)v=0;else{o=K+8|0;p=K+72|0;m=0;while(1){m=(a[l+54>>0]|0)==0?m:1;n=c[o>>2]|0;if(!n){Ba=424;break f}while(1){if(Xm(l,n)|0)break;n=c[n+20>>2]|0;if(!n){Ba=424;break f}}do if((c[n+44>>2]|0)==(c[l+44>>2]|0)){if((c[p>>2]|0)!=(c[ra>>2]|0))break;n=c[7389]|0;if(!n){Ba=424;break f}if(!(Wa[n&127](411)|0)){Ba=424;break f}}while(0);l=c[l+20>>2]|0;if(!l){v=m;break}}}m=c[Ca+24>>2]|0;do if(m|0){n=c[K+24>>2]|0;if(!n){Ba=424;break f}l=c[n>>2]|0;if((l|0)!=(c[m>>2]|0)){Ba=424;break f}if((l|0)<=0)break;l=0;do{if((a[n+4+(l*20|0)+12>>0]|0)!=(a[m+4+(l*20|0)+12>>0]|0)){Ba=424;break f}if(bk(0,c[n+4+(l*20|0)>>2]|0,c[m+4+(l*20|0)>>2]|0,-1)|0){Ba=424;break f}l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);l=c[P+32>>2]|0;if((l&16384|0)==0&0==0){if(!((l&128|0)==0&0==0)){Ba=424;break}}else if(!((l&128|0)==0&0==0&(c[Ca+16>>2]|0)==0)){Ba=424;break}n=c[K+72>>2]|0;if(!n)N=-1e6;else{m=c[w>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(n|0)){N=l;break}else l=l+1|0}l=c[ya>>2]|0;g:do if(!l){n=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);h:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=217;else{M=0;break g}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];ka=n+284|0;c[ka>>2]=(c[ka>>2]|0)+1;break h}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];ka=n+284|0;c[ka>>2]=(c[ka>>2]|0)+1;break h}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=217}while(0);if((Ba|0)==217)m=_d(n,224,0)|0;if(!m){M=0;break}p=m+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ya>>2]=m;Di(m,61,0,1,0)|0;M=m}else M=l;while(0);o=c[ua>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<N;i:do if(!(m&n)){c[l>>2]=m|n;if((N|0)!=1)break;s=c[o>>2]|0;l=s+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[s>>2]|0,0,s,ta,0,542)|0;if(m|0){cd(o,32157,A);c[o+12>>2]=m;break}ka=c[ta>>2]|0;c[(c[l>>2]|0)+20>>2]=ka;l=c[s+92>>2]|0;o=c[ka+4>>2]|0;c[o+4>>2]=c[ka>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;q=o+36|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ka=(c[14820]|0)+1|0;c[14820]=ka;c[14821]=(ka|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=237;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=237}while(0);do if((Ba|0)==237){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ka=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ka=Se(c[o>>2]|0,p,r)|0;c[q>>2]=(c[p>>2]|0)-(r&65535);if((ka|0)!=7)break;l=s+81|0;do if(!(a[l>>0]|0)){if(a[s+82>>0]|0)break;a[l>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;l=s+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[s+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break i}while(0)}while(0);u=f+40|0;E=c[u>>2]|0;J=E+1|0;c[u>>2]=E+2;u=Wm(f,W,Ca)|0;F=f+19|0;l=a[F>>0]|0;do if(l<<24>>24){ka=l+-1<<24>>24;a[F>>0]=ka;m=c[f+148+((ka&255)<<2)>>2]|0;if(!(ka<<24>>24)){n=f+44|0;l=n;n=c[n>>2]|0;Ba=254;break}else{C=l+-2<<24>>24;a[F>>0]=C;D=m;C=c[f+148+((C&255)<<2)>>2]|0;break}}else{l=f+44|0;n=(c[l>>2]|0)+1|0;c[l>>2]=n;m=n;Ba=254}while(0);if((Ba|0)==254){C=n+1|0;c[l>>2]=C;D=m}Gj(f,J,W,Ca,109);A=P+24|0;do if(!(c[A>>2]&4)){if((b[B>>1]|0)<0){if(!((I+-1|0)>>>0>1|((v|0)!=0|(c[H>>2]|0)!=0))){z=0;break}}else if(!((I+-1|0)>>>0>1|(v|0)!=0)){z=0;break}o=M+108|0;l=c[o>>2]|0;m=M+112|0;if((c[m>>2]|0)>(l|0)){c[o>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=36;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else l=Di(M,36,J,0,0)|0;n=c[o>>2]|0;if((c[m>>2]|0)>(n|0)){c[o>>2]=n+1;p=c[M+104>>2]|0;a[p+(n*20|0)>>0]=11;p=p+(n*20|0)+1|0;q=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(q|0))}else n=Di(M,11,0,0,0)|0;m=c[o>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((l|0)<0?m+-1|0:l)*20|0)|0;else l=59308;c[l+8>>2]=m;z=n}else z=0;while(0);do if(!(c[O>>2]&32)){Gj(f,E,N,K,108);r=M+108|0;l=c[r>>2]|0;s=M+112|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=36;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=E;c[q+(l*20|0)+8>>2]=0;c[q+(l*20|0)+12>>2]=0;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=l}else q=Di(M,36,E,0,0)|0;j:do if((b[B>>1]|0)>-1){l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=-128;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else l=Di(M,128,E,C,0)|0;m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;p=c[M+104>>2]|0;a[p+(m*20|0)>>0]=31;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=J;c[p+(m*20|0)+8>>2]=0;c[p+(m*20|0)+12>>2]=C;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0;p=m}else p=Di(M,31,J,0,C)|0;m=b[B>>1]|0;o=c[f>>2]|0;n=c[Ca>>2]|0;if(m<<16>>16>-1){m=c[(c[Ca+4>>2]|0)+(m<<16>>16<<4)>>2]|0;c[Q>>2]=n;c[Q+4>>2]=m;n=1555;m=dd(o,40358,Q)|0}else{c[R>>2]=n;n=2579;m=dd(o,44808,R)|0}Uj(f,n,I,m,-7,2);n=c[r>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))m=(c[M+104>>2]|0)+(((p|0)<0?n+-1|0:p)*20|0)|0;else m=59308;c[m+8>>2]=n;if((u|0)<=0)break;m=c[ya>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;ka=c[m+104>>2]|0;a[ka+(o*20|0)>>0]=-105;b[ka+(o*20|0)+2>>1]=0;c[ka+(o*20|0)+4>>2]=u;c[ka+(o*20|0)+8>>2]=C;c[ka+(o*20|0)+12>>2]=0;c[ka+(o*20|0)+16>>2]=0;a[ka+(o*20|0)+1>>0]=0;break}else{Di(m,151,u,C,0)|0;break}}else{do if(!(c[H>>2]|0)){if(c[A>>2]&8|0)break;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=121;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;break j}else{l=Di(M,121,J,C,0)|0;break j}}while(0);l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=-128;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;break}else{l=Di(M,128,E,C,0)|0;break}}while(0);m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=127;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=1;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,127,E,D,1)|0;do if(c[A>>2]&4){m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;p=c[M+104>>2]|0;a[p+(m*20|0)>>0]=-126;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=J;c[p+(m*20|0)+8>>2]=0;c[p+(m*20|0)+12>>2]=0;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0;p=57;break}else{Di(M,130,J,0,0)|0;p=57;break}}else p=41;while(0);m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=122;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=C;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else m=Di(M,122,J,D,C)|0;do if(!(a[(c[M>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;n=c[M+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=Ca;a[o>>0]=-6;break}else{Ei(M,n+(m*20|0)|0,Ca,-6);break}}while(0);m=c[r>>2]|0;if((m|0)>0)b[(c[M+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=p;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=5;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,5,E,l,0)|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=117;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,117,E,0,0)|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;y=c[M+104>>2]|0;a[y+(l*20|0)>>0]=117;b[y+(l*20|0)+2>>1]=0;c[y+(l*20|0)+4>>2]=J;c[y+(l*20|0)+8>>2]=0;c[y+(l*20|0)+12>>2]=0;c[y+(l*20|0)+16>>2]=0;a[y+(l*20|0)+1>>0]=0;y=q;break}else{Di(M,117,J,0,0)|0;y=q;break}}else{Hj(f,W,c[y>>2]|0,1,c[Ca>>2]|0);Hj(f,N,c[x>>2]|0,0,c[K>>2]|0);y=0}while(0);l=c[H>>2]|0;if(l|0){u=K+8|0;v=M+108|0;w=M+112|0;x=M+104|0;s=l;do{l=u;while(1){o=c[l>>2]|0;if(!(Xm(s,o)|0))l=o+20|0;else break}l=c[o+44>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=108;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=N;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,108,E,l,N)|0;l=c[ya>>2]|0;n=Ij(f,o)|0;k:do if(n|0){m=c[l>>2]|0;if(!(a[m+81>>0]|0)){fa=c[l+104>>2]|0;ka=(c[l+108>>2]|0)+-1|0;a[fa+(ka*20|0)+1>>0]=-9;c[fa+(ka*20|0)+16>>2]=n;break}if(c[m+480>>2]|0)break;ka=(c[n>>2]|0)+-1|0;c[n>>2]=ka;if(ka|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break k}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;ka=l+300|0;c[n>>2]=c[ka>>2];c[ka>>2]=n;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ka=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);l=c[s+44>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=109;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=W;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,109,J,l,W)|0;l=c[ya>>2]|0;n=Ij(f,s)|0;l:do if(n|0){m=c[l>>2]|0;if(!(a[m+81>>0]|0)){fa=c[l+104>>2]|0;ka=(c[l+108>>2]|0)+-1|0;a[fa+(ka*20|0)+1>>0]=-9;c[fa+(ka*20|0)+16>>2]=n;break}if(c[m+480>>2]|0)break;ka=(c[n>>2]|0)+-1|0;c[n>>2]=ka;if(ka|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break l}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;ka=l+300|0;c[n>>2]=c[ka>>2];c[ka>>2]=n;break l}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ka=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);l=c[v>>2]|0;if((l|0)>0)b[(c[x>>2]|0)+((l+-1|0)*20|0)+2>>1]=1;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;r=c[x>>2]|0;a[r+(l*20|0)>>0]=36;b[r+(l*20|0)+2>>1]=0;c[r+(l*20|0)+4>>2]=E;c[r+(l*20|0)+8>>2]=0;c[r+(l*20|0)+12>>2]=0;c[r+(l*20|0)+16>>2]=0;a[r+(l*20|0)+1>>0]=0;r=l}else r=Di(M,36,E,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=127;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=D;c[ka+(l*20|0)+12>>2]=1;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,127,E,D,1)|0;do if(c[A>>2]&4){ka=b[o+52>>1]|0;q=ka&65535;m:do if(!(ka<<16>>16))l=0;else{p=c[o+32>>2]|0;l=0;do{m=c[p+(l<<2)>>2]|0;if(!m)break m;if((a[m>>0]|32)<<24>>24!=98)break m;n=34049;do{n=n+1|0;m=m+1|0;ka=a[n>>0]|0;o=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(o|0)!=0));if(o|0)break m;l=l+1|0}while(l>>>0<q>>>0)}while(0);if((l|0)!=(q|0)){l=0;break}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=-126;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;l=16;break}else{Di(M,130,J,0,0)|0;l=16;break}}else l=0;while(0);if(c[O>>2]&32){ka=s+55|0;l=l|((d[ka>>0]|d[ka+1>>0]<<8)&3)==2}m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=-124;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,132,J,D,0)|0;m=c[v>>2]|0;if((m|0)>0)b[(c[x>>2]|0)+((m+-1|0)*20|0)+2>>1]=(l|8)&255;l=r+1|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=5;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,5,E,l,0)|0;m=c[v>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[x>>2]|0)+(((r|0)<0?m+-1|0:r)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=117;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=0;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,117,E,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=117;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,117,J,0,0)|0;s=c[s+20>>2]|0}while((s|0)!=0)}if(y|0){m=c[M+108>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((y|0)<0?m+-1|0:y)*20|0)|0;else l=59308;c[l+8>>2]=m}do if(C|0){l=a[F>>0]|0;if((l&255)>=8)break;a[F>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=C}while(0);do if(D|0){l=a[F>>0]|0;if((l&255)>=8)break;a[F>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=D}while(0);if(!z){n=0;l=0;break}if(c[f+112>>2]|0)Sm(f);n=M+108|0;l=c[n>>2]|0;o=M+112|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;p=c[M+104>>2]|0;a[p+(l*20|0)>>0]=69;p=p+(l*20|0)+1|0;q=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(q|0))}else Di(M,69,0,0,0)|0;m=c[n>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((z|0)<0?m+-1|0:z)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[M+104>>2]|0;a[Ba+(m*20|0)>>0]=117;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=J;c[Ba+(m*20|0)+8>>2]=0;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0;Ba=424;break}else{Di(M,117,J,0,0)|0;Ba=424;break}}else Ba=424;while(0);do if((Ba|0)==424){F=Wm(f,W,Ca)|0;ka=f+44|0;fa=c[ka>>2]|0;da=fa+1|0;ea=Ca+42|0;n=b[ea>>1]|0;D=n<<16>>16;E=da+D|0;c[ka>>2]=E;Z=Ca+56|0;_=(c[Z>>2]|0)==0;E=E+((_^1)&1)|0;c[ka>>2]=E;fa=_?da:fa+2|0;_=fa+1|0;m=((c[S>>2]|0)>>>7&1^1)&255;Y=(i|0)!=0;n:do if(Y){B=c[i+4>>2]|0;if((B|0)<=0){z=-1;break}C=c[i>>2]|0;l=0;do{c[C+(l<<3)+4>>2]=-1;l=l+1|0}while((l|0)!=(B|0));x=n<<16>>16>0;y=Ca+4|0;z=Ca+40|0;A=(pa|0)!=0;n=-1;w=0;while(1){v=c[C+(w<<3)>>2]|0;o:do if(x){r=c[y>>2]|0;s=a[v>>0]|0;u=a[208+(s&255)>>0]|0;p:do if(!(s<<24>>24)){l=0;do{if(u<<24>>24==(a[208+(d[c[r+(l<<4)>>2]>>0]|0)>>0]|0))break p;l=l+1|0}while((l|0)<(D|0));o=u&255;l=o+-95|0;p=1;Ba=446;break o}else{l=0;while(1){o=c[r+(l<<4)>>2]|0;if(u<<24>>24==(a[208+(d[o>>0]|0)>>0]|0)){p=v;do{p=p+1|0;o=o+1|0;S=a[p>>0]|0;q=(d[208+(S&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(q|0)!=0));if(!q)break p}l=l+1|0;if((l|0)>=(D|0)){l=u;m=s;Ba=443;break o}}}while(0);c[C+(w<<3)+4>>2]=l;n=(l|0)==(b[z>>1]|0)?w:n;m=(w|0)==(l|0)?m:0}else{m=a[v>>0]|0;l=a[208+(m&255)>>0]|0;Ba=443}while(0);do if((Ba|0)==443){o=l&255;l=o+-95|0;p=m<<24>>24==0;if(p|(l|0)!=0){Ba=446;break}m=58070;n=v;do{n=n+1|0;m=m+1|0;Ba=a[n>>0]|0;l=(d[208+(Ba&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(Ba<<24>>24==0|(l|0)!=0));Ba=446}while(0);if((Ba|0)==446){Ba=0;do if(!l)l=1;else{l=o+-114|0;if(!(p|(l|0)!=0)){m=40352;n=v;do{n=n+1|0;m=m+1|0;S=a[n>>0]|0;l=(d[208+(S&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(l|0)!=0))}if(!l){l=1;break}l=o+-111|0;if(!(p|(l|0)!=0)){m=58078;n=v;do{n=n+1|0;m=m+1|0;S=a[n>>0]|0;l=(d[208+(S&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(l|0)!=0))}l=(l|0)==0&1}while(0);if(A|(l|0)==0)break;else{n=w;m=0}}w=w+1|0;if((w|0)>=(B|0)){z=n;break n}}c[T>>2]=g;c[T+4>>2]=0;c[T+8>>2]=v;cd(f,44817,T);a[f+17>>0]=1;l=0;Ba=1038;break a}else z=-1;while(0);q:do if(va){n=E+1|0;c[ka>>2]=n;v=Aa+108|0;o=c[v>>2]|0;l=o+1|0;w=Aa+112|0;if((c[w>>2]|0)>(o|0)){c[v>>2]=l;X=c[Aa+104>>2]|0;a[X+(o*20|0)>>0]=13;b[X+(o*20|0)+2>>1]=0;c[X+(o*20|0)+4>>2]=n;c[X+(o*20|0)+8>>2]=0;c[X+(o*20|0)+12>>2]=l;c[X+(o*20|0)+16>>2]=0;a[X+(o*20|0)+1>>0]=0}else Di(Aa,13,n,0,l)|0;a[U>>0]=13;c[na>>2]=n;c[U+16>>2]=0;x=U+8|0;c[x>>2]=m<<24>>24==0?0:_;c[U+12>>2]=b[ea>>1];X=kj(f,Da,U)|0;x=c[x>>2]|0;if(X|0){l=0;Ba=1038;break a}if(a[ba>>0]|0){l=0;Ba=1038;break a}if(c[V>>2]|0){l=0;Ba=1038;break a}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=67;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=n;c[X+(l*20|0)+8>>2]=0;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,67,n,0,0)|0;m=c[Aa+12>>2]|0;a[m+19>>0]=0;c[m+28>>2]=0;m=c[v>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[Aa+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m;u=c[c[Da>>2]>>2]|0;r:do if(!sa){l=c[ya>>2]|0;s:do if(!l){n=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);t:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=485;else{l=0;break s}else{do if((e[n+276>>1]|0)>=224){m=n+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];X=n+284|0;c[X>>2]=(c[X>>2]|0)+1;break t}m=n+296|0;l=c[m>>2]|0;if(!l){l=n+292|0;break}else{c[m>>2]=c[l>>2];X=n+284|0;c[X>>2]=(c[X>>2]|0)+1;break t}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=485}while(0);if((Ba|0)==485)l=_d(n,224,0)|0;if(!l){l=0;break}p=l+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[l>>2]=n;m=n+4|0;n=c[m>>2]|0;if(n|0)c[n+4>>2]=l;c[l+8>>2]=n;c[l+4>>2]=0;c[m>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[ya>>2]=l;Di(l,61,0,1,0)|0}while(0);s=c[l+108>>2]|0;u:do if(!(c[Z>>2]|0))m=0;else{n=c[f>>2]|0;m=c[Ca+64>>2]|0;if(!m){m=0;break}while(1){if((c[m>>2]|0)==(n|0))break u;m=c[m+24>>2]|0;if(!m){m=0;break}}}while(0);if((s|0)<=1){T=x;U=0;E=0;J=u;break q}q=Ca+28|0;r=Ca+8|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){o=c[l+104>>2]|0;n=1;while(1){v:do switch(a[o+(n*20|0)>>0]|0){case 108:{if((c[o+(n*20|0)+12>>2]|0)!=(W|0))break v;p=c[o+(n*20|0)+8>>2]|0;if((p|0)==(c[q>>2]|0))break r;l=c[r>>2]|0;if(!l)break v;do{if((p|0)==(c[l+44>>2]|0))break r;l=c[l+20>>2]|0}while((l|0)!=0);break}case -93:{if((c[o+(n*20|0)+16>>2]|0)==(m|0))break r;break}default:{}}while(0);n=n+1|0;if((n|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}n=(c[14830]|0)==(W|0);l=(c[14831]|0)==(m|0);p=c[14829]|0;switch(a[59308]|0){case 108:break;case -93:if(l)break r;else{T=x;U=0;E=0;J=u;break q}default:{T=x;U=0;E=0;J=u;break q}}if(l){if(!n){T=x;U=0;E=0;J=u;break q}n=(p|0)==(c[q>>2]|0);m=1;while(1){if(n)break r;l=c[r>>2]|0;if(l|0)do{if((p|0)==(c[l+44>>2]|0))break r;l=c[l+20>>2]|0}while((l|0)!=0);m=m+1|0;if((m|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}else{if(!n){T=x;U=0;E=0;J=u;break q}if((p|0)==(c[q>>2]|0))break;l=c[r>>2]|0;o=(l|0)==0;n=1;while(1){if(!o){m=l;do{if((p|0)==(c[m+44>>2]|0))break r;m=c[m+20>>2]|0}while((m|0)!=0)}n=n+1|0;if((n|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}}while(0);q=f+40|0;r=c[q>>2]|0;c[q>>2]=r+1;q=f+19|0;m=a[q>>0]|0;do if(m<<24>>24){X=m+-1<<24>>24;a[q>>0]=X;l=c[f+148+((X&255)<<2)>>2]|0;if(!(X<<24>>24)){m=c[ka>>2]|0;Ba=530;break}else{p=m+-2<<24>>24;a[q>>0]=p;o=l;p=c[f+148+((p&255)<<2)>>2]|0;break}}else{m=(c[ka>>2]|0)+1|0;c[ka>>2]=m;l=m;Ba=530}while(0);if((Ba|0)==530){p=m+1|0;c[ka>>2]=p;o=l}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=113;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=u;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,113,r,u,0)|0;l=c[na>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;n=c[Aa+104>>2]|0;a[n+(m*20|0)>>0]=14;b[n+(m*20|0)+2>>1]=0;c[n+(m*20|0)+4>>2]=l;c[n+(m*20|0)+8>>2]=0;c[n+(m*20|0)+12>>2]=0;c[n+(m*20|0)+16>>2]=0;a[n+(m*20|0)+1>>0]=0;n=m}else n=Di(Aa,14,l,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=92;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=x;c[X+(l*20|0)+8>>2]=u;c[X+(l*20|0)+12>>2]=o;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,92,x,u,o)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=121;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=p;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,121,r,p,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=122;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=o;c[X+(l*20|0)+12>>2]=p;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,122,r,o,p)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=11;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=0;c[X+(l*20|0)+8>>2]=n;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,11,0,n,0)|0;m=c[v>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[Aa+104>>2]|0)+(((n|0)<0?m+-1|0:n)*20|0)|0;else l=59308;c[l+8>>2]=m;do if(o|0){l=a[q>>0]|0;if((l&255)>=8)break;a[q>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=o}while(0);if(!p){T=x;U=r;E=1;J=u;break}l=a[q>>0]|0;if((l&255)>=8){T=x;U=r;E=1;J=u;break}a[q>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=p;T=x;U=r;E=1;J=u}else{W=ja+4|0;c[W>>2]=0;c[W+4>>2]=0;c[W+8>>2]=0;c[W+12>>2]=0;c[W+16>>2]=0;c[W+20>>2]=0;c[W+24>>2]=0;c[ja>>2]=f;w:do if(!Ea)l=0;else{l=c[Ea>>2]|0;if((l|0)<=0)break;s=ja+24|0;u=ta+4|0;v=ta+8|0;w=ta+12|0;x=ta+24|0;y=ja+20|0;r=0;m=0;while(1){q=c[Ea+4+(r*20|0)>>2]|0;if(q){o=m&65535;b[s>>1]=o&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[u>>2]=125;c[v>>2]=126;c[w>>2]=0;c[x>>2]=ja;p=q+24|0;n=m;V=n+208|0;W=(c[V>>2]|0)+(c[p>>2]|0)|0;c[V>>2]=W;n=c[(c[n>>2]|0)+120>>2]|0;if((n|0)<(W|0)){Ba=565;break}_j(ta,q)|0;n=c[ta>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);m=b[s>>1]|0;W=q+4|0;c[W>>2]=c[W>>2]|m&-32752&65535;m=(o&36880|m&65535)&65535;b[s>>1]=m;if((c[y>>2]|0)>0){Ba=567;break}if((c[n+36>>2]|0)>=1)break}r=r+1|0;if((r|0)>=(c[Ea>>2]|0))break w}if((Ba|0)==565){c[X>>2]=n;cd(m,41637,X);Ba=567}qi(Fa,g);l=0;break a}while(0);T=0;U=-1;E=0;J=l}while(0);if(qa&(J|0)>0)S=b[Ca+40>>1]|0;else S=z;X=b[ea>>1]|0;o=X<<16>>16;if(X<<16>>16>0){n=c[Ca+4>>2]|0;l=0;m=0;do{l=l+((d[n+(m<<4)+15>>0]|0)>>>1&1)|0;m=m+1|0}while((m|0)!=(o|0))}else l=0;do if(qa&(J|0)!=0){l=o-l|0;if((J|0)==(l|0))break;c[$>>2]=g;c[$+4>>2]=0;c[$+8>>2]=l;c[$+12>>2]=J;cd(f,44849,$);l=0;Ba=1038;break a}while(0);do if(Y){l=c[i+4>>2]|0;if((J|0)==(l|0))break;c[aa>>2]=J;c[aa+4>>2]=l;cd(f,44901,aa);l=0;Ba=1038;break a}while(0);O=Fa+32|0;do if(!((c[O>>2]&128|0)==0&0==0)){if(a[za>>0]|0){n=0;break}if(c[f+120>>2]|0){n=0;break}n=(c[ka>>2]|0)+1|0;c[ka>>2]=n;l=Aa+108|0;m=c[l>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[l>>2]=m+1;aa=c[Aa+104>>2]|0;a[aa+(m*20|0)>>0]=70;b[aa+(m*20|0)+2>>1]=0;c[aa+(m*20|0)+4>>2]=0;c[aa+(m*20|0)+8>>2]=n;c[aa+(m*20|0)+12>>2]=0;c[aa+(m*20|0)+16>>2]=0;a[aa+(m*20|0)+1>>0]=0;break}else{Di(Aa,70,0,n,0)|0;break}}else n=0;while(0);do if(oa){R=0;l=0}else{q=Hm(f,Ca,109,0,-1,0,xa,wa)|0;o=(q<<2)+4|0;x:do if(c[Fa+272>>2]|0)if(!(a[ba>>0]|0))Ba=599;else{l=0;Ba=1038;break a}else{do if(!(0<0|(0==0?(e[Fa+276>>1]|0)>>>0<o>>>0:0))){l=Fa+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];ba=Fa+284|0;c[ba>>2]=(c[ba>>2]|0)+1;break x}l=Fa+296|0;m=c[l>>2]|0;if(!m){l=Fa+292|0;break}else{c[l>>2]=c[m>>2];ba=Fa+284|0;c[ba>>2]=(c[ba>>2]|0)+1;break x}}else l=Fa+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=599}while(0);if((Ba|0)==599)m=_d(Fa,o,0)|0;if(!m){l=0;Ba=1038;break a}if((q|0)<=0){R=m;l=m;break}l=Ca+8|0;o=0;p=c[ka>>2]|0;while(1){l=c[l>>2]|0;ba=p+1|0;c[ka>>2]=ba;c[m+(o<<2)>>2]=ba;p=(c[ka>>2]|0)+(e[l+52>>1]|0)|0;c[ka>>2]=p;o=o+1|0;if((o|0)==(q|0)){R=m;l=m;break}else l=l+20|0}}while(0);do if(k|0){if(c[Z>>2]|0){c[ca>>2]=c[Ca>>2];cd(f,44926,ca);Ba=1038;break a}u=c[xa>>2]|0;C=g+48|0;c[C>>2]=u;c[k+20>>2]=g;c[k+24>>2]=_;c[k+28>>2]=u;c[k+32>>2]=c[wa>>2];u=c[k>>2]|0;if(!u)break;ca=ja+8|0;c[ca>>2]=0;c[ca+4>>2]=0;c[ca+8>>2]=0;c[ca+12>>2]=0;c[ca+16>>2]=0;c[ca+20>>2]=0;c[ja>>2]=f;c[ja+4>>2]=g;y:do if((c[u>>2]|0)>0){v=ja+24|0;w=ta+4|0;x=ta+8|0;y=ta+12|0;z=ta+24|0;A=ja+20|0;s=0;m=0;while(1){r=c[u+4+(s*20|0)>>2]|0;if(r){p=m&65535;b[v>>1]=p&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[w>>2]=125;c[x>>2]=126;c[y>>2]=0;c[z>>2]=ja;q=r+24|0;o=m;ba=o+208|0;ca=(c[ba>>2]|0)+(c[q>>2]|0)|0;c[ba>>2]=ca;o=c[(c[o>>2]|0)+120>>2]|0;if((o|0)<(ca|0)){Ba=614;break}_j(ta,r)|0;o=c[ta>>2]|0;m=o+208|0;c[m>>2]=(c[m>>2]|0)-(c[q>>2]|0);m=b[v>>1]|0;ca=r+4|0;c[ca>>2]=c[ca>>2]|m&-32752&65535;m=(p&36880|m&65535)&65535;b[v>>1]=m;if((c[A>>2]|0)>0)break;if((c[o+36>>2]|0)>=1)break y}s=s+1|0;if((s|0)>=(c[u>>2]|0)){Ba=618;break y}}if((Ba|0)==614){c[ga>>2]=o;cd(m,41637,ga)}}else{m=0;Ba=618}while(0);z:do if((Ba|0)==618){D=k+4|0;r=c[D>>2]|0;A:do if(r){s=ja+24|0;p=m&65535;b[s>>1]=p&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[ta+4>>2]=125;c[ta+8>>2]=126;c[ta+12>>2]=0;c[ta+24>>2]=ja;q=r+24|0;o=m+208|0;ga=(c[o>>2]|0)+(c[q>>2]|0)|0;c[o>>2]=ga;o=c[(c[m>>2]|0)+120>>2]|0;do if((o|0)>=(ga|0)){_j(ta,r)|0;m=c[ta>>2]|0;ia=m+208|0;c[ia>>2]=(c[ia>>2]|0)-(c[q>>2]|0);ia=b[s>>1]|0;ga=r+4|0;c[ga>>2]=c[ga>>2]|ia&-32752&65535;b[s>>1]=p&36880|ia&65535;if((c[ja+20>>2]|0)>0)break;if((c[m+36>>2]|0)<1)break A;else break z}else{c[ia>>2]=o;cd(m,41637,ia)}while(0);break z}while(0);o=c[ha>>2]|0;B=c[k>>2]|0;A=c[C>>2]|0;do if(!(c[o+36>>2]&32)){if((c[B>>2]|0)!=1)break;m=c[B+4>>2]|0;if((a[m>>0]|0)!=-94)break;if((b[m+32>>1]|0)==-1)break z}while(0);p=la;q=p+104|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));a[la>>0]=106;y=la+52|0;z=la+12|0;c[z>>2]=y;a[y>>0]=-94;c[la+80>>2]=A;m=c[o+8>>2]|0;B:do if(m|0){w=la+8|0;x=la+84|0;C:while(1){D:do if(a[m+54>>0]|0){p=c[B>>2]|0;q=m+50|0;o=b[q>>1]|0;if((p|0)!=(o&65535|0))break;r=c[m+36>>2]|0;if(r){o=c[D>>2]|0;if(!o)break;if(bk(f,o,r,A)|0)break;o=b[q>>1]|0;p=o&65535}if(!(o<<16>>16))break C;s=m+32|0;u=m+4|0;v=m+40|0;r=0;while(1){c[w>>2]=c[(c[s>>2]|0)+(r<<2)>>2];o=b[(c[u>>2]|0)+(r<<1)>>1]|0;do if(o<<16>>16==-2){o=c[(c[v>>2]|0)+4+(r*20|0)>>2]|0;if((a[o>>0]|0)==106)break;c[z>>2]=o;o=la}else{c[z>>2]=y;b[x>>1]=o;o=la}while(0);q=0;while(1){if((bk(f,c[B+4+(q*20|0)>>2]|0,o,A)|0)<2)break;q=q+1|0;if(q>>>0>=p>>>0)break D}r=r+1|0;if(r>>>0>=p>>>0)break C}}while(0);m=c[m+20>>2]|0;if(!m)break B}c[k+16>>2]=m;break z}while(0);cd(f,44986,ma)}while(0)}while(0);P=E<<24>>24!=0;do if(!P){if(!va){Q=0;N=0;break}m=c[na>>2]|0;o=Aa+108|0;p=c[o>>2]|0;if((c[Aa+112>>2]|0)>(p|0)){c[o>>2]=p+1;Q=c[Aa+104>>2]|0;a[Q+(p*20|0)>>0]=14;b[Q+(p*20|0)+2>>1]=0;c[Q+(p*20|0)+4>>2]=m;c[Q+(p*20|0)+8>>2]=0;c[Q+(p*20|0)+12>>2]=0;c[Q+(p*20|0)+16>>2]=0;a[Q+(p*20|0)+1>>0]=0;Q=p;N=p;break}else{N=Di(Aa,14,m,0,0)|0;Q=N;break}}else{o=Aa+108|0;m=c[o>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=36;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=0;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else m=Di(Aa,36,U,0,0)|0;Q=m;N=c[o>>2]|0}while(0);na=f+56|0;M=c[na>>2]|0;K=M+-1|0;c[na>>2]=K;do if(h&1|0){na=b[ea>>1]|0;h=na<<16>>16;m=h+1|0;do if(!(na<<16>>16)){h=f+19|0;m=a[h>>0]|0;if(!(m<<24>>24)){E=(c[ka>>2]|0)+1|0;c[ka>>2]=E;break}else{E=m+-1<<24>>24;a[h>>0]=E;E=c[f+148+((E&255)<<2)>>2]|0;break}}else{o=f+32|0;p=c[o>>2]|0;q=f+28|0;r=c[q>>2]|0;if((r|0)>(h|0)){c[o>>2]=p+m;c[q>>2]=r-m;E=p;break}else{E=c[ka>>2]|0;c[ka>>2]=E+m;E=E+1|0;break}}while(0);do if((S|0)<0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=70;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=-1;c[na+(m*20|0)+8>>2]=E;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,70,-1,E,0)|0;break}}else{E:do if(P){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=90;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=S;c[na+(m*20|0)+12>>2]=E;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,S,E)|0;break}}else{h=c[Ea+4+(S*20|0)>>2]|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(f,h,E)|0;break}p=c[ya>>2]|0;h=c[h+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[p+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=E;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break E}else{Di(p,78,h,E,0)|0;break E}}else p=Jj(f,0,E)|0;while(0);if((p|0)==(E|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=E;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,E,0)|0;break}}while(0);o=Aa+108|0;h=c[o>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(h|0)){c[o>>2]=h+1;na=c[Aa+104>>2]|0;a[na+(h*20|0)>>0]=51;b[na+(h*20|0)+2>>1]=0;c[na+(h*20|0)+4>>2]=E;c[na+(h*20|0)+8>>2]=0;c[na+(h*20|0)+12>>2]=0;c[na+(h*20|0)+16>>2]=0;a[na+(h*20|0)+1>>0]=0}else h=Di(Aa,51,E,0,0)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=70;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=-1;c[na+(m*20|0)+8>>2]=E;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else Di(Aa,70,-1,E,0)|0;m=c[o>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((h|0)<0?m+-1|0:h)*20|0)|0;else h=59308;c[h+8>>2]=m;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=15;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=E;c[na+(m*20|0)+8>>2]=0;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,15,E,0,0)|0;break}}while(0);h=b[ea>>1]|0;if(h<<16>>16>0){w=i+4|0;D=(Ea|0)!=0|P;x=qa&1;y=Ca+4|0;z=E+1|0;A=Aa+108|0;B=Aa+112|0;C=Aa+104|0;h=0;v=0;while(1){F:do if(Y){m=c[w>>2]|0;if((m|0)<=0){u=0;break}o=c[i>>2]|0;h=0;while(1){if((c[o+(h<<3)+4>>2]|0)==(v|0)){u=h;break F}h=h+1|0;if((h|0)>=(m|0)){u=h;break}}}else u=h;while(0);do if(D){if(Y?(u|0)>=(c[w>>2]|0):0){Ba=710;break}if(P){h=v+z|0;m=c[A>>2]|0;if((c[B>>2]|0)>(m|0)){c[A>>2]=m+1;na=c[C>>2]|0;a[na+(m*20|0)>>0]=90;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=u;c[na+(m*20|0)+12>>2]=h;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,u,h)|0;break}}q=c[Ea+4+(u*20|0)>>2]|0;r=v+z|0;s=c[ya>>2]|0;do if(q){if((a[q>>0]|0)!=-88){p=Jj(f,q,r)|0;Ba=732;break}h=c[q+28>>2]|0;m=s+108|0;o=c[m>>2]|0;if((c[s+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[s+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=r;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(s,78,h,r,0)|0;break}}else{p=Jj(f,0,r)|0;Ba=732}while(0);do if((Ba|0)==732){Ba=0;if((p|0)==(r|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=r;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,r,0)|0;break}}while(0);h=(c[ka>>2]|0)+1|0;c[ka>>2]=h;m=s+108|0;o=c[m>>2]|0;if((c[s+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[s+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=r;c[na+(o*20|0)+8>>2]=h;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0}else Di(s,78,r,h,0)|0;a[q+38>>0]=a[q>>0]|0;a[q>>0]=-88;c[q+28>>2]=h;na=q+4|0;c[na>>2]=c[na>>2]&-4097}else Ba=710;while(0);G:do if((Ba|0)==710){Ba=0;h=c[(c[y>>2]|0)+(v<<4)+4>>2]|0;q=v+z|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(f,h,q)|0;break}p=c[ya>>2]|0;h=c[h+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[p+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=q;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break G}else{Di(p,78,h,q,0)|0;break G}}else p=Jj(f,0,q)|0;while(0);if((p|0)==(q|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=q;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,q,0)|0;break}}while(0);v=v+1|0;h=b[ea>>1]|0;if((v|0)>=(h<<16>>16|0))break;else h=u+x|0}}if(!oa){zk(Aa,Ca,E+1|0);h=b[ea>>1]|0}m=h<<16>>16;w=E-m+-1|0;if(t){v=f+23|0;u=t;do{do if((a[u+8>>0]|0)==120){if((a[u+9>>0]|0)!=1)break;h=c[ya>>2]|0;H:do if(!h){o=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[o+76>>1]&8)break;a[v>>0]=1}while(0);I:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))Ba=762;else{h=0;break H}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;h=c[m>>2]|0;if(h|0){c[m>>2]=c[h>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break I}m=o+296|0;h=c[m>>2]|0;if(!h){h=o+292|0;break}else{c[m>>2]=c[h>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break I}}else h=o+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Ba=762}while(0);if((Ba|0)==762){Ba=0;h=_d(o,224,0)|0}if(!h){h=0;break}p=h+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[h>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=h;c[h+8>>2]=o;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=f;c[ya>>2]=h;Di(h,61,0,1,0)|0}while(0);m=c[ua>>2]|0;m=c[((m|0)==0?f:m)+260>>2]|0;J:do if(!m)Ba=772;else while(1){if((c[m>>2]|0)==(u|0)?(c[m+12>>2]|0)==(j|0):0)break J;m=c[m+4>>2]|0;if(!m){Ba=772;break}}while(0);if((Ba|0)==772){Ba=0;m=Nm(f,u,Ca,j)|0;if(!m)break}if(!(c[u>>2]|0))s=0;else{s=(c[f>>2]|0)+32|0;s=bw(c[s>>2]|0,c[s+4>>2]|0,13)|0;L()|0;s=s&1^1}o=(c[ka>>2]|0)+1|0;c[ka>>2]=o;q=c[m+8>>2]|0;r=h+108|0;m=c[r>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[r>>2]=m+1;na=c[h+104>>2]|0;a[na+(m*20|0)>>0]=45;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=w;c[na+(m*20|0)+8>>2]=K;c[na+(m*20|0)+12>>2]=o;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else m=Di(h,45,w,K,o)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[h+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(h,o+(m*20|0)|0,q,-4);break}if(!q)break;c[o+(m*20|0)+16>>2]=q;a[p>>0]=-4}while(0);m=c[r>>2]|0;if((m|0)<=0)break;b[(c[h+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=s}while(0);u=c[u+32>>2]|0}while((u|0)!=0);h=b[ea>>1]|0;m=h<<16>>16}o=m+1|0;if(h<<16>>16){h=f+28|0;if((c[h>>2]|0)>(m|0))break;c[h>>2]=o;c[f+32>>2]=E;break}if(!E)break;h=f+19|0;m=a[h>>0]|0;if((m&255)>=8)break;a[h>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=E}while(0);do if(!oa){do if(c[Z>>2]|0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;oa=c[Aa+104>>2]|0;a[oa+(m*20|0)>>0]=73;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=da;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0;break}else{Di(Aa,73,0,da,0)|0;break}}while(0);K:do if((S|0)>-1){L:do if(P){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;pa=c[Aa+104>>2]|0;a[pa+(m*20|0)>>0]=90;b[pa+(m*20|0)+2>>1]=0;c[pa+(m*20|0)+4>>2]=U;c[pa+(m*20|0)+8>>2]=S;c[pa+(m*20|0)+12>>2]=fa;c[pa+(m*20|0)+16>>2]=0;a[pa+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,S,fa)|0;break}}else{if(va){h=S+T|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=78;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=h;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(Aa,78,h,fa,0)|0;break}}m=c[Ea+4+(S*20|0)>>2]|0;h=a[m>>0]|0;do if(h<<24>>24==114){if(c[Z>>2]|0)break;h=c[xa>>2]|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;I=c[Aa+104>>2]|0;a[I+(o*20|0)>>0]=121;b[I+(o*20|0)+2>>1]=0;c[I+(o*20|0)+4>>2]=h;c[I+(o*20|0)+8>>2]=fa;c[I+(o*20|0)+12>>2]=F;c[I+(o*20|0)+16>>2]=0;a[I+(o*20|0)+1>>0]=0;I=1;break K}else{Di(Aa,121,h,fa,F)|0;I=1;break K}}while(0);do if(m){if(h<<24>>24!=-88){p=Jj(f,m,fa)|0;break}p=c[ya>>2]|0;h=c[m+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[p+104>>2]|0;a[pa+(o*20|0)>>0]=78;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=h;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break L}else{Di(p,78,h,fa,0)|0;break L}}else p=Jj(f,0,fa)|0;while(0);if((p|0)==(fa|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[h+104>>2]|0;a[pa+(o*20|0)>>0]=79;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=p;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,fa,0)|0;break}}while(0);q=Aa+108|0;o=c[q>>2]|0;do if(c[Z>>2]|0){m=o+2|0;h=Aa+112|0;if((c[h>>2]|0)>(o|0)){c[q>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=50;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=fa;c[pa+(o*20|0)+8>>2]=m;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(Aa,50,fa,m,0)|0;break}}else{h=Aa+112|0;if((c[h>>2]|0)>(o|0)){c[q>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=51;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=fa;c[pa+(o*20|0)+8>>2]=0;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0}else o=Di(Aa,51,fa,0,0)|0;m=c[xa>>2]|0;p=c[q>>2]|0;if((c[h>>2]|0)>(p|0)){c[q>>2]=p+1;pa=c[Aa+104>>2]|0;a[pa+(p*20|0)>>0]=121;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=fa;c[pa+(p*20|0)+12>>2]=F;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0}else Di(Aa,121,m,fa,F)|0;p=c[q>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))m=(c[Aa+104>>2]|0)+(((o|0)<0?p+-1|0:o)*20|0)|0;else m=59308;c[m+8>>2]=p}while(0);m=c[q>>2]|0;if((c[h>>2]|0)>(m|0)){c[q>>2]=m+1;I=c[Aa+104>>2]|0;a[I+(m*20|0)>>0]=15;b[I+(m*20|0)+2>>1]=0;c[I+(m*20|0)+4>>2]=fa;c[I+(m*20|0)+8>>2]=0;c[I+(m*20|0)+12>>2]=0;c[I+(m*20|0)+16>>2]=0;a[I+(m*20|0)+1>>0]=0;I=0;break}else{Di(Aa,15,fa,0,0)|0;I=0;break}}else if(!(c[Z>>2]|pa)){h=c[xa>>2]|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;I=c[Aa+104>>2]|0;a[I+(o*20|0)>>0]=121;b[I+(o*20|0)+2>>1]=0;c[I+(o*20|0)+4>>2]=h;c[I+(o*20|0)+8>>2]=fa;c[I+(o*20|0)+12>>2]=F;c[I+(o*20|0)+16>>2]=0;a[I+(o*20|0)+1>>0]=0;I=1;break}else{Di(Aa,121,h,fa,F)|0;I=1;break}}else{h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;I=c[Aa+104>>2]|0;a[I+(m*20|0)>>0]=73;b[I+(m*20|0)+2>>1]=0;c[I+(m*20|0)+4>>2]=0;c[I+(m*20|0)+8>>2]=fa;c[I+(m*20|0)+12>>2]=0;c[I+(m*20|0)+16>>2]=0;a[I+(m*20|0)+1>>0]=0;I=0;break}else{Di(Aa,73,0,fa,0)|0;I=0;break}}while(0);do if((F|0)>0){h=c[ya>>2]|0;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[h+104>>2]|0;a[pa+(o*20|0)>>0]=-105;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=F;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(h,151,F,fa,0)|0;break}}while(0);if((b[ea>>1]|0)>0){C=Ca+40|0;D=Aa+108|0;E=Aa+112|0;F=Aa+104|0;H=Ca+4|0;u=(J|0)==0;v=f+23|0;w=i+4|0;x=ta+20|0;y=ta+4|0;z=ta+8|0;A=ta+24|0;B=(T|0)==(_|0);h=0;s=0;do{r=s+_|0;M:do if((s|0)==(b[C>>1]|0)){m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;pa=c[F>>2]|0;a[pa+(m*20|0)>>0]=74;b[pa+(m*20|0)+2>>1]=0;c[pa+(m*20|0)+4>>2]=r;c[pa+(m*20|0)+8>>2]=0;c[pa+(m*20|0)+12>>2]=0;c[pa+(m*20|0)+16>>2]=0;a[pa+(m*20|0)+1>>0]=0;break}else{Di(Aa,74,r,0,0)|0;break}}else{N:do if(qa)if(!(a[(c[H>>2]|0)+(s<<4)+15>>0]&2)){m=s-h|0;Ba=867;break}else{h=h+1|0;break}else{o=c[w>>2]|0;if((o|0)<=0){m=0;Ba=867;break}p=c[i>>2]|0;m=0;while(1){if((c[p+(m<<3)+4>>2]|0)==(s|0)){Ba=867;break N}m=m+1|0;if((m|0)>=(o|0)){Ba=867;break}}}while(0);do if((Ba|0)==867){Ba=0;if(u|(m|0)<0)break;if(Y?(m|0)>=(c[w>>2]|0):0)break;if(P){o=c[D>>2]|0;if((c[E>>2]|0)>(o|0)){c[D>>2]=o+1;pa=c[F>>2]|0;a[pa+(o*20|0)>>0]=90;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=U;c[pa+(o*20|0)+8>>2]=m;c[pa+(o*20|0)+12>>2]=r;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break M}else{Di(Aa,90,U,m,r)|0;break M}}if(va){if(B)break M;m=m+T|0;o=c[D>>2]|0;if((c[E>>2]|0)>(o|0)){c[D>>2]=o+1;pa=c[F>>2]|0;a[pa+(o*20|0)>>0]=79;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=m;c[pa+(o*20|0)+8>>2]=r;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break M}else{Di(Aa,79,m,r,0)|0;break M}}m=c[Ea+4+(m*20|0)>>2]|0;do if(m){if((a[m>>0]|0)!=-88){q=Jj(f,m,r)|0;break}q=c[ya>>2]|0;m=c[m+28>>2]|0;o=q+108|0;p=c[o>>2]|0;if((c[q+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[q+104>>2]|0;a[pa+(p*20|0)>>0]=78;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(q,78,m,r,0)|0;break M}}else q=Jj(f,0,r)|0;while(0);if((q|0)==(r|0))break M;m=c[ya>>2]|0;if(!m)break M;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[m+104>>2]|0;a[pa+(p*20|0)>>0]=79;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=q;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(m,79,q,r,0)|0;break M}}while(0);m=c[(c[H>>2]|0)+(s<<4)+4>>2]|0;do if(!(a[v>>0]|0)){if(m|0){Ba=876;break}q=Jj(f,0,r)|0}else{a[x>>0]=2;c[y>>2]=127;c[z>>2]=128;c[A>>2]=0;if(m){_j(ta,m)|0;if(!(a[x>>0]|0)){Ba=876;break}}Nj(f,m,r)|0;break M}while(0);do if((Ba|0)==876){Ba=0;if((a[m>>0]|0)!=-88){q=Jj(f,m,r)|0;break}q=c[ya>>2]|0;m=c[m+28>>2]|0;o=q+108|0;p=c[o>>2]|0;if((c[q+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[q+104>>2]|0;a[pa+(p*20|0)>>0]=78;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(q,78,m,r,0)|0;break M}}while(0);if((q|0)==(r|0))break;m=c[ya>>2]|0;if(!m)break;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[m+104>>2]|0;a[pa+(p*20|0)>>0]=79;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=q;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break}else{Di(m,79,q,r,0)|0;break}}while(0);s=s+1|0}while((s|0)<(b[ea>>1]|0))}if(!(c[Z>>2]|0)){Tm(f,Ca,R,c[xa>>2]|0,c[wa>>2]|0,da,0,S>>>31&255^1,j&255,K,ta,0,k);Lm(f,Ca,0,da,0,0);do if(!(c[ta>>2]|0))h=1;else{if(t|0){h=0;break}if((c[O>>2]&16384|0)==0&0==0){h=1;break}s=c[Ca>>2]|0;p=c[ra>>2]|0;q=c[p+68>>2]|0;if(!q){m=p+60|0;h=p+64|0}else{m=a[s>>0]|0;if(!(m<<24>>24))h=0;else{h=0;o=s;do{o=o+1|0;h=G(h+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[o>>0]|0}while(m<<24>>24!=0)}h=(h>>>0)%((c[p+56>>2]|0)>>>0)|0;m=q+(h<<3)|0;h=q+(h<<3)+4|0}m=c[m>>2]|0;O:do if(!m)h=59292;else{r=d[208+(d[s>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;m=m+-1|0;p=c[h+12>>2]|0;ta=a[p>>0]|0;o=(d[208+(ta&255)>>0]|0)-r|0;if(!(ta<<24>>24==0|(o|0)!=0)){q=s;do{p=p+1|0;q=q+1|0;ta=a[p>>0]|0;o=(d[208+(ta&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(ta<<24>>24==0|(o|0)!=0))}if(!o)break O;if(!m){h=59292;break}}}while(0);h=(c[h+8>>2]|0)==0&1}while(0);Um(f,Ca,c[xa>>2]|0,c[wa>>2]|0,da,R,0,I,h);break}h=c[Ca+64>>2]|0;P:do if(!h)h=0;else while(1){if((c[h>>2]|0)==(Fa|0))break P;h=c[h+24>>2]|0;if(!h){h=0;break}}while(0);s=c[ua>>2]|0;s=(s|0)==0?f:s;r=s+204|0;q=c[r>>2]|0;p=s+252|0;Q:do if((q|0)>0){m=c[p>>2]|0;o=0;do{if((c[m+(o<<2)>>2]|0)==(Ca|0))break Q;o=o+1|0}while((o|0)<(q|0));o=p;Ba=920}else{o=p;m=c[p>>2]|0;Ba=920}while(0);R:do if((Ba|0)==920){do if(!(mb()|0)){xa=(q<<2)+4|0;m=sb(m,xa,((xa|0)<0)<<31>>31)|0;if(!m)break;c[o>>2]=m;xa=c[r>>2]|0;c[r>>2]=xa+1;c[m+(xa<<2)>>2]=Ca;break R}while(0);m=c[s>>2]|0;o=m+81|0;if(a[o>>0]|0)break;if(a[m+82>>0]|0)break;a[o>>0]=1;if((c[m+180>>2]|0)>0)c[m+264>>2]=1;xa=m+272|0;c[xa>>2]=(c[xa>>2]|0)+1;m=c[m+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);o=(b[ea>>1]|0)+2|0;q=Aa+108|0;m=c[q>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[q>>2]=m+1;xa=c[Aa+104>>2]|0;a[xa+(m*20|0)>>0]=10;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=1;c[xa+(m*20|0)+8>>2]=o;c[xa+(m*20|0)+12>>2]=da;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0}else m=Di(Aa,10,1,o,da)|0;do if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[q>>2]|0)+-1|0;o=c[Aa+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(m*20|0)|0,h,-12);break}if(!h)break;c[o+(m*20|0)+16>>2]=h;a[p>>0]=-12;xa=h+12|0;c[xa>>2]=(c[xa>>2]|0)+1}while(0);h=c[q>>2]|0;if((h|0)>0)b[(c[Aa+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=(j|0)==11?2:j&65535;xa=c[ua>>2]|0;a[((xa|0)==0?f:xa)+21>>0]=1}while(0);do if(n|0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;xa=c[Aa+104>>2]|0;a[xa+(m*20|0)>>0]=83;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=n;c[xa+(m*20|0)+8>>2]=1;c[xa+(m*20|0)+12>>2]=0;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0;break}else{Di(Aa,83,n,1,0)|0;break}}while(0);if(sa){u=fa+-1-(b[ea>>1]|0)|0;v=f+23|0;do{do if((a[t+8>>0]|0)==120){if((a[t+9>>0]|0)!=2)break;h=c[ya>>2]|0;S:do if(!h){o=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[o+76>>1]&8)break;a[v>>0]=1}while(0);T:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))Ba=982;else{h=0;break S}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;h=c[m>>2]|0;if(h|0){c[m>>2]=c[h>>2];xa=o+284|0;c[xa>>2]=(c[xa>>2]|0)+1;break T}m=o+296|0;h=c[m>>2]|0;if(!h){h=o+292|0;break}else{c[m>>2]=c[h>>2];xa=o+284|0;c[xa>>2]=(c[xa>>2]|0)+1;break T}}else h=o+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Ba=982}while(0);if((Ba|0)==982){Ba=0;h=_d(o,224,0)|0}if(!h){h=0;break}p=h+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[h>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=h;c[h+8>>2]=o;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=f;c[ya>>2]=h;Di(h,61,0,1,0)|0}while(0);m=c[ua>>2]|0;m=c[((m|0)==0?f:m)+260>>2]|0;U:do if(!m)Ba=992;else while(1){if((c[m>>2]|0)==(t|0)?(c[m+12>>2]|0)==(j|0):0)break U;m=c[m+4>>2]|0;if(!m){Ba=992;break}}while(0);if((Ba|0)==992){Ba=0;m=Nm(f,t,Ca,j)|0;if(!m)break}if(!(c[t>>2]|0))s=0;else{s=(c[f>>2]|0)+32|0;s=bw(c[s>>2]|0,c[s+4>>2]|0,13)|0;L()|0;s=s&1^1}o=(c[ka>>2]|0)+1|0;c[ka>>2]=o;q=c[m+8>>2]|0;r=h+108|0;m=c[r>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[r>>2]=m+1;xa=c[h+104>>2]|0;a[xa+(m*20|0)>>0]=45;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=u;c[xa+(m*20|0)+8>>2]=K;c[xa+(m*20|0)+12>>2]=o;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0}else m=Di(h,45,u,K,o)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[h+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(h,o+(m*20|0)|0,q,-4);break}if(!q)break;c[o+(m*20|0)+16>>2]=q;a[p>>0]=-4}while(0);m=c[r>>2]|0;if((m|0)<=0)break;b[(c[h+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=s}while(0);t=c[t+32>>2]|0}while((t|0)!=0)}m=c[Aa+12>>2]|0;h=0-M|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Aa,h);else c[(c[m+64>>2]|0)+(h<<2)>>2]=c[Aa+108>>2];if(!P){if(!va)break;h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;j=c[Aa+104>>2]|0;a[j+(m*20|0)>>0]=11;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=0;c[j+(m*20|0)+8>>2]=N;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(Aa,11,0,N,0)|0;m=c[h>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((Q|0)<0?m+-1|0:Q)*20|0)|0;else h=59308;c[h+8>>2]=m;break}o=Aa+108|0;h=c[o>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(h|0)){c[o>>2]=h+1;j=c[Aa+104>>2]|0;a[j+(h*20|0)>>0]=5;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=U;c[j+(h*20|0)+8>>2]=N;c[j+(h*20|0)+12>>2]=0;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0}else Di(Aa,5,U,N,0)|0;m=c[o>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((Q|0)<0?m+-1|0:Q)*20|0)|0;else h=59308;c[h+8>>2]=m;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;j=c[Aa+104>>2]|0;a[j+(m*20|0)>>0]=117;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=U;c[j+(m*20|0)+8>>2]=0;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break}else{Di(Aa,117,U,0,0)|0;break}}while(0);do if(!(a[za>>0]|0)){if(c[f+120>>2]|0)break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!n)Ba=1038;else{h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;f=c[Aa+104>>2]|0;a[f+(m*20|0)>>0]=81;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=n;c[f+(m*20|0)+8>>2]=1;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(Aa,81,n,1,0)|0;Wi(Aa,1);if(a[(c[Aa>>2]|0)+81>>0]|0){Ba=1038;break}yc(c[Aa+116>>2]|0,44972,-1,1,0)|0;Ba=1038}}else{l=0;Ba=1038}}else{l=0;Ba=1038}while(0);if((Ba|0)==1038){qi(Fa,g);if(!Ea){h=Da;r=l;break}}ri(Fa,Ea);h=Da;r=l}else Ba=1037;while(0);if((Ba|0)==1037){qi(Fa,g);r=0}do if(k|0){l=c[k>>2]|0;if(l|0)ri(Fa,l);l=c[k+4>>2]|0;if(l|0)ni(Fa,l);l=c[k+8>>2]|0;if(l|0)ri(Fa,l);l=c[k+12>>2]|0;if(l|0)ni(Fa,l);if(Fa|0){if(c[Fa+480>>2]|0){Xd(Fa,k);break}g=k;if((c[Fa+304>>2]|0)>>>0<=g>>>0?(c[Fa+308>>2]|0)>>>0>g>>>0:0){g=Fa+300|0;c[k>>2]=c[g>>2];c[g>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{g=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(h|0)pi(Fa,h,1);do if(i|0){q=i+4|0;l=c[i>>2]|0;V:do if((c[q>>2]|0)>0){m=Fa+480|0;n=Fa+304|0;o=Fa+308|0;p=Fa+300|0;if(!Fa){h=0;while(1){l=c[l+(h<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);h=h+1|0;l=c[i>>2]|0;if((h|0)>=(c[q>>2]|0))break V}}h=0;do{l=c[l+(h<<3)>>2]|0;do if(l|0){if(c[m>>2]|0){Xd(Fa,l);break}k=l;if((c[n>>2]|0)>>>0<=k>>>0?(c[o>>2]|0)>>>0>k>>>0:0){c[l>>2]=c[p>>2];c[p>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);h=h+1|0;l=c[i>>2]|0}while((h|0)<(c[q>>2]|0))}while(0);W:do if(l){do if(Fa|0){h=Fa+480|0;if(!(c[h>>2]|0)){m=l;if((c[Fa+304>>2]|0)>>>0>m>>>0)break;if((c[Fa+308>>2]|0)>>>0<=m>>>0)break;k=Fa+300|0;c[l>>2]=c[k>>2];c[k>>2]=l}else Xd(Fa,l);l=h;Ba=1093;break W}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);Ba=1091;break}else{Ba=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);Ba=1091;break}}else Ba=1091;while(0);if((Ba|0)==1091)if(Fa){l=Fa+480|0;Ba=1093}if((Ba|0)==1093){if(c[l>>2]|0){Xd(Fa,i);break}k=i;if((c[Fa+304>>2]|0)>>>0<=k>>>0?(c[Fa+308>>2]|0)>>>0>k>>>0:0){k=Fa+300|0;c[i>>2]=c[k>>2];c[k>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!r){Ra=Ga;return}if(Fa|0){if(c[Fa+480>>2]|0){Xd(Fa,r);Ra=Ga;return}k=r;if((c[Fa+304>>2]|0)>>>0<=k>>>0?(c[Fa+308>>2]|0)>>>0>k>>>0:0){Fa=Fa+300|0;c[r>>2]=c[Fa>>2];c[Fa>>2]=r;Ra=Ga;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);Ra=Ga;return}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);Ra=Ga;return}}function wj(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=c[b>>2]|0;if(!f){a:do if(!p){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](8)|0;o=25;break}f=Wa[c[29356>>2]&127](8)|0;if((c[14985]|0)>>>0<8)c[14985]=8;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){n=c[14978]|0;m=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){p=0;return p|0}h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){p=0;return p|0}}else{do if((e[p+276>>1]|0)>=8){h=p+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=25;break a}h=p+296|0;f=c[h>>2]|0;if(!f){f=p+292|0;break}else{c[h>>2]=c[f>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=25;break a}}else f=p+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(p,8,0)|0;o=25}while(0);if((o|0)==25)if(!f){p=0;return p|0}n=f;m=n;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;n=n+4|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0}m=c[f>>2]|0;n=f+4|0;i=c[n>>2]|0;h=((i|0)<0)<<31>>31;l=Sv(i|0,h|0,-1,-1)|0;b:do if((l&i|0)==0&((L()|0)&h|0)==0){j=(i|0)==0;k=cw(i|0,h|0,4)|0;l=L()|0;k=j?8:k;l=j?0:l;c:do if(!m){if(c[p+272>>2]|0){if(a[p+81>>0]|0)break}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[p+276>>1]|0)>>>0:0))){j=p+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=45;break c}j=p+296|0;h=c[j>>2]|0;if(!h){h=p+292|0;break}else{c[j>>2]=c[h>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=45;break c}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(p,k,l)|0;o=45}else{o=m;if((c[p+304>>2]|0)>>>0<=o>>>0?(c[p+308>>2]|0)>>>0>o>>>0:0){if(!(l>>>0>0|((l|0)==0?k>>>0>(e[p+276>>1]|0)>>>0:0))){h=m;o=48;break b}h=Zd(p,m,k,l)|0;o=45;break}h=Zd(p,m,k,l)|0;o=45}while(0);if((o|0)==45){if(h|0){o=48;break}i=c[n>>2]|0}c[f>>2]=m;h=m}else{h=m;o=48}while(0);if((o|0)==48){j=h+(i<<3)|0;m=j;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;j=j+4|0;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;j=(c[n>>2]|0)+1|0;c[n>>2]=j;c[f>>2]=h;if((i|0)<0)i=j;else{k=qj(p,g)|0;c[(c[f>>2]|0)+(i<<3)>>2]=k;if((k|0)==0|(d[b+200>>0]|0)<2){p=f;return p|0}j=c[b>>2]|0;d:do if(!j){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](16)|0;o=114;break}h=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){p=c[14978]|0;n=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=p>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){p=f;return p|0}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){p=f;return p|0}}else{do if((e[j+276>>1]|0)>=16){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];o=j+284|0;c[o>>2]=(c[o>>2]|0)+1;o=114;break d}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];o=j+284|0;c[o>>2]=(c[o>>2]|0)+1;o=114;break d}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,16,0)|0;o=114}while(0);if((o|0)==114)if(!h){p=f;return p|0}i=h+4|0;j=i+12|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));c[h>>2]=k;o=g;g=c[o+4>>2]|0;p=h+4|0;c[p>>2]=c[o>>2];c[p+4>>2]=g;p=b+272|0;c[h+12>>2]=c[p>>2];c[p>>2]=h;p=f;return p|0}}e:do if((i|0)>0){j=p+480|0;k=p+304|0;l=p+308|0;m=p+300|0;if(!p){i=0;while(1){h=c[h+(i<<3)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);i=i+1|0;h=c[f>>2]|0;if((i|0)>=(c[n>>2]|0))break e}}i=0;do{h=c[h+(i<<3)>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(p,h);break}g=h;if((c[k>>2]|0)>>>0<=g>>>0?(c[l>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;h=c[f>>2]|0}while((i|0)<(c[n>>2]|0))}while(0);f:do if(h){do if(p|0){i=p+480|0;if(!(c[i>>2]|0)){j=h;if((c[p+304>>2]|0)>>>0>j>>>0)break;if((c[p+308>>2]|0)>>>0<=j>>>0)break;g=p+300|0;c[h>>2]=c[g>>2];c[g>>2]=h}else Xd(p,h);h=i;o=81;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);o=79;break}else{o=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);o=79;break}}else o=79;while(0);if((o|0)==79)if(p){h=p+480|0;o=81}if((o|0)==81){if(c[h>>2]|0){Xd(p,f);p=0;return p|0}g=f;if((c[p+304>>2]|0)>>>0<=g>>>0?(c[p+308>>2]|0)>>>0>g>>>0:0){p=p+300|0;c[f>>2]=c[p>>2];c[p>>2]=f;p=0;return p|0}}if(!f){p=0;return p|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);p=0;return p|0}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);p=0;return p|0}return 0}function xj(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+176|0;r=w+96|0;o=w+88|0;n=w+80|0;q=w+136|0;p=w;s=w+104|0;u=f+8|0;i=c[u>>2]|0;a:do if(!i){m=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))l=15;else break a;else{do if((e[m+276>>1]|0)>=224){i=m+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];k=m+284|0;c[k>>2]=(c[k>>2]|0)+1;k=j;break b}i=m+296|0;j=c[i>>2]|0;if(!j){i=m+292|0;break}else{c[i>>2]=c[j>>2];k=m+284|0;c[k>>2]=(c[k>>2]|0)+1;k=j;break b}}else i=m+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;l=15}while(0);if((l|0)==15)k=_d(m,224,0)|0;if(k|0){i=k+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[k>>2]=m;i=m+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=k;c[k+8>>2]=j;c[k+4>>2]=0;c[i>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[u>>2]=k;Di(k,61,0,1,0)|0;t=k;l=20}}else{t=i;l=20}while(0);do if((l|0)==20){if(g){i=c[f>>2]|0;if(c[g+4>>2]|0){if(a[i+165>>0]|0){cd(f,39404,n);break}i=wk(i,g)|0;if((i|0)<0){c[o>>2]=g;cd(f,39421,o);break}}else i=d[i+164>>0]|0;if((i|0)>-1&(i|0)!=1)n=i;else break}else n=0;do if(h){i=s+8|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;i=p;j=i+80|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[s>>2]=f;c[s+4>>2]=p;j=s+24|0;b[j>>1]=0;c[q>>2]=f;c[q+4>>2]=125;c[q+8>>2]=126;c[q+12>>2]=0;c[q+24>>2]=s;k=h+24|0;i=f+208|0;p=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=p;i=c[(c[f>>2]|0)+120>>2]|0;if((i|0)<(p|0)){c[r>>2]=i;cd(f,41637,r);i=0;break}_j(q,h)|0;i=c[q>>2]|0;r=i+208|0;c[r>>2]=(c[r>>2]|0)-(c[k>>2]|0);r=h+4|0;c[r>>2]=c[r>>2]|b[j>>1]&-32752&65535;if((c[s+20>>2]|0)>0){i=0;break}if((c[i+36>>2]|0)<1){s=f+44|0;i=(c[s>>2]|0)+1|0;c[s>>2]=i;if((a[h>>0]|0)==-88){j=c[u>>2]|0;k=c[h+28>>2]|0;l=j+108|0;m=c[l>>2]|0;if((c[j+112>>2]|0)>(m|0)){c[l>>2]=m+1;v=c[j+104>>2]|0;a[v+(m*20|0)>>0]=78;b[v+(m*20|0)+2>>1]=0;c[v+(m*20|0)+4>>2]=k;c[v+(m*20|0)+8>>2]=i;c[v+(m*20|0)+12>>2]=0;c[v+(m*20|0)+16>>2]=0;a[v+(m*20|0)+1>>0]=0;break}else{Di(j,78,k,i,0)|0;break}}l=Jj(f,h,i)|0;if((l|0)!=(i|0)?(v=c[u>>2]|0,(v|0)!=0):0){j=v+108|0;k=c[j>>2]|0;if((c[v+112>>2]|0)>(k|0)){c[j>>2]=k+1;v=c[v+104>>2]|0;a[v+(k*20|0)>>0]=79;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=l;c[v+(k*20|0)+8>>2]=i;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0;break}else{Di(v,79,l,i,0)|0;break}}}else i=0}else i=0;while(0);j=t+108|0;k=c[j>>2]|0;if((c[t+112>>2]|0)>(k|0)){c[j>>2]=k+1;v=c[t+104>>2]|0;a[v+(k*20|0)>>0]=8;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=n;c[v+(k*20|0)+8>>2]=i;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0}else Di(t,8,n,i,0)|0;i=1<<n;v=t+152|0;c[v>>2]=c[v>>2]|i;if((n|0)!=1?a[(c[(c[(c[t>>2]|0)+16>>2]|0)+(n<<4)+4>>2]|0)+9>>0]|0:0){v=t+156|0;c[v>>2]=c[v>>2]|i}}while(0);if(!h){Ra=w;return}ni(c[f>>2]|0,h);Ra=w;return}
- function Vi(a,e){a=a|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=c[e+8>>2]|0;if(f|0){j=(a|0)==0;l=e+56|0;m=a+480|0;n=a+304|0;o=a+308|0;i=a+300|0;do{h=f;f=c[f+20>>2]|0;if(!(!j?(c[m>>2]|0)!=0:0))p=5;if((p|0)==5?(0,(c[l>>2]|0)==0):0)mi((c[h+24>>2]|0)+24|0,c[h>>2]|0,0)|0;g=c[h+36>>2]|0;if(g|0)ni(a,g);g=c[h+40>>2]|0;if(g|0)ri(a,g);g=c[h+16>>2]|0;do if(g|0){if(!j){if(c[m>>2]|0){Xd(a,g);break}p=g;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[g>>2]=c[i>>2];c[i>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);p=h+55|0;do if(((d[p>>0]|d[p+1>>0]<<8)&16)!=0?(k=c[h+32>>2]|0,(k|0)!=0):0){if(!j){if(c[m>>2]|0){Xd(a,k);p=33;break}p=k;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[k>>2]=c[i>>2];c[i>>2]=k;p=33;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);p=32;break}else{p=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);p=32;break}}else p=32;while(0);if((p|0)==32)if(j)p=38;else p=33;do if((p|0)==33){p=0;if(c[m>>2]|0){Xd(a,h);break}g=h;if((c[n>>2]|0)>>>0<=g>>>0?(c[o>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[i>>2];c[i>>2]=h}else p=38}while(0);do if((p|0)==38){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0)}while((f|0)!=0)}f=c[e+16>>2]|0;if(f|0){k=(a|0)==0;l=a+480|0;m=e+72|0;n=a+304|0;o=a+308|0;j=a+300|0;i=f;while(1){if(!(!k?(c[l>>2]|0)!=0:0)){h=i+16|0;f=c[h>>2]|0;g=i+12|0;if(!f){p=c[g>>2]|0;mi((c[m>>2]|0)+56|0,c[((p|0)==0?i:p)+8>>2]|0,p)|0}else c[f+12>>2]=c[g>>2];f=c[g>>2]|0;if(f|0)c[f+16>>2]=c[h>>2]}h=c[i+28>>2]|0;do if(h|0){g=c[h+28>>2]|0;f=c[g+16>>2]|0;if(f|0)ni(a,f);f=c[g+20>>2]|0;if(f|0)ri(a,f);f=c[g+8>>2]|0;if(f|0)pi(a,f,1);f=c[h+12>>2]|0;if(f|0)ni(a,f);if(!k){if(c[l>>2]|0){Xd(a,h);break}p=h;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[h>>2]=c[j>>2];c[j>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[i+32>>2]|0;a:do if(h){g=c[h+28>>2]|0;f=c[g+16>>2]|0;if(f|0)ni(a,f);f=c[g+20>>2]|0;if(f|0)ri(a,f);f=c[g+8>>2]|0;if(f|0)pi(a,f,1);f=c[h+12>>2]|0;if(f|0)ni(a,f);do if(!k){if(!(c[l>>2]|0)){f=h;if((c[n>>2]|0)>>>0>f>>>0)break;if((c[o>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[j>>2];c[j>>2]=h}else Xd(a,h);f=c[i+4>>2]|0;p=89;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);p=88;break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);p=88;break}}else p=88;while(0);if((p|0)==88){f=c[i+4>>2]|0;if(k)p=94;else p=89}do if((p|0)==89){p=0;if(c[l>>2]|0){Xd(a,i);break}h=i;if((c[n>>2]|0)>>>0<=h>>>0?(c[o>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[j>>2];c[j>>2]=i}else p=94}while(0);do if((p|0)==94){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!f)break;else i=f}}m=e+4|0;g=c[m>>2]|0;do if(g|0){n=e+42|0;b:do if((b[n>>1]|0)>0){i=a+480|0;j=a+304|0;k=a+308|0;l=a+300|0;if(!a){h=0;while(1){f=c[g>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[g+4>>2]|0;if(f|0)ni(0,f);f=c[g+8>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);h=h+1|0;if((h|0)>=(b[n>>1]|0))break b;else g=g+16|0}}h=0;while(1){f=c[g>>2]|0;do if(f|0){if(c[i>>2]|0){Xd(a,f);break}o=f;if((c[j>>2]|0)>>>0<=o>>>0?(c[k>>2]|0)>>>0>o>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[g+4>>2]|0;if(f|0)ni(a,f);f=c[g+8>>2]|0;do if(f|0){if(c[i>>2]|0){Xd(a,f);break}o=f;if((c[j>>2]|0)>>>0<=o>>>0?(c[k>>2]|0)>>>0>o>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);h=h+1|0;if((h|0)>=(b[n>>1]|0))break;else g=g+16|0}}while(0);f=c[m>>2]|0;if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}}while(0);f=c[e>>2]|0;do if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+20>>2]|0;do if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+12>>2]|0;if(f|0)pi(a,f,1);f=c[e+24>>2]|0;if(f|0)ri(a,f);n=(a|0)==0;if(!(!n?(c[a+480>>2]|0)!=0:0))p=171;if((p|0)==171?(r=e+64|0,q=c[r>>2]|0,c[r>>2]=0,q|0):0){f=q;do{h=c[f>>2]|0;i=f+24|0;g=f;f=c[i>>2]|0;if(!h){c[r>>2]=g;c[i>>2]=0}else{q=h+360|0;c[i>>2]=c[q>>2];c[q>>2]=g}}while((f|0)!=0)}l=e+60|0;c:do if(c[l>>2]|0){m=e+56|0;d:do if((c[m>>2]|0)>0){h=a+480|0;i=a+304|0;j=a+308|0;k=a+300|0;if(n){f=0;while(1){do if((f|0)!=1?(s=c[(c[l>>2]|0)+(f<<2)>>2]|0,s|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{t=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);f=f+1|0;if((f|0)>=(c[m>>2]|0))break d}}f=0;do{e:do if((f|0)!=1?(t=c[(c[l>>2]|0)+(f<<2)>>2]|0,t|0):0){if(c[h>>2]|0){Xd(a,t);break}g=t;do if((c[i>>2]|0)>>>0<=g>>>0){if((c[j>>2]|0)>>>0<=g>>>0)break;c[t>>2]=c[k>>2];c[k>>2]=t;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{s=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);f=f+1|0}while((f|0)<(c[m>>2]|0))}while(0);f=c[l>>2]|0;if(f){do if(!n){if(!(c[a+480>>2]|0)){g=f;if((c[a+304>>2]|0)>>>0>g>>>0)break;if((c[a+308>>2]|0)>>>0<=g>>>0)break;t=a+300|0;c[f>>2]=c[t>>2];c[t>>2]=f}else Xd(a,f);f=e;p=211;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);p=210;break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);p=210;break}}else p=210}else p=210;while(0);if((p|0)==210)if(!n){f=e;p=211}if((p|0)==211){if(c[a+480>>2]|0){Xd(a,f);return}t=e;if((c[a+304>>2]|0)>>>0<=t>>>0?(c[a+308>>2]|0)>>>0>t>>>0:0){a=a+300|0;c[e>>2]=c[a>>2];c[a>>2]=e;return}else e=f}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{a=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function Wi(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=c[d>>2]|0;r=d+144|0;h=b[r>>1]|0;do if(h<<16>>16){q=d+116|0;g=c[q>>2]|0;a:do if(g|0){p=g+(((h&65535)<<1)*40|0)|0;k=c[g+32>>2]|0;l=k+480|0;h=(k|0)==0;m=k+304|0;n=k+308|0;o=k+300|0;if(c[l>>2]|0){if(h)while(1){do if(c[g+24>>2]|0?(i=c[g+20>>2]|0,i|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{o=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);g=g+40|0;if(g>>>0>=p>>>0)break a}while(1){do if(c[g+24>>2]|0?(j=c[g+20>>2]|0,j|0):0){if(c[l>>2]|0){Xd(k,j);break}i=j;if((c[m>>2]|0)>>>0<=i>>>0?(c[n>>2]|0)>>>0>i>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);g=g+40|0;if(g>>>0>=p>>>0)break a}}if(h)while(1){h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{o=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0;if(g>>>0>=p>>>0)break a}do{h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(!(c[l>>2]|0)){u=j;if((c[m>>2]|0)>>>0<=u>>>0?(c[n>>2]|0)>>>0>u>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{u=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else Xd(k,j);while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0}while(g>>>0<p>>>0)}while(0);g=c[q>>2]|0;if(g|0){if(t|0){if(c[t+480>>2]|0){Xd(t,g);break}u=g;if((c[t+304>>2]|0)>>>0<=u>>>0?(c[t+308>>2]|0)>>>0>u>>>0:0){u=t+300|0;c[g>>2]=c[u>>2];c[u>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);b[r>>1]=f;i=f*80|0;b:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))s=71;else{c[d+116>>2]=0;return}else{do if(!(0<0|(0==0?(e[t+276>>1]|0)>>>0<i>>>0:0))){h=t+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];u=t+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}h=t+296|0;g=c[h>>2]|0;if(!g){g=t+292|0;break}else{c[h>>2]=c[g>>2];u=t+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}}else g=t+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;s=71}while(0);if((s|0)==71)g=_d(t,i,0)|0;c[d+116>>2]=g;if(!((f|0)>0&(g|0)!=0))return;h=f<<1;while(1){c[g+32>>2]=t;b[g+8>>1]=1;c[g+24>>2]=0;if((h|0)>1){h=h+-1|0;g=g+40|0}else break}return}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!b)return;i=(a|0)==0;j=a+480|0;k=a+304|0;l=a+308|0;m=a+300|0;do{h=b;b=c[b+36>>2]|0;d=c[h+16>>2]|0;if(d|0)ni(a,d);d=c[h+20>>2]|0;if(d|0)ri(a,d);d=c[h+8>>2]|0;if(d|0)pi(a,d,1);d=c[h+24>>2]|0;do if(d|0){g=d+4|0;e=c[d>>2]|0;a:do if((c[g>>2]|0)>0){if(i){f=0;while(1){e=c[e+(f<<3)>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);f=f+1|0;e=c[d>>2]|0;if((f|0)>=(c[g>>2]|0))break a}}f=0;do{e=c[e+(f<<3)>>2]|0;do if(e|0){if(c[j>>2]|0){Xd(a,e);break}n=e;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[e>>2]=c[m>>2];c[m>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);f=f+1|0;e=c[d>>2]|0}while((f|0)<(c[g>>2]|0))}while(0);b:do if(e){do if(!i){if(!(c[j>>2]|0)){f=e;if((c[k>>2]|0)>>>0>f>>>0)break;if((c[l>>2]|0)>>>0<=f>>>0)break;c[e>>2]=c[m>>2];c[m>>2]=e}else Xd(a,e);e=41;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);e=40;break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);e=40;break}}else e=40;while(0);if((e|0)==40){e=0;if(!i)e=41}if((e|0)==41){if(c[j>>2]|0){Xd(a,d);break}n=d;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[d>>2]=c[m>>2];c[m>>2]=d;break}}if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{n=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);e=c[h+28>>2]|0;do if(e|0){d=c[e>>2]|0;if(d|0)ri(a,d);d=c[e+4>>2]|0;if(d|0)ni(a,d);d=c[e+8>>2]|0;if(d|0)ri(a,d);d=c[e+12>>2]|0;if(d|0)ni(a,d);if(!i){if(c[j>>2]|0){Xd(a,e);break}n=e;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[e>>2]=c[m>>2];c[m>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=c[h+32>>2]|0;c:do if(d){do if(!i){if(!(c[j>>2]|0)){e=d;if((c[k>>2]|0)>>>0>e>>>0)break;if((c[l>>2]|0)>>>0<=e>>>0)break;c[d>>2]=c[m>>2];c[m>>2]=d}else Xd(a,d);d=h;e=80;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);e=79;break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);e=79;break}}else e=79;while(0);if((e|0)==79)if(i){d=h;e=85}else{d=h;e=80}do if((e|0)==80){e=0;if(c[j>>2]|0){Xd(a,d);break}n=d;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[d>>2]=c[m>>2];c[m>>2]=d}else e=85}while(0);do if((e|0)==85)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{n=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0)}while((b|0)!=0);return}function Yi(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=c[e>>2]|0;a:do if(f){b:while(1){g=a[f>>0]|0;j=c[f+4>>2]|0;if(j&512|0){f=0;break a}if(g<<24>>24==-88)g=d[f+38>>0]|0;else g=g&255;switch((g&255)<<24>>24){case 106:{m=11;break b}case 77:case -94:case -92:{h=c[f+44>>2]|0;if(h|0){m=8;break b}if((g|0)==106){m=11;break b}else m=12;break}case 36:case -90:{f=c[f+12>>2]|0;break}default:m=12}c:do if((m|0)==12){m=0;if(!(j&256)){f=0;break a}g=c[f+12>>2]|0;if(g|0?c[g+4>>2]&256|0:0){f=g;break}i=c[f+16>>2]|0;h=c[f+20>>2]|0;if((j&2048|0)==0&(h|0)!=0?(k=c[h>>2]|0,(k|0)>0):0){g=0;while(1){f=c[h+4+(g*20|0)>>2]|0;g=g+1|0;if(c[f+4>>2]&256|0)break c;if((g|0)>=(k|0)){f=i;break}}}else f=i}while(0);if(!f){f=0;break a}}if((m|0)==8){f=b[f+32>>1]|0;if(f<<16>>16<=-1){f=0;break}f=Zi(l,a[l+78>>0]|0,c[(c[h+4>>2]|0)+(f<<16>>16<<4)+8>>2]|0,0)|0}else if((m|0)==11)f=_i(e,a[l+78>>0]|0,0,c[f+8>>2]|0)|0;if(f){if((c[f+12>>2]|0)==0?(_i(e,a[(c[e>>2]|0)+78>>0]|0,f,c[f>>2]|0)|0)==0:0){e=0;return e|0}}else f=0}else f=0;while(0);e=f;return e|0}function Zi(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!g){g=c[b+8>>2]|0;p=(g|0)==0;b=f&255;b=b+-1|0;b=g+(b*20|0)|0;b=p?0:b;return b|0}p=b+380|0;l=c[b+392>>2]|0;if(!l){j=b+384|0;i=b+388|0}else{j=a[g>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=g;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}i=(i>>>0)%((c[p>>2]|0)>>>0)|0;j=l+(i<<3)|0;i=l+(i<<3)+4|0}j=c[j>>2]|0;a:do if(!j)i=59292;else{n=d[208+(d[g>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=g;do{l=l+1|0;m=m+1|0;q=a[l>>0]|0;k=(d[208+(q&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!j){i=59292;break}}}while(0);i=c[i+8>>2]|0;if(!((h|0)!=0&(i|0)==0)){p=i;b=(p|0)==0;q=f&255;q=q+-1|0;q=p+(q*20|0)|0;q=b?0:q;return q|0}l=(Eu(g)|0)&1073741823;m=l+61|0;b:do if(!b){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;o=39;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){q=c[14978]|0;h=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&h>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i)return 0;j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0)return 0}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<m>>>0:0))){j=b+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=39;break b}j=b+296|0;i=c[j>>2]|0;if(!i){i=b+292|0;break}else{c[j>>2]=c[i>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=39;break b}}else i=b+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(b,m,0)|0;o=39}while(0);if((o|0)==39)if(!i)return 0;gw(i|0,0,m|0)|0;j=i+60|0;c[i>>2]=j;a[i+4>>0]=1;c[i+20>>2]=j;a[i+24>>0]=2;c[i+40>>2]=j;a[i+44>>0]=3;ew(j|0,g|0,l+1|0)|0;j=mi(p,j,i)|0;if(!j){p=i;b=(p|0)==0;q=f&255;q=q+-1|0;q=p+(q*20|0)|0;q=b?0:q;return q|0}i=b+81|0;if((a[i>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[i>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;i=b+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[b+236>>2]|0;if(i|0)c[i+12>>2]=7}if(c[b+480>>2]|0){Xd(b,j);return 0}q=j;if((c[b+304>>2]|0)>>>0<=q>>>0?(c[b+308>>2]|0)>>>0>q>>>0:0){q=b+300|0;c[j>>2]=c[q>>2];c[q>>2]=j;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);return 0}else{q=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);return 0}return 0}function _i(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;r=s;q=c[f>>2]|0;if(!h){h=Zi(q,g,i,0)|0;if(h|0){j=h;n=3}}else{j=h;n=3}if((n|0)==3?c[j+12>>2]|0:0){r=j;Ra=s;return r|0}k=g&255;l=q+248|0;a:do if(c[l>>2]|0){if(i|0){m=(Eu(i)|0)+1|0;b:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))n=16;else break a;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){j=q+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];j=q+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}j=q+296|0;h=c[j>>2]|0;if(!h){h=q+292|0;break}else{c[j>>2]=c[h>>2];j=q+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}}else h=q+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=16}while(0);if((n|0)==16)h=_d(q,m,0)|0;if(h|0){ew(h|0,i|0,m|0)|0;db[c[l>>2]&127](c[q+256>>2]|0,q,k,h);if(c[q+480>>2]|0){Xd(q,h);n=26;break}n=h;if((c[q+304>>2]|0)>>>0<=n>>>0?(c[q+308>>2]|0)>>>0>n>>>0:0){n=q+300|0;c[h>>2]=c[n>>2];c[n>>2]=h;n=26;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);n=26;break}else{n=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);n=26;break}}}}else n=26;while(0);c:do if((n|0)==26?(p=q+252|0,c[p>>2]|0):0){d:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))n=37;else break c;else{do if((e[q+276>>1]|0)>=40){h=q+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];m=q+284|0;c[m>>2]=(c[m>>2]|0)+1;break d}h=q+296|0;j=c[h>>2]|0;if(!j){h=q+292|0;break}else{c[h>>2]=c[j>>2];m=q+284|0;c[m>>2]=(c[m>>2]|0)+1;break d}}else h=q+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=37}while(0);if((n|0)==37)j=_d(q,40,0)|0;if(j|0){h=j;k=h+40|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(k|0));h=j+8|0;b[h>>1]=1;k=j+32|0;c[k>>2]=q;yc(j,i,-1,1,0)|0;l=b[h>>1]|0;if((l&514)==514?(a[j+10>>0]|0)==2:0){o=c[j+16>>2]|0;n=44}else n=42;if((n|0)==42?(l&1)==0:0){o=Gg(j,2)|0;n=44}if((n|0)==44?o|0:0)db[c[p>>2]&127](c[q+256>>2]|0,q,d[q+78>>0]|0,o);if(!((b[h>>1]&9216)==0?!(c[j+24>>2]|0):0))Cg(j);h=c[k>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}p=j;if((c[h+304>>2]|0)>>>0<=p>>>0?(c[h+308>>2]|0)>>>0>p>>>0:0){p=h+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}}while(0);g=Zi(q,g,i,0)|0;do if(g|0){if(c[g+12>>2]|0){r=g;Ra=s;return r|0}p=c[g>>2]|0;o=(p|0)==0;if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;e:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break e;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;h=(h|0)==0?0:h+40|0;if(!(c[h+12>>2]|0)){if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;f:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-n|0;if(!(t<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break f;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;h=(h|0)==0?0:h+20|0;if(!(c[h+12>>2]|0)){if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;g:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-n|0;if(!(t<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break g;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;if(!(c[h+12>>2]|0))break}};c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=0;t=g;Ra=s;return t|0}while(0);c[r>>2]=i;cd(f,38397,r);c[f+12>>2]=257;t=0;Ra=s;return t|0}
- // EMSCRIPTEN_END_FUNCS
- var Va=[GK,jw,kw,lw,mw,nw,ow,pw,qw,rw,sw,tw,uw,vw,ww,xw,yw,zw,Aw,Bw,Cw,Dw,Ew,Fw,Gw,Hw,Iw,Jw,Kw,Lw,Mw,Nw,Ow,Pw,Qw,Rw,Sw,Tw,Uw,Vw,Ww,Xw,Yw,Zw,_w,$w,ax,bx,cx,dx,ex,fx,gx,hx,ix,jx,kx,lx,mx,nx,ox,px,qx,rx,sx,Dv,we,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK];var Wa=[HK,ux,vx,wx,xx,yx,zx,Ax,Bx,Cx,Dx,Ex,Fx,Gx,Hx,Ix,Jx,Kx,Lx,Mx,Nx,Ox,Px,Qx,Rx,Sx,Tx,Ux,Vx,Wx,Xx,Yx,Zx,_x,$x,ay,by,cy,dy,ey,fy,gy,hy,iy,jy,ky,ly,my,ny,oy,py,qy,ry,sy,ty,uy,vy,wy,xy,yy,zy,Ay,By,Cy,Dy,be,le,me,Nu,Bv,Ev,Be,Fe,Ze,Ki,Mi,Oi,Pi,ep,hp,ip,jp,lp,pp,Dq,Eq,Gq,Iq,Jq,Nq,Oq,Pq,Qq,Wq,Hp,Jp,Op,Qp,Sp,Tp,mq,oq,rq,tq,ks,ms,os,ps,Ds,Es,Gs,Is,Js,Ns,Os,Rs,rb,Re,HK,HK,HK,HK,HK,HK,HK,HK,HK,HK];var Xa=[IK,Fy,Gy,Hy,Iy,Jy,Ky,Ly,My,Ny,Oy,Py,Qy,Ry,Sy,Ty,Uy,Vy,Wy,Xy,Yy,Zy,_y,$y,az,bz,cz,dz,ez,fz,gz,hz,iz,jz,kz,lz,mz,nz,oz,pz,qz,rz,sz,tz,uz,vz,wz,xz,yz,zz,Az,Bz,Cz,Dz,Ez,Fz,Gz,Hz,Iz,Jz,Kz,Lz,Mz,Nz,Oz,Ob,Pb,Rb,Tb,Ub,ae,Je,Ke,fe,ge,he,ie,je,qe,Qu,Zu,Pu,Xu,yv,Kv,ve,fv,gv,Ou,Ce,De,Ee,Ge,He,Ie,bf,cf,Ji,Li,Ri,gp,Cq,Fq,Lq,Sq,Tq,Uq,Vq,Np,Pp,Vp,js,ls,rs,Cs,Fs,Ls,Ps,Qs,Ue,If,Kf,Yg,Zg,$k,Dk,Ek,Yj,Zj,vl,wl,Gl,Yk,Cm,Dm,Am,Vm,kk,lk,Jk,Hk,Mk,Nk,Ok,_k,xl,Sl,nm,fm,Bm,jo,ko,so,to,_p,$p,Zp,iq,hq,yt,zt,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK];var Ya=[JK,Qz,Rz,Sz,Tz,Uz,Vz,Wz,Xz,Yz,Zz,_z,$z,aA,bA,cA,dA,eA,fA,gA,hA,iA,jA,kA,lA,mA,nA,oA,pA,qA,rA,sA,tA,uA,vA,wA,xA,yA,zA,AA,BA,CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,WA,XA,YA,ZA,Kb,Nb,Qb,Sb,ee,ke,ue,Iu,$u,_u,Cv,Wu,af,Qi,np,qp,Kq,Gp,Up,lq,qq,qs,Ks,Ch,Dh,Eh,Dd,Yr,Xr,as,bs,gs,es,fs,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK];var Za=[KK,$A,aB,bB,cB,dB,eB,fB,gB,hB,iB,jB,kB,lB,mB,nB,oB,pB,qB,rB,sB,tB,uB,vB,wB,xB,yB,zB,AB,BB,CB,DB,EB,FB,GB,HB,IB,JB,KB,LB,MB,NB,OB,PB,QB,RB,SB,TB,UB,VB,WB,XB,YB,ZB,_B,$B,aC,bC,cC,dC,eC,fC,gC,hC,iC,Lb,Mb,oe,se,Mq,Ip,nq,sq,Ms,qf,pf,Ld,fh,ki,aq,bq,kd,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK];var _a=[LK,kC,lC,mC,nC,oC,pC,qC,rC,sC,tC,uC,vC,wC,xC,yC,zC,AC,BC,CC,DC,EC,FC,GC,HC,IC,JC,KC,LC,MC,NC,OC,PC,QC,RC,SC,TC,UC,VC,WC,XC,YC,ZC,_C,$C,aD,bD,cD,dD,eD,fD,gD,hD,iD,jD,kD,lD,mD,nD,oD,pD,qD,rD,sD,tD,Jb,ce,de,ne,re,_e,$e,Ni,Hq,Rq,Rp,ns,Hs,Hl,Dp,gt,ht,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK];var $a=[MK,vD,wD,xD,yD,zD,AD,BD,CD,DD,ED,FD,GD,HD,ID,JD,KD,LD,MD,ND,OD,PD,QD,RD,SD,TD,UD,VD,WD,XD,YD,ZD,_D,$D,aE,bE,cE,dE,eE,fE,gE,hE,iE,jE,kE,lE,mE,nE,oE,pE,qE,rE,sE,tE,uE,vE,wE,xE,yE,zE,AE,BE,CE,DE,EE,Lv,Ii,Aq,Bq,Kp,Mp,pq,uq,is,As,Bs,Xh,Yh,Wh,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK];var ab=[NK,GE,HE,IE,JE,KE,LE,ME,NE,OE,PE,QE,RE,SE,TE,UE,VE,WE,XE,YE,ZE,_E,$E,aF,bF,cF,dF,eF,fF,gF,hF,iF,jF,kF,lF,mF,nF,oF,pF,qF,rF,sF,tF,uF,vF,wF,xF,yF,zF,AF,BF,CF,DF,EF,FF,GF,HF,IF,JF,KF,LF,MF,NF,OF,PF,pe,wn,xn,Wn,Yn,Zn,$n,co,eo,vo,xo,zo,Bo,Eo,Ho,Ko,Lo,Oo,Po,Ro,fp,kp,mp,up,vp,qb,Fp,Qe,ih,vi,dh,ln,Qg,cs,mt,nt,pt,qt,rt,st,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK];var bb=[OK,RF,SF,TF,UF,VF,WF,XF,YF,ZF,_F,$F,aG,bG,cG,dG,eG,fG,gG,hG,iG,jG,kG,lG,mG,nG,oG,pG,qG,rG,sG,tG,uG,vG,wG,xG,yG,zG,AG,BG,CG,DG,EG,FG,GG,HG,IG,JG,KG,LG,MG,NG,OG,PG,QG,RG,SG,TG,UG,VG,WG,XG,YG,ZG,_G,op,tp,Em,Pk,Zk,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK];var cb=[PK,aH,bH,cH,dH,eH,fH,gH,hH,iH,jH,kH,lH,mH,nH,oH,pH,qH,rH,sH,tH,uH,vH,wH,xH,yH,zH,AH,BH,CH,DH,EH,FH,GH,HH,IH,JH,KH,LH,MH,NH,OH,PH,QH,RH,SH,TH,UH,VH,WH,XH,YH,ZH,_H,$H,aI,bI,cI,dI,eI,fI,gI,hI,iI,jI,bn,fn,kn,mn,nn,qn,rn,sn,tn,un,vn,yn,zn,An,Bn,Cn,Dn,En,Fn,Gn,Hn,In,Jn,Kn,Ln,Mn,Nn,On,Pn,Qn,Rn,Sn,Tn,Un,Vn,Xn,_n,ao,bo,fo,$m,go,ho,io,uo,xm,wo,yo,Ao,Co,Do,Fo,Go,Io,Jo,Mo,No,Qo,So,To,Uo,Vo,Wo,Xo,Yo,Zo,rp,Tr,Ur,Vr,Wr,At,Bt,Ct,Dt,Et,Ft,Gt,Ht,It,Jt,Kt,Lt,Mt,Nt,Ot,Pt,Qt,Rt,St,Tt,Ut,Vt,Wt,Xt,Yt,Zt,_t,$t,au,bu,cu,du,eu,fu,gu,hu,iu,ju,Kd,zq,ss,ts,us,Mf,Jf,Lf,lt,ot,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK];var db=[QK,lI,mI,nI,oI,pI,qI,rI,sI,tI,uI,vI,wI,xI,yI,zI,AI,BI,CI,DI,EI,FI,GI,HI,II,JI,KI,LI,MI,NI,OI,PI,QI,RI,SI,TI,UI,VI,WI,XI,YI,ZI,_I,$I,aJ,bJ,cJ,dJ,eJ,fJ,gJ,hJ,iJ,jJ,kJ,lJ,mJ,nJ,oJ,pJ,qJ,rJ,sJ,tJ,uJ,sp,Tj,tk,xt,ut,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK];var eb=[RK,wJ,xJ,yJ,zJ,AJ,BJ,CJ,DJ,EJ,FJ,GJ,HJ,IJ,JJ,KJ,LJ,MJ,NJ,OJ,PJ,QJ,RJ,SJ,TJ,UJ,VJ,WJ,XJ,YJ,ZJ,_J,$J,aK,bK,cK,dK,eK,fK,gK,hK,iK,jK,kK,lK,mK,nK,oK,pK,qK,rK,sK,tK,uK,vK,wK,xK,yK,zK,AK,BK,CK,DK,EK,FK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK];return{_RegisterExtensionFunctions:kt,___divdi3:Wv,___emscripten_environ_constructor:Nv,___errno_location:uu,___muldi3:Yv,___remdi3:Zv,___udivdi3:_v,___uremdi3:$v,__get_daylight:Pv,__get_environ:Rv,__get_timezone:Qv,__get_tzname:Ov,_bitshift64Ashr:aw,_bitshift64Lshr:bw,_bitshift64Shl:cw,_emscripten_replace_memory:Ua,_free:mu,_i64Add:Sv,_i64Subtract:Tv,_llvm_bswap_i32:dw,_malloc:lu,_memalign:ru,_memcpy:ew,_memmove:fw,_memset:gw,_sbrk:hw,_sqlite3_bind_blob:Sc,_sqlite3_bind_double:Uc,_sqlite3_bind_int:Wc,_sqlite3_bind_parameter_index:Zc,_sqlite3_bind_text:Xc,_sqlite3_changes:Ad,_sqlite3_clear_bindings:lc,_sqlite3_close_v2:Cd,_sqlite3_column_blob:Kc,_sqlite3_column_bytes:Lc,_sqlite3_column_double:Mc,_sqlite3_column_name:Rc,_sqlite3_column_text:Pc,_sqlite3_column_type:Qc,_sqlite3_create_function_v2:Gd,_sqlite3_data_count:Jc,_sqlite3_errmsg:pd,_sqlite3_exec:nd,_sqlite3_finalize:gc,_sqlite3_free:qb,_sqlite3_open:Od,_sqlite3_prepare_v2:od,_sqlite3_reset:jc,_sqlite3_result_blob:vc,_sqlite3_result_double:wc,_sqlite3_result_error:xc,_sqlite3_result_int:zc,_sqlite3_result_int64:Ac,_sqlite3_result_null:Bc,_sqlite3_result_text:Cc,_sqlite3_step:Gc,_sqlite3_value_blob:mc,_sqlite3_value_bytes:oc,_sqlite3_value_double:pc,_sqlite3_value_int:qc,_sqlite3_value_text:nc,_sqlite3_value_type:sc,dynCall_i:iw,dynCall_ii:tx,dynCall_iii:Ey,dynCall_iiii:Pz,dynCall_iiiii:_A,dynCall_iiiiii:jC,dynCall_iiiiiii:uD,dynCall_vi:FE,dynCall_vii:QF,dynCall_viii:$G,dynCall_viiii:kI,dynCall_viiiiii:vJ,establishStackSpace:ib,stackAlloc:fb,stackRestore:hb,stackSave:gb}})
- // EMSCRIPTEN_END_ASM
- (Zc,bd,buffer);f._RegisterExtensionFunctions=Z._RegisterExtensionFunctions;f.___divdi3=Z.___divdi3;var lb=f.___emscripten_environ_constructor=Z.___emscripten_environ_constructor;f.___errno_location=Z.___errno_location;f.___muldi3=Z.___muldi3;f.___remdi3=Z.___remdi3;f.___udivdi3=Z.___udivdi3;f.___uremdi3=Z.___uremdi3;var Tc=f.__get_daylight=Z.__get_daylight;f.__get_environ=Z.__get_environ;
- var Sc=f.__get_timezone=Z.__get_timezone,Uc=f.__get_tzname=Z.__get_tzname;f._bitshift64Ashr=Z._bitshift64Ashr;f._bitshift64Lshr=Z._bitshift64Lshr;f._bitshift64Shl=Z._bitshift64Shl;f._emscripten_replace_memory=Z._emscripten_replace_memory;var fa=f._free=Z._free;f._i64Add=Z._i64Add;f._i64Subtract=Z._i64Subtract;f._llvm_bswap_i32=Z._llvm_bswap_i32;var Wa=f._malloc=Z._malloc,$c=f._memalign=Z._memalign;f._memcpy=Z._memcpy;f._memmove=Z._memmove;var ad=f._memset=Z._memset;f._sbrk=Z._sbrk;
- f._sqlite3_bind_blob=Z._sqlite3_bind_blob;f._sqlite3_bind_double=Z._sqlite3_bind_double;f._sqlite3_bind_int=Z._sqlite3_bind_int;f._sqlite3_bind_parameter_index=Z._sqlite3_bind_parameter_index;f._sqlite3_bind_text=Z._sqlite3_bind_text;f._sqlite3_changes=Z._sqlite3_changes;f._sqlite3_clear_bindings=Z._sqlite3_clear_bindings;f._sqlite3_close_v2=Z._sqlite3_close_v2;f._sqlite3_column_blob=Z._sqlite3_column_blob;f._sqlite3_column_bytes=Z._sqlite3_column_bytes;f._sqlite3_column_double=Z._sqlite3_column_double;
- f._sqlite3_column_name=Z._sqlite3_column_name;f._sqlite3_column_text=Z._sqlite3_column_text;f._sqlite3_column_type=Z._sqlite3_column_type;f._sqlite3_create_function_v2=Z._sqlite3_create_function_v2;f._sqlite3_data_count=Z._sqlite3_data_count;f._sqlite3_errmsg=Z._sqlite3_errmsg;f._sqlite3_exec=Z._sqlite3_exec;f._sqlite3_finalize=Z._sqlite3_finalize;f._sqlite3_free=Z._sqlite3_free;f._sqlite3_open=Z._sqlite3_open;f._sqlite3_prepare_v2=Z._sqlite3_prepare_v2;f._sqlite3_reset=Z._sqlite3_reset;
- f._sqlite3_result_blob=Z._sqlite3_result_blob;f._sqlite3_result_double=Z._sqlite3_result_double;f._sqlite3_result_error=Z._sqlite3_result_error;f._sqlite3_result_int=Z._sqlite3_result_int;f._sqlite3_result_int64=Z._sqlite3_result_int64;f._sqlite3_result_null=Z._sqlite3_result_null;f._sqlite3_result_text=Z._sqlite3_result_text;f._sqlite3_step=Z._sqlite3_step;f._sqlite3_value_blob=Z._sqlite3_value_blob;f._sqlite3_value_bytes=Z._sqlite3_value_bytes;f._sqlite3_value_double=Z._sqlite3_value_double;
- f._sqlite3_value_int=Z._sqlite3_value_int;f._sqlite3_value_text=Z._sqlite3_value_text;f._sqlite3_value_type=Z._sqlite3_value_type;f.establishStackSpace=Z.establishStackSpace;var h=f.stackAlloc=Z.stackAlloc,qa=f.stackRestore=Z.stackRestore,na=f.stackSave=Z.stackSave;f.dynCall_i=Z.dynCall_i;f.dynCall_ii=Z.dynCall_ii;f.dynCall_iii=Z.dynCall_iii;f.dynCall_iiii=Z.dynCall_iiii;f.dynCall_iiiii=Z.dynCall_iiiii;f.dynCall_iiiiii=Z.dynCall_iiiiii;f.dynCall_iiiiiii=Z.dynCall_iiiiiii;f.dynCall_vi=Z.dynCall_vi;
- f.dynCall_vii=Z.dynCall_vii;f.dynCall_viii=Z.dynCall_viii;f.dynCall_viiii=Z.dynCall_viiii;f.dynCall_viiiiii=Z.dynCall_viiiiii;f.asm=Z;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(a){return"number"===a});return"string"!==b&&e&&!d?Qa(a):function(){return Ra(a,b,c,arguments)}};f.stackSave=na;f.stackRestore=qa;f.stackAlloc=h;
- if(H){if(String.prototype.startsWith?!H.startsWith(kb):0!==H.indexOf(kb)){var cd=H;H=f.locateFile?f.locateFile(cd,z):z+cd}if(y||za){var dd=f.readBinary(H);E.set(dd,8)}else{G++;f.monitorRunDependencies&&f.monitorRunDependencies(G);var ed=function(a){a.byteLength&&(a=new Uint8Array(a));E.set(a,8);f.memoryInitializerRequest&&delete f.memoryInitializerRequest.response;G--;f.monitorRunDependencies&&f.monitorRunDependencies(G);0==G&&(null!==ib&&(clearInterval(ib),ib=null),jb&&(a=jb,jb=null,a()))},fd=function(){f.readAsync(H,
- ed,function(){throw"could not load memory initializer "+H;})},gd=B(H);if(gd)ed(gd.buffer);else if(f.memoryInitializerRequest){var hd=function(){var a=f.memoryInitializerRequest,b=a.response;if(200!==a.status&&0!==a.status)if(b=B(f.memoryInitializerRequestURL))b=b.buffer;else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+a.status+", retrying "+H);fd();return}ed(b)};f.memoryInitializerRequest.response?setTimeout(hd,0):f.memoryInitializerRequest.addEventListener("load",
- hd)}else fd()}}function id(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}id.prototype=Error();id.prototype.constructor=id;jb=function jd(){f.calledRun||kd();f.calledRun||(jb=jd)};
- function kd(){function a(){if(!f.calledRun&&(f.calledRun=!0,!Na)){gb||(gb=!0,f.noFSInit||Ic||(Ic=!0,Hc(),f.stdin=f.stdin,f.stdout=f.stdout,f.stderr=f.stderr,f.stdin?Jc("stdin",f.stdin):bc("/dev/tty","/dev/stdin"),f.stdout?Jc("stdout",null,f.stdout):bc("/dev/tty","/dev/stdout"),f.stderr?Jc("stderr",null,f.stderr):bc("/dev/tty1","/dev/stderr"),p("/dev/stdin","r"),p("/dev/stdout","w"),p("/dev/stderr","w")),bb(db));Lb=!1;bb(eb);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for("function"==
- typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();fb.unshift(a)}bb(fb)}}if(!(0<G)){if(f.preRun)for("function"==typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)hb();bb(cb);0<G||f.calledRun||(f.setStatus?(f.setStatus("Running..."),setTimeout(function(){setTimeout(function(){f.setStatus("")},1);a()},1)):a())}}f.run=kd;
- function C(a){if(f.onAbort)f.onAbort(a);void 0!==a?(Da(a),Ea(a),a=JSON.stringify(a)):a="";Na=!0;throw"abort("+a+"). Build with -s ASSERTIONS=1 for more info.";}f.abort=C;if(f.preInit)for("function"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();f.noExitRuntime=!0;kd();
- // The shell-pre.js and emcc-generated code goes above
- return Module;
- }); // The end of the promise being returned
- return initSqlJsPromise;
- } // The end of our initSqlJs function
- // This bit below is copied almost exactly from what you get when you use the MODULARIZE=1 flag with emcc
- // However, we don't want to use the emcc modularization. See shell-pre.js
- if (typeof exports === 'object' && typeof module === 'object'){
- module.exports = initSqlJs;
- // This will allow the module to be used in ES6 or CommonJS
- module.exports.default = initSqlJs;
- }
- else if (typeof define === 'function' && define['amd']) {
- define([], function() { return initSqlJs; });
- }
- else if (typeof exports === 'object'){
- exports["Module"] = initSqlJs;
- }
-
- }).call(this,require('_process'),require("buffer").Buffer,"/node_modules/sql.js/dist")
- },{"_process":284,"buffer":182,"crypto":192,"fs":177,"path":276}],328:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- module.exports = Stream;
- var EE = require('events').EventEmitter;
- var inherits = require('inherits');
- inherits(Stream, EE);
- Stream.Readable = require('readable-stream/readable.js');
- Stream.Writable = require('readable-stream/writable.js');
- Stream.Duplex = require('readable-stream/duplex.js');
- Stream.Transform = require('readable-stream/transform.js');
- Stream.PassThrough = require('readable-stream/passthrough.js');
- // Backwards-compat with node 0.4.x
- Stream.Stream = Stream;
- // old-style streams. Note that the pipe method (the only relevant
- // part of this class) is overridden in the Readable class.
- function Stream() {
- EE.call(this);
- }
- Stream.prototype.pipe = function(dest, options) {
- var source = this;
- function ondata(chunk) {
- if (dest.writable) {
- if (false === dest.write(chunk) && source.pause) {
- source.pause();
- }
- }
- }
- source.on('data', ondata);
- function ondrain() {
- if (source.readable && source.resume) {
- source.resume();
- }
- }
- dest.on('drain', ondrain);
- // If the 'end' option is not supplied, dest.end() will be called when
- // source gets the 'end' or 'close' events. Only dest.end() once.
- if (!dest._isStdio && (!options || options.end !== false)) {
- source.on('end', onend);
- source.on('close', onclose);
- }
- var didOnEnd = false;
- function onend() {
- if (didOnEnd) return;
- didOnEnd = true;
- dest.end();
- }
- function onclose() {
- if (didOnEnd) return;
- didOnEnd = true;
- if (typeof dest.destroy === 'function') dest.destroy();
- }
- // don't leave dangling pipes when there are errors.
- function onerror(er) {
- cleanup();
- if (EE.listenerCount(this, 'error') === 0) {
- throw er; // Unhandled stream error in pipe.
- }
- }
- source.on('error', onerror);
- dest.on('error', onerror);
- // remove all the event listeners that were added.
- function cleanup() {
- source.removeListener('data', ondata);
- dest.removeListener('drain', ondrain);
- source.removeListener('end', onend);
- source.removeListener('close', onclose);
- source.removeListener('error', onerror);
- dest.removeListener('error', onerror);
- source.removeListener('end', cleanup);
- source.removeListener('close', cleanup);
- dest.removeListener('close', cleanup);
- }
- source.on('end', cleanup);
- source.on('close', cleanup);
- dest.on('close', cleanup);
- dest.emit('pipe', source);
- // Allow for unix-like usage: A.pipe(B).pipe(C)
- return dest;
- };
- },{"events":221,"inherits":262,"readable-stream/duplex.js":301,"readable-stream/passthrough.js":311,"readable-stream/readable.js":312,"readable-stream/transform.js":313,"readable-stream/writable.js":314}],329:[function(require,module,exports){
- (function (global){
- var ClientRequest = require('./lib/request')
- var response = require('./lib/response')
- var extend = require('xtend')
- var statusCodes = require('builtin-status-codes')
- var url = require('url')
- var http = exports
- http.request = function (opts, cb) {
- if (typeof opts === 'string')
- opts = url.parse(opts)
- else
- opts = extend(opts)
- // Normally, the page is loaded from http or https, so not specifying a protocol
- // will result in a (valid) protocol-relative url. However, this won't work if
- // the protocol is something else, like 'file:'
- var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''
- var protocol = opts.protocol || defaultProtocol
- var host = opts.hostname || opts.host
- var port = opts.port
- var path = opts.path || '/'
- // Necessary for IPv6 addresses
- if (host && host.indexOf(':') !== -1)
- host = '[' + host + ']'
- // This may be a relative url. The browser should always be able to interpret it correctly.
- opts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path
- opts.method = (opts.method || 'GET').toUpperCase()
- opts.headers = opts.headers || {}
- // Also valid opts.auth, opts.mode
- var req = new ClientRequest(opts)
- if (cb)
- req.on('response', cb)
- return req
- }
- http.get = function get (opts, cb) {
- var req = http.request(opts, cb)
- req.end()
- return req
- }
- http.ClientRequest = ClientRequest
- http.IncomingMessage = response.IncomingMessage
- http.Agent = function () {}
- http.Agent.defaultMaxSockets = 4
- http.globalAgent = new http.Agent()
- http.STATUS_CODES = statusCodes
- http.METHODS = [
- 'CHECKOUT',
- 'CONNECT',
- 'COPY',
- 'DELETE',
- 'GET',
- 'HEAD',
- 'LOCK',
- 'M-SEARCH',
- 'MERGE',
- 'MKACTIVITY',
- 'MKCOL',
- 'MOVE',
- 'NOTIFY',
- 'OPTIONS',
- 'PATCH',
- 'POST',
- 'PROPFIND',
- 'PROPPATCH',
- 'PURGE',
- 'PUT',
- 'REPORT',
- 'SEARCH',
- 'SUBSCRIBE',
- 'TRACE',
- 'UNLOCK',
- 'UNSUBSCRIBE'
- ]
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"./lib/request":331,"./lib/response":332,"builtin-status-codes":183,"url":338,"xtend":362}],330:[function(require,module,exports){
- (function (global){
- exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)
- exports.writableStream = isFunction(global.WritableStream)
- exports.abortController = isFunction(global.AbortController)
- exports.blobConstructor = false
- try {
- new Blob([new ArrayBuffer(1)])
- exports.blobConstructor = true
- } catch (e) {}
- // The xhr request to example.com may violate some restrictive CSP configurations,
- // so if we're running in a browser that supports `fetch`, avoid calling getXHR()
- // and assume support for certain features below.
- var xhr
- function getXHR () {
- // Cache the xhr value
- if (xhr !== undefined) return xhr
- if (global.XMLHttpRequest) {
- xhr = new global.XMLHttpRequest()
- // If XDomainRequest is available (ie only, where xhr might not work
- // cross domain), use the page location. Otherwise use example.com
- // Note: this doesn't actually make an http request.
- try {
- xhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')
- } catch(e) {
- xhr = null
- }
- } else {
- // Service workers don't have XHR
- xhr = null
- }
- return xhr
- }
- function checkTypeSupport (type) {
- var xhr = getXHR()
- if (!xhr) return false
- try {
- xhr.responseType = type
- return xhr.responseType === type
- } catch (e) {}
- return false
- }
- // For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.
- // Safari 7.1 appears to have fixed this bug.
- var haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'
- var haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)
- // If fetch is supported, then arraybuffer will be supported too. Skip calling
- // checkTypeSupport(), since that calls getXHR().
- exports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer'))
- // These next two tests unavoidably show warnings in Chrome. Since fetch will always
- // be used if it's available, just return false for these to avoid the warnings.
- exports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')
- exports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&
- checkTypeSupport('moz-chunked-arraybuffer')
- // If fetch is supported, then overrideMimeType will be supported too. Skip calling
- // getXHR().
- exports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)
- exports.vbArray = isFunction(global.VBArray)
- function isFunction (value) {
- return typeof value === 'function'
- }
- xhr = null // Help gc
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],331:[function(require,module,exports){
- (function (process,global,Buffer){
- var capability = require('./capability')
- var inherits = require('inherits')
- var response = require('./response')
- var stream = require('readable-stream')
- var toArrayBuffer = require('to-arraybuffer')
- var IncomingMessage = response.IncomingMessage
- var rStates = response.readyStates
- function decideMode (preferBinary, useFetch) {
- if (capability.fetch && useFetch) {
- return 'fetch'
- } else if (capability.mozchunkedarraybuffer) {
- return 'moz-chunked-arraybuffer'
- } else if (capability.msstream) {
- return 'ms-stream'
- } else if (capability.arraybuffer && preferBinary) {
- return 'arraybuffer'
- } else if (capability.vbArray && preferBinary) {
- return 'text:vbarray'
- } else {
- return 'text'
- }
- }
- var ClientRequest = module.exports = function (opts) {
- var self = this
- stream.Writable.call(self)
- self._opts = opts
- self._body = []
- self._headers = {}
- if (opts.auth)
- self.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'))
- Object.keys(opts.headers).forEach(function (name) {
- self.setHeader(name, opts.headers[name])
- })
- var preferBinary
- var useFetch = true
- if (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {
- // If the use of XHR should be preferred. Not typically needed.
- useFetch = false
- preferBinary = true
- } else if (opts.mode === 'prefer-streaming') {
- // If streaming is a high priority but binary compatibility and
- // the accuracy of the 'content-type' header aren't
- preferBinary = false
- } else if (opts.mode === 'allow-wrong-content-type') {
- // If streaming is more important than preserving the 'content-type' header
- preferBinary = !capability.overrideMimeType
- } else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {
- // Use binary if text streaming may corrupt data or the content-type header, or for speed
- preferBinary = true
- } else {
- throw new Error('Invalid value for opts.mode')
- }
- self._mode = decideMode(preferBinary, useFetch)
- self._fetchTimer = null
- self.on('finish', function () {
- self._onFinish()
- })
- }
- inherits(ClientRequest, stream.Writable)
- ClientRequest.prototype.setHeader = function (name, value) {
- var self = this
- var lowerName = name.toLowerCase()
- // This check is not necessary, but it prevents warnings from browsers about setting unsafe
- // headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but
- // http-browserify did it, so I will too.
- if (unsafeHeaders.indexOf(lowerName) !== -1)
- return
- self._headers[lowerName] = {
- name: name,
- value: value
- }
- }
- ClientRequest.prototype.getHeader = function (name) {
- var header = this._headers[name.toLowerCase()]
- if (header)
- return header.value
- return null
- }
- ClientRequest.prototype.removeHeader = function (name) {
- var self = this
- delete self._headers[name.toLowerCase()]
- }
- ClientRequest.prototype._onFinish = function () {
- var self = this
- if (self._destroyed)
- return
- var opts = self._opts
- var headersObj = self._headers
- var body = null
- if (opts.method !== 'GET' && opts.method !== 'HEAD') {
- if (capability.arraybuffer) {
- body = toArrayBuffer(Buffer.concat(self._body))
- } else if (capability.blobConstructor) {
- body = new global.Blob(self._body.map(function (buffer) {
- return toArrayBuffer(buffer)
- }), {
- type: (headersObj['content-type'] || {}).value || ''
- })
- } else {
- // get utf8 string
- body = Buffer.concat(self._body).toString()
- }
- }
- // create flattened list of headers
- var headersList = []
- Object.keys(headersObj).forEach(function (keyName) {
- var name = headersObj[keyName].name
- var value = headersObj[keyName].value
- if (Array.isArray(value)) {
- value.forEach(function (v) {
- headersList.push([name, v])
- })
- } else {
- headersList.push([name, value])
- }
- })
- if (self._mode === 'fetch') {
- var signal = null
- var fetchTimer = null
- if (capability.abortController) {
- var controller = new AbortController()
- signal = controller.signal
- self._fetchAbortController = controller
- if ('requestTimeout' in opts && opts.requestTimeout !== 0) {
- self._fetchTimer = global.setTimeout(function () {
- self.emit('requestTimeout')
- if (self._fetchAbortController)
- self._fetchAbortController.abort()
- }, opts.requestTimeout)
- }
- }
- global.fetch(self._opts.url, {
- method: self._opts.method,
- headers: headersList,
- body: body || undefined,
- mode: 'cors',
- credentials: opts.withCredentials ? 'include' : 'same-origin',
- signal: signal
- }).then(function (response) {
- self._fetchResponse = response
- self._connect()
- }, function (reason) {
- global.clearTimeout(self._fetchTimer)
- if (!self._destroyed)
- self.emit('error', reason)
- })
- } else {
- var xhr = self._xhr = new global.XMLHttpRequest()
- try {
- xhr.open(self._opts.method, self._opts.url, true)
- } catch (err) {
- process.nextTick(function () {
- self.emit('error', err)
- })
- return
- }
- // Can't set responseType on really old browsers
- if ('responseType' in xhr)
- xhr.responseType = self._mode.split(':')[0]
- if ('withCredentials' in xhr)
- xhr.withCredentials = !!opts.withCredentials
- if (self._mode === 'text' && 'overrideMimeType' in xhr)
- xhr.overrideMimeType('text/plain; charset=x-user-defined')
- if ('requestTimeout' in opts) {
- xhr.timeout = opts.requestTimeout
- xhr.ontimeout = function () {
- self.emit('requestTimeout')
- }
- }
- headersList.forEach(function (header) {
- xhr.setRequestHeader(header[0], header[1])
- })
- self._response = null
- xhr.onreadystatechange = function () {
- switch (xhr.readyState) {
- case rStates.LOADING:
- case rStates.DONE:
- self._onXHRProgress()
- break
- }
- }
- // Necessary for streaming in Firefox, since xhr.response is ONLY defined
- // in onprogress, not in onreadystatechange with xhr.readyState = 3
- if (self._mode === 'moz-chunked-arraybuffer') {
- xhr.onprogress = function () {
- self._onXHRProgress()
- }
- }
- xhr.onerror = function () {
- if (self._destroyed)
- return
- self.emit('error', new Error('XHR error'))
- }
- try {
- xhr.send(body)
- } catch (err) {
- process.nextTick(function () {
- self.emit('error', err)
- })
- return
- }
- }
- }
- /**
- * Checks if xhr.status is readable and non-zero, indicating no error.
- * Even though the spec says it should be available in readyState 3,
- * accessing it throws an exception in IE8
- */
- function statusValid (xhr) {
- try {
- var status = xhr.status
- return (status !== null && status !== 0)
- } catch (e) {
- return false
- }
- }
- ClientRequest.prototype._onXHRProgress = function () {
- var self = this
- if (!statusValid(self._xhr) || self._destroyed)
- return
- if (!self._response)
- self._connect()
- self._response._onXHRProgress()
- }
- ClientRequest.prototype._connect = function () {
- var self = this
- if (self._destroyed)
- return
- self._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._fetchTimer)
- self._response.on('error', function(err) {
- self.emit('error', err)
- })
- self.emit('response', self._response)
- }
- ClientRequest.prototype._write = function (chunk, encoding, cb) {
- var self = this
- self._body.push(chunk)
- cb()
- }
- ClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {
- var self = this
- self._destroyed = true
- global.clearTimeout(self._fetchTimer)
- if (self._response)
- self._response._destroyed = true
- if (self._xhr)
- self._xhr.abort()
- else if (self._fetchAbortController)
- self._fetchAbortController.abort()
- }
- ClientRequest.prototype.end = function (data, encoding, cb) {
- var self = this
- if (typeof data === 'function') {
- cb = data
- data = undefined
- }
- stream.Writable.prototype.end.call(self, data, encoding, cb)
- }
- ClientRequest.prototype.flushHeaders = function () {}
- ClientRequest.prototype.setTimeout = function () {}
- ClientRequest.prototype.setNoDelay = function () {}
- ClientRequest.prototype.setSocketKeepAlive = function () {}
- // Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method
- var unsafeHeaders = [
- 'accept-charset',
- 'accept-encoding',
- 'access-control-request-headers',
- 'access-control-request-method',
- 'connection',
- 'content-length',
- 'cookie',
- 'cookie2',
- 'date',
- 'dnt',
- 'expect',
- 'host',
- 'keep-alive',
- 'origin',
- 'referer',
- 'te',
- 'trailer',
- 'transfer-encoding',
- 'upgrade',
- 'via'
- ]
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
- },{"./capability":330,"./response":332,"_process":284,"buffer":182,"inherits":262,"readable-stream":312,"to-arraybuffer":336}],332:[function(require,module,exports){
- (function (process,global,Buffer){
- var capability = require('./capability')
- var inherits = require('inherits')
- var stream = require('readable-stream')
- var rStates = exports.readyStates = {
- UNSENT: 0,
- OPENED: 1,
- HEADERS_RECEIVED: 2,
- LOADING: 3,
- DONE: 4
- }
- var IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) {
- var self = this
- stream.Readable.call(self)
- self._mode = mode
- self.headers = {}
- self.rawHeaders = []
- self.trailers = {}
- self.rawTrailers = []
- // Fake the 'close' event, but only once 'end' fires
- self.on('end', function () {
- // The nextTick is necessary to prevent the 'request' module from causing an infinite loop
- process.nextTick(function () {
- self.emit('close')
- })
- })
- if (mode === 'fetch') {
- self._fetchResponse = response
- self.url = response.url
- self.statusCode = response.status
- self.statusMessage = response.statusText
-
- response.headers.forEach(function (header, key){
- self.headers[key.toLowerCase()] = header
- self.rawHeaders.push(key, header)
- })
- if (capability.writableStream) {
- var writable = new WritableStream({
- write: function (chunk) {
- return new Promise(function (resolve, reject) {
- if (self._destroyed) {
- reject()
- } else if(self.push(new Buffer(chunk))) {
- resolve()
- } else {
- self._resumeFetch = resolve
- }
- })
- },
- close: function () {
- global.clearTimeout(fetchTimer)
- if (!self._destroyed)
- self.push(null)
- },
- abort: function (err) {
- if (!self._destroyed)
- self.emit('error', err)
- }
- })
- try {
- response.body.pipeTo(writable).catch(function (err) {
- global.clearTimeout(fetchTimer)
- if (!self._destroyed)
- self.emit('error', err)
- })
- return
- } catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this
- }
- // fallback for when writableStream or pipeTo aren't available
- var reader = response.body.getReader()
- function read () {
- reader.read().then(function (result) {
- if (self._destroyed)
- return
- if (result.done) {
- global.clearTimeout(fetchTimer)
- self.push(null)
- return
- }
- self.push(new Buffer(result.value))
- read()
- }).catch(function (err) {
- global.clearTimeout(fetchTimer)
- if (!self._destroyed)
- self.emit('error', err)
- })
- }
- read()
- } else {
- self._xhr = xhr
- self._pos = 0
- self.url = xhr.responseURL
- self.statusCode = xhr.status
- self.statusMessage = xhr.statusText
- var headers = xhr.getAllResponseHeaders().split(/\r?\n/)
- headers.forEach(function (header) {
- var matches = header.match(/^([^:]+):\s*(.*)/)
- if (matches) {
- var key = matches[1].toLowerCase()
- if (key === 'set-cookie') {
- if (self.headers[key] === undefined) {
- self.headers[key] = []
- }
- self.headers[key].push(matches[2])
- } else if (self.headers[key] !== undefined) {
- self.headers[key] += ', ' + matches[2]
- } else {
- self.headers[key] = matches[2]
- }
- self.rawHeaders.push(matches[1], matches[2])
- }
- })
- self._charset = 'x-user-defined'
- if (!capability.overrideMimeType) {
- var mimeType = self.rawHeaders['mime-type']
- if (mimeType) {
- var charsetMatch = mimeType.match(/;\s*charset=([^;])(;|$)/)
- if (charsetMatch) {
- self._charset = charsetMatch[1].toLowerCase()
- }
- }
- if (!self._charset)
- self._charset = 'utf-8' // best guess
- }
- }
- }
- inherits(IncomingMessage, stream.Readable)
- IncomingMessage.prototype._read = function () {
- var self = this
- var resolve = self._resumeFetch
- if (resolve) {
- self._resumeFetch = null
- resolve()
- }
- }
- IncomingMessage.prototype._onXHRProgress = function () {
- var self = this
- var xhr = self._xhr
- var response = null
- switch (self._mode) {
- case 'text:vbarray': // For IE9
- if (xhr.readyState !== rStates.DONE)
- break
- try {
- // This fails in IE8
- response = new global.VBArray(xhr.responseBody).toArray()
- } catch (e) {}
- if (response !== null) {
- self.push(new Buffer(response))
- break
- }
- // Falls through in IE8
- case 'text':
- try { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4
- response = xhr.responseText
- } catch (e) {
- self._mode = 'text:vbarray'
- break
- }
- if (response.length > self._pos) {
- var newData = response.substr(self._pos)
- if (self._charset === 'x-user-defined') {
- var buffer = new Buffer(newData.length)
- for (var i = 0; i < newData.length; i++)
- buffer[i] = newData.charCodeAt(i) & 0xff
- self.push(buffer)
- } else {
- self.push(newData, self._charset)
- }
- self._pos = response.length
- }
- break
- case 'arraybuffer':
- if (xhr.readyState !== rStates.DONE || !xhr.response)
- break
- response = xhr.response
- self.push(new Buffer(new Uint8Array(response)))
- break
- case 'moz-chunked-arraybuffer': // take whole
- response = xhr.response
- if (xhr.readyState !== rStates.LOADING || !response)
- break
- self.push(new Buffer(new Uint8Array(response)))
- break
- case 'ms-stream':
- response = xhr.response
- if (xhr.readyState !== rStates.LOADING)
- break
- var reader = new global.MSStreamReader()
- reader.onprogress = function () {
- if (reader.result.byteLength > self._pos) {
- self.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))
- self._pos = reader.result.byteLength
- }
- }
- reader.onload = function () {
- self.push(null)
- }
- // reader.onerror = ??? // TODO: this
- reader.readAsArrayBuffer(response)
- break
- }
- // The ms-stream case handles end separately in reader.onload()
- if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {
- self.push(null)
- }
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
- },{"./capability":330,"_process":284,"buffer":182,"inherits":262,"readable-stream":312}],333:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- 'use strict';
- /*<replacement>*/
- var Buffer = require('safe-buffer').Buffer;
- /*</replacement>*/
- var isEncoding = Buffer.isEncoding || function (encoding) {
- encoding = '' + encoding;
- switch (encoding && encoding.toLowerCase()) {
- case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
- return true;
- default:
- return false;
- }
- };
- function _normalizeEncoding(enc) {
- if (!enc) return 'utf8';
- var retried;
- while (true) {
- switch (enc) {
- case 'utf8':
- case 'utf-8':
- return 'utf8';
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return 'utf16le';
- case 'latin1':
- case 'binary':
- return 'latin1';
- case 'base64':
- case 'ascii':
- case 'hex':
- return enc;
- default:
- if (retried) return; // undefined
- enc = ('' + enc).toLowerCase();
- retried = true;
- }
- }
- };
- // Do not cache `Buffer.isEncoding` when checking encoding names as some
- // modules monkey-patch it to support additional encodings
- function normalizeEncoding(enc) {
- var nenc = _normalizeEncoding(enc);
- if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
- return nenc || enc;
- }
- // StringDecoder provides an interface for efficiently splitting a series of
- // buffers into a series of JS strings without breaking apart multi-byte
- // characters.
- exports.StringDecoder = StringDecoder;
- function StringDecoder(encoding) {
- this.encoding = normalizeEncoding(encoding);
- var nb;
- switch (this.encoding) {
- case 'utf16le':
- this.text = utf16Text;
- this.end = utf16End;
- nb = 4;
- break;
- case 'utf8':
- this.fillLast = utf8FillLast;
- nb = 4;
- break;
- case 'base64':
- this.text = base64Text;
- this.end = base64End;
- nb = 3;
- break;
- default:
- this.write = simpleWrite;
- this.end = simpleEnd;
- return;
- }
- this.lastNeed = 0;
- this.lastTotal = 0;
- this.lastChar = Buffer.allocUnsafe(nb);
- }
- StringDecoder.prototype.write = function (buf) {
- if (buf.length === 0) return '';
- var r;
- var i;
- if (this.lastNeed) {
- r = this.fillLast(buf);
- if (r === undefined) return '';
- i = this.lastNeed;
- this.lastNeed = 0;
- } else {
- i = 0;
- }
- if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
- return r || '';
- };
- StringDecoder.prototype.end = utf8End;
- // Returns only complete characters in a Buffer
- StringDecoder.prototype.text = utf8Text;
- // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
- StringDecoder.prototype.fillLast = function (buf) {
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
- this.lastNeed -= buf.length;
- };
- // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
- // continuation byte. If an invalid byte is detected, -2 is returned.
- function utf8CheckByte(byte) {
- if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
- return byte >> 6 === 0x02 ? -1 : -2;
- }
- // Checks at most 3 bytes at the end of a Buffer in order to detect an
- // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
- // needed to complete the UTF-8 character (if applicable) are returned.
- function utf8CheckIncomplete(self, buf, i) {
- var j = buf.length - 1;
- if (j < i) return 0;
- var nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 1;
- return nb;
- }
- if (--j < i || nb === -2) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) self.lastNeed = nb - 2;
- return nb;
- }
- if (--j < i || nb === -2) return 0;
- nb = utf8CheckByte(buf[j]);
- if (nb >= 0) {
- if (nb > 0) {
- if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
- }
- return nb;
- }
- return 0;
- }
- // Validates as many continuation bytes for a multi-byte UTF-8 character as
- // needed or are available. If we see a non-continuation byte where we expect
- // one, we "replace" the validated continuation bytes we've seen so far with
- // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
- // behavior. The continuation byte check is included three times in the case
- // where all of the continuation bytes for a character exist in the same buffer.
- // It is also done this way as a slight performance increase instead of using a
- // loop.
- function utf8CheckExtraBytes(self, buf, p) {
- if ((buf[0] & 0xC0) !== 0x80) {
- self.lastNeed = 0;
- return '\ufffd';
- }
- if (self.lastNeed > 1 && buf.length > 1) {
- if ((buf[1] & 0xC0) !== 0x80) {
- self.lastNeed = 1;
- return '\ufffd';
- }
- if (self.lastNeed > 2 && buf.length > 2) {
- if ((buf[2] & 0xC0) !== 0x80) {
- self.lastNeed = 2;
- return '\ufffd';
- }
- }
- }
- }
- // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
- function utf8FillLast(buf) {
- var p = this.lastTotal - this.lastNeed;
- var r = utf8CheckExtraBytes(this, buf, p);
- if (r !== undefined) return r;
- if (this.lastNeed <= buf.length) {
- buf.copy(this.lastChar, p, 0, this.lastNeed);
- return this.lastChar.toString(this.encoding, 0, this.lastTotal);
- }
- buf.copy(this.lastChar, p, 0, buf.length);
- this.lastNeed -= buf.length;
- }
- // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
- // partial character, the character's bytes are buffered until the required
- // number of bytes are available.
- function utf8Text(buf, i) {
- var total = utf8CheckIncomplete(this, buf, i);
- if (!this.lastNeed) return buf.toString('utf8', i);
- this.lastTotal = total;
- var end = buf.length - (total - this.lastNeed);
- buf.copy(this.lastChar, 0, end);
- return buf.toString('utf8', i, end);
- }
- // For UTF-8, a replacement character is added when ending on a partial
- // character.
- function utf8End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + '\ufffd';
- return r;
- }
- // UTF-16LE typically needs two bytes per character, but even if we have an even
- // number of bytes available, we need to check if we end on a leading/high
- // surrogate. In that case, we need to wait for the next two bytes in order to
- // decode the last character properly.
- function utf16Text(buf, i) {
- if ((buf.length - i) % 2 === 0) {
- var r = buf.toString('utf16le', i);
- if (r) {
- var c = r.charCodeAt(r.length - 1);
- if (c >= 0xD800 && c <= 0xDBFF) {
- this.lastNeed = 2;
- this.lastTotal = 4;
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- return r.slice(0, -1);
- }
- }
- return r;
- }
- this.lastNeed = 1;
- this.lastTotal = 2;
- this.lastChar[0] = buf[buf.length - 1];
- return buf.toString('utf16le', i, buf.length - 1);
- }
- // For UTF-16LE we do not explicitly append special replacement characters if we
- // end on a partial character, we simply let v8 handle that.
- function utf16End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) {
- var end = this.lastTotal - this.lastNeed;
- return r + this.lastChar.toString('utf16le', 0, end);
- }
- return r;
- }
- function base64Text(buf, i) {
- var n = (buf.length - i) % 3;
- if (n === 0) return buf.toString('base64', i);
- this.lastNeed = 3 - n;
- this.lastTotal = 3;
- if (n === 1) {
- this.lastChar[0] = buf[buf.length - 1];
- } else {
- this.lastChar[0] = buf[buf.length - 2];
- this.lastChar[1] = buf[buf.length - 1];
- }
- return buf.toString('base64', i, buf.length - n);
- }
- function base64End(buf) {
- var r = buf && buf.length ? this.write(buf) : '';
- if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
- return r;
- }
- // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
- function simpleWrite(buf) {
- return buf.toString(this.encoding);
- }
- function simpleEnd(buf) {
- return buf && buf.length ? this.write(buf) : '';
- }
- },{"safe-buffer":334}],334:[function(require,module,exports){
- arguments[4][178][0].apply(exports,arguments)
- },{"buffer":182,"dup":178}],335:[function(require,module,exports){
- (function (setImmediate,clearImmediate){
- var nextTick = require('process/browser.js').nextTick;
- var apply = Function.prototype.apply;
- var slice = Array.prototype.slice;
- var immediateIds = {};
- var nextImmediateId = 0;
- // DOM APIs, for completeness
- exports.setTimeout = function() {
- return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
- };
- exports.setInterval = function() {
- return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
- };
- exports.clearTimeout =
- exports.clearInterval = function(timeout) { timeout.close(); };
- function Timeout(id, clearFn) {
- this._id = id;
- this._clearFn = clearFn;
- }
- Timeout.prototype.unref = Timeout.prototype.ref = function() {};
- Timeout.prototype.close = function() {
- this._clearFn.call(window, this._id);
- };
- // Does not start the time, just sets up the members needed.
- exports.enroll = function(item, msecs) {
- clearTimeout(item._idleTimeoutId);
- item._idleTimeout = msecs;
- };
- exports.unenroll = function(item) {
- clearTimeout(item._idleTimeoutId);
- item._idleTimeout = -1;
- };
- exports._unrefActive = exports.active = function(item) {
- clearTimeout(item._idleTimeoutId);
- var msecs = item._idleTimeout;
- if (msecs >= 0) {
- item._idleTimeoutId = setTimeout(function onTimeout() {
- if (item._onTimeout)
- item._onTimeout();
- }, msecs);
- }
- };
- // That's not how node.js implements it but the exposed api is the same.
- exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) {
- var id = nextImmediateId++;
- var args = arguments.length < 2 ? false : slice.call(arguments, 1);
- immediateIds[id] = true;
- nextTick(function onNextTick() {
- if (immediateIds[id]) {
- // fn.call() is faster so we optimize for the common use-case
- // @see http://jsperf.com/call-apply-segu
- if (args) {
- fn.apply(null, args);
- } else {
- fn.call(null);
- }
- // Prevent ids from leaking
- exports.clearImmediate(id);
- }
- });
- return id;
- };
- exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) {
- delete immediateIds[id];
- };
- }).call(this,require("timers").setImmediate,require("timers").clearImmediate)
- },{"process/browser.js":284,"timers":335}],336:[function(require,module,exports){
- var Buffer = require('buffer').Buffer
- module.exports = function (buf) {
- // If the buffer is backed by a Uint8Array, a faster version will work
- if (buf instanceof Uint8Array) {
- // If the buffer isn't a subarray, return the underlying ArrayBuffer
- if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
- return buf.buffer
- } else if (typeof buf.buffer.slice === 'function') {
- // Otherwise we need to get a proper copy
- return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)
- }
- }
- if (Buffer.isBuffer(buf)) {
- // This is the slow version that will work with any Buffer
- // implementation (even in old browsers)
- var arrayCopy = new Uint8Array(buf.length)
- var len = buf.length
- for (var i = 0; i < len; i++) {
- arrayCopy[i] = buf[i]
- }
- return arrayCopy.buffer
- } else {
- throw new Error('Argument must be a Buffer')
- }
- }
- },{"buffer":182}],337:[function(require,module,exports){
- var undefined = (void 0); // Paranoia
- // Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to
- // create, and consume so much memory, that the browser appears frozen.
- var MAX_ARRAY_LENGTH = 1e5;
- // Approximations of internal ECMAScript conversion functions
- var ECMAScript = (function() {
- // Stash a copy in case other scripts modify these
- var opts = Object.prototype.toString,
- ophop = Object.prototype.hasOwnProperty;
- return {
- // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues:
- Class: function(v) { return opts.call(v).replace(/^\[object *|\]$/g, ''); },
- HasProperty: function(o, p) { return p in o; },
- HasOwnProperty: function(o, p) { return ophop.call(o, p); },
- IsCallable: function(o) { return typeof o === 'function'; },
- ToInt32: function(v) { return v >> 0; },
- ToUint32: function(v) { return v >>> 0; }
- };
- }());
- // Snapshot intrinsics
- var LN2 = Math.LN2,
- abs = Math.abs,
- floor = Math.floor,
- log = Math.log,
- min = Math.min,
- pow = Math.pow,
- round = Math.round;
- // ES5: lock down object properties
- function configureProperties(obj) {
- if (getOwnPropNames && defineProp) {
- var props = getOwnPropNames(obj), i;
- for (i = 0; i < props.length; i += 1) {
- defineProp(obj, props[i], {
- value: obj[props[i]],
- writable: false,
- enumerable: false,
- configurable: false
- });
- }
- }
- }
- // emulate ES5 getter/setter API using legacy APIs
- // http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx
- // (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but
- // note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless)
- var defineProp
- if (Object.defineProperty && (function() {
- try {
- Object.defineProperty({}, 'x', {});
- return true;
- } catch (e) {
- return false;
- }
- })()) {
- defineProp = Object.defineProperty;
- } else {
- defineProp = function(o, p, desc) {
- if (!o === Object(o)) throw new TypeError("Object.defineProperty called on non-object");
- if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); }
- if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); }
- if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; }
- return o;
- };
- }
- var getOwnPropNames = Object.getOwnPropertyNames || function (o) {
- if (o !== Object(o)) throw new TypeError("Object.getOwnPropertyNames called on non-object");
- var props = [], p;
- for (p in o) {
- if (ECMAScript.HasOwnProperty(o, p)) {
- props.push(p);
- }
- }
- return props;
- };
- // ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value)
- // for index in 0 ... obj.length
- function makeArrayAccessors(obj) {
- if (!defineProp) { return; }
- if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError("Array too large for polyfill");
- function makeArrayAccessor(index) {
- defineProp(obj, index, {
- 'get': function() { return obj._getter(index); },
- 'set': function(v) { obj._setter(index, v); },
- enumerable: true,
- configurable: false
- });
- }
- var i;
- for (i = 0; i < obj.length; i += 1) {
- makeArrayAccessor(i);
- }
- }
- // Internal conversion functions:
- // pack<Type>() - take a number (interpreted as Type), output a byte array
- // unpack<Type>() - take a byte array, output a Type-like number
- function as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; }
- function as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; }
- function packI8(n) { return [n & 0xff]; }
- function unpackI8(bytes) { return as_signed(bytes[0], 8); }
- function packU8(n) { return [n & 0xff]; }
- function unpackU8(bytes) { return as_unsigned(bytes[0], 8); }
- function packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; }
- function packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; }
- function unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); }
- function packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; }
- function unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); }
- function packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }
- function unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }
- function packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }
- function unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }
- function packIEEE754(v, ebits, fbits) {
- var bias = (1 << (ebits - 1)) - 1,
- s, e, f, ln,
- i, bits, str, bytes;
- function roundToEven(n) {
- var w = floor(n), f = n - w;
- if (f < 0.5)
- return w;
- if (f > 0.5)
- return w + 1;
- return w % 2 ? w + 1 : w;
- }
- // Compute sign, exponent, fraction
- if (v !== v) {
- // NaN
- // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping
- e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0;
- } else if (v === Infinity || v === -Infinity) {
- e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0;
- } else if (v === 0) {
- e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0;
- } else {
- s = v < 0;
- v = abs(v);
- if (v >= pow(2, 1 - bias)) {
- e = min(floor(log(v) / LN2), 1023);
- f = roundToEven(v / pow(2, e) * pow(2, fbits));
- if (f / pow(2, fbits) >= 2) {
- e = e + 1;
- f = 1;
- }
- if (e > bias) {
- // Overflow
- e = (1 << ebits) - 1;
- f = 0;
- } else {
- // Normalized
- e = e + bias;
- f = f - pow(2, fbits);
- }
- } else {
- // Denormalized
- e = 0;
- f = roundToEven(v / pow(2, 1 - bias - fbits));
- }
- }
- // Pack sign, exponent, fraction
- bits = [];
- for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); }
- for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); }
- bits.push(s ? 1 : 0);
- bits.reverse();
- str = bits.join('');
- // Bits to bytes
- bytes = [];
- while (str.length) {
- bytes.push(parseInt(str.substring(0, 8), 2));
- str = str.substring(8);
- }
- return bytes;
- }
- function unpackIEEE754(bytes, ebits, fbits) {
- // Bytes to bits
- var bits = [], i, j, b, str,
- bias, s, e, f;
- for (i = bytes.length; i; i -= 1) {
- b = bytes[i - 1];
- for (j = 8; j; j -= 1) {
- bits.push(b % 2 ? 1 : 0); b = b >> 1;
- }
- }
- bits.reverse();
- str = bits.join('');
- // Unpack sign, exponent, fraction
- bias = (1 << (ebits - 1)) - 1;
- s = parseInt(str.substring(0, 1), 2) ? -1 : 1;
- e = parseInt(str.substring(1, 1 + ebits), 2);
- f = parseInt(str.substring(1 + ebits), 2);
- // Produce number
- if (e === (1 << ebits) - 1) {
- return f !== 0 ? NaN : s * Infinity;
- } else if (e > 0) {
- // Normalized
- return s * pow(2, e - bias) * (1 + f / pow(2, fbits));
- } else if (f !== 0) {
- // Denormalized
- return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));
- } else {
- return s < 0 ? -0 : 0;
- }
- }
- function unpackF64(b) { return unpackIEEE754(b, 11, 52); }
- function packF64(v) { return packIEEE754(v, 11, 52); }
- function unpackF32(b) { return unpackIEEE754(b, 8, 23); }
- function packF32(v) { return packIEEE754(v, 8, 23); }
- //
- // 3 The ArrayBuffer Type
- //
- (function() {
- /** @constructor */
- var ArrayBuffer = function ArrayBuffer(length) {
- length = ECMAScript.ToInt32(length);
- if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer');
- this.byteLength = length;
- this._bytes = [];
- this._bytes.length = length;
- var i;
- for (i = 0; i < this.byteLength; i += 1) {
- this._bytes[i] = 0;
- }
- configureProperties(this);
- };
- exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer;
- //
- // 4 The ArrayBufferView Type
- //
- // NOTE: this constructor is not exported
- /** @constructor */
- var ArrayBufferView = function ArrayBufferView() {
- //this.buffer = null;
- //this.byteOffset = 0;
- //this.byteLength = 0;
- };
- //
- // 5 The Typed Array View Types
- //
- function makeConstructor(bytesPerElement, pack, unpack) {
- // Each TypedArray type requires a distinct constructor instance with
- // identical logic, which this produces.
- var ctor;
- ctor = function(buffer, byteOffset, length) {
- var array, sequence, i, s;
- if (!arguments.length || typeof arguments[0] === 'number') {
- // Constructor(unsigned long length)
- this.length = ECMAScript.ToInt32(arguments[0]);
- if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer');
- this.byteLength = this.length * this.BYTES_PER_ELEMENT;
- this.buffer = new ArrayBuffer(this.byteLength);
- this.byteOffset = 0;
- } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) {
- // Constructor(TypedArray array)
- array = arguments[0];
- this.length = array.length;
- this.byteLength = this.length * this.BYTES_PER_ELEMENT;
- this.buffer = new ArrayBuffer(this.byteLength);
- this.byteOffset = 0;
- for (i = 0; i < this.length; i += 1) {
- this._setter(i, array._getter(i));
- }
- } else if (typeof arguments[0] === 'object' &&
- !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {
- // Constructor(sequence<type> array)
- sequence = arguments[0];
- this.length = ECMAScript.ToUint32(sequence.length);
- this.byteLength = this.length * this.BYTES_PER_ELEMENT;
- this.buffer = new ArrayBuffer(this.byteLength);
- this.byteOffset = 0;
- for (i = 0; i < this.length; i += 1) {
- s = sequence[i];
- this._setter(i, Number(s));
- }
- } else if (typeof arguments[0] === 'object' &&
- (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {
- // Constructor(ArrayBuffer buffer,
- // optional unsigned long byteOffset, optional unsigned long length)
- this.buffer = buffer;
- this.byteOffset = ECMAScript.ToUint32(byteOffset);
- if (this.byteOffset > this.buffer.byteLength) {
- throw new RangeError("byteOffset out of range");
- }
- if (this.byteOffset % this.BYTES_PER_ELEMENT) {
- // The given byteOffset must be a multiple of the element
- // size of the specific type, otherwise an exception is raised.
- throw new RangeError("ArrayBuffer length minus the byteOffset is not a multiple of the element size.");
- }
- if (arguments.length < 3) {
- this.byteLength = this.buffer.byteLength - this.byteOffset;
- if (this.byteLength % this.BYTES_PER_ELEMENT) {
- throw new RangeError("length of buffer minus byteOffset not a multiple of the element size");
- }
- this.length = this.byteLength / this.BYTES_PER_ELEMENT;
- } else {
- this.length = ECMAScript.ToUint32(length);
- this.byteLength = this.length * this.BYTES_PER_ELEMENT;
- }
- if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {
- throw new RangeError("byteOffset and length reference an area beyond the end of the buffer");
- }
- } else {
- throw new TypeError("Unexpected argument type(s)");
- }
- this.constructor = ctor;
- configureProperties(this);
- makeArrayAccessors(this);
- };
- ctor.prototype = new ArrayBufferView();
- ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement;
- ctor.prototype._pack = pack;
- ctor.prototype._unpack = unpack;
- ctor.BYTES_PER_ELEMENT = bytesPerElement;
- // getter type (unsigned long index);
- ctor.prototype._getter = function(index) {
- if (arguments.length < 1) throw new SyntaxError("Not enough arguments");
- index = ECMAScript.ToUint32(index);
- if (index >= this.length) {
- return undefined;
- }
- var bytes = [], i, o;
- for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;
- i < this.BYTES_PER_ELEMENT;
- i += 1, o += 1) {
- bytes.push(this.buffer._bytes[o]);
- }
- return this._unpack(bytes);
- };
- // NONSTANDARD: convenience alias for getter: type get(unsigned long index);
- ctor.prototype.get = ctor.prototype._getter;
- // setter void (unsigned long index, type value);
- ctor.prototype._setter = function(index, value) {
- if (arguments.length < 2) throw new SyntaxError("Not enough arguments");
- index = ECMAScript.ToUint32(index);
- if (index >= this.length) {
- return undefined;
- }
- var bytes = this._pack(value), i, o;
- for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;
- i < this.BYTES_PER_ELEMENT;
- i += 1, o += 1) {
- this.buffer._bytes[o] = bytes[i];
- }
- };
- // void set(TypedArray array, optional unsigned long offset);
- // void set(sequence<type> array, optional unsigned long offset);
- ctor.prototype.set = function(index, value) {
- if (arguments.length < 1) throw new SyntaxError("Not enough arguments");
- var array, sequence, offset, len,
- i, s, d,
- byteOffset, byteLength, tmp;
- if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) {
- // void set(TypedArray array, optional unsigned long offset);
- array = arguments[0];
- offset = ECMAScript.ToUint32(arguments[1]);
- if (offset + array.length > this.length) {
- throw new RangeError("Offset plus length of array is out of range");
- }
- byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT;
- byteLength = array.length * this.BYTES_PER_ELEMENT;
- if (array.buffer === this.buffer) {
- tmp = [];
- for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) {
- tmp[i] = array.buffer._bytes[s];
- }
- for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) {
- this.buffer._bytes[d] = tmp[i];
- }
- } else {
- for (i = 0, s = array.byteOffset, d = byteOffset;
- i < byteLength; i += 1, s += 1, d += 1) {
- this.buffer._bytes[d] = array.buffer._bytes[s];
- }
- }
- } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') {
- // void set(sequence<type> array, optional unsigned long offset);
- sequence = arguments[0];
- len = ECMAScript.ToUint32(sequence.length);
- offset = ECMAScript.ToUint32(arguments[1]);
- if (offset + len > this.length) {
- throw new RangeError("Offset plus length of array is out of range");
- }
- for (i = 0; i < len; i += 1) {
- s = sequence[i];
- this._setter(offset + i, Number(s));
- }
- } else {
- throw new TypeError("Unexpected argument type(s)");
- }
- };
- // TypedArray subarray(long begin, optional long end);
- ctor.prototype.subarray = function(start, end) {
- function clamp(v, min, max) { return v < min ? min : v > max ? max : v; }
- start = ECMAScript.ToInt32(start);
- end = ECMAScript.ToInt32(end);
- if (arguments.length < 1) { start = 0; }
- if (arguments.length < 2) { end = this.length; }
- if (start < 0) { start = this.length + start; }
- if (end < 0) { end = this.length + end; }
- start = clamp(start, 0, this.length);
- end = clamp(end, 0, this.length);
- var len = end - start;
- if (len < 0) {
- len = 0;
- }
- return new this.constructor(
- this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);
- };
- return ctor;
- }
- var Int8Array = makeConstructor(1, packI8, unpackI8);
- var Uint8Array = makeConstructor(1, packU8, unpackU8);
- var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8);
- var Int16Array = makeConstructor(2, packI16, unpackI16);
- var Uint16Array = makeConstructor(2, packU16, unpackU16);
- var Int32Array = makeConstructor(4, packI32, unpackI32);
- var Uint32Array = makeConstructor(4, packU32, unpackU32);
- var Float32Array = makeConstructor(4, packF32, unpackF32);
- var Float64Array = makeConstructor(8, packF64, unpackF64);
- exports.Int8Array = exports.Int8Array || Int8Array;
- exports.Uint8Array = exports.Uint8Array || Uint8Array;
- exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray;
- exports.Int16Array = exports.Int16Array || Int16Array;
- exports.Uint16Array = exports.Uint16Array || Uint16Array;
- exports.Int32Array = exports.Int32Array || Int32Array;
- exports.Uint32Array = exports.Uint32Array || Uint32Array;
- exports.Float32Array = exports.Float32Array || Float32Array;
- exports.Float64Array = exports.Float64Array || Float64Array;
- }());
- //
- // 6 The DataView View Type
- //
- (function() {
- function r(array, index) {
- return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index];
- }
- var IS_BIG_ENDIAN = (function() {
- var u16array = new(exports.Uint16Array)([0x1234]),
- u8array = new(exports.Uint8Array)(u16array.buffer);
- return r(u8array, 0) === 0x12;
- }());
- // Constructor(ArrayBuffer buffer,
- // optional unsigned long byteOffset,
- // optional unsigned long byteLength)
- /** @constructor */
- var DataView = function DataView(buffer, byteOffset, byteLength) {
- if (arguments.length === 0) {
- buffer = new exports.ArrayBuffer(0);
- } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) {
- throw new TypeError("TypeError");
- }
- this.buffer = buffer || new exports.ArrayBuffer(0);
- this.byteOffset = ECMAScript.ToUint32(byteOffset);
- if (this.byteOffset > this.buffer.byteLength) {
- throw new RangeError("byteOffset out of range");
- }
- if (arguments.length < 3) {
- this.byteLength = this.buffer.byteLength - this.byteOffset;
- } else {
- this.byteLength = ECMAScript.ToUint32(byteLength);
- }
- if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {
- throw new RangeError("byteOffset and length reference an area beyond the end of the buffer");
- }
- configureProperties(this);
- };
- function makeGetter(arrayType) {
- return function(byteOffset, littleEndian) {
- byteOffset = ECMAScript.ToUint32(byteOffset);
- if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {
- throw new RangeError("Array index out of range");
- }
- byteOffset += this.byteOffset;
- var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT),
- bytes = [], i;
- for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {
- bytes.push(r(uint8Array, i));
- }
- if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {
- bytes.reverse();
- }
- return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0);
- };
- }
- DataView.prototype.getUint8 = makeGetter(exports.Uint8Array);
- DataView.prototype.getInt8 = makeGetter(exports.Int8Array);
- DataView.prototype.getUint16 = makeGetter(exports.Uint16Array);
- DataView.prototype.getInt16 = makeGetter(exports.Int16Array);
- DataView.prototype.getUint32 = makeGetter(exports.Uint32Array);
- DataView.prototype.getInt32 = makeGetter(exports.Int32Array);
- DataView.prototype.getFloat32 = makeGetter(exports.Float32Array);
- DataView.prototype.getFloat64 = makeGetter(exports.Float64Array);
- function makeSetter(arrayType) {
- return function(byteOffset, value, littleEndian) {
- byteOffset = ECMAScript.ToUint32(byteOffset);
- if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {
- throw new RangeError("Array index out of range");
- }
- // Get bytes
- var typeArray = new arrayType([value]),
- byteArray = new exports.Uint8Array(typeArray.buffer),
- bytes = [], i, byteView;
- for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {
- bytes.push(r(byteArray, i));
- }
- // Flip if necessary
- if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {
- bytes.reverse();
- }
- // Write them
- byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT);
- byteView.set(bytes);
- };
- }
- DataView.prototype.setUint8 = makeSetter(exports.Uint8Array);
- DataView.prototype.setInt8 = makeSetter(exports.Int8Array);
- DataView.prototype.setUint16 = makeSetter(exports.Uint16Array);
- DataView.prototype.setInt16 = makeSetter(exports.Int16Array);
- DataView.prototype.setUint32 = makeSetter(exports.Uint32Array);
- DataView.prototype.setInt32 = makeSetter(exports.Int32Array);
- DataView.prototype.setFloat32 = makeSetter(exports.Float32Array);
- DataView.prototype.setFloat64 = makeSetter(exports.Float64Array);
- exports.DataView = exports.DataView || DataView;
- }());
- },{}],338:[function(require,module,exports){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- 'use strict';
- var punycode = require('punycode');
- var util = require('./util');
- exports.parse = urlParse;
- exports.resolve = urlResolve;
- exports.resolveObject = urlResolveObject;
- exports.format = urlFormat;
- exports.Url = Url;
- function Url() {
- this.protocol = null;
- this.slashes = null;
- this.auth = null;
- this.host = null;
- this.port = null;
- this.hostname = null;
- this.hash = null;
- this.search = null;
- this.query = null;
- this.pathname = null;
- this.path = null;
- this.href = null;
- }
- // Reference: RFC 3986, RFC 1808, RFC 2396
- // define these here so at least they only have to be
- // compiled once on the first module load.
- var protocolPattern = /^([a-z0-9.+-]+:)/i,
- portPattern = /:[0-9]*$/,
- // Special case for a simple path URL
- simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
- // RFC 2396: characters reserved for delimiting URLs.
- // We actually just auto-escape these.
- delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
- // RFC 2396: characters not allowed for various reasons.
- unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
- // Allowed by RFCs, but cause of XSS attacks. Always escape these.
- autoEscape = ['\''].concat(unwise),
- // Characters that are never ever allowed in a hostname.
- // Note that any invalid chars are also handled, but these
- // are the ones that are *expected* to be seen, so we fast-path
- // them.
- nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
- hostEndingChars = ['/', '?', '#'],
- hostnameMaxLen = 255,
- hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
- hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
- // protocols that can allow "unsafe" and "unwise" chars.
- unsafeProtocol = {
- 'javascript': true,
- 'javascript:': true
- },
- // protocols that never have a hostname.
- hostlessProtocol = {
- 'javascript': true,
- 'javascript:': true
- },
- // protocols that always contain a // bit.
- slashedProtocol = {
- 'http': true,
- 'https': true,
- 'ftp': true,
- 'gopher': true,
- 'file': true,
- 'http:': true,
- 'https:': true,
- 'ftp:': true,
- 'gopher:': true,
- 'file:': true
- },
- querystring = require('querystring');
- function urlParse(url, parseQueryString, slashesDenoteHost) {
- if (url && util.isObject(url) && url instanceof Url) return url;
- var u = new Url;
- u.parse(url, parseQueryString, slashesDenoteHost);
- return u;
- }
- Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
- if (!util.isString(url)) {
- throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
- }
- // Copy chrome, IE, opera backslash-handling behavior.
- // Back slashes before the query string get converted to forward slashes
- // See: https://code.google.com/p/chromium/issues/detail?id=25916
- var queryIndex = url.indexOf('?'),
- splitter =
- (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',
- uSplit = url.split(splitter),
- slashRegex = /\\/g;
- uSplit[0] = uSplit[0].replace(slashRegex, '/');
- url = uSplit.join(splitter);
- var rest = url;
- // trim before proceeding.
- // This is to support parse stuff like " http://foo.com \n"
- rest = rest.trim();
- if (!slashesDenoteHost && url.split('#').length === 1) {
- // Try fast path regexp
- var simplePath = simplePathPattern.exec(rest);
- if (simplePath) {
- this.path = rest;
- this.href = rest;
- this.pathname = simplePath[1];
- if (simplePath[2]) {
- this.search = simplePath[2];
- if (parseQueryString) {
- this.query = querystring.parse(this.search.substr(1));
- } else {
- this.query = this.search.substr(1);
- }
- } else if (parseQueryString) {
- this.search = '';
- this.query = {};
- }
- return this;
- }
- }
- var proto = protocolPattern.exec(rest);
- if (proto) {
- proto = proto[0];
- var lowerProto = proto.toLowerCase();
- this.protocol = lowerProto;
- rest = rest.substr(proto.length);
- }
- // figure out if it's got a host
- // user@server is *always* interpreted as a hostname, and url
- // resolution will treat //foo/bar as host=foo,path=bar because that's
- // how the browser resolves relative URLs.
- if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
- var slashes = rest.substr(0, 2) === '//';
- if (slashes && !(proto && hostlessProtocol[proto])) {
- rest = rest.substr(2);
- this.slashes = true;
- }
- }
- if (!hostlessProtocol[proto] &&
- (slashes || (proto && !slashedProtocol[proto]))) {
- // there's a hostname.
- // the first instance of /, ?, ;, or # ends the host.
- //
- // If there is an @ in the hostname, then non-host chars *are* allowed
- // to the left of the last @ sign, unless some host-ending character
- // comes *before* the @-sign.
- // URLs are obnoxious.
- //
- // ex:
- // http://a@b@c/ => user:a@b host:c
- // http://a@b?@c => user:a host:c path:/?@c
- // v0.12 TODO(isaacs): This is not quite how Chrome does things.
- // Review our test case against browsers more comprehensively.
- // find the first instance of any hostEndingChars
- var hostEnd = -1;
- for (var i = 0; i < hostEndingChars.length; i++) {
- var hec = rest.indexOf(hostEndingChars[i]);
- if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
- hostEnd = hec;
- }
- // at this point, either we have an explicit point where the
- // auth portion cannot go past, or the last @ char is the decider.
- var auth, atSign;
- if (hostEnd === -1) {
- // atSign can be anywhere.
- atSign = rest.lastIndexOf('@');
- } else {
- // atSign must be in auth portion.
- // http://a@b/c@d => host:b auth:a path:/c@d
- atSign = rest.lastIndexOf('@', hostEnd);
- }
- // Now we have a portion which is definitely the auth.
- // Pull that off.
- if (atSign !== -1) {
- auth = rest.slice(0, atSign);
- rest = rest.slice(atSign + 1);
- this.auth = decodeURIComponent(auth);
- }
- // the host is the remaining to the left of the first non-host char
- hostEnd = -1;
- for (var i = 0; i < nonHostChars.length; i++) {
- var hec = rest.indexOf(nonHostChars[i]);
- if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
- hostEnd = hec;
- }
- // if we still have not hit it, then the entire thing is a host.
- if (hostEnd === -1)
- hostEnd = rest.length;
- this.host = rest.slice(0, hostEnd);
- rest = rest.slice(hostEnd);
- // pull out port.
- this.parseHost();
- // we've indicated that there is a hostname,
- // so even if it's empty, it has to be present.
- this.hostname = this.hostname || '';
- // if hostname begins with [ and ends with ]
- // assume that it's an IPv6 address.
- var ipv6Hostname = this.hostname[0] === '[' &&
- this.hostname[this.hostname.length - 1] === ']';
- // validate a little.
- if (!ipv6Hostname) {
- var hostparts = this.hostname.split(/\./);
- for (var i = 0, l = hostparts.length; i < l; i++) {
- var part = hostparts[i];
- if (!part) continue;
- if (!part.match(hostnamePartPattern)) {
- var newpart = '';
- for (var j = 0, k = part.length; j < k; j++) {
- if (part.charCodeAt(j) > 127) {
- // we replace non-ASCII char with a temporary placeholder
- // we need this to make sure size of hostname is not
- // broken by replacing non-ASCII by nothing
- newpart += 'x';
- } else {
- newpart += part[j];
- }
- }
- // we test again with ASCII char only
- if (!newpart.match(hostnamePartPattern)) {
- var validParts = hostparts.slice(0, i);
- var notHost = hostparts.slice(i + 1);
- var bit = part.match(hostnamePartStart);
- if (bit) {
- validParts.push(bit[1]);
- notHost.unshift(bit[2]);
- }
- if (notHost.length) {
- rest = '/' + notHost.join('.') + rest;
- }
- this.hostname = validParts.join('.');
- break;
- }
- }
- }
- }
- if (this.hostname.length > hostnameMaxLen) {
- this.hostname = '';
- } else {
- // hostnames are always lower case.
- this.hostname = this.hostname.toLowerCase();
- }
- if (!ipv6Hostname) {
- // IDNA Support: Returns a punycoded representation of "domain".
- // It only converts parts of the domain name that
- // have non-ASCII characters, i.e. it doesn't matter if
- // you call it with a domain that already is ASCII-only.
- this.hostname = punycode.toASCII(this.hostname);
- }
- var p = this.port ? ':' + this.port : '';
- var h = this.hostname || '';
- this.host = h + p;
- this.href += this.host;
- // strip [ and ] from the hostname
- // the host field still retains them, though
- if (ipv6Hostname) {
- this.hostname = this.hostname.substr(1, this.hostname.length - 2);
- if (rest[0] !== '/') {
- rest = '/' + rest;
- }
- }
- }
- // now rest is set to the post-host stuff.
- // chop off any delim chars.
- if (!unsafeProtocol[lowerProto]) {
- // First, make 100% sure that any "autoEscape" chars get
- // escaped, even if encodeURIComponent doesn't think they
- // need to be.
- for (var i = 0, l = autoEscape.length; i < l; i++) {
- var ae = autoEscape[i];
- if (rest.indexOf(ae) === -1)
- continue;
- var esc = encodeURIComponent(ae);
- if (esc === ae) {
- esc = escape(ae);
- }
- rest = rest.split(ae).join(esc);
- }
- }
- // chop off from the tail first.
- var hash = rest.indexOf('#');
- if (hash !== -1) {
- // got a fragment string.
- this.hash = rest.substr(hash);
- rest = rest.slice(0, hash);
- }
- var qm = rest.indexOf('?');
- if (qm !== -1) {
- this.search = rest.substr(qm);
- this.query = rest.substr(qm + 1);
- if (parseQueryString) {
- this.query = querystring.parse(this.query);
- }
- rest = rest.slice(0, qm);
- } else if (parseQueryString) {
- // no query string, but parseQueryString still requested
- this.search = '';
- this.query = {};
- }
- if (rest) this.pathname = rest;
- if (slashedProtocol[lowerProto] &&
- this.hostname && !this.pathname) {
- this.pathname = '/';
- }
- //to support http.request
- if (this.pathname || this.search) {
- var p = this.pathname || '';
- var s = this.search || '';
- this.path = p + s;
- }
- // finally, reconstruct the href based on what has been validated.
- this.href = this.format();
- return this;
- };
- // format a parsed object into a url string
- function urlFormat(obj) {
- // ensure it's an object, and not a string url.
- // If it's an obj, this is a no-op.
- // this way, you can call url_format() on strings
- // to clean up potentially wonky urls.
- if (util.isString(obj)) obj = urlParse(obj);
- if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
- return obj.format();
- }
- Url.prototype.format = function() {
- var auth = this.auth || '';
- if (auth) {
- auth = encodeURIComponent(auth);
- auth = auth.replace(/%3A/i, ':');
- auth += '@';
- }
- var protocol = this.protocol || '',
- pathname = this.pathname || '',
- hash = this.hash || '',
- host = false,
- query = '';
- if (this.host) {
- host = auth + this.host;
- } else if (this.hostname) {
- host = auth + (this.hostname.indexOf(':') === -1 ?
- this.hostname :
- '[' + this.hostname + ']');
- if (this.port) {
- host += ':' + this.port;
- }
- }
- if (this.query &&
- util.isObject(this.query) &&
- Object.keys(this.query).length) {
- query = querystring.stringify(this.query);
- }
- var search = this.search || (query && ('?' + query)) || '';
- if (protocol && protocol.substr(-1) !== ':') protocol += ':';
- // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.
- // unless they had them to begin with.
- if (this.slashes ||
- (!protocol || slashedProtocol[protocol]) && host !== false) {
- host = '//' + (host || '');
- if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
- } else if (!host) {
- host = '';
- }
- if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
- if (search && search.charAt(0) !== '?') search = '?' + search;
- pathname = pathname.replace(/[?#]/g, function(match) {
- return encodeURIComponent(match);
- });
- search = search.replace('#', '%23');
- return protocol + host + pathname + search + hash;
- };
- function urlResolve(source, relative) {
- return urlParse(source, false, true).resolve(relative);
- }
- Url.prototype.resolve = function(relative) {
- return this.resolveObject(urlParse(relative, false, true)).format();
- };
- function urlResolveObject(source, relative) {
- if (!source) return relative;
- return urlParse(source, false, true).resolveObject(relative);
- }
- Url.prototype.resolveObject = function(relative) {
- if (util.isString(relative)) {
- var rel = new Url();
- rel.parse(relative, false, true);
- relative = rel;
- }
- var result = new Url();
- var tkeys = Object.keys(this);
- for (var tk = 0; tk < tkeys.length; tk++) {
- var tkey = tkeys[tk];
- result[tkey] = this[tkey];
- }
- // hash is always overridden, no matter what.
- // even href="" will remove it.
- result.hash = relative.hash;
- // if the relative url is empty, then there's nothing left to do here.
- if (relative.href === '') {
- result.href = result.format();
- return result;
- }
- // hrefs like //foo/bar always cut to the protocol.
- if (relative.slashes && !relative.protocol) {
- // take everything except the protocol from relative
- var rkeys = Object.keys(relative);
- for (var rk = 0; rk < rkeys.length; rk++) {
- var rkey = rkeys[rk];
- if (rkey !== 'protocol')
- result[rkey] = relative[rkey];
- }
- //urlParse appends trailing / to urls like http://www.example.com
- if (slashedProtocol[result.protocol] &&
- result.hostname && !result.pathname) {
- result.path = result.pathname = '/';
- }
- result.href = result.format();
- return result;
- }
- if (relative.protocol && relative.protocol !== result.protocol) {
- // if it's a known url protocol, then changing
- // the protocol does weird things
- // first, if it's not file:, then we MUST have a host,
- // and if there was a path
- // to begin with, then we MUST have a path.
- // if it is file:, then the host is dropped,
- // because that's known to be hostless.
- // anything else is assumed to be absolute.
- if (!slashedProtocol[relative.protocol]) {
- var keys = Object.keys(relative);
- for (var v = 0; v < keys.length; v++) {
- var k = keys[v];
- result[k] = relative[k];
- }
- result.href = result.format();
- return result;
- }
- result.protocol = relative.protocol;
- if (!relative.host && !hostlessProtocol[relative.protocol]) {
- var relPath = (relative.pathname || '').split('/');
- while (relPath.length && !(relative.host = relPath.shift()));
- if (!relative.host) relative.host = '';
- if (!relative.hostname) relative.hostname = '';
- if (relPath[0] !== '') relPath.unshift('');
- if (relPath.length < 2) relPath.unshift('');
- result.pathname = relPath.join('/');
- } else {
- result.pathname = relative.pathname;
- }
- result.search = relative.search;
- result.query = relative.query;
- result.host = relative.host || '';
- result.auth = relative.auth;
- result.hostname = relative.hostname || relative.host;
- result.port = relative.port;
- // to support http.request
- if (result.pathname || result.search) {
- var p = result.pathname || '';
- var s = result.search || '';
- result.path = p + s;
- }
- result.slashes = result.slashes || relative.slashes;
- result.href = result.format();
- return result;
- }
- var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),
- isRelAbs = (
- relative.host ||
- relative.pathname && relative.pathname.charAt(0) === '/'
- ),
- mustEndAbs = (isRelAbs || isSourceAbs ||
- (result.host && relative.pathname)),
- removeAllDots = mustEndAbs,
- srcPath = result.pathname && result.pathname.split('/') || [],
- relPath = relative.pathname && relative.pathname.split('/') || [],
- psychotic = result.protocol && !slashedProtocol[result.protocol];
- // if the url is a non-slashed url, then relative
- // links like ../.. should be able
- // to crawl up to the hostname, as well. This is strange.
- // result.protocol has already been set by now.
- // Later on, put the first path part into the host field.
- if (psychotic) {
- result.hostname = '';
- result.port = null;
- if (result.host) {
- if (srcPath[0] === '') srcPath[0] = result.host;
- else srcPath.unshift(result.host);
- }
- result.host = '';
- if (relative.protocol) {
- relative.hostname = null;
- relative.port = null;
- if (relative.host) {
- if (relPath[0] === '') relPath[0] = relative.host;
- else relPath.unshift(relative.host);
- }
- relative.host = null;
- }
- mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
- }
- if (isRelAbs) {
- // it's absolute.
- result.host = (relative.host || relative.host === '') ?
- relative.host : result.host;
- result.hostname = (relative.hostname || relative.hostname === '') ?
- relative.hostname : result.hostname;
- result.search = relative.search;
- result.query = relative.query;
- srcPath = relPath;
- // fall through to the dot-handling below.
- } else if (relPath.length) {
- // it's relative
- // throw away the existing file, and take the new path instead.
- if (!srcPath) srcPath = [];
- srcPath.pop();
- srcPath = srcPath.concat(relPath);
- result.search = relative.search;
- result.query = relative.query;
- } else if (!util.isNullOrUndefined(relative.search)) {
- // just pull out the search.
- // like href='?foo'.
- // Put this after the other two cases because it simplifies the booleans
- if (psychotic) {
- result.hostname = result.host = srcPath.shift();
- //occationaly the auth can get stuck only in host
- //this especially happens in cases like
- //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
- var authInHost = result.host && result.host.indexOf('@') > 0 ?
- result.host.split('@') : false;
- if (authInHost) {
- result.auth = authInHost.shift();
- result.host = result.hostname = authInHost.shift();
- }
- }
- result.search = relative.search;
- result.query = relative.query;
- //to support http.request
- if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
- result.path = (result.pathname ? result.pathname : '') +
- (result.search ? result.search : '');
- }
- result.href = result.format();
- return result;
- }
- if (!srcPath.length) {
- // no path at all. easy.
- // we've already handled the other stuff above.
- result.pathname = null;
- //to support http.request
- if (result.search) {
- result.path = '/' + result.search;
- } else {
- result.path = null;
- }
- result.href = result.format();
- return result;
- }
- // if a url ENDs in . or .., then it must get a trailing slash.
- // however, if it ends in anything else non-slashy,
- // then it must NOT get a trailing slash.
- var last = srcPath.slice(-1)[0];
- var hasTrailingSlash = (
- (result.host || relative.host || srcPath.length > 1) &&
- (last === '.' || last === '..') || last === '');
- // strip single dots, resolve double dots to parent dir
- // if the path tries to go above the root, `up` ends up > 0
- var up = 0;
- for (var i = srcPath.length; i >= 0; i--) {
- last = srcPath[i];
- if (last === '.') {
- srcPath.splice(i, 1);
- } else if (last === '..') {
- srcPath.splice(i, 1);
- up++;
- } else if (up) {
- srcPath.splice(i, 1);
- up--;
- }
- }
- // if the path is allowed to go above the root, restore leading ..s
- if (!mustEndAbs && !removeAllDots) {
- for (; up--; up) {
- srcPath.unshift('..');
- }
- }
- if (mustEndAbs && srcPath[0] !== '' &&
- (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
- srcPath.unshift('');
- }
- if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
- srcPath.push('');
- }
- var isAbsolute = srcPath[0] === '' ||
- (srcPath[0] && srcPath[0].charAt(0) === '/');
- // put the host back
- if (psychotic) {
- result.hostname = result.host = isAbsolute ? '' :
- srcPath.length ? srcPath.shift() : '';
- //occationaly the auth can get stuck only in host
- //this especially happens in cases like
- //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
- var authInHost = result.host && result.host.indexOf('@') > 0 ?
- result.host.split('@') : false;
- if (authInHost) {
- result.auth = authInHost.shift();
- result.host = result.hostname = authInHost.shift();
- }
- }
- mustEndAbs = mustEndAbs || (result.host && srcPath.length);
- if (mustEndAbs && !isAbsolute) {
- srcPath.unshift('');
- }
- if (!srcPath.length) {
- result.pathname = null;
- result.path = null;
- } else {
- result.pathname = srcPath.join('/');
- }
- //to support request.http
- if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
- result.path = (result.pathname ? result.pathname : '') +
- (result.search ? result.search : '');
- }
- result.auth = relative.auth || result.auth;
- result.slashes = result.slashes || relative.slashes;
- result.href = result.format();
- return result;
- };
- Url.prototype.parseHost = function() {
- var host = this.host;
- var port = portPattern.exec(host);
- if (port) {
- port = port[0];
- if (port !== ':') {
- this.port = port.substr(1);
- }
- host = host.substr(0, host.length - port.length);
- }
- if (host) this.hostname = host;
- };
- },{"./util":339,"punycode":292,"querystring":295}],339:[function(require,module,exports){
- 'use strict';
- module.exports = {
- isString: function(arg) {
- return typeof(arg) === 'string';
- },
- isObject: function(arg) {
- return typeof(arg) === 'object' && arg !== null;
- },
- isNull: function(arg) {
- return arg === null;
- },
- isNullOrUndefined: function(arg) {
- return arg == null;
- }
- };
- },{}],340:[function(require,module,exports){
- (function (global){
- /**
- * Module exports.
- */
- module.exports = deprecate;
- /**
- * Mark that a method should not be used.
- * Returns a modified function which warns once by default.
- *
- * If `localStorage.noDeprecation = true` is set, then it is a no-op.
- *
- * If `localStorage.throwDeprecation = true` is set, then deprecated functions
- * will throw an Error when invoked.
- *
- * If `localStorage.traceDeprecation = true` is set, then deprecated functions
- * will invoke `console.trace()` instead of `console.error()`.
- *
- * @param {Function} fn - the function to deprecate
- * @param {String} msg - the string to print to the console when `fn` is invoked
- * @returns {Function} a new "deprecated" version of `fn`
- * @api public
- */
- function deprecate (fn, msg) {
- if (config('noDeprecation')) {
- return fn;
- }
- var warned = false;
- function deprecated() {
- if (!warned) {
- if (config('throwDeprecation')) {
- throw new Error(msg);
- } else if (config('traceDeprecation')) {
- console.trace(msg);
- } else {
- console.warn(msg);
- }
- warned = true;
- }
- return fn.apply(this, arguments);
- }
- return deprecated;
- }
- /**
- * Checks `localStorage` for boolean values for the given `name`.
- *
- * @param {String} name
- * @returns {Boolean}
- * @api private
- */
- function config (name) {
- // accessing global.localStorage can trigger a DOMException in sandboxed iframes
- try {
- if (!global.localStorage) return false;
- } catch (_) {
- return false;
- }
- var val = global.localStorage[name];
- if (null == val) return false;
- return String(val).toLowerCase() === 'true';
- }
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],341:[function(require,module,exports){
- if (typeof Object.create === 'function') {
- // implementation from standard node.js 'util' module
- module.exports = function inherits(ctor, superCtor) {
- ctor.super_ = superCtor
- ctor.prototype = Object.create(superCtor.prototype, {
- constructor: {
- value: ctor,
- enumerable: false,
- writable: true,
- configurable: true
- }
- });
- };
- } else {
- // old school shim for old browsers
- module.exports = function inherits(ctor, superCtor) {
- ctor.super_ = superCtor
- var TempCtor = function () {}
- TempCtor.prototype = superCtor.prototype
- ctor.prototype = new TempCtor()
- ctor.prototype.constructor = ctor
- }
- }
- },{}],342:[function(require,module,exports){
- module.exports = function isBuffer(arg) {
- return arg && typeof arg === 'object'
- && typeof arg.copy === 'function'
- && typeof arg.fill === 'function'
- && typeof arg.readUInt8 === 'function';
- }
- },{}],343:[function(require,module,exports){
- (function (process,global){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- var formatRegExp = /%[sdj%]/g;
- exports.format = function(f) {
- if (!isString(f)) {
- var objects = [];
- for (var i = 0; i < arguments.length; i++) {
- objects.push(inspect(arguments[i]));
- }
- return objects.join(' ');
- }
- var i = 1;
- var args = arguments;
- var len = args.length;
- var str = String(f).replace(formatRegExp, function(x) {
- if (x === '%%') return '%';
- if (i >= len) return x;
- switch (x) {
- case '%s': return String(args[i++]);
- case '%d': return Number(args[i++]);
- case '%j':
- try {
- return JSON.stringify(args[i++]);
- } catch (_) {
- return '[Circular]';
- }
- default:
- return x;
- }
- });
- for (var x = args[i]; i < len; x = args[++i]) {
- if (isNull(x) || !isObject(x)) {
- str += ' ' + x;
- } else {
- str += ' ' + inspect(x);
- }
- }
- return str;
- };
- // Mark that a method should not be used.
- // Returns a modified function which warns once by default.
- // If --no-deprecation is set, then it is a no-op.
- exports.deprecate = function(fn, msg) {
- // Allow for deprecating things in the process of starting up.
- if (isUndefined(global.process)) {
- return function() {
- return exports.deprecate(fn, msg).apply(this, arguments);
- };
- }
- if (process.noDeprecation === true) {
- return fn;
- }
- var warned = false;
- function deprecated() {
- if (!warned) {
- if (process.throwDeprecation) {
- throw new Error(msg);
- } else if (process.traceDeprecation) {
- console.trace(msg);
- } else {
- console.error(msg);
- }
- warned = true;
- }
- return fn.apply(this, arguments);
- }
- return deprecated;
- };
- var debugs = {};
- var debugEnviron;
- exports.debuglog = function(set) {
- if (isUndefined(debugEnviron))
- debugEnviron = process.env.NODE_DEBUG || '';
- set = set.toUpperCase();
- if (!debugs[set]) {
- if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
- var pid = process.pid;
- debugs[set] = function() {
- var msg = exports.format.apply(exports, arguments);
- console.error('%s %d: %s', set, pid, msg);
- };
- } else {
- debugs[set] = function() {};
- }
- }
- return debugs[set];
- };
- /**
- * Echos the value of a value. Trys to print the value out
- * in the best way possible given the different types.
- *
- * @param {Object} obj The object to print out.
- * @param {Object} opts Optional options object that alters the output.
- */
- /* legacy: obj, showHidden, depth, colors*/
- function inspect(obj, opts) {
- // default options
- var ctx = {
- seen: [],
- stylize: stylizeNoColor
- };
- // legacy...
- if (arguments.length >= 3) ctx.depth = arguments[2];
- if (arguments.length >= 4) ctx.colors = arguments[3];
- if (isBoolean(opts)) {
- // legacy...
- ctx.showHidden = opts;
- } else if (opts) {
- // got an "options" object
- exports._extend(ctx, opts);
- }
- // set default options
- if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
- if (isUndefined(ctx.depth)) ctx.depth = 2;
- if (isUndefined(ctx.colors)) ctx.colors = false;
- if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
- if (ctx.colors) ctx.stylize = stylizeWithColor;
- return formatValue(ctx, obj, ctx.depth);
- }
- exports.inspect = inspect;
- // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
- inspect.colors = {
- 'bold' : [1, 22],
- 'italic' : [3, 23],
- 'underline' : [4, 24],
- 'inverse' : [7, 27],
- 'white' : [37, 39],
- 'grey' : [90, 39],
- 'black' : [30, 39],
- 'blue' : [34, 39],
- 'cyan' : [36, 39],
- 'green' : [32, 39],
- 'magenta' : [35, 39],
- 'red' : [31, 39],
- 'yellow' : [33, 39]
- };
- // Don't use 'blue' not visible on cmd.exe
- inspect.styles = {
- 'special': 'cyan',
- 'number': 'yellow',
- 'boolean': 'yellow',
- 'undefined': 'grey',
- 'null': 'bold',
- 'string': 'green',
- 'date': 'magenta',
- // "name": intentionally not styling
- 'regexp': 'red'
- };
- function stylizeWithColor(str, styleType) {
- var style = inspect.styles[styleType];
- if (style) {
- return '\u001b[' + inspect.colors[style][0] + 'm' + str +
- '\u001b[' + inspect.colors[style][1] + 'm';
- } else {
- return str;
- }
- }
- function stylizeNoColor(str, styleType) {
- return str;
- }
- function arrayToHash(array) {
- var hash = {};
- array.forEach(function(val, idx) {
- hash[val] = true;
- });
- return hash;
- }
- function formatValue(ctx, value, recurseTimes) {
- // Provide a hook for user-specified inspect functions.
- // Check that value is an object with an inspect function on it
- if (ctx.customInspect &&
- value &&
- isFunction(value.inspect) &&
- // Filter out the util module, it's inspect function is special
- value.inspect !== exports.inspect &&
- // Also filter out any prototype objects using the circular check.
- !(value.constructor && value.constructor.prototype === value)) {
- var ret = value.inspect(recurseTimes, ctx);
- if (!isString(ret)) {
- ret = formatValue(ctx, ret, recurseTimes);
- }
- return ret;
- }
- // Primitive types cannot have properties
- var primitive = formatPrimitive(ctx, value);
- if (primitive) {
- return primitive;
- }
- // Look up the keys of the object.
- var keys = Object.keys(value);
- var visibleKeys = arrayToHash(keys);
- if (ctx.showHidden) {
- keys = Object.getOwnPropertyNames(value);
- }
- // IE doesn't make error fields non-enumerable
- // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
- if (isError(value)
- && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
- return formatError(value);
- }
- // Some type of object without properties can be shortcutted.
- if (keys.length === 0) {
- if (isFunction(value)) {
- var name = value.name ? ': ' + value.name : '';
- return ctx.stylize('[Function' + name + ']', 'special');
- }
- if (isRegExp(value)) {
- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
- }
- if (isDate(value)) {
- return ctx.stylize(Date.prototype.toString.call(value), 'date');
- }
- if (isError(value)) {
- return formatError(value);
- }
- }
- var base = '', array = false, braces = ['{', '}'];
- // Make Array say that they are Array
- if (isArray(value)) {
- array = true;
- braces = ['[', ']'];
- }
- // Make functions say that they are functions
- if (isFunction(value)) {
- var n = value.name ? ': ' + value.name : '';
- base = ' [Function' + n + ']';
- }
- // Make RegExps say that they are RegExps
- if (isRegExp(value)) {
- base = ' ' + RegExp.prototype.toString.call(value);
- }
- // Make dates with properties first say the date
- if (isDate(value)) {
- base = ' ' + Date.prototype.toUTCString.call(value);
- }
- // Make error with message first say the error
- if (isError(value)) {
- base = ' ' + formatError(value);
- }
- if (keys.length === 0 && (!array || value.length == 0)) {
- return braces[0] + base + braces[1];
- }
- if (recurseTimes < 0) {
- if (isRegExp(value)) {
- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
- } else {
- return ctx.stylize('[Object]', 'special');
- }
- }
- ctx.seen.push(value);
- var output;
- if (array) {
- output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
- } else {
- output = keys.map(function(key) {
- return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
- });
- }
- ctx.seen.pop();
- return reduceToSingleString(output, base, braces);
- }
- function formatPrimitive(ctx, value) {
- if (isUndefined(value))
- return ctx.stylize('undefined', 'undefined');
- if (isString(value)) {
- var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
- .replace(/'/g, "\\'")
- .replace(/\\"/g, '"') + '\'';
- return ctx.stylize(simple, 'string');
- }
- if (isNumber(value))
- return ctx.stylize('' + value, 'number');
- if (isBoolean(value))
- return ctx.stylize('' + value, 'boolean');
- // For some reason typeof null is "object", so special case here.
- if (isNull(value))
- return ctx.stylize('null', 'null');
- }
- function formatError(value) {
- return '[' + Error.prototype.toString.call(value) + ']';
- }
- function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
- var output = [];
- for (var i = 0, l = value.length; i < l; ++i) {
- if (hasOwnProperty(value, String(i))) {
- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
- String(i), true));
- } else {
- output.push('');
- }
- }
- keys.forEach(function(key) {
- if (!key.match(/^\d+$/)) {
- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
- key, true));
- }
- });
- return output;
- }
- function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
- var name, str, desc;
- desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
- if (desc.get) {
- if (desc.set) {
- str = ctx.stylize('[Getter/Setter]', 'special');
- } else {
- str = ctx.stylize('[Getter]', 'special');
- }
- } else {
- if (desc.set) {
- str = ctx.stylize('[Setter]', 'special');
- }
- }
- if (!hasOwnProperty(visibleKeys, key)) {
- name = '[' + key + ']';
- }
- if (!str) {
- if (ctx.seen.indexOf(desc.value) < 0) {
- if (isNull(recurseTimes)) {
- str = formatValue(ctx, desc.value, null);
- } else {
- str = formatValue(ctx, desc.value, recurseTimes - 1);
- }
- if (str.indexOf('\n') > -1) {
- if (array) {
- str = str.split('\n').map(function(line) {
- return ' ' + line;
- }).join('\n').substr(2);
- } else {
- str = '\n' + str.split('\n').map(function(line) {
- return ' ' + line;
- }).join('\n');
- }
- }
- } else {
- str = ctx.stylize('[Circular]', 'special');
- }
- }
- if (isUndefined(name)) {
- if (array && key.match(/^\d+$/)) {
- return str;
- }
- name = JSON.stringify('' + key);
- if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
- name = name.substr(1, name.length - 2);
- name = ctx.stylize(name, 'name');
- } else {
- name = name.replace(/'/g, "\\'")
- .replace(/\\"/g, '"')
- .replace(/(^"|"$)/g, "'");
- name = ctx.stylize(name, 'string');
- }
- }
- return name + ': ' + str;
- }
- function reduceToSingleString(output, base, braces) {
- var numLinesEst = 0;
- var length = output.reduce(function(prev, cur) {
- numLinesEst++;
- if (cur.indexOf('\n') >= 0) numLinesEst++;
- return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
- }, 0);
- if (length > 60) {
- return braces[0] +
- (base === '' ? '' : base + '\n ') +
- ' ' +
- output.join(',\n ') +
- ' ' +
- braces[1];
- }
- return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
- }
- // NOTE: These type checking functions intentionally don't use `instanceof`
- // because it is fragile and can be easily faked with `Object.create()`.
- function isArray(ar) {
- return Array.isArray(ar);
- }
- exports.isArray = isArray;
- function isBoolean(arg) {
- return typeof arg === 'boolean';
- }
- exports.isBoolean = isBoolean;
- function isNull(arg) {
- return arg === null;
- }
- exports.isNull = isNull;
- function isNullOrUndefined(arg) {
- return arg == null;
- }
- exports.isNullOrUndefined = isNullOrUndefined;
- function isNumber(arg) {
- return typeof arg === 'number';
- }
- exports.isNumber = isNumber;
- function isString(arg) {
- return typeof arg === 'string';
- }
- exports.isString = isString;
- function isSymbol(arg) {
- return typeof arg === 'symbol';
- }
- exports.isSymbol = isSymbol;
- function isUndefined(arg) {
- return arg === void 0;
- }
- exports.isUndefined = isUndefined;
- function isRegExp(re) {
- return isObject(re) && objectToString(re) === '[object RegExp]';
- }
- exports.isRegExp = isRegExp;
- function isObject(arg) {
- return typeof arg === 'object' && arg !== null;
- }
- exports.isObject = isObject;
- function isDate(d) {
- return isObject(d) && objectToString(d) === '[object Date]';
- }
- exports.isDate = isDate;
- function isError(e) {
- return isObject(e) &&
- (objectToString(e) === '[object Error]' || e instanceof Error);
- }
- exports.isError = isError;
- function isFunction(arg) {
- return typeof arg === 'function';
- }
- exports.isFunction = isFunction;
- function isPrimitive(arg) {
- return arg === null ||
- typeof arg === 'boolean' ||
- typeof arg === 'number' ||
- typeof arg === 'string' ||
- typeof arg === 'symbol' || // ES6 symbol
- typeof arg === 'undefined';
- }
- exports.isPrimitive = isPrimitive;
- exports.isBuffer = require('./support/isBuffer');
- function objectToString(o) {
- return Object.prototype.toString.call(o);
- }
- function pad(n) {
- return n < 10 ? '0' + n.toString(10) : n.toString(10);
- }
- var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
- 'Oct', 'Nov', 'Dec'];
- // 26 Feb 16:19:34
- function timestamp() {
- var d = new Date();
- var time = [pad(d.getHours()),
- pad(d.getMinutes()),
- pad(d.getSeconds())].join(':');
- return [d.getDate(), months[d.getMonth()], time].join(' ');
- }
- // log is just a thin wrapper to console.log that prepends a timestamp
- exports.log = function() {
- console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
- };
- /**
- * Inherit the prototype methods from one constructor into another.
- *
- * The Function.prototype.inherits from lang.js rewritten as a standalone
- * function (not on Function.prototype). NOTE: If this file is to be loaded
- * during bootstrapping this function needs to be rewritten using some native
- * functions as prototype setup using normal JavaScript does not work as
- * expected during bootstrapping (see mirror.js in r114903).
- *
- * @param {function} ctor Constructor function which needs to inherit the
- * prototype.
- * @param {function} superCtor Constructor function to inherit prototype from.
- */
- exports.inherits = require('inherits');
- exports._extend = function(origin, add) {
- // Don't do anything if add isn't an object
- if (!add || !isObject(add)) return origin;
- var keys = Object.keys(add);
- var i = keys.length;
- while (i--) {
- origin[keys[i]] = add[keys[i]];
- }
- return origin;
- };
- function hasOwnProperty(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
- }
- }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"./support/isBuffer":342,"_process":284,"inherits":341}],344:[function(require,module,exports){
- var indexOf = require('indexof');
- var Object_keys = function (obj) {
- if (Object.keys) return Object.keys(obj)
- else {
- var res = [];
- for (var key in obj) res.push(key)
- return res;
- }
- };
- var forEach = function (xs, fn) {
- if (xs.forEach) return xs.forEach(fn)
- else for (var i = 0; i < xs.length; i++) {
- fn(xs[i], i, xs);
- }
- };
- var defineProp = (function() {
- try {
- Object.defineProperty({}, '_', {});
- return function(obj, name, value) {
- Object.defineProperty(obj, name, {
- writable: true,
- enumerable: false,
- configurable: true,
- value: value
- })
- };
- } catch(e) {
- return function(obj, name, value) {
- obj[name] = value;
- };
- }
- }());
- var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',
- 'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',
- 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',
- 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',
- 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];
- function Context() {}
- Context.prototype = {};
- var Script = exports.Script = function NodeScript (code) {
- if (!(this instanceof Script)) return new Script(code);
- this.code = code;
- };
- Script.prototype.runInContext = function (context) {
- if (!(context instanceof Context)) {
- throw new TypeError("needs a 'context' argument.");
- }
-
- var iframe = document.createElement('iframe');
- if (!iframe.style) iframe.style = {};
- iframe.style.display = 'none';
-
- document.body.appendChild(iframe);
-
- var win = iframe.contentWindow;
- var wEval = win.eval, wExecScript = win.execScript;
- if (!wEval && wExecScript) {
- // win.eval() magically appears when this is called in IE:
- wExecScript.call(win, 'null');
- wEval = win.eval;
- }
-
- forEach(Object_keys(context), function (key) {
- win[key] = context[key];
- });
- forEach(globals, function (key) {
- if (context[key]) {
- win[key] = context[key];
- }
- });
-
- var winKeys = Object_keys(win);
- var res = wEval.call(win, this.code);
-
- forEach(Object_keys(win), function (key) {
- // Avoid copying circular objects like `top` and `window` by only
- // updating existing context properties or new properties in the `win`
- // that was only introduced after the eval.
- if (key in context || indexOf(winKeys, key) === -1) {
- context[key] = win[key];
- }
- });
- forEach(globals, function (key) {
- if (!(key in context)) {
- defineProp(context, key, win[key]);
- }
- });
-
- document.body.removeChild(iframe);
-
- return res;
- };
- Script.prototype.runInThisContext = function () {
- return eval(this.code); // maybe...
- };
- Script.prototype.runInNewContext = function (context) {
- var ctx = Script.createContext(context);
- var res = this.runInContext(ctx);
- forEach(Object_keys(ctx), function (key) {
- context[key] = ctx[key];
- });
- return res;
- };
- forEach(Object_keys(Script.prototype), function (name) {
- exports[name] = Script[name] = function (code) {
- var s = Script(code);
- return s[name].apply(s, [].slice.call(arguments, 1));
- };
- });
- exports.createScript = function (code) {
- return exports.Script(code);
- };
- exports.createContext = Script.createContext = function (context) {
- var copy = new Context();
- if(typeof context === 'object') {
- forEach(Object_keys(context), function (key) {
- copy[key] = context[key];
- });
- }
- return copy;
- };
- },{"indexof":261}],345:[function(require,module,exports){
- var Pbf = require('pbf')
- var GeoJSONWrapper = require('./lib/geojson_wrapper')
- module.exports = fromVectorTileJs
- module.exports.fromVectorTileJs = fromVectorTileJs
- module.exports.fromGeojsonVt = fromGeojsonVt
- module.exports.GeoJSONWrapper = GeoJSONWrapper
- /**
- * Serialize a vector-tile-js-created tile to pbf
- *
- * @param {Object} tile
- * @return {Buffer} uncompressed, pbf-serialized tile data
- */
- function fromVectorTileJs (tile) {
- var out = new Pbf()
- writeTile(tile, out)
- return out.finish()
- }
- /**
- * Serialized a geojson-vt-created tile to pbf.
- *
- * @param {Object} layers - An object mapping layer names to geojson-vt-created vector tile objects
- * @param {Object} [options] - An object specifying the vector-tile specification version and extent that were used to create `layers`.
- * @param {Number} [options.version=1] - Version of vector-tile spec used
- * @param {Number} [options.extent=4096] - Extent of the vector tile
- * @return {Buffer} uncompressed, pbf-serialized tile data
- */
- function fromGeojsonVt (layers, options) {
- options = options || {}
- var l = {}
- for (var k in layers) {
- l[k] = new GeoJSONWrapper(layers[k].features, options)
- l[k].name = k
- l[k].version = options.version
- l[k].extent = options.extent
- }
- return fromVectorTileJs({layers: l})
- }
- function writeTile (tile, pbf) {
- for (var key in tile.layers) {
- pbf.writeMessage(3, writeLayer, tile.layers[key])
- }
- }
- function writeLayer (layer, pbf) {
- pbf.writeVarintField(15, layer.version || 1)
- pbf.writeStringField(1, layer.name || '')
- pbf.writeVarintField(5, layer.extent || 4096)
- var i
- var context = {
- keys: [],
- values: [],
- keycache: {},
- valuecache: {}
- }
- for (i = 0; i < layer.length; i++) {
- context.feature = layer.feature(i)
- pbf.writeMessage(2, writeFeature, context)
- }
- var keys = context.keys
- for (i = 0; i < keys.length; i++) {
- pbf.writeStringField(3, keys[i])
- }
- var values = context.values
- for (i = 0; i < values.length; i++) {
- pbf.writeMessage(4, writeValue, values[i])
- }
- }
- function writeFeature (context, pbf) {
- var feature = context.feature
- if (feature.id !== undefined) {
- pbf.writeVarintField(1, feature.id)
- }
- pbf.writeMessage(2, writeProperties, context)
- pbf.writeVarintField(3, feature.type)
- pbf.writeMessage(4, writeGeometry, feature)
- }
- function writeProperties (context, pbf) {
- var feature = context.feature
- var keys = context.keys
- var values = context.values
- var keycache = context.keycache
- var valuecache = context.valuecache
- for (var key in feature.properties) {
- var keyIndex = keycache[key]
- if (typeof keyIndex === 'undefined') {
- keys.push(key)
- keyIndex = keys.length - 1
- keycache[key] = keyIndex
- }
- pbf.writeVarint(keyIndex)
- var value = feature.properties[key]
- var type = typeof value
- if (type !== 'string' && type !== 'boolean' && type !== 'number') {
- value = JSON.stringify(value)
- }
- var valueKey = type + ':' + value
- var valueIndex = valuecache[valueKey]
- if (typeof valueIndex === 'undefined') {
- values.push(value)
- valueIndex = values.length - 1
- valuecache[valueKey] = valueIndex
- }
- pbf.writeVarint(valueIndex)
- }
- }
- function command (cmd, length) {
- return (length << 3) + (cmd & 0x7)
- }
- function zigzag (num) {
- return (num << 1) ^ (num >> 31)
- }
- function writeGeometry (feature, pbf) {
- var geometry = feature.loadGeometry()
- var type = feature.type
- var x = 0
- var y = 0
- var rings = geometry.length
- for (var r = 0; r < rings; r++) {
- var ring = geometry[r]
- var count = 1
- if (type === 1) {
- count = ring.length
- }
- pbf.writeVarint(command(1, count)) // moveto
- // do not write polygon closing path as lineto
- var lineCount = type === 3 ? ring.length - 1 : ring.length
- for (var i = 0; i < lineCount; i++) {
- if (i === 1 && type !== 1) {
- pbf.writeVarint(command(2, lineCount - 1)) // lineto
- }
- var dx = ring[i].x - x
- var dy = ring[i].y - y
- pbf.writeVarint(zigzag(dx))
- pbf.writeVarint(zigzag(dy))
- x += dx
- y += dy
- }
- if (type === 3) {
- pbf.writeVarint(command(7, 1)) // closepath
- }
- }
- }
- function writeValue (value, pbf) {
- var type = typeof value
- if (type === 'string') {
- pbf.writeStringField(1, value)
- } else if (type === 'boolean') {
- pbf.writeBooleanField(7, value)
- } else if (type === 'number') {
- if (value % 1 !== 0) {
- pbf.writeDoubleField(3, value)
- } else if (value < 0) {
- pbf.writeSVarintField(6, value)
- } else {
- pbf.writeVarintField(5, value)
- }
- }
- }
- },{"./lib/geojson_wrapper":346,"pbf":277}],346:[function(require,module,exports){
- 'use strict'
- var Point = require('@mapbox/point-geometry')
- var VectorTileFeature = require('@mapbox/vector-tile').VectorTileFeature
- module.exports = GeoJSONWrapper
- // conform to vectortile api
- function GeoJSONWrapper (features, options) {
- this.options = options || {}
- this.features = features
- this.length = features.length
- }
- GeoJSONWrapper.prototype.feature = function (i) {
- return new FeatureWrapper(this.features[i], this.options.extent)
- }
- function FeatureWrapper (feature, extent) {
- this.id = typeof feature.id === 'number' ? feature.id : undefined
- this.type = feature.type
- this.rawGeometry = feature.type === 1 ? [feature.geometry] : feature.geometry
- this.properties = feature.tags
- this.extent = extent || 4096
- }
- FeatureWrapper.prototype.loadGeometry = function () {
- var rings = this.rawGeometry
- this.geometry = []
- for (var i = 0; i < rings.length; i++) {
- var ring = rings[i]
- var newRing = []
- for (var j = 0; j < ring.length; j++) {
- newRing.push(new Point(ring[j][0], ring[j][1]))
- }
- this.geometry.push(newRing)
- }
- return this.geometry
- }
- FeatureWrapper.prototype.bbox = function () {
- if (!this.geometry) this.loadGeometry()
- var rings = this.geometry
- var x1 = Infinity
- var x2 = -Infinity
- var y1 = Infinity
- var y2 = -Infinity
- for (var i = 0; i < rings.length; i++) {
- var ring = rings[i]
- for (var j = 0; j < ring.length; j++) {
- var coord = ring[j]
- x1 = Math.min(x1, coord.x)
- x2 = Math.max(x2, coord.x)
- y1 = Math.min(y1, coord.y)
- y2 = Math.max(y2, coord.y)
- }
- }
- return [x1, y1, x2, y2]
- }
- FeatureWrapper.prototype.toGeoJSON = VectorTileFeature.prototype.toGeoJSON
- },{"@mapbox/point-geometry":112,"@mapbox/vector-tile":113}],347:[function(require,module,exports){
- var bundleFn = arguments[3];
- var sources = arguments[4];
- var cache = arguments[5];
- var stringify = JSON.stringify;
- module.exports = function (fn, options) {
- var wkey;
- var cacheKeys = Object.keys(cache);
- for (var i = 0, l = cacheKeys.length; i < l; i++) {
- var key = cacheKeys[i];
- var exp = cache[key].exports;
- // Using babel as a transpiler to use esmodule, the export will always
- // be an object with the default export as a property of it. To ensure
- // the existing api and babel esmodule exports are both supported we
- // check for both
- if (exp === fn || exp && exp.default === fn) {
- wkey = key;
- break;
- }
- }
- if (!wkey) {
- wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);
- var wcache = {};
- for (var i = 0, l = cacheKeys.length; i < l; i++) {
- var key = cacheKeys[i];
- wcache[key] = key;
- }
- sources[wkey] = [
- 'function(require,module,exports){' + fn + '(self); }',
- wcache
- ];
- }
- var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);
- var scache = {}; scache[wkey] = wkey;
- sources[skey] = [
- 'function(require,module,exports){' +
- // try to call default if defined to also support babel esmodule exports
- 'var f = require(' + stringify(wkey) + ');' +
- '(f.default ? f.default : f)(self);' +
- '}',
- scache
- ];
- var workerSources = {};
- resolveSources(skey);
- function resolveSources(key) {
- workerSources[key] = true;
- for (var depPath in sources[key][1]) {
- var depKey = sources[key][1][depPath];
- if (!workerSources[depKey]) {
- resolveSources(depKey);
- }
- }
- }
- var src = '(' + bundleFn + ')({'
- + Object.keys(workerSources).map(function (key) {
- return stringify(key) + ':['
- + sources[key][0]
- + ',' + stringify(sources[key][1]) + ']'
- ;
- }).join(',')
- + '},{},[' + stringify(skey) + '])'
- ;
- var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
- var blob = new Blob([src], { type: 'text/javascript' });
- if (options && options.bare) { return blob; }
- var workerUrl = URL.createObjectURL(blob);
- var worker = new Worker(workerUrl);
- worker.objectURL = workerUrl;
- return worker;
- };
- },{}],348:[function(require,module,exports){
- (function (Buffer){
- module.exports = BinaryReader;
- function BinaryReader(buffer, isBigEndian) {
- this.buffer = buffer;
- this.position = 0;
- this.isBigEndian = isBigEndian || false;
- }
- function _read(readLE, readBE, size) {
- return function () {
- var value;
- if (this.isBigEndian)
- value = readBE.call(this.buffer, this.position);
- else
- value = readLE.call(this.buffer, this.position);
- this.position += size;
- return value;
- };
- }
- BinaryReader.prototype.readUInt8 = _read(Buffer.prototype.readUInt8, Buffer.prototype.readUInt8, 1);
- BinaryReader.prototype.readUInt16 = _read(Buffer.prototype.readUInt16LE, Buffer.prototype.readUInt16BE, 2);
- BinaryReader.prototype.readUInt32 = _read(Buffer.prototype.readUInt32LE, Buffer.prototype.readUInt32BE, 4);
- BinaryReader.prototype.readInt8 = _read(Buffer.prototype.readInt8, Buffer.prototype.readInt8, 1);
- BinaryReader.prototype.readInt16 = _read(Buffer.prototype.readInt16LE, Buffer.prototype.readInt16BE, 2);
- BinaryReader.prototype.readInt32 = _read(Buffer.prototype.readInt32LE, Buffer.prototype.readInt32BE, 4);
- BinaryReader.prototype.readFloat = _read(Buffer.prototype.readFloatLE, Buffer.prototype.readFloatBE, 4);
- BinaryReader.prototype.readDouble = _read(Buffer.prototype.readDoubleLE, Buffer.prototype.readDoubleBE, 8);
- BinaryReader.prototype.readVarInt = function () {
- var nextByte,
- result = 0,
- bytesRead = 0;
- do {
- nextByte = this.buffer[this.position + bytesRead];
- result += (nextByte & 0x7F) << (7 * bytesRead);
- bytesRead++;
- } while (nextByte >= 0x80);
- this.position += bytesRead;
- return result;
- };
- }).call(this,require("buffer").Buffer)
- },{"buffer":182}],349:[function(require,module,exports){
- (function (Buffer){
- module.exports = BinaryWriter;
- function BinaryWriter(size, allowResize) {
- this.buffer = new Buffer(size);
- this.position = 0;
- this.allowResize = allowResize;
- }
- function _write(write, size) {
- return function (value, noAssert) {
- this.ensureSize(size);
- write.call(this.buffer, value, this.position, noAssert);
- this.position += size;
- };
- }
- BinaryWriter.prototype.writeUInt8 = _write(Buffer.prototype.writeUInt8, 1);
- BinaryWriter.prototype.writeUInt16LE = _write(Buffer.prototype.writeUInt16LE, 2);
- BinaryWriter.prototype.writeUInt16BE = _write(Buffer.prototype.writeUInt16BE, 2);
- BinaryWriter.prototype.writeUInt32LE = _write(Buffer.prototype.writeUInt32LE, 4);
- BinaryWriter.prototype.writeUInt32BE = _write(Buffer.prototype.writeUInt32BE, 4);
- BinaryWriter.prototype.writeInt8 = _write(Buffer.prototype.writeInt8, 1);
- BinaryWriter.prototype.writeInt16LE = _write(Buffer.prototype.writeInt16LE, 2);
- BinaryWriter.prototype.writeInt16BE = _write(Buffer.prototype.writeInt16BE, 2);
- BinaryWriter.prototype.writeInt32LE = _write(Buffer.prototype.writeInt32LE, 4);
- BinaryWriter.prototype.writeInt32BE = _write(Buffer.prototype.writeInt32BE, 4);
- BinaryWriter.prototype.writeFloatLE = _write(Buffer.prototype.writeFloatLE, 4);
- BinaryWriter.prototype.writeFloatBE = _write(Buffer.prototype.writeFloatBE, 4);
- BinaryWriter.prototype.writeDoubleLE = _write(Buffer.prototype.writeDoubleLE, 8);
- BinaryWriter.prototype.writeDoubleBE = _write(Buffer.prototype.writeDoubleBE, 8);
- BinaryWriter.prototype.writeBuffer = function (buffer) {
- this.ensureSize(buffer.length);
- buffer.copy(this.buffer, this.position, 0, buffer.length);
- this.position += buffer.length;
- };
- BinaryWriter.prototype.writeVarInt = function (value) {
- var length = 1;
- while ((value & 0xFFFFFF80) !== 0) {
- this.writeUInt8((value & 0x7F) | 0x80);
- value >>>= 7;
- length++;
- }
- this.writeUInt8(value & 0x7F);
- return length;
- };
- BinaryWriter.prototype.ensureSize = function (size) {
- if (this.buffer.length < this.position + size) {
- if (this.allowResize) {
- var tempBuffer = new Buffer(this.position + size);
- this.buffer.copy(tempBuffer, 0, 0, this.buffer.length);
- this.buffer = tempBuffer;
- }
- else {
- throw new RangeError('index out of range');
- }
- }
- };
- }).call(this,require("buffer").Buffer)
- },{"buffer":182}],350:[function(require,module,exports){
- (function (Buffer){
- module.exports = Geometry;
- var Types = require('./types');
- var Point = require('./point');
- var LineString = require('./linestring');
- var Polygon = require('./polygon');
- var MultiPoint = require('./multipoint');
- var MultiLineString = require('./multilinestring');
- var MultiPolygon = require('./multipolygon');
- var GeometryCollection = require('./geometrycollection');
- var BinaryReader = require('./binaryreader');
- var BinaryWriter = require('./binarywriter');
- var WktParser = require('./wktparser');
- var ZigZag = require('./zigzag.js');
- function Geometry() {
- this.srid = undefined;
- this.hasZ = false;
- this.hasM = false;
- }
- Geometry.parse = function (value, options) {
- var valueType = typeof value;
- if (valueType === 'string' || value instanceof WktParser)
- return Geometry._parseWkt(value);
- else if (Buffer.isBuffer(value) || value instanceof BinaryReader)
- return Geometry._parseWkb(value, options);
- else
- throw new Error('first argument must be a string or Buffer');
- };
- Geometry._parseWkt = function (value) {
- var wktParser,
- srid;
- if (value instanceof WktParser)
- wktParser = value;
- else
- wktParser = new WktParser(value);
- var match = wktParser.matchRegex([/^SRID=(\d+);/]);
- if (match)
- srid = parseInt(match[1], 10);
- var geometryType = wktParser.matchType();
- var dimension = wktParser.matchDimension();
- var options = {
- srid: srid,
- hasZ: dimension.hasZ,
- hasM: dimension.hasM
- };
- switch (geometryType) {
- case Types.wkt.Point:
- return Point._parseWkt(wktParser, options);
- case Types.wkt.LineString:
- return LineString._parseWkt(wktParser, options);
- case Types.wkt.Polygon:
- return Polygon._parseWkt(wktParser, options);
- case Types.wkt.MultiPoint:
- return MultiPoint._parseWkt(wktParser, options);
- case Types.wkt.MultiLineString:
- return MultiLineString._parseWkt(wktParser, options);
- case Types.wkt.MultiPolygon:
- return MultiPolygon._parseWkt(wktParser, options);
- case Types.wkt.GeometryCollection:
- return GeometryCollection._parseWkt(wktParser, options);
- }
- };
- Geometry._parseWkb = function (value, parentOptions) {
- var binaryReader,
- wkbType,
- geometryType,
- options = {};
- if (value instanceof BinaryReader)
- binaryReader = value;
- else
- binaryReader = new BinaryReader(value);
- binaryReader.isBigEndian = !binaryReader.readInt8();
- wkbType = binaryReader.readUInt32();
- options.hasSrid = (wkbType & 0x20000000) === 0x20000000;
- options.isEwkb = (wkbType & 0x20000000) || (wkbType & 0x40000000) || (wkbType & 0x80000000);
-
- if (options.hasSrid)
- options.srid = binaryReader.readUInt32();
- options.hasZ = false;
- options.hasM = false;
- if (!options.isEwkb && (!parentOptions || !parentOptions.isEwkb)) {
- if (wkbType >= 1000 && wkbType < 2000) {
- options.hasZ = true;
- geometryType = wkbType - 1000;
- }
- else if (wkbType >= 2000 && wkbType < 3000) {
- options.hasM = true;
- geometryType = wkbType - 2000;
- }
- else if (wkbType >= 3000 && wkbType < 4000) {
- options.hasZ = true;
- options.hasM = true;
- geometryType = wkbType - 3000;
- }
- else {
- geometryType = wkbType;
- }
- }
- else {
- if (wkbType & 0x80000000)
- options.hasZ = true;
- if (wkbType & 0x40000000)
- options.hasM = true;
- geometryType = wkbType & 0xF;
- }
- switch (geometryType) {
- case Types.wkb.Point:
- return Point._parseWkb(binaryReader, options);
- case Types.wkb.LineString:
- return LineString._parseWkb(binaryReader, options);
- case Types.wkb.Polygon:
- return Polygon._parseWkb(binaryReader, options);
- case Types.wkb.MultiPoint:
- return MultiPoint._parseWkb(binaryReader, options);
- case Types.wkb.MultiLineString:
- return MultiLineString._parseWkb(binaryReader, options);
- case Types.wkb.MultiPolygon:
- return MultiPolygon._parseWkb(binaryReader, options);
- case Types.wkb.GeometryCollection:
- return GeometryCollection._parseWkb(binaryReader, options);
- default:
- throw new Error('GeometryType ' + geometryType + ' not supported');
- }
- };
- Geometry.parseTwkb = function (value) {
- var binaryReader,
- options = {};
- if (value instanceof BinaryReader)
- binaryReader = value;
- else
- binaryReader = new BinaryReader(value);
- var type = binaryReader.readUInt8();
- var metadataHeader = binaryReader.readUInt8();
- var geometryType = type & 0x0F;
- options.precision = ZigZag.decode(type >> 4);
- options.precisionFactor = Math.pow(10, options.precision);
- options.hasBoundingBox = metadataHeader >> 0 & 1;
- options.hasSizeAttribute = metadataHeader >> 1 & 1;
- options.hasIdList = metadataHeader >> 2 & 1;
- options.hasExtendedPrecision = metadataHeader >> 3 & 1;
- options.isEmpty = metadataHeader >> 4 & 1;
- if (options.hasExtendedPrecision) {
- var extendedPrecision = binaryReader.readUInt8();
- options.hasZ = (extendedPrecision & 0x01) === 0x01;
- options.hasM = (extendedPrecision & 0x02) === 0x02;
- options.zPrecision = ZigZag.decode((extendedPrecision & 0x1C) >> 2);
- options.zPrecisionFactor = Math.pow(10, options.zPrecision);
- options.mPrecision = ZigZag.decode((extendedPrecision & 0xE0) >> 5);
- options.mPrecisionFactor = Math.pow(10, options.mPrecision);
- }
- else {
- options.hasZ = false;
- options.hasM = false;
- }
- if (options.hasSizeAttribute)
- binaryReader.readVarInt();
- if (options.hasBoundingBox) {
- var dimensions = 2;
- if (options.hasZ)
- dimensions++;
- if (options.hasM)
- dimensions++;
- for (var i = 0; i < dimensions; i++) {
- binaryReader.readVarInt();
- binaryReader.readVarInt();
- }
- }
- switch (geometryType) {
- case Types.wkb.Point:
- return Point._parseTwkb(binaryReader, options);
- case Types.wkb.LineString:
- return LineString._parseTwkb(binaryReader, options);
- case Types.wkb.Polygon:
- return Polygon._parseTwkb(binaryReader, options);
- case Types.wkb.MultiPoint:
- return MultiPoint._parseTwkb(binaryReader, options);
- case Types.wkb.MultiLineString:
- return MultiLineString._parseTwkb(binaryReader, options);
- case Types.wkb.MultiPolygon:
- return MultiPolygon._parseTwkb(binaryReader, options);
- case Types.wkb.GeometryCollection:
- return GeometryCollection._parseTwkb(binaryReader, options);
- default:
- throw new Error('GeometryType ' + geometryType + ' not supported');
- }
- };
- Geometry.parseGeoJSON = function (value) {
- return Geometry._parseGeoJSON(value);
- };
- Geometry._parseGeoJSON = function (value, isSubGeometry) {
- var geometry;
- switch (value.type) {
- case Types.geoJSON.Point:
- geometry = Point._parseGeoJSON(value); break;
- case Types.geoJSON.LineString:
- geometry = LineString._parseGeoJSON(value); break;
- case Types.geoJSON.Polygon:
- geometry = Polygon._parseGeoJSON(value); break;
- case Types.geoJSON.MultiPoint:
- geometry = MultiPoint._parseGeoJSON(value); break;
- case Types.geoJSON.MultiLineString:
- geometry = MultiLineString._parseGeoJSON(value); break;
- case Types.geoJSON.MultiPolygon:
- geometry = MultiPolygon._parseGeoJSON(value); break;
- case Types.geoJSON.GeometryCollection:
- geometry = GeometryCollection._parseGeoJSON(value); break;
- default:
- throw new Error('GeometryType ' + value.type + ' not supported');
- }
- if (value.crs && value.crs.type && value.crs.type === 'name' && value.crs.properties && value.crs.properties.name) {
- var crs = value.crs.properties.name;
- if (crs.indexOf('EPSG:') === 0)
- geometry.srid = parseInt(crs.substring(5));
- else if (crs.indexOf('urn:ogc:def:crs:EPSG::') === 0)
- geometry.srid = parseInt(crs.substring(22));
- else
- throw new Error('Unsupported crs: ' + crs);
- }
- else if (!isSubGeometry) {
- geometry.srid = 4326;
- }
- return geometry;
- };
- Geometry.prototype.toEwkt = function () {
- return 'SRID=' + this.srid + ';' + this.toWkt();
- };
- Geometry.prototype.toEwkb = function () {
- var ewkb = new BinaryWriter(this._getWkbSize() + 4);
- var wkb = this.toWkb();
- ewkb.writeInt8(1);
- ewkb.writeUInt32LE(wkb.slice(1, 5).readUInt32LE(0) | 0x20000000, true);
- ewkb.writeUInt32LE(this.srid);
- ewkb.writeBuffer(wkb.slice(5));
- return ewkb.buffer;
- };
- Geometry.prototype._getWktType = function (wktType, isEmpty) {
- var wkt = wktType;
- if (this.hasZ && this.hasM)
- wkt += ' ZM ';
- else if (this.hasZ)
- wkt += ' Z ';
- else if (this.hasM)
- wkt += ' M ';
- if (isEmpty && !this.hasZ && !this.hasM)
- wkt += ' ';
- if (isEmpty)
- wkt += 'EMPTY';
- return wkt;
- };
- Geometry.prototype._getWktCoordinate = function (point) {
- var coordinates = point.x + ' ' + point.y;
- if (this.hasZ)
- coordinates += ' ' + point.z;
- if (this.hasM)
- coordinates += ' ' + point.m;
- return coordinates;
- };
- Geometry.prototype._writeWkbType = function (wkb, geometryType, parentOptions) {
- var dimensionType = 0;
- if (typeof this.srid === 'undefined' && (!parentOptions || typeof parentOptions.srid === 'undefined')) {
- if (this.hasZ && this.hasM)
- dimensionType += 3000;
- else if(this.hasZ)
- dimensionType += 1000;
- else if(this.hasM)
- dimensionType += 2000;
- }
- else {
- if (this.hasZ)
- dimensionType |= 0x80000000;
- if (this.hasM)
- dimensionType |= 0x40000000;
- }
- wkb.writeUInt32LE(dimensionType + geometryType, true);
- };
- Geometry.getTwkbPrecision = function (xyPrecision, zPrecision, mPrecision) {
- return {
- xy: xyPrecision,
- z: zPrecision,
- m: mPrecision,
- xyFactor: Math.pow(10, xyPrecision),
- zFactor: Math.pow(10, zPrecision),
- mFactor: Math.pow(10, mPrecision)
- };
- };
- Geometry.prototype._writeTwkbHeader = function (twkb, geometryType, precision, isEmpty) {
- var type = (ZigZag.encode(precision.xy) << 4) + geometryType;
- var metadataHeader = (this.hasZ || this.hasM) << 3;
- metadataHeader += isEmpty << 4;
- twkb.writeUInt8(type);
- twkb.writeUInt8(metadataHeader);
- if (this.hasZ || this.hasM) {
- var extendedPrecision = 0;
- if (this.hasZ)
- extendedPrecision |= 0x1;
- if (this.hasM)
- extendedPrecision |= 0x2;
- twkb.writeUInt8(extendedPrecision);
- }
- };
- Geometry.prototype.toGeoJSON = function (options) {
- var geoJSON = {};
- if (this.srid) {
- if (options) {
- if (options.shortCrs) {
- geoJSON.crs = {
- type: 'name',
- properties: {
- name: 'EPSG:' + this.srid
- }
- };
- }
- else if (options.longCrs) {
- geoJSON.crs = {
- type: 'name',
- properties: {
- name: 'urn:ogc:def:crs:EPSG::' + this.srid
- }
- };
- }
- }
- }
- return geoJSON;
- };
- }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
- },{"../../is-buffer/index.js":263,"./binaryreader":348,"./binarywriter":349,"./geometrycollection":351,"./linestring":352,"./multilinestring":353,"./multipoint":354,"./multipolygon":355,"./point":356,"./polygon":357,"./types":358,"./wktparser":359,"./zigzag.js":361}],351:[function(require,module,exports){
- module.exports = GeometryCollection;
- var util = require('util');
- var Types = require('./types');
- var Geometry = require('./geometry');
- var BinaryWriter = require('./binarywriter');
- function GeometryCollection(geometries, srid) {
- Geometry.call(this);
- this.geometries = geometries || [];
- this.srid = srid;
- if (this.geometries.length > 0) {
- this.hasZ = this.geometries[0].hasZ;
- this.hasM = this.geometries[0].hasM;
- }
- }
- util.inherits(GeometryCollection, Geometry);
- GeometryCollection.Z = function (geometries, srid) {
- var geometryCollection = new GeometryCollection(geometries, srid);
- geometryCollection.hasZ = true;
- return geometryCollection;
- };
- GeometryCollection.M = function (geometries, srid) {
- var geometryCollection = new GeometryCollection(geometries, srid);
- geometryCollection.hasM = true;
- return geometryCollection;
- };
- GeometryCollection.ZM = function (geometries, srid) {
- var geometryCollection = new GeometryCollection(geometries, srid);
- geometryCollection.hasZ = true;
- geometryCollection.hasM = true;
- return geometryCollection;
- };
- GeometryCollection._parseWkt = function (value, options) {
- var geometryCollection = new GeometryCollection();
- geometryCollection.srid = options.srid;
- geometryCollection.hasZ = options.hasZ;
- geometryCollection.hasM = options.hasM;
- if (value.isMatch(['EMPTY']))
- return geometryCollection;
- value.expectGroupStart();
- do {
- geometryCollection.geometries.push(Geometry.parse(value));
- } while (value.isMatch([',']));
- value.expectGroupEnd();
- return geometryCollection;
- };
- GeometryCollection._parseWkb = function (value, options) {
- var geometryCollection = new GeometryCollection();
- geometryCollection.srid = options.srid;
- geometryCollection.hasZ = options.hasZ;
- geometryCollection.hasM = options.hasM;
- var geometryCount = value.readUInt32();
- for (var i = 0; i < geometryCount; i++)
- geometryCollection.geometries.push(Geometry.parse(value, options));
- return geometryCollection;
- };
- GeometryCollection._parseTwkb = function (value, options) {
- var geometryCollection = new GeometryCollection();
- geometryCollection.hasZ = options.hasZ;
- geometryCollection.hasM = options.hasM;
- if (options.isEmpty)
- return geometryCollection;
- var geometryCount = value.readVarInt();
- for (var i = 0; i < geometryCount; i++)
- geometryCollection.geometries.push(Geometry.parseTwkb(value));
- return geometryCollection;
- };
- GeometryCollection._parseGeoJSON = function (value) {
- var geometryCollection = new GeometryCollection();
- for (var i = 0; i < value.geometries.length; i++)
- geometryCollection.geometries.push(Geometry._parseGeoJSON(value.geometries[i], true));
- if (geometryCollection.geometries.length > 0)
- geometryCollection.hasZ = geometryCollection.geometries[0].hasZ;
- return geometryCollection;
- };
- GeometryCollection.prototype.toWkt = function () {
- if (this.geometries.length === 0)
- return this._getWktType(Types.wkt.GeometryCollection, true);
- var wkt = this._getWktType(Types.wkt.GeometryCollection, false) + '(';
- for (var i = 0; i < this.geometries.length; i++)
- wkt += this.geometries[i].toWkt() + ',';
- wkt = wkt.slice(0, -1);
- wkt += ')';
- return wkt;
- };
- GeometryCollection.prototype.toWkb = function () {
- var wkb = new BinaryWriter(this._getWkbSize());
- wkb.writeInt8(1);
- this._writeWkbType(wkb, Types.wkb.GeometryCollection);
- wkb.writeUInt32LE(this.geometries.length);
- for (var i = 0; i < this.geometries.length; i++)
- wkb.writeBuffer(this.geometries[i].toWkb({ srid: this.srid }));
- return wkb.buffer;
- };
- GeometryCollection.prototype.toTwkb = function () {
- var twkb = new BinaryWriter(0, true);
- var precision = Geometry.getTwkbPrecision(5, 0, 0);
- var isEmpty = this.geometries.length === 0;
- this._writeTwkbHeader(twkb, Types.wkb.GeometryCollection, precision, isEmpty);
- if (this.geometries.length > 0) {
- twkb.writeVarInt(this.geometries.length);
- for (var i = 0; i < this.geometries.length; i++)
- twkb.writeBuffer(this.geometries[i].toTwkb());
- }
- return twkb.buffer;
- };
- GeometryCollection.prototype._getWkbSize = function () {
- var size = 1 + 4 + 4;
- for (var i = 0; i < this.geometries.length; i++)
- size += this.geometries[i]._getWkbSize();
- return size;
- };
- GeometryCollection.prototype.toGeoJSON = function (options) {
- var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);
- geoJSON.type = Types.geoJSON.GeometryCollection;
- geoJSON.geometries = [];
- for (var i = 0; i < this.geometries.length; i++)
- geoJSON.geometries.push(this.geometries[i].toGeoJSON());
- return geoJSON;
- };
- },{"./binarywriter":349,"./geometry":350,"./types":358,"util":343}],352:[function(require,module,exports){
- module.exports = LineString;
- var util = require('util');
- var Geometry = require('./geometry');
- var Types = require('./types');
- var Point = require('./point');
- var BinaryWriter = require('./binarywriter');
- function LineString(points, srid) {
- Geometry.call(this);
- this.points = points || [];
- this.srid = srid;
- if (this.points.length > 0) {
- this.hasZ = this.points[0].hasZ;
- this.hasM = this.points[0].hasM;
- }
- }
- util.inherits(LineString, Geometry);
- LineString.Z = function (points, srid) {
- var lineString = new LineString(points, srid);
- lineString.hasZ = true;
- return lineString;
- };
- LineString.M = function (points, srid) {
- var lineString = new LineString(points, srid);
- lineString.hasM = true;
- return lineString;
- };
- LineString.ZM = function (points, srid) {
- var lineString = new LineString(points, srid);
- lineString.hasZ = true;
- lineString.hasM = true;
- return lineString;
- };
- LineString._parseWkt = function (value, options) {
- var lineString = new LineString();
- lineString.srid = options.srid;
- lineString.hasZ = options.hasZ;
- lineString.hasM = options.hasM;
- if (value.isMatch(['EMPTY']))
- return lineString;
- value.expectGroupStart();
- lineString.points.push.apply(lineString.points, value.matchCoordinates(options));
- value.expectGroupEnd();
- return lineString;
- };
- LineString._parseWkb = function (value, options) {
- var lineString = new LineString();
- lineString.srid = options.srid;
- lineString.hasZ = options.hasZ;
- lineString.hasM = options.hasM;
- var pointCount = value.readUInt32();
- for (var i = 0; i < pointCount; i++)
- lineString.points.push(Point._readWkbPoint(value, options));
- return lineString;
- };
- LineString._parseTwkb = function (value, options) {
- var lineString = new LineString();
- lineString.hasZ = options.hasZ;
- lineString.hasM = options.hasM;
- if (options.isEmpty)
- return lineString;
- var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);
- var pointCount = value.readVarInt();
- for (var i = 0; i < pointCount; i++)
- lineString.points.push(Point._readTwkbPoint(value, options, previousPoint));
- return lineString;
- };
- LineString._parseGeoJSON = function (value) {
- var lineString = new LineString();
- if (value.coordinates.length > 0)
- lineString.hasZ = value.coordinates[0].length > 2;
- for (var i = 0; i < value.coordinates.length; i++)
- lineString.points.push(Point._readGeoJSONPoint(value.coordinates[i]));
- return lineString;
- };
- LineString.prototype.toWkt = function () {
- if (this.points.length === 0)
- return this._getWktType(Types.wkt.LineString, true);
- return this._getWktType(Types.wkt.LineString, false) + this._toInnerWkt();
- };
- LineString.prototype._toInnerWkt = function () {
- var innerWkt = '(';
- for (var i = 0; i < this.points.length; i++)
- innerWkt += this._getWktCoordinate(this.points[i]) + ',';
- innerWkt = innerWkt.slice(0, -1);
- innerWkt += ')';
- return innerWkt;
- };
- LineString.prototype.toWkb = function (parentOptions) {
- var wkb = new BinaryWriter(this._getWkbSize());
- wkb.writeInt8(1);
- this._writeWkbType(wkb, Types.wkb.LineString, parentOptions);
- wkb.writeUInt32LE(this.points.length);
- for (var i = 0; i < this.points.length; i++)
- this.points[i]._writeWkbPoint(wkb);
- return wkb.buffer;
- };
- LineString.prototype.toTwkb = function () {
- var twkb = new BinaryWriter(0, true);
- var precision = Geometry.getTwkbPrecision(5, 0, 0);
- var isEmpty = this.points.length === 0;
- this._writeTwkbHeader(twkb, Types.wkb.LineString, precision, isEmpty);
- if (this.points.length > 0) {
- twkb.writeVarInt(this.points.length);
- var previousPoint = new Point(0, 0, 0, 0);
- for (var i = 0; i < this.points.length; i++)
- this.points[i]._writeTwkbPoint(twkb, precision, previousPoint);
- }
- return twkb.buffer;
- };
- LineString.prototype._getWkbSize = function () {
- var coordinateSize = 16;
- if (this.hasZ)
- coordinateSize += 8;
- if (this.hasM)
- coordinateSize += 8;
- return 1 + 4 + 4 + (this.points.length * coordinateSize);
- };
- LineString.prototype.toGeoJSON = function (options) {
- var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);
- geoJSON.type = Types.geoJSON.LineString;
- geoJSON.coordinates = [];
- for (var i = 0; i < this.points.length; i++) {
- if (this.hasZ)
- geoJSON.coordinates.push([this.points[i].x, this.points[i].y, this.points[i].z]);
- else
- geoJSON.coordinates.push([this.points[i].x, this.points[i].y]);
- }
- return geoJSON;
- };
- },{"./binarywriter":349,"./geometry":350,"./point":356,"./types":358,"util":343}],353:[function(require,module,exports){
- module.exports = MultiLineString;
- var util = require('util');
- var Types = require('./types');
- var Geometry = require('./geometry');
- var Point = require('./point');
- var LineString = require('./linestring');
- var BinaryWriter = require('./binarywriter');
- function MultiLineString(lineStrings, srid) {
- Geometry.call(this);
- this.lineStrings = lineStrings || [];
- this.srid = srid;
- if (this.lineStrings.length > 0) {
- this.hasZ = this.lineStrings[0].hasZ;
- this.hasM = this.lineStrings[0].hasM;
- }
- }
- util.inherits(MultiLineString, Geometry);
- MultiLineString.Z = function (lineStrings, srid) {
- var multiLineString = new MultiLineString(lineStrings, srid);
- multiLineString.hasZ = true;
- return multiLineString;
- };
- MultiLineString.M = function (lineStrings, srid) {
- var multiLineString = new MultiLineString(lineStrings, srid);
- multiLineString.hasM = true;
- return multiLineString;
- };
- MultiLineString.ZM = function (lineStrings, srid) {
- var multiLineString = new MultiLineString(lineStrings, srid);
- multiLineString.hasZ = true;
- multiLineString.hasM = true;
- return multiLineString;
- };
- MultiLineString._parseWkt = function (value, options) {
- var multiLineString = new MultiLineString();
- multiLineString.srid = options.srid;
- multiLineString.hasZ = options.hasZ;
- multiLineString.hasM = options.hasM;
- if (value.isMatch(['EMPTY']))
- return multiLineString;
- value.expectGroupStart();
- do {
- value.expectGroupStart();
- multiLineString.lineStrings.push(new LineString(value.matchCoordinates(options)));
- value.expectGroupEnd();
- } while (value.isMatch([',']));
- value.expectGroupEnd();
- return multiLineString;
- };
- MultiLineString._parseWkb = function (value, options) {
- var multiLineString = new MultiLineString();
- multiLineString.srid = options.srid;
- multiLineString.hasZ = options.hasZ;
- multiLineString.hasM = options.hasM;
- var lineStringCount = value.readUInt32();
- for (var i = 0; i < lineStringCount; i++)
- multiLineString.lineStrings.push(Geometry.parse(value, options));
- return multiLineString;
- };
- MultiLineString._parseTwkb = function (value, options) {
- var multiLineString = new MultiLineString();
- multiLineString.hasZ = options.hasZ;
- multiLineString.hasM = options.hasM;
- if (options.isEmpty)
- return multiLineString;
- var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);
- var lineStringCount = value.readVarInt();
- for (var i = 0; i < lineStringCount; i++) {
- var lineString = new LineString();
- lineString.hasZ = options.hasZ;
- lineString.hasM = options.hasM;
- var pointCount = value.readVarInt();
- for (var j = 0; j < pointCount; j++)
- lineString.points.push(Point._readTwkbPoint(value, options, previousPoint));
- multiLineString.lineStrings.push(lineString);
- }
- return multiLineString;
- };
- MultiLineString._parseGeoJSON = function (value) {
- var multiLineString = new MultiLineString();
- if (value.coordinates.length > 0 && value.coordinates[0].length > 0)
- multiLineString.hasZ = value.coordinates[0][0].length > 2;
- for (var i = 0; i < value.coordinates.length; i++)
- multiLineString.lineStrings.push(LineString._parseGeoJSON({ coordinates: value.coordinates[i] }));
- return multiLineString;
- };
- MultiLineString.prototype.toWkt = function () {
- if (this.lineStrings.length === 0)
- return this._getWktType(Types.wkt.MultiLineString, true);
- var wkt = this._getWktType(Types.wkt.MultiLineString, false) + '(';
- for (var i = 0; i < this.lineStrings.length; i++)
- wkt += this.lineStrings[i]._toInnerWkt() + ',';
- wkt = wkt.slice(0, -1);
- wkt += ')';
- return wkt;
- };
- MultiLineString.prototype.toWkb = function () {
- var wkb = new BinaryWriter(this._getWkbSize());
- wkb.writeInt8(1);
- this._writeWkbType(wkb, Types.wkb.MultiLineString);
- wkb.writeUInt32LE(this.lineStrings.length);
- for (var i = 0; i < this.lineStrings.length; i++)
- wkb.writeBuffer(this.lineStrings[i].toWkb({ srid: this.srid }));
- return wkb.buffer;
- };
- MultiLineString.prototype.toTwkb = function () {
- var twkb = new BinaryWriter(0, true);
- var precision = Geometry.getTwkbPrecision(5, 0, 0);
- var isEmpty = this.lineStrings.length === 0;
- this._writeTwkbHeader(twkb, Types.wkb.MultiLineString, precision, isEmpty);
- if (this.lineStrings.length > 0) {
- twkb.writeVarInt(this.lineStrings.length);
- var previousPoint = new Point(0, 0, 0, 0);
- for (var i = 0; i < this.lineStrings.length; i++) {
- twkb.writeVarInt(this.lineStrings[i].points.length);
- for (var j = 0; j < this.lineStrings[i].points.length; j++)
- this.lineStrings[i].points[j]._writeTwkbPoint(twkb, precision, previousPoint);
- }
- }
- return twkb.buffer;
- };
- MultiLineString.prototype._getWkbSize = function () {
- var size = 1 + 4 + 4;
- for (var i = 0; i < this.lineStrings.length; i++)
- size += this.lineStrings[i]._getWkbSize();
- return size;
- };
- MultiLineString.prototype.toGeoJSON = function (options) {
- var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);
- geoJSON.type = Types.geoJSON.MultiLineString;
- geoJSON.coordinates = [];
- for (var i = 0; i < this.lineStrings.length; i++)
- geoJSON.coordinates.push(this.lineStrings[i].toGeoJSON().coordinates);
- return geoJSON;
- };
- },{"./binarywriter":349,"./geometry":350,"./linestring":352,"./point":356,"./types":358,"util":343}],354:[function(require,module,exports){
- module.exports = MultiPoint;
- var util = require('util');
- var Types = require('./types');
- var Geometry = require('./geometry');
- var Point = require('./point');
- var BinaryWriter = require('./binarywriter');
- function MultiPoint(points, srid) {
- Geometry.call(this);
- this.points = points || [];
- this.srid = srid;
-
- if (this.points.length > 0) {
- this.hasZ = this.points[0].hasZ;
- this.hasM = this.points[0].hasM;
- }
- }
- util.inherits(MultiPoint, Geometry);
- MultiPoint.Z = function (points, srid) {
- var multiPoint = new MultiPoint(points, srid);
- multiPoint.hasZ = true;
- return multiPoint;
- };
- MultiPoint.M = function (points, srid) {
- var multiPoint = new MultiPoint(points, srid);
- multiPoint.hasM = true;
- return multiPoint;
- };
- MultiPoint.ZM = function (points, srid) {
- var multiPoint = new MultiPoint(points, srid);
- multiPoint.hasZ = true;
- multiPoint.hasM = true;
- return multiPoint;
- };
- MultiPoint._parseWkt = function (value, options) {
- var multiPoint = new MultiPoint();
- multiPoint.srid = options.srid;
- multiPoint.hasZ = options.hasZ;
- multiPoint.hasM = options.hasM;
- if (value.isMatch(['EMPTY']))
- return multiPoint;
- value.expectGroupStart();
- multiPoint.points.push.apply(multiPoint.points, value.matchCoordinates(options));
- value.expectGroupEnd();
- return multiPoint;
- };
- MultiPoint._parseWkb = function (value, options) {
- var multiPoint = new MultiPoint();
- multiPoint.srid = options.srid;
- multiPoint.hasZ = options.hasZ;
- multiPoint.hasM = options.hasM;
- var pointCount = value.readUInt32();
- for (var i = 0; i < pointCount; i++)
- multiPoint.points.push(Geometry.parse(value, options));
- return multiPoint;
- };
- MultiPoint._parseTwkb = function (value, options) {
- var multiPoint = new MultiPoint();
- multiPoint.hasZ = options.hasZ;
- multiPoint.hasM = options.hasM;
- if (options.isEmpty)
- return multiPoint;
- var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);
- var pointCount = value.readVarInt();
- for (var i = 0; i < pointCount; i++)
- multiPoint.points.push(Point._readTwkbPoint(value, options, previousPoint));
- return multiPoint;
- };
- MultiPoint._parseGeoJSON = function (value) {
- var multiPoint = new MultiPoint();
- if (value.coordinates.length > 0)
- multiPoint.hasZ = value.coordinates[0].length > 2;
- for (var i = 0; i < value.coordinates.length; i++)
- multiPoint.points.push(Point._parseGeoJSON({ coordinates: value.coordinates[i] }));
- return multiPoint;
- };
- MultiPoint.prototype.toWkt = function () {
- if (this.points.length === 0)
- return this._getWktType(Types.wkt.MultiPoint, true);
- var wkt = this._getWktType(Types.wkt.MultiPoint, false) + '(';
- for (var i = 0; i < this.points.length; i++)
- wkt += this._getWktCoordinate(this.points[i]) + ',';
- wkt = wkt.slice(0, -1);
- wkt += ')';
- return wkt;
- };
- MultiPoint.prototype.toWkb = function () {
- var wkb = new BinaryWriter(this._getWkbSize());
- wkb.writeInt8(1);
- this._writeWkbType(wkb, Types.wkb.MultiPoint);
- wkb.writeUInt32LE(this.points.length);
- for (var i = 0; i < this.points.length; i++)
- wkb.writeBuffer(this.points[i].toWkb({ srid: this.srid }));
- return wkb.buffer;
- };
- MultiPoint.prototype.toTwkb = function () {
- var twkb = new BinaryWriter(0, true);
- var precision = Geometry.getTwkbPrecision(5, 0, 0);
- var isEmpty = this.points.length === 0;
- this._writeTwkbHeader(twkb, Types.wkb.MultiPoint, precision, isEmpty);
- if (this.points.length > 0) {
- twkb.writeVarInt(this.points.length);
- var previousPoint = new Point(0, 0, 0, 0);
- for (var i = 0; i < this.points.length; i++)
- this.points[i]._writeTwkbPoint(twkb, precision, previousPoint);
- }
- return twkb.buffer;
- };
- MultiPoint.prototype._getWkbSize = function () {
- var coordinateSize = 16;
- if (this.hasZ)
- coordinateSize += 8;
- if (this.hasM)
- coordinateSize += 8;
- coordinateSize += 5;
- return 1 + 4 + 4 + (this.points.length * coordinateSize);
- };
- MultiPoint.prototype.toGeoJSON = function (options) {
- var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);
- geoJSON.type = Types.geoJSON.MultiPoint;
- geoJSON.coordinates = [];
- for (var i = 0; i < this.points.length; i++)
- geoJSON.coordinates.push(this.points[i].toGeoJSON().coordinates);
- return geoJSON;
- };
- },{"./binarywriter":349,"./geometry":350,"./point":356,"./types":358,"util":343}],355:[function(require,module,exports){
- module.exports = MultiPolygon;
- var util = require('util');
- var Types = require('./types');
- var Geometry = require('./geometry');
- var Point = require('./point');
- var Polygon = require('./polygon');
- var BinaryWriter = require('./binarywriter');
- function MultiPolygon(polygons, srid) {
- Geometry.call(this);
- this.polygons = polygons || [];
- this.srid = srid;
- if (this.polygons.length > 0) {
- this.hasZ = this.polygons[0].hasZ;
- this.hasM = this.polygons[0].hasM;
- }
- }
- util.inherits(MultiPolygon, Geometry);
- MultiPolygon.Z = function (polygons, srid) {
- var multiPolygon = new MultiPolygon(polygons, srid);
- multiPolygon.hasZ = true;
- return multiPolygon;
- };
- MultiPolygon.M = function (polygons, srid) {
- var multiPolygon = new MultiPolygon(polygons, srid);
- multiPolygon.hasM = true;
- return multiPolygon;
- };
- MultiPolygon.ZM = function (polygons, srid) {
- var multiPolygon = new MultiPolygon(polygons, srid);
- multiPolygon.hasZ = true;
- multiPolygon.hasM = true;
- return multiPolygon;
- };
- MultiPolygon._parseWkt = function (value, options) {
- var multiPolygon = new MultiPolygon();
- multiPolygon.srid = options.srid;
- multiPolygon.hasZ = options.hasZ;
- multiPolygon.hasM = options.hasM;
- if (value.isMatch(['EMPTY']))
- return multiPolygon;
- value.expectGroupStart();
- do {
- value.expectGroupStart();
- var exteriorRing = [];
- var interiorRings = [];
- value.expectGroupStart();
- exteriorRing.push.apply(exteriorRing, value.matchCoordinates(options));
- value.expectGroupEnd();
- while (value.isMatch([','])) {
- value.expectGroupStart();
- interiorRings.push(value.matchCoordinates(options));
- value.expectGroupEnd();
- }
- multiPolygon.polygons.push(new Polygon(exteriorRing, interiorRings));
- value.expectGroupEnd();
- } while (value.isMatch([',']));
- value.expectGroupEnd();
- return multiPolygon;
- };
- MultiPolygon._parseWkb = function (value, options) {
- var multiPolygon = new MultiPolygon();
- multiPolygon.srid = options.srid;
- multiPolygon.hasZ = options.hasZ;
- multiPolygon.hasM = options.hasM;
- var polygonCount = value.readUInt32();
- for (var i = 0; i < polygonCount; i++)
- multiPolygon.polygons.push(Geometry.parse(value, options));
- return multiPolygon;
- };
- MultiPolygon._parseTwkb = function (value, options) {
- var multiPolygon = new MultiPolygon();
- multiPolygon.hasZ = options.hasZ;
- multiPolygon.hasM = options.hasM;
- if (options.isEmpty)
- return multiPolygon;
- var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);
- var polygonCount = value.readVarInt();
- for (var i = 0; i < polygonCount; i++) {
- var polygon = new Polygon();
- polygon.hasZ = options.hasZ;
- polygon.hasM = options.hasM;
- var ringCount = value.readVarInt();
- var exteriorRingCount = value.readVarInt();
- for (var j = 0; j < exteriorRingCount; j++)
- polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint));
- for (j = 1; j < ringCount; j++) {
- var interiorRing = [];
- var interiorRingCount = value.readVarInt();
- for (var k = 0; k < interiorRingCount; k++)
- interiorRing.push(Point._readTwkbPoint(value, options, previousPoint));
- polygon.interiorRings.push(interiorRing);
- }
- multiPolygon.polygons.push(polygon);
- }
- return multiPolygon;
- };
- MultiPolygon._parseGeoJSON = function (value) {
- var multiPolygon = new MultiPolygon();
- if (value.coordinates.length > 0 && value.coordinates[0].length > 0 && value.coordinates[0][0].length > 0)
- multiPolygon.hasZ = value.coordinates[0][0][0].length > 2;
- for (var i = 0; i < value.coordinates.length; i++)
- multiPolygon.polygons.push(Polygon._parseGeoJSON({ coordinates: value.coordinates[i] }));
- return multiPolygon;
- };
- MultiPolygon.prototype.toWkt = function () {
- if (this.polygons.length === 0)
- return this._getWktType(Types.wkt.MultiPolygon, true);
- var wkt = this._getWktType(Types.wkt.MultiPolygon, false) + '(';
- for (var i = 0; i < this.polygons.length; i++)
- wkt += this.polygons[i]._toInnerWkt() + ',';
- wkt = wkt.slice(0, -1);
- wkt += ')';
- return wkt;
- };
- MultiPolygon.prototype.toWkb = function () {
- var wkb = new BinaryWriter(this._getWkbSize());
- wkb.writeInt8(1);
- this._writeWkbType(wkb, Types.wkb.MultiPolygon);
- wkb.writeUInt32LE(this.polygons.length);
- for (var i = 0; i < this.polygons.length; i++)
- wkb.writeBuffer(this.polygons[i].toWkb({ srid: this.srid }));
- return wkb.buffer;
- };
- MultiPolygon.prototype.toTwkb = function () {
- var twkb = new BinaryWriter(0, true);
- var precision = Geometry.getTwkbPrecision(5, 0, 0);
- var isEmpty = this.polygons.length === 0;
- this._writeTwkbHeader(twkb, Types.wkb.MultiPolygon, precision, isEmpty);
- if (this.polygons.length > 0) {
- twkb.writeVarInt(this.polygons.length);
- var previousPoint = new Point(0, 0, 0, 0);
- for (var i = 0; i < this.polygons.length; i++) {
- twkb.writeVarInt(1 + this.polygons[i].interiorRings.length);
- twkb.writeVarInt(this.polygons[i].exteriorRing.length);
- for (var j = 0; j < this.polygons[i].exteriorRing.length; j++)
- this.polygons[i].exteriorRing[j]._writeTwkbPoint(twkb, precision, previousPoint);
- for (j = 0; j < this.polygons[i].interiorRings.length; j++) {
- twkb.writeVarInt(this.polygons[i].interiorRings[j].length);
- for (var k = 0; k < this.polygons[i].interiorRings[j].length; k++)
- this.polygons[i].interiorRings[j][k]._writeTwkbPoint(twkb, precision, previousPoint);
- }
- }
- }
- return twkb.buffer;
- };
- MultiPolygon.prototype._getWkbSize = function () {
- var size = 1 + 4 + 4;
- for (var i = 0; i < this.polygons.length; i++)
- size += this.polygons[i]._getWkbSize();
- return size;
- };
- MultiPolygon.prototype.toGeoJSON = function (options) {
- var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);
- geoJSON.type = Types.geoJSON.MultiPolygon;
- geoJSON.coordinates = [];
- for (var i = 0; i < this.polygons.length; i++)
- geoJSON.coordinates.push(this.polygons[i].toGeoJSON().coordinates);
- return geoJSON;
- };
- },{"./binarywriter":349,"./geometry":350,"./point":356,"./polygon":357,"./types":358,"util":343}],356:[function(require,module,exports){
- module.exports = Point;
- var util = require('util');
- var Geometry = require('./geometry');
- var Types = require('./types');
- var BinaryWriter = require('./binarywriter');
- var ZigZag = require('./zigzag.js');
- function Point(x, y, z, m, srid) {
- Geometry.call(this);
- this.x = x;
- this.y = y;
- this.z = z;
- this.m = m;
- this.srid = srid;
- this.hasZ = typeof this.z !== 'undefined';
- this.hasM = typeof this.m !== 'undefined';
- }
- util.inherits(Point, Geometry);
- Point.Z = function (x, y, z, srid) {
- var point = new Point(x, y, z, undefined, srid);
- point.hasZ = true;
- return point;
- };
- Point.M = function (x, y, m, srid) {
- var point = new Point(x, y, undefined, m, srid);
- point.hasM = true;
- return point;
- };
- Point.ZM = function (x, y, z, m, srid) {
- var point = new Point(x, y, z, m, srid);
- point.hasZ = true;
- point.hasM = true;
- return point;
- };
- Point._parseWkt = function (value, options) {
- var point = new Point();
- point.srid = options.srid;
- point.hasZ = options.hasZ;
- point.hasM = options.hasM;
- if (value.isMatch(['EMPTY']))
- return point;
- value.expectGroupStart();
- var coordinate = value.matchCoordinate(options);
- point.x = coordinate.x;
- point.y = coordinate.y;
- point.z = coordinate.z;
- point.m = coordinate.m;
- value.expectGroupEnd();
- return point;
- };
- Point._parseWkb = function (value, options) {
- var point = Point._readWkbPoint(value, options);
- point.srid = options.srid;
- return point;
- };
- Point._readWkbPoint = function (value, options) {
- return new Point(value.readDouble(), value.readDouble(),
- options.hasZ ? value.readDouble() : undefined,
- options.hasM ? value.readDouble() : undefined);
- };
- Point._parseTwkb = function (value, options) {
- var point = new Point();
- point.hasZ = options.hasZ;
- point.hasM = options.hasM;
- if (options.isEmpty)
- return point;
- point.x = ZigZag.decode(value.readVarInt()) / options.precisionFactor;
- point.y = ZigZag.decode(value.readVarInt()) / options.precisionFactor;
- point.z = options.hasZ ? ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor : undefined;
- point.m = options.hasM ? ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor : undefined;
- return point;
- };
- Point._readTwkbPoint = function (value, options, previousPoint) {
- previousPoint.x += ZigZag.decode(value.readVarInt()) / options.precisionFactor;
- previousPoint.y += ZigZag.decode(value.readVarInt()) / options.precisionFactor;
- if (options.hasZ)
- previousPoint.z += ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor;
- if (options.hasM)
- previousPoint.m += ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor;
- return new Point(previousPoint.x, previousPoint.y, previousPoint.z, previousPoint.m);
- };
- Point._parseGeoJSON = function (value) {
- return Point._readGeoJSONPoint(value.coordinates);
- };
- Point._readGeoJSONPoint = function (coordinates) {
- if (coordinates.length === 0)
- return new Point();
- if (coordinates.length > 2)
- return new Point(coordinates[0], coordinates[1], coordinates[2]);
- return new Point(coordinates[0], coordinates[1]);
- };
- Point.prototype.toWkt = function () {
- if (typeof this.x === 'undefined' && typeof this.y === 'undefined' &&
- typeof this.z === 'undefined' && typeof this.m === 'undefined')
- return this._getWktType(Types.wkt.Point, true);
- return this._getWktType(Types.wkt.Point, false) + '(' + this._getWktCoordinate(this) + ')';
- };
- Point.prototype.toWkb = function (parentOptions) {
- var wkb = new BinaryWriter(this._getWkbSize());
- wkb.writeInt8(1);
- this._writeWkbType(wkb, Types.wkb.Point, parentOptions);
- if (typeof this.x === 'undefined' && typeof this.y === 'undefined') {
- wkb.writeDoubleLE(NaN);
- wkb.writeDoubleLE(NaN);
- if (this.hasZ)
- wkb.writeDoubleLE(NaN);
- if (this.hasM)
- wkb.writeDoubleLE(NaN);
- }
- else {
- this._writeWkbPoint(wkb);
- }
- return wkb.buffer;
- };
- Point.prototype._writeWkbPoint = function (wkb) {
- wkb.writeDoubleLE(this.x);
- wkb.writeDoubleLE(this.y);
- if (this.hasZ)
- wkb.writeDoubleLE(this.z);
- if (this.hasM)
- wkb.writeDoubleLE(this.m);
- };
- Point.prototype.toTwkb = function () {
- var twkb = new BinaryWriter(0, true);
- var precision = Geometry.getTwkbPrecision(5, 0, 0);
- var isEmpty = typeof this.x === 'undefined' && typeof this.y === 'undefined';
- this._writeTwkbHeader(twkb, Types.wkb.Point, precision, isEmpty);
- if (!isEmpty)
- this._writeTwkbPoint(twkb, precision, new Point(0, 0, 0, 0));
- return twkb.buffer;
- };
- Point.prototype._writeTwkbPoint = function (twkb, precision, previousPoint) {
- var x = this.x * precision.xyFactor;
- var y = this.y * precision.xyFactor;
- var z = this.z * precision.zFactor;
- var m = this.m * precision.mFactor;
- twkb.writeVarInt(ZigZag.encode(x - previousPoint.x));
- twkb.writeVarInt(ZigZag.encode(y - previousPoint.y));
- if (this.hasZ)
- twkb.writeVarInt(ZigZag.encode(z - previousPoint.z));
- if (this.hasM)
- twkb.writeVarInt(ZigZag.encode(m - previousPoint.m));
- previousPoint.x = x;
- previousPoint.y = y;
- previousPoint.z = z;
- previousPoint.m = m;
- };
- Point.prototype._getWkbSize = function () {
- var size = 1 + 4 + 8 + 8;
- if (this.hasZ)
- size += 8;
- if (this.hasM)
- size += 8;
- return size;
- };
- Point.prototype.toGeoJSON = function (options) {
- var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);
- geoJSON.type = Types.geoJSON.Point;
- if (typeof this.x === 'undefined' && typeof this.y === 'undefined')
- geoJSON.coordinates = [];
- else if (typeof this.z !== 'undefined')
- geoJSON.coordinates = [this.x, this.y, this.z];
- else
- geoJSON.coordinates = [this.x, this.y];
- return geoJSON;
- };
- },{"./binarywriter":349,"./geometry":350,"./types":358,"./zigzag.js":361,"util":343}],357:[function(require,module,exports){
- module.exports = Polygon;
- var util = require('util');
- var Geometry = require('./geometry');
- var Types = require('./types');
- var Point = require('./point');
- var BinaryWriter = require('./binarywriter');
- function Polygon(exteriorRing, interiorRings, srid) {
- Geometry.call(this);
- this.exteriorRing = exteriorRing || [];
- this.interiorRings = interiorRings || [];
- this.srid = srid;
- if (this.exteriorRing.length > 0) {
- this.hasZ = this.exteriorRing[0].hasZ;
- this.hasM = this.exteriorRing[0].hasM;
- }
- }
- util.inherits(Polygon, Geometry);
- Polygon.Z = function (exteriorRing, interiorRings, srid) {
- var polygon = new Polygon(exteriorRing, interiorRings, srid);
- polygon.hasZ = true;
- return polygon;
- };
- Polygon.M = function (exteriorRing, interiorRings, srid) {
- var polygon = new Polygon(exteriorRing, interiorRings, srid);
- polygon.hasM = true;
- return polygon;
- };
- Polygon.ZM = function (exteriorRing, interiorRings, srid) {
- var polygon = new Polygon(exteriorRing, interiorRings, srid);
- polygon.hasZ = true;
- polygon.hasM = true;
- return polygon;
- };
- Polygon._parseWkt = function (value, options) {
- var polygon = new Polygon();
- polygon.srid = options.srid;
- polygon.hasZ = options.hasZ;
- polygon.hasM = options.hasM;
- if (value.isMatch(['EMPTY']))
- return polygon;
- value.expectGroupStart();
- value.expectGroupStart();
- polygon.exteriorRing.push.apply(polygon.exteriorRing, value.matchCoordinates(options));
- value.expectGroupEnd();
- while (value.isMatch([','])) {
- value.expectGroupStart();
- polygon.interiorRings.push(value.matchCoordinates(options));
- value.expectGroupEnd();
- }
- value.expectGroupEnd();
- return polygon;
- };
- Polygon._parseWkb = function (value, options) {
- var polygon = new Polygon();
- polygon.srid = options.srid;
- polygon.hasZ = options.hasZ;
- polygon.hasM = options.hasM;
- var ringCount = value.readUInt32();
- if (ringCount > 0) {
- var exteriorRingCount = value.readUInt32();
- for (var i = 0; i < exteriorRingCount; i++)
- polygon.exteriorRing.push(Point._readWkbPoint(value, options));
- for (i = 1; i < ringCount; i++) {
- var interiorRing = [];
- var interiorRingCount = value.readUInt32();
- for (var j = 0; j < interiorRingCount; j++)
- interiorRing.push(Point._readWkbPoint(value, options));
- polygon.interiorRings.push(interiorRing);
- }
- }
- return polygon;
- };
- Polygon._parseTwkb = function (value, options) {
- var polygon = new Polygon();
- polygon.hasZ = options.hasZ;
- polygon.hasM = options.hasM;
- if (options.isEmpty)
- return polygon;
- var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);
- var ringCount = value.readVarInt();
- var exteriorRingCount = value.readVarInt();
- for (var i = 0; i < exteriorRingCount; i++)
- polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint));
- for (i = 1; i < ringCount; i++) {
- var interiorRing = [];
- var interiorRingCount = value.readVarInt();
- for (var j = 0; j < interiorRingCount; j++)
- interiorRing.push(Point._readTwkbPoint(value, options, previousPoint));
- polygon.interiorRings.push(interiorRing);
- }
- return polygon;
- };
- Polygon._parseGeoJSON = function (value) {
- var polygon = new Polygon();
- if (value.coordinates.length > 0 && value.coordinates[0].length > 0)
- polygon.hasZ = value.coordinates[0][0].length > 2;
- for (var i = 0; i < value.coordinates.length; i++) {
- if (i > 0)
- polygon.interiorRings.push([]);
- for (var j = 0; j < value.coordinates[i].length; j++) {
- if (i === 0)
- polygon.exteriorRing.push(Point._readGeoJSONPoint(value.coordinates[i][j]));
- else
- polygon.interiorRings[i - 1].push(Point._readGeoJSONPoint(value.coordinates[i][j]));
- }
- }
- return polygon;
- };
- Polygon.prototype.toWkt = function () {
- if (this.exteriorRing.length === 0)
- return this._getWktType(Types.wkt.Polygon, true);
- return this._getWktType(Types.wkt.Polygon, false) + this._toInnerWkt();
- };
- Polygon.prototype._toInnerWkt = function () {
- var innerWkt = '((';
- for (var i = 0; i < this.exteriorRing.length; i++)
- innerWkt += this._getWktCoordinate(this.exteriorRing[i]) + ',';
- innerWkt = innerWkt.slice(0, -1);
- innerWkt += ')';
- for (i = 0; i < this.interiorRings.length; i++) {
- innerWkt += ',(';
- for (var j = 0; j < this.interiorRings[i].length; j++) {
- innerWkt += this._getWktCoordinate(this.interiorRings[i][j]) + ',';
- }
- innerWkt = innerWkt.slice(0, -1);
- innerWkt += ')';
- }
- innerWkt += ')';
- return innerWkt;
- };
- Polygon.prototype.toWkb = function (parentOptions) {
- var wkb = new BinaryWriter(this._getWkbSize());
- wkb.writeInt8(1);
- this._writeWkbType(wkb, Types.wkb.Polygon, parentOptions);
- if (this.exteriorRing.length > 0) {
- wkb.writeUInt32LE(1 + this.interiorRings.length);
- wkb.writeUInt32LE(this.exteriorRing.length);
- }
- else {
- wkb.writeUInt32LE(0);
- }
- for (var i = 0; i < this.exteriorRing.length; i++)
- this.exteriorRing[i]._writeWkbPoint(wkb);
- for (i = 0; i < this.interiorRings.length; i++) {
- wkb.writeUInt32LE(this.interiorRings[i].length);
- for (var j = 0; j < this.interiorRings[i].length; j++)
- this.interiorRings[i][j]._writeWkbPoint(wkb);
- }
- return wkb.buffer;
- };
- Polygon.prototype.toTwkb = function () {
- var twkb = new BinaryWriter(0, true);
- var precision = Geometry.getTwkbPrecision(5, 0, 0);
- var isEmpty = this.exteriorRing.length === 0;
- this._writeTwkbHeader(twkb, Types.wkb.Polygon, precision, isEmpty);
- if (this.exteriorRing.length > 0) {
- twkb.writeVarInt(1 + this.interiorRings.length);
- twkb.writeVarInt(this.exteriorRing.length);
- var previousPoint = new Point(0, 0, 0, 0);
- for (var i = 0; i < this.exteriorRing.length; i++)
- this.exteriorRing[i]._writeTwkbPoint(twkb, precision, previousPoint);
- for (i = 0; i < this.interiorRings.length; i++) {
- twkb.writeVarInt(this.interiorRings[i].length);
- for (var j = 0; j < this.interiorRings[i].length; j++)
- this.interiorRings[i][j]._writeTwkbPoint(twkb, precision, previousPoint);
- }
- }
- return twkb.buffer;
- };
- Polygon.prototype._getWkbSize = function () {
- var coordinateSize = 16;
- if (this.hasZ)
- coordinateSize += 8;
- if (this.hasM)
- coordinateSize += 8;
- var size = 1 + 4 + 4;
- if (this.exteriorRing.length > 0)
- size += 4 + (this.exteriorRing.length * coordinateSize);
- for (var i = 0; i < this.interiorRings.length; i++)
- size += 4 + (this.interiorRings[i].length * coordinateSize);
- return size;
- };
- Polygon.prototype.toGeoJSON = function (options) {
- var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);
- geoJSON.type = Types.geoJSON.Polygon;
- geoJSON.coordinates = [];
- if (this.exteriorRing.length > 0) {
- var exteriorRing = [];
- for (var i = 0; i < this.exteriorRing.length; i++) {
- if (this.hasZ)
- exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y, this.exteriorRing[i].z]);
- else
- exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y]);
- }
- geoJSON.coordinates.push(exteriorRing);
- }
- for (var j = 0; j < this.interiorRings.length; j++) {
- var interiorRing = [];
- for (var k = 0; k < this.interiorRings[j].length; k++) {
- if (this.hasZ)
- interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y, this.interiorRings[j][k].z]);
- else
- interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y]);
- }
- geoJSON.coordinates.push(interiorRing);
- }
- return geoJSON;
- };
- },{"./binarywriter":349,"./geometry":350,"./point":356,"./types":358,"util":343}],358:[function(require,module,exports){
- module.exports = {
- wkt: {
- Point: 'POINT',
- LineString: 'LINESTRING',
- Polygon: 'POLYGON',
- MultiPoint: 'MULTIPOINT',
- MultiLineString: 'MULTILINESTRING',
- MultiPolygon: 'MULTIPOLYGON',
- GeometryCollection: 'GEOMETRYCOLLECTION'
- },
- wkb: {
- Point: 1,
- LineString: 2,
- Polygon: 3,
- MultiPoint: 4,
- MultiLineString: 5,
- MultiPolygon: 6,
- GeometryCollection: 7
- },
- geoJSON: {
- Point: 'Point',
- LineString: 'LineString',
- Polygon: 'Polygon',
- MultiPoint: 'MultiPoint',
- MultiLineString: 'MultiLineString',
- MultiPolygon: 'MultiPolygon',
- GeometryCollection: 'GeometryCollection'
- }
- };
- },{}],359:[function(require,module,exports){
- module.exports = WktParser;
- var Types = require('./types');
- var Point = require('./point');
- function WktParser(value) {
- this.value = value;
- this.position = 0;
- }
- WktParser.prototype.match = function (tokens) {
- this.skipWhitespaces();
- for (var i = 0; i < tokens.length; i++) {
- if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {
- this.position += tokens[i].length;
- return tokens[i];
- }
- }
- return null;
- };
- WktParser.prototype.matchRegex = function (tokens) {
- this.skipWhitespaces();
- for (var i = 0; i < tokens.length; i++) {
- var match = this.value.substring(this.position).match(tokens[i]);
- if (match) {
- this.position += match[0].length;
- return match;
- }
- }
- return null;
- };
- WktParser.prototype.isMatch = function (tokens) {
- this.skipWhitespaces();
- for (var i = 0; i < tokens.length; i++) {
- if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {
- this.position += tokens[i].length;
- return true;
- }
- }
- return false;
- };
- WktParser.prototype.matchType = function () {
- var geometryType = this.match([Types.wkt.Point, Types.wkt.LineString, Types.wkt.Polygon, Types.wkt.MultiPoint,
- Types.wkt.MultiLineString, Types.wkt.MultiPolygon, Types.wkt.GeometryCollection]);
- if (!geometryType)
- throw new Error('Expected geometry type');
- return geometryType;
- };
- WktParser.prototype.matchDimension = function () {
- var dimension = this.match(['ZM', 'Z', 'M']);
- switch (dimension) {
- case 'ZM': return { hasZ: true, hasM: true };
- case 'Z': return { hasZ: true, hasM: false };
- case 'M': return { hasZ: false, hasM: true };
- default: return { hasZ: false, hasM: false };
- }
- };
- WktParser.prototype.expectGroupStart = function () {
- if (!this.isMatch(['(']))
- throw new Error('Expected group start');
- };
- WktParser.prototype.expectGroupEnd = function () {
- if (!this.isMatch([')']))
- throw new Error('Expected group end');
- };
- WktParser.prototype.matchCoordinate = function (options) {
- var match;
- if (options.hasZ && options.hasM)
- match = this.matchRegex([/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)\s+(-?\d+\.?\d*)\s+(-?\d+\.?\d*)/]);
- else if (options.hasZ || options.hasM)
- match = this.matchRegex([/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)\s+(-?\d+\.?\d*)/]);
- else
- match = this.matchRegex([/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)/]);
- if (!match)
- throw new Error('Expected coordinates');
- if (options.hasZ && options.hasM)
- return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4]));
- else if (options.hasZ)
- return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]));
- else if (options.hasM)
- return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, parseFloat(match[3]));
- else
- return new Point(parseFloat(match[1]), parseFloat(match[2]));
- };
- WktParser.prototype.matchCoordinates = function (options) {
- var coordinates = [];
- do {
- var startsWithBracket = this.isMatch(['(']);
- coordinates.push(this.matchCoordinate(options));
- if (startsWithBracket)
- this.expectGroupEnd();
- } while (this.isMatch([',']));
- return coordinates;
- };
- WktParser.prototype.skipWhitespaces = function () {
- while (this.position < this.value.length && this.value[this.position] === ' ')
- this.position++;
- };
- },{"./point":356,"./types":358}],360:[function(require,module,exports){
- exports.Types = require('./types');
- exports.Geometry = require('./geometry');
- exports.Point = require('./point');
- exports.LineString = require('./linestring');
- exports.Polygon = require('./polygon');
- exports.MultiPoint = require('./multipoint');
- exports.MultiLineString = require('./multilinestring');
- exports.MultiPolygon = require('./multipolygon');
- exports.GeometryCollection = require('./geometrycollection');
- },{"./geometry":350,"./geometrycollection":351,"./linestring":352,"./multilinestring":353,"./multipoint":354,"./multipolygon":355,"./point":356,"./polygon":357,"./types":358}],361:[function(require,module,exports){
- module.exports = {
- encode: function (value) {
- return (value << 1) ^ (value >> 31);
- },
- decode: function (value) {
- return (value >> 1) ^ (-(value & 1));
- }
- };
- },{}],362:[function(require,module,exports){
- module.exports = extend
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- function extend() {
- var target = {}
- for (var i = 0; i < arguments.length; i++) {
- var source = arguments[i]
- for (var key in source) {
- if (hasOwnProperty.call(source, key)) {
- target[key] = source[key]
- }
- }
- }
- return target
- }
- },{}]},{},[1])(1)
- });
|