123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841 |
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.zip = {}));
- })(this, (function (exports) { 'use strict';
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
- var check = function (it) {
- return it && it.Math == Math && it;
- };
- // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
- var global$F =
- // eslint-disable-next-line es-x/no-global-this -- safe
- check(typeof globalThis == 'object' && globalThis) ||
- check(typeof window == 'object' && window) ||
- // eslint-disable-next-line no-restricted-globals -- safe
- check(typeof self == 'object' && self) ||
- check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
- // eslint-disable-next-line no-new-func -- fallback
- (function () { return this; })() || Function('return this')();
- var objectGetOwnPropertyDescriptor = {};
- var fails$H = function (exec) {
- try {
- return !!exec();
- } catch (error) {
- return true;
- }
- };
- var fails$G = fails$H;
- // Detect IE8's incomplete defineProperty implementation
- var descriptors = !fails$G(function () {
- // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
- return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
- });
- var fails$F = fails$H;
- var functionBindNative = !fails$F(function () {
- // eslint-disable-next-line es-x/no-function-prototype-bind -- safe
- var test = (function () { /* empty */ }).bind();
- // eslint-disable-next-line no-prototype-builtins -- safe
- return typeof test != 'function' || test.hasOwnProperty('prototype');
- });
- var NATIVE_BIND$3 = functionBindNative;
- var call$r = Function.prototype.call;
- var functionCall = NATIVE_BIND$3 ? call$r.bind(call$r) : function () {
- return call$r.apply(call$r, arguments);
- };
- var objectPropertyIsEnumerable = {};
- var $propertyIsEnumerable$2 = {}.propertyIsEnumerable;
- // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
- var getOwnPropertyDescriptor$6 = Object.getOwnPropertyDescriptor;
- // Nashorn ~ JDK8 bug
- var NASHORN_BUG = getOwnPropertyDescriptor$6 && !$propertyIsEnumerable$2.call({ 1: 2 }, 1);
- // `Object.prototype.propertyIsEnumerable` method implementation
- // https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
- objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
- var descriptor = getOwnPropertyDescriptor$6(this, V);
- return !!descriptor && descriptor.enumerable;
- } : $propertyIsEnumerable$2;
- var createPropertyDescriptor$7 = function (bitmap, value) {
- return {
- enumerable: !(bitmap & 1),
- configurable: !(bitmap & 2),
- writable: !(bitmap & 4),
- value: value
- };
- };
- var NATIVE_BIND$2 = functionBindNative;
- var FunctionPrototype$3 = Function.prototype;
- var bind$b = FunctionPrototype$3.bind;
- var call$q = FunctionPrototype$3.call;
- var uncurryThis$I = NATIVE_BIND$2 && bind$b.bind(call$q, call$q);
- var functionUncurryThis = NATIVE_BIND$2 ? function (fn) {
- return fn && uncurryThis$I(fn);
- } : function (fn) {
- return fn && function () {
- return call$q.apply(fn, arguments);
- };
- };
- var uncurryThis$H = functionUncurryThis;
- var toString$d = uncurryThis$H({}.toString);
- var stringSlice$9 = uncurryThis$H(''.slice);
- var classofRaw$1 = function (it) {
- return stringSlice$9(toString$d(it), 8, -1);
- };
- var uncurryThis$G = functionUncurryThis;
- var fails$E = fails$H;
- var classof$f = classofRaw$1;
- var $Object$4 = Object;
- var split$3 = uncurryThis$G(''.split);
- // fallback for non-array-like ES3 and non-enumerable old V8 strings
- var indexedObject = fails$E(function () {
- // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
- // eslint-disable-next-line no-prototype-builtins -- safe
- return !$Object$4('z').propertyIsEnumerable(0);
- }) ? function (it) {
- return classof$f(it) == 'String' ? split$3(it, '') : $Object$4(it);
- } : $Object$4;
- var $TypeError$h = TypeError;
- // `RequireObjectCoercible` abstract operation
- // https://tc39.es/ecma262/#sec-requireobjectcoercible
- var requireObjectCoercible$8 = function (it) {
- if (it == undefined) throw $TypeError$h("Can't call method on " + it);
- return it;
- };
- // toObject with fallback for non-array-like ES3 strings
- var IndexedObject$3 = indexedObject;
- var requireObjectCoercible$7 = requireObjectCoercible$8;
- var toIndexedObject$b = function (it) {
- return IndexedObject$3(requireObjectCoercible$7(it));
- };
- // `IsCallable` abstract operation
- // https://tc39.es/ecma262/#sec-iscallable
- var isCallable$s = function (argument) {
- return typeof argument == 'function';
- };
- var isCallable$r = isCallable$s;
- var isObject$k = function (it) {
- return typeof it == 'object' ? it !== null : isCallable$r(it);
- };
- var global$E = global$F;
- var isCallable$q = isCallable$s;
- var aFunction = function (argument) {
- return isCallable$q(argument) ? argument : undefined;
- };
- var getBuiltIn$b = function (namespace, method) {
- return arguments.length < 2 ? aFunction(global$E[namespace]) : global$E[namespace] && global$E[namespace][method];
- };
- var uncurryThis$F = functionUncurryThis;
- var objectIsPrototypeOf = uncurryThis$F({}.isPrototypeOf);
- var getBuiltIn$a = getBuiltIn$b;
- var engineUserAgent = getBuiltIn$a('navigator', 'userAgent') || '';
- var global$D = global$F;
- var userAgent$5 = engineUserAgent;
- var process$3 = global$D.process;
- var Deno$1 = global$D.Deno;
- var versions = process$3 && process$3.versions || Deno$1 && Deno$1.version;
- var v8 = versions && versions.v8;
- var match, version;
- if (v8) {
- match = v8.split('.');
- // in old Chrome, versions of V8 isn't V8 = Chrome / 10
- // but their correct versions are not interesting for us
- version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
- }
- // BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`
- // so check `userAgent` even if `.v8` exists, but 0
- if (!version && userAgent$5) {
- match = userAgent$5.match(/Edge\/(\d+)/);
- if (!match || match[1] >= 74) {
- match = userAgent$5.match(/Chrome\/(\d+)/);
- if (match) version = +match[1];
- }
- }
- var engineV8Version = version;
- /* eslint-disable es-x/no-symbol -- required for testing */
- var V8_VERSION$3 = engineV8Version;
- var fails$D = fails$H;
- // eslint-disable-next-line es-x/no-object-getownpropertysymbols -- required for testing
- var nativeSymbol = !!Object.getOwnPropertySymbols && !fails$D(function () {
- var symbol = Symbol();
- // Chrome 38 Symbol has incorrect toString conversion
- // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances
- return !String(symbol) || !(Object(symbol) instanceof Symbol) ||
- // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
- !Symbol.sham && V8_VERSION$3 && V8_VERSION$3 < 41;
- });
- /* eslint-disable es-x/no-symbol -- required for testing */
- var NATIVE_SYMBOL$6 = nativeSymbol;
- var useSymbolAsUid = NATIVE_SYMBOL$6
- && !Symbol.sham
- && typeof Symbol.iterator == 'symbol';
- var getBuiltIn$9 = getBuiltIn$b;
- var isCallable$p = isCallable$s;
- var isPrototypeOf$7 = objectIsPrototypeOf;
- var USE_SYMBOL_AS_UID$1 = useSymbolAsUid;
- var $Object$3 = Object;
- var isSymbol$6 = USE_SYMBOL_AS_UID$1 ? function (it) {
- return typeof it == 'symbol';
- } : function (it) {
- var $Symbol = getBuiltIn$9('Symbol');
- return isCallable$p($Symbol) && isPrototypeOf$7($Symbol.prototype, $Object$3(it));
- };
- var $String$3 = String;
- var tryToString$7 = function (argument) {
- try {
- return $String$3(argument);
- } catch (error) {
- return 'Object';
- }
- };
- var isCallable$o = isCallable$s;
- var tryToString$6 = tryToString$7;
- var $TypeError$g = TypeError;
- // `Assert: IsCallable(argument) is true`
- var aCallable$9 = function (argument) {
- if (isCallable$o(argument)) return argument;
- throw $TypeError$g(tryToString$6(argument) + ' is not a function');
- };
- var aCallable$8 = aCallable$9;
- // `GetMethod` abstract operation
- // https://tc39.es/ecma262/#sec-getmethod
- var getMethod$5 = function (V, P) {
- var func = V[P];
- return func == null ? undefined : aCallable$8(func);
- };
- var call$p = functionCall;
- var isCallable$n = isCallable$s;
- var isObject$j = isObject$k;
- var $TypeError$f = TypeError;
- // `OrdinaryToPrimitive` abstract operation
- // https://tc39.es/ecma262/#sec-ordinarytoprimitive
- var ordinaryToPrimitive$1 = function (input, pref) {
- var fn, val;
- if (pref === 'string' && isCallable$n(fn = input.toString) && !isObject$j(val = call$p(fn, input))) return val;
- if (isCallable$n(fn = input.valueOf) && !isObject$j(val = call$p(fn, input))) return val;
- if (pref !== 'string' && isCallable$n(fn = input.toString) && !isObject$j(val = call$p(fn, input))) return val;
- throw $TypeError$f("Can't convert object to primitive value");
- };
- var shared$7 = {exports: {}};
- var isPure = false;
- var global$C = global$F;
- // eslint-disable-next-line es-x/no-object-defineproperty -- safe
- var defineProperty$e = Object.defineProperty;
- var defineGlobalProperty$3 = function (key, value) {
- try {
- defineProperty$e(global$C, key, { value: value, configurable: true, writable: true });
- } catch (error) {
- global$C[key] = value;
- } return value;
- };
- var global$B = global$F;
- var defineGlobalProperty$2 = defineGlobalProperty$3;
- var SHARED = '__core-js_shared__';
- var store$3 = global$B[SHARED] || defineGlobalProperty$2(SHARED, {});
- var sharedStore = store$3;
- var store$2 = sharedStore;
- (shared$7.exports = function (key, value) {
- return store$2[key] || (store$2[key] = value !== undefined ? value : {});
- })('versions', []).push({
- version: '3.23.2',
- mode: 'global',
- copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',
- license: 'https://github.com/zloirock/core-js/blob/v3.23.2/LICENSE',
- source: 'https://github.com/zloirock/core-js'
- });
- var requireObjectCoercible$6 = requireObjectCoercible$8;
- var $Object$2 = Object;
- // `ToObject` abstract operation
- // https://tc39.es/ecma262/#sec-toobject
- var toObject$d = function (argument) {
- return $Object$2(requireObjectCoercible$6(argument));
- };
- var uncurryThis$E = functionUncurryThis;
- var toObject$c = toObject$d;
- var hasOwnProperty = uncurryThis$E({}.hasOwnProperty);
- // `HasOwnProperty` abstract operation
- // https://tc39.es/ecma262/#sec-hasownproperty
- // eslint-disable-next-line es-x/no-object-hasown -- safe
- var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) {
- return hasOwnProperty(toObject$c(it), key);
- };
- var uncurryThis$D = functionUncurryThis;
- var id$1 = 0;
- var postfix = Math.random();
- var toString$c = uncurryThis$D(1.0.toString);
- var uid$5 = function (key) {
- return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$c(++id$1 + postfix, 36);
- };
- var global$A = global$F;
- var shared$6 = shared$7.exports;
- var hasOwn$k = hasOwnProperty_1;
- var uid$4 = uid$5;
- var NATIVE_SYMBOL$5 = nativeSymbol;
- var USE_SYMBOL_AS_UID = useSymbolAsUid;
- var WellKnownSymbolsStore$1 = shared$6('wks');
- var Symbol$1 = global$A.Symbol;
- var symbolFor = Symbol$1 && Symbol$1['for'];
- var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid$4;
- var wellKnownSymbol$t = function (name) {
- if (!hasOwn$k(WellKnownSymbolsStore$1, name) || !(NATIVE_SYMBOL$5 || typeof WellKnownSymbolsStore$1[name] == 'string')) {
- var description = 'Symbol.' + name;
- if (NATIVE_SYMBOL$5 && hasOwn$k(Symbol$1, name)) {
- WellKnownSymbolsStore$1[name] = Symbol$1[name];
- } else if (USE_SYMBOL_AS_UID && symbolFor) {
- WellKnownSymbolsStore$1[name] = symbolFor(description);
- } else {
- WellKnownSymbolsStore$1[name] = createWellKnownSymbol(description);
- }
- } return WellKnownSymbolsStore$1[name];
- };
- var call$o = functionCall;
- var isObject$i = isObject$k;
- var isSymbol$5 = isSymbol$6;
- var getMethod$4 = getMethod$5;
- var ordinaryToPrimitive = ordinaryToPrimitive$1;
- var wellKnownSymbol$s = wellKnownSymbol$t;
- var $TypeError$e = TypeError;
- var TO_PRIMITIVE = wellKnownSymbol$s('toPrimitive');
- // `ToPrimitive` abstract operation
- // https://tc39.es/ecma262/#sec-toprimitive
- var toPrimitive$3 = function (input, pref) {
- if (!isObject$i(input) || isSymbol$5(input)) return input;
- var exoticToPrim = getMethod$4(input, TO_PRIMITIVE);
- var result;
- if (exoticToPrim) {
- if (pref === undefined) pref = 'default';
- result = call$o(exoticToPrim, input, pref);
- if (!isObject$i(result) || isSymbol$5(result)) return result;
- throw $TypeError$e("Can't convert object to primitive value");
- }
- if (pref === undefined) pref = 'number';
- return ordinaryToPrimitive(input, pref);
- };
- var toPrimitive$2 = toPrimitive$3;
- var isSymbol$4 = isSymbol$6;
- // `ToPropertyKey` abstract operation
- // https://tc39.es/ecma262/#sec-topropertykey
- var toPropertyKey$5 = function (argument) {
- var key = toPrimitive$2(argument, 'string');
- return isSymbol$4(key) ? key : key + '';
- };
- var global$z = global$F;
- var isObject$h = isObject$k;
- var document$3 = global$z.document;
- // typeof document.createElement is 'object' in old IE
- var EXISTS$1 = isObject$h(document$3) && isObject$h(document$3.createElement);
- var documentCreateElement$2 = function (it) {
- return EXISTS$1 ? document$3.createElement(it) : {};
- };
- var DESCRIPTORS$l = descriptors;
- var fails$C = fails$H;
- var createElement$1 = documentCreateElement$2;
- // Thanks to IE8 for its funny defineProperty
- var ie8DomDefine = !DESCRIPTORS$l && !fails$C(function () {
- // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
- return Object.defineProperty(createElement$1('div'), 'a', {
- get: function () { return 7; }
- }).a != 7;
- });
- var DESCRIPTORS$k = descriptors;
- var call$n = functionCall;
- var propertyIsEnumerableModule$2 = objectPropertyIsEnumerable;
- var createPropertyDescriptor$6 = createPropertyDescriptor$7;
- var toIndexedObject$a = toIndexedObject$b;
- var toPropertyKey$4 = toPropertyKey$5;
- var hasOwn$j = hasOwnProperty_1;
- var IE8_DOM_DEFINE$1 = ie8DomDefine;
- // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
- var $getOwnPropertyDescriptor$2 = Object.getOwnPropertyDescriptor;
- // `Object.getOwnPropertyDescriptor` method
- // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
- objectGetOwnPropertyDescriptor.f = DESCRIPTORS$k ? $getOwnPropertyDescriptor$2 : function getOwnPropertyDescriptor(O, P) {
- O = toIndexedObject$a(O);
- P = toPropertyKey$4(P);
- if (IE8_DOM_DEFINE$1) try {
- return $getOwnPropertyDescriptor$2(O, P);
- } catch (error) { /* empty */ }
- if (hasOwn$j(O, P)) return createPropertyDescriptor$6(!call$n(propertyIsEnumerableModule$2.f, O, P), O[P]);
- };
- var objectDefineProperty = {};
- var DESCRIPTORS$j = descriptors;
- var fails$B = fails$H;
- // V8 ~ Chrome 36-
- // https://bugs.chromium.org/p/v8/issues/detail?id=3334
- var v8PrototypeDefineBug = DESCRIPTORS$j && fails$B(function () {
- // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
- return Object.defineProperty(function () { /* empty */ }, 'prototype', {
- value: 42,
- writable: false
- }).prototype != 42;
- });
- var isObject$g = isObject$k;
- var $String$2 = String;
- var $TypeError$d = TypeError;
- // `Assert: Type(argument) is Object`
- var anObject$i = function (argument) {
- if (isObject$g(argument)) return argument;
- throw $TypeError$d($String$2(argument) + ' is not an object');
- };
- var DESCRIPTORS$i = descriptors;
- var IE8_DOM_DEFINE = ie8DomDefine;
- var V8_PROTOTYPE_DEFINE_BUG$1 = v8PrototypeDefineBug;
- var anObject$h = anObject$i;
- var toPropertyKey$3 = toPropertyKey$5;
- var $TypeError$c = TypeError;
- // eslint-disable-next-line es-x/no-object-defineproperty -- safe
- var $defineProperty$1 = Object.defineProperty;
- // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
- var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor;
- var ENUMERABLE = 'enumerable';
- var CONFIGURABLE$1 = 'configurable';
- var WRITABLE = 'writable';
- // `Object.defineProperty` method
- // https://tc39.es/ecma262/#sec-object.defineproperty
- objectDefineProperty.f = DESCRIPTORS$i ? V8_PROTOTYPE_DEFINE_BUG$1 ? function defineProperty(O, P, Attributes) {
- anObject$h(O);
- P = toPropertyKey$3(P);
- anObject$h(Attributes);
- if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
- var current = $getOwnPropertyDescriptor$1(O, P);
- if (current && current[WRITABLE]) {
- O[P] = Attributes.value;
- Attributes = {
- configurable: CONFIGURABLE$1 in Attributes ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1],
- enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
- writable: false
- };
- }
- } return $defineProperty$1(O, P, Attributes);
- } : $defineProperty$1 : function defineProperty(O, P, Attributes) {
- anObject$h(O);
- P = toPropertyKey$3(P);
- anObject$h(Attributes);
- if (IE8_DOM_DEFINE) try {
- return $defineProperty$1(O, P, Attributes);
- } catch (error) { /* empty */ }
- if ('get' in Attributes || 'set' in Attributes) throw $TypeError$c('Accessors not supported');
- if ('value' in Attributes) O[P] = Attributes.value;
- return O;
- };
- var DESCRIPTORS$h = descriptors;
- var definePropertyModule$7 = objectDefineProperty;
- var createPropertyDescriptor$5 = createPropertyDescriptor$7;
- var createNonEnumerableProperty$9 = DESCRIPTORS$h ? function (object, key, value) {
- return definePropertyModule$7.f(object, key, createPropertyDescriptor$5(1, value));
- } : function (object, key, value) {
- object[key] = value;
- return object;
- };
- var makeBuiltIn$3 = {exports: {}};
- var DESCRIPTORS$g = descriptors;
- var hasOwn$i = hasOwnProperty_1;
- var FunctionPrototype$2 = Function.prototype;
- // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
- var getDescriptor = DESCRIPTORS$g && Object.getOwnPropertyDescriptor;
- var EXISTS = hasOwn$i(FunctionPrototype$2, 'name');
- // additional protection from minified / mangled / dropped function names
- var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';
- var CONFIGURABLE = EXISTS && (!DESCRIPTORS$g || (DESCRIPTORS$g && getDescriptor(FunctionPrototype$2, 'name').configurable));
- var functionName = {
- EXISTS: EXISTS,
- PROPER: PROPER,
- CONFIGURABLE: CONFIGURABLE
- };
- var uncurryThis$C = functionUncurryThis;
- var isCallable$m = isCallable$s;
- var store$1 = sharedStore;
- var functionToString$1 = uncurryThis$C(Function.toString);
- // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper
- if (!isCallable$m(store$1.inspectSource)) {
- store$1.inspectSource = function (it) {
- return functionToString$1(it);
- };
- }
- var inspectSource$4 = store$1.inspectSource;
- var global$y = global$F;
- var isCallable$l = isCallable$s;
- var inspectSource$3 = inspectSource$4;
- var WeakMap$1 = global$y.WeakMap;
- var nativeWeakMap = isCallable$l(WeakMap$1) && /native code/.test(inspectSource$3(WeakMap$1));
- var shared$5 = shared$7.exports;
- var uid$3 = uid$5;
- var keys$2 = shared$5('keys');
- var sharedKey$4 = function (key) {
- return keys$2[key] || (keys$2[key] = uid$3(key));
- };
- var hiddenKeys$6 = {};
- var NATIVE_WEAK_MAP = nativeWeakMap;
- var global$x = global$F;
- var uncurryThis$B = functionUncurryThis;
- var isObject$f = isObject$k;
- var createNonEnumerableProperty$8 = createNonEnumerableProperty$9;
- var hasOwn$h = hasOwnProperty_1;
- var shared$4 = sharedStore;
- var sharedKey$3 = sharedKey$4;
- var hiddenKeys$5 = hiddenKeys$6;
- var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
- var TypeError$7 = global$x.TypeError;
- var WeakMap = global$x.WeakMap;
- var set$2, get$1, has;
- var enforce = function (it) {
- return has(it) ? get$1(it) : set$2(it, {});
- };
- var getterFor = function (TYPE) {
- return function (it) {
- var state;
- if (!isObject$f(it) || (state = get$1(it)).type !== TYPE) {
- throw TypeError$7('Incompatible receiver, ' + TYPE + ' required');
- } return state;
- };
- };
- if (NATIVE_WEAK_MAP || shared$4.state) {
- var store = shared$4.state || (shared$4.state = new WeakMap());
- var wmget = uncurryThis$B(store.get);
- var wmhas = uncurryThis$B(store.has);
- var wmset = uncurryThis$B(store.set);
- set$2 = function (it, metadata) {
- if (wmhas(store, it)) throw new TypeError$7(OBJECT_ALREADY_INITIALIZED);
- metadata.facade = it;
- wmset(store, it, metadata);
- return metadata;
- };
- get$1 = function (it) {
- return wmget(store, it) || {};
- };
- has = function (it) {
- return wmhas(store, it);
- };
- } else {
- var STATE = sharedKey$3('state');
- hiddenKeys$5[STATE] = true;
- set$2 = function (it, metadata) {
- if (hasOwn$h(it, STATE)) throw new TypeError$7(OBJECT_ALREADY_INITIALIZED);
- metadata.facade = it;
- createNonEnumerableProperty$8(it, STATE, metadata);
- return metadata;
- };
- get$1 = function (it) {
- return hasOwn$h(it, STATE) ? it[STATE] : {};
- };
- has = function (it) {
- return hasOwn$h(it, STATE);
- };
- }
- var internalState = {
- set: set$2,
- get: get$1,
- has: has,
- enforce: enforce,
- getterFor: getterFor
- };
- var fails$A = fails$H;
- var isCallable$k = isCallable$s;
- var hasOwn$g = hasOwnProperty_1;
- var DESCRIPTORS$f = descriptors;
- var CONFIGURABLE_FUNCTION_NAME$2 = functionName.CONFIGURABLE;
- var inspectSource$2 = inspectSource$4;
- var InternalStateModule$a = internalState;
- var enforceInternalState$2 = InternalStateModule$a.enforce;
- var getInternalState$7 = InternalStateModule$a.get;
- // eslint-disable-next-line es-x/no-object-defineproperty -- safe
- var defineProperty$d = Object.defineProperty;
- var CONFIGURABLE_LENGTH = DESCRIPTORS$f && !fails$A(function () {
- return defineProperty$d(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;
- });
- var TEMPLATE = String(String).split('String');
- var makeBuiltIn$2 = makeBuiltIn$3.exports = function (value, name, options) {
- if (String(name).slice(0, 7) === 'Symbol(') {
- name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']';
- }
- if (options && options.getter) name = 'get ' + name;
- if (options && options.setter) name = 'set ' + name;
- if (!hasOwn$g(value, 'name') || (CONFIGURABLE_FUNCTION_NAME$2 && value.name !== name)) {
- defineProperty$d(value, 'name', { value: name, configurable: true });
- }
- if (CONFIGURABLE_LENGTH && options && hasOwn$g(options, 'arity') && value.length !== options.arity) {
- defineProperty$d(value, 'length', { value: options.arity });
- }
- try {
- if (options && hasOwn$g(options, 'constructor') && options.constructor) {
- if (DESCRIPTORS$f) defineProperty$d(value, 'prototype', { writable: false });
- // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable
- } else if (value.prototype) value.prototype = undefined;
- } catch (error) { /* empty */ }
- var state = enforceInternalState$2(value);
- if (!hasOwn$g(state, 'source')) {
- state.source = TEMPLATE.join(typeof name == 'string' ? name : '');
- } return value;
- };
- // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
- // eslint-disable-next-line no-extend-native -- required
- Function.prototype.toString = makeBuiltIn$2(function toString() {
- return isCallable$k(this) && getInternalState$7(this).source || inspectSource$2(this);
- }, 'toString');
- var isCallable$j = isCallable$s;
- var definePropertyModule$6 = objectDefineProperty;
- var makeBuiltIn$1 = makeBuiltIn$3.exports;
- var defineGlobalProperty$1 = defineGlobalProperty$3;
- var defineBuiltIn$f = function (O, key, value, options) {
- if (!options) options = {};
- var simple = options.enumerable;
- var name = options.name !== undefined ? options.name : key;
- if (isCallable$j(value)) makeBuiltIn$1(value, name, options);
- if (options.global) {
- if (simple) O[key] = value;
- else defineGlobalProperty$1(key, value);
- } else {
- if (!options.unsafe) delete O[key];
- else if (O[key]) simple = true;
- if (simple) O[key] = value;
- else definePropertyModule$6.f(O, key, {
- value: value,
- enumerable: false,
- configurable: !options.nonConfigurable,
- writable: !options.nonWritable
- });
- } return O;
- };
- var objectGetOwnPropertyNames = {};
- var ceil = Math.ceil;
- var floor$7 = Math.floor;
- // `Math.trunc` method
- // https://tc39.es/ecma262/#sec-math.trunc
- // eslint-disable-next-line es-x/no-math-trunc -- safe
- var mathTrunc = Math.trunc || function trunc(x) {
- var n = +x;
- return (n > 0 ? floor$7 : ceil)(n);
- };
- var trunc = mathTrunc;
- // `ToIntegerOrInfinity` abstract operation
- // https://tc39.es/ecma262/#sec-tointegerorinfinity
- var toIntegerOrInfinity$9 = function (argument) {
- var number = +argument;
- // eslint-disable-next-line no-self-compare -- NaN check
- return number !== number || number === 0 ? 0 : trunc(number);
- };
- var toIntegerOrInfinity$8 = toIntegerOrInfinity$9;
- var max$4 = Math.max;
- var min$8 = Math.min;
- // Helper for a popular repeating case of the spec:
- // Let integer be ? ToInteger(index).
- // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
- var toAbsoluteIndex$8 = function (index, length) {
- var integer = toIntegerOrInfinity$8(index);
- return integer < 0 ? max$4(integer + length, 0) : min$8(integer, length);
- };
- var toIntegerOrInfinity$7 = toIntegerOrInfinity$9;
- var min$7 = Math.min;
- // `ToLength` abstract operation
- // https://tc39.es/ecma262/#sec-tolength
- var toLength$a = function (argument) {
- return argument > 0 ? min$7(toIntegerOrInfinity$7(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
- };
- var toLength$9 = toLength$a;
- // `LengthOfArrayLike` abstract operation
- // https://tc39.es/ecma262/#sec-lengthofarraylike
- var lengthOfArrayLike$f = function (obj) {
- return toLength$9(obj.length);
- };
- var toIndexedObject$9 = toIndexedObject$b;
- var toAbsoluteIndex$7 = toAbsoluteIndex$8;
- var lengthOfArrayLike$e = lengthOfArrayLike$f;
- // `Array.prototype.{ indexOf, includes }` methods implementation
- var createMethod$5 = function (IS_INCLUDES) {
- return function ($this, el, fromIndex) {
- var O = toIndexedObject$9($this);
- var length = lengthOfArrayLike$e(O);
- var index = toAbsoluteIndex$7(fromIndex, length);
- var value;
- // Array#includes uses SameValueZero equality algorithm
- // eslint-disable-next-line no-self-compare -- NaN check
- if (IS_INCLUDES && el != el) while (length > index) {
- value = O[index++];
- // eslint-disable-next-line no-self-compare -- NaN check
- if (value != value) return true;
- // Array#indexOf ignores holes, Array#includes - not
- } else for (;length > index; index++) {
- if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
- } return !IS_INCLUDES && -1;
- };
- };
- var arrayIncludes = {
- // `Array.prototype.includes` method
- // https://tc39.es/ecma262/#sec-array.prototype.includes
- includes: createMethod$5(true),
- // `Array.prototype.indexOf` method
- // https://tc39.es/ecma262/#sec-array.prototype.indexof
- indexOf: createMethod$5(false)
- };
- var uncurryThis$A = functionUncurryThis;
- var hasOwn$f = hasOwnProperty_1;
- var toIndexedObject$8 = toIndexedObject$b;
- var indexOf$1 = arrayIncludes.indexOf;
- var hiddenKeys$4 = hiddenKeys$6;
- var push$8 = uncurryThis$A([].push);
- var objectKeysInternal = function (object, names) {
- var O = toIndexedObject$8(object);
- var i = 0;
- var result = [];
- var key;
- for (key in O) !hasOwn$f(hiddenKeys$4, key) && hasOwn$f(O, key) && push$8(result, key);
- // Don't enum bug & hidden keys
- while (names.length > i) if (hasOwn$f(O, key = names[i++])) {
- ~indexOf$1(result, key) || push$8(result, key);
- }
- return result;
- };
- // IE8- don't enum bug keys
- var enumBugKeys$3 = [
- 'constructor',
- 'hasOwnProperty',
- 'isPrototypeOf',
- 'propertyIsEnumerable',
- 'toLocaleString',
- 'toString',
- 'valueOf'
- ];
- var internalObjectKeys$1 = objectKeysInternal;
- var enumBugKeys$2 = enumBugKeys$3;
- var hiddenKeys$3 = enumBugKeys$2.concat('length', 'prototype');
- // `Object.getOwnPropertyNames` method
- // https://tc39.es/ecma262/#sec-object.getownpropertynames
- // eslint-disable-next-line es-x/no-object-getownpropertynames -- safe
- objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
- return internalObjectKeys$1(O, hiddenKeys$3);
- };
- var objectGetOwnPropertySymbols = {};
- // eslint-disable-next-line es-x/no-object-getownpropertysymbols -- safe
- objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols;
- var getBuiltIn$8 = getBuiltIn$b;
- var uncurryThis$z = functionUncurryThis;
- var getOwnPropertyNamesModule$2 = objectGetOwnPropertyNames;
- var getOwnPropertySymbolsModule$3 = objectGetOwnPropertySymbols;
- var anObject$g = anObject$i;
- var concat$3 = uncurryThis$z([].concat);
- // all object keys, includes non-enumerable and symbols
- var ownKeys$1 = getBuiltIn$8('Reflect', 'ownKeys') || function ownKeys(it) {
- var keys = getOwnPropertyNamesModule$2.f(anObject$g(it));
- var getOwnPropertySymbols = getOwnPropertySymbolsModule$3.f;
- return getOwnPropertySymbols ? concat$3(keys, getOwnPropertySymbols(it)) : keys;
- };
- var hasOwn$e = hasOwnProperty_1;
- var ownKeys = ownKeys$1;
- var getOwnPropertyDescriptorModule$2 = objectGetOwnPropertyDescriptor;
- var definePropertyModule$5 = objectDefineProperty;
- var copyConstructorProperties$2 = function (target, source, exceptions) {
- var keys = ownKeys(source);
- var defineProperty = definePropertyModule$5.f;
- var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule$2.f;
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- if (!hasOwn$e(target, key) && !(exceptions && hasOwn$e(exceptions, key))) {
- defineProperty(target, key, getOwnPropertyDescriptor(source, key));
- }
- }
- };
- var fails$z = fails$H;
- var isCallable$i = isCallable$s;
- var replacement = /#|\.prototype\./;
- var isForced$4 = function (feature, detection) {
- var value = data[normalize(feature)];
- return value == POLYFILL ? true
- : value == NATIVE ? false
- : isCallable$i(detection) ? fails$z(detection)
- : !!detection;
- };
- var normalize = isForced$4.normalize = function (string) {
- return String(string).replace(replacement, '.').toLowerCase();
- };
- var data = isForced$4.data = {};
- var NATIVE = isForced$4.NATIVE = 'N';
- var POLYFILL = isForced$4.POLYFILL = 'P';
- var isForced_1 = isForced$4;
- var global$w = global$F;
- var getOwnPropertyDescriptor$5 = objectGetOwnPropertyDescriptor.f;
- var createNonEnumerableProperty$7 = createNonEnumerableProperty$9;
- var defineBuiltIn$e = defineBuiltIn$f;
- var defineGlobalProperty = defineGlobalProperty$3;
- var copyConstructorProperties$1 = copyConstructorProperties$2;
- var isForced$3 = isForced_1;
- /*
- options.target - name of the target object
- options.global - target is the global object
- options.stat - export as static methods of target
- options.proto - export as prototype methods of target
- options.real - real prototype method for the `pure` version
- options.forced - export even if the native feature is available
- options.bind - bind methods to the target, required for the `pure` version
- options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
- options.unsafe - use the simple assignment of property instead of delete + defineProperty
- options.sham - add a flag to not completely full polyfills
- options.enumerable - export as enumerable property
- options.dontCallGetSet - prevent calling a getter on target
- options.name - the .name of the function if it does not match the key
- */
- var _export = function (options, source) {
- var TARGET = options.target;
- var GLOBAL = options.global;
- var STATIC = options.stat;
- var FORCED, target, key, targetProperty, sourceProperty, descriptor;
- if (GLOBAL) {
- target = global$w;
- } else if (STATIC) {
- target = global$w[TARGET] || defineGlobalProperty(TARGET, {});
- } else {
- target = (global$w[TARGET] || {}).prototype;
- }
- if (target) for (key in source) {
- sourceProperty = source[key];
- if (options.dontCallGetSet) {
- descriptor = getOwnPropertyDescriptor$5(target, key);
- targetProperty = descriptor && descriptor.value;
- } else targetProperty = target[key];
- FORCED = isForced$3(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
- // contained in target
- if (!FORCED && targetProperty !== undefined) {
- if (typeof sourceProperty == typeof targetProperty) continue;
- copyConstructorProperties$1(sourceProperty, targetProperty);
- }
- // add a flag to not completely full polyfills
- if (options.sham || (targetProperty && targetProperty.sham)) {
- createNonEnumerableProperty$7(sourceProperty, 'sham', true);
- }
- defineBuiltIn$e(target, key, sourceProperty, options);
- }
- };
- var internalObjectKeys = objectKeysInternal;
- var enumBugKeys$1 = enumBugKeys$3;
- // `Object.keys` method
- // https://tc39.es/ecma262/#sec-object.keys
- // eslint-disable-next-line es-x/no-object-keys -- safe
- var objectKeys$4 = Object.keys || function keys(O) {
- return internalObjectKeys(O, enumBugKeys$1);
- };
- var DESCRIPTORS$e = descriptors;
- var uncurryThis$y = functionUncurryThis;
- var call$m = functionCall;
- var fails$y = fails$H;
- var objectKeys$3 = objectKeys$4;
- var getOwnPropertySymbolsModule$2 = objectGetOwnPropertySymbols;
- var propertyIsEnumerableModule$1 = objectPropertyIsEnumerable;
- var toObject$b = toObject$d;
- var IndexedObject$2 = indexedObject;
- // eslint-disable-next-line es-x/no-object-assign -- safe
- var $assign = Object.assign;
- // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
- var defineProperty$c = Object.defineProperty;
- var concat$2 = uncurryThis$y([].concat);
- // `Object.assign` method
- // https://tc39.es/ecma262/#sec-object.assign
- var objectAssign = !$assign || fails$y(function () {
- // should have correct order of operations (Edge bug)
- if (DESCRIPTORS$e && $assign({ b: 1 }, $assign(defineProperty$c({}, 'a', {
- enumerable: true,
- get: function () {
- defineProperty$c(this, 'b', {
- value: 3,
- enumerable: false
- });
- }
- }), { b: 2 })).b !== 1) return true;
- // should work with symbols and should have deterministic property order (V8 bug)
- var A = {};
- var B = {};
- // eslint-disable-next-line es-x/no-symbol -- safe
- var symbol = Symbol();
- var alphabet = 'abcdefghijklmnopqrst';
- A[symbol] = 7;
- alphabet.split('').forEach(function (chr) { B[chr] = chr; });
- return $assign({}, A)[symbol] != 7 || objectKeys$3($assign({}, B)).join('') != alphabet;
- }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`
- var T = toObject$b(target);
- var argumentsLength = arguments.length;
- var index = 1;
- var getOwnPropertySymbols = getOwnPropertySymbolsModule$2.f;
- var propertyIsEnumerable = propertyIsEnumerableModule$1.f;
- while (argumentsLength > index) {
- var S = IndexedObject$2(arguments[index++]);
- var keys = getOwnPropertySymbols ? concat$2(objectKeys$3(S), getOwnPropertySymbols(S)) : objectKeys$3(S);
- var length = keys.length;
- var j = 0;
- var key;
- while (length > j) {
- key = keys[j++];
- if (!DESCRIPTORS$e || call$m(propertyIsEnumerable, S, key)) T[key] = S[key];
- }
- } return T;
- } : $assign;
- var $$y = _export;
- var assign$1 = objectAssign;
- // `Object.assign` method
- // https://tc39.es/ecma262/#sec-object.assign
- // eslint-disable-next-line es-x/no-object-assign -- required for testing
- $$y({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign$1 }, {
- assign: assign$1
- });
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- /* global navigator */
- var DEFAULT_CONFIGURATION = {
- chunkSize: 512 * 1024,
- maxWorkers: typeof navigator != "undefined" && navigator.hardwareConcurrency || 2,
- terminateWorkerTimeout: 5000,
- useWebWorkers: true,
- workerScripts: undefined
- };
- var config = Object.assign({}, DEFAULT_CONFIGURATION);
- function getConfiguration() {
- return config;
- }
- function configure(configuration) {
- if (configuration.baseURL !== undefined) {
- config.baseURL = configuration.baseURL;
- }
- if (configuration.chunkSize !== undefined) {
- config.chunkSize = configuration.chunkSize;
- }
- if (configuration.maxWorkers !== undefined) {
- config.maxWorkers = configuration.maxWorkers;
- }
- if (configuration.terminateWorkerTimeout !== undefined) {
- config.terminateWorkerTimeout = configuration.terminateWorkerTimeout;
- }
- if (configuration.useWebWorkers !== undefined) {
- config.useWebWorkers = configuration.useWebWorkers;
- }
- if (configuration.Deflate !== undefined) {
- config.Deflate = configuration.Deflate;
- }
- if (configuration.Inflate !== undefined) {
- config.Inflate = configuration.Inflate;
- }
- if (configuration.workerScripts !== undefined) {
- if (configuration.workerScripts.deflate) {
- if (!Array.isArray(configuration.workerScripts.deflate)) {
- throw new Error("workerScripts.deflate must be an array");
- }
- if (!config.workerScripts) {
- config.workerScripts = {};
- }
- config.workerScripts.deflate = configuration.workerScripts.deflate;
- }
- if (configuration.workerScripts.inflate) {
- if (!Array.isArray(configuration.workerScripts.inflate)) {
- throw new Error("workerScripts.inflate must be an array");
- }
- if (!config.workerScripts) {
- config.workerScripts = {};
- }
- config.workerScripts.inflate = configuration.workerScripts.inflate;
- }
- }
- }
- var objectDefineProperties = {};
- var DESCRIPTORS$d = descriptors;
- var V8_PROTOTYPE_DEFINE_BUG = v8PrototypeDefineBug;
- var definePropertyModule$4 = objectDefineProperty;
- var anObject$f = anObject$i;
- var toIndexedObject$7 = toIndexedObject$b;
- var objectKeys$2 = objectKeys$4;
- // `Object.defineProperties` method
- // https://tc39.es/ecma262/#sec-object.defineproperties
- // eslint-disable-next-line es-x/no-object-defineproperties -- safe
- objectDefineProperties.f = DESCRIPTORS$d && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
- anObject$f(O);
- var props = toIndexedObject$7(Properties);
- var keys = objectKeys$2(Properties);
- var length = keys.length;
- var index = 0;
- var key;
- while (length > index) definePropertyModule$4.f(O, key = keys[index++], props[key]);
- return O;
- };
- var getBuiltIn$7 = getBuiltIn$b;
- var html$2 = getBuiltIn$7('document', 'documentElement');
- /* global ActiveXObject -- old IE, WSH */
- var anObject$e = anObject$i;
- var definePropertiesModule$1 = objectDefineProperties;
- var enumBugKeys = enumBugKeys$3;
- var hiddenKeys$2 = hiddenKeys$6;
- var html$1 = html$2;
- var documentCreateElement$1 = documentCreateElement$2;
- var sharedKey$2 = sharedKey$4;
- var GT = '>';
- var LT = '<';
- var PROTOTYPE$2 = 'prototype';
- var SCRIPT = 'script';
- var IE_PROTO$1 = sharedKey$2('IE_PROTO');
- var EmptyConstructor = function () { /* empty */ };
- var scriptTag = function (content) {
- return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
- };
- // Create object with fake `null` prototype: use ActiveX Object with cleared prototype
- var NullProtoObjectViaActiveX = function (activeXDocument) {
- activeXDocument.write(scriptTag(''));
- activeXDocument.close();
- var temp = activeXDocument.parentWindow.Object;
- activeXDocument = null; // avoid memory leak
- return temp;
- };
- // Create object with fake `null` prototype: use iframe Object with cleared prototype
- var NullProtoObjectViaIFrame = function () {
- // Thrash, waste and sodomy: IE GC bug
- var iframe = documentCreateElement$1('iframe');
- var JS = 'java' + SCRIPT + ':';
- var iframeDocument;
- iframe.style.display = 'none';
- html$1.appendChild(iframe);
- // https://github.com/zloirock/core-js/issues/475
- iframe.src = String(JS);
- iframeDocument = iframe.contentWindow.document;
- iframeDocument.open();
- iframeDocument.write(scriptTag('document.F=Object'));
- iframeDocument.close();
- return iframeDocument.F;
- };
- // Check for document.domain and active x support
- // No need to use active x approach when document.domain is not set
- // see https://github.com/es-shims/es5-shim/issues/150
- // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
- // avoid IE GC bug
- var activeXDocument;
- var NullProtoObject = function () {
- try {
- activeXDocument = new ActiveXObject('htmlfile');
- } catch (error) { /* ignore */ }
- NullProtoObject = typeof document != 'undefined'
- ? document.domain && activeXDocument
- ? NullProtoObjectViaActiveX(activeXDocument) // old IE
- : NullProtoObjectViaIFrame()
- : NullProtoObjectViaActiveX(activeXDocument); // WSH
- var length = enumBugKeys.length;
- while (length--) delete NullProtoObject[PROTOTYPE$2][enumBugKeys[length]];
- return NullProtoObject();
- };
- hiddenKeys$2[IE_PROTO$1] = true;
- // `Object.create` method
- // https://tc39.es/ecma262/#sec-object.create
- // eslint-disable-next-line es-x/no-object-create -- safe
- var objectCreate = Object.create || function create(O, Properties) {
- var result;
- if (O !== null) {
- EmptyConstructor[PROTOTYPE$2] = anObject$e(O);
- result = new EmptyConstructor();
- EmptyConstructor[PROTOTYPE$2] = null;
- // add "__proto__" for Object.getPrototypeOf polyfill
- result[IE_PROTO$1] = O;
- } else result = NullProtoObject();
- return Properties === undefined ? result : definePropertiesModule$1.f(result, Properties);
- };
- var wellKnownSymbol$r = wellKnownSymbol$t;
- var create$5 = objectCreate;
- var defineProperty$b = objectDefineProperty.f;
- var UNSCOPABLES = wellKnownSymbol$r('unscopables');
- var ArrayPrototype$1 = Array.prototype;
- // Array.prototype[@@unscopables]
- // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
- if (ArrayPrototype$1[UNSCOPABLES] == undefined) {
- defineProperty$b(ArrayPrototype$1, UNSCOPABLES, {
- configurable: true,
- value: create$5(null)
- });
- }
- // add a key to Array.prototype[@@unscopables]
- var addToUnscopables$2 = function (key) {
- ArrayPrototype$1[UNSCOPABLES][key] = true;
- };
- var iterators = {};
- var fails$x = fails$H;
- var correctPrototypeGetter = !fails$x(function () {
- function F() { /* empty */ }
- F.prototype.constructor = null;
- // eslint-disable-next-line es-x/no-object-getprototypeof -- required for testing
- return Object.getPrototypeOf(new F()) !== F.prototype;
- });
- var hasOwn$d = hasOwnProperty_1;
- var isCallable$h = isCallable$s;
- var toObject$a = toObject$d;
- var sharedKey$1 = sharedKey$4;
- var CORRECT_PROTOTYPE_GETTER = correctPrototypeGetter;
- var IE_PROTO = sharedKey$1('IE_PROTO');
- var $Object$1 = Object;
- var ObjectPrototype$3 = $Object$1.prototype;
- // `Object.getPrototypeOf` method
- // https://tc39.es/ecma262/#sec-object.getprototypeof
- // eslint-disable-next-line es-x/no-object-getprototypeof -- safe
- var objectGetPrototypeOf = CORRECT_PROTOTYPE_GETTER ? $Object$1.getPrototypeOf : function (O) {
- var object = toObject$a(O);
- if (hasOwn$d(object, IE_PROTO)) return object[IE_PROTO];
- var constructor = object.constructor;
- if (isCallable$h(constructor) && object instanceof constructor) {
- return constructor.prototype;
- } return object instanceof $Object$1 ? ObjectPrototype$3 : null;
- };
- var fails$w = fails$H;
- var isCallable$g = isCallable$s;
- var getPrototypeOf$3 = objectGetPrototypeOf;
- var defineBuiltIn$d = defineBuiltIn$f;
- var wellKnownSymbol$q = wellKnownSymbol$t;
- var ITERATOR$8 = wellKnownSymbol$q('iterator');
- var BUGGY_SAFARI_ITERATORS$1 = false;
- // `%IteratorPrototype%` object
- // https://tc39.es/ecma262/#sec-%iteratorprototype%-object
- var IteratorPrototype$2, PrototypeOfArrayIteratorPrototype, arrayIterator;
- /* eslint-disable es-x/no-array-prototype-keys -- safe */
- if ([].keys) {
- arrayIterator = [].keys();
- // Safari 8 has buggy iterators w/o `next`
- if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS$1 = true;
- else {
- PrototypeOfArrayIteratorPrototype = getPrototypeOf$3(getPrototypeOf$3(arrayIterator));
- if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype$2 = PrototypeOfArrayIteratorPrototype;
- }
- }
- var NEW_ITERATOR_PROTOTYPE = IteratorPrototype$2 == undefined || fails$w(function () {
- var test = {};
- // FF44- legacy iterators case
- return IteratorPrototype$2[ITERATOR$8].call(test) !== test;
- });
- if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype$2 = {};
- // `%IteratorPrototype%[@@iterator]()` method
- // https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator
- if (!isCallable$g(IteratorPrototype$2[ITERATOR$8])) {
- defineBuiltIn$d(IteratorPrototype$2, ITERATOR$8, function () {
- return this;
- });
- }
- var iteratorsCore = {
- IteratorPrototype: IteratorPrototype$2,
- BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS$1
- };
- var defineProperty$a = objectDefineProperty.f;
- var hasOwn$c = hasOwnProperty_1;
- var wellKnownSymbol$p = wellKnownSymbol$t;
- var TO_STRING_TAG$4 = wellKnownSymbol$p('toStringTag');
- var setToStringTag$8 = function (target, TAG, STATIC) {
- if (target && !STATIC) target = target.prototype;
- if (target && !hasOwn$c(target, TO_STRING_TAG$4)) {
- defineProperty$a(target, TO_STRING_TAG$4, { configurable: true, value: TAG });
- }
- };
- var IteratorPrototype$1 = iteratorsCore.IteratorPrototype;
- var create$4 = objectCreate;
- var createPropertyDescriptor$4 = createPropertyDescriptor$7;
- var setToStringTag$7 = setToStringTag$8;
- var Iterators$4 = iterators;
- var returnThis$1 = function () { return this; };
- var createIteratorConstructor$2 = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
- var TO_STRING_TAG = NAME + ' Iterator';
- IteratorConstructor.prototype = create$4(IteratorPrototype$1, { next: createPropertyDescriptor$4(+!ENUMERABLE_NEXT, next) });
- setToStringTag$7(IteratorConstructor, TO_STRING_TAG, false);
- Iterators$4[TO_STRING_TAG] = returnThis$1;
- return IteratorConstructor;
- };
- var isCallable$f = isCallable$s;
- var $String$1 = String;
- var $TypeError$b = TypeError;
- var aPossiblePrototype$1 = function (argument) {
- if (typeof argument == 'object' || isCallable$f(argument)) return argument;
- throw $TypeError$b("Can't set " + $String$1(argument) + ' as a prototype');
- };
- /* eslint-disable no-proto -- safe */
- var uncurryThis$x = functionUncurryThis;
- var anObject$d = anObject$i;
- var aPossiblePrototype = aPossiblePrototype$1;
- // `Object.setPrototypeOf` method
- // https://tc39.es/ecma262/#sec-object.setprototypeof
- // Works with __proto__ only. Old v8 can't work with null proto objects.
- // eslint-disable-next-line es-x/no-object-setprototypeof -- safe
- var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () {
- var CORRECT_SETTER = false;
- var test = {};
- var setter;
- try {
- // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
- setter = uncurryThis$x(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);
- setter(test, []);
- CORRECT_SETTER = test instanceof Array;
- } catch (error) { /* empty */ }
- return function setPrototypeOf(O, proto) {
- anObject$d(O);
- aPossiblePrototype(proto);
- if (CORRECT_SETTER) setter(O, proto);
- else O.__proto__ = proto;
- return O;
- };
- }() : undefined);
- var $$x = _export;
- var call$l = functionCall;
- var FunctionName$1 = functionName;
- var isCallable$e = isCallable$s;
- var createIteratorConstructor$1 = createIteratorConstructor$2;
- var getPrototypeOf$2 = objectGetPrototypeOf;
- var setPrototypeOf$5 = objectSetPrototypeOf;
- var setToStringTag$6 = setToStringTag$8;
- var createNonEnumerableProperty$6 = createNonEnumerableProperty$9;
- var defineBuiltIn$c = defineBuiltIn$f;
- var wellKnownSymbol$o = wellKnownSymbol$t;
- var Iterators$3 = iterators;
- var IteratorsCore = iteratorsCore;
- var PROPER_FUNCTION_NAME$2 = FunctionName$1.PROPER;
- var CONFIGURABLE_FUNCTION_NAME$1 = FunctionName$1.CONFIGURABLE;
- var IteratorPrototype = IteratorsCore.IteratorPrototype;
- var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
- var ITERATOR$7 = wellKnownSymbol$o('iterator');
- var KEYS = 'keys';
- var VALUES = 'values';
- var ENTRIES = 'entries';
- var returnThis = function () { return this; };
- var defineIterator$3 = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
- createIteratorConstructor$1(IteratorConstructor, NAME, next);
- var getIterationMethod = function (KIND) {
- if (KIND === DEFAULT && defaultIterator) return defaultIterator;
- if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
- switch (KIND) {
- case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
- case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
- case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
- } return function () { return new IteratorConstructor(this); };
- };
- var TO_STRING_TAG = NAME + ' Iterator';
- var INCORRECT_VALUES_NAME = false;
- var IterablePrototype = Iterable.prototype;
- var nativeIterator = IterablePrototype[ITERATOR$7]
- || IterablePrototype['@@iterator']
- || DEFAULT && IterablePrototype[DEFAULT];
- var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
- var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
- var CurrentIteratorPrototype, methods, KEY;
- // fix native
- if (anyNativeIterator) {
- CurrentIteratorPrototype = getPrototypeOf$2(anyNativeIterator.call(new Iterable()));
- if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
- if (getPrototypeOf$2(CurrentIteratorPrototype) !== IteratorPrototype) {
- if (setPrototypeOf$5) {
- setPrototypeOf$5(CurrentIteratorPrototype, IteratorPrototype);
- } else if (!isCallable$e(CurrentIteratorPrototype[ITERATOR$7])) {
- defineBuiltIn$c(CurrentIteratorPrototype, ITERATOR$7, returnThis);
- }
- }
- // Set @@toStringTag to native iterators
- setToStringTag$6(CurrentIteratorPrototype, TO_STRING_TAG, true);
- }
- }
- // fix Array.prototype.{ values, @@iterator }.name in V8 / FF
- if (PROPER_FUNCTION_NAME$2 && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
- if (CONFIGURABLE_FUNCTION_NAME$1) {
- createNonEnumerableProperty$6(IterablePrototype, 'name', VALUES);
- } else {
- INCORRECT_VALUES_NAME = true;
- defaultIterator = function values() { return call$l(nativeIterator, this); };
- }
- }
- // export additional methods
- if (DEFAULT) {
- methods = {
- values: getIterationMethod(VALUES),
- keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
- entries: getIterationMethod(ENTRIES)
- };
- if (FORCED) for (KEY in methods) {
- if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
- defineBuiltIn$c(IterablePrototype, KEY, methods[KEY]);
- }
- } else $$x({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
- }
- // define iterator
- if (IterablePrototype[ITERATOR$7] !== defaultIterator) {
- defineBuiltIn$c(IterablePrototype, ITERATOR$7, defaultIterator, { name: DEFAULT });
- }
- Iterators$3[NAME] = defaultIterator;
- return methods;
- };
- var toIndexedObject$6 = toIndexedObject$b;
- var addToUnscopables$1 = addToUnscopables$2;
- var Iterators$2 = iterators;
- var InternalStateModule$9 = internalState;
- var defineProperty$9 = objectDefineProperty.f;
- var defineIterator$2 = defineIterator$3;
- var DESCRIPTORS$c = descriptors;
- var ARRAY_ITERATOR = 'Array Iterator';
- var setInternalState$8 = InternalStateModule$9.set;
- var getInternalState$6 = InternalStateModule$9.getterFor(ARRAY_ITERATOR);
- // `Array.prototype.entries` method
- // https://tc39.es/ecma262/#sec-array.prototype.entries
- // `Array.prototype.keys` method
- // https://tc39.es/ecma262/#sec-array.prototype.keys
- // `Array.prototype.values` method
- // https://tc39.es/ecma262/#sec-array.prototype.values
- // `Array.prototype[@@iterator]` method
- // https://tc39.es/ecma262/#sec-array.prototype-@@iterator
- // `CreateArrayIterator` internal method
- // https://tc39.es/ecma262/#sec-createarrayiterator
- var es_array_iterator = defineIterator$2(Array, 'Array', function (iterated, kind) {
- setInternalState$8(this, {
- type: ARRAY_ITERATOR,
- target: toIndexedObject$6(iterated), // target
- index: 0, // next index
- kind: kind // kind
- });
- // `%ArrayIteratorPrototype%.next` method
- // https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next
- }, function () {
- var state = getInternalState$6(this);
- var target = state.target;
- var kind = state.kind;
- var index = state.index++;
- if (!target || index >= target.length) {
- state.target = undefined;
- return { value: undefined, done: true };
- }
- if (kind == 'keys') return { value: index, done: false };
- if (kind == 'values') return { value: target[index], done: false };
- return { value: [index, target[index]], done: false };
- }, 'values');
- // argumentsList[@@iterator] is %ArrayProto_values%
- // https://tc39.es/ecma262/#sec-createunmappedargumentsobject
- // https://tc39.es/ecma262/#sec-createmappedargumentsobject
- var values = Iterators$2.Arguments = Iterators$2.Array;
- // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables$1('keys');
- addToUnscopables$1('values');
- addToUnscopables$1('entries');
- // V8 ~ Chrome 45- bug
- if (DESCRIPTORS$c && values.name !== 'values') try {
- defineProperty$9(values, 'name', { value: 'values' });
- } catch (error) { /* empty */ }
- var wellKnownSymbol$n = wellKnownSymbol$t;
- var TO_STRING_TAG$3 = wellKnownSymbol$n('toStringTag');
- var test = {};
- test[TO_STRING_TAG$3] = 'z';
- var toStringTagSupport = String(test) === '[object z]';
- var TO_STRING_TAG_SUPPORT$2 = toStringTagSupport;
- var isCallable$d = isCallable$s;
- var classofRaw = classofRaw$1;
- var wellKnownSymbol$m = wellKnownSymbol$t;
- var TO_STRING_TAG$2 = wellKnownSymbol$m('toStringTag');
- var $Object = Object;
- // ES3 wrong here
- var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
- // fallback for IE11 Script Access Denied error
- var tryGet = function (it, key) {
- try {
- return it[key];
- } catch (error) { /* empty */ }
- };
- // getting tag from ES6+ `Object.prototype.toString`
- var classof$e = TO_STRING_TAG_SUPPORT$2 ? classofRaw : function (it) {
- var O, tag, result;
- return it === undefined ? 'Undefined' : it === null ? 'Null'
- // @@toStringTag case
- : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG$2)) == 'string' ? tag
- // builtinTag case
- : CORRECT_ARGUMENTS ? classofRaw(O)
- // ES3 arguments fallback
- : (result = classofRaw(O)) == 'Object' && isCallable$d(O.callee) ? 'Arguments' : result;
- };
- var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport;
- var classof$d = classof$e;
- // `Object.prototype.toString` method implementation
- // https://tc39.es/ecma262/#sec-object.prototype.tostring
- var objectToString = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() {
- return '[object ' + classof$d(this) + ']';
- };
- var TO_STRING_TAG_SUPPORT = toStringTagSupport;
- var defineBuiltIn$b = defineBuiltIn$f;
- var toString$b = objectToString;
- // `Object.prototype.toString` method
- // https://tc39.es/ecma262/#sec-object.prototype.tostring
- if (!TO_STRING_TAG_SUPPORT) {
- defineBuiltIn$b(Object.prototype, 'toString', toString$b, { unsafe: true });
- }
- var classof$c = classof$e;
- var $String = String;
- var toString$a = function (argument) {
- if (classof$c(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');
- return $String(argument);
- };
- var uncurryThis$w = functionUncurryThis;
- var toIntegerOrInfinity$6 = toIntegerOrInfinity$9;
- var toString$9 = toString$a;
- var requireObjectCoercible$5 = requireObjectCoercible$8;
- var charAt$7 = uncurryThis$w(''.charAt);
- var charCodeAt$3 = uncurryThis$w(''.charCodeAt);
- var stringSlice$8 = uncurryThis$w(''.slice);
- var createMethod$4 = function (CONVERT_TO_STRING) {
- return function ($this, pos) {
- var S = toString$9(requireObjectCoercible$5($this));
- var position = toIntegerOrInfinity$6(pos);
- var size = S.length;
- var first, second;
- if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
- first = charCodeAt$3(S, position);
- return first < 0xD800 || first > 0xDBFF || position + 1 === size
- || (second = charCodeAt$3(S, position + 1)) < 0xDC00 || second > 0xDFFF
- ? CONVERT_TO_STRING
- ? charAt$7(S, position)
- : first
- : CONVERT_TO_STRING
- ? stringSlice$8(S, position, position + 2)
- : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
- };
- };
- var stringMultibyte = {
- // `String.prototype.codePointAt` method
- // https://tc39.es/ecma262/#sec-string.prototype.codepointat
- codeAt: createMethod$4(false),
- // `String.prototype.at` method
- // https://github.com/mathiasbynens/String.prototype.at
- charAt: createMethod$4(true)
- };
- var charAt$6 = stringMultibyte.charAt;
- var toString$8 = toString$a;
- var InternalStateModule$8 = internalState;
- var defineIterator$1 = defineIterator$3;
- var STRING_ITERATOR = 'String Iterator';
- var setInternalState$7 = InternalStateModule$8.set;
- var getInternalState$5 = InternalStateModule$8.getterFor(STRING_ITERATOR);
- // `String.prototype[@@iterator]` method
- // https://tc39.es/ecma262/#sec-string.prototype-@@iterator
- defineIterator$1(String, 'String', function (iterated) {
- setInternalState$7(this, {
- type: STRING_ITERATOR,
- string: toString$8(iterated),
- index: 0
- });
- // `%StringIteratorPrototype%.next` method
- // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
- }, function next() {
- var state = getInternalState$5(this);
- var string = state.string;
- var index = state.index;
- var point;
- if (index >= string.length) return { value: undefined, done: true };
- point = charAt$6(string, index);
- state.index += point.length;
- return { value: point, done: false };
- });
- // iterable DOM collections
- // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
- var domIterables = {
- CSSRuleList: 0,
- CSSStyleDeclaration: 0,
- CSSValueList: 0,
- ClientRectList: 0,
- DOMRectList: 0,
- DOMStringList: 0,
- DOMTokenList: 1,
- DataTransferItemList: 0,
- FileList: 0,
- HTMLAllCollection: 0,
- HTMLCollection: 0,
- HTMLFormElement: 0,
- HTMLSelectElement: 0,
- MediaList: 0,
- MimeTypeArray: 0,
- NamedNodeMap: 0,
- NodeList: 1,
- PaintRequestList: 0,
- Plugin: 0,
- PluginArray: 0,
- SVGLengthList: 0,
- SVGNumberList: 0,
- SVGPathSegList: 0,
- SVGPointList: 0,
- SVGStringList: 0,
- SVGTransformList: 0,
- SourceBufferList: 0,
- StyleSheetList: 0,
- TextTrackCueList: 0,
- TextTrackList: 0,
- TouchList: 0
- };
- // in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`
- var documentCreateElement = documentCreateElement$2;
- var classList = documentCreateElement('span').classList;
- var DOMTokenListPrototype$2 = classList && classList.constructor && classList.constructor.prototype;
- var domTokenListPrototype = DOMTokenListPrototype$2 === Object.prototype ? undefined : DOMTokenListPrototype$2;
- var global$v = global$F;
- var DOMIterables$1 = domIterables;
- var DOMTokenListPrototype$1 = domTokenListPrototype;
- var ArrayIteratorMethods = es_array_iterator;
- var createNonEnumerableProperty$5 = createNonEnumerableProperty$9;
- var wellKnownSymbol$l = wellKnownSymbol$t;
- var ITERATOR$6 = wellKnownSymbol$l('iterator');
- var TO_STRING_TAG$1 = wellKnownSymbol$l('toStringTag');
- var ArrayValues = ArrayIteratorMethods.values;
- var handlePrototype$1 = function (CollectionPrototype, COLLECTION_NAME) {
- if (CollectionPrototype) {
- // some Chrome versions have non-configurable methods on DOMTokenList
- if (CollectionPrototype[ITERATOR$6] !== ArrayValues) try {
- createNonEnumerableProperty$5(CollectionPrototype, ITERATOR$6, ArrayValues);
- } catch (error) {
- CollectionPrototype[ITERATOR$6] = ArrayValues;
- }
- if (!CollectionPrototype[TO_STRING_TAG$1]) {
- createNonEnumerableProperty$5(CollectionPrototype, TO_STRING_TAG$1, COLLECTION_NAME);
- }
- if (DOMIterables$1[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {
- // some Chrome versions have non-configurable methods on DOMTokenList
- if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {
- createNonEnumerableProperty$5(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);
- } catch (error) {
- CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];
- }
- }
- }
- };
- for (var COLLECTION_NAME$1 in DOMIterables$1) {
- handlePrototype$1(global$v[COLLECTION_NAME$1] && global$v[COLLECTION_NAME$1].prototype, COLLECTION_NAME$1);
- }
- handlePrototype$1(DOMTokenListPrototype$1, 'DOMTokenList');
- var fails$v = fails$H;
- var wellKnownSymbol$k = wellKnownSymbol$t;
- var IS_PURE = isPure;
- var ITERATOR$5 = wellKnownSymbol$k('iterator');
- var nativeUrl = !fails$v(function () {
- // eslint-disable-next-line unicorn/relative-url-style -- required for testing
- var url = new URL('b?a=1&b=2&c=3', 'http://a');
- var searchParams = url.searchParams;
- var result = '';
- url.pathname = 'c%20d';
- searchParams.forEach(function (value, key) {
- searchParams['delete']('b');
- result += key + value;
- });
- return (IS_PURE && !url.toJSON)
- || !searchParams.sort
- || url.href !== 'http://a/c%20d?a=1&c=3'
- || searchParams.get('c') !== '3'
- || String(new URLSearchParams('?a=1')) !== 'a=1'
- || !searchParams[ITERATOR$5]
- // throws in Edge
- || new URL('https://a@b').username !== 'a'
- || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
- // not punycoded in Edge
- || new URL('http://тест').host !== 'xn--e1aybc'
- // not escaped in Chrome 62-
- || new URL('http://a#б').hash !== '#%D0%B1'
- // fails in Chrome 66-
- || result !== 'a1c3'
- // throws in Safari
- || new URL('http://x', undefined).host !== 'x';
- });
- var uncurryThis$v = functionUncurryThis;
- var aCallable$7 = aCallable$9;
- var NATIVE_BIND$1 = functionBindNative;
- var bind$a = uncurryThis$v(uncurryThis$v.bind);
- // optional / simple context binding
- var functionBindContext = function (fn, that) {
- aCallable$7(fn);
- return that === undefined ? fn : NATIVE_BIND$1 ? bind$a(fn, that) : function (/* ...args */) {
- return fn.apply(that, arguments);
- };
- };
- var makeBuiltIn = makeBuiltIn$3.exports;
- var defineProperty$8 = objectDefineProperty;
- var defineBuiltInAccessor$1 = function (target, name, descriptor) {
- if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
- if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
- return defineProperty$8.f(target, name, descriptor);
- };
- var isPrototypeOf$6 = objectIsPrototypeOf;
- var $TypeError$a = TypeError;
- var anInstance$7 = function (it, Prototype) {
- if (isPrototypeOf$6(Prototype, it)) return it;
- throw $TypeError$a('Incorrect invocation');
- };
- var call$k = functionCall;
- var anObject$c = anObject$i;
- var getMethod$3 = getMethod$5;
- var iteratorClose$2 = function (iterator, kind, value) {
- var innerResult, innerError;
- anObject$c(iterator);
- try {
- innerResult = getMethod$3(iterator, 'return');
- if (!innerResult) {
- if (kind === 'throw') throw value;
- return value;
- }
- innerResult = call$k(innerResult, iterator);
- } catch (error) {
- innerError = true;
- innerResult = error;
- }
- if (kind === 'throw') throw value;
- if (innerError) throw innerResult;
- anObject$c(innerResult);
- return value;
- };
- var anObject$b = anObject$i;
- var iteratorClose$1 = iteratorClose$2;
- // call something on iterator step with safe closing on error
- var callWithSafeIterationClosing$1 = function (iterator, fn, value, ENTRIES) {
- try {
- return ENTRIES ? fn(anObject$b(value)[0], value[1]) : fn(value);
- } catch (error) {
- iteratorClose$1(iterator, 'throw', error);
- }
- };
- var wellKnownSymbol$j = wellKnownSymbol$t;
- var Iterators$1 = iterators;
- var ITERATOR$4 = wellKnownSymbol$j('iterator');
- var ArrayPrototype = Array.prototype;
- // check on default Array iterator
- var isArrayIteratorMethod$3 = function (it) {
- return it !== undefined && (Iterators$1.Array === it || ArrayPrototype[ITERATOR$4] === it);
- };
- var uncurryThis$u = functionUncurryThis;
- var fails$u = fails$H;
- var isCallable$c = isCallable$s;
- var classof$b = classof$e;
- var getBuiltIn$6 = getBuiltIn$b;
- var inspectSource$1 = inspectSource$4;
- var noop = function () { /* empty */ };
- var empty = [];
- var construct = getBuiltIn$6('Reflect', 'construct');
- var constructorRegExp = /^\s*(?:class|function)\b/;
- var exec$5 = uncurryThis$u(constructorRegExp.exec);
- var INCORRECT_TO_STRING = !constructorRegExp.exec(noop);
- var isConstructorModern = function isConstructor(argument) {
- if (!isCallable$c(argument)) return false;
- try {
- construct(noop, empty, argument);
- return true;
- } catch (error) {
- return false;
- }
- };
- var isConstructorLegacy = function isConstructor(argument) {
- if (!isCallable$c(argument)) return false;
- switch (classof$b(argument)) {
- case 'AsyncFunction':
- case 'GeneratorFunction':
- case 'AsyncGeneratorFunction': return false;
- }
- try {
- // we can't check .prototype since constructors produced by .bind haven't it
- // `Function#toString` throws on some built-it function in some legacy engines
- // (for example, `DOMQuad` and similar in FF41-)
- return INCORRECT_TO_STRING || !!exec$5(constructorRegExp, inspectSource$1(argument));
- } catch (error) {
- return true;
- }
- };
- isConstructorLegacy.sham = true;
- // `IsConstructor` abstract operation
- // https://tc39.es/ecma262/#sec-isconstructor
- var isConstructor$4 = !construct || fails$u(function () {
- var called;
- return isConstructorModern(isConstructorModern.call)
- || !isConstructorModern(Object)
- || !isConstructorModern(function () { called = true; })
- || called;
- }) ? isConstructorLegacy : isConstructorModern;
- var toPropertyKey$2 = toPropertyKey$5;
- var definePropertyModule$3 = objectDefineProperty;
- var createPropertyDescriptor$3 = createPropertyDescriptor$7;
- var createProperty$6 = function (object, key, value) {
- var propertyKey = toPropertyKey$2(key);
- if (propertyKey in object) definePropertyModule$3.f(object, propertyKey, createPropertyDescriptor$3(0, value));
- else object[propertyKey] = value;
- };
- var classof$a = classof$e;
- var getMethod$2 = getMethod$5;
- var Iterators = iterators;
- var wellKnownSymbol$i = wellKnownSymbol$t;
- var ITERATOR$3 = wellKnownSymbol$i('iterator');
- var getIteratorMethod$5 = function (it) {
- if (it != undefined) return getMethod$2(it, ITERATOR$3)
- || getMethod$2(it, '@@iterator')
- || Iterators[classof$a(it)];
- };
- var call$j = functionCall;
- var aCallable$6 = aCallable$9;
- var anObject$a = anObject$i;
- var tryToString$5 = tryToString$7;
- var getIteratorMethod$4 = getIteratorMethod$5;
- var $TypeError$9 = TypeError;
- var getIterator$4 = function (argument, usingIterator) {
- var iteratorMethod = arguments.length < 2 ? getIteratorMethod$4(argument) : usingIterator;
- if (aCallable$6(iteratorMethod)) return anObject$a(call$j(iteratorMethod, argument));
- throw $TypeError$9(tryToString$5(argument) + ' is not iterable');
- };
- var bind$9 = functionBindContext;
- var call$i = functionCall;
- var toObject$9 = toObject$d;
- var callWithSafeIterationClosing = callWithSafeIterationClosing$1;
- var isArrayIteratorMethod$2 = isArrayIteratorMethod$3;
- var isConstructor$3 = isConstructor$4;
- var lengthOfArrayLike$d = lengthOfArrayLike$f;
- var createProperty$5 = createProperty$6;
- var getIterator$3 = getIterator$4;
- var getIteratorMethod$3 = getIteratorMethod$5;
- var $Array$4 = Array;
- // `Array.from` method implementation
- // https://tc39.es/ecma262/#sec-array.from
- var arrayFrom$1 = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
- var O = toObject$9(arrayLike);
- var IS_CONSTRUCTOR = isConstructor$3(this);
- var argumentsLength = arguments.length;
- var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
- var mapping = mapfn !== undefined;
- if (mapping) mapfn = bind$9(mapfn, argumentsLength > 2 ? arguments[2] : undefined);
- var iteratorMethod = getIteratorMethod$3(O);
- var index = 0;
- var length, result, step, iterator, next, value;
- // if the target is not iterable or it's an array with the default iterator - use a simple case
- if (iteratorMethod && !(this === $Array$4 && isArrayIteratorMethod$2(iteratorMethod))) {
- iterator = getIterator$3(O, iteratorMethod);
- next = iterator.next;
- result = IS_CONSTRUCTOR ? new this() : [];
- for (;!(step = call$i(next, iterator)).done; index++) {
- value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
- createProperty$5(result, index, value);
- }
- } else {
- length = lengthOfArrayLike$d(O);
- result = IS_CONSTRUCTOR ? new this(length) : $Array$4(length);
- for (;length > index; index++) {
- value = mapping ? mapfn(O[index], index) : O[index];
- createProperty$5(result, index, value);
- }
- }
- result.length = index;
- return result;
- };
- var toAbsoluteIndex$6 = toAbsoluteIndex$8;
- var lengthOfArrayLike$c = lengthOfArrayLike$f;
- var createProperty$4 = createProperty$6;
- var $Array$3 = Array;
- var max$3 = Math.max;
- var arraySliceSimple = function (O, start, end) {
- var length = lengthOfArrayLike$c(O);
- var k = toAbsoluteIndex$6(start, length);
- var fin = toAbsoluteIndex$6(end === undefined ? length : end, length);
- var result = $Array$3(max$3(fin - k, 0));
- for (var n = 0; k < fin; k++, n++) createProperty$4(result, n, O[k]);
- result.length = n;
- return result;
- };
- // based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js
- var uncurryThis$t = functionUncurryThis;
- var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
- var base = 36;
- var tMin = 1;
- var tMax = 26;
- var skew = 38;
- var damp = 700;
- var initialBias = 72;
- var initialN = 128; // 0x80
- var delimiter = '-'; // '\x2D'
- var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars
- var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
- var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';
- var baseMinusTMin = base - tMin;
- var $RangeError$3 = RangeError;
- var exec$4 = uncurryThis$t(regexSeparators.exec);
- var floor$6 = Math.floor;
- var fromCharCode = String.fromCharCode;
- var charCodeAt$2 = uncurryThis$t(''.charCodeAt);
- var join$3 = uncurryThis$t([].join);
- var push$7 = uncurryThis$t([].push);
- var replace$7 = uncurryThis$t(''.replace);
- var split$2 = uncurryThis$t(''.split);
- var toLowerCase$1 = uncurryThis$t(''.toLowerCase);
- /**
- * 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.
- */
- var ucs2decode = function (string) {
- var output = [];
- var counter = 0;
- var length = string.length;
- while (counter < length) {
- var value = charCodeAt$2(string, counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // It's a high surrogate, and there is a next character.
- var extra = charCodeAt$2(string, counter++);
- if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
- push$7(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // It's an unmatched surrogate; only append this code unit, in case the
- // next code unit is the high surrogate of a surrogate pair.
- push$7(output, value);
- counter--;
- }
- } else {
- push$7(output, value);
- }
- }
- return output;
- };
- /**
- * Converts a digit/integer into a basic code point.
- */
- var digitToBasic = function (digit) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26);
- };
- /**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- */
- var adapt = function (delta, numPoints, firstTime) {
- var k = 0;
- delta = firstTime ? floor$6(delta / damp) : delta >> 1;
- delta += floor$6(delta / numPoints);
- while (delta > baseMinusTMin * tMax >> 1) {
- delta = floor$6(delta / baseMinusTMin);
- k += base;
- }
- return floor$6(k + (baseMinusTMin + 1) * delta / (delta + skew));
- };
- /**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- */
- var encode = function (input) {
- var output = [];
- // Convert the input in UCS-2 to an array of Unicode code points.
- input = ucs2decode(input);
- // Cache the length.
- var inputLength = input.length;
- // Initialize the state.
- var n = initialN;
- var delta = 0;
- var bias = initialBias;
- var i, currentValue;
- // Handle the basic code points.
- for (i = 0; i < input.length; i++) {
- currentValue = input[i];
- if (currentValue < 0x80) {
- push$7(output, fromCharCode(currentValue));
- }
- }
- var basicLength = output.length; // number of basic code points.
- var handledCPCount = basicLength; // number of code points that have been handled;
- // Finish the basic string with a delimiter unless it's empty.
- if (basicLength) {
- push$7(output, delimiter);
- }
- // Main encoding loop:
- while (handledCPCount < inputLength) {
- // All non-basic code points < n have been handled already. Find the next larger one:
- var m = maxInt;
- for (i = 0; i < input.length; i++) {
- currentValue = input[i];
- 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.
- var handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor$6((maxInt - delta) / handledCPCountPlusOne)) {
- throw $RangeError$3(OVERFLOW_ERROR);
- }
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
- for (i = 0; i < input.length; i++) {
- currentValue = input[i];
- if (currentValue < n && ++delta > maxInt) {
- throw $RangeError$3(OVERFLOW_ERROR);
- }
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer.
- var q = delta;
- var k = base;
- while (true) {
- var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (q < t) break;
- var qMinusT = q - t;
- var baseMinusT = base - t;
- push$7(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));
- q = floor$6(qMinusT / baseMinusT);
- k += base;
- }
- push$7(output, fromCharCode(digitToBasic(q)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- handledCPCount++;
- }
- }
- delta++;
- n++;
- }
- return join$3(output, '');
- };
- var stringPunycodeToAscii = function (input) {
- var encoded = [];
- var labels = split$2(replace$7(toLowerCase$1(input), regexSeparators, '\u002E'), '.');
- var i, label;
- for (i = 0; i < labels.length; i++) {
- label = labels[i];
- push$7(encoded, exec$4(regexNonASCII, label) ? 'xn--' + encode(label) : label);
- }
- return join$3(encoded, '.');
- };
- var $TypeError$8 = TypeError;
- var validateArgumentsLength$3 = function (passed, required) {
- if (passed < required) throw $TypeError$8('Not enough arguments');
- return passed;
- };
- var defineBuiltIn$a = defineBuiltIn$f;
- var defineBuiltIns$3 = function (target, src, options) {
- for (var key in src) defineBuiltIn$a(target, key, src[key], options);
- return target;
- };
- var arraySlice$a = arraySliceSimple;
- var floor$5 = Math.floor;
- var mergeSort = function (array, comparefn) {
- var length = array.length;
- var middle = floor$5(length / 2);
- return length < 8 ? insertionSort(array, comparefn) : merge(
- array,
- mergeSort(arraySlice$a(array, 0, middle), comparefn),
- mergeSort(arraySlice$a(array, middle), comparefn),
- comparefn
- );
- };
- var insertionSort = function (array, comparefn) {
- var length = array.length;
- var i = 1;
- var element, j;
- while (i < length) {
- j = i;
- element = array[i];
- while (j && comparefn(array[j - 1], element) > 0) {
- array[j] = array[--j];
- }
- if (j !== i++) array[j] = element;
- } return array;
- };
- var merge = function (array, left, right, comparefn) {
- var llength = left.length;
- var rlength = right.length;
- var lindex = 0;
- var rindex = 0;
- while (lindex < llength || rindex < rlength) {
- array[lindex + rindex] = (lindex < llength && rindex < rlength)
- ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]
- : lindex < llength ? left[lindex++] : right[rindex++];
- } return array;
- };
- var arraySort$1 = mergeSort;
- // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
- var $$w = _export;
- var global$u = global$F;
- var call$h = functionCall;
- var uncurryThis$s = functionUncurryThis;
- var DESCRIPTORS$b = descriptors;
- var USE_NATIVE_URL$1 = nativeUrl;
- var defineBuiltIn$9 = defineBuiltIn$f;
- var defineBuiltIns$2 = defineBuiltIns$3;
- var setToStringTag$5 = setToStringTag$8;
- var createIteratorConstructor = createIteratorConstructor$2;
- var InternalStateModule$7 = internalState;
- var anInstance$6 = anInstance$7;
- var isCallable$b = isCallable$s;
- var hasOwn$b = hasOwnProperty_1;
- var bind$8 = functionBindContext;
- var classof$9 = classof$e;
- var anObject$9 = anObject$i;
- var isObject$e = isObject$k;
- var $toString$2 = toString$a;
- var create$3 = objectCreate;
- var createPropertyDescriptor$2 = createPropertyDescriptor$7;
- var getIterator$2 = getIterator$4;
- var getIteratorMethod$2 = getIteratorMethod$5;
- var validateArgumentsLength$2 = validateArgumentsLength$3;
- var wellKnownSymbol$h = wellKnownSymbol$t;
- var arraySort = arraySort$1;
- var ITERATOR$2 = wellKnownSymbol$h('iterator');
- var URL_SEARCH_PARAMS = 'URLSearchParams';
- var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';
- var setInternalState$6 = InternalStateModule$7.set;
- var getInternalParamsState = InternalStateModule$7.getterFor(URL_SEARCH_PARAMS);
- var getInternalIteratorState = InternalStateModule$7.getterFor(URL_SEARCH_PARAMS_ITERATOR);
- // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
- var getOwnPropertyDescriptor$4 = Object.getOwnPropertyDescriptor;
- // Avoid NodeJS experimental warning
- var safeGetBuiltIn = function (name) {
- if (!DESCRIPTORS$b) return global$u[name];
- var descriptor = getOwnPropertyDescriptor$4(global$u, name);
- return descriptor && descriptor.value;
- };
- var nativeFetch = safeGetBuiltIn('fetch');
- var NativeRequest = safeGetBuiltIn('Request');
- var Headers = safeGetBuiltIn('Headers');
- var RequestPrototype = NativeRequest && NativeRequest.prototype;
- var HeadersPrototype = Headers && Headers.prototype;
- var RegExp$1 = global$u.RegExp;
- var TypeError$6 = global$u.TypeError;
- var decodeURIComponent = global$u.decodeURIComponent;
- var encodeURIComponent$1 = global$u.encodeURIComponent;
- var charAt$5 = uncurryThis$s(''.charAt);
- var join$2 = uncurryThis$s([].join);
- var push$6 = uncurryThis$s([].push);
- var replace$6 = uncurryThis$s(''.replace);
- var shift$1 = uncurryThis$s([].shift);
- var splice = uncurryThis$s([].splice);
- var split$1 = uncurryThis$s(''.split);
- var stringSlice$7 = uncurryThis$s(''.slice);
- var plus = /\+/g;
- var sequences = Array(4);
- var percentSequence = function (bytes) {
- return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp$1('((?:%[\\da-f]{2}){' + bytes + '})', 'gi'));
- };
- var percentDecode = function (sequence) {
- try {
- return decodeURIComponent(sequence);
- } catch (error) {
- return sequence;
- }
- };
- var deserialize = function (it) {
- var result = replace$6(it, plus, ' ');
- var bytes = 4;
- try {
- return decodeURIComponent(result);
- } catch (error) {
- while (bytes) {
- result = replace$6(result, percentSequence(bytes--), percentDecode);
- }
- return result;
- }
- };
- var find = /[!'()~]|%20/g;
- var replacements = {
- '!': '%21',
- "'": '%27',
- '(': '%28',
- ')': '%29',
- '~': '%7E',
- '%20': '+'
- };
- var replacer = function (match) {
- return replacements[match];
- };
- var serialize = function (it) {
- return replace$6(encodeURIComponent$1(it), find, replacer);
- };
- var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {
- setInternalState$6(this, {
- type: URL_SEARCH_PARAMS_ITERATOR,
- iterator: getIterator$2(getInternalParamsState(params).entries),
- kind: kind
- });
- }, 'Iterator', function next() {
- var state = getInternalIteratorState(this);
- var kind = state.kind;
- var step = state.iterator.next();
- var entry = step.value;
- if (!step.done) {
- step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];
- } return step;
- }, true);
- var URLSearchParamsState = function (init) {
- this.entries = [];
- this.url = null;
- if (init !== undefined) {
- if (isObject$e(init)) this.parseObject(init);
- else this.parseQuery(typeof init == 'string' ? charAt$5(init, 0) === '?' ? stringSlice$7(init, 1) : init : $toString$2(init));
- }
- };
- URLSearchParamsState.prototype = {
- type: URL_SEARCH_PARAMS,
- bindURL: function (url) {
- this.url = url;
- this.update();
- },
- parseObject: function (object) {
- var iteratorMethod = getIteratorMethod$2(object);
- var iterator, next, step, entryIterator, entryNext, first, second;
- if (iteratorMethod) {
- iterator = getIterator$2(object, iteratorMethod);
- next = iterator.next;
- while (!(step = call$h(next, iterator)).done) {
- entryIterator = getIterator$2(anObject$9(step.value));
- entryNext = entryIterator.next;
- if (
- (first = call$h(entryNext, entryIterator)).done ||
- (second = call$h(entryNext, entryIterator)).done ||
- !call$h(entryNext, entryIterator).done
- ) throw TypeError$6('Expected sequence with length 2');
- push$6(this.entries, { key: $toString$2(first.value), value: $toString$2(second.value) });
- }
- } else for (var key in object) if (hasOwn$b(object, key)) {
- push$6(this.entries, { key: key, value: $toString$2(object[key]) });
- }
- },
- parseQuery: function (query) {
- if (query) {
- var attributes = split$1(query, '&');
- var index = 0;
- var attribute, entry;
- while (index < attributes.length) {
- attribute = attributes[index++];
- if (attribute.length) {
- entry = split$1(attribute, '=');
- push$6(this.entries, {
- key: deserialize(shift$1(entry)),
- value: deserialize(join$2(entry, '='))
- });
- }
- }
- }
- },
- serialize: function () {
- var entries = this.entries;
- var result = [];
- var index = 0;
- var entry;
- while (index < entries.length) {
- entry = entries[index++];
- push$6(result, serialize(entry.key) + '=' + serialize(entry.value));
- } return join$2(result, '&');
- },
- update: function () {
- this.entries.length = 0;
- this.parseQuery(this.url.query);
- },
- updateURL: function () {
- if (this.url) this.url.update();
- }
- };
- // `URLSearchParams` constructor
- // https://url.spec.whatwg.org/#interface-urlsearchparams
- var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
- anInstance$6(this, URLSearchParamsPrototype);
- var init = arguments.length > 0 ? arguments[0] : undefined;
- setInternalState$6(this, new URLSearchParamsState(init));
- };
- var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;
- defineBuiltIns$2(URLSearchParamsPrototype, {
- // `URLSearchParams.prototype.append` method
- // https://url.spec.whatwg.org/#dom-urlsearchparams-append
- append: function append(name, value) {
- validateArgumentsLength$2(arguments.length, 2);
- var state = getInternalParamsState(this);
- push$6(state.entries, { key: $toString$2(name), value: $toString$2(value) });
- state.updateURL();
- },
- // `URLSearchParams.prototype.delete` method
- // https://url.spec.whatwg.org/#dom-urlsearchparams-delete
- 'delete': function (name) {
- validateArgumentsLength$2(arguments.length, 1);
- var state = getInternalParamsState(this);
- var entries = state.entries;
- var key = $toString$2(name);
- var index = 0;
- while (index < entries.length) {
- if (entries[index].key === key) splice(entries, index, 1);
- else index++;
- }
- state.updateURL();
- },
- // `URLSearchParams.prototype.get` method
- // https://url.spec.whatwg.org/#dom-urlsearchparams-get
- get: function get(name) {
- validateArgumentsLength$2(arguments.length, 1);
- var entries = getInternalParamsState(this).entries;
- var key = $toString$2(name);
- var index = 0;
- for (; index < entries.length; index++) {
- if (entries[index].key === key) return entries[index].value;
- }
- return null;
- },
- // `URLSearchParams.prototype.getAll` method
- // https://url.spec.whatwg.org/#dom-urlsearchparams-getall
- getAll: function getAll(name) {
- validateArgumentsLength$2(arguments.length, 1);
- var entries = getInternalParamsState(this).entries;
- var key = $toString$2(name);
- var result = [];
- var index = 0;
- for (; index < entries.length; index++) {
- if (entries[index].key === key) push$6(result, entries[index].value);
- }
- return result;
- },
- // `URLSearchParams.prototype.has` method
- // https://url.spec.whatwg.org/#dom-urlsearchparams-has
- has: function has(name) {
- validateArgumentsLength$2(arguments.length, 1);
- var entries = getInternalParamsState(this).entries;
- var key = $toString$2(name);
- var index = 0;
- while (index < entries.length) {
- if (entries[index++].key === key) return true;
- }
- return false;
- },
- // `URLSearchParams.prototype.set` method
- // https://url.spec.whatwg.org/#dom-urlsearchparams-set
- set: function set(name, value) {
- validateArgumentsLength$2(arguments.length, 1);
- var state = getInternalParamsState(this);
- var entries = state.entries;
- var found = false;
- var key = $toString$2(name);
- var val = $toString$2(value);
- var index = 0;
- var entry;
- for (; index < entries.length; index++) {
- entry = entries[index];
- if (entry.key === key) {
- if (found) splice(entries, index--, 1);
- else {
- found = true;
- entry.value = val;
- }
- }
- }
- if (!found) push$6(entries, { key: key, value: val });
- state.updateURL();
- },
- // `URLSearchParams.prototype.sort` method
- // https://url.spec.whatwg.org/#dom-urlsearchparams-sort
- sort: function sort() {
- var state = getInternalParamsState(this);
- arraySort(state.entries, function (a, b) {
- return a.key > b.key ? 1 : -1;
- });
- state.updateURL();
- },
- // `URLSearchParams.prototype.forEach` method
- forEach: function forEach(callback /* , thisArg */) {
- var entries = getInternalParamsState(this).entries;
- var boundFunction = bind$8(callback, arguments.length > 1 ? arguments[1] : undefined);
- var index = 0;
- var entry;
- while (index < entries.length) {
- entry = entries[index++];
- boundFunction(entry.value, entry.key, this);
- }
- },
- // `URLSearchParams.prototype.keys` method
- keys: function keys() {
- return new URLSearchParamsIterator(this, 'keys');
- },
- // `URLSearchParams.prototype.values` method
- values: function values() {
- return new URLSearchParamsIterator(this, 'values');
- },
- // `URLSearchParams.prototype.entries` method
- entries: function entries() {
- return new URLSearchParamsIterator(this, 'entries');
- }
- }, { enumerable: true });
- // `URLSearchParams.prototype[@@iterator]` method
- defineBuiltIn$9(URLSearchParamsPrototype, ITERATOR$2, URLSearchParamsPrototype.entries, { name: 'entries' });
- // `URLSearchParams.prototype.toString` method
- // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
- defineBuiltIn$9(URLSearchParamsPrototype, 'toString', function toString() {
- return getInternalParamsState(this).serialize();
- }, { enumerable: true });
- setToStringTag$5(URLSearchParamsConstructor, URL_SEARCH_PARAMS);
- $$w({ global: true, constructor: true, forced: !USE_NATIVE_URL$1 }, {
- URLSearchParams: URLSearchParamsConstructor
- });
- // Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`
- if (!USE_NATIVE_URL$1 && isCallable$b(Headers)) {
- var headersHas = uncurryThis$s(HeadersPrototype.has);
- var headersSet = uncurryThis$s(HeadersPrototype.set);
- var wrapRequestOptions = function (init) {
- if (isObject$e(init)) {
- var body = init.body;
- var headers;
- if (classof$9(body) === URL_SEARCH_PARAMS) {
- headers = init.headers ? new Headers(init.headers) : new Headers();
- if (!headersHas(headers, 'content-type')) {
- headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
- }
- return create$3(init, {
- body: createPropertyDescriptor$2(0, $toString$2(body)),
- headers: createPropertyDescriptor$2(0, headers)
- });
- }
- } return init;
- };
- if (isCallable$b(nativeFetch)) {
- $$w({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, {
- fetch: function fetch(input /* , init */) {
- return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
- }
- });
- }
- if (isCallable$b(NativeRequest)) {
- var RequestConstructor = function Request(input /* , init */) {
- anInstance$6(this, RequestPrototype);
- return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
- };
- RequestPrototype.constructor = RequestConstructor;
- RequestConstructor.prototype = RequestPrototype;
- $$w({ global: true, constructor: true, dontCallGetSet: true, forced: true }, {
- Request: RequestConstructor
- });
- }
- }
- var web_urlSearchParams_constructor = {
- URLSearchParams: URLSearchParamsConstructor,
- getState: getInternalParamsState
- };
- // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
- var $$v = _export;
- var DESCRIPTORS$a = descriptors;
- var USE_NATIVE_URL = nativeUrl;
- var global$t = global$F;
- var bind$7 = functionBindContext;
- var uncurryThis$r = functionUncurryThis;
- var defineBuiltIn$8 = defineBuiltIn$f;
- var defineBuiltInAccessor = defineBuiltInAccessor$1;
- var anInstance$5 = anInstance$7;
- var hasOwn$a = hasOwnProperty_1;
- var assign = objectAssign;
- var arrayFrom = arrayFrom$1;
- var arraySlice$9 = arraySliceSimple;
- var codeAt = stringMultibyte.codeAt;
- var toASCII = stringPunycodeToAscii;
- var $toString$1 = toString$a;
- var setToStringTag$4 = setToStringTag$8;
- var validateArgumentsLength$1 = validateArgumentsLength$3;
- var URLSearchParamsModule = web_urlSearchParams_constructor;
- var InternalStateModule$6 = internalState;
- var setInternalState$5 = InternalStateModule$6.set;
- var getInternalURLState = InternalStateModule$6.getterFor('URL');
- var URLSearchParams$1 = URLSearchParamsModule.URLSearchParams;
- var getInternalSearchParamsState = URLSearchParamsModule.getState;
- var NativeURL = global$t.URL;
- var TypeError$5 = global$t.TypeError;
- var parseInt$1 = global$t.parseInt;
- var floor$4 = Math.floor;
- var pow$1 = Math.pow;
- var charAt$4 = uncurryThis$r(''.charAt);
- var exec$3 = uncurryThis$r(/./.exec);
- var join$1 = uncurryThis$r([].join);
- var numberToString$1 = uncurryThis$r(1.0.toString);
- var pop = uncurryThis$r([].pop);
- var push$5 = uncurryThis$r([].push);
- var replace$5 = uncurryThis$r(''.replace);
- var shift = uncurryThis$r([].shift);
- var split = uncurryThis$r(''.split);
- var stringSlice$6 = uncurryThis$r(''.slice);
- var toLowerCase = uncurryThis$r(''.toLowerCase);
- var unshift = uncurryThis$r([].unshift);
- var INVALID_AUTHORITY = 'Invalid authority';
- var INVALID_SCHEME = 'Invalid scheme';
- var INVALID_HOST = 'Invalid host';
- var INVALID_PORT = 'Invalid port';
- var ALPHA = /[a-z]/i;
- // eslint-disable-next-line regexp/no-obscure-range -- safe
- var ALPHANUMERIC = /[\d+-.a-z]/i;
- var DIGIT = /\d/;
- var HEX_START = /^0x/i;
- var OCT = /^[0-7]+$/;
- var DEC = /^\d+$/;
- var HEX = /^[\da-f]+$/i;
- /* eslint-disable regexp/no-control-character -- safe */
- var FORBIDDEN_HOST_CODE_POINT = /[\0\t\n\r #%/:<>?@[\\\]^|]/;
- var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\0\t\n\r #/:<>?@[\\\]^|]/;
- var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u0020]+|[\u0000-\u0020]+$/g;
- var TAB_AND_NEW_LINE = /[\t\n\r]/g;
- /* eslint-enable regexp/no-control-character -- safe */
- var EOF;
- // https://url.spec.whatwg.org/#ipv4-number-parser
- var parseIPv4 = function (input) {
- var parts = split(input, '.');
- var partsLength, numbers, index, part, radix, number, ipv4;
- if (parts.length && parts[parts.length - 1] == '') {
- parts.length--;
- }
- partsLength = parts.length;
- if (partsLength > 4) return input;
- numbers = [];
- for (index = 0; index < partsLength; index++) {
- part = parts[index];
- if (part == '') return input;
- radix = 10;
- if (part.length > 1 && charAt$4(part, 0) == '0') {
- radix = exec$3(HEX_START, part) ? 16 : 8;
- part = stringSlice$6(part, radix == 8 ? 1 : 2);
- }
- if (part === '') {
- number = 0;
- } else {
- if (!exec$3(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;
- number = parseInt$1(part, radix);
- }
- push$5(numbers, number);
- }
- for (index = 0; index < partsLength; index++) {
- number = numbers[index];
- if (index == partsLength - 1) {
- if (number >= pow$1(256, 5 - partsLength)) return null;
- } else if (number > 255) return null;
- }
- ipv4 = pop(numbers);
- for (index = 0; index < numbers.length; index++) {
- ipv4 += numbers[index] * pow$1(256, 3 - index);
- }
- return ipv4;
- };
- // https://url.spec.whatwg.org/#concept-ipv6-parser
- // eslint-disable-next-line max-statements -- TODO
- var parseIPv6 = function (input) {
- var address = [0, 0, 0, 0, 0, 0, 0, 0];
- var pieceIndex = 0;
- var compress = null;
- var pointer = 0;
- var value, length, numbersSeen, ipv4Piece, number, swaps, swap;
- var chr = function () {
- return charAt$4(input, pointer);
- };
- if (chr() == ':') {
- if (charAt$4(input, 1) != ':') return;
- pointer += 2;
- pieceIndex++;
- compress = pieceIndex;
- }
- while (chr()) {
- if (pieceIndex == 8) return;
- if (chr() == ':') {
- if (compress !== null) return;
- pointer++;
- pieceIndex++;
- compress = pieceIndex;
- continue;
- }
- value = length = 0;
- while (length < 4 && exec$3(HEX, chr())) {
- value = value * 16 + parseInt$1(chr(), 16);
- pointer++;
- length++;
- }
- if (chr() == '.') {
- if (length == 0) return;
- pointer -= length;
- if (pieceIndex > 6) return;
- numbersSeen = 0;
- while (chr()) {
- ipv4Piece = null;
- if (numbersSeen > 0) {
- if (chr() == '.' && numbersSeen < 4) pointer++;
- else return;
- }
- if (!exec$3(DIGIT, chr())) return;
- while (exec$3(DIGIT, chr())) {
- number = parseInt$1(chr(), 10);
- if (ipv4Piece === null) ipv4Piece = number;
- else if (ipv4Piece == 0) return;
- else ipv4Piece = ipv4Piece * 10 + number;
- if (ipv4Piece > 255) return;
- pointer++;
- }
- address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;
- numbersSeen++;
- if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;
- }
- if (numbersSeen != 4) return;
- break;
- } else if (chr() == ':') {
- pointer++;
- if (!chr()) return;
- } else if (chr()) return;
- address[pieceIndex++] = value;
- }
- if (compress !== null) {
- swaps = pieceIndex - compress;
- pieceIndex = 7;
- while (pieceIndex != 0 && swaps > 0) {
- swap = address[pieceIndex];
- address[pieceIndex--] = address[compress + swaps - 1];
- address[compress + --swaps] = swap;
- }
- } else if (pieceIndex != 8) return;
- return address;
- };
- var findLongestZeroSequence = function (ipv6) {
- var maxIndex = null;
- var maxLength = 1;
- var currStart = null;
- var currLength = 0;
- var index = 0;
- for (; index < 8; index++) {
- if (ipv6[index] !== 0) {
- if (currLength > maxLength) {
- maxIndex = currStart;
- maxLength = currLength;
- }
- currStart = null;
- currLength = 0;
- } else {
- if (currStart === null) currStart = index;
- ++currLength;
- }
- }
- if (currLength > maxLength) {
- maxIndex = currStart;
- maxLength = currLength;
- }
- return maxIndex;
- };
- // https://url.spec.whatwg.org/#host-serializing
- var serializeHost = function (host) {
- var result, index, compress, ignore0;
- // ipv4
- if (typeof host == 'number') {
- result = [];
- for (index = 0; index < 4; index++) {
- unshift(result, host % 256);
- host = floor$4(host / 256);
- } return join$1(result, '.');
- // ipv6
- } else if (typeof host == 'object') {
- result = '';
- compress = findLongestZeroSequence(host);
- for (index = 0; index < 8; index++) {
- if (ignore0 && host[index] === 0) continue;
- if (ignore0) ignore0 = false;
- if (compress === index) {
- result += index ? ':' : '::';
- ignore0 = true;
- } else {
- result += numberToString$1(host[index], 16);
- if (index < 7) result += ':';
- }
- }
- return '[' + result + ']';
- } return host;
- };
- var C0ControlPercentEncodeSet = {};
- var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {
- ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1
- });
- var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {
- '#': 1, '?': 1, '{': 1, '}': 1
- });
- var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {
- '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1
- });
- var percentEncode = function (chr, set) {
- var code = codeAt(chr, 0);
- return code > 0x20 && code < 0x7F && !hasOwn$a(set, chr) ? chr : encodeURIComponent(chr);
- };
- // https://url.spec.whatwg.org/#special-scheme
- var specialSchemes = {
- ftp: 21,
- file: null,
- http: 80,
- https: 443,
- ws: 80,
- wss: 443
- };
- // https://url.spec.whatwg.org/#windows-drive-letter
- var isWindowsDriveLetter = function (string, normalized) {
- var second;
- return string.length == 2 && exec$3(ALPHA, charAt$4(string, 0))
- && ((second = charAt$4(string, 1)) == ':' || (!normalized && second == '|'));
- };
- // https://url.spec.whatwg.org/#start-with-a-windows-drive-letter
- var startsWithWindowsDriveLetter = function (string) {
- var third;
- return string.length > 1 && isWindowsDriveLetter(stringSlice$6(string, 0, 2)) && (
- string.length == 2 ||
- ((third = charAt$4(string, 2)) === '/' || third === '\\' || third === '?' || third === '#')
- );
- };
- // https://url.spec.whatwg.org/#single-dot-path-segment
- var isSingleDot = function (segment) {
- return segment === '.' || toLowerCase(segment) === '%2e';
- };
- // https://url.spec.whatwg.org/#double-dot-path-segment
- var isDoubleDot = function (segment) {
- segment = toLowerCase(segment);
- return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';
- };
- // States:
- var SCHEME_START = {};
- var SCHEME = {};
- var NO_SCHEME = {};
- var SPECIAL_RELATIVE_OR_AUTHORITY = {};
- var PATH_OR_AUTHORITY = {};
- var RELATIVE = {};
- var RELATIVE_SLASH = {};
- var SPECIAL_AUTHORITY_SLASHES = {};
- var SPECIAL_AUTHORITY_IGNORE_SLASHES = {};
- var AUTHORITY = {};
- var HOST = {};
- var HOSTNAME = {};
- var PORT = {};
- var FILE = {};
- var FILE_SLASH = {};
- var FILE_HOST = {};
- var PATH_START = {};
- var PATH = {};
- var CANNOT_BE_A_BASE_URL_PATH = {};
- var QUERY = {};
- var FRAGMENT = {};
- var URLState = function (url, isBase, base) {
- var urlString = $toString$1(url);
- var baseState, failure, searchParams;
- if (isBase) {
- failure = this.parse(urlString);
- if (failure) throw TypeError$5(failure);
- this.searchParams = null;
- } else {
- if (base !== undefined) baseState = new URLState(base, true);
- failure = this.parse(urlString, null, baseState);
- if (failure) throw TypeError$5(failure);
- searchParams = getInternalSearchParamsState(new URLSearchParams$1());
- searchParams.bindURL(this);
- this.searchParams = searchParams;
- }
- };
- URLState.prototype = {
- type: 'URL',
- // https://url.spec.whatwg.org/#url-parsing
- // eslint-disable-next-line max-statements -- TODO
- parse: function (input, stateOverride, base) {
- var url = this;
- var state = stateOverride || SCHEME_START;
- var pointer = 0;
- var buffer = '';
- var seenAt = false;
- var seenBracket = false;
- var seenPasswordToken = false;
- var codePoints, chr, bufferCodePoints, failure;
- input = $toString$1(input);
- if (!stateOverride) {
- url.scheme = '';
- url.username = '';
- url.password = '';
- url.host = null;
- url.port = null;
- url.path = [];
- url.query = null;
- url.fragment = null;
- url.cannotBeABaseURL = false;
- input = replace$5(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');
- }
- input = replace$5(input, TAB_AND_NEW_LINE, '');
- codePoints = arrayFrom(input);
- while (pointer <= codePoints.length) {
- chr = codePoints[pointer];
- switch (state) {
- case SCHEME_START:
- if (chr && exec$3(ALPHA, chr)) {
- buffer += toLowerCase(chr);
- state = SCHEME;
- } else if (!stateOverride) {
- state = NO_SCHEME;
- continue;
- } else return INVALID_SCHEME;
- break;
- case SCHEME:
- if (chr && (exec$3(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {
- buffer += toLowerCase(chr);
- } else if (chr == ':') {
- if (stateOverride && (
- (url.isSpecial() != hasOwn$a(specialSchemes, buffer)) ||
- (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||
- (url.scheme == 'file' && !url.host)
- )) return;
- url.scheme = buffer;
- if (stateOverride) {
- if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;
- return;
- }
- buffer = '';
- if (url.scheme == 'file') {
- state = FILE;
- } else if (url.isSpecial() && base && base.scheme == url.scheme) {
- state = SPECIAL_RELATIVE_OR_AUTHORITY;
- } else if (url.isSpecial()) {
- state = SPECIAL_AUTHORITY_SLASHES;
- } else if (codePoints[pointer + 1] == '/') {
- state = PATH_OR_AUTHORITY;
- pointer++;
- } else {
- url.cannotBeABaseURL = true;
- push$5(url.path, '');
- state = CANNOT_BE_A_BASE_URL_PATH;
- }
- } else if (!stateOverride) {
- buffer = '';
- state = NO_SCHEME;
- pointer = 0;
- continue;
- } else return INVALID_SCHEME;
- break;
- case NO_SCHEME:
- if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;
- if (base.cannotBeABaseURL && chr == '#') {
- url.scheme = base.scheme;
- url.path = arraySlice$9(base.path);
- url.query = base.query;
- url.fragment = '';
- url.cannotBeABaseURL = true;
- state = FRAGMENT;
- break;
- }
- state = base.scheme == 'file' ? FILE : RELATIVE;
- continue;
- case SPECIAL_RELATIVE_OR_AUTHORITY:
- if (chr == '/' && codePoints[pointer + 1] == '/') {
- state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
- pointer++;
- } else {
- state = RELATIVE;
- continue;
- } break;
- case PATH_OR_AUTHORITY:
- if (chr == '/') {
- state = AUTHORITY;
- break;
- } else {
- state = PATH;
- continue;
- }
- case RELATIVE:
- url.scheme = base.scheme;
- if (chr == EOF) {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- url.path = arraySlice$9(base.path);
- url.query = base.query;
- } else if (chr == '/' || (chr == '\\' && url.isSpecial())) {
- state = RELATIVE_SLASH;
- } else if (chr == '?') {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- url.path = arraySlice$9(base.path);
- url.query = '';
- state = QUERY;
- } else if (chr == '#') {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- url.path = arraySlice$9(base.path);
- url.query = base.query;
- url.fragment = '';
- state = FRAGMENT;
- } else {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- url.path = arraySlice$9(base.path);
- url.path.length--;
- state = PATH;
- continue;
- } break;
- case RELATIVE_SLASH:
- if (url.isSpecial() && (chr == '/' || chr == '\\')) {
- state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
- } else if (chr == '/') {
- state = AUTHORITY;
- } else {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- state = PATH;
- continue;
- } break;
- case SPECIAL_AUTHORITY_SLASHES:
- state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
- if (chr != '/' || charAt$4(buffer, pointer + 1) != '/') continue;
- pointer++;
- break;
- case SPECIAL_AUTHORITY_IGNORE_SLASHES:
- if (chr != '/' && chr != '\\') {
- state = AUTHORITY;
- continue;
- } break;
- case AUTHORITY:
- if (chr == '@') {
- if (seenAt) buffer = '%40' + buffer;
- seenAt = true;
- bufferCodePoints = arrayFrom(buffer);
- for (var i = 0; i < bufferCodePoints.length; i++) {
- var codePoint = bufferCodePoints[i];
- if (codePoint == ':' && !seenPasswordToken) {
- seenPasswordToken = true;
- continue;
- }
- var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);
- if (seenPasswordToken) url.password += encodedCodePoints;
- else url.username += encodedCodePoints;
- }
- buffer = '';
- } else if (
- chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
- (chr == '\\' && url.isSpecial())
- ) {
- if (seenAt && buffer == '') return INVALID_AUTHORITY;
- pointer -= arrayFrom(buffer).length + 1;
- buffer = '';
- state = HOST;
- } else buffer += chr;
- break;
- case HOST:
- case HOSTNAME:
- if (stateOverride && url.scheme == 'file') {
- state = FILE_HOST;
- continue;
- } else if (chr == ':' && !seenBracket) {
- if (buffer == '') return INVALID_HOST;
- failure = url.parseHost(buffer);
- if (failure) return failure;
- buffer = '';
- state = PORT;
- if (stateOverride == HOSTNAME) return;
- } else if (
- chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
- (chr == '\\' && url.isSpecial())
- ) {
- if (url.isSpecial() && buffer == '') return INVALID_HOST;
- if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;
- failure = url.parseHost(buffer);
- if (failure) return failure;
- buffer = '';
- state = PATH_START;
- if (stateOverride) return;
- continue;
- } else {
- if (chr == '[') seenBracket = true;
- else if (chr == ']') seenBracket = false;
- buffer += chr;
- } break;
- case PORT:
- if (exec$3(DIGIT, chr)) {
- buffer += chr;
- } else if (
- chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
- (chr == '\\' && url.isSpecial()) ||
- stateOverride
- ) {
- if (buffer != '') {
- var port = parseInt$1(buffer, 10);
- if (port > 0xFFFF) return INVALID_PORT;
- url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;
- buffer = '';
- }
- if (stateOverride) return;
- state = PATH_START;
- continue;
- } else return INVALID_PORT;
- break;
- case FILE:
- url.scheme = 'file';
- if (chr == '/' || chr == '\\') state = FILE_SLASH;
- else if (base && base.scheme == 'file') {
- if (chr == EOF) {
- url.host = base.host;
- url.path = arraySlice$9(base.path);
- url.query = base.query;
- } else if (chr == '?') {
- url.host = base.host;
- url.path = arraySlice$9(base.path);
- url.query = '';
- state = QUERY;
- } else if (chr == '#') {
- url.host = base.host;
- url.path = arraySlice$9(base.path);
- url.query = base.query;
- url.fragment = '';
- state = FRAGMENT;
- } else {
- if (!startsWithWindowsDriveLetter(join$1(arraySlice$9(codePoints, pointer), ''))) {
- url.host = base.host;
- url.path = arraySlice$9(base.path);
- url.shortenPath();
- }
- state = PATH;
- continue;
- }
- } else {
- state = PATH;
- continue;
- } break;
- case FILE_SLASH:
- if (chr == '/' || chr == '\\') {
- state = FILE_HOST;
- break;
- }
- if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join$1(arraySlice$9(codePoints, pointer), ''))) {
- if (isWindowsDriveLetter(base.path[0], true)) push$5(url.path, base.path[0]);
- else url.host = base.host;
- }
- state = PATH;
- continue;
- case FILE_HOST:
- if (chr == EOF || chr == '/' || chr == '\\' || chr == '?' || chr == '#') {
- if (!stateOverride && isWindowsDriveLetter(buffer)) {
- state = PATH;
- } else if (buffer == '') {
- url.host = '';
- if (stateOverride) return;
- state = PATH_START;
- } else {
- failure = url.parseHost(buffer);
- if (failure) return failure;
- if (url.host == 'localhost') url.host = '';
- if (stateOverride) return;
- buffer = '';
- state = PATH_START;
- } continue;
- } else buffer += chr;
- break;
- case PATH_START:
- if (url.isSpecial()) {
- state = PATH;
- if (chr != '/' && chr != '\\') continue;
- } else if (!stateOverride && chr == '?') {
- url.query = '';
- state = QUERY;
- } else if (!stateOverride && chr == '#') {
- url.fragment = '';
- state = FRAGMENT;
- } else if (chr != EOF) {
- state = PATH;
- if (chr != '/') continue;
- } break;
- case PATH:
- if (
- chr == EOF || chr == '/' ||
- (chr == '\\' && url.isSpecial()) ||
- (!stateOverride && (chr == '?' || chr == '#'))
- ) {
- if (isDoubleDot(buffer)) {
- url.shortenPath();
- if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
- push$5(url.path, '');
- }
- } else if (isSingleDot(buffer)) {
- if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
- push$5(url.path, '');
- }
- } else {
- if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {
- if (url.host) url.host = '';
- buffer = charAt$4(buffer, 0) + ':'; // normalize windows drive letter
- }
- push$5(url.path, buffer);
- }
- buffer = '';
- if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {
- while (url.path.length > 1 && url.path[0] === '') {
- shift(url.path);
- }
- }
- if (chr == '?') {
- url.query = '';
- state = QUERY;
- } else if (chr == '#') {
- url.fragment = '';
- state = FRAGMENT;
- }
- } else {
- buffer += percentEncode(chr, pathPercentEncodeSet);
- } break;
- case CANNOT_BE_A_BASE_URL_PATH:
- if (chr == '?') {
- url.query = '';
- state = QUERY;
- } else if (chr == '#') {
- url.fragment = '';
- state = FRAGMENT;
- } else if (chr != EOF) {
- url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);
- } break;
- case QUERY:
- if (!stateOverride && chr == '#') {
- url.fragment = '';
- state = FRAGMENT;
- } else if (chr != EOF) {
- if (chr == "'" && url.isSpecial()) url.query += '%27';
- else if (chr == '#') url.query += '%23';
- else url.query += percentEncode(chr, C0ControlPercentEncodeSet);
- } break;
- case FRAGMENT:
- if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);
- break;
- }
- pointer++;
- }
- },
- // https://url.spec.whatwg.org/#host-parsing
- parseHost: function (input) {
- var result, codePoints, index;
- if (charAt$4(input, 0) == '[') {
- if (charAt$4(input, input.length - 1) != ']') return INVALID_HOST;
- result = parseIPv6(stringSlice$6(input, 1, -1));
- if (!result) return INVALID_HOST;
- this.host = result;
- // opaque host
- } else if (!this.isSpecial()) {
- if (exec$3(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;
- result = '';
- codePoints = arrayFrom(input);
- for (index = 0; index < codePoints.length; index++) {
- result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);
- }
- this.host = result;
- } else {
- input = toASCII(input);
- if (exec$3(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;
- result = parseIPv4(input);
- if (result === null) return INVALID_HOST;
- this.host = result;
- }
- },
- // https://url.spec.whatwg.org/#cannot-have-a-username-password-port
- cannotHaveUsernamePasswordPort: function () {
- return !this.host || this.cannotBeABaseURL || this.scheme == 'file';
- },
- // https://url.spec.whatwg.org/#include-credentials
- includesCredentials: function () {
- return this.username != '' || this.password != '';
- },
- // https://url.spec.whatwg.org/#is-special
- isSpecial: function () {
- return hasOwn$a(specialSchemes, this.scheme);
- },
- // https://url.spec.whatwg.org/#shorten-a-urls-path
- shortenPath: function () {
- var path = this.path;
- var pathSize = path.length;
- if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {
- path.length--;
- }
- },
- // https://url.spec.whatwg.org/#concept-url-serializer
- serialize: function () {
- var url = this;
- var scheme = url.scheme;
- var username = url.username;
- var password = url.password;
- var host = url.host;
- var port = url.port;
- var path = url.path;
- var query = url.query;
- var fragment = url.fragment;
- var output = scheme + ':';
- if (host !== null) {
- output += '//';
- if (url.includesCredentials()) {
- output += username + (password ? ':' + password : '') + '@';
- }
- output += serializeHost(host);
- if (port !== null) output += ':' + port;
- } else if (scheme == 'file') output += '//';
- output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join$1(path, '/') : '';
- if (query !== null) output += '?' + query;
- if (fragment !== null) output += '#' + fragment;
- return output;
- },
- // https://url.spec.whatwg.org/#dom-url-href
- setHref: function (href) {
- var failure = this.parse(href);
- if (failure) throw TypeError$5(failure);
- this.searchParams.update();
- },
- // https://url.spec.whatwg.org/#dom-url-origin
- getOrigin: function () {
- var scheme = this.scheme;
- var port = this.port;
- if (scheme == 'blob') try {
- return new URLConstructor(scheme.path[0]).origin;
- } catch (error) {
- return 'null';
- }
- if (scheme == 'file' || !this.isSpecial()) return 'null';
- return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');
- },
- // https://url.spec.whatwg.org/#dom-url-protocol
- getProtocol: function () {
- return this.scheme + ':';
- },
- setProtocol: function (protocol) {
- this.parse($toString$1(protocol) + ':', SCHEME_START);
- },
- // https://url.spec.whatwg.org/#dom-url-username
- getUsername: function () {
- return this.username;
- },
- setUsername: function (username) {
- var codePoints = arrayFrom($toString$1(username));
- if (this.cannotHaveUsernamePasswordPort()) return;
- this.username = '';
- for (var i = 0; i < codePoints.length; i++) {
- this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);
- }
- },
- // https://url.spec.whatwg.org/#dom-url-password
- getPassword: function () {
- return this.password;
- },
- setPassword: function (password) {
- var codePoints = arrayFrom($toString$1(password));
- if (this.cannotHaveUsernamePasswordPort()) return;
- this.password = '';
- for (var i = 0; i < codePoints.length; i++) {
- this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);
- }
- },
- // https://url.spec.whatwg.org/#dom-url-host
- getHost: function () {
- var host = this.host;
- var port = this.port;
- return host === null ? ''
- : port === null ? serializeHost(host)
- : serializeHost(host) + ':' + port;
- },
- setHost: function (host) {
- if (this.cannotBeABaseURL) return;
- this.parse(host, HOST);
- },
- // https://url.spec.whatwg.org/#dom-url-hostname
- getHostname: function () {
- var host = this.host;
- return host === null ? '' : serializeHost(host);
- },
- setHostname: function (hostname) {
- if (this.cannotBeABaseURL) return;
- this.parse(hostname, HOSTNAME);
- },
- // https://url.spec.whatwg.org/#dom-url-port
- getPort: function () {
- var port = this.port;
- return port === null ? '' : $toString$1(port);
- },
- setPort: function (port) {
- if (this.cannotHaveUsernamePasswordPort()) return;
- port = $toString$1(port);
- if (port == '') this.port = null;
- else this.parse(port, PORT);
- },
- // https://url.spec.whatwg.org/#dom-url-pathname
- getPathname: function () {
- var path = this.path;
- return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join$1(path, '/') : '';
- },
- setPathname: function (pathname) {
- if (this.cannotBeABaseURL) return;
- this.path = [];
- this.parse(pathname, PATH_START);
- },
- // https://url.spec.whatwg.org/#dom-url-search
- getSearch: function () {
- var query = this.query;
- return query ? '?' + query : '';
- },
- setSearch: function (search) {
- search = $toString$1(search);
- if (search == '') {
- this.query = null;
- } else {
- if ('?' == charAt$4(search, 0)) search = stringSlice$6(search, 1);
- this.query = '';
- this.parse(search, QUERY);
- }
- this.searchParams.update();
- },
- // https://url.spec.whatwg.org/#dom-url-searchparams
- getSearchParams: function () {
- return this.searchParams.facade;
- },
- // https://url.spec.whatwg.org/#dom-url-hash
- getHash: function () {
- var fragment = this.fragment;
- return fragment ? '#' + fragment : '';
- },
- setHash: function (hash) {
- hash = $toString$1(hash);
- if (hash == '') {
- this.fragment = null;
- return;
- }
- if ('#' == charAt$4(hash, 0)) hash = stringSlice$6(hash, 1);
- this.fragment = '';
- this.parse(hash, FRAGMENT);
- },
- update: function () {
- this.query = this.searchParams.serialize() || null;
- }
- };
- // `URL` constructor
- // https://url.spec.whatwg.org/#url-class
- var URLConstructor = function URL(url /* , base */) {
- var that = anInstance$5(this, URLPrototype);
- var base = validateArgumentsLength$1(arguments.length, 1) > 1 ? arguments[1] : undefined;
- var state = setInternalState$5(that, new URLState(url, false, base));
- if (!DESCRIPTORS$a) {
- that.href = state.serialize();
- that.origin = state.getOrigin();
- that.protocol = state.getProtocol();
- that.username = state.getUsername();
- that.password = state.getPassword();
- that.host = state.getHost();
- that.hostname = state.getHostname();
- that.port = state.getPort();
- that.pathname = state.getPathname();
- that.search = state.getSearch();
- that.searchParams = state.getSearchParams();
- that.hash = state.getHash();
- }
- };
- var URLPrototype = URLConstructor.prototype;
- var accessorDescriptor = function (getter, setter) {
- return {
- get: function () {
- return getInternalURLState(this)[getter]();
- },
- set: setter && function (value) {
- return getInternalURLState(this)[setter](value);
- },
- configurable: true,
- enumerable: true
- };
- };
- if (DESCRIPTORS$a) {
- // `URL.prototype.href` accessors pair
- // https://url.spec.whatwg.org/#dom-url-href
- defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));
- // `URL.prototype.origin` getter
- // https://url.spec.whatwg.org/#dom-url-origin
- defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));
- // `URL.prototype.protocol` accessors pair
- // https://url.spec.whatwg.org/#dom-url-protocol
- defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));
- // `URL.prototype.username` accessors pair
- // https://url.spec.whatwg.org/#dom-url-username
- defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));
- // `URL.prototype.password` accessors pair
- // https://url.spec.whatwg.org/#dom-url-password
- defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));
- // `URL.prototype.host` accessors pair
- // https://url.spec.whatwg.org/#dom-url-host
- defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));
- // `URL.prototype.hostname` accessors pair
- // https://url.spec.whatwg.org/#dom-url-hostname
- defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));
- // `URL.prototype.port` accessors pair
- // https://url.spec.whatwg.org/#dom-url-port
- defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));
- // `URL.prototype.pathname` accessors pair
- // https://url.spec.whatwg.org/#dom-url-pathname
- defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));
- // `URL.prototype.search` accessors pair
- // https://url.spec.whatwg.org/#dom-url-search
- defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));
- // `URL.prototype.searchParams` getter
- // https://url.spec.whatwg.org/#dom-url-searchparams
- defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));
- // `URL.prototype.hash` accessors pair
- // https://url.spec.whatwg.org/#dom-url-hash
- defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));
- }
- // `URL.prototype.toJSON` method
- // https://url.spec.whatwg.org/#dom-url-tojson
- defineBuiltIn$8(URLPrototype, 'toJSON', function toJSON() {
- return getInternalURLState(this).serialize();
- }, { enumerable: true });
- // `URL.prototype.toString` method
- // https://url.spec.whatwg.org/#URL-stringification-behavior
- defineBuiltIn$8(URLPrototype, 'toString', function toString() {
- return getInternalURLState(this).serialize();
- }, { enumerable: true });
- if (NativeURL) {
- var nativeCreateObjectURL = NativeURL.createObjectURL;
- var nativeRevokeObjectURL = NativeURL.revokeObjectURL;
- // `URL.createObjectURL` method
- // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
- if (nativeCreateObjectURL) defineBuiltIn$8(URLConstructor, 'createObjectURL', bind$7(nativeCreateObjectURL, NativeURL));
- // `URL.revokeObjectURL` method
- // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL
- if (nativeRevokeObjectURL) defineBuiltIn$8(URLConstructor, 'revokeObjectURL', bind$7(nativeRevokeObjectURL, NativeURL));
- }
- setToStringTag$4(URLConstructor, 'URL');
- $$v({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS$a }, {
- URL: URLConstructor
- });
- var d = function d(_d) {
- if ("function" == typeof URL.createObjectURL) {
- var m = function m() {
- return URL.createObjectURL(new Blob([atob("dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSx0PWZ1bmN0aW9uKHIpe3JldHVybiByJiZyLk1hdGg9PU1hdGgmJnJ9LG49dCgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHx0KCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHx0KCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fHQoIm9iamVjdCI9PXR5cGVvZiByJiZyKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxlPXt9LGk9ZnVuY3Rpb24ocil7dHJ5e3JldHVybiEhcigpfWNhdGNoKHIpe3JldHVybiEwfX0sbz0haSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLHU9IWkoKGZ1bmN0aW9uKCl7dmFyIHI9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2Ygcnx8ci5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSksZj1mdW5jdGlvbigpe30uY2FsbCxhPXU/Zi5iaW5kKGYpOmZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkoZixhcmd1bWVudHMpfSxjPXt9LHM9e30ucHJvcGVydHlJc0VudW1lcmFibGUsdj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGg9diYmIXMuY2FsbCh7MToyfSwxKTtjLmY9aD9mdW5jdGlvbihyKXt2YXIgdD12KHRoaXMscik7cmV0dXJuISF0JiZ0LnR9OnM7dmFyIGwsZCx5PWZ1bmN0aW9uKHIsdCl7cmV0dXJue3Q6ISgxJnIpLGk6ISgyJnIpLHdyaXRhYmxlOiEoNCZyKSx2YWx1ZTp0fX0sdz11LGI9RnVuY3Rpb24ucHJvdG90eXBlLHA9Yi5iaW5kLGc9Yi5jYWxsLG09dyYmcC5iaW5kKGcsZyksUz13P2Z1bmN0aW9uKHIpe3JldHVybiByJiZtKHIpfTpmdW5jdGlvbihyKXtyZXR1cm4gciYmZnVuY3Rpb24oKXtyZXR1cm4gZy5hcHBseShyLGFyZ3VtZW50cyl9fSxBPVMsaj1BKHt9LnRvU3RyaW5nKSxPPUEoIiIuc2xpY2UpLGs9ZnVuY3Rpb24ocil7cmV0dXJuIE8oaihyKSw4LC0xKX0sRT1pLFQ9ayx4PU9iamVjdCxVPVMoIiIuc3BsaXQpLE09RSgoZnVuY3Rpb24oKXtyZXR1cm4heCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHIpe3JldHVybiJTdHJpbmciPT1UKHIpP1UociwiIik6eChyKX06eCxJPVR5cGVFcnJvcixMPWZ1bmN0aW9uKHIpe2lmKG51bGw9PXIpdGhyb3cgSSgiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIityKTtyZXR1cm4gcn0sUD1NLF89TCxSPWZ1bmN0aW9uKHIpe3JldHVybiBQKF8ocikpfSxGPWZ1bmN0aW9uKHIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByfSxOPUYsQz1mdW5jdGlvbihyKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHI/bnVsbCE9PXI6TihyKX0sQj1uLEc9RixEPWZ1bmN0aW9uKHIpe3JldHVybiBHKHIpP3I6dm9pZCAwfSxWPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIDI+YXJndW1lbnRzLmxlbmd0aD9EKEJbcl0pOkJbcl0mJkJbcl1bdF19LFk9Uyh7fS5pc1Byb3RvdHlwZU9mKSx6PVYoIm5hdmlnYXRvciIsInVzZXJBZ2VudCIpfHwiIixXPW4sJD16LEg9Vy5wcm9jZXNzLEs9Vy5vLHE9SCYmSC51fHxLJiZLLnZlcnNpb24sSj1xJiZxLnY7SiYmKGQ9KGw9Si5zcGxpdCgiLiIpKVswXT4wJiY0PmxbMF0/MTorKGxbMF0rbFsxXSkpLCFkJiYkJiYoKGw9JC5tYXRjaCgvRWRnZVwvKFxkKykvKSkmJjc0PmxbMV18fChsPSQubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihkPStsWzFdKSk7dmFyIFg9ZCxRPVgsWj0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFpKChmdW5jdGlvbigpe3ZhciByPVN5bWJvbCgpO3JldHVybiEocisiIil8fCEoT2JqZWN0KHIpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLmgmJlEmJjQxPlF9KSkscnI9WiYmIVN5bWJvbC5oJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcix0cj1WLG5yPUYsZXI9WSxpcj1PYmplY3Qsb3I9cnI/ZnVuY3Rpb24ocil7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiByfTpmdW5jdGlvbihyKXt2YXIgdD10cigiU3ltYm9sIik7cmV0dXJuIG5yKHQpJiZlcih0LnByb3RvdHlwZSxpcihyKSl9LHVyPVN0cmluZyxmcj1mdW5jdGlvbihyKXt0cnl7cmV0dXJuIHVyKHIpfWNhdGNoKHIpe3JldHVybiJPYmplY3QifX0sYXI9Rixjcj1mcixzcj1UeXBlRXJyb3IsdnI9ZnVuY3Rpb24ocil7aWYoYXIocikpcmV0dXJuIHI7dGhyb3cgc3IoY3IocikrIiBpcyBub3QgYSBmdW5jdGlvbiIpfSxocj12cixscj1mdW5jdGlvbihyLHQpe3ZhciBuPXJbdF07cmV0dXJuIG51bGw9PW4/dm9pZCAwOmhyKG4pfSxkcj1hLHlyPUYsd3I9Qyxicj1UeXBlRXJyb3IscHI9e2V4cG9ydHM6e319LGdyPW4sbXI9T2JqZWN0LmRlZmluZVByb3BlcnR5LFNyPWZ1bmN0aW9uKHIsdCl7dHJ5e21yKGdyLHIse3ZhbHVlOnQsaTohMCx3cml0YWJsZTohMH0pfWNhdGNoKG4pe2dyW3JdPXR9cmV0dXJuIHR9LEFyPVNyLGpyPW5bImwiXXx8QXIoIl9fY29yZS1qc19zaGFyZWRfXyIse30pLE9yPWpyOyhwci5leHBvcnRzPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIE9yW3JdfHwoT3Jbcl09dm9pZCAwIT09dD90Ont9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMjMuMiIsbW9kZToiZ2xvYmFsIixwOiLCqSAyMDE0LTIwMjIgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkiLGc6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMjMuMi9MSUNFTlNFIixzb3VyY2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzIn0pO3ZhciBrcj1MLEVyPU9iamVjdCxUcj1mdW5jdGlvbihyKXtyZXR1cm4gRXIoa3IocikpfSx4cj1UcixVcj1TKHt9Lmhhc093blByb3BlcnR5KSxNcj1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihyLHQpe3JldHVybiBVcih4cihyKSx0KX0sSXI9UyxMcj0wLFByPU1hdGgucmFuZG9tKCksX3I9SXIoMS4udG9TdHJpbmcpLFJyPWZ1bmN0aW9uKHIpe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09cj8iIjpyKSsiKV8iK19yKCsrTHIrUHIsMzYpfSxGcj1uLE5yPXByLmV4cG9ydHMsQ3I9TXIsQnI9UnIsR3I9WixEcj1ycixWcj1Ocigid2tzIiksWXI9RnIuU3ltYm9sLHpyPVlyJiZZci5mb3IsV3I9RHI/WXI6WXImJllyLm18fEJyLCRyPWZ1bmN0aW9uKHIpe2lmKCFDcihWcixyKXx8IUdyJiYic3RyaW5nIiE9dHlwZW9mIFZyW3JdKXt2YXIgdD0iU3ltYm9sLiIrcjtHciYmQ3IoWXIscik/VnJbcl09WXJbcl06VnJbcl09RHImJnpyP3pyKHQpOldyKHQpfXJldHVybiBWcltyXX0sSHI9YSxLcj1DLHFyPW9yLEpyPWxyLFhyPVR5cGVFcnJvcixRcj0kcigidG9QcmltaXRpdmUiKSxacj1mdW5jdGlvbihyLHQpe2lmKCFLcihyKXx8cXIocikpcmV0dXJuIHI7dmFyIG4sZT1KcihyLFFyKTtpZihlKXtpZih2b2lkIDA9PT10JiYodD0iZGVmYXVsdCIpLG49SHIoZSxyLHQpLCFLcihuKXx8cXIobikpcmV0dXJuIG47dGhyb3cgWHIoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT10JiYodD0ibnVtYmVyIiksZnVuY3Rpb24ocix0KXt2YXIgbixlO2lmKCJzdHJpbmciPT09dCYmeXIobj1yLnRvU3RyaW5nKSYmIXdyKGU9ZHIobixyKSkpcmV0dXJuIGU7aWYoeXIobj1yLnZhbHVlT2YpJiYhd3IoZT1kcihuLHIpKSlyZXR1cm4gZTtpZigic3RyaW5nIiE9PXQmJnlyKG49ci50b1N0cmluZykmJiF3cihlPWRyKG4scikpKXJldHVybiBlO3Rocm93IGJyKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX0ocix0KX0scnQ9WnIsdHQ9b3IsbnQ9ZnVuY3Rpb24ocil7dmFyIHQ9cnQociwic3RyaW5nIik7cmV0dXJuIHR0KHQpP3Q6dCsiIn0sZXQ9QyxpdD1uLmRvY3VtZW50LG90PWV0KGl0KSYmZXQoaXQuY3JlYXRlRWxlbWVudCksdXQ9ZnVuY3Rpb24ocil7cmV0dXJuIG90P2l0LmNyZWF0ZUVsZW1lbnQocik6e319LGZ0PXV0LGF0PSFvJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGZ0KCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSksY3Q9byxzdD1hLHZ0PWMsaHQ9eSxsdD1SLGR0PW50LHl0PU1yLHd0PWF0LGJ0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7ZS5mPWN0P2J0OmZ1bmN0aW9uKHIsdCl7aWYocj1sdChyKSx0PWR0KHQpLHd0KXRyeXtyZXR1cm4gYnQocix0KX1jYXRjaChyKXt9aWYoeXQocix0KSlyZXR1cm4gaHQoIXN0KHZ0LmYscix0KSxyW3RdKX07dmFyIHB0PXt9LGd0PW8mJmkoKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT1PYmplY3QuZGVmaW5lUHJvcGVydHkoKGZ1bmN0aW9uKCl7fSksInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSkpLG10PUMsU3Q9U3RyaW5nLEF0PVR5cGVFcnJvcixqdD1mdW5jdGlvbihyKXtpZihtdChyKSlyZXR1cm4gcjt0aHJvdyBBdChTdChyKSsiIGlzIG5vdCBhbiBvYmplY3QiKX0sT3Q9byxrdD1hdCxFdD1ndCxUdD1qdCx4dD1udCxVdD1UeXBlRXJyb3IsTXQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LEl0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7cHQuZj1PdD9FdD9mdW5jdGlvbihyLHQsbil7aWYoVHQociksdD14dCh0KSxUdChuKSwiZnVuY3Rpb24iPT10eXBlb2YgciYmInByb3RvdHlwZSI9PT10JiYidmFsdWUiaW4gbiYmIndyaXRhYmxlImluIG4mJiFuLndyaXRhYmxlKXt2YXIgZT1JdChyLHQpO2UmJmUud3JpdGFibGUmJihyW3RdPW4udmFsdWUsbj17aToiaSJpbiBuP24uaTplLmksdDoidCJpbiBuP24udDplLnQsd3JpdGFibGU6ITF9KX1yZXR1cm4gTXQocix0LG4pfTpNdDpmdW5jdGlvbihyLHQsbil7aWYoVHQociksdD14dCh0KSxUdChuKSxrdCl0cnl7cmV0dXJuIE10KHIsdCxuKX1jYXRjaChyKXt9aWYoImdldCJpbiBufHwic2V0ImluIG4pdGhyb3cgVXQoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJihyW3RdPW4udmFsdWUpLHJ9O3ZhciBMdD1wdCxQdD15LF90PW8/ZnVuY3Rpb24ocix0LG4pe3JldHVybiBMdC5mKHIsdCxQdCgxLG4pKX06ZnVuY3Rpb24ocix0LG4pe3JldHVybiByW3RdPW4scn0sUnQ9e2V4cG9ydHM6e319LEZ0PW8sTnQ9RnVuY3Rpb24ucHJvdG90eXBlLEN0PUZ0JiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEJ0PU1yKE50LCJuYW1lIiksR3Q9e1M6QnQsQTpCdCYmITEsajpCdCYmKCFGdHx8RnQmJkN0KE50LCJuYW1lIikuaSl9LER0PUYsVnQ9anIsWXQ9UyhGdW5jdGlvbi50b1N0cmluZyk7RHQoVnQuTyl8fChWdC5PPWZ1bmN0aW9uKHIpe3JldHVybiBZdChyKX0pO3ZhciB6dCxXdCwkdCxIdD1WdC5PLEt0PUYscXQ9SHQsSnQ9bi5XZWFrTWFwLFh0PUt0KEp0KSYmL25hdGl2ZSBjb2RlLy50ZXN0KHF0KEp0KSksUXQ9cHIuZXhwb3J0cyxadD1Scixybj1RdCgia2V5cyIpLHRuPWZ1bmN0aW9uKHIpe3JldHVybiBybltyXXx8KHJuW3JdPVp0KHIpKX0sbm49e30sZW49WHQsb249bix1bj1TLGZuPUMsYW49X3QsY249TXIsc249anIsdm49dG4saG49bm4sbG49b24uVHlwZUVycm9yLGRuPW9uLldlYWtNYXA7aWYoZW58fHNuLnN0YXRlKXt2YXIgeW49c24uc3RhdGV8fChzbi5zdGF0ZT1uZXcgZG4pLHduPXVuKHluLmdldCksYm49dW4oeW4uaGFzKSxwbj11bih5bi5zZXQpO3p0PWZ1bmN0aW9uKHIsdCl7aWYoYm4oeW4scikpdGhyb3cgbmV3IGxuKCJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIpO3JldHVybiB0Lms9cixwbih5bixyLHQpLHR9LFd0PWZ1bmN0aW9uKHIpe3JldHVybiB3bih5bixyKXx8e319LCR0PWZ1bmN0aW9uKHIpe3JldHVybiBibih5bixyKX19ZWxzZXt2YXIgZ249dm4oInN0YXRlIik7aG5bZ25dPSEwLHp0PWZ1bmN0aW9uKHIsdCl7aWYoY24ocixnbikpdGhyb3cgbmV3IGxuKCJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIpO3JldHVybiB0Lms9cixhbihyLGduLHQpLHR9LFd0PWZ1bmN0aW9uKHIpe3JldHVybiBjbihyLGduKT9yW2duXTp7fX0sJHQ9ZnVuY3Rpb24ocil7cmV0dXJuIGNuKHIsZ24pfX12YXIgbW49e3NldDp6dCxnZXQ6V3QsaGFzOiR0LFQ6ZnVuY3Rpb24ocil7cmV0dXJuICR0KHIpP1d0KHIpOnp0KHIse30pfSxVOmZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbjtpZighZm4odCl8fChuPVd0KHQpKS50eXBlIT09cil0aHJvdyBsbigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3IrIiByZXF1aXJlZCIpO3JldHVybiBufX19LFNuPUYsQW49TXIsam49byxPbj1HdC5qLGtuPUh0LEVuPW1uLlQsVG49bW4uZ2V0LHhuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxVbj1qbiYmIWkoKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT14bigoZnVuY3Rpb24oKXt9KSwibGVuZ3RoIix7dmFsdWU6OH0pLmxlbmd0aH0pKSxNbj0oU3RyaW5nKyIiKS5zcGxpdCgiU3RyaW5nIiksSW49UnQuZXhwb3J0cz1mdW5jdGlvbihyLHQsbil7IlN5bWJvbCgiPT09KHQrIiIpLnNsaWNlKDAsNykmJih0PSJbIisodCsiIikucmVwbGFjZSgvXlN5bWJvbFwoKFteKV0qKVwpLywiJDEiKSsiXSIpLG4mJm4uTSYmKHQ9ImdldCAiK3QpLG4mJm4uSSYmKHQ9InNldCAiK3QpLCghQW4ociwibmFtZSIpfHxPbiYmci5uYW1lIT09dCkmJnhuKHIsIm5hbWUiLHt2YWx1ZTp0LGk6ITB9KSxVbiYmbiYmQW4obiwiYXJpdHkiKSYmci5sZW5ndGghPT1uLkwmJnhuKHIsImxlbmd0aCIse3ZhbHVlOm4uTH0pO3RyeXtuJiZBbihuLCJjb25zdHJ1Y3RvciIpJiZuLmNvbnN0cnVjdG9yP2puJiZ4bihyLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOnIucHJvdG90eXBlJiYoci5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaChyKXt9dmFyIGU9RW4ocik7cmV0dXJuIEFuKGUsInNvdXJjZSIpfHwoZS5zb3VyY2U9TW4uam9pbigic3RyaW5nIj09dHlwZW9mIHQ/dDoiIikpLHJ9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1JbigoZnVuY3Rpb24oKXtyZXR1cm4gU24odGhpcykmJlRuKHRoaXMpLnNvdXJjZXx8a24odGhpcyl9KSwidG9TdHJpbmciKTt2YXIgTG49RixQbj1wdCxfbj1SdC5leHBvcnRzLFJuPVNyLEZuPWZ1bmN0aW9uKHIsdCxuLGUpe2V8fChlPXt9KTt2YXIgaT1lLnQsbz12b2lkIDAhPT1lLm5hbWU/ZS5uYW1lOnQ7cmV0dXJuIExuKG4pJiZfbihuLG8sZSksZS5nbG9iYWw/aT9yW3RdPW46Um4odCxuKTooZS5QP3JbdF0mJihpPSEwKTpkZWxldGUgclt0XSxpP3JbdF09bjpQbi5mKHIsdCx7dmFsdWU6bix0OiExLGk6IWUuXyx3cml0YWJsZTohZS5SfSkpLHJ9LE5uPXt9LENuPU1hdGguY2VpbCxCbj1NYXRoLmZsb29yLEduPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKHIpe3ZhciB0PStyO3JldHVybih0PjA/Qm46Q24pKHQpfSxEbj1mdW5jdGlvbihyKXt2YXIgdD0rcjtyZXR1cm4gdCE9dHx8MD09PXQ/MDpHbih0KX0sVm49RG4sWW49TWF0aC5tYXgsem49TWF0aC5taW4sV249ZnVuY3Rpb24ocix0KXt2YXIgbj1WbihyKTtyZXR1cm4gMD5uP1luKG4rdCwwKTp6bihuLHQpfSwkbj1EbixIbj1NYXRoLm1pbixLbj1mdW5jdGlvbihyKXtyZXR1cm4gcj4wP0huKCRuKHIpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LHFuPUtuLEpuPWZ1bmN0aW9uKHIpe3JldHVybiBxbihyLmxlbmd0aCl9LFhuPVIsUW49V24sWm49Sm4scmU9ZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXt2YXIgaSxvPVhuKHQpLHU9Wm4obyksZj1RbihlLHUpO2lmKHImJm4hPW4pe2Zvcig7dT5mOylpZigoaT1vW2YrK10pIT1pKXJldHVybiEwfWVsc2UgZm9yKDt1PmY7ZisrKWlmKChyfHxmIGluIG8pJiZvW2ZdPT09bilyZXR1cm4gcnx8Znx8MDtyZXR1cm4hciYmLTF9fSx0ZT17aW5jbHVkZXM6cmUoITApLGluZGV4T2Y6cmUoITEpfSxuZT1NcixlZT1SLGllPXRlLmluZGV4T2Ysb2U9bm4sdWU9UyhbXS5wdXNoKSxmZT1mdW5jdGlvbihyLHQpe3ZhciBuLGU9ZWUociksaT0wLG89W107Zm9yKG4gaW4gZSkhbmUob2UsbikmJm5lKGUsbikmJnVlKG8sbik7Zm9yKDt0Lmxlbmd0aD5pOyluZShlLG49dFtpKytdKSYmKH5pZShvLG4pfHx1ZShvLG4pKTtyZXR1cm4gb30sYWU9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXSxjZT1mZSxzZT1hZS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO05uLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHIpe3JldHVybiBjZShyLHNlKX07dmFyIHZlPXt9O3ZlLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczt2YXIgaGU9VixsZT1ObixkZT12ZSx5ZT1qdCx3ZT1TKFtdLmNvbmNhdCksYmU9aGUoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHIpe3ZhciB0PWxlLmYoeWUocikpLG49ZGUuZjtyZXR1cm4gbj93ZSh0LG4ocikpOnR9LHBlPU1yLGdlPWJlLG1lPWUsU2U9cHQsQWU9ZnVuY3Rpb24ocix0LG4pe2Zvcih2YXIgZT1nZSh0KSxpPVNlLmYsbz1tZS5mLHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGY9ZVt1XTtwZShyLGYpfHxuJiZwZShuLGYpfHxpKHIsZixvKHQsZikpfX0samU9aSxPZT1GLGtlPS8jfFwucHJvdG90eXBlXC4vLEVlPWZ1bmN0aW9uKHIsdCl7dmFyIG49eGVbVGUocildO3JldHVybiBuPT1NZXx8biE9VWUmJihPZSh0KT9qZSh0KTohIXQpfSxUZT1FZS5ub3JtYWxpemU9ZnVuY3Rpb24ocil7cmV0dXJuKHIrIiIpLnJlcGxhY2Uoa2UsIi4iKS50b0xvd2VyQ2FzZSgpfSx4ZT1FZS5kYXRhPXt9LFVlPUVlLkY9Ik4iLE1lPUVlLk49IlAiLEllPUVlLExlPW4sUGU9ZS5mLF9lPV90LFJlPUZuLEZlPVNyLE5lPUFlLENlPUllLEJlPWZ1bmN0aW9uKHIsdCl7dmFyIG4sZSxpLG8sdSxmPXIudGFyZ2V0LGE9ci5nbG9iYWwsYz1yLkM7aWYobj1hP0xlOmM/TGVbZl18fEZlKGYse30pOihMZVtmXXx8e30pLnByb3RvdHlwZSlmb3IoZSBpbiB0KXtpZihvPXRbZV0saT1yLkI/KHU9UGUobixlKSkmJnUudmFsdWU6bltlXSwhQ2UoYT9lOmYrKGM/Ii4iOiIjIikrZSxyLkcpJiZ2b2lkIDAhPT1pKXtpZih0eXBlb2Ygbz09dHlwZW9mIGkpY29udGludWU7TmUobyxpKX0oci5ofHxpJiZpLmgpJiZfZShvLCJzaGFtIiwhMCksUmUobixlLG8scil9fSxHZT17fTtHZVskcigidG9TdHJpbmdUYWciKV09InoiO3ZhciBEZSxWZT1HZSsiIj09IltvYmplY3Qgel0iLFllPVZlLHplPUYsV2U9aywkZT0kcigidG9TdHJpbmdUYWciKSxIZT1PYmplY3QsS2U9IkFyZ3VtZW50cyI9PVdlKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSkscWU9WWU/V2U6ZnVuY3Rpb24ocil7dmFyIHQsbixlO3JldHVybiB2b2lkIDA9PT1yPyJVbmRlZmluZWQiOm51bGw9PT1yPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49ZnVuY3Rpb24ocix0KXt0cnl7cmV0dXJuIHJbdF19Y2F0Y2gocil7fX0odD1IZShyKSwkZSkpP246S2U/V2UodCk6Ik9iamVjdCI9PShlPVdlKHQpKSYmemUodC5EKT8iQXJndW1lbnRzIjplfSxKZT1xZSxYZT1TdHJpbmcsUWU9ZnVuY3Rpb24ocil7aWYoIlN5bWJvbCI9PT1KZShyKSl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIFhlKHIpfSxaZT1DLHJpPWssdGk9JHIoIm1hdGNoIiksbmk9VHlwZUVycm9yLGVpPSRyKCJtYXRjaCIpLGlpPUJlLG9pPVMsdWk9ZS5mLGZpPUtuLGFpPVFlLGNpPWZ1bmN0aW9uKHIpe2lmKGZ1bmN0aW9uKHIpe3ZhciB0O3JldHVybiBaZShyKSYmKHZvaWQgMCE9PSh0PXJbdGldKT8hIXQ6IlJlZ0V4cCI9PXJpKHIpKX0ocikpdGhyb3cgbmkoIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9ucyIpO3JldHVybiByfSxzaT1MLHZpPW9pKCIiLnN0YXJ0c1dpdGgpLGhpPW9pKCIiLnNsaWNlKSxsaT1NYXRoLm1pbixkaT1mdW5jdGlvbigpe3ZhciByPS8uLzt0cnl7Ii8uLyIuc3RhcnRzV2l0aChyKX1jYXRjaCh0KXt0cnl7cmV0dXJuIHJbZWldPSExLCIvLi8iLnN0YXJ0c1dpdGgocil9Y2F0Y2gocil7fX1yZXR1cm4hMX0oKTtpaSh7dGFyZ2V0OiJTdHJpbmciLFY6ITAsRzohKCFkaSYmKERlPXVpKFN0cmluZy5wcm90b3R5cGUsInN0YXJ0c1dpdGgiKSxEZSYmIURlLndyaXRhYmxlKXx8ZGkpfSx7c3RhcnRzV2l0aDpmdW5jdGlvbihyKXt2YXIgdD1haShzaSh0aGlzKSk7Y2kocik7dmFyIG49ZmkobGkoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdC5sZW5ndGgpKSxlPWFpKHIpO3JldHVybiB2aT92aSh0LGUsbik6aGkodCxuLG4rZS5sZW5ndGgpPT09ZX19KTt2YXIgeWk9e30sd2k9ZmUsYmk9YWUscGk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHIpe3JldHVybiB3aShyLGJpKX0sZ2k9byxtaT1ndCxTaT1wdCxBaT1qdCxqaT1SLE9pPXBpO3lpLmY9Z2kmJiFtaT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihyLHQpe0FpKHIpO2Zvcih2YXIgbixlPWppKHQpLGk9T2kodCksbz1pLmxlbmd0aCx1PTA7bz51OylTaS5mKHIsbj1pW3UrK10sZVtuXSk7cmV0dXJuIHJ9O3ZhciBraSxFaT1WKCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIpLFRpPWp0LHhpPXlpLFVpPWFlLE1pPW5uLElpPUVpLExpPXV0LFBpPXRuKCJJRV9QUk9UTyIpLF9pPWZ1bmN0aW9uKCl7fSxSaT1mdW5jdGlvbihyKXtyZXR1cm4iPHNjcmlwdD4iK3IrIjxcL3NjcmlwdD4ifSxGaT1mdW5jdGlvbihyKXtyLndyaXRlKFJpKCIiKSksci5jbG9zZSgpO3ZhciB0PXIucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gcj1udWxsLHR9LE5pPWZ1bmN0aW9uKCl7dHJ5e2tpPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoKHIpe312YXIgcix0O05pPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZraT9GaShraSk6KCh0PUxpKCJpZnJhbWUiKSkuc3R5bGUuZGlzcGxheT0ibm9uZSIsSWkuYXBwZW5kQ2hpbGQodCksdC5zcmM9ImphdmFzY3JpcHQ6Iiwocj10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxyLndyaXRlKFJpKCJkb2N1bWVudC5GPU9iamVjdCIpKSxyLmNsb3NlKCksci5ZKTpGaShraSk7Zm9yKHZhciBuPVVpLmxlbmd0aDtuLS07KWRlbGV0ZSBOaS5wcm90b3R5cGVbVWlbbl1dO3JldHVybiBOaSgpfTtNaVtQaV09ITA7dmFyIENpPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHIsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1yPyhfaS5wcm90b3R5cGU9VGkociksbj1uZXcgX2ksX2kucHJvdG90eXBlPW51bGwsbltQaV09cik6bj1OaSgpLHZvaWQgMD09PXQ/bjp4aS5mKG4sdCl9LEJpPSRyLEdpPUNpLERpPXB0LmYsVmk9QmkoInVuc2NvcGFibGVzIiksWWk9QXJyYXkucHJvdG90eXBlO251bGw9PVlpW1ZpXSYmRGkoWWksVmkse2k6ITAsdmFsdWU6R2kobnVsbCl9KTt2YXIgemksV2ksJGksSGk9ZnVuY3Rpb24ocil7WWlbVmldW3JdPSEwfSxLaT17fSxxaT0haSgoZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7fXJldHVybiByLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgcikhPT1yLnByb3RvdHlwZX0pKSxKaT1NcixYaT1GLFFpPVRyLFppPXFpLHJvPXRuKCJJRV9QUk9UTyIpLHRvPU9iamVjdCxubz10by5wcm90b3R5cGUsZW89Wmk/dG8uZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24ocil7dmFyIHQ9UWkocik7aWYoSmkodCxybykpcmV0dXJuIHRbcm9dO3ZhciBuPXQuY29uc3RydWN0b3I7cmV0dXJuIFhpKG4pJiZ0IGluc3RhbmNlb2Ygbj9uLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgdG8/bm86bnVsbH0saW89aSxvbz1GLHVvPWVvLGZvPUZuLGFvPSRyKCJpdGVyYXRvciIpLGNvPSExO1tdLmtleXMmJigibmV4dCJpbigkaT1bXS5rZXlzKCkpPyhXaT11byh1bygkaSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJih6aT1XaSk6Y289ITApO3ZhciBzbz1udWxsPT16aXx8aW8oKGZ1bmN0aW9uKCl7dmFyIHI9e307cmV0dXJuIHppW2FvXS5jYWxsKHIpIT09cn0pKTtzbyYmKHppPXt9KSxvbyh6aVthb10pfHxmbyh6aSxhbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdm89e1c6emksJDpjb30saG89cHQuZixsbz1Ncix5bz0kcigidG9TdHJpbmdUYWciKSx3bz1mdW5jdGlvbihyLHQsbil7ciYmIW4mJihyPXIucHJvdG90eXBlKSxyJiYhbG8ocix5bykmJmhvKHIseW8se2k6ITAsdmFsdWU6dH0pfSxibz12by5XLHBvPUNpLGdvPXksbW89d28sU289S2ksQW89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sam89RixPbz1TdHJpbmcsa289VHlwZUVycm9yLEVvPVMsVG89anQseG89T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHIsdD0hMSxuPXt9O3RyeXsocj1FbyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCkpKG4sW10pLHQ9biBpbnN0YW5jZW9mIEFycmF5fWNhdGNoKHIpe31yZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gVG8obiksZnVuY3Rpb24ocil7aWYoIm9iamVjdCI9PXR5cGVvZiByfHxqbyhyKSlyZXR1cm4gcjt0aHJvdyBrbygiQ2FuJ3Qgc2V0ICIrT28ocikrIiBhcyBhIHByb3RvdHlwZSIpfShlKSx0P3IobixlKTpuLl9fcHJvdG9fXz1lLG59fSgpOnZvaWQgMCksVW89QmUsTW89YSxJbz1GLExvPWVvLFBvPXhvLF9vPXdvLFJvPV90LEZvPUZuLE5vPUtpLENvPUd0LkEsQm89R3QuaixHbz12by5XLERvPXZvLiQsVm89JHIoIml0ZXJhdG9yIiksWW89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sem89ZnVuY3Rpb24ocix0LG4sZSxpLG8sdSl7IWZ1bmN0aW9uKHIsdCxuKXt2YXIgZT10KyIgSXRlcmF0b3IiO3IucHJvdG90eXBlPXBvKGJvLHtuZXh0OmdvKDEsbil9KSxtbyhyLGUsITEpLFNvW2VdPUFvfShuLHQsZSk7dmFyIGYsYSxjLHM9ZnVuY3Rpb24ocil7aWYocj09PWkmJnkpcmV0dXJuIHk7aWYoIURvJiZyIGluIGwpcmV0dXJuIGxbcl07c3dpdGNoKHIpe2Nhc2Uia2V5cyI6Y2FzZSJ2YWx1ZXMiOmNhc2UiZW50cmllcyI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMscil9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LHY9dCsiIEl0ZXJhdG9yIixoPSExLGw9ci5wcm90b3R5cGUsZD1sW1ZvXXx8bFsiQEBpdGVyYXRvciJdfHxpJiZsW2ldLHk9IURvJiZkfHxzKGkpLHc9IkFycmF5Ij09dCYmbC5lbnRyaWVzfHxkO2lmKHcmJihmPUxvKHcuY2FsbChuZXcgcikpKSE9PU9iamVjdC5wcm90b3R5cGUmJmYubmV4dCYmKExvKGYpIT09R28mJihQbz9QbyhmLEdvKTpJbyhmW1ZvXSl8fEZvKGYsVm8sWW8pKSxfbyhmLHYsITApKSxDbyYmInZhbHVlcyI9PWkmJmQmJiJ2YWx1ZXMiIT09ZC5uYW1lJiYoQm8/Um8obCwibmFtZSIsInZhbHVlcyIpOihoPSEwLHk9ZnVuY3Rpb24oKXtyZXR1cm4gTW8oZCx0aGlzKX0pKSxpKWlmKGE9e3ZhbHVlczpzKCJ2YWx1ZXMiKSxrZXlzOm8/eTpzKCJrZXlzIiksZW50cmllczpzKCJlbnRyaWVzIil9LHUpZm9yKGMgaW4gYSkoRG98fGh8fCEoYyBpbiBsKSkmJkZvKGwsYyxhW2NdKTtlbHNlIFVvKHt0YXJnZXQ6dCxWOiEwLEc6RG98fGh9LGEpO3JldHVybiBsW1ZvXSE9PXkmJkZvKGwsVm8seSx7bmFtZTppfSksTm9bdF09eSxhfSxXbz1SLCRvPUhpLEhvPUtpLEtvPW1uLHFvPXB0LmYsSm89em8sWG89byxRbz1Lby5zZXQsWm89S28uVSgiQXJyYXkgSXRlcmF0b3IiKSxydT1KbyhBcnJheSwiQXJyYXkiLChmdW5jdGlvbihyLHQpe1FvKHRoaXMse3R5cGU6IkFycmF5IEl0ZXJhdG9yIix0YXJnZXQ6V28ociksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciByPVpvKHRoaXMpLHQ9ci50YXJnZXQsbj1yLmtpbmQsZT1yLmluZGV4Kys7cmV0dXJuIHQmJmU8dC5sZW5ndGg/ImtleXMiPT1uP3t2YWx1ZTplLGRvbmU6ITF9OiJ2YWx1ZXMiPT1uP3t2YWx1ZTp0W2VdLGRvbmU6ITF9Ont2YWx1ZTpbZSx0W2VdXSxkb25lOiExfTooci50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSksInZhbHVlcyIpLHR1PUhvLkg9SG8uQXJyYXk7aWYoJG8oImtleXMiKSwkbygidmFsdWVzIiksJG8oImVudHJpZXMiKSxYbyYmInZhbHVlcyIhPT10dS5uYW1lKXRyeXtxbyh0dSwibmFtZSIse3ZhbHVlOiJ2YWx1ZXMifSl9Y2F0Y2gocil7fXZhciBudT0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYidW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3LGV1PUZuLGl1PVksb3U9VHlwZUVycm9yLHV1PWZ1bmN0aW9uKHIsdCl7aWYoaXUodCxyKSlyZXR1cm4gcjt0aHJvdyBvdSgiSW5jb3JyZWN0IGludm9jYXRpb24iKX0sZnU9RG4sYXU9S24sY3U9UmFuZ2VFcnJvcixzdT1mdW5jdGlvbihyKXtpZih2b2lkIDA9PT1yKXJldHVybiAwO3ZhciB0PWZ1KHIpLG49YXUodCk7aWYodCE9PW4pdGhyb3cgY3UoIldyb25nIGxlbmd0aCBvciBpbmRleCIpO3JldHVybiBufSx2dT1BcnJheSxodT1NYXRoLmFicyxsdT1NYXRoLnBvdyxkdT1NYXRoLmZsb29yLHl1PU1hdGgubG9nLHd1PVRyLGJ1PVduLHB1PUpuLGd1PWZ1bmN0aW9uKHIpe2Zvcih2YXIgdD13dSh0aGlzKSxuPXB1KHQpLGU9YXJndW1lbnRzLmxlbmd0aCxpPWJ1KGU+MT9hcmd1bWVudHNbMV06dm9pZCAwLG4pLG89ZT4yP2FyZ3VtZW50c1syXTp2b2lkIDAsdT12b2lkIDA9PT1vP246YnUobyxuKTt1Pmk7KXRbaSsrXT1yO3JldHVybiB0fSxtdT1udCxTdT1wdCxBdT15LGp1PWZ1bmN0aW9uKHIsdCxuKXt2YXIgZT1tdSh0KTtlIGluIHI/U3UuZihyLGUsQXUoMCxuKSk6cltlXT1ufSxPdT1XbixrdT1KbixFdT1qdSxUdT1BcnJheSx4dT1NYXRoLm1heCxVdT1mdW5jdGlvbihyLHQsbil7Zm9yKHZhciBlPWt1KHIpLGk9T3UodCxlKSxvPU91KHZvaWQgMD09PW4/ZTpuLGUpLHU9VHUoeHUoby1pLDApKSxmPTA7bz5pO2krKyxmKyspRXUodSxmLHJbaV0pO3JldHVybiB1Lmxlbmd0aD1mLHV9LE11PW4sSXU9UyxMdT1vLFB1PW51LF91PUd0LFJ1PV90LEZ1PWZ1bmN0aW9uKHIsdCxuKXtmb3IodmFyIGUgaW4gdClldShyLGUsdFtlXSxuKTtyZXR1cm4gcn0sTnU9aSxDdT11dSxCdT1EbixHdT1LbixEdT1zdSxWdT1lbyxZdT14byx6dT1Obi5mLFd1PXB0LmYsJHU9Z3UsSHU9VXUsS3U9d28scXU9X3UuQSxKdT1fdS5qLFh1PW1uLmdldCxRdT1tbi5zZXQsWnU9TXUuQXJyYXlCdWZmZXIscmY9WnUsdGY9cmYmJnJmLnByb3RvdHlwZSxuZj1NdS5EYXRhVmlldyxlZj1uZiYmbmYucHJvdG90eXBlLG9mPU9iamVjdC5wcm90b3R5cGUsdWY9TXUuQXJyYXksZmY9TXUuUmFuZ2VFcnJvcixhZj1JdSgkdSksY2Y9SXUoW10ucmV2ZXJzZSksc2Y9ZnVuY3Rpb24ocix0LG4pe3ZhciBlLGksbyx1PXZ1KG4pLGY9OCpuLXQtMSxhPSgxPDxmKS0xLGM9YT4+MSxzPTIzPT09dD9sdSgyLC0yNCktbHUoMiwtNzcpOjAsdj0wPnJ8fDA9PT1yJiYwPjEvcj8xOjAsaD0wO2Zvcigocj1odShyKSkhPXJ8fHI9PT0xLzA/KGk9ciE9cj8xOjAsZT1hKTooZT1kdSh5dShyKS8uNjkzMTQ3MTgwNTU5OTQ1MyksMT5yKihvPWx1KDIsLWUpKSYmKGUtLSxvKj0yKSwyPihyKz0xPmUrYz9zKmx1KDIsMS1jKTpzL28pKm98fChlKyssby89MiksYT5lK2M/MT5lK2M/KGk9cipsdSgyLGMtMSkqbHUoMix0KSxlPTApOihpPShyKm8tMSkqbHUoMix0KSxlKz1jKTooaT0wLGU9YSkpO3Q+PTg7KXVbaCsrXT0yNTUmaSxpLz0yNTYsdC09ODtmb3IoZT1lPDx0fGksZis9dDtmPjA7KXVbaCsrXT0yNTUmZSxlLz0yNTYsZi09ODtyZXR1cm4gdVstLWhdfD0xMjgqdix1fSx2Zj1mdW5jdGlvbihyLHQpe3ZhciBuLGU9ci5sZW5ndGgsaT04KmUtdC0xLG89KDE8PGkpLTEsdT1vPj4xLGY9aS03LGE9ZS0xLGM9clthLS1dLHM9MTI3JmM7Zm9yKGM+Pj03O2Y+MDspcz0yNTYqcytyW2EtLV0sZi09ODtmb3Iobj1zJigxPDwtZiktMSxzPj49LWYsZis9dDtmPjA7KW49MjU2Km4rclthLS1dLGYtPTg7aWYoMD09PXMpcz0xLXU7ZWxzZXtpZihzPT09bylyZXR1cm4gbj9OYU46Yz8tMS8wOjEvMDtuKz1sdSgyLHQpLHMtPXV9cmV0dXJuKGM/LTE6MSkqbipsdSgyLHMtdCl9LGhmPWZ1bmN0aW9uKHIpe3JldHVyblsyNTUmcl19LGxmPWZ1bmN0aW9uKHIpe3JldHVyblsyNTUmcixyPj44JjI1NV19LGRmPWZ1bmN0aW9uKHIpe3JldHVyblsyNTUmcixyPj44JjI1NSxyPj4xNiYyNTUscj4+MjQmMjU1XX0seWY9ZnVuY3Rpb24ocil7cmV0dXJuIHJbM108PDI0fHJbMl08PDE2fHJbMV08PDh8clswXX0sd2Y9ZnVuY3Rpb24ocil7cmV0dXJuIHNmKHIsMjMsNCl9LGJmPWZ1bmN0aW9uKHIpe3JldHVybiBzZihyLDUyLDgpfSxwZj1mdW5jdGlvbihyLHQpe1d1KHIucHJvdG90eXBlLHQse2dldDpmdW5jdGlvbigpe3JldHVybiBYdSh0aGlzKVt0XX19KX0sZ2Y9ZnVuY3Rpb24ocix0LG4sZSl7dmFyIGk9RHUobiksbz1YdShyKTtpZihpK3Q+by5ieXRlTGVuZ3RoKXRocm93IGZmKCJXcm9uZyBpbmRleCIpO3ZhciB1PVh1KG8uYnVmZmVyKS5LLGY9aStvLmJ5dGVPZmZzZXQsYT1IdSh1LGYsZit0KTtyZXR1cm4gZT9hOmNmKGEpfSxtZj1mdW5jdGlvbihyLHQsbixlLGksbyl7dmFyIHU9RHUobiksZj1YdShyKTtpZih1K3Q+Zi5ieXRlTGVuZ3RoKXRocm93IGZmKCJXcm9uZyBpbmRleCIpO2Zvcih2YXIgYT1YdShmLmJ1ZmZlcikuSyxjPXUrZi5ieXRlT2Zmc2V0LHM9ZSgraSksdj0wO3Q+djt2KyspYVtjK3ZdPXNbbz92OnQtdi0xXX07aWYoUHUpe3ZhciBTZj1xdSYmIkFycmF5QnVmZmVyIiE9PVp1Lm5hbWU7aWYoTnUoKGZ1bmN0aW9uKCl7WnUoMSl9KSkmJk51KChmdW5jdGlvbigpe25ldyBadSgtMSl9KSkmJiFOdSgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFp1LG5ldyBadSgxLjUpLG5ldyBadShOYU4pLFNmJiYhSnV9KSkpU2YmJkp1JiZSdShadSwibmFtZSIsIkFycmF5QnVmZmVyIik7ZWxzZXsocmY9ZnVuY3Rpb24ocil7cmV0dXJuIEN1KHRoaXMsdGYpLG5ldyBadShEdShyKSl9KS5wcm90b3R5cGU9dGY7Zm9yKHZhciBBZixqZj16dShadSksT2Y9MDtqZi5sZW5ndGg+T2Y7KShBZj1qZltPZisrXSlpbiByZnx8UnUocmYsQWYsWnVbQWZdKTt0Zi5jb25zdHJ1Y3Rvcj1yZn1ZdSYmVnUoZWYpIT09b2YmJll1KGVmLG9mKTt2YXIga2Y9bmV3IG5mKG5ldyByZigyKSksRWY9SXUoZWYuc2V0SW50OCk7a2Yuc2V0SW50OCgwLDIxNDc0ODM2NDgpLGtmLnNldEludDgoMSwyMTQ3NDgzNjQ5KSwha2YuZ2V0SW50OCgwKSYma2YuZ2V0SW50OCgxKXx8RnUoZWYse3NldEludDg6ZnVuY3Rpb24ocix0KXtFZih0aGlzLHIsdDw8MjQ+PjI0KX0sc2V0VWludDg6ZnVuY3Rpb24ocix0KXtFZih0aGlzLHIsdDw8MjQ+PjI0KX19LHtQOiEwfSl9ZWxzZSB0Zj0ocmY9ZnVuY3Rpb24ocil7Q3UodGhpcyx0Zik7dmFyIHQ9RHUocik7UXUodGhpcyx7SzphZih1Zih0KSwwKSxieXRlTGVuZ3RoOnR9KSxMdXx8KHRoaXMuYnl0ZUxlbmd0aD10KX0pLnByb3RvdHlwZSxlZj0obmY9ZnVuY3Rpb24ocix0LG4pe0N1KHRoaXMsZWYpLEN1KHIsdGYpO3ZhciBlPVh1KHIpLmJ5dGVMZW5ndGgsaT1CdSh0KTtpZigwPml8fGk+ZSl0aHJvdyBmZigiV3Jvbmcgb2Zmc2V0Iik7aWYoaSsobj12b2lkIDA9PT1uP2UtaTpHdShuKSk+ZSl0aHJvdyBmZigiV3JvbmcgbGVuZ3RoIik7UXUodGhpcyx7YnVmZmVyOnIsYnl0ZUxlbmd0aDpuLGJ5dGVPZmZzZXQ6aX0pLEx1fHwodGhpcy5idWZmZXI9cix0aGlzLmJ5dGVMZW5ndGg9bix0aGlzLmJ5dGVPZmZzZXQ9aSl9KS5wcm90b3R5cGUsTHUmJihwZihyZiwiYnl0ZUxlbmd0aCIpLHBmKG5mLCJidWZmZXIiKSxwZihuZiwiYnl0ZUxlbmd0aCIpLHBmKG5mLCJieXRlT2Zmc2V0IikpLEZ1KGVmLHtnZXRJbnQ4OmZ1bmN0aW9uKHIpe3JldHVybiBnZih0aGlzLDEscilbMF08PDI0Pj4yNH0sZ2V0VWludDg6ZnVuY3Rpb24ocil7cmV0dXJuIGdmKHRoaXMsMSxyKVswXX0sZ2V0SW50MTY6ZnVuY3Rpb24ocil7dmFyIHQ9Z2YodGhpcywyLHIsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybih0WzFdPDw4fHRbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbihyKXt2YXIgdD1nZih0aGlzLDIscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuIHRbMV08PDh8dFswXX0sZ2V0SW50MzI6ZnVuY3Rpb24ocil7cmV0dXJuIHlmKGdmKHRoaXMsNCxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGdldFVpbnQzMjpmdW5jdGlvbihyKXtyZXR1cm4geWYoZ2YodGhpcyw0LHIsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKT4+PjB9LGdldEZsb2F0MzI6ZnVuY3Rpb24ocil7cmV0dXJuIHZmKGdmKHRoaXMsNCxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSwyMyl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24ocil7cmV0dXJuIHZmKGdmKHRoaXMsOCxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSw1Mil9LHNldEludDg6ZnVuY3Rpb24ocix0KXttZih0aGlzLDEscixoZix0KX0sc2V0VWludDg6ZnVuY3Rpb24ocix0KXttZih0aGlzLDEscixoZix0KX0sc2V0SW50MTY6ZnVuY3Rpb24ocix0KXttZih0aGlzLDIscixsZix0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDE2OmZ1bmN0aW9uKHIsdCl7bWYodGhpcywyLHIsbGYsdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEludDMyOmZ1bmN0aW9uKHIsdCl7bWYodGhpcyw0LHIsZGYsdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldFVpbnQzMjpmdW5jdGlvbihyLHQpe21mKHRoaXMsNCxyLGRmLHQsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDMyOmZ1bmN0aW9uKHIsdCl7bWYodGhpcyw0LHIsd2YsdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0NjQ6ZnVuY3Rpb24ocix0KXttZih0aGlzLDgscixiZix0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX19KTtLdShyZiwiQXJyYXlCdWZmZXIiKSxLdShuZiwiRGF0YVZpZXciKTt2YXIgVGY9e0FycmF5QnVmZmVyOnJmLERhdGFWaWV3Om5mfSx4Zj1TLFVmPWksTWY9RixJZj1xZSxMZj1IdCxQZj1mdW5jdGlvbigpe30sX2Y9W10sUmY9VigiUmVmbGVjdCIsImNvbnN0cnVjdCIpLEZmPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLE5mPXhmKEZmLmV4ZWMpLENmPSFGZi5leGVjKFBmKSxCZj1mdW5jdGlvbihyKXtpZighTWYocikpcmV0dXJuITE7dHJ5e3JldHVybiBSZihQZixfZixyKSwhMH1jYXRjaChyKXtyZXR1cm4hMX19LEdmPWZ1bmN0aW9uKHIpe2lmKCFNZihyKSlyZXR1cm4hMTtzd2l0Y2goSWYocikpe2Nhc2UiQXN5bmNGdW5jdGlvbiI6Y2FzZSJHZW5lcmF0b3JGdW5jdGlvbiI6Y2FzZSJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIjpyZXR1cm4hMX10cnl7cmV0dXJuIENmfHwhIU5mKEZmLExmKHIpKX1jYXRjaChyKXtyZXR1cm4hMH19O0dmLmg9ITA7dmFyIERmPSFSZnx8VWYoKGZ1bmN0aW9uKCl7dmFyIHI7cmV0dXJuIEJmKEJmLmNhbGwpfHwhQmYoT2JqZWN0KXx8IUJmKChmdW5jdGlvbigpe3I9ITB9KSl8fHJ9KSk/R2Y6QmYsVmY9RGYsWWY9ZnIsemY9VHlwZUVycm9yLFdmPWZ1bmN0aW9uKHIpe2lmKFZmKHIpKXJldHVybiByO3Rocm93IHpmKFlmKHIpKyIgaXMgbm90IGEgY29uc3RydWN0b3IiKX0sJGY9anQsSGY9V2YsS2Y9JHIoInNwZWNpZXMiKSxxZj1mdW5jdGlvbihyLHQpe3ZhciBuLGU9JGYocikuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWV8fG51bGw9PShuPSRmKGUpW0tmXSk/dDpIZihuKX0sSmY9QmUsWGY9UyxRZj1pLFpmPWp0LHJhPVduLHRhPUtuLG5hPXFmLGVhPVRmLkFycmF5QnVmZmVyLGlhPVRmLkRhdGFWaWV3LG9hPWlhLnByb3RvdHlwZSx1YT1YZihlYS5wcm90b3R5cGUuc2xpY2UpLGZhPVhmKG9hLmdldFVpbnQ4KSxhYT1YZihvYS5zZXRVaW50OCk7SmYoe3RhcmdldDoiQXJyYXlCdWZmZXIiLFY6ITAsUDohMCxHOlFmKChmdW5jdGlvbigpe3JldHVybiFuZXcgZWEoMikuc2xpY2UoMSx2b2lkIDApLmJ5dGVMZW5ndGh9KSl9LHtzbGljZTpmdW5jdGlvbihyLHQpe2lmKHVhJiZ2b2lkIDA9PT10KXJldHVybiB1YShaZih0aGlzKSxyKTtmb3IodmFyIG49WmYodGhpcykuYnl0ZUxlbmd0aCxlPXJhKHIsbiksaT1yYSh2b2lkIDA9PT10P246dCxuKSxvPW5ldyhuYSh0aGlzLGVhKSkodGEoaS1lKSksdT1uZXcgaWEodGhpcyksZj1uZXcgaWEobyksYT0wO2k+ZTspYWEoZixhKyssZmEodSxlKyspKTtyZXR1cm4gb319KTt2YXIgY2E9cWU7VmV8fEZuKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixWZT97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrY2EodGhpcykrIl0ifSx7UDohMH0pO3ZhciBzYT17ZXhwb3J0czp7fX0sdmE9JHIoIml0ZXJhdG9yIiksaGE9ITE7dHJ5e3ZhciBsYT0wLGRhPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFsYSsrfX0scTpmdW5jdGlvbigpe2hhPSEwfX07ZGFbdmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEFycmF5LmZyb20oZGEsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChyKXt9dmFyIHlhLHdhLGJhLHBhPWZ1bmN0aW9uKHIsdCl7aWYoIXQmJiFoYSlyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGU9e307ZVt2YV09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fX19LHIoZSl9Y2F0Y2gocil7fXJldHVybiBufSxnYT1udSxtYT1vLFNhPW4sQWE9RixqYT1DLE9hPU1yLGthPXFlLEVhPWZyLFRhPV90LHhhPUZuLFVhPXB0LmYsTWE9WSxJYT1lbyxMYT14byxQYT0kcixfYT1ScixSYT1tbi5ULEZhPW1uLmdldCxOYT1TYS5JbnQ4QXJyYXksQ2E9TmEmJk5hLnByb3RvdHlwZSxCYT1TYS5VaW50OENsYW1wZWRBcnJheSxHYT1CYSYmQmEucHJvdG90eXBlLERhPU5hJiZJYShOYSksVmE9Q2EmJklhKENhKSxZYT1PYmplY3QucHJvdG90eXBlLHphPVNhLlR5cGVFcnJvcixXYT1QYSgidG9TdHJpbmdUYWciKSwkYT1fYSgiVFlQRURfQVJSQVlfVEFHIiksSGE9Z2EmJiEhTGEmJiJPcGVyYSIhPT1rYShTYS5vcGVyYSksS2E9ITEscWE9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxKYT17QmlnSW50NjRBcnJheTo4LEJpZ1VpbnQ2NEFycmF5Ojh9LFhhPWZ1bmN0aW9uKHIpe3ZhciB0PUlhKHIpO2lmKGphKHQpKXt2YXIgbj1GYSh0KTtyZXR1cm4gbiYmT2EobiwiVHlwZWRBcnJheUNvbnN0cnVjdG9yIik/bi5KOlhhKHQpfX0sUWE9ZnVuY3Rpb24ocil7aWYoIWphKHIpKXJldHVybiExO3ZhciB0PWthKHIpO3JldHVybiBPYShxYSx0KXx8T2EoSmEsdCl9O2Zvcih5YSBpbiBxYSkoYmE9KHdhPVNhW3lhXSkmJndhLnByb3RvdHlwZSk/UmEoYmEpLko9d2E6SGE9ITE7Zm9yKHlhIGluIEphKShiYT0od2E9U2FbeWFdKSYmd2EucHJvdG90eXBlKSYmKFJhKGJhKS5KPXdhKTtpZigoIUhhfHwhQWEoRGEpfHxEYT09PUZ1bmN0aW9uLnByb3RvdHlwZSkmJihEYT1mdW5jdGlvbigpe3Rocm93IHphKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxIYSkpZm9yKHlhIGluIHFhKVNhW3lhXSYmTGEoU2FbeWFdLERhKTtpZigoIUhhfHwhVmF8fFZhPT09WWEpJiYoVmE9RGEucHJvdG90eXBlLEhhKSlmb3IoeWEgaW4gcWEpU2FbeWFdJiZMYShTYVt5YV0ucHJvdG90eXBlLFZhKTtpZihIYSYmSWEoR2EpIT09VmEmJkxhKEdhLFZhKSxtYSYmIU9hKFZhLFdhKSlmb3IoeWEgaW4gS2E9ITAsVWEoVmEsV2Ese2dldDpmdW5jdGlvbigpe3JldHVybiBqYSh0aGlzKT90aGlzWyRhXTp2b2lkIDB9fSkscWEpU2FbeWFdJiZUYShTYVt5YV0sJGEseWEpO3ZhciBaYT17WDpIYSxaOkthJiYkYSxycjpmdW5jdGlvbihyKXtpZihRYShyKSlyZXR1cm4gcjt0aHJvdyB6YSgiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LHRyOmZ1bmN0aW9uKHIpe2lmKEFhKHIpJiYoIUxhfHxNYShEYSxyKSkpcmV0dXJuIHI7dGhyb3cgemEoRWEocikrIiBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxucjpmdW5jdGlvbihyLHQsbixlKXtpZihtYSl7aWYobilmb3IodmFyIGkgaW4gcWEpe3ZhciBvPVNhW2ldO2lmKG8mJk9hKG8ucHJvdG90eXBlLHIpKXRyeXtkZWxldGUgby5wcm90b3R5cGVbcl19Y2F0Y2gobil7dHJ5e28ucHJvdG90eXBlW3JdPXR9Y2F0Y2gocil7fX19VmFbcl0mJiFufHx4YShWYSxyLG4/dDpIYSYmQ2Fbcl18fHQsZSl9fSxlcjpmdW5jdGlvbihyLHQsbil7dmFyIGUsaTtpZihtYSl7aWYoTGEpe2lmKG4pZm9yKGUgaW4gcWEpaWYoKGk9U2FbZV0pJiZPYShpLHIpKXRyeXtkZWxldGUgaVtyXX1jYXRjaChyKXt9aWYoRGFbcl0mJiFuKXJldHVybjt0cnl7cmV0dXJuIHhhKERhLHIsbj90OkhhJiZEYVtyXXx8dCl9Y2F0Y2gocil7fX1mb3IoZSBpbiBxYSkhKGk9U2FbZV0pfHxpW3JdJiYhbnx8eGEoaSxyLHQpfX0saXI6WGEsaXNWaWV3OmZ1bmN0aW9uKHIpe2lmKCFqYShyKSlyZXR1cm4hMTt2YXIgdD1rYShyKTtyZXR1cm4iRGF0YVZpZXciPT09dHx8T2EocWEsdCl8fE9hKEphLHQpfSx1cjpRYSxhcjpEYSxjcjpWYX0scmM9bix0Yz1pLG5jPXBhLGVjPVphLlgsaWM9cmMuQXJyYXlCdWZmZXIsb2M9cmMuSW50OEFycmF5LHVjPSFlY3x8IXRjKChmdW5jdGlvbigpe29jKDEpfSkpfHwhdGMoKGZ1bmN0aW9uKCl7bmV3IG9jKC0xKX0pKXx8IW5jKChmdW5jdGlvbihyKXtuZXcgb2MsbmV3IG9jKG51bGwpLG5ldyBvYygxLjUpLG5ldyBvYyhyKX0pLCEwKXx8dGMoKGZ1bmN0aW9uKCl7cmV0dXJuIDEhPT1uZXcgb2MobmV3IGljKDIpLDEsdm9pZCAwKS5sZW5ndGh9KSksZmM9QyxhYz1NYXRoLmZsb29yLGNjPU51bWJlci5pc0ludGVnZXJ8fGZ1bmN0aW9uKHIpe3JldHVybiFmYyhyKSYmaXNGaW5pdGUocikmJmFjKHIpPT09cn0sc2M9RG4sdmM9UmFuZ2VFcnJvcixoYz1SYW5nZUVycm9yLGxjPWZ1bmN0aW9uKHIsdCl7dmFyIG49ZnVuY3Rpb24ocil7dmFyIHQ9c2Mocik7aWYoMD50KXRocm93IHZjKCJUaGUgYXJndW1lbnQgY2FuJ3QgYmUgbGVzcyB0aGFuIDAiKTtyZXR1cm4gdH0ocik7aWYobiV0KXRocm93IGhjKCJXcm9uZyBvZmZzZXQiKTtyZXR1cm4gbn0sZGM9dnIseWM9dSx3Yz1TKFMuYmluZCksYmM9ZnVuY3Rpb24ocix0KXtyZXR1cm4gZGMociksdm9pZCAwPT09dD9yOnljP3djKHIsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseSh0LGFyZ3VtZW50cyl9fSxwYz1xZSxnYz1scixtYz1LaSxTYz0kcigiaXRlcmF0b3IiKSxBYz1mdW5jdGlvbihyKXtpZihudWxsIT1yKXJldHVybiBnYyhyLFNjKXx8Z2MociwiQEBpdGVyYXRvciIpfHxtY1twYyhyKV19LGpjPWEsT2M9dnIsa2M9anQsRWM9ZnIsVGM9QWMseGM9VHlwZUVycm9yLFVjPWZ1bmN0aW9uKHIsdCl7dmFyIG49Mj5hcmd1bWVudHMubGVuZ3RoP1RjKHIpOnQ7aWYoT2MobikpcmV0dXJuIGtjKGpjKG4scikpO3Rocm93IHhjKEVjKHIpKyIgaXMgbm90IGl0ZXJhYmxlIil9LE1jPUtpLEljPSRyKCJpdGVyYXRvciIpLExjPUFycmF5LnByb3RvdHlwZSxQYz1mdW5jdGlvbihyKXtyZXR1cm4gdm9pZCAwIT09ciYmKE1jLkFycmF5PT09cnx8TGNbSWNdPT09cil9LF9jPWJjLFJjPWEsRmM9V2YsTmM9VHIsQ2M9Sm4sQmM9VWMsR2M9QWMsRGM9UGMsVmM9WmEudHIsWWM9ayx6Yz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihyKXtyZXR1cm4iQXJyYXkiPT1ZYyhyKX0sV2M9emMsJGM9RGYsSGM9QyxLYz0kcigic3BlY2llcyIpLHFjPUFycmF5LEpjPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIG5ldyhmdW5jdGlvbihyKXt2YXIgdDtyZXR1cm4gV2MocikmJih0PXIuY29uc3RydWN0b3IsKCRjKHQpJiYodD09PXFjfHxXYyh0LnByb3RvdHlwZSkpfHxIYyh0KSYmbnVsbD09PSh0PXRbS2NdKSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/cWM6dH0ocikpKDA9PT10PzA6dCl9LFhjPWJjLFFjPU0sWmM9VHIscnM9Sm4sdHM9SmMsbnM9UyhbXS5wdXNoKSxlcz1mdW5jdGlvbihyKXt2YXIgdD0xPT1yLG49Mj09cixlPTM9PXIsaT00PT1yLG89Nj09cix1PTc9PXIsZj01PT1yfHxvO3JldHVybiBmdW5jdGlvbihhLGMscyx2KXtmb3IodmFyIGgsbCxkPVpjKGEpLHk9UWMoZCksdz1YYyhjLHMpLGI9cnMoeSkscD0wLGc9dnx8dHMsbT10P2coYSxiKTpufHx1P2coYSwwKTp2b2lkIDA7Yj5wO3ArKylpZigoZnx8cCBpbiB5KSYmKGw9dyhoPXlbcF0scCxkKSxyKSlpZih0KW1bcF09bDtlbHNlIGlmKGwpc3dpdGNoKHIpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGg7Y2FzZSA2OnJldHVybiBwO2Nhc2UgMjpucyhtLGgpfWVsc2Ugc3dpdGNoKHIpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6bnMobSxoKX1yZXR1cm4gbz8tMTplfHxpP2k6bX19LGlzPXtmb3JFYWNoOmVzKDApLG1hcDplcygxKSxmaWx0ZXI6ZXMoMiksc29tZTplcygzKSxldmVyeTplcyg0KSxmaW5kOmVzKDUpLGZpbmRJbmRleDplcyg2KSxzcjplcyg3KX0sb3M9Vix1cz1wdCxmcz1vLGFzPSRyKCJzcGVjaWVzIiksY3M9ZnVuY3Rpb24ocil7dmFyIHQ9b3Mociksbj11cy5mO2ZzJiZ0JiYhdFthc10mJm4odCxhcyx7aTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX0sc3M9Rix2cz1DLGhzPXhvLGxzPUJlLGRzPW4seXM9YSx3cz1vLGJzPXVjLHBzPVphLGdzPVRmLG1zPXV1LFNzPXksQXM9X3QsanM9Y2MsT3M9S24sa3M9c3UsRXM9bGMsVHM9bnQseHM9TXIsVXM9cWUsTXM9QyxJcz1vcixMcz1DaSxQcz1ZLF9zPXhvLFJzPU5uLmYsRnM9ZnVuY3Rpb24ocil7dmFyIHQsbixlLGksbyx1LGY9RmModGhpcyksYT1OYyhyKSxjPWFyZ3VtZW50cy5sZW5ndGgscz1jPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx2PXZvaWQgMCE9PXMsaD1HYyhhKTtpZihoJiYhRGMoaCkpZm9yKHU9KG89QmMoYSxoKSkubmV4dCxhPVtdOyEoaT1SYyh1LG8pKS5kb25lOylhLnB1c2goaS52YWx1ZSk7Zm9yKHYmJmM+MiYmKHM9X2Mocyxhcmd1bWVudHNbMl0pKSxuPUNjKGEpLGU9bmV3KFZjKGYpKShuKSx0PTA7bj50O3QrKyllW3RdPXY/cyhhW3RdLHQpOmFbdF07cmV0dXJuIGV9LE5zPWlzLmZvckVhY2gsQ3M9Y3MsQnM9cHQsR3M9ZSxEcz1tbi5nZXQsVnM9bW4uc2V0LFlzPW1uLlQsenM9QnMuZixXcz1Hcy5mLCRzPU1hdGgucm91bmQsSHM9ZHMuUmFuZ2VFcnJvcixLcz1ncy5BcnJheUJ1ZmZlcixxcz1Lcy5wcm90b3R5cGUsSnM9Z3MuRGF0YVZpZXcsWHM9cHMuWCxRcz1wcy5aLFpzPXBzLmFyLHJ2PXBzLmNyLHR2PXBzLnRyLG52PXBzLnVyLGV2PWZ1bmN0aW9uKHIsdCl7dHYocik7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aCxpPW5ldyByKGUpO2U+bjspaVtuXT10W24rK107cmV0dXJuIGl9LGl2PWZ1bmN0aW9uKHIsdCl7enMocix0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRHModGhpcylbdF19fSl9LG92PWZ1bmN0aW9uKHIpe3ZhciB0O3JldHVybiBQcyhxcyxyKXx8IkFycmF5QnVmZmVyIj09KHQ9VXMocikpfHwiU2hhcmVkQXJyYXlCdWZmZXIiPT10fSx1dj1mdW5jdGlvbihyLHQpe3JldHVybiBudihyKSYmIUlzKHQpJiZ0IGluIHImJmpzKCt0KSYmdD49MH0sZnY9ZnVuY3Rpb24ocix0KXtyZXR1cm4gdD1Ucyh0KSx1dihyLHQpP1NzKDIsclt0XSk6V3Mocix0KX0sYXY9ZnVuY3Rpb24ocix0LG4pe3JldHVybiB0PVRzKHQpLCEodXYocix0KSYmTXMobikmJnhzKG4sInZhbHVlIikpfHx4cyhuLCJnZXQiKXx8eHMobiwic2V0Iil8fG4uaXx8eHMobiwid3JpdGFibGUiKSYmIW4ud3JpdGFibGV8fHhzKG4sImVudW1lcmFibGUiKSYmIW4udD96cyhyLHQsbik6KHJbdF09bi52YWx1ZSxyKX07d3M/KFhzfHwoR3MuZj1mdixCcy5mPWF2LGl2KHJ2LCJidWZmZXIiKSxpdihydiwiYnl0ZU9mZnNldCIpLGl2KHJ2LCJieXRlTGVuZ3RoIiksaXYocnYsImxlbmd0aCIpKSxscyh7dGFyZ2V0OiJPYmplY3QiLEM6ITAsRzohWHN9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnYsZGVmaW5lUHJvcGVydHk6YXZ9KSxzYS5leHBvcnRzPWZ1bmN0aW9uKHIsdCxuKXt2YXIgZT1yLm1hdGNoKC9cZCskLylbMF0vOCxpPXIrKG4/IkNsYW1wZWQiOiIiKSsiQXJyYXkiLG89ImdldCIrcix1PSJzZXQiK3IsZj1kc1tpXSxhPWYsYz1hJiZhLnByb3RvdHlwZSxzPXt9LHY9ZnVuY3Rpb24ocix0KXt6cyhyLHQse2dldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihyLHQpe3ZhciBuPURzKHIpO3JldHVybiBuLnZpZXdbb10odCplK24uYnl0ZU9mZnNldCwhMCl9KHRoaXMsdCl9LHNldDpmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24ocix0LGkpe3ZhciBvPURzKHIpO24mJihpPTA+KGk9JHMoaSkpPzA6aT4yNTU/MjU1OjI1NSZpKSxvLnZpZXdbdV0odCplK28uYnl0ZU9mZnNldCxpLCEwKX0odGhpcyx0LHIpfSx0OiEwfSl9O1hzP2JzJiYoYT10KChmdW5jdGlvbihyLHQsbixpKXtyZXR1cm4gbXMocixjKSxmdW5jdGlvbihyLHQsbil7dmFyIGUsaTtyZXR1cm4gaHMmJnNzKGU9dC5jb25zdHJ1Y3RvcikmJmUhPT1uJiZ2cyhpPWUucHJvdG90eXBlKSYmaSE9PW4ucHJvdG90eXBlJiZocyhyLGkpLHJ9KE1zKHQpP292KHQpP3ZvaWQgMCE9PWk/bmV3IGYodCxFcyhuLGUpLGkpOnZvaWQgMCE9PW4/bmV3IGYodCxFcyhuLGUpKTpuZXcgZih0KTpudih0KT9ldihhLHQpOnlzKEZzLGEsdCk6bmV3IGYoa3ModCkpLHIsYSl9KSksX3MmJl9zKGEsWnMpLE5zKFJzKGYpLChmdW5jdGlvbihyKXtyIGluIGF8fEFzKGEscixmW3JdKX0pKSxhLnByb3RvdHlwZT1jKTooYT10KChmdW5jdGlvbihyLHQsbixpKXttcyhyLGMpO3ZhciBvLHUsZixzPTAsaD0wO2lmKE1zKHQpKXtpZighb3YodCkpcmV0dXJuIG52KHQpP2V2KGEsdCk6eXMoRnMsYSx0KTtvPXQsaD1FcyhuLGUpO3ZhciBsPXQuYnl0ZUxlbmd0aDtpZih2b2lkIDA9PT1pKXtpZihsJWUpdGhyb3cgSHMoIldyb25nIGxlbmd0aCIpO2lmKDA+KHU9bC1oKSl0aHJvdyBIcygiV3JvbmcgbGVuZ3RoIil9ZWxzZSBpZigodT1PcyhpKSplKStoPmwpdGhyb3cgSHMoIldyb25nIGxlbmd0aCIpO2Y9dS9lfWVsc2UgZj1rcyh0KSxvPW5ldyBLcyh1PWYqZSk7Zm9yKFZzKHIse2J1ZmZlcjpvLGJ5dGVPZmZzZXQ6aCxieXRlTGVuZ3RoOnUsbGVuZ3RoOmYsdmlldzpuZXcgSnMobyl9KTtmPnM7KXYocixzKyspfSkpLF9zJiZfcyhhLFpzKSxjPWEucHJvdG90eXBlPUxzKHJ2KSksYy5jb25zdHJ1Y3RvciE9PWEmJkFzKGMsImNvbnN0cnVjdG9yIixhKSxZcyhjKS5KPWEsUXMmJkFzKGMsUXMsaSk7dmFyIGg9YSE9ZjtzW2ldPWEsbHMoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxHOmgsaDohWHN9LHMpLCJCWVRFU19QRVJfRUxFTUVOVCJpbiBhfHxBcyhhLCJCWVRFU19QRVJfRUxFTUVOVCIsZSksIkJZVEVTX1BFUl9FTEVNRU5UImluIGN8fEFzKGMsIkJZVEVTX1BFUl9FTEVNRU5UIixlKSxDcyhpKX0pOnNhLmV4cG9ydHM9ZnVuY3Rpb24oKXt9LCgwLHNhLmV4cG9ydHMpKCJVaW50OCIsKGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIodGhpcyx0LG4sZSl9fSkpO3ZhciBjdj1mcixzdj1UeXBlRXJyb3IsdnY9ZnVuY3Rpb24ocix0KXtpZighZGVsZXRlIHJbdF0pdGhyb3cgc3YoIkNhbm5vdCBkZWxldGUgcHJvcGVydHkgIitjdih0KSsiIG9mICIrY3YocikpfSxodj1Ucixsdj1Xbixkdj1Kbix5dj12dix3dj1NYXRoLm1pbixidj1aYSxwdj1TKFtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHIsdCl7dmFyIG49aHYodGhpcyksZT1kdihuKSxpPWx2KHIsZSksbz1sdih0LGUpLHU9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsZj13digodm9pZCAwPT09dT9lOmx2KHUsZSkpLW8sZS1pKSxhPTE7Zm9yKGk+byYmbytmPmkmJihhPS0xLG8rPWYtMSxpKz1mLTEpO2YtLSA+MDspbyBpbiBuP25baV09bltvXTp5dihuLGkpLGkrPWEsbys9YTtyZXR1cm4gbn0pLGd2PWJ2LnJyOygwLGJ2Lm5yKSgiY29weVdpdGhpbiIsKGZ1bmN0aW9uKHIsdCl7cmV0dXJuIHB2KGd2KHRoaXMpLHIsdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9KSk7dmFyIG12PWlzLmV2ZXJ5LFN2PVphLnJyOygwLFphLm5yKSgiZXZlcnkiLChmdW5jdGlvbihyKXtyZXR1cm4gbXYoU3YodGhpcykscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIEF2PVpyLGp2PVR5cGVFcnJvcixPdj1ndSxrdj1mdW5jdGlvbihyKXt2YXIgdD1BdihyLCJudW1iZXIiKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cganYoIkNhbid0IGNvbnZlcnQgbnVtYmVyIHRvIGJpZ2ludCIpO3JldHVybiBCaWdJbnQodCl9LEV2PXFlLFR2PWEseHY9aSxVdj1aYS5ycixNdj1aYS5ucixJdj1TKCIiLnNsaWNlKTtNdigiZmlsbCIsKGZ1bmN0aW9uKHIpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7VXYodGhpcyk7dmFyIG49IkJpZyI9PT1JdihFdih0aGlzKSwwLDMpP2t2KHIpOityO3JldHVybiBUdihPdix0aGlzLG4sdD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSkseHYoKGZ1bmN0aW9uKCl7dmFyIHI9MDtyZXR1cm4gbmV3IEludDhBcnJheSgyKS5maWxsKHt2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHIrK319KSwxIT09cn0pKSk7dmFyIEx2PUpuLFB2PXFmLF92PVphLnRyLFJ2PVphLmlyLEZ2PWZ1bmN0aW9uKHIpe3JldHVybiBfdihQdihyLFJ2KHIpKSl9LE52PUZ2LEN2PWlzLmZpbHRlcixCdj1mdW5jdGlvbihyLHQpe3JldHVybiBmdW5jdGlvbihyLHQpe2Zvcih2YXIgbj0wLGU9THYodCksaT1uZXcgcihlKTtlPm47KWlbbl09dFtuKytdO3JldHVybiBpfShOdihyKSx0KX0sR3Y9WmEucnI7KDAsWmEubnIpKCJmaWx0ZXIiLChmdW5jdGlvbihyKXt2YXIgdD1DdihHdih0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4gQnYodGhpcyx0KX0pKTt2YXIgRHY9aXMuZmluZCxWdj1aYS5ycjsoMCxaYS5ucikoImZpbmQiLChmdW5jdGlvbihyKXtyZXR1cm4gRHYoVnYodGhpcykscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIFl2PWlzLmZpbmRJbmRleCx6dj1aYS5ycjsoMCxaYS5ucikoImZpbmRJbmRleCIsKGZ1bmN0aW9uKHIpe3JldHVybiBZdih6dih0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgV3Y9aXMuZm9yRWFjaCwkdj1aYS5ycjsoMCxaYS5ucikoImZvckVhY2giLChmdW5jdGlvbihyKXtXdigkdih0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgSHY9dGUuaW5jbHVkZXMsS3Y9WmEucnI7KDAsWmEubnIpKCJpbmNsdWRlcyIsKGZ1bmN0aW9uKHIpe3JldHVybiBIdihLdih0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgcXY9dGUuaW5kZXhPZixKdj1aYS5ycjsoMCxaYS5ucikoImluZGV4T2YiLChmdW5jdGlvbihyKXtyZXR1cm4gcXYoSnYodGhpcykscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIFh2PW4sUXY9aSxadj1TLHJoPVphLHRoPXJ1LG5oPSRyKCJpdGVyYXRvciIpLGVoPVh2LlVpbnQ4QXJyYXksaWg9WnYodGgudmFsdWVzKSxvaD1adih0aC5rZXlzKSx1aD1adih0aC5lbnRyaWVzKSxmaD1yaC5ycixhaD1yaC5ucixjaD1laCYmZWgucHJvdG90eXBlLHNoPSFRdigoZnVuY3Rpb24oKXtjaFtuaF0uY2FsbChbMV0pfSkpLHZoPSEhY2gmJmNoLnZhbHVlcyYmY2hbbmhdPT09Y2gudmFsdWVzJiYidmFsdWVzIj09PWNoLnZhbHVlcy5uYW1lLGhoPWZ1bmN0aW9uKCl7cmV0dXJuIGloKGZoKHRoaXMpKX07YWgoImVudHJpZXMiLChmdW5jdGlvbigpe3JldHVybiB1aChmaCh0aGlzKSl9KSxzaCksYWgoImtleXMiLChmdW5jdGlvbigpe3JldHVybiBvaChmaCh0aGlzKSl9KSxzaCksYWgoInZhbHVlcyIsaGgsc2h8fCF2aCx7bmFtZToidmFsdWVzIn0pLGFoKG5oLGhoLHNofHwhdmgse25hbWU6InZhbHVlcyJ9KTt2YXIgbGg9WmEucnIsZGg9WmEubnIseWg9UyhbXS5qb2luKTtkaCgiam9pbiIsKGZ1bmN0aW9uKHIpe3JldHVybiB5aChsaCh0aGlzKSxyKX0pKTt2YXIgd2g9dSxiaD1GdW5jdGlvbi5wcm90b3R5cGUscGg9YmguYXBwbHksZ2g9YmguY2FsbCxtaD0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fCh3aD9naC5iaW5kKHBoKTpmdW5jdGlvbigpe3JldHVybiBnaC5hcHBseShwaCxhcmd1bWVudHMpfSksU2g9aSxBaD1mdW5jdGlvbihyLHQpe3ZhciBuPVtdW3JdO3JldHVybiEhbiYmU2goKGZ1bmN0aW9uKCl7bi5jYWxsKG51bGwsdHx8ZnVuY3Rpb24oKXtyZXR1cm4gMX0sMSl9KSl9LGpoPW1oLE9oPVIsa2g9RG4sRWg9Sm4sVGg9TWF0aC5taW4seGg9W10ubGFzdEluZGV4T2YsVWg9ISF4aCYmITEsTWg9QWgoImxhc3RJbmRleE9mIiksSWg9bWgsTGg9VWh8fCFNaD9mdW5jdGlvbihyKXtpZihVaClyZXR1cm4gamgoeGgsdGhpcyxhcmd1bWVudHMpfHwwO3ZhciB0PU9oKHRoaXMpLG49RWgodCksZT1uLTE7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKGU9VGgoZSxraChhcmd1bWVudHNbMV0pKSksMD5lJiYoZT1uK2UpO2U+PTA7ZS0tKWlmKGUgaW4gdCYmdFtlXT09PXIpcmV0dXJuIGV8fDA7cmV0dXJuLTF9OnhoLFBoPVphLnJyOygwLFphLm5yKSgibGFzdEluZGV4T2YiLChmdW5jdGlvbihyKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBJaChMaCxQaCh0aGlzKSx0PjE/W3IsYXJndW1lbnRzWzFdXTpbcl0pfSkpO3ZhciBfaD1pcy5tYXAsUmg9RnYsRmg9WmEucnI7KDAsWmEubnIpKCJtYXAiLChmdW5jdGlvbihyKXtyZXR1cm4gX2goRmgodGhpcykscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwoZnVuY3Rpb24ocix0KXtyZXR1cm4gbmV3KFJoKHIpKSh0KX0pKX0pKTt2YXIgTmg9dnIsQ2g9VHIsQmg9TSxHaD1KbixEaD1UeXBlRXJyb3IsVmg9ZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsbixlLGkpe05oKG4pO3ZhciBvPUNoKHQpLHU9QmgobyksZj1HaChvKSxhPXI/Zi0xOjAsYz1yPy0xOjE7aWYoMj5lKWZvcig7Oyl7aWYoYSBpbiB1KXtpPXVbYV0sYSs9YzticmVha31pZihhKz1jLHI/MD5hOmE+PWYpdGhyb3cgRGgoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO3I/YT49MDpmPmE7YSs9YylhIGluIHUmJihpPW4oaSx1W2FdLGEsbykpO3JldHVybiBpfX0sWWg9e2xlZnQ6VmgoITEpLHJpZ2h0OlZoKCEwKX0semg9WWgubGVmdCxXaD1aYS5ycjsoMCxaYS5ucikoInJlZHVjZSIsKGZ1bmN0aW9uKHIpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHpoKFdoKHRoaXMpLHIsdCx0PjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyICRoPVloLnJpZ2h0LEhoPVphLnJyOygwLFphLm5yKSgicmVkdWNlUmlnaHQiLChmdW5jdGlvbihyKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO3JldHVybiAkaChIaCh0aGlzKSxyLHQsdD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciBLaD1aYS5ycixxaD1NYXRoLmZsb29yOygwLFphLm5yKSgicmV2ZXJzZSIsKGZ1bmN0aW9uKCl7Zm9yKHZhciByLHQ9dGhpcyxuPUtoKHQpLmxlbmd0aCxlPXFoKG4vMiksaT0wO2U+aTspcj10W2ldLHRbaSsrXT10Wy0tbl0sdFtuXT1yO3JldHVybiB0fSkpO3ZhciBKaD1uLFhoPWEsUWg9WmEsWmg9Sm4scmw9bGMsdGw9VHIsbmw9aSxlbD1KaC5SYW5nZUVycm9yLGlsPUpoLkludDhBcnJheSxvbD1pbCYmaWwucHJvdG90eXBlLHVsPW9sJiZvbC5zZXQsZmw9UWgucnIsYWw9UWgubnIsY2w9IW5sKChmdW5jdGlvbigpe3ZhciByPW5ldyBVaW50OENsYW1wZWRBcnJheSgyKTtyZXR1cm4gWGgodWwscix7bGVuZ3RoOjEsMDozfSwxKSwzIT09clsxXX0pKSxzbD1jbCYmUWguWCYmbmwoKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IGlsKDIpO3JldHVybiByLnNldCgxKSxyLnNldCgiMiIsMSksMCE9PXJbMF18fDIhPT1yWzFdfSkpO2FsKCJzZXQiLChmdW5jdGlvbihyKXtmbCh0aGlzKTt2YXIgdD1ybChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwxKSxuPXRsKHIpO2lmKGNsKXJldHVybiBYaCh1bCx0aGlzLG4sdCk7dmFyIGU9dGhpcy5sZW5ndGgsaT1aaChuKSxvPTA7aWYoaSt0PmUpdGhyb3cgZWwoIldyb25nIGxlbmd0aCIpO2Zvcig7aT5vOyl0aGlzW3Qrb109bltvKytdfSksIWNsfHxzbCk7dmFyIHZsPVMoW10uc2xpY2UpLGhsPUZ2LGxsPXZsLGRsPVphLnJyOygwLFphLm5yKSgic2xpY2UiLChmdW5jdGlvbihyLHQpe2Zvcih2YXIgbj1sbChkbCh0aGlzKSxyLHQpLGU9aGwodGhpcyksaT0wLG89bi5sZW5ndGgsdT1uZXcgZShvKTtvPmk7KXVbaV09bltpKytdO3JldHVybiB1fSksaSgoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNsaWNlKCl9KSkpO3ZhciB5bD1pcy5zb21lLHdsPVphLnJyOygwLFphLm5yKSgic29tZSIsKGZ1bmN0aW9uKHIpe3JldHVybiB5bCh3bCh0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgYmw9VXUscGw9TWF0aC5mbG9vcixnbD1mdW5jdGlvbihyLHQpe3ZhciBuPXIubGVuZ3RoLGU9cGwobi8yKTtyZXR1cm4gOD5uP21sKHIsdCk6U2wocixnbChibChyLDAsZSksdCksZ2woYmwocixlKSx0KSx0KX0sbWw9ZnVuY3Rpb24ocix0KXtmb3IodmFyIG4sZSxpPXIubGVuZ3RoLG89MTtpPm87KXtmb3IoZT1vLG49cltvXTtlJiZ0KHJbZS0xXSxuKT4wOylyW2VdPXJbLS1lXTtlIT09bysrJiYocltlXT1uKX1yZXR1cm4gcn0sU2w9ZnVuY3Rpb24ocix0LG4sZSl7Zm9yKHZhciBpPXQubGVuZ3RoLG89bi5sZW5ndGgsdT0wLGY9MDtpPnV8fG8+Zjspclt1K2ZdPWk+dSYmbz5mP2UodFt1XSxuW2ZdKT4wP25bZisrXTp0W3UrK106aT51P3RbdSsrXTpuW2YrK107cmV0dXJuIHJ9LEFsPWdsLGpsPXoubWF0Y2goL2ZpcmVmb3hcLyhcZCspL2kpLE9sPSEhamwmJitqbFsxXSxrbD0vTVNJRXxUcmlkZW50Ly50ZXN0KHopLEVsPXoubWF0Y2goL0FwcGxlV2ViS2l0XC8oXGQrKVwuLyksVGw9ISFFbCYmK0VsWzFdLHhsPVMsVWw9aSxNbD12cixJbD1BbCxMbD1PbCxQbD1rbCxfbD1YLFJsPVRsLEZsPVphLnJyLE5sPVphLm5yLENsPW4uVWludDE2QXJyYXksQmw9Q2wmJnhsKENsLnByb3RvdHlwZS5zb3J0KSxHbD0hKCFCbHx8VWwoKGZ1bmN0aW9uKCl7QmwobmV3IENsKDIpLG51bGwpfSkpJiZVbCgoZnVuY3Rpb24oKXtCbChuZXcgQ2woMikse30pfSkpKSxEbD0hIUJsJiYhVWwoKGZ1bmN0aW9uKCl7aWYoX2wpcmV0dXJuIDc0Pl9sO2lmKExsKXJldHVybiA2Nz5MbDtpZihQbClyZXR1cm4hMDtpZihSbClyZXR1cm4gNjAyPlJsO3ZhciByLHQsbj1uZXcgQ2woNTE2KSxlPUFycmF5KDUxNik7Zm9yKHI9MDs1MTY+cjtyKyspdD1yJTQsbltyXT01MTUtcixlW3JdPXItMip0KzM7Zm9yKEJsKG4sKGZ1bmN0aW9uKHIsdCl7cmV0dXJuKHIvNHwwKS0odC80fDApfSkpLHI9MDs1MTY+cjtyKyspaWYobltyXSE9PWVbcl0pcmV0dXJuITB9KSk7TmwoInNvcnQiLChmdW5jdGlvbihyKXtyZXR1cm4gdm9pZCAwIT09ciYmTWwociksRGw/QmwodGhpcyxyKTpJbChGbCh0aGlzKSxmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwIT09cj8rcih0LG4pfHwwOm4hPW4/LTE6dCE9dD8xOjA9PT10JiYwPT09bj8xL3Q+MCYmMD4xL24/MTotMTp0Pm59fShyKSl9KSwhRGx8fEdsKTt2YXIgVmw9S24sWWw9V24semw9RnYsV2w9WmEucnI7KDAsWmEubnIpKCJzdWJhcnJheSIsKGZ1bmN0aW9uKHIsdCl7dmFyIG49V2wodGhpcyksZT1uLmxlbmd0aCxpPVlsKHIsZSk7cmV0dXJuIG5ldyh6bChuKSkobi5idWZmZXIsbi5ieXRlT2Zmc2V0K2kqbi5CWVRFU19QRVJfRUxFTUVOVCxWbCgodm9pZCAwPT09dD9lOllsKHQsZSkpLWkpKX0pKTt2YXIgJGw9bWgsSGw9WmEsS2w9aSxxbD12bCxKbD1uLkludDhBcnJheSxYbD1IbC5ycixRbD1IbC5ucixabD1bXS50b0xvY2FsZVN0cmluZyxyZD0hIUpsJiZLbCgoZnVuY3Rpb24oKXtabC5jYWxsKG5ldyBKbCgxKSl9KSk7UWwoInRvTG9jYWxlU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gJGwoWmwscmQ/cWwoWGwodGhpcykpOlhsKHRoaXMpLHFsKGFyZ3VtZW50cykpfSksS2woKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IEpsKFsxLDJdKS50b0xvY2FsZVN0cmluZygpfSkpfHwhS2woKGZ1bmN0aW9uKCl7SmwucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpKTt2YXIgdGQ9WmEubnIsbmQ9aSxlZD1TLGlkPW4uVWludDhBcnJheSxvZD1pZCYmaWQucHJvdG90eXBlfHx7fSx1ZD1bXS50b1N0cmluZyxmZD1lZChbXS5qb2luKTtuZCgoZnVuY3Rpb24oKXt1ZC5jYWxsKHt9KX0pKSYmKHVkPWZ1bmN0aW9uKCl7cmV0dXJuIGZkKHRoaXMpfSk7dmFyIGFkPW9kLnRvU3RyaW5nIT11ZDt0ZCgidG9TdHJpbmciLHVkLGFkKTt2YXIgY2Qsc2QsdmQsaGQsbGQ9InByb2Nlc3MiPT1rKG4ucHJvY2VzcyksZGQ9VHlwZUVycm9yLHlkPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHopLHdkPW4sYmQ9bWgscGQ9YmMsZ2Q9RixtZD1NcixTZD1pLEFkPUVpLGpkPXZsLE9kPXV0LGtkPWZ1bmN0aW9uKHIsdCl7aWYodD5yKXRocm93IGRkKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiByfSxFZD15ZCxUZD1sZCx4ZD13ZC5zZXRJbW1lZGlhdGUsVWQ9d2QuY2xlYXJJbW1lZGlhdGUsTWQ9d2QucHJvY2VzcyxJZD13ZC52cixMZD13ZC5GdW5jdGlvbixQZD13ZC5NZXNzYWdlQ2hhbm5lbCxfZD13ZC5TdHJpbmcsUmQ9MCxGZD17fTt0cnl7Y2Q9d2QubG9jYXRpb259Y2F0Y2gocil7fXZhciBOZD1mdW5jdGlvbihyKXtpZihtZChGZCxyKSl7dmFyIHQ9RmRbcl07ZGVsZXRlIEZkW3JdLHQoKX19LENkPWZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbigpe05kKHIpfX0sQmQ9ZnVuY3Rpb24ocil7TmQoci5kYXRhKX0sR2Q9ZnVuY3Rpb24ocil7d2QucG9zdE1lc3NhZ2UoX2QociksY2QucHJvdG9jb2wrIi8vIitjZC5ob3N0KX07eGQmJlVkfHwoeGQ9ZnVuY3Rpb24ocil7a2QoYXJndW1lbnRzLmxlbmd0aCwxKTt2YXIgdD1nZChyKT9yOkxkKHIpLG49amQoYXJndW1lbnRzLDEpO3JldHVybiBGZFsrK1JkXT1mdW5jdGlvbigpe2JkKHQsdm9pZCAwLG4pfSxzZChSZCksUmR9LFVkPWZ1bmN0aW9uKHIpe2RlbGV0ZSBGZFtyXX0sVGQ/c2Q9ZnVuY3Rpb24ocil7TWQuaHIoQ2QocikpfTpJZCYmSWQubm93P3NkPWZ1bmN0aW9uKHIpe0lkLm5vdyhDZChyKSl9OlBkJiYhRWQ/KGhkPSh2ZD1uZXcgUGQpLnBvcnQyLHZkLnBvcnQxLm9ubWVzc2FnZT1CZCxzZD1wZChoZC5wb3N0TWVzc2FnZSxoZCkpOndkLmFkZEV2ZW50TGlzdGVuZXImJmdkKHdkLnBvc3RNZXNzYWdlKSYmIXdkLmxyJiZjZCYmImZpbGU6IiE9PWNkLnByb3RvY29sJiYhU2QoR2QpPyhzZD1HZCx3ZC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixCZCwhMSkpOnNkPSJvbnJlYWR5c3RhdGVjaGFuZ2UiaW4gT2QoInNjcmlwdCIpP2Z1bmN0aW9uKHIpe0FkLmFwcGVuZENoaWxkKE9kKCJzY3JpcHQiKSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7QWQucmVtb3ZlQ2hpbGQodGhpcyksTmQocil9fTpmdW5jdGlvbihyKXtzZXRUaW1lb3V0KENkKHIpLDApfSk7dmFyIERkLFZkLFlkLHpkLFdkLCRkLEhkLEtkLHFkPXtzZXQ6eGQsY2xlYXI6VWR9LEpkPW4sWGQ9L2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHopJiZ2b2lkIDAhPT1KZC5kcixRZD0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHopLFpkPW4scnk9YmMsdHk9ZS5mLG55PXFkLnNldCxleT15ZCxpeT1YZCxveT1RZCx1eT1sZCxmeT1aZC5NdXRhdGlvbk9ic2VydmVyfHxaZC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGF5PVpkLmRvY3VtZW50LGN5PVpkLnByb2Nlc3Msc3k9WmQuUHJvbWlzZSx2eT10eShaZCwicXVldWVNaWNyb3Rhc2siKSxoeT12eSYmdnkudmFsdWU7aHl8fChEZD1mdW5jdGlvbigpe3ZhciByLHQ7Zm9yKHV5JiYocj1jeS5kb21haW4pJiZyLnlyKCk7VmQ7KXt0PVZkLndyLFZkPVZkLm5leHQ7dHJ5e3QoKX1jYXRjaChyKXt0aHJvdyBWZD96ZCgpOllkPXZvaWQgMCxyfX1ZZD12b2lkIDAsciYmci5icigpfSxleXx8dXl8fG95fHwhZnl8fCFheT8haXkmJnN5JiZzeS5yZXNvbHZlPygoSGQ9c3kucmVzb2x2ZSh2b2lkIDApKS5jb25zdHJ1Y3Rvcj1zeSxLZD1yeShIZC50aGVuLEhkKSx6ZD1mdW5jdGlvbigpe0tkKERkKX0pOnV5P3pkPWZ1bmN0aW9uKCl7Y3kuaHIoRGQpfToobnk9cnkobnksWmQpLHpkPWZ1bmN0aW9uKCl7bnkoRGQpfSk6KFdkPSEwLCRkPWF5LmNyZWF0ZVRleHROb2RlKCIiKSxuZXcgZnkoRGQpLm9ic2VydmUoJGQse2NoYXJhY3RlckRhdGE6ITB9KSx6ZD1mdW5jdGlvbigpeyRkLmRhdGE9V2Q9IVdkfSkpO3ZhciBseT1oeXx8ZnVuY3Rpb24ocil7dmFyIHQ9e3dyOnIsbmV4dDp2b2lkIDB9O1lkJiYoWWQubmV4dD10KSxWZHx8KFZkPXQsemQoKSksWWQ9dH0sZHk9bix5eT1mdW5jdGlvbihyKXt0cnl7cmV0dXJue2Vycm9yOiExLHZhbHVlOnIoKX19Y2F0Y2gocil7cmV0dXJue2Vycm9yOiEwLHZhbHVlOnJ9fX0sd3k9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnByPW51bGx9O3d5LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHIpe3ZhciB0PXtpdGVtOnIsbmV4dDpudWxsfTt0aGlzLmhlYWQ/dGhpcy5wci5uZXh0PXQ6dGhpcy5oZWFkPXQsdGhpcy5wcj10fSxnZXQ6ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmhlYWQ7aWYocilyZXR1cm4gdGhpcy5oZWFkPXIubmV4dCx0aGlzLnByPT09ciYmKHRoaXMucHI9bnVsbCksci5pdGVtfX07dmFyIGJ5PXd5LHB5PW4uUHJvbWlzZSxneT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCIhPXR5cGVvZiBEZW5vLG15PW4sU3k9cHksQXk9RixqeT1JZSxPeT1IdCxreT0kcixFeT1neSxUeT1YO1N5JiZTeS5wcm90b3R5cGU7dmFyIHh5PWt5KCJzcGVjaWVzIiksVXk9ITEsTXk9QXkobXkuUHJvbWlzZVJlamVjdGlvbkV2ZW50KSxJeT1qeSgiUHJvbWlzZSIsKGZ1bmN0aW9uKCl7dmFyIHI9T3koU3kpLHQ9ciE9PVN5KyIiO2lmKCF0JiY2Nj09PVR5KXJldHVybiEwO2lmKFR5Pj01MSYmL25hdGl2ZSBjb2RlLy50ZXN0KHIpKXJldHVybiExO3ZhciBuPW5ldyBTeSgoZnVuY3Rpb24ocil7cigxKX0pKSxlPWZ1bmN0aW9uKHIpe3IoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtyZXR1cm4obi5jb25zdHJ1Y3Rvcj17fSlbeHldPWUsIShVeT1uLnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBlKXx8IXQmJkV5JiYhTXl9KSksTHk9e2dyOkl5LG1yOk15LFNyOlV5fSxQeT17fSxfeT12cixSeT1mdW5jdGlvbihyKXt2YXIgdCxuO3RoaXMucHJvbWlzZT1uZXcgcigoZnVuY3Rpb24ocixlKXtpZih2b2lkIDAhPT10fHx2b2lkIDAhPT1uKXRocm93IFR5cGVFcnJvcigiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTt0PXIsbj1lfSkpLHRoaXMucmVzb2x2ZT1feSh0KSx0aGlzLnJlamVjdD1feShuKX07UHkuZj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IFJ5KHIpfTt2YXIgRnksTnksQ3ksQnk9QmUsR3k9bGQsRHk9bixWeT1hLFl5PUZuLHp5PXhvLFd5PXdvLCR5PWNzLEh5PXZyLEt5PUYscXk9QyxKeT11dSxYeT1xZixReT1xZC5zZXQsWnk9bHkscnc9eXksdHc9Ynksbnc9bW4sZXc9cHksaXc9UHksb3c9THkuZ3IsdXc9THkubXIsZnc9THkuU3IsYXc9bncuVSgiUHJvbWlzZSIpLGN3PW53LnNldCxzdz1ldyYmZXcucHJvdG90eXBlLHZ3PWV3LGh3PXN3LGx3PUR5LlR5cGVFcnJvcixkdz1EeS5kb2N1bWVudCx5dz1EeS5wcm9jZXNzLHd3PWl3LmYsYnc9d3cscHc9ISEoZHcmJmR3LmNyZWF0ZUV2ZW50JiZEeS5kaXNwYXRjaEV2ZW50KSxndz1mdW5jdGlvbihyKXt2YXIgdDtyZXR1cm4hKCFxeShyKXx8IUt5KHQ9ci50aGVuKSkmJnR9LG13PWZ1bmN0aW9uKHIsdCl7dmFyIG4sZSxpLG89dC52YWx1ZSx1PTE9PXQuc3RhdGUsZj11P3Iub2s6ci5BcixhPXIucmVzb2x2ZSxjPXIucmVqZWN0LHM9ci5kb21haW47dHJ5e2Y/KHV8fCgyPT09dC5qciYma3codCksdC5qcj0xKSwhMD09PWY/bj1vOihzJiZzLmJyKCksbj1mKG8pLHMmJihzLnlyKCksaT0hMCkpLG49PT1yLnByb21pc2U/YyhsdygiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKTooZT1ndyhuKSk/VnkoZSxuLGEsYyk6YShuKSk6YyhvKX1jYXRjaChyKXtzJiYhaSYmcy55cigpLGMocil9fSxTdz1mdW5jdGlvbihyLHQpe3IuT3J8fChyLk9yPSEwLFp5KChmdW5jdGlvbigpe2Zvcih2YXIgbixlPXIua3I7bj1lLmdldCgpOyltdyhuLHIpO3IuT3I9ITEsdCYmIXIuanImJmp3KHIpfSkpKX0sQXc9ZnVuY3Rpb24ocix0LG4pe3ZhciBlLGk7cHc/KChlPWR3LmNyZWF0ZUV2ZW50KCJFdmVudCIpKS5wcm9taXNlPXQsZS5yZWFzb249bixlLmluaXRFdmVudChyLCExLCEwKSxEeS5kaXNwYXRjaEV2ZW50KGUpKTplPXtwcm9taXNlOnQscmVhc29uOm59LCF1dyYmKGk9RHlbIm9uIityXSk/aShlKToidW5oYW5kbGVkcmVqZWN0aW9uIj09PXImJmZ1bmN0aW9uKHIsdCl7dmFyIG49ZHkuY29uc29sZTtuJiZuLmVycm9yJiYoMT09YXJndW1lbnRzLmxlbmd0aD9uLmVycm9yKHIpOm4uZXJyb3Iocix0KSl9KCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iLG4pfSxqdz1mdW5jdGlvbihyKXtWeShReSxEeSwoZnVuY3Rpb24oKXt2YXIgdCxuPXIuayxlPXIudmFsdWU7aWYoT3cocikmJih0PXJ3KChmdW5jdGlvbigpe0d5P3l3LkVyKCJ1bmhhbmRsZWRSZWplY3Rpb24iLGUsbik6QXcoInVuaGFuZGxlZHJlamVjdGlvbiIsbixlKX0pKSxyLmpyPUd5fHxPdyhyKT8yOjEsdC5lcnJvcikpdGhyb3cgdC52YWx1ZX0pKX0sT3c9ZnVuY3Rpb24ocil7cmV0dXJuIDEhPT1yLmpyJiYhci5wYXJlbnR9LGt3PWZ1bmN0aW9uKHIpe1Z5KFF5LER5LChmdW5jdGlvbigpe3ZhciB0PXIuaztHeT95dy5FcigicmVqZWN0aW9uSGFuZGxlZCIsdCk6QXcoInJlamVjdGlvbmhhbmRsZWQiLHQsci52YWx1ZSl9KSl9LEV3PWZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cih0LGUsbil9fSxUdz1mdW5jdGlvbihyLHQsbil7ci5kb25lfHwoci5kb25lPSEwLG4mJihyPW4pLHIudmFsdWU9dCxyLnN0YXRlPTIsU3cociwhMCkpfSx4dz1mdW5jdGlvbihyLHQsbil7aWYoIXIuZG9uZSl7ci5kb25lPSEwLG4mJihyPW4pO3RyeXtpZihyLms9PT10KXRocm93IGx3KCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpO3ZhciBlPWd3KHQpO2U/WnkoKGZ1bmN0aW9uKCl7dmFyIG49e2RvbmU6ITF9O3RyeXtWeShlLHQsRXcoeHcsbixyKSxFdyhUdyxuLHIpKX1jYXRjaCh0KXtUdyhuLHQscil9fSkpOihyLnZhbHVlPXQsci5zdGF0ZT0xLFN3KHIsITEpKX1jYXRjaCh0KXtUdyh7ZG9uZTohMX0sdCxyKX19fTtpZihvdyYmKGh3PSh2dz1mdW5jdGlvbihyKXtKeSh0aGlzLGh3KSxIeShyKSxWeShGeSx0aGlzKTt2YXIgdD1hdyh0aGlzKTt0cnl7cihFdyh4dyx0KSxFdyhUdyx0KSl9Y2F0Y2gocil7VHcodCxyKX19KS5wcm90b3R5cGUsKEZ5PWZ1bmN0aW9uKCl7Y3codGhpcyx7dHlwZToiUHJvbWlzZSIsZG9uZTohMSxPcjohMSxwYXJlbnQ6ITEsa3I6bmV3IHR3LGpyOiExLHN0YXRlOjAsdmFsdWU6dm9pZCAwfSl9KS5wcm90b3R5cGU9WXkoaHcsInRoZW4iLChmdW5jdGlvbihyLHQpe3ZhciBuPWF3KHRoaXMpLGU9d3coWHkodGhpcyx2dykpO3JldHVybiBuLnBhcmVudD0hMCxlLm9rPSFLeShyKXx8cixlLkFyPUt5KHQpJiZ0LGUuZG9tYWluPUd5P3l3LmRvbWFpbjp2b2lkIDAsMD09bi5zdGF0ZT9uLmtyLmFkZChlKTpaeSgoZnVuY3Rpb24oKXttdyhlLG4pfSkpLGUucHJvbWlzZX0pKSxOeT1mdW5jdGlvbigpe3ZhciByPW5ldyBGeSx0PWF3KHIpO3RoaXMucHJvbWlzZT1yLHRoaXMucmVzb2x2ZT1Fdyh4dyx0KSx0aGlzLnJlamVjdD1FdyhUdyx0KX0saXcuZj13dz1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZ3fHx2b2lkIDA9PT1yP25ldyBOeShyKTpidyhyKX0sS3koZXcpJiZzdyE9PU9iamVjdC5wcm90b3R5cGUpKXtDeT1zdy50aGVuLGZ3fHxZeShzdywidGhlbiIsKGZ1bmN0aW9uKHIsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IHZ3KChmdW5jdGlvbihyLHQpe1Z5KEN5LG4scix0KX0pKS50aGVuKHIsdCl9KSx7UDohMH0pO3RyeXtkZWxldGUgc3cuY29uc3RydWN0b3J9Y2F0Y2gocil7fXp5JiZ6eShzdyxodyl9Qnkoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCx3cmFwOiEwLEc6b3d9LHtQcm9taXNlOnZ3fSksV3kodncsIlByb21pc2UiLCExKSwkeSgiUHJvbWlzZSIpO3ZhciBVdz1hLE13PWp0LEl3PWxyLEx3PWZ1bmN0aW9uKHIsdCxuKXt2YXIgZSxpO013KHIpO3RyeXtpZighKGU9SXcociwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyBuO3JldHVybiBufWU9VXcoZSxyKX1jYXRjaChyKXtpPSEwLGU9cn1pZigidGhyb3ciPT09dCl0aHJvdyBuO2lmKGkpdGhyb3cgZTtyZXR1cm4gTXcoZSksbn0sUHc9YmMsX3c9YSxSdz1qdCxGdz1mcixOdz1QYyxDdz1KbixCdz1ZLEd3PVVjLER3PUFjLFZ3PUx3LFl3PVR5cGVFcnJvcix6dz1mdW5jdGlvbihyLHQpe3RoaXMuc3RvcHBlZD1yLHRoaXMucmVzdWx0PXR9LFd3PXp3LnByb3RvdHlwZSwkdz1mdW5jdGlvbihyLHQsbil7dmFyIGUsaSxvLHUsZixhLGMscz1uJiZuLlRyLHY9ISghbnx8IW4uVXIpLGg9ISghbnx8IW4uTXIpLGw9ISghbnx8IW4uSXIpLGQ9UHcodCxzKSx5PWZ1bmN0aW9uKHIpe3JldHVybiBlJiZWdyhlLCJub3JtYWwiLHIpLG5ldyB6dyghMCxyKX0sdz1mdW5jdGlvbihyKXtyZXR1cm4gdj8oUncociksbD9kKHJbMF0sclsxXSx5KTpkKHJbMF0sclsxXSkpOmw/ZChyLHkpOmQocil9O2lmKGgpZT1yO2Vsc2V7aWYoIShpPUR3KHIpKSl0aHJvdyBZdyhGdyhyKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKE53KGkpKXtmb3Iobz0wLHU9Q3cocik7dT5vO28rKylpZigoZj13KHJbb10pKSYmQncoV3csZikpcmV0dXJuIGY7cmV0dXJuIG5ldyB6dyghMSl9ZT1HdyhyLGkpfWZvcihhPWUubmV4dDshKGM9X3coYSxlKSkuZG9uZTspe3RyeXtmPXcoYy52YWx1ZSl9Y2F0Y2gocil7VncoZSwidGhyb3ciLHIpfWlmKCJvYmplY3QiPT10eXBlb2YgZiYmZiYmQncoV3csZikpcmV0dXJuIGZ9cmV0dXJuIG5ldyB6dyghMSl9LEh3PXB5LEt3PUx5LmdyfHwhcGEoKGZ1bmN0aW9uKHIpe0h3LmFsbChyKS50aGVuKHZvaWQgMCwoZnVuY3Rpb24oKXt9KSl9KSkscXc9YSxKdz12cixYdz1QeSxRdz15eSxadz0kdztCZSh7dGFyZ2V0OiJQcm9taXNlIixDOiEwLEc6S3d9LHthbGw6ZnVuY3Rpb24ocil7dmFyIHQ9dGhpcyxuPVh3LmYodCksZT1uLnJlc29sdmUsaT1uLnJlamVjdCxvPVF3KChmdW5jdGlvbigpe3ZhciBuPUp3KHQucmVzb2x2ZSksbz1bXSx1PTAsZj0xO1p3KHIsKGZ1bmN0aW9uKHIpe3ZhciBhPXUrKyxjPSExO2YrKyxxdyhuLHQscikudGhlbigoZnVuY3Rpb24ocil7Y3x8KGM9ITAsb1thXT1yLC0tZnx8ZShvKSl9KSxpKX0pKSwtLWZ8fGUobyl9KSk7cmV0dXJuIG8uZXJyb3ImJmkoby52YWx1ZSksbi5wcm9taXNlfX0pO3ZhciByYj1CZSx0Yj1MeS5ncixuYj1weSxlYj1WLGliPUYsb2I9Rm4sdWI9bmImJm5iLnByb3RvdHlwZTtpZihyYih7dGFyZ2V0OiJQcm9taXNlIixWOiEwLEc6dGIsTHI6ITB9LHtjYXRjaDpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCxyKX19KSxpYihuYikpe3ZhciBmYj1lYigiUHJvbWlzZSIpLnByb3RvdHlwZS5jYXRjaDt1Yi5jYXRjaCE9PWZiJiZvYih1YiwiY2F0Y2giLGZiLHtQOiEwfSl9dmFyIGFiPWEsY2I9dnIsc2I9UHksdmI9eXksaGI9JHc7QmUoe3RhcmdldDoiUHJvbWlzZSIsQzohMCxHOkt3fSx7cmFjZTpmdW5jdGlvbihyKXt2YXIgdD10aGlzLG49c2IuZih0KSxlPW4ucmVqZWN0LGk9dmIoKGZ1bmN0aW9uKCl7dmFyIGk9Y2IodC5yZXNvbHZlKTtoYihyLChmdW5jdGlvbihyKXthYihpLHQscikudGhlbihuLnJlc29sdmUsZSl9KSl9KSk7cmV0dXJuIGkuZXJyb3ImJmUoaS52YWx1ZSksbi5wcm9taXNlfX0pO3ZhciBsYj1hLGRiPVB5O0JlKHt0YXJnZXQ6IlByb21pc2UiLEM6ITAsRzpMeS5ncn0se3JlamVjdDpmdW5jdGlvbihyKXt2YXIgdD1kYi5mKHRoaXMpO3JldHVybiBsYih0LnJlamVjdCx2b2lkIDAsciksdC5wcm9taXNlfX0pO3ZhciB5Yj1qdCx3Yj1DLGJiPVB5LHBiPUJlLGdiPUx5LmdyO1YoIlByb21pc2UiKSxwYih7dGFyZ2V0OiJQcm9taXNlIixDOiEwLEc6Z2J9LHtyZXNvbHZlOmZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbihyLHQpe2lmKHliKHIpLHdiKHQpJiZ0LmNvbnN0cnVjdG9yPT09cilyZXR1cm4gdDt2YXIgbj1iYi5mKHIpO3JldHVybigwLG4ucmVzb2x2ZSkodCksbi5wcm9taXNlfSh0aGlzLHIpfX0pO3ZhciBtYj17fSxTYj1rLEFiPVIsamI9Tm4uZixPYj1VdSxrYj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdO21iLmY9ZnVuY3Rpb24ocil7cmV0dXJuIGtiJiYiV2luZG93Ij09U2Iocik/ZnVuY3Rpb24ocil7dHJ5e3JldHVybiBqYihyKX1jYXRjaChyKXtyZXR1cm4gT2Ioa2IpfX0ocik6amIoQWIocikpfTt2YXIgRWI9e30sVGI9JHI7RWIuZj1UYjt2YXIgeGI9bixVYj1NcixNYj1FYixJYj1wdC5mLExiPWZ1bmN0aW9uKHIpe3ZhciB0PXhiLlN5bWJvbHx8KHhiLlN5bWJvbD17fSk7VWIodCxyKXx8SWIodCxyLHt2YWx1ZTpNYi5mKHIpfSl9LFBiPWEsX2I9VixSYj0kcixGYj1GbixOYj1CZSxDYj1uLEJiPWEsR2I9UyxEYj1vLFZiPVosWWI9aSx6Yj1NcixXYj1ZLCRiPWp0LEhiPVIsS2I9bnQscWI9UWUsSmI9eSxYYj1DaSxRYj1waSxaYj1ObixycD1tYix0cD12ZSxucD1lLGVwPXB0LGlwPXlpLG9wPWMsdXA9Rm4sZnA9cHIuZXhwb3J0cyxhcD1ubixjcD1ScixzcD0kcix2cD1FYixocD1MYixscD13byxkcD1tbix5cD1pcy5mb3JFYWNoLHdwPXRuKCJoaWRkZW4iKSxicD1kcC5zZXQscHA9ZHAuVSgiU3ltYm9sIiksZ3A9T2JqZWN0LnByb3RvdHlwZSxtcD1DYi5TeW1ib2wsU3A9bXAmJm1wLnByb3RvdHlwZSxBcD1DYi5UeXBlRXJyb3IsanA9Q2IuUHIsT3A9bnAuZixrcD1lcC5mLEVwPXJwLmYsVHA9b3AuZix4cD1HYihbXS5wdXNoKSxVcD1mcCgic3ltYm9scyIpLE1wPWZwKCJvcC1zeW1ib2xzIiksSXA9ZnAoIndrcyIpLExwPSFqcHx8IWpwLnByb3RvdHlwZXx8IWpwLnByb3RvdHlwZS5fcixQcD1EYiYmWWIoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPVhiKGtwKHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtwKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pKT9mdW5jdGlvbihyLHQsbil7dmFyIGU9T3AoZ3AsdCk7ZSYmZGVsZXRlIGdwW3RdLGtwKHIsdCxuKSxlJiZyIT09Z3AmJmtwKGdwLHQsZSl9OmtwLF9wPWZ1bmN0aW9uKHIsdCl7dmFyIG49VXBbcl09WGIoU3ApO3JldHVybiBicChuLHt0eXBlOiJTeW1ib2wiLHRhZzpyLGRlc2NyaXB0aW9uOnR9KSxEYnx8KG4uZGVzY3JpcHRpb249dCksbn0sUnA9ZnVuY3Rpb24ocix0LG4pe3I9PT1ncCYmUnAoTXAsdCxuKSwkYihyKTt2YXIgZT1LYih0KTtyZXR1cm4gJGIobiksemIoVXAsZSk/KG4udD8oemIocix3cCkmJnJbd3BdW2VdJiYoclt3cF1bZV09ITEpLG49WGIobix7dDpKYigwLCExKX0pKTooemIocix3cCl8fGtwKHIsd3AsSmIoMSx7fSkpLHJbd3BdW2VdPSEwKSxQcChyLGUsbikpOmtwKHIsZSxuKX0sRnA9ZnVuY3Rpb24ocix0KXskYihyKTt2YXIgbj1IYih0KSxlPVFiKG4pLmNvbmNhdChHcChuKSk7cmV0dXJuIHlwKGUsKGZ1bmN0aW9uKHQpe0RiJiYhQmIoTnAsbix0KXx8UnAocix0LG5bdF0pfSkpLHJ9LE5wPWZ1bmN0aW9uKHIpe3ZhciB0PUtiKHIpLG49QmIoVHAsdGhpcyx0KTtyZXR1cm4hKHRoaXM9PT1ncCYmemIoVXAsdCkmJiF6YihNcCx0KSkmJighKG58fCF6Yih0aGlzLHQpfHwhemIoVXAsdCl8fHpiKHRoaXMsd3ApJiZ0aGlzW3dwXVt0XSl8fG4pfSxDcD1mdW5jdGlvbihyLHQpe3ZhciBuPUhiKHIpLGU9S2IodCk7aWYobiE9PWdwfHwhemIoVXAsZSl8fHpiKE1wLGUpKXt2YXIgaT1PcChuLGUpO3JldHVybiFpfHwhemIoVXAsZSl8fHpiKG4sd3ApJiZuW3dwXVtlXXx8KGkudD0hMCksaX19LEJwPWZ1bmN0aW9uKHIpe3ZhciB0PUVwKEhiKHIpKSxuPVtdO3JldHVybiB5cCh0LChmdW5jdGlvbihyKXt6YihVcCxyKXx8emIoYXAscil8fHhwKG4scil9KSksbn0sR3A9ZnVuY3Rpb24ocil7dmFyIHQ9cj09PWdwLG49RXAodD9NcDpIYihyKSksZT1bXTtyZXR1cm4geXAobiwoZnVuY3Rpb24ocil7IXpiKFVwLHIpfHx0JiYhemIoZ3Ascil8fHhwKGUsVXBbcl0pfSkpLGV9O1ZifHwodXAoU3A9KG1wPWZ1bmN0aW9uKCl7aWYoV2IoU3AsdGhpcykpdGhyb3cgQXAoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciByPWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9xYihhcmd1bWVudHNbMF0pOnZvaWQgMCx0PWNwKHIpLG49ZnVuY3Rpb24ocil7dGhpcz09PWdwJiZCYihuLE1wLHIpLHpiKHRoaXMsd3ApJiZ6Yih0aGlzW3dwXSx0KSYmKHRoaXNbd3BdW3RdPSExKSxQcCh0aGlzLHQsSmIoMSxyKSl9O3JldHVybiBEYiYmTHAmJlBwKGdwLHQse2k6ITAsc2V0Om59KSxfcCh0LHIpfSkucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBwKHRoaXMpLnRhZ30pKSx1cChtcCwid2l0aG91dFNldHRlciIsKGZ1bmN0aW9uKHIpe3JldHVybiBfcChjcChyKSxyKX0pKSxvcC5mPU5wLGVwLmY9UnAsaXAuZj1GcCxucC5mPUNwLFpiLmY9cnAuZj1CcCx0cC5mPUdwLHZwLmY9ZnVuY3Rpb24ocil7cmV0dXJuIF9wKHNwKHIpLHIpfSxEYiYmKGtwKFNwLCJkZXNjcmlwdGlvbiIse2k6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHBwKHRoaXMpLmRlc2NyaXB0aW9ufX0pLHVwKGdwLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsTnAse1A6ITB9KSkpLE5iKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxHOiFWYixoOiFWYn0se1N5bWJvbDptcH0pLHlwKFFiKElwKSwoZnVuY3Rpb24ocil7aHAocil9KSksTmIoe3RhcmdldDoiU3ltYm9sIixDOiEwLEc6IVZifSx7UnI6ZnVuY3Rpb24oKXtMcD0hMH0sRnI6ZnVuY3Rpb24oKXtMcD0hMX19KSxOYih7dGFyZ2V0OiJPYmplY3QiLEM6ITAsRzohVmIsaDohRGJ9LHtjcmVhdGU6ZnVuY3Rpb24ocix0KXtyZXR1cm4gdm9pZCAwPT09dD9YYihyKTpGcChYYihyKSx0KX0sZGVmaW5lUHJvcGVydHk6UnAsZGVmaW5lUHJvcGVydGllczpGcCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6Q3B9KSxOYih7dGFyZ2V0OiJPYmplY3QiLEM6ITAsRzohVmJ9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOkJwfSksZnVuY3Rpb24oKXt2YXIgcj1fYigiU3ltYm9sIiksdD1yJiZyLnByb3RvdHlwZSxuPXQmJnQudmFsdWVPZixlPVJiKCJ0b1ByaW1pdGl2ZSIpO3QmJiF0W2VdJiZGYih0LGUsKGZ1bmN0aW9uKCl7cmV0dXJuIFBiKG4sdGhpcyl9KSx7TDoxfSl9KCksbHAobXAsIlN5bWJvbCIpLGFwW3dwXT0hMDt2YXIgRHA9WiYmISFTeW1ib2wuZm9yJiYhIVN5bWJvbC5rZXlGb3IsVnA9QmUsWXA9Vix6cD1NcixXcD1RZSwkcD1wci5leHBvcnRzLEhwPURwLEtwPSRwKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IikscXA9JHAoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtWcCh7dGFyZ2V0OiJTeW1ib2wiLEM6ITAsRzohSHB9LHtmb3I6ZnVuY3Rpb24ocil7dmFyIHQ9V3Aocik7aWYoenAoS3AsdCkpcmV0dXJuIEtwW3RdO3ZhciBuPVlwKCJTeW1ib2wiKSh0KTtyZXR1cm4gS3BbdF09bixxcFtuXT10LG59fSk7dmFyIEpwPUJlLFhwPU1yLFFwPW9yLFpwPWZyLHJnPURwLHRnPSgwLHByLmV4cG9ydHMpKCJzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Iik7SnAoe3RhcmdldDoiU3ltYm9sIixDOiEwLEc6IXJnfSx7a2V5Rm9yOmZ1bmN0aW9uKHIpe2lmKCFRcChyKSl0aHJvdyBUeXBlRXJyb3IoWnAocikrIiBpcyBub3QgYSBzeW1ib2wiKTtpZihYcCh0ZyxyKSlyZXR1cm4gdGdbcl19fSk7dmFyIG5nPUJlLGVnPVYsaWc9bWgsb2c9YSx1Zz1TLGZnPWksYWc9emMsY2c9RixzZz1DLHZnPW9yLGhnPXZsLGxnPVosZGc9ZWcoIkpTT04iLCJzdHJpbmdpZnkiKSx5Zz11ZygvLi8uZXhlYyksd2c9dWcoIiIuY2hhckF0KSxiZz11ZygiIi5jaGFyQ29kZUF0KSxwZz11ZygiIi5yZXBsYWNlKSxnZz11ZygxLi50b1N0cmluZyksbWc9L1tcdUQ4MDAtXHVERkZGXS9nLFNnPS9eW1x1RDgwMC1cdURCRkZdJC8sQWc9L15bXHVEQzAwLVx1REZGRl0kLyxqZz0hbGd8fGZnKChmdW5jdGlvbigpe3ZhciByPWVnKCJTeW1ib2wiKSgpO3JldHVybiJbbnVsbF0iIT1kZyhbcl0pfHwie30iIT1kZyh7YTpyfSl8fCJ7fSIhPWRnKE9iamVjdChyKSl9KSksT2c9ZmcoKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09ZGcoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PWRnKCJcdWRlYWQiKX0pKSxrZz1mdW5jdGlvbihyLHQpe3ZhciBuPWhnKGFyZ3VtZW50cyksZT10O2lmKChzZyh0KXx8dm9pZCAwIT09cikmJiF2ZyhyKSlyZXR1cm4gYWcodCl8fCh0PWZ1bmN0aW9uKHIsdCl7aWYoY2coZSkmJih0PW9nKGUsdGhpcyxyLHQpKSwhdmcodCkpcmV0dXJuIHR9KSxuWzFdPXQsaWcoZGcsbnVsbCxuKX0sRWc9ZnVuY3Rpb24ocix0LG4pe3ZhciBlPXdnKG4sdC0xKSxpPXdnKG4sdCsxKTtyZXR1cm4geWcoU2cscikmJiF5ZyhBZyxpKXx8eWcoQWcscikmJiF5ZyhTZyxlKT8iXFx1IitnZyhiZyhyLDApLDE2KTpyfTtkZyYmbmcoe3RhcmdldDoiSlNPTiIsQzohMCxMOjMsRzpqZ3x8T2d9LHtzdHJpbmdpZnk6ZnVuY3Rpb24ocix0LG4pe3ZhciBlPWhnKGFyZ3VtZW50cyksaT1pZyhqZz9rZzpkZyxudWxsLGUpO3JldHVybiBPZyYmInN0cmluZyI9PXR5cGVvZiBpP3BnKGksbWcsRWcpOml9fSk7dmFyIFRnPXZlLHhnPVRyO0JlKHt0YXJnZXQ6Ik9iamVjdCIsQzohMCxHOiFafHxpKChmdW5jdGlvbigpe1RnLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24ocil7dmFyIHQ9VGcuZjtyZXR1cm4gdD90KHhnKHIpKTpbXX19KTt2YXIgVWc9QmUsTWc9byxJZz1uLExnPVMsUGc9TXIsX2c9RixSZz1ZLEZnPVFlLE5nPXB0LmYsQ2c9QWUsQmc9SWcuU3ltYm9sLEdnPUJnJiZCZy5wcm90b3R5cGU7aWYoTWcmJl9nKEJnKSYmKCEoImRlc2NyaXB0aW9uImluIEdnKXx8dm9pZCAwIT09QmcoKS5kZXNjcmlwdGlvbikpe3ZhciBEZz17fSxWZz1mdW5jdGlvbigpe3ZhciByPTE+YXJndW1lbnRzLmxlbmd0aHx8dm9pZCAwPT09YXJndW1lbnRzWzBdP3ZvaWQgMDpGZyhhcmd1bWVudHNbMF0pLHQ9UmcoR2csdGhpcyk/bmV3IEJnKHIpOnZvaWQgMD09PXI/QmcoKTpCZyhyKTtyZXR1cm4iIj09PXImJihEZ1t0XT0hMCksdH07Q2coVmcsQmcpLFZnLnByb3RvdHlwZT1HZyxHZy5jb25zdHJ1Y3Rvcj1WZzt2YXIgWWc9QmcoInRlc3QiKSsiIj09IlN5bWJvbCh0ZXN0KSIsemc9TGcoR2cudG9TdHJpbmcpLFdnPUxnKEdnLnZhbHVlT2YpLCRnPS9eU3ltYm9sXCgoLiopXClbXildKyQvLEhnPUxnKCIiLnJlcGxhY2UpLEtnPUxnKCIiLnNsaWNlKTtOZyhHZywiZGVzY3JpcHRpb24iLHtpOiEwLGdldDpmdW5jdGlvbigpe3ZhciByPVdnKHRoaXMpLHQ9emcocik7aWYoUGcoRGcscikpcmV0dXJuIiI7dmFyIG49WWc/S2codCw3LC0xKTpIZyh0LCRnLCIkMSIpO3JldHVybiIiPT09bj92b2lkIDA6bn19KSxVZyh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLEc6ITB9LHtTeW1ib2w6Vmd9KX1MYigiaXRlcmF0b3IiKTt2YXIgcWc9UyxKZz1EbixYZz1RZSxRZz1MLFpnPXFnKCIiLmNoYXJBdCkscm09cWcoIiIuY2hhckNvZGVBdCksdG09cWcoIiIuc2xpY2UpLG5tPWZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBlLGksbz1YZyhRZyh0KSksdT1KZyhuKSxmPW8ubGVuZ3RoO3JldHVybiAwPnV8fHU+PWY/cj8iIjp2b2lkIDA6NTUyOTY+KGU9cm0obyx1KSl8fGU+NTYzMTl8fHUrMT09PWZ8fDU2MzIwPihpPXJtKG8sdSsxKSl8fGk+NTczNDM/cj9aZyhvLHUpOmU6cj90bShvLHUsdSsyKTppLTU2MzIwKyhlLTU1Mjk2PDwxMCkrNjU1MzZ9fSxlbT0obm0oITEpLG5tKCEwKSksaW09UWUsb209bW4sdW09em8sZm09b20uc2V0LGFtPW9tLlUoIlN0cmluZyBJdGVyYXRvciIpO3VtKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24ocil7Zm0odGhpcyx7dHlwZToiU3RyaW5nIEl0ZXJhdG9yIixzdHJpbmc6aW0ociksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHIsdD1hbSh0aGlzKSxuPXQuc3RyaW5nLGU9dC5pbmRleDtyZXR1cm4gZTxuLmxlbmd0aD8ocj1lbShuLGUpLHQuaW5kZXgrPXIubGVuZ3RoLHt2YWx1ZTpyLGRvbmU6ITF9KTp7dmFsdWU6dm9pZCAwLGRvbmU6ITB9fSkpO3ZhciBjbT17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH0sc209dXQoInNwYW4iKS5jbGFzc0xpc3Qsdm09c20mJnNtLmNvbnN0cnVjdG9yJiZzbS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsaG09dm09PT1PYmplY3QucHJvdG90eXBlP3ZvaWQgMDp2bSxsbT1uLGRtPWNtLHltPWhtLHdtPXJ1LGJtPV90LHBtPSRyLGdtPXBtKCJpdGVyYXRvciIpLG1tPXBtKCJ0b1N0cmluZ1RhZyIpLFNtPXdtLnZhbHVlcyxBbT1mdW5jdGlvbihyLHQpe2lmKHIpe2lmKHJbZ21dIT09U20pdHJ5e2JtKHIsZ20sU20pfWNhdGNoKHQpe3JbZ21dPVNtfWlmKHJbbW1dfHxibShyLG1tLHQpLGRtW3RdKWZvcih2YXIgbiBpbiB3bSlpZihyW25dIT09d21bbl0pdHJ5e2JtKHIsbix3bVtuXSl9Y2F0Y2godCl7cltuXT13bVtuXX19fTtmb3IodmFyIGptIGluIGRtKUFtKGxtW2ptXSYmbG1bam1dLnByb3RvdHlwZSxqbSk7QW0oeW0sIkRPTVRva2VuTGlzdCIpLExiKCJhc3luY0l0ZXJhdG9yIik7dmFyIE9tPVYsa209d287TGIoInRvU3RyaW5nVGFnIiksa20oT20oIlN5bWJvbCIpLCJTeW1ib2wiKSx3byhuLkpTT04sIkpTT04iLCEwKSx3byhNYXRoLCJNYXRoIiwhMCk7dmFyIEVtPVRyLFRtPWVvLHhtPXFpO0JlKHt0YXJnZXQ6Ik9iamVjdCIsQzohMCxHOmkoKGZ1bmN0aW9uKCl7VG0oMSl9KSksaDoheG19LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbihyKXtyZXR1cm4gVG0oRW0ocikpfX0pO3ZhciBVbT1pcy5mb3JFYWNoLE1tPW4sSW09Y20sTG09aG0sUG09QWgoImZvckVhY2giKT9bXS5mb3JFYWNoOmZ1bmN0aW9uKHIpe3JldHVybiBVbSh0aGlzLHIsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxfbT1fdCxSbT1mdW5jdGlvbihyKXtpZihyJiZyLmZvckVhY2ghPT1QbSl0cnl7X20ociwiZm9yRWFjaCIsUG0pfWNhdGNoKHQpe3IuZm9yRWFjaD1QbX19O2Zvcih2YXIgRm0gaW4gSW0pSW1bRm1dJiZSbShNbVtGbV0mJk1tW0ZtXS5wcm90b3R5cGUpO1JtKExtKTt2YXIgTm09byxDbT1HdC5TLEJtPVMsR209cHQuZixEbT1GdW5jdGlvbi5wcm90b3R5cGUsVm09Qm0oRG0udG9TdHJpbmcpLFltPS9mdW5jdGlvblxiKD86XHN8XC9cKltcU1xzXSo/XCpcL3xcL1wvW15cblxyXSpbXG5ccl0rKSooW15ccygvXSopLyx6bT1CbShZbS5leGVjKTtObSYmIUNtJiZHbShEbSwibmFtZSIse2k6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB6bShZbSxWbSh0aGlzKSlbMV19Y2F0Y2gocil7cmV0dXJuIiJ9fX0pO3ZhciBXbT1CZSwkbT16YyxIbT1TKFtdLnJldmVyc2UpLEttPVsxLDJdO1dtKHt0YXJnZXQ6IkFycmF5IixWOiEwLEc6S20rIiI9PUttLnJldmVyc2UoKSsiIn0se3JldmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gJG0odGhpcykmJih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aCksSG0odGhpcyl9fSk7dmFyIHFtPWksSm09WCxYbT0kcigic3BlY2llcyIpLFFtPWZ1bmN0aW9uKHIpe3JldHVybiBKbT49NTF8fCFxbSgoZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4odC5jb25zdHJ1Y3Rvcj17fSlbWG1dPWZ1bmN0aW9uKCl7cmV0dXJue05yOjF9fSwxIT09dFtyXShCb29sZWFuKS5Ocn0pKX0sWm09QmUsclM9emMsdFM9RGYsblM9QyxlUz1XbixpUz1KbixvUz1SLHVTPWp1LGZTPSRyLGFTPXZsLGNTPVFtKCJzbGljZSIpLHNTPWZTKCJzcGVjaWVzIiksdlM9QXJyYXksaFM9TWF0aC5tYXg7Wm0oe3RhcmdldDoiQXJyYXkiLFY6ITAsRzohY1N9LHtzbGljZTpmdW5jdGlvbihyLHQpe3ZhciBuLGUsaSxvPW9TKHRoaXMpLHU9aVMobyksZj1lUyhyLHUpLGE9ZVModm9pZCAwPT09dD91OnQsdSk7aWYoclMobykmJihuPW8uY29uc3RydWN0b3IsKHRTKG4pJiYobj09PXZTfHxyUyhuLnByb3RvdHlwZSkpfHxuUyhuKSYmbnVsbD09PShuPW5bc1NdKSkmJihuPXZvaWQgMCksbj09PXZTfHx2b2lkIDA9PT1uKSlyZXR1cm4gYVMobyxmLGEpO2ZvcihlPW5ldyh2b2lkIDA9PT1uP3ZTOm4pKGhTKGEtZiwwKSksaT0wO2E+ZjtmKyssaSsrKWYgaW4gbyYmdVMoZSxpLG9bZl0pO3JldHVybiBlLmxlbmd0aD1pLGV9fSk7dmFyIGxTPW8sZFM9YSx5Uz1pLHdTPXBpLGJTPXZlLHBTPWMsZ1M9VHIsbVM9TSxTUz1PYmplY3QuYXNzaWduLEFTPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqUz1TKFtdLmNvbmNhdCksT1M9IVNTfHx5UygoZnVuY3Rpb24oKXtpZihsUyYmMSE9PVNTKHtiOjF9LFNTKEFTKHt9LCJhIix7dDohMCxnZXQ6ZnVuY3Rpb24oKXtBUyh0aGlzLCJiIix7dmFsdWU6Myx0OiExfSl9fSkse2I6Mn0pKS5iKXJldHVybiEwO3ZhciByPXt9LHQ9e30sbj1TeW1ib2woKSxlPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIHJbbl09NyxlLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbihyKXt0W3JdPXJ9KSksNyE9U1Moe30scilbbl18fHdTKFNTKHt9LHQpKS5qb2luKCIiKSE9ZX0pKT9mdW5jdGlvbihyLHQpe2Zvcih2YXIgbj1nUyhyKSxlPWFyZ3VtZW50cy5sZW5ndGgsaT0xLG89YlMuZix1PXBTLmY7ZT5pOylmb3IodmFyIGYsYT1tUyhhcmd1bWVudHNbaSsrXSksYz1vP2pTKHdTKGEpLG8oYSkpOndTKGEpLHM9Yy5sZW5ndGgsdj0wO3M+djspZj1jW3YrK10sbFMmJiFkUyh1LGEsZil8fChuW2ZdPWFbZl0pO3JldHVybiBufTpTUztCZSh7dGFyZ2V0OiJPYmplY3QiLEM6ITAsTDoyLEc6T2JqZWN0LmFzc2lnbiE9PU9TfSx7YXNzaWduOk9TfSk7Zm9yKHZhciBrUz1bXSxFUz0wOzI1Nj5FUztFUysrKXtmb3IodmFyIFRTPUVTLHhTPTA7OD54Uzt4UysrKTEmVFM/VFM9VFM+Pj4xXjM5ODgyOTIzODQ6VFM+Pj49MTtrU1tFU109VFN9dmFyIFVTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0KXshZnVuY3Rpb24ocix0KXtpZighKHIgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxyKSx0aGlzLkNyPXR8fC0xfXJldHVybiBmdW5jdGlvbihyLHQpe3QmJmZ1bmN0aW9uKHIsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBlPXRbbl07ZS50PWUudHx8ITEsZS5pPSEwLCJ2YWx1ZSJpbiBlJiYoZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsZS5rZXksZSl9fShyLnByb3RvdHlwZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0ocixbe2tleToiYXBwZW5kIix2YWx1ZTpmdW5jdGlvbihyKXtmb3IodmFyIHQ9MHx0aGlzLkNyLG49MCxlPTB8ci5sZW5ndGg7ZT5uO24rKyl0PXQ+Pj44XmtTWzI1NSYodF5yW25dKV07dGhpcy5Dcj10fX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybn50aGlzLkNyfX1dKSxyfSgpLE1TPWp0LElTPUx3LExTPWJjLFBTPWEsX1M9VHIsUlM9ZnVuY3Rpb24ocix0LG4sZSl7dHJ5e3JldHVybiBlP3QoTVMobilbMF0sblsxXSk6dChuKX1jYXRjaCh0KXtJUyhyLCJ0aHJvdyIsdCl9fSxGUz1QYyxOUz1EZixDUz1KbixCUz1qdSxHUz1VYyxEUz1BYyxWUz1BcnJheTtmdW5jdGlvbiBZUyhyKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFRleHRFbmNvZGVyKXtyPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChyKSk7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT1yLmNoYXJDb2RlQXQobik7cmV0dXJuIHR9cmV0dXJuKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKHIpfUJlKHt0YXJnZXQ6IkFycmF5IixDOiEwLEc6IXBhKChmdW5jdGlvbihyKXtBcnJheS5mcm9tKHIpfSkpfSx7ZnJvbTpmdW5jdGlvbihyKXt2YXIgdD1fUyhyKSxuPU5TKHRoaXMpLGU9YXJndW1lbnRzLmxlbmd0aCxpPWU+MT9hcmd1bWVudHNbMV06dm9pZCAwLG89dm9pZCAwIT09aTtvJiYoaT1MUyhpLGU+Mj9hcmd1bWVudHNbMl06dm9pZCAwKSk7dmFyIHUsZixhLGMscyx2LGg9RFModCksbD0wO2lmKCFofHx0aGlzPT09VlMmJkZTKGgpKWZvcih1PUNTKHQpLGY9bj9uZXcgdGhpcyh1KTpWUyh1KTt1Pmw7bCsrKXY9bz9pKHRbbF0sbCk6dFtsXSxCUyhmLGwsdik7ZWxzZSBmb3Iocz0oYz1HUyh0LGgpKS5uZXh0LGY9bj9uZXcgdGhpczpbXTshKGE9UFMocyxjKSkuZG9uZTtsKyspdj1vP1JTKGMsaSxbYS52YWx1ZSxsXSwhMCk6YS52YWx1ZSxCUyhmLGwsdik7cmV0dXJuIGYubGVuZ3RoPWwsZn19KTt2YXIgelM9VHlwZUVycm9yLFdTPWZ1bmN0aW9uKHIpe2lmKHI+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyB6UygiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIHJ9LCRTPUJlLEhTPWksS1M9emMscVM9QyxKUz1UcixYUz1KbixRUz1XUyxaUz1qdSxyQT1KYyx0QT1RbSxuQT1YLGVBPSRyKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxpQT1uQT49NTF8fCFIUygoZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gcltlQV09ITEsci5jb25jYXQoKVswXSE9PXJ9KSksb0E9dEEoImNvbmNhdCIpLHVBPWZ1bmN0aW9uKHIpe2lmKCFxUyhyKSlyZXR1cm4hMTt2YXIgdD1yW2VBXTtyZXR1cm4gdm9pZCAwIT09dD8hIXQ6S1Mocil9OyRTKHt0YXJnZXQ6IkFycmF5IixWOiEwLEw6MSxHOiFpQXx8IW9BfSx7Y29uY2F0OmZ1bmN0aW9uKHIpe3ZhciB0LG4sZSxpLG8sdT1KUyh0aGlzKSxmPXJBKHUsMCksYT0wO2Zvcih0PS0xLGU9YXJndW1lbnRzLmxlbmd0aDtlPnQ7dCsrKWlmKHVBKG89LTE9PT10P3U6YXJndW1lbnRzW3RdKSlmb3IoaT1YUyhvKSxRUyhhK2kpLG49MDtpPm47bisrLGErKyluIGluIG8mJlpTKGYsYSxvW25dKTtlbHNlIFFTKGErMSksWlMoZixhKyssbyk7cmV0dXJuIGYubGVuZ3RoPWEsZn19KSwoMCxzYS5leHBvcnRzKSgiVWludDMyIiwoZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gcih0aGlzLHQsbixlKX19KSk7dmFyIGZBPUJlLGFBPVRyLGNBPVduLHNBPURuLHZBPUpuLGhBPVdTLGxBPUpjLGRBPWp1LHlBPXZ2LHdBPVFtKCJzcGxpY2UiKSxiQT1NYXRoLm1heCxwQT1NYXRoLm1pbjtmQSh7dGFyZ2V0OiJBcnJheSIsVjohMCxHOiF3QX0se3NwbGljZTpmdW5jdGlvbihyLHQpe3ZhciBuLGUsaSxvLHUsZixhPWFBKHRoaXMpLGM9dkEoYSkscz1jQShyLGMpLHY9YXJndW1lbnRzLmxlbmd0aDtmb3IoMD09PXY/bj1lPTA6MT09PXY/KG49MCxlPWMtcyk6KG49di0yLGU9cEEoYkEoc0EodCksMCksYy1zKSksaEEoYytuLWUpLGk9bEEoYSxlKSxvPTA7ZT5vO28rKykodT1zK28paW4gYSYmZEEoaSxvLGFbdV0pO2lmKGkubGVuZ3RoPWUsZT5uKXtmb3Iobz1zO2MtZT5vO28rKylmPW8rbiwodT1vK2UpaW4gYT9hW2ZdPWFbdV06eUEoYSxmKTtmb3Iobz1jO28+Yy1lK247by0tKXlBKGEsby0xKX1lbHNlIGlmKG4+ZSlmb3Iobz1jLWU7bz5zO28tLSlmPW8rbi0xLCh1PW8rZS0xKWluIGE/YVtmXT1hW3VdOnlBKGEsZik7Zm9yKG89MDtuPm87bysrKWFbbytzXT1hcmd1bWVudHNbbysyXTtyZXR1cm4gYS5sZW5ndGg9Yy1lK24saX19KTt2YXIgZ0E9Y3MsbUE9VGYuQXJyYXlCdWZmZXI7ZnVuY3Rpb24gU0Eocix0KXtpZighKHIgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBBQShyLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgZT10W25dO2UudD1lLnR8fCExLGUuaT0hMCwidmFsdWUiaW4gZSYmKGUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUua2V5LGUpfX1mdW5jdGlvbiBqQShyLHQsbil7cmV0dXJuIHQmJkFBKHIucHJvdG90eXBlLHQpLG4mJkFBKHIsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscn1CZSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLEc6bi5BcnJheUJ1ZmZlciE9PW1BfSx7QXJyYXlCdWZmZXI6bUF9KSxnQSgiQXJyYXlCdWZmZXIiKTt2YXIgT0E9e2NvbmNhdDpmdW5jdGlvbihyLHQpe2lmKDA9PT1yLmxlbmd0aHx8MD09PXQubGVuZ3RoKXJldHVybiByLmNvbmNhdCh0KTt2YXIgbj1yW3IubGVuZ3RoLTFdLGU9T0EuQnIobik7cmV0dXJuIDMyPT09ZT9yLmNvbmNhdCh0KTpPQS5Hcih0LGUsMHxuLHIuc2xpY2UoMCxyLmxlbmd0aC0xKSl9LERyOmZ1bmN0aW9uKHIpe3ZhciB0PXIubGVuZ3RoO2lmKDA9PT10KXJldHVybiAwO3ZhciBuPXJbdC0xXTtyZXR1cm4gMzIqKHQtMSkrT0EuQnIobil9LFZyOmZ1bmN0aW9uKHIsdCl7aWYoMzIqci5sZW5ndGg8dClyZXR1cm4gcjt2YXIgbj0ocj1yLnNsaWNlKDAsTWF0aC5jZWlsKHQvMzIpKSkubGVuZ3RoO3JldHVybiB0Jj0zMSxuPjAmJnQmJihyW24tMV09T0EuWXIodCxyW24tMV0mMjE0NzQ4MzY0OD4+dC0xLDEpKSxyfSxZcjpmdW5jdGlvbihyLHQsbil7cmV0dXJuIDMyPT09cj90OihuPzB8dDp0PDwzMi1yKSsxMDk5NTExNjI3Nzc2KnJ9LEJyOmZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHIvMTA5OTUxMTYyNzc3Nil8fDMyfSxHcjpmdW5jdGlvbihyLHQsbixlKXtmb3Iodm9pZCAwPT09ZSYmKGU9W10pO3Q+PTMyO3QtPTMyKWUucHVzaChuKSxuPTA7aWYoMD09PXQpcmV0dXJuIGUuY29uY2F0KHIpO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKWUucHVzaChufHJbaV0+Pj50KSxuPXJbaV08PDMyLXQ7dmFyIG89ci5sZW5ndGg/cltyLmxlbmd0aC0xXTowLHU9T0EuQnIobyk7cmV0dXJuIGUucHVzaChPQS5Zcih0K3UmMzEsdCt1PjMyP246ZS5wb3AoKSwxKSksZX19LGtBPXtLOnt6cjpmdW5jdGlvbihyKXtmb3IodmFyIHQsbj1PQS5EcihyKS84LGU9bmV3IFVpbnQ4QXJyYXkobiksaT0wO24+aTtpKyspMD09KDMmaSkmJih0PXJbaS80XSksZVtpXT10Pj4+MjQsdDw8PTg7cmV0dXJuIGV9LFdyOmZ1bmN0aW9uKHIpe3ZhciB0LG49W10sZT0wO2Zvcih0PTA7dDxyLmxlbmd0aDt0KyspZT1lPDw4fHJbdF0sMz09KDMmdCkmJihuLnB1c2goZSksZT0wKTtyZXR1cm4gMyZ0JiZuLnB1c2goT0EuWXIoOCooMyZ0KSxlKSksbn19fSxFQT17JHI6ZnVuY3Rpb24ocil7cj8odGhpcy5Icj1yLkhyLnNsaWNlKDApLHRoaXMuS3I9ci5Lci5zbGljZSgwKSx0aGlzLnFyPXIucXIpOnRoaXMucmVzZXQoKX19O0VBLiRyLnByb3RvdHlwZT17YmxvY2tTaXplOjUxMixyZXNldDpmdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIHIuSHI9dGhpcy5Kci5zbGljZSgwKSxyLktyPVtdLHIucXI9MCxyfSx1cGRhdGU6ZnVuY3Rpb24ocil7dmFyIHQ9dGhpczsic3RyaW5nIj09dHlwZW9mIHImJihyPWtBLlhyLldyKHIpKTt2YXIgbj10LktyPU9BLmNvbmNhdCh0LktyLHIpLGU9dC5xcixpPXQucXI9ZStPQS5EcihyKTtpZihpPjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgRXJyb3IoIkNhbm5vdCBoYXNoIG1vcmUgdGhhbiAyXjUzIC0gMSBiaXRzIik7Zm9yKHZhciBvPW5ldyBVaW50MzJBcnJheShuKSx1PTAsZj10LmJsb2NrU2l6ZStlLSh0LmJsb2NrU2l6ZStlJnQuYmxvY2tTaXplLTEpO2k+PWY7Zis9dC5ibG9ja1NpemUpdC5RcihvLnN1YmFycmF5KDE2KnUsMTYqKHUrMSkpKSx1Kz0xO3JldHVybiBuLnNwbGljZSgwLDE2KnUpLHR9LFpyOmZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsdD1yLktyLG49ci5IcixlPSh0PU9BLmNvbmNhdCh0LFtPQS5ZcigxLDEpXSkpLmxlbmd0aCsyOzE1JmU7ZSsrKXQucHVzaCgwKTtmb3IodC5wdXNoKE1hdGguZmxvb3Ioci5xci80Mjk0OTY3Mjk2KSksdC5wdXNoKDB8ci5xcik7dC5sZW5ndGg7KXIuUXIodC5zcGxpY2UoMCwxNikpO3JldHVybiByLnJlc2V0KCksbn0sSnI6WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSxydDpbMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml0sdHQ6ZnVuY3Rpb24ocix0LG4sZSl7cmV0dXJuIHI+MTk/cj4zOT9yPjU5P3I+Nzk/dm9pZCAwOnRebl5lOnQmbnx0JmV8biZlOnRebl5lOnQmbnx+dCZlfSxudDpmdW5jdGlvbihyLHQpe3JldHVybiB0PDxyfHQ+Pj4zMi1yfSxRcjpmdW5jdGlvbihyKXtmb3IodmFyIHQ9dGhpcyxuPXQuSHIsZT1BcnJheSg4MCksaT0wOzE2Pmk7aSsrKWVbaV09cltpXTtmb3IodmFyIG89blswXSx1PW5bMV0sZj1uWzJdLGE9blszXSxjPW5bNF0scz0wOzc5Pj1zO3MrKyl7MTY+c3x8KGVbc109dC5udCgxLGVbcy0zXV5lW3MtOF1eZVtzLTE0XV5lW3MtMTZdKSk7dmFyIHY9dC5udCg1LG8pK3QudHQocyx1LGYsYSkrYytlW3NdK3QucnRbTWF0aC5mbG9vcihzLzIwKV18MDtjPWEsYT1mLGY9dC5udCgzMCx1KSx1PW8sbz12fW5bMF09blswXStvfDAsblsxXT1uWzFdK3V8MCxuWzJdPW5bMl0rZnwwLG5bM109blszXSthfDAsbls0XT1uWzRdK2N8MH19O3ZhciBUQT17fTtUQS5ldD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCl7U0EodGhpcyxyKTt2YXIgbj10aGlzO24uaXQ9W1tbXSxbXSxbXSxbXSxbXV0sW1tdLFtdLFtdLFtdLFtdXV0sbi5pdFswXVswXVswXXx8bi5vdCgpO3ZhciBlLGksbyx1PW4uaXRbMF1bNF0sZj1uLml0WzFdLGE9dC5sZW5ndGgsYz0xO2lmKDQhPT1hJiY2IT09YSYmOCE9PWEpdGhyb3cgRXJyb3IoImludmFsaWQgYWVzIGtleSBzaXplIik7Zm9yKG4ucnQ9W2k9dC5zbGljZSgwKSxvPVtdXSxlPWE7NCphKzI4PmU7ZSsrKXt2YXIgcz1pW2UtMV07KGUlYT09MHx8OD09PWEmJmUlYT09NCkmJihzPXVbcz4+PjI0XTw8MjRedVtzPj4xNiYyNTVdPDwxNl51W3M+PjgmMjU1XTw8OF51WzI1NSZzXSxlJWE9PTAmJihzPXM8PDhecz4+PjI0XmM8PDI0LGM9Yzw8MV4yODMqKGM+PjcpKSksaVtlXT1pW2UtYV1ec31mb3IodmFyIHY9MDtlO3YrKyxlLS0pe3ZhciBoPWlbMyZ2P2U6ZS00XTtvW3ZdPTQ+PWV8fDQ+dj9oOmZbMF1bdVtoPj4+MjRdXV5mWzFdW3VbaD4+MTYmMjU1XV1eZlsyXVt1W2g+PjgmMjU1XV1eZlszXVt1WzI1NSZoXV19fXJldHVybiBqQShyLFt7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy51dChyLDApfX0se2tleToiZGVjcnlwdCIsdmFsdWU6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMudXQociwxKX19LHtrZXk6Il9wcmVjb21wdXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgcix0LG4sZT10aGlzLml0WzBdLGk9dGhpcy5pdFsxXSxvPWVbNF0sdT1pWzRdLGY9W10sYT1bXSxjPTA7MjU2PmM7YysrKWFbKGZbY109Yzw8MV4yODMqKGM+PjcpKV5jXT1jO2Zvcih2YXIgcz1yPTA7IW9bc107c149dHx8MSxyPWFbcl18fDEpe3ZhciB2PXJecjw8MV5yPDwyXnI8PDNecjw8NDt2PXY+PjheMjU1JnZeOTksb1tzXT12LHVbdl09cztmb3IodmFyIGg9MTY4NDMwMDkqZltuPWZbdD1mW3NdXV1eNjU1Mzcqbl4yNTcqdF4xNjg0MzAwOCpzLGw9MjU3KmZbdl1eMTY4NDMwMDgqdixkPTA7ND5kO2QrKyllW2RdW3NdPWw9bDw8MjRebD4+PjgsaVtkXVt2XT1oPWg8PDI0Xmg+Pj44fWZvcih2YXIgeT0wOzU+eTt5KyspZVt5XT1lW3ldLnNsaWNlKDApLGlbeV09aVt5XS5zbGljZSgwKX19LHtrZXk6Il9jcnlwdCIsdmFsdWU6ZnVuY3Rpb24ocix0KXtpZig0IT09ci5sZW5ndGgpdGhyb3cgRXJyb3IoImludmFsaWQgYWVzIGJsb2NrIHNpemUiKTtmb3IodmFyIG4sZSxpLG89dGhpcy5ydFt0XSx1PW8ubGVuZ3RoLzQtMixmPVswLDAsMCwwXSxhPXRoaXMuaXRbdF0sYz1hWzBdLHM9YVsxXSx2PWFbMl0saD1hWzNdLGw9YVs0XSxkPXJbMF1eb1swXSx5PXJbdD8zOjFdXm9bMV0sdz1yWzJdXm9bMl0sYj1yW3Q/MTozXV5vWzNdLHA9NCxnPTA7dT5nO2crKyluPWNbZD4+PjI0XV5zW3k+PjE2JjI1NV1edlt3Pj44JjI1NV1eaFsyNTUmYl1eb1twXSxlPWNbeT4+PjI0XV5zW3c+PjE2JjI1NV1edltiPj44JjI1NV1eaFsyNTUmZF1eb1twKzFdLGk9Y1t3Pj4+MjRdXnNbYj4+MTYmMjU1XV52W2Q+PjgmMjU1XV5oWzI1NSZ5XV5vW3ArMl0sYj1jW2I+Pj4yNF1ec1tkPj4xNiYyNTVdXnZbeT4+OCYyNTVdXmhbMjU1JnddXm9bcCszXSxwKz00LGQ9bix5PWUsdz1pO2Zvcih2YXIgbT0wOzQ+bTttKyspZlt0PzMmLW06bV09bFtkPj4+MjRdPDwyNF5sW3k+PjE2JjI1NV08PDE2Xmxbdz4+OCYyNTVdPDw4XmxbMjU1JmJdXm9bcCsrXSxuPWQsZD15LHk9dyx3PWIsYj1uO3JldHVybiBmfX1dKSxyfSgpO3ZhciB4QT17fTt4QS5mdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxuKXtTQSh0aGlzLHIpLHRoaXMuY3Q9dCx0aGlzLnN0PW4sdGhpcy52dD1ufXJldHVybiBqQShyLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnZ0PXRoaXMuc3R9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmh0KHRoaXMuY3Qscix0aGlzLnZ0KX19LHtrZXk6ImluY1dvcmQiLHZhbHVlOmZ1bmN0aW9uKHIpe2lmKDI1NT09KHI+PjI0JjI1NSkpe3ZhciB0PXI+PjE2JjI1NSxuPXI+PjgmMjU1LGU9MjU1JnI7MjU1PT09dD8odD0wLDI1NT09PW4/KG49MCwyNTU9PT1lP2U9MDorK2UpOisrbik6Kyt0LHI9MCxyKz10PDwxNixyKz1uPDw4LHIrPWV9ZWxzZSByKz0xPDwyNDtyZXR1cm4gcn19LHtrZXk6ImluY0NvdW50ZXIiLHZhbHVlOmZ1bmN0aW9uKHIpezA9PT0oclswXT10aGlzLmx0KHJbMF0pKSYmKHJbMV09dGhpcy5sdChyWzFdKSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHIsdCxuKXt2YXIgZTtpZighKGU9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgaT1PQS5Ecih0KSxvPTA7ZT5vO28rPTQpe3RoaXMuZHQobik7dmFyIHU9ci5lbmNyeXB0KG4pO3Rbb11ePXVbMF0sdFtvKzFdXj11WzFdLHRbbysyXV49dVsyXSx0W28rM11ePXVbM119cmV0dXJuIE9BLlZyKHQsaSl9fV0pLHJ9KCk7dmFyIFVBPXtpbXBvcnRLZXk6ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBVQS55dChrQS5LLldyKHIpKX0sd3Q6ZnVuY3Rpb24ocix0LG4sZSl7aWYobj1ufHwxZTQsMD5lfHwwPm4pdGhyb3cgRXJyb3IoImludmFsaWQgcGFyYW1zIHRvIHBia2RmMiIpO3ZhciBpLG8sdSxmLGEsYz0xKyhlPj41KTw8MixzPW5ldyBBcnJheUJ1ZmZlcihjKSx2PW5ldyBEYXRhVmlldyhzKSxoPTAsbD1PQTtmb3IodD1rQS5LLldyKHQpLGE9MTsoY3x8MSk+aDthKyspe2ZvcihpPW89ci5lbmNyeXB0KGwuY29uY2F0KHQsW2FdKSksdT0xO24+dTt1KyspZm9yKG89ci5lbmNyeXB0KG8pLGY9MDtmPG8ubGVuZ3RoO2YrKylpW2ZdXj1vW2ZdO2Zvcih1PTA7KGN8fDEpPmgmJnU8aS5sZW5ndGg7dSsrKXYuc2V0SW50MzIoaCxpW3VdKSxoKz00fXJldHVybiBzLnNsaWNlKDAsZS84KX19O2Z1bmN0aW9uIE1BKHIpe3JldHVybiBNQT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHJ9OmZ1bmN0aW9uKHIpe3JldHVybiByJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZyLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZyIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Ygcn0sTUEocil9ZnVuY3Rpb24gSUEoKXsvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovSUE9ZnVuY3Rpb24oKXtyZXR1cm4gcn07dmFyIHI9e30sdD1PYmplY3QucHJvdG90eXBlLG49dC5oYXNPd25Qcm9wZXJ0eSxlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9ZS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89ZS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIix1PWUudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBmKHIsdCxuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsdCx7dmFsdWU6bix0OiEwLGk6ITAsd3JpdGFibGU6ITB9KSxyW3RdfXRyeXtmKHt9LCIiKX1jYXRjaChyKXtmPWZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gclt0XT1ufX1mdW5jdGlvbiBhKHIsdCxuLGUpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj90OnYsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSx1PW5ldyBqKGV8fFtdKTtyZXR1cm4gby5idD1mdW5jdGlvbihyLHQsbil7dmFyIGU9InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxvKXtpZigiZXhlY3V0aW5nIj09PWUpdGhyb3cgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PWUpe2lmKCJ0aHJvdyI9PT1pKXRocm93IG87cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Iobi5tZXRob2Q9aSxuLmd0PW87Oyl7dmFyIHU9bi5TdDtpZih1KXt2YXIgZj1tKHUsbik7aWYoZil7aWYoZj09PXMpY29udGludWU7cmV0dXJuIGZ9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uQXQ9bi5qdD1uLmd0O2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09ZSl0aHJvdyBlPSJjb21wbGV0ZWQiLG4uZ3Q7bi5PdChuLmd0KX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5rdCgicmV0dXJuIixuLmd0KTtlPSJleGVjdXRpbmciO3ZhciBhPWMocix0LG4pO2lmKCJub3JtYWwiPT09YS50eXBlKXtpZihlPW4uZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGEuZ3Q9PT1zKWNvbnRpbnVlO3JldHVybnt2YWx1ZTphLmd0LGRvbmU6bi5kb25lfX0idGhyb3ciPT09YS50eXBlJiYoZT0iY29tcGxldGVkIixuLm1ldGhvZD0idGhyb3ciLG4uZ3Q9YS5ndCl9fX0ocixuLHUpLG99ZnVuY3Rpb24gYyhyLHQsbil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGd0OnIuY2FsbCh0LG4pfX1jYXRjaChyKXtyZXR1cm57dHlwZToidGhyb3ciLGd0OnJ9fX1yLndyYXA9YTt2YXIgcz17fTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIGgoKXt9ZnVuY3Rpb24gbCgpe312YXIgZD17fTtmKGQsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdz15JiZ5KHkoTyhbXSkpKTt3JiZ3IT09dCYmbi5jYWxsKHcsaSkmJihkPXcpO3ZhciBiPWwucHJvdG90eXBlPXYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZCk7ZnVuY3Rpb24gcChyKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Yocix0LChmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5idCh0LHIpfSkpfSkpfWZ1bmN0aW9uIGcocix0KXtmdW5jdGlvbiBlKGksbyx1LGYpe3ZhciBhPWMocltpXSxyLG8pO2lmKCJ0aHJvdyIhPT1hLnR5cGUpe3ZhciBzPWEuZ3Qsdj1zLnZhbHVlO3JldHVybiB2JiYib2JqZWN0Ij09TUEodikmJm4uY2FsbCh2LCJfX2F3YWl0Iik/dC5yZXNvbHZlKHYuRXQpLnRoZW4oKGZ1bmN0aW9uKHIpe2UoIm5leHQiLHIsdSxmKX0pLChmdW5jdGlvbihyKXtlKCJ0aHJvdyIscix1LGYpfSkpOnQucmVzb2x2ZSh2KS50aGVuKChmdW5jdGlvbihyKXtzLnZhbHVlPXIsdShzKX0pLChmdW5jdGlvbihyKXtyZXR1cm4gZSgidGhyb3ciLHIsdSxmKX0pKX1mKGEuZ3QpfXZhciBpO3RoaXMuYnQ9ZnVuY3Rpb24ocixuKXtmdW5jdGlvbiBvKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LGkpe2UocixuLHQsaSl9KSl9cmV0dXJuIGk9aT9pLnRoZW4obyxvKTpvKCl9fWZ1bmN0aW9uIG0ocix0KXt2YXIgbj1yLml0ZXJhdG9yW3QubWV0aG9kXTtpZih2b2lkIDA9PT1uKXtpZih0LlN0PW51bGwsInRocm93Ij09PXQubWV0aG9kKXtpZihyLml0ZXJhdG9yLnEmJih0Lm1ldGhvZD0icmV0dXJuIix0Lmd0PXZvaWQgMCxtKHIsdCksInRocm93Ij09PXQubWV0aG9kKSlyZXR1cm4gczt0Lm1ldGhvZD0idGhyb3ciLHQuZ3Q9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBzfXZhciBlPWMobixyLml0ZXJhdG9yLHQuZ3QpO2lmKCJ0aHJvdyI9PT1lLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5ndD1lLmd0LHQuU3Q9bnVsbCxzO3ZhciBpPWUuZ3Q7cmV0dXJuIGk/aS5kb25lPyh0W3IuVHRdPWkudmFsdWUsdC5uZXh0PXIueHQsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0Lmd0PXZvaWQgMCksdC5TdD1udWxsLHMpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5ndD1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuU3Q9bnVsbCxzKX1mdW5jdGlvbiBTKHIpe3ZhciB0PXtVdDpyWzBdfTsxIGluIHImJih0Lk10PXJbMV0pLDIgaW4gciYmKHQuSXQ9clsyXSx0Lkx0PXJbM10pLHRoaXMuUHQucHVzaCh0KX1mdW5jdGlvbiBBKHIpe3ZhciB0PXIuX3R8fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5ndCxyLl90PXR9ZnVuY3Rpb24gaihyKXt0aGlzLlB0PVt7VXQ6InJvb3QifV0sci5mb3JFYWNoKFMsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gTyhyKXtpZihyKXt2YXIgdD1yW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChyKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci5uZXh0KXJldHVybiByO2lmKCFpc05hTihyLmxlbmd0aCkpe3ZhciBlPS0xLG89ZnVuY3Rpb24gdCgpe2Zvcig7KytlPHIubGVuZ3RoOylpZihuLmNhbGwocixlKSlyZXR1cm4gdC52YWx1ZT1yW2VdLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIG8ubmV4dD1vfX1yZXR1cm57bmV4dDprfX1mdW5jdGlvbiBrKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gaC5wcm90b3R5cGU9bCxmKGIsImNvbnN0cnVjdG9yIixsKSxmKGwsImNvbnN0cnVjdG9yIixoKSxoLmRpc3BsYXlOYW1lPWYobCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHIuUnQ9ZnVuY3Rpb24ocil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHImJnIuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWh8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LHIubWFyaz1mdW5jdGlvbihyKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihyLGwpOihyLl9fcHJvdG9fXz1sLGYocix1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpLHJ9LHIuRnQ9ZnVuY3Rpb24ocil7cmV0dXJue0V0OnJ9fSxwKGcucHJvdG90eXBlKSxmKGcucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksci5OdD1nLHIuYXN5bmM9ZnVuY3Rpb24odCxuLGUsaSxvKXt2b2lkIDA9PT1vJiYobz1Qcm9taXNlKTt2YXIgdT1uZXcgZyhhKHQsbixlLGkpLG8pO3JldHVybiByLlJ0KG4pP3U6dS5uZXh0KCkudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHIuZG9uZT9yLnZhbHVlOnUubmV4dCgpfSkpfSxwKGIpLGYoYix1LCJHZW5lcmF0b3IiKSxmKGIsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxmKGIsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxyLmtleXM9ZnVuY3Rpb24ocil7dmFyIHQ9W107Zm9yKHZhciBuIGluIHIpdC5wdXNoKG4pO3JldHVybiB0LnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciBlPXQucG9wKCk7aWYoZSBpbiByKXJldHVybiBuLnZhbHVlPWUsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sci52YWx1ZXM9TyxqLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aixyZXNldDpmdW5jdGlvbihyKXtpZih0aGlzLkN0PTAsdGhpcy5uZXh0PTAsdGhpcy5BdD10aGlzLmp0PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5TdD1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmd0PXZvaWQgMCx0aGlzLlB0LmZvckVhY2goQSksIXIpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJm4uY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciByPXRoaXMuUHRbMF0uX3Q7aWYoInRocm93Ij09PXIudHlwZSl0aHJvdyByLmd0O3JldHVybiB0aGlzLkJ0fSxPdDpmdW5jdGlvbihyKXtpZih0aGlzLmRvbmUpdGhyb3cgcjt2YXIgdD10aGlzO2Z1bmN0aW9uIGUobixlKXtyZXR1cm4gdS50eXBlPSJ0aHJvdyIsdS5ndD1yLHQubmV4dD1uLGUmJih0Lm1ldGhvZD0ibmV4dCIsdC5ndD12b2lkIDApLCEhZX1mb3IodmFyIGk9dGhpcy5QdC5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89dGhpcy5QdFtpXSx1PW8uX3Q7aWYoInJvb3QiPT09by5VdClyZXR1cm4gZSgiZW5kIik7aWYoby5VdDw9dGhpcy5DdCl7dmFyIGY9bi5jYWxsKG8sImNhdGNoTG9jIiksYT1uLmNhbGwobywiZmluYWxseUxvYyIpO2lmKGYmJmEpe2lmKHRoaXMuQ3Q8by5NdClyZXR1cm4gZShvLk10LCEwKTtpZih0aGlzLkN0PG8uSXQpcmV0dXJuIGUoby5JdCl9ZWxzZSBpZihmKXtpZih0aGlzLkN0PG8uTXQpcmV0dXJuIGUoby5NdCwhMCl9ZWxzZXtpZighYSl0aHJvdyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLkN0PG8uSXQpcmV0dXJuIGUoby5JdCl9fX19LGt0OmZ1bmN0aW9uKHIsdCl7Zm9yKHZhciBlPXRoaXMuUHQubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBpPXRoaXMuUHRbZV07aWYoaS5VdDw9dGhpcy5DdCYmbi5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5DdDxpLkl0KXt2YXIgbz1pO2JyZWFrfX1vJiYoImJyZWFrIj09PXJ8fCJjb250aW51ZSI9PT1yKSYmby5VdDw9dCYmdDw9by5JdCYmKG89bnVsbCk7dmFyIHU9bz9vLl90Ont9O3JldHVybiB1LnR5cGU9cix1Lmd0PXQsbz8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1vLkl0LHMpOnRoaXMuY29tcGxldGUodSl9LGNvbXBsZXRlOmZ1bmN0aW9uKHIsdCl7aWYoInRocm93Ij09PXIudHlwZSl0aHJvdyByLmd0O3JldHVybiJicmVhayI9PT1yLnR5cGV8fCJjb250aW51ZSI9PT1yLnR5cGU/dGhpcy5uZXh0PXIuZ3Q6InJldHVybiI9PT1yLnR5cGU/KHRoaXMuQnQ9dGhpcy5ndD1yLmd0LHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1yLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksc30sZmluaXNoOmZ1bmN0aW9uKHIpe2Zvcih2YXIgdD10aGlzLlB0Lmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLlB0W3RdO2lmKG4uSXQ9PT1yKXJldHVybiB0aGlzLmNvbXBsZXRlKG4uX3Qsbi5MdCksQShuKSxzfX0sY2F0Y2g6ZnVuY3Rpb24ocil7Zm9yKHZhciB0PXRoaXMuUHQubGVuZ3RoLTE7dD49MDstLXQpe3ZhciBuPXRoaXMuUHRbdF07aWYobi5VdD09PXIpe3ZhciBlPW4uX3Q7aWYoInRocm93Ij09PWUudHlwZSl7dmFyIGk9ZS5ndDtBKG4pfXJldHVybiBpfX10aHJvdyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LEd0OmZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gdGhpcy5TdD17aXRlcmF0b3I6TyhyKSxUdDp0LHh0Om59LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5ndD12b2lkIDApLHN9fSxyfWZ1bmN0aW9uIExBKHIsdCxuLGUsaSxvLHUpe3RyeXt2YXIgZj1yW29dKHUpLGE9Zi52YWx1ZX1jYXRjaChyKXtyZXR1cm4gdm9pZCBuKHIpfWYuZG9uZT90KGEpOlByb21pc2UucmVzb2x2ZShhKS50aGVuKGUsaSl9ZnVuY3Rpb24gUEEocil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsaSl7dmFyIG89ci5hcHBseSh0LG4pO2Z1bmN0aW9uIHUocil7TEEobyxlLGksdSxmLCJuZXh0IixyKX1mdW5jdGlvbiBmKHIpe0xBKG8sZSxpLHUsZiwidGhyb3ciLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gX0Eocix0KXtpZighKHIgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBSQShyLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgZT10W25dO2UudD1lLnR8fCExLGUuaT0hMCwidmFsdWUiaW4gZSYmKGUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUua2V5LGUpfX1mdW5jdGlvbiBGQShyLHQsbil7cmV0dXJuIHQmJlJBKHIucHJvdG90eXBlLHQpLG4mJlJBKHIsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscn1VQS55dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCl7U0EodGhpcyxyKTt2YXIgbj10aGlzLGU9bi5EdD1FQS4kcixpPVtbXSxbXV0sbz1lLnByb3RvdHlwZS5ibG9ja1NpemUvMzI7bi5WdD1bbmV3IGUsbmV3IGVdLHQubGVuZ3RoPm8mJih0PWUuaGFzaCh0KSk7Zm9yKHZhciB1PTA7bz51O3UrKylpWzBdW3VdPTkwOTUyMjQ4Nl50W3VdLGlbMV1bdV09MTU0OTU1NjgyOF50W3VdO24uVnRbMF0udXBkYXRlKGlbMF0pLG4uVnRbMV0udXBkYXRlKGlbMV0pLG4uWXQ9bmV3IGUobi5WdFswXSl9cmV0dXJuIGpBKHIsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciByPXRoaXM7ci5ZdD1uZXcgci5EdChyLlZ0WzBdKSxyLnp0PSExfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihyKXt0aGlzLnp0PSEwLHRoaXMuWXQudXBkYXRlKHIpfX0se2tleToiZGlnZXN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciByPXRoaXMsdD1yLll0LlpyKCksbj1uZXcgci5EdChyLlZ0WzFdKS51cGRhdGUodCkuWnIoKTtyZXR1cm4gci5yZXNldCgpLG59fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihyKXtpZih0aGlzLnp0KXRocm93IEVycm9yKCJlbmNyeXB0IG9uIGFscmVhZHkgdXBkYXRlZCBobWFjIGNhbGxlZCEiKTtyZXR1cm4gdGhpcy51cGRhdGUociksdGhpcy5kaWdlc3Qocil9fV0pLHJ9KCk7dmFyIE5BPXtuYW1lOiJQQktERjIifSxDQT1PYmplY3QuYXNzaWduKHtoYXNoOntuYW1lOiJITUFDIn19LE5BKSxCQT1PYmplY3QuYXNzaWduKHtpdGVyYXRpb25zOjFlMyxoYXNoOntuYW1lOiJTSEEtMSJ9fSxOQSksR0E9WyJkZXJpdmVCaXRzIl0sREE9WzgsMTIsMTZdLFZBPVsxNiwyNCwzMl0sWUE9WzAsMCwwLDBdLHpBPSJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvLFdBPXpBJiZ2b2lkIDAhPT1jcnlwdG8uc3VidGxlLCRBPWtBLkssSEE9VEEuZXQsS0E9eEEuZnQscUE9VUEueXQsSkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQsbixlKXtfQSh0aGlzLHIpLE9iamVjdC5hc3NpZ24odGhpcyx7cGFzc3dvcmQ6dCxzaWduZWQ6bixXdDplLTEsJHQ6bmV3IFVpbnQ4QXJyYXkoMCl9KX12YXIgdDtyZXR1cm4gRkEocixbe2tleToiYXBwZW5kIix2YWx1ZToodD1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCl7dmFyIG4sZSxpO3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZighKG49dGhpcykucGFzc3dvcmQpe3IubmV4dD05O2JyZWFrfXJldHVybiBlPXNqKHQsMCxEQVtuLld0XSsyKSxyLm5leHQ9NSxaQShuLGUsbi5wYXNzd29yZCk7Y2FzZSA1Om4ucGFzc3dvcmQ9bnVsbCxuLkh0PW5ldyBLQShuZXcgSEEobi5rZXlzLmtleSksQXJyYXkuZnJvbShZQSkpLG4uS3Q9bmV3IHFBKG4ua2V5cy5xdCksdD1zaih0LERBW24uV3RdKzIpO2Nhc2UgOTpyZXR1cm4gaT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aC0xMC0odC5sZW5ndGgtMTApJTE2KSxyLmt0KCJyZXR1cm4iLFFBKG4sdCxpLDAsMTAsITApKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSksZnVuY3Rpb24ocil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciByPXRoaXMsdD1yLiR0LG49c2oodCwwLHQubGVuZ3RoLTEwKSxlPXNqKHQsdC5sZW5ndGgtMTApLGk9bmV3IFVpbnQ4QXJyYXkoMCk7aWYobi5sZW5ndGgpe3ZhciBvPSRBLldyKG4pO3IuS3QudXBkYXRlKG8pO3ZhciB1PXIuSHQudXBkYXRlKG8pO2k9JEEuenIodSl9dmFyIGY9ITA7aWYoci5zaWduZWQpZm9yKHZhciBhPXNqKCRBLnpyKHIuS3QuZGlnZXN0KCkpLDAsMTApLGM9MDsxMD5jO2MrKylhW2NdIT1lW2NdJiYoZj0hMSk7cmV0dXJue3ZhbGlkOmYsZGF0YTppfX19XSkscn0oKSxYQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxuKXtfQSh0aGlzLHIpLE9iamVjdC5hc3NpZ24odGhpcyx7cGFzc3dvcmQ6dCxXdDpuLTEsJHQ6bmV3IFVpbnQ4QXJyYXkoMCl9KX12YXIgdDtyZXR1cm4gRkEocixbe2tleToiYXBwZW5kIix2YWx1ZToodD1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCl7dmFyIG4sZSxpO3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZihuPXRoaXMsZT1uZXcgVWludDhBcnJheSgwKSwhbi5wYXNzd29yZCl7ci5uZXh0PTk7YnJlYWt9cmV0dXJuIHIubmV4dD01LHRqKG4sbi5wYXNzd29yZCk7Y2FzZSA1OmU9ci5BdCxuLnBhc3N3b3JkPW51bGwsbi5IdD1uZXcgS0EobmV3IEhBKG4ua2V5cy5rZXkpLEFycmF5LmZyb20oWUEpKSxuLkt0PW5ldyBxQShuLmtleXMucXQpO2Nhc2UgOTpyZXR1cm4oaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCt0Lmxlbmd0aC10Lmxlbmd0aCUxNikpLnNldChlLDApLHIua3QoInJldHVybiIsUUEobix0LGksZS5sZW5ndGgsMCkpO2Nhc2UgMTI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKSxmdW5jdGlvbihyKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmx1c2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcyx0PW5ldyBVaW50OEFycmF5KDApO2lmKHIuJHQubGVuZ3RoKXt2YXIgbj1yLkh0LnVwZGF0ZSgkQS5XcihyLiR0KSk7ci5LdC51cGRhdGUobiksdD0kQS56cihuKX12YXIgZT1zaigkQS56cihyLkt0LmRpZ2VzdCgpKSwwLDEwKTtyZXR1cm57ZGF0YTpjaih0LGUpLHNpZ25hdHVyZTplfX19XSkscn0oKTtmdW5jdGlvbiBRQShyLHQsbixlLGksbyl7dmFyIHUsZj10Lmxlbmd0aC1pO2ZvcihyLiR0Lmxlbmd0aCYmKHQ9Y2ooci4kdCx0KSxuPWZ1bmN0aW9uKHIsdCl7aWYodCYmdD5yLmxlbmd0aCl7dmFyIG49cjsocj1uZXcgVWludDhBcnJheSh0KSkuc2V0KG4sMCl9cmV0dXJuIHJ9KG4sZi1mJTE2KSksdT0wO2YtMTY+PXU7dSs9MTYpe3ZhciBhPSRBLldyKHNqKHQsdSx1KzE2KSk7byYmci5LdC51cGRhdGUoYSk7dmFyIGM9ci5IdC51cGRhdGUoYSk7b3x8ci5LdC51cGRhdGUoYyksbi5zZXQoJEEuenIoYyksdStlKX1yZXR1cm4gci4kdD1zaih0LHUpLG59ZnVuY3Rpb24gWkEocix0LG4pe3JldHVybiByai5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcmooKXtyZXR1cm4gcmo9UEEoSUEoKS5tYXJrKChmdW5jdGlvbiByKHQsbixlKXt2YXIgaSxvO3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsZWoodCxlLHNqKG4sMCxEQVt0Lld0XSkpO2Nhc2UgMjppZihpPXNqKG4sREFbdC5XdF0pLChvPXQua2V5cy5wYXNzd29yZFZlcmlmaWNhdGlvbilbMF09PWlbMF0mJm9bMV09PWlbMV0pe3IubmV4dD02O2JyZWFrfXRocm93IEVycm9yKCJJbnZhbGlkIHBhc3dvcmQiKTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyKX0pKSkscmouYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRqKHIsdCl7cmV0dXJuIG5qLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBuaigpe3JldHVybiBuaj1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCxuKXt2YXIgZTtyZXR1cm4gSUEoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIuQ3Q9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIGU9b2oobmV3IFVpbnQ4QXJyYXkoREFbdC5XdF0pKSxyLm5leHQ9Myxlaih0LG4sZSk7Y2FzZSAzOnJldHVybiByLmt0KCJyZXR1cm4iLGNqKGUsdC5rZXlzLnBhc3N3b3JkVmVyaWZpY2F0aW9uKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscil9KSkpLG5qLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlaihyLHQsbil7cmV0dXJuIGlqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBpaigpe3JldHVybihpaj1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCxuLGUpe3ZhciBpLG8sdSxmO3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gaT1ZUyhuKSxyLm5leHQ9Myx1aigicmF3IixpLENBLCExLEdBKTtjYXNlIDM6cmV0dXJuIG89ci5BdCxyLm5leHQ9NixmaihPYmplY3QuYXNzaWduKHtzYWx0OmV9LEJBKSxvLDgqKDIqVkFbdC5XdF0rMikpO2Nhc2UgNjp1PXIuQXQsZj1uZXcgVWludDhBcnJheSh1KSx0LmtleXM9e2tleTokQS5XcihzaihmLDAsVkFbdC5XdF0pKSxxdDokQS5XcihzaihmLFZBW3QuV3RdLDIqVkFbdC5XdF0pKSxwYXNzd29yZFZlcmlmaWNhdGlvbjpzaihmLDIqVkFbdC5XdF0pfTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvaihyKXtyZXR1cm4gekEmJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP2NyeXB0by5nZXRSYW5kb21WYWx1ZXMocik6ZnVuY3Rpb24ocil7Zm9yKHZhciB0LG49bmV3IFVpbnQzMkFycmF5KHIuYnVmZmVyKSxlPWZ1bmN0aW9uKHIpe3ZhciB0PTk4NzY1NDMyMSxuPTQyOTQ5NjcyOTU7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuKCgoKHQ9MzY5NjkqKDY1NTM1JnQpKyh0Pj4xNikmbik8PDE2KSsocj0xOGUzKig2NTUzNSZyKSsocj4+MTYpJm4pJm4pLzQyOTQ5NjcyOTYrLjUpKihNYXRoLnJhbmRvbSgpPi41PzE6LTEpfX0saT0wO2k8ci5sZW5ndGg7aSs9NCl7dmFyIG89ZSg0Mjk0OTY3Mjk2Kih0fHxNYXRoLnJhbmRvbSgpKSk7dD05ODc2NTQwNzEqbygpLG5baS80XT00Mjk0OTY3Mjk2Km8oKXwwfXJldHVybiByfShyKX1mdW5jdGlvbiB1aihyLHQsbixlLGkpe3JldHVybiB6QSYmV0EmJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uc3VidGxlLmltcG9ydEtleT9jcnlwdG8uc3VidGxlLmltcG9ydEtleShyLHQsbixlLGkpOlVBLmltcG9ydEtleSh0KX1mdW5jdGlvbiBmaihyLHQsbil7cmV0dXJuIGFqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBhaigpe3JldHVybihhaj1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCxuLGUpe3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZighekF8fCFXQXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGNyeXB0by5zdWJ0bGUuZGVyaXZlQml0cyl7ci5uZXh0PTY7YnJlYWt9cmV0dXJuIHIubmV4dD0zLGNyeXB0by5zdWJ0bGUuZGVyaXZlQml0cyh0LG4sZSk7Y2FzZSAzOnJldHVybiByLmt0KCJyZXR1cm4iLHIuQXQpO2Nhc2UgNjpyZXR1cm4gci5rdCgicmV0dXJuIixVQS53dChuLHQuc2FsdCxCQS5pdGVyYXRpb25zLGUpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBjaihyLHQpe3ZhciBuPXI7cmV0dXJuIHIubGVuZ3RoK3QubGVuZ3RoJiYoKG49bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrdC5sZW5ndGgpKS5zZXQociwwKSxuLnNldCh0LHIubGVuZ3RoKSksbn1mdW5jdGlvbiBzaihyLHQsbil7cmV0dXJuIHIuc3ViYXJyYXkodCxuKX12YXIgdmo9TWF0aC5pbXVsO2Z1bmN0aW9uIGhqKHIsdCl7aWYoIShyIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbGoocix0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGU9dFtuXTtlLnQ9ZS50fHwhMSxlLmk9ITAsInZhbHVlImluIGUmJihlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLmtleSxlKX19ZnVuY3Rpb24gZGoocix0LG4pe3JldHVybiB0JiZsaihyLnByb3RvdHlwZSx0KSxuJiZsaihyLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHJ9QmUoe3RhcmdldDoiTWF0aCIsQzohMCxHOmkoKGZ1bmN0aW9uKCl7cmV0dXJuLTUhPXZqKDQyOTQ5NjcyOTUsNSl8fDIhPXZqLmxlbmd0aH0pKX0se2ltdWw6ZnVuY3Rpb24ocix0KXt2YXIgbj02NTUzNSxlPStyLGk9K3Qsbz1uJmUsdT1uJmk7cmV0dXJuIDB8byp1KygobiZlPj4+MTYpKnUrbyoobiZpPj4+MTYpPDwxNj4+PjApfX0pO3ZhciB5aj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxuKXtoaih0aGlzLHIpLE9iamVjdC5hc3NpZ24odGhpcyx7cGFzc3dvcmQ6dCxwYXNzd29yZFZlcmlmaWNhdGlvbjpufSksZ2oodGhpcyx0KX1yZXR1cm4gZGoocixbe2tleToiYXBwZW5kIix2YWx1ZTpmdW5jdGlvbihyKXt2YXIgdD10aGlzO2lmKHQucGFzc3dvcmQpe3ZhciBuPWJqKHQsci5zdWJhcnJheSgwLDEyKSk7aWYodC5wYXNzd29yZD1udWxsLG5bMTFdIT10LnBhc3N3b3JkVmVyaWZpY2F0aW9uKXRocm93IEVycm9yKCJJbnZhbGlkIHBhc3dvcmQiKTtyPXIuc3ViYXJyYXkoMTIpfXJldHVybiBiaih0LHIpfX0se2tleToiZmx1c2giLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3ZhbGlkOiEwLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9fX1dKSxyfSgpLHdqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LG4pe2hqKHRoaXMsciksT2JqZWN0LmFzc2lnbih0aGlzLHtwYXNzd29yZDp0LHBhc3N3b3JkVmVyaWZpY2F0aW9uOm59KSxnaih0aGlzLHQpfXJldHVybiBkaihyLFt7a2V5OiJhcHBlbmQiLHZhbHVlOmZ1bmN0aW9uKHIpe3ZhciB0LG4sZT10aGlzO2lmKGUucGFzc3dvcmQpe2UucGFzc3dvcmQ9bnVsbDt2YXIgaT1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEyKSk7aVsxMV09ZS5wYXNzd29yZFZlcmlmaWNhdGlvbiwodD1uZXcgVWludDhBcnJheShyLmxlbmd0aCtpLmxlbmd0aCkpLnNldChwaihlLGkpLDApLG49MTJ9ZWxzZSB0PW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKSxuPTA7cmV0dXJuIHQuc2V0KHBqKGUsciksbiksdH19LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntkYXRhOm5ldyBVaW50OEFycmF5KDApfX19XSkscn0oKTtmdW5jdGlvbiBiaihyLHQpe2Zvcih2YXIgbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKW5bZV09U2oociledFtlXSxtaihyLG5bZV0pO3JldHVybiBufWZ1bmN0aW9uIHBqKHIsdCl7Zm9yKHZhciBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspbltlXT1TaihyKV50W2VdLG1qKHIsdFtlXSk7cmV0dXJuIG59ZnVuY3Rpb24gZ2oocix0KXtyLmtleXM9WzMwNTQxOTg5Niw1OTE3NTEwNDksODc4MDgyMTkyXSxyLkp0PW5ldyBVUyhyLmtleXNbMF0pLHIuWHQ9bmV3IFVTKHIua2V5c1syXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspbWoocix0LmNoYXJDb2RlQXQobikpfWZ1bmN0aW9uIG1qKHIsdCl7ci5KdC5hcHBlbmQoW3RdKSxyLmtleXNbMF09fnIuSnQuZ2V0KCksci5rZXlzWzFdPWpqKHIua2V5c1sxXStBaihyLmtleXNbMF0pKSxyLmtleXNbMV09amooTWF0aC5pbXVsKHIua2V5c1sxXSwxMzQ3NzU4MTMpKzEpLHIuWHQuYXBwZW5kKFtyLmtleXNbMV0+Pj4yNF0pLHIua2V5c1syXT1+ci5YdC5nZXQoKX1mdW5jdGlvbiBTaihyKXt2YXIgdD0yfHIua2V5c1syXTtyZXR1cm4gQWooTWF0aC5pbXVsKHQsMV50KT4+PjgpfWZ1bmN0aW9uIEFqKHIpe3JldHVybiAyNTUmcn1mdW5jdGlvbiBqaihyKXtyZXR1cm4gNDI5NDk2NzI5NSZyfWZ1bmN0aW9uIE9qKHIpe3JldHVybiBPaj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHJ9OmZ1bmN0aW9uKHIpe3JldHVybiByJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZyLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZyIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Ygcn0sT2oocil9ZnVuY3Rpb24ga2ooKXsvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICova2o9ZnVuY3Rpb24oKXtyZXR1cm4gcn07dmFyIHI9e30sdD1PYmplY3QucHJvdG90eXBlLG49dC5oYXNPd25Qcm9wZXJ0eSxlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9ZS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89ZS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIix1PWUudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBmKHIsdCxuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsdCx7dmFsdWU6bix0OiEwLGk6ITAsd3JpdGFibGU6ITB9KSxyW3RdfXRyeXtmKHt9LCIiKX1jYXRjaChyKXtmPWZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gclt0XT1ufX1mdW5jdGlvbiBhKHIsdCxuLGUpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj90OnYsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSx1PW5ldyBqKGV8fFtdKTtyZXR1cm4gby5idD1mdW5jdGlvbihyLHQsbil7dmFyIGU9InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxvKXtpZigiZXhlY3V0aW5nIj09PWUpdGhyb3cgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PWUpe2lmKCJ0aHJvdyI9PT1pKXRocm93IG87cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Iobi5tZXRob2Q9aSxuLmd0PW87Oyl7dmFyIHU9bi5TdDtpZih1KXt2YXIgZj1tKHUsbik7aWYoZil7aWYoZj09PXMpY29udGludWU7cmV0dXJuIGZ9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uQXQ9bi5qdD1uLmd0O2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09ZSl0aHJvdyBlPSJjb21wbGV0ZWQiLG4uZ3Q7bi5PdChuLmd0KX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5rdCgicmV0dXJuIixuLmd0KTtlPSJleGVjdXRpbmciO3ZhciBhPWMocix0LG4pO2lmKCJub3JtYWwiPT09YS50eXBlKXtpZihlPW4uZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGEuZ3Q9PT1zKWNvbnRpbnVlO3JldHVybnt2YWx1ZTphLmd0LGRvbmU6bi5kb25lfX0idGhyb3ciPT09YS50eXBlJiYoZT0iY29tcGxldGVkIixuLm1ldGhvZD0idGhyb3ciLG4uZ3Q9YS5ndCl9fX0ocixuLHUpLG99ZnVuY3Rpb24gYyhyLHQsbil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGd0OnIuY2FsbCh0LG4pfX1jYXRjaChyKXtyZXR1cm57dHlwZToidGhyb3ciLGd0OnJ9fX1yLndyYXA9YTt2YXIgcz17fTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIGgoKXt9ZnVuY3Rpb24gbCgpe312YXIgZD17fTtmKGQsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdz15JiZ5KHkoTyhbXSkpKTt3JiZ3IT09dCYmbi5jYWxsKHcsaSkmJihkPXcpO3ZhciBiPWwucHJvdG90eXBlPXYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZCk7ZnVuY3Rpb24gcChyKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Yocix0LChmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5idCh0LHIpfSkpfSkpfWZ1bmN0aW9uIGcocix0KXtmdW5jdGlvbiBlKGksbyx1LGYpe3ZhciBhPWMocltpXSxyLG8pO2lmKCJ0aHJvdyIhPT1hLnR5cGUpe3ZhciBzPWEuZ3Qsdj1zLnZhbHVlO3JldHVybiB2JiYib2JqZWN0Ij09T2oodikmJm4uY2FsbCh2LCJfX2F3YWl0Iik/dC5yZXNvbHZlKHYuRXQpLnRoZW4oKGZ1bmN0aW9uKHIpe2UoIm5leHQiLHIsdSxmKX0pLChmdW5jdGlvbihyKXtlKCJ0aHJvdyIscix1LGYpfSkpOnQucmVzb2x2ZSh2KS50aGVuKChmdW5jdGlvbihyKXtzLnZhbHVlPXIsdShzKX0pLChmdW5jdGlvbihyKXtyZXR1cm4gZSgidGhyb3ciLHIsdSxmKX0pKX1mKGEuZ3QpfXZhciBpO3RoaXMuYnQ9ZnVuY3Rpb24ocixuKXtmdW5jdGlvbiBvKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LGkpe2UocixuLHQsaSl9KSl9cmV0dXJuIGk9aT9pLnRoZW4obyxvKTpvKCl9fWZ1bmN0aW9uIG0ocix0KXt2YXIgbj1yLml0ZXJhdG9yW3QubWV0aG9kXTtpZih2b2lkIDA9PT1uKXtpZih0LlN0PW51bGwsInRocm93Ij09PXQubWV0aG9kKXtpZihyLml0ZXJhdG9yLnEmJih0Lm1ldGhvZD0icmV0dXJuIix0Lmd0PXZvaWQgMCxtKHIsdCksInRocm93Ij09PXQubWV0aG9kKSlyZXR1cm4gczt0Lm1ldGhvZD0idGhyb3ciLHQuZ3Q9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBzfXZhciBlPWMobixyLml0ZXJhdG9yLHQuZ3QpO2lmKCJ0aHJvdyI9PT1lLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5ndD1lLmd0LHQuU3Q9bnVsbCxzO3ZhciBpPWUuZ3Q7cmV0dXJuIGk/aS5kb25lPyh0W3IuVHRdPWkudmFsdWUsdC5uZXh0PXIueHQsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0Lmd0PXZvaWQgMCksdC5TdD1udWxsLHMpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5ndD1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuU3Q9bnVsbCxzKX1mdW5jdGlvbiBTKHIpe3ZhciB0PXtVdDpyWzBdfTsxIGluIHImJih0Lk10PXJbMV0pLDIgaW4gciYmKHQuSXQ9clsyXSx0Lkx0PXJbM10pLHRoaXMuUHQucHVzaCh0KX1mdW5jdGlvbiBBKHIpe3ZhciB0PXIuX3R8fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5ndCxyLl90PXR9ZnVuY3Rpb24gaihyKXt0aGlzLlB0PVt7VXQ6InJvb3QifV0sci5mb3JFYWNoKFMsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gTyhyKXtpZihyKXt2YXIgdD1yW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChyKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci5uZXh0KXJldHVybiByO2lmKCFpc05hTihyLmxlbmd0aCkpe3ZhciBlPS0xLG89ZnVuY3Rpb24gdCgpe2Zvcig7KytlPHIubGVuZ3RoOylpZihuLmNhbGwocixlKSlyZXR1cm4gdC52YWx1ZT1yW2VdLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIG8ubmV4dD1vfX1yZXR1cm57bmV4dDprfX1mdW5jdGlvbiBrKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gaC5wcm90b3R5cGU9bCxmKGIsImNvbnN0cnVjdG9yIixsKSxmKGwsImNvbnN0cnVjdG9yIixoKSxoLmRpc3BsYXlOYW1lPWYobCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHIuUnQ9ZnVuY3Rpb24ocil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHImJnIuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWh8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LHIubWFyaz1mdW5jdGlvbihyKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihyLGwpOihyLl9fcHJvdG9fXz1sLGYocix1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpLHJ9LHIuRnQ9ZnVuY3Rpb24ocil7cmV0dXJue0V0OnJ9fSxwKGcucHJvdG90eXBlKSxmKGcucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksci5OdD1nLHIuYXN5bmM9ZnVuY3Rpb24odCxuLGUsaSxvKXt2b2lkIDA9PT1vJiYobz1Qcm9taXNlKTt2YXIgdT1uZXcgZyhhKHQsbixlLGkpLG8pO3JldHVybiByLlJ0KG4pP3U6dS5uZXh0KCkudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHIuZG9uZT9yLnZhbHVlOnUubmV4dCgpfSkpfSxwKGIpLGYoYix1LCJHZW5lcmF0b3IiKSxmKGIsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxmKGIsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxyLmtleXM9ZnVuY3Rpb24ocil7dmFyIHQ9W107Zm9yKHZhciBuIGluIHIpdC5wdXNoKG4pO3JldHVybiB0LnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciBlPXQucG9wKCk7aWYoZSBpbiByKXJldHVybiBuLnZhbHVlPWUsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sci52YWx1ZXM9TyxqLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aixyZXNldDpmdW5jdGlvbihyKXtpZih0aGlzLkN0PTAsdGhpcy5uZXh0PTAsdGhpcy5BdD10aGlzLmp0PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5TdD1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmd0PXZvaWQgMCx0aGlzLlB0LmZvckVhY2goQSksIXIpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJm4uY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciByPXRoaXMuUHRbMF0uX3Q7aWYoInRocm93Ij09PXIudHlwZSl0aHJvdyByLmd0O3JldHVybiB0aGlzLkJ0fSxPdDpmdW5jdGlvbihyKXtpZih0aGlzLmRvbmUpdGhyb3cgcjt2YXIgdD10aGlzO2Z1bmN0aW9uIGUobixlKXtyZXR1cm4gdS50eXBlPSJ0aHJvdyIsdS5ndD1yLHQubmV4dD1uLGUmJih0Lm1ldGhvZD0ibmV4dCIsdC5ndD12b2lkIDApLCEhZX1mb3IodmFyIGk9dGhpcy5QdC5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89dGhpcy5QdFtpXSx1PW8uX3Q7aWYoInJvb3QiPT09by5VdClyZXR1cm4gZSgiZW5kIik7aWYoby5VdDw9dGhpcy5DdCl7dmFyIGY9bi5jYWxsKG8sImNhdGNoTG9jIiksYT1uLmNhbGwobywiZmluYWxseUxvYyIpO2lmKGYmJmEpe2lmKHRoaXMuQ3Q8by5NdClyZXR1cm4gZShvLk10LCEwKTtpZih0aGlzLkN0PG8uSXQpcmV0dXJuIGUoby5JdCl9ZWxzZSBpZihmKXtpZih0aGlzLkN0PG8uTXQpcmV0dXJuIGUoby5NdCwhMCl9ZWxzZXtpZighYSl0aHJvdyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLkN0PG8uSXQpcmV0dXJuIGUoby5JdCl9fX19LGt0OmZ1bmN0aW9uKHIsdCl7Zm9yKHZhciBlPXRoaXMuUHQubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBpPXRoaXMuUHRbZV07aWYoaS5VdDw9dGhpcy5DdCYmbi5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5DdDxpLkl0KXt2YXIgbz1pO2JyZWFrfX1vJiYoImJyZWFrIj09PXJ8fCJjb250aW51ZSI9PT1yKSYmby5VdDw9dCYmdDw9by5JdCYmKG89bnVsbCk7dmFyIHU9bz9vLl90Ont9O3JldHVybiB1LnR5cGU9cix1Lmd0PXQsbz8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1vLkl0LHMpOnRoaXMuY29tcGxldGUodSl9LGNvbXBsZXRlOmZ1bmN0aW9uKHIsdCl7aWYoInRocm93Ij09PXIudHlwZSl0aHJvdyByLmd0O3JldHVybiJicmVhayI9PT1yLnR5cGV8fCJjb250aW51ZSI9PT1yLnR5cGU/dGhpcy5uZXh0PXIuZ3Q6InJldHVybiI9PT1yLnR5cGU/KHRoaXMuQnQ9dGhpcy5ndD1yLmd0LHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1yLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksc30sZmluaXNoOmZ1bmN0aW9uKHIpe2Zvcih2YXIgdD10aGlzLlB0Lmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLlB0W3RdO2lmKG4uSXQ9PT1yKXJldHVybiB0aGlzLmNvbXBsZXRlKG4uX3Qsbi5MdCksQShuKSxzfX0sY2F0Y2g6ZnVuY3Rpb24ocil7Zm9yKHZhciB0PXRoaXMuUHQubGVuZ3RoLTE7dD49MDstLXQpe3ZhciBuPXRoaXMuUHRbdF07aWYobi5VdD09PXIpe3ZhciBlPW4uX3Q7aWYoInRocm93Ij09PWUudHlwZSl7dmFyIGk9ZS5ndDtBKG4pfXJldHVybiBpfX10aHJvdyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LEd0OmZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gdGhpcy5TdD17aXRlcmF0b3I6TyhyKSxUdDp0LHh0Om59LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5ndD12b2lkIDApLHN9fSxyfWZ1bmN0aW9uIEVqKHIsdCxuLGUsaSxvLHUpe3RyeXt2YXIgZj1yW29dKHUpLGE9Zi52YWx1ZX1jYXRjaChyKXtyZXR1cm4gdm9pZCBuKHIpfWYuZG9uZT90KGEpOlByb21pc2UucmVzb2x2ZShhKS50aGVuKGUsaSl9ZnVuY3Rpb24gVGoocil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsaSl7dmFyIG89ci5hcHBseSh0LG4pO2Z1bmN0aW9uIHUocil7RWoobyxlLGksdSxmLCJuZXh0IixyKX1mdW5jdGlvbiBmKHIpe0VqKG8sZSxpLHUsZiwidGhyb3ciLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24geGoocix0KXtpZighKHIgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBVaihyLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgZT10W25dO2UudD1lLnR8fCExLGUuaT0hMCwidmFsdWUiaW4gZSYmKGUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUua2V5LGUpfX1mdW5jdGlvbiBNaihyLHQsbil7cmV0dXJuIHQmJlVqKHIucHJvdG90eXBlLHQpLG4mJlVqKHIsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscn12YXIgSWo9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQsbixlKXt2YXIgaT1uLnNpZ25hdHVyZSxvPW4ucGFzc3dvcmQsdT1uLnNpZ25lZCxmPW4uY29tcHJlc3NlZCxhPW4uemlwQ3J5cHRvLGM9bi5wYXNzd29yZFZlcmlmaWNhdGlvbixzPW4uZW5jcnlwdGlvblN0cmVuZ3RoLHY9ZS5RdDt4aih0aGlzLHIpO3ZhciBoPSEhbztPYmplY3QuYXNzaWduKHRoaXMse3NpZ25hdHVyZTppLGVuY3J5cHRlZDpoLHNpZ25lZDp1LGNvbXByZXNzZWQ6ZixadDpmJiZuZXcgdCh7UXQ6dn0pLHJuOnUmJm5ldyBVUyx6aXBDcnlwdG86YSxkZWNyeXB0OmgmJmE/bmV3IHlqKG8sYyk6bmV3IEpBKG8sdSxzKX0pfXZhciB0O3JldHVybiBNaihyLFt7a2V5OiJhcHBlbmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHI9VGooa2ooKS5tYXJrKChmdW5jdGlvbiByKHQpe3ZhciBuO3JldHVybiBraigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZighKG49dGhpcykuZW5jcnlwdGVkfHwhdC5sZW5ndGgpe3IubmV4dD01O2JyZWFrfXJldHVybiByLm5leHQ9NCxuLmRlY3J5cHQuYXBwZW5kKHQpO2Nhc2UgNDp0PXIuQXQ7Y2FzZSA1OmlmKCFuLmNvbXByZXNzZWR8fCF0Lmxlbmd0aCl7ci5uZXh0PTk7YnJlYWt9cmV0dXJuIHIubmV4dD04LG4uWnQuYXBwZW5kKHQpO2Nhc2UgODp0PXIuQXQ7Y2FzZSA5OnJldHVybighbi5lbmNyeXB0ZWR8fG4uemlwQ3J5cHRvKSYmbi5zaWduZWQmJnQubGVuZ3RoJiZuLnJuLmFwcGVuZCh0KSxyLmt0KCJyZXR1cm4iLHQpO2Nhc2UgMTE6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0se2tleToiZmx1c2giLHZhbHVlOih0PVRqKGtqKCkubWFyaygoZnVuY3Rpb24gcigpe3ZhciB0LG4sZSxpLG87cmV0dXJuIGtqKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLkN0PXIubmV4dCl7Y2FzZSAwOmlmKHQ9dGhpcyxlPW5ldyBVaW50OEFycmF5KDApLCF0LmVuY3J5cHRlZCl7ci5uZXh0PTc7YnJlYWt9aWYoKGk9dC5kZWNyeXB0LmZsdXNoKCkpLnZhbGlkKXtyLm5leHQ9NjticmVha310aHJvdyBFcnJvcigiSW52YWxpZCBzaWduYXR1cmUiKTtjYXNlIDY6ZT1pLmRhdGE7Y2FzZSA3OmlmKHQuZW5jcnlwdGVkJiYhdC56aXBDcnlwdG98fCF0LnNpZ25lZCl7ci5uZXh0PTEzO2JyZWFrfWlmKG89bmV3IERhdGFWaWV3KG5ldyBVaW50OEFycmF5KDQpLmJ1ZmZlciksbj10LnJuLmdldCgpLG8uc2V0VWludDMyKDAsbiksdC5zaWduYXR1cmU9PW8uZ2V0VWludDMyKDAsITEpKXtyLm5leHQ9MTM7YnJlYWt9dGhyb3cgRXJyb3IoIkludmFsaWQgc2lnbmF0dXJlIik7Y2FzZSAxMzppZighdC5jb21wcmVzc2VkKXtyLm5leHQ9MjI7YnJlYWt9cmV0dXJuIHIubmV4dD0xNix0Llp0LmFwcGVuZChlKTtjYXNlIDE2OmlmKHIudG49ci5BdCxyLnRuKXtyLm5leHQ9MTk7YnJlYWt9ci50bj1uZXcgVWludDhBcnJheSgwKTtjYXNlIDE5OnJldHVybiBlPXIudG4sci5uZXh0PTIyLHQuWnQuZmx1c2goKTtjYXNlIDIyOnJldHVybiByLmt0KCJyZXR1cm4iLHtkYXRhOmUsc2lnbmF0dXJlOm59KTtjYXNlIDIzOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dKSxyfSgpLExqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LG4sZSl7dmFyIGk9bi5lbmNyeXB0ZWQsbz1uLnNpZ25lZCx1PW4uY29tcHJlc3NlZCxmPW4ubGV2ZWwsYT1uLnppcENyeXB0byxjPW4ucGFzc3dvcmQscz1uLnBhc3N3b3JkVmVyaWZpY2F0aW9uLHY9bi5lbmNyeXB0aW9uU3RyZW5ndGgsaD1lLlF0O3hqKHRoaXMsciksT2JqZWN0LmFzc2lnbih0aGlzLHtlbmNyeXB0ZWQ6aSxzaWduZWQ6byxjb21wcmVzc2VkOnUsbm46dSYmbmV3IHQoe2xldmVsOmZ8fDUsUXQ6aH0pLHJuOm8mJm5ldyBVUyx6aXBDcnlwdG86YSxlbmNyeXB0OmkmJmE/bmV3IHdqKGMscyk6bmV3IFhBKGMsdil9KX12YXIgdCxuO3JldHVybiBNaihyLFt7a2V5OiJhcHBlbmQiLHZhbHVlOihuPVRqKGtqKCkubWFyaygoZnVuY3Rpb24gcih0KXt2YXIgbixlO3JldHVybiBraigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZihlPXQsIShuPXRoaXMpLmNvbXByZXNzZWR8fCF0Lmxlbmd0aCl7ci5uZXh0PTY7YnJlYWt9cmV0dXJuIHIubmV4dD01LG4ubm4uYXBwZW5kKHQpO2Nhc2UgNTplPXIuQXQ7Y2FzZSA2OmlmKCFuLmVuY3J5cHRlZHx8IWUubGVuZ3RoKXtyLm5leHQ9MTA7YnJlYWt9cmV0dXJuIHIubmV4dD05LG4uZW5jcnlwdC5hcHBlbmQoZSk7Y2FzZSA5OmU9ci5BdDtjYXNlIDEwOnJldHVybighbi5lbmNyeXB0ZWR8fG4uemlwQ3J5cHRvKSYmbi5zaWduZWQmJnQubGVuZ3RoJiZuLnJuLmFwcGVuZCh0KSxyLmt0KCJyZXR1cm4iLGUpO2Nhc2UgMTI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKSxmdW5jdGlvbihyKXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmx1c2giLHZhbHVlOih0PVRqKGtqKCkubWFyaygoZnVuY3Rpb24gcigpe3ZhciB0LG4sZSxpLG87cmV0dXJuIGtqKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLkN0PXIubmV4dCl7Y2FzZSAwOmlmKHQ9dGhpcyxlPW5ldyBVaW50OEFycmF5KDApLCF0LmNvbXByZXNzZWQpe3IubmV4dD05O2JyZWFrfXJldHVybiByLm5leHQ9NSx0Lm5uLmZsdXNoKCk7Y2FzZSA1OmlmKHIudG49ci5BdCxyLnRuKXtyLm5leHQ9ODticmVha31yLnRuPW5ldyBVaW50OEFycmF5KDApO2Nhc2UgODplPXIudG47Y2FzZSA5OmlmKCF0LmVuY3J5cHRlZCl7ci5uZXh0PTE5O2JyZWFrfXJldHVybiByLm5leHQ9MTIsdC5lbmNyeXB0LmFwcGVuZChlKTtjYXNlIDEyOmU9ci5BdCxpPXQuZW5jcnlwdC5mbHVzaCgpLG49aS5zaWduYXR1cmUsKG89bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgraS5kYXRhLmxlbmd0aCkpLnNldChlLDApLG8uc2V0KGkuZGF0YSxlLmxlbmd0aCksZT1vO2Nhc2UgMTk6cmV0dXJuIHQuZW5jcnlwdGVkJiYhdC56aXBDcnlwdG98fCF0LnNpZ25lZHx8KG49dC5ybi5nZXQoKSksci5rdCgicmV0dXJuIix7ZGF0YTplLHNpZ25hdHVyZTpufSk7Y2FzZSAyMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSkscn0oKTtmdW5jdGlvbiBQaihyKXtyZXR1cm4gUGo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByfTpmdW5jdGlvbihyKXtyZXR1cm4gciYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmci5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmciE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHJ9LFBqKHIpfWZ1bmN0aW9uIF9qKCl7LyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL19qPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9O3ZhciByPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxuPXQuaGFzT3duUHJvcGVydHksZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWUuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWUuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1lLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gZihyLHQsbil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse3ZhbHVlOm4sdDohMCxpOiEwLHdyaXRhYmxlOiEwfSksclt0XX10cnl7Zih7fSwiIil9Y2F0Y2gocil7Zj1mdW5jdGlvbihyLHQsbil7cmV0dXJuIHJbdF09bn19ZnVuY3Rpb24gYShyLHQsbixlKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHY/dDp2LG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksdT1uZXcgaihlfHxbXSk7cmV0dXJuIG8uYnQ9ZnVuY3Rpb24ocix0LG4pe3ZhciBlPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksbyl7aWYoImV4ZWN1dGluZyI9PT1lKXRocm93IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1lKXtpZigidGhyb3ciPT09aSl0aHJvdyBvO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKG4ubWV0aG9kPWksbi5ndD1vOzspe3ZhciB1PW4uU3Q7aWYodSl7dmFyIGY9bSh1LG4pO2lmKGYpe2lmKGY9PT1zKWNvbnRpbnVlO3JldHVybiBmfX1pZigibmV4dCI9PT1uLm1ldGhvZCluLkF0PW4uanQ9bi5ndDtlbHNlIGlmKCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PWUpdGhyb3cgZT0iY29tcGxldGVkIixuLmd0O24uT3Qobi5ndCl9ZWxzZSJyZXR1cm4iPT09bi5tZXRob2QmJm4ua3QoInJldHVybiIsbi5ndCk7ZT0iZXhlY3V0aW5nIjt2YXIgYT1jKHIsdCxuKTtpZigibm9ybWFsIj09PWEudHlwZSl7aWYoZT1uLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixhLmd0PT09cyljb250aW51ZTtyZXR1cm57dmFsdWU6YS5ndCxkb25lOm4uZG9uZX19InRocm93Ij09PWEudHlwZSYmKGU9ImNvbXBsZXRlZCIsbi5tZXRob2Q9InRocm93IixuLmd0PWEuZ3QpfX19KHIsbix1KSxvfWZ1bmN0aW9uIGMocix0LG4pe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixndDpyLmNhbGwodCxuKX19Y2F0Y2gocil7cmV0dXJue3R5cGU6InRocm93IixndDpyfX19ci53cmFwPWE7dmFyIHM9e307ZnVuY3Rpb24gdigpe31mdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGwoKXt9dmFyIGQ9e307ZihkLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIHk9T2JqZWN0LmdldFByb3RvdHlwZU9mLHc9eSYmeSh5KE8oW10pKSk7dyYmdyE9PXQmJm4uY2FsbCh3LGkpJiYoZD13KTt2YXIgYj1sLnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQpO2Z1bmN0aW9uIHAocil7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtmKHIsdCwoZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuYnQodCxyKX0pKX0pKX1mdW5jdGlvbiBnKHIsdCl7ZnVuY3Rpb24gZShpLG8sdSxmKXt2YXIgYT1jKHJbaV0scixvKTtpZigidGhyb3ciIT09YS50eXBlKXt2YXIgcz1hLmd0LHY9cy52YWx1ZTtyZXR1cm4gdiYmIm9iamVjdCI9PVBqKHYpJiZuLmNhbGwodiwiX19hd2FpdCIpP3QucmVzb2x2ZSh2LkV0KS50aGVuKChmdW5jdGlvbihyKXtlKCJuZXh0IixyLHUsZil9KSwoZnVuY3Rpb24ocil7ZSgidGhyb3ciLHIsdSxmKX0pKTp0LnJlc29sdmUodikudGhlbigoZnVuY3Rpb24ocil7cy52YWx1ZT1yLHUocyl9KSwoZnVuY3Rpb24ocil7cmV0dXJuIGUoInRocm93IixyLHUsZil9KSl9ZihhLmd0KX12YXIgaTt0aGlzLmJ0PWZ1bmN0aW9uKHIsbil7ZnVuY3Rpb24gbygpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxpKXtlKHIsbix0LGkpfSkpfXJldHVybiBpPWk/aS50aGVuKG8sbyk6bygpfX1mdW5jdGlvbiBtKHIsdCl7dmFyIG49ci5pdGVyYXRvclt0Lm1ldGhvZF07aWYodm9pZCAwPT09bil7aWYodC5TdD1udWxsLCJ0aHJvdyI9PT10Lm1ldGhvZCl7aWYoci5pdGVyYXRvci5xJiYodC5tZXRob2Q9InJldHVybiIsdC5ndD12b2lkIDAsbShyLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCkpcmV0dXJuIHM7dC5tZXRob2Q9InRocm93Iix0Lmd0PW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2QiKX1yZXR1cm4gc312YXIgZT1jKG4sci5pdGVyYXRvcix0Lmd0KTtpZigidGhyb3ciPT09ZS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuZ3Q9ZS5ndCx0LlN0PW51bGwsczt2YXIgaT1lLmd0O3JldHVybiBpP2kuZG9uZT8odFtyLlR0XT1pLnZhbHVlLHQubmV4dD1yLnh0LCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5ndD12b2lkIDApLHQuU3Q9bnVsbCxzKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuZ3Q9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LlN0PW51bGwscyl9ZnVuY3Rpb24gUyhyKXt2YXIgdD17VXQ6clswXX07MSBpbiByJiYodC5NdD1yWzFdKSwyIGluIHImJih0Lkl0PXJbMl0sdC5MdD1yWzNdKSx0aGlzLlB0LnB1c2godCl9ZnVuY3Rpb24gQShyKXt2YXIgdD1yLl90fHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuZ3Qsci5fdD10fWZ1bmN0aW9uIGoocil7dGhpcy5QdD1be1V0OiJyb290In1dLHIuZm9yRWFjaChTLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIE8ocil7aWYocil7dmFyIHQ9cltpXTtpZih0KXJldHVybiB0LmNhbGwocik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIubmV4dClyZXR1cm4gcjtpZighaXNOYU4oci5sZW5ndGgpKXt2YXIgZT0tMSxvPWZ1bmN0aW9uIHQoKXtmb3IoOysrZTxyLmxlbmd0aDspaWYobi5jYWxsKHIsZSkpcmV0dXJuIHQudmFsdWU9cltlXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBvLm5leHQ9b319cmV0dXJue25leHQ6a319ZnVuY3Rpb24gaygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGgucHJvdG90eXBlPWwsZihiLCJjb25zdHJ1Y3RvciIsbCksZihsLCJjb25zdHJ1Y3RvciIsaCksaC5kaXNwbGF5TmFtZT1mKGwsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxyLlJ0PWZ1bmN0aW9uKHIpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByJiZyLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1ofHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxyLm1hcms9ZnVuY3Rpb24ocil7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YocixsKTooci5fX3Byb3RvX189bCxmKHIsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKSxyfSxyLkZ0PWZ1bmN0aW9uKHIpe3JldHVybntFdDpyfX0scChnLnByb3RvdHlwZSksZihnLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHIuTnQ9ZyxyLmFzeW5jPWZ1bmN0aW9uKHQsbixlLGksbyl7dm9pZCAwPT09byYmKG89UHJvbWlzZSk7dmFyIHU9bmV3IGcoYSh0LG4sZSxpKSxvKTtyZXR1cm4gci5SdChuKT91OnUubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHIpe3JldHVybiByLmRvbmU/ci52YWx1ZTp1Lm5leHQoKX0pKX0scChiKSxmKGIsdSwiR2VuZXJhdG9yIiksZihiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZihiLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksci5rZXlzPWZ1bmN0aW9uKHIpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiByKXQucHVzaChuKTtyZXR1cm4gdC5yZXZlcnNlKCksZnVuY3Rpb24gbigpe2Zvcig7dC5sZW5ndGg7KXt2YXIgZT10LnBvcCgpO2lmKGUgaW4gcilyZXR1cm4gbi52YWx1ZT1lLG4uZG9uZT0hMSxufXJldHVybiBuLmRvbmU9ITAsbn19LHIudmFsdWVzPU8sai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmoscmVzZXQ6ZnVuY3Rpb24ocil7aWYodGhpcy5DdD0wLHRoaXMubmV4dD0wLHRoaXMuQXQ9dGhpcy5qdD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuU3Q9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5ndD12b2lkIDAsdGhpcy5QdC5mb3JFYWNoKEEpLCFyKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZuLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgcj10aGlzLlB0WzBdLl90O2lmKCJ0aHJvdyI9PT1yLnR5cGUpdGhyb3cgci5ndDtyZXR1cm4gdGhpcy5CdH0sT3Q6ZnVuY3Rpb24ocil7aWYodGhpcy5kb25lKXRocm93IHI7dmFyIHQ9dGhpcztmdW5jdGlvbiBlKG4sZSl7cmV0dXJuIHUudHlwZT0idGhyb3ciLHUuZ3Q9cix0Lm5leHQ9bixlJiYodC5tZXRob2Q9Im5leHQiLHQuZ3Q9dm9pZCAwKSwhIWV9Zm9yKHZhciBpPXRoaXMuUHQubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPXRoaXMuUHRbaV0sdT1vLl90O2lmKCJyb290Ij09PW8uVXQpcmV0dXJuIGUoImVuZCIpO2lmKG8uVXQ8PXRoaXMuQ3Qpe3ZhciBmPW4uY2FsbChvLCJjYXRjaExvYyIpLGE9bi5jYWxsKG8sImZpbmFsbHlMb2MiKTtpZihmJiZhKXtpZih0aGlzLkN0PG8uTXQpcmV0dXJuIGUoby5NdCwhMCk7aWYodGhpcy5DdDxvLkl0KXJldHVybiBlKG8uSXQpfWVsc2UgaWYoZil7aWYodGhpcy5DdDxvLk10KXJldHVybiBlKG8uTXQsITApfWVsc2V7aWYoIWEpdGhyb3cgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5DdDxvLkl0KXJldHVybiBlKG8uSXQpfX19fSxrdDpmdW5jdGlvbihyLHQpe2Zvcih2YXIgZT10aGlzLlB0Lmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgaT10aGlzLlB0W2VdO2lmKGkuVXQ8PXRoaXMuQ3QmJm4uY2FsbChpLCJmaW5hbGx5TG9jIikmJnRoaXMuQ3Q8aS5JdCl7dmFyIG89aTticmVha319byYmKCJicmVhayI9PT1yfHwiY29udGludWUiPT09cikmJm8uVXQ8PXQmJnQ8PW8uSXQmJihvPW51bGwpO3ZhciB1PW8/by5fdDp7fTtyZXR1cm4gdS50eXBlPXIsdS5ndD10LG8/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9by5JdCxzKTp0aGlzLmNvbXBsZXRlKHUpfSxjb21wbGV0ZTpmdW5jdGlvbihyLHQpe2lmKCJ0aHJvdyI9PT1yLnR5cGUpdGhyb3cgci5ndDtyZXR1cm4iYnJlYWsiPT09ci50eXBlfHwiY29udGludWUiPT09ci50eXBlP3RoaXMubmV4dD1yLmd0OiJyZXR1cm4iPT09ci50eXBlPyh0aGlzLkJ0PXRoaXMuZ3Q9ci5ndCx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ci50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLHN9LGZpbmlzaDpmdW5jdGlvbihyKXtmb3IodmFyIHQ9dGhpcy5QdC5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIG49dGhpcy5QdFt0XTtpZihuLkl0PT09cilyZXR1cm4gdGhpcy5jb21wbGV0ZShuLl90LG4uTHQpLEEobiksc319LGNhdGNoOmZ1bmN0aW9uKHIpe2Zvcih2YXIgdD10aGlzLlB0Lmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLlB0W3RdO2lmKG4uVXQ9PT1yKXt2YXIgZT1uLl90O2lmKCJ0aHJvdyI9PT1lLnR5cGUpe3ZhciBpPWUuZ3Q7QShuKX1yZXR1cm4gaX19dGhyb3cgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxHdDpmdW5jdGlvbihyLHQsbil7cmV0dXJuIHRoaXMuU3Q9e2l0ZXJhdG9yOk8ociksVHQ6dCx4dDpufSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuZ3Q9dm9pZCAwKSxzfX0scn1mdW5jdGlvbiBSaihyLHQsbixlLGksbyx1KXt0cnl7dmFyIGY9cltvXSh1KSxhPWYudmFsdWV9Y2F0Y2gocil7cmV0dXJuIHZvaWQgbihyKX1mLmRvbmU/dChhKTpQcm9taXNlLnJlc29sdmUoYSkudGhlbihlLGkpfWZ1bmN0aW9uIEZqKHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLGkpe3ZhciBvPXIuYXBwbHkodCxuKTtmdW5jdGlvbiB1KHIpe1JqKG8sZSxpLHUsZiwibmV4dCIscil9ZnVuY3Rpb24gZihyKXtSaihvLGUsaSx1LGYsInRocm93IixyKX11KHZvaWQgMCl9KSl9fXZhciBOaixDaj17aW5pdDpmdW5jdGlvbihyKXtyLnNjcmlwdHMmJnIuc2NyaXB0cy5sZW5ndGgmJmltcG9ydFNjcmlwdHMuYXBwbHkodm9pZCAwLHIuc2NyaXB0cyk7dmFyIHQsbj1yLm9wdGlvbnM7c2VsZi5pbml0Q29kZWMmJnNlbGYuaW5pdENvZGVjKCksbi5jb2RlY1R5cGUuc3RhcnRzV2l0aCgiZGVmbGF0ZSIpP3Q9c2VsZi5EZWZsYXRlOm4uY29kZWNUeXBlLnN0YXJ0c1dpdGgoImluZmxhdGUiKSYmKHQ9c2VsZi5JbmZsYXRlKSxOaj1mdW5jdGlvbihyLHQsbil7cmV0dXJuIHQuY29kZWNUeXBlLnN0YXJ0c1dpdGgoImRlZmxhdGUiKT9uZXcgTGoocix0LG4pOnQuY29kZWNUeXBlLnN0YXJ0c1dpdGgoImluZmxhdGUiKT9uZXcgSWoocix0LG4pOnZvaWQgMH0odCxuLHIuY29uZmlnKX0sYXBwZW5kOmZ1bmN0aW9uKHIpe3JldHVybiBGaihfaigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gX2ooKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQuQ3Q9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLE5qLmFwcGVuZChyLmRhdGEpO2Nhc2UgMjpyZXR1cm4gdC50bj10LkF0LHQua3QoInJldHVybiIse2RhdGE6dC50bn0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSgpfSxmbHVzaDpmdW5jdGlvbigpe3JldHVybiBOai5mbHVzaCgpfX07YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24oKXt2YXIgcj1GaihfaigpLm1hcmsoKGZ1bmN0aW9uIHIodCl7dmFyIG4sZSxpLG87cmV0dXJuIF9qKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLkN0PXIubmV4dCl7Y2FzZSAwOmlmKG49dC5kYXRhLGU9bi50eXBlLCEoaT1DaltlXSkpe3IubmV4dD0xOTticmVha31yZXR1cm4gci5DdD00LG4uZGF0YSYmKG4uZGF0YT1uZXcgVWludDhBcnJheShuLmRhdGEpKSxyLm5leHQ9OCxpKG4pO2Nhc2UgODppZihyLnRuPXIuQXQsci50bil7ci5uZXh0PTExO2JyZWFrfXIudG49e307Y2FzZSAxMTppZigobz1yLnRuKS50eXBlPWUsby5kYXRhKXRyeXtvLmRhdGE9by5kYXRhLmJ1ZmZlcixwb3N0TWVzc2FnZShvLFtvLmRhdGFdKX1jYXRjaChyKXtwb3N0TWVzc2FnZShvKX1lbHNlIHBvc3RNZXNzYWdlKG8pO3IubmV4dD0xOTticmVhaztjYXNlIDE2OnIuQ3Q9MTYsci5lbj1yLmNhdGNoKDQpLHBvc3RNZXNzYWdlKHt0eXBlOmUsZXJyb3I6e21lc3NhZ2U6ci5lbi5tZXNzYWdlLHN0YWNrOnIuZW4uc3RhY2t9fSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsbnVsbCxbWzQsMTZdXSl9KSkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKTt2YXIgQmo9aXMubWFwO0JlKHt0YXJnZXQ6IkFycmF5IixWOiEwLEc6IVFtKCJtYXAiKX0se21hcDpmdW5jdGlvbihyKXtyZXR1cm4gQmoodGhpcyxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgR2o9SGk7QmUoe3RhcmdldDoiQXJyYXkiLFY6ITB9LHtmaWxsOmd1fSksR2ooImZpbGwiKSwoMCxzYS5leHBvcnRzKSgiVWludDE2IiwoZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gcih0aGlzLHQsbixlKX19KSk7dmFyIERqLFZqLFlqLHpqLFdqPWp0LCRqPWksSGo9bi5SZWdFeHAsS2o9JGooKGZ1bmN0aW9uKCl7dmFyIHI9SGooImEiLCJ5Iik7cmV0dXJuIHIubGFzdEluZGV4PTIsbnVsbCE9ci5leGVjKCJhYmNkIil9KSkscWo9S2p8fCRqKChmdW5jdGlvbigpe3JldHVybiFIaigiYSIsInkiKS5zdGlja3l9KSksSmo9e29uOktqfHwkaigoZnVuY3Rpb24oKXt2YXIgcj1IaigiXnIiLCJneSIpO3JldHVybiByLmxhc3RJbmRleD0yLG51bGwhPXIuZXhlYygic3RyIil9KSksdW46cWosZm46S2p9LFhqPWksUWo9bi5SZWdFeHAsWmo9WGooKGZ1bmN0aW9uKCl7dmFyIHI9UWooIi4iLCJzIik7cmV0dXJuIShyLmRvdEFsbCYmci5leGVjKCJcbiIpJiYicyI9PT1yLmZsYWdzKX0pKSxyTz1pLHRPPW4uUmVnRXhwLG5PPXJPKChmdW5jdGlvbigpe3ZhciByPXRPKCIoPzxhPmIpIiwiZyIpO3JldHVybiJiIiE9PXIuZXhlYygiYiIpLmFuLmF8fCJiYyIhPT0iYiIucmVwbGFjZShyLCIkPGE+YyIpfSkpLGVPPWEsaU89UyxvTz1RZSx1Tz1mdW5jdGlvbigpe3ZhciByPVdqKHRoaXMpLHQ9IiI7cmV0dXJuIHIuaGFzSW5kaWNlcyYmKHQrPSJkIiksci5nbG9iYWwmJih0Kz0iZyIpLHIuaWdub3JlQ2FzZSYmKHQrPSJpIiksci5tdWx0aWxpbmUmJih0Kz0ibSIpLHIuZG90QWxsJiYodCs9InMiKSxyLnVuaWNvZGUmJih0Kz0idSIpLHIuY24mJih0Kz0idiIpLHIuc3RpY2t5JiYodCs9InkiKSx0fSxmTz1KaixhTz1wci5leHBvcnRzLGNPPUNpLHNPPW1uLmdldCx2Tz1aaixoTz1uTyxsTz1hTygibmF0aXZlLXN0cmluZy1yZXBsYWNlIiwiIi5yZXBsYWNlKSxkTz0vdC8uZXhlYyx5Tz1kTyx3Tz1pTygiIi5jaGFyQXQpLGJPPWlPKCIiLmluZGV4T2YpLHBPPWlPKCIiLnJlcGxhY2UpLGdPPWlPKCIiLnNsaWNlKSxtTz0oVmo9L2IqL2csZU8oZE8sRGo9L2EvLCJhIiksZU8oZE8sVmosImEiKSwwIT09RGoubGFzdEluZGV4fHwwIT09VmoubGFzdEluZGV4KSxTTz1mTy5vbixBTz12b2lkIDAhPT0vKCk/Py8uZXhlYygiIilbMV07ZnVuY3Rpb24gak8ocil7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKEFycmF5LmlzQXJyYXkocikpcmV0dXJuIGtPKHIpfShyKXx8ZnVuY3Rpb24ocil7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXJbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9clsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHIpfShyKXx8T08ocil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gT08ocix0KXtpZihyKXtpZigic3RyaW5nIj09dHlwZW9mIHIpcmV0dXJuIGtPKHIsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnIuY29uc3RydWN0b3ImJihuPXIuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbShyKToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP2tPKHIsdCk6dm9pZCAwfX1mdW5jdGlvbiBrTyhyLHQpeyhudWxsPT10fHx0PnIubGVuZ3RoKSYmKHQ9ci5sZW5ndGgpO2Zvcih2YXIgbj0wLGU9QXJyYXkodCk7dD5uO24rKyllW25dPXJbbl07cmV0dXJuIGV9ZnVuY3Rpb24gRU8ocil7cmV0dXJuIFRPKHIubWFwKChmdW5jdGlvbihyKXt2YXIgdCxuPWZ1bmN0aW9uKHIpe2lmKEFycmF5LmlzQXJyYXkocikpcmV0dXJuIHJ9KHQ9cil8fGZ1bmN0aW9uKHIpe3ZhciB0PW51bGw9PXI/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmcltTeW1ib2wuaXRlcmF0b3JdfHxyWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9dCl7dmFyIG4sZSxpPVtdLG89ITAsdT0hMTt0cnl7Zm9yKHQ9dC5jYWxsKHIpOyEobz0obj10Lm5leHQoKSkuZG9uZSkmJihpLnB1c2gobi52YWx1ZSksMiE9PWkubGVuZ3RoKTtvPSEwKTt9Y2F0Y2gocil7dT0hMCxlPXJ9ZmluYWxseXt0cnl7b3x8bnVsbD09dC5xfHx0LnEoKX1maW5hbGx5e2lmKHUpdGhyb3cgZX19cmV0dXJuIGl9fSh0KXx8T08odCwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpLGU9blswXSxpPW5bMV07cmV0dXJuIEFycmF5KGUpLmZpbGwoaSwwLGUpfSkpKX1mdW5jdGlvbiBUTyhyKXtyZXR1cm4gci5yZWR1Y2UoKGZ1bmN0aW9uKHIsdCl7cmV0dXJuIHIuY29uY2F0KEFycmF5LmlzQXJyYXkodCk/VE8odCk6dCl9KSxbXSl9KG1PfHxBT3x8U098fHZPfHxoTykmJih5Tz1mdW5jdGlvbihyKXt2YXIgdCxuLGUsaSxvLHUsZixhPXRoaXMsYz1zTyhhKSxzPW9PKHIpLHY9Yy5yYXc7aWYodilyZXR1cm4gdi5sYXN0SW5kZXg9YS5sYXN0SW5kZXgsdD1lTyh5Tyx2LHMpLGEubGFzdEluZGV4PXYubGFzdEluZGV4LHQ7dmFyIGg9Yy5hbixsPVNPJiZhLnN0aWNreSxkPWVPKHVPLGEpLHk9YS5zb3VyY2Usdz0wLGI9cztpZihsJiYoZD1wTyhkLCJ5IiwiIiksLTE9PT1iTyhkLCJnIikmJihkKz0iZyIpLGI9Z08ocyxhLmxhc3RJbmRleCksYS5sYXN0SW5kZXg+MCYmKCFhLm11bHRpbGluZXx8YS5tdWx0aWxpbmUmJiJcbiIhPT13TyhzLGEubGFzdEluZGV4LTEpKSYmKHk9Iig/OiAiK3krIikiLGI9IiAiK2IsdysrKSxuPVJlZ0V4cCgiXig/OiIreSsiKSIsZCkpLEFPJiYobj1SZWdFeHAoIl4iK3krIiQoPyFcXHMpIixkKSksbU8mJihlPWEubGFzdEluZGV4KSxpPWVPKGRPLGw/bjphLGIpLGw/aT8oaS5pbnB1dD1nTyhpLmlucHV0LHcpLGlbMF09Z08oaVswXSx3KSxpLmluZGV4PWEubGFzdEluZGV4LGEubGFzdEluZGV4Kz1pWzBdLmxlbmd0aCk6YS5sYXN0SW5kZXg9MDptTyYmaSYmKGEubGFzdEluZGV4PWEuZ2xvYmFsP2kuaW5kZXgraVswXS5sZW5ndGg6ZSksQU8mJmkmJmkubGVuZ3RoPjEmJmVPKGxPLGlbMF0sbiwoZnVuY3Rpb24oKXtmb3Iobz0xO2FyZ3VtZW50cy5sZW5ndGgtMj5vO28rKyl2b2lkIDA9PT1hcmd1bWVudHNbb10mJihpW29dPXZvaWQgMCl9KSksaSYmaClmb3IoaS5hbj11PWNPKG51bGwpLG89MDtvPGgubGVuZ3RoO28rKyl1WyhmPWhbb10pWzBdXT1pW2ZbMV1dO3JldHVybiBpfSksQmUoe3RhcmdldDoiUmVnRXhwIixWOiEwLEc6Ly4vLmV4ZWMhPT15T30se2V4ZWM6eU99KTt2YXIgeE89KFlqPVswLDEsMiwzXSkuY29uY2F0LmFwcGx5KFlqLGpPKEVPKFtbMiw0XSxbMiw1XSxbNCw2XSxbNCw3XSxbOCw4XSxbOCw5XSxbMTYsMTBdLFsxNiwxMV0sWzMyLDEyXSxbMzIsMTNdLFs2NCwxNF0sWzY0LDE1XSxbMiwwXSxbMSwxNl0sWzEsMTddLFsyLDE4XSxbMiwxOV0sWzQsMjBdLFs0LDIxXSxbOCwyMl0sWzgsMjNdLFsxNiwyNF0sWzE2LDI1XSxbMzIsMjZdLFszMiwyN10sWzY0LDI4XSxbNjQsMjldXSkpKTtmdW5jdGlvbiBVTygpe3ZhciByPXRoaXM7ZnVuY3Rpb24gdChyLHQpe3ZhciBuPTA7ZG97bnw9MSZyLHI+Pj49MSxuPDw9MX13aGlsZSgtLXQ+MCk7cmV0dXJuIG4+Pj4xfXIuc249ZnVuY3Rpb24obil7dmFyIGUsaSxvLHU9ci52bixmPXIubG4uaG4sYT1yLmxuLmRuLGM9LTE7Zm9yKG4ueW49MCxuLnduPTU3MyxlPTA7YT5lO2UrKykwIT09dVsyKmVdPyhuLmJuWysrbi55bl09Yz1lLG4ucG5bZV09MCk6dVsyKmUrMV09MDtmb3IoOzI+bi55bjspdVsyKihvPW4uYm5bKytuLnluXT0yPmM/KytjOjApXT0xLG4ucG5bb109MCxuLmduLS0sZiYmKG4ubW4tPWZbMipvKzFdKTtmb3Ioci5Tbj1jLGU9TWF0aC5mbG9vcihuLnluLzIpO2U+PTE7ZS0tKW4uQW4odSxlKTtvPWE7ZG97ZT1uLmJuWzFdLG4uYm5bMV09bi5ibltuLnluLS1dLG4uQW4odSwxKSxpPW4uYm5bMV0sbi5iblstLW4ud25dPWUsbi5iblstLW4ud25dPWksdVsyKm9dPXVbMiplXSt1WzIqaV0sbi5wbltvXT1NYXRoLm1heChuLnBuW2VdLG4ucG5baV0pKzEsdVsyKmUrMV09dVsyKmkrMV09byxuLmJuWzFdPW8rKyxuLkFuKHUsMSl9d2hpbGUobi55bj49Mik7bi5iblstLW4ud25dPW4uYm5bMV0sZnVuY3Rpb24odCl7dmFyIG4sZSxpLG8sdSxmLGE9ci52bixjPXIubG4uaG4scz1yLmxuLmpuLHY9ci5sbi5PbixoPXIubG4ua24sbD0wO2ZvcihvPTA7MTU+PW87bysrKXQuRW5bb109MDtmb3IoYVsyKnQuYm5bdC53bl0rMV09MCxuPXQud24rMTs1NzM+bjtuKyspKG89YVsyKmFbMiooZT10LmJuW25dKSsxXSsxXSsxKT5oJiYobz1oLGwrKyksYVsyKmUrMV09byxlPnIuU258fCh0LkVuW29dKyssdT0wLHY+ZXx8KHU9c1tlLXZdKSxmPWFbMiplXSx0LmduKz1mKihvK3UpLGMmJih0Lm1uKz1mKihjWzIqZSsxXSt1KSkpO2lmKDAhPT1sKXtkb3tmb3Iobz1oLTE7MD09PXQuRW5bb107KW8tLTt0LkVuW29dLS0sdC5FbltvKzFdKz0yLHQuRW5baF0tLSxsLT0yfXdoaWxlKGw+MCk7Zm9yKG89aDswIT09bztvLS0pZm9yKGU9dC5FbltvXTswIT09ZTspKGk9dC5iblstLW5dKT5yLlNufHwoYVsyKmkrMV0hPW8mJih0LmduKz0oby1hWzIqaSsxXSkqYVsyKmldLGFbMippKzFdPW8pLGUtLSl9fShuKSxmdW5jdGlvbihyLG4sZSl7dmFyIGksbyx1LGY9W10sYT0wO2ZvcihpPTE7MTU+PWk7aSsrKWZbaV09YT1hK2VbaS0xXTw8MTtmb3Iobz0wO24+PW87bysrKTAhPT0odT1yWzIqbysxXSkmJihyWzIqb109dChmW3VdKyssdSkpfSh1LHIuU24sbi5Fbil9fWZ1bmN0aW9uIE1PKHIsdCxuLGUsaSl7dmFyIG89dGhpcztvLmhuPXIsby5qbj10LG8uT249bixvLmRuPWUsby5rbj1pfVVPLlRuPSh6aj1bMCwxLDIsMyw0LDUsNiw3XSkuY29uY2F0LmFwcGx5KHpqLGpPKEVPKFtbMiw4XSxbMiw5XSxbMiwxMF0sWzIsMTFdLFs0LDEyXSxbNCwxM10sWzQsMTRdLFs0LDE1XSxbOCwxNl0sWzgsMTddLFs4LDE4XSxbOCwxOV0sWzE2LDIwXSxbMTYsMjFdLFsxNiwyMl0sWzE2LDIzXSxbMzIsMjRdLFszMiwyNV0sWzMyLDI2XSxbMzEsMjddLFsxLDI4XV0pKSksVU8ueG49WzAsMSwyLDMsNCw1LDYsNyw4LDEwLDEyLDE0LDE2LDIwLDI0LDI4LDMyLDQwLDQ4LDU2LDY0LDgwLDk2LDExMiwxMjgsMTYwLDE5MiwyMjQsMF0sVU8uVW49WzAsMSwyLDMsNCw2LDgsMTIsMTYsMjQsMzIsNDgsNjQsOTYsMTI4LDE5MiwyNTYsMzg0LDUxMiw3NjgsMTAyNCwxNTM2LDIwNDgsMzA3Miw0MDk2LDYxNDQsODE5MiwxMjI4OCwxNjM4NCwyNDU3Nl0sVU8uTW49ZnVuY3Rpb24ocil7cmV0dXJuIDI1Nj5yP3hPW3JdOnhPWzI1Nisocj4+PjcpXX0sVU8uSW49WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0sVU8uTG49WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLFVPLlBuPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxVTy5fbj1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07dmFyIElPPUVPKFtbMTQ0LDhdLFsxMTIsOV0sWzI0LDddLFs4LDhdXSk7TU8uUm49VE8oWzEyLDE0MCw3NiwyMDQsNDQsMTcyLDEwOCwyMzYsMjgsMTU2LDkyLDIyMCw2MCwxODgsMTI0LDI1MiwyLDEzMCw2NiwxOTQsMzQsMTYyLDk4LDIyNiwxOCwxNDYsODIsMjEwLDUwLDE3OCwxMTQsMjQyLDEwLDEzOCw3NCwyMDIsNDIsMTcwLDEwNiwyMzQsMjYsMTU0LDkwLDIxOCw1OCwxODYsMTIyLDI1MCw2LDEzNCw3MCwxOTgsMzgsMTY2LDEwMiwyMzAsMjIsMTUwLDg2LDIxNCw1NCwxODIsMTE4LDI0NiwxNCwxNDIsNzgsMjA2LDQ2LDE3NCwxMTAsMjM4LDMwLDE1OCw5NCwyMjIsNjIsMTkwLDEyNiwyNTQsMSwxMjksNjUsMTkzLDMzLDE2MSw5NywyMjUsMTcsMTQ1LDgxLDIwOSw0OSwxNzcsMTEzLDI0MSw5LDEzNyw3MywyMDEsNDEsMTY5LDEwNSwyMzMsMjUsMTUzLDg5LDIxNyw1NywxODUsMTIxLDI0OSw1LDEzMyw2OSwxOTcsMzcsMTY1LDEwMSwyMjksMjEsMTQ5LDg1LDIxMyw1MywxODEsMTE3LDI0NSwxMywxNDEsNzcsMjA1LDQ1LDE3MywxMDksMjM3LDI5LDE1Nyw5MywyMjEsNjEsMTg5LDEyNSwyNTMsMTksMjc1LDE0Nyw0MDMsODMsMzM5LDIxMSw0NjcsNTEsMzA3LDE3OSw0MzUsMTE1LDM3MSwyNDMsNDk5LDExLDI2NywxMzksMzk1LDc1LDMzMSwyMDMsNDU5LDQzLDI5OSwxNzEsNDI3LDEwNywzNjMsMjM1LDQ5MSwyNywyODMsMTU1LDQxMSw5MSwzNDcsMjE5LDQ3NSw1OSwzMTUsMTg3LDQ0MywxMjMsMzc5LDI1MSw1MDcsNywyNjMsMTM1LDM5MSw3MSwzMjcsMTk5LDQ1NSwzOSwyOTUsMTY3LDQyMywxMDMsMzU5LDIzMSw0ODcsMjMsMjc5LDE1MSw0MDcsODcsMzQzLDIxNSw0NzEsNTUsMzExLDE4Myw0MzksMTE5LDM3NSwyNDcsNTAzLDE1LDI3MSwxNDMsMzk5LDc5LDMzNSwyMDcsNDYzLDQ3LDMwMywxNzUsNDMxLDExMSwzNjcsMjM5LDQ5NSwzMSwyODcsMTU5LDQxNSw5NSwzNTEsMjIzLDQ3OSw2MywzMTksMTkxLDQ0NywxMjcsMzgzLDI1NSw1MTEsMCw2NCwzMiw5NiwxNiw4MCw0OCwxMTIsOCw3Miw0MCwxMDQsMjQsODgsNTYsMTIwLDQsNjgsMzYsMTAwLDIwLDg0LDUyLDExNiwzLDEzMSw2NywxOTUsMzUsMTYzLDk5LDIyN10ubWFwKChmdW5jdGlvbihyLHQpe3JldHVybltyLElPW3RdXX0pKSk7dmFyIExPPUVPKFtbMzAsNV1dKTtmdW5jdGlvbiBQTyhyLHQsbixlLGkpe3ZhciBvPXRoaXM7by5Gbj1yLG8uTm49dCxvLkNuPW4sby5Cbj1lLG8uR249aX1NTy5Ebj1UTyhbMCwxNiw4LDI0LDQsMjAsMTIsMjgsMiwxOCwxMCwyNiw2LDIyLDE0LDMwLDEsMTcsOSwyNSw1LDIxLDEzLDI5LDMsMTksMTEsMjcsNywyM10ubWFwKChmdW5jdGlvbihyLHQpe3JldHVybltyLExPW3RdXX0pKSksTU8uVm49bmV3IE1PKE1PLlJuLFVPLkluLDI1NywyODYsMTUpLE1PLlluPW5ldyBNTyhNTy5EbixVTy5MbiwwLDMwLDE1KSxNTy56bj1uZXcgTU8obnVsbCxVTy5QbiwwLDE5LDcpO3ZhciBfTz1bbmV3IFBPKDAsMCwwLDAsMCksbmV3IFBPKDQsNCw4LDQsMSksbmV3IFBPKDQsNSwxNiw4LDEpLG5ldyBQTyg0LDYsMzIsMzIsMSksbmV3IFBPKDQsNCwxNiwxNiwyKSxuZXcgUE8oOCwxNiwzMiwzMiwyKSxuZXcgUE8oOCwxNiwxMjgsMTI4LDIpLG5ldyBQTyg4LDMyLDEyOCwyNTYsMiksbmV3IFBPKDMyLDEyOCwyNTgsMTAyNCwyKSxuZXcgUE8oMzIsMjU4LDI1OCw0MDk2LDIpXSxSTz1bIm5lZWQgZGljdGlvbmFyeSIsInN0cmVhbSBlbmQiLCIiLCIiLCJzdHJlYW0gZXJyb3IiLCJkYXRhIGVycm9yIiwiIiwiYnVmZmVyIGVycm9yIiwiIiwiIl07ZnVuY3Rpb24gRk8ocix0LG4sZSl7dmFyIGk9clsyKnRdLG89clsyKm5dO3JldHVybiBvPml8fGk9PW8mJmVbdF08PWVbbl19ZnVuY3Rpb24gTk8oKXt2YXIgcix0LG4sZSxpLG8sdSxmLGEsYyxzLHYsaCxsLGQseSx3LGIscCxnLG0sUyxBLGosTyxrLEUsVCx4LFUsTSxJLEwsUCxfLFIsRixOLEMsQj10aGlzLEc9bmV3IFVPLEQ9bmV3IFVPLFY9bmV3IFVPO2Z1bmN0aW9uIFkoKXt2YXIgcjtmb3Iocj0wOzI4Nj5yO3IrKylNWzIqcl09MDtmb3Iocj0wOzMwPnI7cisrKUlbMipyXT0wO2ZvcihyPTA7MTk+cjtyKyspTFsyKnJdPTA7TVs1MTJdPTEsQi5nbj1CLm1uPTAsXz1SPTB9ZnVuY3Rpb24geihyLHQpe3ZhciBuLGU9LTEsaT1yWzFdLG89MCx1PTcsZj00OzA9PT1pJiYodT0xMzgsZj0zKSxyWzIqKHQrMSkrMV09NjU1MzU7Zm9yKHZhciBhPTA7dD49YTthKyspbj1pLGk9clsyKihhKzEpKzFdLCsrbzx1JiZuPT1pfHwoZj5vP0xbMipuXSs9bzowIT09bj8obiE9ZSYmTFsyKm5dKyssTFszMl0rKyk6bz4xMD9MWzM2XSsrOkxbMzRdKyssbz0wLGU9biwwPT09aT8odT0xMzgsZj0zKTpuPT1pPyh1PTYsZj0zKToodT03LGY9NCkpfWZ1bmN0aW9uIFcocil7Qi5XbltCLnBlbmRpbmcrK109cn1mdW5jdGlvbiAkKHIpe1coMjU1JnIpLFcocj4+PjgmMjU1KX1mdW5jdGlvbiBIKHIsdCl7dmFyIG4sZT10O0M+MTYtZT8oJChOfD0obj1yKTw8QyY2NTUzNSksTj1uPj4+MTYtQyxDKz1lLTE2KTooTnw9cjw8QyY2NTUzNSxDKz1lKX1mdW5jdGlvbiBLKHIsdCl7dmFyIG49MipyO0goNjU1MzUmdFtuXSw2NTUzNSZ0W24rMV0pfWZ1bmN0aW9uIHEocix0KXt2YXIgbixlLGk9LTEsbz1yWzFdLHU9MCxmPTcsYT00O2ZvcigwPT09byYmKGY9MTM4LGE9Myksbj0wO3Q+PW47bisrKWlmKGU9byxvPXJbMioobisxKSsxXSwrK3U+PWZ8fGUhPW8pe2lmKGE+dSlkb3tLKGUsTCl9d2hpbGUoMCE9LS11KTtlbHNlIDAhPT1lPyhlIT1pJiYoSyhlLEwpLHUtLSksSygxNixMKSxIKHUtMywyKSk6dT4xMD8oSygxOCxMKSxIKHUtMTEsNykpOihLKDE3LEwpLEgodS0zLDMpKTt1PTAsaT1lLDA9PT1vPyhmPTEzOCxhPTMpOmU9PW8/KGY9NixhPTMpOihmPTcsYT00KX19ZnVuY3Rpb24gSigpezE2PT1DPygkKE4pLE49MCxDPTApOjg+Q3x8KFcoMjU1Jk4pLE4+Pj49OCxDLT04KX1mdW5jdGlvbiBYKHIsdCl7dmFyIG4sZSxpO2lmKEIuJG5bX109cixCLkhuW19dPTI1NSZ0LF8rKywwPT09cj9NWzIqdF0rKzooUisrLHItLSxNWzIqKFVPLlRuW3RdKzI1NisxKV0rKyxJWzIqVU8uTW4ocildKyspLDA9PSg4MTkxJl8pJiZFPjIpe2ZvcihuPTgqXyxlPW0tdyxpPTA7MzA+aTtpKyspbis9SVsyKmldKig1K1VPLkxuW2ldKTtpZihuPj4+PTMsTWF0aC5mbG9vcihfLzIpPlImJk1hdGguZmxvb3IoZS8yKT5uKXJldHVybiEwfXJldHVybiBfPT1QLTF9ZnVuY3Rpb24gUShyLHQpe3ZhciBuLGUsaSxvLHU9MDtpZigwIT09Xylkb3tuPUIuJG5bdV0sZT1CLkhuW3VdLHUrKywwPT09bj9LKGUscik6KEsoKGk9VU8uVG5bZV0pKzI1NisxLHIpLDAhPT0obz1VTy5JbltpXSkmJkgoZS09VU8ueG5baV0sbyksbi0tLEsoaT1VTy5NbihuKSx0KSwwIT09KG89VU8uTG5baV0pJiZIKG4tPVVPLlVuW2ldLG8pKX13aGlsZShfPnUpO0soMjU2LHIpLEY9cls1MTNdfWZ1bmN0aW9uIFooKXtDPjg/JChOKTpDPjAmJlcoMjU1Jk4pLE49MCxDPTB9ZnVuY3Rpb24gcnIocix0LG4pe0goMCsobj8xOjApLDMpLGZ1bmN0aW9uKHIsdCl7WigpLEY9OCwkKHQpLCQofnQpLEIuV24uc2V0KGYuc3ViYXJyYXkocixyK3QpLEIucGVuZGluZyksQi5wZW5kaW5nKz10fShyLHQpfWZ1bmN0aW9uIHRyKHQpeyhmdW5jdGlvbihyLHQsbil7dmFyIGUsaSxvPTA7RT4wPyhHLnNuKEIpLEQuc24oQiksbz1mdW5jdGlvbigpe3ZhciByO2Zvcih6KE0sRy5TbikseihJLEQuU24pLFYuc24oQikscj0xODtyPj0zJiYwPT09TFsyKlVPLl9uW3JdKzFdO3ItLSk7cmV0dXJuIEIuZ24rPTE0KzMqKHIrMSkscn0oKSxlPUIuZ24rMys3Pj4+MywoaT1CLm1uKzMrNz4+PjMpPmV8fChlPWkpKTplPWk9dCs1LHQrND5lfHwtMT09cj9pPT1lPyhIKDIrKG4/MTowKSwzKSxRKE1PLlJuLE1PLkRuKSk6KEgoNCsobj8xOjApLDMpLGZ1bmN0aW9uKHIsdCxuKXt2YXIgZTtmb3IoSChyLTI1Nyw1KSxIKHQtMSw1KSxIKG4tNCw0KSxlPTA7bj5lO2UrKylIKExbMipVTy5fbltlXSsxXSwzKTtxKE0sci0xKSxxKEksdC0xKX0oRy5TbisxLEQuU24rMSxvKzEpLFEoTSxJKSk6cnIocix0LG4pLFkoKSxuJiZaKCl9KSgwPnc/LTE6dyxtLXcsdCksdz1tLHIuS24oKX1mdW5jdGlvbiBucigpe3ZhciB0LG4sZSxvO2Rve2lmKDA9PShvPWEtQS1tKSYmMD09PW0mJjA9PT1BKW89aTtlbHNlIGlmKC0xPT1vKW8tLTtlbHNlIGlmKG0+PWkraS0yNjIpe2Yuc2V0KGYuc3ViYXJyYXkoaSxpK2kpLDApLFMtPWksbS09aSx3LT1pLGU9dD1oO2Rve249NjU1MzUmc1stLWVdLHNbZV09aT5uPzA6bi1pfXdoaWxlKDAhPS0tdCk7ZT10PWk7ZG97bj02NTUzNSZjWy0tZV0sY1tlXT1pPm4/MDpuLWl9d2hpbGUoMCE9LS10KTtvKz1pfWlmKDA9PT1yLnFuKXJldHVybjt0PXIuSm4oZixtK0EsbyksMz4oQSs9dCl8fCh2PSgodj0yNTUmZlttXSk8PHleMjU1JmZbbSsxXSkmZCl9d2hpbGUoMjYyPkEmJjAhPT1yLnFuKX1mdW5jdGlvbiBlcihyKXt2YXIgdCxuLGU9TyxvPW0sYT1qLHM9bT5pLTI2Mj9tLShpLTI2Mik6MCx2PVUsaD11LGw9bSsyNTgsZD1mW28rYS0xXSx5PWZbbythXTt4Pmp8fChlPj49Miksdj5BJiYodj1BKTtkb3tpZihmWyh0PXIpK2FdPT15JiZmW3QrYS0xXT09ZCYmZlt0XT09ZltvXSYmZlsrK3RdPT1mW28rMV0pe28rPTIsdCsrO2Rve313aGlsZShmWysrb109PWZbKyt0XSYmZlsrK29dPT1mWysrdF0mJmZbKytvXT09ZlsrK3RdJiZmWysrb109PWZbKyt0XSYmZlsrK29dPT1mWysrdF0mJmZbKytvXT09ZlsrK3RdJiZmWysrb109PWZbKyt0XSYmZlsrK29dPT1mWysrdF0mJmw+byk7aWYobj0yNTgtKGwtbyksbz1sLTI1OCxuPmEpe2lmKFM9cixhPW4sbj49dilicmVhaztkPWZbbythLTFdLHk9ZltvK2FdfX19d2hpbGUoKHI9NjU1MzUmY1tyJmhdKT5zJiYwIT0tLWUpO3JldHVybiBhPkE/QTphfUIucG49W10sQi5Fbj1bXSxCLmJuPVtdLE09W10sST1bXSxMPVtdLEIuQW49ZnVuY3Rpb24ocix0KXtmb3IodmFyIG49Qi5ibixlPW5bdF0saT10PDwxO2k8PUIueW4mJihpPEIueW4mJkZPKHIsbltpKzFdLG5baV0sQi5wbikmJmkrKywhRk8ocixlLG5baV0sQi5wbikpOyluW3RdPW5baV0sdD1pLGk8PD0xO25bdF09ZX0sQi5Ybj1mdW5jdGlvbihyLHAsUyxfLFIseil7cmV0dXJuIF98fChfPTgpLFJ8fChSPTgpLHp8fCh6PTApLHIuUW49bnVsbCwtMT09cCYmKHA9NiksMT5SfHxSPjl8fDghPV98fDk+U3x8Uz4xNXx8MD5wfHxwPjl8fDA+enx8ej4yPy0yOihyLlpuPUIsdT0oaT0xPDwobz1TKSktMSxkPShoPTE8PChsPVIrNykpLTEseT1NYXRoLmZsb29yKChsKzMtMSkvMyksZj1uZXcgVWludDhBcnJheSgyKmkpLGM9W10scz1bXSxQPTE8PFIrNixCLlduPW5ldyBVaW50OEFycmF5KDQqUCksbj00KlAsQi4kbj1uZXcgVWludDE2QXJyYXkoUCksQi5Ibj1uZXcgVWludDhBcnJheShQKSxFPXAsVD16LGZ1bmN0aW9uKHIpe3JldHVybiByLnJlPXIudGU9MCxyLlFuPW51bGwsQi5wZW5kaW5nPTAsQi5uZT0wLHQ9MTEzLGU9MCxHLnZuPU0sRy5sbj1NTy5WbixELnZuPUksRC5sbj1NTy5ZbixWLnZuPUwsVi5sbj1NTy56bixOPTAsQz0wLEY9OCxZKCksZnVuY3Rpb24oKXthPTIqaSxzW2gtMV09MDtmb3IodmFyIHI9MDtoLTE+cjtyKyspc1tyXT0wO2s9X09bRV0uTm4seD1fT1tFXS5GbixVPV9PW0VdLkNuLE89X09bRV0uQm4sbT0wLHc9MCxBPTAsYj1qPTIsZz0wLHY9MH0oKSwwfShyKSl9LEIuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gNDIhPXQmJjExMyE9dCYmNjY2IT10Py0yOihCLkhuPW51bGwsQi4kbj1udWxsLEIuV249bnVsbCxzPW51bGwsYz1udWxsLGY9bnVsbCxCLlpuPW51bGwsMTEzPT10Py0zOjApfSxCLmllPWZ1bmN0aW9uKHIsdCxuKXt2YXIgZT0wO3JldHVybi0xPT10JiYodD02KSwwPnR8fHQ+OXx8MD5ufHxuPjI/LTI6KF9PW0VdLkduIT1fT1t0XS5HbiYmMCE9PXIucmUmJihlPXIubm4oMSkpLEUhPXQmJihrPV9PW0U9dF0uTm4seD1fT1tFXS5GbixVPV9PW0VdLkNuLE89X09bRV0uQm4pLFQ9bixlKX0sQi5vZT1mdW5jdGlvbihyLG4sZSl7dmFyIG8sYT1lLGg9MDtpZighbnx8NDIhPXQpcmV0dXJuLTI7aWYoMz5hKXJldHVybiAwO2ZvcihhPmktMjYyJiYoaD1lLShhPWktMjYyKSksZi5zZXQobi5zdWJhcnJheShoLGgrYSksMCksbT1hLHc9YSx2PSgodj0yNTUmZlswXSk8PHleMjU1JmZbMV0pJmQsbz0wO2EtMz49bztvKyspdj0odjw8eV4yNTUmZltvKzJdKSZkLGNbbyZ1XT1zW3ZdLHNbdl09bztyZXR1cm4gMH0sQi5ubj1mdW5jdGlvbihhLGwpe3ZhciBPLHgsVSxNLEksTDtpZihsPjR8fDA+bClyZXR1cm4tMjtpZighYS51ZXx8IWEuZmUmJjAhPT1hLnFufHw2NjY9PXQmJjQhPWwpcmV0dXJuIGEuUW49Uk9bNF0sLTI7aWYoMD09PWEuYWUpcmV0dXJuIGEuUW49Uk9bN10sLTU7aWYocj1hLE09ZSxlPWwsNDI9PXQmJih4PTgrKG8tODw8NCk8PDgsKFU9KEUtMSYyNTUpPj4xKT4zJiYoVT0zKSx4fD1VPDw2LDAhPT1tJiYoeHw9MzIpLHQ9MTEzLFcoKEw9eCs9MzEteCUzMSk+PjgmMjU1KSxXKDI1NSZMKSksMCE9PUIucGVuZGluZyl7aWYoci5LbigpLDA9PT1yLmFlKXJldHVybiBlPS0xLDB9ZWxzZSBpZigwPT09ci5xbiYmTT49bCYmNCE9bClyZXR1cm4gci5Rbj1ST1s3XSwtNTtpZig2NjY9PXQmJjAhPT1yLnFuKXJldHVybiBhLlFuPVJPWzddLC01O2lmKDAhPT1yLnFufHwwIT09QXx8MCE9bCYmNjY2IT10KXtzd2l0Y2goST0tMSxfT1tFXS5Hbil7Y2FzZSAwOkk9ZnVuY3Rpb24odCl7dmFyIGUsbz02NTUzNTtmb3Iobz5uLTUmJihvPW4tNSk7Oyl7aWYoMT49QSl7aWYobnIoKSwwPT09QSYmMD09dClyZXR1cm4gMDtpZigwPT09QSlicmVha31pZihtKz1BLEE9MCxlPXcrbywoMD09PW18fG0+PWUpJiYoQT1tLWUsbT1lLHRyKCExKSwwPT09ci5hZSkpcmV0dXJuIDA7aWYobS13Pj1pLTI2MiYmKHRyKCExKSwwPT09ci5hZSkpcmV0dXJuIDB9cmV0dXJuIHRyKDQ9PXQpLDA9PT1yLmFlPzQ9PXQ/MjowOjQ9PXQ/MzoxfShsKTticmVhaztjYXNlIDE6ST1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT0wOzspe2lmKDI2Mj5BKXtpZihucigpLDI2Mj5BJiYwPT10KXJldHVybiAwO2lmKDA9PT1BKWJyZWFrfWlmKDM+QXx8KHY9KHY8PHleMjU1JmZbbSsyXSkmZCxlPTY1NTM1JnNbdl0sY1ttJnVdPXNbdl0sc1t2XT1tKSwwPT09ZXx8KG0tZSY2NTUzNSk+aS0yNjJ8fDIhPVQmJihiPWVyKGUpKSwzPmIpbj1YKDAsMjU1JmZbbV0pLEEtLSxtKys7ZWxzZSBpZihuPVgobS1TLGItMyksQS09YixiPmt8fDM+QSltKz1iLGI9MCx2PSgodj0yNTUmZlttXSk8PHleMjU1JmZbbSsxXSkmZDtlbHNle2ItLTtkb3ttKyssdj0odjw8eV4yNTUmZlttKzJdKSZkLGU9NjU1MzUmc1t2XSxjW20mdV09c1t2XSxzW3ZdPW19d2hpbGUoMCE9LS1iKTttKyt9aWYobiYmKHRyKCExKSwwPT09ci5hZSkpcmV0dXJuIDB9cmV0dXJuIHRyKDQ9PXQpLDA9PT1yLmFlPzQ9PXQ/MjowOjQ9PXQ/MzoxfShsKTticmVhaztjYXNlIDI6ST1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxvPTA7Oyl7aWYoMjYyPkEpe2lmKG5yKCksMjYyPkEmJjA9PXQpcmV0dXJuIDA7aWYoMD09PUEpYnJlYWt9aWYoMz5BfHwodj0odjw8eV4yNTUmZlttKzJdKSZkLG89NjU1MzUmc1t2XSxjW20mdV09c1t2XSxzW3ZdPW0pLGo9YixwPVMsYj0yLDAhPT1vJiZrPmomJmktMjYyPj0obS1vJjY1NTM1KSYmKDIhPVQmJihiPWVyKG8pKSw1Pj1iJiYoMT09VHx8Mz09YiYmbS1TPjQwOTYpJiYoYj0yKSksMz5qfHxiPmopaWYoMCE9PWcpe2lmKChuPVgoMCwyNTUmZlttLTFdKSkmJnRyKCExKSxtKyssQS0tLDA9PT1yLmFlKXJldHVybiAwfWVsc2UgZz0xLG0rKyxBLS07ZWxzZXtlPW0rQS0zLG49WChtLTEtcCxqLTMpLEEtPWotMSxqLT0yO2RveysrbT5lfHwodj0odjw8eV4yNTUmZlttKzJdKSZkLG89NjU1MzUmc1t2XSxjW20mdV09c1t2XSxzW3ZdPW0pfXdoaWxlKDAhPS0taik7aWYoZz0wLGI9MixtKyssbiYmKHRyKCExKSwwPT09ci5hZSkpcmV0dXJuIDB9fXJldHVybiAwIT09ZyYmKG49WCgwLDI1NSZmW20tMV0pLGc9MCksdHIoND09dCksMD09PXIuYWU/ND09dD8yOjA6ND09dD8zOjF9KGwpfWlmKDIhPUkmJjMhPUl8fCh0PTY2NiksMD09SXx8Mj09SSlyZXR1cm4gMD09PXIuYWUmJihlPS0xKSwwO2lmKDE9PUkpe2lmKDE9PWwpSCgyLDMpLEsoMjU2LE1PLlJuKSxKKCksOT4xK0YrMTAtQyYmKEgoMiwzKSxLKDI1NixNTy5SbiksSigpKSxGPTc7ZWxzZSBpZihycigwLDAsITEpLDM9PWwpZm9yKE89MDtoPk87TysrKXNbT109MDtpZihyLktuKCksMD09PXIuYWUpcmV0dXJuIGU9LTEsMH19cmV0dXJuIDQhPWw/MDoxfX1mdW5jdGlvbiBDTygpe3ZhciByPXRoaXM7ci5jZT0wLHIuc2U9MCxyLnFuPTAsci5yZT0wLHIuYWU9MCxyLnRlPTB9ZnVuY3Rpb24gQk8ocil7dmFyIHQsbj1uZXcgQ08sZT0odD1yJiZyLlF0P3IuUXQ6NjU1MzYpKzUqKE1hdGguZmxvb3IodC8xNjM4MykrMSksaT1uZXcgVWludDhBcnJheShlKSxvPXI/ci5sZXZlbDotMTt2b2lkIDA9PT1vJiYobz0tMSksbi5YbihvKSxuLnVlPWksdGhpcy5hcHBlbmQ9ZnVuY3Rpb24ocix0KXt2YXIgbyx1PTAsZj0wLGE9MCxjPVtdO2lmKHIubGVuZ3RoKXtuLmNlPTAsbi5mZT1yLG4ucW49ci5sZW5ndGg7ZG97aWYobi5zZT0wLG4uYWU9ZSwwIT1uLm5uKDApKXRocm93IEVycm9yKCJkZWZsYXRpbmc6ICIrbi5Rbik7bi5zZSYmKG4uc2U9PWU/Yy5wdXNoKG5ldyBVaW50OEFycmF5KGkpKTpjLnB1c2goaS5zbGljZSgwLG4uc2UpKSksYSs9bi5zZSx0JiZuLmNlPjAmJm4uY2UhPXUmJih0KG4uY2UpLHU9bi5jZSl9d2hpbGUobi5xbj4wfHwwPT09bi5hZSk7cmV0dXJuIGMubGVuZ3RoPjE/KG89bmV3IFVpbnQ4QXJyYXkoYSksYy5mb3JFYWNoKChmdW5jdGlvbihyKXtvLnNldChyLGYpLGYrPXIubGVuZ3RofSkpKTpvPWNbMF18fG5ldyBVaW50OEFycmF5KDApLG99fSx0aGlzLmZsdXNoPWZ1bmN0aW9uKCl7dmFyIHIsdCxvPTAsdT0wLGY9W107ZG97aWYobi5zZT0wLG4uYWU9ZSwxIT0ocj1uLm5uKDQpKSYmMCE9cil0aHJvdyBFcnJvcigiZGVmbGF0aW5nOiAiK24uUW4pO2Utbi5hZT4wJiZmLnB1c2goaS5zbGljZSgwLG4uc2UpKSx1Kz1uLnNlfXdoaWxlKG4ucW4+MHx8MD09PW4uYWUpO3JldHVybiBuLmVlKCksdD1uZXcgVWludDhBcnJheSh1KSxmLmZvckVhY2goKGZ1bmN0aW9uKHIpe3Quc2V0KHIsbyksbys9ci5sZW5ndGh9KSksdH19Q08ucHJvdG90eXBlPXtYbjpmdW5jdGlvbihyLHQpe3ZhciBuPXRoaXM7cmV0dXJuIG4uWm49bmV3IE5PLHR8fCh0PTE1KSxuLlpuLlhuKG4scix0KX0sbm46ZnVuY3Rpb24ocil7dmFyIHQ9dGhpcztyZXR1cm4gdC5abj90LlpuLm5uKHQscik6LTJ9LGVlOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcztpZighci5abilyZXR1cm4tMjt2YXIgdD1yLlpuLmVlKCk7cmV0dXJuIHIuWm49bnVsbCx0fSxpZTpmdW5jdGlvbihyLHQpe3ZhciBuPXRoaXM7cmV0dXJuIG4uWm4/bi5abi5pZShuLHIsdCk6LTJ9LG9lOmZ1bmN0aW9uKHIsdCl7dmFyIG49dGhpcztyZXR1cm4gbi5abj9uLlpuLm9lKG4scix0KTotMn0sSm46ZnVuY3Rpb24ocix0LG4pe3ZhciBlPXRoaXMsaT1lLnFuO3JldHVybiBpPm4mJihpPW4pLDA9PT1pPzA6KGUucW4tPWksci5zZXQoZS5mZS5zdWJhcnJheShlLmNlLGUuY2UraSksdCksZS5jZSs9aSxlLnJlKz1pLGkpfSxLbjpmdW5jdGlvbigpe3ZhciByPXRoaXMsdD1yLlpuLnBlbmRpbmc7dD5yLmFlJiYodD1yLmFlKSwwIT09dCYmKHIudWUuc2V0KHIuWm4uV24uc3ViYXJyYXkoci5abi5uZSxyLlpuLm5lK3QpLHIuc2UpLHIuc2UrPXQsci5abi5uZSs9dCxyLnRlKz10LHIuYWUtPXQsci5abi5wZW5kaW5nLT10LDA9PT1yLlpuLnBlbmRpbmcmJihyLlpuLm5lPTApKX19LCgwLHNhLmV4cG9ydHMpKCJJbnQzMiIsKGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIodGhpcyx0LG4sZSl9fSkpO3ZhciBHTz1bMCwxLDMsNywxNSwzMSw2MywxMjcsMjU1LDUxMSwxMDIzLDIwNDcsNDA5NSw4MTkxLDE2MzgzLDMyNzY3LDY1NTM1XSxETz1bOTYsNywyNTYsMCw4LDgwLDAsOCwxNiw4NCw4LDExNSw4Miw3LDMxLDAsOCwxMTIsMCw4LDQ4LDAsOSwxOTIsODAsNywxMCwwLDgsOTYsMCw4LDMyLDAsOSwxNjAsMCw4LDAsMCw4LDEyOCwwLDgsNjQsMCw5LDIyNCw4MCw3LDYsMCw4LDg4LDAsOCwyNCwwLDksMTQ0LDgzLDcsNTksMCw4LDEyMCwwLDgsNTYsMCw5LDIwOCw4MSw3LDE3LDAsOCwxMDQsMCw4LDQwLDAsOSwxNzYsMCw4LDgsMCw4LDEzNiwwLDgsNzIsMCw5LDI0MCw4MCw3LDQsMCw4LDg0LDAsOCwyMCw4NSw4LDIyNyw4Myw3LDQzLDAsOCwxMTYsMCw4LDUyLDAsOSwyMDAsODEsNywxMywwLDgsMTAwLDAsOCwzNiwwLDksMTY4LDAsOCw0LDAsOCwxMzIsMCw4LDY4LDAsOSwyMzIsODAsNyw4LDAsOCw5MiwwLDgsMjgsMCw5LDE1Miw4NCw3LDgzLDAsOCwxMjQsMCw4LDYwLDAsOSwyMTYsODIsNywyMywwLDgsMTA4LDAsOCw0NCwwLDksMTg0LDAsOCwxMiwwLDgsMTQwLDAsOCw3NiwwLDksMjQ4LDgwLDcsMywwLDgsODIsMCw4LDE4LDg1LDgsMTYzLDgzLDcsMzUsMCw4LDExNCwwLDgsNTAsMCw5LDE5Niw4MSw3LDExLDAsOCw5OCwwLDgsMzQsMCw5LDE2NCwwLDgsMiwwLDgsMTMwLDAsOCw2NiwwLDksMjI4LDgwLDcsNywwLDgsOTAsMCw4LDI2LDAsOSwxNDgsODQsNyw2NywwLDgsMTIyLDAsOCw1OCwwLDksMjEyLDgyLDcsMTksMCw4LDEwNiwwLDgsNDIsMCw5LDE4MCwwLDgsMTAsMCw4LDEzOCwwLDgsNzQsMCw5LDI0NCw4MCw3LDUsMCw4LDg2LDAsOCwyMiwxOTIsOCwwLDgzLDcsNTEsMCw4LDExOCwwLDgsNTQsMCw5LDIwNCw4MSw3LDE1LDAsOCwxMDIsMCw4LDM4LDAsOSwxNzIsMCw4LDYsMCw4LDEzNCwwLDgsNzAsMCw5LDIzNiw4MCw3LDksMCw4LDk0LDAsOCwzMCwwLDksMTU2LDg0LDcsOTksMCw4LDEyNiwwLDgsNjIsMCw5LDIyMCw4Miw3LDI3LDAsOCwxMTAsMCw4LDQ2LDAsOSwxODgsMCw4LDE0LDAsOCwxNDIsMCw4LDc4LDAsOSwyNTIsOTYsNywyNTYsMCw4LDgxLDAsOCwxNyw4NSw4LDEzMSw4Miw3LDMxLDAsOCwxMTMsMCw4LDQ5LDAsOSwxOTQsODAsNywxMCwwLDgsOTcsMCw4LDMzLDAsOSwxNjIsMCw4LDEsMCw4LDEyOSwwLDgsNjUsMCw5LDIyNiw4MCw3LDYsMCw4LDg5LDAsOCwyNSwwLDksMTQ2LDgzLDcsNTksMCw4LDEyMSwwLDgsNTcsMCw5LDIxMCw4MSw3LDE3LDAsOCwxMDUsMCw4LDQxLDAsOSwxNzgsMCw4LDksMCw4LDEzNywwLDgsNzMsMCw5LDI0Miw4MCw3LDQsMCw4LDg1LDAsOCwyMSw4MCw4LDI1OCw4Myw3LDQzLDAsOCwxMTcsMCw4LDUzLDAsOSwyMDIsODEsNywxMywwLDgsMTAxLDAsOCwzNywwLDksMTcwLDAsOCw1LDAsOCwxMzMsMCw4LDY5LDAsOSwyMzQsODAsNyw4LDAsOCw5MywwLDgsMjksMCw5LDE1NCw4NCw3LDgzLDAsOCwxMjUsMCw4LDYxLDAsOSwyMTgsODIsNywyMywwLDgsMTA5LDAsOCw0NSwwLDksMTg2LDAsOCwxMywwLDgsMTQxLDAsOCw3NywwLDksMjUwLDgwLDcsMywwLDgsODMsMCw4LDE5LDg1LDgsMTk1LDgzLDcsMzUsMCw4LDExNSwwLDgsNTEsMCw5LDE5OCw4MSw3LDExLDAsOCw5OSwwLDgsMzUsMCw5LDE2NiwwLDgsMywwLDgsMTMxLDAsOCw2NywwLDksMjMwLDgwLDcsNywwLDgsOTEsMCw4LDI3LDAsOSwxNTAsODQsNyw2NywwLDgsMTIzLDAsOCw1OSwwLDksMjE0LDgyLDcsMTksMCw4LDEwNywwLDgsNDMsMCw5LDE4MiwwLDgsMTEsMCw4LDEzOSwwLDgsNzUsMCw5LDI0Niw4MCw3LDUsMCw4LDg3LDAsOCwyMywxOTIsOCwwLDgzLDcsNTEsMCw4LDExOSwwLDgsNTUsMCw5LDIwNiw4MSw3LDE1LDAsOCwxMDMsMCw4LDM5LDAsOSwxNzQsMCw4LDcsMCw4LDEzNSwwLDgsNzEsMCw5LDIzOCw4MCw3LDksMCw4LDk1LDAsOCwzMSwwLDksMTU4LDg0LDcsOTksMCw4LDEyNywwLDgsNjMsMCw5LDIyMiw4Miw3LDI3LDAsOCwxMTEsMCw4LDQ3LDAsOSwxOTAsMCw4LDE1LDAsOCwxNDMsMCw4LDc5LDAsOSwyNTQsOTYsNywyNTYsMCw4LDgwLDAsOCwxNiw4NCw4LDExNSw4Miw3LDMxLDAsOCwxMTIsMCw4LDQ4LDAsOSwxOTMsODAsNywxMCwwLDgsOTYsMCw4LDMyLDAsOSwxNjEsMCw4LDAsMCw4LDEyOCwwLDgsNjQsMCw5LDIyNSw4MCw3LDYsMCw4LDg4LDAsOCwyNCwwLDksMTQ1LDgzLDcsNTksMCw4LDEyMCwwLDgsNTYsMCw5LDIwOSw4MSw3LDE3LDAsOCwxMDQsMCw4LDQwLDAsOSwxNzcsMCw4LDgsMCw4LDEzNiwwLDgsNzIsMCw5LDI0MSw4MCw3LDQsMCw4LDg0LDAsOCwyMCw4NSw4LDIyNyw4Myw3LDQzLDAsOCwxMTYsMCw4LDUyLDAsOSwyMDEsODEsNywxMywwLDgsMTAwLDAsOCwzNiwwLDksMTY5LDAsOCw0LDAsOCwxMzIsMCw4LDY4LDAsOSwyMzMsODAsNyw4LDAsOCw5MiwwLDgsMjgsMCw5LDE1Myw4NCw3LDgzLDAsOCwxMjQsMCw4LDYwLDAsOSwyMTcsODIsNywyMywwLDgsMTA4LDAsOCw0NCwwLDksMTg1LDAsOCwxMiwwLDgsMTQwLDAsOCw3NiwwLDksMjQ5LDgwLDcsMywwLDgsODIsMCw4LDE4LDg1LDgsMTYzLDgzLDcsMzUsMCw4LDExNCwwLDgsNTAsMCw5LDE5Nyw4MSw3LDExLDAsOCw5OCwwLDgsMzQsMCw5LDE2NSwwLDgsMiwwLDgsMTMwLDAsOCw2NiwwLDksMjI5LDgwLDcsNywwLDgsOTAsMCw4LDI2LDAsOSwxNDksODQsNyw2NywwLDgsMTIyLDAsOCw1OCwwLDksMjEzLDgyLDcsMTksMCw4LDEwNiwwLDgsNDIsMCw5LDE4MSwwLDgsMTAsMCw4LDEzOCwwLDgsNzQsMCw5LDI0NSw4MCw3LDUsMCw4LDg2LDAsOCwyMiwxOTIsOCwwLDgzLDcsNTEsMCw4LDExOCwwLDgsNTQsMCw5LDIwNSw4MSw3LDE1LDAsOCwxMDIsMCw4LDM4LDAsOSwxNzMsMCw4LDYsMCw4LDEzNCwwLDgsNzAsMCw5LDIzNyw4MCw3LDksMCw4LDk0LDAsOCwzMCwwLDksMTU3LDg0LDcsOTksMCw4LDEyNiwwLDgsNjIsMCw5LDIyMSw4Miw3LDI3LDAsOCwxMTAsMCw4LDQ2LDAsOSwxODksMCw4LDE0LDAsOCwxNDIsMCw4LDc4LDAsOSwyNTMsOTYsNywyNTYsMCw4LDgxLDAsOCwxNyw4NSw4LDEzMSw4Miw3LDMxLDAsOCwxMTMsMCw4LDQ5LDAsOSwxOTUsODAsNywxMCwwLDgsOTcsMCw4LDMzLDAsOSwxNjMsMCw4LDEsMCw4LDEyOSwwLDgsNjUsMCw5LDIyNyw4MCw3LDYsMCw4LDg5LDAsOCwyNSwwLDksMTQ3LDgzLDcsNTksMCw4LDEyMSwwLDgsNTcsMCw5LDIxMSw4MSw3LDE3LDAsOCwxMDUsMCw4LDQxLDAsOSwxNzksMCw4LDksMCw4LDEzNywwLDgsNzMsMCw5LDI0Myw4MCw3LDQsMCw4LDg1LDAsOCwyMSw4MCw4LDI1OCw4Myw3LDQzLDAsOCwxMTcsMCw4LDUzLDAsOSwyMDMsODEsNywxMywwLDgsMTAxLDAsOCwzNywwLDksMTcxLDAsOCw1LDAsOCwxMzMsMCw4LDY5LDAsOSwyMzUsODAsNyw4LDAsOCw5MywwLDgsMjksMCw5LDE1NSw4NCw3LDgzLDAsOCwxMjUsMCw4LDYxLDAsOSwyMTksODIsNywyMywwLDgsMTA5LDAsOCw0NSwwLDksMTg3LDAsOCwxMywwLDgsMTQxLDAsOCw3NywwLDksMjUxLDgwLDcsMywwLDgsODMsMCw4LDE5LDg1LDgsMTk1LDgzLDcsMzUsMCw4LDExNSwwLDgsNTEsMCw5LDE5OSw4MSw3LDExLDAsOCw5OSwwLDgsMzUsMCw5LDE2NywwLDgsMywwLDgsMTMxLDAsOCw2NywwLDksMjMxLDgwLDcsNywwLDgsOTEsMCw4LDI3LDAsOSwxNTEsODQsNyw2NywwLDgsMTIzLDAsOCw1OSwwLDksMjE1LDgyLDcsMTksMCw4LDEwNywwLDgsNDMsMCw5LDE4MywwLDgsMTEsMCw4LDEzOSwwLDgsNzUsMCw5LDI0Nyw4MCw3LDUsMCw4LDg3LDAsOCwyMywxOTIsOCwwLDgzLDcsNTEsMCw4LDExOSwwLDgsNTUsMCw5LDIwNyw4MSw3LDE1LDAsOCwxMDMsMCw4LDM5LDAsOSwxNzUsMCw4LDcsMCw4LDEzNSwwLDgsNzEsMCw5LDIzOSw4MCw3LDksMCw4LDk1LDAsOCwzMSwwLDksMTU5LDg0LDcsOTksMCw4LDEyNywwLDgsNjMsMCw5LDIyMyw4Miw3LDI3LDAsOCwxMTEsMCw4LDQ3LDAsOSwxOTEsMCw4LDE1LDAsOCwxNDMsMCw4LDc5LDAsOSwyNTVdLFZPPVs4MCw1LDEsODcsNSwyNTcsODMsNSwxNyw5MSw1LDQwOTcsODEsNSw1LDg5LDUsMTAyNSw4NSw1LDY1LDkzLDUsMTYzODUsODAsNSwzLDg4LDUsNTEzLDg0LDUsMzMsOTIsNSw4MTkzLDgyLDUsOSw5MCw1LDIwNDksODYsNSwxMjksMTkyLDUsMjQ1NzcsODAsNSwyLDg3LDUsMzg1LDgzLDUsMjUsOTEsNSw2MTQ1LDgxLDUsNyw4OSw1LDE1MzcsODUsNSw5Nyw5Myw1LDI0NTc3LDgwLDUsNCw4OCw1LDc2OSw4NCw1LDQ5LDkyLDUsMTIyODksODIsNSwxMyw5MCw1LDMwNzMsODYsNSwxOTMsMTkyLDUsMjQ1NzddLFlPPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sek89WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwxMTIsMTEyXSxXTz1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSwkTz1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM107ZnVuY3Rpb24gSE8oKXt2YXIgcix0LG4sZSxpLG87ZnVuY3Rpb24gdShyLHQsdSxmLGEsYyxzLHYsaCxsLGQpe3ZhciB5LHcsYixwLGcsbSxTLEEsaixPLGssRSxULHgsVTtPPTAsZz11O2Rve25bclt0K09dXSsrLE8rKyxnLS19d2hpbGUoMCE9PWcpO2lmKG5bMF09PXUpcmV0dXJuIHNbMF09LTEsdlswXT0wLDA7Zm9yKEE9dlswXSxtPTE7MTU+PW0mJjA9PT1uW21dO20rKyk7Zm9yKFM9bSxtPkEmJihBPW0pLGc9MTU7MCE9PWcmJjA9PT1uW2ddO2ctLSk7Zm9yKGI9ZyxBPmcmJihBPWcpLHZbMF09QSx4PTE8PG07Zz5tO20rKyx4PDw9MSlpZigwPih4LT1uW21dKSlyZXR1cm4tMztpZigwPih4LT1uW2ddKSlyZXR1cm4tMztmb3IobltnXSs9eCxvWzFdPW09MCxPPTEsVD0yOzAhPS0tZzspb1tUXT1tKz1uW09dLFQrKyxPKys7Zz0wLE89MDtkb3swIT09KG09clt0K09dKSYmKGRbb1ttXSsrXT1nKSxPKyt9d2hpbGUoKytnPHUpO2Zvcih1PW9bYl0sb1swXT1nPTAsTz0wLHA9LTEsRT0tQSxpWzBdPTAsaz0wLFU9MDtiPj1TO1MrKylmb3IoeT1uW1NdOzAhPXktLTspe2Zvcig7Uz5FK0E7KXtpZihwKyssVT0oVT1iLShFKz1BKSk+QT9BOlUsKHc9MTw8KG09Uy1FKSk+eSsxJiYody09eSsxLFQ9UyxVPm0pKWZvcig7KyttPFUmJih3PDw9MSk+blsrK1RdOyl3LT1uW1RdO2lmKFU9MTw8bSxsWzBdK1U+MTQ0MClyZXR1cm4tMztpW3BdPWs9bFswXSxsWzBdKz1VLDAhPT1wPyhvW3BdPWcsZVswXT1tLGVbMV09QSxtPWc+Pj5FLUEsZVsyXT1rLWlbcC0xXS1tLGguc2V0KGUsMyooaVtwLTFdK20pKSk6c1swXT1rfWZvcihlWzFdPVMtRSx1Pk8/ZFtPXTxmPyhlWzBdPTI1Nj5kW09dPzA6OTYsZVsyXT1kW08rK10pOihlWzBdPWNbZFtPXS1mXSsxNis2NCxlWzJdPWFbZFtPKytdLWZdKTplWzBdPTE5Mix3PTE8PFMtRSxtPWc+Pj5FO1U+bTttKz13KWguc2V0KGUsMyooayttKSk7Zm9yKG09MTw8Uy0xOzAhPShnJm0pO20+Pj49MSlnXj1tO2ZvcihnXj1tLGo9KDE8PEUpLTE7KGcmaikhPW9bcF07KXAtLSxqPSgxPDwoRS09QSkpLTF9cmV0dXJuIDAhPT14JiYxIT1iPy01OjB9ZnVuY3Rpb24gZih1KXt2YXIgZjtmb3Iocnx8KHI9W10sdD1bXSxuPW5ldyBJbnQzMkFycmF5KDE2KSxlPVtdLGk9bmV3IEludDMyQXJyYXkoMTUpLG89bmV3IEludDMyQXJyYXkoMTYpKSx0Lmxlbmd0aDx1JiYodD1bXSksZj0wO3U+ZjtmKyspdFtmXT0wO2ZvcihmPTA7MTY+ZjtmKyspbltmXT0wO2ZvcihmPTA7Mz5mO2YrKyllW2ZdPTA7aS5zZXQobi5zdWJhcnJheSgwLDE1KSwwKSxvLnNldChuLnN1YmFycmF5KDAsMTYpLDApfXRoaXMudmU9ZnVuY3Rpb24obixlLGksbyxhKXt2YXIgYztyZXR1cm4gZigxOSksclswXT0wLC0zPT0oYz11KG4sMCwxOSwxOSxudWxsLG51bGwsaSxlLG8scix0KSk/YS5Rbj0ib3ZlcnN1YnNjcmliZWQgZHluYW1pYyBiaXQgbGVuZ3RocyB0cmVlIjotNSE9YyYmMCE9PWVbMF18fChhLlFuPSJpbmNvbXBsZXRlIGR5bmFtaWMgYml0IGxlbmd0aHMgdHJlZSIsYz0tMyksY30sdGhpcy5oZT1mdW5jdGlvbihuLGUsaSxvLGEsYyxzLHYsaCl7dmFyIGw7cmV0dXJuIGYoMjg4KSxyWzBdPTAsMCE9KGw9dShpLDAsbiwyNTcsWU8sek8sYyxvLHYscix0KSl8fDA9PT1vWzBdPygtMz09bD9oLlFuPSJvdmVyc3Vic2NyaWJlZCBsaXRlcmFsL2xlbmd0aCB0cmVlIjotNCE9bCYmKGguUW49ImluY29tcGxldGUgbGl0ZXJhbC9sZW5ndGggdHJlZSIsbD0tMyksbCk6KGYoMjg4KSwwIT0obD11KGksbixlLDAsV08sJE8scyxhLHYscix0KSl8fDA9PT1hWzBdJiZuPjI1Nz8oLTM9PWw/aC5Rbj0ib3ZlcnN1YnNjcmliZWQgZGlzdGFuY2UgdHJlZSI6LTU9PWw/KGguUW49ImluY29tcGxldGUgZGlzdGFuY2UgdHJlZSIsbD0tMyk6LTQhPWwmJihoLlFuPSJlbXB0eSBkaXN0YW5jZSB0cmVlIHdpdGggbGVuZ3RocyIsbD0tMyksbCk6MCl9fWZ1bmN0aW9uIEtPKCl7dmFyIHIsdCxuLGUsaT10aGlzLG89MCx1PTAsZj0wLGE9MCxjPTAscz0wLHY9MCxoPTAsbD0wLGQ9MDtmdW5jdGlvbiB5KHIsdCxuLGUsaSxvLHUsZil7dmFyIGEsYyxzLHYsaCxsLGQseSx3LGIscCxnLG0sUyxBLGo7ZD1mLmNlLHk9Zi5xbixoPXUubGUsbD11LmRlLGI9KHc9dS53cml0ZSk8dS5yZWFkP3UucmVhZC13LTE6dS5lbmQtdyxwPUdPW3JdLGc9R09bdF07ZG97Zm9yKDsyMD5sOyl5LS0saHw9KDI1NSZmLnllKGQrKykpPDxsLGwrPTg7aWYoMCE9PSh2PShjPW4pW2o9MyooKHM9ZSkrKGE9aCZwKSldKSlmb3IoOzspe2lmKGg+Pj1jW2orMV0sbC09Y1tqKzFdLDAhPSgxNiZ2KSl7Zm9yKHYmPTE1LG09Y1tqKzJdKyhoJkdPW3ZdKSxoPj49dixsLT12OzE1Pmw7KXktLSxofD0oMjU1JmYueWUoZCsrKSk8PGwsbCs9ODtmb3Iodj0oYz1pKVtqPTMqKChzPW8pKyhhPWgmZykpXTs7KXtpZihoPj49Y1tqKzFdLGwtPWNbaisxXSwwIT0oMTYmdikpe2Zvcih2Jj0xNTt2Pmw7KXktLSxofD0oMjU1JmYueWUoZCsrKSk8PGwsbCs9ODtpZihTPWNbaisyXSsoaCZHT1t2XSksaD4+PXYsbC09dixiLT1tLFM+dyl7QT13LVM7ZG97QSs9dS5lbmR9d2hpbGUoMD5BKTtpZihtPih2PXUuZW5kLUEpKXtpZihtLT12LHctQT4wJiZ2PnctQSlkb3t1LndlW3crK109dS53ZVtBKytdfXdoaWxlKDAhPS0tdik7ZWxzZSB1LndlLnNldCh1LndlLnN1YmFycmF5KEEsQSt2KSx3KSx3Kz12LEErPXYsdj0wO0E9MH19ZWxzZSB3LShBPXctUyk+MCYmMj53LUE/KHUud2VbdysrXT11LndlW0ErK10sdS53ZVt3KytdPXUud2VbQSsrXSxtLT0yKToodS53ZS5zZXQodS53ZS5zdWJhcnJheShBLEErMiksdyksdys9MixBKz0yLG0tPTIpO2lmKHctQT4wJiZtPnctQSlkb3t1LndlW3crK109dS53ZVtBKytdfXdoaWxlKDAhPS0tbSk7ZWxzZSB1LndlLnNldCh1LndlLnN1YmFycmF5KEEsQSttKSx3KSx3Kz1tLEErPW0sbT0wO2JyZWFrfWlmKDAhPSg2NCZ2KSlyZXR1cm4gZi5Rbj0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIix5Kz1tPShtPWYucW4teSk+bD4+Mz9sPj4zOm0sZC09bSxsLT1tPDwzLHUubGU9aCx1LmRlPWwsZi5xbj15LGYucmUrPWQtZi5jZSxmLmNlPWQsdS53cml0ZT13LC0zO2ErPWNbaisyXSx2PWNbaj0zKihzKyhhKz1oJkdPW3ZdKSldfWJyZWFrfWlmKDAhPSg2NCZ2KSlyZXR1cm4gMCE9KDMyJnYpPyh5Kz1tPShtPWYucW4teSk+bD4+Mz9sPj4zOm0sZC09bSxsLT1tPDwzLHUubGU9aCx1LmRlPWwsZi5xbj15LGYucmUrPWQtZi5jZSxmLmNlPWQsdS53cml0ZT13LDEpOihmLlFuPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHkrPW09KG09Zi5xbi15KT5sPj4zP2w+PjM6bSxkLT1tLGwtPW08PDMsdS5sZT1oLHUuZGU9bCxmLnFuPXksZi5yZSs9ZC1mLmNlLGYuY2U9ZCx1LndyaXRlPXcsLTMpO2lmKGErPWNbaisyXSwwPT09KHY9Y1tqPTMqKHMrKGErPWgmR09bdl0pKV0pKXtoPj49Y1tqKzFdLGwtPWNbaisxXSx1LndlW3crK109Y1tqKzJdLGItLTticmVha319ZWxzZSBoPj49Y1tqKzFdLGwtPWNbaisxXSx1LndlW3crK109Y1tqKzJdLGItLX13aGlsZShiPj0yNTgmJnk+PTEwKTtyZXR1cm4geSs9bT0obT1mLnFuLXkpPmw+PjM/bD4+MzptLGQtPW0sbC09bTw8Myx1LmxlPWgsdS5kZT1sLGYucW49eSxmLnJlKz1kLWYuY2UsZi5jZT1kLHUud3JpdGU9dywwfWkuaW5pdD1mdW5jdGlvbihpLG8sdSxmLGEsYyl7cj0wLHY9aSxoPW8sbj11LGw9ZixlPWEsZD1jLHQ9bnVsbH0saS5iZT1mdW5jdGlvbihpLHcsYil7dmFyIHAsZyxtLFMsQSxqLE8saz0wLEU9MCxUPTA7Zm9yKFQ9dy5jZSxTPXcucW4saz1pLmxlLEU9aS5kZSxqPShBPWkud3JpdGUpPGkucmVhZD9pLnJlYWQtQS0xOmkuZW5kLUE7Oylzd2l0Y2gocil7Y2FzZSAwOmlmKGo+PTI1OCYmUz49MTAmJihpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxiPXkodixoLG4sbCxlLGQsaSx3KSxUPXcuY2UsUz13LnFuLGs9aS5sZSxFPWkuZGUsaj0oQT1pLndyaXRlKTxpLnJlYWQ/aS5yZWFkLUEtMTppLmVuZC1BLDAhPWIpKXtyPTE9PWI/Nzo5O2JyZWFrfWY9dix0PW4sdT1sLHI9MTtjYXNlIDE6Zm9yKHA9ZjtwPkU7KXtpZigwPT09UylyZXR1cm4gaS5sZT1rLGkuZGU9RSx3LnFuPVMsdy5yZSs9VC13LmNlLHcuY2U9VCxpLndyaXRlPUEsaS5wZSh3LGIpO2I9MCxTLS0sa3w9KDI1NSZ3LnllKFQrKykpPDxFLEUrPTh9aWYoaz4+Pj10WzErKGc9MyoodSsoayZHT1twXSkpKV0sRS09dFtnKzFdLDA9PT0obT10W2ddKSl7YT10W2crMl0scj02O2JyZWFrfWlmKDAhPSgxNiZtKSl7Yz0xNSZtLG89dFtnKzJdLHI9MjticmVha31pZigwPT0oNjQmbSkpe2Y9bSx1PWcvMyt0W2crMl07YnJlYWt9aWYoMCE9KDMyJm0pKXtyPTc7YnJlYWt9cmV0dXJuIHI9OSx3LlFuPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLGI9LTMsaS5sZT1rLGkuZGU9RSx3LnFuPVMsdy5yZSs9VC13LmNlLHcuY2U9VCxpLndyaXRlPUEsaS5wZSh3LGIpO2Nhc2UgMjpmb3IocD1jO3A+RTspe2lmKDA9PT1TKXJldHVybiBpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7Yj0wLFMtLSxrfD0oMjU1JncueWUoVCsrKSk8PEUsRSs9OH1vKz1rJkdPW3BdLGs+Pj1wLEUtPXAsZj1oLHQ9ZSx1PWQscj0zO2Nhc2UgMzpmb3IocD1mO3A+RTspe2lmKDA9PT1TKXJldHVybiBpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7Yj0wLFMtLSxrfD0oMjU1JncueWUoVCsrKSk8PEUsRSs9OH1pZihrPj49dFsxKyhnPTMqKHUrKGsmR09bcF0pKSldLEUtPXRbZysxXSwwIT0oMTYmKG09dFtnXSkpKXtjPTE1Jm0scz10W2crMl0scj00O2JyZWFrfWlmKDA9PSg2NCZtKSl7Zj1tLHU9Zy8zK3RbZysyXTticmVha31yZXR1cm4gcj05LHcuUW49ImludmFsaWQgZGlzdGFuY2UgY29kZSIsYj0tMyxpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7Y2FzZSA0OmZvcihwPWM7cD5FOyl7aWYoMD09PVMpcmV0dXJuIGkubGU9ayxpLmRlPUUsdy5xbj1TLHcucmUrPVQtdy5jZSx3LmNlPVQsaS53cml0ZT1BLGkucGUodyxiKTtiPTAsUy0tLGt8PSgyNTUmdy55ZShUKyspKTw8RSxFKz04fXMrPWsmR09bcF0saz4+PXAsRS09cCxyPTU7Y2FzZSA1OmZvcihPPUEtczswPk87KU8rPWkuZW5kO2Zvcig7MCE9PW87KXtpZigwPT09aiYmKEE9PWkuZW5kJiYwIT09aS5yZWFkJiYoaj0oQT0wKTxpLnJlYWQ/aS5yZWFkLUEtMTppLmVuZC1BKSwwPT09aiYmKGkud3JpdGU9QSxiPWkucGUodyxiKSxqPShBPWkud3JpdGUpPGkucmVhZD9pLnJlYWQtQS0xOmkuZW5kLUEsQT09aS5lbmQmJjAhPT1pLnJlYWQmJihqPShBPTApPGkucmVhZD9pLnJlYWQtQS0xOmkuZW5kLUEpLDA9PT1qKSkpcmV0dXJuIGkubGU9ayxpLmRlPUUsdy5xbj1TLHcucmUrPVQtdy5jZSx3LmNlPVQsaS53cml0ZT1BLGkucGUodyxiKTtpLndlW0ErK109aS53ZVtPKytdLGotLSxPPT1pLmVuZCYmKE89MCksby0tfXI9MDticmVhaztjYXNlIDY6aWYoMD09PWomJihBPT1pLmVuZCYmMCE9PWkucmVhZCYmKGo9KEE9MCk8aS5yZWFkP2kucmVhZC1BLTE6aS5lbmQtQSksMD09PWomJihpLndyaXRlPUEsYj1pLnBlKHcsYiksaj0oQT1pLndyaXRlKTxpLnJlYWQ/aS5yZWFkLUEtMTppLmVuZC1BLEE9PWkuZW5kJiYwIT09aS5yZWFkJiYoaj0oQT0wKTxpLnJlYWQ/aS5yZWFkLUEtMTppLmVuZC1BKSwwPT09aikpKXJldHVybiBpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7Yj0wLGkud2VbQSsrXT1hLGotLSxyPTA7YnJlYWs7Y2FzZSA3OmlmKEU+NyYmKEUtPTgsUysrLFQtLSksaS53cml0ZT1BLGI9aS5wZSh3LGIpLGo9KEE9aS53cml0ZSk8aS5yZWFkP2kucmVhZC1BLTE6aS5lbmQtQSxpLnJlYWQhPWkud3JpdGUpcmV0dXJuIGkubGU9ayxpLmRlPUUsdy5xbj1TLHcucmUrPVQtdy5jZSx3LmNlPVQsaS53cml0ZT1BLGkucGUodyxiKTtyPTg7Y2FzZSA4OnJldHVybiBiPTEsaS5sZT1rLGkuZGU9RSx3LnFuPVMsdy5yZSs9VC13LmNlLHcuY2U9VCxpLndyaXRlPUEsaS5wZSh3LGIpO2Nhc2UgOTpyZXR1cm4gYj0tMyxpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7ZGVmYXVsdDpyZXR1cm4gYj0tMixpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYil9fSxpLmdlPWZ1bmN0aW9uKCl7fX1ITy5tZT1mdW5jdGlvbihyLHQsbixlKXtyZXR1cm4gclswXT05LHRbMF09NSxuWzBdPURPLGVbMF09Vk8sMH07dmFyIHFPPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtmdW5jdGlvbiBKTyhyLHQpe3ZhciBuLGU9dGhpcyxpPTAsbz0wLHU9MCxmPTAsYT1bMF0sYz1bMF0scz1uZXcgS08sdj0wLGg9bmV3IEludDMyQXJyYXkoNDMyMCksbD1uZXcgSE87ZS5kZT0wLGUubGU9MCxlLndlPW5ldyBVaW50OEFycmF5KHQpLGUuZW5kPXQsZS5yZWFkPTAsZS53cml0ZT0wLGUucmVzZXQ9ZnVuY3Rpb24ocix0KXt0JiYodFswXT0wKSw2PT1pJiZzLmdlKHIpLGk9MCxlLmRlPTAsZS5sZT0wLGUucmVhZD1lLndyaXRlPTB9LGUucmVzZXQocixudWxsKSxlLnBlPWZ1bmN0aW9uKHIsdCl7dmFyIG4saSxvO3JldHVybiBpPXIuc2UsKG49KChvPWUucmVhZCk+ZS53cml0ZT9lLmVuZDplLndyaXRlKS1vKT5yLmFlJiYobj1yLmFlKSwwIT09biYmLTU9PXQmJih0PTApLHIuYWUtPW4sci50ZSs9bixyLnVlLnNldChlLndlLnN1YmFycmF5KG8sbytuKSxpKSxpKz1uLChvKz1uKT09ZS5lbmQmJihvPTAsZS53cml0ZT09ZS5lbmQmJihlLndyaXRlPTApLChuPWUud3JpdGUtbyk+ci5hZSYmKG49ci5hZSksMCE9PW4mJi01PT10JiYodD0wKSxyLmFlLT1uLHIudGUrPW4sci51ZS5zZXQoZS53ZS5zdWJhcnJheShvLG8rbiksaSksaSs9bixvKz1uKSxyLnNlPWksZS5yZWFkPW8sdH0sZS5iZT1mdW5jdGlvbihyLHQpe3ZhciBkLHksdyxiLHAsZyxtLFM7Zm9yKGI9ci5jZSxwPXIucW4seT1lLmxlLHc9ZS5kZSxtPShnPWUud3JpdGUpPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWc7Oyl7dmFyIEE9dm9pZCAwLGo9dm9pZCAwLE89dm9pZCAwLGs9dm9pZCAwLEU9dm9pZCAwLFQ9dm9pZCAwLHg9dm9pZCAwLFU9dm9pZCAwO3N3aXRjaChpKXtjYXNlIDA6Zm9yKDszPnc7KXtpZigwPT09cClyZXR1cm4gZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpO3Q9MCxwLS0seXw9KDI1NSZyLnllKGIrKykpPDx3LHcrPTh9c3dpdGNoKHY9MSYoZD03JnkpLGQ+Pj4xKXtjYXNlIDA6eT4+Pj0zLHk+Pj49ZD03Jih3LT0zKSx3LT1kLGk9MTticmVhaztjYXNlIDE6QT1bXSxqPVtdLE89W1tdXSxrPVtbXV0sSE8ubWUoQSxqLE8saykscy5pbml0KEFbMF0salswXSxPWzBdLDAsa1swXSwwKSx5Pj4+PTMsdy09MyxpPTY7YnJlYWs7Y2FzZSAyOnk+Pj49Myx3LT0zLGk9MzticmVhaztjYXNlIDM6cmV0dXJuIHk+Pj49Myx3LT0zLGk9OSxyLlFuPSJpbnZhbGlkIGJsb2NrIHR5cGUiLHQ9LTMsZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpfWJyZWFrO2Nhc2UgMTpmb3IoOzMyPnc7KXtpZigwPT09cClyZXR1cm4gZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpO3Q9MCxwLS0seXw9KDI1NSZyLnllKGIrKykpPDx3LHcrPTh9aWYoKH55Pj4+MTYmNjU1MzUpIT0oNjU1MzUmeSkpcmV0dXJuIGk9OSxyLlFuPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIix0PS0zLGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtvPTY1NTM1JnkseT13PTAsaT0wIT09bz8yOjAhPT12Pzc6MDticmVhaztjYXNlIDI6aWYoMD09PXApcmV0dXJuIGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtpZigwPT09bSYmKGc9PWUuZW5kJiYwIT09ZS5yZWFkJiYobT0oZz0wKTxlLnJlYWQ/ZS5yZWFkLWctMTplLmVuZC1nKSwwPT09bSYmKGUud3JpdGU9Zyx0PWUucGUocix0KSxtPShnPWUud3JpdGUpPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWcsZz09ZS5lbmQmJjAhPT1lLnJlYWQmJihtPShnPTApPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWcpLDA9PT1tKSkpcmV0dXJuIGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtpZih0PTAsKGQ9byk+cCYmKGQ9cCksZD5tJiYoZD1tKSxlLndlLnNldChyLkpuKGIsZCksZyksYis9ZCxwLT1kLGcrPWQsbS09ZCwwIT0oby09ZCkpYnJlYWs7aT0wIT09dj83OjA7YnJlYWs7Y2FzZSAzOmZvcig7MTQ+dzspe2lmKDA9PT1wKXJldHVybiBlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7dD0wLHAtLSx5fD0oMjU1JnIueWUoYisrKSk8PHcsdys9OH1pZih1PWQ9MTYzODMmeSwoMzEmZCk+Mjl8fChkPj41JjMxKT4yOSlyZXR1cm4gaT05LHIuUW49InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIix0PS0zLGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtpZihkPTI1OCsoMzEmZCkrKGQ+PjUmMzEpLCFufHxuLmxlbmd0aDxkKW49W107ZWxzZSBmb3IoUz0wO2Q+UztTKyspbltTXT0wO3k+Pj49MTQsdy09MTQsZj0wLGk9NDtjYXNlIDQ6Zm9yKDs0Kyh1Pj4+MTApPmY7KXtmb3IoOzM+dzspe2lmKDA9PT1wKXJldHVybiBlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7dD0wLHAtLSx5fD0oMjU1JnIueWUoYisrKSk8PHcsdys9OH1uW3FPW2YrK11dPTcmeSx5Pj4+PTMsdy09M31mb3IoOzE5PmY7KW5bcU9bZisrXV09MDtpZihhWzBdPTcsMCE9KGQ9bC52ZShuLGEsYyxoLHIpKSlyZXR1cm4tMz09KHQ9ZCkmJihuPW51bGwsaT05KSxlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7Zj0wLGk9NTtjYXNlIDU6Zm9yKDtmPDI1OCsoMzEmKGQ9dSkpKyhkPj41JjMxKTspe3ZhciBNPXZvaWQgMCxJPXZvaWQgMDtmb3IoZD1hWzBdO2Q+dzspe2lmKDA9PT1wKXJldHVybiBlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7dD0wLHAtLSx5fD0oMjU1JnIueWUoYisrKSk8PHcsdys9OH1pZihkPWhbMyooY1swXSsoeSZHT1tkXSkpKzFdLDE2PihJPWhbMyooY1swXSsoeSZHT1tkXSkpKzJdKSl5Pj4+PWQsdy09ZCxuW2YrK109STtlbHNle2ZvcihTPTE4PT1JPzc6SS0xNCxNPTE4PT1JPzExOjM7ZCtTPnc7KXtpZigwPT09cClyZXR1cm4gZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpO3Q9MCxwLS0seXw9KDI1NSZyLnllKGIrKykpPDx3LHcrPTh9aWYody09ZCxNKz0oeT4+Pj1kKSZHT1tTXSx5Pj4+PVMsdy09UywoUz1mKStNPjI1OCsoMzEmKGQ9dSkpKyhkPj41JjMxKXx8MTY9PUkmJjE+UylyZXR1cm4gbj1udWxsLGk9OSxyLlFuPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0Iix0PS0zLGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtJPTE2PT1JP25bUy0xXTowO2Rve25bUysrXT1JfXdoaWxlKDAhPS0tTSk7Zj1TfX1pZihjWzBdPS0xLFQ9W10seD1bXSxVPVtdLChFPVtdKVswXT05LFRbMF09NixkPXUsMCE9KGQ9bC5oZSgyNTcrKDMxJmQpLDErKGQ+PjUmMzEpLG4sRSxULHgsVSxoLHIpKSlyZXR1cm4tMz09ZCYmKG49bnVsbCxpPTkpLHQ9ZCxlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7cy5pbml0KEVbMF0sVFswXSxoLHhbMF0saCxVWzBdKSxpPTY7Y2FzZSA2OmlmKGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLDEhPSh0PXMuYmUoZSxyLHQpKSlyZXR1cm4gZS5wZShyLHQpO2lmKHQ9MCxzLmdlKHIpLGI9ci5jZSxwPXIucW4seT1lLmxlLHc9ZS5kZSxtPShnPWUud3JpdGUpPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWcsMD09PXYpe2k9MDticmVha31pPTc7Y2FzZSA3OmlmKGUud3JpdGU9Zyx0PWUucGUocix0KSxtPShnPWUud3JpdGUpPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWcsZS5yZWFkIT1lLndyaXRlKXJldHVybiBlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7aT04O2Nhc2UgODpyZXR1cm4gdD0xLGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtjYXNlIDk6cmV0dXJuIHQ9LTMsZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpO2RlZmF1bHQ6cmV0dXJuIHQ9LTIsZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpfX19LGUuZ2U9ZnVuY3Rpb24ocil7ZS5yZXNldChyLG51bGwpLGUud2U9bnVsbCxoPW51bGx9LGUuU2U9ZnVuY3Rpb24ocix0LG4pe2Uud2Uuc2V0KHIuc3ViYXJyYXkodCx0K24pLDApLGUucmVhZD1lLndyaXRlPW59LGUuQWU9ZnVuY3Rpb24oKXtyZXR1cm4gMT09aT8xOjB9fXZhciBYTz1bMCwwLDI1NSwyNTVdO2Z1bmN0aW9uIFFPKCl7dmFyIHI9dGhpcztmdW5jdGlvbiB0KHIpe3JldHVybiByJiZyLmplPyhyLnJlPXIudGU9MCxyLlFuPW51bGwsci5qZS5tb2RlPTcsci5qZS5PZS5yZXNldChyLG51bGwpLDApOi0yfXIubW9kZT0wLHIubWV0aG9kPTAsci5rZT1bMF0sci5FZT0wLHIubWFya2VyPTAsci5UZT0wLHIueGU9ZnVuY3Rpb24odCl7cmV0dXJuIHIuT2UmJnIuT2UuZ2UodCksci5PZT1udWxsLDB9LHIuVWU9ZnVuY3Rpb24obixlKXtyZXR1cm4gbi5Rbj1udWxsLHIuT2U9bnVsbCw4PmV8fGU+MTU/KHIueGUobiksLTIpOihyLlRlPWUsbi5qZS5PZT1uZXcgSk8obiwxPDxlKSx0KG4pLDApfSxyLlp0PWZ1bmN0aW9uKHIsdCl7dmFyIG4sZTtpZighcnx8IXIuamV8fCFyLmZlKXJldHVybi0yO3ZhciBpPXIuamU7Zm9yKHQ9ND09dD8tNTowLG49LTU7Oylzd2l0Y2goaS5tb2RlKXtjYXNlIDA6aWYoMD09PXIucW4pcmV0dXJuIG47aWYobj10LHIucW4tLSxyLnJlKyssOCE9KDE1JihpLm1ldGhvZD1yLnllKHIuY2UrKykpKSl7aS5tb2RlPTEzLHIuUW49InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixpLm1hcmtlcj01O2JyZWFrfWlmKDgrKGkubWV0aG9kPj40KT5pLlRlKXtpLm1vZGU9MTMsci5Rbj0iaW52YWxpZCB3aW4gc2l6ZSIsaS5tYXJrZXI9NTticmVha31pLm1vZGU9MTtjYXNlIDE6aWYoMD09PXIucW4pcmV0dXJuIG47aWYobj10LHIucW4tLSxyLnJlKyssZT0yNTUmci55ZShyLmNlKyspLCgoaS5tZXRob2Q8PDgpK2UpJTMxIT0wKXtpLm1vZGU9MTMsci5Rbj0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsaS5tYXJrZXI9NTticmVha31pZigwPT0oMzImZSkpe2kubW9kZT03O2JyZWFrfWkubW9kZT0yO2Nhc2UgMjppZigwPT09ci5xbilyZXR1cm4gbjtuPXQsci5xbi0tLHIucmUrKyxpLkVlPSgyNTUmci55ZShyLmNlKyspKTw8MjQmNDI3ODE5MDA4MCxpLm1vZGU9MztjYXNlIDM6aWYoMD09PXIucW4pcmV0dXJuIG47bj10LHIucW4tLSxyLnJlKyssaS5FZSs9KDI1NSZyLnllKHIuY2UrKykpPDwxNiYxNjcxMTY4MCxpLm1vZGU9NDtjYXNlIDQ6aWYoMD09PXIucW4pcmV0dXJuIG47bj10LHIucW4tLSxyLnJlKyssaS5FZSs9KDI1NSZyLnllKHIuY2UrKykpPDw4JjY1MjgwLGkubW9kZT01O2Nhc2UgNTpyZXR1cm4gMD09PXIucW4/bjoobj10LHIucW4tLSxyLnJlKyssaS5FZSs9MjU1JnIueWUoci5jZSsrKSxpLm1vZGU9NiwyKTtjYXNlIDY6cmV0dXJuIGkubW9kZT0xMyxyLlFuPSJuZWVkIGRpY3Rpb25hcnkiLGkubWFya2VyPTAsLTI7Y2FzZSA3OmlmKC0zPT0obj1pLk9lLmJlKHIsbikpKXtpLm1vZGU9MTMsaS5tYXJrZXI9MDticmVha31pZigwPT1uJiYobj10KSwxIT1uKXJldHVybiBuO249dCxpLk9lLnJlc2V0KHIsaS5rZSksaS5tb2RlPTEyO2Nhc2UgMTI6cmV0dXJuIHIucW49MCwxO2Nhc2UgMTM6cmV0dXJuLTM7ZGVmYXVsdDpyZXR1cm4tMn19LHIuTWU9ZnVuY3Rpb24ocix0LG4pe3ZhciBlPTAsaT1uO2lmKCFyfHwhci5qZXx8NiE9ci5qZS5tb2RlKXJldHVybi0yO3ZhciBvPXIuamU7cmV0dXJuIGk8MTw8by5UZXx8KGU9bi0oaT0oMTw8by5UZSktMSkpLG8uT2UuU2UodCxlLGkpLG8ubW9kZT03LDB9LHIuSWU9ZnVuY3Rpb24ocil7dmFyIG4sZSxpLG8sdTtpZighcnx8IXIuamUpcmV0dXJuLTI7dmFyIGY9ci5qZTtpZigxMyE9Zi5tb2RlJiYoZi5tb2RlPTEzLGYubWFya2VyPTApLDA9PT0obj1yLnFuKSlyZXR1cm4tNTtmb3IoZT1yLmNlLGk9Zi5tYXJrZXI7MCE9PW4mJjQ+aTspci55ZShlKT09WE9baV0/aSsrOmk9MCE9PXIueWUoZSk/MDo0LWksZSsrLG4tLTtyZXR1cm4gci5yZSs9ZS1yLmNlLHIuY2U9ZSxyLnFuPW4sZi5tYXJrZXI9aSw0IT1pPy0zOihvPXIucmUsdT1yLnRlLHQociksci5yZT1vLHIudGU9dSxmLm1vZGU9NywwKX0sci5MZT1mdW5jdGlvbihyKXtyZXR1cm4gciYmci5qZSYmci5qZS5PZT9yLmplLk9lLkFlKCk6LTJ9fWZ1bmN0aW9uIFpPKCl7fWZ1bmN0aW9uIHJrKHIpe3ZhciB0PW5ldyBaTyxuPXImJnIuUXQ/TWF0aC5mbG9vcigyKnIuUXQpOjEzMTA3MixlPW5ldyBVaW50OEFycmF5KG4pLGk9ITE7dC5VZSgpLHQudWU9ZSx0aGlzLmFwcGVuZD1mdW5jdGlvbihyLG8pe3ZhciB1LGYsYT1bXSxjPTAscz0wLHY9MDtpZigwIT09ci5sZW5ndGgpe3QuY2U9MCx0LmZlPXIsdC5xbj1yLmxlbmd0aDtkb3tpZih0LnNlPTAsdC5hZT1uLDAhPT10LnFufHxpfHwodC5jZT0wLGk9ITApLHU9dC5adCgwKSxpJiYtNT09PXUpe2lmKDAhPT10LnFuKXRocm93IEVycm9yKCJpbmZsYXRpbmc6IGJhZCBpbnB1dCIpfWVsc2UgaWYoMCE9PXUmJjEhPT11KXRocm93IEVycm9yKCJpbmZsYXRpbmc6ICIrdC5Rbik7aWYoKGl8fDE9PT11KSYmdC5xbj09PXIubGVuZ3RoKXRocm93IEVycm9yKCJpbmZsYXRpbmc6IGJhZCBpbnB1dCIpO3Quc2UmJih0LnNlPT09bj9hLnB1c2gobmV3IFVpbnQ4QXJyYXkoZSkpOmEucHVzaChlLnNsaWNlKDAsdC5zZSkpKSx2Kz10LnNlLG8mJnQuY2U+MCYmdC5jZSE9YyYmKG8odC5jZSksYz10LmNlKX13aGlsZSh0LnFuPjB8fDA9PT10LmFlKTtyZXR1cm4gYS5sZW5ndGg+MT8oZj1uZXcgVWludDhBcnJheSh2KSxhLmZvckVhY2goKGZ1bmN0aW9uKHIpe2Yuc2V0KHIscykscys9ci5sZW5ndGh9KSkpOmY9YVswXXx8bmV3IFVpbnQ4QXJyYXkoMCksZn19LHRoaXMuZmx1c2g9ZnVuY3Rpb24oKXt0LnhlKCl9fVpPLnByb3RvdHlwZT17VWU6ZnVuY3Rpb24ocil7dmFyIHQ9dGhpcztyZXR1cm4gdC5qZT1uZXcgUU8scnx8KHI9MTUpLHQuamUuVWUodCxyKX0sWnQ6ZnVuY3Rpb24ocil7dmFyIHQ9dGhpcztyZXR1cm4gdC5qZT90LmplLlp0KHQscik6LTJ9LHhlOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcztpZighci5qZSlyZXR1cm4tMjt2YXIgdD1yLmplLnhlKHIpO3JldHVybiByLmplPW51bGwsdH0sSWU6ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiByLmplP3IuamUuSWUocik6LTJ9LE1lOmZ1bmN0aW9uKHIsdCl7dmFyIG49dGhpcztyZXR1cm4gbi5qZT9uLmplLk1lKG4scix0KTotMn0seWU6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZmVbcl19LEpuOmZ1bmN0aW9uKHIsdCl7cmV0dXJuIHRoaXMuZmUuc3ViYXJyYXkocixyK3QpfX0sc2VsZi5pbml0Q29kZWM9ZnVuY3Rpb24oKXtzZWxmLkRlZmxhdGU9Qk8sc2VsZi5JbmZsYXRlPXJrfTsK")], {
- type: "text/javascript"
- }));
- };
- _d({
- workerScripts: {
- inflate: [m],
- deflate: [m]
- }
- });
- }
- };
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- function getMimeType() {
- return "application/octet-stream";
- }
- function _regeneratorRuntime() {
- /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
- _regeneratorRuntime = function () {
- return exports;
- };
- var exports = {},
- Op = Object.prototype,
- hasOwn = Op.hasOwnProperty,
- $Symbol = "function" == typeof Symbol ? Symbol : {},
- iteratorSymbol = $Symbol.iterator || "@@iterator",
- asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",
- toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
- function define(obj, key, value) {
- return Object.defineProperty(obj, key, {
- value: value,
- enumerable: !0,
- configurable: !0,
- writable: !0
- }), obj[key];
- }
- try {
- define({}, "");
- } catch (err) {
- define = function (obj, key, value) {
- return obj[key] = value;
- };
- }
- function wrap(innerFn, outerFn, self, tryLocsList) {
- var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,
- generator = Object.create(protoGenerator.prototype),
- context = new Context(tryLocsList || []);
- return generator._invoke = function (innerFn, self, context) {
- var state = "suspendedStart";
- return function (method, arg) {
- if ("executing" === state) throw new Error("Generator is already running");
- if ("completed" === state) {
- if ("throw" === method) throw arg;
- return doneResult();
- }
- for (context.method = method, context.arg = arg;;) {
- var delegate = context.delegate;
- if (delegate) {
- var delegateResult = maybeInvokeDelegate(delegate, context);
- if (delegateResult) {
- if (delegateResult === ContinueSentinel) continue;
- return delegateResult;
- }
- }
- if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {
- if ("suspendedStart" === state) throw state = "completed", context.arg;
- context.dispatchException(context.arg);
- } else "return" === context.method && context.abrupt("return", context.arg);
- state = "executing";
- var record = tryCatch(innerFn, self, context);
- if ("normal" === record.type) {
- if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
- return {
- value: record.arg,
- done: context.done
- };
- }
- "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
- }
- };
- }(innerFn, self, context), generator;
- }
- function tryCatch(fn, obj, arg) {
- try {
- return {
- type: "normal",
- arg: fn.call(obj, arg)
- };
- } catch (err) {
- return {
- type: "throw",
- arg: err
- };
- }
- }
- exports.wrap = wrap;
- var ContinueSentinel = {};
- function Generator() {}
- function GeneratorFunction() {}
- function GeneratorFunctionPrototype() {}
- var IteratorPrototype = {};
- define(IteratorPrototype, iteratorSymbol, function () {
- return this;
- });
- var getProto = Object.getPrototypeOf,
- NativeIteratorPrototype = getProto && getProto(getProto(values([])));
- NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
- var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
- function defineIteratorMethods(prototype) {
- ["next", "throw", "return"].forEach(function (method) {
- define(prototype, method, function (arg) {
- return this._invoke(method, arg);
- });
- });
- }
- function AsyncIterator(generator, PromiseImpl) {
- function invoke(method, arg, resolve, reject) {
- var record = tryCatch(generator[method], generator, arg);
- if ("throw" !== record.type) {
- var result = record.arg,
- value = result.value;
- return value && "object" == typeof value && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {
- invoke("next", value, resolve, reject);
- }, function (err) {
- invoke("throw", err, resolve, reject);
- }) : PromiseImpl.resolve(value).then(function (unwrapped) {
- result.value = unwrapped, resolve(result);
- }, function (error) {
- return invoke("throw", error, resolve, reject);
- });
- }
- reject(record.arg);
- }
- var previousPromise;
- this._invoke = function (method, arg) {
- function callInvokeWithMethodAndArg() {
- return new PromiseImpl(function (resolve, reject) {
- invoke(method, arg, resolve, reject);
- });
- }
- return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
- };
- }
- function maybeInvokeDelegate(delegate, context) {
- var method = delegate.iterator[context.method];
- if (undefined === method) {
- if (context.delegate = null, "throw" === context.method) {
- if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel;
- context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method");
- }
- return ContinueSentinel;
- }
- var record = tryCatch(method, delegate.iterator, context.arg);
- if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;
- var info = record.arg;
- return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel);
- }
- function pushTryEntry(locs) {
- var entry = {
- tryLoc: locs[0]
- };
- 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);
- }
- function resetTryEntry(entry) {
- var record = entry.completion || {};
- record.type = "normal", delete record.arg, entry.completion = record;
- }
- function Context(tryLocsList) {
- this.tryEntries = [{
- tryLoc: "root"
- }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
- }
- function values(iterable) {
- if (iterable) {
- var iteratorMethod = iterable[iteratorSymbol];
- if (iteratorMethod) return iteratorMethod.call(iterable);
- if ("function" == typeof iterable.next) return iterable;
- if (!isNaN(iterable.length)) {
- var i = -1,
- next = function next() {
- for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;
- return next.value = undefined, next.done = !0, next;
- };
- return next.next = next;
- }
- }
- return {
- next: doneResult
- };
- }
- function doneResult() {
- return {
- value: undefined,
- done: !0
- };
- }
- return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {
- var ctor = "function" == typeof genFun && genFun.constructor;
- return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
- }, exports.mark = function (genFun) {
- return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun;
- }, exports.awrap = function (arg) {
- return {
- __await: arg
- };
- }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
- return this;
- }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
- void 0 === PromiseImpl && (PromiseImpl = Promise);
- var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
- return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
- return result.done ? result.value : iter.next();
- });
- }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {
- return this;
- }), define(Gp, "toString", function () {
- return "[object Generator]";
- }), exports.keys = function (object) {
- var keys = [];
- for (var key in object) keys.push(key);
- return keys.reverse(), function next() {
- for (; keys.length;) {
- var key = keys.pop();
- if (key in object) return next.value = key, next.done = !1, next;
- }
- return next.done = !0, next;
- };
- }, exports.values = values, Context.prototype = {
- constructor: Context,
- reset: function (skipTempReset) {
- if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);
- },
- stop: function () {
- this.done = !0;
- var rootRecord = this.tryEntries[0].completion;
- if ("throw" === rootRecord.type) throw rootRecord.arg;
- return this.rval;
- },
- dispatchException: function (exception) {
- if (this.done) throw exception;
- var context = this;
- function handle(loc, caught) {
- return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;
- }
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i],
- record = entry.completion;
- if ("root" === entry.tryLoc) return handle("end");
- if (entry.tryLoc <= this.prev) {
- var hasCatch = hasOwn.call(entry, "catchLoc"),
- hasFinally = hasOwn.call(entry, "finallyLoc");
- if (hasCatch && hasFinally) {
- if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
- if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
- } else if (hasCatch) {
- if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
- } else {
- if (!hasFinally) throw new Error("try statement without catch or finally");
- if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
- }
- }
- }
- },
- abrupt: function (type, arg) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
- var finallyEntry = entry;
- break;
- }
- }
- finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
- var record = finallyEntry ? finallyEntry.completion : {};
- return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
- },
- complete: function (record, afterLoc) {
- if ("throw" === record.type) throw record.arg;
- return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;
- },
- finish: function (finallyLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;
- }
- },
- catch: function (tryLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- if (entry.tryLoc === tryLoc) {
- var record = entry.completion;
- if ("throw" === record.type) {
- var thrown = record.arg;
- resetTryEntry(entry);
- }
- return thrown;
- }
- }
- throw new Error("illegal catch attempt");
- },
- delegateYield: function (iterable, resultName, nextLoc) {
- return this.delegate = {
- iterator: values(iterable),
- resultName: resultName,
- nextLoc: nextLoc
- }, "next" === this.method && (this.arg = undefined), ContinueSentinel;
- }
- }, exports;
- }
- function _AwaitValue(value) {
- this.wrapped = value;
- }
- function _AsyncGenerator(gen) {
- var front, back;
- function send(key, arg) {
- return new Promise(function (resolve, reject) {
- var request = {
- key: key,
- arg: arg,
- resolve: resolve,
- reject: reject,
- next: null
- };
- if (back) {
- back = back.next = request;
- } else {
- front = back = request;
- resume(key, arg);
- }
- });
- }
- function resume(key, arg) {
- try {
- var result = gen[key](arg);
- var value = result.value;
- var wrappedAwait = value instanceof _AwaitValue;
- Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {
- if (wrappedAwait) {
- resume(key === "return" ? "return" : "next", arg);
- return;
- }
- settle(result.done ? "return" : "normal", arg);
- }, function (err) {
- resume("throw", err);
- });
- } catch (err) {
- settle("throw", err);
- }
- }
- function settle(type, value) {
- switch (type) {
- case "return":
- front.resolve({
- value: value,
- done: true
- });
- break;
- case "throw":
- front.reject(value);
- break;
- default:
- front.resolve({
- value: value,
- done: false
- });
- break;
- }
- front = front.next;
- if (front) {
- resume(front.key, front.arg);
- } else {
- back = null;
- }
- }
- this._invoke = send;
- if (typeof gen.return !== "function") {
- this.return = undefined;
- }
- }
- _AsyncGenerator.prototype[typeof Symbol === "function" && Symbol.asyncIterator || "@@asyncIterator"] = function () {
- return this;
- };
- _AsyncGenerator.prototype.next = function (arg) {
- return this._invoke("next", arg);
- };
- _AsyncGenerator.prototype.throw = function (arg) {
- return this._invoke("throw", arg);
- };
- _AsyncGenerator.prototype.return = function (arg) {
- return this._invoke("return", arg);
- };
- function _wrapAsyncGenerator(fn) {
- return function () {
- return new _AsyncGenerator(fn.apply(this, arguments));
- };
- }
- function _awaitAsyncGenerator(value) {
- return new _AwaitValue(value);
- }
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
- function _defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
- function _createClass(Constructor, protoProps, staticProps) {
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
- if (staticProps) _defineProperties(Constructor, staticProps);
- Object.defineProperty(Constructor, "prototype", {
- writable: false
- });
- return Constructor;
- }
- function _defineProperty(obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
- return obj;
- }
- function _inherits(subClass, superClass) {
- if (typeof superClass !== "function" && superClass !== null) {
- throw new TypeError("Super expression must either be null or a function");
- }
- subClass.prototype = Object.create(superClass && superClass.prototype, {
- constructor: {
- value: subClass,
- writable: true,
- configurable: true
- }
- });
- Object.defineProperty(subClass, "prototype", {
- writable: false
- });
- if (superClass) _setPrototypeOf(subClass, superClass);
- }
- function _getPrototypeOf(o) {
- _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
- return o.__proto__ || Object.getPrototypeOf(o);
- };
- return _getPrototypeOf(o);
- }
- function _setPrototypeOf(o, p) {
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
- o.__proto__ = p;
- return o;
- };
- return _setPrototypeOf(o, p);
- }
- function _isNativeReflectConstruct() {
- if (typeof Reflect === "undefined" || !Reflect.construct) return false;
- if (Reflect.construct.sham) return false;
- if (typeof Proxy === "function") return true;
- try {
- Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
- return true;
- } catch (e) {
- return false;
- }
- }
- function _assertThisInitialized(self) {
- if (self === void 0) {
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
- }
- return self;
- }
- function _possibleConstructorReturn(self, call) {
- if (call && (typeof call === "object" || typeof call === "function")) {
- return call;
- } else if (call !== void 0) {
- throw new TypeError("Derived constructors may only return object or undefined");
- }
- return _assertThisInitialized(self);
- }
- function _createSuper(Derived) {
- var hasNativeReflectConstruct = _isNativeReflectConstruct();
- return function _createSuperInternal() {
- var Super = _getPrototypeOf(Derived),
- result;
- if (hasNativeReflectConstruct) {
- var NewTarget = _getPrototypeOf(this).constructor;
- result = Reflect.construct(Super, arguments, NewTarget);
- } else {
- result = Super.apply(this, arguments);
- }
- return _possibleConstructorReturn(this, result);
- };
- }
- function _superPropBase(object, property) {
- while (!Object.prototype.hasOwnProperty.call(object, property)) {
- object = _getPrototypeOf(object);
- if (object === null) break;
- }
- return object;
- }
- function _get() {
- if (typeof Reflect !== "undefined" && Reflect.get) {
- _get = Reflect.get.bind();
- } else {
- _get = function _get(target, property, receiver) {
- var base = _superPropBase(target, property);
- if (!base) return;
- var desc = Object.getOwnPropertyDescriptor(base, property);
- if (desc.get) {
- return desc.get.call(arguments.length < 3 ? target : receiver);
- }
- return desc.value;
- };
- }
- return _get.apply(this, arguments);
- }
- function _slicedToArray(arr, i) {
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
- }
- function _toConsumableArray(arr) {
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
- }
- function _arrayWithoutHoles(arr) {
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
- }
- function _arrayWithHoles(arr) {
- if (Array.isArray(arr)) return arr;
- }
- function _iterableToArray(iter) {
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
- }
- function _iterableToArrayLimit(arr, i) {
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
- if (_i == null) return;
- var _arr = [];
- var _n = true;
- var _d = false;
- var _s, _e;
- try {
- for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
- _arr.push(_s.value);
- if (i && _arr.length === i) break;
- }
- } catch (err) {
- _d = true;
- _e = err;
- } finally {
- try {
- if (!_n && _i["return"] != null) _i["return"]();
- } finally {
- if (_d) throw _e;
- }
- }
- return _arr;
- }
- function _unsupportedIterableToArray(o, minLen) {
- if (!o) return;
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
- var n = Object.prototype.toString.call(o).slice(8, -1);
- if (n === "Object" && o.constructor) n = o.constructor.name;
- if (n === "Map" || n === "Set") return Array.from(o);
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
- }
- function _arrayLikeToArray(arr, len) {
- if (len == null || len > arr.length) len = arr.length;
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
- return arr2;
- }
- function _nonIterableSpread() {
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
- }
- function _nonIterableRest() {
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
- }
- function _createForOfIteratorHelper(o, allowArrayLike) {
- var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
- if (!it) {
- if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
- if (it) o = it;
- var i = 0;
- var F = function () {};
- return {
- s: F,
- n: function () {
- if (i >= o.length) return {
- done: true
- };
- return {
- done: false,
- value: o[i++]
- };
- },
- e: function (e) {
- throw e;
- },
- f: F
- };
- }
- throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
- }
- var normalCompletion = true,
- didErr = false,
- err;
- return {
- s: function () {
- it = it.call(o);
- },
- n: function () {
- var step = it.next();
- normalCompletion = step.done;
- return step;
- },
- e: function (e) {
- didErr = true;
- err = e;
- },
- f: function () {
- try {
- if (!normalCompletion && it.return != null) it.return();
- } finally {
- if (didErr) throw err;
- }
- }
- };
- }
- // eslint-disable-next-line es-x/no-typed-arrays -- safe
- var arrayBufferNative = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';
- var toIntegerOrInfinity$5 = toIntegerOrInfinity$9;
- var toLength$8 = toLength$a;
- var $RangeError$2 = RangeError;
- // `ToIndex` abstract operation
- // https://tc39.es/ecma262/#sec-toindex
- var toIndex$2 = function (it) {
- if (it === undefined) return 0;
- var number = toIntegerOrInfinity$5(it);
- var length = toLength$8(number);
- if (number !== length) throw $RangeError$2('Wrong length or index');
- return length;
- };
- // IEEE754 conversions based on https://github.com/feross/ieee754
- var $Array$2 = Array;
- var abs = Math.abs;
- var pow = Math.pow;
- var floor$3 = Math.floor;
- var log = Math.log;
- var LN2 = Math.LN2;
- var pack = function (number, mantissaLength, bytes) {
- var buffer = $Array$2(bytes);
- var exponentLength = bytes * 8 - mantissaLength - 1;
- var eMax = (1 << exponentLength) - 1;
- var eBias = eMax >> 1;
- var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;
- var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;
- var index = 0;
- var exponent, mantissa, c;
- number = abs(number);
- // eslint-disable-next-line no-self-compare -- NaN check
- if (number != number || number === Infinity) {
- // eslint-disable-next-line no-self-compare -- NaN check
- mantissa = number != number ? 1 : 0;
- exponent = eMax;
- } else {
- exponent = floor$3(log(number) / LN2);
- c = pow(2, -exponent);
- if (number * c < 1) {
- exponent--;
- c *= 2;
- }
- if (exponent + eBias >= 1) {
- number += rt / c;
- } else {
- number += rt * pow(2, 1 - eBias);
- }
- if (number * c >= 2) {
- exponent++;
- c /= 2;
- }
- if (exponent + eBias >= eMax) {
- mantissa = 0;
- exponent = eMax;
- } else if (exponent + eBias >= 1) {
- mantissa = (number * c - 1) * pow(2, mantissaLength);
- exponent = exponent + eBias;
- } else {
- mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);
- exponent = 0;
- }
- }
- while (mantissaLength >= 8) {
- buffer[index++] = mantissa & 255;
- mantissa /= 256;
- mantissaLength -= 8;
- }
- exponent = exponent << mantissaLength | mantissa;
- exponentLength += mantissaLength;
- while (exponentLength > 0) {
- buffer[index++] = exponent & 255;
- exponent /= 256;
- exponentLength -= 8;
- }
- buffer[--index] |= sign * 128;
- return buffer;
- };
- var unpack = function (buffer, mantissaLength) {
- var bytes = buffer.length;
- var exponentLength = bytes * 8 - mantissaLength - 1;
- var eMax = (1 << exponentLength) - 1;
- var eBias = eMax >> 1;
- var nBits = exponentLength - 7;
- var index = bytes - 1;
- var sign = buffer[index--];
- var exponent = sign & 127;
- var mantissa;
- sign >>= 7;
- while (nBits > 0) {
- exponent = exponent * 256 + buffer[index--];
- nBits -= 8;
- }
- mantissa = exponent & (1 << -nBits) - 1;
- exponent >>= -nBits;
- nBits += mantissaLength;
- while (nBits > 0) {
- mantissa = mantissa * 256 + buffer[index--];
- nBits -= 8;
- }
- if (exponent === 0) {
- exponent = 1 - eBias;
- } else if (exponent === eMax) {
- return mantissa ? NaN : sign ? -Infinity : Infinity;
- } else {
- mantissa = mantissa + pow(2, mantissaLength);
- exponent = exponent - eBias;
- } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);
- };
- var ieee754 = {
- pack: pack,
- unpack: unpack
- };
- var toObject$8 = toObject$d;
- var toAbsoluteIndex$5 = toAbsoluteIndex$8;
- var lengthOfArrayLike$b = lengthOfArrayLike$f;
- // `Array.prototype.fill` method implementation
- // https://tc39.es/ecma262/#sec-array.prototype.fill
- var arrayFill$1 = function fill(value /* , start = 0, end = @length */) {
- var O = toObject$8(this);
- var length = lengthOfArrayLike$b(O);
- var argumentsLength = arguments.length;
- var index = toAbsoluteIndex$5(argumentsLength > 1 ? arguments[1] : undefined, length);
- var end = argumentsLength > 2 ? arguments[2] : undefined;
- var endPos = end === undefined ? length : toAbsoluteIndex$5(end, length);
- while (endPos > index) O[index++] = value;
- return O;
- };
- var global$s = global$F;
- var uncurryThis$q = functionUncurryThis;
- var DESCRIPTORS$9 = descriptors;
- var NATIVE_ARRAY_BUFFER$1 = arrayBufferNative;
- var FunctionName = functionName;
- var createNonEnumerableProperty$4 = createNonEnumerableProperty$9;
- var defineBuiltIns$1 = defineBuiltIns$3;
- var fails$t = fails$H;
- var anInstance$4 = anInstance$7;
- var toIntegerOrInfinity$4 = toIntegerOrInfinity$9;
- var toLength$7 = toLength$a;
- var toIndex$1 = toIndex$2;
- var IEEE754 = ieee754;
- var getPrototypeOf$1 = objectGetPrototypeOf;
- var setPrototypeOf$4 = objectSetPrototypeOf;
- var getOwnPropertyNames$2 = objectGetOwnPropertyNames.f;
- var defineProperty$7 = objectDefineProperty.f;
- var arrayFill = arrayFill$1;
- var arraySlice$8 = arraySliceSimple;
- var setToStringTag$3 = setToStringTag$8;
- var InternalStateModule$5 = internalState;
- var PROPER_FUNCTION_NAME$1 = FunctionName.PROPER;
- var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
- var getInternalState$4 = InternalStateModule$5.get;
- var setInternalState$4 = InternalStateModule$5.set;
- var ARRAY_BUFFER$1 = 'ArrayBuffer';
- var DATA_VIEW = 'DataView';
- var PROTOTYPE$1 = 'prototype';
- var WRONG_LENGTH$1 = 'Wrong length';
- var WRONG_INDEX = 'Wrong index';
- var NativeArrayBuffer$1 = global$s[ARRAY_BUFFER$1];
- var $ArrayBuffer = NativeArrayBuffer$1;
- var ArrayBufferPrototype$1 = $ArrayBuffer && $ArrayBuffer[PROTOTYPE$1];
- var $DataView = global$s[DATA_VIEW];
- var DataViewPrototype$1 = $DataView && $DataView[PROTOTYPE$1];
- var ObjectPrototype$2 = Object.prototype;
- var Array$1 = global$s.Array;
- var RangeError$3 = global$s.RangeError;
- var fill = uncurryThis$q(arrayFill);
- var reverse = uncurryThis$q([].reverse);
- var packIEEE754 = IEEE754.pack;
- var unpackIEEE754 = IEEE754.unpack;
- var packInt8 = function (number) {
- return [number & 0xFF];
- };
- var packInt16 = function (number) {
- return [number & 0xFF, number >> 8 & 0xFF];
- };
- var packInt32 = function (number) {
- return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];
- };
- var unpackInt32 = function (buffer) {
- return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];
- };
- var packFloat32 = function (number) {
- return packIEEE754(number, 23, 4);
- };
- var packFloat64 = function (number) {
- return packIEEE754(number, 52, 8);
- };
- var addGetter$1 = function (Constructor, key) {
- defineProperty$7(Constructor[PROTOTYPE$1], key, { get: function () { return getInternalState$4(this)[key]; } });
- };
- var get = function (view, count, index, isLittleEndian) {
- var intIndex = toIndex$1(index);
- var store = getInternalState$4(view);
- if (intIndex + count > store.byteLength) throw RangeError$3(WRONG_INDEX);
- var bytes = getInternalState$4(store.buffer).bytes;
- var start = intIndex + store.byteOffset;
- var pack = arraySlice$8(bytes, start, start + count);
- return isLittleEndian ? pack : reverse(pack);
- };
- var set$1 = function (view, count, index, conversion, value, isLittleEndian) {
- var intIndex = toIndex$1(index);
- var store = getInternalState$4(view);
- if (intIndex + count > store.byteLength) throw RangeError$3(WRONG_INDEX);
- var bytes = getInternalState$4(store.buffer).bytes;
- var start = intIndex + store.byteOffset;
- var pack = conversion(+value);
- for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];
- };
- if (!NATIVE_ARRAY_BUFFER$1) {
- $ArrayBuffer = function ArrayBuffer(length) {
- anInstance$4(this, ArrayBufferPrototype$1);
- var byteLength = toIndex$1(length);
- setInternalState$4(this, {
- bytes: fill(Array$1(byteLength), 0),
- byteLength: byteLength
- });
- if (!DESCRIPTORS$9) this.byteLength = byteLength;
- };
- ArrayBufferPrototype$1 = $ArrayBuffer[PROTOTYPE$1];
- $DataView = function DataView(buffer, byteOffset, byteLength) {
- anInstance$4(this, DataViewPrototype$1);
- anInstance$4(buffer, ArrayBufferPrototype$1);
- var bufferLength = getInternalState$4(buffer).byteLength;
- var offset = toIntegerOrInfinity$4(byteOffset);
- if (offset < 0 || offset > bufferLength) throw RangeError$3('Wrong offset');
- byteLength = byteLength === undefined ? bufferLength - offset : toLength$7(byteLength);
- if (offset + byteLength > bufferLength) throw RangeError$3(WRONG_LENGTH$1);
- setInternalState$4(this, {
- buffer: buffer,
- byteLength: byteLength,
- byteOffset: offset
- });
- if (!DESCRIPTORS$9) {
- this.buffer = buffer;
- this.byteLength = byteLength;
- this.byteOffset = offset;
- }
- };
- DataViewPrototype$1 = $DataView[PROTOTYPE$1];
- if (DESCRIPTORS$9) {
- addGetter$1($ArrayBuffer, 'byteLength');
- addGetter$1($DataView, 'buffer');
- addGetter$1($DataView, 'byteLength');
- addGetter$1($DataView, 'byteOffset');
- }
- defineBuiltIns$1(DataViewPrototype$1, {
- getInt8: function getInt8(byteOffset) {
- return get(this, 1, byteOffset)[0] << 24 >> 24;
- },
- getUint8: function getUint8(byteOffset) {
- return get(this, 1, byteOffset)[0];
- },
- getInt16: function getInt16(byteOffset /* , littleEndian */) {
- var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);
- return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
- },
- getUint16: function getUint16(byteOffset /* , littleEndian */) {
- var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);
- return bytes[1] << 8 | bytes[0];
- },
- getInt32: function getInt32(byteOffset /* , littleEndian */) {
- return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));
- },
- getUint32: function getUint32(byteOffset /* , littleEndian */) {
- return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;
- },
- getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
- return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);
- },
- getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
- return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);
- },
- setInt8: function setInt8(byteOffset, value) {
- set$1(this, 1, byteOffset, packInt8, value);
- },
- setUint8: function setUint8(byteOffset, value) {
- set$1(this, 1, byteOffset, packInt8, value);
- },
- setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
- set$1(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);
- },
- setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
- set$1(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);
- },
- setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
- set$1(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);
- },
- setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
- set$1(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);
- },
- setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
- set$1(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);
- },
- setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
- set$1(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);
- }
- });
- } else {
- var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME$1 && NativeArrayBuffer$1.name !== ARRAY_BUFFER$1;
- /* eslint-disable no-new -- required for testing */
- if (!fails$t(function () {
- NativeArrayBuffer$1(1);
- }) || !fails$t(function () {
- new NativeArrayBuffer$1(-1);
- }) || fails$t(function () {
- new NativeArrayBuffer$1();
- new NativeArrayBuffer$1(1.5);
- new NativeArrayBuffer$1(NaN);
- return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;
- })) {
- /* eslint-enable no-new -- required for testing */
- $ArrayBuffer = function ArrayBuffer(length) {
- anInstance$4(this, ArrayBufferPrototype$1);
- return new NativeArrayBuffer$1(toIndex$1(length));
- };
- $ArrayBuffer[PROTOTYPE$1] = ArrayBufferPrototype$1;
- for (var keys$1 = getOwnPropertyNames$2(NativeArrayBuffer$1), j$2 = 0, key$1; keys$1.length > j$2;) {
- if (!((key$1 = keys$1[j$2++]) in $ArrayBuffer)) {
- createNonEnumerableProperty$4($ArrayBuffer, key$1, NativeArrayBuffer$1[key$1]);
- }
- }
- ArrayBufferPrototype$1.constructor = $ArrayBuffer;
- } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {
- createNonEnumerableProperty$4(NativeArrayBuffer$1, 'name', ARRAY_BUFFER$1);
- }
- // WebKit bug - the same parent prototype for typed arrays and data view
- if (setPrototypeOf$4 && getPrototypeOf$1(DataViewPrototype$1) !== ObjectPrototype$2) {
- setPrototypeOf$4(DataViewPrototype$1, ObjectPrototype$2);
- }
- // iOS Safari 7.x bug
- var testView = new $DataView(new $ArrayBuffer(2));
- var $setInt8 = uncurryThis$q(DataViewPrototype$1.setInt8);
- testView.setInt8(0, 2147483648);
- testView.setInt8(1, 2147483649);
- if (testView.getInt8(0) || !testView.getInt8(1)) defineBuiltIns$1(DataViewPrototype$1, {
- setInt8: function setInt8(byteOffset, value) {
- $setInt8(this, byteOffset, value << 24 >> 24);
- },
- setUint8: function setUint8(byteOffset, value) {
- $setInt8(this, byteOffset, value << 24 >> 24);
- }
- }, { unsafe: true });
- }
- setToStringTag$3($ArrayBuffer, ARRAY_BUFFER$1);
- setToStringTag$3($DataView, DATA_VIEW);
- var arrayBuffer = {
- ArrayBuffer: $ArrayBuffer,
- DataView: $DataView
- };
- var isConstructor$2 = isConstructor$4;
- var tryToString$4 = tryToString$7;
- var $TypeError$7 = TypeError;
- // `Assert: IsConstructor(argument) is true`
- var aConstructor$2 = function (argument) {
- if (isConstructor$2(argument)) return argument;
- throw $TypeError$7(tryToString$4(argument) + ' is not a constructor');
- };
- var anObject$8 = anObject$i;
- var aConstructor$1 = aConstructor$2;
- var wellKnownSymbol$g = wellKnownSymbol$t;
- var SPECIES$6 = wellKnownSymbol$g('species');
- // `SpeciesConstructor` abstract operation
- // https://tc39.es/ecma262/#sec-speciesconstructor
- var speciesConstructor$4 = function (O, defaultConstructor) {
- var C = anObject$8(O).constructor;
- var S;
- return C === undefined || (S = anObject$8(C)[SPECIES$6]) == undefined ? defaultConstructor : aConstructor$1(S);
- };
- var $$u = _export;
- var uncurryThis$p = functionUncurryThis;
- var fails$s = fails$H;
- var ArrayBufferModule$1 = arrayBuffer;
- var anObject$7 = anObject$i;
- var toAbsoluteIndex$4 = toAbsoluteIndex$8;
- var toLength$6 = toLength$a;
- var speciesConstructor$3 = speciesConstructor$4;
- var ArrayBuffer$4 = ArrayBufferModule$1.ArrayBuffer;
- var DataView$2 = ArrayBufferModule$1.DataView;
- var DataViewPrototype = DataView$2.prototype;
- var un$ArrayBufferSlice = uncurryThis$p(ArrayBuffer$4.prototype.slice);
- var getUint8$1 = uncurryThis$p(DataViewPrototype.getUint8);
- var setUint8$1 = uncurryThis$p(DataViewPrototype.setUint8);
- var INCORRECT_SLICE = fails$s(function () {
- return !new ArrayBuffer$4(2).slice(1, undefined).byteLength;
- });
- // `ArrayBuffer.prototype.slice` method
- // https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice
- $$u({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {
- slice: function slice(start, end) {
- if (un$ArrayBufferSlice && end === undefined) {
- return un$ArrayBufferSlice(anObject$7(this), start); // FF fix
- }
- var length = anObject$7(this).byteLength;
- var first = toAbsoluteIndex$4(start, length);
- var fin = toAbsoluteIndex$4(end === undefined ? length : end, length);
- var result = new (speciesConstructor$3(this, ArrayBuffer$4))(toLength$6(fin - first));
- var viewSource = new DataView$2(this);
- var viewTarget = new DataView$2(result);
- var index = 0;
- while (first < fin) {
- setUint8$1(viewTarget, index++, getUint8$1(viewSource, first++));
- } return result;
- }
- });
- var typedArrayConstructor = {exports: {}};
- var wellKnownSymbol$f = wellKnownSymbol$t;
- var ITERATOR$1 = wellKnownSymbol$f('iterator');
- var SAFE_CLOSING = false;
- try {
- var called = 0;
- var iteratorWithReturn = {
- next: function () {
- return { done: !!called++ };
- },
- 'return': function () {
- SAFE_CLOSING = true;
- }
- };
- iteratorWithReturn[ITERATOR$1] = function () {
- return this;
- };
- // eslint-disable-next-line es-x/no-array-from, no-throw-literal -- required for testing
- Array.from(iteratorWithReturn, function () { throw 2; });
- } catch (error) { /* empty */ }
- var checkCorrectnessOfIteration$4 = function (exec, SKIP_CLOSING) {
- if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
- var ITERATION_SUPPORT = false;
- try {
- var object = {};
- object[ITERATOR$1] = function () {
- return {
- next: function () {
- return { done: ITERATION_SUPPORT = true };
- }
- };
- };
- exec(object);
- } catch (error) { /* empty */ }
- return ITERATION_SUPPORT;
- };
- var NATIVE_ARRAY_BUFFER = arrayBufferNative;
- var DESCRIPTORS$8 = descriptors;
- var global$r = global$F;
- var isCallable$a = isCallable$s;
- var isObject$d = isObject$k;
- var hasOwn$9 = hasOwnProperty_1;
- var classof$8 = classof$e;
- var tryToString$3 = tryToString$7;
- var createNonEnumerableProperty$3 = createNonEnumerableProperty$9;
- var defineBuiltIn$7 = defineBuiltIn$f;
- var defineProperty$6 = objectDefineProperty.f;
- var isPrototypeOf$5 = objectIsPrototypeOf;
- var getPrototypeOf = objectGetPrototypeOf;
- var setPrototypeOf$3 = objectSetPrototypeOf;
- var wellKnownSymbol$e = wellKnownSymbol$t;
- var uid$2 = uid$5;
- var InternalStateModule$4 = internalState;
- var enforceInternalState$1 = InternalStateModule$4.enforce;
- var getInternalState$3 = InternalStateModule$4.get;
- var Int8Array$4 = global$r.Int8Array;
- var Int8ArrayPrototype$1 = Int8Array$4 && Int8Array$4.prototype;
- var Uint8ClampedArray$1 = global$r.Uint8ClampedArray;
- var Uint8ClampedArrayPrototype = Uint8ClampedArray$1 && Uint8ClampedArray$1.prototype;
- var TypedArray$1 = Int8Array$4 && getPrototypeOf(Int8Array$4);
- var TypedArrayPrototype$2 = Int8ArrayPrototype$1 && getPrototypeOf(Int8ArrayPrototype$1);
- var ObjectPrototype$1 = Object.prototype;
- var TypeError$4 = global$r.TypeError;
- var TO_STRING_TAG = wellKnownSymbol$e('toStringTag');
- var TYPED_ARRAY_TAG$1 = uid$2('TYPED_ARRAY_TAG');
- var TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';
- // Fixing native typed arrays in Opera Presto crashes the browser, see #595
- var NATIVE_ARRAY_BUFFER_VIEWS$2 = NATIVE_ARRAY_BUFFER && !!setPrototypeOf$3 && classof$8(global$r.opera) !== 'Opera';
- var TYPED_ARRAY_TAG_REQUIRED = false;
- var NAME$1, Constructor, Prototype;
- var TypedArrayConstructorsList = {
- Int8Array: 1,
- Uint8Array: 1,
- Uint8ClampedArray: 1,
- Int16Array: 2,
- Uint16Array: 2,
- Int32Array: 4,
- Uint32Array: 4,
- Float32Array: 4,
- Float64Array: 8
- };
- var BigIntArrayConstructorsList = {
- BigInt64Array: 8,
- BigUint64Array: 8
- };
- var isView = function isView(it) {
- if (!isObject$d(it)) return false;
- var klass = classof$8(it);
- return klass === 'DataView'
- || hasOwn$9(TypedArrayConstructorsList, klass)
- || hasOwn$9(BigIntArrayConstructorsList, klass);
- };
- var getTypedArrayConstructor$1 = function (it) {
- var proto = getPrototypeOf(it);
- if (!isObject$d(proto)) return;
- var state = getInternalState$3(proto);
- return (state && hasOwn$9(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor$1(proto);
- };
- var isTypedArray$1 = function (it) {
- if (!isObject$d(it)) return false;
- var klass = classof$8(it);
- return hasOwn$9(TypedArrayConstructorsList, klass)
- || hasOwn$9(BigIntArrayConstructorsList, klass);
- };
- var aTypedArray$m = function (it) {
- if (isTypedArray$1(it)) return it;
- throw TypeError$4('Target is not a typed array');
- };
- var aTypedArrayConstructor$3 = function (C) {
- if (isCallable$a(C) && (!setPrototypeOf$3 || isPrototypeOf$5(TypedArray$1, C))) return C;
- throw TypeError$4(tryToString$3(C) + ' is not a typed array constructor');
- };
- var exportTypedArrayMethod$n = function (KEY, property, forced, options) {
- if (!DESCRIPTORS$8) return;
- if (forced) for (var ARRAY in TypedArrayConstructorsList) {
- var TypedArrayConstructor = global$r[ARRAY];
- if (TypedArrayConstructor && hasOwn$9(TypedArrayConstructor.prototype, KEY)) try {
- delete TypedArrayConstructor.prototype[KEY];
- } catch (error) {
- // old WebKit bug - some methods are non-configurable
- try {
- TypedArrayConstructor.prototype[KEY] = property;
- } catch (error2) { /* empty */ }
- }
- }
- if (!TypedArrayPrototype$2[KEY] || forced) {
- defineBuiltIn$7(TypedArrayPrototype$2, KEY, forced ? property
- : NATIVE_ARRAY_BUFFER_VIEWS$2 && Int8ArrayPrototype$1[KEY] || property, options);
- }
- };
- var exportTypedArrayStaticMethod = function (KEY, property, forced) {
- var ARRAY, TypedArrayConstructor;
- if (!DESCRIPTORS$8) return;
- if (setPrototypeOf$3) {
- if (forced) for (ARRAY in TypedArrayConstructorsList) {
- TypedArrayConstructor = global$r[ARRAY];
- if (TypedArrayConstructor && hasOwn$9(TypedArrayConstructor, KEY)) try {
- delete TypedArrayConstructor[KEY];
- } catch (error) { /* empty */ }
- }
- if (!TypedArray$1[KEY] || forced) {
- // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable
- try {
- return defineBuiltIn$7(TypedArray$1, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS$2 && TypedArray$1[KEY] || property);
- } catch (error) { /* empty */ }
- } else return;
- }
- for (ARRAY in TypedArrayConstructorsList) {
- TypedArrayConstructor = global$r[ARRAY];
- if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {
- defineBuiltIn$7(TypedArrayConstructor, KEY, property);
- }
- }
- };
- for (NAME$1 in TypedArrayConstructorsList) {
- Constructor = global$r[NAME$1];
- Prototype = Constructor && Constructor.prototype;
- if (Prototype) enforceInternalState$1(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
- else NATIVE_ARRAY_BUFFER_VIEWS$2 = false;
- }
- for (NAME$1 in BigIntArrayConstructorsList) {
- Constructor = global$r[NAME$1];
- Prototype = Constructor && Constructor.prototype;
- if (Prototype) enforceInternalState$1(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
- }
- // WebKit bug - typed arrays constructors prototype is Object.prototype
- if (!NATIVE_ARRAY_BUFFER_VIEWS$2 || !isCallable$a(TypedArray$1) || TypedArray$1 === Function.prototype) {
- // eslint-disable-next-line no-shadow -- safe
- TypedArray$1 = function TypedArray() {
- throw TypeError$4('Incorrect invocation');
- };
- if (NATIVE_ARRAY_BUFFER_VIEWS$2) for (NAME$1 in TypedArrayConstructorsList) {
- if (global$r[NAME$1]) setPrototypeOf$3(global$r[NAME$1], TypedArray$1);
- }
- }
- if (!NATIVE_ARRAY_BUFFER_VIEWS$2 || !TypedArrayPrototype$2 || TypedArrayPrototype$2 === ObjectPrototype$1) {
- TypedArrayPrototype$2 = TypedArray$1.prototype;
- if (NATIVE_ARRAY_BUFFER_VIEWS$2) for (NAME$1 in TypedArrayConstructorsList) {
- if (global$r[NAME$1]) setPrototypeOf$3(global$r[NAME$1].prototype, TypedArrayPrototype$2);
- }
- }
- // WebKit bug - one more object in Uint8ClampedArray prototype chain
- if (NATIVE_ARRAY_BUFFER_VIEWS$2 && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype$2) {
- setPrototypeOf$3(Uint8ClampedArrayPrototype, TypedArrayPrototype$2);
- }
- if (DESCRIPTORS$8 && !hasOwn$9(TypedArrayPrototype$2, TO_STRING_TAG)) {
- TYPED_ARRAY_TAG_REQUIRED = true;
- defineProperty$6(TypedArrayPrototype$2, TO_STRING_TAG, { get: function () {
- return isObject$d(this) ? this[TYPED_ARRAY_TAG$1] : undefined;
- } });
- for (NAME$1 in TypedArrayConstructorsList) if (global$r[NAME$1]) {
- createNonEnumerableProperty$3(global$r[NAME$1], TYPED_ARRAY_TAG$1, NAME$1);
- }
- }
- var arrayBufferViewCore = {
- NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS$2,
- TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG$1,
- aTypedArray: aTypedArray$m,
- aTypedArrayConstructor: aTypedArrayConstructor$3,
- exportTypedArrayMethod: exportTypedArrayMethod$n,
- exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,
- getTypedArrayConstructor: getTypedArrayConstructor$1,
- isView: isView,
- isTypedArray: isTypedArray$1,
- TypedArray: TypedArray$1,
- TypedArrayPrototype: TypedArrayPrototype$2
- };
- /* eslint-disable no-new -- required for testing */
- var global$q = global$F;
- var fails$r = fails$H;
- var checkCorrectnessOfIteration$3 = checkCorrectnessOfIteration$4;
- var NATIVE_ARRAY_BUFFER_VIEWS$1 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
- var ArrayBuffer$3 = global$q.ArrayBuffer;
- var Int8Array$3 = global$q.Int8Array;
- var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$1 || !fails$r(function () {
- Int8Array$3(1);
- }) || !fails$r(function () {
- new Int8Array$3(-1);
- }) || !checkCorrectnessOfIteration$3(function (iterable) {
- new Int8Array$3();
- new Int8Array$3(null);
- new Int8Array$3(1.5);
- new Int8Array$3(iterable);
- }, true) || fails$r(function () {
- // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill
- return new Int8Array$3(new ArrayBuffer$3(2), 1, undefined).length !== 1;
- });
- var isObject$c = isObject$k;
- var floor$2 = Math.floor;
- // `IsIntegralNumber` abstract operation
- // https://tc39.es/ecma262/#sec-isintegralnumber
- // eslint-disable-next-line es-x/no-number-isinteger -- safe
- var isIntegralNumber$1 = Number.isInteger || function isInteger(it) {
- return !isObject$c(it) && isFinite(it) && floor$2(it) === it;
- };
- var toIntegerOrInfinity$3 = toIntegerOrInfinity$9;
- var $RangeError$1 = RangeError;
- var toPositiveInteger$1 = function (it) {
- var result = toIntegerOrInfinity$3(it);
- if (result < 0) throw $RangeError$1("The argument can't be less than 0");
- return result;
- };
- var toPositiveInteger = toPositiveInteger$1;
- var $RangeError = RangeError;
- var toOffset$2 = function (it, BYTES) {
- var offset = toPositiveInteger(it);
- if (offset % BYTES) throw $RangeError('Wrong offset');
- return offset;
- };
- var bind$6 = functionBindContext;
- var call$g = functionCall;
- var aConstructor = aConstructor$2;
- var toObject$7 = toObject$d;
- var lengthOfArrayLike$a = lengthOfArrayLike$f;
- var getIterator$1 = getIterator$4;
- var getIteratorMethod$1 = getIteratorMethod$5;
- var isArrayIteratorMethod$1 = isArrayIteratorMethod$3;
- var aTypedArrayConstructor$2 = arrayBufferViewCore.aTypedArrayConstructor;
- var typedArrayFrom$1 = function from(source /* , mapfn, thisArg */) {
- var C = aConstructor(this);
- var O = toObject$7(source);
- var argumentsLength = arguments.length;
- var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
- var mapping = mapfn !== undefined;
- var iteratorMethod = getIteratorMethod$1(O);
- var i, length, result, step, iterator, next;
- if (iteratorMethod && !isArrayIteratorMethod$1(iteratorMethod)) {
- iterator = getIterator$1(O, iteratorMethod);
- next = iterator.next;
- O = [];
- while (!(step = call$g(next, iterator)).done) {
- O.push(step.value);
- }
- }
- if (mapping && argumentsLength > 2) {
- mapfn = bind$6(mapfn, arguments[2]);
- }
- length = lengthOfArrayLike$a(O);
- result = new (aTypedArrayConstructor$2(C))(length);
- for (i = 0; length > i; i++) {
- result[i] = mapping ? mapfn(O[i], i) : O[i];
- }
- return result;
- };
- var classof$7 = classofRaw$1;
- // `IsArray` abstract operation
- // https://tc39.es/ecma262/#sec-isarray
- // eslint-disable-next-line es-x/no-array-isarray -- safe
- var isArray$4 = Array.isArray || function isArray(argument) {
- return classof$7(argument) == 'Array';
- };
- var isArray$3 = isArray$4;
- var isConstructor$1 = isConstructor$4;
- var isObject$b = isObject$k;
- var wellKnownSymbol$d = wellKnownSymbol$t;
- var SPECIES$5 = wellKnownSymbol$d('species');
- var $Array$1 = Array;
- // a part of `ArraySpeciesCreate` abstract operation
- // https://tc39.es/ecma262/#sec-arrayspeciescreate
- var arraySpeciesConstructor$1 = function (originalArray) {
- var C;
- if (isArray$3(originalArray)) {
- C = originalArray.constructor;
- // cross-realm fallback
- if (isConstructor$1(C) && (C === $Array$1 || isArray$3(C.prototype))) C = undefined;
- else if (isObject$b(C)) {
- C = C[SPECIES$5];
- if (C === null) C = undefined;
- }
- } return C === undefined ? $Array$1 : C;
- };
- var arraySpeciesConstructor = arraySpeciesConstructor$1;
- // `ArraySpeciesCreate` abstract operation
- // https://tc39.es/ecma262/#sec-arrayspeciescreate
- var arraySpeciesCreate$3 = function (originalArray, length) {
- return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
- };
- var bind$5 = functionBindContext;
- var uncurryThis$o = functionUncurryThis;
- var IndexedObject$1 = indexedObject;
- var toObject$6 = toObject$d;
- var lengthOfArrayLike$9 = lengthOfArrayLike$f;
- var arraySpeciesCreate$2 = arraySpeciesCreate$3;
- var push$4 = uncurryThis$o([].push);
- // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation
- var createMethod$3 = function (TYPE) {
- var IS_MAP = TYPE == 1;
- var IS_FILTER = TYPE == 2;
- var IS_SOME = TYPE == 3;
- var IS_EVERY = TYPE == 4;
- var IS_FIND_INDEX = TYPE == 6;
- var IS_FILTER_REJECT = TYPE == 7;
- var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
- return function ($this, callbackfn, that, specificCreate) {
- var O = toObject$6($this);
- var self = IndexedObject$1(O);
- var boundFunction = bind$5(callbackfn, that);
- var length = lengthOfArrayLike$9(self);
- var index = 0;
- var create = specificCreate || arraySpeciesCreate$2;
- var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;
- var value, result;
- for (;length > index; index++) if (NO_HOLES || index in self) {
- value = self[index];
- result = boundFunction(value, index, O);
- if (TYPE) {
- if (IS_MAP) target[index] = result; // map
- else if (result) switch (TYPE) {
- case 3: return true; // some
- case 5: return value; // find
- case 6: return index; // findIndex
- case 2: push$4(target, value); // filter
- } else switch (TYPE) {
- case 4: return false; // every
- case 7: push$4(target, value); // filterReject
- }
- }
- }
- return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
- };
- };
- var arrayIteration = {
- // `Array.prototype.forEach` method
- // https://tc39.es/ecma262/#sec-array.prototype.foreach
- forEach: createMethod$3(0),
- // `Array.prototype.map` method
- // https://tc39.es/ecma262/#sec-array.prototype.map
- map: createMethod$3(1),
- // `Array.prototype.filter` method
- // https://tc39.es/ecma262/#sec-array.prototype.filter
- filter: createMethod$3(2),
- // `Array.prototype.some` method
- // https://tc39.es/ecma262/#sec-array.prototype.some
- some: createMethod$3(3),
- // `Array.prototype.every` method
- // https://tc39.es/ecma262/#sec-array.prototype.every
- every: createMethod$3(4),
- // `Array.prototype.find` method
- // https://tc39.es/ecma262/#sec-array.prototype.find
- find: createMethod$3(5),
- // `Array.prototype.findIndex` method
- // https://tc39.es/ecma262/#sec-array.prototype.findIndex
- findIndex: createMethod$3(6),
- // `Array.prototype.filterReject` method
- // https://github.com/tc39/proposal-array-filtering
- filterReject: createMethod$3(7)
- };
- var getBuiltIn$5 = getBuiltIn$b;
- var definePropertyModule$2 = objectDefineProperty;
- var wellKnownSymbol$c = wellKnownSymbol$t;
- var DESCRIPTORS$7 = descriptors;
- var SPECIES$4 = wellKnownSymbol$c('species');
- var setSpecies$4 = function (CONSTRUCTOR_NAME) {
- var Constructor = getBuiltIn$5(CONSTRUCTOR_NAME);
- var defineProperty = definePropertyModule$2.f;
- if (DESCRIPTORS$7 && Constructor && !Constructor[SPECIES$4]) {
- defineProperty(Constructor, SPECIES$4, {
- configurable: true,
- get: function () { return this; }
- });
- }
- };
- var isCallable$9 = isCallable$s;
- var isObject$a = isObject$k;
- var setPrototypeOf$2 = objectSetPrototypeOf;
- // makes subclassing work correct for wrapped built-ins
- var inheritIfRequired$3 = function ($this, dummy, Wrapper) {
- var NewTarget, NewTargetPrototype;
- if (
- // it can work only with native `setPrototypeOf`
- setPrototypeOf$2 &&
- // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
- isCallable$9(NewTarget = dummy.constructor) &&
- NewTarget !== Wrapper &&
- isObject$a(NewTargetPrototype = NewTarget.prototype) &&
- NewTargetPrototype !== Wrapper.prototype
- ) setPrototypeOf$2($this, NewTargetPrototype);
- return $this;
- };
- var $$t = _export;
- var global$p = global$F;
- var call$f = functionCall;
- var DESCRIPTORS$6 = descriptors;
- var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = typedArrayConstructorsRequireWrappers;
- var ArrayBufferViewCore$n = arrayBufferViewCore;
- var ArrayBufferModule = arrayBuffer;
- var anInstance$3 = anInstance$7;
- var createPropertyDescriptor$1 = createPropertyDescriptor$7;
- var createNonEnumerableProperty$2 = createNonEnumerableProperty$9;
- var isIntegralNumber = isIntegralNumber$1;
- var toLength$5 = toLength$a;
- var toIndex = toIndex$2;
- var toOffset$1 = toOffset$2;
- var toPropertyKey$1 = toPropertyKey$5;
- var hasOwn$8 = hasOwnProperty_1;
- var classof$6 = classof$e;
- var isObject$9 = isObject$k;
- var isSymbol$3 = isSymbol$6;
- var create$2 = objectCreate;
- var isPrototypeOf$4 = objectIsPrototypeOf;
- var setPrototypeOf$1 = objectSetPrototypeOf;
- var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
- var typedArrayFrom = typedArrayFrom$1;
- var forEach$1 = arrayIteration.forEach;
- var setSpecies$3 = setSpecies$4;
- var definePropertyModule$1 = objectDefineProperty;
- var getOwnPropertyDescriptorModule$1 = objectGetOwnPropertyDescriptor;
- var InternalStateModule$3 = internalState;
- var inheritIfRequired$2 = inheritIfRequired$3;
- var getInternalState$2 = InternalStateModule$3.get;
- var setInternalState$3 = InternalStateModule$3.set;
- var enforceInternalState = InternalStateModule$3.enforce;
- var nativeDefineProperty$1 = definePropertyModule$1.f;
- var nativeGetOwnPropertyDescriptor$1 = getOwnPropertyDescriptorModule$1.f;
- var round = Math.round;
- var RangeError$2 = global$p.RangeError;
- var ArrayBuffer$2 = ArrayBufferModule.ArrayBuffer;
- var ArrayBufferPrototype = ArrayBuffer$2.prototype;
- var DataView$1 = ArrayBufferModule.DataView;
- var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore$n.NATIVE_ARRAY_BUFFER_VIEWS;
- var TYPED_ARRAY_TAG = ArrayBufferViewCore$n.TYPED_ARRAY_TAG;
- var TypedArray = ArrayBufferViewCore$n.TypedArray;
- var TypedArrayPrototype$1 = ArrayBufferViewCore$n.TypedArrayPrototype;
- var aTypedArrayConstructor$1 = ArrayBufferViewCore$n.aTypedArrayConstructor;
- var isTypedArray = ArrayBufferViewCore$n.isTypedArray;
- var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
- var WRONG_LENGTH = 'Wrong length';
- var fromList = function (C, list) {
- aTypedArrayConstructor$1(C);
- var index = 0;
- var length = list.length;
- var result = new C(length);
- while (length > index) result[index] = list[index++];
- return result;
- };
- var addGetter = function (it, key) {
- nativeDefineProperty$1(it, key, { get: function () {
- return getInternalState$2(this)[key];
- } });
- };
- var isArrayBuffer = function (it) {
- var klass;
- return isPrototypeOf$4(ArrayBufferPrototype, it) || (klass = classof$6(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';
- };
- var isTypedArrayIndex = function (target, key) {
- return isTypedArray(target)
- && !isSymbol$3(key)
- && key in target
- && isIntegralNumber(+key)
- && key >= 0;
- };
- var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {
- key = toPropertyKey$1(key);
- return isTypedArrayIndex(target, key)
- ? createPropertyDescriptor$1(2, target[key])
- : nativeGetOwnPropertyDescriptor$1(target, key);
- };
- var wrappedDefineProperty = function defineProperty(target, key, descriptor) {
- key = toPropertyKey$1(key);
- if (isTypedArrayIndex(target, key)
- && isObject$9(descriptor)
- && hasOwn$8(descriptor, 'value')
- && !hasOwn$8(descriptor, 'get')
- && !hasOwn$8(descriptor, 'set')
- // TODO: add validation descriptor w/o calling accessors
- && !descriptor.configurable
- && (!hasOwn$8(descriptor, 'writable') || descriptor.writable)
- && (!hasOwn$8(descriptor, 'enumerable') || descriptor.enumerable)
- ) {
- target[key] = descriptor.value;
- return target;
- } return nativeDefineProperty$1(target, key, descriptor);
- };
- if (DESCRIPTORS$6) {
- if (!NATIVE_ARRAY_BUFFER_VIEWS) {
- getOwnPropertyDescriptorModule$1.f = wrappedGetOwnPropertyDescriptor;
- definePropertyModule$1.f = wrappedDefineProperty;
- addGetter(TypedArrayPrototype$1, 'buffer');
- addGetter(TypedArrayPrototype$1, 'byteOffset');
- addGetter(TypedArrayPrototype$1, 'byteLength');
- addGetter(TypedArrayPrototype$1, 'length');
- }
- $$t({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {
- getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,
- defineProperty: wrappedDefineProperty
- });
- typedArrayConstructor.exports = function (TYPE, wrapper, CLAMPED) {
- var BYTES = TYPE.match(/\d+$/)[0] / 8;
- var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';
- var GETTER = 'get' + TYPE;
- var SETTER = 'set' + TYPE;
- var NativeTypedArrayConstructor = global$p[CONSTRUCTOR_NAME];
- var TypedArrayConstructor = NativeTypedArrayConstructor;
- var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;
- var exported = {};
- var getter = function (that, index) {
- var data = getInternalState$2(that);
- return data.view[GETTER](index * BYTES + data.byteOffset, true);
- };
- var setter = function (that, index, value) {
- var data = getInternalState$2(that);
- if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;
- data.view[SETTER](index * BYTES + data.byteOffset, value, true);
- };
- var addElement = function (that, index) {
- nativeDefineProperty$1(that, index, {
- get: function () {
- return getter(this, index);
- },
- set: function (value) {
- return setter(this, index, value);
- },
- enumerable: true
- });
- };
- if (!NATIVE_ARRAY_BUFFER_VIEWS) {
- TypedArrayConstructor = wrapper(function (that, data, offset, $length) {
- anInstance$3(that, TypedArrayConstructorPrototype);
- var index = 0;
- var byteOffset = 0;
- var buffer, byteLength, length;
- if (!isObject$9(data)) {
- length = toIndex(data);
- byteLength = length * BYTES;
- buffer = new ArrayBuffer$2(byteLength);
- } else if (isArrayBuffer(data)) {
- buffer = data;
- byteOffset = toOffset$1(offset, BYTES);
- var $len = data.byteLength;
- if ($length === undefined) {
- if ($len % BYTES) throw RangeError$2(WRONG_LENGTH);
- byteLength = $len - byteOffset;
- if (byteLength < 0) throw RangeError$2(WRONG_LENGTH);
- } else {
- byteLength = toLength$5($length) * BYTES;
- if (byteLength + byteOffset > $len) throw RangeError$2(WRONG_LENGTH);
- }
- length = byteLength / BYTES;
- } else if (isTypedArray(data)) {
- return fromList(TypedArrayConstructor, data);
- } else {
- return call$f(typedArrayFrom, TypedArrayConstructor, data);
- }
- setInternalState$3(that, {
- buffer: buffer,
- byteOffset: byteOffset,
- byteLength: byteLength,
- length: length,
- view: new DataView$1(buffer)
- });
- while (index < length) addElement(that, index++);
- });
- if (setPrototypeOf$1) setPrototypeOf$1(TypedArrayConstructor, TypedArray);
- TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create$2(TypedArrayPrototype$1);
- } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {
- TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {
- anInstance$3(dummy, TypedArrayConstructorPrototype);
- return inheritIfRequired$2(function () {
- if (!isObject$9(data)) return new NativeTypedArrayConstructor(toIndex(data));
- if (isArrayBuffer(data)) return $length !== undefined
- ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES), $length)
- : typedArrayOffset !== undefined
- ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES))
- : new NativeTypedArrayConstructor(data);
- if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);
- return call$f(typedArrayFrom, TypedArrayConstructor, data);
- }(), dummy, TypedArrayConstructor);
- });
- if (setPrototypeOf$1) setPrototypeOf$1(TypedArrayConstructor, TypedArray);
- forEach$1(getOwnPropertyNames$1(NativeTypedArrayConstructor), function (key) {
- if (!(key in TypedArrayConstructor)) {
- createNonEnumerableProperty$2(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);
- }
- });
- TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;
- }
- if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {
- createNonEnumerableProperty$2(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);
- }
- enforceInternalState(TypedArrayConstructorPrototype).TypedArrayConstructor = TypedArrayConstructor;
- if (TYPED_ARRAY_TAG) {
- createNonEnumerableProperty$2(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);
- }
- var FORCED = TypedArrayConstructor != NativeTypedArrayConstructor;
- exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;
- $$t({ global: true, constructor: true, forced: FORCED, sham: !NATIVE_ARRAY_BUFFER_VIEWS }, exported);
- if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {
- createNonEnumerableProperty$2(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);
- }
- if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {
- createNonEnumerableProperty$2(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);
- }
- setSpecies$3(CONSTRUCTOR_NAME);
- };
- } else typedArrayConstructor.exports = function () { /* empty */ };
- var createTypedArrayConstructor$2 = typedArrayConstructor.exports;
- // `Uint8Array` constructor
- // https://tc39.es/ecma262/#sec-typedarray-objects
- createTypedArrayConstructor$2('Uint8', function (init) {
- return function Uint8Array(data, byteOffset, length) {
- return init(this, data, byteOffset, length);
- };
- });
- var tryToString$2 = tryToString$7;
- var $TypeError$6 = TypeError;
- var deletePropertyOrThrow$2 = function (O, P) {
- if (!delete O[P]) throw $TypeError$6('Cannot delete property ' + tryToString$2(P) + ' of ' + tryToString$2(O));
- };
- var toObject$5 = toObject$d;
- var toAbsoluteIndex$3 = toAbsoluteIndex$8;
- var lengthOfArrayLike$8 = lengthOfArrayLike$f;
- var deletePropertyOrThrow$1 = deletePropertyOrThrow$2;
- var min$6 = Math.min;
- // `Array.prototype.copyWithin` method implementation
- // https://tc39.es/ecma262/#sec-array.prototype.copywithin
- // eslint-disable-next-line es-x/no-array-prototype-copywithin -- safe
- var arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
- var O = toObject$5(this);
- var len = lengthOfArrayLike$8(O);
- var to = toAbsoluteIndex$3(target, len);
- var from = toAbsoluteIndex$3(start, len);
- var end = arguments.length > 2 ? arguments[2] : undefined;
- var count = min$6((end === undefined ? len : toAbsoluteIndex$3(end, len)) - from, len - to);
- var inc = 1;
- if (from < to && to < from + count) {
- inc = -1;
- from += count - 1;
- to += count - 1;
- }
- while (count-- > 0) {
- if (from in O) O[to] = O[from];
- else deletePropertyOrThrow$1(O, to);
- to += inc;
- from += inc;
- } return O;
- };
- var uncurryThis$n = functionUncurryThis;
- var ArrayBufferViewCore$m = arrayBufferViewCore;
- var $ArrayCopyWithin = arrayCopyWithin;
- var u$ArrayCopyWithin = uncurryThis$n($ArrayCopyWithin);
- var aTypedArray$l = ArrayBufferViewCore$m.aTypedArray;
- var exportTypedArrayMethod$m = ArrayBufferViewCore$m.exportTypedArrayMethod;
- // `%TypedArray%.prototype.copyWithin` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin
- exportTypedArrayMethod$m('copyWithin', function copyWithin(target, start /* , end */) {
- return u$ArrayCopyWithin(aTypedArray$l(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
- });
- var ArrayBufferViewCore$l = arrayBufferViewCore;
- var $every = arrayIteration.every;
- var aTypedArray$k = ArrayBufferViewCore$l.aTypedArray;
- var exportTypedArrayMethod$l = ArrayBufferViewCore$l.exportTypedArrayMethod;
- // `%TypedArray%.prototype.every` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.every
- exportTypedArrayMethod$l('every', function every(callbackfn /* , thisArg */) {
- return $every(aTypedArray$k(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- });
- var toPrimitive$1 = toPrimitive$3;
- var $TypeError$5 = TypeError;
- // `ToBigInt` abstract operation
- // https://tc39.es/ecma262/#sec-tobigint
- var toBigInt$1 = function (argument) {
- var prim = toPrimitive$1(argument, 'number');
- if (typeof prim == 'number') throw $TypeError$5("Can't convert number to bigint");
- // eslint-disable-next-line es-x/no-bigint -- safe
- return BigInt(prim);
- };
- var ArrayBufferViewCore$k = arrayBufferViewCore;
- var $fill = arrayFill$1;
- var toBigInt = toBigInt$1;
- var classof$5 = classof$e;
- var call$e = functionCall;
- var uncurryThis$m = functionUncurryThis;
- var fails$q = fails$H;
- var aTypedArray$j = ArrayBufferViewCore$k.aTypedArray;
- var exportTypedArrayMethod$k = ArrayBufferViewCore$k.exportTypedArrayMethod;
- var slice$1 = uncurryThis$m(''.slice);
- // V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18
- var CONVERSION_BUG = fails$q(function () {
- var count = 0;
- // eslint-disable-next-line es-x/no-typed-arrays -- safe
- new Int8Array(2).fill({ valueOf: function () { return count++; } });
- return count !== 1;
- });
- // `%TypedArray%.prototype.fill` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill
- exportTypedArrayMethod$k('fill', function fill(value /* , start, end */) {
- var length = arguments.length;
- aTypedArray$j(this);
- var actualValue = slice$1(classof$5(this), 0, 3) === 'Big' ? toBigInt(value) : +value;
- return call$e($fill, this, actualValue, length > 1 ? arguments[1] : undefined, length > 2 ? arguments[2] : undefined);
- }, CONVERSION_BUG);
- var lengthOfArrayLike$7 = lengthOfArrayLike$f;
- var arrayFromConstructorAndList$1 = function (Constructor, list) {
- var index = 0;
- var length = lengthOfArrayLike$7(list);
- var result = new Constructor(length);
- while (length > index) result[index] = list[index++];
- return result;
- };
- var ArrayBufferViewCore$j = arrayBufferViewCore;
- var speciesConstructor$2 = speciesConstructor$4;
- var aTypedArrayConstructor = ArrayBufferViewCore$j.aTypedArrayConstructor;
- var getTypedArrayConstructor = ArrayBufferViewCore$j.getTypedArrayConstructor;
- // a part of `TypedArraySpeciesCreate` abstract operation
- // https://tc39.es/ecma262/#typedarray-species-create
- var typedArraySpeciesConstructor$4 = function (originalArray) {
- return aTypedArrayConstructor(speciesConstructor$2(originalArray, getTypedArrayConstructor(originalArray)));
- };
- var arrayFromConstructorAndList = arrayFromConstructorAndList$1;
- var typedArraySpeciesConstructor$3 = typedArraySpeciesConstructor$4;
- var typedArrayFromSpeciesAndList = function (instance, list) {
- return arrayFromConstructorAndList(typedArraySpeciesConstructor$3(instance), list);
- };
- var ArrayBufferViewCore$i = arrayBufferViewCore;
- var $filter$1 = arrayIteration.filter;
- var fromSpeciesAndList = typedArrayFromSpeciesAndList;
- var aTypedArray$i = ArrayBufferViewCore$i.aTypedArray;
- var exportTypedArrayMethod$j = ArrayBufferViewCore$i.exportTypedArrayMethod;
- // `%TypedArray%.prototype.filter` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter
- exportTypedArrayMethod$j('filter', function filter(callbackfn /* , thisArg */) {
- var list = $filter$1(aTypedArray$i(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- return fromSpeciesAndList(this, list);
- });
- var ArrayBufferViewCore$h = arrayBufferViewCore;
- var $find$1 = arrayIteration.find;
- var aTypedArray$h = ArrayBufferViewCore$h.aTypedArray;
- var exportTypedArrayMethod$i = ArrayBufferViewCore$h.exportTypedArrayMethod;
- // `%TypedArray%.prototype.find` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.find
- exportTypedArrayMethod$i('find', function find(predicate /* , thisArg */) {
- return $find$1(aTypedArray$h(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
- });
- var ArrayBufferViewCore$g = arrayBufferViewCore;
- var $findIndex = arrayIteration.findIndex;
- var aTypedArray$g = ArrayBufferViewCore$g.aTypedArray;
- var exportTypedArrayMethod$h = ArrayBufferViewCore$g.exportTypedArrayMethod;
- // `%TypedArray%.prototype.findIndex` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex
- exportTypedArrayMethod$h('findIndex', function findIndex(predicate /* , thisArg */) {
- return $findIndex(aTypedArray$g(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
- });
- var ArrayBufferViewCore$f = arrayBufferViewCore;
- var $forEach$2 = arrayIteration.forEach;
- var aTypedArray$f = ArrayBufferViewCore$f.aTypedArray;
- var exportTypedArrayMethod$g = ArrayBufferViewCore$f.exportTypedArrayMethod;
- // `%TypedArray%.prototype.forEach` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach
- exportTypedArrayMethod$g('forEach', function forEach(callbackfn /* , thisArg */) {
- $forEach$2(aTypedArray$f(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- });
- var ArrayBufferViewCore$e = arrayBufferViewCore;
- var $includes = arrayIncludes.includes;
- var aTypedArray$e = ArrayBufferViewCore$e.aTypedArray;
- var exportTypedArrayMethod$f = ArrayBufferViewCore$e.exportTypedArrayMethod;
- // `%TypedArray%.prototype.includes` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes
- exportTypedArrayMethod$f('includes', function includes(searchElement /* , fromIndex */) {
- return $includes(aTypedArray$e(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
- });
- var ArrayBufferViewCore$d = arrayBufferViewCore;
- var $indexOf = arrayIncludes.indexOf;
- var aTypedArray$d = ArrayBufferViewCore$d.aTypedArray;
- var exportTypedArrayMethod$e = ArrayBufferViewCore$d.exportTypedArrayMethod;
- // `%TypedArray%.prototype.indexOf` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof
- exportTypedArrayMethod$e('indexOf', function indexOf(searchElement /* , fromIndex */) {
- return $indexOf(aTypedArray$d(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
- });
- var global$o = global$F;
- var fails$p = fails$H;
- var uncurryThis$l = functionUncurryThis;
- var ArrayBufferViewCore$c = arrayBufferViewCore;
- var ArrayIterators = es_array_iterator;
- var wellKnownSymbol$b = wellKnownSymbol$t;
- var ITERATOR = wellKnownSymbol$b('iterator');
- var Uint8Array$2 = global$o.Uint8Array;
- var arrayValues = uncurryThis$l(ArrayIterators.values);
- var arrayKeys = uncurryThis$l(ArrayIterators.keys);
- var arrayEntries = uncurryThis$l(ArrayIterators.entries);
- var aTypedArray$c = ArrayBufferViewCore$c.aTypedArray;
- var exportTypedArrayMethod$d = ArrayBufferViewCore$c.exportTypedArrayMethod;
- var TypedArrayPrototype = Uint8Array$2 && Uint8Array$2.prototype;
- var GENERIC = !fails$p(function () {
- TypedArrayPrototype[ITERATOR].call([1]);
- });
- var ITERATOR_IS_VALUES = !!TypedArrayPrototype
- && TypedArrayPrototype.values
- && TypedArrayPrototype[ITERATOR] === TypedArrayPrototype.values
- && TypedArrayPrototype.values.name === 'values';
- var typedArrayValues = function values() {
- return arrayValues(aTypedArray$c(this));
- };
- // `%TypedArray%.prototype.entries` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries
- exportTypedArrayMethod$d('entries', function entries() {
- return arrayEntries(aTypedArray$c(this));
- }, GENERIC);
- // `%TypedArray%.prototype.keys` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys
- exportTypedArrayMethod$d('keys', function keys() {
- return arrayKeys(aTypedArray$c(this));
- }, GENERIC);
- // `%TypedArray%.prototype.values` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.values
- exportTypedArrayMethod$d('values', typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });
- // `%TypedArray%.prototype[@@iterator]` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator
- exportTypedArrayMethod$d(ITERATOR, typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });
- var ArrayBufferViewCore$b = arrayBufferViewCore;
- var uncurryThis$k = functionUncurryThis;
- var aTypedArray$b = ArrayBufferViewCore$b.aTypedArray;
- var exportTypedArrayMethod$c = ArrayBufferViewCore$b.exportTypedArrayMethod;
- var $join = uncurryThis$k([].join);
- // `%TypedArray%.prototype.join` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.join
- exportTypedArrayMethod$c('join', function join(separator) {
- return $join(aTypedArray$b(this), separator);
- });
- var NATIVE_BIND = functionBindNative;
- var FunctionPrototype$1 = Function.prototype;
- var apply$7 = FunctionPrototype$1.apply;
- var call$d = FunctionPrototype$1.call;
- // eslint-disable-next-line es-x/no-reflect -- safe
- var functionApply = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call$d.bind(apply$7) : function () {
- return call$d.apply(apply$7, arguments);
- });
- var fails$o = fails$H;
- var arrayMethodIsStrict$2 = function (METHOD_NAME, argument) {
- var method = [][METHOD_NAME];
- return !!method && fails$o(function () {
- // eslint-disable-next-line no-useless-call -- required for testing
- method.call(null, argument || function () { return 1; }, 1);
- });
- };
- /* eslint-disable es-x/no-array-prototype-lastindexof -- safe */
- var apply$6 = functionApply;
- var toIndexedObject$5 = toIndexedObject$b;
- var toIntegerOrInfinity$2 = toIntegerOrInfinity$9;
- var lengthOfArrayLike$6 = lengthOfArrayLike$f;
- var arrayMethodIsStrict$1 = arrayMethodIsStrict$2;
- var min$5 = Math.min;
- var $lastIndexOf$1 = [].lastIndexOf;
- var NEGATIVE_ZERO = !!$lastIndexOf$1 && 1 / [1].lastIndexOf(1, -0) < 0;
- var STRICT_METHOD$1 = arrayMethodIsStrict$1('lastIndexOf');
- var FORCED$5 = NEGATIVE_ZERO || !STRICT_METHOD$1;
- // `Array.prototype.lastIndexOf` method implementation
- // https://tc39.es/ecma262/#sec-array.prototype.lastindexof
- var arrayLastIndexOf = FORCED$5 ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
- // convert -0 to +0
- if (NEGATIVE_ZERO) return apply$6($lastIndexOf$1, this, arguments) || 0;
- var O = toIndexedObject$5(this);
- var length = lengthOfArrayLike$6(O);
- var index = length - 1;
- if (arguments.length > 1) index = min$5(index, toIntegerOrInfinity$2(arguments[1]));
- if (index < 0) index = length + index;
- for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;
- return -1;
- } : $lastIndexOf$1;
- var ArrayBufferViewCore$a = arrayBufferViewCore;
- var apply$5 = functionApply;
- var $lastIndexOf = arrayLastIndexOf;
- var aTypedArray$a = ArrayBufferViewCore$a.aTypedArray;
- var exportTypedArrayMethod$b = ArrayBufferViewCore$a.exportTypedArrayMethod;
- // `%TypedArray%.prototype.lastIndexOf` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof
- exportTypedArrayMethod$b('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {
- var length = arguments.length;
- return apply$5($lastIndexOf, aTypedArray$a(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);
- });
- var ArrayBufferViewCore$9 = arrayBufferViewCore;
- var $map = arrayIteration.map;
- var typedArraySpeciesConstructor$2 = typedArraySpeciesConstructor$4;
- var aTypedArray$9 = ArrayBufferViewCore$9.aTypedArray;
- var exportTypedArrayMethod$a = ArrayBufferViewCore$9.exportTypedArrayMethod;
- // `%TypedArray%.prototype.map` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.map
- exportTypedArrayMethod$a('map', function map(mapfn /* , thisArg */) {
- return $map(aTypedArray$9(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {
- return new (typedArraySpeciesConstructor$2(O))(length);
- });
- });
- var aCallable$5 = aCallable$9;
- var toObject$4 = toObject$d;
- var IndexedObject = indexedObject;
- var lengthOfArrayLike$5 = lengthOfArrayLike$f;
- var $TypeError$4 = TypeError;
- // `Array.prototype.{ reduce, reduceRight }` methods implementation
- var createMethod$2 = function (IS_RIGHT) {
- return function (that, callbackfn, argumentsLength, memo) {
- aCallable$5(callbackfn);
- var O = toObject$4(that);
- var self = IndexedObject(O);
- var length = lengthOfArrayLike$5(O);
- var index = IS_RIGHT ? length - 1 : 0;
- var i = IS_RIGHT ? -1 : 1;
- if (argumentsLength < 2) while (true) {
- if (index in self) {
- memo = self[index];
- index += i;
- break;
- }
- index += i;
- if (IS_RIGHT ? index < 0 : length <= index) {
- throw $TypeError$4('Reduce of empty array with no initial value');
- }
- }
- for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {
- memo = callbackfn(memo, self[index], index, O);
- }
- return memo;
- };
- };
- var arrayReduce = {
- // `Array.prototype.reduce` method
- // https://tc39.es/ecma262/#sec-array.prototype.reduce
- left: createMethod$2(false),
- // `Array.prototype.reduceRight` method
- // https://tc39.es/ecma262/#sec-array.prototype.reduceright
- right: createMethod$2(true)
- };
- var ArrayBufferViewCore$8 = arrayBufferViewCore;
- var $reduce = arrayReduce.left;
- var aTypedArray$8 = ArrayBufferViewCore$8.aTypedArray;
- var exportTypedArrayMethod$9 = ArrayBufferViewCore$8.exportTypedArrayMethod;
- // `%TypedArray%.prototype.reduce` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce
- exportTypedArrayMethod$9('reduce', function reduce(callbackfn /* , initialValue */) {
- var length = arguments.length;
- return $reduce(aTypedArray$8(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
- });
- var ArrayBufferViewCore$7 = arrayBufferViewCore;
- var $reduceRight = arrayReduce.right;
- var aTypedArray$7 = ArrayBufferViewCore$7.aTypedArray;
- var exportTypedArrayMethod$8 = ArrayBufferViewCore$7.exportTypedArrayMethod;
- // `%TypedArray%.prototype.reduceRicht` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright
- exportTypedArrayMethod$8('reduceRight', function reduceRight(callbackfn /* , initialValue */) {
- var length = arguments.length;
- return $reduceRight(aTypedArray$7(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
- });
- var ArrayBufferViewCore$6 = arrayBufferViewCore;
- var aTypedArray$6 = ArrayBufferViewCore$6.aTypedArray;
- var exportTypedArrayMethod$7 = ArrayBufferViewCore$6.exportTypedArrayMethod;
- var floor$1 = Math.floor;
- // `%TypedArray%.prototype.reverse` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse
- exportTypedArrayMethod$7('reverse', function reverse() {
- var that = this;
- var length = aTypedArray$6(that).length;
- var middle = floor$1(length / 2);
- var index = 0;
- var value;
- while (index < middle) {
- value = that[index];
- that[index++] = that[--length];
- that[length] = value;
- } return that;
- });
- var global$n = global$F;
- var call$c = functionCall;
- var ArrayBufferViewCore$5 = arrayBufferViewCore;
- var lengthOfArrayLike$4 = lengthOfArrayLike$f;
- var toOffset = toOffset$2;
- var toIndexedObject$4 = toObject$d;
- var fails$n = fails$H;
- var RangeError$1 = global$n.RangeError;
- var Int8Array$2 = global$n.Int8Array;
- var Int8ArrayPrototype = Int8Array$2 && Int8Array$2.prototype;
- var $set = Int8ArrayPrototype && Int8ArrayPrototype.set;
- var aTypedArray$5 = ArrayBufferViewCore$5.aTypedArray;
- var exportTypedArrayMethod$6 = ArrayBufferViewCore$5.exportTypedArrayMethod;
- var WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS = !fails$n(function () {
- // eslint-disable-next-line es-x/no-typed-arrays -- required for testing
- var array = new Uint8ClampedArray(2);
- call$c($set, array, { length: 1, 0: 3 }, 1);
- return array[1] !== 3;
- });
- // https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other
- var TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore$5.NATIVE_ARRAY_BUFFER_VIEWS && fails$n(function () {
- var array = new Int8Array$2(2);
- array.set(1);
- array.set('2', 1);
- return array[0] !== 0 || array[1] !== 2;
- });
- // `%TypedArray%.prototype.set` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.set
- exportTypedArrayMethod$6('set', function set(arrayLike /* , offset */) {
- aTypedArray$5(this);
- var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);
- var src = toIndexedObject$4(arrayLike);
- if (WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS) return call$c($set, this, src, offset);
- var length = this.length;
- var len = lengthOfArrayLike$4(src);
- var index = 0;
- if (len + offset > length) throw RangeError$1('Wrong length');
- while (index < len) this[offset + index] = src[index++];
- }, !WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);
- var uncurryThis$j = functionUncurryThis;
- var arraySlice$7 = uncurryThis$j([].slice);
- var ArrayBufferViewCore$4 = arrayBufferViewCore;
- var typedArraySpeciesConstructor$1 = typedArraySpeciesConstructor$4;
- var fails$m = fails$H;
- var arraySlice$6 = arraySlice$7;
- var aTypedArray$4 = ArrayBufferViewCore$4.aTypedArray;
- var exportTypedArrayMethod$5 = ArrayBufferViewCore$4.exportTypedArrayMethod;
- var FORCED$4 = fails$m(function () {
- // eslint-disable-next-line es-x/no-typed-arrays -- required for testing
- new Int8Array(1).slice();
- });
- // `%TypedArray%.prototype.slice` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice
- exportTypedArrayMethod$5('slice', function slice(start, end) {
- var list = arraySlice$6(aTypedArray$4(this), start, end);
- var C = typedArraySpeciesConstructor$1(this);
- var index = 0;
- var length = list.length;
- var result = new C(length);
- while (length > index) result[index] = list[index++];
- return result;
- }, FORCED$4);
- var ArrayBufferViewCore$3 = arrayBufferViewCore;
- var $some = arrayIteration.some;
- var aTypedArray$3 = ArrayBufferViewCore$3.aTypedArray;
- var exportTypedArrayMethod$4 = ArrayBufferViewCore$3.exportTypedArrayMethod;
- // `%TypedArray%.prototype.some` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.some
- exportTypedArrayMethod$4('some', function some(callbackfn /* , thisArg */) {
- return $some(aTypedArray$3(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- });
- var userAgent$4 = engineUserAgent;
- var firefox = userAgent$4.match(/firefox\/(\d+)/i);
- var engineFfVersion = !!firefox && +firefox[1];
- var UA = engineUserAgent;
- var engineIsIeOrEdge = /MSIE|Trident/.test(UA);
- var userAgent$3 = engineUserAgent;
- var webkit = userAgent$3.match(/AppleWebKit\/(\d+)\./);
- var engineWebkitVersion = !!webkit && +webkit[1];
- var global$m = global$F;
- var uncurryThis$i = functionUncurryThis;
- var fails$l = fails$H;
- var aCallable$4 = aCallable$9;
- var internalSort = arraySort$1;
- var ArrayBufferViewCore$2 = arrayBufferViewCore;
- var FF = engineFfVersion;
- var IE_OR_EDGE = engineIsIeOrEdge;
- var V8 = engineV8Version;
- var WEBKIT = engineWebkitVersion;
- var aTypedArray$2 = ArrayBufferViewCore$2.aTypedArray;
- var exportTypedArrayMethod$3 = ArrayBufferViewCore$2.exportTypedArrayMethod;
- var Uint16Array$1 = global$m.Uint16Array;
- var un$Sort = Uint16Array$1 && uncurryThis$i(Uint16Array$1.prototype.sort);
- // WebKit
- var ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails$l(function () {
- un$Sort(new Uint16Array$1(2), null);
- }) && fails$l(function () {
- un$Sort(new Uint16Array$1(2), {});
- }));
- var STABLE_SORT = !!un$Sort && !fails$l(function () {
- // feature detection can be too slow, so check engines versions
- if (V8) return V8 < 74;
- if (FF) return FF < 67;
- if (IE_OR_EDGE) return true;
- if (WEBKIT) return WEBKIT < 602;
- var array = new Uint16Array$1(516);
- var expected = Array(516);
- var index, mod;
- for (index = 0; index < 516; index++) {
- mod = index % 4;
- array[index] = 515 - index;
- expected[index] = index - 2 * mod + 3;
- }
- un$Sort(array, function (a, b) {
- return (a / 4 | 0) - (b / 4 | 0);
- });
- for (index = 0; index < 516; index++) {
- if (array[index] !== expected[index]) return true;
- }
- });
- var getSortCompare = function (comparefn) {
- return function (x, y) {
- if (comparefn !== undefined) return +comparefn(x, y) || 0;
- // eslint-disable-next-line no-self-compare -- NaN check
- if (y !== y) return -1;
- // eslint-disable-next-line no-self-compare -- NaN check
- if (x !== x) return 1;
- if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;
- return x > y;
- };
- };
- // `%TypedArray%.prototype.sort` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort
- exportTypedArrayMethod$3('sort', function sort(comparefn) {
- if (comparefn !== undefined) aCallable$4(comparefn);
- if (STABLE_SORT) return un$Sort(this, comparefn);
- return internalSort(aTypedArray$2(this), getSortCompare(comparefn));
- }, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);
- var ArrayBufferViewCore$1 = arrayBufferViewCore;
- var toLength$4 = toLength$a;
- var toAbsoluteIndex$2 = toAbsoluteIndex$8;
- var typedArraySpeciesConstructor = typedArraySpeciesConstructor$4;
- var aTypedArray$1 = ArrayBufferViewCore$1.aTypedArray;
- var exportTypedArrayMethod$2 = ArrayBufferViewCore$1.exportTypedArrayMethod;
- // `%TypedArray%.prototype.subarray` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray
- exportTypedArrayMethod$2('subarray', function subarray(begin, end) {
- var O = aTypedArray$1(this);
- var length = O.length;
- var beginIndex = toAbsoluteIndex$2(begin, length);
- var C = typedArraySpeciesConstructor(O);
- return new C(
- O.buffer,
- O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,
- toLength$4((end === undefined ? length : toAbsoluteIndex$2(end, length)) - beginIndex)
- );
- });
- var global$l = global$F;
- var apply$4 = functionApply;
- var ArrayBufferViewCore = arrayBufferViewCore;
- var fails$k = fails$H;
- var arraySlice$5 = arraySlice$7;
- var Int8Array$1 = global$l.Int8Array;
- var aTypedArray = ArrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$1 = ArrayBufferViewCore.exportTypedArrayMethod;
- var $toLocaleString = [].toLocaleString;
- // iOS Safari 6.x fails here
- var TO_LOCALE_STRING_BUG = !!Int8Array$1 && fails$k(function () {
- $toLocaleString.call(new Int8Array$1(1));
- });
- var FORCED$3 = fails$k(function () {
- return [1, 2].toLocaleString() != new Int8Array$1([1, 2]).toLocaleString();
- }) || !fails$k(function () {
- Int8Array$1.prototype.toLocaleString.call([1, 2]);
- });
- // `%TypedArray%.prototype.toLocaleString` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring
- exportTypedArrayMethod$1('toLocaleString', function toLocaleString() {
- return apply$4(
- $toLocaleString,
- TO_LOCALE_STRING_BUG ? arraySlice$5(aTypedArray(this)) : aTypedArray(this),
- arraySlice$5(arguments)
- );
- }, FORCED$3);
- var exportTypedArrayMethod = arrayBufferViewCore.exportTypedArrayMethod;
- var fails$j = fails$H;
- var global$k = global$F;
- var uncurryThis$h = functionUncurryThis;
- var Uint8Array$1 = global$k.Uint8Array;
- var Uint8ArrayPrototype = Uint8Array$1 && Uint8Array$1.prototype || {};
- var arrayToString = [].toString;
- var join = uncurryThis$h([].join);
- if (fails$j(function () { arrayToString.call({}); })) {
- arrayToString = function toString() {
- return join(this);
- };
- }
- var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;
- // `%TypedArray%.prototype.toString` method
- // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring
- exportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- var streamCodecShim = (function (library) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var registerDataHandler = arguments.length > 2 ? arguments[2] : undefined;
- return {
- Deflate: createCodecClass(library.Deflate, options.deflate, registerDataHandler),
- Inflate: createCodecClass(library.Inflate, options.inflate, registerDataHandler)
- };
- });
- function createCodecClass(constructor, constructorOptions, registerDataHandler) {
- return /*#__PURE__*/function () {
- function _class(options) {
- _classCallCheck(this, _class);
- var codecAdapter = this;
- var onData = function onData(data) {
- if (codecAdapter.pendingData) {
- var pendingData = codecAdapter.pendingData;
- codecAdapter.pendingData = new Uint8Array(pendingData.length + data.length);
- codecAdapter.pendingData.set(pendingData, 0);
- codecAdapter.pendingData.set(data, pendingData.length);
- } else {
- codecAdapter.pendingData = new Uint8Array(data);
- }
- };
- codecAdapter.codec = new constructor(Object.assign({}, constructorOptions, options));
- registerDataHandler(codecAdapter.codec, onData);
- }
- _createClass(_class, [{
- key: "append",
- value: function append(data) {
- this.codec.push(data);
- return getResponse(this);
- }
- }, {
- key: "flush",
- value: function flush() {
- this.codec.push(new Uint8Array(0), true);
- return getResponse(this);
- }
- }]);
- return _class;
- }();
- function getResponse(codec) {
- if (codec.pendingData) {
- var output = codec.pendingData;
- codec.pendingData = null;
- return output;
- } else {
- return new Uint8Array(0);
- }
- }
- }
- var $$s = _export;
- var $find = arrayIteration.find;
- var addToUnscopables = addToUnscopables$2;
- var FIND = 'find';
- var SKIPS_HOLES = true;
- // Shouldn't skip holes
- if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });
- // `Array.prototype.find` method
- // https://tc39.es/ecma262/#sec-array.prototype.find
- $$s({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {
- find: function find(callbackfn /* , that = undefined */) {
- return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- }
- });
- // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables(FIND);
- var classof$4 = classofRaw$1;
- var global$j = global$F;
- var engineIsNode = classof$4(global$j.process) == 'process';
- var userAgent$2 = engineUserAgent;
- var engineIsIos = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent$2);
- var global$i = global$F;
- var apply$3 = functionApply;
- var bind$4 = functionBindContext;
- var isCallable$8 = isCallable$s;
- var hasOwn$7 = hasOwnProperty_1;
- var fails$i = fails$H;
- var html = html$2;
- var arraySlice$4 = arraySlice$7;
- var createElement = documentCreateElement$2;
- var validateArgumentsLength = validateArgumentsLength$3;
- var IS_IOS$1 = engineIsIos;
- var IS_NODE$2 = engineIsNode;
- var set = global$i.setImmediate;
- var clear = global$i.clearImmediate;
- var process$2 = global$i.process;
- var Dispatch = global$i.Dispatch;
- var Function$1 = global$i.Function;
- var MessageChannel = global$i.MessageChannel;
- var String$1 = global$i.String;
- var counter = 0;
- var queue$1 = {};
- var ONREADYSTATECHANGE = 'onreadystatechange';
- var location, defer, channel, port;
- try {
- // Deno throws a ReferenceError on `location` access without `--location` flag
- location = global$i.location;
- } catch (error) { /* empty */ }
- var run = function (id) {
- if (hasOwn$7(queue$1, id)) {
- var fn = queue$1[id];
- delete queue$1[id];
- fn();
- }
- };
- var runner = function (id) {
- return function () {
- run(id);
- };
- };
- var listener = function (event) {
- run(event.data);
- };
- var post = function (id) {
- // old engines have not location.origin
- global$i.postMessage(String$1(id), location.protocol + '//' + location.host);
- };
- // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
- if (!set || !clear) {
- set = function setImmediate(handler) {
- validateArgumentsLength(arguments.length, 1);
- var fn = isCallable$8(handler) ? handler : Function$1(handler);
- var args = arraySlice$4(arguments, 1);
- queue$1[++counter] = function () {
- apply$3(fn, undefined, args);
- };
- defer(counter);
- return counter;
- };
- clear = function clearImmediate(id) {
- delete queue$1[id];
- };
- // Node.js 0.8-
- if (IS_NODE$2) {
- defer = function (id) {
- process$2.nextTick(runner(id));
- };
- // Sphere (JS game engine) Dispatch API
- } else if (Dispatch && Dispatch.now) {
- defer = function (id) {
- Dispatch.now(runner(id));
- };
- // Browsers with MessageChannel, includes WebWorkers
- // except iOS - https://github.com/zloirock/core-js/issues/624
- } else if (MessageChannel && !IS_IOS$1) {
- channel = new MessageChannel();
- port = channel.port2;
- channel.port1.onmessage = listener;
- defer = bind$4(port.postMessage, port);
- // Browsers with postMessage, skip WebWorkers
- // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
- } else if (
- global$i.addEventListener &&
- isCallable$8(global$i.postMessage) &&
- !global$i.importScripts &&
- location && location.protocol !== 'file:' &&
- !fails$i(post)
- ) {
- defer = post;
- global$i.addEventListener('message', listener, false);
- // IE8-
- } else if (ONREADYSTATECHANGE in createElement('script')) {
- defer = function (id) {
- html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {
- html.removeChild(this);
- run(id);
- };
- };
- // Rest old browsers
- } else {
- defer = function (id) {
- setTimeout(runner(id), 0);
- };
- }
- }
- var task$1 = {
- set: set,
- clear: clear
- };
- var userAgent$1 = engineUserAgent;
- var global$h = global$F;
- var engineIsIosPebble = /ipad|iphone|ipod/i.test(userAgent$1) && global$h.Pebble !== undefined;
- var userAgent = engineUserAgent;
- var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(userAgent);
- var global$g = global$F;
- var bind$3 = functionBindContext;
- var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f;
- var macrotask = task$1.set;
- var IS_IOS = engineIsIos;
- var IS_IOS_PEBBLE = engineIsIosPebble;
- var IS_WEBOS_WEBKIT = engineIsWebosWebkit;
- var IS_NODE$1 = engineIsNode;
- var MutationObserver = global$g.MutationObserver || global$g.WebKitMutationObserver;
- var document$2 = global$g.document;
- var process$1 = global$g.process;
- var Promise$1 = global$g.Promise;
- // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
- var queueMicrotaskDescriptor = getOwnPropertyDescriptor$3(global$g, 'queueMicrotask');
- var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
- var flush, head, last, notify$1, toggle, node, promise, then;
- // modern engines have queueMicrotask method
- if (!queueMicrotask) {
- flush = function () {
- var parent, fn;
- if (IS_NODE$1 && (parent = process$1.domain)) parent.exit();
- while (head) {
- fn = head.fn;
- head = head.next;
- try {
- fn();
- } catch (error) {
- if (head) notify$1();
- else last = undefined;
- throw error;
- }
- } last = undefined;
- if (parent) parent.enter();
- };
- // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
- // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898
- if (!IS_IOS && !IS_NODE$1 && !IS_WEBOS_WEBKIT && MutationObserver && document$2) {
- toggle = true;
- node = document$2.createTextNode('');
- new MutationObserver(flush).observe(node, { characterData: true });
- notify$1 = function () {
- node.data = toggle = !toggle;
- };
- // environments with maybe non-completely correct, but existent Promise
- } else if (!IS_IOS_PEBBLE && Promise$1 && Promise$1.resolve) {
- // Promise.resolve without an argument throws an error in LG WebOS 2
- promise = Promise$1.resolve(undefined);
- // workaround of WebKit ~ iOS Safari 10.1 bug
- promise.constructor = Promise$1;
- then = bind$3(promise.then, promise);
- notify$1 = function () {
- then(flush);
- };
- // Node.js without promises
- } else if (IS_NODE$1) {
- notify$1 = function () {
- process$1.nextTick(flush);
- };
- // for other environments - macrotask based on:
- // - setImmediate
- // - MessageChannel
- // - window.postMessage
- // - onreadystatechange
- // - setTimeout
- } else {
- // strange IE + webpack dev server bug - use .bind(global)
- macrotask = bind$3(macrotask, global$g);
- notify$1 = function () {
- macrotask(flush);
- };
- }
- }
- var microtask$1 = queueMicrotask || function (fn) {
- var task = { fn: fn, next: undefined };
- if (last) last.next = task;
- if (!head) {
- head = task;
- notify$1();
- } last = task;
- };
- var global$f = global$F;
- var hostReportErrors$1 = function (a, b) {
- var console = global$f.console;
- if (console && console.error) {
- arguments.length == 1 ? console.error(a) : console.error(a, b);
- }
- };
- var perform$3 = function (exec) {
- try {
- return { error: false, value: exec() };
- } catch (error) {
- return { error: true, value: error };
- }
- };
- var Queue$1 = function () {
- this.head = null;
- this.tail = null;
- };
- Queue$1.prototype = {
- add: function (item) {
- var entry = { item: item, next: null };
- if (this.head) this.tail.next = entry;
- else this.head = entry;
- this.tail = entry;
- },
- get: function () {
- var entry = this.head;
- if (entry) {
- this.head = entry.next;
- if (this.tail === entry) this.tail = null;
- return entry.item;
- }
- }
- };
- var queue = Queue$1;
- var global$e = global$F;
- var promiseNativeConstructor = global$e.Promise;
- var engineIsBrowser = typeof window == 'object' && typeof Deno != 'object';
- var global$d = global$F;
- var NativePromiseConstructor$3 = promiseNativeConstructor;
- var isCallable$7 = isCallable$s;
- var isForced$2 = isForced_1;
- var inspectSource = inspectSource$4;
- var wellKnownSymbol$a = wellKnownSymbol$t;
- var IS_BROWSER = engineIsBrowser;
- var V8_VERSION$2 = engineV8Version;
- NativePromiseConstructor$3 && NativePromiseConstructor$3.prototype;
- var SPECIES$3 = wellKnownSymbol$a('species');
- var SUBCLASSING = false;
- var NATIVE_PROMISE_REJECTION_EVENT$1 = isCallable$7(global$d.PromiseRejectionEvent);
- var FORCED_PROMISE_CONSTRUCTOR$5 = isForced$2('Promise', function () {
- var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor$3);
- var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor$3);
- // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
- // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
- // We can't detect it synchronously, so just check versions
- if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION$2 === 66) return true;
- // We can't use @@species feature detection in V8 since it causes
- // deoptimization and performance degradation
- // https://github.com/zloirock/core-js/issues/679
- if (V8_VERSION$2 >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;
- // Detect correctness of subclassing with @@species support
- var promise = new NativePromiseConstructor$3(function (resolve) { resolve(1); });
- var FakePromise = function (exec) {
- exec(function () { /* empty */ }, function () { /* empty */ });
- };
- var constructor = promise.constructor = {};
- constructor[SPECIES$3] = FakePromise;
- SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;
- if (!SUBCLASSING) return true;
- // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
- return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_PROMISE_REJECTION_EVENT$1;
- });
- var promiseConstructorDetection = {
- CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR$5,
- REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT$1,
- SUBCLASSING: SUBCLASSING
- };
- var newPromiseCapability$2 = {};
- var aCallable$3 = aCallable$9;
- var PromiseCapability = function (C) {
- var resolve, reject;
- this.promise = new C(function ($$resolve, $$reject) {
- if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
- resolve = $$resolve;
- reject = $$reject;
- });
- this.resolve = aCallable$3(resolve);
- this.reject = aCallable$3(reject);
- };
- // `NewPromiseCapability` abstract operation
- // https://tc39.es/ecma262/#sec-newpromisecapability
- newPromiseCapability$2.f = function (C) {
- return new PromiseCapability(C);
- };
- var $$r = _export;
- var IS_NODE = engineIsNode;
- var global$c = global$F;
- var call$b = functionCall;
- var defineBuiltIn$6 = defineBuiltIn$f;
- var setPrototypeOf = objectSetPrototypeOf;
- var setToStringTag$2 = setToStringTag$8;
- var setSpecies$2 = setSpecies$4;
- var aCallable$2 = aCallable$9;
- var isCallable$6 = isCallable$s;
- var isObject$8 = isObject$k;
- var anInstance$2 = anInstance$7;
- var speciesConstructor$1 = speciesConstructor$4;
- var task = task$1.set;
- var microtask = microtask$1;
- var hostReportErrors = hostReportErrors$1;
- var perform$2 = perform$3;
- var Queue = queue;
- var InternalStateModule$2 = internalState;
- var NativePromiseConstructor$2 = promiseNativeConstructor;
- var PromiseConstructorDetection = promiseConstructorDetection;
- var newPromiseCapabilityModule$3 = newPromiseCapability$2;
- var PROMISE = 'Promise';
- var FORCED_PROMISE_CONSTRUCTOR$4 = PromiseConstructorDetection.CONSTRUCTOR;
- var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;
- var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;
- var getInternalPromiseState = InternalStateModule$2.getterFor(PROMISE);
- var setInternalState$2 = InternalStateModule$2.set;
- var NativePromisePrototype$1 = NativePromiseConstructor$2 && NativePromiseConstructor$2.prototype;
- var PromiseConstructor = NativePromiseConstructor$2;
- var PromisePrototype = NativePromisePrototype$1;
- var TypeError$3 = global$c.TypeError;
- var document$1 = global$c.document;
- var process = global$c.process;
- var newPromiseCapability$1 = newPromiseCapabilityModule$3.f;
- var newGenericPromiseCapability = newPromiseCapability$1;
- var DISPATCH_EVENT = !!(document$1 && document$1.createEvent && global$c.dispatchEvent);
- var UNHANDLED_REJECTION = 'unhandledrejection';
- var REJECTION_HANDLED = 'rejectionhandled';
- var PENDING = 0;
- var FULFILLED = 1;
- var REJECTED = 2;
- var HANDLED = 1;
- var UNHANDLED = 2;
- var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;
- // helpers
- var isThenable = function (it) {
- var then;
- return isObject$8(it) && isCallable$6(then = it.then) ? then : false;
- };
- var callReaction = function (reaction, state) {
- var value = state.value;
- var ok = state.state == FULFILLED;
- var handler = ok ? reaction.ok : reaction.fail;
- var resolve = reaction.resolve;
- var reject = reaction.reject;
- var domain = reaction.domain;
- var result, then, exited;
- try {
- if (handler) {
- if (!ok) {
- if (state.rejection === UNHANDLED) onHandleUnhandled(state);
- state.rejection = HANDLED;
- }
- if (handler === true) result = value;
- else {
- if (domain) domain.enter();
- result = handler(value); // can throw
- if (domain) {
- domain.exit();
- exited = true;
- }
- }
- if (result === reaction.promise) {
- reject(TypeError$3('Promise-chain cycle'));
- } else if (then = isThenable(result)) {
- call$b(then, result, resolve, reject);
- } else resolve(result);
- } else reject(value);
- } catch (error) {
- if (domain && !exited) domain.exit();
- reject(error);
- }
- };
- var notify = function (state, isReject) {
- if (state.notified) return;
- state.notified = true;
- microtask(function () {
- var reactions = state.reactions;
- var reaction;
- while (reaction = reactions.get()) {
- callReaction(reaction, state);
- }
- state.notified = false;
- if (isReject && !state.rejection) onUnhandled(state);
- });
- };
- var dispatchEvent = function (name, promise, reason) {
- var event, handler;
- if (DISPATCH_EVENT) {
- event = document$1.createEvent('Event');
- event.promise = promise;
- event.reason = reason;
- event.initEvent(name, false, true);
- global$c.dispatchEvent(event);
- } else event = { promise: promise, reason: reason };
- if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global$c['on' + name])) handler(event);
- else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
- };
- var onUnhandled = function (state) {
- call$b(task, global$c, function () {
- var promise = state.facade;
- var value = state.value;
- var IS_UNHANDLED = isUnhandled(state);
- var result;
- if (IS_UNHANDLED) {
- result = perform$2(function () {
- if (IS_NODE) {
- process.emit('unhandledRejection', value, promise);
- } else dispatchEvent(UNHANDLED_REJECTION, promise, value);
- });
- // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
- state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
- if (result.error) throw result.value;
- }
- });
- };
- var isUnhandled = function (state) {
- return state.rejection !== HANDLED && !state.parent;
- };
- var onHandleUnhandled = function (state) {
- call$b(task, global$c, function () {
- var promise = state.facade;
- if (IS_NODE) {
- process.emit('rejectionHandled', promise);
- } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
- });
- };
- var bind$2 = function (fn, state, unwrap) {
- return function (value) {
- fn(state, value, unwrap);
- };
- };
- var internalReject = function (state, value, unwrap) {
- if (state.done) return;
- state.done = true;
- if (unwrap) state = unwrap;
- state.value = value;
- state.state = REJECTED;
- notify(state, true);
- };
- var internalResolve = function (state, value, unwrap) {
- if (state.done) return;
- state.done = true;
- if (unwrap) state = unwrap;
- try {
- if (state.facade === value) throw TypeError$3("Promise can't be resolved itself");
- var then = isThenable(value);
- if (then) {
- microtask(function () {
- var wrapper = { done: false };
- try {
- call$b(then, value,
- bind$2(internalResolve, wrapper, state),
- bind$2(internalReject, wrapper, state)
- );
- } catch (error) {
- internalReject(wrapper, error, state);
- }
- });
- } else {
- state.value = value;
- state.state = FULFILLED;
- notify(state, false);
- }
- } catch (error) {
- internalReject({ done: false }, error, state);
- }
- };
- // constructor polyfill
- if (FORCED_PROMISE_CONSTRUCTOR$4) {
- // 25.4.3.1 Promise(executor)
- PromiseConstructor = function Promise(executor) {
- anInstance$2(this, PromisePrototype);
- aCallable$2(executor);
- call$b(Internal, this);
- var state = getInternalPromiseState(this);
- try {
- executor(bind$2(internalResolve, state), bind$2(internalReject, state));
- } catch (error) {
- internalReject(state, error);
- }
- };
- PromisePrototype = PromiseConstructor.prototype;
- // eslint-disable-next-line no-unused-vars -- required for `.length`
- Internal = function Promise(executor) {
- setInternalState$2(this, {
- type: PROMISE,
- done: false,
- notified: false,
- parent: false,
- reactions: new Queue(),
- rejection: false,
- state: PENDING,
- value: undefined
- });
- };
- // `Promise.prototype.then` method
- // https://tc39.es/ecma262/#sec-promise.prototype.then
- Internal.prototype = defineBuiltIn$6(PromisePrototype, 'then', function then(onFulfilled, onRejected) {
- var state = getInternalPromiseState(this);
- var reaction = newPromiseCapability$1(speciesConstructor$1(this, PromiseConstructor));
- state.parent = true;
- reaction.ok = isCallable$6(onFulfilled) ? onFulfilled : true;
- reaction.fail = isCallable$6(onRejected) && onRejected;
- reaction.domain = IS_NODE ? process.domain : undefined;
- if (state.state == PENDING) state.reactions.add(reaction);
- else microtask(function () {
- callReaction(reaction, state);
- });
- return reaction.promise;
- });
- OwnPromiseCapability = function () {
- var promise = new Internal();
- var state = getInternalPromiseState(promise);
- this.promise = promise;
- this.resolve = bind$2(internalResolve, state);
- this.reject = bind$2(internalReject, state);
- };
- newPromiseCapabilityModule$3.f = newPromiseCapability$1 = function (C) {
- return C === PromiseConstructor || C === PromiseWrapper
- ? new OwnPromiseCapability(C)
- : newGenericPromiseCapability(C);
- };
- if (isCallable$6(NativePromiseConstructor$2) && NativePromisePrototype$1 !== Object.prototype) {
- nativeThen = NativePromisePrototype$1.then;
- if (!NATIVE_PROMISE_SUBCLASSING) {
- // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs
- defineBuiltIn$6(NativePromisePrototype$1, 'then', function then(onFulfilled, onRejected) {
- var that = this;
- return new PromiseConstructor(function (resolve, reject) {
- call$b(nativeThen, that, resolve, reject);
- }).then(onFulfilled, onRejected);
- // https://github.com/zloirock/core-js/issues/640
- }, { unsafe: true });
- }
- // make `.constructor === Promise` work for native promise-based APIs
- try {
- delete NativePromisePrototype$1.constructor;
- } catch (error) { /* empty */ }
- // make `instanceof Promise` work for native promise-based APIs
- if (setPrototypeOf) {
- setPrototypeOf(NativePromisePrototype$1, PromisePrototype);
- }
- }
- }
- $$r({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR$4 }, {
- Promise: PromiseConstructor
- });
- setToStringTag$2(PromiseConstructor, PROMISE, false);
- setSpecies$2(PROMISE);
- var bind$1 = functionBindContext;
- var call$a = functionCall;
- var anObject$6 = anObject$i;
- var tryToString$1 = tryToString$7;
- var isArrayIteratorMethod = isArrayIteratorMethod$3;
- var lengthOfArrayLike$3 = lengthOfArrayLike$f;
- var isPrototypeOf$3 = objectIsPrototypeOf;
- var getIterator = getIterator$4;
- var getIteratorMethod = getIteratorMethod$5;
- var iteratorClose = iteratorClose$2;
- var $TypeError$3 = TypeError;
- var Result = function (stopped, result) {
- this.stopped = stopped;
- this.result = result;
- };
- var ResultPrototype = Result.prototype;
- var iterate$5 = function (iterable, unboundFunction, options) {
- var that = options && options.that;
- var AS_ENTRIES = !!(options && options.AS_ENTRIES);
- var IS_ITERATOR = !!(options && options.IS_ITERATOR);
- var INTERRUPTED = !!(options && options.INTERRUPTED);
- var fn = bind$1(unboundFunction, that);
- var iterator, iterFn, index, length, result, next, step;
- var stop = function (condition) {
- if (iterator) iteratorClose(iterator, 'normal', condition);
- return new Result(true, condition);
- };
- var callFn = function (value) {
- if (AS_ENTRIES) {
- anObject$6(value);
- return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
- } return INTERRUPTED ? fn(value, stop) : fn(value);
- };
- if (IS_ITERATOR) {
- iterator = iterable;
- } else {
- iterFn = getIteratorMethod(iterable);
- if (!iterFn) throw $TypeError$3(tryToString$1(iterable) + ' is not iterable');
- // optimisation for array iterators
- if (isArrayIteratorMethod(iterFn)) {
- for (index = 0, length = lengthOfArrayLike$3(iterable); length > index; index++) {
- result = callFn(iterable[index]);
- if (result && isPrototypeOf$3(ResultPrototype, result)) return result;
- } return new Result(false);
- }
- iterator = getIterator(iterable, iterFn);
- }
- next = iterator.next;
- while (!(step = call$a(next, iterator)).done) {
- try {
- result = callFn(step.value);
- } catch (error) {
- iteratorClose(iterator, 'throw', error);
- }
- if (typeof result == 'object' && result && isPrototypeOf$3(ResultPrototype, result)) return result;
- } return new Result(false);
- };
- var NativePromiseConstructor$1 = promiseNativeConstructor;
- var checkCorrectnessOfIteration$2 = checkCorrectnessOfIteration$4;
- var FORCED_PROMISE_CONSTRUCTOR$3 = promiseConstructorDetection.CONSTRUCTOR;
- var promiseStaticsIncorrectIteration = FORCED_PROMISE_CONSTRUCTOR$3 || !checkCorrectnessOfIteration$2(function (iterable) {
- NativePromiseConstructor$1.all(iterable).then(undefined, function () { /* empty */ });
- });
- var $$q = _export;
- var call$9 = functionCall;
- var aCallable$1 = aCallable$9;
- var newPromiseCapabilityModule$2 = newPromiseCapability$2;
- var perform$1 = perform$3;
- var iterate$4 = iterate$5;
- var PROMISE_STATICS_INCORRECT_ITERATION$1 = promiseStaticsIncorrectIteration;
- // `Promise.all` method
- // https://tc39.es/ecma262/#sec-promise.all
- $$q({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION$1 }, {
- all: function all(iterable) {
- var C = this;
- var capability = newPromiseCapabilityModule$2.f(C);
- var resolve = capability.resolve;
- var reject = capability.reject;
- var result = perform$1(function () {
- var $promiseResolve = aCallable$1(C.resolve);
- var values = [];
- var counter = 0;
- var remaining = 1;
- iterate$4(iterable, function (promise) {
- var index = counter++;
- var alreadyCalled = false;
- remaining++;
- call$9($promiseResolve, C, promise).then(function (value) {
- if (alreadyCalled) return;
- alreadyCalled = true;
- values[index] = value;
- --remaining || resolve(values);
- }, reject);
- });
- --remaining || resolve(values);
- });
- if (result.error) reject(result.value);
- return capability.promise;
- }
- });
- var $$p = _export;
- var FORCED_PROMISE_CONSTRUCTOR$2 = promiseConstructorDetection.CONSTRUCTOR;
- var NativePromiseConstructor = promiseNativeConstructor;
- var getBuiltIn$4 = getBuiltIn$b;
- var isCallable$5 = isCallable$s;
- var defineBuiltIn$5 = defineBuiltIn$f;
- var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
- // `Promise.prototype.catch` method
- // https://tc39.es/ecma262/#sec-promise.prototype.catch
- $$p({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR$2, real: true }, {
- 'catch': function (onRejected) {
- return this.then(undefined, onRejected);
- }
- });
- // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`
- if (isCallable$5(NativePromiseConstructor)) {
- var method = getBuiltIn$4('Promise').prototype['catch'];
- if (NativePromisePrototype['catch'] !== method) {
- defineBuiltIn$5(NativePromisePrototype, 'catch', method, { unsafe: true });
- }
- }
- var $$o = _export;
- var call$8 = functionCall;
- var aCallable = aCallable$9;
- var newPromiseCapabilityModule$1 = newPromiseCapability$2;
- var perform = perform$3;
- var iterate$3 = iterate$5;
- var PROMISE_STATICS_INCORRECT_ITERATION = promiseStaticsIncorrectIteration;
- // `Promise.race` method
- // https://tc39.es/ecma262/#sec-promise.race
- $$o({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {
- race: function race(iterable) {
- var C = this;
- var capability = newPromiseCapabilityModule$1.f(C);
- var reject = capability.reject;
- var result = perform(function () {
- var $promiseResolve = aCallable(C.resolve);
- iterate$3(iterable, function (promise) {
- call$8($promiseResolve, C, promise).then(capability.resolve, reject);
- });
- });
- if (result.error) reject(result.value);
- return capability.promise;
- }
- });
- var $$n = _export;
- var call$7 = functionCall;
- var newPromiseCapabilityModule = newPromiseCapability$2;
- var FORCED_PROMISE_CONSTRUCTOR$1 = promiseConstructorDetection.CONSTRUCTOR;
- // `Promise.reject` method
- // https://tc39.es/ecma262/#sec-promise.reject
- $$n({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR$1 }, {
- reject: function reject(r) {
- var capability = newPromiseCapabilityModule.f(this);
- call$7(capability.reject, undefined, r);
- return capability.promise;
- }
- });
- var anObject$5 = anObject$i;
- var isObject$7 = isObject$k;
- var newPromiseCapability = newPromiseCapability$2;
- var promiseResolve$1 = function (C, x) {
- anObject$5(C);
- if (isObject$7(x) && x.constructor === C) return x;
- var promiseCapability = newPromiseCapability.f(C);
- var resolve = promiseCapability.resolve;
- resolve(x);
- return promiseCapability.promise;
- };
- var $$m = _export;
- var getBuiltIn$3 = getBuiltIn$b;
- var FORCED_PROMISE_CONSTRUCTOR = promiseConstructorDetection.CONSTRUCTOR;
- var promiseResolve = promiseResolve$1;
- getBuiltIn$3('Promise');
- // `Promise.resolve` method
- // https://tc39.es/ecma262/#sec-promise.resolve
- $$m({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {
- resolve: function resolve(x) {
- return promiseResolve(this, x);
- }
- });
- var $TypeError$2 = TypeError;
- var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991
- var doesNotExceedSafeInteger$2 = function (it) {
- if (it > MAX_SAFE_INTEGER) throw $TypeError$2('Maximum allowed index exceeded');
- return it;
- };
- var fails$h = fails$H;
- var wellKnownSymbol$9 = wellKnownSymbol$t;
- var V8_VERSION$1 = engineV8Version;
- var SPECIES$2 = wellKnownSymbol$9('species');
- var arrayMethodHasSpeciesSupport$4 = function (METHOD_NAME) {
- // We can't use this feature detection in V8 since it causes
- // deoptimization and serious performance degradation
- // https://github.com/zloirock/core-js/issues/677
- return V8_VERSION$1 >= 51 || !fails$h(function () {
- var array = [];
- var constructor = array.constructor = {};
- constructor[SPECIES$2] = function () {
- return { foo: 1 };
- };
- return array[METHOD_NAME](Boolean).foo !== 1;
- });
- };
- var $$l = _export;
- var toObject$3 = toObject$d;
- var toAbsoluteIndex$1 = toAbsoluteIndex$8;
- var toIntegerOrInfinity$1 = toIntegerOrInfinity$9;
- var lengthOfArrayLike$2 = lengthOfArrayLike$f;
- var doesNotExceedSafeInteger$1 = doesNotExceedSafeInteger$2;
- var arraySpeciesCreate$1 = arraySpeciesCreate$3;
- var createProperty$3 = createProperty$6;
- var deletePropertyOrThrow = deletePropertyOrThrow$2;
- var arrayMethodHasSpeciesSupport$3 = arrayMethodHasSpeciesSupport$4;
- var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport$3('splice');
- var max$2 = Math.max;
- var min$4 = Math.min;
- // `Array.prototype.splice` method
- // https://tc39.es/ecma262/#sec-array.prototype.splice
- // with adding support of @@species
- $$l({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 }, {
- splice: function splice(start, deleteCount /* , ...items */) {
- var O = toObject$3(this);
- var len = lengthOfArrayLike$2(O);
- var actualStart = toAbsoluteIndex$1(start, len);
- var argumentsLength = arguments.length;
- var insertCount, actualDeleteCount, A, k, from, to;
- if (argumentsLength === 0) {
- insertCount = actualDeleteCount = 0;
- } else if (argumentsLength === 1) {
- insertCount = 0;
- actualDeleteCount = len - actualStart;
- } else {
- insertCount = argumentsLength - 2;
- actualDeleteCount = min$4(max$2(toIntegerOrInfinity$1(deleteCount), 0), len - actualStart);
- }
- doesNotExceedSafeInteger$1(len + insertCount - actualDeleteCount);
- A = arraySpeciesCreate$1(O, actualDeleteCount);
- for (k = 0; k < actualDeleteCount; k++) {
- from = actualStart + k;
- if (from in O) createProperty$3(A, k, O[from]);
- }
- A.length = actualDeleteCount;
- if (insertCount < actualDeleteCount) {
- for (k = actualStart; k < len - actualDeleteCount; k++) {
- from = k + actualDeleteCount;
- to = k + insertCount;
- if (from in O) O[to] = O[from];
- else deletePropertyOrThrow(O, to);
- }
- for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(O, k - 1);
- } else if (insertCount > actualDeleteCount) {
- for (k = len - actualDeleteCount; k > actualStart; k--) {
- from = k + actualDeleteCount - 1;
- to = k + insertCount - 1;
- if (from in O) O[to] = O[from];
- else deletePropertyOrThrow(O, to);
- }
- }
- for (k = 0; k < insertCount; k++) {
- O[k + actualStart] = arguments[k + 2];
- }
- O.length = len - actualDeleteCount + insertCount;
- return A;
- }
- });
- var global$b = global$F;
- var globalIsFinite = global$b.isFinite;
- // `Number.isFinite` method
- // https://tc39.es/ecma262/#sec-number.isfinite
- // eslint-disable-next-line es-x/no-number-isfinite -- safe
- var numberIsFinite$1 = Number.isFinite || function isFinite(it) {
- return typeof it == 'number' && globalIsFinite(it);
- };
- var $$k = _export;
- var numberIsFinite = numberIsFinite$1;
- // `Number.isFinite` method
- // https://tc39.es/ecma262/#sec-number.isfinite
- $$k({ target: 'Number', stat: true }, { isFinite: numberIsFinite });
- var uncurryThis$g = functionUncurryThis;
- // `thisNumberValue` abstract operation
- // https://tc39.es/ecma262/#sec-thisnumbervalue
- var thisNumberValue$1 = uncurryThis$g(1.0.valueOf);
- // a string of all valid unicode whitespaces
- var whitespaces$2 = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' +
- '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
- var uncurryThis$f = functionUncurryThis;
- var requireObjectCoercible$4 = requireObjectCoercible$8;
- var toString$7 = toString$a;
- var whitespaces$1 = whitespaces$2;
- var replace$4 = uncurryThis$f(''.replace);
- var whitespace = '[' + whitespaces$1 + ']';
- var ltrim = RegExp('^' + whitespace + whitespace + '*');
- var rtrim = RegExp(whitespace + whitespace + '*$');
- // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
- var createMethod$1 = function (TYPE) {
- return function ($this) {
- var string = toString$7(requireObjectCoercible$4($this));
- if (TYPE & 1) string = replace$4(string, ltrim, '');
- if (TYPE & 2) string = replace$4(string, rtrim, '');
- return string;
- };
- };
- var stringTrim = {
- // `String.prototype.{ trimLeft, trimStart }` methods
- // https://tc39.es/ecma262/#sec-string.prototype.trimstart
- start: createMethod$1(1),
- // `String.prototype.{ trimRight, trimEnd }` methods
- // https://tc39.es/ecma262/#sec-string.prototype.trimend
- end: createMethod$1(2),
- // `String.prototype.trim` method
- // https://tc39.es/ecma262/#sec-string.prototype.trim
- trim: createMethod$1(3)
- };
- var DESCRIPTORS$5 = descriptors;
- var global$a = global$F;
- var uncurryThis$e = functionUncurryThis;
- var isForced$1 = isForced_1;
- var defineBuiltIn$4 = defineBuiltIn$f;
- var hasOwn$6 = hasOwnProperty_1;
- var inheritIfRequired$1 = inheritIfRequired$3;
- var isPrototypeOf$2 = objectIsPrototypeOf;
- var isSymbol$2 = isSymbol$6;
- var toPrimitive = toPrimitive$3;
- var fails$g = fails$H;
- var getOwnPropertyNames = objectGetOwnPropertyNames.f;
- var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f;
- var defineProperty$5 = objectDefineProperty.f;
- var thisNumberValue = thisNumberValue$1;
- var trim = stringTrim.trim;
- var NUMBER = 'Number';
- var NativeNumber = global$a[NUMBER];
- var NumberPrototype = NativeNumber.prototype;
- var TypeError$2 = global$a.TypeError;
- var arraySlice$3 = uncurryThis$e(''.slice);
- var charCodeAt$1 = uncurryThis$e(''.charCodeAt);
- // `ToNumeric` abstract operation
- // https://tc39.es/ecma262/#sec-tonumeric
- var toNumeric = function (value) {
- var primValue = toPrimitive(value, 'number');
- return typeof primValue == 'bigint' ? primValue : toNumber(primValue);
- };
- // `ToNumber` abstract operation
- // https://tc39.es/ecma262/#sec-tonumber
- var toNumber = function (argument) {
- var it = toPrimitive(argument, 'number');
- var first, third, radix, maxCode, digits, length, index, code;
- if (isSymbol$2(it)) throw TypeError$2('Cannot convert a Symbol value to a number');
- if (typeof it == 'string' && it.length > 2) {
- it = trim(it);
- first = charCodeAt$1(it, 0);
- if (first === 43 || first === 45) {
- third = charCodeAt$1(it, 2);
- if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
- } else if (first === 48) {
- switch (charCodeAt$1(it, 1)) {
- case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i
- case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i
- default: return +it;
- }
- digits = arraySlice$3(it, 2);
- length = digits.length;
- for (index = 0; index < length; index++) {
- code = charCodeAt$1(digits, index);
- // parseInt parses a string to a first unavailable symbol
- // but ToNumber should return NaN if a string contains unavailable symbols
- if (code < 48 || code > maxCode) return NaN;
- } return parseInt(digits, radix);
- }
- } return +it;
- };
- // `Number` constructor
- // https://tc39.es/ecma262/#sec-number-constructor
- if (isForced$1(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {
- var NumberWrapper = function Number(value) {
- var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));
- var dummy = this;
- // check on 1..constructor(foo) case
- return isPrototypeOf$2(NumberPrototype, dummy) && fails$g(function () { thisNumberValue(dummy); })
- ? inheritIfRequired$1(Object(n), dummy, NumberWrapper) : n;
- };
- for (var keys = DESCRIPTORS$5 ? getOwnPropertyNames(NativeNumber) : (
- // ES3:
- 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
- // ES2015 (in case, if modules with ES2015 Number statics required before):
- 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +
- // ESNext
- 'fromString,range'
- ).split(','), j$1 = 0, key; keys.length > j$1; j$1++) {
- if (hasOwn$6(NativeNumber, key = keys[j$1]) && !hasOwn$6(NumberWrapper, key)) {
- defineProperty$5(NumberWrapper, key, getOwnPropertyDescriptor$2(NativeNumber, key));
- }
- }
- NumberWrapper.prototype = NumberPrototype;
- NumberPrototype.constructor = NumberWrapper;
- defineBuiltIn$4(global$a, NUMBER, NumberWrapper, { constructor: true });
- }
- var $$j = _export;
- var $filter = arrayIteration.filter;
- var arrayMethodHasSpeciesSupport$2 = arrayMethodHasSpeciesSupport$4;
- var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport$2('filter');
- // `Array.prototype.filter` method
- // https://tc39.es/ecma262/#sec-array.prototype.filter
- // with adding support of @@species
- $$j({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 }, {
- filter: function filter(callbackfn /* , thisArg */) {
- return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- }
- });
- var $forEach$1 = arrayIteration.forEach;
- var arrayMethodIsStrict = arrayMethodIsStrict$2;
- var STRICT_METHOD = arrayMethodIsStrict('forEach');
- // `Array.prototype.forEach` method implementation
- // https://tc39.es/ecma262/#sec-array.prototype.foreach
- var arrayForEach = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {
- return $forEach$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- // eslint-disable-next-line es-x/no-array-prototype-foreach -- safe
- } : [].forEach;
- var global$9 = global$F;
- var DOMIterables = domIterables;
- var DOMTokenListPrototype = domTokenListPrototype;
- var forEach = arrayForEach;
- var createNonEnumerableProperty$1 = createNonEnumerableProperty$9;
- var handlePrototype = function (CollectionPrototype) {
- // some Chrome versions have non-configurable methods on DOMTokenList
- if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {
- createNonEnumerableProperty$1(CollectionPrototype, 'forEach', forEach);
- } catch (error) {
- CollectionPrototype.forEach = forEach;
- }
- };
- for (var COLLECTION_NAME in DOMIterables) {
- if (DOMIterables[COLLECTION_NAME]) {
- handlePrototype(global$9[COLLECTION_NAME] && global$9[COLLECTION_NAME].prototype);
- }
- }
- handlePrototype(DOMTokenListPrototype);
- // A type of promise-like that resolves synchronously and supports only one observer
- const _Pact = /*#__PURE__*/(function() {
- function _Pact() {}
- _Pact.prototype.then = function(onFulfilled, onRejected) {
- const result = new _Pact();
- const state = this.s;
- if (state) {
- const callback = state & 1 ? onFulfilled : onRejected;
- if (callback) {
- try {
- _settle(result, 1, callback(this.v));
- } catch (e) {
- _settle(result, 2, e);
- }
- return result;
- } else {
- return this;
- }
- }
- this.o = function(_this) {
- try {
- const value = _this.v;
- if (_this.s & 1) {
- _settle(result, 1, onFulfilled ? onFulfilled(value) : value);
- } else if (onRejected) {
- _settle(result, 1, onRejected(value));
- } else {
- _settle(result, 2, value);
- }
- } catch (e) {
- _settle(result, 2, e);
- }
- };
- return result;
- };
- return _Pact;
- })();
- // Settles a pact synchronously
- function _settle(pact, state, value) {
- if (!pact.s) {
- if (value instanceof _Pact) {
- if (value.s) {
- if (state & 1) {
- state = value.s;
- }
- value = value.v;
- } else {
- value.o = _settle.bind(null, pact, state);
- return;
- }
- }
- if (value && value.then) {
- value.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));
- return;
- }
- pact.s = state;
- pact.v = value;
- const observer = pact.o;
- if (observer) {
- observer(pact);
- }
- }
- }
- function _isSettledPact(thenable) {
- return thenable instanceof _Pact && thenable.s & 1;
- }
- // Converts argument to a function that always returns a Promise
- function _async(f) {
- return function() {
- for (var args = [], i = 0; i < arguments.length; i++) {
- args[i] = arguments[i];
- }
- try {
- return Promise.resolve(f.apply(this, args));
- } catch(e) {
- return Promise.reject(e);
- }
- }
- }
- // Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)
- function _await(value, then, direct) {
- if (direct) {
- return then ? then(value) : value;
- }
- if (!value || !value.then) {
- value = Promise.resolve(value);
- }
- return then ? value.then(then) : value;
- }
- // Awaits on a value that may or may not be a Promise, then ignores it
- function _awaitIgnored(value, direct) {
- if (!direct) {
- return value && value.then ? value.then(_empty) : Promise.resolve();
- }
- }
- // Proceeds after a value has resolved, or proceeds immediately if the value is not thenable
- function _continue(value, then) {
- return value && value.then ? value.then(then) : then(value);
- }
- typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator";
- typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator";
- // Asynchronously implement a generic for loop
- function _for(test, update, body) {
- var stage;
- for (;;) {
- var shouldContinue = test();
- if (_isSettledPact(shouldContinue)) {
- shouldContinue = shouldContinue.v;
- }
- if (!shouldContinue) {
- return result;
- }
- if (shouldContinue.then) {
- stage = 0;
- break;
- }
- var result = body();
- if (result && result.then) {
- if (_isSettledPact(result)) {
- result = result.s;
- } else {
- stage = 1;
- break;
- }
- }
- if (update) {
- var updateValue = update();
- if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
- stage = 2;
- break;
- }
- }
- }
- var pact = new _Pact();
- var reject = _settle.bind(null, pact, 2);
- (stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);
- return pact;
- function _resumeAfterBody(value) {
- result = value;
- do {
- if (update) {
- updateValue = update();
- if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
- updateValue.then(_resumeAfterUpdate).then(void 0, reject);
- return;
- }
- }
- shouldContinue = test();
- if (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {
- _settle(pact, 1, result);
- return;
- }
- if (shouldContinue.then) {
- shouldContinue.then(_resumeAfterTest).then(void 0, reject);
- return;
- }
- result = body();
- if (_isSettledPact(result)) {
- result = result.v;
- }
- } while (!result || !result.then);
- result.then(_resumeAfterBody).then(void 0, reject);
- }
- function _resumeAfterTest(shouldContinue) {
- if (shouldContinue) {
- result = body();
- if (result && result.then) {
- result.then(_resumeAfterBody).then(void 0, reject);
- } else {
- _resumeAfterBody(result);
- }
- } else {
- _settle(pact, 1, result);
- }
- }
- function _resumeAfterUpdate() {
- if (shouldContinue = test()) {
- if (shouldContinue.then) {
- shouldContinue.then(_resumeAfterTest).then(void 0, reject);
- } else {
- _resumeAfterTest(shouldContinue);
- }
- } else {
- _settle(pact, 1, result);
- }
- }
- }
- // Asynchronously implement a do ... while loop
- function _do(body, test) {
- var awaitBody;
- do {
- var result = body();
- if (result && result.then) {
- if (_isSettledPact(result)) {
- result = result.v;
- } else {
- awaitBody = true;
- break;
- }
- }
- var shouldContinue = test();
- if (_isSettledPact(shouldContinue)) {
- shouldContinue = shouldContinue.v;
- }
- if (!shouldContinue) {
- return result;
- }
- } while (!shouldContinue.then);
- const pact = new _Pact();
- const reject = _settle.bind(null, pact, 2);
- (awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);
- return pact;
- function _resumeAfterBody(value) {
- result = value;
- for (;;) {
- shouldContinue = test();
- if (_isSettledPact(shouldContinue)) {
- shouldContinue = shouldContinue.v;
- }
- if (!shouldContinue) {
- break;
- }
- if (shouldContinue.then) {
- shouldContinue.then(_resumeAfterTest).then(void 0, reject);
- return;
- }
- result = body();
- if (result && result.then) {
- if (_isSettledPact(result)) {
- result = result.v;
- } else {
- result.then(_resumeAfterBody).then(void 0, reject);
- return;
- }
- }
- }
- _settle(pact, 1, result);
- }
- function _resumeAfterTest(shouldContinue) {
- if (shouldContinue) {
- do {
- result = body();
- if (result && result.then) {
- if (_isSettledPact(result)) {
- result = result.v;
- } else {
- result.then(_resumeAfterBody).then(void 0, reject);
- return;
- }
- }
- shouldContinue = test();
- if (_isSettledPact(shouldContinue)) {
- shouldContinue = shouldContinue.v;
- }
- if (!shouldContinue) {
- _settle(pact, 1, result);
- return;
- }
- } while (!shouldContinue.then);
- shouldContinue.then(_resumeAfterTest).then(void 0, reject);
- } else {
- _settle(pact, 1, result);
- }
- }
- }
- // Asynchronously call a function and pass the result to explicitly passed continuations
- function _call(body, then, direct) {
- if (direct) {
- return then ? then(body()) : body();
- }
- try {
- var result = Promise.resolve(body());
- return then ? result.then(then) : result;
- } catch (e) {
- return Promise.reject(e);
- }
- }
- // Asynchronously call a function and swallow the result
- function _callIgnored(body, direct) {
- return _call(body, _empty, direct);
- }
- // Asynchronously call a function and pass the result to explicitly passed continuations
- function _invoke(body, then) {
- var result = body();
- if (result && result.then) {
- return result.then(then);
- }
- return then(result);
- }
- // Asynchronously call a function and swallow the result
- function _invokeIgnored(body) {
- var result = body();
- if (result && result.then) {
- return result.then(_empty);
- }
- }
- // Asynchronously call a function and send errors to recovery continuation
- function _catch(body, recover) {
- try {
- var result = body();
- } catch(e) {
- return recover(e);
- }
- if (result && result.then) {
- return result.then(void 0, recover);
- }
- return result;
- }
- // Asynchronously await a promise and pass the result to a finally continuation
- function _finallyRethrows(body, finalizer) {
- try {
- var result = body();
- } catch (e) {
- return finalizer(true, e);
- }
- if (result && result.then) {
- return result.then(finalizer.bind(null, false), finalizer.bind(null, true));
- }
- return finalizer(false, result);
- }
- // Rethrow or return a value from a finally continuation
- function _rethrow(thrown, value) {
- if (thrown)
- throw value;
- return value;
- }
- // Empty function to implement break and other control flow that ignores asynchronous results
- function _empty() {
- }
- var isObject$6 = isObject$k;
- var classof$3 = classofRaw$1;
- var wellKnownSymbol$8 = wellKnownSymbol$t;
- var MATCH$1 = wellKnownSymbol$8('match');
- // `IsRegExp` abstract operation
- // https://tc39.es/ecma262/#sec-isregexp
- var isRegexp = function (it) {
- var isRegExp;
- return isObject$6(it) && ((isRegExp = it[MATCH$1]) !== undefined ? !!isRegExp : classof$3(it) == 'RegExp');
- };
- var isRegExp$1 = isRegexp;
- var $TypeError$1 = TypeError;
- var notARegexp = function (it) {
- if (isRegExp$1(it)) {
- throw $TypeError$1("The method doesn't accept regular expressions");
- } return it;
- };
- var wellKnownSymbol$7 = wellKnownSymbol$t;
- var MATCH = wellKnownSymbol$7('match');
- var correctIsRegexpLogic = function (METHOD_NAME) {
- var regexp = /./;
- try {
- '/./'[METHOD_NAME](regexp);
- } catch (error1) {
- try {
- regexp[MATCH] = false;
- return '/./'[METHOD_NAME](regexp);
- } catch (error2) { /* empty */ }
- } return false;
- };
- var $$i = _export;
- var uncurryThis$d = functionUncurryThis;
- var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;
- var toLength$3 = toLength$a;
- var toString$6 = toString$a;
- var notARegExp$1 = notARegexp;
- var requireObjectCoercible$3 = requireObjectCoercible$8;
- var correctIsRegExpLogic$1 = correctIsRegexpLogic;
- // eslint-disable-next-line es-x/no-string-prototype-startswith -- safe
- var un$StartsWith = uncurryThis$d(''.startsWith);
- var stringSlice$5 = uncurryThis$d(''.slice);
- var min$3 = Math.min;
- var CORRECT_IS_REGEXP_LOGIC$1 = correctIsRegExpLogic$1('startsWith');
- // https://github.com/zloirock/core-js/pull/702
- var MDN_POLYFILL_BUG$1 = !CORRECT_IS_REGEXP_LOGIC$1 && !!function () {
- var descriptor = getOwnPropertyDescriptor$1(String.prototype, 'startsWith');
- return descriptor && !descriptor.writable;
- }();
- // `String.prototype.startsWith` method
- // https://tc39.es/ecma262/#sec-string.prototype.startswith
- $$i({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG$1 && !CORRECT_IS_REGEXP_LOGIC$1 }, {
- startsWith: function startsWith(searchString /* , position = 0 */) {
- var that = toString$6(requireObjectCoercible$3(this));
- notARegExp$1(searchString);
- var index = toLength$3(min$3(arguments.length > 1 ? arguments[1] : undefined, that.length));
- var search = toString$6(searchString);
- return un$StartsWith
- ? un$StartsWith(that, search, index)
- : stringSlice$5(that, index, index + search.length) === search;
- }
- });
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- var table = [];
- for (var i = 0; i < 256; i++) {
- var t = i;
- for (var j = 0; j < 8; j++) {
- if (t & 1) {
- t = t >>> 1 ^ 0xEDB88320;
- } else {
- t = t >>> 1;
- }
- }
- table[i] = t;
- }
- var Crc32 = /*#__PURE__*/function () {
- function Crc32(crc) {
- _classCallCheck(this, Crc32);
- this.crc = crc || -1;
- }
- _createClass(Crc32, [{
- key: "append",
- value: function append(data) {
- var crc = this.crc | 0;
- for (var offset = 0, length = data.length | 0; offset < length; offset++) {
- crc = crc >>> 8 ^ table[(crc ^ data[offset]) & 0xFF];
- }
- this.crc = crc;
- }
- }, {
- key: "get",
- value: function get() {
- return ~this.crc;
- }
- }]);
- return Crc32;
- }();
- var $$h = _export;
- var from = arrayFrom$1;
- var checkCorrectnessOfIteration$1 = checkCorrectnessOfIteration$4;
- var INCORRECT_ITERATION = !checkCorrectnessOfIteration$1(function (iterable) {
- // eslint-disable-next-line es-x/no-array-from -- required for testing
- Array.from(iterable);
- });
- // `Array.from` method
- // https://tc39.es/ecma262/#sec-array.from
- $$h({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {
- from: from
- });
- function encodeText(value) {
- if (typeof TextEncoder == "undefined") {
- value = unescape(encodeURIComponent(value));
- var result = new Uint8Array(value.length);
- for (var i = 0; i < result.length; i++) {
- result[i] = value.charCodeAt(i);
- }
- return result;
- } else {
- return new TextEncoder().encode(value);
- }
- }
- var $$g = _export;
- var fails$f = fails$H;
- var isArray$2 = isArray$4;
- var isObject$5 = isObject$k;
- var toObject$2 = toObject$d;
- var lengthOfArrayLike$1 = lengthOfArrayLike$f;
- var doesNotExceedSafeInteger = doesNotExceedSafeInteger$2;
- var createProperty$2 = createProperty$6;
- var arraySpeciesCreate = arraySpeciesCreate$3;
- var arrayMethodHasSpeciesSupport$1 = arrayMethodHasSpeciesSupport$4;
- var wellKnownSymbol$6 = wellKnownSymbol$t;
- var V8_VERSION = engineV8Version;
- var IS_CONCAT_SPREADABLE = wellKnownSymbol$6('isConcatSpreadable');
- // We can't use this feature detection in V8 since it causes
- // deoptimization and serious performance degradation
- // https://github.com/zloirock/core-js/issues/679
- var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails$f(function () {
- var array = [];
- array[IS_CONCAT_SPREADABLE] = false;
- return array.concat()[0] !== array;
- });
- var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport$1('concat');
- var isConcatSpreadable = function (O) {
- if (!isObject$5(O)) return false;
- var spreadable = O[IS_CONCAT_SPREADABLE];
- return spreadable !== undefined ? !!spreadable : isArray$2(O);
- };
- var FORCED$2 = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;
- // `Array.prototype.concat` method
- // https://tc39.es/ecma262/#sec-array.prototype.concat
- // with adding support of @@isConcatSpreadable and @@species
- $$g({ target: 'Array', proto: true, arity: 1, forced: FORCED$2 }, {
- // eslint-disable-next-line no-unused-vars -- required for `.length`
- concat: function concat(arg) {
- var O = toObject$2(this);
- var A = arraySpeciesCreate(O, 0);
- var n = 0;
- var i, k, length, len, E;
- for (i = -1, length = arguments.length; i < length; i++) {
- E = i === -1 ? O : arguments[i];
- if (isConcatSpreadable(E)) {
- len = lengthOfArrayLike$1(E);
- doesNotExceedSafeInteger(n + len);
- for (k = 0; k < len; k++, n++) if (k in E) createProperty$2(A, n, E[k]);
- } else {
- doesNotExceedSafeInteger(n + 1);
- createProperty$2(A, n++, E);
- }
- }
- A.length = n;
- return A;
- }
- });
- var $$f = _export;
- var isArray$1 = isArray$4;
- var isConstructor = isConstructor$4;
- var isObject$4 = isObject$k;
- var toAbsoluteIndex = toAbsoluteIndex$8;
- var lengthOfArrayLike = lengthOfArrayLike$f;
- var toIndexedObject$3 = toIndexedObject$b;
- var createProperty$1 = createProperty$6;
- var wellKnownSymbol$5 = wellKnownSymbol$t;
- var arrayMethodHasSpeciesSupport = arrayMethodHasSpeciesSupport$4;
- var un$Slice = arraySlice$7;
- var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');
- var SPECIES$1 = wellKnownSymbol$5('species');
- var $Array = Array;
- var max$1 = Math.max;
- // `Array.prototype.slice` method
- // https://tc39.es/ecma262/#sec-array.prototype.slice
- // fallback for not array-like ES3 strings and DOM objects
- $$f({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
- slice: function slice(start, end) {
- var O = toIndexedObject$3(this);
- var length = lengthOfArrayLike(O);
- var k = toAbsoluteIndex(start, length);
- var fin = toAbsoluteIndex(end === undefined ? length : end, length);
- // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
- var Constructor, result, n;
- if (isArray$1(O)) {
- Constructor = O.constructor;
- // cross-realm fallback
- if (isConstructor(Constructor) && (Constructor === $Array || isArray$1(Constructor.prototype))) {
- Constructor = undefined;
- } else if (isObject$4(Constructor)) {
- Constructor = Constructor[SPECIES$1];
- if (Constructor === null) Constructor = undefined;
- }
- if (Constructor === $Array || Constructor === undefined) {
- return un$Slice(O, k, fin);
- }
- }
- result = new (Constructor === undefined ? $Array : Constructor)(max$1(fin - k, 0));
- for (n = 0; k < fin; k++, n++) if (k in O) createProperty$1(result, n, O[k]);
- result.length = n;
- return result;
- }
- });
- var createTypedArrayConstructor$1 = typedArrayConstructor.exports;
- // `Uint32Array` constructor
- // https://tc39.es/ecma262/#sec-typedarray-objects
- createTypedArrayConstructor$1('Uint32', function (init) {
- return function Uint32Array(data, byteOffset, length) {
- return init(this, data, byteOffset, length);
- };
- });
- var $$e = _export;
- var global$8 = global$F;
- var arrayBufferModule = arrayBuffer;
- var setSpecies$1 = setSpecies$4;
- var ARRAY_BUFFER = 'ArrayBuffer';
- var ArrayBuffer$1 = arrayBufferModule[ARRAY_BUFFER];
- var NativeArrayBuffer = global$8[ARRAY_BUFFER];
- // `ArrayBuffer` constructor
- // https://tc39.es/ecma262/#sec-arraybuffer-constructor
- $$e({ global: true, constructor: true, forced: NativeArrayBuffer !== ArrayBuffer$1 }, {
- ArrayBuffer: ArrayBuffer$1
- });
- setSpecies$1(ARRAY_BUFFER);
- // Derived from https://github.com/xqdoo00o/jszip/blob/master/lib/sjcl.js and https://github.com/bitwiseshiftleft/sjcl
- /*// deno-lint-ignore-file no-this-alias *
- /*
- * SJCL is open. You can use, modify and redistribute it under a BSD
- * license or under the GNU GPL, version 2.0.
- */
- /** @fileOverview Javascript cryptography implementation.
- *
- * Crush to remove comments, shorten variable names and
- * generally reduce transmission size.
- *
- * @author Emily Stark
- * @author Mike Hamburg
- * @author Dan Boneh
- */
- /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
- /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
- *
- * @author Emily Stark
- * @author Mike Hamburg
- * @author Dan Boneh
- */
- /**
- * Arrays of bits, encoded as arrays of Numbers.
- * @namespace
- * @description
- * <p>
- * These objects are the currency accepted by SJCL's crypto functions.
- * </p>
- *
- * <p>
- * Most of our crypto primitives operate on arrays of 4-byte words internally,
- * but many of them can take arguments that are not a multiple of 4 bytes.
- * This library encodes arrays of bits (whose size need not be a multiple of 8
- * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
- * array of words, 32 bits at a time. Since the words are double-precision
- * floating point numbers, they fit some extra data. We use this (in a private,
- * possibly-changing manner) to encode the number of bits actually present
- * in the last word of the array.
- * </p>
- *
- * <p>
- * Because bitwise ops clear this out-of-band data, these arrays can be passed
- * to ciphers like AES which want arrays of words.
- * </p>
- */
- var bitArray = {
- /**
- * Concatenate two bit arrays.
- * @param {bitArray} a1 The first array.
- * @param {bitArray} a2 The second array.
- * @return {bitArray} The concatenation of a1 and a2.
- */
- concat: function concat(a1, a2) {
- if (a1.length === 0 || a2.length === 0) {
- return a1.concat(a2);
- }
- var last = a1[a1.length - 1],
- shift = bitArray.getPartial(last);
- if (shift === 32) {
- return a1.concat(a2);
- } else {
- return bitArray._shiftRight(a2, shift, last | 0, a1.slice(0, a1.length - 1));
- }
- },
- /**
- * Find the length of an array of bits.
- * @param {bitArray} a The array.
- * @return {Number} The length of a, in bits.
- */
- bitLength: function bitLength(a) {
- var l = a.length;
- if (l === 0) {
- return 0;
- }
- var x = a[l - 1];
- return (l - 1) * 32 + bitArray.getPartial(x);
- },
- /**
- * Truncate an array.
- * @param {bitArray} a The array.
- * @param {Number} len The length to truncate to, in bits.
- * @return {bitArray} A new array, truncated to len bits.
- */
- clamp: function clamp(a, len) {
- if (a.length * 32 < len) {
- return a;
- }
- a = a.slice(0, Math.ceil(len / 32));
- var l = a.length;
- len = len & 31;
- if (l > 0 && len) {
- a[l - 1] = bitArray.partial(len, a[l - 1] & 0x80000000 >> len - 1, 1);
- }
- return a;
- },
- /**
- * Make a partial word for a bit array.
- * @param {Number} len The number of bits in the word.
- * @param {Number} x The bits.
- * @param {Number} [_end=0] Pass 1 if x has already been shifted to the high side.
- * @return {Number} The partial word.
- */
- partial: function partial(len, x, _end) {
- if (len === 32) {
- return x;
- }
- return (_end ? x | 0 : x << 32 - len) + len * 0x10000000000;
- },
- /**
- * Get the number of bits used by a partial word.
- * @param {Number} x The partial word.
- * @return {Number} The number of bits used by the partial word.
- */
- getPartial: function getPartial(x) {
- return Math.round(x / 0x10000000000) || 32;
- },
- /** Shift an array right.
- * @param {bitArray} a The array to shift.
- * @param {Number} shift The number of bits to shift.
- * @param {Number} [carry=0] A byte to carry in
- * @param {bitArray} [out=[]] An array to prepend to the output.
- * @private
- */
- _shiftRight: function _shiftRight(a, shift, carry, out) {
- if (out === undefined) {
- out = [];
- }
- for (; shift >= 32; shift -= 32) {
- out.push(carry);
- carry = 0;
- }
- if (shift === 0) {
- return out.concat(a);
- }
- for (var i = 0; i < a.length; i++) {
- out.push(carry | a[i] >>> shift);
- carry = a[i] << 32 - shift;
- }
- var last2 = a.length ? a[a.length - 1] : 0;
- var shift2 = bitArray.getPartial(last2);
- out.push(bitArray.partial(shift + shift2 & 31, shift + shift2 > 32 ? carry : out.pop(), 1));
- return out;
- }
- };
- /** @fileOverview Bit array codec implementations.
- *
- * @author Emily Stark
- * @author Mike Hamburg
- * @author Dan Boneh
- */
- /**
- * Arrays of bytes
- * @namespace
- */
- var codec = {
- bytes: {
- /** Convert from a bitArray to an array of bytes. */
- fromBits: function fromBits(arr) {
- var bl = bitArray.bitLength(arr);
- var byteLength = bl / 8;
- var out = new Uint8Array(byteLength);
- var tmp;
- for (var i = 0; i < byteLength; i++) {
- if ((i & 3) === 0) {
- tmp = arr[i / 4];
- }
- out[i] = tmp >>> 24;
- tmp <<= 8;
- }
- return out;
- },
- /** Convert from an array of bytes to a bitArray. */
- toBits: function toBits(bytes) {
- var out = [];
- var i;
- var tmp = 0;
- for (i = 0; i < bytes.length; i++) {
- tmp = tmp << 8 | bytes[i];
- if ((i & 3) === 3) {
- out.push(tmp);
- tmp = 0;
- }
- }
- if (i & 3) {
- out.push(bitArray.partial(8 * (i & 3), tmp));
- }
- return out;
- }
- }
- };
- var hash = {};
- /**
- * Context for a SHA-1 operation in progress.
- * @constructor
- */
- hash.sha1 = function (hash) {
- if (hash) {
- this._h = hash._h.slice(0);
- this._buffer = hash._buffer.slice(0);
- this._length = hash._length;
- } else {
- this.reset();
- }
- };
- hash.sha1.prototype = {
- /**
- * The hash's block size, in bits.
- * @constant
- */
- blockSize: 512,
- /**
- * Reset the hash state.
- * @return this
- */
- reset: function reset() {
- var sha1 = this;
- sha1._h = this._init.slice(0);
- sha1._buffer = [];
- sha1._length = 0;
- return sha1;
- },
- /**
- * Input several words to the hash.
- * @param {bitArray|String} data the data to hash.
- * @return this
- */
- update: function update(data) {
- var sha1 = this;
- if (typeof data === "string") {
- data = codec.utf8String.toBits(data);
- }
- var b = sha1._buffer = bitArray.concat(sha1._buffer, data);
- var ol = sha1._length;
- var nl = sha1._length = ol + bitArray.bitLength(data);
- if (nl > 9007199254740991) {
- throw new Error("Cannot hash more than 2^53 - 1 bits");
- }
- var c = new Uint32Array(b);
- var j = 0;
- for (var i = sha1.blockSize + ol - (sha1.blockSize + ol & sha1.blockSize - 1); i <= nl; i += sha1.blockSize) {
- sha1._block(c.subarray(16 * j, 16 * (j + 1)));
- j += 1;
- }
- b.splice(0, 16 * j);
- return sha1;
- },
- /**
- * Complete hashing and output the hash value.
- * @return {bitArray} The hash value, an array of 5 big-endian words. TODO
- */
- finalize: function finalize() {
- var sha1 = this;
- var b = sha1._buffer;
- var h = sha1._h; // Round out and push the buffer
- b = bitArray.concat(b, [bitArray.partial(1, 1)]); // Round out the buffer to a multiple of 16 words, less the 2 length words.
- for (var i = b.length + 2; i & 15; i++) {
- b.push(0);
- } // append the length
- b.push(Math.floor(sha1._length / 0x100000000));
- b.push(sha1._length | 0);
- while (b.length) {
- sha1._block(b.splice(0, 16));
- }
- sha1.reset();
- return h;
- },
- /**
- * The SHA-1 initialization vector.
- * @private
- */
- _init: [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0],
- /**
- * The SHA-1 hash key.
- * @private
- */
- _key: [0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6],
- /**
- * The SHA-1 logical functions f(0), f(1), ..., f(79).
- * @private
- */
- _f: function _f(t, b, c, d) {
- if (t <= 19) {
- return b & c | ~b & d;
- } else if (t <= 39) {
- return b ^ c ^ d;
- } else if (t <= 59) {
- return b & c | b & d | c & d;
- } else if (t <= 79) {
- return b ^ c ^ d;
- }
- },
- /**
- * Circular left-shift operator.
- * @private
- */
- _S: function _S(n, x) {
- return x << n | x >>> 32 - n;
- },
- /**
- * Perform one cycle of SHA-1.
- * @param {Uint32Array|bitArray} words one block of words.
- * @private
- */
- _block: function _block(words) {
- var sha1 = this;
- var h = sha1._h; // When words is passed to _block, it has 16 elements. SHA1 _block
- // function extends words with new elements (at the end there are 80 elements).
- // The problem is that if we use Uint32Array instead of Array,
- // the length of Uint32Array cannot be changed. Thus, we replace words with a
- // normal Array here.
- var w = Array(80); // do not use Uint32Array here as the instantiation is slower
- for (var j = 0; j < 16; j++) {
- w[j] = words[j];
- }
- var a = h[0];
- var b = h[1];
- var c = h[2];
- var d = h[3];
- var e = h[4];
- for (var t = 0; t <= 79; t++) {
- if (t >= 16) {
- w[t] = sha1._S(1, w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16]);
- }
- var tmp = sha1._S(5, a) + sha1._f(t, b, c, d) + e + w[t] + sha1._key[Math.floor(t / 20)] | 0;
- e = d;
- d = c;
- c = sha1._S(30, b);
- b = a;
- a = tmp;
- }
- h[0] = h[0] + a | 0;
- h[1] = h[1] + b | 0;
- h[2] = h[2] + c | 0;
- h[3] = h[3] + d | 0;
- h[4] = h[4] + e | 0;
- }
- };
- /** @fileOverview Low-level AES implementation.
- *
- * This file contains a low-level implementation of AES, optimized for
- * size and for efficiency on several browsers. It is based on
- * OpenSSL's aes_core.c, a public-domain implementation by Vincent
- * Rijmen, Antoon Bosselaers and Paulo Barreto.
- *
- * An older version of this implementation is available in the public
- * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
- * Stanford University 2008-2010 and BSD-licensed for liability
- * reasons.
- *
- * @author Emily Stark
- * @author Mike Hamburg
- * @author Dan Boneh
- */
- var cipher = {};
- /**
- * Schedule out an AES key for both encryption and decryption. This
- * is a low-level class. Use a cipher mode to do bulk encryption.
- *
- * @constructor
- * @param {Array} key The key as an array of 4, 6 or 8 words.
- */
- cipher.aes = /*#__PURE__*/function () {
- function _class(key) {
- _classCallCheck(this, _class);
- /**
- * The expanded S-box and inverse S-box tables. These will be computed
- * on the client so that we don't have to send them down the wire.
- *
- * There are two tables, _tables[0] is for encryption and
- * _tables[1] is for decryption.
- *
- * The first 4 sub-tables are the expanded S-box with MixColumns. The
- * last (_tables[01][4]) is the S-box itself.
- *
- * @private
- */
- var aes = this;
- aes._tables = [[[], [], [], [], []], [[], [], [], [], []]];
- if (!aes._tables[0][0][0]) {
- aes._precompute();
- }
- var sbox = aes._tables[0][4];
- var decTable = aes._tables[1];
- var keyLen = key.length;
- var i,
- encKey,
- decKey,
- rcon = 1;
- if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {
- throw new Error("invalid aes key size");
- }
- aes._key = [encKey = key.slice(0), decKey = []]; // schedule encryption keys
- for (i = keyLen; i < 4 * keyLen + 28; i++) {
- var tmp = encKey[i - 1]; // apply sbox
- if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {
- tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; // shift rows and add rcon
- if (i % keyLen === 0) {
- tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;
- rcon = rcon << 1 ^ (rcon >> 7) * 283;
- }
- }
- encKey[i] = encKey[i - keyLen] ^ tmp;
- } // schedule decryption keys
- for (var j = 0; i; j++, i--) {
- var _tmp = encKey[j & 3 ? i : i - 4];
- if (i <= 4 || j < 4) {
- decKey[j] = _tmp;
- } else {
- decKey[j] = decTable[0][sbox[_tmp >>> 24]] ^ decTable[1][sbox[_tmp >> 16 & 255]] ^ decTable[2][sbox[_tmp >> 8 & 255]] ^ decTable[3][sbox[_tmp & 255]];
- }
- }
- } // public
- /* Something like this might appear here eventually
- name: "AES",
- blockSize: 4,
- keySizes: [4,6,8],
- */
- /**
- * Encrypt an array of 4 big-endian words.
- * @param {Array} data The plaintext.
- * @return {Array} The ciphertext.
- */
- _createClass(_class, [{
- key: "encrypt",
- value: function encrypt(data) {
- return this._crypt(data, 0);
- }
- /**
- * Decrypt an array of 4 big-endian words.
- * @param {Array} data The ciphertext.
- * @return {Array} The plaintext.
- */
- }, {
- key: "decrypt",
- value: function decrypt(data) {
- return this._crypt(data, 1);
- }
- /**
- * Expand the S-box tables.
- *
- * @private
- */
- }, {
- key: "_precompute",
- value: function _precompute() {
- var encTable = this._tables[0];
- var decTable = this._tables[1];
- var sbox = encTable[4];
- var sboxInv = decTable[4];
- var d = [];
- var th = [];
- var xInv, x2, x4, x8; // Compute double and third tables
- for (var i = 0; i < 256; i++) {
- th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;
- }
- for (var x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {
- // Compute sbox
- var s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;
- s = s >> 8 ^ s & 255 ^ 99;
- sbox[x] = s;
- sboxInv[s] = x; // Compute MixColumns
- x8 = d[x4 = d[x2 = d[x]]];
- var tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;
- var tEnc = d[s] * 0x101 ^ s * 0x1010100;
- for (var _i = 0; _i < 4; _i++) {
- encTable[_i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;
- decTable[_i][s] = tDec = tDec << 24 ^ tDec >>> 8;
- }
- } // Compactify. Considerable speedup on Firefox.
- for (var _i2 = 0; _i2 < 5; _i2++) {
- encTable[_i2] = encTable[_i2].slice(0);
- decTable[_i2] = decTable[_i2].slice(0);
- }
- }
- /**
- * Encryption and decryption core.
- * @param {Array} input Four words to be encrypted or decrypted.
- * @param dir The direction, 0 for encrypt and 1 for decrypt.
- * @return {Array} The four encrypted or decrypted words.
- * @private
- */
- }, {
- key: "_crypt",
- value: function _crypt(input, dir) {
- if (input.length !== 4) {
- throw new Error("invalid aes block size");
- }
- var key = this._key[dir];
- var nInnerRounds = key.length / 4 - 2;
- var out = [0, 0, 0, 0];
- var table = this._tables[dir]; // load up the tables
- var t0 = table[0];
- var t1 = table[1];
- var t2 = table[2];
- var t3 = table[3];
- var sbox = table[4]; // state variables a,b,c,d are loaded with pre-whitened data
- var a = input[0] ^ key[0];
- var b = input[dir ? 3 : 1] ^ key[1];
- var c = input[2] ^ key[2];
- var d = input[dir ? 1 : 3] ^ key[3];
- var kIndex = 4;
- var a2, b2, c2; // Inner rounds. Cribbed from OpenSSL.
- for (var i = 0; i < nInnerRounds; i++) {
- a2 = t0[a >>> 24] ^ t1[b >> 16 & 255] ^ t2[c >> 8 & 255] ^ t3[d & 255] ^ key[kIndex];
- b2 = t0[b >>> 24] ^ t1[c >> 16 & 255] ^ t2[d >> 8 & 255] ^ t3[a & 255] ^ key[kIndex + 1];
- c2 = t0[c >>> 24] ^ t1[d >> 16 & 255] ^ t2[a >> 8 & 255] ^ t3[b & 255] ^ key[kIndex + 2];
- d = t0[d >>> 24] ^ t1[a >> 16 & 255] ^ t2[b >> 8 & 255] ^ t3[c & 255] ^ key[kIndex + 3];
- kIndex += 4;
- a = a2;
- b = b2;
- c = c2;
- } // Last round.
- for (var _i3 = 0; _i3 < 4; _i3++) {
- out[dir ? 3 & -_i3 : _i3] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];
- a2 = a;
- a = b;
- b = c;
- c = d;
- d = a2;
- }
- return out;
- }
- }]);
- return _class;
- }();
- /**
- * Random values
- * @namespace
- */
- var random = {
- /**
- * Generate random words with pure js, cryptographically not as strong & safe as native implementation.
- * @param {TypedArray} typedArray The array to fill.
- * @return {TypedArray} The random values.
- */
- getRandomValues: function getRandomValues(typedArray) {
- var words = new Uint32Array(typedArray.buffer);
- var r = function r(m_w) {
- var m_z = 0x3ade68b1;
- var mask = 0xffffffff;
- return function () {
- m_z = 0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10) & mask;
- m_w = 0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10) & mask;
- var result = ((m_z << 0x10) + m_w & mask) / 0x100000000 + .5;
- return result * (Math.random() > .5 ? 1 : -1);
- };
- };
- for (var i = 0, rcache; i < typedArray.length; i += 4) {
- var _r = r((rcache || Math.random()) * 0x100000000);
- rcache = _r() * 0x3ade67b7;
- words[i / 4] = _r() * 0x100000000 | 0;
- }
- return typedArray;
- }
- };
- /** @fileOverview CTR mode implementation.
- *
- * Special thanks to Roy Nicholson for pointing out a bug in our
- * implementation.
- *
- * @author Emily Stark
- * @author Mike Hamburg
- * @author Dan Boneh
- */
- /** Brian Gladman's CTR Mode.
- * @constructor
- * @param {Object} _prf The aes instance to generate key.
- * @param {bitArray} _iv The iv for ctr mode, it must be 128 bits.
- */
- var mode = {};
- /**
- * Brian Gladman's CTR Mode.
- * @namespace
- */
- mode.ctrGladman = /*#__PURE__*/function () {
- function _class2(prf, iv) {
- _classCallCheck(this, _class2);
- this._prf = prf;
- this._initIv = iv;
- this._iv = iv;
- }
- _createClass(_class2, [{
- key: "reset",
- value: function reset() {
- this._iv = this._initIv;
- }
- /** Input some data to calculate.
- * @param {bitArray} data the data to process, it must be intergral multiple of 128 bits unless it's the last.
- */
- }, {
- key: "update",
- value: function update(data) {
- return this.calculate(this._prf, data, this._iv);
- }
- }, {
- key: "incWord",
- value: function incWord(word) {
- if ((word >> 24 & 0xff) === 0xff) {
- //overflow
- var b1 = word >> 16 & 0xff;
- var b2 = word >> 8 & 0xff;
- var b3 = word & 0xff;
- if (b1 === 0xff) {
- // overflow b1
- b1 = 0;
- if (b2 === 0xff) {
- b2 = 0;
- if (b3 === 0xff) {
- b3 = 0;
- } else {
- ++b3;
- }
- } else {
- ++b2;
- }
- } else {
- ++b1;
- }
- word = 0;
- word += b1 << 16;
- word += b2 << 8;
- word += b3;
- } else {
- word += 0x01 << 24;
- }
- return word;
- }
- }, {
- key: "incCounter",
- value: function incCounter(counter) {
- if ((counter[0] = this.incWord(counter[0])) === 0) {
- // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8
- counter[1] = this.incWord(counter[1]);
- }
- }
- }, {
- key: "calculate",
- value: function calculate(prf, data, iv) {
- var l;
- if (!(l = data.length)) {
- return [];
- }
- var bl = bitArray.bitLength(data);
- for (var i = 0; i < l; i += 4) {
- this.incCounter(iv);
- var e = prf.encrypt(iv);
- data[i] ^= e[0];
- data[i + 1] ^= e[1];
- data[i + 2] ^= e[2];
- data[i + 3] ^= e[3];
- }
- return bitArray.clamp(data, bl);
- }
- }]);
- return _class2;
- }();
- var misc = {
- importKey: function importKey(password) {
- return new misc.hmacSha1(codec.bytes.toBits(password));
- },
- pbkdf2: function pbkdf2(prf, salt, count, length) {
- count = count || 10000;
- if (length < 0 || count < 0) {
- throw new Error("invalid params to pbkdf2");
- }
- var byteLength = (length >> 5) + 1 << 2;
- var u, ui, i, j, k;
- var arrayBuffer = new ArrayBuffer(byteLength);
- var out = new DataView(arrayBuffer);
- var outLength = 0;
- var b = bitArray;
- salt = codec.bytes.toBits(salt);
- for (k = 1; outLength < (byteLength || 1); k++) {
- u = ui = prf.encrypt(b.concat(salt, [k]));
- for (i = 1; i < count; i++) {
- ui = prf.encrypt(ui);
- for (j = 0; j < ui.length; j++) {
- u[j] ^= ui[j];
- }
- }
- for (i = 0; outLength < (byteLength || 1) && i < u.length; i++) {
- out.setInt32(outLength, u[i]);
- outLength += 4;
- }
- }
- return arrayBuffer.slice(0, length / 8);
- }
- };
- /** @fileOverview HMAC implementation.
- *
- * @author Emily Stark
- * @author Mike Hamburg
- * @author Dan Boneh
- */
- /** HMAC with the specified hash function.
- * @constructor
- * @param {bitArray} key the key for HMAC.
- * @param {Object} [Hash=hash.sha1] The hash function to use.
- */
- misc.hmacSha1 = /*#__PURE__*/function () {
- function _class3(key) {
- _classCallCheck(this, _class3);
- var hmac = this;
- var Hash = hmac._hash = hash.sha1;
- var exKey = [[], []];
- var bs = Hash.prototype.blockSize / 32;
- hmac._baseHash = [new Hash(), new Hash()];
- if (key.length > bs) {
- key = Hash.hash(key);
- }
- for (var i = 0; i < bs; i++) {
- exKey[0][i] = key[i] ^ 0x36363636;
- exKey[1][i] = key[i] ^ 0x5C5C5C5C;
- }
- hmac._baseHash[0].update(exKey[0]);
- hmac._baseHash[1].update(exKey[1]);
- hmac._resultHash = new Hash(hmac._baseHash[0]);
- }
- _createClass(_class3, [{
- key: "reset",
- value: function reset() {
- var hmac = this;
- hmac._resultHash = new hmac._hash(hmac._baseHash[0]);
- hmac._updated = false;
- }
- }, {
- key: "update",
- value: function update(data) {
- var hmac = this;
- hmac._updated = true;
- hmac._resultHash.update(data);
- }
- }, {
- key: "digest",
- value: function digest() {
- var hmac = this;
- var w = hmac._resultHash.finalize();
- var result = new hmac._hash(hmac._baseHash[1]).update(w).finalize();
- hmac.reset();
- return result;
- }
- }, {
- key: "encrypt",
- value: function encrypt(data) {
- if (!this._updated) {
- this.update(data);
- return this.digest(data);
- } else {
- throw new Error("encrypt on already updated hmac called!");
- }
- }
- }]);
- return _class3;
- }();
- var deriveBits = _async(function (algorithm, baseKey, length) {
- if (CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof crypto.subtle.deriveBits == "function") {
- return crypto.subtle.deriveBits(algorithm, baseKey, length);
- } else {
- return misc.pbkdf2(baseKey, algorithm.salt, DERIVED_BITS_ALGORITHM.iterations, length);
- }
- });
- var createKeys$1 = _async(function (target, password, salt) {
- var encodedPassword = encodeText(password);
- return _await(importKey(RAW_FORMAT, encodedPassword, BASE_KEY_ALGORITHM, false, DERIVED_BITS_USAGE), function (basekey) {
- return _await(deriveBits(Object.assign({
- salt: salt
- }, DERIVED_BITS_ALGORITHM), basekey, 8 * (KEY_LENGTH[target.strength] * 2 + 2)), function (derivedBits) {
- var compositeKey = new Uint8Array(derivedBits);
- target.keys = {
- key: codecBytes.toBits(subarray(compositeKey, 0, KEY_LENGTH[target.strength])),
- authentication: codecBytes.toBits(subarray(compositeKey, KEY_LENGTH[target.strength], KEY_LENGTH[target.strength] * 2)),
- passwordVerification: subarray(compositeKey, KEY_LENGTH[target.strength] * 2)
- };
- });
- });
- });
- var createEncryptionKeys = _async(function (encrypt, password) {
- var salt = getRandomValues(new Uint8Array(SALT_LENGTH[encrypt.strength]));
- return _await(createKeys$1(encrypt, password, salt), function () {
- return concat$1(salt, encrypt.keys.passwordVerification);
- });
- });
- var createDecryptionKeys = _async(function (decrypt, preambleArray, password) {
- return _await(createKeys$1(decrypt, password, subarray(preambleArray, 0, SALT_LENGTH[decrypt.strength])), function () {
- var passwordVerification = subarray(preambleArray, SALT_LENGTH[decrypt.strength]);
- var passwordVerificationKey = decrypt.keys.passwordVerification;
- if (passwordVerificationKey[0] != passwordVerification[0] || passwordVerificationKey[1] != passwordVerification[1]) {
- throw new Error(ERR_INVALID_PASSWORD);
- }
- });
- });
- var ERR_INVALID_PASSWORD = "Invalid pasword";
- var BLOCK_LENGTH = 16;
- var RAW_FORMAT = "raw";
- var PBKDF2_ALGORITHM = {
- name: "PBKDF2"
- };
- var HASH_ALGORITHM = {
- name: "HMAC"
- };
- var HASH_FUNCTION = "SHA-1";
- var BASE_KEY_ALGORITHM = Object.assign({
- hash: HASH_ALGORITHM
- }, PBKDF2_ALGORITHM);
- var DERIVED_BITS_ALGORITHM = Object.assign({
- iterations: 1000,
- hash: {
- name: HASH_FUNCTION
- }
- }, PBKDF2_ALGORITHM);
- var DERIVED_BITS_USAGE = ["deriveBits"];
- var SALT_LENGTH = [8, 12, 16];
- var KEY_LENGTH = [16, 24, 32];
- var SIGNATURE_LENGTH = 10;
- var COUNTER_DEFAULT_VALUE = [0, 0, 0, 0];
- var CRYPTO_API_SUPPORTED = typeof crypto != "undefined";
- var SUBTLE_API_SUPPORTED = CRYPTO_API_SUPPORTED && typeof crypto.subtle != "undefined";
- var codecBytes = codec.bytes;
- var Aes = cipher.aes;
- var CtrGladman = mode.ctrGladman;
- var HmacSha1 = misc.hmacSha1;
- var AESDecrypt = /*#__PURE__*/function () {
- function AESDecrypt(password, signed, strength) {
- _classCallCheck(this, AESDecrypt);
- Object.assign(this, {
- password: password,
- signed: signed,
- strength: strength - 1,
- pendingInput: new Uint8Array(0)
- });
- }
- _createClass(AESDecrypt, [{
- key: "append",
- value: function append(input) {
- try {
- var _this2 = this;
- var aesCrypto = _this2;
- return _await(_invoke(function () {
- if (aesCrypto.password) {
- var preamble = subarray(input, 0, SALT_LENGTH[aesCrypto.strength] + 2);
- return _await(createDecryptionKeys(aesCrypto, preamble, aesCrypto.password), function () {
- aesCrypto.password = null;
- aesCrypto.aesCtrGladman = new CtrGladman(new Aes(aesCrypto.keys.key), Array.from(COUNTER_DEFAULT_VALUE));
- aesCrypto.hmac = new HmacSha1(aesCrypto.keys.authentication);
- input = subarray(input, SALT_LENGTH[aesCrypto.strength] + 2);
- });
- }
- }, function () {
- var output = new Uint8Array(input.length - SIGNATURE_LENGTH - (input.length - SIGNATURE_LENGTH) % BLOCK_LENGTH);
- return _append(aesCrypto, input, output, 0, SIGNATURE_LENGTH, true);
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "flush",
- value: function flush() {
- var aesCrypto = this;
- var pendingInput = aesCrypto.pendingInput;
- var chunkToDecrypt = subarray(pendingInput, 0, pendingInput.length - SIGNATURE_LENGTH);
- var originalSignature = subarray(pendingInput, pendingInput.length - SIGNATURE_LENGTH);
- var decryptedChunkArray = new Uint8Array(0);
- if (chunkToDecrypt.length) {
- var encryptedChunk = codecBytes.toBits(chunkToDecrypt);
- aesCrypto.hmac.update(encryptedChunk);
- var decryptedChunk = aesCrypto.aesCtrGladman.update(encryptedChunk);
- decryptedChunkArray = codecBytes.fromBits(decryptedChunk);
- }
- var valid = true;
- if (aesCrypto.signed) {
- var signature = subarray(codecBytes.fromBits(aesCrypto.hmac.digest()), 0, SIGNATURE_LENGTH);
- for (var indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
- if (signature[indexSignature] != originalSignature[indexSignature]) {
- valid = false;
- }
- }
- }
- return {
- valid: valid,
- data: decryptedChunkArray
- };
- }
- }]);
- return AESDecrypt;
- }();
- var AESEncrypt = /*#__PURE__*/function () {
- function AESEncrypt(password, strength) {
- _classCallCheck(this, AESEncrypt);
- Object.assign(this, {
- password: password,
- strength: strength - 1,
- pendingInput: new Uint8Array(0)
- });
- }
- _createClass(AESEncrypt, [{
- key: "append",
- value: function append(input) {
- try {
- var _this4 = this;
- var aesCrypto = _this4;
- var preamble = new Uint8Array(0);
- return _await(_invoke(function () {
- if (aesCrypto.password) {
- return _await(createEncryptionKeys(aesCrypto, aesCrypto.password), function (_createEncryptionKeys) {
- preamble = _createEncryptionKeys;
- aesCrypto.password = null;
- aesCrypto.aesCtrGladman = new CtrGladman(new Aes(aesCrypto.keys.key), Array.from(COUNTER_DEFAULT_VALUE));
- aesCrypto.hmac = new HmacSha1(aesCrypto.keys.authentication);
- });
- }
- }, function () {
- var output = new Uint8Array(preamble.length + input.length - input.length % BLOCK_LENGTH);
- output.set(preamble, 0);
- return _append(aesCrypto, input, output, preamble.length, 0);
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "flush",
- value: function flush() {
- var aesCrypto = this;
- var encryptedChunkArray = new Uint8Array(0);
- if (aesCrypto.pendingInput.length) {
- var encryptedChunk = aesCrypto.aesCtrGladman.update(codecBytes.toBits(aesCrypto.pendingInput));
- aesCrypto.hmac.update(encryptedChunk);
- encryptedChunkArray = codecBytes.fromBits(encryptedChunk);
- }
- var signature = subarray(codecBytes.fromBits(aesCrypto.hmac.digest()), 0, SIGNATURE_LENGTH);
- return {
- data: concat$1(encryptedChunkArray, signature),
- signature: signature
- };
- }
- }]);
- return AESEncrypt;
- }();
- function _append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {
- var inputLength = input.length - paddingEnd;
- if (aesCrypto.pendingInput.length) {
- input = concat$1(aesCrypto.pendingInput, input);
- output = expand(output, inputLength - inputLength % BLOCK_LENGTH);
- }
- var offset;
- for (offset = 0; offset <= inputLength - BLOCK_LENGTH; offset += BLOCK_LENGTH) {
- var inputChunk = codecBytes.toBits(subarray(input, offset, offset + BLOCK_LENGTH));
- if (verifySignature) {
- aesCrypto.hmac.update(inputChunk);
- }
- var outputChunk = aesCrypto.aesCtrGladman.update(inputChunk);
- if (!verifySignature) {
- aesCrypto.hmac.update(outputChunk);
- }
- output.set(codecBytes.fromBits(outputChunk), offset + paddingStart);
- }
- aesCrypto.pendingInput = subarray(input, offset);
- return output;
- }
- function getRandomValues(array) {
- if (CRYPTO_API_SUPPORTED && typeof crypto.getRandomValues == "function") {
- return crypto.getRandomValues(array);
- } else {
- return random.getRandomValues(array);
- }
- }
- function importKey(format, password, algorithm, extractable, keyUsages) {
- if (CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof crypto.subtle.importKey == "function") {
- return crypto.subtle.importKey(format, password, algorithm, extractable, keyUsages);
- } else {
- return misc.importKey(password);
- }
- }
- function concat$1(leftArray, rightArray) {
- var array = leftArray;
- if (leftArray.length + rightArray.length) {
- array = new Uint8Array(leftArray.length + rightArray.length);
- array.set(leftArray, 0);
- array.set(rightArray, leftArray.length);
- }
- return array;
- }
- function expand(inputArray, length) {
- if (length && length > inputArray.length) {
- var array = inputArray;
- inputArray = new Uint8Array(length);
- inputArray.set(array, 0);
- }
- return inputArray;
- }
- function subarray(array, begin, end) {
- return array.subarray(begin, end);
- }
- var $$d = _export;
- var fails$e = fails$H;
- // eslint-disable-next-line es-x/no-math-imul -- required for testing
- var $imul = Math.imul;
- var FORCED$1 = fails$e(function () {
- return $imul(0xFFFFFFFF, 5) != -5 || $imul.length != 2;
- });
- // `Math.imul` method
- // https://tc39.es/ecma262/#sec-math.imul
- // some WebKit versions fails with big numbers, some has wrong arity
- $$d({ target: 'Math', stat: true, forced: FORCED$1 }, {
- imul: function imul(x, y) {
- var UINT16 = 0xFFFF;
- var xn = +x;
- var yn = +y;
- var xl = UINT16 & xn;
- var yl = UINT16 & yn;
- return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
- }
- });
- var HEADER_LENGTH = 12;
- var ZipCryptoDecrypt = /*#__PURE__*/function () {
- function ZipCryptoDecrypt(password, passwordVerification) {
- _classCallCheck(this, ZipCryptoDecrypt);
- var zipCrypto = this;
- Object.assign(zipCrypto, {
- password: password,
- passwordVerification: passwordVerification
- });
- createKeys(zipCrypto, password);
- }
- _createClass(ZipCryptoDecrypt, [{
- key: "append",
- value: function append(input) {
- var zipCrypto = this;
- if (zipCrypto.password) {
- var decryptedHeader = decrypt(zipCrypto, input.subarray(0, HEADER_LENGTH));
- zipCrypto.password = null;
- if (decryptedHeader[HEADER_LENGTH - 1] != zipCrypto.passwordVerification) {
- throw new Error(ERR_INVALID_PASSWORD);
- }
- input = input.subarray(HEADER_LENGTH);
- }
- return decrypt(zipCrypto, input);
- }
- }, {
- key: "flush",
- value: function flush() {
- return {
- valid: true,
- data: new Uint8Array(0)
- };
- }
- }]);
- return ZipCryptoDecrypt;
- }();
- var ZipCryptoEncrypt = /*#__PURE__*/function () {
- function ZipCryptoEncrypt(password, passwordVerification) {
- _classCallCheck(this, ZipCryptoEncrypt);
- var zipCrypto = this;
- Object.assign(zipCrypto, {
- password: password,
- passwordVerification: passwordVerification
- });
- createKeys(zipCrypto, password);
- }
- _createClass(ZipCryptoEncrypt, [{
- key: "append",
- value: function append(input) {
- var zipCrypto = this;
- var output;
- var offset;
- if (zipCrypto.password) {
- zipCrypto.password = null;
- var header = crypto.getRandomValues(new Uint8Array(HEADER_LENGTH));
- header[HEADER_LENGTH - 1] = zipCrypto.passwordVerification;
- output = new Uint8Array(input.length + header.length);
- output.set(encrypt(zipCrypto, header), 0);
- offset = HEADER_LENGTH;
- } else {
- output = new Uint8Array(input.length);
- offset = 0;
- }
- output.set(encrypt(zipCrypto, input), offset);
- return output;
- }
- }, {
- key: "flush",
- value: function flush() {
- return {
- data: new Uint8Array(0)
- };
- }
- }]);
- return ZipCryptoEncrypt;
- }();
- function decrypt(target, input) {
- var output = new Uint8Array(input.length);
- for (var index = 0; index < input.length; index++) {
- output[index] = getByte(target) ^ input[index];
- updateKeys(target, output[index]);
- }
- return output;
- }
- function encrypt(target, input) {
- var output = new Uint8Array(input.length);
- for (var index = 0; index < input.length; index++) {
- output[index] = getByte(target) ^ input[index];
- updateKeys(target, input[index]);
- }
- return output;
- }
- function createKeys(target, password) {
- target.keys = [0x12345678, 0x23456789, 0x34567890];
- target.crcKey0 = new Crc32(target.keys[0]);
- target.crcKey2 = new Crc32(target.keys[2]);
- for (var index = 0; index < password.length; index++) {
- updateKeys(target, password.charCodeAt(index));
- }
- }
- function updateKeys(target, byte) {
- target.crcKey0.append([byte]);
- target.keys[0] = ~target.crcKey0.get();
- target.keys[1] = getInt32(target.keys[1] + getInt8(target.keys[0]));
- target.keys[1] = getInt32(Math.imul(target.keys[1], 134775813) + 1);
- target.crcKey2.append([target.keys[1] >>> 24]);
- target.keys[2] = ~target.crcKey2.get();
- }
- function getByte(target) {
- var temp = target.keys[2] | 2;
- return getInt8(Math.imul(temp, temp ^ 1) >>> 8);
- }
- function getInt8(number) {
- return number & 0xFF;
- }
- function getInt32(number) {
- return number & 0xFFFFFFFF;
- }
- var CODEC_DEFLATE = "deflate";
- var CODEC_INFLATE = "inflate";
- var ERR_INVALID_SIGNATURE = "Invalid signature";
- var Inflate = /*#__PURE__*/function () {
- function Inflate(codecConstructor, _ref, _ref2) {
- var signature = _ref.signature,
- password = _ref.password,
- signed = _ref.signed,
- compressed = _ref.compressed,
- zipCrypto = _ref.zipCrypto,
- passwordVerification = _ref.passwordVerification,
- encryptionStrength = _ref.encryptionStrength;
- var chunkSize = _ref2.chunkSize;
- _classCallCheck(this, Inflate);
- var encrypted = Boolean(password);
- Object.assign(this, {
- signature: signature,
- encrypted: encrypted,
- signed: signed,
- compressed: compressed,
- inflate: compressed && new codecConstructor({
- chunkSize: chunkSize
- }),
- crc32: signed && new Crc32(),
- zipCrypto: zipCrypto,
- decrypt: encrypted && zipCrypto ? new ZipCryptoDecrypt(password, passwordVerification) : new AESDecrypt(password, signed, encryptionStrength)
- });
- }
- _createClass(Inflate, [{
- key: "append",
- value: function append(data) {
- try {
- var _this2 = this;
- var codec = _this2;
- return _await(_invoke(function () {
- if (codec.encrypted && data.length) {
- return _await(codec.decrypt.append(data), function (_codec$decrypt$append) {
- data = _codec$decrypt$append;
- });
- }
- }, function () {
- return _invoke(function () {
- if (codec.compressed && data.length) {
- return _await(codec.inflate.append(data), function (_codec$inflate$append) {
- data = _codec$inflate$append;
- });
- }
- }, function () {
- if ((!codec.encrypted || codec.zipCrypto) && codec.signed && data.length) {
- codec.crc32.append(data);
- }
- return data;
- });
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "flush",
- value: function flush() {
- try {
- var _this4 = this;
- var codec = _this4;
- var signature;
- var data = new Uint8Array(0);
- if (codec.encrypted) {
- var result = codec.decrypt.flush();
- if (!result.valid) {
- throw new Error(ERR_INVALID_SIGNATURE);
- }
- data = result.data;
- }
- if ((!codec.encrypted || codec.zipCrypto) && codec.signed) {
- var dataViewSignature = new DataView(new Uint8Array(4).buffer);
- signature = codec.crc32.get();
- dataViewSignature.setUint32(0, signature);
- if (codec.signature != dataViewSignature.getUint32(0, false)) {
- throw new Error(ERR_INVALID_SIGNATURE);
- }
- }
- return _await(_invoke(function () {
- if (codec.compressed) {
- return _await(codec.inflate.append(data), function (_codec$inflate$append2) {
- data = _codec$inflate$append2 || new Uint8Array(0);
- return _awaitIgnored(codec.inflate.flush());
- });
- }
- }, function () {
- return {
- data: data,
- signature: signature
- };
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }]);
- return Inflate;
- }();
- var Deflate = /*#__PURE__*/function () {
- function Deflate(codecConstructor, _ref3, _ref4) {
- var encrypted = _ref3.encrypted,
- signed = _ref3.signed,
- compressed = _ref3.compressed,
- level = _ref3.level,
- zipCrypto = _ref3.zipCrypto,
- password = _ref3.password,
- passwordVerification = _ref3.passwordVerification,
- encryptionStrength = _ref3.encryptionStrength;
- var chunkSize = _ref4.chunkSize;
- _classCallCheck(this, Deflate);
- Object.assign(this, {
- encrypted: encrypted,
- signed: signed,
- compressed: compressed,
- deflate: compressed && new codecConstructor({
- level: level || 5,
- chunkSize: chunkSize
- }),
- crc32: signed && new Crc32(),
- zipCrypto: zipCrypto,
- encrypt: encrypted && zipCrypto ? new ZipCryptoEncrypt(password, passwordVerification) : new AESEncrypt(password, encryptionStrength)
- });
- }
- _createClass(Deflate, [{
- key: "append",
- value: function append(inputData) {
- try {
- var _this6 = this;
- var codec = _this6;
- var data = inputData;
- return _await(_invoke(function () {
- if (codec.compressed && inputData.length) {
- return _await(codec.deflate.append(inputData), function (_codec$deflate$append) {
- data = _codec$deflate$append;
- });
- }
- }, function () {
- return _invoke(function () {
- if (codec.encrypted && data.length) {
- return _await(codec.encrypt.append(data), function (_codec$encrypt$append) {
- data = _codec$encrypt$append;
- });
- }
- }, function () {
- if ((!codec.encrypted || codec.zipCrypto) && codec.signed && inputData.length) {
- codec.crc32.append(inputData);
- }
- return data;
- });
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "flush",
- value: function flush() {
- try {
- var _this8 = this;
- var codec = _this8;
- var signature;
- var data = new Uint8Array(0);
- return _await(_invoke(function () {
- if (codec.compressed) {
- return _await(codec.deflate.flush(), function (_codec$deflate$flush) {
- data = _codec$deflate$flush || new Uint8Array(0);
- });
- }
- }, function () {
- return _invoke(function () {
- if (codec.encrypted) {
- return _await(codec.encrypt.append(data), function (_codec$encrypt$append2) {
- data = _codec$encrypt$append2;
- var result = codec.encrypt.flush();
- signature = result.signature;
- var newData = new Uint8Array(data.length + result.data.length);
- newData.set(data, 0);
- newData.set(result.data, data.length);
- data = newData;
- });
- }
- }, function () {
- if ((!codec.encrypted || codec.zipCrypto) && codec.signed) {
- signature = codec.crc32.get();
- }
- return {
- data: data,
- signature: signature
- };
- });
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }]);
- return Deflate;
- }();
- function createCodec$1(codecConstructor, options, config) {
- if (options.codecType.startsWith(CODEC_DEFLATE)) {
- return new Deflate(codecConstructor, options, config);
- } else if (options.codecType.startsWith(CODEC_INFLATE)) {
- return new Inflate(codecConstructor, options, config);
- }
- }
- var MESSAGE_INIT = "init";
- var MESSAGE_APPEND = "append";
- var MESSAGE_FLUSH = "flush";
- var MESSAGE_EVENT_TYPE = "message";
- var classicWorkersSupported = true;
- var getWorker = (function (workerData, codecConstructor, options, config, _onTaskFinished, webWorker, scripts) {
- Object.assign(workerData, {
- busy: true,
- codecConstructor: codecConstructor,
- options: Object.assign({}, options),
- scripts: scripts,
- terminate: function terminate() {
- if (workerData.worker && !workerData.busy) {
- workerData.worker.terminate();
- workerData.interface = null;
- }
- },
- onTaskFinished: function onTaskFinished() {
- workerData.busy = false;
- _onTaskFinished(workerData);
- }
- });
- return webWorker ? createWebWorkerInterface(workerData, config) : createWorkerInterface(workerData, config);
- });
- function createWorkerInterface(workerData, config) {
- var interfaceCodec = createCodec$1(workerData.codecConstructor, workerData.options, config);
- return {
- append: function append(data) {
- try {
- return _await(_catch(function () {
- return _await(interfaceCodec.append(data));
- }, function (error) {
- workerData.onTaskFinished();
- throw error;
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- },
- flush: function flush() {
- try {
- return _await(_finallyRethrows(function () {
- return _await(interfaceCodec.flush());
- }, function (_wasThrown, _result) {
- workerData.onTaskFinished();
- return _rethrow(_wasThrown, _result);
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- },
- abort: function abort() {
- workerData.onTaskFinished();
- }
- };
- }
- function createWebWorkerInterface(workerData, config) {
- var initAndSendMessage = _async(function (message) {
- return _invoke(function () {
- if (!messageTask) {
- var options = workerData.options;
- var scripts = workerData.scripts.slice(1);
- return _awaitIgnored(sendMessage({
- scripts: scripts,
- type: MESSAGE_INIT,
- options: options,
- config: {
- chunkSize: config.chunkSize
- }
- }));
- }
- }, function () {
- return sendMessage(message);
- });
- });
- var messageTask;
- var workerOptions = {
- type: "module"
- };
- if (!workerData.interface) {
- if (!classicWorkersSupported) {
- workerData.worker = getWorker(workerOptions, config.baseURL);
- } else {
- try {
- workerData.worker = getWorker({}, config.baseURL);
- } catch (_error) {
- classicWorkersSupported = false;
- workerData.worker = getWorker(workerOptions, config.baseURL);
- }
- }
- workerData.worker.addEventListener(MESSAGE_EVENT_TYPE, onMessage, false);
- workerData.interface = {
- append: function append(data) {
- return initAndSendMessage({
- type: MESSAGE_APPEND,
- data: data
- });
- },
- flush: function flush() {
- return initAndSendMessage({
- type: MESSAGE_FLUSH
- });
- },
- abort: function abort() {
- workerData.onTaskFinished();
- }
- };
- }
- return workerData.interface;
- function getWorker(options, baseURL) {
- var url, scriptUrl;
- url = workerData.scripts[0];
- if (typeof url == "function") {
- url = url();
- }
- try {
- scriptUrl = new URL(url, baseURL);
- } catch (_error) {
- scriptUrl = url;
- }
- return new Worker(scriptUrl, options);
- }
- function sendMessage(message) {
- var worker = workerData.worker;
- var result = new Promise(function (resolve, reject) {
- return messageTask = {
- resolve: resolve,
- reject: reject
- };
- });
- try {
- if (message.data) {
- try {
- message.data = message.data.buffer;
- worker.postMessage(message, [message.data]);
- } catch (_error) {
- worker.postMessage(message);
- }
- } else {
- worker.postMessage(message);
- }
- } catch (error) {
- messageTask.reject(error);
- messageTask = null;
- workerData.onTaskFinished();
- }
- return result;
- }
- function onMessage(event) {
- var message = event.data;
- if (messageTask) {
- var reponseError = message.error;
- var type = message.type;
- if (reponseError) {
- var error = new Error(reponseError.message);
- error.stack = reponseError.stack;
- messageTask.reject(error);
- messageTask = null;
- workerData.onTaskFinished();
- } else if (type == MESSAGE_INIT || type == MESSAGE_FLUSH || type == MESSAGE_APPEND) {
- var data = message.data;
- if (type == MESSAGE_FLUSH) {
- messageTask.resolve({
- data: new Uint8Array(data),
- signature: message.signature
- });
- messageTask = null;
- workerData.onTaskFinished();
- } else {
- messageTask.resolve(data && new Uint8Array(data));
- }
- }
- }
- }
- }
- var pool = [];
- var pendingRequests = [];
- function createCodec(codecConstructor, options, config) {
- var streamCopy = !options.compressed && !options.signed && !options.encrypted;
- var webWorker = !streamCopy && (options.useWebWorkers || options.useWebWorkers === undefined && config.useWebWorkers);
- var scripts = webWorker && config.workerScripts ? config.workerScripts[options.codecType] : [];
- if (pool.length < config.maxWorkers) {
- var workerData = {};
- pool.push(workerData);
- return getWorker(workerData, codecConstructor, options, config, onTaskFinished, webWorker, scripts);
- } else {
- var _workerData = pool.find(function (workerData) {
- return !workerData.busy;
- });
- if (_workerData) {
- clearTerminateTimeout(_workerData);
- return getWorker(_workerData, codecConstructor, options, config, onTaskFinished, webWorker, scripts);
- } else {
- return new Promise(function (resolve) {
- return pendingRequests.push({
- resolve: resolve,
- codecConstructor: codecConstructor,
- options: options,
- webWorker: webWorker,
- scripts: scripts
- });
- });
- }
- }
- function onTaskFinished(workerData) {
- if (pendingRequests.length) {
- var _pendingRequests$spli = pendingRequests.splice(0, 1),
- _pendingRequests$spli2 = _slicedToArray(_pendingRequests$spli, 1),
- _pendingRequests$spli3 = _pendingRequests$spli2[0],
- resolve = _pendingRequests$spli3.resolve,
- _codecConstructor = _pendingRequests$spli3.codecConstructor,
- _options = _pendingRequests$spli3.options,
- _webWorker = _pendingRequests$spli3.webWorker,
- _scripts = _pendingRequests$spli3.scripts;
- resolve(getWorker(workerData, _codecConstructor, _options, config, onTaskFinished, _webWorker, _scripts));
- } else if (workerData.worker) {
- clearTerminateTimeout(workerData);
- if (Number.isFinite(config.terminateWorkerTimeout) && config.terminateWorkerTimeout >= 0) {
- workerData.terminateTimeout = setTimeout(function () {
- pool = pool.filter(function (data) {
- return data != workerData;
- });
- workerData.terminate();
- }, config.terminateWorkerTimeout);
- }
- } else {
- pool = pool.filter(function (data) {
- return data != workerData;
- });
- }
- }
- }
- function clearTerminateTimeout(workerData) {
- if (workerData.terminateTimeout) {
- clearTimeout(workerData.terminateTimeout);
- workerData.terminateTimeout = null;
- }
- }
- function terminateWorkers() {
- pool.forEach(function (workerData) {
- clearTerminateTimeout(workerData);
- workerData.terminate();
- });
- }
- var writeData = _async(function (writer, data) {
- return _invoke(function () {
- if (data.length) {
- return _awaitIgnored(writer.writeUint8Array(data));
- }
- }, function () {
- return data.length;
- });
- });
- var processData = _async(function (codec, reader, writer, offset, inputLengthGetter, config, options) {
- var processChunk = _async(function () {
- var chunkOffset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
- var outputLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
- var signal = options.signal;
- var inputLength = inputLengthGetter();
- if (chunkOffset < inputLength) {
- testAborted(signal, codec);
- return _await(reader.readUint8Array(chunkOffset + offset, Math.min(chunkSize, inputLength - chunkOffset)), function (inputData) {
- var chunkLength = inputData.length;
- testAborted(signal, codec);
- return _await(codec.append(inputData), function (data) {
- testAborted(signal, codec);
- return _await(writeData(writer, data), function (_writeData) {
- outputLength += _writeData;
- if (options.onprogress) {
- try {
- options.onprogress(chunkOffset + chunkLength, inputLength);
- } catch (error) {// ignored
- }
- }
- return processChunk(chunkOffset + chunkSize, outputLength);
- });
- });
- });
- } else {
- return _await(codec.flush(), function (result) {
- return _await(writeData(writer, result.data), function (_writeData2) {
- outputLength += _writeData2;
- return {
- signature: result.signature,
- length: outputLength
- };
- });
- });
- }
- });
- var chunkSize = Math.max(config.chunkSize, MINIMUM_CHUNK_SIZE);
- return processChunk();
- });
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- var MINIMUM_CHUNK_SIZE = 64;
- var ERR_ABORT = "Abort error";
- function testAborted(signal, codec) {
- if (signal && signal.aborted) {
- codec.abort();
- throw new Error(ERR_ABORT);
- }
- }
- var global$7 = global$F;
- var path$1 = global$7;
- var wellKnownSymbolWrapped = {};
- var wellKnownSymbol$4 = wellKnownSymbol$t;
- wellKnownSymbolWrapped.f = wellKnownSymbol$4;
- var path = path$1;
- var hasOwn$5 = hasOwnProperty_1;
- var wrappedWellKnownSymbolModule$1 = wellKnownSymbolWrapped;
- var defineProperty$4 = objectDefineProperty.f;
- var defineWellKnownSymbol$2 = function (NAME) {
- var Symbol = path.Symbol || (path.Symbol = {});
- if (!hasOwn$5(Symbol, NAME)) defineProperty$4(Symbol, NAME, {
- value: wrappedWellKnownSymbolModule$1.f(NAME)
- });
- };
- var defineWellKnownSymbol$1 = defineWellKnownSymbol$2;
- // `Symbol.iterator` well-known symbol
- // https://tc39.es/ecma262/#sec-symbol.iterator
- defineWellKnownSymbol$1('iterator');
- var objectGetOwnPropertyNamesExternal = {};
- /* eslint-disable es-x/no-object-getownpropertynames -- safe */
- var classof$2 = classofRaw$1;
- var toIndexedObject$2 = toIndexedObject$b;
- var $getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
- var arraySlice$2 = arraySliceSimple;
- var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
- ? Object.getOwnPropertyNames(window) : [];
- var getWindowNames = function (it) {
- try {
- return $getOwnPropertyNames$1(it);
- } catch (error) {
- return arraySlice$2(windowNames);
- }
- };
- // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
- objectGetOwnPropertyNamesExternal.f = function getOwnPropertyNames(it) {
- return windowNames && classof$2(it) == 'Window'
- ? getWindowNames(it)
- : $getOwnPropertyNames$1(toIndexedObject$2(it));
- };
- var call$6 = functionCall;
- var getBuiltIn$2 = getBuiltIn$b;
- var wellKnownSymbol$3 = wellKnownSymbol$t;
- var defineBuiltIn$3 = defineBuiltIn$f;
- var symbolDefineToPrimitive = function () {
- var Symbol = getBuiltIn$2('Symbol');
- var SymbolPrototype = Symbol && Symbol.prototype;
- var valueOf = SymbolPrototype && SymbolPrototype.valueOf;
- var TO_PRIMITIVE = wellKnownSymbol$3('toPrimitive');
- if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {
- // `Symbol.prototype[@@toPrimitive]` method
- // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
- // eslint-disable-next-line no-unused-vars -- required for .length
- defineBuiltIn$3(SymbolPrototype, TO_PRIMITIVE, function (hint) {
- return call$6(valueOf, this);
- }, { arity: 1 });
- }
- };
- var $$c = _export;
- var global$6 = global$F;
- var call$5 = functionCall;
- var uncurryThis$c = functionUncurryThis;
- var DESCRIPTORS$4 = descriptors;
- var NATIVE_SYMBOL$4 = nativeSymbol;
- var fails$d = fails$H;
- var hasOwn$4 = hasOwnProperty_1;
- var isPrototypeOf$1 = objectIsPrototypeOf;
- var anObject$4 = anObject$i;
- var toIndexedObject$1 = toIndexedObject$b;
- var toPropertyKey = toPropertyKey$5;
- var $toString = toString$a;
- var createPropertyDescriptor = createPropertyDescriptor$7;
- var nativeObjectCreate = objectCreate;
- var objectKeys$1 = objectKeys$4;
- var getOwnPropertyNamesModule$1 = objectGetOwnPropertyNames;
- var getOwnPropertyNamesExternal = objectGetOwnPropertyNamesExternal;
- var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols;
- var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor;
- var definePropertyModule = objectDefineProperty;
- var definePropertiesModule = objectDefineProperties;
- var propertyIsEnumerableModule = objectPropertyIsEnumerable;
- var defineBuiltIn$2 = defineBuiltIn$f;
- var shared$3 = shared$7.exports;
- var sharedKey = sharedKey$4;
- var hiddenKeys$1 = hiddenKeys$6;
- var uid$1 = uid$5;
- var wellKnownSymbol$2 = wellKnownSymbol$t;
- var wrappedWellKnownSymbolModule = wellKnownSymbolWrapped;
- var defineWellKnownSymbol = defineWellKnownSymbol$2;
- var defineSymbolToPrimitive = symbolDefineToPrimitive;
- var setToStringTag$1 = setToStringTag$8;
- var InternalStateModule$1 = internalState;
- var $forEach = arrayIteration.forEach;
- var HIDDEN = sharedKey('hidden');
- var SYMBOL = 'Symbol';
- var PROTOTYPE = 'prototype';
- var setInternalState$1 = InternalStateModule$1.set;
- var getInternalState$1 = InternalStateModule$1.getterFor(SYMBOL);
- var ObjectPrototype = Object[PROTOTYPE];
- var $Symbol = global$6.Symbol;
- var SymbolPrototype$1 = $Symbol && $Symbol[PROTOTYPE];
- var TypeError$1 = global$6.TypeError;
- var QObject = global$6.QObject;
- var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
- var nativeDefineProperty = definePropertyModule.f;
- var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
- var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
- var push$3 = uncurryThis$c([].push);
- var AllSymbols = shared$3('symbols');
- var ObjectPrototypeSymbols = shared$3('op-symbols');
- var WellKnownSymbolsStore = shared$3('wks');
- // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
- var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
- // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
- var setSymbolDescriptor = DESCRIPTORS$4 && fails$d(function () {
- return nativeObjectCreate(nativeDefineProperty({}, 'a', {
- get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
- })).a != 7;
- }) ? function (O, P, Attributes) {
- var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
- if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
- nativeDefineProperty(O, P, Attributes);
- if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
- nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
- }
- } : nativeDefineProperty;
- var wrap = function (tag, description) {
- var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype$1);
- setInternalState$1(symbol, {
- type: SYMBOL,
- tag: tag,
- description: description
- });
- if (!DESCRIPTORS$4) symbol.description = description;
- return symbol;
- };
- var $defineProperty = function defineProperty(O, P, Attributes) {
- if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
- anObject$4(O);
- var key = toPropertyKey(P);
- anObject$4(Attributes);
- if (hasOwn$4(AllSymbols, key)) {
- if (!Attributes.enumerable) {
- if (!hasOwn$4(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
- O[HIDDEN][key] = true;
- } else {
- if (hasOwn$4(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
- Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
- } return setSymbolDescriptor(O, key, Attributes);
- } return nativeDefineProperty(O, key, Attributes);
- };
- var $defineProperties = function defineProperties(O, Properties) {
- anObject$4(O);
- var properties = toIndexedObject$1(Properties);
- var keys = objectKeys$1(properties).concat($getOwnPropertySymbols(properties));
- $forEach(keys, function (key) {
- if (!DESCRIPTORS$4 || call$5($propertyIsEnumerable$1, properties, key)) $defineProperty(O, key, properties[key]);
- });
- return O;
- };
- var $create = function create(O, Properties) {
- return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
- };
- var $propertyIsEnumerable$1 = function propertyIsEnumerable(V) {
- var P = toPropertyKey(V);
- var enumerable = call$5(nativePropertyIsEnumerable, this, P);
- if (this === ObjectPrototype && hasOwn$4(AllSymbols, P) && !hasOwn$4(ObjectPrototypeSymbols, P)) return false;
- return enumerable || !hasOwn$4(this, P) || !hasOwn$4(AllSymbols, P) || hasOwn$4(this, HIDDEN) && this[HIDDEN][P]
- ? enumerable : true;
- };
- var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
- var it = toIndexedObject$1(O);
- var key = toPropertyKey(P);
- if (it === ObjectPrototype && hasOwn$4(AllSymbols, key) && !hasOwn$4(ObjectPrototypeSymbols, key)) return;
- var descriptor = nativeGetOwnPropertyDescriptor(it, key);
- if (descriptor && hasOwn$4(AllSymbols, key) && !(hasOwn$4(it, HIDDEN) && it[HIDDEN][key])) {
- descriptor.enumerable = true;
- }
- return descriptor;
- };
- var $getOwnPropertyNames = function getOwnPropertyNames(O) {
- var names = nativeGetOwnPropertyNames(toIndexedObject$1(O));
- var result = [];
- $forEach(names, function (key) {
- if (!hasOwn$4(AllSymbols, key) && !hasOwn$4(hiddenKeys$1, key)) push$3(result, key);
- });
- return result;
- };
- var $getOwnPropertySymbols = function (O) {
- var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
- var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject$1(O));
- var result = [];
- $forEach(names, function (key) {
- if (hasOwn$4(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn$4(ObjectPrototype, key))) {
- push$3(result, AllSymbols[key]);
- }
- });
- return result;
- };
- // `Symbol` constructor
- // https://tc39.es/ecma262/#sec-symbol-constructor
- if (!NATIVE_SYMBOL$4) {
- $Symbol = function Symbol() {
- if (isPrototypeOf$1(SymbolPrototype$1, this)) throw TypeError$1('Symbol is not a constructor');
- var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
- var tag = uid$1(description);
- var setter = function (value) {
- if (this === ObjectPrototype) call$5(setter, ObjectPrototypeSymbols, value);
- if (hasOwn$4(this, HIDDEN) && hasOwn$4(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
- setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
- };
- if (DESCRIPTORS$4 && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
- return wrap(tag, description);
- };
- SymbolPrototype$1 = $Symbol[PROTOTYPE];
- defineBuiltIn$2(SymbolPrototype$1, 'toString', function toString() {
- return getInternalState$1(this).tag;
- });
- defineBuiltIn$2($Symbol, 'withoutSetter', function (description) {
- return wrap(uid$1(description), description);
- });
- propertyIsEnumerableModule.f = $propertyIsEnumerable$1;
- definePropertyModule.f = $defineProperty;
- definePropertiesModule.f = $defineProperties;
- getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
- getOwnPropertyNamesModule$1.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
- getOwnPropertySymbolsModule$1.f = $getOwnPropertySymbols;
- wrappedWellKnownSymbolModule.f = function (name) {
- return wrap(wellKnownSymbol$2(name), name);
- };
- if (DESCRIPTORS$4) {
- // https://github.com/tc39/proposal-Symbol-description
- nativeDefineProperty(SymbolPrototype$1, 'description', {
- configurable: true,
- get: function description() {
- return getInternalState$1(this).description;
- }
- });
- {
- defineBuiltIn$2(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable$1, { unsafe: true });
- }
- }
- }
- $$c({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL$4, sham: !NATIVE_SYMBOL$4 }, {
- Symbol: $Symbol
- });
- $forEach(objectKeys$1(WellKnownSymbolsStore), function (name) {
- defineWellKnownSymbol(name);
- });
- $$c({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL$4 }, {
- useSetter: function () { USE_SETTER = true; },
- useSimple: function () { USE_SETTER = false; }
- });
- $$c({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL$4, sham: !DESCRIPTORS$4 }, {
- // `Object.create` method
- // https://tc39.es/ecma262/#sec-object.create
- create: $create,
- // `Object.defineProperty` method
- // https://tc39.es/ecma262/#sec-object.defineproperty
- defineProperty: $defineProperty,
- // `Object.defineProperties` method
- // https://tc39.es/ecma262/#sec-object.defineproperties
- defineProperties: $defineProperties,
- // `Object.getOwnPropertyDescriptor` method
- // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
- getOwnPropertyDescriptor: $getOwnPropertyDescriptor
- });
- $$c({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL$4 }, {
- // `Object.getOwnPropertyNames` method
- // https://tc39.es/ecma262/#sec-object.getownpropertynames
- getOwnPropertyNames: $getOwnPropertyNames
- });
- // `Symbol.prototype[@@toPrimitive]` method
- // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
- defineSymbolToPrimitive();
- // `Symbol.prototype[@@toStringTag]` property
- // https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
- setToStringTag$1($Symbol, SYMBOL);
- hiddenKeys$1[HIDDEN] = true;
- var NATIVE_SYMBOL$3 = nativeSymbol;
- /* eslint-disable es-x/no-symbol -- safe */
- var nativeSymbolRegistry = NATIVE_SYMBOL$3 && !!Symbol['for'] && !!Symbol.keyFor;
- var $$b = _export;
- var getBuiltIn$1 = getBuiltIn$b;
- var hasOwn$3 = hasOwnProperty_1;
- var toString$5 = toString$a;
- var shared$2 = shared$7.exports;
- var NATIVE_SYMBOL_REGISTRY$1 = nativeSymbolRegistry;
- var StringToSymbolRegistry = shared$2('string-to-symbol-registry');
- var SymbolToStringRegistry$1 = shared$2('symbol-to-string-registry');
- // `Symbol.for` method
- // https://tc39.es/ecma262/#sec-symbol.for
- $$b({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY$1 }, {
- 'for': function (key) {
- var string = toString$5(key);
- if (hasOwn$3(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
- var symbol = getBuiltIn$1('Symbol')(string);
- StringToSymbolRegistry[string] = symbol;
- SymbolToStringRegistry$1[symbol] = string;
- return symbol;
- }
- });
- var $$a = _export;
- var hasOwn$2 = hasOwnProperty_1;
- var isSymbol$1 = isSymbol$6;
- var tryToString = tryToString$7;
- var shared$1 = shared$7.exports;
- var NATIVE_SYMBOL_REGISTRY = nativeSymbolRegistry;
- var SymbolToStringRegistry = shared$1('symbol-to-string-registry');
- // `Symbol.keyFor` method
- // https://tc39.es/ecma262/#sec-symbol.keyfor
- $$a({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
- keyFor: function keyFor(sym) {
- if (!isSymbol$1(sym)) throw TypeError(tryToString(sym) + ' is not a symbol');
- if (hasOwn$2(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
- }
- });
- var $$9 = _export;
- var getBuiltIn = getBuiltIn$b;
- var apply$2 = functionApply;
- var call$4 = functionCall;
- var uncurryThis$b = functionUncurryThis;
- var fails$c = fails$H;
- var isArray = isArray$4;
- var isCallable$4 = isCallable$s;
- var isObject$3 = isObject$k;
- var isSymbol = isSymbol$6;
- var arraySlice$1 = arraySlice$7;
- var NATIVE_SYMBOL$2 = nativeSymbol;
- var $stringify = getBuiltIn('JSON', 'stringify');
- var exec$2 = uncurryThis$b(/./.exec);
- var charAt$3 = uncurryThis$b(''.charAt);
- var charCodeAt = uncurryThis$b(''.charCodeAt);
- var replace$3 = uncurryThis$b(''.replace);
- var numberToString = uncurryThis$b(1.0.toString);
- var tester = /[\uD800-\uDFFF]/g;
- var low = /^[\uD800-\uDBFF]$/;
- var hi = /^[\uDC00-\uDFFF]$/;
- var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL$2 || fails$c(function () {
- var symbol = getBuiltIn('Symbol')();
- // MS Edge converts symbol values to JSON as {}
- return $stringify([symbol]) != '[null]'
- // WebKit converts symbol values to JSON as null
- || $stringify({ a: symbol }) != '{}'
- // V8 throws on boxed symbols
- || $stringify(Object(symbol)) != '{}';
- });
- // https://github.com/tc39/proposal-well-formed-stringify
- var ILL_FORMED_UNICODE = fails$c(function () {
- return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"'
- || $stringify('\uDEAD') !== '"\\udead"';
- });
- var stringifyWithSymbolsFix = function (it, replacer) {
- var args = arraySlice$1(arguments);
- var $replacer = replacer;
- if (!isObject$3(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
- if (!isArray(replacer)) replacer = function (key, value) {
- if (isCallable$4($replacer)) value = call$4($replacer, this, key, value);
- if (!isSymbol(value)) return value;
- };
- args[1] = replacer;
- return apply$2($stringify, null, args);
- };
- var fixIllFormed = function (match, offset, string) {
- var prev = charAt$3(string, offset - 1);
- var next = charAt$3(string, offset + 1);
- if ((exec$2(low, match) && !exec$2(hi, next)) || (exec$2(hi, match) && !exec$2(low, prev))) {
- return '\\u' + numberToString(charCodeAt(match, 0), 16);
- } return match;
- };
- if ($stringify) {
- // `JSON.stringify` method
- // https://tc39.es/ecma262/#sec-json.stringify
- $$9({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {
- // eslint-disable-next-line no-unused-vars -- required for `.length`
- stringify: function stringify(it, replacer, space) {
- var args = arraySlice$1(arguments);
- var result = apply$2(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);
- return ILL_FORMED_UNICODE && typeof result == 'string' ? replace$3(result, tester, fixIllFormed) : result;
- }
- });
- }
- var $$8 = _export;
- var NATIVE_SYMBOL$1 = nativeSymbol;
- var fails$b = fails$H;
- var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols;
- var toObject$1 = toObject$d;
- // V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
- // https://bugs.chromium.org/p/v8/issues/detail?id=3443
- var FORCED = !NATIVE_SYMBOL$1 || fails$b(function () { getOwnPropertySymbolsModule.f(1); });
- // `Object.getOwnPropertySymbols` method
- // https://tc39.es/ecma262/#sec-object.getownpropertysymbols
- $$8({ target: 'Object', stat: true, forced: FORCED }, {
- getOwnPropertySymbols: function getOwnPropertySymbols(it) {
- var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
- return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject$1(it)) : [];
- }
- });
- var $$7 = _export;
- var DESCRIPTORS$3 = descriptors;
- var global$5 = global$F;
- var uncurryThis$a = functionUncurryThis;
- var hasOwn$1 = hasOwnProperty_1;
- var isCallable$3 = isCallable$s;
- var isPrototypeOf = objectIsPrototypeOf;
- var toString$4 = toString$a;
- var defineProperty$3 = objectDefineProperty.f;
- var copyConstructorProperties = copyConstructorProperties$2;
- var NativeSymbol = global$5.Symbol;
- var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
- if (DESCRIPTORS$3 && isCallable$3(NativeSymbol) && (!('description' in SymbolPrototype) ||
- // Safari 12 bug
- NativeSymbol().description !== undefined
- )) {
- var EmptyStringDescriptionStore = {};
- // wrap Symbol constructor for correct work with undefined description
- var SymbolWrapper = function Symbol() {
- var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString$4(arguments[0]);
- var result = isPrototypeOf(SymbolPrototype, this)
- ? new NativeSymbol(description)
- // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'
- : description === undefined ? NativeSymbol() : NativeSymbol(description);
- if (description === '') EmptyStringDescriptionStore[result] = true;
- return result;
- };
- copyConstructorProperties(SymbolWrapper, NativeSymbol);
- SymbolWrapper.prototype = SymbolPrototype;
- SymbolPrototype.constructor = SymbolWrapper;
- var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';
- var symbolToString = uncurryThis$a(SymbolPrototype.toString);
- var symbolValueOf = uncurryThis$a(SymbolPrototype.valueOf);
- var regexp = /^Symbol\((.*)\)[^)]+$/;
- var replace$2 = uncurryThis$a(''.replace);
- var stringSlice$4 = uncurryThis$a(''.slice);
- defineProperty$3(SymbolPrototype, 'description', {
- configurable: true,
- get: function description() {
- var symbol = symbolValueOf(this);
- var string = symbolToString(symbol);
- if (hasOwn$1(EmptyStringDescriptionStore, symbol)) return '';
- var desc = NATIVE_SYMBOL ? stringSlice$4(string, 7, -1) : replace$2(string, regexp, '$1');
- return desc === '' ? undefined : desc;
- }
- });
- $$7({ global: true, constructor: true, forced: true }, {
- Symbol: SymbolWrapper
- });
- }
- var $$6 = _export;
- var iterate$2 = iterate$5;
- var createProperty = createProperty$6;
- // `Object.fromEntries` method
- // https://github.com/tc39/proposal-object-from-entries
- $$6({ target: 'Object', stat: true }, {
- fromEntries: function fromEntries(iterable) {
- var obj = {};
- iterate$2(iterable, function (k, v) {
- createProperty(obj, k, v);
- }, { AS_ENTRIES: true });
- return obj;
- }
- });
- var anObject$3 = anObject$i;
- // `RegExp.prototype.flags` getter implementation
- // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
- var regexpFlags$1 = function () {
- var that = anObject$3(this);
- var result = '';
- if (that.hasIndices) result += 'd';
- if (that.global) result += 'g';
- if (that.ignoreCase) result += 'i';
- if (that.multiline) result += 'm';
- if (that.dotAll) result += 's';
- if (that.unicode) result += 'u';
- if (that.unicodeSets) result += 'v';
- if (that.sticky) result += 'y';
- return result;
- };
- var fails$a = fails$H;
- var global$4 = global$F;
- // babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
- var $RegExp$2 = global$4.RegExp;
- var UNSUPPORTED_Y$2 = fails$a(function () {
- var re = $RegExp$2('a', 'y');
- re.lastIndex = 2;
- return re.exec('abcd') != null;
- });
- // UC Browser bug
- // https://github.com/zloirock/core-js/issues/1008
- var MISSED_STICKY = UNSUPPORTED_Y$2 || fails$a(function () {
- return !$RegExp$2('a', 'y').sticky;
- });
- var BROKEN_CARET = UNSUPPORTED_Y$2 || fails$a(function () {
- // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
- var re = $RegExp$2('^r', 'gy');
- re.lastIndex = 2;
- return re.exec('str') != null;
- });
- var regexpStickyHelpers = {
- BROKEN_CARET: BROKEN_CARET,
- MISSED_STICKY: MISSED_STICKY,
- UNSUPPORTED_Y: UNSUPPORTED_Y$2
- };
- var fails$9 = fails$H;
- var global$3 = global$F;
- // babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError
- var $RegExp$1 = global$3.RegExp;
- var regexpUnsupportedDotAll = fails$9(function () {
- var re = $RegExp$1('.', 's');
- return !(re.dotAll && re.exec('\n') && re.flags === 's');
- });
- var fails$8 = fails$H;
- var global$2 = global$F;
- // babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError
- var $RegExp = global$2.RegExp;
- var regexpUnsupportedNcg = fails$8(function () {
- var re = $RegExp('(?<a>b)', 'g');
- return re.exec('b').groups.a !== 'b' ||
- 'b'.replace(re, '$<a>c') !== 'bc';
- });
- /* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */
- /* eslint-disable regexp/no-useless-quantifier -- testing */
- var call$3 = functionCall;
- var uncurryThis$9 = functionUncurryThis;
- var toString$3 = toString$a;
- var regexpFlags = regexpFlags$1;
- var stickyHelpers$1 = regexpStickyHelpers;
- var shared = shared$7.exports;
- var create$1 = objectCreate;
- var getInternalState = internalState.get;
- var UNSUPPORTED_DOT_ALL = regexpUnsupportedDotAll;
- var UNSUPPORTED_NCG = regexpUnsupportedNcg;
- var nativeReplace = shared('native-string-replace', String.prototype.replace);
- var nativeExec = RegExp.prototype.exec;
- var patchedExec = nativeExec;
- var charAt$2 = uncurryThis$9(''.charAt);
- var indexOf = uncurryThis$9(''.indexOf);
- var replace$1 = uncurryThis$9(''.replace);
- var stringSlice$3 = uncurryThis$9(''.slice);
- var UPDATES_LAST_INDEX_WRONG = (function () {
- var re1 = /a/;
- var re2 = /b*/g;
- call$3(nativeExec, re1, 'a');
- call$3(nativeExec, re2, 'a');
- return re1.lastIndex !== 0 || re2.lastIndex !== 0;
- })();
- var UNSUPPORTED_Y$1 = stickyHelpers$1.BROKEN_CARET;
- // nonparticipating capturing group, copied from es5-shim's String#split patch.
- var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
- var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$1 || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;
- if (PATCH) {
- patchedExec = function exec(string) {
- var re = this;
- var state = getInternalState(re);
- var str = toString$3(string);
- var raw = state.raw;
- var result, reCopy, lastIndex, match, i, object, group;
- if (raw) {
- raw.lastIndex = re.lastIndex;
- result = call$3(patchedExec, raw, str);
- re.lastIndex = raw.lastIndex;
- return result;
- }
- var groups = state.groups;
- var sticky = UNSUPPORTED_Y$1 && re.sticky;
- var flags = call$3(regexpFlags, re);
- var source = re.source;
- var charsAdded = 0;
- var strCopy = str;
- if (sticky) {
- flags = replace$1(flags, 'y', '');
- if (indexOf(flags, 'g') === -1) {
- flags += 'g';
- }
- strCopy = stringSlice$3(str, re.lastIndex);
- // Support anchored sticky behavior.
- if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt$2(str, re.lastIndex - 1) !== '\n')) {
- source = '(?: ' + source + ')';
- strCopy = ' ' + strCopy;
- charsAdded++;
- }
- // ^(? + rx + ) is needed, in combination with some str slicing, to
- // simulate the 'y' flag.
- reCopy = new RegExp('^(?:' + source + ')', flags);
- }
- if (NPCG_INCLUDED) {
- reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
- }
- if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
- match = call$3(nativeExec, sticky ? reCopy : re, strCopy);
- if (sticky) {
- if (match) {
- match.input = stringSlice$3(match.input, charsAdded);
- match[0] = stringSlice$3(match[0], charsAdded);
- match.index = re.lastIndex;
- re.lastIndex += match[0].length;
- } else re.lastIndex = 0;
- } else if (UPDATES_LAST_INDEX_WRONG && match) {
- re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
- }
- if (NPCG_INCLUDED && match && match.length > 1) {
- // Fix browsers whose `exec` methods don't consistently return `undefined`
- // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
- call$3(nativeReplace, match[0], reCopy, function () {
- for (i = 1; i < arguments.length - 2; i++) {
- if (arguments[i] === undefined) match[i] = undefined;
- }
- });
- }
- if (match && groups) {
- match.groups = object = create$1(null);
- for (i = 0; i < groups.length; i++) {
- group = groups[i];
- object[group[0]] = match[group[1]];
- }
- }
- return match;
- };
- }
- var regexpExec$3 = patchedExec;
- var $$5 = _export;
- var exec$1 = regexpExec$3;
- // `RegExp.prototype.exec` method
- // https://tc39.es/ecma262/#sec-regexp.prototype.exec
- $$5({ target: 'RegExp', proto: true, forced: /./.exec !== exec$1 }, {
- exec: exec$1
- });
- // TODO: Remove from `core-js@4` since it's moved to entry points
- var uncurryThis$8 = functionUncurryThis;
- var defineBuiltIn$1 = defineBuiltIn$f;
- var regexpExec$2 = regexpExec$3;
- var fails$7 = fails$H;
- var wellKnownSymbol$1 = wellKnownSymbol$t;
- var createNonEnumerableProperty = createNonEnumerableProperty$9;
- var SPECIES = wellKnownSymbol$1('species');
- var RegExpPrototype = RegExp.prototype;
- var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) {
- var SYMBOL = wellKnownSymbol$1(KEY);
- var DELEGATES_TO_SYMBOL = !fails$7(function () {
- // String methods call symbol-named RegEp methods
- var O = {};
- O[SYMBOL] = function () { return 7; };
- return ''[KEY](O) != 7;
- });
- var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$7(function () {
- // Symbol-named RegExp methods call .exec
- var execCalled = false;
- var re = /a/;
- if (KEY === 'split') {
- // We can't use real regex here since it causes deoptimization
- // and serious performance degradation in V8
- // https://github.com/zloirock/core-js/issues/306
- re = {};
- // RegExp[@@split] doesn't call the regex's exec method, but first creates
- // a new one. We need to return the patched regex when creating the new one.
- re.constructor = {};
- re.constructor[SPECIES] = function () { return re; };
- re.flags = '';
- re[SYMBOL] = /./[SYMBOL];
- }
- re.exec = function () { execCalled = true; return null; };
- re[SYMBOL]('');
- return !execCalled;
- });
- if (
- !DELEGATES_TO_SYMBOL ||
- !DELEGATES_TO_EXEC ||
- FORCED
- ) {
- var uncurriedNativeRegExpMethod = uncurryThis$8(/./[SYMBOL]);
- var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
- var uncurriedNativeMethod = uncurryThis$8(nativeMethod);
- var $exec = regexp.exec;
- if ($exec === regexpExec$2 || $exec === RegExpPrototype.exec) {
- if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
- // The native String method already delegates to @@method (this
- // polyfilled function), leasing to infinite recursion.
- // We avoid it by directly calling the native @@method method.
- return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };
- }
- return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };
- }
- return { done: false };
- });
- defineBuiltIn$1(String.prototype, KEY, methods[0]);
- defineBuiltIn$1(RegExpPrototype, SYMBOL, methods[1]);
- }
- if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);
- };
- var charAt$1 = stringMultibyte.charAt;
- // `AdvanceStringIndex` abstract operation
- // https://tc39.es/ecma262/#sec-advancestringindex
- var advanceStringIndex$2 = function (S, index, unicode) {
- return index + (unicode ? charAt$1(S, index).length : 1);
- };
- var call$2 = functionCall;
- var anObject$2 = anObject$i;
- var isCallable$2 = isCallable$s;
- var classof$1 = classofRaw$1;
- var regexpExec$1 = regexpExec$3;
- var $TypeError = TypeError;
- // `RegExpExec` abstract operation
- // https://tc39.es/ecma262/#sec-regexpexec
- var regexpExecAbstract = function (R, S) {
- var exec = R.exec;
- if (isCallable$2(exec)) {
- var result = call$2(exec, R, S);
- if (result !== null) anObject$2(result);
- return result;
- }
- if (classof$1(R) === 'RegExp') return call$2(regexpExec$1, R, S);
- throw $TypeError('RegExp#exec called on incompatible receiver');
- };
- var apply$1 = functionApply;
- var call$1 = functionCall;
- var uncurryThis$7 = functionUncurryThis;
- var fixRegExpWellKnownSymbolLogic$1 = fixRegexpWellKnownSymbolLogic;
- var isRegExp = isRegexp;
- var anObject$1 = anObject$i;
- var requireObjectCoercible$2 = requireObjectCoercible$8;
- var speciesConstructor = speciesConstructor$4;
- var advanceStringIndex$1 = advanceStringIndex$2;
- var toLength$2 = toLength$a;
- var toString$2 = toString$a;
- var getMethod$1 = getMethod$5;
- var arraySlice = arraySliceSimple;
- var callRegExpExec = regexpExecAbstract;
- var regexpExec = regexpExec$3;
- var stickyHelpers = regexpStickyHelpers;
- var fails$6 = fails$H;
- var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
- var MAX_UINT32 = 0xFFFFFFFF;
- var min$2 = Math.min;
- var $push = [].push;
- var exec = uncurryThis$7(/./.exec);
- var push$2 = uncurryThis$7($push);
- var stringSlice$2 = uncurryThis$7(''.slice);
- // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
- // Weex JS has frozen built-in prototypes, so use try / catch wrapper
- var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails$6(function () {
- // eslint-disable-next-line regexp/no-empty-group -- required for testing
- var re = /(?:)/;
- var originalExec = re.exec;
- re.exec = function () { return originalExec.apply(this, arguments); };
- var result = 'ab'.split(re);
- return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
- });
- // @@split logic
- fixRegExpWellKnownSymbolLogic$1('split', function (SPLIT, nativeSplit, maybeCallNative) {
- var internalSplit;
- if (
- 'abbc'.split(/(b)*/)[1] == 'c' ||
- // eslint-disable-next-line regexp/no-empty-group -- required for testing
- 'test'.split(/(?:)/, -1).length != 4 ||
- 'ab'.split(/(?:ab)*/).length != 2 ||
- '.'.split(/(.?)(.?)/).length != 4 ||
- // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing
- '.'.split(/()()/).length > 1 ||
- ''.split(/.?/).length
- ) {
- // based on es5-shim implementation, need to rework it
- internalSplit = function (separator, limit) {
- var string = toString$2(requireObjectCoercible$2(this));
- var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
- if (lim === 0) return [];
- if (separator === undefined) return [string];
- // If `separator` is not a regex, use native split
- if (!isRegExp(separator)) {
- return call$1(nativeSplit, string, separator, lim);
- }
- var output = [];
- var flags = (separator.ignoreCase ? 'i' : '') +
- (separator.multiline ? 'm' : '') +
- (separator.unicode ? 'u' : '') +
- (separator.sticky ? 'y' : '');
- var lastLastIndex = 0;
- // Make `global` and avoid `lastIndex` issues by working with a copy
- var separatorCopy = new RegExp(separator.source, flags + 'g');
- var match, lastIndex, lastLength;
- while (match = call$1(regexpExec, separatorCopy, string)) {
- lastIndex = separatorCopy.lastIndex;
- if (lastIndex > lastLastIndex) {
- push$2(output, stringSlice$2(string, lastLastIndex, match.index));
- if (match.length > 1 && match.index < string.length) apply$1($push, output, arraySlice(match, 1));
- lastLength = match[0].length;
- lastLastIndex = lastIndex;
- if (output.length >= lim) break;
- }
- if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
- }
- if (lastLastIndex === string.length) {
- if (lastLength || !exec(separatorCopy, '')) push$2(output, '');
- } else push$2(output, stringSlice$2(string, lastLastIndex));
- return output.length > lim ? arraySlice(output, 0, lim) : output;
- };
- // Chakra, V8
- } else if ('0'.split(undefined, 0).length) {
- internalSplit = function (separator, limit) {
- return separator === undefined && limit === 0 ? [] : call$1(nativeSplit, this, separator, limit);
- };
- } else internalSplit = nativeSplit;
- return [
- // `String.prototype.split` method
- // https://tc39.es/ecma262/#sec-string.prototype.split
- function split(separator, limit) {
- var O = requireObjectCoercible$2(this);
- var splitter = separator == undefined ? undefined : getMethod$1(separator, SPLIT);
- return splitter
- ? call$1(splitter, separator, O, limit)
- : call$1(internalSplit, toString$2(O), separator, limit);
- },
- // `RegExp.prototype[@@split]` method
- // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
- //
- // NOTE: This cannot be properly polyfilled in engines that don't support
- // the 'y' flag.
- function (string, limit) {
- var rx = anObject$1(this);
- var S = toString$2(string);
- var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);
- if (res.done) return res.value;
- var C = speciesConstructor(rx, RegExp);
- var unicodeMatching = rx.unicode;
- var flags = (rx.ignoreCase ? 'i' : '') +
- (rx.multiline ? 'm' : '') +
- (rx.unicode ? 'u' : '') +
- (UNSUPPORTED_Y ? 'g' : 'y');
- // ^(? + rx + ) is needed, in combination with some S slicing, to
- // simulate the 'y' flag.
- var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);
- var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
- if (lim === 0) return [];
- if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];
- var p = 0;
- var q = 0;
- var A = [];
- while (q < S.length) {
- splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;
- var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice$2(S, q) : S);
- var e;
- if (
- z === null ||
- (e = min$2(toLength$2(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p
- ) {
- q = advanceStringIndex$1(S, q, unicodeMatching);
- } else {
- push$2(A, stringSlice$2(S, p, q));
- if (A.length === lim) return A;
- for (var i = 1; i <= z.length - 1; i++) {
- push$2(A, z[i]);
- if (A.length === lim) return A;
- }
- q = p = e;
- }
- }
- push$2(A, stringSlice$2(S, p));
- return A;
- }
- ];
- }, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);
- var PROPER_FUNCTION_NAME = functionName.PROPER;
- var fails$5 = fails$H;
- var whitespaces = whitespaces$2;
- var non = '\u200B\u0085\u180E';
- // check that a method works with the correct list
- // of whitespaces and has a correct name
- var stringTrimForced = function (METHOD_NAME) {
- return fails$5(function () {
- return !!whitespaces[METHOD_NAME]()
- || non[METHOD_NAME]() !== non
- || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);
- });
- };
- var $$4 = _export;
- var $trim = stringTrim.trim;
- var forcedStringTrimMethod = stringTrimForced;
- // `String.prototype.trim` method
- // https://tc39.es/ecma262/#sec-string.prototype.trim
- $$4({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
- trim: function trim() {
- return $trim(this);
- }
- });
- var uncurryThis$6 = functionUncurryThis;
- var toObject = toObject$d;
- var floor = Math.floor;
- var charAt = uncurryThis$6(''.charAt);
- var replace = uncurryThis$6(''.replace);
- var stringSlice$1 = uncurryThis$6(''.slice);
- var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
- var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
- // `GetSubstitution` abstract operation
- // https://tc39.es/ecma262/#sec-getsubstitution
- var getSubstitution$1 = function (matched, str, position, captures, namedCaptures, replacement) {
- var tailPos = position + matched.length;
- var m = captures.length;
- var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
- if (namedCaptures !== undefined) {
- namedCaptures = toObject(namedCaptures);
- symbols = SUBSTITUTION_SYMBOLS;
- }
- return replace(replacement, symbols, function (match, ch) {
- var capture;
- switch (charAt(ch, 0)) {
- case '$': return '$';
- case '&': return matched;
- case '`': return stringSlice$1(str, 0, position);
- case "'": return stringSlice$1(str, tailPos);
- case '<':
- capture = namedCaptures[stringSlice$1(ch, 1, -1)];
- break;
- default: // \d\d?
- var n = +ch;
- if (n === 0) return match;
- if (n > m) {
- var f = floor(n / 10);
- if (f === 0) return match;
- if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);
- return match;
- }
- capture = captures[n - 1];
- }
- return capture === undefined ? '' : capture;
- });
- };
- var apply = functionApply;
- var call = functionCall;
- var uncurryThis$5 = functionUncurryThis;
- var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic;
- var fails$4 = fails$H;
- var anObject = anObject$i;
- var isCallable$1 = isCallable$s;
- var toIntegerOrInfinity = toIntegerOrInfinity$9;
- var toLength$1 = toLength$a;
- var toString$1 = toString$a;
- var requireObjectCoercible$1 = requireObjectCoercible$8;
- var advanceStringIndex = advanceStringIndex$2;
- var getMethod = getMethod$5;
- var getSubstitution = getSubstitution$1;
- var regExpExec$1 = regexpExecAbstract;
- var wellKnownSymbol = wellKnownSymbol$t;
- var REPLACE = wellKnownSymbol('replace');
- var max = Math.max;
- var min$1 = Math.min;
- var concat = uncurryThis$5([].concat);
- var push$1 = uncurryThis$5([].push);
- var stringIndexOf = uncurryThis$5(''.indexOf);
- var stringSlice = uncurryThis$5(''.slice);
- var maybeToString = function (it) {
- return it === undefined ? it : String(it);
- };
- // IE <= 11 replaces $0 with the whole match, as if it was $&
- // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
- var REPLACE_KEEPS_$0 = (function () {
- // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing
- return 'a'.replace(/./, '$0') === '$0';
- })();
- // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
- var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {
- if (/./[REPLACE]) {
- return /./[REPLACE]('a', '$0') === '';
- }
- return false;
- })();
- var REPLACE_SUPPORTS_NAMED_GROUPS = !fails$4(function () {
- var re = /./;
- re.exec = function () {
- var result = [];
- result.groups = { a: '7' };
- return result;
- };
- // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive
- return ''.replace(re, '$<a>') !== '7';
- });
- // @@replace logic
- fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {
- var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';
- return [
- // `String.prototype.replace` method
- // https://tc39.es/ecma262/#sec-string.prototype.replace
- function replace(searchValue, replaceValue) {
- var O = requireObjectCoercible$1(this);
- var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);
- return replacer
- ? call(replacer, searchValue, O, replaceValue)
- : call(nativeReplace, toString$1(O), searchValue, replaceValue);
- },
- // `RegExp.prototype[@@replace]` method
- // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
- function (string, replaceValue) {
- var rx = anObject(this);
- var S = toString$1(string);
- if (
- typeof replaceValue == 'string' &&
- stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&
- stringIndexOf(replaceValue, '$<') === -1
- ) {
- var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
- if (res.done) return res.value;
- }
- var functionalReplace = isCallable$1(replaceValue);
- if (!functionalReplace) replaceValue = toString$1(replaceValue);
- var global = rx.global;
- if (global) {
- var fullUnicode = rx.unicode;
- rx.lastIndex = 0;
- }
- var results = [];
- while (true) {
- var result = regExpExec$1(rx, S);
- if (result === null) break;
- push$1(results, result);
- if (!global) break;
- var matchStr = toString$1(result[0]);
- if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength$1(rx.lastIndex), fullUnicode);
- }
- var accumulatedResult = '';
- var nextSourcePosition = 0;
- for (var i = 0; i < results.length; i++) {
- result = results[i];
- var matched = toString$1(result[0]);
- var position = max(min$1(toIntegerOrInfinity(result.index), S.length), 0);
- var captures = [];
- // NOTE: This is equivalent to
- // captures = result.slice(1).map(maybeToString)
- // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
- // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
- // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
- for (var j = 1; j < result.length; j++) push$1(captures, maybeToString(result[j]));
- var namedCaptures = result.groups;
- if (functionalReplace) {
- var replacerArgs = concat([matched], captures, position, S);
- if (namedCaptures !== undefined) push$1(replacerArgs, namedCaptures);
- var replacement = toString$1(apply(replaceValue, undefined, replacerArgs));
- } else {
- replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
- }
- if (position >= nextSourcePosition) {
- accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
- nextSourcePosition = position + matched.length;
- }
- }
- return accumulatedResult + stringSlice(S, nextSourcePosition);
- }
- ];
- }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
- var internalMetadata = {exports: {}};
- // FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it
- var fails$3 = fails$H;
- var arrayBufferNonExtensible = fails$3(function () {
- if (typeof ArrayBuffer == 'function') {
- var buffer = new ArrayBuffer(8);
- // eslint-disable-next-line es-x/no-object-isextensible, es-x/no-object-defineproperty -- safe
- if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });
- }
- });
- var fails$2 = fails$H;
- var isObject$2 = isObject$k;
- var classof = classofRaw$1;
- var ARRAY_BUFFER_NON_EXTENSIBLE = arrayBufferNonExtensible;
- // eslint-disable-next-line es-x/no-object-isextensible -- safe
- var $isExtensible = Object.isExtensible;
- var FAILS_ON_PRIMITIVES = fails$2(function () { $isExtensible(1); });
- // `Object.isExtensible` method
- // https://tc39.es/ecma262/#sec-object.isextensible
- var objectIsExtensible = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {
- if (!isObject$2(it)) return false;
- if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;
- return $isExtensible ? $isExtensible(it) : true;
- } : $isExtensible;
- var fails$1 = fails$H;
- var freezing = !fails$1(function () {
- // eslint-disable-next-line es-x/no-object-isextensible, es-x/no-object-preventextensions -- required for testing
- return Object.isExtensible(Object.preventExtensions({}));
- });
- var $$3 = _export;
- var uncurryThis$4 = functionUncurryThis;
- var hiddenKeys = hiddenKeys$6;
- var isObject$1 = isObject$k;
- var hasOwn = hasOwnProperty_1;
- var defineProperty$2 = objectDefineProperty.f;
- var getOwnPropertyNamesModule = objectGetOwnPropertyNames;
- var getOwnPropertyNamesExternalModule = objectGetOwnPropertyNamesExternal;
- var isExtensible = objectIsExtensible;
- var uid = uid$5;
- var FREEZING = freezing;
- var REQUIRED = false;
- var METADATA = uid('meta');
- var id = 0;
- var setMetadata = function (it) {
- defineProperty$2(it, METADATA, { value: {
- objectID: 'O' + id++, // object ID
- weakData: {} // weak collections IDs
- } });
- };
- var fastKey$1 = function (it, create) {
- // return a primitive with prefix
- if (!isObject$1(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
- if (!hasOwn(it, METADATA)) {
- // can't set metadata to uncaught frozen object
- if (!isExtensible(it)) return 'F';
- // not necessary to add metadata
- if (!create) return 'E';
- // add missing metadata
- setMetadata(it);
- // return object ID
- } return it[METADATA].objectID;
- };
- var getWeakData = function (it, create) {
- if (!hasOwn(it, METADATA)) {
- // can't set metadata to uncaught frozen object
- if (!isExtensible(it)) return true;
- // not necessary to add metadata
- if (!create) return false;
- // add missing metadata
- setMetadata(it);
- // return the store of weak collections IDs
- } return it[METADATA].weakData;
- };
- // add metadata on freeze-family methods calling
- var onFreeze = function (it) {
- if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);
- return it;
- };
- var enable = function () {
- meta.enable = function () { /* empty */ };
- REQUIRED = true;
- var getOwnPropertyNames = getOwnPropertyNamesModule.f;
- var splice = uncurryThis$4([].splice);
- var test = {};
- test[METADATA] = 1;
- // prevent exposing of metadata key
- if (getOwnPropertyNames(test).length) {
- getOwnPropertyNamesModule.f = function (it) {
- var result = getOwnPropertyNames(it);
- for (var i = 0, length = result.length; i < length; i++) {
- if (result[i] === METADATA) {
- splice(result, i, 1);
- break;
- }
- } return result;
- };
- $$3({ target: 'Object', stat: true, forced: true }, {
- getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
- });
- }
- };
- var meta = internalMetadata.exports = {
- enable: enable,
- fastKey: fastKey$1,
- getWeakData: getWeakData,
- onFreeze: onFreeze
- };
- hiddenKeys[METADATA] = true;
- var $$2 = _export;
- var global$1 = global$F;
- var uncurryThis$3 = functionUncurryThis;
- var isForced = isForced_1;
- var defineBuiltIn = defineBuiltIn$f;
- var InternalMetadataModule = internalMetadata.exports;
- var iterate$1 = iterate$5;
- var anInstance$1 = anInstance$7;
- var isCallable = isCallable$s;
- var isObject = isObject$k;
- var fails = fails$H;
- var checkCorrectnessOfIteration = checkCorrectnessOfIteration$4;
- var setToStringTag = setToStringTag$8;
- var inheritIfRequired = inheritIfRequired$3;
- var collection$2 = function (CONSTRUCTOR_NAME, wrapper, common) {
- var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
- var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
- var ADDER = IS_MAP ? 'set' : 'add';
- var NativeConstructor = global$1[CONSTRUCTOR_NAME];
- var NativePrototype = NativeConstructor && NativeConstructor.prototype;
- var Constructor = NativeConstructor;
- var exported = {};
- var fixMethod = function (KEY) {
- var uncurriedNativeMethod = uncurryThis$3(NativePrototype[KEY]);
- defineBuiltIn(NativePrototype, KEY,
- KEY == 'add' ? function add(value) {
- uncurriedNativeMethod(this, value === 0 ? 0 : value);
- return this;
- } : KEY == 'delete' ? function (key) {
- return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
- } : KEY == 'get' ? function get(key) {
- return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);
- } : KEY == 'has' ? function has(key) {
- return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
- } : function set(key, value) {
- uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
- return this;
- }
- );
- };
- var REPLACE = isForced(
- CONSTRUCTOR_NAME,
- !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {
- new NativeConstructor().entries().next();
- }))
- );
- if (REPLACE) {
- // create collection constructor
- Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
- InternalMetadataModule.enable();
- } else if (isForced(CONSTRUCTOR_NAME, true)) {
- var instance = new Constructor();
- // early implementations not supports chaining
- var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
- // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
- var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });
- // most early implementations doesn't supports iterables, most modern - not close it correctly
- // eslint-disable-next-line no-new -- required for testing
- var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });
- // for early implementations -0 and +0 not the same
- var BUGGY_ZERO = !IS_WEAK && fails(function () {
- // V8 ~ Chromium 42- fails only with 5+ elements
- var $instance = new NativeConstructor();
- var index = 5;
- while (index--) $instance[ADDER](index, index);
- return !$instance.has(-0);
- });
- if (!ACCEPT_ITERABLES) {
- Constructor = wrapper(function (dummy, iterable) {
- anInstance$1(dummy, NativePrototype);
- var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
- if (iterable != undefined) iterate$1(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
- return that;
- });
- Constructor.prototype = NativePrototype;
- NativePrototype.constructor = Constructor;
- }
- if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
- fixMethod('delete');
- fixMethod('has');
- IS_MAP && fixMethod('get');
- }
- if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
- // weak collections should not contains .clear method
- if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;
- }
- exported[CONSTRUCTOR_NAME] = Constructor;
- $$2({ global: true, constructor: true, forced: Constructor != NativeConstructor }, exported);
- setToStringTag(Constructor, CONSTRUCTOR_NAME);
- if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
- return Constructor;
- };
- var defineProperty$1 = objectDefineProperty.f;
- var create = objectCreate;
- var defineBuiltIns = defineBuiltIns$3;
- var bind = functionBindContext;
- var anInstance = anInstance$7;
- var iterate = iterate$5;
- var defineIterator = defineIterator$3;
- var setSpecies = setSpecies$4;
- var DESCRIPTORS$2 = descriptors;
- var fastKey = internalMetadata.exports.fastKey;
- var InternalStateModule = internalState;
- var setInternalState = InternalStateModule.set;
- var internalStateGetterFor = InternalStateModule.getterFor;
- var collectionStrong$2 = {
- getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
- var Constructor = wrapper(function (that, iterable) {
- anInstance(that, Prototype);
- setInternalState(that, {
- type: CONSTRUCTOR_NAME,
- index: create(null),
- first: undefined,
- last: undefined,
- size: 0
- });
- if (!DESCRIPTORS$2) that.size = 0;
- if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
- });
- var Prototype = Constructor.prototype;
- var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
- var define = function (that, key, value) {
- var state = getInternalState(that);
- var entry = getEntry(that, key);
- var previous, index;
- // change existing entry
- if (entry) {
- entry.value = value;
- // create new entry
- } else {
- state.last = entry = {
- index: index = fastKey(key, true),
- key: key,
- value: value,
- previous: previous = state.last,
- next: undefined,
- removed: false
- };
- if (!state.first) state.first = entry;
- if (previous) previous.next = entry;
- if (DESCRIPTORS$2) state.size++;
- else that.size++;
- // add to index
- if (index !== 'F') state.index[index] = entry;
- } return that;
- };
- var getEntry = function (that, key) {
- var state = getInternalState(that);
- // fast case
- var index = fastKey(key);
- var entry;
- if (index !== 'F') return state.index[index];
- // frozen object case
- for (entry = state.first; entry; entry = entry.next) {
- if (entry.key == key) return entry;
- }
- };
- defineBuiltIns(Prototype, {
- // `{ Map, Set }.prototype.clear()` methods
- // https://tc39.es/ecma262/#sec-map.prototype.clear
- // https://tc39.es/ecma262/#sec-set.prototype.clear
- clear: function clear() {
- var that = this;
- var state = getInternalState(that);
- var data = state.index;
- var entry = state.first;
- while (entry) {
- entry.removed = true;
- if (entry.previous) entry.previous = entry.previous.next = undefined;
- delete data[entry.index];
- entry = entry.next;
- }
- state.first = state.last = undefined;
- if (DESCRIPTORS$2) state.size = 0;
- else that.size = 0;
- },
- // `{ Map, Set }.prototype.delete(key)` methods
- // https://tc39.es/ecma262/#sec-map.prototype.delete
- // https://tc39.es/ecma262/#sec-set.prototype.delete
- 'delete': function (key) {
- var that = this;
- var state = getInternalState(that);
- var entry = getEntry(that, key);
- if (entry) {
- var next = entry.next;
- var prev = entry.previous;
- delete state.index[entry.index];
- entry.removed = true;
- if (prev) prev.next = next;
- if (next) next.previous = prev;
- if (state.first == entry) state.first = next;
- if (state.last == entry) state.last = prev;
- if (DESCRIPTORS$2) state.size--;
- else that.size--;
- } return !!entry;
- },
- // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods
- // https://tc39.es/ecma262/#sec-map.prototype.foreach
- // https://tc39.es/ecma262/#sec-set.prototype.foreach
- forEach: function forEach(callbackfn /* , that = undefined */) {
- var state = getInternalState(this);
- var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- var entry;
- while (entry = entry ? entry.next : state.first) {
- boundFunction(entry.value, entry.key, this);
- // revert to the last existing entry
- while (entry && entry.removed) entry = entry.previous;
- }
- },
- // `{ Map, Set}.prototype.has(key)` methods
- // https://tc39.es/ecma262/#sec-map.prototype.has
- // https://tc39.es/ecma262/#sec-set.prototype.has
- has: function has(key) {
- return !!getEntry(this, key);
- }
- });
- defineBuiltIns(Prototype, IS_MAP ? {
- // `Map.prototype.get(key)` method
- // https://tc39.es/ecma262/#sec-map.prototype.get
- get: function get(key) {
- var entry = getEntry(this, key);
- return entry && entry.value;
- },
- // `Map.prototype.set(key, value)` method
- // https://tc39.es/ecma262/#sec-map.prototype.set
- set: function set(key, value) {
- return define(this, key === 0 ? 0 : key, value);
- }
- } : {
- // `Set.prototype.add(value)` method
- // https://tc39.es/ecma262/#sec-set.prototype.add
- add: function add(value) {
- return define(this, value = value === 0 ? 0 : value, value);
- }
- });
- if (DESCRIPTORS$2) defineProperty$1(Prototype, 'size', {
- get: function () {
- return getInternalState(this).size;
- }
- });
- return Constructor;
- },
- setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {
- var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';
- var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
- var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
- // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods
- // https://tc39.es/ecma262/#sec-map.prototype.entries
- // https://tc39.es/ecma262/#sec-map.prototype.keys
- // https://tc39.es/ecma262/#sec-map.prototype.values
- // https://tc39.es/ecma262/#sec-map.prototype-@@iterator
- // https://tc39.es/ecma262/#sec-set.prototype.entries
- // https://tc39.es/ecma262/#sec-set.prototype.keys
- // https://tc39.es/ecma262/#sec-set.prototype.values
- // https://tc39.es/ecma262/#sec-set.prototype-@@iterator
- defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {
- setInternalState(this, {
- type: ITERATOR_NAME,
- target: iterated,
- state: getInternalCollectionState(iterated),
- kind: kind,
- last: undefined
- });
- }, function () {
- var state = getInternalIteratorState(this);
- var kind = state.kind;
- var entry = state.last;
- // revert to the last existing entry
- while (entry && entry.removed) entry = entry.previous;
- // get next entry
- if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {
- // or finish the iteration
- state.target = undefined;
- return { value: undefined, done: true };
- }
- // return step by kind
- if (kind == 'keys') return { value: entry.key, done: false };
- if (kind == 'values') return { value: entry.value, done: false };
- return { value: [entry.key, entry.value], done: false };
- }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
- // `{ Map, Set }.prototype[@@species]` accessors
- // https://tc39.es/ecma262/#sec-get-map-@@species
- // https://tc39.es/ecma262/#sec-get-set-@@species
- setSpecies(CONSTRUCTOR_NAME);
- }
- };
- var collection$1 = collection$2;
- var collectionStrong$1 = collectionStrong$2;
- // `Map` constructor
- // https://tc39.es/ecma262/#sec-map-objects
- collection$1('Map', function (init) {
- return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };
- }, collectionStrong$1);
- var DESCRIPTORS$1 = descriptors;
- var uncurryThis$2 = functionUncurryThis;
- var objectKeys = objectKeys$4;
- var toIndexedObject = toIndexedObject$b;
- var $propertyIsEnumerable = objectPropertyIsEnumerable.f;
- var propertyIsEnumerable = uncurryThis$2($propertyIsEnumerable);
- var push = uncurryThis$2([].push);
- // `Object.{ entries, values }` methods implementation
- var createMethod = function (TO_ENTRIES) {
- return function (it) {
- var O = toIndexedObject(it);
- var keys = objectKeys(O);
- var length = keys.length;
- var i = 0;
- var result = [];
- var key;
- while (length > i) {
- key = keys[i++];
- if (!DESCRIPTORS$1 || propertyIsEnumerable(O, key)) {
- push(result, TO_ENTRIES ? [key, O[key]] : O[key]);
- }
- }
- return result;
- };
- };
- var objectToArray = {
- // `Object.entries` method
- // https://tc39.es/ecma262/#sec-object.entries
- entries: createMethod(true),
- // `Object.values` method
- // https://tc39.es/ecma262/#sec-object.values
- values: createMethod(false)
- };
- var $$1 = _export;
- var $entries = objectToArray.entries;
- // `Object.entries` method
- // https://tc39.es/ecma262/#sec-object.entries
- $$1({ target: 'Object', stat: true }, {
- entries: function entries(O) {
- return $entries(O);
- }
- });
- var sendFetchRequest = _async(function (method, _ref2, headers) {
- var options = _ref2.options,
- url = _ref2.url;
- return _await(fetch(url, Object.assign({}, options, {
- method: method,
- headers: headers
- })), function (response) {
- if (response.status < 400) {
- return response;
- } else {
- throw new Error(ERR_HTTP_STATUS + (response.statusText || response.status));
- }
- });
- });
- var getContentLength = _async(function (httpReader, sendRequest, getRequestData) {
- return _invokeIgnored(function () {
- if (httpReader.preventHeadRequest) {
- return _awaitIgnored(getRequestData(httpReader, httpReader.options));
- } else {
- return _await(sendRequest(HTTP_METHOD_HEAD, httpReader, getHeaders(httpReader)), function (response) {
- var contentLength = response.headers.get(HTTP_HEADER_CONTENT_LENGTH);
- return _invokeIgnored(function () {
- if (contentLength) {
- httpReader.size = Number(contentLength);
- } else {
- return _awaitIgnored(getRequestData(httpReader, httpReader.options));
- }
- });
- });
- }
- });
- });
- var getRequestData = _async(function (httpReader, sendRequest) {
- return _await(sendRequest(HTTP_METHOD_GET, httpReader, getHeaders(httpReader)), function (response) {
- return _await(response.arrayBuffer(), function (_response$arrayBuffer2) {
- httpReader.data = new Uint8Array(_response$arrayBuffer2);
- if (!httpReader.size) {
- httpReader.size = httpReader.data.length;
- }
- });
- });
- });
- var getXMLHttpRequestData = _async(function (httpReader) {
- return _awaitIgnored(getRequestData(httpReader, sendXMLHttpRequest));
- });
- var getFetchRequestData = _async(function (httpReader) {
- return _awaitIgnored(getRequestData(httpReader, sendFetchRequest));
- });
- var readUint8ArrayHttpReader = _async(function (httpReader, index, length, sendRequest, getRequestData) {
- if (httpReader.useRangeHeader || httpReader.forceRangeRequests) {
- return _await(sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader, index, length)), function (response) {
- if (response.status != 206) {
- throw new Error(ERR_HTTP_RANGE);
- }
- return _await(response.arrayBuffer(), function (_response$arrayBuffer) {
- return new Uint8Array(_response$arrayBuffer);
- });
- });
- } else {
- return _invoke(function () {
- if (!httpReader.data) {
- return _awaitIgnored(getRequestData(httpReader, httpReader.options));
- }
- }, function () {
- return new Uint8Array(httpReader.data.subarray(index, index + length));
- });
- }
- });
- var initHttpReader = _async(function (httpReader, sendRequest, getRequestData) {
- return function () {
- if (isHttpFamily(httpReader.url) && (httpReader.useRangeHeader || httpReader.forceRangeRequests)) {
- return _await(sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader)), function (response) {
- return function () {
- if (!httpReader.forceRangeRequests && response.headers.get(HTTP_HEADER_ACCEPT_RANGES) != HTTP_RANGE_UNIT) {
- throw new Error(ERR_HTTP_RANGE);
- } else {
- var contentSize;
- var contentRangeHeader = response.headers.get(HTTP_HEADER_CONTENT_RANGE);
- if (contentRangeHeader) {
- var splitHeader = contentRangeHeader.trim().split(/\s*\/\s*/);
- if (splitHeader.length) {
- var headerValue = splitHeader[1];
- if (headerValue && headerValue != "*") {
- contentSize = Number(headerValue);
- }
- }
- }
- return _invokeIgnored(function () {
- if (contentSize === undefined) {
- return _awaitIgnored(getContentLength(httpReader, sendRequest, getRequestData));
- } else {
- httpReader.size = contentSize;
- }
- });
- }
- }();
- });
- } else {
- return _awaitIgnored(getContentLength(httpReader, sendRequest, getRequestData));
- }
- }();
- });
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- /* global Blob, FileReader, atob, btoa, XMLHttpRequest, document, fetch */
- var ERR_HTTP_STATUS = "HTTP error ";
- var ERR_HTTP_RANGE = "HTTP Range not supported";
- var ERR_NOT_SEEKABLE_READER = "Reader is not seekable";
- var CONTENT_TYPE_TEXT_PLAIN = "text/plain";
- var HTTP_HEADER_CONTENT_LENGTH = "Content-Length";
- var HTTP_HEADER_CONTENT_RANGE = "Content-Range";
- var HTTP_HEADER_ACCEPT_RANGES = "Accept-Ranges";
- var HTTP_HEADER_RANGE = "Range";
- var HTTP_METHOD_HEAD = "HEAD";
- var HTTP_METHOD_GET = "GET";
- var HTTP_RANGE_UNIT = "bytes";
- var Stream = /*#__PURE__*/function () {
- function Stream() {
- _classCallCheck(this, Stream);
- this.size = 0;
- }
- _createClass(Stream, [{
- key: "init",
- value: function init() {
- this.initialized = true;
- }
- }]);
- return Stream;
- }();
- var Reader = /*#__PURE__*/function (_Stream) {
- _inherits(Reader, _Stream);
- var _super = _createSuper(Reader);
- function Reader() {
- _classCallCheck(this, Reader);
- return _super.apply(this, arguments);
- }
- return _createClass(Reader);
- }(Stream);
- var Writer = /*#__PURE__*/function (_Stream2) {
- _inherits(Writer, _Stream2);
- var _super2 = _createSuper(Writer);
- function Writer() {
- _classCallCheck(this, Writer);
- return _super2.apply(this, arguments);
- }
- _createClass(Writer, [{
- key: "writeUint8Array",
- value: function writeUint8Array(array) {
- this.size += array.length;
- }
- }]);
- return Writer;
- }(Stream);
- var TextReader = /*#__PURE__*/function (_Reader) {
- _inherits(TextReader, _Reader);
- var _super3 = _createSuper(TextReader);
- function TextReader(text) {
- var _this;
- _classCallCheck(this, TextReader);
- _this = _super3.call(this);
- _this.blobReader = new BlobReader(new Blob([text], {
- type: CONTENT_TYPE_TEXT_PLAIN
- }));
- return _this;
- }
- _createClass(TextReader, [{
- key: "init",
- value: function init() {
- _get(_getPrototypeOf(TextReader.prototype), "init", this).call(this);
- this.blobReader.init();
- this.size = this.blobReader.size;
- }
- }, {
- key: "readUint8Array",
- value: function readUint8Array(offset, length) {
- return this.blobReader.readUint8Array(offset, length);
- }
- }]);
- return TextReader;
- }(Reader);
- var TextWriter = /*#__PURE__*/function (_Writer) {
- _inherits(TextWriter, _Writer);
- var _super4 = _createSuper(TextWriter);
- function TextWriter(encoding) {
- var _this2;
- _classCallCheck(this, TextWriter);
- _this2 = _super4.call(this);
- _this2.encoding = encoding;
- _this2.blob = new Blob([], {
- type: CONTENT_TYPE_TEXT_PLAIN
- });
- return _this2;
- }
- _createClass(TextWriter, [{
- key: "writeUint8Array",
- value: function writeUint8Array(array) {
- _get(_getPrototypeOf(TextWriter.prototype), "writeUint8Array", this).call(this, array);
- this.blob = new Blob([this.blob, array.buffer], {
- type: CONTENT_TYPE_TEXT_PLAIN
- });
- }
- }, {
- key: "getData",
- value: function getData() {
- var _this3 = this;
- if (this.blob.text) {
- return this.blob.text();
- } else {
- var reader = new FileReader();
- return new Promise(function (resolve, reject) {
- reader.onload = function (event) {
- return resolve(event.target.result);
- };
- reader.onerror = function () {
- return reject(reader.error);
- };
- reader.readAsText(_this3.blob, _this3.encoding);
- });
- }
- }
- }]);
- return TextWriter;
- }(Writer);
- var Data64URIReader = /*#__PURE__*/function (_Reader2) {
- _inherits(Data64URIReader, _Reader2);
- var _super5 = _createSuper(Data64URIReader);
- function Data64URIReader(dataURI) {
- var _this4;
- _classCallCheck(this, Data64URIReader);
- _this4 = _super5.call(this);
- _this4.dataURI = dataURI;
- var dataEnd = dataURI.length;
- while (dataURI.charAt(dataEnd - 1) == "=") {
- dataEnd--;
- }
- _this4.dataStart = dataURI.indexOf(",") + 1;
- _this4.size = Math.floor((dataEnd - _this4.dataStart) * 0.75);
- return _this4;
- }
- _createClass(Data64URIReader, [{
- key: "readUint8Array",
- value: function readUint8Array(offset, length) {
- var dataArray = new Uint8Array(length);
- var start = Math.floor(offset / 3) * 4;
- var bytes = atob(this.dataURI.substring(start + this.dataStart, Math.ceil((offset + length) / 3) * 4 + this.dataStart));
- var delta = offset - Math.floor(start / 4) * 3;
- for (var indexByte = delta; indexByte < delta + length; indexByte++) {
- dataArray[indexByte - delta] = bytes.charCodeAt(indexByte);
- }
- return dataArray;
- }
- }]);
- return Data64URIReader;
- }(Reader);
- var Data64URIWriter = /*#__PURE__*/function (_Writer2) {
- _inherits(Data64URIWriter, _Writer2);
- var _super6 = _createSuper(Data64URIWriter);
- function Data64URIWriter(contentType) {
- var _this5;
- _classCallCheck(this, Data64URIWriter);
- _this5 = _super6.call(this);
- _this5.data = "data:" + (contentType || "") + ";base64,";
- _this5.pending = [];
- return _this5;
- }
- _createClass(Data64URIWriter, [{
- key: "writeUint8Array",
- value: function writeUint8Array(array) {
- _get(_getPrototypeOf(Data64URIWriter.prototype), "writeUint8Array", this).call(this, array);
- var indexArray = 0;
- var dataString = this.pending;
- var delta = this.pending.length;
- this.pending = "";
- for (indexArray = 0; indexArray < Math.floor((delta + array.length) / 3) * 3 - delta; indexArray++) {
- dataString += String.fromCharCode(array[indexArray]);
- }
- for (; indexArray < array.length; indexArray++) {
- this.pending += String.fromCharCode(array[indexArray]);
- }
- if (dataString.length > 2) {
- this.data += btoa(dataString);
- } else {
- this.pending = dataString;
- }
- }
- }, {
- key: "getData",
- value: function getData() {
- return this.data + btoa(this.pending);
- }
- }]);
- return Data64URIWriter;
- }(Writer);
- var BlobReader = /*#__PURE__*/function (_Reader3) {
- _inherits(BlobReader, _Reader3);
- var _super7 = _createSuper(BlobReader);
- function BlobReader(blob) {
- var _this6;
- _classCallCheck(this, BlobReader);
- _this6 = _super7.call(this);
- _this6.blob = blob;
- _this6.size = blob.size;
- return _this6;
- }
- _createClass(BlobReader, [{
- key: "readUint8Array",
- value: function readUint8Array(offset, length) {
- try {
- var _this8 = this;
- if (_this8.blob.arrayBuffer) {
- return _await(_this8.blob.slice(offset, offset + length).arrayBuffer(), function (_this7$blob$slice$arr) {
- return new Uint8Array(_this7$blob$slice$arr);
- });
- } else {
- var reader = new FileReader();
- return _await(new Promise(function (resolve, reject) {
- reader.onload = function (event) {
- return resolve(new Uint8Array(event.target.result));
- };
- reader.onerror = function () {
- return reject(reader.error);
- };
- reader.readAsArrayBuffer(_this8.blob.slice(offset, offset + length));
- }));
- }
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }]);
- return BlobReader;
- }(Reader);
- var BlobWriter = /*#__PURE__*/function (_Writer3) {
- _inherits(BlobWriter, _Writer3);
- var _super8 = _createSuper(BlobWriter);
- function BlobWriter(contentType) {
- var _this9;
- _classCallCheck(this, BlobWriter);
- _this9 = _super8.call(this);
- _this9.contentType = contentType;
- _this9.arrayBuffersMaxlength = 8;
- initArrayBuffers(_assertThisInitialized(_this9));
- return _this9;
- }
- _createClass(BlobWriter, [{
- key: "writeUint8Array",
- value: function writeUint8Array(array) {
- _get(_getPrototypeOf(BlobWriter.prototype), "writeUint8Array", this).call(this, array);
- if (this.arrayBuffers.length == this.arrayBuffersMaxlength) {
- flushArrayBuffers(this);
- }
- this.arrayBuffers.push(array.buffer);
- }
- }, {
- key: "getData",
- value: function getData() {
- if (!this.blob) {
- if (this.arrayBuffers.length) {
- flushArrayBuffers(this);
- }
- this.blob = this.pendingBlob;
- initArrayBuffers(this);
- }
- return this.blob;
- }
- }]);
- return BlobWriter;
- }(Writer);
- function initArrayBuffers(blobWriter) {
- blobWriter.pendingBlob = new Blob([], {
- type: blobWriter.contentType
- });
- blobWriter.arrayBuffers = [];
- }
- function flushArrayBuffers(blobWriter) {
- blobWriter.pendingBlob = new Blob([blobWriter.pendingBlob].concat(_toConsumableArray(blobWriter.arrayBuffers)), {
- type: blobWriter.contentType
- });
- blobWriter.arrayBuffers = [];
- }
- var ReadableStreamReader = /*#__PURE__*/function () {
- function ReadableStreamReader(readableStream) {
- _classCallCheck(this, ReadableStreamReader);
- this.readableStream = readableStream;
- this.reader = readableStream.getReader();
- this.size = Infinity;
- this.index = 0;
- this.currentSize = 0;
- this.pendingValue = new Uint8Array();
- }
- _createClass(ReadableStreamReader, [{
- key: "init",
- value: function init() {
- this.initialized = true;
- }
- }, {
- key: "readUint8Array",
- value: function readUint8Array(index, length) {
- try {
- var _this11 = this;
- if (_this11.index != index) {
- throw new Error(ERR_NOT_SEEKABLE_READER);
- }
- var data = new Uint8Array(length);
- var size = 0,
- done;
- return _await(_continue(_do(function () {
- return _await(_this11.reader.read(), function (result) {
- var value = result.value;
- done = result.done;
- if (value) {
- _this11.currentSize += value.length;
- } else {
- value = _this11.pendingValue;
- _this11.pendingValue = new Uint8Array();
- }
- if (_this11.pendingValue.length) {
- var newValue = new Uint8Array(_this11.pendingValue.length + value.length);
- newValue.set(_this11.pendingValue);
- newValue.set(value, _this11.pendingValue.length);
- _this11.pendingValue = new Uint8Array();
- value = newValue;
- }
- if (size + value.length > length) {
- data.set(value.subarray(0, length), size);
- _this11.pendingValue = value.subarray(length);
- size += length;
- } else {
- data.set(value, size);
- size += value.length;
- }
- });
- }, function () {
- return size < length && !done;
- }), function () {
- if (done && _this11.size == Infinity) {
- _this11.size = _this11.currentSize;
- }
- if (_this11.size < length) {
- data = data.slice(0, _this11.size);
- length = _this11.size;
- }
- _this11.index += length;
- return data;
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }]);
- return ReadableStreamReader;
- }();
- var WritableStreamWriter = /*#__PURE__*/function (_Writer4) {
- _inherits(WritableStreamWriter, _Writer4);
- var _super9 = _createSuper(WritableStreamWriter);
- function WritableStreamWriter(writableStream) {
- var _this12;
- _classCallCheck(this, WritableStreamWriter);
- _this12 = _super9.call(this);
- _this12.writableStream = writableStream;
- _this12.writer = writableStream.getWriter();
- return _this12;
- }
- _createClass(WritableStreamWriter, [{
- key: "writeUint8Array",
- value: function writeUint8Array(array) {
- try {
- var _this14 = this;
- return _await(_this14.writer.ready, function () {
- return _this14.writer.write(array);
- });
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "getData",
- value: function getData() {
- try {
- var _this16 = this;
- return _await(_this16.writer.ready, function () {
- return _await(_this16.writer.close(), function () {
- return _this16.writableStream;
- });
- });
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }]);
- return WritableStreamWriter;
- }(Writer);
- var FetchReader = /*#__PURE__*/function (_Reader4) {
- _inherits(FetchReader, _Reader4);
- var _super10 = _createSuper(FetchReader);
- function FetchReader(url, options) {
- var _this17;
- _classCallCheck(this, FetchReader);
- _this17 = _super10.call(this);
- _this17.url = url;
- _this17.preventHeadRequest = options.preventHeadRequest;
- _this17.useRangeHeader = options.useRangeHeader;
- _this17.forceRangeRequests = options.forceRangeRequests;
- _this17.options = Object.assign({}, options);
- delete _this17.options.preventHeadRequest;
- delete _this17.options.useRangeHeader;
- delete _this17.options.forceRangeRequests;
- delete _this17.options.useXHR;
- return _this17;
- }
- _createClass(FetchReader, [{
- key: "init",
- value: function init() {
- try {
- var _this19 = this;
- _get(_getPrototypeOf(FetchReader.prototype), "init", _this19).call(_this19);
- return _await(_awaitIgnored(initHttpReader(_this19, sendFetchRequest, getFetchRequestData)));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "readUint8Array",
- value: function readUint8Array(index, length) {
- return readUint8ArrayHttpReader(this, index, length, sendFetchRequest, getFetchRequestData);
- }
- }]);
- return FetchReader;
- }(Reader);
- var XHRReader = /*#__PURE__*/function (_Reader5) {
- _inherits(XHRReader, _Reader5);
- var _super11 = _createSuper(XHRReader);
- function XHRReader(url, options) {
- var _this20;
- _classCallCheck(this, XHRReader);
- _this20 = _super11.call(this);
- _this20.url = url;
- _this20.preventHeadRequest = options.preventHeadRequest;
- _this20.useRangeHeader = options.useRangeHeader;
- _this20.forceRangeRequests = options.forceRangeRequests;
- _this20.options = options;
- return _this20;
- }
- _createClass(XHRReader, [{
- key: "init",
- value: function init() {
- try {
- var _this22 = this;
- _get(_getPrototypeOf(XHRReader.prototype), "init", _this22).call(_this22);
- return _await(_awaitIgnored(initHttpReader(_this22, sendXMLHttpRequest, getXMLHttpRequestData)));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "readUint8Array",
- value: function readUint8Array(index, length) {
- return readUint8ArrayHttpReader(this, index, length, sendXMLHttpRequest, getXMLHttpRequestData);
- }
- }]);
- return XHRReader;
- }(Reader);
- function getRangeHeaders(httpReader) {
- var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
- var length = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
- return Object.assign({}, getHeaders(httpReader), _defineProperty({}, HTTP_HEADER_RANGE, HTTP_RANGE_UNIT + "=" + index + "-" + (index + length - 1)));
- }
- function getHeaders(httpReader) {
- var headers = httpReader.options.headers;
- if (headers) {
- if (Symbol.iterator in headers) {
- return Object.fromEntries(headers);
- } else {
- return headers;
- }
- }
- }
- function sendXMLHttpRequest(method, _ref, headers) {
- var url = _ref.url;
- return new Promise(function (resolve, reject) {
- var request = new XMLHttpRequest();
- request.addEventListener("load", function () {
- if (request.status < 400) {
- var _headers = [];
- request.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach(function (header) {
- var splitHeader = header.trim().split(/\s*:\s*/);
- splitHeader[0] = splitHeader[0].trim().replace(/^[a-z]|-[a-z]/g, function (value) {
- return value.toUpperCase();
- });
- _headers.push(splitHeader);
- });
- resolve({
- status: request.status,
- arrayBuffer: function arrayBuffer() {
- return request.response;
- },
- headers: new Map(_headers)
- });
- } else {
- reject(new Error(ERR_HTTP_STATUS + (request.statusText || request.status)));
- }
- }, false);
- request.addEventListener("error", function (event) {
- return reject(event.detail.error);
- }, false);
- request.open(method, url);
- if (headers) {
- for (var _i = 0, _Object$entries = Object.entries(headers); _i < _Object$entries.length; _i++) {
- var entry = _Object$entries[_i];
- request.setRequestHeader(entry[0], entry[1]);
- }
- }
- request.responseType = "arraybuffer";
- request.send();
- });
- }
- var HttpReader = /*#__PURE__*/function (_Reader6) {
- _inherits(HttpReader, _Reader6);
- var _super12 = _createSuper(HttpReader);
- function HttpReader(url) {
- var _this23;
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- _classCallCheck(this, HttpReader);
- _this23 = _super12.call(this);
- _this23.url = url;
- if (options.useXHR) {
- _this23.reader = new XHRReader(url, options);
- } else {
- _this23.reader = new FetchReader(url, options);
- }
- return _this23;
- }
- _createClass(HttpReader, [{
- key: "size",
- get: function get() {
- return this.reader.size;
- },
- set: function set(value) {// ignored
- }
- }, {
- key: "init",
- value: function init() {
- try {
- var _this25 = this;
- _get(_getPrototypeOf(HttpReader.prototype), "init", _this25).call(_this25);
- return _await(_awaitIgnored(_this25.reader.init()));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "readUint8Array",
- value: function readUint8Array(index, length) {
- return this.reader.readUint8Array(index, length);
- }
- }]);
- return HttpReader;
- }(Reader);
- var HttpRangeReader = /*#__PURE__*/function (_HttpReader) {
- _inherits(HttpRangeReader, _HttpReader);
- var _super13 = _createSuper(HttpRangeReader);
- function HttpRangeReader(url) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- _classCallCheck(this, HttpRangeReader);
- options.useRangeHeader = true;
- return _super13.call(this, url, options);
- }
- return _createClass(HttpRangeReader);
- }(HttpReader);
- var Uint8ArrayReader = /*#__PURE__*/function (_Reader7) {
- _inherits(Uint8ArrayReader, _Reader7);
- var _super14 = _createSuper(Uint8ArrayReader);
- function Uint8ArrayReader(array) {
- var _this26;
- _classCallCheck(this, Uint8ArrayReader);
- _this26 = _super14.call(this);
- _this26.array = array;
- _this26.size = array.length;
- return _this26;
- }
- _createClass(Uint8ArrayReader, [{
- key: "readUint8Array",
- value: function readUint8Array(index, length) {
- return this.array.slice(index, index + length);
- }
- }]);
- return Uint8ArrayReader;
- }(Reader);
- var Uint8ArrayWriter = /*#__PURE__*/function (_Writer5) {
- _inherits(Uint8ArrayWriter, _Writer5);
- var _super15 = _createSuper(Uint8ArrayWriter);
- function Uint8ArrayWriter() {
- var _this27;
- _classCallCheck(this, Uint8ArrayWriter);
- _this27 = _super15.call(this);
- _this27.array = new Uint8Array(0);
- return _this27;
- }
- _createClass(Uint8ArrayWriter, [{
- key: "writeUint8Array",
- value: function writeUint8Array(array) {
- _get(_getPrototypeOf(Uint8ArrayWriter.prototype), "writeUint8Array", this).call(this, array);
- var previousArray = this.array;
- this.array = new Uint8Array(previousArray.length + array.length);
- this.array.set(previousArray);
- this.array.set(array, previousArray.length);
- }
- }, {
- key: "getData",
- value: function getData() {
- return this.array;
- }
- }]);
- return Uint8ArrayWriter;
- }(Writer);
- function isHttpFamily(url) {
- if (typeof document != "undefined") {
- var anchor = document.createElement("a");
- anchor.href = url;
- return anchor.protocol == "http:" || anchor.protocol == "https:";
- } else {
- return /^https?:\/\//i.test(url);
- }
- }
- var $ = _export;
- var uncurryThis$1 = functionUncurryThis;
- var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
- var toLength = toLength$a;
- var toString = toString$a;
- var notARegExp = notARegexp;
- var requireObjectCoercible = requireObjectCoercible$8;
- var correctIsRegExpLogic = correctIsRegexpLogic;
- // eslint-disable-next-line es-x/no-string-prototype-endswith -- safe
- var un$EndsWith = uncurryThis$1(''.endsWith);
- var slice = uncurryThis$1(''.slice);
- var min = Math.min;
- var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');
- // https://github.com/zloirock/core-js/pull/702
- var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () {
- var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');
- return descriptor && !descriptor.writable;
- }();
- // `String.prototype.endsWith` method
- // https://tc39.es/ecma262/#sec-string.prototype.endswith
- $({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
- endsWith: function endsWith(searchString /* , endPosition = @length */) {
- var that = toString(requireObjectCoercible(this));
- notARegExp(searchString);
- var endPosition = arguments.length > 1 ? arguments[1] : undefined;
- var len = that.length;
- var end = endPosition === undefined ? len : min(toLength(endPosition), len);
- var search = toString(searchString);
- return un$EndsWith
- ? un$EndsWith(that, search, end)
- : slice(that, end - search.length, end) === search;
- }
- });
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- var MAX_32_BITS = 0xffffffff;
- var MAX_16_BITS = 0xffff;
- var COMPRESSION_METHOD_DEFLATE = 0x08;
- var COMPRESSION_METHOD_STORE = 0x00;
- var COMPRESSION_METHOD_AES = 0x63;
- var LOCAL_FILE_HEADER_SIGNATURE = 0x04034b50;
- var DATA_DESCRIPTOR_RECORD_SIGNATURE = 0x08074b50;
- var CENTRAL_FILE_HEADER_SIGNATURE = 0x02014b50;
- var END_OF_CENTRAL_DIR_SIGNATURE = 0x06054b50;
- var ZIP64_END_OF_CENTRAL_DIR_SIGNATURE = 0x06064b50;
- var ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE = 0x07064b50;
- var END_OF_CENTRAL_DIR_LENGTH = 22;
- var ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH = 20;
- var ZIP64_END_OF_CENTRAL_DIR_LENGTH = 56;
- var ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH = END_OF_CENTRAL_DIR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LENGTH;
- var ZIP64_TOTAL_NUMBER_OF_DISKS = 1;
- var EXTRAFIELD_TYPE_ZIP64 = 0x0001;
- var EXTRAFIELD_TYPE_AES = 0x9901;
- var EXTRAFIELD_TYPE_NTFS = 0x000a;
- var EXTRAFIELD_TYPE_NTFS_TAG1 = 0x0001;
- var EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP = 0x5455;
- var EXTRAFIELD_TYPE_UNICODE_PATH = 0x7075;
- var EXTRAFIELD_TYPE_UNICODE_COMMENT = 0x6375;
- var BITFLAG_ENCRYPTED = 0x01;
- var BITFLAG_LEVEL = 0x06;
- var BITFLAG_DATA_DESCRIPTOR = 0x0008;
- var BITFLAG_LANG_ENCODING_FLAG = 0x0800;
- var FILE_ATTR_MSDOS_DIR_MASK = 0x10;
- var VERSION_DEFLATE = 0x14;
- var VERSION_ZIP64 = 0x2D;
- var VERSION_AES = 0x33;
- var DIRECTORY_SIGNATURE = "/";
- var MAX_DATE = new Date(2107, 11, 31);
- var MIN_DATE = new Date(1980, 0, 1);
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- var CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
- var decodeCP437 = (function (stringValue) {
- var result = "";
- for (var indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
- result += CP437[stringValue[indexCharacter]];
- }
- return result;
- });
- function decodeText(value, encoding) {
- if (encoding && encoding.trim().toLowerCase() == "cp437") {
- return decodeCP437(value);
- } else if (typeof TextDecoder == "undefined") {
- var fileReader = new FileReader();
- return new Promise(function (resolve, reject) {
- fileReader.onload = function (event) {
- return resolve(event.target.result);
- };
- fileReader.onerror = function () {
- return reject(fileReader.error);
- };
- fileReader.readAsText(new Blob([value]));
- });
- } else {
- return new TextDecoder(encoding).decode(value);
- }
- }
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- var PROPERTY_NAMES = ["filename", "rawFilename", "directory", "encrypted", "compressedSize", "uncompressedSize", "lastModDate", "rawLastModDate", "comment", "rawComment", "signature", "extraField", "rawExtraField", "bitFlag", "extraFieldZip64", "extraFieldUnicodePath", "extraFieldUnicodeComment", "extraFieldAES", "filenameUTF8", "commentUTF8", "offset", "zip64", "compressionMethod", "extraFieldNTFS", "lastAccessDate", "creationDate", "extraFieldExtendedTimestamp", "version", "versionMadeBy", "msDosCompatible", "internalFileAttribute", "externalFileAttribute"];
- var Entry = /*#__PURE__*/_createClass(function Entry(data) {
- var _this = this;
- _classCallCheck(this, Entry);
- PROPERTY_NAMES.forEach(function (name) {
- return _this[name] = data[name];
- });
- });
- var seekSignature = _async(function (reader, signature, startOffset, minimumBytes, maximumLength) {
- var seek = _async(function (length) {
- var offset = startOffset - length;
- return _await(readUint8Array(reader, offset, length), function (bytes) {
- for (var indexByte = bytes.length - minimumBytes; indexByte >= 0; indexByte--) {
- if (bytes[indexByte] == signatureArray[0] && bytes[indexByte + 1] == signatureArray[1] && bytes[indexByte + 2] == signatureArray[2] && bytes[indexByte + 3] == signatureArray[3]) {
- return {
- offset: offset + indexByte,
- buffer: bytes.slice(indexByte, indexByte + minimumBytes).buffer
- };
- }
- }
- });
- });
- var signatureArray = new Uint8Array(4);
- var signatureView = getDataView$1(signatureArray);
- setUint32$1(signatureView, 0, signature);
- var maximumBytes = minimumBytes + maximumLength;
- return _await(seek(minimumBytes), function (_seek) {
- return _await(_seek || seek(Math.min(maximumBytes, startOffset)), void 0, _seek);
- });
- });
- var readExtraFieldUnicode = _async(function (extraFieldUnicode, propertyName, rawPropertyName, directory, fileEntry) {
- var extraFieldView = getDataView$1(extraFieldUnicode.data);
- extraFieldUnicode.version = getUint8(extraFieldView, 0);
- extraFieldUnicode.signature = getUint32(extraFieldView, 1);
- var crc32 = new Crc32();
- crc32.append(fileEntry[rawPropertyName]);
- var dataViewSignature = getDataView$1(new Uint8Array(4));
- dataViewSignature.setUint32(0, crc32.get(), true);
- return _await(decodeText(extraFieldUnicode.data.subarray(5)), function (_decodeText) {
- extraFieldUnicode[propertyName] = _decodeText;
- extraFieldUnicode.valid = !fileEntry.bitFlag.languageEncodingFlag && extraFieldUnicode.signature == getUint32(dataViewSignature, 0);
- if (extraFieldUnicode.valid) {
- directory[propertyName] = extraFieldUnicode[propertyName];
- directory[propertyName + "UTF8"] = true;
- }
- });
- });
- var readCommonFooter = _async(function (fileEntry, directory, dataView, offset) {
- var rawExtraField = directory.rawExtraField;
- var extraField = directory.extraField = new Map();
- var rawExtraFieldView = getDataView$1(new Uint8Array(rawExtraField));
- var offsetExtraField = 0;
- try {
- while (offsetExtraField < rawExtraField.length) {
- var type = getUint16(rawExtraFieldView, offsetExtraField);
- var size = getUint16(rawExtraFieldView, offsetExtraField + 2);
- extraField.set(type, {
- type: type,
- data: rawExtraField.slice(offsetExtraField + 4, offsetExtraField + 4 + size)
- });
- offsetExtraField += 4 + size;
- }
- } catch (_error) {// ignored
- }
- var compressionMethod = getUint16(dataView, offset + 4);
- directory.signature = getUint32(dataView, offset + 10);
- directory.uncompressedSize = getUint32(dataView, offset + 18);
- directory.compressedSize = getUint32(dataView, offset + 14);
- var extraFieldZip64 = extraField.get(EXTRAFIELD_TYPE_ZIP64);
- if (extraFieldZip64) {
- readExtraFieldZip64(extraFieldZip64, directory);
- directory.extraFieldZip64 = extraFieldZip64;
- }
- var extraFieldUnicodePath = extraField.get(EXTRAFIELD_TYPE_UNICODE_PATH);
- return _invoke(function () {
- if (extraFieldUnicodePath) {
- return _await(readExtraFieldUnicode(extraFieldUnicodePath, "filename", "rawFilename", directory, fileEntry), function () {
- directory.extraFieldUnicodePath = extraFieldUnicodePath;
- });
- }
- }, function () {
- var extraFieldUnicodeComment = extraField.get(EXTRAFIELD_TYPE_UNICODE_COMMENT);
- return _invoke(function () {
- if (extraFieldUnicodeComment) {
- return _await(readExtraFieldUnicode(extraFieldUnicodeComment, "comment", "rawComment", directory, fileEntry), function () {
- directory.extraFieldUnicodeComment = extraFieldUnicodeComment;
- });
- }
- }, function () {
- var extraFieldAES = extraField.get(EXTRAFIELD_TYPE_AES);
- if (extraFieldAES) {
- readExtraFieldAES(extraFieldAES, directory, compressionMethod);
- directory.extraFieldAES = extraFieldAES;
- } else {
- directory.compressionMethod = compressionMethod;
- }
- var extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
- if (extraFieldNTFS) {
- readExtraFieldNTFS(extraFieldNTFS, directory);
- directory.extraFieldNTFS = extraFieldNTFS;
- }
- var extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
- if (extraFieldExtendedTimestamp) {
- readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory);
- directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
- }
- });
- });
- });
- var ERR_BAD_FORMAT = "File format is not recognized";
- var ERR_EOCDR_NOT_FOUND = "End of central directory not found";
- var ERR_EOCDR_ZIP64_NOT_FOUND = "End of Zip64 central directory not found";
- var ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = "End of Zip64 central directory locator not found";
- var ERR_CENTRAL_DIRECTORY_NOT_FOUND = "Central directory header not found";
- var ERR_LOCAL_FILE_HEADER_NOT_FOUND = "Local file header not found";
- var ERR_EXTRAFIELD_ZIP64_NOT_FOUND = "Zip64 extra field not found";
- var ERR_ENCRYPTED = "File contains encrypted entry";
- var ERR_UNSUPPORTED_ENCRYPTION = "Encryption method not supported";
- var ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
- var CHARSET_UTF8 = "utf-8";
- var CHARSET_CP437 = "cp437";
- var ZIP64_PROPERTIES = ["uncompressedSize", "compressedSize", "offset"];
- var ZipReader = /*#__PURE__*/function () {
- function ZipReader(reader) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- _classCallCheck(this, ZipReader);
- Object.assign(this, {
- reader: reader,
- options: options,
- config: getConfiguration()
- });
- }
- _createClass(ZipReader, [{
- key: "getEntriesGenerator",
- value: function getEntriesGenerator() {
- var _this = this;
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- return _wrapAsyncGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
- var zipReader, reader, endOfDirectoryInfo, endOfDirectoryView, directoryDataLength, directoryDataOffset, filesLength, prependedDataLength, endOfDirectoryLocatorArray, endOfDirectoryLocatorView, endOfDirectoryArray, _endOfDirectoryView, expectedDirectoryDataOffset, originalDirectoryDataOffset, offset, directoryArray, directoryView, _expectedDirectoryDataOffset, _originalDirectoryDataOffset, _loop, indexFile;
- return _regeneratorRuntime().wrap(function _callee$(_context2) {
- while (1) {
- switch (_context2.prev = _context2.next) {
- case 0:
- zipReader = _this;
- reader = zipReader.reader;
- if (reader.initialized) {
- _context2.next = 5;
- break;
- }
- _context2.next = 5;
- return _awaitAsyncGenerator(reader.init());
- case 5:
- if (!(reader.size < END_OF_CENTRAL_DIR_LENGTH)) {
- _context2.next = 7;
- break;
- }
- throw new Error(ERR_BAD_FORMAT);
- case 7:
- _context2.next = 9;
- return _awaitAsyncGenerator(seekSignature(reader, END_OF_CENTRAL_DIR_SIGNATURE, reader.size, END_OF_CENTRAL_DIR_LENGTH, MAX_16_BITS * 16));
- case 9:
- endOfDirectoryInfo = _context2.sent;
- if (endOfDirectoryInfo) {
- _context2.next = 12;
- break;
- }
- throw new Error(ERR_EOCDR_NOT_FOUND);
- case 12:
- endOfDirectoryView = getDataView$1(endOfDirectoryInfo);
- directoryDataLength = getUint32(endOfDirectoryView, 12);
- directoryDataOffset = getUint32(endOfDirectoryView, 16);
- filesLength = getUint16(endOfDirectoryView, 8);
- prependedDataLength = 0;
- if (!(directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS)) {
- _context2.next = 43;
- break;
- }
- _context2.next = 20;
- return _awaitAsyncGenerator(readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH));
- case 20:
- endOfDirectoryLocatorArray = _context2.sent;
- endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
- if (!(getUint32(endOfDirectoryLocatorView, 0) != ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE)) {
- _context2.next = 24;
- break;
- }
- throw new Error(ERR_EOCDR_ZIP64_NOT_FOUND);
- case 24:
- directoryDataOffset = getBigUint64(endOfDirectoryLocatorView, 8);
- _context2.next = 27;
- return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH));
- case 27:
- endOfDirectoryArray = _context2.sent;
- _endOfDirectoryView = getDataView$1(endOfDirectoryArray);
- expectedDirectoryDataOffset = endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH - ZIP64_END_OF_CENTRAL_DIR_LENGTH;
- if (!(getUint32(_endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE && directoryDataOffset != expectedDirectoryDataOffset)) {
- _context2.next = 38;
- break;
- }
- originalDirectoryDataOffset = directoryDataOffset;
- directoryDataOffset = expectedDirectoryDataOffset;
- prependedDataLength = directoryDataOffset - originalDirectoryDataOffset;
- _context2.next = 36;
- return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH));
- case 36:
- endOfDirectoryArray = _context2.sent;
- _endOfDirectoryView = getDataView$1(endOfDirectoryArray);
- case 38:
- if (!(getUint32(_endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE)) {
- _context2.next = 40;
- break;
- }
- throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
- case 40:
- filesLength = getBigUint64(_endOfDirectoryView, 32);
- directoryDataLength = getBigUint64(_endOfDirectoryView, 40);
- directoryDataOffset -= directoryDataLength;
- case 43:
- if (!(directoryDataOffset < 0 || directoryDataOffset >= reader.size)) {
- _context2.next = 45;
- break;
- }
- throw new Error(ERR_BAD_FORMAT);
- case 45:
- offset = 0;
- _context2.next = 48;
- return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, directoryDataLength));
- case 48:
- directoryArray = _context2.sent;
- directoryView = getDataView$1(directoryArray);
- if (!directoryDataLength) {
- _context2.next = 60;
- break;
- }
- _expectedDirectoryDataOffset = endOfDirectoryInfo.offset - directoryDataLength;
- if (!(getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE && directoryDataOffset != _expectedDirectoryDataOffset)) {
- _context2.next = 60;
- break;
- }
- _originalDirectoryDataOffset = directoryDataOffset;
- directoryDataOffset = _expectedDirectoryDataOffset;
- prependedDataLength = directoryDataOffset - _originalDirectoryDataOffset;
- _context2.next = 58;
- return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, directoryDataLength));
- case 58:
- directoryArray = _context2.sent;
- directoryView = getDataView$1(directoryArray);
- case 60:
- if (!(directoryDataOffset < 0 || directoryDataOffset >= reader.size)) {
- _context2.next = 62;
- break;
- }
- throw new Error(ERR_BAD_FORMAT);
- case 62:
- _loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop(indexFile) {
- var fileEntry, languageEncodingFlag, filenameOffset, extraFieldOffset, commentOffset, versionMadeBy, msDosCompatible, endOffset, filenameEncoding, commentEncoding, _yield$_awaitAsyncGen, _yield$_awaitAsyncGen2, filename, comment, entry;
- return _regeneratorRuntime().wrap(function _loop$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- fileEntry = new ZipEntry(reader, zipReader.config, zipReader.options);
- if (!(getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE)) {
- _context.next = 3;
- break;
- }
- throw new Error(ERR_CENTRAL_DIRECTORY_NOT_FOUND);
- case 3:
- readCommonHeader(fileEntry, directoryView, offset + 6);
- languageEncodingFlag = Boolean(fileEntry.bitFlag.languageEncodingFlag);
- filenameOffset = offset + 46;
- extraFieldOffset = filenameOffset + fileEntry.filenameLength;
- commentOffset = extraFieldOffset + fileEntry.extraFieldLength;
- versionMadeBy = getUint16(directoryView, offset + 4);
- msDosCompatible = (versionMadeBy & 0) == 0;
- Object.assign(fileEntry, {
- versionMadeBy: versionMadeBy,
- msDosCompatible: msDosCompatible,
- compressedSize: 0,
- uncompressedSize: 0,
- commentLength: getUint16(directoryView, offset + 32),
- directory: msDosCompatible && (getUint8(directoryView, offset + 38) & FILE_ATTR_MSDOS_DIR_MASK) == FILE_ATTR_MSDOS_DIR_MASK,
- offset: getUint32(directoryView, offset + 42) + prependedDataLength,
- internalFileAttribute: getUint32(directoryView, offset + 34),
- externalFileAttribute: getUint32(directoryView, offset + 38),
- rawFilename: directoryArray.subarray(filenameOffset, extraFieldOffset),
- filenameUTF8: languageEncodingFlag,
- commentUTF8: languageEncodingFlag,
- rawExtraField: directoryArray.subarray(extraFieldOffset, commentOffset)
- });
- endOffset = commentOffset + fileEntry.commentLength;
- fileEntry.rawComment = directoryArray.subarray(commentOffset, endOffset);
- filenameEncoding = getOptionValue$1(zipReader, options, "filenameEncoding");
- commentEncoding = getOptionValue$1(zipReader, options, "commentEncoding");
- _context.next = 17;
- return _awaitAsyncGenerator(Promise.all([decodeText(fileEntry.rawFilename, fileEntry.filenameUTF8 ? CHARSET_UTF8 : filenameEncoding || CHARSET_CP437), decodeText(fileEntry.rawComment, fileEntry.commentUTF8 ? CHARSET_UTF8 : commentEncoding || CHARSET_CP437)]));
- case 17:
- _yield$_awaitAsyncGen = _context.sent;
- _yield$_awaitAsyncGen2 = _slicedToArray(_yield$_awaitAsyncGen, 2);
- filename = _yield$_awaitAsyncGen2[0];
- comment = _yield$_awaitAsyncGen2[1];
- fileEntry.filename = filename;
- fileEntry.comment = comment;
- if (!fileEntry.directory && fileEntry.filename.endsWith(DIRECTORY_SIGNATURE)) {
- fileEntry.directory = true;
- }
- _context.next = 26;
- return _awaitAsyncGenerator(readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6));
- case 26:
- entry = new Entry(fileEntry);
- entry.getData = function (writer, options) {
- return fileEntry.getData(writer, entry, options);
- };
- offset = endOffset;
- if (options.onprogress) {
- try {
- options.onprogress(indexFile + 1, filesLength, new Entry(fileEntry));
- } catch (_error) {// ignored
- }
- }
- _context.next = 32;
- return entry;
- case 32:
- case "end":
- return _context.stop();
- }
- }
- }, _loop);
- });
- indexFile = 0;
- case 64:
- if (!(indexFile < filesLength)) {
- _context2.next = 69;
- break;
- }
- return _context2.delegateYield(_loop(indexFile), "t0", 66);
- case 66:
- indexFile++;
- _context2.next = 64;
- break;
- case 69:
- return _context2.abrupt("return", true);
- case 70:
- case "end":
- return _context2.stop();
- }
- }
- }, _callee);
- }))();
- }
- }, {
- key: "getEntries",
- value: function getEntries() {
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- try {
- var _this3 = this;
- var entries = [];
- var iter = _this3.getEntriesGenerator(options);
- var curr = iter.next();
- return _await(_continue(_for(function () {
- return _await(!!curr, function (_curr) {
- return !_curr.done;
- });
- }, void 0, function () {
- var _push = entries.push;
- return _await(curr, function (_curr2) {
- _push.call(entries, _curr2.value);
- curr = iter.next();
- });
- }), function () {
- return entries;
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "close",
- value: function close() {
- return _await();
- }
- }]);
- return ZipReader;
- }();
- var ZipEntry = /*#__PURE__*/function () {
- function ZipEntry(reader, config, options) {
- _classCallCheck(this, ZipEntry);
- Object.assign(this, {
- reader: reader,
- config: config,
- options: options
- });
- }
- _createClass(ZipEntry, [{
- key: "getData",
- value: function getData(writer, fileEntry) {
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
- try {
- var _this5 = this;
- var zipEntry = _this5;
- var reader = zipEntry.reader,
- offset = zipEntry.offset,
- extraFieldAES = zipEntry.extraFieldAES,
- compressionMethod = zipEntry.compressionMethod,
- config = zipEntry.config,
- bitFlag = zipEntry.bitFlag,
- signature = zipEntry.signature,
- rawLastModDate = zipEntry.rawLastModDate,
- compressedSize = zipEntry.compressedSize;
- var localDirectory = zipEntry.localDirectory = {};
- return _await(_invoke(function () {
- if (!reader.initialized) {
- return _awaitIgnored(reader.init());
- }
- }, function () {
- return _await(readUint8Array(reader, offset, 30), function (dataArray) {
- var dataView = getDataView$1(dataArray);
- var password = getOptionValue$1(zipEntry, options, "password");
- password = password && password.length && password;
- if (extraFieldAES) {
- if (extraFieldAES.originalCompressionMethod != COMPRESSION_METHOD_AES) {
- throw new Error(ERR_UNSUPPORTED_COMPRESSION);
- }
- }
- if (compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE) {
- throw new Error(ERR_UNSUPPORTED_COMPRESSION);
- }
- if (getUint32(dataView, 0) != LOCAL_FILE_HEADER_SIGNATURE) {
- throw new Error(ERR_LOCAL_FILE_HEADER_NOT_FOUND);
- }
- readCommonHeader(localDirectory, dataView, 4);
- return _await(readUint8Array(reader, offset, 30 + localDirectory.filenameLength + localDirectory.extraFieldLength), function (_readUint8Array) {
- dataArray = _readUint8Array;
- localDirectory.rawExtraField = dataArray.subarray(30 + localDirectory.filenameLength);
- return _await(readCommonFooter(zipEntry, localDirectory, dataView, 4), function () {
- fileEntry.lastAccessDate = localDirectory.lastAccessDate;
- fileEntry.creationDate = localDirectory.creationDate;
- var encrypted = zipEntry.encrypted && localDirectory.encrypted;
- var zipCrypto = encrypted && !extraFieldAES;
- if (encrypted) {
- if (!zipCrypto && extraFieldAES.strength === undefined) {
- throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
- } else if (!password) {
- throw new Error(ERR_ENCRYPTED);
- }
- }
- return _await(createCodec(config.Inflate, {
- codecType: CODEC_INFLATE,
- password: password,
- zipCrypto: zipCrypto,
- encryptionStrength: extraFieldAES && extraFieldAES.strength,
- signed: getOptionValue$1(zipEntry, options, "checkSignature"),
- passwordVerification: zipCrypto && (bitFlag.dataDescriptor ? rawLastModDate >>> 8 & 0xFF : signature >>> 24 & 0xFF),
- signature: signature,
- compressed: compressionMethod != 0,
- encrypted: encrypted,
- useWebWorkers: getOptionValue$1(zipEntry, options, "useWebWorkers")
- }, config), function (codec) {
- return _invoke(function () {
- if (!writer.initialized) {
- return _awaitIgnored(writer.init());
- }
- }, function () {
- var signal = getOptionValue$1(zipEntry, options, "signal");
- var dataOffset = offset + 30 + localDirectory.filenameLength + localDirectory.extraFieldLength;
- return _await(processData(codec, reader, writer, dataOffset, function () {
- return compressedSize;
- }, config, {
- onprogress: options.onprogress,
- signal: signal
- }), function () {
- return writer.getData();
- });
- });
- });
- });
- });
- });
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }]);
- return ZipEntry;
- }();
- function readCommonHeader(directory, dataView, offset) {
- var rawBitFlag = directory.rawBitFlag = getUint16(dataView, offset + 2);
- var encrypted = (rawBitFlag & BITFLAG_ENCRYPTED) == BITFLAG_ENCRYPTED;
- var rawLastModDate = getUint32(dataView, offset + 6);
- Object.assign(directory, {
- encrypted: encrypted,
- version: getUint16(dataView, offset),
- bitFlag: {
- level: (rawBitFlag & BITFLAG_LEVEL) >> 1,
- dataDescriptor: (rawBitFlag & BITFLAG_DATA_DESCRIPTOR) == BITFLAG_DATA_DESCRIPTOR,
- languageEncodingFlag: (rawBitFlag & BITFLAG_LANG_ENCODING_FLAG) == BITFLAG_LANG_ENCODING_FLAG
- },
- rawLastModDate: rawLastModDate,
- lastModDate: getDate(rawLastModDate),
- filenameLength: getUint16(dataView, offset + 22),
- extraFieldLength: getUint16(dataView, offset + 24)
- });
- }
- function readExtraFieldZip64(extraFieldZip64, directory) {
- directory.zip64 = true;
- var extraFieldView = getDataView$1(extraFieldZip64.data);
- extraFieldZip64.values = [];
- for (var indexValue = 0; indexValue < Math.floor(extraFieldZip64.data.length / 8); indexValue++) {
- extraFieldZip64.values.push(getBigUint64(extraFieldView, 0 + indexValue * 8));
- }
- var missingProperties = ZIP64_PROPERTIES.filter(function (propertyName) {
- return directory[propertyName] == MAX_32_BITS;
- });
- for (var indexMissingProperty = 0; indexMissingProperty < missingProperties.length; indexMissingProperty++) {
- extraFieldZip64[missingProperties[indexMissingProperty]] = extraFieldZip64.values[indexMissingProperty];
- }
- ZIP64_PROPERTIES.forEach(function (propertyName) {
- if (directory[propertyName] == MAX_32_BITS) {
- if (extraFieldZip64[propertyName] !== undefined) {
- directory[propertyName] = extraFieldZip64[propertyName];
- } else {
- throw new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);
- }
- }
- });
- }
- function readExtraFieldAES(extraFieldAES, directory, compressionMethod) {
- var extraFieldView = getDataView$1(extraFieldAES.data);
- extraFieldAES.vendorVersion = getUint8(extraFieldView, 0);
- extraFieldAES.vendorId = getUint8(extraFieldView, 2);
- var strength = getUint8(extraFieldView, 4);
- extraFieldAES.strength = strength;
- extraFieldAES.originalCompressionMethod = compressionMethod;
- directory.compressionMethod = extraFieldAES.compressionMethod = getUint16(extraFieldView, 5);
- }
- function readExtraFieldNTFS(extraFieldNTFS, directory) {
- var extraFieldView = getDataView$1(extraFieldNTFS.data);
- var offsetExtraField = 4;
- var tag1Data;
- try {
- while (offsetExtraField < extraFieldNTFS.data.length && !tag1Data) {
- var tagValue = getUint16(extraFieldView, offsetExtraField);
- var attributeSize = getUint16(extraFieldView, offsetExtraField + 2);
- if (tagValue == EXTRAFIELD_TYPE_NTFS_TAG1) {
- tag1Data = extraFieldNTFS.data.slice(offsetExtraField + 4, offsetExtraField + 4 + attributeSize);
- }
- offsetExtraField += 4 + attributeSize;
- }
- } catch (_error) {// ignored
- }
- try {
- if (tag1Data && tag1Data.length == 24) {
- var tag1View = getDataView$1(tag1Data);
- var rawLastModDate = tag1View.getBigUint64(0, true);
- var rawLastAccessDate = tag1View.getBigUint64(8, true);
- var rawCreationDate = tag1View.getBigUint64(16, true);
- Object.assign(extraFieldNTFS, {
- rawLastModDate: rawLastModDate,
- rawLastAccessDate: rawLastAccessDate,
- rawCreationDate: rawCreationDate
- });
- var lastModDate = getDateNTFS(rawLastModDate);
- var lastAccessDate = getDateNTFS(rawLastAccessDate);
- var creationDate = getDateNTFS(rawCreationDate);
- var extraFieldData = {
- lastModDate: lastModDate,
- lastAccessDate: lastAccessDate,
- creationDate: creationDate
- };
- Object.assign(extraFieldNTFS, extraFieldData);
- Object.assign(directory, extraFieldData);
- }
- } catch (_error) {// ignored
- }
- }
- function readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory) {
- var extraFieldView = getDataView$1(extraFieldExtendedTimestamp.data);
- var flags = getUint8(extraFieldView, 0);
- var timeProperties = [];
- var timeRawProperties = [];
- if ((flags & 0x1) == 0x1) {
- timeProperties.push("lastModDate");
- timeRawProperties.push("rawLastModDate");
- }
- if ((flags & 0x2) == 0x2) {
- timeProperties.push("lastAccessDate");
- timeRawProperties.push("rawLastAccessDate");
- }
- if ((flags & 0x4) == 0x4) {
- timeProperties.push("creationDate");
- timeRawProperties.push("rawCreationDate");
- }
- var offset = 1;
- timeProperties.forEach(function (propertyName, indexProperty) {
- if (extraFieldExtendedTimestamp.data.length >= offset + 4) {
- var time = getUint32(extraFieldView, offset);
- directory[propertyName] = extraFieldExtendedTimestamp[propertyName] = new Date(time * 1000);
- var rawPropertyName = timeRawProperties[indexProperty];
- extraFieldExtendedTimestamp[rawPropertyName] = time;
- }
- offset += 4;
- });
- }
- function getOptionValue$1(zipReader, options, name) {
- return options[name] === undefined ? zipReader.options[name] : options[name];
- }
- function getDate(timeRaw) {
- var date = (timeRaw & 0xffff0000) >> 16,
- time = timeRaw & 0x0000ffff;
- try {
- return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
- } catch (_error) {// ignored
- }
- }
- function getDateNTFS(timeRaw) {
- return new Date(Number(timeRaw / BigInt(10000) - BigInt(11644473600000)));
- }
- function getUint8(view, offset) {
- return view.getUint8(offset);
- }
- function getUint16(view, offset) {
- return view.getUint16(offset, true);
- }
- function getUint32(view, offset) {
- return view.getUint32(offset, true);
- }
- function getBigUint64(view, offset) {
- return Number(view.getBigUint64(offset, true));
- }
- function setUint32$1(view, offset, value) {
- view.setUint32(offset, value, true);
- }
- function getDataView$1(array) {
- return new DataView(array.buffer);
- }
- function readUint8Array(reader, offset, size) {
- return reader.readUint8Array(offset, size);
- }
- var collection = collection$2;
- var collectionStrong = collectionStrong$2;
- // `Set` constructor
- // https://tc39.es/ecma262/#sec-set-objects
- collection('Set', function (init) {
- return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };
- }, collectionStrong);
- var DESCRIPTORS = descriptors;
- var FUNCTION_NAME_EXISTS = functionName.EXISTS;
- var uncurryThis = functionUncurryThis;
- var defineProperty = objectDefineProperty.f;
- var FunctionPrototype = Function.prototype;
- var functionToString = uncurryThis(FunctionPrototype.toString);
- var nameRE = /function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/;
- var regExpExec = uncurryThis(nameRE.exec);
- var NAME = 'name';
- // Function instances `.name` property
- // https://tc39.es/ecma262/#sec-function-instances-name
- if (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {
- defineProperty(FunctionPrototype, NAME, {
- configurable: true,
- get: function () {
- try {
- return regExpExec(nameRE, functionToString(this))[1];
- } catch (error) {
- return '';
- }
- }
- });
- }
- var createTypedArrayConstructor = typedArrayConstructor.exports;
- // `Uint16Array` constructor
- // https://tc39.es/ecma262/#sec-typedarray-objects
- createTypedArrayConstructor('Uint16', function (init) {
- return function Uint16Array(data, byteOffset, length) {
- return init(this, data, byteOffset, length);
- };
- });
- var writeBlob = _async(function (writer, blob) {
- var writeSlice = _async(function () {
- return _invokeIgnored(function () {
- if (start < blob.size) {
- return _await(sliceAsArrayBuffer(blob, start, start + blockSize), function (arrayBuffer) {
- return _await(writer.writeUint8Array(new Uint8Array(arrayBuffer)), function () {
- start += blockSize;
- return _callIgnored(writeSlice);
- });
- });
- }
- });
- });
- var start = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
- var blockSize = 512 * 1024 * 1024;
- return _callIgnored(writeSlice);
- });
- var closeFile = _async(function (zipWriter, comment, options) {
- var writer = zipWriter.writer;
- var files = zipWriter.files;
- var offset = 0;
- var directoryDataLength = 0;
- var directoryOffset = zipWriter.offset;
- var filesLength = files.size;
- var _iterator = _createForOfIteratorHelper(files),
- _step;
- try {
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
- var _step$value = _slicedToArray(_step.value, 2),
- fileEntry = _step$value[1];
- directoryDataLength += 46 + fileEntry.rawFilename.length + fileEntry.rawComment.length + fileEntry.rawExtraFieldZip64.length + fileEntry.rawExtraFieldAES.length + fileEntry.rawExtraFieldExtendedTimestamp.length + fileEntry.rawExtraFieldNTFS.length + fileEntry.rawExtraField.length;
- }
- } catch (err) {
- _iterator.e(err);
- } finally {
- _iterator.f();
- }
- var zip64 = options.zip64 || zipWriter.options.zip64 || false;
- if (directoryOffset >= MAX_32_BITS || directoryDataLength >= MAX_32_BITS || filesLength >= MAX_16_BITS) {
- if (options.zip64 === false || zipWriter.options.zip64 === false) {
- throw new Error(ERR_UNSUPPORTED_FORMAT);
- } else {
- zip64 = true;
- }
- }
- var directoryArray = new Uint8Array(directoryDataLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH));
- var directoryView = getDataView(directoryArray);
- if (comment && comment.length) {
- if (comment.length <= MAX_16_BITS) {
- setUint16(directoryView, offset + 20, comment.length);
- } else {
- throw new Error(ERR_INVALID_COMMENT);
- }
- }
- var _iterator2 = _createForOfIteratorHelper(Array.from(files.values()).entries()),
- _step2;
- try {
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
- var _step2$value = _slicedToArray(_step2.value, 2),
- indexFileEntry = _step2$value[0],
- _fileEntry = _step2$value[1];
- var rawFilename = _fileEntry.rawFilename,
- rawExtraFieldZip64 = _fileEntry.rawExtraFieldZip64,
- rawExtraFieldAES = _fileEntry.rawExtraFieldAES,
- rawExtraField = _fileEntry.rawExtraField,
- rawComment = _fileEntry.rawComment,
- versionMadeBy = _fileEntry.versionMadeBy,
- headerArray = _fileEntry.headerArray,
- directory = _fileEntry.directory,
- _zip = _fileEntry.zip64,
- msDosCompatible = _fileEntry.msDosCompatible,
- internalFileAttribute = _fileEntry.internalFileAttribute,
- externalFileAttribute = _fileEntry.externalFileAttribute;
- var rawExtraFieldExtendedTimestamp = void 0;
- var rawExtraFieldNTFS = void 0;
- if (_fileEntry.extendedTimestamp) {
- rawExtraFieldNTFS = _fileEntry.rawExtraFieldNTFS;
- rawExtraFieldExtendedTimestamp = new Uint8Array(9);
- var extraFieldExtendedTimestampView = getDataView(rawExtraFieldExtendedTimestamp);
- setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
- setUint16(extraFieldExtendedTimestampView, 2, rawExtraFieldExtendedTimestamp.length - 4);
- setUint8(extraFieldExtendedTimestampView, 4, 0x1);
- setUint32(extraFieldExtendedTimestampView, 5, Math.floor(_fileEntry.lastModDate.getTime() / 1000));
- } else {
- rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = new Uint8Array(0);
- }
- var extraFieldLength = rawExtraFieldZip64.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length + rawExtraField.length;
- setUint32(directoryView, offset, CENTRAL_FILE_HEADER_SIGNATURE);
- setUint16(directoryView, offset + 4, versionMadeBy);
- arraySet(directoryArray, headerArray, offset + 6);
- setUint16(directoryView, offset + 30, extraFieldLength);
- setUint16(directoryView, offset + 32, rawComment.length);
- setUint32(directoryView, offset + 34, internalFileAttribute);
- if (externalFileAttribute) {
- setUint32(directoryView, offset + 38, externalFileAttribute);
- } else if (directory && msDosCompatible) {
- setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
- }
- if (_zip) {
- setUint32(directoryView, offset + 42, MAX_32_BITS);
- } else {
- setUint32(directoryView, offset + 42, _fileEntry.offset);
- }
- arraySet(directoryArray, rawFilename, offset + 46);
- arraySet(directoryArray, rawExtraFieldZip64, offset + 46 + rawFilename.length);
- arraySet(directoryArray, rawExtraFieldAES, offset + 46 + rawFilename.length + rawExtraFieldZip64.length);
- arraySet(directoryArray, rawExtraFieldExtendedTimestamp, offset + 46 + rawFilename.length + rawExtraFieldZip64.length + rawExtraFieldAES.length);
- arraySet(directoryArray, rawExtraFieldNTFS, offset + 46 + rawFilename.length + rawExtraFieldZip64.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length);
- arraySet(directoryArray, rawExtraField, offset + 46 + rawFilename.length + rawExtraFieldZip64.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
- arraySet(directoryArray, rawComment, offset + 46 + rawFilename.length + extraFieldLength);
- offset += 46 + rawFilename.length + extraFieldLength + rawComment.length;
- if (options.onprogress) {
- try {
- options.onprogress(indexFileEntry + 1, files.size, new Entry(_fileEntry));
- } catch (_error) {// ignored
- }
- }
- }
- } catch (err) {
- _iterator2.e(err);
- } finally {
- _iterator2.f();
- }
- if (zip64) {
- setUint32(directoryView, offset, ZIP64_END_OF_CENTRAL_DIR_SIGNATURE);
- setBigUint64(directoryView, offset + 4, BigInt(44));
- setUint16(directoryView, offset + 12, 45);
- setUint16(directoryView, offset + 14, 45);
- setBigUint64(directoryView, offset + 24, BigInt(filesLength));
- setBigUint64(directoryView, offset + 32, BigInt(filesLength));
- setBigUint64(directoryView, offset + 40, BigInt(directoryDataLength));
- setBigUint64(directoryView, offset + 48, BigInt(directoryOffset));
- setUint32(directoryView, offset + 56, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);
- setBigUint64(directoryView, offset + 64, BigInt(directoryOffset) + BigInt(directoryDataLength));
- setUint32(directoryView, offset + 72, ZIP64_TOTAL_NUMBER_OF_DISKS);
- filesLength = MAX_16_BITS;
- directoryOffset = MAX_32_BITS;
- directoryDataLength = MAX_32_BITS;
- offset += 76;
- }
- setUint32(directoryView, offset, END_OF_CENTRAL_DIR_SIGNATURE);
- setUint16(directoryView, offset + 8, filesLength);
- setUint16(directoryView, offset + 10, filesLength);
- setUint32(directoryView, offset + 12, directoryDataLength);
- setUint32(directoryView, offset + 16, directoryOffset);
- return _await(writer.writeUint8Array(directoryArray), function () {
- return _invokeIgnored(function () {
- if (comment && comment.length) {
- return _awaitIgnored(writer.writeUint8Array(comment));
- }
- });
- });
- });
- var createFileEntry = _async(function (reader, writer, config, options) {
- var rawFilename = options.rawFilename,
- lastAccessDate = options.lastAccessDate,
- creationDate = options.creationDate,
- password = options.password,
- level = options.level,
- zip64 = options.zip64,
- zipCrypto = options.zipCrypto,
- dataDescriptor = options.dataDescriptor,
- dataDescriptorSignature = options.dataDescriptorSignature,
- directory = options.directory,
- version = options.version,
- versionMadeBy = options.versionMadeBy,
- rawComment = options.rawComment,
- rawExtraField = options.rawExtraField,
- useWebWorkers = options.useWebWorkers,
- onprogress = options.onprogress,
- signal = options.signal,
- encryptionStrength = options.encryptionStrength,
- extendedTimestamp = options.extendedTimestamp,
- msDosCompatible = options.msDosCompatible,
- internalFileAttribute = options.internalFileAttribute,
- externalFileAttribute = options.externalFileAttribute;
- var encrypted = Boolean(password && password.length);
- var compressed = level !== 0 && !directory;
- var rawExtraFieldAES;
- if (encrypted && !zipCrypto) {
- rawExtraFieldAES = new Uint8Array(EXTRAFIELD_DATA_AES.length + 2);
- var extraFieldAESView = getDataView(rawExtraFieldAES);
- setUint16(extraFieldAESView, 0, EXTRAFIELD_TYPE_AES);
- arraySet(rawExtraFieldAES, EXTRAFIELD_DATA_AES, 2);
- setUint8(extraFieldAESView, 8, encryptionStrength);
- } else {
- rawExtraFieldAES = new Uint8Array(0);
- }
- var rawExtraFieldNTFS;
- var rawExtraFieldExtendedTimestamp;
- if (extendedTimestamp) {
- rawExtraFieldExtendedTimestamp = new Uint8Array(9 + (lastAccessDate ? 4 : 0) + (creationDate ? 4 : 0));
- var extraFieldExtendedTimestampView = getDataView(rawExtraFieldExtendedTimestamp);
- setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
- setUint16(extraFieldExtendedTimestampView, 2, rawExtraFieldExtendedTimestamp.length - 4);
- var extraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);
- setUint8(extraFieldExtendedTimestampView, 4, extraFieldExtendedTimestampFlag);
- setUint32(extraFieldExtendedTimestampView, 5, Math.floor(options.lastModDate.getTime() / 1000));
- if (lastAccessDate) {
- setUint32(extraFieldExtendedTimestampView, 9, Math.floor(lastAccessDate.getTime() / 1000));
- }
- if (creationDate) {
- setUint32(extraFieldExtendedTimestampView, 13, Math.floor(creationDate.getTime() / 1000));
- }
- try {
- rawExtraFieldNTFS = new Uint8Array(36);
- var extraFieldNTFSView = getDataView(rawExtraFieldNTFS);
- var lastModTimeNTFS = getTimeNTFS(options.lastModDate);
- setUint16(extraFieldNTFSView, 0, EXTRAFIELD_TYPE_NTFS);
- setUint16(extraFieldNTFSView, 2, 32);
- setUint16(extraFieldNTFSView, 8, EXTRAFIELD_TYPE_NTFS_TAG1);
- setUint16(extraFieldNTFSView, 10, 24);
- setBigUint64(extraFieldNTFSView, 12, lastModTimeNTFS);
- setBigUint64(extraFieldNTFSView, 20, getTimeNTFS(lastAccessDate) || lastModTimeNTFS);
- setBigUint64(extraFieldNTFSView, 28, getTimeNTFS(creationDate) || lastModTimeNTFS);
- } catch (_error) {
- rawExtraFieldNTFS = new Uint8Array(0);
- }
- } else {
- rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = new Uint8Array(0);
- }
- var fileEntry = {
- version: version || VERSION_DEFLATE,
- versionMadeBy: versionMadeBy,
- zip64: zip64,
- directory: Boolean(directory),
- filenameUTF8: true,
- rawFilename: rawFilename,
- commentUTF8: true,
- rawComment: rawComment,
- rawExtraFieldZip64: zip64 ? new Uint8Array(EXTRAFIELD_LENGTH_ZIP64 + 4) : new Uint8Array(0),
- rawExtraFieldExtendedTimestamp: rawExtraFieldExtendedTimestamp,
- rawExtraFieldNTFS: rawExtraFieldNTFS,
- rawExtraFieldAES: rawExtraFieldAES,
- rawExtraField: rawExtraField,
- extendedTimestamp: extendedTimestamp,
- msDosCompatible: msDosCompatible,
- internalFileAttribute: internalFileAttribute,
- externalFileAttribute: externalFileAttribute
- };
- var uncompressedSize = fileEntry.uncompressedSize = 0;
- var bitFlag = BITFLAG_LANG_ENCODING_FLAG;
- if (dataDescriptor) {
- bitFlag = bitFlag | BITFLAG_DATA_DESCRIPTOR;
- }
- var compressionMethod = COMPRESSION_METHOD_STORE;
- if (compressed) {
- compressionMethod = COMPRESSION_METHOD_DEFLATE;
- }
- if (zip64) {
- fileEntry.version = fileEntry.version > VERSION_ZIP64 ? fileEntry.version : VERSION_ZIP64;
- }
- if (encrypted) {
- bitFlag = bitFlag | BITFLAG_ENCRYPTED;
- if (!zipCrypto) {
- fileEntry.version = fileEntry.version > VERSION_AES ? fileEntry.version : VERSION_AES;
- compressionMethod = COMPRESSION_METHOD_AES;
- if (compressed) {
- fileEntry.rawExtraFieldAES[9] = COMPRESSION_METHOD_DEFLATE;
- }
- }
- }
- fileEntry.compressionMethod = compressionMethod;
- var headerArray = fileEntry.headerArray = new Uint8Array(26);
- var headerView = getDataView(headerArray);
- setUint16(headerView, 0, fileEntry.version);
- setUint16(headerView, 2, bitFlag);
- setUint16(headerView, 4, compressionMethod);
- var dateArray = new Uint32Array(1);
- var dateView = getDataView(dateArray);
- var lastModDate;
- if (options.lastModDate < MIN_DATE) {
- lastModDate = MIN_DATE;
- } else if (options.lastModDate > MAX_DATE) {
- lastModDate = MAX_DATE;
- } else {
- lastModDate = options.lastModDate;
- }
- setUint16(dateView, 0, (lastModDate.getHours() << 6 | lastModDate.getMinutes()) << 5 | lastModDate.getSeconds() / 2);
- setUint16(dateView, 2, (lastModDate.getFullYear() - 1980 << 4 | lastModDate.getMonth() + 1) << 5 | lastModDate.getDate());
- var rawLastModDate = dateArray[0];
- setUint32(headerView, 6, rawLastModDate);
- setUint16(headerView, 22, rawFilename.length);
- var extraFieldLength = rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length + fileEntry.rawExtraField.length;
- setUint16(headerView, 24, extraFieldLength);
- var localHeaderArray = new Uint8Array(30 + rawFilename.length + extraFieldLength);
- var localHeaderView = getDataView(localHeaderArray);
- setUint32(localHeaderView, 0, LOCAL_FILE_HEADER_SIGNATURE);
- arraySet(localHeaderArray, headerArray, 4);
- arraySet(localHeaderArray, rawFilename, 30);
- arraySet(localHeaderArray, rawExtraFieldAES, 30 + rawFilename.length);
- arraySet(localHeaderArray, rawExtraFieldExtendedTimestamp, 30 + rawFilename.length + rawExtraFieldAES.length);
- arraySet(localHeaderArray, rawExtraFieldNTFS, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length);
- arraySet(localHeaderArray, fileEntry.rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
- var result;
- var compressedSize = 0;
- return _invoke(function () {
- if (reader) {
- return _await(createCodec(config.Deflate, {
- codecType: CODEC_DEFLATE,
- level: level,
- password: password,
- encryptionStrength: encryptionStrength,
- zipCrypto: encrypted && zipCrypto,
- passwordVerification: encrypted && zipCrypto && rawLastModDate >> 8 & 0xFF,
- signed: true,
- compressed: compressed,
- encrypted: encrypted,
- useWebWorkers: useWebWorkers
- }, config), function (codec) {
- return _await(writer.writeUint8Array(localHeaderArray), function () {
- fileEntry.dataWritten = true;
- return _await(processData(codec, reader, writer, 0, function () {
- return reader.size;
- }, config, {
- onprogress: onprogress,
- signal: signal
- }), function (_processData) {
- result = _processData;
- uncompressedSize = fileEntry.uncompressedSize = reader.size;
- compressedSize = result.length;
- });
- });
- });
- } else {
- return _await(writer.writeUint8Array(localHeaderArray), function () {
- fileEntry.dataWritten = true;
- });
- }
- }, function () {
- var dataDescriptorArray = new Uint8Array(0);
- var dataDescriptorView,
- dataDescriptorOffset = 0;
- if (dataDescriptor) {
- dataDescriptorArray = new Uint8Array(zip64 ? dataDescriptorSignature ? 24 : 20 : dataDescriptorSignature ? 16 : 12);
- dataDescriptorView = getDataView(dataDescriptorArray);
- if (dataDescriptorSignature) {
- dataDescriptorOffset = 4;
- setUint32(dataDescriptorView, 0, DATA_DESCRIPTOR_RECORD_SIGNATURE);
- }
- }
- if (reader) {
- var signature = result.signature;
- if ((!encrypted || zipCrypto) && signature !== undefined) {
- setUint32(headerView, 10, signature);
- fileEntry.signature = signature;
- if (dataDescriptor) {
- setUint32(dataDescriptorView, dataDescriptorOffset, signature);
- }
- }
- if (zip64) {
- var rawExtraFieldZip64View = getDataView(fileEntry.rawExtraFieldZip64);
- setUint16(rawExtraFieldZip64View, 0, EXTRAFIELD_TYPE_ZIP64);
- setUint16(rawExtraFieldZip64View, 2, EXTRAFIELD_LENGTH_ZIP64);
- setUint32(headerView, 14, MAX_32_BITS);
- setBigUint64(rawExtraFieldZip64View, 12, BigInt(compressedSize));
- setUint32(headerView, 18, MAX_32_BITS);
- setBigUint64(rawExtraFieldZip64View, 4, BigInt(uncompressedSize));
- if (dataDescriptor) {
- setBigUint64(dataDescriptorView, dataDescriptorOffset + 4, BigInt(compressedSize));
- setBigUint64(dataDescriptorView, dataDescriptorOffset + 12, BigInt(uncompressedSize));
- }
- } else {
- setUint32(headerView, 14, compressedSize);
- setUint32(headerView, 18, uncompressedSize);
- if (dataDescriptor) {
- setUint32(dataDescriptorView, dataDescriptorOffset + 4, compressedSize);
- setUint32(dataDescriptorView, dataDescriptorOffset + 8, uncompressedSize);
- }
- }
- }
- return _invoke(function () {
- if (dataDescriptor) {
- return _awaitIgnored(writer.writeUint8Array(dataDescriptorArray));
- }
- }, function () {
- var length = localHeaderArray.length + compressedSize + dataDescriptorArray.length;
- Object.assign(fileEntry, {
- compressedSize: compressedSize,
- lastModDate: lastModDate,
- rawLastModDate: rawLastModDate,
- creationDate: creationDate,
- lastAccessDate: lastAccessDate,
- encrypted: encrypted,
- length: length
- });
- return fileEntry;
- });
- });
- });
- var getFileEntry = _async(function (zipWriter, name, reader, options) {
- var files = zipWriter.files;
- var writer = zipWriter.writer;
- var previousFileEntry = Array.from(files.values()).pop();
- var fileEntry = {};
- var bufferedWrite;
- var resolveLockUnbufferedWrite;
- var resolveLockCurrentFileEntry;
- files.set(name, fileEntry);
- return _finallyRethrows(function () {
- return _catch(function () {
- var lockPreviousFileEntry;
- var fileWriter;
- var lockCurrentFileEntry;
- if (options.keepOrder) {
- lockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;
- }
- fileEntry.lock = lockCurrentFileEntry = new Promise(function (resolve) {
- return resolveLockCurrentFileEntry = resolve;
- });
- return _invoke(function () {
- if (options.bufferedWrite || zipWriter.lockWrite || !options.dataDescriptor) {
- fileWriter = new BlobWriter();
- fileWriter.init();
- bufferedWrite = true;
- } else {
- zipWriter.lockWrite = new Promise(function (resolve) {
- return resolveLockUnbufferedWrite = resolve;
- });
- return _invoke(function () {
- if (!writer.initialized) {
- return _awaitIgnored(writer.init());
- }
- }, function () {
- fileWriter = writer;
- });
- }
- }, function () {
- return _await(createFileEntry(reader, fileWriter, zipWriter.config, options), function (_createFileEntry) {
- fileEntry = _createFileEntry;
- fileEntry.lock = lockCurrentFileEntry;
- files.set(name, fileEntry);
- fileEntry.filename = name;
- return _invoke(function () {
- if (bufferedWrite) {
- var indexWrittenData = 0;
- var blob = fileWriter.getData();
- return _await(Promise.all([zipWriter.lockWrite, lockPreviousFileEntry]), function () {
- var pendingFileEntry;
- return _continue(_do(function () {
- pendingFileEntry = Array.from(files.values()).find(function (fileEntry) {
- return fileEntry.writingBufferedData;
- });
- return _invokeIgnored(function () {
- if (pendingFileEntry) {
- return _awaitIgnored(pendingFileEntry.lock);
- }
- });
- }, function () {
- return !!pendingFileEntry && !!pendingFileEntry.lock;
- }), function () {
- fileEntry.writingBufferedData = true;
- return _invoke(function () {
- if (!options.dataDescriptor) {
- var headerLength = 26;
- return _await(sliceAsArrayBuffer(blob, 0, headerLength), function (arrayBuffer) {
- var arrayBufferView = new DataView(arrayBuffer);
- if (!fileEntry.encrypted || options.zipCrypto) {
- setUint32(arrayBufferView, 14, fileEntry.signature);
- }
- if (fileEntry.zip64) {
- setUint32(arrayBufferView, 18, MAX_32_BITS);
- setUint32(arrayBufferView, 22, MAX_32_BITS);
- } else {
- setUint32(arrayBufferView, 18, fileEntry.compressedSize);
- setUint32(arrayBufferView, 22, fileEntry.uncompressedSize);
- }
- return _await(writer.writeUint8Array(new Uint8Array(arrayBuffer)), function () {
- indexWrittenData = headerLength;
- });
- });
- }
- }, function () {
- return _await(writeBlob(writer, blob, indexWrittenData), function () {
- delete fileEntry.writingBufferedData;
- });
- });
- });
- });
- }
- }, function () {
- fileEntry.offset = zipWriter.offset;
- if (fileEntry.zip64) {
- var rawExtraFieldZip64View = getDataView(fileEntry.rawExtraFieldZip64);
- setBigUint64(rawExtraFieldZip64View, 20, BigInt(fileEntry.offset));
- } else if (fileEntry.offset >= MAX_32_BITS) {
- throw new Error(ERR_UNSUPPORTED_FORMAT);
- }
- zipWriter.offset += fileEntry.length;
- return fileEntry;
- });
- });
- });
- }, function (error) {
- if (bufferedWrite && fileEntry.writingBufferedData || !bufferedWrite && fileEntry.dataWritten) {
- error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
- if (fileEntry.uncompressedSize) {
- zipWriter.offset += fileEntry.uncompressedSize;
- }
- }
- files.delete(name);
- throw error;
- });
- }, function (_wasThrown2, _result3) {
- resolveLockCurrentFileEntry();
- if (resolveLockUnbufferedWrite) {
- resolveLockUnbufferedWrite();
- }
- return _rethrow(_wasThrown2, _result3);
- });
- });
- var addFile = _async(function (zipWriter, name, reader, options) {
- name = name.trim();
- if (options.directory && !name.endsWith(DIRECTORY_SIGNATURE)) {
- name += DIRECTORY_SIGNATURE;
- } else {
- options.directory = name.endsWith(DIRECTORY_SIGNATURE);
- }
- if (zipWriter.files.has(name)) {
- throw new Error(ERR_DUPLICATED_NAME);
- }
- var rawFilename = encodeText(name);
- if (rawFilename.length > MAX_16_BITS) {
- throw new Error(ERR_INVALID_ENTRY_NAME);
- }
- var comment = options.comment || "";
- var rawComment = encodeText(comment);
- if (rawComment.length > MAX_16_BITS) {
- throw new Error(ERR_INVALID_ENTRY_COMMENT);
- }
- var version = zipWriter.options.version || options.version || 0;
- if (version > MAX_16_BITS) {
- throw new Error(ERR_INVALID_VERSION);
- }
- var versionMadeBy = zipWriter.options.versionMadeBy || options.versionMadeBy || 20;
- if (versionMadeBy > MAX_16_BITS) {
- throw new Error(ERR_INVALID_VERSION);
- }
- var lastModDate = getOptionValue(zipWriter, options, "lastModDate") || new Date();
- var lastAccessDate = getOptionValue(zipWriter, options, "lastAccessDate");
- var creationDate = getOptionValue(zipWriter, options, "creationDate");
- var password = getOptionValue(zipWriter, options, "password");
- var encryptionStrength = getOptionValue(zipWriter, options, "encryptionStrength") || 3;
- var zipCrypto = getOptionValue(zipWriter, options, "zipCrypto");
- if (password !== undefined && encryptionStrength !== undefined && (encryptionStrength < 1 || encryptionStrength > 3)) {
- throw new Error(ERR_INVALID_ENCRYPTION_STRENGTH);
- }
- var rawExtraField = new Uint8Array(0);
- var extraField = options.extraField;
- if (extraField) {
- var extraFieldSize = 0;
- var offset = 0;
- extraField.forEach(function (data) {
- return extraFieldSize += 4 + data.length;
- });
- rawExtraField = new Uint8Array(extraFieldSize);
- extraField.forEach(function (data, type) {
- if (type > MAX_16_BITS) {
- throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
- }
- if (data.length > MAX_16_BITS) {
- throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
- }
- arraySet(rawExtraField, new Uint16Array([type]), offset);
- arraySet(rawExtraField, new Uint16Array([data.length]), offset + 2);
- arraySet(rawExtraField, data, offset + 4);
- offset += 4 + data.length;
- });
- }
- var extendedTimestamp = getOptionValue(zipWriter, options, "extendedTimestamp");
- if (extendedTimestamp === undefined) {
- extendedTimestamp = true;
- }
- var maximumCompressedSize = 0;
- var keepOrder = getOptionValue(zipWriter, options, "keepOrder");
- if (keepOrder === undefined) {
- keepOrder = true;
- }
- var uncompressedSize = 0;
- var msDosCompatible = getOptionValue(zipWriter, options, "msDosCompatible");
- if (msDosCompatible === undefined) {
- msDosCompatible = true;
- }
- var internalFileAttribute = getOptionValue(zipWriter, options, "internalFileAttribute") || 0;
- var externalFileAttribute = getOptionValue(zipWriter, options, "externalFileAttribute") || 0;
- return _invoke(function () {
- if (reader) {
- return _invoke(function () {
- if (!reader.initialized) {
- return _awaitIgnored(reader.init());
- }
- }, function () {
- uncompressedSize = reader.size;
- maximumCompressedSize = getMaximumCompressedSize(uncompressedSize);
- });
- }
- }, function () {
- var zip64 = options.zip64 || zipWriter.options.zip64 || false;
- if (zipWriter.offset + zipWriter.pendingCompressedSize >= MAX_32_BITS || uncompressedSize >= MAX_32_BITS || maximumCompressedSize >= MAX_32_BITS) {
- if (options.zip64 === false || zipWriter.options.zip64 === false || !keepOrder) {
- throw new Error(ERR_UNSUPPORTED_FORMAT);
- } else {
- zip64 = true;
- }
- }
- zipWriter.pendingCompressedSize += maximumCompressedSize;
- return _await(Promise.resolve(), function () {
- var level = getOptionValue(zipWriter, options, "level");
- var useWebWorkers = getOptionValue(zipWriter, options, "useWebWorkers");
- var bufferedWrite = getOptionValue(zipWriter, options, "bufferedWrite");
- var dataDescriptor = getOptionValue(zipWriter, options, "dataDescriptor");
- var dataDescriptorSignature = getOptionValue(zipWriter, options, "dataDescriptorSignature");
- var signal = getOptionValue(zipWriter, options, "signal");
- if (dataDescriptor === undefined) {
- dataDescriptor = true;
- }
- if (dataDescriptor && dataDescriptorSignature === undefined) {
- dataDescriptorSignature = false;
- }
- return _await(getFileEntry(zipWriter, name, reader, Object.assign({}, options, {
- rawFilename: rawFilename,
- rawComment: rawComment,
- version: version,
- versionMadeBy: versionMadeBy,
- lastModDate: lastModDate,
- lastAccessDate: lastAccessDate,
- creationDate: creationDate,
- rawExtraField: rawExtraField,
- zip64: zip64,
- password: password,
- level: level,
- useWebWorkers: useWebWorkers,
- encryptionStrength: encryptionStrength,
- extendedTimestamp: extendedTimestamp,
- zipCrypto: zipCrypto,
- bufferedWrite: bufferedWrite,
- keepOrder: keepOrder,
- dataDescriptor: dataDescriptor,
- dataDescriptorSignature: dataDescriptorSignature,
- signal: signal,
- msDosCompatible: msDosCompatible,
- internalFileAttribute: internalFileAttribute,
- externalFileAttribute: externalFileAttribute
- })), function (fileEntry) {
- if (maximumCompressedSize) {
- zipWriter.pendingCompressedSize -= maximumCompressedSize;
- }
- Object.assign(fileEntry, {
- name: name,
- comment: comment,
- extraField: extraField
- });
- return new Entry(fileEntry);
- });
- });
- });
- });
- var ERR_DUPLICATED_NAME = "File already exists";
- var ERR_INVALID_COMMENT = "Zip file comment exceeds 64KB";
- var ERR_INVALID_ENTRY_COMMENT = "File entry comment exceeds 64KB";
- var ERR_INVALID_ENTRY_NAME = "File entry name exceeds 64KB";
- var ERR_INVALID_VERSION = "Version exceeds 65535";
- var ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
- var ERR_INVALID_EXTRAFIELD_TYPE = "Extra field type exceeds 65535";
- var ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
- var ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported";
- var EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
- var EXTRAFIELD_LENGTH_ZIP64 = 24;
- var workers = 0;
- var ZipWriter = /*#__PURE__*/function () {
- function ZipWriter(writer) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- _classCallCheck(this, ZipWriter);
- Object.assign(this, {
- writer: writer,
- options: options,
- config: getConfiguration(),
- files: new Map(),
- offset: writer.size,
- pendingCompressedSize: 0,
- pendingEntries: [],
- pendingAddFileCalls: new Set()
- });
- }
- _createClass(ZipWriter, [{
- key: "add",
- value: function add() {
- var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
- var reader = arguments.length > 1 ? arguments[1] : undefined;
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
- try {
- var _this2 = this;
- var zipWriter = _this2;
- return _await(function () {
- if (workers < zipWriter.config.maxWorkers) {
- workers++;
- var promiseAddFile;
- return _finallyRethrows(function () {
- promiseAddFile = addFile(zipWriter, name, reader, options);
- _this2.pendingAddFileCalls.add(promiseAddFile);
- return _await(promiseAddFile);
- }, function (_wasThrown, _result) {
- _this2.pendingAddFileCalls.delete(promiseAddFile);
- workers--;
- var pendingEntry = zipWriter.pendingEntries.shift();
- if (pendingEntry) {
- zipWriter.add(pendingEntry.name, pendingEntry.reader, pendingEntry.options).then(pendingEntry.resolve).catch(pendingEntry.reject);
- }
- return _rethrow(_wasThrown, _result);
- });
- } else {
- return new Promise(function (resolve, reject) {
- return zipWriter.pendingEntries.push({
- name: name,
- reader: reader,
- options: options,
- resolve: resolve,
- reject: reject
- });
- });
- }
- }());
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }, {
- key: "close",
- value: function close(comment) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- try {
- var _this4 = this;
- if (comment === undefined) comment = new Uint8Array(0);
- return _await(_continue(_for(function () {
- return !!_this4.pendingAddFileCalls.size;
- }, void 0, function () {
- return _awaitIgnored(Promise.all(Array.from(_this4.pendingAddFileCalls)));
- }), function () {
- return _await(closeFile(_this4, comment, options), function () {
- return _this4.writer.getData();
- });
- }));
- } catch (e) {
- return Promise.reject(e);
- }
- }
- }]);
- return ZipWriter;
- }();
- function sliceAsArrayBuffer(blob, start, end) {
- if (blob.arrayBuffer) {
- if (start || end) {
- return blob.slice(start, end).arrayBuffer();
- } else {
- return blob.arrayBuffer();
- }
- } else {
- var fileReader = new FileReader();
- return new Promise(function (resolve, reject) {
- fileReader.onload = function (event) {
- return resolve(event.target.result);
- };
- fileReader.onerror = function () {
- return reject(fileReader.error);
- };
- fileReader.readAsArrayBuffer(start || end ? blob.slice(start, end) : blob);
- });
- }
- }
- function getTimeNTFS(date) {
- if (date) {
- return (BigInt(date.getTime()) + BigInt(11644473600000)) * BigInt(10000);
- }
- }
- function getOptionValue(zipWriter, options, name) {
- return options[name] === undefined ? zipWriter.options[name] : options[name];
- }
- function getMaximumCompressedSize(uncompressedSize) {
- return uncompressedSize + 5 * (Math.floor(uncompressedSize / 16383) + 1);
- }
- function setUint8(view, offset, value) {
- view.setUint8(offset, value);
- }
- function setUint16(view, offset, value) {
- view.setUint16(offset, value, true);
- }
- function setUint32(view, offset, value) {
- view.setUint32(offset, value, true);
- }
- function setBigUint64(view, offset, value) {
- view.setBigUint64(offset, value, true);
- }
- function arraySet(array, typedArray, offset) {
- array.set(typedArray, offset);
- }
- function getDataView(array) {
- return new DataView(array.buffer);
- }
- /*
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- var baseURL;
- try {
- baseURL = (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('zip-es5.js', document.baseURI).href));
- } catch (error) {// ignored
- }
- configure({
- baseURL: baseURL
- });
- d(configure);
- exports.BlobReader = BlobReader;
- exports.BlobWriter = BlobWriter;
- exports.Data64URIReader = Data64URIReader;
- exports.Data64URIWriter = Data64URIWriter;
- exports.ERR_ABORT = ERR_ABORT;
- exports.ERR_BAD_FORMAT = ERR_BAD_FORMAT;
- exports.ERR_CENTRAL_DIRECTORY_NOT_FOUND = ERR_CENTRAL_DIRECTORY_NOT_FOUND;
- exports.ERR_DUPLICATED_NAME = ERR_DUPLICATED_NAME;
- exports.ERR_ENCRYPTED = ERR_ENCRYPTED;
- exports.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND;
- exports.ERR_EOCDR_NOT_FOUND = ERR_EOCDR_NOT_FOUND;
- exports.ERR_EOCDR_ZIP64_NOT_FOUND = ERR_EOCDR_ZIP64_NOT_FOUND;
- exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
- exports.ERR_HTTP_RANGE = ERR_HTTP_RANGE;
- exports.ERR_INVALID_COMMENT = ERR_INVALID_COMMENT;
- exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
- exports.ERR_INVALID_ENTRY_COMMENT = ERR_INVALID_ENTRY_COMMENT;
- exports.ERR_INVALID_ENTRY_NAME = ERR_INVALID_ENTRY_NAME;
- exports.ERR_INVALID_EXTRAFIELD_DATA = ERR_INVALID_EXTRAFIELD_DATA;
- exports.ERR_INVALID_EXTRAFIELD_TYPE = ERR_INVALID_EXTRAFIELD_TYPE;
- exports.ERR_INVALID_PASSWORD = ERR_INVALID_PASSWORD;
- exports.ERR_INVALID_SIGNATURE = ERR_INVALID_SIGNATURE;
- exports.ERR_INVALID_VERSION = ERR_INVALID_VERSION;
- exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
- exports.ERR_NOT_SEEKABLE_READER = ERR_NOT_SEEKABLE_READER;
- exports.ERR_UNSUPPORTED_COMPRESSION = ERR_UNSUPPORTED_COMPRESSION;
- exports.ERR_UNSUPPORTED_ENCRYPTION = ERR_UNSUPPORTED_ENCRYPTION;
- exports.ERR_UNSUPPORTED_FORMAT = ERR_UNSUPPORTED_FORMAT;
- exports.HttpRangeReader = HttpRangeReader;
- exports.HttpReader = HttpReader;
- exports.ReadableStreamReader = ReadableStreamReader;
- exports.Reader = Reader;
- exports.TextReader = TextReader;
- exports.TextWriter = TextWriter;
- exports.Uint8ArrayReader = Uint8ArrayReader;
- exports.Uint8ArrayWriter = Uint8ArrayWriter;
- exports.WritableStreamWriter = WritableStreamWriter;
- exports.Writer = Writer;
- exports.ZipReader = ZipReader;
- exports.ZipWriter = ZipWriter;
- exports.configure = configure;
- exports.getMimeType = getMimeType;
- exports.initShimAsyncCodec = streamCodecShim;
- exports.terminateWorkers = terminateWorkers;
- Object.defineProperty(exports, '__esModule', { value: true });
- }));
|