ext.js 810 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036
  1. var UDOC={};UDOC.B=function(){var N=new Uint8Array(4),C=N.buffer,O=new Int16Array(C),Y=new Uint16Array(C),D=new Int32Array(C),E=new Uint32Array(C),Z=new Float32Array(C);
  2. return{readShort:function(p,F){N[0]=p[F];N[1]=p[F+1];return O[0]},readUshort:function(p,F){N[0]=p[F];
  3. N[1]=p[F+1];return Y[0]},readInt:function(p,F){N[0]=p[F];N[1]=p[F+1];N[2]=p[F+2];N[3]=p[F+3];return D[0]},readUint:function(p,F){N[0]=p[F];
  4. N[1]=p[F+1];N[2]=p[F+2];N[3]=p[F+3];return E[0]},readUintBE:function(p,F){N[3]=p[F];N[2]=p[F+1];N[1]=p[F+2];
  5. N[0]=p[F+3];return E[0]},readFloat:function(p,F){N[0]=p[F];N[1]=p[F+1];N[2]=p[F+2];N[3]=p[F+3];return Z[0]},readASCII:function(p,F,f){var z="";
  6. for(var W=0;W<f;W++)z+=String.fromCharCode(p[F+W]);return z}}}();UDOC.G={concat:function(N,C){for(var O=0;
  7. O<C.cmds.length;O++)N.cmds.push(C.cmds[O]);for(var O=0;O<C.crds.length;O++)N.crds.push(C.crds[O])},getBB:function(N){var C=1e99,O=1e99,Y=-C,D=-O;
  8. for(var E=0;E<N.length;E+=2){var Z=N[E],p=N[E+1];if(Z<C)C=Z;if(Z>Y)Y=Z;if(p<O)O=p;if(p>D)D=p}return[C,O,Y,D]},rectToPath:function(N){return{cmds:["M","L","L","L","Z"],crds:[N[0],N[1],N[2],N[1],N[2],N[3],N[0],N[3]]}},insideBox:function(N,C){return C[0]<=N[0]&&C[1]<=N[1]&&N[2]<=C[2]&&N[3]<=C[3]},isBox:function(N,C){var O=function(v,P){for(var R=0;
  9. R<8;R+=2){var x=!0;for(var B=0;B<8;B++)if(Math.abs(P[B]-v[B+R&7])>=2){x=!1;break}if(x)return!0}return!1},E=!1;
  10. if(N.cmds.length>10)return!1;var Y=N.cmds.join(""),D=N.crds;if(Y=="MLLLZ"&&D.length==8||(Y=="MLLLLZ"||Y=="MLLLL")&&D.length==10){if(D.length==10)D=D.slice(0,8);
  11. if(C==null){C=[D[0],D[1],D[0],D[1]];for(var Z=0;Z<D.length;Z+=2){var p=D[Z],f=D[Z+1];if(p<C[0])C[0]=p;
  12. if(f<C[1])C[1]=f;if(C[2]<p)C[2]=p;if(C[3]<f)C[3]=f}}var z=C[0],K=C[1],W=C[2],s=C[3];if(!E)E=O(D,[z,K,W,K,W,s,z,s]);
  13. if(!E)E=O(D,[z,s,W,s,W,K,z,K])}return E},boxArea:function(N){var C=N[2]-N[0],O=N[3]-N[1];return C*O},newPath:function(N){N.pth={cmds:[],crds:[]}},moveTo:function(N,C,O){var Y=UDOC.M.multPoint(N.ctm,[C,O]),D=N.pth,E=D.cmds.length;
  14. if(E!=0&&D.cmds[E-1]=="M"){D.cmds.pop();D.crds.pop();D.crds.pop()}N.pth.cmds.push("M");N.pth.crds.push(Y[0],Y[1]);
  15. N.cpos=Y},lineTo:function(N,C,O){var Y=UDOC.M.multPoint(N.ctm,[C,O]);if(N.cpos[0]==Y[0]&&N.cpos[1]==Y[1])return;
  16. N.pth.cmds.push("L");N.pth.crds.push(Y[0],Y[1]);N.cpos=Y},curveTo:function(N,C,O,Y,D,E,Z){var p;if(N.pth.cmds.length==0)UDOC.G.moveTo(N,0,0);
  17. p=UDOC.M.multPoint(N.ctm,[C,O]);C=p[0];O=p[1];p=UDOC.M.multPoint(N.ctm,[Y,D]);Y=p[0];D=p[1];p=UDOC.M.multPoint(N.ctm,[E,Z]);
  18. E=p[0];Z=p[1];N.cpos=p;N.pth.cmds.push("C");N.pth.crds.push(C,O,Y,D,E,Z)},quadCurveTo:function(N,C,O,Y,D){var E;
  19. if(N.pth.cmds.length==0)UDOC.G.moveTo(N,0,0);E=UDOC.M.multPoint(N.ctm,[C,O]);C=E[0];O=E[1];E=UDOC.M.multPoint(N.ctm,[Y,D]);
  20. Y=E[0];D=E[1];N.cpos=E;N.pth.cmds.push("Q");N.pth.crds.push(C,O,Y,D)},closePath:function(N){N.pth.cmds.push("Z")},arc:function(N,C,O,Y,D,E,Z){if(Z)while(E>D)E-=2*Math.PI;
  21. else while(E<D)E+=2*Math.PI;var p=(E-D)/4,F=Math.cos(p/2),f=-Math.sin(p/2),z=(4-F)/3,K=f==0?f:(1-F)*(3-F)/(3*f),W=z,s=-K,v=F,k=-f,P=[F,f],x=[z,K],B=[W,s],h=[v,k],L={cmds:[N.pth.cmds.length==0?"M":"L"],crds:[F,f]},u=[1,0,0,1,0,0];
  22. for(var _=0;_<4;_++){x=UDOC.M.multPoint(u,x);B=UDOC.M.multPoint(u,B);h=UDOC.M.multPoint(u,h);L.crds.push(x[0],x[1],B[0],B[1],h[0],h[1]);
  23. L.cmds.push("C");if(_==0)UDOC.M.rotate(u,-p)}var m=[Y,0,0,Y,C,O];UDOC.M.rotate(u,-D+p/2);UDOC.M.concat(u,m);
  24. UDOC.M.multArray(u,L.crds);UDOC.M.multArray(N.ctm,L.crds);UDOC.G.concat(N.pth,L);var O=L.crds.pop();
  25. C=L.crds.pop();N.cpos=[C,O]},drawRect:function(N,C,O,Y,D){UDOC.G.moveTo(N,C,O);UDOC.G.lineTo(N,C+Y,O);
  26. UDOC.G.lineTo(N,C+Y,O+D);UDOC.G.lineTo(N,C,O+D);UDOC.G.closePath(N)},toPoly:function(N){if(N.cmds[0]!="M"||N.cmds[N.cmds.length-1]!="Z")return null;
  27. for(var C=1;C<N.cmds.length-1;C++)if(N.cmds[C]!="L")return null;var O=[],Y=N.crds.length;if(N.crds[0]==N.crds[Y-2]&&N.crds[1]==N.crds[Y-1])Y-=2;
  28. for(var C=0;C<Y;C+=2)O.push([N.crds[C],N.crds[C+1]]);if(UDOC.G.polyArea(N.crds)<0)O.reverse();return O},fromPoly:function(N){var C={cmds:[],crds:[]};
  29. for(var O=0;O<N.length;O++){C.crds.push(N[O][0],N[O][1]);C.cmds.push(O==0?"M":"L")}C.cmds.push("Z");
  30. return C},polyArea:function(N){if(N.length<6)return 0;var C=N.length-2,O=(N[0]-N[C])*(N[C+1]+N[1]);for(var Y=0;
  31. Y<C;Y+=2)O+=(N[Y+2]-N[Y])*(N[Y+1]+N[Y+3]);return-O*.5},polyClip:function(N,C){var O,Y,D,E,Z=function(W){return(Y[0]-O[0])*(W[1]-O[1])>(Y[1]-O[1])*(W[0]-O[0])},p=function(){var W=[O[0]-Y[0],O[1]-Y[1]],s=[D[0]-E[0],D[1]-E[1]],v=O[0]*Y[1]-O[1]*Y[0],k=D[0]*E[1]-D[1]*E[0],P=1/(W[0]*s[1]-W[1]*s[0]);
  32. return[(v*s[0]-k*W[0])*P,(v*s[1]-k*W[1])*P]},F=N,f,z;O=C[C.length-1];for(z in C){var Y=C[z],K=F;F=[];
  33. D=K[K.length-1];for(f in K){var E=K[f];if(Z(E)){if(!Z(D)){F.push(p())}F.push(E)}else if(Z(D)){F.push(p())}D=E}O=Y}return F}};
  34. UDOC.M={getScale:function(N){return Math.sqrt(Math.abs(N[0]*N[3]-N[1]*N[2]))},translate:function(N,C,O){UDOC.M.concat(N,[1,0,0,1,C,O])},rotate:function(N,C){UDOC.M.concat(N,[Math.cos(C),-Math.sin(C),Math.sin(C),Math.cos(C),0,0])},scale:function(N,C,O){UDOC.M.concat(N,[C,0,0,O,0,0])},concat:function(N,C){var O=N[0],Y=N[1],D=N[2],E=N[3],Z=N[4],p=N[5];
  35. N[0]=O*C[0]+Y*C[2];N[1]=O*C[1]+Y*C[3];N[2]=D*C[0]+E*C[2];N[3]=D*C[1]+E*C[3];N[4]=Z*C[0]+p*C[2]+C[4];
  36. N[5]=Z*C[1]+p*C[3]+C[5]},invert:function(N){var C=N[0],O=N[1],Y=N[2],D=N[3],E=N[4],Z=N[5],p=C*D-O*Y;
  37. N[0]=D/p;N[1]=-O/p;N[2]=-Y/p;N[3]=C/p;N[4]=(Y*Z-D*E)/p;N[5]=(O*E-C*Z)/p},multPoint:function(N,C){var O=C[0],Y=C[1];
  38. return[O*N[0]+Y*N[2]+N[4],O*N[1]+Y*N[3]+N[5]]},multArray:function(N,C){for(var O=0;O<C.length;O+=2){var Y=C[O],D=C[O+1];
  39. C[O]=Y*N[0]+D*N[2]+N[4];C[O+1]=Y*N[1]+D*N[3]+N[5]}}};UDOC.C={srgbGamma:function(N){return N<.0031308?12.92*N:1.055*Math.pow(N,1/2.4)-.055},cmykToRgb:function(N){var C=N[0],Y=N[1],D=N[2],E=N[3],Z=255+C*(-4.387332384609988*C+54.48615194189176*Y+18.82290502165302*D+212.25662451639585*E+-285.2331026137004)+Y*(1.7149763477362134*Y-5.6096736904047315*D+-17.873870861415444*E-5.497006427196366)+D*(-2.5217340131683033*D-21.248923337353073*E+17.5119270841813)+E*(-21.86122147463605*E-189.48180835922747),p=255+C*(8.841041422036149*C+60.118027045597366*Y+6.871425592049007*D+31.159100130055922*E+-79.2970844816548)+Y*(-15.310361306967817*Y+17.575251261109482*D+131.35250912493976*E-190.9453302588951)+D*(4.444339102852739*D+9.8632861493405*E-24.86741582555878)+E*(-20.737325471181034*E-187.80453709719578),F=255+C*(.8842522430003296*C+8.078677503112928*Y+30.89978309703729*D-.23883238689178934*E+-14.183576799673286)+Y*(10.49593273432072*Y+63.02378494754052*D+50.606957656360734*E-112.23884253719248)+D*(.03296041114873217*D+115.60384449646641*E+-193.58209356861505)+E*(-22.33816807309886*E-180.12613974708367);
  40. return[Math.max(0,Math.min(1,Z/255)),Math.max(0,Math.min(1,p/255)),Math.max(0,Math.min(1,F/255))]},labToRgb:function(N){var C=903.3,O=.008856,Y=N[0],E=N[1],Z=N[2],p=(Y+16)/116,F=p*p*p,f=p-Z/200,K=f*f*f,W=E/500+p,s=W*W*W,v=K>O?K:(116*f-16)/C,k=F>O?F:(116*p-16)/C,P=s>O?s:(116*W-16)/C,R=P*96.72,x=k*100,B=v*81.427,h=[R/100,x/100,B/100],L=[3.1338561,-1.6168667,-.4906146,-.9787684,1.9161415,.033454,.0719453,-.2289914,1.4052427],u=[L[0]*h[0]+L[1]*h[1]+L[2]*h[2],L[3]*h[0]+L[4]*h[1]+L[5]*h[2],L[6]*h[0]+L[7]*h[1]+L[8]*h[2]];
  41. for(var S=0;S<3;S++)u[S]=Math.max(0,Math.min(1,UDOC.C.srgbGamma(u[S])));return u}};UDOC.getState=function(N){return{font:UDOC.getFont(),dd:{flat:1},ca:1,colr:[0,0,0],space:"/DeviceGray",CA:1,COLR:[0,0,0],sspace:"/DeviceGray",bmode:"/Normal",SA:!1,OPM:0,AIS:!1,OP:!1,op:!1,SMask:"/None",lwidth:1,lcap:0,ljoin:0,mlimit:10,SM:.1,doff:0,dash:[],ctm:[1,0,0,1,0,0],cpos:[0,0],pth:{cmds:[],crds:[]},cpth:N?UDOC.G.rectToPath(N):null,cpstack:[]}};
  42. UDOC.getFont=function(){return{Tc:0,Tw:0,Th:100,Tl:0,Tf:"Helvetica-Bold",Tfs:1,Tmode:0,Trise:0,Tk:0,Tal:0,Tun:0,Tm:[1,0,0,1,0,0],Tlm:[1,0,0,1,0,0],Trm:[1,0,0,1,0,0]}};
  43. function FromPS(){}FromPS.Parse=function(N,C){N=new Uint8Array(N);var O=0,E=null,Z=null,P=!0;while(!(N[O]==37&&N[O+1]==33))O++;
  44. var Y=FromPS.B.readASCII(N,O,N.length-O),D=Y.split(/[\n\r]+/);for(var p=0;p<D.length;p++){var F=D[p].trim();
  45. if(F.charAt(0)=="%"){F=F.slice(1);while(F.charAt(0)=="%")F=F.slice(1);var f=F.split(":");if(f[0]=="BoundingBox"){E=f[1].trim().split(/[ ]+/).map(parseFloat)}if(F.indexOf("!PS-Adobe-3.0 EPSF-3.0")!=-1)Z=F;
  46. if(F.indexOf("!PS-Adobe-2.0 EPSF-1.2")!=-1)Z=F}}if(Z==null||E==null)E=[0,0,595,842];var z=[],K=FromPS._getDictStack([],{}),W=[{typ:"file",val:{buff:N,off:O}}],s=[],v=FromPS._getEnv(E),k=Date.now();
  47. while(P)P=FromPS.step(z,K,W,s,v,C);if(v.pgOpen)C.ShowPage();C.Done();console.log(Date.now()-k)};FromPS._getDictStack=function(N,C){var O="def undef known begin end currentfile currentdict currentpacking setpacking currentoverprint setoverprint currentglobal setglobal gcheck currentsystemparams setsystemparams currentuserparams setuserparams currentpagedevice setpagedevice currentflat currentlinewidth currentdash currentpoint currentscreen setscreen currenthalftone currentblackgeneration currentundercolorremoval currentcolortransfer internaldict dict string readstring readhexstring readline getinterval putinterval token array aload astore length maxlength matrix count mark counttomark cleartomark dictstack countdictstack makepattern makefont scalefont stringwidth setfont currentcolorspace setcolorspace setcolor _setHSB_ currentgray currentrgbcolor setlinewidth setstrokeadjust setflat setlinecap setlinejoin setmiterlimit setdash clip eoclip clippath pathbbox newpath stroke fill eofill shfill closepath flattenpath showpage print _drawRect_ moveto lineto curveto arc arcn show ashow xshow yshow xyshow widthshow awidthshow charpath cshow rmoveto rlineto rcurveto translate rotate scale concat concatmatrix invertmatrix currentmatrix defaultmatrix setmatrix limitcheck save restore clipsave cliprestore gsave grestore grestoreall usertime readtime flush flushfile readonly executeonly findresource resourcestatus defineresource undefineresource resourceforall image imagemask colorimage xcheck status cachestatus setcachelimit type if ifelse exec stopped stop dup exch copy roll index anchorsearch pop put get load where store repeat for forall pathforall loop exit bind cvi cvr cvs cvx cvn cvlit add sub mul div idiv bitshift mod exp atan neg abs floor ceiling round truncate sqrt ln sin cos srand rand == transform itransform dtransform idtransform eq ge gt le lt ne and or not filter begincmap endcmap begincodespacerange endcodespacerange beginbfrange endbfrange beginbfchar endbfchar".split(" ").concat(N),Y="image colorimage repeat for forall loop".split(" ");
  48. for(var D=0;D<Y.length;D++)O.push(Y[D]+"---");FromPS._myOps=FromPS.makeProcs({CIDSystemInfo:"/CIDSystemInfo",findfont:"/Font findresource",definefont:"/Font defineresource",undefinefont:"/Font undefineresource",selectfont:"exch findfont exch scalefont setfont",rectfill:"gsave newpath _drawRect_ fill grestore",rectstroke:"gsave newpath _drawRect_ stroke grestore",rectclip:"newpath _drawRect_ clip newpath",setgray:"/DeviceGray setcolorspace setcolor",setrgbcolor:"/DeviceRGB setcolorspace setcolor",sethsbcolor:"/DeviceRGB setcolorspace _setHSB_",setcmykcolor:"/DeviceCMYK setcolorspace setcolor",setpattern:"/Pattern setcolorspace setcolor"});
  49. for(var E in FromPS._myOps)O.push(E);var Z=C,p={},f={},z={},K={};p.systemdict={typ:"dict",val:p};p.globaldict={typ:"dict",val:f};
  50. p.userdict={typ:"dict",val:z};p.statusdict={typ:"dict",val:K};p.GlobalFontDirectory=p.SharedFontDirectory={typ:"dict",val:{}};
  51. p.FontDirectory={typ:"dict",val:{}};p.$error={typ:"dict",val:{}};p.errordict={typ:"dict",val:FromPS.makeProcs({handleerror:""})};
  52. p.null={typ:"null",val:null};p.true={typ:"boolean",val:!0};p.false={typ:"boolean",val:!1};p.product={typ:"string",val:FromPS.makeStr("Photopea")};
  53. p.version={typ:"string",val:[51]};p.languagelevel={typ:"integer",val:3};for(var D=0;D<O.length;D++)p[O[D]]={typ:"operator",val:O[D]};
  54. for(var W in Z)p[W]=Z[W];return[p,f,z]};FromPS._getEnv=function(N){var C={bb:N,gst:UDOC.getState(N),packing:!1,overprint:!1,global:!1,systemparams:{MaxPatternCache:{type:"integer",val:5e3}},userparams:{},pagedevice:{PageSize:{typ:"array",val:[{typ:"real",val:N[2]},{typ:"real",val:N[3]}]}},cmnum:0,fnt:null,res:{},pgOpen:!1,funs:FromPS.makeProcs({blackgeneration:"",undercolorremoval:"pop 0"})},O;
  55. O="Font CIDFont CMap FontSet Form Pattern ProcSet Halftone ColorRendering IdiomSet InkParams TrapParams OutputDevice ControlLanguage Localization PDL HWOptions".split(" ");
  56. for(var Y=0;Y<O.length;Y++)C.res[O[Y]]={typ:"dict",val:{},maxl:1e3};O=["Encoding","ColorSpace"];for(var Y=0;
  57. Y<O.length;Y++)C.res[O[Y]]={typ:"array",val:[]};C.res.Category={typ:"dict",val:C.res};C.res.ColorSpace.val=[{typ:"array",val:[{typ:"name",val:"/DeviceRGB"}]},{typ:"array",val:[{typ:"name",val:"/DeviceCMYK"}]},{typ:"array",val:[{typ:"name",val:"/DeviceGray"}]}];
  58. for(var Y=0;Y<O.length;Y++)C.res[O[Y]]={typ:"dict",val:{},maxl:1e3};return C};FromPS.makeProcs=function(N){var C={};
  59. for(var O in N){var Y=N[O].replace(/ +/g," ").split(" ");C[O]={typ:"procedure",val:[]};for(var D=0;
  60. D<Y.length;D++)C[O].val.push({typ:"name",val:Y[D]})}return C};FromPS.addProc=function(N,C){if(N.val.length==0)return;
  61. if(N.typ!="procedure"){console.log(N);throw N.typ}C.push({typ:"procedure",val:N.val,off:0})};FromPS.stepC=0;
  62. FromPS._f32=new Float32Array(1);FromPS.step=function(N,C,O,Y,D,E,Z,p){var F=Date.now(),f=FromPS._f32,z=FromPS.getToken,K=D.gst,W=z(O,C),k=!1;
  63. if(W==null)return!1;if(p&&W.typ=="string"&&FromPS.readStr(W.val)=="def")W={typ:"operator",val:"def"};
  64. var s=W.typ,v=W.val;if(isNaN(K.cpos[0]))throw"e";if(k)console.log(W,N.slice(0));if("integer real dict boolean string array procedure null file".split(" ").indexOf(s)!=-1){N.push(W);
  65. return!0}if(s!="name"&&s!="operator")throw"e";if(v.charAt(0)=="/"){N.push(W)}else if(v.startsWith("II*"))return!1;
  66. else if(v=="{"){var P=[],R={typ:"procedure",val:[]},x=z(O,C);while(!0){if(x.val=="{"){var B={typ:"procedure",val:[]};
  67. R.val.push(B);P.push(R);R=B}else if(x.val=="}"){if(P.length==0)break;R=P.pop()}else R.val.push(x);x=z(O,C)}N.push(R)}else if(v=="["||v=="<<")N.push({typ:"mark"});
  68. else if(v=="]"||v==">>"){var h=[];while(N.length!=0){var L=N.pop();if(L.typ=="mark")break;h.push(L)}h.reverse();
  69. if(v=="]")N.push({typ:"array",val:h});else{var u={};for(var S=0;S<h.length;S+=2)u[h[S].val.slice(1)]=h[S+1];
  70. N.push({typ:"dict",val:u,maxl:1e3})}}else{var $=FromPS.getFromStacks(v,C);if(k)console.log("---",$);
  71. if($==null){if(p)return!1;else{console.log("unknown operator",v,N,C);throw"e"}}else if($.typ=="procedure")FromPS.addProc($,O);
  72. else if("array string dict null integer real boolean state name file".split(" ").indexOf($.typ)!=-1)N.push($);
  73. else if($.typ=="operator"){var _=$.val,m="known if ifelse currentpacking setpacking dict dup begin end put bind def undef where pop get exec ge stop stopped cvr string not and".split(" ");
  74. if(FromPS._myOps[_]){FromPS.addProc(FromPS._myOps[_],O)}else if(_=="flattenpath"||_=="limitcheck"){}else if(_=="def"){var y=N.pop(),bu=N.pop();
  75. if(bu==null&&p)return!1;bu=FromPS.getDKey(bu);C[C.length-1][bu]=y}else if(_=="undef"||_=="known"){var b=FromPS.getDKey(N.pop()),cs=N.pop(),w=cs.val;
  76. if(_=="undef")delete w[b];else N.push({typ:"boolean",val:cs.typ!="null"&&w[b]!=null})}else if(_=="internaldict"){var i=N.pop().val;
  77. N.push({typ:"dict",val:{},maxl:1e3})}else if(_=="dict"){var i=N.pop().val;N.push({typ:"dict",val:{},maxl:i})}else if(_=="string"){var i=N.pop().val;
  78. N.push({typ:"string",val:new Array(i)})}else if(_=="readstring"||_=="readhexstring"){var q=N.pop(),i=q.val.length,ck=N.pop(),n=FromPS.GetFile(ck).val;
  79. if(_=="readstring"){for(var S=0;S<i;S++)q.val[S]=n.buff[n.off+S];n.off+=i}else FromPS.readHex(n,i,q.val);
  80. N.push(q,{typ:"boolean",val:!0})}else if(_=="readline"){var q=N.pop(),n=FromPS.GetFile(N.pop()).val,S=0;
  81. if(FromPS.isEOL(n.buff[n.off]))n.off++;while(S<q.val.length){var aC=n.buff[n.off];n.off++;if(aC==null)throw"e";
  82. if(FromPS.isEOL(aC)){if(n.buff[n.off]==10)n.off++;break}q.val[S]=aC;S++}N.push({typ:"string",val:q.val.slice(0,S)});
  83. N.push({typ:"boolean",val:!0})}else if(_=="getinterval"){var aI=N.pop().val,bM=N.pop().val,bD=N.pop(),a=[];
  84. if(bD.typ=="string"||bD.typ=="array")for(var S=0;S<aI;S++)a.push(bD.val[bM+S]);else throw"e";N.push({typ:bD.typ,val:a})}else if(_=="putinterval"){var bD=N.pop(),bM=N.pop().val,c2=N.pop();
  85. if(bM+bD.val.length>=c2.val.length){}else if(bD.typ=="string")for(var S=0;S<bD.val.length;S++)c2.val[bM+S]=bD.val[S];
  86. else throw"e"}else if(_=="token"){var bD=N.pop();if(bD.typ!="string")throw"e";var h=[];for(var S=0;S<bD.val.length;
  87. S++){var cp=bD.val[S];if(cp==null)break;h.push(cp)}var a1={buff:new Uint8Array(h),off:0},W=z([{typ:"file",val:a1}],C),cn=[];
  88. for(var S=a1.off;S<h.length;S++)cn.push(h[S]);N.push({typ:"string",val:cn},W,{typ:"boolean",val:!0})}else if(_=="array"){var i=N.pop().val;
  89. N.push({typ:"array",val:new Array(i)})}else if(_=="aload"){var L=N.pop(),h=L.val;for(var S=0;S<h.length;
  90. S++)N.push(h[S]);N.push(L)}else if(_=="astore"){var L=N.pop(),h=L.val;for(var S=0;S<h.length;S++)h[h.length-1-S]=N.pop();
  91. N.push(L)}else if(_=="length"){var L=N.pop(),s=L.typ,i=0;if(s=="array")i=L.val.length;else if(s=="procedure")i=L.val.length;
  92. else if(s=="dict")i=Object.keys(L.val).length;else if(s=="string")i=L.val.length;else{console.log(L);
  93. throw"e"}N.push({typ:"integer",val:i})}else if(_=="maxlength"){var bn=N.pop();N.push({typ:"integer",val:bn.maxl})}else if(_=="matrix"){N.push({typ:"array",val:FromPS.makeArr([1,0,0,1,0,0],"real")})}else if(_=="count"){N.push({typ:"integer",val:N.length})}else if(_=="mark"){N.push({typ:"mark"})}else if(_=="counttomark"||_=="cleartomark"){var b9=0;
  94. while(b9<N.length&&N[N.length-1-b9].typ!="mark")b9++;if(_=="cleartomark")for(var S=0;S<b9+1;S++)N.pop();
  95. else N.push({typ:"integer",val:b9})}else if(_=="dictstack"){var h=N.pop();for(var S=0;S<C.length;S++)h.val[S]={typ:"dict",val:C[S],maxl:1e3};
  96. N.push(h)}else if(_=="countdictstack"){var ae=0;for(var S=0;S<N.length;S++)if(N[S].typ=="dict")ae++;
  97. N.push({typ:"integer",val:ae})}else if(_=="begin"){var L=N.pop(),w=L.val;if(w==null||L.typ!="dict"){console.log(L,C);
  98. throw"e"}C.push(w)}else if(_=="end"){C.pop()}else if(_=="currentfile"){var aT;for(var S=O.length-1;S>=0;
  99. S--)if(O[S].typ=="file"){aT=O[S];break}N.push({typ:"file",val:aT.val})}else if(_=="currentdict"){var w=C[C.length-1];
  100. N.push({typ:"dict",val:w,maxl:1e3})}else if("currentpacking currentoverprint currentglobal currentsystemparams currentuserparams currentpagedevice".split(" ").indexOf(_)!=-1){var y=D[_.slice(7)];
  101. N.push({typ:typeof y=="boolean"?"boolean":"dict",val:y})}else if(_=="gcheck"){var H=N.pop();N.push({typ:"boolean",val:!1})}else if("setpacking setoverprint setglobal setsystemparams setuserparams setpagedevice".split(" ").indexOf(_)!=-1){D[_.slice(3)]=N.pop().val}else if(_=="currentflat"){N.push({typ:"real",val:1})}else if(_=="currentlinewidth"){N.push({typ:"real",val:K.lwidth})}else if(_=="currentdash"){N.push({typ:"array",val:FromPS.makeArr(K.dash,"integer")},{typ:"real",val:K.doff})}else if(_=="currentpoint"){var cj=K.ctm.slice(0);
  102. UDOC.M.invert(cj);var bt=UDOC.M.multPoint(cj,K.cpos);N.push({typ:"real",val:bt[0]},{typ:"real",val:bt[1]})}else if(_=="currentscreen"){N.push({typ:"int",val:60},{typ:"real",val:0},{typ:"real",val:0})}else if(_=="setscreen"){N.pop();
  103. N.pop();N.pop()}else if(_=="currenthalftone"){N.push({typ:"dict",val:{},maxl:1e3})}else if(_=="currentblackgeneration"||_=="currentundercolorremoval"){N.push(D.funs[_.slice(7)])}else if(_=="currentcolortransfer"){for(var S=0;
  104. S<4;S++)N.push(D.funs.blackgeneration)}else if(_=="findresource"){var aM=N.pop().val.slice(1),b2=N.pop(),b=b2.val.slice(1),bw;
  105. if(aM=="Font"){D.res[aM].val[b]={typ:"dict",val:{FontType:{typ:"integer",val:1},FontMatrix:{typ:"array",val:FromPS.makeArr([1,0,0,1,0,0],"real")},FontName:b2,FID:{typ:"fontID",val:Math.floor(Math.random()*16777215)},Encoding:{typ:"array",val:[]},FontBBox:{typ:"array",val:FromPS.makeArr([0,0,1,1],"real")},PaintType:{typ:"integer",val:0}}}}if(aM=="Category"&&b=="Generic")bw={typ:"dict",val:{},maxl:1e3};
  106. else if((aM=="ProcSet"||aM=="Procset")&&b=="CIDInit")bw={typ:"dict",val:{},maxl:1e3};else bw=D.res[aM].val[b];
  107. if(bw==null)throw"e";N.push(bw)}else if(_=="resourcestatus"){var aM=N.pop().val.slice(1),b=N.pop().val.slice(1),bw=D.res[aM].val[b];
  108. if(bw){N.push({typ:"integer",val:1});N.push({typ:"integer",val:Object.keys(bw.val).length})}N.push({typ:"boolean",val:bw!=null})}else if(_=="defineresource"){var aM=N.pop().val.slice(1),c3=N.pop(),b=N.pop().val.slice(1);
  109. D.res[aM].val[b]=c3;N.push(c3)}else if(_=="undefineresource"){var aM=N.pop().val.slice(1),b=N.pop().val.slice(1);
  110. delete D.res[aM].val[b]}else if(_=="resourceforall"){var aM=N.pop().val.slice(1),cb=N.pop().val,g=N.pop(),cl=N.pop().val;
  111. if(cl.length!=1||cl[0]!=42)throw"e";var aP=D.res[aM].val;for(var b in aP){var q=cb.slice(0);for(var S=0;
  112. S<b.length;S++)q[S]=b[S];FromPS.addProc(g,O);FromPS.addProc({typ:"procedure",val:[{typ:"string",val:q}]},O)}}else if(_=="image"||_=="colorimage"){var bc,aS,bp,b$,bZ=1,c0=!1,bb=[],top=N.pop();
  113. N.push(top);if(_=="image"&&top.typ=="dict"){var bE=N.pop().val;bc=bE.Width.val;aS=bE.Height.val;bp=bE.BitsPerComponent.val;
  114. b$=FromPS.readArr(bE.ImageMatrix.val);bZ=bE.NComponents?bE.NComponents.val:1;c0=bE.MultipleDataSources?bE.MultipleDataSources.val:!1;
  115. bb=bE.DataSource.val;if(bE.DataSource.typ=="file")bb=[bE.DataSource]}else{if(_=="colorimage"){bZ=N.pop().val;
  116. c0=N.pop().val}if(c0){bb[2]=N.pop();bb[1]=N.pop();bb[0]=N.pop()}else bb=[N.pop()];var b$=FromPS.readArr(N.pop().val),bp=N.pop().val,aS=N.pop().val,bc=N.pop().val}if(bZ!=1&&bZ!=3&&bZ!=4)throw"unsupported number of channels "+bZ;
  117. if(bp!=8)throw"unsupported bits per channel: "+bp;var bx=new Uint8Array(bc*aS*4);for(var S=0;S<bx.length;
  118. S++)bx[S]=255;O.push({typ:"name",val:_+"---",ctx:[bc,aS,bp,b$,bZ,c0,bx,0,bb]});if(bb[0].typ=="procedure")for(var S=0;
  119. S<bb.length;S++)FromPS.addProc(bb[S],O)}else if(_=="image---"||_=="colorimage---"){var aH=W.ctx,bc=aH[0],aS=aH[1],bp=aH[2],b$=aH[3],bZ=aH[4],c0=aH[5],bx=aH[6],aV=aH[7],bb=aH[8],a6=0;
  120. if(c0){for(S=0;S<bZ;S++){var bC=bb[S];if(bC.typ=="procedure")bC=N.pop().val;else bC=bC.val;a6=bC.length;
  121. if(bZ==4)for(var ab=0;ab<a6;ab++)bx[(aV+ab)*4+3-S]=bC[ab];if(bZ==3)for(var ab=0;ab<a6;ab++)bx[(aV+ab)*4+2-S]=bC[ab]}}else{var bC;
  122. if(bb[0].typ=="file")bC=FromPS.GetFile(bb[0]).val.buff;else bC=N.pop().val;a6=Math.floor(bC.length/3);
  123. for(var ab=0;ab<a6;ab++){var ar=ab*3,bg=(aV+ab)*4;bx[bg+0]=bC[ar+0];bx[bg+1]=bC[ar+1];bx[bg+2]=bC[ar+2]}}aV+=a6;
  124. FromPS.checkPageStarted(D,E);if(aV==bc*aS){var bL=1/255;if(K.space=="/DeviceCMYK")for(var S=0;S<bx.length;
  125. S+=4){var bK=[bx[S]*bL,bx[S+1]*bL,bx[S+2]*bL,bx[S+3]*bL],aR=UDOC.C.cmykToRgb(bK);bx[S]=aR[0]*255;bx[S+1]=aR[1]*255;
  126. bx[S+2]=aR[2]*255;bx[S+3]=255}var a9=K.ctm.slice(),ca=b$.slice(0);UDOC.M.invert(ca);var aF=[bc,0,0,-aS,0,aS];
  127. UDOC.M.concat(aF,ca);UDOC.M.concat(K.ctm,aF);E.PutImage(K,bx,bc,aS);K.ctm=a9}else{aH[7]=aV;O.push(W);
  128. if(bb[0].typ=="procedure")for(var S=0;S<bb.length;S++)FromPS.addProc(bb[S],O)}}else if(_=="makepattern"){var o=N.pop().val,bn=N.pop().val;
  129. N.push({typ:"array",val:[bn,JSON.parse(JSON.stringify(o))]})}else if(_=="makefont"||_=="scalefont"){var cv=_=="makefont",aH=N.pop().val;
  130. if(cv)aH=FromPS.readArr(aH);var av=JSON.parse(JSON.stringify(N.pop())),aQ=FromPS.readArr(av.val.FontMatrix.val);
  131. if(cv)UDOC.M.concat(aQ,aH);else UDOC.M.scale(aQ,aH,aH);av.val.FontMatrix.val=FromPS.makeArr(aQ);N.push(av)}else if(_=="stringwidth"||_=="charpath"){if(_=="charpath")N.pop();
  132. var bv=N.pop().val,q=FromPS.readStr(bv),bH=UDOC.M.getScale(K.font.Tm)/UDOC.M.getScale(K.ctm),bW=.55*bH*q.length;
  133. if(_=="stringwidth")N.push({typ:"real",val:bW},{typ:"real",val:0});else UDOC.G.drawRect(K,0,0,bW,bH)}else if(_=="setfont"){var av=N.pop().val;
  134. K.font.Tf=av.FontName.val.slice(1);K.font.Tm=FromPS.readArr(av.FontMatrix.val)}else if(_=="setlinewidth")K.lwidth=N.pop().val;
  135. else if(_=="setstrokeadjust")K.SA=N.pop().val;else if(_=="setlinecap")K.lcap=N.pop().val;else if(_=="setlinejoin")K.ljoin=N.pop().val;
  136. else if(_=="setmiterlimit")K.mlimit=N.pop().val;else if(_=="setflat")K.dd.flat=N.pop();else if(_=="setdash"){K.doff=N.pop().val;
  137. K.dash=FromPS.readArr(N.pop().val)}else if(_=="show"||_=="ashow"||_=="xshow"||_=="yshow"||_=="xyshow"||_=="widthshow"||_=="awidthshow"){if(_=="xshow"||_=="xyshow"||_=="yshow")N.pop();
  138. var bv=N.pop().val,q=FromPS.readStr(bv);if(_=="awidthshow"){N.pop();N.pop();N.pop();N.pop()}if(_=="widthshow"){N.pop();
  139. N.pop();N.pop()}if(_=="ashow"){N.pop();N.pop()}var aY=K.ctm;K.ctm=aY.slice(0);K.ctm[4]=K.cpos[0];K.ctm[5]=K.cpos[1];
  140. FromPS.checkPageStarted(D,E);E.PutText(K,q,q.length*.55);K.cpos[0]+=q.length*UDOC.M.getScale(aY)*UDOC.M.getScale(K.font.Tm)*.55;
  141. K.ctm=aY}else if(_=="cshow"){N.pop();N.pop()}else if(_=="currentcolorspace"){N.push({typ:"array",val:[{typ:"name",val:K.space}]})}else if(_=="setcolorspace"){var b1=N.pop();
  142. K.space=b1.val;if(b1.typ=="array")K.space=b1.val[0].val;else if(b1.typ=="name")K.space=b1.val;else{console.log(b1);
  143. throw"e"}}else if(_=="setcolor"||_=="_setHSB_"){var bS;if(K.space=="/Pattern"){var bK=N.pop();if(bK.typ!="array")throw"e";
  144. var bt=bK.val,o=FromPS.readArr(bt[1]);UDOC.M.concat(o,K.ctm);bS=FromPS.getPSShadingFill(bt[0].Shading,o)}else if(K.space=="/DeviceGray"){var ap=FromPS.nrm(N.pop().val);
  145. bS=[ap,ap,ap]}else if(_=="_setHSB_"){var H=N.pop().val,au=N.pop().val,aS=N.pop().val,bT,ap,a5,S,c1,bt,at,bN;
  146. S=Math.floor(aS*6);c1=aS*6-S;bt=H*(1-au);at=H*(1-c1*au);bN=H*(1-(1-c1)*au);switch(S%6){case 0:bT=H,ap=bN,a5=bt;
  147. break;case 1:bT=at,ap=H,a5=bt;break;case 2:bT=bt,ap=H,a5=bN;break;case 3:bT=bt,ap=at,a5=H;break;case 4:bT=bN,ap=bt,a5=H;
  148. break;case 5:bT=H,ap=bt,a5=at;break}bS=[FromPS.nrm(bT),FromPS.nrm(ap),FromPS.nrm(a5)]}else if(K.space=="/DeviceRGB"){var a5=N.pop().val,ap=N.pop().val,bT=N.pop().val;
  149. bS=[FromPS.nrm(bT),FromPS.nrm(ap),FromPS.nrm(a5)]}else if(K.space=="/DeviceCMYK"){var bF=N.pop().val,c4=N.pop().val,o=N.pop().val,by=N.pop().val;
  150. bS=UDOC.C.cmykToRgb([by,o,c4,bF])}else throw K.space;if(bS)K.colr=K.COLR=bS}else if(_=="currentrgbcolor"){for(var S=0;
  151. S<3;S++)N.push({typ:"real",val:K.colr[S]})}else if(_=="currentgray"){N.push({typ:"real",val:(K.colr[0]+K.colr[1]+K.colr[2])/3})}else if(_=="clip"||_=="eoclip"){var bj=UDOC.G.getBB(K.pth.crds),bY=UDOC.G.getBB(K.cpth.crds);
  152. if(UDOC.G.isBox(K.pth,bj)&&UDOC.G.insideBox(bY,bj)){}else if(UDOC.G.isBox(K.cpth,bY)&&UDOC.G.insideBox(bj,bY)){K.cpth=JSON.parse(JSON.stringify(K.pth))}else{var bP=UDOC.G.toPoly(K.pth),ax=UDOC.G.toPoly(K.cpth);
  153. if(bP&&ax){var bt=UDOC.G.polyClip(bP,ax);if(bt.length!=0)K.cpth=UDOC.G.fromPoly(bt);else console.log("strange intersection of polygons")}else{K.cpth=JSON.parse(JSON.stringify(K.pth))}}}else if(_=="clippath"){K.pth=JSON.parse(JSON.stringify(K.cpth))}else if(_=="pathbbox"){var aU=K.pth.crds,b3=UDOC.G.getBB(aU);
  154. aU=[b3[0],b3[1],b3[2],b3[1],b3[0],b3[3],b3[2],b3[3]];var cj=K.ctm.slice(0);UDOC.M.invert(cj);UDOC.M.multArray(cj,aU);
  155. b3=UDOC.G.getBB(aU);f[0]=b3[0];b3[0]=f[0];f[0]=b3[1];b3[1]=f[0];f[0]=b3[2];b3[2]=f[0];f[0]=b3[3];b3[3]=f[0];
  156. b3=FromPS.makeArr(b3,"real");N.push(b3[0],b3[1],b3[2],b3[3])}else if(_=="newpath")UDOC.G.newPath(K);
  157. else if(_=="stroke"){FromPS.checkPageStarted(D,E);E.Stroke(K);UDOC.G.newPath(K)}else if(_=="shfill"){var b8=K.colr,aN=K.pth,bt=N.pop().val,o=K.ctm.slice(0);
  158. K.colr=FromPS.getPSShadingFill({typ:"dict",val:bt,maxl:1e3},o);FromPS.checkPageStarted(D,E);K.pth=K.cpth;
  159. K.cpth=UDOC.G.rectToPath(D.bb);E.Fill(K);K.colr=b8;K.pth=aN}else if(_=="fill"||_=="eofill"){FromPS.checkPageStarted(D,E);
  160. E.Fill(K,_=="eofill");UDOC.G.newPath(K)}else if(_=="showpage"){FromPS.checkPageStarted(D,E);E.ShowPage();
  161. var aL=K.font;K=D.gst=UDOC.getState(D.bb);K.font=aL;D.pgOpen=!1}else if(_=="print"){var bv=N.pop().val,q=FromPS.readStr(bv);
  162. E.Print(q)}else if(_=="_drawRect_"){var aS=N.pop();if(aS.typ!="real"&&aS.typ!="integer")throw"e";aS=aS.val;
  163. var bc=N.pop().val,c4=N.pop().val,a2=N.pop().val;UDOC.G.drawRect(K,a2,c4,bc,aS)}else if(_=="closepath")UDOC.G.closePath(K);
  164. else if(_=="moveto"||_=="lineto"){var c4=N.pop().val,a2=N.pop().val;if(_=="moveto")UDOC.G.moveTo(K,a2,c4);
  165. else UDOC.G.lineTo(K,a2,c4)}else if(_=="rmoveto"||_=="rlineto"){var c4=N.pop().val,a2=N.pop().val,cj=K.ctm.slice(0);
  166. UDOC.M.invert(cj);var bt=UDOC.M.multPoint(cj,K.cpos);c4+=bt[1];a2+=bt[0];if(_=="rmoveto")UDOC.G.moveTo(K,a2,c4);
  167. else UDOC.G.lineTo(K,a2,c4)}else if(_=="curveto"){var aO=N.pop().val,ad=N.pop().val,c8=N.pop().val,bA=N.pop().val,bl=N.pop().val,bQ=N.length==0?0:N.pop().val;
  168. UDOC.G.curveTo(K,bQ,bl,bA,c8,ad,aO)}else if(_=="arc"||_=="arcn"){var bk=N.pop().val,as=N.pop().val,bT=N.pop().val,c4=N.pop().val,a2=N.pop().val;
  169. UDOC.G.arc(K,a2,c4,bT,as*Math.PI/180,bk*Math.PI/180,_=="arcn")}else if(_=="concat"){var o=FromPS.readArr(N.pop().val);
  170. UDOC.M.concat(o,K.ctm);K.ctm=o}else if(["translate","scale","rotate"].indexOf(_)!=-1){var H=N.pop(),o,a2,c4;
  171. if(H.typ=="array"){o=FromPS.readArr(H.val);c4=N.pop().val}else{o=[1,0,0,1,0,0];c4=H.val}if(_!="rotate")a2=N.pop().val;
  172. if(_=="translate")UDOC.M.translate(o,a2,c4);if(_=="scale")UDOC.M.scale(o,a2,c4);if(_=="rotate")UDOC.M.rotate(o,-c4*Math.PI/180);
  173. if(H.typ=="array")N.push({typ:"array",val:FromPS.makeArr(o,"real")});else{UDOC.M.concat(o,K.ctm);K.ctm=o}}else if(_=="concatmatrix"){var aE=FromPS.readArr,a3=aE(N.pop().val),cd=aE(N.pop().val),ay=aE(N.pop().val),o=ay.slice(0);
  174. UDOC.M.concat(o,cd);o=FromPS.makeArr(o,"real");N.push({typ:"array",val:o})}else if(_=="invertmatrix"){var aE=FromPS.readArr,cd=aE(N.pop().val),ay=aE(N.pop().val),o=ay.slice(0);
  175. UDOC.M.invert(o);o=FromPS.makeArr(o,"real");N.push({typ:"array",val:o})}else if(_=="currentmatrix"||_=="defaultmatrix"){var o=N.pop(),b6=FromPS.makeArr(_=="currentmatrix"?K.ctm:[1,0,0,1,0,0],"real");
  176. for(var S=0;S<6;S++)o.val[S]=b6[S];N.push(o)}else if(_=="setmatrix"){K.ctm=FromPS.readArr(N.pop().val)}else if(_=="cvi"){var L=N.pop(),H=L.val,a=0;
  177. if(L.typ=="real")a=Math.round(H);else if(L.typ=="integer")a=H;else throw"unknown type "+L.typ;N.push({typ:"integer",val:a})}else if(_=="cvr"){var L=N.pop(),H=L.val,a=0;
  178. if(L.typ=="real")a=H;else if(L.typ=="integer")a=H;else if(L.typ=="string")a=parseFloat(FromPS.readStr(H));
  179. else throw"unknown type "+L.typ;N.push({typ:"real",val:a})}else if(_=="cvs"){var q=N.pop(),t=N.pop(),y="";
  180. q.val=[];N.push(q);if(t.typ=="real"||t.typ=="integer"){if(Math.abs(Math.round(t.val)-t.val)<1e-6)y=Math.round(t.val)+".0";
  181. else y=(Math.round(t.val*1e6)/1e6).toString()}else if(t.typ=="name")y=t.val;else throw"unknown var type: "+t.typ;
  182. for(var S=0;S<y.length;S++)q.val[S]=y.charCodeAt(S)}else if(_=="cvx"){var L=N.pop(),aA;if(L.typ=="array")aA={typ:"procedure",val:L.val};
  183. else if(L.typ=="name")aA={typ:"name",val:L.val.slice(1)};else if(L.typ=="string"){aA={typ:"file",val:{off:0,buff:new Uint8Array(L.val)}}}else{console.log(L);
  184. throw L.typ}N.push(aA)}else if(_=="cvlit"){var $=N.pop();if($.typ=="procedure")N.push({typ:"array",val:$.val});
  185. else N.push($)}else if(_=="cvn"){N.push({typ:"name",val:FromPS.readStr(N.pop().val)})}else if("add sub mul div idiv bitshift mod exp atan".split(" ").indexOf(_)!=-1){var cw=N.pop(),I=N.pop(),M=I.val,d=cw.val,a=0,a0="";
  186. if(_=="add"||_=="sub"||_=="mul")a0=I.typ=="real"||cw.typ=="real"?"real":"integer";else if(_=="div"||_=="atan"||_=="exp")a0="real";
  187. else if(_=="mod"||_=="idiv"||_=="bitshift")a0="integer";if(I.typ=="real"){f[0]=M;M=f[0]}if(cw.typ=="real"){f[0]=d;
  188. d=f[0]}if(_=="add")a=M+d;if(_=="sub")a=M-d;if(_=="mul")a=M*d;if(_=="div")a=M/d;if(_=="idiv")a=~~(M/d);
  189. if(_=="bitshift")a=d>0?M<<d:M>>>-d;if(_=="mod")a=M%d;if(_=="exp")a=Math.pow(M,d);if(_=="atan")a=Math.atan2(M,d)*180/Math.PI;
  190. if(a0=="real"){f[0]=a;a=f[0]}N.push({typ:a0,val:a})}else if("neg abs floor ceiling round truncate sqrt ln sin cos".split(" ").indexOf(_)!=-1){var I=N.pop(),M=I.val,a=0,a0="";
  191. if(_=="neg"||_=="abs"||_=="truncate"||_=="floor"||_=="ceiling"||_=="round")a0=I.typ;else if(_=="sqrt"||_=="sin"||_=="cos"||_=="ln")a0="real";
  192. if(I.typ=="real"){f[0]=M;M=f[0]}if(_=="neg")a=-M;if(_=="abs")a=Math.abs(M);if(_=="floor")a=Math.floor(M);
  193. if(_=="ceiling")a=Math.ceil(M);if(_=="round")a=Math.round(M);if(_=="truncate")a=Math.trunc(M);if(_=="sqrt")a=Math.sqrt(M);
  194. if(_=="ln")a=Math.log(M);if(_=="sin")a=Math.sin(M*Math.PI/180);if(_=="cos")a=Math.cos(M*Math.PI/180);
  195. if(_=="ln"&&M<=0)throw"e";if(a0=="real"){f[0]=a;a=f[0]}N.push({typ:a0,val:a})}else if("eq ge gt le lt ne".split(" ").indexOf(_)!=-1){var cw=N.pop(),I=N.pop(),aj=I.typ,a_=cw.typ,M=I.val,d=cw.val,a=!1;
  196. if(_=="eq"||_=="ne"){var G=I.typ==cw.typ;if(G&&["integer","real","name","null","dict"].indexOf(aj)!=-1)a=M==d;
  197. else if(aj=="real"&&a_=="integer"||a_=="real"&&aj=="integer")a=M==d;else if(!G&&(I.typ=="null"||cw.typ=="null"))a=!1;
  198. else if(G&&I.typ=="string"){if(M.length!=d.length)a=!1;else{a=!0;for(var S=0;S<M.length;S++)if(M[S]!=d[S])a=!1}}else{console.log(_,I,cw,I.val==cw.val);
  199. throw"e"}if(_=="ne")a=!a}else if(_=="ge")a=M>=d;else if(_=="gt")a=M>d;else if(_=="le")a=M<=d;else if(_=="lt")a=M<d;
  200. N.push({typ:"boolean",val:a})}else if(["and","or"].indexOf(_)!=-1){var J=N.pop(),l=N.pop(),d=l.val,e=J.val,Q=l.typ=="integer",a;
  201. if(_=="and")a=Q?d&e:d&&e;if(_=="or")a=Q?d|e:d||e;N.push({typ:Q?"integer":"boolean",val:a})}else if(_=="not"){var a5=N.pop(),H=a5.val,Q=a5.typ=="integer",a=Q?~H:!H;
  202. N.push({typ:Q?"integer":"boolean",val:a})}else if(_=="if"){var g=N.pop(),j=N.pop().val;if(j)FromPS.addProc(g,O)}else if(_=="ifelse"){var A=N.pop(),T=N.pop(),j=N.pop().val;
  203. FromPS.addProc(j?T:A,O)}else if(_=="exec"||_=="stopped"){var $=N.pop();if(_=="stopped")FromPS.addProc({typ:"procedure",val:[{typ:"boolean",val:!1}]},O);
  204. if($.typ=="procedure")FromPS.addProc($,O);else if($.typ=="name"||$.typ=="operator"||$.typ=="integer"||$.typ=="real"||$.typ=="array")FromPS.addProc({typ:"procedure",val:[$]},O);
  205. else{console.log($);throw"unknown executable type: "+$.typ}}else if(_=="stop"){var ct=O[O.length-1];
  206. if(ct.typ=="procedure"&&ct.off!=0)O.pop()}else if(_=="dup"){var H=N.pop();N.push(H,H)}else if(_=="exch"){N.push(N.pop(),N.pop())}else if(_=="copy"){var ae=N.pop();
  207. if(ae.typ=="integer"){var az=[];for(var S=0;S<ae.val;S++)az[ae.val-1-S]=N.pop();for(var S=0;S<ae.val;
  208. S++)N.push(az[S]);for(var S=0;S<ae.val;S++)N.push(az[S])}else if(ae.typ=="array"){var o=N.pop().val;
  209. for(var S=0;S<o.length;S++){ae.val[S]=o[S];if(o[S].val==null){console.log(C);throw"e"}}N.push(ae)}else if(ae.typ=="dict"){var o=N.pop().val;
  210. for(var ba in o){ae.val[ba]=o[ba]}N.push(ae)}else throw"e"}else if(_=="roll"){var ab=N.pop().val,ae=N.pop().val,az=[];
  211. for(var S=0;S<ae;S++)az.push(N.pop());az.reverse();ab=(ae+ab)%ae;for(var S=0;S<ab;S++)az.unshift(az.pop());
  212. for(var S=0;S<ae;S++)N.push(az[S])}else if(_=="index"){var ae=N.pop().val;N.push(N[N.length-1-ae])}else if(_=="anchorsearch"){var V=N.pop(),b7=N.pop(),bJ=V.val,q=b7.val,c6=!0;
  213. if(bJ.length<=q.length){for(var S=0;S<bJ.length;S++)if(bJ[S]!=q[S])c6=!1}else c6=!1;if(c6)N.push({typ:"string",val:q.slice(bJ.length)},V);
  214. else N.push(b7);N.push({typ:"boolean",val:c6})}else if(_=="transform"||_=="itransform"||_=="dtransform"||_=="idtransform"){var o=N.pop(),c4=0,a2=0;
  215. if(o.typ=="array"){o=FromPS.readArr(o.val);c4=N.pop().val}else{c4=o.val;o=K.ctm.slice(0)}if(_=="itransform"||_=="idtransform"){UDOC.M.invert(o)}a2=N.pop().val;
  216. if(_.endsWith("dtransform")){o[4]=0;o[5]=0}var bs=UDOC.M.multPoint(o,[a2,c4]);N.push({typ:"real",val:bs[0]},{typ:"real",val:bs[1]})}else if(_=="pop"||_=="srand"||_=="=="){N.pop()}else if(_=="rand"){N.push({typ:"integer",val:Math.floor(Math.random()*2147483647)})}else if(_=="put"){var v=N.pop(),L=N.pop(),$=N.pop(),a0=$.typ;
  217. if(a0=="array"){if(L.typ!="integer")throw"e";$.val[L.val]=v}else if(a0=="dict"){var bu=FromPS.getDKey(L);
  218. $.val[bu]=v}else if(a0=="string")$.val[L.val]=v.val;else throw a0+" e"}else if(_=="get"){var L=N.pop(),$=N.pop(),a0=$.typ;
  219. if(a0=="string")N.push({typ:"integer",val:$.val[L.val]});else if(a0=="array"){var y=$.val[L.val];if(y==null)throw"e";
  220. N.push(y)}else if(a0=="dict"){var bF=FromPS.getDKey(L),H=$.val[bF];if(H==null){throw"e"}else N.push(H)}else throw"getting from unknown type "+$.typ}else if(_=="load"){var b=N.pop().val.slice(1),v=FromPS.getFromStacks(b,C);
  221. if(v==null){console.log(b,C);throw"e"}N.push(v)}else if(_=="where"){var b=N.pop().val.slice(1),w=FromPS.where(b,C);
  222. if(w!=null)N.push({typ:"dict",val:w,maxl:1e3});N.push({typ:"boolean",val:w!=null})}else if(_=="store"){var v=N.pop(),b=N.pop().val.slice(1),w=FromPS.where(b,C);
  223. if(w==null)w=C[C.length-1];w[b]=v}else if(_=="repeat"){var g=N.pop(),ai=N.pop().val;O.push({typ:"name",val:_+"---",ctx:{proc:g,cur:0,cnt:ai}})}else if(_=="repeat---"){var U=W.ctx;
  224. if(U.cur<U.cnt){O.push(W);FromPS.addProc(U.proc,O);U.cur++}}else if(_=="for"){var g=N.pop(),ak=N.pop(),bV=N.pop(),af=N.pop();
  225. O.push({typ:"name",val:_+"---",ctx:{proc:g,isInt:af.typ=="integer"&&bV.typ=="integer",init:af.val,inc:bV.val,limit:ak.val}})}else if(_=="for---"){var U=W.ctx;
  226. if(U.isInt){if(U.inc>0&&U.init<=U.limit||U.inc<0&&U.init>=U.limit){O.push(W);FromPS.addProc(U.proc,O);
  227. N.push({typ:"integer",val:U.init});U.init+=U.inc}}else{var X=new Float32Array(1);X[0]=U.limit;U.limit=X[0];
  228. X[0]=U.inc;U.inc=X[0];X[0]=U.init;if(U.inc>0&&X[0]<=U.limit||U.inc<0&&X[0]>=U.limit){O.push(W);FromPS.addProc(U.proc,O);
  229. N.push({typ:"real",val:X[0]});X[0]+=U.inc;U.init=X[0]}}}else if(_=="loop"){var g=N.pop();O.push({typ:"name",val:_+"---",ctx:{proc:g}})}else if(_=="loop---"){var U=W.ctx;
  230. O.push(W);FromPS.addProc(U.proc,O)}else if(_=="pathforall"){var r=N.pop(),aB=N.pop(),a4=N.pop(),br=N.pop()}else if(_=="forall"){var g=N.pop(),$=N.pop(),U=[g,$,0];
  231. O.push({typ:"name",val:_+"---",ctx:U})}else if(_=="forall---"){var U=W.ctx,g=U[0],$=U[1],S=U[2];if($.typ=="dict"){var aw=Object.keys($.val);
  232. if(S<aw.length){O.push(W);FromPS.addProc(g,O);N.push({typ:"name",val:"/"+aw[S]});var y=$.val[aw[S]];
  233. if(y==null)throw"e";N.push(y==null?{typ:"null",val:null}:y);U[2]++}}else if($.typ=="procedure"||$.typ=="array"){if(S<$.val.length){O.push(W);
  234. FromPS.addProc(g,O);var a8=$.val[S];N.push(a8==null?{typ:"null",val:null}:a8);U[2]++}}else{console.log(g,$);
  235. throw"forall: unknown type: "+$.typ}}else if(_=="exit"){var S=O.length-1;while(S!=0&&(O[S].typ!="name"||!O[S].val.endsWith("---")))S--;
  236. if(S!=0)while(O.length>S)O.pop()}else if(_=="bind"){}else if(_=="xcheck"){var $=N.pop(),s=$.typ;N.push({typ:"boolean",val:s=="procedure"})}else if(_=="status"){var q=N.pop();
  237. N.push({typ:"boolean",val:!1})}else if(_=="cachestatus"){for(var S=0;S<7;S++)N.push({typ:"integer",val:5e3})}else if(_=="setcachelimit"){N.pop()}else if(_=="type"){var L=N.pop(),ac={name:"nametype",dict:"dicttype",boolean:"booleantype",procedure:"operatortype",string:"stringtype",null:"nulltype",integer:"integertype",array:"arraytype",operator:"operatortype",real:"realtype"};
  238. if(ac[L.typ]==null){console.log(L);throw L.typ}N.push({typ:"name",val:"/"+ac[L.typ]})}else if(_=="save"){N.push({typ:"state",val:JSON.parse(JSON.stringify(K))})}else if(_=="restore"){K=D.gst=N.pop().val}else if(_=="clipsave"){K.cpstack.push(JSON.parse(JSON.stringify(K.cpth)))}else if(_=="cliprestore"){K.cpath=K.cpstack.pop()}else if(_=="gsave"){Y.push(JSON.parse(JSON.stringify(K)))}else if(_=="grestore"){if(Y.length!=0)K=D.gst=Y.pop();
  239. else K=UDOC.getState()}else if(_=="grestoreall"){while(Y.length!=0)K=D.gst=Y.pop()}else if(_=="usertime"||_=="realtime")N.push({typ:"integer",val:_=="usertime"?Date.now()-F:Date.now()});
  240. else if(_=="flush"||_=="readonly"||_=="executeonly"){}else if(_=="flushfile"){FromPS.GetFile(N.pop())}else if(_=="filter"){var aW=N.pop().val,ag;
  241. if(aW=="/SubFileDecode"){var q=N.pop();if(q.typ!="string")throw"e";var aI=N.pop().val;q=q.val;ag=[aW,q,aI]}else ag=[aW];
  242. var aq=N.pop();N.push({typ:"file",val:{buff:new Uint8Array,off:0},_flt:ag,_src:aq})}else if(_=="begincmap"||_=="endcmap"){}else if(_=="begincodespacerange"||_=="beginbfrange"||_=="beginbfchar"){D.cmnum=N.pop().val}else if(_=="endcodespacerange"||_=="endbfrange"||_=="endbfchar"){var r=_=="endbfrange"?3:2,aJ=_.slice(3),w=C[C.length-1],bp=0;
  243. if(w[aJ]==null)w[aJ]=[];for(var S=0;S<D.cmnum;S++){var c7=[];for(var ab=r-1;ab>=0;ab--){var cf=N.pop(),ao=cf.val,y;
  244. if(cf.typ=="string"){y=FromPS.strToInt(ao);if(ab==0)bp=ao.length}else{y=[];for(var bF=0;bF<ao.length;
  245. bF++)y.push(FromPS.strToInt(ao[bF].val))}c7[ab]=y}w[aJ]=w[aJ].concat(c7)}if(_!="endcodespacerange")w.bpc=bp}else if(Z)Z(_,N,C,O,Y,D,E);
  246. else{console.log(v,_);console.log(C,N);throw"e"}}else throw $.typ}return!0};FromPS.strToInt=function(N){var C=0;
  247. for(var O=0;O<N.length;O++)C=C<<8|N[O];return C};FromPS.getDKey=function(N){if(N.typ=="name")return N.val.slice(1);
  248. if(N.typ=="string")return FromPS.readStr(N.val);return N.val};FromPS.GetFile=function(N){if(N._flt==null||N.val.off<N.val.buff.length)return N;
  249. FromPS.GetFile(N._src);var C=N._src.val,O=N._flt,Y=O[0],D;if(Y=="/ASCII85Decode")D=FromPS.F.ASCII85Decode(C);
  250. else if(Y=="/RunLengthDecode")D=FromPS.F.RunLengthDecode(C);else if(Y=="/FlateDecode")D=FromPS.F.FlateDecode(C);
  251. else if(Y=="/LZWDecode")D=FromPS.F.LZWDecode(C);else if(Y=="/SubFileDecode"){var Z=O[1],p=O[2],F=C.off,f=0;
  252. while(F<C.buff.length){var z=0;while(z<Z.length&&C.buff[F+z]==Z[z])z++;if(z==Z.length){if(f==p)break;
  253. f++}F++}D=C.buff.slice(C.off,F);C.off=F}else throw Y;N.val={buff:D,off:0};return N};FromPS.checkPageStarted=function(N,C){if(!N.pgOpen){C.StartPage(N.bb[0],N.bb[1],N.bb[2],N.bb[3]);
  254. N.pgOpen=!0}};FromPS.getPSShadingFill=function(N,C){function O(D){var E,Z=D.typ,p=D.val;if(Z=="dict"){E={};
  255. for(var F in p)E["/"+F]=O(p[F])}else if(Z=="array"){E=[];for(var f=0;f<p.length;f++)E.push(O(p[f]))}else if(Z=="string"){E="";
  256. for(var f=0;f<p.length;f++)E+=String.fromCharCode(p[f])}else if(["boolean","integer","real","name"].indexOf(Z)!=-1)E=p;
  257. else if(Z=="procedure"){var z="";for(var f=0;f<p.length;f++)z+=p[f].val+" ";z="{ "+z+"}";var K=new Uint8Array(z.length);
  258. for(var f=0;f<z.length;f++)K[f]=z.charCodeAt(f);E={"/FunctionType":4,"/Domain":[0,1],"/Range":[0,1,0,1,0,1,0,1],"/Length":z.length,stream:K}}else{console.log(D);
  259. throw"e"}return E}var Y=O(N);return FromPS.getShadingFill(Y,C)};FromPS.F={HexDecode:function(N){var C=[];
  260. FromPS.readHex(N,1e9,C);return new Uint8Array(C)},ASCII85Decode:function(N){var C=[85*85*85*85,85*85*85,85*85,85,1],O=[],Y=0,D=0,E=N.off;
  261. while(!0){if(E>=N.buff.length)throw"e";var Z=N.buff[E];E++;if(FromPS.isWhite(Z))continue;if(Z==126){if(Y!=0){if(Y==3){O.push(D>>>24&255)}if(Y==4){O.push(D>>>24&255,D>>>16&255)}var p=5-Y<<3,f=D>>>p&255;
  262. D=D&(1<<p)-1;if(D!=0)f++;O.push(f)}N.off=E+1;return new Uint8Array(O)}if(Z==122){O.push(0,0,0,0);continue}if(Z<33||84+33<Z){console.log(Z,String.fromCharCode(Z),E-N.off);
  263. throw"e"}D+=(Z-33)*C[Y];Y++;if(Y==5){O.push(D>>>24&255);O.push(D>>>16&255);O.push(D>>>8&255);O.push(D>>>0&255);
  264. Y=0;D=0}}},RunLengthDecode:function(N){var C=[],O=N.off;while(!0){if(O>=N.buff.length){console.log(C);
  265. throw"e"}var Y=N.buff[O];O++;if(Y==128){N.off=O;return new Uint8Array(C)}if(Y<128){for(var D=0;D<Y+1;
  266. D++)C.push(N.buff[O+D]);O+=Y+1}else{for(var D=0;D<257-Y;D++)C.push(N.buff[O]);O++}}},FlateDecode:function(N){var C=N.buff,O=new Uint8Array(C.buffer,N.off+2,C.length-2),Y=pako.inflateRaw(O);
  267. return Y},LZWDecode:function(N){var C=new Uint8Array((N.buff.length-N.off)*20),O=UTIF.decode._decodeLZW(N.buff,N.off,C,0);
  268. return C.slice(0,O)},_myLZW:function(){var N={},C=function(Y,D,E,Z,p){for(var f=0;f<p;f+=4){E[Z+f]=Y[D+f];
  269. E[Z+f+1]=Y[D+f+1];E[Z+f+2]=Y[D+f+2];E[Z+f+3]=Y[D+f+3]}},O=function(Y,D,E,Z){if(!N.c){var p=new Uint32Array(65535),f=new Uint16Array(65535),z=new Uint8Array(2e6);
  270. for(var K=0;K<256;K++){z[K<<2]=K;p[K]=K<<2;f[K]=1}N.c=[p,f,z]}var W=N.c[0],s=N.c[1],z=N.c[2],k=258,P=258<<2,R=9,x=D<<3,B=256,h=257,L=0,u=0,m=0;
  271. while(!0){L=Y[x>>>3]<<16|Y[x+8>>>3]<<8|Y[x+16>>>3];u=L>>24-(x&7)-R&(1<<R)-1;x+=R;if(u==h)break;if(u==B){R=9;
  272. k=258;P=258<<2;L=Y[x>>>3]<<16|Y[x+8>>>3]<<8|Y[x+16>>>3];u=L>>24-(x&7)-R&(1<<R)-1;x+=R;if(u==h)break;
  273. E[Z]=u;Z++}else if(u<k){var b=W[u],cs=s[u];C(z,b,E,Z,cs);Z+=cs;if(m>=k){W[k]=P;z[W[k]]=b[0];s[k]=1;P=P+1+3&~3;
  274. k++}else{W[k]=P;var i=W[m],q=s[m];C(z,i,z,P,q);z[P+q]=z[b];q++;s[k]=q;k++;P=P+q+3&~3}if(k+1==1<<R)R++}else{if(m>=k){W[k]=P;
  275. s[k]=0;k++}else{W[k]=P;var i=W[m],q=s[m];C(z,i,z,P,q);z[P+q]=z[P];q++;s[k]=q;k++;C(z,P,E,Z,q);Z+=q;P=P+q+3&~3}if(k+1==1<<R)R++}m=u}return Z};
  276. return O}()};FromPS.B={readUshort:function(N,C){return N[C]<<8|N[C+1]},readUint:function(N,C){return N[C]*(256*256*256)+(N[C+1]<<16|N[C+2]<<8|N[C+3])},readASCII:function(N,C,O){var Y="";
  277. for(var D=0;D<O;D++)Y+=String.fromCharCode(N[C+D]);return Y}};FromPS.nrm=function(N){return Math.max(0,Math.min(1,N))};
  278. FromPS.makeArr=function(N,C){var O=[];for(var Y=0;Y<N.length;Y++)O.push({typ:C,val:N[Y]});return O};
  279. FromPS.readArr=function(N){var C=[];for(var O=0;O<N.length;O++)C.push(N[O].val);return C};FromPS.makeStr=function(N){var C=[];
  280. for(var O=0;O<N.length;O++)C.push(N.charCodeAt(O));return C};FromPS.readStr=function(N){var C="";for(var O=0;
  281. O<N.length;O++)C+=String.fromCharCode(N[O]);return C};FromPS.getFromStacks=function(N,C){var O=C.length-1;
  282. while(O>=0){if(C[O][N]!=null)return C[O][N];O--}return null};FromPS.where=function(N,C){var O=C.length-1;
  283. while(O>=0){if(C[O][N]!=null)return C[O];O--}return null};FromPS.skipWhite=function(N){var C=N.off,O=N.buff,Y=FromPS.isWhite;
  284. while(Y(O[C])||O[C]==37){while(Y(O[C]))C++;if(O[C]==37){while(C<O.length&&!FromPS.isEOL(O[C]))C++;C++}}N.off=C};
  285. FromPS.getToken=function(N,C){if(N.length==0)return null;var O=N[N.length-1];if(O.typ=="procedure"){var Y=O.val[O.off];
  286. O.off++;if(O.off==O.val.length)N.pop();return Y}if(O.typ=="name"){N.pop();return O}var D=FromPS.getFToken(O.val,C);
  287. while(D==null&&N.length>1){N.pop();if(N.length!=0)D=FromPS.getFToken(N[N.length-1].val,C)}return D};
  288. FromPS.getFToken=function(N,C){FromPS.skipWhite(N);var O=FromPS.isWhite,Y=FromPS.isSpecl,D=N.off,E=N.buff,Z=null;
  289. if(D>=E.length)return null;var p=E[D],f=String.fromCharCode(p);D++;if(f=="("){var z=0,K=D;while(!(E[K]==41&&z==0)){if(E[K]==40)z++;
  290. if(E[K]==41)z--;if(E[K]==92)K++;K++}var W=[];for(var s=0;s<K-D;s++)W.push(E[D+s]);D=K+1;W=FromPS.getString(W);
  291. Z={typ:"string",val:W}}else if(f=="{"||f=="}"||f=="["||f=="]"){Z={typ:"name",val:f}}else if(f=="<"&&E[D]==60||f==">"&&E[D]==62){Z={typ:"name",val:f=="<"?"<<":">>"};
  292. D++}else if(f=="<"){var W;if(E[D]=="~".charCodeAt(0)){N.off=D+1;var v=FromPS.F.ASCII85Decode(N);W=[];
  293. for(var s=0;s<v.length;s++)W.push(v[s]);D=N.off}else{var K=D;while(E[K]!=62)K++;var W=[];FromPS.readHex({buff:E,off:D},1e9,W);
  294. D=K+1}Z={typ:"string",val:W}}else{var K=D;while(K<E.length&&!O(E[K])&&(!Y(E[K])||E[K]==47&&E[K-1]==47&&K==D&&C))K++;
  295. var k=FromPS.B.readASCII(E,D-1,K-D+1);D=K;var P=parseFloat(k);if(!1){}else if(k=="true"||k=="false")Z={typ:"boolean",val:k=="true"};
  296. else if(!isNaN(P)){var R=new Float32Array(1);R[0]=P;P=R[0];Z={typ:k.indexOf(".")==-1?"integer":"real",val:P}}else{if(k.slice(0,2)=="//"&&C){var x=k.slice(2),B=FromPS.getFromStacks(x,C);
  297. if(B!=null)Z=B;else Z={typ:"name",val:k}}else Z={typ:"name",val:k}}}N.off=D;return Z};FromPS.isSpecl=function(N){return[40,41,60,62,91,93,123,125,37,47].indexOf(N)!=-1};
  298. FromPS.isWhite=function(N){return N==0||N==9||N==10||N==12||N==13||N==32};FromPS.isEOL=function(N){return N==10||N==13};
  299. FromPS.getString=function(N){var C=[],O="n,r,t,b,f,,(,), ,/".split(","),Y=["\n","\r","\t","\b","\f","\\","(",")"," ","/"];
  300. for(var D=0;D<N.length;D++){var E=N[D],Z=String.fromCharCode(E);if(Z=="\\"){var p=String.fromCharCode(N[D+1]);
  301. D++;if(p=="\r"||p=="\n")continue;var f=O.indexOf(p);if(f!=-1)C.push(Y[f].charCodeAt(0));else{var z=p+String.fromCharCode(N[D+1])+String.fromCharCode(N[D+2]);
  302. D+=2;C.push(parseInt(z,8))}}else C.push(E)}return C};FromPS.makeString=function(N){var C="n r t b f ( )".split(" "),O=["\n","\r","\t","\b","\f","\\","(",")"],Y=[];
  303. for(var D=0;D<N.length;D++){var E=N[D],Z=O.indexOf(String.fromCharCode(E));if(Z==-1)Y.push(E);else Y.push(92,C[Z].charCodeAt(0))}return Y};
  304. FromPS.readHex=function(N,C,O){var Y=0,D=-1,E=N.off,Z=N.buff.length;while(Y!=C&&E<Z){var p=N.buff[E],z=0;
  305. E++;if(47<p&&p<58)z=p-48;else if(96<p&&p<103)z=10+p-97;else if(64<p&&p<71)z=10+p-65;else if(p==62)break;
  306. else if(FromPS.isWhite(p))continue;else throw"e";if(D==-1)D=z;else{O[Y]=D<<4|z;D=-1;Y++}}N.off=E};FromPS.getShadingFill=function(N,C){var O=N["/ShadingType"],Y=N["/ColorSpace"],D=N["/Extend"],E=N["/Coords"]?N["/Coords"].slice(0):null,Z="",F;
  307. if(D==null)D=[!1,!1];if(O==2)Z="lin";else if(O==3)Z="rad";else{console.log("Unknown shading type",O);
  308. return}var p=N["/Function"];if(p instanceof Array){var f=p.length,z;for(var K=0;K<f;K++){var W=FromPS.getGrad(p[K],"/DeviceGray");
  309. if(K==0)z=W;else{var v=z.length;for(var k=0;k<v;k++)z[k][1][K]=W[k][1][0]}}if(Y=="/DeviceCMYK")for(var K=0;
  310. K<z.length;K++)z[K][1]=UDOC.C.cmykToRgb(z[K][1]);F=z}else F=FromPS.getGrad(p,Y);if(Z=="rad"&&E[2]>E[5]){E=E.slice(3).concat(E.slice(0,3));
  311. D.reverse();F.reverse();for(var K=0;K<F.length;K++)F[K][0]=1-F[K][0]}if(!D[0]&&Z!="rad"){var P=F[0];
  312. P[0]+=.002;F.unshift([.001,P[1].slice(),0])}if(!D[1]){var P=F[F.length-1];P[0]-=.002;F.push([0,999,P[1].slice(),0])}var R={typ:Z,mat:C,grad:F,crds:E};
  313. return R};FromPS.getGrad=function(N,C){var O=FromPS._normColor,Y=N["/Functions"],D=N["/FunctionType"],E=N["/Bounds"],Z=N["/Encode"],p;
  314. if(D==0){p=[];var F=Math.min(4,N["/Size"][0]);for(var f=0;f<=F;f++)p.push([f/F,O(N,[f/F],C)])}else if(D==2)p=[[0,O(N,[0],C)],[1,O(N,[1],C)]];
  315. else if(D==3){var z=0;p=[];if(E.length==0||E[0]>0)p.push([0,O(Y[0],[Z[0]],C)]);for(var f=0;f<E.length;
  316. f++)p.push([E[f],O(Y[f],[Z[2*f+1]],C)]);if(E.length==0||E[E.length-1]<1)p.push([1,O(Y[Y.length-1],[Z[Z.length-1]],C)])}else if(D==4){p=[];
  317. for(var f=0;f<5;f++)p.push([f/5,O(N,[f/5],C)])}return p};FromPS._normColor=function(N,C,O){var Y="/DeviceCMYK",D="/DeviceRGB",E,Z=FromPS.Func(N,C);
  318. if(O[3]&&O[3]["/Length"]){Z=FromPS.Func(O[3],Z);if(O[2]==Y||Z.length==4)E=Y;else if(O[2]==D)E=D;else if(O[2]&&O[2][1]&&O[2][1]["/Alternate"]&&O[2][1]["/Alternate"][0]=="/Lab")E="/Lab";
  319. else{console.log(Z,O);throw"unknown color profile"}}else if(O[0]=="/ICCBased"&&O[1]){var p=O[1]["/N"];
  320. if(p==4)E=Y;else if(p==3)E=D;else throw p}else if(O[0]=="/Separation"){Z=FromPS._readSeparation(O,Z[0]);
  321. E=D}else if(O.length==1)E=O[0];else if(O[0]=="/Lab")E="/Lab";else if(O[2]==Y)E=Y;else E=O;if(E==D)Z=Z;
  322. else if(E==Y)Z=UDOC.C.cmykToRgb(Z);else if(E=="/DeviceGray")Z=[Z[0],Z[0],Z[0]];else if(E=="/Lab")Z=UDOC.C.labToRgb(Z);
  323. else throw"Unknown color space "+E;return Z};FromPS._readSeparation=function(N,C){var O=FromPS.Func(N[3],[C]),Y;
  324. if(N&&N[2]=="/DeviceCMYK")Y=UDOC.C.cmykToRgb(O);else if(N&&N[2]=="/DeviceGray")Y=[O[0],O[0],O[0]];else if(N&&N[2]&&N[2][0]&&N[2][0]=="/Lab")Y=UDOC.C.labToRgb(O);
  325. else{Y=O}return Y};FromPS.Func=function(N,C){var O=FromPS.intp,Y=N["/Domain"],D=N["/Range"],Z=N["/FunctionType"],p=[];
  326. for(var F=0;F<C.length;F++)C[F]=Math.max(Y[2*F],Math.min(Y[2*F+1],C[F]));if(Z==0){var f=N["/Encode"],z=N["/Size"],K=N["/Decode"],W=D.length/2;
  327. if(f==null)f=[0,z[0]-1];if(K==null)K=D;for(var F=0;F<C.length;F++){var v=O(C[F],Y[2*F],Y[2*F+1],f[2*F],f[2*F+1]);
  328. C[F]=Math.max(0,Math.min(z[F]-1,v))}var k=N["/DataSource"];for(var P=0;P<W;P++){var R=Math.round(C[0]),x;
  329. if(k)x=k.charCodeAt(W*R+P);else x=FromPS.GS(N)[W*R+P];x=O(x,0,255,K[2*P],K[2*P+1]);p.push(x)}}else if(Z==2){var B=N["/C0"],h=N["/C1"],L=N["/N"],R=C[0];
  330. for(var F=0;F<B.length;F++)p[F]=B[F]+Math.pow(R,L)*(h[F]-B[F])}else if(Z==4){var u=FromPS._getEnv([0,0,0,0]),y=!0;
  331. u.pgOpen=!0;var $=[],_=[],k=FromPS._getDictStack([],{}),m=[];m.push({typ:"file",val:{buff:FromPS.GS(N),off:0}});
  332. while(y)y=FromPS.step(_,k,m,$,u,{},FromPS.operator);var bu=_.pop();bu.off=0;m.push(bu);for(var F=0;F<C.length;
  333. F++)_.push({typ:"real",val:C[F]});y=!0;while(y)y=FromPS.step(_,k,m,$,u,{},FromPS.operator);for(var F=0;
  334. F<_.length;F++)p.push(_[F].val)}if(D)for(var F=0;F<p.length;F++)p[F]=Math.max(D[2*F],Math.min(D[2*F+1],p[F]));
  335. return p};FromPS.intp=function(N,C,O,Y,D){return Y+(N-C)*(D-Y)/(O-C)};FromPS.GS=function(N){if(N.stream==null){var C=N.buff;
  336. delete N.buff;var O=N["/Filter"],Y=N["/DecodeParms"];if(O!=null){var D=typeof O=="string"?[O]:O,E=!1;
  337. for(var Z=0;Z<D.length;Z++){var p=D[Z],f={buff:C,off:0};if(p=="/FlateDecode"){C=FromPS.F.FlateDecode(f)}else if(p=="/RunLengthDecode"){C=FromPS.F.RunLengthDecode(f)}else if(p=="/LZWDecode"){C=FromPS.F.LZWDecode(f)}else if(p=="/ASCIIHexDecode"){C=FromPS.F.HexDecode(f)}else if(p=="/ASCII85Decode"||p=="/A85"){C=FromPS.F.ASCII85Decode(f)}else if(p=="/DCTDecode"||p=="/CCITTFaxDecode"||p=="/JPXDecode"||p=="/JBIG2Decode"){E=!0}else{console.log(p,C);
  338. throw"e"}}if(!E)delete N["/Filter"]}if(Y!=null){if(Y instanceof Array)Y=Y[0];if(Y["/Predictor"]!=null&&Y["/Predictor"]!=1){var z=Y["/Columns"],K=Y["/Colors"]?Y["/Colors"]:1,W=K*z,s=C.length/(W+1);
  339. FromPS._filterZero(C,0,z,s,K);C=C.slice(0,s*W)}}N.stream=C}return N.stream};FromPS._filterZero=function(N,C,O,Y,D){var E=D*O,Z=FromPS._paeth;
  340. for(var F=0;F<Y;F++){var f=C+F*E,z=f+F+1,K=N[z-1];if(K==0)for(var W=0;W<E;W++)N[f+W]=N[z+W];else if(K==1){for(var W=0;
  341. W<D;W++)N[f+W]=N[z+W];for(var W=D;W<E;W++)N[f+W]=N[z+W]+N[f+W-D]&255}else if(F==0){for(var W=0;W<D;W++)N[f+W]=N[z+W];
  342. if(K==2)for(var W=D;W<E;W++)N[f+W]=N[z+W]&255;if(K==3)for(var W=D;W<E;W++)N[f+W]=N[z+W]+(N[f+W-D]>>1)&255;
  343. if(K==4)for(var W=D;W<E;W++)N[f+W]=N[z+W]+Z(N[f+W-D],0,0)&255}else{if(K==2){for(var W=0;W<E;W++)N[f+W]=N[z+W]+N[f+W-E]&255}if(K==3){for(var W=0;
  344. W<D;W++)N[f+W]=N[z+W]+(N[f+W-E]>>1)&255;for(var W=D;W<E;W++)N[f+W]=N[z+W]+(N[f+W-E]+N[f+W-D]>>1)&255}if(K==4){for(var W=0;
  345. W<D;W++)N[f+W]=N[z+W]+Z(0,N[f+W-E],0)&255;for(var W=D;W<E;W++)N[f+W]=N[z+W]+Z(N[f+W-D],N[f+W-E],N[f+W-D-E])&255}}}return N};
  346. FromPS._paeth=function(N,C,O){var Y=N+C-O,D=Math.abs(Y-N),E=Math.abs(Y-C),Z=Math.abs(Y-O);if(D<=E&&D<=Z)return N;
  347. else if(E<=Z)return C;return O};function FromPDF(){}FromPDF.Parse=function(N,C){N=new Uint8Array(N);
  348. var O=0;while(N[O]==32)O++;if(O!=0)N=new Uint8Array(N.buffer,O,N.length-O);var Y=N.length-3;while(FromPS.B.readASCII(N,Y,3)!="%%E")Y--;
  349. while(N[Y-1]==37)Y--;var D=Y;Y--;while(FromPS.isEOL(N[Y]))Y--;while(!FromPS.isEOL(N[Y]))Y--;var E=parseInt(FromPS.B.readASCII(N,Y+1,D-Y-1));
  350. if(isNaN(E))throw"no xref";var Z=[],p=FromPDF.readXrefTrail(N,E,Z),F=-1;for(var f=0;f<Z.length;f++)if(Z[f]==null)F=f;
  351. if(p==null||F!=-1){console.log("PDF is broken, trying to rebuild");while(Z.length!=0)Z.pop();p=FromPDF.brokenXrefTrail(N,Z)}if(p["/Encrypt"]){alert("Encrypted PDFs are not supported yet.");
  352. return}var z={buff:N,off:0},K=p["/Root"];if(K.typ=="ref")p["/Root"]=FromPDF.getIndirect(K.ind,K.gen,z,Z);
  353. var W=p["/Root"]["/Pages"];if(W.typ=="ref")p["/Root"]["/Pages"]=FromPDF.getIndirect(W.ind,W.gen,z,Z);
  354. var s=[p["/Root"]["/Pages"]];while(s.length!=0){var v=s.pop();if(v["/Type"]=="/Pages"){var k=v["/Kids"];
  355. for(var f=0;f<k.length;f++){if(k[f].typ=="ref")k[f]=FromPDF.getIndirect(k[f].ind,k[f].gen,z,Z);FromPDF.solveIndirects(k[f],z,Z);
  356. s.push(k[f])}}}var P=Date.now();FromPDF.render(p["/Root"],C,p);C.Done()};FromPDF.solveIndirects=function(N,C,O){if(typeof N=="object")for(var Y in N)if(Y.startsWith("/")){if(N[Y]&&N[Y].typ=="ref"&&O[N[Y].ind])N[Y]=FromPDF.getIndirect(N[Y].ind,N[Y].gen,C,O);
  357. FromPDF.solveIndirects(N[Y],C,O)}};FromPDF.render=function(N,C,O){var Y="CS cs SCN scn SC sc sh Do gs ID EI cm y v B B* BT ET Tj TJ Tf Tm Td T* Tc Tw Tz TL Tr Ts MP DP BMC BDC EMC BX EX ri".split(" "),D={J:"setlinecap",j:"setlinejoin",w:"setlinewidth",d:"setdash",M:"setmiterlimit",i:"setflat",q:"gsave",Q:"grestore",m:"moveto",l:"lineto",c:"curveto",h:"closepath",re:"_drawRect_",W:"clip","W*":"eoclip",f:"fill",F:"fill","f*":"eofill",S:"stroke",b:"h B","b*":"h B*",n:"newpath",RG:"/DeviceRGB CS SCN",rg:"/DeviceRGB cs scn",G:"/DeviceGray CS SCN",g:"/DeviceGray cs scn",K:"/DeviceCMYK CS SCN",k:"/DeviceCMYK cs scn",TD:"dup neg TL Td","\"":"exch Tc exch Tw '","'":"T* Tj",s:"h S",BI:"/BI"},Z=0;
  358. D=FromPS.makeProcs(D);var E=[N["/Pages"]];while(E.length!=0){var p=E.pop();if(p["/Type"]=="/Pages"){var F=p["/Kids"];
  359. for(var f=F.length-1;f>=0;f--)E.push(F[f]);continue}var z=p["/MediaBox"];if(z==null)z=N["/Pages"]["/MediaBox"];
  360. Z+=(z[2]-z[0])*(z[3]-z[1])}var E=[N["/Pages"]],K=-1,W=[-1e9,1e9];while(E.length!=0){var p=E.pop();if(p["/Type"]=="/Pages"){var F=p["/Kids"];
  361. for(var f=F.length-1;f>=0;f--)E.push(F[f]);continue}K++;if(K<W[0])continue;if(p["/Resources"]==null)p["/Resources"]=N["/Pages"]["/Resources"];
  362. var s=p["/Contents"];if(s==null)continue;if(s.length==null)s=[s];var v=p["/Rotate"]!=null&&(p["/Rotate"]+36e3)%360==90,z=p["/MediaBox"];
  363. if(z==null)z=N["/Pages"]["/MediaBox"];if(v)z=[z[0],z[1],z[3],z[2]];var k=FromPS._getEnv(z);k.pgOpen=!0;
  364. var P=[],R=[],x=FromPS._getDictStack(Y,D),B=[];if(v){UDOC.M.rotate(k.gst.ctm,Math.PI/2);UDOC.M.translate(k.gst.ctm,0,z[3])}C.StartPage(z[0],z[1],z[2],z[3],Z);
  365. if(O["/Encrypt"]){if(E.length==0)alert("Encrypted PDF is not supported yet.")}else for(var h=0;h<s.length;
  366. h++){if(s[h].buff==null)continue;var L=FromPS.GS(s[h]),u=L.length-1,S=!0;while(L[u]==0)u--;L=new Uint8Array(L.buffer,0,u+1);
  367. B.push({typ:"file",val:{buff:L,off:0,extra:p,clgrp:!1}});while(S){S=FromPS.step(R,x,B,P,k,C,FromPDF.operator)}}C.ShowPage();
  368. if(K>=W[1])break}};FromPDF.addCmd=function(N,C,O){var Y=N.length,D=new Uint8Array(Y);for(var E=0;E<Y;
  369. E++)D[E]=N.charCodeAt(E);C.push({typ:"file",val:{buff:D,off:0,extra:O}})};FromPDF._pushForm=function(N,C,O,Y){var D=C["/Matrix"];
  370. if(Y)FromPDF.addCmd("Q",N,C);if(D){var E=D.slice(0);UDOC.M.invert(E);FromPDF.addCmd(E.join(" ")+" cm",N,C)}N.push({typ:"file",val:{buff:FromPS.GS(C),off:0,extra:C,clgrp:O}});
  371. if(D)FromPDF.addCmd(D.join(" ")+" cm",N,C);if(Y)FromPDF.addCmd("q",N,C)};FromPDF.operator=function(N,C,O,Y,D,E,Z){var p=E.gst,F=Y.length-1;
  372. while(Y[F].typ!="file")F--;var f=Y[F].val,z=f.extra["/Resources"];if(N=="Do"){var K=C.pop().val,W=z["/XObject"][K],s=W["/Subtype"];
  373. if(s=="/Form"){var v=W["/Group"],k=!1;if(v!=null){k=!0}if(W["/Resources"]==null)W["/Resources"]=z;FromPDF._pushForm(Y,W,k)}else if(s=="/Image"){var P=W["/Width"],R=W["/Height"],x=W["/ColorSpace"],B=W["/SMask"],h=FromPDF.getImage(W),L=FromPDF.getJBIG2Glob(W),S,$;
  374. if(B&&B["/Width"]){var _=B["/Width"],m=B["/Height"];if(_!=P||m!=R){var y=new Uint32Array(_*m),bu=new Uint32Array(h.buffer.slice(0,4));
  375. y.fill(bu[0]);P=_;R=m;h=new Uint8Array(y.buffer)}S=FromPDF.getImage(W["/SMask"]);$=FromPDF.getJBIG2Glob(W["/SMask"])}if(W["/ImageMask"]==!0){S=h;
  376. $=L;h=new Uint8Array(P*R*4);L=null;var b=p.colr[0]*255,cs=p.colr[1]*255,w=p.colr[2]*255;for(var i=0;
  377. i<P*R*4;i+=4){h[i]=b;h[i+1]=cs;h[i+2]=w;h[i+3]=255}}Z.PutImage(p,h,P,R,S,L,$)}else console.log("Unknown XObject",s)}else if(N=="gs"){var q=C.pop().val,ck=z["/ExtGState"][q];
  378. for(var n in ck){var aC=ck[n];if(n=="/Type")continue;else if(n=="/CA")p.CA=f.clgrp?p.CA*aC:aC;else if(n=="/ca")p.ca=f.clgrp?p.ca*aC:aC;
  379. else if(n=="/BM"){if(!f.clgrp||p.bmode=="/Normal")p.bmode=aC}else if(n=="/LC")p.lcap=aC;else if(n=="/LJ")p.ljoin=aC;
  380. else if(n=="/LW")p.lwidth=aC;else if(n=="/ML")p.mlimit=aC;else if(n=="/SA")p.SA=aC;else if(n=="/OPM")p.OPM=aC;
  381. else if(n=="/AIS")p.AIS=aC;else if(n=="/OP")p.OP=aC;else if(n=="/op")p.op=aC;else if(n=="/SMask"){p.SMask=""}else if(n=="/SM")p.SM=aC;
  382. else if(n=="/HT"||n=="/TR"){}else console.log("Unknown gstate property: ",n,aC)}}else if(N=="ID"){var aI={};
  383. while(!0){var aC=C.pop().val;if(aC=="/BI")break;aI[C.pop().val]=aC}f.off++;var P=aI["/W"],R=aI["/H"],bM=P*R,h=new Uint8Array(bM*4),x=aI["/CS"],bD=aI["/BPC"],a=f.off;
  384. while(!FromPS.isWhite(f.buff[a])||f.buff[a+1]!=69||f.buff[a+2]!=73)a++;var c2=f.buff.slice(f.off,a);
  385. f.off+=c2.length;if(aI["/F"]=="/Fl"){var cp={buff:c2,"/Filter":"/FlateDecode"};if(aI["/DP"]){var a1=cp["/DecodeParms"]={},cn=["Predictor","Columns","Colors"];
  386. for(var i=0;i<3;i++)if(aI["/DP"][cn[i]])a1["/"+cn[i]]=aI["/DP"][cn[i]].val}c2=FromPS.GS(cp);delete aI["/F"];
  387. delete aI["/DP"]}if(x=="/G"&&aI["/F"]==null){FromPDF.plteImage(c2,0,h,null,P,R,bD)}else if(x=="/RGB"&&aI["/F"]==null&&c2.length==P*R*3){for(var i=0;
  388. i<bM;i++){var bn=i*3,b9=i*4;h[b9]=c2[bn];h[b9+1]=c2[bn+1];h[b9+2]=c2[bn+2];h[b9+3]=255}}else if(x&&x[0].typ!=null){FromPDF.plteImage(c2,0,h,x[3].val,P,R,bD)}else h=c2;
  389. Z.PutImage(p,h,P,R)}else if(N=="n"||N=="BT"||N=="EI"){}else if(N=="ET"){p.font.Tm=[1,0,0,1,0,0];p.font.Tlm=p.font.Tm.slice(0)}else if(N=="y"||N=="v"){var ae=p.ctm.slice(0);
  390. UDOC.M.invert(ae);var n=UDOC.M.multPoint(ae,p.cpos),aT=C.pop().val,H=C.pop().val,cj=C.pop().val,bt=C.pop().val;
  391. if(N=="y")UDOC.G.curveTo(p,bt,cj,H,aT,H,aT);else UDOC.G.curveTo(p,n[0],n[1],bt,cj,H,aT)}else if(N=="B"||N=="B*"){Z.Fill(p,N=="B*");
  392. Z.Stroke(p);UDOC.G.newPath(p)}else if(N=="cm"||N=="Tm"){var aM=[];for(var i=0;i<6;i++)aM.push(C.pop().val);
  393. aM.reverse();if(N=="cm"){UDOC.M.concat(aM,p.ctm);p.ctm=aM}else{p.font.Tm=aM;p.font.Tlm=aM.slice(0)}}else if(N=="Td"||N=="T*"){var b2=0,bw=0;
  394. if(N=="T*"){b2=0;bw=-p.font.Tl}else{bw=C.pop().val;b2=C.pop().val}var c3=[1,0,0,1,b2,bw];UDOC.M.concat(c3,p.font.Tlm);
  395. p.font.Tm=c3;p.font.Tlm=c3.slice(0)}else if(N=="Tf"){var cb=C.pop().val,g=C.pop().val;p.font.Tf=g;p.font.Tfs=cb}else if(N=="Tj"||N=="TJ"){var cl=C.pop();
  396. if(cl.typ=="string")cl=[cl];else cl=cl.val;var aP=p.font.Tf,g=z["/Font"][aP],bc=p.font.Tfs/1e3,aS=function(ca,o){var cv=[1,0,0,1,o,0];
  397. UDOC.M.concat(cv,ca.Tm);ca.Tm=cv};for(var i=0;i<cl.length;i++){if(cl[i].typ!="string"){if(i==0)aS(p.font,-bc*cl[i].val);
  398. continue}var bp=FromPDF.getString(cl[i].val,g);if(cl[i+1]&&cl[i+1].typ!="string"){var b$=cl[i+1].val;
  399. bp[1]+=-b$;if(-900<b$&&b$<-100)bp[0]+=" "}p.font.Tf=bp[2];Z.PutText(p,bp[0],bp[1]/1e3);p.font.Tf=aP;
  400. aS(p.font,bc*bp[1])}}else if(N=="Tc")p.font.Tc=C.pop().val;else if(N=="Tw")p.font.Tw=C.pop().val;else if(N=="Tz")p.font.Th=C.pop().val;
  401. else if(N=="TL")p.font.Tl=C.pop().val;else if(N=="Tr")p.font.Tmode=C.pop().val;else if(N=="Ts")p.font.Trise=C.pop().val;
  402. else if(N=="CS"||N=="cs"){var x=C.pop().val;if(N=="CS")p.sspace=x;else p.space=x}else if(N=="SCN"||N=="scn"||N=="SC"||N=="sc"){var bZ=N=="SCN"||N=="SC",c0=bZ?p.sspace:p.space,x,bb=null,bE=z?z["/ColorSpace"]:null;
  403. if(bE!=null&&bE[c0]!=null){if(bE[c0][1]&&bE[c0][1]["/Alternate"])x=bE[c0][1]["/Alternate"];else x=typeof bE[c0]=="string"?bE[c0]:bE[c0][0]}else x=c0;
  404. if(x=="/DeviceN"){var bx=bE[c0],aH=bx[1].length;for(var i=0;i<aH;i++)C.pop();bb=[1,0,0]}else if(x=="/Lab"||x=="/DeviceRGB"||x=="/CalRGB"||x=="/ICCBased"&&bE[c0][1]["/N"]==3){bb=[C.pop().val,C.pop().val,C.pop().val];
  405. bb.reverse()}else if(x=="/DeviceCMYK"||x=="/ICCBased"&&bE[c0][1]["/N"]==4){var aV=[C.pop().val,C.pop().val,C.pop().val,C.pop().val];
  406. aV.reverse();bb=UDOC.C.cmykToRgb(aV)}else if(x=="/DeviceGray"||x=="/CalGray"||x=="/ICCBased"&&bE[c0][1]["/N"]==1){var a6=FromPS.nrm(C.pop().val);
  407. bb=[a6,a6,a6]}else if(x=="/Separation"){bb=FromPS._readSeparation(bE[c0],C.pop().val)}else if(x=="/Indexed"){var bC=FromPDF.getPalette(bE[c0]),ab=C.pop().val*3;
  408. bb=[bC[ab]/255,bC[ab+1]/255,bC[ab+2]/255]}else if(x=="/Pattern"){var ar=z["/Pattern"][C.pop().val],bg=ar["/PatternType"];
  409. if(bg==1){console.log("tile pattern");FromPDF._pushForm(Y,ar,k,!0);return}var bL=ar["/Matrix"];if(bL==null)bL=[1,0,0,1,0,0];
  410. bb=FromPS.getShadingFill(ar["/Shading"],bL);if(bb==null)bb=[0,0,0]}else{console.log(c0,x,bE,z);throw"e"}if(bZ)p.COLR=bb;
  411. else p.colr=bb}else if(N=="sh"){var bK=z["/Shading"][C.pop().val],aR=p.colr,a9=p.pth;p.pth=p.cpth;p.cpth=UDOC.G.rectToPath(E.bb);
  412. p.colr=FromPS.getShadingFill(bK,p.ctm.slice(0));if(p.colr==null)p.colr=[0,0,0];Z.Fill(p);p.colr=aR;p.pth=a9}else if(N=="MP"||N=="BMC"||N=="ri"){C.pop()}else if(N=="DP"||N=="BDC"){C.pop();
  413. C.pop()}else if(N=="EMC"||N=="BX"||N=="EX"){}else throw"Unknown operator",N};FromPDF.getJBIG2Glob=function(N){var C=N;
  414. C=C["/DecodeParms"];if(C==null)return null;C=C["/JBIG2Globals"];if(C==null)return null;return FromPS.GS(C)};
  415. FromPDF.getImage=function(N){var C=N["/Width"],O=N["/Height"],Y=C*O,D=FromPS.GS(N),E=N["/Filter"],Z=N["/ColorSpace"],F=N["/BitsPerComponent"],f=N["/Matte"],z=N.image;
  416. if(z==null){var K=N["/Mask"];if(Z&&Z[0]=="/Indexed"){var W=FromPDF.getPalette(Z),s=new Uint8Array(Y*4);
  417. FromPDF.plteImage(D,0,s,W,C,O,F,K);z=s}else if(E==null&&Z&&Z=="/DeviceGray"){var W=[0,0,0,255,255,255],s=new Uint8Array(Y*4);
  418. if(N["/Decode"]&&N["/Decode"][0]==1){W.reverse()}if(N["/ImageMask"]==!0)W.reverse();FromPDF.plteImage(D,0,s,F==1?W:null,C,O,F,K);
  419. z=s}else if(E==null&&Z&&(Z=="/DeviceCMYK"||Z[0]=="/ICCBased"&&Z[1]&&Z[1]["/N"]==4)){var s=new Uint8Array(Y*4),v=[0,0,0,0];
  420. for(var k=0;k<Y;k++){var P=k*4;v[0]=D[P]*(1/255);v[1]=D[P+1]*(1/255);v[2]=D[P+2]*(1/255);v[3]=D[P+3]*(1/255);
  421. var R=UDOC.C.cmykToRgb(v);s[P]=~~(R[0]*255+.5);s[P+1]=~~(R[1]*255+.5);s[P+2]=~~(R[2]*255+.5);s[P+3]=255}z=s}else if(C*O*3<=D.length){var x=Math.round(255/((1<<F)-1)),B=Math.ceil(C*3*F/8),s=new Uint8Array(Y*4);
  422. for(var h=0;h<O;h++){var L=B*h;for(var S=0;S<C;S++){var P=(h*C+S)*4,_=3*S;s[P]=FromPDF.getBitNum(D,L,_,F);
  423. s[P+1]=FromPDF.getBitNum(D,L,_+1,F);s[P+2]=FromPDF.getBitNum(D,L,_+2,F);s[P+3]=255}}z=s}else{z=D}if(f&&f.join("")!="000"){var m=Math.round(f[0]*255),y=Math.round(f[1]*255),bu=Math.round(f[2]*255);
  424. for(var k=0;k<z.length;k+=4){z[k]=Math.max(z[k],m);z[k+1]=Math.max(z[k+1],y);z[k+2]=Math.max(z[k+2],bu)}}N.image=z}return z};
  425. FromPDF.getPalette=function(N){var C;if(N[3].length!=null){var O=N[3];C=new Uint8Array(256*3);for(var Y=0;
  426. Y<O.length;Y++)C[Y]=O.charCodeAt(Y)}else C=FromPS.GS(N[3]);if(N[1]=="/DeviceCMYK"||N[1]&&N[1][1]&&N[1][1]["/N"]==4){var D=C,C=new Uint8Array(256*3);
  427. for(var Y=0;Y<256;Y++){var E=Y<<2,Z=E-Y,p=UDOC.C.cmykToRgb([D[E]/255,D[E+1]/255,D[E+2]/255,D[E+3]/255]);
  428. C[Z]=p[0]*255;C[Z+1]=p[1]*255;C[Z+2]=p[2]*255}}return C};FromPDF.plteImage=function(N,C,O,Y,D,E,Z,F){var f=Math.round(255/((1<<Z)-1)),z=Math.ceil(D*Z/8);
  429. for(var K=0;K<E;K++){var W=C+z*K;for(var s=0;s<D;s++){var v=FromPDF.getBitNum(N,W,s,Z),k=K*D+s<<2;if(Y){var P=v*3;
  430. O[k]=Y[P];O[k+1]=Y[P+1];O[k+2]=Y[P+2]}else{var R=v*f;O[k]=R;O[k+1]=R;O[k+2]=R}O[k+3]=255;if(F&&F[0]<=v&&v<=F[1])O[k+3]=0}}};
  431. FromPDF.getBitNum=function(N,C,O,Y){var D=0;if(Y==8)D=N[C+O];else if(Y==4)D=N[C+(O>>1)]>>(1-(O&1)<<2)&15;
  432. else if(Y==2)D=N[C+(O>>2)]>>(3-(O&3)<<1)&3;else if(Y==1)D=N[C+(O>>3)]>>(7-(O&7)<<0)&1;return D};FromPDF.getString=function(N,C){var O=C["/Subtype"],Y="",D=0,E=null,Z=C["/ToUnicode"],p=C["/Encoding"],F=C,cs;
  433. if(Z!=null&&typeof Z!="object")Z=null;if(O=="/Type0")F=C["/DescendantFonts"][0];if(Z!=null)Y=FromPDF.toUnicode(N,Z);
  434. else if(p=="/WinAnsiEncoding")Y=FromPDF.encFromMap(N,FromPDF._win1252);else if(p=="/MacRomanEncoding")Y=FromPDF.encFromMap(N,FromPDF._macRoman);
  435. else if(O=="/Type0"){var f=0,z=F["/CIDSystemInfo"]["/Ordering"];if(z=="Identity")f=0;else if(z=="Japan1")f=31;
  436. else if(z=="GB1")f=31;else if(z=="CNS1")f=31;else if(z=="Korea1")f=31;else{console.log("unknown ordering",z);
  437. f=0}for(var K=0;K<N.length;K+=2){var s=N[K]<<8|N[K+1];Y+=String.fromCharCode(s+f)}}else if(p!=null&&p["/Type"]=="/Encoding"){var v=p["/Differences"],k=p["/BaseEncoding"],P=null;
  438. if(k=="/WinAnsiEncoding")P=FromPDF._win1252;if(k=="/MacRomanEncoding")P=FromPDF._macRoman;if(v){var Y="";
  439. for(var R=0;R<N.length;R++){var B=N[R],h=-5,L=!1;for(var K=0;K<v.length;K++){if(typeof v[K]=="string"){if(B==h){Y+=FromPDF.fromCName(v[K].slice(1));
  440. L=!0;break}h++}else h=v[K]}if(!L&&P!=null){var u=P.indexOf(B);if(u!=-1)B=String.fromCharCode(P[u+1]);
  441. Y+=String.fromCharCode(B)}else if(!L)Y+=String.fromCharCode(B)}}}else{Y=FromPS.readStr(N)}if(O=="/Type0"){var S=F["/W"];
  442. if(S&&S.length==0)S=null;if(S==null){D=Y.length*1e3*.4;console.log("approximating word widths")}else for(var R=0;
  443. R<N.length;R+=2){var $=N[R]<<8|N[R+1],_=!1;for(var K=0;K<S.length;K+=2){var m=S[K],y=S[K+1];if(y.length){if(0<=$-m&&$-m<y.length){D+=y[$-m];
  444. _=!0}}else{if(m<=$&&$<=y){D+=S[K+2];_=!0}K++}}if(!_)D+=S[1][0]}}else if(O=="/Type1"||O=="/Type3"||O=="/TrueType"){var bu=C["/FirstChar"],S=C["/Widths"];
  445. if(S)for(var R=0;R<N.length;R++)D+=S[N[R]-bu];else{D=Y.length*1e3*.4;console.log("approximating word width")}}else throw"unknown font type";
  446. var b=F["/FontDescriptor"],w=["","2","3"];for(var R=0;R<3;R++)if(b&&b["/FontFile"+w[R]])cs="/FontFile"+w[R];
  447. if(b){if(b.psName)E=b.psName;else if(cs){var i=FromPS.GS(b[cs]);if(cs!=null&&i&&FromPS.B.readUint(i,0)==65536)E=b.psName=FromPDF._psName(i)}}if(E==null&&C["/BaseFont"])E=C["/BaseFont"].slice(1);
  448. if(E==null||E=="")E="DejaVuSans";return[Y,D,E]};FromPDF._psName=function(N){var C=FromPS.B.readUshort,O=C(N,4),Y=0;
  449. for(var D=0;D<O;D++){var E=FromPS.B.readASCII(N,12+D*16,4),Z=FromPS.B.readUint(N,12+D*16+8);if(E=="name"){Y=Z;
  450. break}}if(Y==0)return null;var p=C(N,Y+2),f=Y+6,z=Y+6;for(var D=0;D<p;D++){var K=C(N,z),W=C(N,z+2),s=C(N,z+4),v=C(N,z+6),k=C(N,z+8),P=C(N,z+10),R;
  451. z+=12;var B=f+p*12+P;if(W==1||W==10||W==3||K==3&&W==0){R="";for(var h=1;h<k;h+=2)R+=String.fromCharCode(N[B+h])}else if(W==0||W==2)R=FromPS.B.readASCII(N,B,k);
  452. if(v==6&&R!=null&&R.slice(0,3)!="OTS")return R.replace(/\s/g,"")}return null};FromPDF.encFromMap=function(N,C){var O="";
  453. for(var Y=0;Y<N.length;Y++){var D=N[Y],E=C.indexOf(D);if(E!=-1)D=C[E+1];O+=String.fromCharCode(D)}return O};
  454. FromPDF._win1252=[128,8364,130,8218,131,402,132,8222,133,8230,134,8224,135,8225,136,710,137,8240,138,352,139,8249,140,338,142,381,145,8216,146,8217,147,8220,148,8221,149,8226,150,8211,151,8212,152,732,153,8482,154,353,155,8250,156,339,158,382,159,376];
  455. FromPDF._macRoman=[128,196,129,197,130,199,131,201,132,209,133,214,134,220,135,225,136,224,137,226,138,228,139,227,140,229,141,231,142,233,143,232,144,234,145,235,146,237,147,236,148,238,149,239,150,241,151,243,152,242,153,244,154,246,155,245,156,250,157,249,158,251,159,252,160,8224,161,176,162,162,163,163,164,167,165,8226,166,182,167,223,168,174,169,169,170,8482,171,180,172,168,173,9824,174,198,175,216,176,8734,177,177,178,8804,179,8805,180,165,181,181,182,8706,183,8721,184,8719,185,960,186,8747,187,170,188,186,189,937,190,230,191,248,192,191,193,161,194,172,195,8730,196,402,197,8776,198,8710,199,171,200,187,201,8230,202,160,203,192,204,195,205,213,206,338,207,339,208,8211,209,8212,210,8220,211,8221,212,8216,213,8217,214,247,215,9674,216,255,217,376,218,8260,219,8364,220,8249,221,8250,222,64257,223,64258,224,8225,225,183,226,8218,227,8222,228,8240,229,194,230,202,231,193,232,203,233,200,234,205,235,206,236,207,237,204,238,211,239,212,240,63743,241,210,242,218,243,219,244,217,245,305,246,710,247,732,248,175,249,728,250,729,251,730,252,184,253,733,254,731,255,711];
  456. FromPDF.fromCName=function(N){if(N=="f_f_i")return"ffi";if(N.length==1)return N;if(N.slice(0,3)=="uni")return String.fromCharCode(parseInt(N.slice(3),16));
  457. var C={space:32,exclam:33,quotedbl:34,numbersign:35,dollar:36,percent:37,ampersand:38,quotesingle:39,parenleft:40,parenright:41,asterisk:42,plus:43,comma:44,hyphen:45,period:46,slash:47,zero:48,one:49,two:50,three:51,four:52,five:53,six:54,seven:55,eight:56,nine:57,colon:58,semicolon:59,less:60,equal:61,at:64,bracketleft:91,bracketright:93,underscore:95,braceleft:123,braceright:125,dieresis:168,circlecopyrt:169,degree:176,plusminus:177,Eacute:201,Adieresis:196,adieresis:228,Udieresis:220,germandbls:223,udieresis:252,Odieresis:214,odieresis:246,Cacute:262,cacute:263,Ccaron:268,ccaron:269,Dcroat:272,dcroat:273,Ecaron:283,ecaron:283,dotlessi:305,Scaron:352,scaron:353,Tcaron:356,tcaron:357,Zcaron:381,zcaron:382,alpha:945,phi:966,endash:8211,emdash:8212,asteriskmath:8727,quoteright:8217,quotedblbase:8222,ellipsis:8230,quotedblleft:8220,quotedblright:8221,bullet:8226,minus:8706,fi:64257,fl:64258},O=C[N];
  458. if(O==null){if(N.charAt(0)!="g")console.log("unknown character "+N);return N}return String.fromCharCode(O)};
  459. FromPDF.toUnicode=function(N,C){var O=C.cmap,Y="",D;if(O==null){var E={buff:FromPS.GS(C),off:0},Z=[],p=FromPS._getDictStack({}),F=[{typ:"file",val:E}],f=[],z=FromPS._getEnv([0,0,1,1]),K=!0;
  460. z.pgOpen=!0;while(K)K=FromPS.step(Z,p,F,f,z,null,FromPS.operator,!0);O=z.res.CMap.val;C.cmap=O}for(var W in O){O=O[W].val;
  461. break}var s=O.bfrange,v=O.bfchar,P=O.bpc;for(var R=0;R<N.length;R+=P){var B=N[R],h=!1;if(P==2)B=B<<8|N[R+1];
  462. if(!h&&s)for(var L=0;L<s.length;L+=3){var u=s[L],S=s[L+1],$=s[L+2];if(u<=B&&B<=S){if(u==S&&$==0){}else if($.length==null)B+=$-u;
  463. else B=$[B-u];h=!0;break}}if(!h&&v)for(var L=0;L<v.length;L+=2)if(v[L]==B){B=v[L+1];h=!0;break}Y+=String.fromCharCode(B)}return Y};
  464. FromPDF.brokenXrefTrail=function(N,C){function O(s,v){var k=v;while(48<=s[v]&&s[v]<=57)v++;return FromPS.B.readASCII(s,k,v-k)}var Y,D=N.length;
  465. for(var E=0;E<D;E++){if(FromPS.isEOL(N[E])){var Z=E;while(FromPS.isWhite(N[Z]))Z++;var p=O(N,Z);if(p!=""){Z+=p.length;
  466. while(FromPS.isWhite(N[Z]))Z++;var f=O(N,Z);if(f!=""){Z+=f.length;while(FromPS.isWhite(N[Z]))Z++;if(FromPS.B.readASCII(N,Z,3)=="obj"){var z=parseInt(p),K=parseInt(f);
  467. C[z]={off:E+1,gen:K,chr:"n"};E=Z}}}else if(N[Z]==116&&N[Z+1]==114&&FromPS.B.readASCII(N,Z,7)=="trailer"){if(Y==null)Y=FromPDF._readTrailer(N,Z+7,C)}else if(N[Z]==115&&N[Z+1]==116&&FromPS.B.readASCII(N,Z,9)=="startxref"){Z+=10;
  468. while(FromPS.isWhite(N[Z]))Z++;var W=parseInt(O(N,Z));if(W!=0&&Y==null)Y=FromPDF.readXrefTrail(N,W,C)}}}return Y};
  469. FromPDF._readTrailer=function(N,C,O){var Y={buff:N,off:C},D=FromPDF.readObject(Y,Y,O);if(D["/Prev"])FromPDF.readXrefTrail(N,D["/Prev"],O);
  470. return D};FromPDF.readXrefTrail=function(N,C,O){var Y=FromPS.B.readASCII(N,C,4);if(Y=="xref"){var D=C+4;
  471. if(N[D]==13)D++;if(N[D]==10)D++;while(!0){if(FromPS.B.readASCII(N,D,7)=="trailer"){D+=7;if(N[D]==13)D++;
  472. if(N[D]==10)D++;break}var E=D;while(!FromPS.isEOL(N[D]))D++;var Z=FromPS.B.readASCII(N,E,D-E);Z=Z.split(" ");
  473. var p=parseInt(Z[0]),F=parseInt(Z[1]);if(N[D]==13)D++;if(N[D]==10)D++;for(var f=0;f<F;f++){var z=p+f;
  474. if(O[z]==null)O[z]={off:parseInt(FromPS.B.readASCII(N,D,10)),gen:parseInt(FromPS.B.readASCII(N,D+11,5)),chr:FromPS.B.readASCII(N,D+17,1),val:null,opn:!1};
  475. if(N[D+16]!=32)return null;D+=20}}return FromPDF._readTrailer(N,D,O)}else{var D=C;while(!FromPS.isEOL(N[D]))D++;
  476. while(FromPS.isWhite(N[D]))D++;if(FromPS.B.readASCII(N,D,2)=="<<"){var K={buff:N,off:D},W=FromPDF.readObject(K,K,null),v=0,k=FromPS.GS(W),P=W["/W"],R=W["/Index"],x=[],f=0;
  477. if(R){for(f=0;f<R.length;f+=2){for(var B=0;B<R[f+1];B++)x.push(R[f]+B)}}f=0;while(v<k.length){var h=FromPDF.getInt(k,v,P[0]),D=0,$=0,_="n";
  478. v+=P[0];var L=FromPDF.getInt(k,v,P[1]);v+=P[1];var S=FromPDF.getInt(k,v,P[2]);v+=P[2];if(h==0){D=L;$=S;
  479. _="f"}if(h==1){D=L;$=S;_="n"}if(h==2){D=L;$=S;_="s"}O[R?x[f]:f]={off:D,gen:$,chr:_,val:null,opn:!1};
  480. f++}if(W["/Prev"])FromPDF.readXrefTrail(N,W["/Prev"],O);if(W["/Encrypt"])return W;var m={buff:N,off:0},y=["/Root","/Info"];
  481. for(f=0;f<y.length;f++){var bu=y[f],b=W[bu];if(b&&b.typ=="ref")W[bu]=FromPDF.getIndirect(b.ind,b.gen,m,O)}return W}else return null}};
  482. FromPDF.getInt=function(N,O,Y){if(Y==0)return 0;if(Y==1)return N[O];if(Y==2)return N[O]<<8|N[O+1];if(Y==3)return N[O]<<16|N[O+1]<<8|N[O+2];
  483. if(Y==4)return N[O]<<24|N[O+1]<<16|N[O+2]<<8|N[O+3];while(Y>4){Y--;O++}return N[O]<<24|N[O+1]<<16|N[O+2]<<8|N[O+3]};
  484. FromPDF.getIndirect=function(N,C,O,Y){var D=Y[N],p;if(D.chr=="f")return null;if(D.val!=null)return D.val;
  485. if(D.opn)return{typ:"ref",ind:N,gen:C};D.opn=!0;var E=O.off;if(D.chr=="s"){var f=FromPDF.getIndirect(D.off,D.gen,O,Y),z={buff:FromPS.GS(f),off:0},K=0,W=0;
  486. while(K!=N){K=FromPS.getFToken(z).val;W=FromPS.getFToken(z).val}z.off=W+f["/First"];p=FromPDF.readObject(z,O,Y)}else{O.off=D.off;
  487. var s=FromPS.getFToken(O);if(s.val!="<<"){var v=FromPS.getFToken(O),k=FromPS.getFToken(O)}else O.off-=2;
  488. p=FromPDF.readObject(O,O,Y)}D.val=p;O.off=E;D.opn=!1;return p};FromPDF.readObject=function(N,C,O){var Y=FromPS.getFToken(N);
  489. if(Y.typ=="integer"){var D=N.off,E=FromPS.getFToken(N);if(E&&E.typ=="integer"){FromPS.skipWhite(N);if(N.buff[N.off]==82){N.off++;
  490. if(O&&O[Y.val])return FromPDF.getIndirect(Y.val,E.val,C,O);else return{typ:"ref",ind:Y.val,gen:E.val}}}N.off=D}if(Y.val=="<<")return FromPDF.readDict(N,C,O);
  491. if(Y.val=="[")return FromPDF.readArra(N,C,O);if(Y.typ=="string"){var Z="";for(var p=0;p<Y.val.length;
  492. p++)Z+=String.fromCharCode(Y.val[p]);return Z}if(Y.typ=="name"&&Y.val==">>")throw"e";return Y.val};FromPDF.readDict=function(N,C,O){var Y={};
  493. while(!0){var D=N.off,E=FromPS.getFToken(N);if(E.typ=="name"&&E.val==">>")break;N.off=D;var Z=FromPDF.readObject(N,C,O),p=FromPDF.readObject(N,C,O);
  494. Y[Z]=p}if(Y["/Length"]!=null&&Y["/CFM"]==null){var F=Y["/Length"],f=FromPS.getFToken(N);if(N.buff[N.off]==32)N.off++;
  495. if(N.buff[N.off]==13)N.off++;if(N.buff[N.off]==10)N.off++;if(N.off+F>N.buff.length){console.log("too big /Length of a stream",F,N.buff.length-N.off,N.off)}Y.buff=N.buff.slice(N.off,N.off+F);
  496. N.off+=F;FromPS.getFToken(N)}return Y};FromPDF.readArra=function(N,C,O){var Y=[];while(!0){var D=N.off,E=FromPS.getFToken(N);
  497. if(E.typ=="name"&&E.val=="]")return Y;N.off=D;var Z=FromPDF.readObject(N,C,O);Y.push(Z)}};var FromWMF=function(){var N=0,C=53,O=55,Y=258,D=259,E=260,Z=261,p=262,F=263,f=264,z=295,K=313,W=322,s=329,v=513,k=521,P=529,R=531,x=532,B=544,h=552,L=561,u=564,S=804,$=805,_=522,m=523,y=524,bu=525,b=526,cs=527,w=1040,i=1042,q=1045,ck=1046,n=1048,aC=1049,aI=1065,bM=1078,bD=1313,a=1336,c2=1352,cp=1051,a1=1055,cn=1564,bn=1565,b9=30,ae=2074,aT=2851,H=1574,cj=298,bt=299,aM=300,b2=301,bw=302,c3=2071,cb=2096,g=2338,cl=2610,aP=3379,bc=2368,aS=2881,bp=3907,b$=496,bZ=247,c0=505,bb=762,bE=763,bx=764,aH=1791,aV=1,a6=2,bC=3,ab=4,ar=5,bg=6,bL=7,bK=8,aR=9,a9=10,ca=11,aF=12,o=13,cv=14,av=15,aQ=16,bv=17,bH=18,bW=19,aY=20,b1=21,bS=22,ap=23,au=24,bT=25,a5=26,c1=27,at=28,bN=29,bF=30,c4=31,by=32,bj=33,bY=34,bP=35,ax=37,aU=38,b3=42,b8=256,aN=258,aL=512,a2=513,aO=514,ad=2049,c8=3073,bA=4096,bl=4097,bQ=4098,bk=4110,as=4111,aE=4112,a3=4115,cd=4116,ay=4117,b6=4118,t=4119,aA=4120,cw=4121,I=4122,c=4568,M=UDOC.B;
  498. function d(J,l){J=new Uint8Array(J);var e=0,Q={fill:!1,strk:!1,bb:[0,0,1,1],lbb:[0,0,1,1],scl:1,fnt:{nam:"Arial",hgh:25,und:!1,orn:0,chrst:0},tclr:[0,0,0],talg:0},j=M.readShort,A=M.readUshort,T=M.readUint,ct=T(J,0),ak=0;
  499. if(ct==2596720087){e=6;var az=j(J,e+8);Q.scl=120/az;for(var ba=0;ba<4;ba++){Q.bb[ba]=Math.round(j(J,e)*Q.scl);
  500. e+=2}e+=2;e+=6}l.StartPage(Q.bb[0],Q.bb[1],Q.bb[2],Q.bb[3]);var V=UDOC.getState(Q.bb),b7=A(J,e);e+=2;
  501. var bJ=A(J,e);e+=2;var bo=A(J,e);e+=2;var c6=T(J,e);e+=4;var bs=A(J,e);e+=2;var ai=T(J,e);e+=4;var bs=A(J,e);
  502. e+=2;var U=[];while(!0){var bV=T(J,e)<<1,aB=null;e+=4;var af=A(J,e);e+=2;var X=af,r=e;if(!1){}else if(X==N)break;
  503. else if(X==H){var a4=A(J,e);r+=2;var br=a4;console.log(X,br)}else if(X==D||X==p||X==Y){}else if(X==b2){var aw=A(J,r);
  504. r+=2;var a8=U[aw];if(a8.t=="br"){Q.fill=a8.stl!=1;if(a8.stl==0){}else if(a8.stl==1){}else throw a8.stl+" e";
  505. V.colr=a8.clr}else if(a8.t=="pn"){var ac=a8.stl&7;Q.strk=ac!=5;if(ac==0||ac==6)V.lwidth=a8.px;else if(ac==5){}else throw ac+" e";
  506. if((a8.stl&4096)!=0)V.ljoin=2;else if((a8.stl&8192)!=0)V.ljoin=0;else V.ljoin=1;V.COLR=a8.clr}else if(a8.t=="fn"){Q.fnt=a8;
  507. V.font.Tf=a8.nam;V.font.Tfs=Math.abs(a8.hgh);V.font.Tun=a8.und}else throw"e"}else if(X==b$){var aw=A(J,r);
  508. r+=2;U[aw]=null}else if(X==m||X==y){var aW=X==m?0:2;Q.lbb[aW+1]=j(J,r);r+=2;Q.lbb[aW]=j(J,r);r+=2;aj(Q,V)}else if(X==bx){aB={t:"br"};
  509. aB.stl=A(J,r);r+=2;aB.clr=[J[r]/255,J[r+1]/255,J[r+2]/255];r+=4;aB.htc=A(J,r);r+=2}else if(X==bb){aB={t:"pn"};
  510. aB.stl=A(J,r);r+=2;aB.px=j(J,r);r+=2;aB.py=j(J,r);r+=2;aB.clr=[J[r]/255,J[r+1]/255,J[r+2]/255];r+=4}else if(X==bE){aB={t:"fn",nam:""};
  511. aB.hgh=j(J,r);r+=2;r+=2*2;aB.orn=j(J,r)/10;r+=2;var ag=j(J,r);r+=2;aB.und=J[r+1];r+=2;aB.stk=J[r];aB.chrst=J[e+1];
  512. r+=2;r+=4;while(J[r]!=0){aB.nam+=String.fromCharCode(J[r]);r++}if(ag>500)aB.nam+="-Bold"}else if(X==bZ){aB={t:"pl"}}else if(X==k)Q.tclr=[J[r]/255,J[r+1]/255,J[r+2]/255];
  513. else if(X==bw)Q.talg=A(J,r);else if(X==x){UDOC.G.moveTo(V,j(J,r+2),j(J,r))}else if(X==R){if(V.pth.cmds.length==0){var aq=V.ctm.slice(0);
  514. UDOC.M.invert(aq);var aJ=UDOC.M.multPoint(aq,V.cpos);UDOC.G.moveTo(V,aJ[0],aJ[1])}UDOC.G.lineTo(V,j(J,r+2),j(J,r));
  515. var c7=Q.fill;Q.fill=!1;a_(l,V,Q);Q.fill=c7}else if(X==a){var cf=A(J,r);r+=2;var ao=r;r+=cf*2;for(var ba=0;
  516. ba<cf;ba++){var cm=A(J,ao+ba*2);r=G(J,r,cm,V,!0)}a_(l,V,Q)}else if(X==S||X==$){var cm=A(J,r);r+=2;r=G(J,r,cm,V,X==S);
  517. var c7=Q.fill;Q.fill=c7&&X==S;a_(l,V,Q);Q.fill=c7}else if(X==cp||X==n){var be=j(J,r);r+=2;var al=j(J,r);
  518. r+=2;var bq=j(J,r);r+=2;var bU=j(J,r);r+=2;if(X==cp){UDOC.G.moveTo(V,bU,bq);UDOC.G.lineTo(V,al,bq);UDOC.G.lineTo(V,al,be);
  519. UDOC.G.lineTo(V,bU,be)}else{var bR=(bU+al)/2,cc=(bq+be)/2;UDOC.G.arc(V,bR,cc,(be-bq)/2,0,2*Math.PI,!1)}UDOC.G.closePath(V);
  520. var c7=Q.fill;Q.fill=!0;a_(l,V,Q);Q.fill=c7}else if(X==bp){var aX=T(J,r);r+=4;var bf=A(J,r);r+=2;var bI=j(J,r);
  521. r+=2;var a7=j(J,r);r+=2;var aa=j(J,r);r+=2;var aD=j(J,r);r+=2;var bh=j(J,r);r+=2;var cg=j(J,r);r+=2;
  522. var ah=j(J,r);r+=2;var bm=j(J,r);r+=2;var c9=a0(J,r),c5=V.ctm.slice(0);V.ctm=[1,0,0,1,0,0];UDOC.M.scale(V.ctm,cg,-bh);
  523. UDOC.M.translate(V.ctm,bm,ah+bh);UDOC.M.concat(V.ctm,c5);l.PutImage(V,c9,a7,bI);V.ctm=c5}else if(X==cl){var bd=j(J,r),aG="";
  524. r+=2;var b5=j(J,r);r+=2;V.font.Tm=[1,0,0,-1,0,0];UDOC.M.rotate(V.font.Tm,Q.fnt.orn*Math.PI/180);UDOC.M.translate(V.font.Tm,b5,bd);
  525. var b_=Q.talg;if((b_&6)==6)V.font.Tal=2;else if((b_&7)==0)V.font.Tal=0;else throw b_+" e";if((b_&24)==24){}else if((b_&24)==0)UDOC.M.translate(V.font.Tm,0,V.font.Tfs);
  526. else throw"e";var b4=A(J,r);r+=2;var bO=A(J,r);r+=2;if(bO&4)r+=8;for(var ba=0;ba<b4;ba++){var a$=J[r+ba];
  527. if(a$>127){ba++;a$=a$<<8|J[r+ba]}aG+=String.fromCharCode(a$)}var bB=V.colr;V.colr=Q.tclr;l.PutText(V,aG,aG.length*V.font.Tfs*.5);
  528. V.colr=bB}else{console.log(X,bV)}if(aB!=null){var ce=0;while(U[ce]!=null)ce++;U[ce]=aB}e+=bV-6}l.ShowPage();
  529. l.Done()}function a0(J,l){var e=M.readShort,Q=M.readUshort,j=M.readUint,A=j(J,l),T,ct,az;l+=4;if(A==12)throw"e";
  530. else{T=j(J,l);l+=4;ct=j(J,l);l+=4;var ba=Q(J,l);l+=2;if(ba!=1)throw"e";var V=Q(J,l);l+=2;if(V!=1&&V!=24&&V!=32)throw V+" e";
  531. var b7=j(J,l);l+=4;if(b7!=0)throw"e";var bJ=j(J,l);l+=4;var bo=j(J,l);l+=4;var c6=j(J,l);l+=4;az=j(J,l);
  532. l+=4;var bs=j(J,l);l+=4}var ai=T*ct,U=new Uint8Array(ai*4),ak=Math.floor((T*ba*V+31&~31)/8);if(V==1)for(var bV=0;
  533. bV<ct;bV++){var af=l+az*4+(ct-1-bV)*ak;for(var X=0;X<T;X++){var r=bV*T+X<<2,aB=J[af+(X>>>3)]>>>7-(X&7)&1;
  534. U[r]=J[l+aB*4+2];U[r+1]=J[l+aB*4+1];U[r+2]=J[l+aB*4+0];U[r+3]=255}}if(V==24){for(var bV=0;bV<ct;bV++)for(var X=0;
  535. X<T;X++){var r=bV*T+X<<2,a4=l+(ct-1-bV)*ak+X*3;U[r]=J[a4+2];U[r+1]=J[a4+1];U[r+2]=J[a4+0];U[r+3]=255}}if(V==32){for(var bV=0;
  536. bV<ct;bV++)for(var X=0;X<T;X++){var r=bV*T+X<<2,a4=l+(ct-1-bV)*ak+X*4;U[r]=J[a4+2];U[r+1]=J[a4+1];U[r+2]=J[a4+0];
  537. U[r+3]=J[a4+3]}}return U}function aj(J,l){var e=[1,0,0,1,0,0],Q=J.lbb,j=J.bb;UDOC.M.translate(e,-Q[0],-Q[1]);
  538. UDOC.M.scale(e,1/Q[2],1/Q[3]);UDOC.M.scale(e,j[2]-j[0],j[3]-j[1]);UDOC.M.translate(e,j[0],j[1]);l.ctm=e}function a_(J,l,e){if(e.fill)J.Fill(l,!1);
  539. if(e.strk&&l.lwidth!=0)J.Stroke(l,!1);UDOC.G.newPath(l)}function G(J,l,e,Q,j){var A=M.readShort;for(var T=0;
  540. T<e;T++){var ct=A(J,l);l+=2;var az=A(J,l);l+=2;if(T==0)UDOC.G.moveTo(Q,ct,az);else UDOC.G.lineTo(Q,ct,az)}if(j)UDOC.G.closePath(Q);
  541. return l}return{Parse:d}}(),FromEMF=function(){var N=1,C=2,O=3,Y=4,D=5,E=6,Z=7,p=8,F=9,f=10,z=11,K=12,W=13,s=14,v=15,k=16,P=17,R=18,x=19,B=20,h=21,L=22,u=23,S=24,$=25,_=26,m=27,y=28,bu=29,b=30,cs=31,w=32,i=33,q=34,ck=35,n=36,aC=37,aI=38,bM=39,bD=40,a=41,c2=42,cp=43,a1=44,cn=45,bn=46,b9=47,ae=48,aT=49,H=50,cj=51,bt=52,aM=53,b2=54,bw=55,c3=56,cb=57,g=58,cl=59,aP=60,bc=61,aS=62,bp=63,b$=64,bZ=65,c0=66,bb=67,bE=68,bx=70,aH=71,aV=72,a6=73,bC=74,ab=75,ar=76,bg=77,bL=78,bK=79,aR=80,a9=81,ca=82,aF=83,o=84,cv=85,av=86,aQ=87,bv=88,bH=89,bW=90,aY=91,b1=92,bS=93,ap=94,au=95,bT=96,a5=97,c1=98,at=99,bN=100,bF=101,c4=102,by=103,bj=104,bY=105,bP=106,ax=108,aU=109,b3=110,b8=111,aN=112,aL=113,a2=114,aO=115,ad=116,c8=118,bA=119,bl=120,bQ=121,bk=122,as=UDOC.B;
  542. function aE(t,aA){t=new Uint8Array(t);var cw=0,I={fill:!1,strk:!1,bb:[0,0,1,1],wbb:[0,0,1,1],fnt:{nam:"Arial",hgh:25,und:!1,orn:0},tclr:[0,0,0],talg:0},c,M=[],d=[],a0=as.readShort,aj=as.readUshort,a_=as.readInt,G=as.readUint,J=as.readFloat,l=0;
  543. while(!0){var e=G(t,cw),T=null,ct=0;cw+=4;var Q=e,j=G(t,cw);cw+=4;var A=cw;if(!1){}else if(Q==s){break}else if(Q==N){I.bb=a3(t,A);
  544. A+=16;aA.StartPage(I.bb[0],I.bb[1],I.bb[2],I.bb[3]);c=UDOC.getState(I.bb)}else if(Q==i)d.push(JSON.stringify(c),JSON.stringify(I));
  545. else if(Q==q){var az=a_(t,A);A+=4;while(az<-1){d.pop();d.pop()}I=JSON.parse(d.pop());c=JSON.parse(d.pop())}else if(Q==bb){c.cpth=JSON.parse(JSON.stringify(c.pth))}else if([P,x,R,c1,B,ab].indexOf(Q)!=-1){}else if(Q==g)c.mlimit=G(t,A);
  546. else if(Q==S)I.tclr=[t[A]/255,t[A+1]/255,t[A+2]/255];else if(Q==L)I.talg=G(t,A);else if(Q==z||Q==K){if(I.vbb==null)I.vbb=[];
  547. var ba=Q==K?0:2;I.vbb[ba]=a_(t,A);A+=4;I.vbb[ba+1]=a_(t,A);A+=4;if(Q==z)cd(I,c)}else if(Q==F||Q==f){var ba=Q==f?0:2;
  548. I.wbb[ba]=a_(t,A);A+=4;I.wbb[ba+1]=a_(t,A);A+=4;if(Q==F)cd(I,c)}else if(Q==bx){var V=G(t,A);A+=4}else if(Q==aC){var b7=G(t,A);
  549. A+=4;if(b7==2147483648){I.fill=!0;c.colr=[1,1,1]}else if(b7==2147483653){I.fill=!1}else if(b7==2147483655){I.strk=!0;
  550. I.lwidth=1;c.COLR=[0,0,0]}else if(b7==2147483656){I.strk=!1}else if(b7==2147483661){}else if(b7==2147483662){}else{var bJ=M[b7];
  551. if(bJ.t=="b"){I.fill=bJ.stl!=1;if(bJ.stl==0){}else if(bJ.stl==1){}else throw bJ.stl+" e";c.colr=bJ.clr}else if(bJ.t=="p"){I.strk=bJ.stl!=5;
  552. c.lwidth=bJ.wid;c.COLR=bJ.clr}else if(bJ.t=="f"){I.fnt=bJ;c.font.Tf=bJ.nam;c.font.Tfs=Math.abs(bJ.hgh);
  553. c.font.Tun=bJ.und}else throw"e"}}else if(Q==bD){var b7=G(t,A);A+=4;if(M[b7]!=null)M[b7]=null;else throw"e"}else if(Q==bM){ct=G(t,A);
  554. A+=4;T={t:"b"};T.stl=G(t,A);A+=4;T.clr=[t[A]/255,t[A+1]/255,t[A+2]/255];A+=4;T.htc=G(t,A);A+=4}else if(Q==aI||Q==au){ct=G(t,A);
  555. A+=4;T={t:"p"};if(Q==au){A+=16;T.stl=G(t,A);A+=4;T.wid=G(t,A);A+=4;A+=4}else{T.stl=G(t,A);A+=4;T.wid=G(t,A);
  556. A+=4;A+=4}T.clr=[t[A]/255,t[A+1]/255,t[A+2]/255];A+=4}else if(Q==ca){ct=G(t,A);A+=4;T={t:"f",nam:""};
  557. T.hgh=a_(t,A);A+=4;A+=4*2;T.orn=a_(t,A)/10;A+=4;var bo=G(t,A);A+=4;T.und=t[A+1];T.stk=t[A+2];A+=4*2;
  558. while(aj(t,A)!=0){T.nam+=String.fromCharCode(aj(t,A));A+=2}if(bo>500)T.nam+="-Bold"}else if(Q==o){A+=16;
  559. var c6=G(t,A),br="";A+=4;var bs=J(t,A);A+=4;var ai=J(t,A);A+=4;var U=a_(t,A);A+=4;var ak=a_(t,A);A+=4;
  560. var bV=c.ctm.slice(0);if(c6==1)c.ctm=[1,0,0,1,0,0];c.font.Tm=[1,0,0,-1,0,0];UDOC.M.rotate(c.font.Tm,I.fnt.orn*Math.PI/180);
  561. UDOC.M.translate(c.font.Tm,U,ak);var af=I.talg;if((af&6)==6)c.font.Tal=2;else if((af&7)==0)c.font.Tal=0;
  562. else throw af+" e";if((af&24)==24){}else if((af&24)==0)UDOC.M.translate(c.font.Tm,0,c.font.Tfs);else console.log("unknown alignment",af);
  563. var X=G(t,A);A+=4;var r=G(t,A);A+=4;var aB=G(t,A);A+=4;A+=16;var a4=G(t,A);A+=4;r+=cw-8;for(var aw=0;
  564. aw<X;aw++){var a8=aj(t,r+aw*2);br+=String.fromCharCode(a8)}var ac=c.colr;c.colr=I.tclr;aA.PutText(c,br,br.length*c.font.Tfs*.5);
  565. c.colr=ac;c.ctm=bV}else if(Q==cl){UDOC.G.newPath(c)}else if(Q==aP){}else if(Q==bc)UDOC.G.closePath(c);
  566. else if(Q==m){UDOC.G.moveTo(c,a_(t,A),a_(t,A+4))}else if(Q==b2){if(c.pth.cmds.length==0){var aW=c.ctm.slice(0);
  567. UDOC.M.invert(aW);var ag=UDOC.M.multPoint(aW,c.cpos);UDOC.G.moveTo(c,ag[0],ag[1])}UDOC.G.lineTo(c,a_(t,A),a_(t,A+4))}else if(Q==O||Q==av||Q==Y||Q==aQ||Q==E||Q==bH){A+=16;
  568. var aq=Q==O||Q==av,aJ=Q==E||Q==bH,c7=G(t,A);A+=4;if(!aJ)UDOC.G.newPath(c);A=b6(t,A,c7,c,Q==av||Q==aQ||Q==bH?2:4,aq,aJ);
  569. if(!aJ)ay(aA,c,I,aq)}else if(Q==aY){A+=16;var aq=!0,aJ=!1,cf=G(t,A);A+=4;A+=4;var ao=A;A+=cf*4;if(!aJ)UDOC.G.newPath(c);
  570. for(var aw=0;aw<cf;aw++){var cm=aj(t,ao+aw*4);A=b6(t,A,cm,c,2,aq,aJ)}if(!aJ)ay(aA,c,I,aq)}else if(Q==C||Q==cv||Q==D||Q==bv){A+=16;
  571. var be=Q==cv||Q==bv,al=be?a0:a_,bq=be?2:4,c7=G(t,A);A+=4;if(!(Q==D||Q==bv)){UDOC.G.moveTo(c,al(t,A),al(t,A+bq));
  572. A+=2*bq;c7--}while(c7>0){UDOC.G.curveTo(c,al(t,A),al(t,A+bq),al(t,A+2*bq),al(t,A+3*bq),al(t,A+4*bq),al(t,A+5*bq));
  573. A+=6*bq;c7-=3}}else if(Q==cp||Q==c2){UDOC.G.newPath(c);var bU=a3(t,A);if(Q==cp){UDOC.G.drawRect(c,bU[0],bU[1],bU[2]-bU[0],bU[3]-bU[1])}else{var bR=(bU[0]+bU[2])/2,cc=(bU[1]+bU[3])/2;
  574. UDOC.G.arc(c,bR,cc,(bU[2]-bU[0])/2,0,2*Math.PI,!1)}UDOC.G.closePath(c);ay(aA,c,I,!0)}else if(Q==aS)aA.Fill(c,!1);
  575. else if(Q==b$)aA.Stroke(c);else if(Q==bp){aA.Fill(c,!1);aA.Stroke(c)}else if(Q==ck||Q==n){var aX=[];
  576. for(var aw=0;aw<6;aw++)aX.push(J(t,A+aw*4));A+=24;if(Q==ck)c.ctm=aX;else{var c6=G(t,A);A+=4;if(c6==2){var bf=c.ctm;
  577. c.ctm=aX;UDOC.M.concat(c.ctm,bf)}else throw"e"}}else if(Q==h){var bI=G(t,A);A+=4}else if(Q==a9){var bU=a3(t,A);
  578. A+=16;var a7=a_(t,A);A+=4;var aa=a_(t,A);A+=4;var aD=a_(t,A);A+=4;var bh=a_(t,A);A+=4;var cg=a_(t,A);
  579. A+=4;var ah=a_(t,A);A+=4;var bm=G(t,A)+cw-8;A+=4;var c9=G(t,A);A+=4;var c5=G(t,A)+cw-8;A+=4;var bd=G(t,A);
  580. A+=4;var b5=G(t,A);A+=4;if(b5!=0)throw"e";var b_=G(t,A);A+=4;var bO=a_(t,A);A+=4;var aG=a_(t,A);A+=4;
  581. var a$=G(t,bm);bm+=4;var bB=G(t,bm);bm+=4;var ce=G(t,bm);bm+=4;if(bB!=cg||ce!=ah)throw"e";var cr=aj(t,bm);
  582. bm+=2;var aK=aj(t,bm);bm+=2;if(aK!=1&&aK!=4&&aK!=8&&aK!=24&&aK!=32)throw aK+" e";var aZ=G(t,bm);bm+=4;
  583. if(aZ!=0)throw aZ+" e";var bG=G(t,bm);bm+=4;var an=G(t,bm);bm+=4;var bi=G(t,bm);bm+=4;var ci=G(t,bm);
  584. bm+=4;var cq=G(t,bm);bm+=4;var ch=Math.floor((bB*cr*aK+31&~31)/8),bX=new Uint8Array(bB*ce*4);if(aK==8){for(var cc=0;
  585. cc<ce;cc++)for(var bR=0;bR<bB;bR++){var am=cc*bB+bR<<2,b7=t[c5+(ce-1-cc)*ch+bR]<<2;bX[am]=t[bm+b7+2];
  586. bX[am+1]=t[bm+b7+1];bX[am+2]=t[bm+b7+0];bX[am+3]=255}}else if(aK==24){for(var cc=0;cc<ce;cc++)for(var bR=0;
  587. bR<bB;bR++){var am=cc*bB+bR<<2,b0=c5+(ce-1-cc)*ch+bR*3;bX[am]=t[b0+2];bX[am+1]=t[b0+1];bX[am+2]=t[b0+0];
  588. bX[am+3]=255}}else if(aK==32){for(var cc=0;cc<ce;cc++)for(var bR=0;bR<bB;bR++){var am=cc*bB+bR<<2,b0=c5+(ce-1-cc)*ch+bR*4;
  589. bX[am]=t[b0+2];bX[am+1]=t[b0+1];bX[am+2]=t[b0+0];bX[am+3]=t[b0+3]}}else console.log("unsupported bit depth",aK,bB,ce);
  590. var bz=c.ctm.slice(0);c.ctm=[1,0,0,1,0,0];UDOC.M.scale(c.ctm,bO,-aG);UDOC.M.translate(c.ctm,a7,aa+aG);
  591. UDOC.M.concat(c.ctm,bz);aA.PutImage(c,bX,bB,ce);c.ctm=bz}else{console.log(Q,j)}if(T!=null)M[ct]=T;cw+=j-8}aA.ShowPage();
  592. aA.Done()}function a3(t,aA){var cw=[];for(var I=0;I<4;I++)cw[I]=as.readInt(t,aA+I*4);return cw}function cd(t,aA){var cw=[1,0,0,1,0,0],I=t.wbb,c=t.bb,M=t.vbb&&t.vbb.length==4?t.vbb:t.bb;
  593. UDOC.M.translate(cw,-I[0],-I[1]);UDOC.M.scale(cw,1/I[2],1/I[3]);UDOC.M.scale(cw,M[2],M[3]);aA.ctm=cw}function ay(t,aA,cw,I){if(cw.fill&&I)t.Fill(aA,!1);
  594. if(cw.strk&&aA.lwidth!=0)t.Stroke(aA)}function b6(t,aA,cw,I,c,M,d){var a0=c==2?as.readShort:as.readInt;
  595. for(var aj=0;aj<cw;aj++){var a_=a0(t,aA);aA+=c;var G=a0(t,aA);aA+=c;if(aj==0&&!d)UDOC.G.moveTo(I,a_,G);
  596. else UDOC.G.lineTo(I,a_,G)}if(M)UDOC.G.closePath(I);return aA}return{Parse:aE}}(),FromDXF=function(){var N=function(){this.bb=[1e9,1e9,-1e9,-1e9]};
  597. N.prototype={StartPage:function(){},PutText:function(){},PutImage:function(){},Stroke:function(p){this.checkPath(p.pth.crds)},Fill:function(p){this.checkPath(p.pth.crds)},PutText:function(p,F,f,z){var K=[0,0,f*p.font.Tfs,0,0,-p.font.Tfs,0,p.font.Tfs];
  598. if(z){K[2]=z[0];K[5]=-z[1]}UDOC.M.multArray(p.ctm,K);UDOC.M.multArray(p.font.Tm,K);this.checkPath(K)},checkPath:function(p){var F=this.bb;
  599. for(var f=0;f<p.length;f+=2){var z=p[f],K=p[f+1];F[0]=Math.min(F[0],z);F[1]=Math.min(F[1],K);F[2]=Math.max(F[2],z);
  600. F[3]=Math.max(F[3],K)}},ShowPage:function(){},Done:function(){}};function C(p,F){p=new Uint8Array(p);
  601. var f=0,z=new TextDecoder().decode(p),K=z.split("\n"),k=2e3,P=100;for(var W=0;W<K.length;W++)K[W]=K[W].trim();
  602. while(K[K.length-1]=="")K.pop();var s=new N;O(K,s);var v=s.bb,R=(k-P*2)/(v[2]-v[0]),x=Math.round((v[3]-v[1])*R+P*2),B=[0,0,k,x],h=UDOC.getState(B);
  603. h.lwidth=1/R;h.ctm=[R,0,0,-R,P-v[0]*R,-P+v[1]*R+x];O(K,F,h,B)}function O(p,F,f,z){if(f==null){z=[0,0,1e3,1e3];
  604. f=UDOC.getState(z)}F.StartPage(z[0],z[1],z[2],z[3]);var K={tabs:{LTYPE:{}},blocks:{}};D(p,F,f,K,0,p.length);
  605. F.ShowPage();F.Done()}function Y(p,F){if(p.startsWith("%%u")){p=p.slice(3);F.font.Tun=1}p=p.split("\\P").join("\n");
  606. p=p.split("%%d").join("'");p=p.split("{").join("");p=p.split("}").join("");while(!0){var f=p.indexOf("\\U+");
  607. if(f==-1)break;p=p.slice(0,f)+String.fromCharCode(parseInt(p.slice(f+3,f+7),16))+p.slice(f+7)}while(!0){var f=p.indexOf("\\"),z=p.indexOf(";");
  608. if(f==-1||z==-1)break;var K=p.slice(f+1,z);if(K.startsWith("pi"))K=" ".repeat(.5*parseFloat(K.slice(2)));
  609. else K="";p=p.slice(0,f)+K+p.slice(z+1)}return p}function D(p,F,f,z,K,W,s){var v,k,P;while(K<W){var R=parseInt(p[K++]),x=p[K++],B=[10,11,12,13,14,20,21,22,23,24,30,31,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51,52,53,62,70,71,72,73,74,90,370].indexOf(R)!=-1,h=v=="LWPOLYLINE"&&(R==10||R==20||R==30)||v=="LTYPE"&&R==49||v=="SPLINE"&&(R==10||R==20||R==30||R==40)||v=="OLE2FRAME"&&R==310;
  610. if(B)x=parseFloat(x);if(R==999){}else if(x=="SECTION")s=-1;else if(x=="ENDSEC"){}else if(s==-1)s=x;else if(x=="EOF"){}else if(s=="HEADER"){}else if(s=="CLASSES"){}else if(s=="TABLES"||s=="BLOCKS"){if(R==0){v=x;
  611. k={};continue}if(h){if(k[R]==null)k[R]=[];k[R].push(x)}else{k[R]=x}if(p[K]!="0")continue;if(v=="LTYPE"){if(z.tabs[v][k[2]]!=null)throw"e";
  612. z.tabs[v][k[2]]=k}else if(v=="BLOCK"){P=z.blocks[k[2]]=[K]}else if(v=="ENDBLK"){P[1]=K-2;P=null}}else if(s=="ENTITIES"){if(R==0){v=x;
  613. k={}}else{if(h){if(k[R]==null)k[R]=[];k[R].push(x)}else{k[R]=x}}if(p[K]!="0")continue;if(P==null){f.colr=[0,0,0];
  614. f.ca=1;f.COLR=[0,0,0];f.dash=[];if(k[62]!=null&&k[62]!=256){var L={c0:[0,0,0],c1:[1,0,0],c2:[1,1,0],c4:[0,1,1],c5:[0,0,1],c7:[0,0,0],c8:[0,0,0],c242:[.64,0,.16],c250:[0,0,0]}["c"+k[62]];
  615. if(L)f.COLR=L;else{f.COLR=[0,1,0];console.log(v+" "+k[62])}}if(k[6]!=null){var u=z.tabs.LTYPE[k[6]];
  616. if(u[49]!=null){var S=u[49].slice(0);for(var $=0;$<S.length;$++)S[$]=Math.abs(S[$])*(k[48]?k[48]:1);
  617. f.dash=S}}if(k[8]=="H")f.dash=[.1,.02];UDOC.G.newPath(f)}var _=-1/3.17;if(v=="LINE"){var m=(k[30]?k[30]:0)*_,y=(k[31]?k[31]:0)*_;
  618. UDOC.G.moveTo(f,k[10]+m,k[20]-m);UDOC.G.lineTo(f,k[11]+y,k[21]-y);F.Stroke(f,!1)}else if(v=="POLYLINE"){P=[k,[]]}else if(v=="VERTEX"){P[1].push(k)}else if(v=="SEQEND"){if(P==null)continue;
  619. var bu=P[0],b=P[1],cs=b.length,w=bu[70]==1?cs+1:cs;UDOC.G.moveTo(f,b[0][10],b[0][20]);for(var $=1;$<w;
  620. $++){var i=b[$%cs][10],q=b[$%cs][20],ck=b[$-1][42];if(ck==null)ck=0;if(ck==0)UDOC.G.lineTo(f,i,q);else{var n=b[$-1],aC=n[10],aI=n[20],bM=i-aC,a=q-aI,c2=-ck*Math.PI/2,cp=.42,a1=Math.sin(c2),cn=Math.cos(c2),bn=cn*bM-a1*a,b9=a1*bM+cn*a,ae=cn*bM+a1*a,aT=-a1*bM+cn*a;
  621. UDOC.G.curveTo(f,aC+cp*bn,aI+cp*b9,i-cp*ae,q-cp*aT,i,q)}}F.Stroke(f,!1);P=null}else if(v=="OLE2FRAME"){var H=57,cj=295,bt=k[310].join(""),aM=cj*H,b2=new Uint8Array(bt.length>>>1);
  622. for(var $=0;$<b2.length;$++)b2[$]=parseInt(bt.slice($*2,$*2+2),16);var bw=new Float64Array(b2.slice(2,2+12*8).buffer),c3=new Uint8Array(aM*4);
  623. new Uint32Array(c3.buffer).fill(4281563135);var cb=f.ctm,g=[1,0,0,1,0,0],cl=k[11]-k[10],aP=k[21]-k[20];
  624. UDOC.M.scale(g,cl,aP);UDOC.M.translate(g,k[10],k[20]);UDOC.M.concat(g,f.ctm);f.ctm=g;F.PutImage(f,c3,cj,H);
  625. f.ctm=cb}else if(v=="INSERT"){var bc=z.blocks[k[2]],aS=f.ctm.slice(0),g=[1,0,0,1,0,0];if(k[50]!=null)UDOC.M.rotate(g,k[50]*Math.PI/180);
  626. if(k[41]!=null)UDOC.M.scale(g,k[41],k[42]);UDOC.M.translate(g,k[10],k[20]);UDOC.M.concat(g,f.ctm);f.ctm=g;
  627. D(p,F,f,z,bc[0],bc[1],s);f.ctm=aS}else if(v=="--VIEWPORT"){console.log(k);f.COLR=[1,0,0];UDOC.G.moveTo(f,k[10],k[20]);
  628. UDOC.G.lineTo(f,k[10]+5,k[20]+5);F.Stroke(f,!1)}else if(v=="--DIMENSION"){var bp=k[70]&7;if(bp==0){console.log(k);
  629. f.COLR=[0,.3,.6];var bM=0,a=0;UDOC.G.moveTo(f,k[13]+bM,k[23]+a);UDOC.G.lineTo(f,k[14]+bM,k[24]+a);F.Stroke(f,!1)}}else if(v=="3DFACE"||v=="SOLID"){var m=k[30]*_,y=k[31]*_,b$=k[32]*_,bZ=k[33]*_;
  630. UDOC.G.moveTo(f,k[10]+m,k[20]-m);UDOC.G.lineTo(f,k[11]+y,k[21]-y);UDOC.G.lineTo(f,k[12]+b$,k[22]-b$);
  631. UDOC.G.lineTo(f,k[13]+bZ,k[23]-bZ);UDOC.G.closePath(f);if(v=="3DFACE"){f.colr=[Math.random(),Math.random(),Math.random()];
  632. f.ca=.5}F.Fill(f,!1)}else if(v=="LWPOLYLINE"){for(var $=0;$<k[90];$++){var c0=$==0?UDOC.G.moveTo:UDOC.G.lineTo;
  633. c0(f,k[10][$],k[20][$])}if(k[70]==1)UDOC.G.closePath(f);F.Stroke(f,!1)}else if(v=="CIRCLE"){UDOC.G.arc(f,k[10],k[20],k[40],0,Math.PI*2);
  634. F.Stroke(f,!1)}else if(v=="ELLIPSE"){var bb=f.ctm.slice(0),bE=k[10],bx=k[20],bM=k[11],a=k[21],aH=Math.sqrt(bM*bM+a*a),g=[1,0,0,1,0,0];
  635. UDOC.M.scale(g,1,k[40]);UDOC.M.rotate(g,-Math.atan2(a,bM));UDOC.M.translate(g,bE,bx);UDOC.M.concat(g,f.ctm);
  636. f.ctm=g;UDOC.G.arc(f,0,0,aH,k[41],k[42]);F.Stroke(f,!1);f.ctm=bb}else if(v=="ARC"){UDOC.G.arc(f,k[10],k[20],k[40],k[50]*Math.PI/180,k[51]*Math.PI/180);
  637. F.Stroke(f,!1)}else if(v=="SPLINE"){var aV=k[10],a6=k[20],bC=k[40].slice(0),ab=aV.length-1;UDOC.G.moveTo(f,aV[0],a6[0]);
  638. if(k[71]==3&&k[73]==4){UDOC.G.curveTo(f,aV[1],a6[1],aV[2],a6[2],aV[3],a6[3])}else{var ar=-1e6,bg=1e6;
  639. for(var $=0;$<bC.length;$++){var bL=bC[$];if(bL<bg)bg=bL;if(bL>ar)ar=bL}for(var $=0;$<bC.length;$++){bC[$]=(bC[$]-bg)/(ar-bg)}var cs=aV.length*10;
  640. for(var bK=1;bK<cs;bK++){var aR=bK/cs,a9=E(aV,a6,k[71],bC,aR);UDOC.G.lineTo(f,a9[0],a9[1])}UDOC.G.lineTo(f,aV[aV.length-1],a6[a6.length-1])}if(k[70]&1)UDOC.G.closePath(f);
  641. F.Stroke(f,!1)}else if(v=="--ATTDEF"||v=="ATTRIB"||v=="TEXT"||v=="MTEXT"){f.font.Tun=0;f.font.Tal=0;
  642. f.font.Tm=[1,0,0,1,0,0];if(k[50])UDOC.M.rotate(f.font.Tm,-k[50]*Math.PI/180);UDOC.M.translate(f.font.Tm,k[10],k[20]);
  643. f.font.Tfs=k[40];var bt=k[v=="ATTDEF"?3:1],aF=null;bt=Y(bt,f);var ca=k[71]==null?0:(k[71]-1)%3;f.font.Tal=[0,2,1][ca];
  644. if(v=="MTEXT"&&k[41]!=null&&k[41]!=0){var o=bt.length*f.font.Tfs/k[41];o=Math.max(o,bt.split("\n").length);
  645. aF=[k[41],o*f.font.Tfs*1.5];if(ca==0){}else if(ca==2){UDOC.M.translate(f.font.Tm,-k[41],0)}else if(ca==1){UDOC.M.translate(f.font.Tm,-k[41]/2,0)}else console.log("unknown align",k)}else if(v=="MTEXT"&&k[71]!=null){if(k[71]<=3)UDOC.M.translate(f.font.Tm,0,-f.font.Tfs*.8);
  646. else if(k[71]<=6)UDOC.M.translate(f.font.Tm,0,-f.font.Tfs*.4)}F.PutText(f,bt,bt.length*.5,aF)}else console.log("unknown command",v)}else if(s=="OBJECTS"){}else if(s=="ACDSDATA"){}else{console.log(s,R,x);
  647. throw s}}}function E(p,F,f,z,K){var W=0,s=0;for(var v=0;v<p.length;v++){var k=Z(v,f,z,K);W+=p[v]*k;s+=F[v]*k}return[W,s]}function Z(p,f,z,K){var W=new Float64Array(f+1),s,v,P=z.Length-1;
  648. if(p==0&&K==z[0]||p==P-f-1&&K==z[P])return 1;if(K<z[p]||K>=z[p+f+1])return 0;for(var R=0;R<=f;R++){if(K>=z[p+R]&&K<z[p+R+1])W[R]=1;
  649. else W[R]=0}for(var x=1;x<=f;x++){if(W[0]==0)s=0;else s=(K-z[p])*W[0]/(z[p+x]-z[p]);for(var R=0;R<f-x+1;
  650. R++){var B=z[p+R+1],L=z[p+R+x+1];if(W[R+1]==0){W[R]=s;s=0}else{v=W[R+1]/(L-B);W[R]=s+(L-K)*v;s=(K-B)*v}}}return W[0]}return{Parse:C}}(),ToPDF=function(){function N(){this._res={"/Font":{},"/XObject":{},"/ExtGState":{},"/Pattern":{}};
  651. this._xr=[null,{"/Type":"/Catalog","/Pages":{typ:"ref",ind:2}},{"/Type":"/Pages","/Kids":[],"/Count":0},this._res];
  652. this._bnds=[];this._cont="";this._gst=C()}function C(){return{colr:"[0,0,0]",COLR:"[0,0,0]",lcap:"0",ljoin:"0",lwidth:"1",mlimit:"10",dash:"[]",doff:"0",bmode:"/Normal",CA:"1",ca:"1"}}N.prototype.StartPage=function(R,x,B,h){this._bnds=[R,x,B,h]};
  653. N.prototype.Stroke=function(R){if(R.CA==0)return;this.setGState(R,!0);this._cont+=" S\n"};N.prototype.Fill=function(R,x){if(R.ca==0)return;
  654. this.setGState(R,!0);this._cont+=" f\n"};function O(R){return""+parseFloat(R.toFixed(2))}function Y(R){return""+parseFloat(R.toFixed(3))}function D(R){return Math.sqrt(Math.abs(R[0]*R[3]-R[1]*R[2]))}function E(R){var x=R.map(O).join(" ");
  655. if(x=="1 0 0 1 0 0")return"";return x+" cm "}function Z(R,x){if(R.length!=x.length)return!1;for(var B=0;
  656. B<R.length;B++)if(R[B]!=x[B])return!1;return!0}function p(R){var x=[[255,216,255],[0,0,0,12,106,80,32,32],[0,0,0,0,48,0,1,0]],B=["/DCTDecode","/JPXDecode","/JBIG2Decode"];
  657. for(var h=0;h<x.length;h++){var L=x[h],u=!0;for(var S=0;S<L.length;S++)u=u&&R[S]==L[S];if(u)return B[h]}}N.prototype.setGState=function(R,x){var B=this._gst,h={};
  658. for(var L in R)h[L]=typeof R[L]=="string"?R[L]:JSON.stringify(R[L]);var u=D(R.ctm),S=R.dash.slice(0);
  659. for(var $=0;$<S.length;$++)S[$]=O(S[$]*u);var _=this._cont;if(B.lcap!=h.lcap)_+=R.lcap+" J ";if(B.ljoin!=h.ljoin)_+=R.ljoin+" j ";
  660. if(B.lwidth!=h.lwidth)_+=O(R.lwidth*u)+" w ";if(B.mlimit!=h.mlimit)_+=O(R.mlimit)+" M ";if(B.dash!=h.dash||B.doff!=h.doff)_+="["+S.join(" ")+"] "+R.doff+" d ";
  661. if(B.COLR!=h.COLR)_+=R.COLR.map(Y).join(" ")+" RG ";if(B.colr!=h.colr){if(R.colr.length!=null)_+=R.colr.map(Y).join(" ")+" rg \n";
  662. else{var m=this._res["/Pattern"],y=R.colr,bu="/P"+(W(m)+1),b={"/ShadingType":y.typ=="lin"?2:3,"/ColorSpace":"/DeviceRGB","/Extend":[!0,!0],"/Function":f(y.grad),"/Coords":y.crds};
  663. m[bu]={"/Type":"/Pattern","/PatternType":2,"/Matrix":y.mat,"/Shading":b};_+="/Pattern cs "+bu+" scn "}}var cs=this._res["/ExtGState"];
  664. if(B.bmode!=h.bmode){var w=h.bmode;if(cs[w]==null)cs[w]={"/Type":"/ExtGState","/BM":R.bmode};_+=w+" gs "}if(B.CA!=h.CA){var w="/Alpha"+Math.round(255*h.CA);
  665. if(cs[w]==null)cs[w]={"/Type":"/ExtGState","/CA":R.CA};_+=w+" gs "}if(B.ca!=h.ca){var w="/alpha"+Math.round(255*h.ca);
  666. if(cs[w]==null)cs[w]={"/Type":"/ExtGState","/ca":R.ca};_+=w+" gs "}if(x)_+=F(R.pth);this._cont=_;this._gst=h};
  667. function F(R){var x=0,B="",h=O;for(var L=0;L<R.cmds.length;L++){var u=R.cmds[L];if(u=="M"){for(var S=0;
  668. S<2;S++)B+=h(R.crds[x++])+" ";B+="m "}else if(u=="L"){for(var S=0;S<2;S++)B+=h(R.crds[x++])+" ";B+="l "}else if(u=="C"){for(var S=0;
  669. S<6;S++)B+=h(R.crds[x++])+" ";B+="c "}else if(u=="Z"){B+="h "}else throw u}return B}function f(R){var x=[],B=[],h=[0,1],L=z;
  670. if(R.length==2)return L(R[0][1],R[1][1]);B.push(L(R[0][1],R[1][1]));for(var u=1;u<R.length-1;u++){x.push(R[u][0]);
  671. B.push(L(R[u][1],R[u+1][1]));h.push(0,1)}return{"/FunctionType":3,"/Encode":h,"/Domain":[0,1],"/Bounds":x,"/Functions":B}}function z(R,x){return{"/FunctionType":2,"/C0":R,"/C1":x,"/Domain":[0,1],"/N":1}}N.prototype.PutText=function(R,x,B,h){this.setGState(R,!1);
  672. var L=this.addFont(R.font.Tf,h);this._cont+="q ";this._cont+=E(R.ctm);this._cont+=E(R.font.Tm);this._cont+="BT "+L+" "+O(R.font.Tfs)+" Tf 0 0 Td (";
  673. var u=[];if(h==null){var S=[128,8364,130,8218,131,402,132,8222,133,8230,134,8224,135,8225,136,710,137,8240,138,352,139,8249,140,338,142,381,145,8216,146,8217,147,8220,148,8221,149,8226,150,8211,151,8212,152,732,153,8482,154,353,155,8250,156,339,158,382,159,376];
  674. for(var $=0;$<x.length;$++){var _=x.charCodeAt($);if(_>255){var m=S.indexOf(_);u.push(m==-1?32:S[m-1])}else u.push(_)}}else{for(var $=0;
  675. $<x.length;$++){var _=x.charCodeAt($);u.push(_&255)}}u=FromPS.makeString(u);for(var $=0;$<u.length;$++)this._cont+=String.fromCharCode(u[$]);
  676. this._cont+=") Tj ET ";this._cont+=" Q\n"};N.prototype.PutImage=function(R,x,B,h,L){if(x.length==B*h*4&&L==null){var S=B*h,$=new Uint8Array(S),_=255;
  677. for(var m=0;m<S;m++){$[m]=x[(m<<2)+3];_&=x[(m<<2)+3]}if(_!=255)L=$}var y=this.addImage(x,B,h,L);this.setGState(R,!1);
  678. this._cont+="q "+E(R.ctm);this._cont+=y+" Do Q\n"};N.prototype.ShowPage=function(){v(this._xr,this._cont,this._bnds);
  679. this._cont="";this._gst=C()};N.prototype.Print=function(R){};N.prototype.Done=function(){var R=this._res;
  680. for(var x in R)if(Object.keys(R[x])==0)delete R[x];this.buffer=k(this._xr)};N.prototype.addImage=function(R,x,B,h){var L;
  681. if(h){var S=h;if(h.length==x*B*4){S=new Uint8Array(x*B);for(var $=0;$<S.length;$++)S[$]=h[($<<2)+1]}L=this.addImage(S,x,B,null)}var _=p(R),m=R;
  682. if(R.length==x*B*4){m=new Uint8Array(x*B*3);for(var $=0;$<R.length;$+=4){var y=3*($>>2);m[y]=R[$+0];
  683. m[y+1]=R[$+1];m[y+2]=R[$+2]}}var bu=this._res["/XObject"];for(var b in bu){var cs=this._xr[bu[b].ind],w=cs["/SMask"],i=w!=null?1:0,q=L!=null?1:0;
  684. if(!Z(cs.stream,m)||i+q==1)continue;if(i+q==2&&!Z(this._xr[w.ind].stream,S))continue;return b}var b="/I"+(W(bu)+1);
  685. bu[b]={typ:"ref",ind:this._xr.length};var ck={"/Type":"/XObject","/Subtype":"/Image","/BitsPerComponent":8,"/ColorSpace":R.length==x*B||_=="/DCTDecode"&&K(R)&&K(R).comps==1?"/DeviceGray":"/DeviceRGB","/Height":B,"/Width":x,stream:m};
  686. if(_!=null)ck["/Filter"]=p(R);if(h){ck["/SMask"]={typ:"ref",ind:this._xr.length-1}}this._xr.push(ck);
  687. return b};function K(R){var x=0;while(x<R.length){while(R[x]==255)x++;var B=R[x];x++;if(B==216)continue;
  688. if(B==217)break;if(208<=B&&B<=215)continue;if(B==1)continue;var h=(R[x]<<8|R[x+1])-2;x+=2;if(B==192)return{bpp:R[x],w:R[x+1]<<8|R[x+2],h:R[x+3]<<8|R[x+4],comps:R[x+5]};
  689. x+=h}}function W(R){var x;for(var B in R)x=B;return x==null?0:parseInt(x.slice(2))}function s(R){var x=R.toLowerCase(),B="Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique Times-Roman Times-Bold Times-Italic Times-BoldItalic".split(" "),h=0;
  690. if(x.indexOf("sans")!=-1)h=0;else if(x.indexOf("serif")!=-1)h=4;var L=x.indexOf("bold")!=-1,u=x.indexOf("italic")!=-1||x.indexOf("oblique")!=-1||x.endsWith("-it");
  691. if(L&&u)h+=3;else if(u)h+=2;else if(L)h+=1;return B[h]}N.prototype.addFont=function(R,x){R=s(R);R="/"+R;
  692. var B=this._res["/Font"];for(var h in B)if(B[h]["/BaseFont"]==R)return h;var h="/F"+(W(B)+1),L={"/Type":"/Font","/Subtype":"/Type1","/BaseFont":R,"/Encoding":"/WinAnsiEncoding"};
  693. if(x!=null){var u="/CIDInit /ProcSet findresource begin \t12 dict begin \tbegincmap \t/CIDSystemInfo \t<< /Registry (Adobe) \t/Ordering (UCS) \t/Supplement 0 \t>> def \t/CMapName /Adobe-Identity-UCS def \t/CMapType 2 def \t1 begincodespacerange \t<0000> <FFFF> \tendcodespacerange \t1 beginbfchar \t<0001> <200B> \tendbfchar \tendcmap \tCMapName currentdict /CMap defineresource pop \tend \tend",S=new Uint8Array(u.length);
  694. for(var $=0;$<u.length;$++)S[$]=u.charCodeAt($);L["/Subtype"]="/TrueType";delete L["/Encoding"];L["/FirstChar"]=0;
  695. L["/Widths"]=[];for(var $=0;$<256;$++)L["/Widths"].push(500);L["/LastChar"]=L["/Widths"].length-1;L["/FontDescriptor"]={"/Ascent":905,"/CapHeight":1010,"/Descent":211,"/Flags":4,"/FontBBox":[-627,-376,2e3,1011],"/FontName":R,"/ItalicAngle":0,"/StemV":80,"/Type":"/FontDescriptor","/FontFile2":{stream:new Uint8Array(x)}}}B[h]=L;
  696. return h};function v(R,x,B){var h=R.length;R[2]["/Kids"].push({typ:"ref",ind:h});R[2]["/Count"]++;R.push({"/Type":"/Page","/Parent":{typ:"ref",ind:2},"/Resources":{typ:"ref",ind:3},"/MediaBox":B,"/Contents":{typ:"ref",ind:h+1}});
  697. R.push({stream:x})}function k(R){var x={file:new P,off:0},B=N.write,h=[];B(x,"%PDF-1.1\n");for(var L=1;
  698. L<R.length;L++){h.push(x.off);B(x,L+" 0 obj\n");N.writeDict(x,R[L],0);B(x,"\nendobj\n")}var u=x.off;
  699. B(x,"xref\n");B(x,"0 "+R.length+"\n");B(x,"0000000000 65535 f \n");for(var L=0;L<h.length;L++){var S=h[L]+"";
  700. while(S.length<10)S="0"+S;B(x,S+" 00000 n \n")}B(x,"trailer\n");N.writeDict(x,{"/Root":{typ:"ref",ind:1},"/Size":R.length},0);
  701. B(x,"\nstartxref\n"+u+"\n%%EOF\n");return x.file.data.buffer.slice(0,x.off)}N.write=function(R,x){R.file.req(R.off,x.length);
  702. for(var B=0;B<x.length;B++)R.file.data[R.off+B]=x.charCodeAt(B);R.off+=x.length};N._tab=" ";N.spc=function(R){var x="";
  703. for(var B=0;B<R;B++)x+=N._tab;return x};N.writeValue=function(R,x,B){var h=N.write;if(!1){}else if(typeof x=="string")h(R,x);
  704. else if(typeof x=="number")h(R,""+x);else if(typeof x=="boolean")h(R,""+x);else if(x.typ!=null)h(R,x.ind+" 0 R");
  705. else if(x instanceof Array)N.writeArray(R,x,B+1);else if(x instanceof Object)N.writeDict(R,x,B+1);else{console.log(x);
  706. throw"e"}};N.writeDict=function(R,x,B){var h=N.write,L=N.spc,u=x.stream;if(u){if(typeof u=="string"){var S=new Uint8Array(u.length);
  707. for(var $=0;$<u.length;$++)S[$]=u.charCodeAt($);u=S}if(x["/Filter"]==null){x["/Filter"]="/FlateDecode";
  708. u=pako.deflate(u)}}h(R,"<<\n");for(var _ in x){if(_.charAt(0)!="/")continue;h(R,L(B+1)+_+" ");N.writeValue(R,x[_],B);
  709. h(R,"\n")}if(u)h(R,L(B+1)+"/Length "+u.length+"\n");h(R,L(B)+">>");if(u){h(R,L(B)+"\nstream\n");R.file.req(R.off,u.length);
  710. for(var $=0;$<u.length;$++)R.file.data[R.off+$]=u[$];R.off+=u.length;h(R,L(B)+"\nendstream")}};N.writeArray=function(R,x,B){var h=N.write;
  711. h(R,"[ ");for(var L=0;L<x.length;L++){N.writeValue(R,x[L],B+1);if(L!=x.length-1)h(R," ")}h(R," ]")};
  712. var P=function(){this.size=16;this.data=new Uint8Array(16)};P.prototype.req=function(R,x){if(R+x<=this.size)return;
  713. var B=this.size;while(R+x>this.size)this.size*=2;var h=new Uint8Array(this.size);for(var L=0;L<B;L++)h[L]=this.data[L];
  714. this.data=h};return N}();function ToEMF(){this._file={file:new ToEMF.MFile,off:0};this._lstw=0;this._curx=0;
  715. this._curh=0;this._recs=0;this._lenp=0;this._objs={};this._tabl=1;this._stkf=0;this._tclr=0;this._curt={p:-1,b:-1,t:-1};
  716. this._inited=!1}ToEMF.prototype.StartPage=function(N,C,O,Y){this._check();var D=this._file,Z=ToEMF.B.writeUint,p=ToEMF.B.writeInt;
  717. this._curh=Math.max(this._curh,Y*10);if(!this._inited){this._inited=!0;this._addRec("HEADER",88);ToEMF._writeHeadBox(D,[N,C,O,Y]);
  718. D.off+=32;ToEMF.B.writeASCII(D.file,D.off," EMF");D.off+=4;Z(D.file,D.off,65536);D.off+=4;this._lenp=D.off;
  719. D.off+=4+4+4;D.off+=4+4+4;p(D.file,D.off,1440);D.off+=4;p(D.file,D.off,900);D.off+=4;p(D.file,D.off,508);
  720. D.off+=4;p(D.file,D.off,318);D.off+=4;this._trsf([.1,0,0,.1,0,0]);this._addRec("SETBKMODE",12);Z(D.file,D.off,1);
  721. D.off+=4;this._addRec("SETTEXTALIGN",12);Z(D.file,D.off,24);D.off+=4}else{this._curx+=this._lstw;ToEMF._writeHeadBox(D,[0,0,this._curx+O,Math.round(this._curh/10)])}this._lstw=O};
  722. ToEMF.prototype.Stroke=function(N){this._draw(N,1)};ToEMF.prototype.Fill=function(N,C){this._draw(N,2)};
  723. ToEMF.prototype.PutImage=function(N,C,O,Y,D){var E=C.length;if((E&3)!=0)E+=4-(E&3);var Z=[1,0,0,-1,0,1];
  724. UDOC.M.concat(Z,N.ctm);UDOC.M.scale(Z,10,10);UDOC.M.scale(Z,1,-1);UDOC.M.translate(Z,this._curx,this._curh);
  725. this._trsf(Z);var F=this._file,f=ToEMF.B.writeUint,z=ToEMF.B.writeInt,K=ToEMF.B.writeUshort,s=8+16+14*4;
  726. this._addRec("STRETCHDIBITS",s+40+E);F.off+=16;z(F.file,F.off,Math.round(0));F.off+=4;z(F.file,F.off,Math.round(0));
  727. F.off+=4;F.off+=8;z(F.file,F.off,O);F.off+=4;z(F.file,F.off,Y);F.off+=4;f(F.file,F.off,s);F.off+=4;f(F.file,F.off,40);
  728. F.off+=4;f(F.file,F.off,s+40);F.off+=4;f(F.file,F.off,C.length);F.off+=4;F.off+=4;f(F.file,F.off,13369376);
  729. F.off+=4;z(F.file,F.off,Math.round(1));F.off+=4;z(F.file,F.off,Math.round(1));F.off+=4;z(F.file,F.off,40);
  730. F.off+=4;z(F.file,F.off,O);F.off+=4;z(F.file,F.off,Y);F.off+=4;K(F.file,F.off,1);F.off+=2;K(F.file,F.off,32);
  731. F.off+=2;z(F.file,F.off,0);F.off+=4;z(F.file,F.off,C.length);F.off+=4;z(F.file,F.off,3800);F.off+=4;
  732. z(F.file,F.off,3800);F.off+=4;F.off+=8;F.file.req(F.off,C.length);if(C.length==O*Y*4){for(var v=0;v<Y;
  733. v++)for(var k=0;k<O;k++){var P=v*O+k<<2,R=F.off+((Y-1-v)*O+k<<2);F.file.data[R]=C[P+2];F.file.data[R+1]=C[P+1];
  734. F.file.data[R+2]=C[P];F.file.data[R+3]=C[P+3]}}else for(var x=0;x<C.length;x++)F.file.data[F.off+x]=C[x];
  735. F.off+=E;UDOC.M.invert(Z);this._trsf(Z)};ToEMF.prototype.PutText=function(N,C,O){var Y=C.length,v;if((Y&1)==1)Y++;
  736. this._check();var D=this._file,Z=ToEMF.B.writeUint,p=ToEMF.B.writeInt,F=ToEMF.B.writeUshort,f=ToEMF.B.writeFloat,z=ToEMF._color(N.colr);
  737. if(z!=this._tclr){this._addRec("SETTEXTCOLOR",12);Z(D.file,D.off,z);D.off+=4;this._tclr=z}this._setTool("f",[N.font.Tf,Math.round(N.font.Tfs*10)]);
  738. var K=10*(N.ctm[4]+this._curx),W=this._curh-10*N.ctm[5],s=Math.abs(N.ctm[1])>.05;if(s){v=N.ctm.slice(0);
  739. v[1]*=-1;v[2]*=-1;v[4]=K;v[5]=W;K=W=0;this._trsf(v)}var k=8+16+12+4*6+16;this._addRec("EXTTEXTOUTW",k+Y*2);
  740. D.off+=16;Z(D.file,D.off,2);D.off+=4;f(D.file,D.off,31.25);D.off+=4;f(D.file,D.off,31.25);D.off+=4;p(D.file,D.off,Math.round(K));
  741. D.off+=4;p(D.file,D.off,Math.round(W));D.off+=4;Z(D.file,D.off,C.length);D.off+=4;Z(D.file,D.off,k);
  742. D.off+=4;Z(D.file,D.off,0);D.off+=4;D.off+=16;Z(D.file,D.off,0);D.off+=4;for(var P=0;P<C.length;P++)F(D.file,D.off+P*2,C.charCodeAt(P));
  743. D.off+=2*Y;if(s){UDOC.M.invert(v);this._trsf(v)}};ToEMF.prototype.ShowPage=function(){this._check()};
  744. ToEMF.prototype.Done=function(){this._check();var N=this._file,C=ToEMF.B.writeUint;this._addRec("EOF",20);
  745. C(N.file,N.off,0);N.off+=4;C(N.file,N.off,16);N.off+=4;C(N.file,N.off,20);N.off+=4;C(N.file,this._lenp,N.off);
  746. C(N.file,this._lenp+4,this._recs);C(N.file,this._lenp+8,this._tabl);this.buffer=N.file.data.buffer.slice(0,N.off)};
  747. ToEMF.prototype._check=function(){var N=this._file,C=this._stkf;if(C==0)return;if(C==1)this._addRec("STROKEPATH",24);
  748. if(C==2)this._addRec("FILLPATH",24);if(C==3)this._addRec("STROKEANDFILLPATH",24);N.off+=16;this._stkf=0};
  749. ToEMF.prototype._addRec=function(N,C){var O=this._file,Y=ToEMF.B.writeUint;this._recs++;Y(O.file,O.off,ToEMF.C["EMR_"+N]);
  750. O.off+=4;Y(O.file,O.off,C);O.off+=4};ToEMF.prototype._trsf=function(N){var C=this._file,O=ToEMF.B.writeInt;
  751. this._addRec("MODIFYWORLDTRANSFORM",36);for(var Y=0;Y<N.length;Y++){ToEMF.B.writeFloat(C.file,C.off,N[Y]);
  752. C.off+=4}O(C.file,C.off,2);C.off+=4};ToEMF._writeHeadBox=function(N,C){var O=N.off;N.off=8;ToEMF._writeBox(N,C);
  753. var Y=1/72*25.4*100;ToEMF._writeBox(N,[0,0,Math.round((C[2]-C[0])*Y),Math.round((C[3]-C[1])*Y)]);N.off=O};
  754. ToEMF._writeBox=function(N,C){for(var O=0;O<4;O++){ToEMF.B.writeInt(N.file,N.off,C[O]);N.off+=4}};ToEMF.prototype._draw=function(N,C){var O=this._file,Y=ToEMF.B.writeUint,D=ToEMF.B.writeInt,Z=N.pth,p=JSON.stringify(Z);
  755. if(this._cpth!=p)this._check();if(C==1)this._setTool("p",[N.COLR,N.lwidth,N.ljoin]);else this._setTool("b",[N.colr]);
  756. if(this._cpth==p){this._stkf+=C}else{var F={M:["MOVETOEX",1],L:["LINETO",1],C:["POLYBEZIERTO",3],Z:["CLOSEFIGURE",0]},f=0,z=Z.cmds.length;
  757. this._addRec("BEGINPATH",8);for(var K=0;K<z;K++){var W=Z.cmds[K],s=F[W],R=1;if(s==null)throw W+" e";
  758. var v=s[1]*2,k=s[0],P=8+4*v;while(!0){if(K+R<z&&Z.cmds[K+R]==W)R++;else break}var x=W=="C"||W=="L"&&R>1;
  759. if(x){v*=R;if(W=="L")k="POLYLINETO";P=8+20+4*v}this._addRec(k,P);if(x){O.off+=16;Y(O.file,O.off,R*s[1]);
  760. O.off+=4;K+=R-1}for(var B=0;B<v;B+=2){D(O.file,O.off,Math.round(10*(Z.crds[f]+this._curx)));O.off+=4;
  761. f++;D(O.file,O.off,Math.round(this._curh-10*Z.crds[f]));O.off+=4;f++}}this._addRec("ENDPATH",8);this._cpth=p;
  762. this._stkf=C}};ToEMF.prototype._setTool=function(N,C){var O=this._file,Y=ToEMF.B.writeUint,D=ToEMF.B.writeInt,Z=N+JSON.stringify(C),p=this._objs[Z];
  763. if(p==null){p=this._objs[Z]=this._tabl;this._tabl++;if(N=="b")this._addRec("CREATEBRUSHINDIRECT",24);
  764. if(N=="p")this._addRec("CREATEPEN",28);if(N=="f")this._addRec("EXTCREATEFONTINDIRECTW",104);Y(O.file,O.off,p);
  765. O.off+=4;if(N=="b"||N=="p"){if(N=="p"){Y(O.file,O.off,0);O.off+=4;var F=Math.round(C[1]*10);Y(O.file,O.off,F);
  766. O.off+=4;Y(O.file,O.off,F);O.off+=4}else{Y(O.file,O.off,0);O.off+=4}Y(O.file,O.off,ToEMF._color(C[0]));
  767. O.off+=4;if(N=="b"){Y(O.file,O.off,0);O.off+=4}}if(N=="f"){var f=C[0],z=f.toLowerCase().indexOf("bold")!=-1;
  768. if(f.endsWith("-Bold"))f=f.slice(0,f.length-5);D(O.file,O.off,-C[1]);O.off+=4;O.off+=12;Y(O.file,O.off,z?700:400);
  769. O.off+=4;Y(O.file,O.off,0);O.off+=4;Y(O.file,O.off,262151);O.off+=4;for(var K=0;K<f.length;K++)ToEMF.B.writeUshort(O.file,O.off+K*2,f.charCodeAt(K));
  770. O.off+=64}}if(this._curt[N]!=p){this._addRec("SELECTOBJECT",12);Y(O.file,O.off,p);O.off+=4;this._curt[N]=p}};
  771. ToEMF._color=function(N){var C=Math.round(N[0]*255),O=Math.round(N[1]*255),Y=Math.round(N[2]*255);return Y<<16|O<<8|C<<0};
  772. ToEMF.B=function(){var N=new Uint8Array(4),C=N.buffer,O=new Int16Array(C),Y=new Uint16Array(C),D=new Int32Array(C),E=new Uint32Array(C),Z=new Float32Array(C);
  773. return{writeShort:function(p,F,f){O[0]=f;p.req(F,2);var z=p.data;z[F]=N[0];z[F+1]=N[1]},writeUshort:function(p,F,f){Y[0]=f;
  774. p.req(F,2);var z=p.data;z[F]=N[0];z[F+1]=N[1]},writeInt:function(p,F,f){D[0]=f;p.req(F,4);var z=p.data;
  775. z[F]=N[0];z[F+1]=N[1];z[F+2]=N[2];z[F+3]=N[3]},writeUint:function(p,F,f){E[0]=f;p.req(F,4);var z=p.data;
  776. z[F]=N[0];z[F+1]=N[1];z[F+2]=N[2];z[F+3]=N[3]},writeFloat:function(p,F,f){Z[0]=f;p.req(F,4);var z=p.data;
  777. z[F]=N[0];z[F+1]=N[1];z[F+2]=N[2];z[F+3]=N[3]},writeASCII:function(p,F,f){p.req(F,f.length);for(var z=0;
  778. z<f.length;z++)p.data[F+z]=f.charCodeAt(z)}}}();ToEMF.MFile=function(){this.size=16;this.data=new Uint8Array(16)};
  779. ToEMF.MFile.prototype.req=function(N,C){if(N+C<=this.size)return;var O=this.size;while(N+C>this.size)this.size*=2;
  780. var Y=new Uint8Array(this.size);for(var D=0;D<O;D++)Y[D]=this.data[D];this.data=Y};ToEMF.C={EMR_HEADER:1,EMR_POLYBEZIER:2,EMR_POLYGON:3,EMR_POLYLINE:4,EMR_POLYBEZIERTO:5,EMR_POLYLINETO:6,EMR_POLYPOLYLINE:7,EMR_POLYPOLYGON:8,EMR_SETWINDOWEXTEX:9,EMR_SETWINDOWORGEX:10,EMR_SETVIEWPORTEXTEX:11,EMR_SETVIEWPORTORGEX:12,EMR_SETBRUSHORGEX:13,EMR_EOF:14,EMR_SETPIXELV:15,EMR_SETMAPPERFLAGS:16,EMR_SETMAPMODE:17,EMR_SETBKMODE:18,EMR_SETPOLYFILLMODE:19,EMR_SETROP2:20,EMR_SETSTRETCHBLTMODE:21,EMR_SETTEXTALIGN:22,EMR_SETCOLORADJUSTMENT:23,EMR_SETTEXTCOLOR:24,EMR_SETBKCOLOR:25,EMR_OFFSETCLIPRGN:26,EMR_MOVETOEX:27,EMR_SETMETARGN:28,EMR_EXCLUDECLIPRECT:29,EMR_INTERSECTCLIPRECT:30,EMR_SCALEVIEWPORTEXTEX:31,EMR_SCALEWINDOWEXTEX:32,EMR_SAVEDC:33,EMR_RESTOREDC:34,EMR_SETWORLDTRANSFORM:35,EMR_MODIFYWORLDTRANSFORM:36,EMR_SELECTOBJECT:37,EMR_CREATEPEN:38,EMR_CREATEBRUSHINDIRECT:39,EMR_DELETEOBJECT:40,EMR_ANGLEARC:41,EMR_ELLIPSE:42,EMR_RECTANGLE:43,EMR_ROUNDRECT:44,EMR_ARC:45,EMR_CHORD:46,EMR_PIE:47,EMR_SELECTPALETTE:48,EMR_CREATEPALETTE:49,EMR_SETPALETTEENTRIES:50,EMR_RESIZEPALETTE:51,EMR_REALIZEPALETTE:52,EMR_EXTFLOODFILL:53,EMR_LINETO:54,EMR_ARCTO:55,EMR_POLYDRAW:56,EMR_SETARCDIRECTION:57,EMR_SETMITERLIMIT:58,EMR_BEGINPATH:59,EMR_ENDPATH:60,EMR_CLOSEFIGURE:61,EMR_FILLPATH:62,EMR_STROKEANDFILLPATH:63,EMR_STROKEPATH:64,EMR_FLATTENPATH:65,EMR_WIDENPATH:66,EMR_SELECTCLIPPATH:67,EMR_ABORTPATH:68,EMR_COMMENT:70,EMR_FILLRGN:71,EMR_FRAMERGN:72,EMR_INVERTRGN:73,EMR_PAINTRGN:74,EMR_EXTSELECTCLIPRGN:75,EMR_BITBLT:76,EMR_STRETCHBLT:77,EMR_MASKBLT:78,EMR_PLGBLT:79,EMR_SETDIBITSTODEVICE:80,EMR_STRETCHDIBITS:81,EMR_EXTCREATEFONTINDIRECTW:82,EMR_EXTTEXTOUTA:83,EMR_EXTTEXTOUTW:84,EMR_POLYBEZIER16:85,EMR_POLYGON16:86,EMR_POLYLINE16:87,EMR_POLYBEZIERTO16:88,EMR_POLYLINETO16:89,EMR_POLYPOLYLINE16:90,EMR_POLYPOLYGON16:91,EMR_POLYDRAW16:92,EMR_CREATEMONOBRUSH:93,EMR_CREATEDIBPATTERNBRUSHPT:94,EMR_EXTCREATEPEN:95,EMR_POLYTEXTOUTA:96,EMR_POLYTEXTOUTW:97,EMR_SETICMMODE:98,EMR_CREATECOLORSPACE:99,EMR_SETCOLORSPACE:100,EMR_DELETECOLORSPACE:101,EMR_GLSRECORD:102,EMR_GLSBOUNDEDRECORD:103,EMR_PIXELFORMAT:104,EMR_DRAWESCAPE:105,EMR_EXTESCAPE:106,EMR_SMALLTEXTOUT:108,EMR_FORCEUFIMAPPING:109,EMR_NAMEDESCAPE:110,EMR_COLORCORRECTPALETTE:111,EMR_SETICMPROFILEA:112,EMR_SETICMPROFILEW:113,EMR_ALPHABLEND:114,EMR_SETLAYOUT:115,EMR_TRANSPARENTBLT:116,EMR_GRADIENTFILL:118,EMR_SETLINKEDUFIS:119,EMR_SETTEXTJUSTIFICATION:120,EMR_COLORMATCHTOTARGETW:121,EMR_CREATECOLORSPACEW:122};
  781. ToEMF.K=[];(function(){var N,C,O;N=ToEMF.C;C=ToEMF.K;O=4;for(var Y in N)C[N[Y]]=Y.slice(O)}());var ToDXF=function(){var N;
  782. function C(){this.buffer=null}C.prototype.StartPage=function(){if(N==null)N=[0,"SECTION",2,"ENTITIES"]};
  783. C.prototype.ShowPage=function(){};C.prototype.Done=function(){N.push(0,"ENDSEC",0,"EOF","");var O=N.join("\n"),Y=new Uint8Array(O.length);
  784. this.buffer=Y.buffer;for(var D=0;D<O.length;D++)Y[D]=O.charCodeAt(D);N=null};C.prototype.PutImage=function(){};
  785. C.prototype.PutText=function(O,Y,D){while(Y.endsWith("\n"))Y=Y.slice(0,Y.length-1);N.push(0,"MTEXT");
  786. N.push(40,O.font.Tfs);N.push(10,O.ctm[4],20,O.ctm[5]);N.push(1,Y)};C.prototype.Fill=function(){};C.prototype.Stroke=function(O){var Y=O.pth.cmds,D=O.pth.crds,E=0,Z=0,p=0,F=0,f=0;
  787. for(var z=0;z<Y.length;z++){var K=Y[z];if(K=="M"){p=D[f++];F=D[f++];E=p;Z=F}else if(K=="L"||K=="Z"){if(K=="Z"&&p==E&&F==Z)continue;
  788. N.push(0,"LINE",10,p,20,F);if(K=="L"){p=D[f++];F=D[f++]}else{p=E;F=Z}N.push(11,p,21,F)}else if(K=="C"){N.push(0,"SPLINE");
  789. N.push(210,0,220,0,230,0);N.push(70,8,71,3,72,8,73,4,74,0,42,0,43,0);for(var W=0;W<8;W++)N.push(40,W<4?0:1);
  790. N.push(10,p,20,F);for(var W=0;W<3;W++){p=D[f++];F=D[f++];N.push(10,p,20,F)}}}};return C}()/* pako 1.0.5 nodeca/pako */
  791. !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.pako=t()}}(function(){return function t(e,a,i){function n(s,o){if(!a[s]){if(!e[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(r)return r(s,!0);var h=new Error("Cannot find module '"+s+"'");throw h.code="MODULE_NOT_FOUND",h}var d=a[s]={exports:{}};e[s][0].call(d.exports,function(t){var a=e[s][1][t];return n(a?a:t)},d,d.exports,t,e,a,i)}return a[s].exports}for(var r="function"==typeof require&&require,s=0;s<i.length;s++)n(i[s]);return n}({1:[function(t,e,a){"use strict";function i(t){if(!(this instanceof i))return new i(t);this.options=l.assign({level:w,method:v,chunkSize:16384,windowBits:15,memLevel:8,strategy:p,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f,this.strm.avail_out=0;var a=o.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==b)throw new Error(d[a]);if(e.header&&o.deflateSetHeader(this.strm,e.header),e.dictionary){var n;if(n="string"==typeof e.dictionary?h.string2buf(e.dictionary):"[object ArrayBuffer]"===_.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=o.deflateSetDictionary(this.strm,n),a!==b)throw new Error(d[a]);this._dict_set=!0}}function n(t,e){var a=new i(e);if(a.push(t,!0),a.err)throw a.msg||d[a.err];return a.result}function r(t,e){return e=e||{},e.raw=!0,n(t,e)}function s(t,e){return e=e||{},e.gzip=!0,n(t,e)}var o=t("./zlib/deflate"),l=t("./utils/common"),h=t("./utils/strings"),d=t("./zlib/messages"),f=t("./zlib/zstream"),_=Object.prototype.toString,u=0,c=4,b=0,g=1,m=2,w=-1,p=0,v=8;i.prototype.push=function(t,e){var a,i,n=this.strm,r=this.options.chunkSize;if(this.ended)return!1;i=e===~~e?e:e===!0?c:u,"string"==typeof t?n.input=h.string2buf(t):"[object ArrayBuffer]"===_.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new l.Buf8(r),n.next_out=0,n.avail_out=r),a=o.deflate(n,i),a!==g&&a!==b)return this.onEnd(a),this.ended=!0,!1;0!==n.avail_out&&(0!==n.avail_in||i!==c&&i!==m)||("string"===this.options.to?this.onData(h.buf2binstring(l.shrinkBuf(n.output,n.next_out))):this.onData(l.shrinkBuf(n.output,n.next_out)))}while((n.avail_in>0||0===n.avail_out)&&a!==g);return i===c?(a=o.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===b):i!==m||(this.onEnd(b),n.avail_out=0,!0)},i.prototype.onData=function(t){this.chunks.push(t)},i.prototype.onEnd=function(t){t===b&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Deflate=i,a.deflate=n,a.deflateRaw=r,a.gzip=s},{"./utils/common":3,"./utils/strings":4,"./zlib/deflate":8,"./zlib/messages":13,"./zlib/zstream":15}],2:[function(t,e,a){"use strict";function i(t){if(!(this instanceof i))return new i(t);this.options=o.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0===(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f,this.strm.avail_out=0;var a=s.inflateInit2(this.strm,e.windowBits);if(a!==h.Z_OK)throw new Error(d[a]);this.header=new _,s.inflateGetHeader(this.strm,this.header)}function n(t,e){var a=new i(e);if(a.push(t,!0),a.err)throw a.msg||d[a.err];return a.result}function r(t,e){return e=e||{},e.raw=!0,n(t,e)}var s=t("./zlib/inflate"),o=t("./utils/common"),l=t("./utils/strings"),h=t("./zlib/constants"),d=t("./zlib/messages"),f=t("./zlib/zstream"),_=t("./zlib/gzheader"),u=Object.prototype.toString;i.prototype.push=function(t,e){var a,i,n,r,d,f,_=this.strm,c=this.options.chunkSize,b=this.options.dictionary,g=!1;if(this.ended)return!1;i=e===~~e?e:e===!0?h.Z_FINISH:h.Z_NO_FLUSH,"string"==typeof t?_.input=l.binstring2buf(t):"[object ArrayBuffer]"===u.call(t)?_.input=new Uint8Array(t):_.input=t,_.next_in=0,_.avail_in=_.input.length;do{if(0===_.avail_out&&(_.output=new o.Buf8(c),_.next_out=0,_.avail_out=c),a=s.inflate(_,h.Z_NO_FLUSH),a===h.Z_NEED_DICT&&b&&(f="string"==typeof b?l.string2buf(b):"[object ArrayBuffer]"===u.call(b)?new Uint8Array(b):b,a=s.inflateSetDictionary(this.strm,f)),a===h.Z_BUF_ERROR&&g===!0&&(a=h.Z_OK,g=!1),a!==h.Z_STREAM_END&&a!==h.Z_OK)return this.onEnd(a),this.ended=!0,!1;_.next_out&&(0!==_.avail_out&&a!==h.Z_STREAM_END&&(0!==_.avail_in||i!==h.Z_FINISH&&i!==h.Z_SYNC_FLUSH)||("string"===this.options.to?(n=l.utf8border(_.output,_.next_out),r=_.next_out-n,d=l.buf2string(_.output,n),_.next_out=r,_.avail_out=c-r,r&&o.arraySet(_.output,_.output,n,r,0),this.onData(d)):this.onData(o.shrinkBuf(_.output,_.next_out)))),0===_.avail_in&&0===_.avail_out&&(g=!0)}while((_.avail_in>0||0===_.avail_out)&&a!==h.Z_STREAM_END);return a===h.Z_STREAM_END&&(i=h.Z_FINISH),i===h.Z_FINISH?(a=s.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===h.Z_OK):i!==h.Z_SYNC_FLUSH||(this.onEnd(h.Z_OK),_.avail_out=0,!0)},i.prototype.onData=function(t){this.chunks.push(t)},i.prototype.onEnd=function(t){t===h.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Inflate=i,a.inflate=n,a.inflateRaw=r,a.ungzip=n},{"./utils/common":3,"./utils/strings":4,"./zlib/constants":6,"./zlib/gzheader":9,"./zlib/inflate":11,"./zlib/messages":13,"./zlib/zstream":15}],3:[function(t,e,a){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;a.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(var i in a)a.hasOwnProperty(i)&&(t[i]=a[i])}}return t},a.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,a,i,n){if(e.subarray&&t.subarray)return void t.set(e.subarray(a,a+i),n);for(var r=0;r<i;r++)t[n+r]=e[a+r]},flattenChunks:function(t){var e,a,i,n,r,s;for(i=0,e=0,a=t.length;e<a;e++)i+=t[e].length;for(s=new Uint8Array(i),n=0,e=0,a=t.length;e<a;e++)r=t[e],s.set(r,n),n+=r.length;return s}},r={arraySet:function(t,e,a,i,n){for(var r=0;r<i;r++)t[n+r]=e[a+r]},flattenChunks:function(t){return[].concat.apply([],t)}};a.setTyped=function(t){t?(a.Buf8=Uint8Array,a.Buf16=Uint16Array,a.Buf32=Int32Array,a.assign(a,n)):(a.Buf8=Array,a.Buf16=Array,a.Buf32=Array,a.assign(a,r))},a.setTyped(i)},{}],4:[function(t,e,a){"use strict";function i(t,e){if(e<65537&&(t.subarray&&s||!t.subarray&&r))return String.fromCharCode.apply(null,n.shrinkBuf(t,e));for(var a="",i=0;i<e;i++)a+=String.fromCharCode(t[i]);return a}var n=t("./common"),r=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(t){r=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){s=!1}for(var o=new n.Buf8(256),l=0;l<256;l++)o[l]=l>=252?6:l>=248?5:l>=240?4:l>=224?3:l>=192?2:1;o[254]=o[254]=1,a.string2buf=function(t){var e,a,i,r,s,o=t.length,l=0;for(r=0;r<o;r++)a=t.charCodeAt(r),55296===(64512&a)&&r+1<o&&(i=t.charCodeAt(r+1),56320===(64512&i)&&(a=65536+(a-55296<<10)+(i-56320),r++)),l+=a<128?1:a<2048?2:a<65536?3:4;for(e=new n.Buf8(l),s=0,r=0;s<l;r++)a=t.charCodeAt(r),55296===(64512&a)&&r+1<o&&(i=t.charCodeAt(r+1),56320===(64512&i)&&(a=65536+(a-55296<<10)+(i-56320),r++)),a<128?e[s++]=a:a<2048?(e[s++]=192|a>>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},a.buf2binstring=function(t){return i(t,t.length)},a.binstring2buf=function(t){for(var e=new n.Buf8(t.length),a=0,i=e.length;a<i;a++)e[a]=t.charCodeAt(a);return e},a.buf2string=function(t,e){var a,n,r,s,l=e||t.length,h=new Array(2*l);for(n=0,a=0;a<l;)if(r=t[a++],r<128)h[n++]=r;else if(s=o[r],s>4)h[n++]=65533,a+=s-1;else{for(r&=2===s?31:3===s?15:7;s>1&&a<l;)r=r<<6|63&t[a++],s--;s>1?h[n++]=65533:r<65536?h[n++]=r:(r-=65536,h[n++]=55296|r>>10&1023,h[n++]=56320|1023&r)}return i(h,n)},a.utf8border=function(t,e){var a;for(e=e||t.length,e>t.length&&(e=t.length),a=e-1;a>=0&&128===(192&t[a]);)a--;return a<0?e:0===a?e:a+o[t[a]]>e?a:e}},{"./common":3}],5:[function(t,e,a){"use strict";function i(t,e,a,i){for(var n=65535&t|0,r=t>>>16&65535|0,s=0;0!==a;){s=a>2e3?2e3:a,a-=s;do n=n+e[i++]|0,r=r+n|0;while(--s);n%=65521,r%=65521}return n|r<<16|0}e.exports=i},{}],6:[function(t,e,a){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],7:[function(t,e,a){"use strict";function i(){for(var t,e=[],a=0;a<256;a++){t=a;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}function n(t,e,a,i){var n=r,s=i+a;t^=-1;for(var o=i;o<s;o++)t=t>>>8^n[255&(t^e[o])];return t^-1}var r=i();e.exports=n},{}],8:[function(t,e,a){"use strict";function i(t,e){return t.msg=D[e],e}function n(t){return(t<<1)-(t>4?9:0)}function r(t){for(var e=t.length;--e>=0;)t[e]=0}function s(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(R.arraySet(t.output,e.pending_buf,e.pending_out,a,t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))}function o(t,e){C._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,s(t.strm)}function l(t,e){t.pending_buf[t.pending++]=e}function h(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function d(t,e,a,i){var n=t.avail_in;return n>i&&(n=i),0===n?0:(t.avail_in-=n,R.arraySet(e,t.input,t.next_in,n,a),1===t.state.wrap?t.adler=N(t.adler,e,n,a):2===t.state.wrap&&(t.adler=O(t.adler,e,n,a)),t.next_in+=n,t.total_in+=n,n)}function f(t,e){var a,i,n=t.max_chain_length,r=t.strstart,s=t.prev_length,o=t.nice_match,l=t.strstart>t.w_size-ft?t.strstart-(t.w_size-ft):0,h=t.window,d=t.w_mask,f=t.prev,_=t.strstart+dt,u=h[r+s-1],c=h[r+s];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do if(a=e,h[a+s]===c&&h[a+s-1]===u&&h[a]===h[r]&&h[++a]===h[r+1]){r+=2,a++;do;while(h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&r<_);if(i=dt-(_-r),r=_-dt,i>s){if(t.match_start=e,s=i,i>=o)break;u=h[r+s-1],c=h[r+s]}}while((e=f[e&d])>l&&0!==--n);return s<=t.lookahead?s:t.lookahead}function _(t){var e,a,i,n,r,s=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=s+(s-ft)){R.arraySet(t.window,t.window,s,s,0),t.match_start-=s,t.strstart-=s,t.block_start-=s,a=t.hash_size,e=a;do i=t.head[--e],t.head[e]=i>=s?i-s:0;while(--a);a=s,e=a;do i=t.prev[--e],t.prev[e]=i>=s?i-s:0;while(--a);n+=s}if(0===t.strm.avail_in)break;if(a=d(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=a,t.lookahead+t.insert>=ht)for(r=t.strstart-t.insert,t.ins_h=t.window[r],t.ins_h=(t.ins_h<<t.hash_shift^t.window[r+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[r+ht-1])&t.hash_mask,t.prev[r&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=r,r++,t.insert--,!(t.lookahead+t.insert<ht)););}while(t.lookahead<ft&&0!==t.strm.avail_in)}function u(t,e){var a=65535;for(a>t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(_(t),0===t.lookahead&&e===I)return vt;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+a;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,o(t,!1),0===t.strm.avail_out))return vt;if(t.strstart-t.block_start>=t.w_size-ft&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.strstart>t.block_start&&(o(t,!1),0===t.strm.avail_out)?vt:vt}function c(t,e){for(var a,i;;){if(t.lookahead<ft){if(_(t),t.lookahead<ft&&e===I)return vt;if(0===t.lookahead)break}if(a=0,t.lookahead>=ht&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+ht-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-ft&&(t.match_length=f(t,a)),t.match_length>=ht)if(i=C._tr_tally(t,t.strstart-t.match_start,t.match_length-ht),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=ht){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+ht-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else i=C._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=t.strstart<ht-1?t.strstart:ht-1,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?vt:kt}function b(t,e){for(var a,i,n;;){if(t.lookahead<ft){if(_(t),t.lookahead<ft&&e===I)return vt;if(0===t.lookahead)break}if(a=0,t.lookahead>=ht&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+ht-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=ht-1,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-ft&&(t.match_length=f(t,a),t.match_length<=5&&(t.strategy===q||t.match_length===ht&&t.strstart-t.match_start>4096)&&(t.match_length=ht-1)),t.prev_length>=ht&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-ht,i=C._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-ht),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=n&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+ht-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(0!==--t.prev_length);if(t.match_available=0,t.match_length=ht-1,t.strstart++,i&&(o(t,!1),0===t.strm.avail_out))return vt}else if(t.match_available){if(i=C._tr_tally(t,0,t.window[t.strstart-1]),i&&o(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return vt}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=C._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<ht-1?t.strstart:ht-1,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?vt:kt}function g(t,e){for(var a,i,n,r,s=t.window;;){if(t.lookahead<=dt){if(_(t),t.lookahead<=dt&&e===I)return vt;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=ht&&t.strstart>0&&(n=t.strstart-1,i=s[n],i===s[++n]&&i===s[++n]&&i===s[++n])){r=t.strstart+dt;do;while(i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&n<r);t.match_length=dt-(r-n),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=ht?(a=C._tr_tally(t,1,t.match_length-ht),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=C._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?vt:kt}function m(t,e){for(var a;;){if(0===t.lookahead&&(_(t),0===t.lookahead)){if(e===I)return vt;break}if(t.match_length=0,a=C._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?vt:kt}function w(t,e,a,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=i,this.func=n}function p(t){t.window_size=2*t.w_size,r(t.head),t.max_lazy_match=Z[t.level].max_lazy,t.good_match=Z[t.level].good_length,t.nice_match=Z[t.level].nice_length,t.max_chain_length=Z[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=ht-1,t.match_available=0,t.ins_h=0}function v(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=V,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new R.Buf16(2*ot),this.dyn_dtree=new R.Buf16(2*(2*rt+1)),this.bl_tree=new R.Buf16(2*(2*st+1)),r(this.dyn_ltree),r(this.dyn_dtree),r(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new R.Buf16(lt+1),this.heap=new R.Buf16(2*nt+1),r(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new R.Buf16(2*nt+1),r(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function k(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=Q,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?ut:wt,t.adler=2===e.wrap?0:1,e.last_flush=I,C._tr_init(e),H):i(t,K)}function y(t){var e=k(t);return e===H&&p(t.state),e}function x(t,e){return t&&t.state?2!==t.state.wrap?K:(t.state.gzhead=e,H):K}function z(t,e,a,n,r,s){if(!t)return K;var o=1;if(e===Y&&(e=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),r<1||r>$||a!==V||n<8||n>15||e<0||e>9||s<0||s>W)return i(t,K);8===n&&(n=9);var l=new v;return t.state=l,l.strm=t,l.wrap=o,l.gzhead=null,l.w_bits=n,l.w_size=1<<l.w_bits,l.w_mask=l.w_size-1,l.hash_bits=r+7,l.hash_size=1<<l.hash_bits,l.hash_mask=l.hash_size-1,l.hash_shift=~~((l.hash_bits+ht-1)/ht),l.window=new R.Buf8(2*l.w_size),l.head=new R.Buf16(l.hash_size),l.prev=new R.Buf16(l.w_size),l.lit_bufsize=1<<r+6,l.pending_buf_size=4*l.lit_bufsize,l.pending_buf=new R.Buf8(l.pending_buf_size),l.d_buf=1*l.lit_bufsize,l.l_buf=3*l.lit_bufsize,l.level=e,l.strategy=s,l.method=a,y(t)}function B(t,e){return z(t,e,V,tt,et,J)}function S(t,e){var a,o,d,f;if(!t||!t.state||e>L||e<0)return t?i(t,K):K;if(o=t.state,!t.output||!t.input&&0!==t.avail_in||o.status===pt&&e!==F)return i(t,0===t.avail_out?P:K);if(o.strm=t,a=o.last_flush,o.last_flush=e,o.status===ut)if(2===o.wrap)t.adler=0,l(o,31),l(o,139),l(o,8),o.gzhead?(l(o,(o.gzhead.text?1:0)+(o.gzhead.hcrc?2:0)+(o.gzhead.extra?4:0)+(o.gzhead.name?8:0)+(o.gzhead.comment?16:0)),l(o,255&o.gzhead.time),l(o,o.gzhead.time>>8&255),l(o,o.gzhead.time>>16&255),l(o,o.gzhead.time>>24&255),l(o,9===o.level?2:o.strategy>=G||o.level<2?4:0),l(o,255&o.gzhead.os),o.gzhead.extra&&o.gzhead.extra.length&&(l(o,255&o.gzhead.extra.length),l(o,o.gzhead.extra.length>>8&255)),o.gzhead.hcrc&&(t.adler=O(t.adler,o.pending_buf,o.pending,0)),o.gzindex=0,o.status=ct):(l(o,0),l(o,0),l(o,0),l(o,0),l(o,0),l(o,9===o.level?2:o.strategy>=G||o.level<2?4:0),l(o,zt),o.status=wt);else{var _=V+(o.w_bits-8<<4)<<8,u=-1;u=o.strategy>=G||o.level<2?0:o.level<6?1:6===o.level?2:3,_|=u<<6,0!==o.strstart&&(_|=_t),_+=31-_%31,o.status=wt,h(o,_),0!==o.strstart&&(h(o,t.adler>>>16),h(o,65535&t.adler)),t.adler=1}if(o.status===ct)if(o.gzhead.extra){for(d=o.pending;o.gzindex<(65535&o.gzhead.extra.length)&&(o.pending!==o.pending_buf_size||(o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending!==o.pending_buf_size));)l(o,255&o.gzhead.extra[o.gzindex]),o.gzindex++;o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),o.gzindex===o.gzhead.extra.length&&(o.gzindex=0,o.status=bt)}else o.status=bt;if(o.status===bt)if(o.gzhead.name){d=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindex<o.gzhead.name.length?255&o.gzhead.name.charCodeAt(o.gzindex++):0,l(o,f)}while(0!==f);o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),0===f&&(o.gzindex=0,o.status=gt)}else o.status=gt;if(o.status===gt)if(o.gzhead.comment){d=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindex<o.gzhead.comment.length?255&o.gzhead.comment.charCodeAt(o.gzindex++):0,l(o,f)}while(0!==f);o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),0===f&&(o.status=mt)}else o.status=mt;if(o.status===mt&&(o.gzhead.hcrc?(o.pending+2>o.pending_buf_size&&s(t),o.pending+2<=o.pending_buf_size&&(l(o,255&t.adler),l(o,t.adler>>8&255),t.adler=0,o.status=wt)):o.status=wt),0!==o.pending){if(s(t),0===t.avail_out)return o.last_flush=-1,H}else if(0===t.avail_in&&n(e)<=n(a)&&e!==F)return i(t,P);if(o.status===pt&&0!==t.avail_in)return i(t,P);if(0!==t.avail_in||0!==o.lookahead||e!==I&&o.status!==pt){var c=o.strategy===G?m(o,e):o.strategy===X?g(o,e):Z[o.level].func(o,e);if(c!==yt&&c!==xt||(o.status=pt),c===vt||c===yt)return 0===t.avail_out&&(o.last_flush=-1),H;if(c===kt&&(e===U?C._tr_align(o):e!==L&&(C._tr_stored_block(o,0,0,!1),e===T&&(r(o.head),0===o.lookahead&&(o.strstart=0,o.block_start=0,o.insert=0))),s(t),0===t.avail_out))return o.last_flush=-1,H}return e!==F?H:o.wrap<=0?j:(2===o.wrap?(l(o,255&t.adler),l(o,t.adler>>8&255),l(o,t.adler>>16&255),l(o,t.adler>>24&255),l(o,255&t.total_in),l(o,t.total_in>>8&255),l(o,t.total_in>>16&255),l(o,t.total_in>>24&255)):(h(o,t.adler>>>16),h(o,65535&t.adler)),s(t),o.wrap>0&&(o.wrap=-o.wrap),0!==o.pending?H:j)}function E(t){var e;return t&&t.state?(e=t.state.status,e!==ut&&e!==ct&&e!==bt&&e!==gt&&e!==mt&&e!==wt&&e!==pt?i(t,K):(t.state=null,e===wt?i(t,M):H)):K}function A(t,e){var a,i,n,s,o,l,h,d,f=e.length;if(!t||!t.state)return K;if(a=t.state,s=a.wrap,2===s||1===s&&a.status!==ut||a.lookahead)return K;for(1===s&&(t.adler=N(t.adler,e,f,0)),a.wrap=0,f>=a.w_size&&(0===s&&(r(a.head),a.strstart=0,a.block_start=0,a.insert=0),d=new R.Buf8(a.w_size),R.arraySet(d,e,f-a.w_size,a.w_size,0),e=d,f=a.w_size),o=t.avail_in,l=t.next_in,h=t.input,t.avail_in=f,t.next_in=0,t.input=e,_(a);a.lookahead>=ht;){i=a.strstart,n=a.lookahead-(ht-1);do a.ins_h=(a.ins_h<<a.hash_shift^a.window[i+ht-1])&a.hash_mask,a.prev[i&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=i,i++;while(--n);a.strstart=i,a.lookahead=ht-1,_(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=ht-1,a.match_available=0,t.next_in=l,t.input=h,t.avail_in=o,a.wrap=s,H}var Z,R=t("../utils/common"),C=t("./trees"),N=t("./adler32"),O=t("./crc32"),D=t("./messages"),I=0,U=1,T=3,F=4,L=5,H=0,j=1,K=-2,M=-3,P=-5,Y=-1,q=1,G=2,X=3,W=4,J=0,Q=2,V=8,$=9,tt=15,et=8,at=29,it=256,nt=it+1+at,rt=30,st=19,ot=2*nt+1,lt=15,ht=3,dt=258,ft=dt+ht+1,_t=32,ut=42,ct=69,bt=73,gt=91,mt=103,wt=113,pt=666,vt=1,kt=2,yt=3,xt=4,zt=3;Z=[new w(0,0,0,0,u),new w(4,4,8,4,c),new w(4,5,16,8,c),new w(4,6,32,32,c),new w(4,4,16,16,b),new w(8,16,32,32,b),new w(8,16,128,128,b),new w(8,32,128,256,b),new w(32,128,258,1024,b),new w(32,258,258,4096,b)],a.deflateInit=B,a.deflateInit2=z,a.deflateReset=y,a.deflateResetKeep=k,a.deflateSetHeader=x,a.deflate=S,a.deflateEnd=E,a.deflateSetDictionary=A,a.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":3,"./adler32":5,"./crc32":7,"./messages":13,"./trees":14}],9:[function(t,e,a){"use strict";function i(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}e.exports=i},{}],10:[function(t,e,a){"use strict";var i=30,n=12;e.exports=function(t,e){var a,r,s,o,l,h,d,f,_,u,c,b,g,m,w,p,v,k,y,x,z,B,S,E,A;a=t.state,r=t.next_in,E=t.input,s=r+(t.avail_in-5),o=t.next_out,A=t.output,l=o-(e-t.avail_out),h=o+(t.avail_out-257),d=a.dmax,f=a.wsize,_=a.whave,u=a.wnext,c=a.window,b=a.hold,g=a.bits,m=a.lencode,w=a.distcode,p=(1<<a.lenbits)-1,v=(1<<a.distbits)-1;t:do{g<15&&(b+=E[r++]<<g,g+=8,b+=E[r++]<<g,g+=8),k=m[b&p];e:for(;;){if(y=k>>>24,b>>>=y,g-=y,y=k>>>16&255,0===y)A[o++]=65535&k;else{if(!(16&y)){if(0===(64&y)){k=m[(65535&k)+(b&(1<<y)-1)];continue e}if(32&y){a.mode=n;break t}t.msg="invalid literal/length code",a.mode=i;break t}x=65535&k,y&=15,y&&(g<y&&(b+=E[r++]<<g,g+=8),x+=b&(1<<y)-1,b>>>=y,g-=y),g<15&&(b+=E[r++]<<g,g+=8,b+=E[r++]<<g,g+=8),k=w[b&v];a:for(;;){if(y=k>>>24,b>>>=y,g-=y,y=k>>>16&255,!(16&y)){if(0===(64&y)){k=w[(65535&k)+(b&(1<<y)-1)];continue a}t.msg="invalid distance code",a.mode=i;break t}if(z=65535&k,y&=15,g<y&&(b+=E[r++]<<g,g+=8,g<y&&(b+=E[r++]<<g,g+=8)),z+=b&(1<<y)-1,z>d){t.msg="invalid distance too far back",a.mode=i;break t}if(b>>>=y,g-=y,y=o-l,z>y){if(y=z-y,y>_&&a.sane){t.msg="invalid distance too far back",a.mode=i;break t}if(B=0,S=c,0===u){if(B+=f-y,y<x){x-=y;do A[o++]=c[B++];while(--y);B=o-z,S=A}}else if(u<y){if(B+=f+u-y,y-=u,y<x){x-=y;do A[o++]=c[B++];while(--y);if(B=0,u<x){y=u,x-=y;do A[o++]=c[B++];while(--y);B=o-z,S=A}}}else if(B+=u-y,y<x){x-=y;do A[o++]=c[B++];while(--y);B=o-z,S=A}for(;x>2;)A[o++]=S[B++],A[o++]=S[B++],A[o++]=S[B++],x-=3;x&&(A[o++]=S[B++],x>1&&(A[o++]=S[B++]))}else{B=o-z;do A[o++]=A[B++],A[o++]=A[B++],A[o++]=A[B++],x-=3;while(x>2);x&&(A[o++]=A[B++],x>1&&(A[o++]=A[B++]))}break}}break}}while(r<s&&o<h);x=g>>3,r-=x,g-=x<<3,b&=(1<<g)-1,t.next_in=r,t.next_out=o,t.avail_in=r<s?5+(s-r):5-(r-s),t.avail_out=o<h?257+(h-o):257-(o-h),a.hold=b,a.bits=g}},{}],11:[function(t,e,a){"use strict";function i(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function n(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new w.Buf16(320),this.work=new w.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function r(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=T,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new w.Buf32(bt),e.distcode=e.distdyn=new w.Buf32(gt),e.sane=1,e.back=-1,Z):N}function s(t){var e;return t&&t.state?(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,r(t)):N}function o(t,e){var a,i;return t&&t.state?(i=t.state,e<0?(a=0,e=-e):(a=(e>>4)+1,e<48&&(e&=15)),e&&(e<8||e>15)?N:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=a,i.wbits=e,s(t))):N}function l(t,e){var a,i;return t?(i=new n,t.state=i,i.window=null,a=o(t,e),a!==Z&&(t.state=null),a):N}function h(t){return l(t,wt)}function d(t){if(pt){var e;for(g=new w.Buf32(512),m=new w.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(y(z,t.lens,0,288,g,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;y(B,t.lens,0,32,m,0,t.work,{bits:5}),pt=!1}t.lencode=g,t.lenbits=9,t.distcode=m,t.distbits=5}function f(t,e,a,i){var n,r=t.state;return null===r.window&&(r.wsize=1<<r.wbits,r.wnext=0,r.whave=0,r.window=new w.Buf8(r.wsize)),i>=r.wsize?(w.arraySet(r.window,e,a-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n=r.wsize-r.wnext,n>i&&(n=i),w.arraySet(r.window,e,a-i,n,r.wnext),i-=n,i?(w.arraySet(r.window,e,a-i,i,0),r.wnext=i,r.whave=r.wsize):(r.wnext+=n,r.wnext===r.wsize&&(r.wnext=0),r.whave<r.wsize&&(r.whave+=n))),0}function _(t,e){var a,n,r,s,o,l,h,_,u,c,b,g,m,bt,gt,mt,wt,pt,vt,kt,yt,xt,zt,Bt,St=0,Et=new w.Buf8(4),At=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return N;a=t.state,a.mode===X&&(a.mode=W),o=t.next_out,r=t.output,h=t.avail_out,s=t.next_in,n=t.input,l=t.avail_in,_=a.hold,u=a.bits,c=l,b=h,xt=Z;t:for(;;)switch(a.mode){case T:if(0===a.wrap){a.mode=W;break}for(;u<16;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if(2&a.wrap&&35615===_){a.check=0,Et[0]=255&_,Et[1]=_>>>8&255,a.check=v(a.check,Et,2,0),_=0,u=0,a.mode=F;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&_)<<8)+(_>>8))%31){t.msg="incorrect header check",a.mode=_t;break}if((15&_)!==U){t.msg="unknown compression method",a.mode=_t;break}if(_>>>=4,u-=4,yt=(15&_)+8,0===a.wbits)a.wbits=yt;else if(yt>a.wbits){t.msg="invalid window size",a.mode=_t;break}a.dmax=1<<yt,t.adler=a.check=1,a.mode=512&_?q:X,_=0,u=0;break;case F:for(;u<16;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if(a.flags=_,(255&a.flags)!==U){t.msg="unknown compression method",a.mode=_t;break}if(57344&a.flags){t.msg="unknown header flags set",a.mode=_t;break}a.head&&(a.head.text=_>>8&1),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=v(a.check,Et,2,0)),_=0,u=0,a.mode=L;case L:for(;u<32;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}a.head&&(a.head.time=_),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,Et[2]=_>>>16&255,Et[3]=_>>>24&255,a.check=v(a.check,Et,4,0)),_=0,u=0,a.mode=H;case H:for(;u<16;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}a.head&&(a.head.xflags=255&_,a.head.os=_>>8),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=v(a.check,Et,2,0)),_=0,u=0,a.mode=j;case j:if(1024&a.flags){for(;u<16;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}a.length=_,a.head&&(a.head.extra_len=_),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=v(a.check,Et,2,0)),_=0,u=0}else a.head&&(a.head.extra=null);a.mode=K;case K:if(1024&a.flags&&(g=a.length,g>l&&(g=l),g&&(a.head&&(yt=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),w.arraySet(a.head.extra,n,s,g,yt)),512&a.flags&&(a.check=v(a.check,n,g,s)),l-=g,s+=g,a.length-=g),a.length))break t;a.length=0,a.mode=M;case M:if(2048&a.flags){if(0===l)break t;g=0;do yt=n[s+g++],a.head&&yt&&a.length<65536&&(a.head.name+=String.fromCharCode(yt));while(yt&&g<l);if(512&a.flags&&(a.check=v(a.check,n,g,s)),l-=g,s+=g,yt)break t}else a.head&&(a.head.name=null);a.length=0,a.mode=P;case P:if(4096&a.flags){if(0===l)break t;g=0;do yt=n[s+g++],a.head&&yt&&a.length<65536&&(a.head.comment+=String.fromCharCode(yt));while(yt&&g<l);if(512&a.flags&&(a.check=v(a.check,n,g,s)),l-=g,s+=g,yt)break t}else a.head&&(a.head.comment=null);a.mode=Y;case Y:if(512&a.flags){for(;u<16;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if(_!==(65535&a.check)){t.msg="header crc mismatch",a.mode=_t;break}_=0,u=0}a.head&&(a.head.hcrc=a.flags>>9&1,a.head.done=!0),t.adler=a.check=0,a.mode=X;break;case q:for(;u<32;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}t.adler=a.check=i(_),_=0,u=0,a.mode=G;case G:if(0===a.havedict)return t.next_out=o,t.avail_out=h,t.next_in=s,t.avail_in=l,a.hold=_,a.bits=u,C;t.adler=a.check=1,a.mode=X;case X:if(e===E||e===A)break t;case W:if(a.last){_>>>=7&u,u-=7&u,a.mode=ht;break}for(;u<3;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}switch(a.last=1&_,_>>>=1,u-=1,3&_){case 0:a.mode=J;break;case 1:if(d(a),a.mode=at,e===A){_>>>=2,u-=2;break t}break;case 2:a.mode=$;break;case 3:t.msg="invalid block type",a.mode=_t}_>>>=2,u-=2;break;case J:for(_>>>=7&u,u-=7&u;u<32;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if((65535&_)!==(_>>>16^65535)){t.msg="invalid stored block lengths",a.mode=_t;break}if(a.length=65535&_,_=0,u=0,a.mode=Q,e===A)break t;case Q:a.mode=V;case V:if(g=a.length){if(g>l&&(g=l),g>h&&(g=h),0===g)break t;w.arraySet(r,n,s,g,o),l-=g,s+=g,h-=g,o+=g,a.length-=g;break}a.mode=X;break;case $:
  792. for(;u<14;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if(a.nlen=(31&_)+257,_>>>=5,u-=5,a.ndist=(31&_)+1,_>>>=5,u-=5,a.ncode=(15&_)+4,_>>>=4,u-=4,a.nlen>286||a.ndist>30){t.msg="too many length or distance symbols",a.mode=_t;break}a.have=0,a.mode=tt;case tt:for(;a.have<a.ncode;){for(;u<3;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}a.lens[At[a.have++]]=7&_,_>>>=3,u-=3}for(;a.have<19;)a.lens[At[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,zt={bits:a.lenbits},xt=y(x,a.lens,0,19,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg="invalid code lengths set",a.mode=_t;break}a.have=0,a.mode=et;case et:for(;a.have<a.nlen+a.ndist;){for(;St=a.lencode[_&(1<<a.lenbits)-1],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(gt<=u);){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if(wt<16)_>>>=gt,u-=gt,a.lens[a.have++]=wt;else{if(16===wt){for(Bt=gt+2;u<Bt;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if(_>>>=gt,u-=gt,0===a.have){t.msg="invalid bit length repeat",a.mode=_t;break}yt=a.lens[a.have-1],g=3+(3&_),_>>>=2,u-=2}else if(17===wt){for(Bt=gt+3;u<Bt;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}_>>>=gt,u-=gt,yt=0,g=3+(7&_),_>>>=3,u-=3}else{for(Bt=gt+7;u<Bt;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}_>>>=gt,u-=gt,yt=0,g=11+(127&_),_>>>=7,u-=7}if(a.have+g>a.nlen+a.ndist){t.msg="invalid bit length repeat",a.mode=_t;break}for(;g--;)a.lens[a.have++]=yt}}if(a.mode===_t)break;if(0===a.lens[256]){t.msg="invalid code -- missing end-of-block",a.mode=_t;break}if(a.lenbits=9,zt={bits:a.lenbits},xt=y(z,a.lens,0,a.nlen,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg="invalid literal/lengths set",a.mode=_t;break}if(a.distbits=6,a.distcode=a.distdyn,zt={bits:a.distbits},xt=y(B,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,zt),a.distbits=zt.bits,xt){t.msg="invalid distances set",a.mode=_t;break}if(a.mode=at,e===A)break t;case at:a.mode=it;case it:if(l>=6&&h>=258){t.next_out=o,t.avail_out=h,t.next_in=s,t.avail_in=l,a.hold=_,a.bits=u,k(t,b),o=t.next_out,r=t.output,h=t.avail_out,s=t.next_in,n=t.input,l=t.avail_in,_=a.hold,u=a.bits,a.mode===X&&(a.back=-1);break}for(a.back=0;St=a.lencode[_&(1<<a.lenbits)-1],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(gt<=u);){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if(mt&&0===(240&mt)){for(pt=gt,vt=mt,kt=wt;St=a.lencode[kt+((_&(1<<pt+vt)-1)>>pt)],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(pt+gt<=u);){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}_>>>=pt,u-=pt,a.back+=pt}if(_>>>=gt,u-=gt,a.back+=gt,a.length=wt,0===mt){a.mode=lt;break}if(32&mt){a.back=-1,a.mode=X;break}if(64&mt){t.msg="invalid literal/length code",a.mode=_t;break}a.extra=15&mt,a.mode=nt;case nt:if(a.extra){for(Bt=a.extra;u<Bt;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}a.length+=_&(1<<a.extra)-1,_>>>=a.extra,u-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=rt;case rt:for(;St=a.distcode[_&(1<<a.distbits)-1],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(gt<=u);){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if(0===(240&mt)){for(pt=gt,vt=mt,kt=wt;St=a.distcode[kt+((_&(1<<pt+vt)-1)>>pt)],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(pt+gt<=u);){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}_>>>=pt,u-=pt,a.back+=pt}if(_>>>=gt,u-=gt,a.back+=gt,64&mt){t.msg="invalid distance code",a.mode=_t;break}a.offset=wt,a.extra=15&mt,a.mode=st;case st:if(a.extra){for(Bt=a.extra;u<Bt;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}a.offset+=_&(1<<a.extra)-1,_>>>=a.extra,u-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){t.msg="invalid distance too far back",a.mode=_t;break}a.mode=ot;case ot:if(0===h)break t;if(g=b-h,a.offset>g){if(g=a.offset-g,g>a.whave&&a.sane){t.msg="invalid distance too far back",a.mode=_t;break}g>a.wnext?(g-=a.wnext,m=a.wsize-g):m=a.wnext-g,g>a.length&&(g=a.length),bt=a.window}else bt=r,m=o-a.offset,g=a.length;g>h&&(g=h),h-=g,a.length-=g;do r[o++]=bt[m++];while(--g);0===a.length&&(a.mode=it);break;case lt:if(0===h)break t;r[o++]=a.length,h--,a.mode=it;break;case ht:if(a.wrap){for(;u<32;){if(0===l)break t;l--,_|=n[s++]<<u,u+=8}if(b-=h,t.total_out+=b,a.total+=b,b&&(t.adler=a.check=a.flags?v(a.check,r,b,o-b):p(a.check,r,b,o-b)),b=h,(a.flags?_:i(_))!==a.check){t.msg="incorrect data check",a.mode=_t;break}_=0,u=0}a.mode=dt;case dt:if(a.wrap&&a.flags){for(;u<32;){if(0===l)break t;l--,_+=n[s++]<<u,u+=8}if(_!==(4294967295&a.total)){t.msg="incorrect length check",a.mode=_t;break}_=0,u=0}a.mode=ft;case ft:xt=R;break t;case _t:xt=O;break t;case ut:return D;case ct:default:return N}return t.next_out=o,t.avail_out=h,t.next_in=s,t.avail_in=l,a.hold=_,a.bits=u,(a.wsize||b!==t.avail_out&&a.mode<_t&&(a.mode<ht||e!==S))&&f(t,t.output,t.next_out,b-t.avail_out)?(a.mode=ut,D):(c-=t.avail_in,b-=t.avail_out,t.total_in+=c,t.total_out+=b,a.total+=b,a.wrap&&b&&(t.adler=a.check=a.flags?v(a.check,r,b,t.next_out-b):p(a.check,r,b,t.next_out-b)),t.data_type=a.bits+(a.last?64:0)+(a.mode===X?128:0)+(a.mode===at||a.mode===Q?256:0),(0===c&&0===b||e===S)&&xt===Z&&(xt=I),xt)}function u(t){if(!t||!t.state)return N;var e=t.state;return e.window&&(e.window=null),t.state=null,Z}function c(t,e){var a;return t&&t.state?(a=t.state,0===(2&a.wrap)?N:(a.head=e,e.done=!1,Z)):N}function b(t,e){var a,i,n,r=e.length;return t&&t.state?(a=t.state,0!==a.wrap&&a.mode!==G?N:a.mode===G&&(i=1,i=p(i,e,r,0),i!==a.check)?O:(n=f(t,e,r,r))?(a.mode=ut,D):(a.havedict=1,Z)):N}var g,m,w=t("../utils/common"),p=t("./adler32"),v=t("./crc32"),k=t("./inffast"),y=t("./inftrees"),x=0,z=1,B=2,S=4,E=5,A=6,Z=0,R=1,C=2,N=-2,O=-3,D=-4,I=-5,U=8,T=1,F=2,L=3,H=4,j=5,K=6,M=7,P=8,Y=9,q=10,G=11,X=12,W=13,J=14,Q=15,V=16,$=17,tt=18,et=19,at=20,it=21,nt=22,rt=23,st=24,ot=25,lt=26,ht=27,dt=28,ft=29,_t=30,ut=31,ct=32,bt=852,gt=592,mt=15,wt=mt,pt=!0;a.inflateReset=s,a.inflateReset2=o,a.inflateResetKeep=r,a.inflateInit=h,a.inflateInit2=l,a.inflate=_,a.inflateEnd=u,a.inflateGetHeader=c,a.inflateSetDictionary=b,a.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":3,"./adler32":5,"./crc32":7,"./inffast":10,"./inftrees":12}],12:[function(t,e,a){"use strict";var i=t("../utils/common"),n=15,r=852,s=592,o=0,l=1,h=2,d=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],f=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],_=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],u=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(t,e,a,c,b,g,m,w){var p,v,k,y,x,z,B,S,E,A=w.bits,Z=0,R=0,C=0,N=0,O=0,D=0,I=0,U=0,T=0,F=0,L=null,H=0,j=new i.Buf16(n+1),K=new i.Buf16(n+1),M=null,P=0;for(Z=0;Z<=n;Z++)j[Z]=0;for(R=0;R<c;R++)j[e[a+R]]++;for(O=A,N=n;N>=1&&0===j[N];N--);if(O>N&&(O=N),0===N)return b[g++]=20971520,b[g++]=20971520,w.bits=1,0;for(C=1;C<N&&0===j[C];C++);for(O<C&&(O=C),U=1,Z=1;Z<=n;Z++)if(U<<=1,U-=j[Z],U<0)return-1;if(U>0&&(t===o||1!==N))return-1;for(K[1]=0,Z=1;Z<n;Z++)K[Z+1]=K[Z]+j[Z];for(R=0;R<c;R++)0!==e[a+R]&&(m[K[e[a+R]]++]=R);if(t===o?(L=M=m,z=19):t===l?(L=d,H-=257,M=f,P-=257,z=256):(L=_,M=u,z=-1),F=0,R=0,Z=C,x=g,D=O,I=0,k=-1,T=1<<O,y=T-1,t===l&&T>r||t===h&&T>s)return 1;for(;;){B=Z-I,m[R]<z?(S=0,E=m[R]):m[R]>z?(S=M[P+m[R]],E=L[H+m[R]]):(S=96,E=0),p=1<<Z-I,v=1<<D,C=v;do v-=p,b[x+(F>>I)+v]=B<<24|S<<16|E|0;while(0!==v);for(p=1<<Z-1;F&p;)p>>=1;if(0!==p?(F&=p-1,F+=p):F=0,R++,0===--j[Z]){if(Z===N)break;Z=e[a+m[R]]}if(Z>O&&(F&y)!==k){for(0===I&&(I=O),x+=C,D=Z-I,U=1<<D;D+I<N&&(U-=j[D+I],!(U<=0));)D++,U<<=1;if(T+=1<<D,t===l&&T>r||t===h&&T>s)return 1;k=F&y,b[k]=O<<24|D<<16|x-g|0}}return 0!==F&&(b[x+F]=Z-I<<24|64<<16|0),w.bits=O,0}},{"../utils/common":3}],13:[function(t,e,a){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],14:[function(t,e,a){"use strict";function i(t){for(var e=t.length;--e>=0;)t[e]=0}function n(t,e,a,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}function r(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function s(t){return t<256?lt[t]:lt[256+(t>>>7)]}function o(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function l(t,e,a){t.bi_valid>W-a?(t.bi_buf|=e<<t.bi_valid&65535,o(t,t.bi_buf),t.bi_buf=e>>W-t.bi_valid,t.bi_valid+=a-W):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)}function h(t,e,a){l(t,a[2*e],a[2*e+1])}function d(t,e){var a=0;do a|=1&t,t>>>=1,a<<=1;while(--e>0);return a>>>1}function f(t){16===t.bi_valid?(o(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}function _(t,e){var a,i,n,r,s,o,l=e.dyn_tree,h=e.max_code,d=e.stat_desc.static_tree,f=e.stat_desc.has_stree,_=e.stat_desc.extra_bits,u=e.stat_desc.extra_base,c=e.stat_desc.max_length,b=0;for(r=0;r<=X;r++)t.bl_count[r]=0;for(l[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;a<G;a++)i=t.heap[a],r=l[2*l[2*i+1]+1]+1,r>c&&(r=c,b++),l[2*i+1]=r,i>h||(t.bl_count[r]++,s=0,i>=u&&(s=_[i-u]),o=l[2*i],t.opt_len+=o*(r+s),f&&(t.static_len+=o*(d[2*i+1]+s)));if(0!==b){do{for(r=c-1;0===t.bl_count[r];)r--;t.bl_count[r]--,t.bl_count[r+1]+=2,t.bl_count[c]--,b-=2}while(b>0);for(r=c;0!==r;r--)for(i=t.bl_count[r];0!==i;)n=t.heap[--a],n>h||(l[2*n+1]!==r&&(t.opt_len+=(r-l[2*n+1])*l[2*n],l[2*n+1]=r),i--)}}function u(t,e,a){var i,n,r=new Array(X+1),s=0;for(i=1;i<=X;i++)r[i]=s=s+a[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=d(r[o]++,o))}}function c(){var t,e,a,i,r,s=new Array(X+1);for(a=0,i=0;i<K-1;i++)for(dt[i]=a,t=0;t<1<<et[i];t++)ht[a++]=i;for(ht[a-1]=i,r=0,i=0;i<16;i++)for(ft[i]=r,t=0;t<1<<at[i];t++)lt[r++]=i;for(r>>=7;i<Y;i++)for(ft[i]=r<<7,t=0;t<1<<at[i]-7;t++)lt[256+r++]=i;for(e=0;e<=X;e++)s[e]=0;for(t=0;t<=143;)st[2*t+1]=8,t++,s[8]++;for(;t<=255;)st[2*t+1]=9,t++,s[9]++;for(;t<=279;)st[2*t+1]=7,t++,s[7]++;for(;t<=287;)st[2*t+1]=8,t++,s[8]++;for(u(st,P+1,s),t=0;t<Y;t++)ot[2*t+1]=5,ot[2*t]=d(t,5);_t=new n(st,et,M+1,P,X),ut=new n(ot,at,0,Y,X),ct=new n(new Array(0),it,0,q,J)}function b(t){var e;for(e=0;e<P;e++)t.dyn_ltree[2*e]=0;for(e=0;e<Y;e++)t.dyn_dtree[2*e]=0;for(e=0;e<q;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*Q]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function g(t){t.bi_valid>8?o(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function m(t,e,a,i){g(t),i&&(o(t,a),o(t,~a)),N.arraySet(t.pending_buf,t.window,e,a,t.pending),t.pending+=a}function w(t,e,a,i){var n=2*e,r=2*a;return t[n]<t[r]||t[n]===t[r]&&i[e]<=i[a]}function p(t,e,a){for(var i=t.heap[a],n=a<<1;n<=t.heap_len&&(n<t.heap_len&&w(e,t.heap[n+1],t.heap[n],t.depth)&&n++,!w(e,i,t.heap[n],t.depth));)t.heap[a]=t.heap[n],a=n,n<<=1;t.heap[a]=i}function v(t,e,a){var i,n,r,o,d=0;if(0!==t.last_lit)do i=t.pending_buf[t.d_buf+2*d]<<8|t.pending_buf[t.d_buf+2*d+1],n=t.pending_buf[t.l_buf+d],d++,0===i?h(t,n,e):(r=ht[n],h(t,r+M+1,e),o=et[r],0!==o&&(n-=dt[r],l(t,n,o)),i--,r=s(i),h(t,r,a),o=at[r],0!==o&&(i-=ft[r],l(t,i,o)));while(d<t.last_lit);h(t,Q,e)}function k(t,e){var a,i,n,r=e.dyn_tree,s=e.stat_desc.static_tree,o=e.stat_desc.has_stree,l=e.stat_desc.elems,h=-1;for(t.heap_len=0,t.heap_max=G,a=0;a<l;a++)0!==r[2*a]?(t.heap[++t.heap_len]=h=a,t.depth[a]=0):r[2*a+1]=0;for(;t.heap_len<2;)n=t.heap[++t.heap_len]=h<2?++h:0,r[2*n]=1,t.depth[n]=0,t.opt_len--,o&&(t.static_len-=s[2*n+1]);for(e.max_code=h,a=t.heap_len>>1;a>=1;a--)p(t,r,a);n=l;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],p(t,r,1),i=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=i,r[2*n]=r[2*a]+r[2*i],t.depth[n]=(t.depth[a]>=t.depth[i]?t.depth[a]:t.depth[i])+1,r[2*a+1]=r[2*i+1]=n,t.heap[1]=n++,p(t,r,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],_(t,e),u(r,h,t.bl_count)}function y(t,e,a){var i,n,r=-1,s=e[1],o=0,l=7,h=4;for(0===s&&(l=138,h=3),e[2*(a+1)+1]=65535,i=0;i<=a;i++)n=s,s=e[2*(i+1)+1],++o<l&&n===s||(o<h?t.bl_tree[2*n]+=o:0!==n?(n!==r&&t.bl_tree[2*n]++,t.bl_tree[2*V]++):o<=10?t.bl_tree[2*$]++:t.bl_tree[2*tt]++,o=0,r=n,0===s?(l=138,h=3):n===s?(l=6,h=3):(l=7,h=4))}function x(t,e,a){var i,n,r=-1,s=e[1],o=0,d=7,f=4;for(0===s&&(d=138,f=3),i=0;i<=a;i++)if(n=s,s=e[2*(i+1)+1],!(++o<d&&n===s)){if(o<f){do h(t,n,t.bl_tree);while(0!==--o)}else 0!==n?(n!==r&&(h(t,n,t.bl_tree),o--),h(t,V,t.bl_tree),l(t,o-3,2)):o<=10?(h(t,$,t.bl_tree),l(t,o-3,3)):(h(t,tt,t.bl_tree),l(t,o-11,7));o=0,r=n,0===s?(d=138,f=3):n===s?(d=6,f=3):(d=7,f=4)}}function z(t){var e;for(y(t,t.dyn_ltree,t.l_desc.max_code),y(t,t.dyn_dtree,t.d_desc.max_code),k(t,t.bl_desc),e=q-1;e>=3&&0===t.bl_tree[2*nt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}function B(t,e,a,i){var n;for(l(t,e-257,5),l(t,a-1,5),l(t,i-4,4),n=0;n<i;n++)l(t,t.bl_tree[2*nt[n]+1],3);x(t,t.dyn_ltree,e-1),x(t,t.dyn_dtree,a-1)}function S(t){var e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return D;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return I;for(e=32;e<M;e++)if(0!==t.dyn_ltree[2*e])return I;return D}function E(t){bt||(c(),bt=!0),t.l_desc=new r(t.dyn_ltree,_t),t.d_desc=new r(t.dyn_dtree,ut),t.bl_desc=new r(t.bl_tree,ct),t.bi_buf=0,t.bi_valid=0,b(t)}function A(t,e,a,i){l(t,(T<<1)+(i?1:0),3),m(t,e,a,!0)}function Z(t){l(t,F<<1,3),h(t,Q,st),f(t)}function R(t,e,a,i){var n,r,s=0;t.level>0?(t.strm.data_type===U&&(t.strm.data_type=S(t)),k(t,t.l_desc),k(t,t.d_desc),s=z(t),n=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=n&&(n=r)):n=r=a+5,a+4<=n&&e!==-1?A(t,e,a,i):t.strategy===O||r===n?(l(t,(F<<1)+(i?1:0),3),v(t,st,ot)):(l(t,(L<<1)+(i?1:0),3),B(t,t.l_desc.max_code+1,t.d_desc.max_code+1,s+1),v(t,t.dyn_ltree,t.dyn_dtree)),b(t),i&&g(t)}function C(t,e,a){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(ht[a]+M+1)]++,t.dyn_dtree[2*s(e)]++),t.last_lit===t.lit_bufsize-1}var N=t("../utils/common"),O=4,D=0,I=1,U=2,T=0,F=1,L=2,H=3,j=258,K=29,M=256,P=M+1+K,Y=30,q=19,G=2*P+1,X=15,W=16,J=7,Q=256,V=16,$=17,tt=18,et=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],at=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],it=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],nt=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],rt=512,st=new Array(2*(P+2));i(st);var ot=new Array(2*Y);i(ot);var lt=new Array(rt);i(lt);var ht=new Array(j-H+1);i(ht);var dt=new Array(K);i(dt);var ft=new Array(Y);i(ft);var _t,ut,ct,bt=!1;a._tr_init=E,a._tr_stored_block=A,a._tr_flush_block=R,a._tr_tally=C,a._tr_align=Z},{"../utils/common":3}],15:[function(t,e,a){"use strict";function i(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}e.exports=i},{}],"/":[function(t,e,a){"use strict";var i=t("./lib/utils/common").assign,n=t("./lib/deflate"),r=t("./lib/inflate"),s=t("./lib/zlib/constants"),o={};i(o,n,r,s),e.exports=o},{"./lib/deflate":1,"./lib/inflate":2,"./lib/utils/common":3,"./lib/zlib/constants":6}]},{},[])("/")});
  793. /**
  794. * @license
  795. * Copyright 2015 Mozilla Foundation
  796. *
  797. * Licensed under the Apache License, Version 2.0 (the "License");
  798. * you may not use this file except in compliance with the License.
  799. * You may obtain a copy of the License at
  800. *
  801. * http://www.apache.org/licenses/LICENSE-2.0
  802. *
  803. * Unless required by applicable law or agreed to in writing, software
  804. * distributed under the License is distributed on an "AS IS" BASIS,
  805. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  806. * See the License for the specific language governing permissions and
  807. * limitations under the License.
  808. */
  809. var PDFJS;
  810. (function(PDFJS) {
  811. "use strict";
  812. var JpegError = (function JpegErrorClosure() {
  813. function JpegError(msg) {
  814. this.message = 'JPEG error: ' + msg;
  815. }
  816. JpegError.prototype = new Error();
  817. JpegError.prototype.name = 'JpegError';
  818. JpegError.constructor = JpegError;
  819. return JpegError;
  820. })();
  821. var JpegImage = (function JpegImageClosure() {
  822. // prettier-ignore
  823. var dctZigZag = new Uint8Array([
  824. 0,
  825. 1, 8,
  826. 16, 9, 2,
  827. 3, 10, 17, 24,
  828. 32, 25, 18, 11, 4,
  829. 5, 12, 19, 26, 33, 40,
  830. 48, 41, 34, 27, 20, 13, 6,
  831. 7, 14, 21, 28, 35, 42, 49, 56,
  832. 57, 50, 43, 36, 29, 22, 15,
  833. 23, 30, 37, 44, 51, 58,
  834. 59, 52, 45, 38, 31,
  835. 39, 46, 53, 60,
  836. 61, 54, 47,
  837. 55, 62,
  838. 63
  839. ]);
  840. var dctCos1 = 4017; // cos(pi/16)
  841. var dctSin1 = 799; // sin(pi/16)
  842. var dctCos3 = 3406; // cos(3*pi/16)
  843. var dctSin3 = 2276; // sin(3*pi/16)
  844. var dctCos6 = 1567; // cos(6*pi/16)
  845. var dctSin6 = 3784; // sin(6*pi/16)
  846. var dctSqrt2 = 5793; // sqrt(2)
  847. var dctSqrt1d2 = 2896; // sqrt(2) / 2
  848. // eslint-disable-next-line no-shadow
  849. function JpegImage({ decodeTransform = null, colorTransform = -1 } = {}) {
  850. this._decodeTransform = decodeTransform;
  851. this._colorTransform = colorTransform;
  852. }
  853. function buildHuffmanTable(codeLengths, values) {
  854. var k = 0,
  855. code = [],
  856. i,
  857. j,
  858. length = 16;
  859. while (length > 0 && !codeLengths[length - 1]) {
  860. length--;
  861. }
  862. code.push({ children: [], index: 0 });
  863. var p = code[0],
  864. q;
  865. for (i = 0; i < length; i++) {
  866. for (j = 0; j < codeLengths[i]; j++) {
  867. p = code.pop();
  868. p.children[p.index] = values[k];
  869. while (p.index > 0) {
  870. p = code.pop();
  871. }
  872. p.index++;
  873. code.push(p);
  874. while (code.length <= i) {
  875. code.push((q = { children: [], index: 0 }));
  876. p.children[p.index] = q.children;
  877. p = q;
  878. }
  879. k++;
  880. }
  881. if (i + 1 < length) {
  882. // p here points to last code
  883. code.push((q = { children: [], index: 0 }));
  884. p.children[p.index] = q.children;
  885. p = q;
  886. }
  887. }
  888. return code[0].children;
  889. }
  890. function getBlockBufferOffset(component, row, col) {
  891. return 64 * ((component.blocksPerLine + 1) * row + col);
  892. }
  893. function decodeScan(
  894. data,
  895. offset,
  896. frame,
  897. components,
  898. resetInterval,
  899. spectralStart,
  900. spectralEnd,
  901. successivePrev,
  902. successive,
  903. parseDNLMarker = false
  904. ) {
  905. var mcusPerLine = frame.mcusPerLine;
  906. var progressive = frame.progressive;
  907. const startOffset = offset;
  908. let bitsData = 0,
  909. bitsCount = 0;
  910. function readBit() {
  911. if (bitsCount > 0) {
  912. bitsCount--;
  913. return (bitsData >> bitsCount) & 1;
  914. }
  915. bitsData = data[offset++];
  916. if (bitsData === 0xff) {
  917. var nextByte = data[offset++];
  918. if (nextByte) {
  919. if (nextByte === /* DNL = */ 0xdc && parseDNLMarker) {
  920. offset += 2; // Skip marker length.
  921. const scanLines = readUint16(data, offset);
  922. offset += 2;
  923. if (scanLines > 0 && scanLines !== frame.scanLines) {
  924. throw new DNLMarkerError(
  925. "Found DNL marker (0xFFDC) while parsing scan data",
  926. scanLines
  927. );
  928. }
  929. } else if (nextByte === /* EOI = */ 0xd9) {
  930. if (parseDNLMarker) {
  931. // NOTE: only 8-bit JPEG images are supported in this decoder.
  932. const maybeScanLines = blockRow * 8;
  933. // Heuristic to attempt to handle corrupt JPEG images with too
  934. // large `scanLines` parameter, by falling back to the currently
  935. // parsed number of scanLines when it's at least one order of
  936. // magnitude smaller than expected (fixes issue10880.pdf).
  937. if (maybeScanLines > 0 && maybeScanLines < frame.scanLines / 10) {
  938. throw new DNLMarkerError(
  939. "Found EOI marker (0xFFD9) while parsing scan data, " +
  940. "possibly caused by incorrect `scanLines` parameter",
  941. maybeScanLines
  942. );
  943. }
  944. }
  945. throw new EOIMarkerError(
  946. "Found EOI marker (0xFFD9) while parsing scan data"
  947. );
  948. }
  949. throw new JpegError(
  950. `unexpected marker ${((bitsData << 8) | nextByte).toString(16)}`
  951. );
  952. }
  953. // unstuff 0
  954. }
  955. bitsCount = 7;
  956. return bitsData >>> 7;
  957. }
  958. function decodeHuffman(tree) {
  959. var node = tree;
  960. while (true) {
  961. node = node[readBit()];
  962. switch (typeof node) {
  963. case "number":
  964. return node;
  965. case "object":
  966. continue;
  967. }
  968. throw new JpegError("invalid huffman sequence");
  969. }
  970. }
  971. function receive(length) {
  972. var n = 0;
  973. while (length > 0) {
  974. n = (n << 1) | readBit();
  975. length--;
  976. }
  977. return n;
  978. }
  979. function receiveAndExtend(length) {
  980. if (length === 1) {
  981. return readBit() === 1 ? 1 : -1;
  982. }
  983. var n = receive(length);
  984. if (n >= 1 << (length - 1)) {
  985. return n;
  986. }
  987. return n + (-1 << length) + 1;
  988. }
  989. function decodeBaseline(component, blockOffset) {
  990. var t = decodeHuffman(component.huffmanTableDC);
  991. var diff = t === 0 ? 0 : receiveAndExtend(t);
  992. component.blockData[blockOffset] = component.pred += diff;
  993. var k = 1;
  994. while (k < 64) {
  995. var rs = decodeHuffman(component.huffmanTableAC);
  996. var s = rs & 15,
  997. r = rs >> 4;
  998. if (s === 0) {
  999. if (r < 15) {
  1000. break;
  1001. }
  1002. k += 16;
  1003. continue;
  1004. }
  1005. k += r;
  1006. var z = dctZigZag[k];
  1007. component.blockData[blockOffset + z] = receiveAndExtend(s);
  1008. k++;
  1009. }
  1010. }
  1011. function decodeDCFirst(component, blockOffset) {
  1012. var t = decodeHuffman(component.huffmanTableDC);
  1013. var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
  1014. component.blockData[blockOffset] = component.pred += diff;
  1015. }
  1016. function decodeDCSuccessive(component, blockOffset) {
  1017. component.blockData[blockOffset] |= readBit() << successive;
  1018. }
  1019. var eobrun = 0;
  1020. function decodeACFirst(component, blockOffset) {
  1021. if (eobrun > 0) {
  1022. eobrun--;
  1023. return;
  1024. }
  1025. var k = spectralStart,
  1026. e = spectralEnd;
  1027. while (k <= e) {
  1028. var rs = decodeHuffman(component.huffmanTableAC);
  1029. var s = rs & 15,
  1030. r = rs >> 4;
  1031. if (s === 0) {
  1032. if (r < 15) {
  1033. eobrun = receive(r) + (1 << r) - 1;
  1034. break;
  1035. }
  1036. k += 16;
  1037. continue;
  1038. }
  1039. k += r;
  1040. var z = dctZigZag[k];
  1041. component.blockData[blockOffset + z] =
  1042. receiveAndExtend(s) * (1 << successive);
  1043. k++;
  1044. }
  1045. }
  1046. var successiveACState = 0,
  1047. successiveACNextValue;
  1048. function decodeACSuccessive(component, blockOffset) {
  1049. var k = spectralStart;
  1050. var e = spectralEnd;
  1051. var r = 0;
  1052. var s;
  1053. var rs;
  1054. while (k <= e) {
  1055. const offsetZ = blockOffset + dctZigZag[k];
  1056. const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
  1057. switch (successiveACState) {
  1058. case 0: // initial state
  1059. rs = decodeHuffman(component.huffmanTableAC);
  1060. s = rs & 15;
  1061. r = rs >> 4;
  1062. if (s === 0) {
  1063. if (r < 15) {
  1064. eobrun = receive(r) + (1 << r);
  1065. successiveACState = 4;
  1066. } else {
  1067. r = 16;
  1068. successiveACState = 1;
  1069. }
  1070. } else {
  1071. if (s !== 1) {
  1072. throw new JpegError("invalid ACn encoding");
  1073. }
  1074. successiveACNextValue = receiveAndExtend(s);
  1075. successiveACState = r ? 2 : 3;
  1076. }
  1077. continue;
  1078. case 1: // skipping r zero items
  1079. case 2:
  1080. if (component.blockData[offsetZ]) {
  1081. component.blockData[offsetZ] += sign * (readBit() << successive);
  1082. } else {
  1083. r--;
  1084. if (r === 0) {
  1085. successiveACState = successiveACState === 2 ? 3 : 0;
  1086. }
  1087. }
  1088. break;
  1089. case 3: // set value for a zero item
  1090. if (component.blockData[offsetZ]) {
  1091. component.blockData[offsetZ] += sign * (readBit() << successive);
  1092. } else {
  1093. component.blockData[offsetZ] =
  1094. successiveACNextValue << successive;
  1095. successiveACState = 0;
  1096. }
  1097. break;
  1098. case 4: // eob
  1099. if (component.blockData[offsetZ]) {
  1100. component.blockData[offsetZ] += sign * (readBit() << successive);
  1101. }
  1102. break;
  1103. }
  1104. k++;
  1105. }
  1106. if (successiveACState === 4) {
  1107. eobrun--;
  1108. if (eobrun === 0) {
  1109. successiveACState = 0;
  1110. }
  1111. }
  1112. }
  1113. let blockRow = 0;
  1114. function decodeMcu(component, decode, mcu, row, col) {
  1115. var mcuRow = (mcu / mcusPerLine) | 0;
  1116. var mcuCol = mcu % mcusPerLine;
  1117. blockRow = mcuRow * component.v + row;
  1118. var blockCol = mcuCol * component.h + col;
  1119. const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
  1120. decode(component, blockOffset);
  1121. }
  1122. function decodeBlock(component, decode, mcu) {
  1123. blockRow = (mcu / component.blocksPerLine) | 0;
  1124. var blockCol = mcu % component.blocksPerLine;
  1125. const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
  1126. decode(component, blockOffset);
  1127. }
  1128. var componentsLength = components.length;
  1129. var component, i, j, k, n;
  1130. var decodeFn;
  1131. if (progressive) {
  1132. if (spectralStart === 0) {
  1133. decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
  1134. } else {
  1135. decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
  1136. }
  1137. } else {
  1138. decodeFn = decodeBaseline;
  1139. }
  1140. var mcu = 0,
  1141. fileMarker;
  1142. var mcuExpected;
  1143. if (componentsLength === 1) {
  1144. mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
  1145. } else {
  1146. mcuExpected = mcusPerLine * frame.mcusPerColumn;
  1147. }
  1148. var h, v;
  1149. while (mcu <= mcuExpected) {
  1150. // reset interval stuff
  1151. var mcuToRead = resetInterval
  1152. ? Math.min(mcuExpected - mcu, resetInterval)
  1153. : mcuExpected;
  1154. // The `mcuToRead === 0` case should only occur when all of the expected
  1155. // MCU data has been already parsed, i.e. when `mcu === mcuExpected`, but
  1156. // some corrupt JPEG images contain more data than intended and we thus
  1157. // want to skip over any extra RSTx markers below (fixes issue11794.pdf).
  1158. if (mcuToRead > 0) {
  1159. for (i = 0; i < componentsLength; i++) {
  1160. components[i].pred = 0;
  1161. }
  1162. eobrun = 0;
  1163. if (componentsLength === 1) {
  1164. component = components[0];
  1165. for (n = 0; n < mcuToRead; n++) {
  1166. decodeBlock(component, decodeFn, mcu);
  1167. mcu++;
  1168. }
  1169. } else {
  1170. for (n = 0; n < mcuToRead; n++) {
  1171. for (i = 0; i < componentsLength; i++) {
  1172. component = components[i];
  1173. h = component.h;
  1174. v = component.v;
  1175. for (j = 0; j < v; j++) {
  1176. for (k = 0; k < h; k++) {
  1177. decodeMcu(component, decodeFn, mcu, j, k);
  1178. }
  1179. }
  1180. }
  1181. mcu++;
  1182. }
  1183. }
  1184. }
  1185. // find marker
  1186. bitsCount = 0;
  1187. fileMarker = findNextFileMarker(data, offset);
  1188. if (!fileMarker) {
  1189. break; // Reached the end of the image data without finding any marker.
  1190. }
  1191. if (fileMarker.invalid) {
  1192. // Some bad images seem to pad Scan blocks with e.g. zero bytes, skip
  1193. // past those to attempt to find a valid marker (fixes issue4090.pdf).
  1194. const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive";
  1195. warn(
  1196. `decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`
  1197. );
  1198. offset = fileMarker.offset;
  1199. }
  1200. if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {
  1201. // RSTx
  1202. offset += 2;
  1203. } else {
  1204. break;
  1205. }
  1206. }
  1207. return offset - startOffset;
  1208. }
  1209. // A port of poppler's IDCT method which in turn is taken from:
  1210. // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,
  1211. // 'Practical Fast 1-D DCT Algorithms with 11 Multiplications',
  1212. // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,
  1213. // 988-991.
  1214. function quantizeAndInverse(component, blockBufferOffset, p) {
  1215. var qt = component.quantizationTable,
  1216. blockData = component.blockData;
  1217. var v0, v1, v2, v3, v4, v5, v6, v7;
  1218. var p0, p1, p2, p3, p4, p5, p6, p7;
  1219. var t;
  1220. if (!qt) {
  1221. throw new JpegError("missing required Quantization Table.");
  1222. }
  1223. // inverse DCT on rows
  1224. for (var row = 0; row < 64; row += 8) {
  1225. // gather block data
  1226. p0 = blockData[blockBufferOffset + row];
  1227. p1 = blockData[blockBufferOffset + row + 1];
  1228. p2 = blockData[blockBufferOffset + row + 2];
  1229. p3 = blockData[blockBufferOffset + row + 3];
  1230. p4 = blockData[blockBufferOffset + row + 4];
  1231. p5 = blockData[blockBufferOffset + row + 5];
  1232. p6 = blockData[blockBufferOffset + row + 6];
  1233. p7 = blockData[blockBufferOffset + row + 7];
  1234. // dequant p0
  1235. p0 *= qt[row];
  1236. // check for all-zero AC coefficients
  1237. if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
  1238. t = (dctSqrt2 * p0 + 512) >> 10;
  1239. p[row] = t;
  1240. p[row + 1] = t;
  1241. p[row + 2] = t;
  1242. p[row + 3] = t;
  1243. p[row + 4] = t;
  1244. p[row + 5] = t;
  1245. p[row + 6] = t;
  1246. p[row + 7] = t;
  1247. continue;
  1248. }
  1249. // dequant p1 ... p7
  1250. p1 *= qt[row + 1];
  1251. p2 *= qt[row + 2];
  1252. p3 *= qt[row + 3];
  1253. p4 *= qt[row + 4];
  1254. p5 *= qt[row + 5];
  1255. p6 *= qt[row + 6];
  1256. p7 *= qt[row + 7];
  1257. // stage 4
  1258. v0 = (dctSqrt2 * p0 + 128) >> 8;
  1259. v1 = (dctSqrt2 * p4 + 128) >> 8;
  1260. v2 = p2;
  1261. v3 = p6;
  1262. v4 = (dctSqrt1d2 * (p1 - p7) + 128) >> 8;
  1263. v7 = (dctSqrt1d2 * (p1 + p7) + 128) >> 8;
  1264. v5 = p3 << 4;
  1265. v6 = p5 << 4;
  1266. // stage 3
  1267. v0 = (v0 + v1 + 1) >> 1;
  1268. v1 = v0 - v1;
  1269. t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;
  1270. v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;
  1271. v3 = t;
  1272. v4 = (v4 + v6 + 1) >> 1;
  1273. v6 = v4 - v6;
  1274. v7 = (v7 + v5 + 1) >> 1;
  1275. v5 = v7 - v5;
  1276. // stage 2
  1277. v0 = (v0 + v3 + 1) >> 1;
  1278. v3 = v0 - v3;
  1279. v1 = (v1 + v2 + 1) >> 1;
  1280. v2 = v1 - v2;
  1281. t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;
  1282. v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;
  1283. v7 = t;
  1284. t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;
  1285. v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;
  1286. v6 = t;
  1287. // stage 1
  1288. p[row] = v0 + v7;
  1289. p[row + 7] = v0 - v7;
  1290. p[row + 1] = v1 + v6;
  1291. p[row + 6] = v1 - v6;
  1292. p[row + 2] = v2 + v5;
  1293. p[row + 5] = v2 - v5;
  1294. p[row + 3] = v3 + v4;
  1295. p[row + 4] = v3 - v4;
  1296. }
  1297. // inverse DCT on columns
  1298. for (var col = 0; col < 8; ++col) {
  1299. p0 = p[col];
  1300. p1 = p[col + 8];
  1301. p2 = p[col + 16];
  1302. p3 = p[col + 24];
  1303. p4 = p[col + 32];
  1304. p5 = p[col + 40];
  1305. p6 = p[col + 48];
  1306. p7 = p[col + 56];
  1307. // check for all-zero AC coefficients
  1308. if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
  1309. t = (dctSqrt2 * p0 + 8192) >> 14;
  1310. // Convert to 8-bit.
  1311. if (t < -2040) {
  1312. t = 0;
  1313. } else if (t >= 2024) {
  1314. t = 255;
  1315. } else {
  1316. t = (t + 2056) >> 4;
  1317. }
  1318. blockData[blockBufferOffset + col] = t;
  1319. blockData[blockBufferOffset + col + 8] = t;
  1320. blockData[blockBufferOffset + col + 16] = t;
  1321. blockData[blockBufferOffset + col + 24] = t;
  1322. blockData[blockBufferOffset + col + 32] = t;
  1323. blockData[blockBufferOffset + col + 40] = t;
  1324. blockData[blockBufferOffset + col + 48] = t;
  1325. blockData[blockBufferOffset + col + 56] = t;
  1326. continue;
  1327. }
  1328. // stage 4
  1329. v0 = (dctSqrt2 * p0 + 2048) >> 12;
  1330. v1 = (dctSqrt2 * p4 + 2048) >> 12;
  1331. v2 = p2;
  1332. v3 = p6;
  1333. v4 = (dctSqrt1d2 * (p1 - p7) + 2048) >> 12;
  1334. v7 = (dctSqrt1d2 * (p1 + p7) + 2048) >> 12;
  1335. v5 = p3;
  1336. v6 = p5;
  1337. // stage 3
  1338. // Shift v0 by 128.5 << 5 here, so we don't need to shift p0...p7 when
  1339. // converting to UInt8 range later.
  1340. v0 = ((v0 + v1 + 1) >> 1) + 4112;
  1341. v1 = v0 - v1;
  1342. t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;
  1343. v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;
  1344. v3 = t;
  1345. v4 = (v4 + v6 + 1) >> 1;
  1346. v6 = v4 - v6;
  1347. v7 = (v7 + v5 + 1) >> 1;
  1348. v5 = v7 - v5;
  1349. // stage 2
  1350. v0 = (v0 + v3 + 1) >> 1;
  1351. v3 = v0 - v3;
  1352. v1 = (v1 + v2 + 1) >> 1;
  1353. v2 = v1 - v2;
  1354. t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;
  1355. v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;
  1356. v7 = t;
  1357. t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;
  1358. v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;
  1359. v6 = t;
  1360. // stage 1
  1361. p0 = v0 + v7;
  1362. p7 = v0 - v7;
  1363. p1 = v1 + v6;
  1364. p6 = v1 - v6;
  1365. p2 = v2 + v5;
  1366. p5 = v2 - v5;
  1367. p3 = v3 + v4;
  1368. p4 = v3 - v4;
  1369. // Convert to 8-bit integers.
  1370. if (p0 < 16) {
  1371. p0 = 0;
  1372. } else if (p0 >= 4080) {
  1373. p0 = 255;
  1374. } else {
  1375. p0 >>= 4;
  1376. }
  1377. if (p1 < 16) {
  1378. p1 = 0;
  1379. } else if (p1 >= 4080) {
  1380. p1 = 255;
  1381. } else {
  1382. p1 >>= 4;
  1383. }
  1384. if (p2 < 16) {
  1385. p2 = 0;
  1386. } else if (p2 >= 4080) {
  1387. p2 = 255;
  1388. } else {
  1389. p2 >>= 4;
  1390. }
  1391. if (p3 < 16) {
  1392. p3 = 0;
  1393. } else if (p3 >= 4080) {
  1394. p3 = 255;
  1395. } else {
  1396. p3 >>= 4;
  1397. }
  1398. if (p4 < 16) {
  1399. p4 = 0;
  1400. } else if (p4 >= 4080) {
  1401. p4 = 255;
  1402. } else {
  1403. p4 >>= 4;
  1404. }
  1405. if (p5 < 16) {
  1406. p5 = 0;
  1407. } else if (p5 >= 4080) {
  1408. p5 = 255;
  1409. } else {
  1410. p5 >>= 4;
  1411. }
  1412. if (p6 < 16) {
  1413. p6 = 0;
  1414. } else if (p6 >= 4080) {
  1415. p6 = 255;
  1416. } else {
  1417. p6 >>= 4;
  1418. }
  1419. if (p7 < 16) {
  1420. p7 = 0;
  1421. } else if (p7 >= 4080) {
  1422. p7 = 255;
  1423. } else {
  1424. p7 >>= 4;
  1425. }
  1426. // store block data
  1427. blockData[blockBufferOffset + col] = p0;
  1428. blockData[blockBufferOffset + col + 8] = p1;
  1429. blockData[blockBufferOffset + col + 16] = p2;
  1430. blockData[blockBufferOffset + col + 24] = p3;
  1431. blockData[blockBufferOffset + col + 32] = p4;
  1432. blockData[blockBufferOffset + col + 40] = p5;
  1433. blockData[blockBufferOffset + col + 48] = p6;
  1434. blockData[blockBufferOffset + col + 56] = p7;
  1435. }
  1436. }
  1437. function buildComponentData(frame, component) {
  1438. var blocksPerLine = component.blocksPerLine;
  1439. var blocksPerColumn = component.blocksPerColumn;
  1440. var computationBuffer = new Int16Array(64);
  1441. for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
  1442. for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {
  1443. var offset = getBlockBufferOffset(component, blockRow, blockCol);
  1444. quantizeAndInverse(component, offset, computationBuffer);
  1445. }
  1446. }
  1447. return component.blockData;
  1448. }
  1449. function findNextFileMarker(data, currentPos, startPos = currentPos) {
  1450. const maxPos = data.length - 1;
  1451. var newPos = startPos < currentPos ? startPos : currentPos;
  1452. if (currentPos >= maxPos) {
  1453. return null; // Don't attempt to read non-existent data and just return.
  1454. }
  1455. var currentMarker = readUint16(data, currentPos);
  1456. if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {
  1457. return {
  1458. invalid: null,
  1459. marker: currentMarker,
  1460. offset: currentPos,
  1461. };
  1462. }
  1463. var newMarker = readUint16(data, newPos);
  1464. while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {
  1465. if (++newPos >= maxPos) {
  1466. return null; // Don't attempt to read non-existent data and just return.
  1467. }
  1468. newMarker = readUint16(data, newPos);
  1469. }
  1470. return {
  1471. invalid: currentMarker.toString(16),
  1472. marker: newMarker,
  1473. offset: newPos,
  1474. };
  1475. }
  1476. JpegImage.prototype = {
  1477. parse(data, { dnlScanLines = null } = {}) {
  1478. function readDataBlock() {
  1479. const length = readUint16(data, offset);
  1480. offset += 2;
  1481. let endOffset = offset + length - 2;
  1482. var fileMarker = findNextFileMarker(data, endOffset, offset);
  1483. if (fileMarker && fileMarker.invalid) {
  1484. warn(
  1485. "readDataBlock - incorrect length, current marker is: " +
  1486. fileMarker.invalid
  1487. );
  1488. endOffset = fileMarker.offset;
  1489. }
  1490. var array = data.subarray(offset, endOffset);
  1491. offset += array.length;
  1492. return array;
  1493. }
  1494. function prepareComponents(frame) {
  1495. var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);
  1496. var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);
  1497. for (var i = 0; i < frame.components.length; i++) {
  1498. component = frame.components[i];
  1499. var blocksPerLine = Math.ceil(
  1500. (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH
  1501. );
  1502. var blocksPerColumn = Math.ceil(
  1503. (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV
  1504. );
  1505. var blocksPerLineForMcu = mcusPerLine * component.h;
  1506. var blocksPerColumnForMcu = mcusPerColumn * component.v;
  1507. var blocksBufferSize =
  1508. 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);
  1509. component.blockData = new Int16Array(blocksBufferSize);
  1510. component.blocksPerLine = blocksPerLine;
  1511. component.blocksPerColumn = blocksPerColumn;
  1512. }
  1513. frame.mcusPerLine = mcusPerLine;
  1514. frame.mcusPerColumn = mcusPerColumn;
  1515. }
  1516. var offset = 0;
  1517. var jfif = null;
  1518. var adobe = null;
  1519. var frame, resetInterval;
  1520. let numSOSMarkers = 0;
  1521. var quantizationTables = [];
  1522. var huffmanTablesAC = [],
  1523. huffmanTablesDC = [];
  1524. let fileMarker = readUint16(data, offset);
  1525. offset += 2;
  1526. if (fileMarker !== /* SOI (Start of Image) = */ 0xffd8) {
  1527. throw new JpegError("SOI not found");
  1528. }
  1529. fileMarker = readUint16(data, offset);
  1530. offset += 2;
  1531. markerLoop: while (fileMarker !== /* EOI (End of Image) = */ 0xffd9) {
  1532. var i, j, l;
  1533. switch (fileMarker) {
  1534. case 0xffe0: // APP0 (Application Specific)
  1535. case 0xffe1: // APP1
  1536. case 0xffe2: // APP2
  1537. case 0xffe3: // APP3
  1538. case 0xffe4: // APP4
  1539. case 0xffe5: // APP5
  1540. case 0xffe6: // APP6
  1541. case 0xffe7: // APP7
  1542. case 0xffe8: // APP8
  1543. case 0xffe9: // APP9
  1544. case 0xffea: // APP10
  1545. case 0xffeb: // APP11
  1546. case 0xffec: // APP12
  1547. case 0xffed: // APP13
  1548. case 0xffee: // APP14
  1549. case 0xffef: // APP15
  1550. case 0xfffe: // COM (Comment)
  1551. var appData = readDataBlock();
  1552. if (fileMarker === 0xffe0) {
  1553. // 'JFIF\x00'
  1554. if (
  1555. appData[0] === 0x4a &&
  1556. appData[1] === 0x46 &&
  1557. appData[2] === 0x49 &&
  1558. appData[3] === 0x46 &&
  1559. appData[4] === 0
  1560. ) {
  1561. jfif = {
  1562. version: { major: appData[5], minor: appData[6] },
  1563. densityUnits: appData[7],
  1564. xDensity: (appData[8] << 8) | appData[9],
  1565. yDensity: (appData[10] << 8) | appData[11],
  1566. thumbWidth: appData[12],
  1567. thumbHeight: appData[13],
  1568. thumbData: appData.subarray(
  1569. 14,
  1570. 14 + 3 * appData[12] * appData[13]
  1571. ),
  1572. };
  1573. }
  1574. }
  1575. // TODO APP1 - Exif
  1576. if (fileMarker === 0xffee) {
  1577. // 'Adobe'
  1578. if (
  1579. appData[0] === 0x41 &&
  1580. appData[1] === 0x64 &&
  1581. appData[2] === 0x6f &&
  1582. appData[3] === 0x62 &&
  1583. appData[4] === 0x65
  1584. ) {
  1585. adobe = {
  1586. version: (appData[5] << 8) | appData[6],
  1587. flags0: (appData[7] << 8) | appData[8],
  1588. flags1: (appData[9] << 8) | appData[10],
  1589. transformCode: appData[11],
  1590. };
  1591. }
  1592. }
  1593. break;
  1594. case 0xffdb: // DQT (Define Quantization Tables)
  1595. const quantizationTablesLength = readUint16(data, offset);
  1596. offset += 2;
  1597. var quantizationTablesEnd = quantizationTablesLength + offset - 2;
  1598. var z;
  1599. while (offset < quantizationTablesEnd) {
  1600. var quantizationTableSpec = data[offset++];
  1601. var tableData = new Uint16Array(64);
  1602. if (quantizationTableSpec >> 4 === 0) {
  1603. // 8 bit values
  1604. for (j = 0; j < 64; j++) {
  1605. z = dctZigZag[j];
  1606. tableData[z] = data[offset++];
  1607. }
  1608. } else if (quantizationTableSpec >> 4 === 1) {
  1609. // 16 bit values
  1610. for (j = 0; j < 64; j++) {
  1611. z = dctZigZag[j];
  1612. tableData[z] = readUint16(data, offset);
  1613. offset += 2;
  1614. }
  1615. } else {
  1616. throw new JpegError("DQT - invalid table spec");
  1617. }
  1618. quantizationTables[quantizationTableSpec & 15] = tableData;
  1619. }
  1620. break;
  1621. case 0xffc0: // SOF0 (Start of Frame, Baseline DCT)
  1622. case 0xffc1: // SOF1 (Start of Frame, Extended DCT)
  1623. case 0xffc2: // SOF2 (Start of Frame, Progressive DCT)
  1624. if (frame) {
  1625. throw new JpegError("Only single frame JPEGs supported");
  1626. }
  1627. offset += 2; // Skip marker length.
  1628. frame = {};
  1629. frame.extended = fileMarker === 0xffc1;
  1630. frame.progressive = fileMarker === 0xffc2;
  1631. frame.precision = data[offset++];
  1632. const sofScanLines = readUint16(data, offset);
  1633. offset += 2;
  1634. frame.scanLines = dnlScanLines || sofScanLines;
  1635. frame.samplesPerLine = readUint16(data, offset);
  1636. offset += 2;
  1637. frame.components = [];
  1638. frame.componentIds = {};
  1639. var componentsCount = data[offset++],
  1640. componentId;
  1641. var maxH = 0,
  1642. maxV = 0;
  1643. for (i = 0; i < componentsCount; i++) {
  1644. componentId = data[offset];
  1645. var h = data[offset + 1] >> 4;
  1646. var v = data[offset + 1] & 15;
  1647. if (maxH < h) {
  1648. maxH = h;
  1649. }
  1650. if (maxV < v) {
  1651. maxV = v;
  1652. }
  1653. var qId = data[offset + 2];
  1654. l = frame.components.push({
  1655. h,
  1656. v,
  1657. quantizationId: qId,
  1658. quantizationTable: null, // See comment below.
  1659. });
  1660. frame.componentIds[componentId] = l - 1;
  1661. offset += 3;
  1662. }
  1663. frame.maxH = maxH;
  1664. frame.maxV = maxV;
  1665. prepareComponents(frame);
  1666. break;
  1667. case 0xffc4: // DHT (Define Huffman Tables)
  1668. const huffmanLength = readUint16(data, offset);
  1669. offset += 2;
  1670. for (i = 2; i < huffmanLength; ) {
  1671. var huffmanTableSpec = data[offset++];
  1672. var codeLengths = new Uint8Array(16);
  1673. var codeLengthSum = 0;
  1674. for (j = 0; j < 16; j++, offset++) {
  1675. codeLengthSum += codeLengths[j] = data[offset];
  1676. }
  1677. var huffmanValues = new Uint8Array(codeLengthSum);
  1678. for (j = 0; j < codeLengthSum; j++, offset++) {
  1679. huffmanValues[j] = data[offset];
  1680. }
  1681. i += 17 + codeLengthSum;
  1682. (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[
  1683. huffmanTableSpec & 15
  1684. ] = buildHuffmanTable(codeLengths, huffmanValues);
  1685. }
  1686. break;
  1687. case 0xffdd: // DRI (Define Restart Interval)
  1688. offset += 2; // Skip marker length.
  1689. resetInterval = readUint16(data, offset);
  1690. offset += 2;
  1691. break;
  1692. case 0xffda: // SOS (Start of Scan)
  1693. // A DNL marker (0xFFDC), if it exists, is only allowed at the end
  1694. // of the first scan segment and may only occur once in an image.
  1695. // Furthermore, to prevent an infinite loop, do *not* attempt to
  1696. // parse DNL markers during re-parsing of the JPEG scan data.
  1697. const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
  1698. offset += 2; // Skip marker length.
  1699. var selectorsCount = data[offset++];
  1700. var components = [],
  1701. component;
  1702. for (i = 0; i < selectorsCount; i++) {
  1703. const index = data[offset++];
  1704. var componentIndex = frame.componentIds[index];
  1705. component = frame.components[componentIndex];
  1706. component.index = index;
  1707. var tableSpec = data[offset++];
  1708. component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
  1709. component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
  1710. components.push(component);
  1711. }
  1712. var spectralStart = data[offset++];
  1713. var spectralEnd = data[offset++];
  1714. var successiveApproximation = data[offset++];
  1715. try {
  1716. var processed = decodeScan(
  1717. data,
  1718. offset,
  1719. frame,
  1720. components,
  1721. resetInterval,
  1722. spectralStart,
  1723. spectralEnd,
  1724. successiveApproximation >> 4,
  1725. successiveApproximation & 15,
  1726. parseDNLMarker
  1727. );
  1728. offset += processed;
  1729. } catch (ex) {
  1730. if (ex instanceof DNLMarkerError) {
  1731. warn(`${ex.message} -- attempting to re-parse the JPEG image.`);
  1732. return this.parse(data, { dnlScanLines: ex.scanLines });
  1733. } else if (ex instanceof EOIMarkerError) {
  1734. warn(`${ex.message} -- ignoring the rest of the image data.`);
  1735. break markerLoop;
  1736. }
  1737. throw ex;
  1738. }
  1739. break;
  1740. case 0xffdc: // DNL (Define Number of Lines)
  1741. // Ignore the marker, since it's being handled in `decodeScan`.
  1742. offset += 4;
  1743. break;
  1744. case 0xffff: // Fill bytes
  1745. if (data[offset] !== 0xff) {
  1746. // Avoid skipping a valid marker.
  1747. offset--;
  1748. }
  1749. break;
  1750. default:
  1751. // Could be incorrect encoding -- the last 0xFF byte of the previous
  1752. // block could have been eaten by the encoder, hence we fallback to
  1753. // `startPos = offset - 3` when looking for the next valid marker.
  1754. const nextFileMarker = findNextFileMarker(
  1755. data,
  1756. /* currentPos = */ offset - 2,
  1757. /* startPos = */ offset - 3
  1758. );
  1759. if (nextFileMarker && nextFileMarker.invalid) {
  1760. warn(
  1761. "JpegImage.parse - unexpected data, current marker is: " +
  1762. nextFileMarker.invalid
  1763. );
  1764. offset = nextFileMarker.offset;
  1765. break;
  1766. }
  1767. if (offset >= data.length - 1) {
  1768. warn(
  1769. "JpegImage.parse - reached the end of the image data " +
  1770. "without finding an EOI marker (0xFFD9)."
  1771. );
  1772. break markerLoop;
  1773. }
  1774. throw new JpegError(
  1775. "JpegImage.parse - unknown marker: " + fileMarker.toString(16)
  1776. );
  1777. }
  1778. fileMarker = readUint16(data, offset);
  1779. offset += 2;
  1780. }
  1781. this.width = frame.samplesPerLine;
  1782. this.height = frame.scanLines;
  1783. this.jfif = jfif;
  1784. this.adobe = adobe;
  1785. this.components = [];
  1786. for (i = 0; i < frame.components.length; i++) {
  1787. component = frame.components[i];
  1788. // Prevent errors when DQT markers are placed after SOF{n} markers,
  1789. // by assigning the `quantizationTable` entry after the entire image
  1790. // has been parsed (fixes issue7406.pdf).
  1791. var quantizationTable = quantizationTables[component.quantizationId];
  1792. if (quantizationTable) {
  1793. component.quantizationTable = quantizationTable;
  1794. }
  1795. this.components.push({
  1796. index: component.index,
  1797. output: buildComponentData(frame, component),
  1798. scaleX: component.h / frame.maxH,
  1799. scaleY: component.v / frame.maxV,
  1800. blocksPerLine: component.blocksPerLine,
  1801. blocksPerColumn: component.blocksPerColumn,
  1802. });
  1803. }
  1804. this.numComponents = this.components.length;
  1805. return undefined;
  1806. },
  1807. _getLinearizedBlockData(width, height, isSourcePDF = false) {
  1808. var scaleX = this.width / width,
  1809. scaleY = this.height / height;
  1810. var component, componentScaleX, componentScaleY, blocksPerScanline;
  1811. var x, y, i, j, k;
  1812. var index;
  1813. var offset = 0;
  1814. var output;
  1815. var numComponents = this.components.length;
  1816. var dataLength = width * height * numComponents;
  1817. var data = new Uint8ClampedArray(dataLength);
  1818. var xScaleBlockOffset = new Uint32Array(width);
  1819. var mask3LSB = 0xfffffff8; // used to clear the 3 LSBs
  1820. let lastComponentScaleX;
  1821. for (i = 0; i < numComponents; i++) {
  1822. component = this.components[i];
  1823. componentScaleX = component.scaleX * scaleX;
  1824. componentScaleY = component.scaleY * scaleY;
  1825. offset = i;
  1826. output = component.output;
  1827. blocksPerScanline = (component.blocksPerLine + 1) << 3;
  1828. // Precalculate the `xScaleBlockOffset`. Since it doesn't depend on the
  1829. // component data, that's only necessary when `componentScaleX` changes.
  1830. if (componentScaleX !== lastComponentScaleX) {
  1831. for (x = 0; x < width; x++) {
  1832. j = 0 | (x * componentScaleX);
  1833. xScaleBlockOffset[x] = ((j & mask3LSB) << 3) | (j & 7);
  1834. }
  1835. lastComponentScaleX = componentScaleX;
  1836. }
  1837. // linearize the blocks of the component
  1838. for (y = 0; y < height; y++) {
  1839. j = 0 | (y * componentScaleY);
  1840. index = (blocksPerScanline * (j & mask3LSB)) | ((j & 7) << 3);
  1841. for (x = 0; x < width; x++) {
  1842. data[offset] = output[index + xScaleBlockOffset[x]];
  1843. offset += numComponents;
  1844. }
  1845. }
  1846. }
  1847. // decodeTransform contains pairs of multiplier (-256..256) and additive
  1848. let transform = this._decodeTransform;
  1849. // In PDF files, JPEG images with CMYK colour spaces are usually inverted
  1850. // (this can be observed by extracting the raw image data).
  1851. // Since the conversion algorithms (see below) were written primarily for
  1852. // the PDF use-cases, attempting to use `JpegImage` to parse standalone
  1853. // JPEG (CMYK) images may thus result in inverted images (see issue 9513).
  1854. //
  1855. // Unfortunately it's not (always) possible to tell, from the image data
  1856. // alone, if it needs to be inverted. Thus in an attempt to provide better
  1857. // out-of-box behaviour when `JpegImage` is used standalone, default to
  1858. // inverting JPEG (CMYK) images if and only if the image data does *not*
  1859. // come from a PDF file and no `decodeTransform` was passed by the user.
  1860. if (!isSourcePDF && numComponents === 4 && !transform) {
  1861. // prettier-ignore
  1862. transform = new Int32Array([
  1863. -256, 255, -256, 255, -256, 255, -256, 255]);
  1864. }
  1865. if (transform) {
  1866. for (i = 0; i < dataLength; ) {
  1867. for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
  1868. data[i] = ((data[i] * transform[k]) >> 8) + transform[k + 1];
  1869. }
  1870. }
  1871. }
  1872. return data;
  1873. },
  1874. get _isColorConversionNeeded() {
  1875. if (this.adobe) {
  1876. // The adobe transform marker overrides any previous setting.
  1877. return !!this.adobe.transformCode;
  1878. }
  1879. if (this.numComponents === 3) {
  1880. if (this._colorTransform === 0) {
  1881. // If the Adobe transform marker is not present and the image
  1882. // dictionary has a 'ColorTransform' entry, explicitly set to `0`,
  1883. // then the colours should *not* be transformed.
  1884. return false;
  1885. } else if (
  1886. this.components[0].index === /* "R" = */ 0x52 &&
  1887. this.components[1].index === /* "G" = */ 0x47 &&
  1888. this.components[2].index === /* "B" = */ 0x42
  1889. ) {
  1890. // If the three components are indexed as RGB in ASCII
  1891. // then the colours should *not* be transformed.
  1892. return false;
  1893. }
  1894. return true;
  1895. }
  1896. // `this.numComponents !== 3`
  1897. if (this._colorTransform === 1) {
  1898. // If the Adobe transform marker is not present and the image
  1899. // dictionary has a 'ColorTransform' entry, explicitly set to `1`,
  1900. // then the colours should be transformed.
  1901. return true;
  1902. }
  1903. return false;
  1904. },
  1905. _convertYccToRgb: function convertYccToRgb(data) {
  1906. var Y, Cb, Cr;
  1907. for (var i = 0, length = data.length; i < length; i += 3) {
  1908. Y = data[i];
  1909. Cb = data[i + 1];
  1910. Cr = data[i + 2];
  1911. data[i] = Y - 179.456 + 1.402 * Cr;
  1912. data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;
  1913. data[i + 2] = Y - 226.816 + 1.772 * Cb;
  1914. }
  1915. return data;
  1916. },
  1917. _convertYcckToRgb: function convertYcckToRgb(data) {
  1918. var Y, Cb, Cr, k;
  1919. var offset = 0;
  1920. for (var i = 0, length = data.length; i < length; i += 4) {
  1921. Y = data[i];
  1922. Cb = data[i + 1];
  1923. Cr = data[i + 2];
  1924. k = data[i + 3];
  1925. data[offset++] =
  1926. -122.67195406894 +
  1927. Cb *
  1928. (-6.60635669420364e-5 * Cb +
  1929. 0.000437130475926232 * Cr -
  1930. 5.4080610064599e-5 * Y +
  1931. 0.00048449797120281 * k -
  1932. 0.154362151871126) +
  1933. Cr *
  1934. (-0.000957964378445773 * Cr +
  1935. 0.000817076911346625 * Y -
  1936. 0.00477271405408747 * k +
  1937. 1.53380253221734) +
  1938. Y *
  1939. (0.000961250184130688 * Y -
  1940. 0.00266257332283933 * k +
  1941. 0.48357088451265) +
  1942. k * (-0.000336197177618394 * k + 0.484791561490776);
  1943. data[offset++] =
  1944. 107.268039397724 +
  1945. Cb *
  1946. (2.19927104525741e-5 * Cb -
  1947. 0.000640992018297945 * Cr +
  1948. 0.000659397001245577 * Y +
  1949. 0.000426105652938837 * k -
  1950. 0.176491792462875) +
  1951. Cr *
  1952. (-0.000778269941513683 * Cr +
  1953. 0.00130872261408275 * Y +
  1954. 0.000770482631801132 * k -
  1955. 0.151051492775562) +
  1956. Y *
  1957. (0.00126935368114843 * Y -
  1958. 0.00265090189010898 * k +
  1959. 0.25802910206845) +
  1960. k * (-0.000318913117588328 * k - 0.213742400323665);
  1961. data[offset++] =
  1962. -20.810012546947 +
  1963. Cb *
  1964. (-0.000570115196973677 * Cb -
  1965. 2.63409051004589e-5 * Cr +
  1966. 0.0020741088115012 * Y -
  1967. 0.00288260236853442 * k +
  1968. 0.814272968359295) +
  1969. Cr *
  1970. (-1.53496057440975e-5 * Cr -
  1971. 0.000132689043961446 * Y +
  1972. 0.000560833691242812 * k -
  1973. 0.195152027534049) +
  1974. Y *
  1975. (0.00174418132927582 * Y -
  1976. 0.00255243321439347 * k +
  1977. 0.116935020465145) +
  1978. k * (-0.000343531996510555 * k + 0.24165260232407);
  1979. }
  1980. // Ensure that only the converted RGB data is returned.
  1981. return data.subarray(0, offset);
  1982. },
  1983. _convertYcckToCmyk: function convertYcckToCmyk(data) {
  1984. var Y, Cb, Cr;
  1985. for (var i = 0, length = data.length; i < length; i += 4) {
  1986. Y = data[i];
  1987. Cb = data[i + 1];
  1988. Cr = data[i + 2];
  1989. data[i] = 434.456 - Y - 1.402 * Cr;
  1990. data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;
  1991. data[i + 2] = 481.816 - Y - 1.772 * Cb;
  1992. // K in data[i + 3] is unchanged
  1993. }
  1994. return data;
  1995. },
  1996. _convertCmykToRgb: function convertCmykToRgb(data) {
  1997. var c, m, y, k;
  1998. var offset = 0;
  1999. for (var i = 0, length = data.length; i < length; i += 4) {
  2000. c = data[i];
  2001. m = data[i + 1];
  2002. y = data[i + 2];
  2003. k = data[i + 3];
  2004. data[offset++] =
  2005. 255 +
  2006. c *
  2007. (-0.00006747147073602441 * c +
  2008. 0.0008379262121013727 * m +
  2009. 0.0002894718188643294 * y +
  2010. 0.003264231057537806 * k -
  2011. 1.1185611867203937) +
  2012. m *
  2013. (0.000026374107616089405 * m -
  2014. 0.00008626949158638572 * y -
  2015. 0.0002748769067499491 * k -
  2016. 0.02155688794978967) +
  2017. y *
  2018. (-0.00003878099212869363 * y -
  2019. 0.0003267808279485286 * k +
  2020. 0.0686742238595345) -
  2021. k * (0.0003361971776183937 * k + 0.7430659151342254);
  2022. data[offset++] =
  2023. 255 +
  2024. c *
  2025. (0.00013596372813588848 * c +
  2026. 0.000924537132573585 * m +
  2027. 0.00010567359618683593 * y +
  2028. 0.0004791864687436512 * k -
  2029. 0.3109689587515875) +
  2030. m *
  2031. (-0.00023545346108370344 * m +
  2032. 0.0002702845253534714 * y +
  2033. 0.0020200308977307156 * k -
  2034. 0.7488052167015494) +
  2035. y *
  2036. (0.00006834815998235662 * y +
  2037. 0.00015168452363460973 * k -
  2038. 0.09751927774728933) -
  2039. k * (0.00031891311758832814 * k + 0.7364883807733168);
  2040. data[offset++] =
  2041. 255 +
  2042. c *
  2043. (0.000013598650411385307 * c +
  2044. 0.00012423956175490851 * m +
  2045. 0.0004751985097583589 * y -
  2046. 0.0000036729317476630422 * k -
  2047. 0.05562186980264034) +
  2048. m *
  2049. (0.00016141380598724676 * m +
  2050. 0.0009692239130725186 * y +
  2051. 0.0007782692450036253 * k -
  2052. 0.44015232367526463) +
  2053. y *
  2054. (5.068882914068769e-7 * y +
  2055. 0.0017778369011375071 * k -
  2056. 0.7591454649749609) -
  2057. k * (0.0003435319965105553 * k + 0.7063770186160144);
  2058. }
  2059. // Ensure that only the converted RGB data is returned.
  2060. return data.subarray(0, offset);
  2061. },
  2062. getData({ width, height, forceRGB = false, isSourcePDF = false }) {
  2063. if (this.numComponents > 4) {
  2064. throw new JpegError("Unsupported color mode");
  2065. }
  2066. // Type of data: Uint8ClampedArray(width * height * numComponents)
  2067. var data = this._getLinearizedBlockData(width, height, isSourcePDF);
  2068. if (this.numComponents === 1 && forceRGB) {
  2069. var dataLength = data.length;
  2070. var rgbData = new Uint8ClampedArray(dataLength * 3);
  2071. var offset = 0;
  2072. for (var i = 0; i < dataLength; i++) {
  2073. var grayColor = data[i];
  2074. rgbData[offset++] = grayColor;
  2075. rgbData[offset++] = grayColor;
  2076. rgbData[offset++] = grayColor;
  2077. }
  2078. return rgbData;
  2079. } else if (this.numComponents === 3 && this._isColorConversionNeeded) {
  2080. return this._convertYccToRgb(data);
  2081. } else if (this.numComponents === 4) {
  2082. if (this._isColorConversionNeeded) {
  2083. if (forceRGB) {
  2084. return this._convertYcckToRgb(data);
  2085. }
  2086. return this._convertYcckToCmyk(data);
  2087. } else if (forceRGB) {
  2088. return this._convertCmykToRgb(data);
  2089. }
  2090. }
  2091. return data;
  2092. },
  2093. };
  2094. return JpegImage;
  2095. })();
  2096. "use strict";
  2097. var ArithmeticDecoder = function ArithmeticDecoderClosure() {
  2098. var QeTable = [{
  2099. qe: 0x5601,
  2100. nmps: 1,
  2101. nlps: 1,
  2102. switchFlag: 1
  2103. }, {
  2104. qe: 0x3401,
  2105. nmps: 2,
  2106. nlps: 6,
  2107. switchFlag: 0
  2108. }, {
  2109. qe: 0x1801,
  2110. nmps: 3,
  2111. nlps: 9,
  2112. switchFlag: 0
  2113. }, {
  2114. qe: 0x0AC1,
  2115. nmps: 4,
  2116. nlps: 12,
  2117. switchFlag: 0
  2118. }, {
  2119. qe: 0x0521,
  2120. nmps: 5,
  2121. nlps: 29,
  2122. switchFlag: 0
  2123. }, {
  2124. qe: 0x0221,
  2125. nmps: 38,
  2126. nlps: 33,
  2127. switchFlag: 0
  2128. }, {
  2129. qe: 0x5601,
  2130. nmps: 7,
  2131. nlps: 6,
  2132. switchFlag: 1
  2133. }, {
  2134. qe: 0x5401,
  2135. nmps: 8,
  2136. nlps: 14,
  2137. switchFlag: 0
  2138. }, {
  2139. qe: 0x4801,
  2140. nmps: 9,
  2141. nlps: 14,
  2142. switchFlag: 0
  2143. }, {
  2144. qe: 0x3801,
  2145. nmps: 10,
  2146. nlps: 14,
  2147. switchFlag: 0
  2148. }, {
  2149. qe: 0x3001,
  2150. nmps: 11,
  2151. nlps: 17,
  2152. switchFlag: 0
  2153. }, {
  2154. qe: 0x2401,
  2155. nmps: 12,
  2156. nlps: 18,
  2157. switchFlag: 0
  2158. }, {
  2159. qe: 0x1C01,
  2160. nmps: 13,
  2161. nlps: 20,
  2162. switchFlag: 0
  2163. }, {
  2164. qe: 0x1601,
  2165. nmps: 29,
  2166. nlps: 21,
  2167. switchFlag: 0
  2168. }, {
  2169. qe: 0x5601,
  2170. nmps: 15,
  2171. nlps: 14,
  2172. switchFlag: 1
  2173. }, {
  2174. qe: 0x5401,
  2175. nmps: 16,
  2176. nlps: 14,
  2177. switchFlag: 0
  2178. }, {
  2179. qe: 0x5101,
  2180. nmps: 17,
  2181. nlps: 15,
  2182. switchFlag: 0
  2183. }, {
  2184. qe: 0x4801,
  2185. nmps: 18,
  2186. nlps: 16,
  2187. switchFlag: 0
  2188. }, {
  2189. qe: 0x3801,
  2190. nmps: 19,
  2191. nlps: 17,
  2192. switchFlag: 0
  2193. }, {
  2194. qe: 0x3401,
  2195. nmps: 20,
  2196. nlps: 18,
  2197. switchFlag: 0
  2198. }, {
  2199. qe: 0x3001,
  2200. nmps: 21,
  2201. nlps: 19,
  2202. switchFlag: 0
  2203. }, {
  2204. qe: 0x2801,
  2205. nmps: 22,
  2206. nlps: 19,
  2207. switchFlag: 0
  2208. }, {
  2209. qe: 0x2401,
  2210. nmps: 23,
  2211. nlps: 20,
  2212. switchFlag: 0
  2213. }, {
  2214. qe: 0x2201,
  2215. nmps: 24,
  2216. nlps: 21,
  2217. switchFlag: 0
  2218. }, {
  2219. qe: 0x1C01,
  2220. nmps: 25,
  2221. nlps: 22,
  2222. switchFlag: 0
  2223. }, {
  2224. qe: 0x1801,
  2225. nmps: 26,
  2226. nlps: 23,
  2227. switchFlag: 0
  2228. }, {
  2229. qe: 0x1601,
  2230. nmps: 27,
  2231. nlps: 24,
  2232. switchFlag: 0
  2233. }, {
  2234. qe: 0x1401,
  2235. nmps: 28,
  2236. nlps: 25,
  2237. switchFlag: 0
  2238. }, {
  2239. qe: 0x1201,
  2240. nmps: 29,
  2241. nlps: 26,
  2242. switchFlag: 0
  2243. }, {
  2244. qe: 0x1101,
  2245. nmps: 30,
  2246. nlps: 27,
  2247. switchFlag: 0
  2248. }, {
  2249. qe: 0x0AC1,
  2250. nmps: 31,
  2251. nlps: 28,
  2252. switchFlag: 0
  2253. }, {
  2254. qe: 0x09C1,
  2255. nmps: 32,
  2256. nlps: 29,
  2257. switchFlag: 0
  2258. }, {
  2259. qe: 0x08A1,
  2260. nmps: 33,
  2261. nlps: 30,
  2262. switchFlag: 0
  2263. }, {
  2264. qe: 0x0521,
  2265. nmps: 34,
  2266. nlps: 31,
  2267. switchFlag: 0
  2268. }, {
  2269. qe: 0x0441,
  2270. nmps: 35,
  2271. nlps: 32,
  2272. switchFlag: 0
  2273. }, {
  2274. qe: 0x02A1,
  2275. nmps: 36,
  2276. nlps: 33,
  2277. switchFlag: 0
  2278. }, {
  2279. qe: 0x0221,
  2280. nmps: 37,
  2281. nlps: 34,
  2282. switchFlag: 0
  2283. }, {
  2284. qe: 0x0141,
  2285. nmps: 38,
  2286. nlps: 35,
  2287. switchFlag: 0
  2288. }, {
  2289. qe: 0x0111,
  2290. nmps: 39,
  2291. nlps: 36,
  2292. switchFlag: 0
  2293. }, {
  2294. qe: 0x0085,
  2295. nmps: 40,
  2296. nlps: 37,
  2297. switchFlag: 0
  2298. }, {
  2299. qe: 0x0049,
  2300. nmps: 41,
  2301. nlps: 38,
  2302. switchFlag: 0
  2303. }, {
  2304. qe: 0x0025,
  2305. nmps: 42,
  2306. nlps: 39,
  2307. switchFlag: 0
  2308. }, {
  2309. qe: 0x0015,
  2310. nmps: 43,
  2311. nlps: 40,
  2312. switchFlag: 0
  2313. }, {
  2314. qe: 0x0009,
  2315. nmps: 44,
  2316. nlps: 41,
  2317. switchFlag: 0
  2318. }, {
  2319. qe: 0x0005,
  2320. nmps: 45,
  2321. nlps: 42,
  2322. switchFlag: 0
  2323. }, {
  2324. qe: 0x0001,
  2325. nmps: 45,
  2326. nlps: 43,
  2327. switchFlag: 0
  2328. }, {
  2329. qe: 0x5601,
  2330. nmps: 46,
  2331. nlps: 46,
  2332. switchFlag: 0
  2333. }];
  2334. function ArithmeticDecoder(data, start, end) {
  2335. this.data = data;
  2336. this.bp = start;
  2337. this.dataEnd = end;
  2338. this.chigh = data[start];
  2339. this.clow = 0;
  2340. this.byteIn();
  2341. this.chigh = this.chigh << 7 & 0xFFFF | this.clow >> 9 & 0x7F;
  2342. this.clow = this.clow << 7 & 0xFFFF;
  2343. this.ct -= 7;
  2344. this.a = 0x8000;
  2345. }
  2346. ArithmeticDecoder.prototype = {
  2347. byteIn: function ArithmeticDecoder_byteIn() {
  2348. var data = this.data;
  2349. var bp = this.bp;
  2350. if (data[bp] === 0xFF) {
  2351. var b1 = data[bp + 1];
  2352. if (b1 > 0x8F) {
  2353. this.clow += 0xFF00;
  2354. this.ct = 8;
  2355. } else {
  2356. bp++;
  2357. this.clow += data[bp] << 9;
  2358. this.ct = 7;
  2359. this.bp = bp;
  2360. }
  2361. } else {
  2362. bp++;
  2363. this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xFF00;
  2364. this.ct = 8;
  2365. this.bp = bp;
  2366. }
  2367. if (this.clow > 0xFFFF) {
  2368. this.chigh += this.clow >> 16;
  2369. this.clow &= 0xFFFF;
  2370. }
  2371. },
  2372. readBit: function ArithmeticDecoder_readBit(contexts, pos) {
  2373. var cx_index = contexts[pos] >> 1,
  2374. cx_mps = contexts[pos] & 1;
  2375. var qeTableIcx = QeTable[cx_index];
  2376. var qeIcx = qeTableIcx.qe;
  2377. var d;
  2378. var a = this.a - qeIcx;
  2379. if (this.chigh < qeIcx) {
  2380. if (a < qeIcx) {
  2381. a = qeIcx;
  2382. d = cx_mps;
  2383. cx_index = qeTableIcx.nmps;
  2384. } else {
  2385. a = qeIcx;
  2386. d = 1 ^ cx_mps;
  2387. if (qeTableIcx.switchFlag === 1) {
  2388. cx_mps = d;
  2389. }
  2390. cx_index = qeTableIcx.nlps;
  2391. }
  2392. } else {
  2393. this.chigh -= qeIcx;
  2394. if ((a & 0x8000) !== 0) {
  2395. this.a = a;
  2396. return cx_mps;
  2397. }
  2398. if (a < qeIcx) {
  2399. d = 1 ^ cx_mps;
  2400. if (qeTableIcx.switchFlag === 1) {
  2401. cx_mps = d;
  2402. }
  2403. cx_index = qeTableIcx.nlps;
  2404. } else {
  2405. d = cx_mps;
  2406. cx_index = qeTableIcx.nmps;
  2407. }
  2408. }
  2409. do {
  2410. if (this.ct === 0) {
  2411. this.byteIn();
  2412. }
  2413. a <<= 1;
  2414. this.chigh = this.chigh << 1 & 0xFFFF | this.clow >> 15 & 1;
  2415. this.clow = this.clow << 1 & 0xFFFF;
  2416. this.ct--;
  2417. } while ((a & 0x8000) === 0);
  2418. this.a = a;
  2419. contexts[pos] = cx_index << 1 | cx_mps;
  2420. return d;
  2421. }
  2422. };
  2423. return ArithmeticDecoder;
  2424. }();
  2425. "use strict";
  2426. var JpxImage = function JpxImageClosure() {
  2427. var SubbandsGainLog2 = {
  2428. 'LL': 0,
  2429. 'LH': 1,
  2430. 'HL': 1,
  2431. 'HH': 2
  2432. };
  2433. function JpxImage() {
  2434. this.failOnCorruptedImage = false;
  2435. }
  2436. JpxImage.prototype = {
  2437. parse: function JpxImage_parse(data) {
  2438. var head = readUint16(data, 0);
  2439. if (head === 0xFF4F) {
  2440. this.parseCodestream(data, 0, data.length);
  2441. return;
  2442. }
  2443. var position = 0,
  2444. length = data.length;
  2445. while (position < length) {
  2446. var headerSize = 8;
  2447. var lbox = readUint32(data, position);
  2448. var tbox = readUint32(data, position + 4);
  2449. position += headerSize;
  2450. if (lbox === 1) {
  2451. lbox = readUint32(data, position) * 4294967296 + readUint32(data, position + 4);
  2452. position += 8;
  2453. headerSize += 8;
  2454. }
  2455. if (lbox === 0) {
  2456. lbox = length - position + headerSize;
  2457. }
  2458. if (lbox < headerSize) {
  2459. error('JPX Error: Invalid box field size');
  2460. }
  2461. var dataLength = lbox - headerSize;
  2462. var jumpDataLength = true;
  2463. switch (tbox) {
  2464. case 0x6A703268:
  2465. jumpDataLength = false;
  2466. break;
  2467. case 0x636F6C72:
  2468. var method = data[position];
  2469. if (method === 1) {
  2470. var colorspace = readUint32(data, position + 3);
  2471. switch (colorspace) {
  2472. case 16:
  2473. case 17:
  2474. case 18:
  2475. break;
  2476. default:
  2477. warn('Unknown colorspace ' + colorspace);
  2478. break;
  2479. }
  2480. } else if (method === 2) {
  2481. info('ICC profile not supported');
  2482. }
  2483. break;
  2484. case 0x6A703263:
  2485. this.parseCodestream(data, position, position + dataLength);
  2486. break;
  2487. case 0x6A502020:
  2488. if (readUint32(data, position) !== 0x0d0a870a) {
  2489. warn('Invalid JP2 signature');
  2490. }
  2491. break;
  2492. case 0x6A501A1A:
  2493. case 0x66747970:
  2494. case 0x72726571:
  2495. case 0x72657320:
  2496. case 0x69686472:
  2497. break;
  2498. default:
  2499. var headerType = String.fromCharCode(tbox >> 24 & 0xFF, tbox >> 16 & 0xFF, tbox >> 8 & 0xFF, tbox & 0xFF);
  2500. warn('Unsupported header type ' + tbox + ' (' + headerType + ')');
  2501. break;
  2502. }
  2503. if (jumpDataLength) {
  2504. position += dataLength;
  2505. }
  2506. }
  2507. },
  2508. parseImageProperties: function JpxImage_parseImageProperties(stream) {
  2509. var newByte = stream.getByte();
  2510. while (newByte >= 0) {
  2511. var oldByte = newByte;
  2512. newByte = stream.getByte();
  2513. var code = oldByte << 8 | newByte;
  2514. if (code === 0xFF51) {
  2515. stream.skip(4);
  2516. var Xsiz = stream.getInt32() >>> 0;
  2517. var Ysiz = stream.getInt32() >>> 0;
  2518. var XOsiz = stream.getInt32() >>> 0;
  2519. var YOsiz = stream.getInt32() >>> 0;
  2520. stream.skip(16);
  2521. var Csiz = stream.getUint16();
  2522. this.width = Xsiz - XOsiz;
  2523. this.height = Ysiz - YOsiz;
  2524. this.componentsCount = Csiz;
  2525. this.bitsPerComponent = 8;
  2526. return;
  2527. }
  2528. }
  2529. error('JPX Error: No size marker found in JPX stream');
  2530. },
  2531. parseCodestream: function JpxImage_parseCodestream(data, start, end) {
  2532. var context = {};
  2533. var doNotRecover = false;
  2534. try {
  2535. var position = start;
  2536. while (position + 1 < end) {
  2537. var code = readUint16(data, position);
  2538. position += 2;
  2539. var length = 0,
  2540. j,
  2541. sqcd,
  2542. spqcds,
  2543. spqcdSize,
  2544. scalarExpounded,
  2545. tile;
  2546. switch (code) {
  2547. case 0xFF4F:
  2548. context.mainHeader = true;
  2549. break;
  2550. case 0xFFD9:
  2551. break;
  2552. case 0xFF51:
  2553. length = readUint16(data, position);
  2554. var siz = {};
  2555. siz.Xsiz = readUint32(data, position + 4);
  2556. siz.Ysiz = readUint32(data, position + 8);
  2557. siz.XOsiz = readUint32(data, position + 12);
  2558. siz.YOsiz = readUint32(data, position + 16);
  2559. siz.XTsiz = readUint32(data, position + 20);
  2560. siz.YTsiz = readUint32(data, position + 24);
  2561. siz.XTOsiz = readUint32(data, position + 28);
  2562. siz.YTOsiz = readUint32(data, position + 32);
  2563. var componentsCount = readUint16(data, position + 36);
  2564. siz.Csiz = componentsCount;
  2565. var components = [];
  2566. j = position + 38;
  2567. for (var i = 0; i < componentsCount; i++) {
  2568. var component = {
  2569. precision: (data[j] & 0x7F) + 1,
  2570. isSigned: !!(data[j] & 0x80),
  2571. XRsiz: data[j + 1],
  2572. YRsiz: data[j + 1]
  2573. };
  2574. calculateComponentDimensions(component, siz);
  2575. components.push(component);
  2576. }
  2577. context.SIZ = siz;
  2578. context.components = components;
  2579. calculateTileGrids(context, components);
  2580. context.QCC = [];
  2581. context.COC = [];
  2582. break;
  2583. case 0xFF5C:
  2584. length = readUint16(data, position);
  2585. var qcd = {};
  2586. j = position + 2;
  2587. sqcd = data[j++];
  2588. switch (sqcd & 0x1F) {
  2589. case 0:
  2590. spqcdSize = 8;
  2591. scalarExpounded = true;
  2592. break;
  2593. case 1:
  2594. spqcdSize = 16;
  2595. scalarExpounded = false;
  2596. break;
  2597. case 2:
  2598. spqcdSize = 16;
  2599. scalarExpounded = true;
  2600. break;
  2601. default:
  2602. throw new Error('Invalid SQcd value ' + sqcd);
  2603. }
  2604. qcd.noQuantization = spqcdSize === 8;
  2605. qcd.scalarExpounded = scalarExpounded;
  2606. qcd.guardBits = sqcd >> 5;
  2607. spqcds = [];
  2608. while (j < length + position) {
  2609. var spqcd = {};
  2610. if (spqcdSize === 8) {
  2611. spqcd.epsilon = data[j++] >> 3;
  2612. spqcd.mu = 0;
  2613. } else {
  2614. spqcd.epsilon = data[j] >> 3;
  2615. spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
  2616. j += 2;
  2617. }
  2618. spqcds.push(spqcd);
  2619. }
  2620. qcd.SPqcds = spqcds;
  2621. if (context.mainHeader) {
  2622. context.QCD = qcd;
  2623. } else {
  2624. context.currentTile.QCD = qcd;
  2625. context.currentTile.QCC = [];
  2626. }
  2627. break;
  2628. case 0xFF5D:
  2629. length = readUint16(data, position);
  2630. var qcc = {};
  2631. j = position + 2;
  2632. var cqcc;
  2633. if (context.SIZ.Csiz < 257) {
  2634. cqcc = data[j++];
  2635. } else {
  2636. cqcc = readUint16(data, j);
  2637. j += 2;
  2638. }
  2639. sqcd = data[j++];
  2640. switch (sqcd & 0x1F) {
  2641. case 0:
  2642. spqcdSize = 8;
  2643. scalarExpounded = true;
  2644. break;
  2645. case 1:
  2646. spqcdSize = 16;
  2647. scalarExpounded = false;
  2648. break;
  2649. case 2:
  2650. spqcdSize = 16;
  2651. scalarExpounded = true;
  2652. break;
  2653. default:
  2654. throw new Error('Invalid SQcd value ' + sqcd);
  2655. }
  2656. qcc.noQuantization = spqcdSize === 8;
  2657. qcc.scalarExpounded = scalarExpounded;
  2658. qcc.guardBits = sqcd >> 5;
  2659. spqcds = [];
  2660. while (j < length + position) {
  2661. spqcd = {};
  2662. if (spqcdSize === 8) {
  2663. spqcd.epsilon = data[j++] >> 3;
  2664. spqcd.mu = 0;
  2665. } else {
  2666. spqcd.epsilon = data[j] >> 3;
  2667. spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
  2668. j += 2;
  2669. }
  2670. spqcds.push(spqcd);
  2671. }
  2672. qcc.SPqcds = spqcds;
  2673. if (context.mainHeader) {
  2674. context.QCC[cqcc] = qcc;
  2675. } else {
  2676. context.currentTile.QCC[cqcc] = qcc;
  2677. }
  2678. break;
  2679. case 0xFF52:
  2680. length = readUint16(data, position);
  2681. var cod = {};
  2682. j = position + 2;
  2683. var scod = data[j++];
  2684. cod.entropyCoderWithCustomPrecincts = !!(scod & 1);
  2685. cod.sopMarkerUsed = !!(scod & 2);
  2686. cod.ephMarkerUsed = !!(scod & 4);
  2687. cod.progressionOrder = data[j++];
  2688. cod.layersCount = readUint16(data, j);
  2689. j += 2;
  2690. cod.multipleComponentTransform = data[j++];
  2691. cod.decompositionLevelsCount = data[j++];
  2692. cod.xcb = (data[j++] & 0xF) + 2;
  2693. cod.ycb = (data[j++] & 0xF) + 2;
  2694. var blockStyle = data[j++];
  2695. cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);
  2696. cod.resetContextProbabilities = !!(blockStyle & 2);
  2697. cod.terminationOnEachCodingPass = !!(blockStyle & 4);
  2698. cod.verticalyStripe = !!(blockStyle & 8);
  2699. cod.predictableTermination = !!(blockStyle & 16);
  2700. cod.segmentationSymbolUsed = !!(blockStyle & 32);
  2701. cod.reversibleTransformation = data[j++];
  2702. if (cod.entropyCoderWithCustomPrecincts) {
  2703. var precinctsSizes = [];
  2704. while (j < length + position) {
  2705. var precinctsSize = data[j++];
  2706. precinctsSizes.push({
  2707. PPx: precinctsSize & 0xF,
  2708. PPy: precinctsSize >> 4
  2709. });
  2710. }
  2711. cod.precinctsSizes = precinctsSizes;
  2712. }
  2713. var unsupported = [];
  2714. if (cod.selectiveArithmeticCodingBypass) {
  2715. unsupported.push('selectiveArithmeticCodingBypass');
  2716. }
  2717. if (cod.resetContextProbabilities) {
  2718. unsupported.push('resetContextProbabilities');
  2719. }
  2720. if (cod.terminationOnEachCodingPass) {
  2721. unsupported.push('terminationOnEachCodingPass');
  2722. }
  2723. if (cod.verticalyStripe) {
  2724. unsupported.push('verticalyStripe');
  2725. }
  2726. if (cod.predictableTermination) {
  2727. unsupported.push('predictableTermination');
  2728. }
  2729. if (unsupported.length > 0) {
  2730. doNotRecover = true;
  2731. throw new Error('Unsupported COD options (' + unsupported.join(', ') + ')');
  2732. }
  2733. if (context.mainHeader) {
  2734. context.COD = cod;
  2735. } else {
  2736. context.currentTile.COD = cod;
  2737. context.currentTile.COC = [];
  2738. }
  2739. break;
  2740. case 0xFF90:
  2741. length = readUint16(data, position);
  2742. tile = {};
  2743. tile.index = readUint16(data, position + 2);
  2744. tile.length = readUint32(data, position + 4);
  2745. tile.dataEnd = tile.length + position - 2;
  2746. tile.partIndex = data[position + 8];
  2747. tile.partsCount = data[position + 9];
  2748. context.mainHeader = false;
  2749. if (tile.partIndex === 0) {
  2750. tile.COD = context.COD;
  2751. tile.COC = context.COC.slice(0);
  2752. tile.QCD = context.QCD;
  2753. tile.QCC = context.QCC.slice(0);
  2754. }
  2755. context.currentTile = tile;
  2756. break;
  2757. case 0xFF93:
  2758. tile = context.currentTile;
  2759. if (tile.partIndex === 0) {
  2760. initializeTile(context, tile.index);
  2761. buildPackets(context);
  2762. }
  2763. length = tile.dataEnd - position;
  2764. parseTilePackets(context, data, position, length);
  2765. break;
  2766. case 0xFF55:
  2767. case 0xFF57:
  2768. case 0xFF58:
  2769. case 0xFF64:
  2770. length = readUint16(data, position);
  2771. break;
  2772. case 0xFF53:
  2773. throw new Error('Codestream code 0xFF53 (COC) is ' + 'not implemented');
  2774. default:
  2775. throw new Error('Unknown codestream code: ' + code.toString(16));
  2776. }
  2777. position += length;
  2778. }
  2779. } catch (e) {
  2780. if (doNotRecover || this.failOnCorruptedImage) {
  2781. error('JPX Error: ' + e.message);
  2782. } else {
  2783. warn('JPX: Trying to recover from: ' + e.message);
  2784. }
  2785. }
  2786. this.tiles = transformComponents(context);
  2787. this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;
  2788. this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;
  2789. this.componentsCount = context.SIZ.Csiz;
  2790. }
  2791. };
  2792. function calculateComponentDimensions(component, siz) {
  2793. component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);
  2794. component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);
  2795. component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);
  2796. component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);
  2797. component.width = component.x1 - component.x0;
  2798. component.height = component.y1 - component.y0;
  2799. }
  2800. function calculateTileGrids(context, components) {
  2801. var siz = context.SIZ;
  2802. var tile,
  2803. tiles = [];
  2804. var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);
  2805. var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);
  2806. for (var q = 0; q < numYtiles; q++) {
  2807. for (var p = 0; p < numXtiles; p++) {
  2808. tile = {};
  2809. tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);
  2810. tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);
  2811. tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);
  2812. tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);
  2813. tile.width = tile.tx1 - tile.tx0;
  2814. tile.height = tile.ty1 - tile.ty0;
  2815. tile.components = [];
  2816. tiles.push(tile);
  2817. }
  2818. }
  2819. context.tiles = tiles;
  2820. var componentsCount = siz.Csiz;
  2821. for (var i = 0, ii = componentsCount; i < ii; i++) {
  2822. var component = components[i];
  2823. for (var j = 0, jj = tiles.length; j < jj; j++) {
  2824. var tileComponent = {};
  2825. tile = tiles[j];
  2826. tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);
  2827. tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);
  2828. tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);
  2829. tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);
  2830. tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;
  2831. tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;
  2832. tile.components[i] = tileComponent;
  2833. }
  2834. }
  2835. }
  2836. function getBlocksDimensions(context, component, r) {
  2837. var codOrCoc = component.codingStyleParameters;
  2838. var result = {};
  2839. if (!codOrCoc.entropyCoderWithCustomPrecincts) {
  2840. result.PPx = 15;
  2841. result.PPy = 15;
  2842. } else {
  2843. result.PPx = codOrCoc.precinctsSizes[r].PPx;
  2844. result.PPy = codOrCoc.precinctsSizes[r].PPy;
  2845. }
  2846. result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx);
  2847. result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy);
  2848. return result;
  2849. }
  2850. function buildPrecincts(context, resolution, dimensions) {
  2851. var precinctWidth = 1 << dimensions.PPx;
  2852. var precinctHeight = 1 << dimensions.PPy;
  2853. var isZeroRes = resolution.resLevel === 0;
  2854. var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1);
  2855. var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1);
  2856. var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0;
  2857. var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0;
  2858. var numprecincts = numprecinctswide * numprecinctshigh;
  2859. resolution.precinctParameters = {
  2860. precinctWidth: precinctWidth,
  2861. precinctHeight: precinctHeight,
  2862. numprecinctswide: numprecinctswide,
  2863. numprecinctshigh: numprecinctshigh,
  2864. numprecincts: numprecincts,
  2865. precinctWidthInSubband: precinctWidthInSubband,
  2866. precinctHeightInSubband: precinctHeightInSubband
  2867. };
  2868. }
  2869. function buildCodeblocks(context, subband, dimensions) {
  2870. var xcb_ = dimensions.xcb_;
  2871. var ycb_ = dimensions.ycb_;
  2872. var codeblockWidth = 1 << xcb_;
  2873. var codeblockHeight = 1 << ycb_;
  2874. var cbx0 = subband.tbx0 >> xcb_;
  2875. var cby0 = subband.tby0 >> ycb_;
  2876. var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_;
  2877. var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_;
  2878. var precinctParameters = subband.resolution.precinctParameters;
  2879. var codeblocks = [];
  2880. var precincts = [];
  2881. var i, j, codeblock, precinctNumber;
  2882. for (j = cby0; j < cby1; j++) {
  2883. for (i = cbx0; i < cbx1; i++) {
  2884. codeblock = {
  2885. cbx: i,
  2886. cby: j,
  2887. tbx0: codeblockWidth * i,
  2888. tby0: codeblockHeight * j,
  2889. tbx1: codeblockWidth * (i + 1),
  2890. tby1: codeblockHeight * (j + 1)
  2891. };
  2892. codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);
  2893. codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);
  2894. codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);
  2895. codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);
  2896. var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband);
  2897. var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband);
  2898. precinctNumber = pi + pj * precinctParameters.numprecinctswide;
  2899. codeblock.precinctNumber = precinctNumber;
  2900. codeblock.subbandType = subband.type;
  2901. codeblock.Lblock = 3;
  2902. if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) {
  2903. continue;
  2904. }
  2905. codeblocks.push(codeblock);
  2906. var precinct = precincts[precinctNumber];
  2907. if (precinct !== undefined) {
  2908. if (i < precinct.cbxMin) {
  2909. precinct.cbxMin = i;
  2910. } else if (i > precinct.cbxMax) {
  2911. precinct.cbxMax = i;
  2912. }
  2913. if (j < precinct.cbyMin) {
  2914. precinct.cbxMin = j;
  2915. } else if (j > precinct.cbyMax) {
  2916. precinct.cbyMax = j;
  2917. }
  2918. } else {
  2919. precincts[precinctNumber] = precinct = {
  2920. cbxMin: i,
  2921. cbyMin: j,
  2922. cbxMax: i,
  2923. cbyMax: j
  2924. };
  2925. }
  2926. codeblock.precinct = precinct;
  2927. }
  2928. }
  2929. subband.codeblockParameters = {
  2930. codeblockWidth: xcb_,
  2931. codeblockHeight: ycb_,
  2932. numcodeblockwide: cbx1 - cbx0 + 1,
  2933. numcodeblockhigh: cby1 - cby0 + 1
  2934. };
  2935. subband.codeblocks = codeblocks;
  2936. subband.precincts = precincts;
  2937. }
  2938. function createPacket(resolution, precinctNumber, layerNumber) {
  2939. var precinctCodeblocks = [];
  2940. var subbands = resolution.subbands;
  2941. for (var i = 0, ii = subbands.length; i < ii; i++) {
  2942. var subband = subbands[i];
  2943. var codeblocks = subband.codeblocks;
  2944. for (var j = 0, jj = codeblocks.length; j < jj; j++) {
  2945. var codeblock = codeblocks[j];
  2946. if (codeblock.precinctNumber !== precinctNumber) {
  2947. continue;
  2948. }
  2949. precinctCodeblocks.push(codeblock);
  2950. }
  2951. }
  2952. return {
  2953. layerNumber: layerNumber,
  2954. codeblocks: precinctCodeblocks
  2955. };
  2956. }
  2957. function LayerResolutionComponentPositionIterator(context) {
  2958. var siz = context.SIZ;
  2959. var tileIndex = context.currentTile.index;
  2960. var tile = context.tiles[tileIndex];
  2961. var layersCount = tile.codingStyleDefaultParameters.layersCount;
  2962. var componentsCount = siz.Csiz;
  2963. var maxDecompositionLevelsCount = 0;
  2964. for (var q = 0; q < componentsCount; q++) {
  2965. maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
  2966. }
  2967. var l = 0,
  2968. r = 0,
  2969. i = 0,
  2970. k = 0;
  2971. this.nextPacket = function JpxImage_nextPacket() {
  2972. for (; l < layersCount; l++) {
  2973. for (; r <= maxDecompositionLevelsCount; r++) {
  2974. for (; i < componentsCount; i++) {
  2975. var component = tile.components[i];
  2976. if (r > component.codingStyleParameters.decompositionLevelsCount) {
  2977. continue;
  2978. }
  2979. var resolution = component.resolutions[r];
  2980. var numprecincts = resolution.precinctParameters.numprecincts;
  2981. for (; k < numprecincts;) {
  2982. var packet = createPacket(resolution, k, l);
  2983. k++;
  2984. return packet;
  2985. }
  2986. k = 0;
  2987. }
  2988. i = 0;
  2989. }
  2990. r = 0;
  2991. }
  2992. error('JPX Error: Out of packets');
  2993. };
  2994. }
  2995. function ResolutionLayerComponentPositionIterator(context) {
  2996. var siz = context.SIZ;
  2997. var tileIndex = context.currentTile.index;
  2998. var tile = context.tiles[tileIndex];
  2999. var layersCount = tile.codingStyleDefaultParameters.layersCount;
  3000. var componentsCount = siz.Csiz;
  3001. var maxDecompositionLevelsCount = 0;
  3002. for (var q = 0; q < componentsCount; q++) {
  3003. maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
  3004. }
  3005. var r = 0,
  3006. l = 0,
  3007. i = 0,
  3008. k = 0;
  3009. this.nextPacket = function JpxImage_nextPacket() {
  3010. for (; r <= maxDecompositionLevelsCount; r++) {
  3011. for (; l < layersCount; l++) {
  3012. for (; i < componentsCount; i++) {
  3013. var component = tile.components[i];
  3014. if (r > component.codingStyleParameters.decompositionLevelsCount) {
  3015. continue;
  3016. }
  3017. var resolution = component.resolutions[r];
  3018. var numprecincts = resolution.precinctParameters.numprecincts;
  3019. for (; k < numprecincts;) {
  3020. var packet = createPacket(resolution, k, l);
  3021. k++;
  3022. return packet;
  3023. }
  3024. k = 0;
  3025. }
  3026. i = 0;
  3027. }
  3028. l = 0;
  3029. }
  3030. error('JPX Error: Out of packets');
  3031. };
  3032. }
  3033. function ResolutionPositionComponentLayerIterator(context) {
  3034. var siz = context.SIZ;
  3035. var tileIndex = context.currentTile.index;
  3036. var tile = context.tiles[tileIndex];
  3037. var layersCount = tile.codingStyleDefaultParameters.layersCount;
  3038. var componentsCount = siz.Csiz;
  3039. var l, r, c, p;
  3040. var maxDecompositionLevelsCount = 0;
  3041. for (c = 0; c < componentsCount; c++) {
  3042. var component = tile.components[c];
  3043. maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);
  3044. }
  3045. var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1);
  3046. for (r = 0; r <= maxDecompositionLevelsCount; ++r) {
  3047. var maxNumPrecincts = 0;
  3048. for (c = 0; c < componentsCount; ++c) {
  3049. var resolutions = tile.components[c].resolutions;
  3050. if (r < resolutions.length) {
  3051. maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts);
  3052. }
  3053. }
  3054. maxNumPrecinctsInLevel[r] = maxNumPrecincts;
  3055. }
  3056. l = 0;
  3057. r = 0;
  3058. c = 0;
  3059. p = 0;
  3060. this.nextPacket = function JpxImage_nextPacket() {
  3061. for (; r <= maxDecompositionLevelsCount; r++) {
  3062. for (; p < maxNumPrecinctsInLevel[r]; p++) {
  3063. for (; c < componentsCount; c++) {
  3064. var component = tile.components[c];
  3065. if (r > component.codingStyleParameters.decompositionLevelsCount) {
  3066. continue;
  3067. }
  3068. var resolution = component.resolutions[r];
  3069. var numprecincts = resolution.precinctParameters.numprecincts;
  3070. if (p >= numprecincts) {
  3071. continue;
  3072. }
  3073. for (; l < layersCount;) {
  3074. var packet = createPacket(resolution, p, l);
  3075. l++;
  3076. return packet;
  3077. }
  3078. l = 0;
  3079. }
  3080. c = 0;
  3081. }
  3082. p = 0;
  3083. }
  3084. error('JPX Error: Out of packets');
  3085. };
  3086. }
  3087. function PositionComponentResolutionLayerIterator(context) {
  3088. var siz = context.SIZ;
  3089. var tileIndex = context.currentTile.index;
  3090. var tile = context.tiles[tileIndex];
  3091. var layersCount = tile.codingStyleDefaultParameters.layersCount;
  3092. var componentsCount = siz.Csiz;
  3093. var precinctsSizes = getPrecinctSizesInImageScale(tile);
  3094. var precinctsIterationSizes = precinctsSizes;
  3095. var l = 0,
  3096. r = 0,
  3097. c = 0,
  3098. px = 0,
  3099. py = 0;
  3100. this.nextPacket = function JpxImage_nextPacket() {
  3101. for (; py < precinctsIterationSizes.maxNumHigh; py++) {
  3102. for (; px < precinctsIterationSizes.maxNumWide; px++) {
  3103. for (; c < componentsCount; c++) {
  3104. var component = tile.components[c];
  3105. var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
  3106. for (; r <= decompositionLevelsCount; r++) {
  3107. var resolution = component.resolutions[r];
  3108. var sizeInImageScale = precinctsSizes.components[c].resolutions[r];
  3109. var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
  3110. if (k === null) {
  3111. continue;
  3112. }
  3113. for (; l < layersCount;) {
  3114. var packet = createPacket(resolution, k, l);
  3115. l++;
  3116. return packet;
  3117. }
  3118. l = 0;
  3119. }
  3120. r = 0;
  3121. }
  3122. c = 0;
  3123. }
  3124. px = 0;
  3125. }
  3126. error('JPX Error: Out of packets');
  3127. };
  3128. }
  3129. function ComponentPositionResolutionLayerIterator(context) {
  3130. var siz = context.SIZ;
  3131. var tileIndex = context.currentTile.index;
  3132. var tile = context.tiles[tileIndex];
  3133. var layersCount = tile.codingStyleDefaultParameters.layersCount;
  3134. var componentsCount = siz.Csiz;
  3135. var precinctsSizes = getPrecinctSizesInImageScale(tile);
  3136. var l = 0,
  3137. r = 0,
  3138. c = 0,
  3139. px = 0,
  3140. py = 0;
  3141. this.nextPacket = function JpxImage_nextPacket() {
  3142. for (; c < componentsCount; ++c) {
  3143. var component = tile.components[c];
  3144. var precinctsIterationSizes = precinctsSizes.components[c];
  3145. var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
  3146. for (; py < precinctsIterationSizes.maxNumHigh; py++) {
  3147. for (; px < precinctsIterationSizes.maxNumWide; px++) {
  3148. for (; r <= decompositionLevelsCount; r++) {
  3149. var resolution = component.resolutions[r];
  3150. var sizeInImageScale = precinctsIterationSizes.resolutions[r];
  3151. var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
  3152. if (k === null) {
  3153. continue;
  3154. }
  3155. for (; l < layersCount;) {
  3156. var packet = createPacket(resolution, k, l);
  3157. l++;
  3158. return packet;
  3159. }
  3160. l = 0;
  3161. }
  3162. r = 0;
  3163. }
  3164. px = 0;
  3165. }
  3166. py = 0;
  3167. }
  3168. error('JPX Error: Out of packets');
  3169. };
  3170. }
  3171. function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {
  3172. var posX = pxIndex * precinctIterationSizes.minWidth;
  3173. var posY = pyIndex * precinctIterationSizes.minHeight;
  3174. if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) {
  3175. return null;
  3176. }
  3177. var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide;
  3178. return posX / sizeInImageScale.height + startPrecinctRowIndex;
  3179. }
  3180. function getPrecinctSizesInImageScale(tile) {
  3181. var componentsCount = tile.components.length;
  3182. var minWidth = Number.MAX_VALUE;
  3183. var minHeight = Number.MAX_VALUE;
  3184. var maxNumWide = 0;
  3185. var maxNumHigh = 0;
  3186. var sizePerComponent = new Array(componentsCount);
  3187. for (var c = 0; c < componentsCount; c++) {
  3188. var component = tile.components[c];
  3189. var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
  3190. var sizePerResolution = new Array(decompositionLevelsCount + 1);
  3191. var minWidthCurrentComponent = Number.MAX_VALUE;
  3192. var minHeightCurrentComponent = Number.MAX_VALUE;
  3193. var maxNumWideCurrentComponent = 0;
  3194. var maxNumHighCurrentComponent = 0;
  3195. var scale = 1;
  3196. for (var r = decompositionLevelsCount; r >= 0; --r) {
  3197. var resolution = component.resolutions[r];
  3198. var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth;
  3199. var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight;
  3200. minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution);
  3201. minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution);
  3202. maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide);
  3203. maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh);
  3204. sizePerResolution[r] = {
  3205. width: widthCurrentResolution,
  3206. height: heightCurrentResolution
  3207. };
  3208. scale <<= 1;
  3209. }
  3210. minWidth = Math.min(minWidth, minWidthCurrentComponent);
  3211. minHeight = Math.min(minHeight, minHeightCurrentComponent);
  3212. maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);
  3213. maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);
  3214. sizePerComponent[c] = {
  3215. resolutions: sizePerResolution,
  3216. minWidth: minWidthCurrentComponent,
  3217. minHeight: minHeightCurrentComponent,
  3218. maxNumWide: maxNumWideCurrentComponent,
  3219. maxNumHigh: maxNumHighCurrentComponent
  3220. };
  3221. }
  3222. return {
  3223. components: sizePerComponent,
  3224. minWidth: minWidth,
  3225. minHeight: minHeight,
  3226. maxNumWide: maxNumWide,
  3227. maxNumHigh: maxNumHigh
  3228. };
  3229. }
  3230. function buildPackets(context) {
  3231. var siz = context.SIZ;
  3232. var tileIndex = context.currentTile.index;
  3233. var tile = context.tiles[tileIndex];
  3234. var componentsCount = siz.Csiz;
  3235. for (var c = 0; c < componentsCount; c++) {
  3236. var component = tile.components[c];
  3237. var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
  3238. var resolutions = [];
  3239. var subbands = [];
  3240. for (var r = 0; r <= decompositionLevelsCount; r++) {
  3241. var blocksDimensions = getBlocksDimensions(context, component, r);
  3242. var resolution = {};
  3243. var scale = 1 << decompositionLevelsCount - r;
  3244. resolution.trx0 = Math.ceil(component.tcx0 / scale);
  3245. resolution.try0 = Math.ceil(component.tcy0 / scale);
  3246. resolution.trx1 = Math.ceil(component.tcx1 / scale);
  3247. resolution.try1 = Math.ceil(component.tcy1 / scale);
  3248. resolution.resLevel = r;
  3249. buildPrecincts(context, resolution, blocksDimensions);
  3250. resolutions.push(resolution);
  3251. var subband;
  3252. if (r === 0) {
  3253. subband = {};
  3254. subband.type = 'LL';
  3255. subband.tbx0 = Math.ceil(component.tcx0 / scale);
  3256. subband.tby0 = Math.ceil(component.tcy0 / scale);
  3257. subband.tbx1 = Math.ceil(component.tcx1 / scale);
  3258. subband.tby1 = Math.ceil(component.tcy1 / scale);
  3259. subband.resolution = resolution;
  3260. buildCodeblocks(context, subband, blocksDimensions);
  3261. subbands.push(subband);
  3262. resolution.subbands = [subband];
  3263. } else {
  3264. var bscale = 1 << decompositionLevelsCount - r + 1;
  3265. var resolutionSubbands = [];
  3266. subband = {};
  3267. subband.type = 'HL';
  3268. subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
  3269. subband.tby0 = Math.ceil(component.tcy0 / bscale);
  3270. subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
  3271. subband.tby1 = Math.ceil(component.tcy1 / bscale);
  3272. subband.resolution = resolution;
  3273. buildCodeblocks(context, subband, blocksDimensions);
  3274. subbands.push(subband);
  3275. resolutionSubbands.push(subband);
  3276. subband = {};
  3277. subband.type = 'LH';
  3278. subband.tbx0 = Math.ceil(component.tcx0 / bscale);
  3279. subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
  3280. subband.tbx1 = Math.ceil(component.tcx1 / bscale);
  3281. subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
  3282. subband.resolution = resolution;
  3283. buildCodeblocks(context, subband, blocksDimensions);
  3284. subbands.push(subband);
  3285. resolutionSubbands.push(subband);
  3286. subband = {};
  3287. subband.type = 'HH';
  3288. subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
  3289. subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
  3290. subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
  3291. subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
  3292. subband.resolution = resolution;
  3293. buildCodeblocks(context, subband, blocksDimensions);
  3294. subbands.push(subband);
  3295. resolutionSubbands.push(subband);
  3296. resolution.subbands = resolutionSubbands;
  3297. }
  3298. }
  3299. component.resolutions = resolutions;
  3300. component.subbands = subbands;
  3301. }
  3302. var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;
  3303. switch (progressionOrder) {
  3304. case 0:
  3305. tile.packetsIterator = new LayerResolutionComponentPositionIterator(context);
  3306. break;
  3307. case 1:
  3308. tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context);
  3309. break;
  3310. case 2:
  3311. tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context);
  3312. break;
  3313. case 3:
  3314. tile.packetsIterator = new PositionComponentResolutionLayerIterator(context);
  3315. break;
  3316. case 4:
  3317. tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context);
  3318. break;
  3319. default:
  3320. error('JPX Error: Unsupported progression order ' + progressionOrder);
  3321. }
  3322. }
  3323. function parseTilePackets(context, data, offset, dataLength) {
  3324. var position = 0;
  3325. var buffer,
  3326. bufferSize = 0,
  3327. skipNextBit = false;
  3328. function readBits(count) {
  3329. while (bufferSize < count) {
  3330. var b = data[offset + position];
  3331. position++;
  3332. if (skipNextBit) {
  3333. buffer = buffer << 7 | b;
  3334. bufferSize += 7;
  3335. skipNextBit = false;
  3336. } else {
  3337. buffer = buffer << 8 | b;
  3338. bufferSize += 8;
  3339. }
  3340. if (b === 0xFF) {
  3341. skipNextBit = true;
  3342. }
  3343. }
  3344. bufferSize -= count;
  3345. return buffer >>> bufferSize & (1 << count) - 1;
  3346. }
  3347. function skipMarkerIfEqual(value) {
  3348. if (data[offset + position - 1] === 0xFF && data[offset + position] === value) {
  3349. skipBytes(1);
  3350. return true;
  3351. } else if (data[offset + position] === 0xFF && data[offset + position + 1] === value) {
  3352. skipBytes(2);
  3353. return true;
  3354. }
  3355. return false;
  3356. }
  3357. function skipBytes(count) {
  3358. position += count;
  3359. }
  3360. function alignToByte() {
  3361. bufferSize = 0;
  3362. if (skipNextBit) {
  3363. position++;
  3364. skipNextBit = false;
  3365. }
  3366. }
  3367. function readCodingpasses() {
  3368. if (readBits(1) === 0) {
  3369. return 1;
  3370. }
  3371. if (readBits(1) === 0) {
  3372. return 2;
  3373. }
  3374. var value = readBits(2);
  3375. if (value < 3) {
  3376. return value + 3;
  3377. }
  3378. value = readBits(5);
  3379. if (value < 31) {
  3380. return value + 6;
  3381. }
  3382. value = readBits(7);
  3383. return value + 37;
  3384. }
  3385. var tileIndex = context.currentTile.index;
  3386. var tile = context.tiles[tileIndex];
  3387. var sopMarkerUsed = context.COD.sopMarkerUsed;
  3388. var ephMarkerUsed = context.COD.ephMarkerUsed;
  3389. var packetsIterator = tile.packetsIterator;
  3390. while (position < dataLength) {
  3391. alignToByte();
  3392. if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {
  3393. skipBytes(4);
  3394. }
  3395. var packet = packetsIterator.nextPacket();
  3396. if (!readBits(1)) {
  3397. continue;
  3398. }
  3399. var layerNumber = packet.layerNumber;
  3400. var queue = [],
  3401. codeblock;
  3402. for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {
  3403. codeblock = packet.codeblocks[i];
  3404. var precinct = codeblock.precinct;
  3405. var codeblockColumn = codeblock.cbx - precinct.cbxMin;
  3406. var codeblockRow = codeblock.cby - precinct.cbyMin;
  3407. var codeblockIncluded = false;
  3408. var firstTimeInclusion = false;
  3409. var valueReady;
  3410. if (codeblock['included'] !== undefined) {
  3411. codeblockIncluded = !!readBits(1);
  3412. } else {
  3413. precinct = codeblock.precinct;
  3414. var inclusionTree, zeroBitPlanesTree;
  3415. if (precinct['inclusionTree'] !== undefined) {
  3416. inclusionTree = precinct.inclusionTree;
  3417. } else {
  3418. var width = precinct.cbxMax - precinct.cbxMin + 1;
  3419. var height = precinct.cbyMax - precinct.cbyMin + 1;
  3420. inclusionTree = new InclusionTree(width, height, layerNumber);
  3421. zeroBitPlanesTree = new TagTree(width, height);
  3422. precinct.inclusionTree = inclusionTree;
  3423. precinct.zeroBitPlanesTree = zeroBitPlanesTree;
  3424. }
  3425. if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {
  3426. while (true) {
  3427. if (readBits(1)) {
  3428. valueReady = !inclusionTree.nextLevel();
  3429. if (valueReady) {
  3430. codeblock.included = true;
  3431. codeblockIncluded = firstTimeInclusion = true;
  3432. break;
  3433. }
  3434. } else {
  3435. inclusionTree.incrementValue(layerNumber);
  3436. break;
  3437. }
  3438. }
  3439. }
  3440. }
  3441. if (!codeblockIncluded) {
  3442. continue;
  3443. }
  3444. if (firstTimeInclusion) {
  3445. zeroBitPlanesTree = precinct.zeroBitPlanesTree;
  3446. zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);
  3447. while (true) {
  3448. if (readBits(1)) {
  3449. valueReady = !zeroBitPlanesTree.nextLevel();
  3450. if (valueReady) {
  3451. break;
  3452. }
  3453. } else {
  3454. zeroBitPlanesTree.incrementValue();
  3455. }
  3456. }
  3457. codeblock.zeroBitPlanes = zeroBitPlanesTree.value;
  3458. }
  3459. var codingpasses = readCodingpasses();
  3460. while (readBits(1)) {
  3461. codeblock.Lblock++;
  3462. }
  3463. var codingpassesLog2 = log2(codingpasses);
  3464. var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;
  3465. var codedDataLength = readBits(bits);
  3466. queue.push({
  3467. codeblock: codeblock,
  3468. codingpasses: codingpasses,
  3469. dataLength: codedDataLength
  3470. });
  3471. }
  3472. alignToByte();
  3473. if (ephMarkerUsed) {
  3474. skipMarkerIfEqual(0x92);
  3475. }
  3476. while (queue.length > 0) {
  3477. var packetItem = queue.shift();
  3478. codeblock = packetItem.codeblock;
  3479. if (codeblock['data'] === undefined) {
  3480. codeblock.data = [];
  3481. }
  3482. codeblock.data.push({
  3483. data: data,
  3484. start: offset + position,
  3485. end: offset + position + packetItem.dataLength,
  3486. codingpasses: packetItem.codingpasses
  3487. });
  3488. position += packetItem.dataLength;
  3489. }
  3490. }
  3491. return position;
  3492. }
  3493. function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) {
  3494. var x0 = subband.tbx0;
  3495. var y0 = subband.tby0;
  3496. var width = subband.tbx1 - subband.tbx0;
  3497. var codeblocks = subband.codeblocks;
  3498. var right = subband.type.charAt(0) === 'H' ? 1 : 0;
  3499. var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0;
  3500. for (var i = 0, ii = codeblocks.length; i < ii; ++i) {
  3501. var codeblock = codeblocks[i];
  3502. var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;
  3503. var blockHeight = codeblock.tby1_ - codeblock.tby0_;
  3504. if (blockWidth === 0 || blockHeight === 0) {
  3505. continue;
  3506. }
  3507. if (codeblock['data'] === undefined) {
  3508. continue;
  3509. }
  3510. var bitModel, currentCodingpassType;
  3511. bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb);
  3512. currentCodingpassType = 2;
  3513. var data = codeblock.data,
  3514. totalLength = 0,
  3515. codingpasses = 0;
  3516. var j, jj, dataItem;
  3517. for (j = 0, jj = data.length; j < jj; j++) {
  3518. dataItem = data[j];
  3519. totalLength += dataItem.end - dataItem.start;
  3520. codingpasses += dataItem.codingpasses;
  3521. }
  3522. var encodedData = new Uint8Array(totalLength);
  3523. var position = 0;
  3524. for (j = 0, jj = data.length; j < jj; j++) {
  3525. dataItem = data[j];
  3526. var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);
  3527. encodedData.set(chunk, position);
  3528. position += chunk.length;
  3529. }
  3530. var decoder = new ArithmeticDecoder(encodedData, 0, totalLength);
  3531. bitModel.setDecoder(decoder);
  3532. for (j = 0; j < codingpasses; j++) {
  3533. switch (currentCodingpassType) {
  3534. case 0:
  3535. bitModel.runSignificancePropagationPass();
  3536. break;
  3537. case 1:
  3538. bitModel.runMagnitudeRefinementPass();
  3539. break;
  3540. case 2:
  3541. bitModel.runCleanupPass();
  3542. if (segmentationSymbolUsed) {
  3543. bitModel.checkSegmentationSymbol();
  3544. }
  3545. break;
  3546. }
  3547. currentCodingpassType = (currentCodingpassType + 1) % 3;
  3548. }
  3549. var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;
  3550. var sign = bitModel.coefficentsSign;
  3551. var magnitude = bitModel.coefficentsMagnitude;
  3552. var bitsDecoded = bitModel.bitsDecoded;
  3553. var magnitudeCorrection = reversible ? 0 : 0.5;
  3554. var k, n, nb;
  3555. position = 0;
  3556. var interleave = subband.type !== 'LL';
  3557. for (j = 0; j < blockHeight; j++) {
  3558. var row = offset / width | 0;
  3559. var levelOffset = 2 * row * (levelWidth - width) + right + bottom;
  3560. for (k = 0; k < blockWidth; k++) {
  3561. n = magnitude[position];
  3562. if (n !== 0) {
  3563. n = (n + magnitudeCorrection) * delta;
  3564. if (sign[position] !== 0) {
  3565. n = -n;
  3566. }
  3567. nb = bitsDecoded[position];
  3568. var pos = interleave ? levelOffset + (offset << 1) : offset;
  3569. if (reversible && nb >= mb) {
  3570. coefficients[pos] = n;
  3571. } else {
  3572. coefficients[pos] = n * (1 << mb - nb);
  3573. }
  3574. }
  3575. offset++;
  3576. position++;
  3577. }
  3578. offset += width - blockWidth;
  3579. }
  3580. }
  3581. }
  3582. function transformTile(context, tile, c) {
  3583. var component = tile.components[c];
  3584. var codingStyleParameters = component.codingStyleParameters;
  3585. var quantizationParameters = component.quantizationParameters;
  3586. var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount;
  3587. var spqcds = quantizationParameters.SPqcds;
  3588. var scalarExpounded = quantizationParameters.scalarExpounded;
  3589. var guardBits = quantizationParameters.guardBits;
  3590. var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;
  3591. var precision = context.components[c].precision;
  3592. var reversible = codingStyleParameters.reversibleTransformation;
  3593. var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform();
  3594. var subbandCoefficients = [];
  3595. var b = 0;
  3596. for (var i = 0; i <= decompositionLevelsCount; i++) {
  3597. var resolution = component.resolutions[i];
  3598. var width = resolution.trx1 - resolution.trx0;
  3599. var height = resolution.try1 - resolution.try0;
  3600. var coefficients = new Float32Array(width * height);
  3601. for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {
  3602. var mu, epsilon;
  3603. if (!scalarExpounded) {
  3604. mu = spqcds[0].mu;
  3605. epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);
  3606. } else {
  3607. mu = spqcds[b].mu;
  3608. epsilon = spqcds[b].epsilon;
  3609. b++;
  3610. }
  3611. var subband = resolution.subbands[j];
  3612. var gainLog2 = SubbandsGainLog2[subband.type];
  3613. var delta = reversible ? 1 : Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048);
  3614. var mb = guardBits + epsilon - 1;
  3615. copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed);
  3616. }
  3617. subbandCoefficients.push({
  3618. width: width,
  3619. height: height,
  3620. items: coefficients
  3621. });
  3622. }
  3623. var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0);
  3624. return {
  3625. left: component.tcx0,
  3626. top: component.tcy0,
  3627. width: result.width,
  3628. height: result.height,
  3629. items: result.items
  3630. };
  3631. }
  3632. function transformComponents(context) {
  3633. var siz = context.SIZ;
  3634. var components = context.components;
  3635. var componentsCount = siz.Csiz;
  3636. var resultImages = [];
  3637. for (var i = 0, ii = context.tiles.length; i < ii; i++) {
  3638. var tile = context.tiles[i];
  3639. var transformedTiles = [];
  3640. var c;
  3641. for (c = 0; c < componentsCount; c++) {
  3642. transformedTiles[c] = transformTile(context, tile, c);
  3643. }
  3644. var tile0 = transformedTiles[0];
  3645. var out = new Uint8Array(tile0.items.length * componentsCount);
  3646. var result = {
  3647. left: tile0.left,
  3648. top: tile0.top,
  3649. width: tile0.width,
  3650. height: tile0.height,
  3651. items: out
  3652. };
  3653. var shift, offset, max, min, maxK;
  3654. var pos = 0,
  3655. j,
  3656. jj,
  3657. y0,
  3658. y1,
  3659. y2,
  3660. r,
  3661. g,
  3662. b,
  3663. k,
  3664. val;
  3665. if (tile.codingStyleDefaultParameters.multipleComponentTransform) {
  3666. var fourComponents = componentsCount === 4;
  3667. var y0items = transformedTiles[0].items;
  3668. var y1items = transformedTiles[1].items;
  3669. var y2items = transformedTiles[2].items;
  3670. var y3items = fourComponents ? transformedTiles[3].items : null;
  3671. shift = components[0].precision - 8;
  3672. offset = (128 << shift) + 0.5;
  3673. max = 255 * (1 << shift);
  3674. maxK = max * 0.5;
  3675. min = -maxK;
  3676. var component0 = tile.components[0];
  3677. var alpha01 = componentsCount - 3;
  3678. jj = y0items.length;
  3679. if (!component0.codingStyleParameters.reversibleTransformation) {
  3680. for (j = 0; j < jj; j++, pos += alpha01) {
  3681. y0 = y0items[j] + offset;
  3682. y1 = y1items[j];
  3683. y2 = y2items[j];
  3684. r = y0 + 1.402 * y2;
  3685. g = y0 - 0.34413 * y1 - 0.71414 * y2;
  3686. b = y0 + 1.772 * y1;
  3687. out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift;
  3688. out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift;
  3689. out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift;
  3690. }
  3691. } else {
  3692. for (j = 0; j < jj; j++, pos += alpha01) {
  3693. y0 = y0items[j] + offset;
  3694. y1 = y1items[j];
  3695. y2 = y2items[j];
  3696. g = y0 - (y2 + y1 >> 2);
  3697. r = g + y2;
  3698. b = g + y1;
  3699. out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift;
  3700. out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift;
  3701. out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift;
  3702. }
  3703. }
  3704. if (fourComponents) {
  3705. for (j = 0, pos = 3; j < jj; j++, pos += 4) {
  3706. k = y3items[j];
  3707. out[pos] = k <= min ? 0 : k >= maxK ? 255 : k + offset >> shift;
  3708. }
  3709. }
  3710. } else {
  3711. for (c = 0; c < componentsCount; c++) {
  3712. var items = transformedTiles[c].items;
  3713. shift = components[c].precision - 8;
  3714. offset = (128 << shift) + 0.5;
  3715. max = 127.5 * (1 << shift);
  3716. min = -max;
  3717. for (pos = c, j = 0, jj = items.length; j < jj; j++) {
  3718. val = items[j];
  3719. out[pos] = val <= min ? 0 : val >= max ? 255 : val + offset >> shift;
  3720. pos += componentsCount;
  3721. }
  3722. }
  3723. }
  3724. resultImages.push(result);
  3725. }
  3726. return resultImages;
  3727. }
  3728. function initializeTile(context, tileIndex) {
  3729. var siz = context.SIZ;
  3730. var componentsCount = siz.Csiz;
  3731. var tile = context.tiles[tileIndex];
  3732. for (var c = 0; c < componentsCount; c++) {
  3733. var component = tile.components[c];
  3734. var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD;
  3735. component.quantizationParameters = qcdOrQcc;
  3736. var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD;
  3737. component.codingStyleParameters = codOrCoc;
  3738. }
  3739. tile.codingStyleDefaultParameters = context.currentTile.COD;
  3740. }
  3741. var TagTree = function TagTreeClosure() {
  3742. function TagTree(width, height) {
  3743. var levelsLength = log2(Math.max(width, height)) + 1;
  3744. this.levels = [];
  3745. for (var i = 0; i < levelsLength; i++) {
  3746. var level = {
  3747. width: width,
  3748. height: height,
  3749. items: []
  3750. };
  3751. this.levels.push(level);
  3752. width = Math.ceil(width / 2);
  3753. height = Math.ceil(height / 2);
  3754. }
  3755. }
  3756. TagTree.prototype = {
  3757. reset: function TagTree_reset(i, j) {
  3758. var currentLevel = 0,
  3759. value = 0,
  3760. level;
  3761. while (currentLevel < this.levels.length) {
  3762. level = this.levels[currentLevel];
  3763. var index = i + j * level.width;
  3764. if (level.items[index] !== undefined) {
  3765. value = level.items[index];
  3766. break;
  3767. }
  3768. level.index = index;
  3769. i >>= 1;
  3770. j >>= 1;
  3771. currentLevel++;
  3772. }
  3773. currentLevel--;
  3774. level = this.levels[currentLevel];
  3775. level.items[level.index] = value;
  3776. this.currentLevel = currentLevel;
  3777. delete this.value;
  3778. },
  3779. incrementValue: function TagTree_incrementValue() {
  3780. var level = this.levels[this.currentLevel];
  3781. level.items[level.index]++;
  3782. },
  3783. nextLevel: function TagTree_nextLevel() {
  3784. var currentLevel = this.currentLevel;
  3785. var level = this.levels[currentLevel];
  3786. var value = level.items[level.index];
  3787. currentLevel--;
  3788. if (currentLevel < 0) {
  3789. this.value = value;
  3790. return false;
  3791. }
  3792. this.currentLevel = currentLevel;
  3793. level = this.levels[currentLevel];
  3794. level.items[level.index] = value;
  3795. return true;
  3796. }
  3797. };
  3798. return TagTree;
  3799. }();
  3800. var InclusionTree = function InclusionTreeClosure() {
  3801. function InclusionTree(width, height, defaultValue) {
  3802. var levelsLength = log2(Math.max(width, height)) + 1;
  3803. this.levels = [];
  3804. for (var i = 0; i < levelsLength; i++) {
  3805. var items = new Uint8Array(width * height);
  3806. for (var j = 0, jj = items.length; j < jj; j++) {
  3807. items[j] = defaultValue;
  3808. }
  3809. var level = {
  3810. width: width,
  3811. height: height,
  3812. items: items
  3813. };
  3814. this.levels.push(level);
  3815. width = Math.ceil(width / 2);
  3816. height = Math.ceil(height / 2);
  3817. }
  3818. }
  3819. InclusionTree.prototype = {
  3820. reset: function InclusionTree_reset(i, j, stopValue) {
  3821. var currentLevel = 0;
  3822. while (currentLevel < this.levels.length) {
  3823. var level = this.levels[currentLevel];
  3824. var index = i + j * level.width;
  3825. level.index = index;
  3826. var value = level.items[index];
  3827. if (value === 0xFF) {
  3828. break;
  3829. }
  3830. if (value > stopValue) {
  3831. this.currentLevel = currentLevel;
  3832. this.propagateValues();
  3833. return false;
  3834. }
  3835. i >>= 1;
  3836. j >>= 1;
  3837. currentLevel++;
  3838. }
  3839. this.currentLevel = currentLevel - 1;
  3840. return true;
  3841. },
  3842. incrementValue: function InclusionTree_incrementValue(stopValue) {
  3843. var level = this.levels[this.currentLevel];
  3844. level.items[level.index] = stopValue + 1;
  3845. this.propagateValues();
  3846. },
  3847. propagateValues: function InclusionTree_propagateValues() {
  3848. var levelIndex = this.currentLevel;
  3849. var level = this.levels[levelIndex];
  3850. var currentValue = level.items[level.index];
  3851. while (--levelIndex >= 0) {
  3852. level = this.levels[levelIndex];
  3853. level.items[level.index] = currentValue;
  3854. }
  3855. },
  3856. nextLevel: function InclusionTree_nextLevel() {
  3857. var currentLevel = this.currentLevel;
  3858. var level = this.levels[currentLevel];
  3859. var value = level.items[level.index];
  3860. level.items[level.index] = 0xFF;
  3861. currentLevel--;
  3862. if (currentLevel < 0) {
  3863. return false;
  3864. }
  3865. this.currentLevel = currentLevel;
  3866. level = this.levels[currentLevel];
  3867. level.items[level.index] = value;
  3868. return true;
  3869. }
  3870. };
  3871. return InclusionTree;
  3872. }();
  3873. var BitModel = function BitModelClosure() {
  3874. var UNIFORM_CONTEXT = 17;
  3875. var RUNLENGTH_CONTEXT = 18;
  3876. var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]);
  3877. var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]);
  3878. var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]);
  3879. function BitModel(width, height, subband, zeroBitPlanes, mb) {
  3880. this.width = width;
  3881. this.height = height;
  3882. this.contextLabelTable = subband === 'HH' ? HHContextLabel : subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel;
  3883. var coefficientCount = width * height;
  3884. this.neighborsSignificance = new Uint8Array(coefficientCount);
  3885. this.coefficentsSign = new Uint8Array(coefficientCount);
  3886. this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) : mb > 6 ? new Uint16Array(coefficientCount) : new Uint8Array(coefficientCount);
  3887. this.processingFlags = new Uint8Array(coefficientCount);
  3888. var bitsDecoded = new Uint8Array(coefficientCount);
  3889. if (zeroBitPlanes !== 0) {
  3890. for (var i = 0; i < coefficientCount; i++) {
  3891. bitsDecoded[i] = zeroBitPlanes;
  3892. }
  3893. }
  3894. this.bitsDecoded = bitsDecoded;
  3895. this.reset();
  3896. }
  3897. BitModel.prototype = {
  3898. setDecoder: function BitModel_setDecoder(decoder) {
  3899. this.decoder = decoder;
  3900. },
  3901. reset: function BitModel_reset() {
  3902. this.contexts = new Int8Array(19);
  3903. this.contexts[0] = 4 << 1 | 0;
  3904. this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0;
  3905. this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0;
  3906. },
  3907. setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) {
  3908. var neighborsSignificance = this.neighborsSignificance;
  3909. var width = this.width,
  3910. height = this.height;
  3911. var left = column > 0;
  3912. var right = column + 1 < width;
  3913. var i;
  3914. if (row > 0) {
  3915. i = index - width;
  3916. if (left) {
  3917. neighborsSignificance[i - 1] += 0x10;
  3918. }
  3919. if (right) {
  3920. neighborsSignificance[i + 1] += 0x10;
  3921. }
  3922. neighborsSignificance[i] += 0x04;
  3923. }
  3924. if (row + 1 < height) {
  3925. i = index + width;
  3926. if (left) {
  3927. neighborsSignificance[i - 1] += 0x10;
  3928. }
  3929. if (right) {
  3930. neighborsSignificance[i + 1] += 0x10;
  3931. }
  3932. neighborsSignificance[i] += 0x04;
  3933. }
  3934. if (left) {
  3935. neighborsSignificance[index - 1] += 0x01;
  3936. }
  3937. if (right) {
  3938. neighborsSignificance[index + 1] += 0x01;
  3939. }
  3940. neighborsSignificance[index] |= 0x80;
  3941. },
  3942. runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() {
  3943. var decoder = this.decoder;
  3944. var width = this.width,
  3945. height = this.height;
  3946. var coefficentsMagnitude = this.coefficentsMagnitude;
  3947. var coefficentsSign = this.coefficentsSign;
  3948. var neighborsSignificance = this.neighborsSignificance;
  3949. var processingFlags = this.processingFlags;
  3950. var contexts = this.contexts;
  3951. var labels = this.contextLabelTable;
  3952. var bitsDecoded = this.bitsDecoded;
  3953. var processedInverseMask = ~1;
  3954. var processedMask = 1;
  3955. var firstMagnitudeBitMask = 2;
  3956. for (var i0 = 0; i0 < height; i0 += 4) {
  3957. for (var j = 0; j < width; j++) {
  3958. var index = i0 * width + j;
  3959. for (var i1 = 0; i1 < 4; i1++, index += width) {
  3960. var i = i0 + i1;
  3961. if (i >= height) {
  3962. break;
  3963. }
  3964. processingFlags[index] &= processedInverseMask;
  3965. if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {
  3966. continue;
  3967. }
  3968. var contextLabel = labels[neighborsSignificance[index]];
  3969. var decision = decoder.readBit(contexts, contextLabel);
  3970. if (decision) {
  3971. var sign = this.decodeSignBit(i, j, index);
  3972. coefficentsSign[index] = sign;
  3973. coefficentsMagnitude[index] = 1;
  3974. this.setNeighborsSignificance(i, j, index);
  3975. processingFlags[index] |= firstMagnitudeBitMask;
  3976. }
  3977. bitsDecoded[index]++;
  3978. processingFlags[index] |= processedMask;
  3979. }
  3980. }
  3981. }
  3982. },
  3983. decodeSignBit: function BitModel_decodeSignBit(row, column, index) {
  3984. var width = this.width,
  3985. height = this.height;
  3986. var coefficentsMagnitude = this.coefficentsMagnitude;
  3987. var coefficentsSign = this.coefficentsSign;
  3988. var contribution, sign0, sign1, significance1;
  3989. var contextLabel, decoded;
  3990. significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;
  3991. if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {
  3992. sign1 = coefficentsSign[index + 1];
  3993. if (significance1) {
  3994. sign0 = coefficentsSign[index - 1];
  3995. contribution = 1 - sign1 - sign0;
  3996. } else {
  3997. contribution = 1 - sign1 - sign1;
  3998. }
  3999. } else if (significance1) {
  4000. sign0 = coefficentsSign[index - 1];
  4001. contribution = 1 - sign0 - sign0;
  4002. } else {
  4003. contribution = 0;
  4004. }
  4005. var horizontalContribution = 3 * contribution;
  4006. significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;
  4007. if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {
  4008. sign1 = coefficentsSign[index + width];
  4009. if (significance1) {
  4010. sign0 = coefficentsSign[index - width];
  4011. contribution = 1 - sign1 - sign0 + horizontalContribution;
  4012. } else {
  4013. contribution = 1 - sign1 - sign1 + horizontalContribution;
  4014. }
  4015. } else if (significance1) {
  4016. sign0 = coefficentsSign[index - width];
  4017. contribution = 1 - sign0 - sign0 + horizontalContribution;
  4018. } else {
  4019. contribution = horizontalContribution;
  4020. }
  4021. if (contribution >= 0) {
  4022. contextLabel = 9 + contribution;
  4023. decoded = this.decoder.readBit(this.contexts, contextLabel);
  4024. } else {
  4025. contextLabel = 9 - contribution;
  4026. decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;
  4027. }
  4028. return decoded;
  4029. },
  4030. runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() {
  4031. var decoder = this.decoder;
  4032. var width = this.width,
  4033. height = this.height;
  4034. var coefficentsMagnitude = this.coefficentsMagnitude;
  4035. var neighborsSignificance = this.neighborsSignificance;
  4036. var contexts = this.contexts;
  4037. var bitsDecoded = this.bitsDecoded;
  4038. var processingFlags = this.processingFlags;
  4039. var processedMask = 1;
  4040. var firstMagnitudeBitMask = 2;
  4041. var length = width * height;
  4042. var width4 = width * 4;
  4043. for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {
  4044. indexNext = Math.min(length, index0 + width4);
  4045. for (var j = 0; j < width; j++) {
  4046. for (var index = index0 + j; index < indexNext; index += width) {
  4047. if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
  4048. continue;
  4049. }
  4050. var contextLabel = 16;
  4051. if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {
  4052. processingFlags[index] ^= firstMagnitudeBitMask;
  4053. var significance = neighborsSignificance[index] & 127;
  4054. contextLabel = significance === 0 ? 15 : 14;
  4055. }
  4056. var bit = decoder.readBit(contexts, contextLabel);
  4057. coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit;
  4058. bitsDecoded[index]++;
  4059. processingFlags[index] |= processedMask;
  4060. }
  4061. }
  4062. }
  4063. },
  4064. runCleanupPass: function BitModel_runCleanupPass() {
  4065. var decoder = this.decoder;
  4066. var width = this.width,
  4067. height = this.height;
  4068. var neighborsSignificance = this.neighborsSignificance;
  4069. var coefficentsMagnitude = this.coefficentsMagnitude;
  4070. var coefficentsSign = this.coefficentsSign;
  4071. var contexts = this.contexts;
  4072. var labels = this.contextLabelTable;
  4073. var bitsDecoded = this.bitsDecoded;
  4074. var processingFlags = this.processingFlags;
  4075. var processedMask = 1;
  4076. var firstMagnitudeBitMask = 2;
  4077. var oneRowDown = width;
  4078. var twoRowsDown = width * 2;
  4079. var threeRowsDown = width * 3;
  4080. var iNext;
  4081. for (var i0 = 0; i0 < height; i0 = iNext) {
  4082. iNext = Math.min(i0 + 4, height);
  4083. var indexBase = i0 * width;
  4084. var checkAllEmpty = i0 + 3 < height;
  4085. for (var j = 0; j < width; j++) {
  4086. var index0 = indexBase + j;
  4087. var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0;
  4088. var i1 = 0,
  4089. index = index0;
  4090. var i = i0,
  4091. sign;
  4092. if (allEmpty) {
  4093. var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT);
  4094. if (!hasSignificantCoefficent) {
  4095. bitsDecoded[index0]++;
  4096. bitsDecoded[index0 + oneRowDown]++;
  4097. bitsDecoded[index0 + twoRowsDown]++;
  4098. bitsDecoded[index0 + threeRowsDown]++;
  4099. continue;
  4100. }
  4101. i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
  4102. if (i1 !== 0) {
  4103. i = i0 + i1;
  4104. index += i1 * width;
  4105. }
  4106. sign = this.decodeSignBit(i, j, index);
  4107. coefficentsSign[index] = sign;
  4108. coefficentsMagnitude[index] = 1;
  4109. this.setNeighborsSignificance(i, j, index);
  4110. processingFlags[index] |= firstMagnitudeBitMask;
  4111. index = index0;
  4112. for (var i2 = i0; i2 <= i; i2++, index += width) {
  4113. bitsDecoded[index]++;
  4114. }
  4115. i1++;
  4116. }
  4117. for (i = i0 + i1; i < iNext; i++, index += width) {
  4118. if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
  4119. continue;
  4120. }
  4121. var contextLabel = labels[neighborsSignificance[index]];
  4122. var decision = decoder.readBit(contexts, contextLabel);
  4123. if (decision === 1) {
  4124. sign = this.decodeSignBit(i, j, index);
  4125. coefficentsSign[index] = sign;
  4126. coefficentsMagnitude[index] = 1;
  4127. this.setNeighborsSignificance(i, j, index);
  4128. processingFlags[index] |= firstMagnitudeBitMask;
  4129. }
  4130. bitsDecoded[index]++;
  4131. }
  4132. }
  4133. }
  4134. },
  4135. checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {
  4136. var decoder = this.decoder;
  4137. var contexts = this.contexts;
  4138. var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
  4139. if (symbol !== 0xA) {
  4140. error('JPX Error: Invalid segmentation symbol');
  4141. }
  4142. }
  4143. };
  4144. return BitModel;
  4145. }();
  4146. var Transform = function TransformClosure() {
  4147. function Transform() {}
  4148. Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) {
  4149. var ll = subbands[0];
  4150. for (var i = 1, ii = subbands.length; i < ii; i++) {
  4151. ll = this.iterate(ll, subbands[i], u0, v0);
  4152. }
  4153. return ll;
  4154. };
  4155. Transform.prototype.extend = function extend(buffer, offset, size) {
  4156. var i1 = offset - 1,
  4157. j1 = offset + 1;
  4158. var i2 = offset + size - 2,
  4159. j2 = offset + size;
  4160. buffer[i1--] = buffer[j1++];
  4161. buffer[j2++] = buffer[i2--];
  4162. buffer[i1--] = buffer[j1++];
  4163. buffer[j2++] = buffer[i2--];
  4164. buffer[i1--] = buffer[j1++];
  4165. buffer[j2++] = buffer[i2--];
  4166. buffer[i1] = buffer[j1];
  4167. buffer[j2] = buffer[i2];
  4168. };
  4169. Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) {
  4170. var llWidth = ll.width,
  4171. llHeight = ll.height,
  4172. llItems = ll.items;
  4173. var width = hl_lh_hh.width;
  4174. var height = hl_lh_hh.height;
  4175. var items = hl_lh_hh.items;
  4176. var i, j, k, l, u, v;
  4177. for (k = 0, i = 0; i < llHeight; i++) {
  4178. l = i * 2 * width;
  4179. for (j = 0; j < llWidth; j++, k++, l += 2) {
  4180. items[l] = llItems[k];
  4181. }
  4182. }
  4183. llItems = ll.items = null;
  4184. var bufferPadding = 4;
  4185. var rowBuffer = new Float32Array(width + 2 * bufferPadding);
  4186. if (width === 1) {
  4187. if ((u0 & 1) !== 0) {
  4188. for (v = 0, k = 0; v < height; v++, k += width) {
  4189. items[k] *= 0.5;
  4190. }
  4191. }
  4192. } else {
  4193. for (v = 0, k = 0; v < height; v++, k += width) {
  4194. rowBuffer.set(items.subarray(k, k + width), bufferPadding);
  4195. this.extend(rowBuffer, bufferPadding, width);
  4196. this.filter(rowBuffer, bufferPadding, width);
  4197. items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);
  4198. }
  4199. }
  4200. var numBuffers = 16;
  4201. var colBuffers = [];
  4202. for (i = 0; i < numBuffers; i++) {
  4203. colBuffers.push(new Float32Array(height + 2 * bufferPadding));
  4204. }
  4205. var b,
  4206. currentBuffer = 0;
  4207. ll = bufferPadding + height;
  4208. if (height === 1) {
  4209. if ((v0 & 1) !== 0) {
  4210. for (u = 0; u < width; u++) {
  4211. items[u] *= 0.5;
  4212. }
  4213. }
  4214. } else {
  4215. for (u = 0; u < width; u++) {
  4216. if (currentBuffer === 0) {
  4217. numBuffers = Math.min(width - u, numBuffers);
  4218. for (k = u, l = bufferPadding; l < ll; k += width, l++) {
  4219. for (b = 0; b < numBuffers; b++) {
  4220. colBuffers[b][l] = items[k + b];
  4221. }
  4222. }
  4223. currentBuffer = numBuffers;
  4224. }
  4225. currentBuffer--;
  4226. var buffer = colBuffers[currentBuffer];
  4227. this.extend(buffer, bufferPadding, height);
  4228. this.filter(buffer, bufferPadding, height);
  4229. if (currentBuffer === 0) {
  4230. k = u - numBuffers + 1;
  4231. for (l = bufferPadding; l < ll; k += width, l++) {
  4232. for (b = 0; b < numBuffers; b++) {
  4233. items[k + b] = colBuffers[b][l];
  4234. }
  4235. }
  4236. }
  4237. }
  4238. }
  4239. return {
  4240. width: width,
  4241. height: height,
  4242. items: items
  4243. };
  4244. };
  4245. return Transform;
  4246. }();
  4247. var IrreversibleTransform = function IrreversibleTransformClosure() {
  4248. function IrreversibleTransform() {
  4249. Transform.call(this);
  4250. }
  4251. IrreversibleTransform.prototype = Object.create(Transform.prototype);
  4252. IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) {
  4253. var len = length >> 1;
  4254. offset = offset | 0;
  4255. var j, n, current, next;
  4256. var alpha = -1.586134342059924;
  4257. var beta = -0.052980118572961;
  4258. var gamma = 0.882911075530934;
  4259. var delta = 0.443506852043971;
  4260. var K = 1.230174104914001;
  4261. var K_ = 1 / K;
  4262. j = offset - 3;
  4263. for (n = len + 4; n--; j += 2) {
  4264. x[j] *= K_;
  4265. }
  4266. j = offset - 2;
  4267. current = delta * x[j - 1];
  4268. for (n = len + 3; n--; j += 2) {
  4269. next = delta * x[j + 1];
  4270. x[j] = K * x[j] - current - next;
  4271. if (n--) {
  4272. j += 2;
  4273. current = delta * x[j + 1];
  4274. x[j] = K * x[j] - current - next;
  4275. } else {
  4276. break;
  4277. }
  4278. }
  4279. j = offset - 1;
  4280. current = gamma * x[j - 1];
  4281. for (n = len + 2; n--; j += 2) {
  4282. next = gamma * x[j + 1];
  4283. x[j] -= current + next;
  4284. if (n--) {
  4285. j += 2;
  4286. current = gamma * x[j + 1];
  4287. x[j] -= current + next;
  4288. } else {
  4289. break;
  4290. }
  4291. }
  4292. j = offset;
  4293. current = beta * x[j - 1];
  4294. for (n = len + 1; n--; j += 2) {
  4295. next = beta * x[j + 1];
  4296. x[j] -= current + next;
  4297. if (n--) {
  4298. j += 2;
  4299. current = beta * x[j + 1];
  4300. x[j] -= current + next;
  4301. } else {
  4302. break;
  4303. }
  4304. }
  4305. if (len !== 0) {
  4306. j = offset + 1;
  4307. current = alpha * x[j - 1];
  4308. for (n = len; n--; j += 2) {
  4309. next = alpha * x[j + 1];
  4310. x[j] -= current + next;
  4311. if (n--) {
  4312. j += 2;
  4313. current = alpha * x[j + 1];
  4314. x[j] -= current + next;
  4315. } else {
  4316. break;
  4317. }
  4318. }
  4319. }
  4320. };
  4321. return IrreversibleTransform;
  4322. }();
  4323. var ReversibleTransform = function ReversibleTransformClosure() {
  4324. function ReversibleTransform() {
  4325. Transform.call(this);
  4326. }
  4327. ReversibleTransform.prototype = Object.create(Transform.prototype);
  4328. ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) {
  4329. var len = length >> 1;
  4330. offset = offset | 0;
  4331. var j, n;
  4332. for (j = offset, n = len + 1; n--; j += 2) {
  4333. x[j] -= x[j - 1] + x[j + 1] + 2 >> 2;
  4334. }
  4335. for (j = offset + 1, n = len; n--; j += 2) {
  4336. x[j] += x[j - 1] + x[j + 1] >> 1;
  4337. }
  4338. };
  4339. return ReversibleTransform;
  4340. }();
  4341. return JpxImage;
  4342. }();
  4343. "use strict";
  4344. var Jbig2Image = function Jbig2ImageClosure() {
  4345. function ContextCache() {}
  4346. ContextCache.prototype = {
  4347. getContexts: function (id) {
  4348. if (id in this) {
  4349. return this[id];
  4350. }
  4351. return this[id] = new Int8Array(1 << 16);
  4352. }
  4353. };
  4354. function DecodingContext(data, start, end) {
  4355. this.data = data;
  4356. this.start = start;
  4357. this.end = end;
  4358. }
  4359. DecodingContext.prototype = {
  4360. get decoder() {
  4361. var decoder = new ArithmeticDecoder(this.data, this.start, this.end);
  4362. return shadow(this, 'decoder', decoder);
  4363. },
  4364. get contextCache() {
  4365. var cache = new ContextCache();
  4366. return shadow(this, 'contextCache', cache);
  4367. }
  4368. };
  4369. function decodeInteger(contextCache, procedure, decoder) {
  4370. var contexts = contextCache.getContexts(procedure);
  4371. var prev = 1;
  4372. function readBits(length) {
  4373. var v = 0;
  4374. for (var i = 0; i < length; i++) {
  4375. var bit = decoder.readBit(contexts, prev);
  4376. prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;
  4377. v = v << 1 | bit;
  4378. }
  4379. return v >>> 0;
  4380. }
  4381. var sign = readBits(1);
  4382. var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);
  4383. return sign === 0 ? value : value > 0 ? -value : null;
  4384. }
  4385. function decodeIAID(contextCache, decoder, codeLength) {
  4386. var contexts = contextCache.getContexts('IAID');
  4387. var prev = 1;
  4388. for (var i = 0; i < codeLength; i++) {
  4389. var bit = decoder.readBit(contexts, prev);
  4390. prev = prev << 1 | bit;
  4391. }
  4392. if (codeLength < 31) {
  4393. return prev & (1 << codeLength) - 1;
  4394. }
  4395. return prev & 0x7FFFFFFF;
  4396. }
  4397. var SegmentTypes = ['SymbolDictionary', null, null, null, 'IntermediateTextRegion', null, 'ImmediateTextRegion', 'ImmediateLosslessTextRegion', null, null, null, null, null, null, null, null, 'patternDictionary', null, null, null, 'IntermediateHalftoneRegion', null, 'ImmediateHalftoneRegion', 'ImmediateLosslessHalftoneRegion', null, null, null, null, null, null, null, null, null, null, null, null, 'IntermediateGenericRegion', null, 'ImmediateGenericRegion', 'ImmediateLosslessGenericRegion', 'IntermediateGenericRefinementRegion', null, 'ImmediateGenericRefinementRegion', 'ImmediateLosslessGenericRefinementRegion', null, null, null, null, 'PageInformation', 'EndOfPage', 'EndOfStripe', 'EndOfFile', 'Profiles', 'Tables', null, null, null, null, null, null, null, null, 'Extension'];
  4398. var CodingTemplates = [[{
  4399. x: -1,
  4400. y: -2
  4401. }, {
  4402. x: 0,
  4403. y: -2
  4404. }, {
  4405. x: 1,
  4406. y: -2
  4407. }, {
  4408. x: -2,
  4409. y: -1
  4410. }, {
  4411. x: -1,
  4412. y: -1
  4413. }, {
  4414. x: 0,
  4415. y: -1
  4416. }, {
  4417. x: 1,
  4418. y: -1
  4419. }, {
  4420. x: 2,
  4421. y: -1
  4422. }, {
  4423. x: -4,
  4424. y: 0
  4425. }, {
  4426. x: -3,
  4427. y: 0
  4428. }, {
  4429. x: -2,
  4430. y: 0
  4431. }, {
  4432. x: -1,
  4433. y: 0
  4434. }], [{
  4435. x: -1,
  4436. y: -2
  4437. }, {
  4438. x: 0,
  4439. y: -2
  4440. }, {
  4441. x: 1,
  4442. y: -2
  4443. }, {
  4444. x: 2,
  4445. y: -2
  4446. }, {
  4447. x: -2,
  4448. y: -1
  4449. }, {
  4450. x: -1,
  4451. y: -1
  4452. }, {
  4453. x: 0,
  4454. y: -1
  4455. }, {
  4456. x: 1,
  4457. y: -1
  4458. }, {
  4459. x: 2,
  4460. y: -1
  4461. }, {
  4462. x: -3,
  4463. y: 0
  4464. }, {
  4465. x: -2,
  4466. y: 0
  4467. }, {
  4468. x: -1,
  4469. y: 0
  4470. }], [{
  4471. x: -1,
  4472. y: -2
  4473. }, {
  4474. x: 0,
  4475. y: -2
  4476. }, {
  4477. x: 1,
  4478. y: -2
  4479. }, {
  4480. x: -2,
  4481. y: -1
  4482. }, {
  4483. x: -1,
  4484. y: -1
  4485. }, {
  4486. x: 0,
  4487. y: -1
  4488. }, {
  4489. x: 1,
  4490. y: -1
  4491. }, {
  4492. x: -2,
  4493. y: 0
  4494. }, {
  4495. x: -1,
  4496. y: 0
  4497. }], [{
  4498. x: -3,
  4499. y: -1
  4500. }, {
  4501. x: -2,
  4502. y: -1
  4503. }, {
  4504. x: -1,
  4505. y: -1
  4506. }, {
  4507. x: 0,
  4508. y: -1
  4509. }, {
  4510. x: 1,
  4511. y: -1
  4512. }, {
  4513. x: -4,
  4514. y: 0
  4515. }, {
  4516. x: -3,
  4517. y: 0
  4518. }, {
  4519. x: -2,
  4520. y: 0
  4521. }, {
  4522. x: -1,
  4523. y: 0
  4524. }]];
  4525. var RefinementTemplates = [{
  4526. coding: [{
  4527. x: 0,
  4528. y: -1
  4529. }, {
  4530. x: 1,
  4531. y: -1
  4532. }, {
  4533. x: -1,
  4534. y: 0
  4535. }],
  4536. reference: [{
  4537. x: 0,
  4538. y: -1
  4539. }, {
  4540. x: 1,
  4541. y: -1
  4542. }, {
  4543. x: -1,
  4544. y: 0
  4545. }, {
  4546. x: 0,
  4547. y: 0
  4548. }, {
  4549. x: 1,
  4550. y: 0
  4551. }, {
  4552. x: -1,
  4553. y: 1
  4554. }, {
  4555. x: 0,
  4556. y: 1
  4557. }, {
  4558. x: 1,
  4559. y: 1
  4560. }]
  4561. }, {
  4562. coding: [{
  4563. x: -1,
  4564. y: -1
  4565. }, {
  4566. x: 0,
  4567. y: -1
  4568. }, {
  4569. x: 1,
  4570. y: -1
  4571. }, {
  4572. x: -1,
  4573. y: 0
  4574. }],
  4575. reference: [{
  4576. x: 0,
  4577. y: -1
  4578. }, {
  4579. x: -1,
  4580. y: 0
  4581. }, {
  4582. x: 0,
  4583. y: 0
  4584. }, {
  4585. x: 1,
  4586. y: 0
  4587. }, {
  4588. x: 0,
  4589. y: 1
  4590. }, {
  4591. x: 1,
  4592. y: 1
  4593. }]
  4594. }];
  4595. var ReusedContexts = [0x9B25, 0x0795, 0x00E5, 0x0195];
  4596. var RefinementReusedContexts = [0x0020, 0x0008];
  4597. function decodeBitmapTemplate0(width, height, decodingContext) {
  4598. var decoder = decodingContext.decoder;
  4599. var contexts = decodingContext.contextCache.getContexts('GB');
  4600. var contextLabel,
  4601. i,
  4602. j,
  4603. pixel,
  4604. row,
  4605. row1,
  4606. row2,
  4607. bitmap = [];
  4608. var OLD_PIXEL_MASK = 0x7BF7;
  4609. for (i = 0; i < height; i++) {
  4610. row = bitmap[i] = new Uint8Array(width);
  4611. row1 = i < 1 ? row : bitmap[i - 1];
  4612. row2 = i < 2 ? row : bitmap[i - 2];
  4613. contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;
  4614. for (j = 0; j < width; j++) {
  4615. row[j] = pixel = decoder.readBit(contexts, contextLabel);
  4616. contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;
  4617. }
  4618. }
  4619. return bitmap;
  4620. }
  4621. function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {
  4622. if (mmr) {
  4623. error('JBIG2 error: MMR encoding is not supported');
  4624. }
  4625. if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {
  4626. return decodeBitmapTemplate0(width, height, decodingContext);
  4627. }
  4628. var useskip = !!skip;
  4629. var template = CodingTemplates[templateIndex].concat(at);
  4630. template.sort(function (a, b) {
  4631. return a.y - b.y || a.x - b.x;
  4632. });
  4633. var templateLength = template.length;
  4634. var templateX = new Int8Array(templateLength);
  4635. var templateY = new Int8Array(templateLength);
  4636. var changingTemplateEntries = [];
  4637. var reuseMask = 0,
  4638. minX = 0,
  4639. maxX = 0,
  4640. minY = 0;
  4641. var c, k;
  4642. for (k = 0; k < templateLength; k++) {
  4643. templateX[k] = template[k].x;
  4644. templateY[k] = template[k].y;
  4645. minX = Math.min(minX, template[k].x);
  4646. maxX = Math.max(maxX, template[k].x);
  4647. minY = Math.min(minY, template[k].y);
  4648. if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {
  4649. reuseMask |= 1 << templateLength - 1 - k;
  4650. } else {
  4651. changingTemplateEntries.push(k);
  4652. }
  4653. }
  4654. var changingEntriesLength = changingTemplateEntries.length;
  4655. var changingTemplateX = new Int8Array(changingEntriesLength);
  4656. var changingTemplateY = new Int8Array(changingEntriesLength);
  4657. var changingTemplateBit = new Uint16Array(changingEntriesLength);
  4658. for (c = 0; c < changingEntriesLength; c++) {
  4659. k = changingTemplateEntries[c];
  4660. changingTemplateX[c] = template[k].x;
  4661. changingTemplateY[c] = template[k].y;
  4662. changingTemplateBit[c] = 1 << templateLength - 1 - k;
  4663. }
  4664. var sbb_left = -minX;
  4665. var sbb_top = -minY;
  4666. var sbb_right = width - maxX;
  4667. var pseudoPixelContext = ReusedContexts[templateIndex];
  4668. var row = new Uint8Array(width);
  4669. var bitmap = [];
  4670. var decoder = decodingContext.decoder;
  4671. var contexts = decodingContext.contextCache.getContexts('GB');
  4672. var ltp = 0,
  4673. j,
  4674. i0,
  4675. j0,
  4676. contextLabel = 0,
  4677. bit,
  4678. shift;
  4679. for (var i = 0; i < height; i++) {
  4680. if (prediction) {
  4681. var sltp = decoder.readBit(contexts, pseudoPixelContext);
  4682. ltp ^= sltp;
  4683. if (ltp) {
  4684. bitmap.push(row);
  4685. continue;
  4686. }
  4687. }
  4688. row = new Uint8Array(row);
  4689. bitmap.push(row);
  4690. for (j = 0; j < width; j++) {
  4691. if (useskip && skip[i][j]) {
  4692. row[j] = 0;
  4693. continue;
  4694. }
  4695. if (j >= sbb_left && j < sbb_right && i >= sbb_top) {
  4696. contextLabel = contextLabel << 1 & reuseMask;
  4697. for (k = 0; k < changingEntriesLength; k++) {
  4698. i0 = i + changingTemplateY[k];
  4699. j0 = j + changingTemplateX[k];
  4700. bit = bitmap[i0][j0];
  4701. if (bit) {
  4702. bit = changingTemplateBit[k];
  4703. contextLabel |= bit;
  4704. }
  4705. }
  4706. } else {
  4707. contextLabel = 0;
  4708. shift = templateLength - 1;
  4709. for (k = 0; k < templateLength; k++, shift--) {
  4710. j0 = j + templateX[k];
  4711. if (j0 >= 0 && j0 < width) {
  4712. i0 = i + templateY[k];
  4713. if (i0 >= 0) {
  4714. bit = bitmap[i0][j0];
  4715. if (bit) {
  4716. contextLabel |= bit << shift;
  4717. }
  4718. }
  4719. }
  4720. }
  4721. }
  4722. var pixel = decoder.readBit(contexts, contextLabel);
  4723. row[j] = pixel;
  4724. }
  4725. }
  4726. return bitmap;
  4727. }
  4728. function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {
  4729. var codingTemplate = RefinementTemplates[templateIndex].coding;
  4730. if (templateIndex === 0) {
  4731. codingTemplate = codingTemplate.concat([at[0]]);
  4732. }
  4733. var codingTemplateLength = codingTemplate.length;
  4734. var codingTemplateX = new Int32Array(codingTemplateLength);
  4735. var codingTemplateY = new Int32Array(codingTemplateLength);
  4736. var k;
  4737. for (k = 0; k < codingTemplateLength; k++) {
  4738. codingTemplateX[k] = codingTemplate[k].x;
  4739. codingTemplateY[k] = codingTemplate[k].y;
  4740. }
  4741. var referenceTemplate = RefinementTemplates[templateIndex].reference;
  4742. if (templateIndex === 0) {
  4743. referenceTemplate = referenceTemplate.concat([at[1]]);
  4744. }
  4745. var referenceTemplateLength = referenceTemplate.length;
  4746. var referenceTemplateX = new Int32Array(referenceTemplateLength);
  4747. var referenceTemplateY = new Int32Array(referenceTemplateLength);
  4748. for (k = 0; k < referenceTemplateLength; k++) {
  4749. referenceTemplateX[k] = referenceTemplate[k].x;
  4750. referenceTemplateY[k] = referenceTemplate[k].y;
  4751. }
  4752. var referenceWidth = referenceBitmap[0].length;
  4753. var referenceHeight = referenceBitmap.length;
  4754. var pseudoPixelContext = RefinementReusedContexts[templateIndex];
  4755. var bitmap = [];
  4756. var decoder = decodingContext.decoder;
  4757. var contexts = decodingContext.contextCache.getContexts('GR');
  4758. var ltp = 0;
  4759. for (var i = 0; i < height; i++) {
  4760. if (prediction) {
  4761. var sltp = decoder.readBit(contexts, pseudoPixelContext);
  4762. ltp ^= sltp;
  4763. if (ltp) {
  4764. error('JBIG2 error: prediction is not supported');
  4765. }
  4766. }
  4767. var row = new Uint8Array(width);
  4768. bitmap.push(row);
  4769. for (var j = 0; j < width; j++) {
  4770. var i0, j0;
  4771. var contextLabel = 0;
  4772. for (k = 0; k < codingTemplateLength; k++) {
  4773. i0 = i + codingTemplateY[k];
  4774. j0 = j + codingTemplateX[k];
  4775. if (i0 < 0 || j0 < 0 || j0 >= width) {
  4776. contextLabel <<= 1;
  4777. } else {
  4778. contextLabel = contextLabel << 1 | bitmap[i0][j0];
  4779. }
  4780. }
  4781. for (k = 0; k < referenceTemplateLength; k++) {
  4782. i0 = i + referenceTemplateY[k] + offsetY;
  4783. j0 = j + referenceTemplateX[k] + offsetX;
  4784. if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {
  4785. contextLabel <<= 1;
  4786. } else {
  4787. contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];
  4788. }
  4789. }
  4790. var pixel = decoder.readBit(contexts, contextLabel);
  4791. row[j] = pixel;
  4792. }
  4793. }
  4794. return bitmap;
  4795. }
  4796. function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext) {
  4797. if (huffman) {
  4798. error('JBIG2 error: huffman is not supported');
  4799. }
  4800. var newSymbols = [];
  4801. var currentHeight = 0;
  4802. var symbolCodeLength = log2(symbols.length + numberOfNewSymbols);
  4803. var decoder = decodingContext.decoder;
  4804. var contextCache = decodingContext.contextCache;
  4805. while (newSymbols.length < numberOfNewSymbols) {
  4806. var deltaHeight = decodeInteger(contextCache, 'IADH', decoder);
  4807. currentHeight += deltaHeight;
  4808. var currentWidth = 0;
  4809. while (true) {
  4810. var deltaWidth = decodeInteger(contextCache, 'IADW', decoder);
  4811. if (deltaWidth === null) {
  4812. break;
  4813. }
  4814. currentWidth += deltaWidth;
  4815. var bitmap;
  4816. if (refinement) {
  4817. var numberOfInstances = decodeInteger(contextCache, 'IAAI', decoder);
  4818. if (numberOfInstances > 1) {
  4819. bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext);
  4820. } else {
  4821. var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
  4822. var rdx = decodeInteger(contextCache, 'IARDX', decoder);
  4823. var rdy = decodeInteger(contextCache, 'IARDY', decoder);
  4824. var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];
  4825. bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);
  4826. }
  4827. } else {
  4828. bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext);
  4829. }
  4830. newSymbols.push(bitmap);
  4831. }
  4832. }
  4833. var exportedSymbols = [];
  4834. var flags = [],
  4835. currentFlag = false;
  4836. var totalSymbolsLength = symbols.length + numberOfNewSymbols;
  4837. while (flags.length < totalSymbolsLength) {
  4838. var runLength = decodeInteger(contextCache, 'IAEX', decoder);
  4839. while (runLength--) {
  4840. flags.push(currentFlag);
  4841. }
  4842. currentFlag = !currentFlag;
  4843. }
  4844. for (var i = 0, ii = symbols.length; i < ii; i++) {
  4845. if (flags[i]) {
  4846. exportedSymbols.push(symbols[i]);
  4847. }
  4848. }
  4849. for (var j = 0; j < numberOfNewSymbols; i++, j++) {
  4850. if (flags[i]) {
  4851. exportedSymbols.push(newSymbols[j]);
  4852. }
  4853. }
  4854. return exportedSymbols;
  4855. }
  4856. function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext) {
  4857. if (huffman) {
  4858. error('JBIG2 error: huffman is not supported');
  4859. }
  4860. var bitmap = [];
  4861. var i, row;
  4862. for (i = 0; i < height; i++) {
  4863. row = new Uint8Array(width);
  4864. if (defaultPixelValue) {
  4865. for (var j = 0; j < width; j++) {
  4866. row[j] = defaultPixelValue;
  4867. }
  4868. }
  4869. bitmap.push(row);
  4870. }
  4871. var decoder = decodingContext.decoder;
  4872. var contextCache = decodingContext.contextCache;
  4873. var stripT = -decodeInteger(contextCache, 'IADT', decoder);
  4874. var firstS = 0;
  4875. i = 0;
  4876. while (i < numberOfSymbolInstances) {
  4877. var deltaT = decodeInteger(contextCache, 'IADT', decoder);
  4878. stripT += deltaT;
  4879. var deltaFirstS = decodeInteger(contextCache, 'IAFS', decoder);
  4880. firstS += deltaFirstS;
  4881. var currentS = firstS;
  4882. do {
  4883. var currentT = stripSize === 1 ? 0 : decodeInteger(contextCache, 'IAIT', decoder);
  4884. var t = stripSize * stripT + currentT;
  4885. var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
  4886. var applyRefinement = refinement && decodeInteger(contextCache, 'IARI', decoder);
  4887. var symbolBitmap = inputSymbols[symbolId];
  4888. var symbolWidth = symbolBitmap[0].length;
  4889. var symbolHeight = symbolBitmap.length;
  4890. if (applyRefinement) {
  4891. var rdw = decodeInteger(contextCache, 'IARDW', decoder);
  4892. var rdh = decodeInteger(contextCache, 'IARDH', decoder);
  4893. var rdx = decodeInteger(contextCache, 'IARDX', decoder);
  4894. var rdy = decodeInteger(contextCache, 'IARDY', decoder);
  4895. symbolWidth += rdw;
  4896. symbolHeight += rdh;
  4897. symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);
  4898. }
  4899. var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight);
  4900. var offsetS = currentS - (referenceCorner & 2 ? symbolWidth : 0);
  4901. var s2, t2, symbolRow;
  4902. if (transposed) {
  4903. for (s2 = 0; s2 < symbolHeight; s2++) {
  4904. row = bitmap[offsetS + s2];
  4905. if (!row) {
  4906. continue;
  4907. }
  4908. symbolRow = symbolBitmap[s2];
  4909. var maxWidth = Math.min(width - offsetT, symbolWidth);
  4910. switch (combinationOperator) {
  4911. case 0:
  4912. for (t2 = 0; t2 < maxWidth; t2++) {
  4913. row[offsetT + t2] |= symbolRow[t2];
  4914. }
  4915. break;
  4916. case 2:
  4917. for (t2 = 0; t2 < maxWidth; t2++) {
  4918. row[offsetT + t2] ^= symbolRow[t2];
  4919. }
  4920. break;
  4921. default:
  4922. error('JBIG2 error: operator ' + combinationOperator + ' is not supported');
  4923. }
  4924. }
  4925. currentS += symbolHeight - 1;
  4926. } else {
  4927. for (t2 = 0; t2 < symbolHeight; t2++) {
  4928. row = bitmap[offsetT + t2];
  4929. if (!row) {
  4930. continue;
  4931. }
  4932. symbolRow = symbolBitmap[t2];
  4933. switch (combinationOperator) {
  4934. case 0:
  4935. for (s2 = 0; s2 < symbolWidth; s2++) {
  4936. row[offsetS + s2] |= symbolRow[s2];
  4937. }
  4938. break;
  4939. case 2:
  4940. for (s2 = 0; s2 < symbolWidth; s2++) {
  4941. row[offsetS + s2] ^= symbolRow[s2];
  4942. }
  4943. break;
  4944. default:
  4945. error('JBIG2 error: operator ' + combinationOperator + ' is not supported');
  4946. }
  4947. }
  4948. currentS += symbolWidth - 1;
  4949. }
  4950. i++;
  4951. var deltaS = decodeInteger(contextCache, 'IADS', decoder);
  4952. if (deltaS === null) {
  4953. break;
  4954. }
  4955. currentS += deltaS + dsOffset;
  4956. } while (true);
  4957. }
  4958. return bitmap;
  4959. }
  4960. function readSegmentHeader(data, start) {
  4961. var segmentHeader = {};
  4962. segmentHeader.number = readUint32(data, start);
  4963. var flags = data[start + 4];
  4964. var segmentType = flags & 0x3F;
  4965. if (!SegmentTypes[segmentType]) {
  4966. error('JBIG2 error: invalid segment type: ' + segmentType);
  4967. }
  4968. segmentHeader.type = segmentType;
  4969. segmentHeader.typeName = SegmentTypes[segmentType];
  4970. segmentHeader.deferredNonRetain = !!(flags & 0x80);
  4971. var pageAssociationFieldSize = !!(flags & 0x40);
  4972. var referredFlags = data[start + 5];
  4973. var referredToCount = referredFlags >> 5 & 7;
  4974. var retainBits = [referredFlags & 31];
  4975. var position = start + 6;
  4976. if (referredFlags === 7) {
  4977. referredToCount = readUint32(data, position - 1) & 0x1FFFFFFF;
  4978. position += 3;
  4979. var bytes = referredToCount + 7 >> 3;
  4980. retainBits[0] = data[position++];
  4981. while (--bytes > 0) {
  4982. retainBits.push(data[position++]);
  4983. }
  4984. } else if (referredFlags === 5 || referredFlags === 6) {
  4985. error('JBIG2 error: invalid referred-to flags');
  4986. }
  4987. segmentHeader.retainBits = retainBits;
  4988. var referredToSegmentNumberSize = segmentHeader.number <= 256 ? 1 : segmentHeader.number <= 65536 ? 2 : 4;
  4989. var referredTo = [];
  4990. var i, ii;
  4991. for (i = 0; i < referredToCount; i++) {
  4992. var number = referredToSegmentNumberSize === 1 ? data[position] : referredToSegmentNumberSize === 2 ? readUint16(data, position) : readUint32(data, position);
  4993. referredTo.push(number);
  4994. position += referredToSegmentNumberSize;
  4995. }
  4996. segmentHeader.referredTo = referredTo;
  4997. if (!pageAssociationFieldSize) {
  4998. segmentHeader.pageAssociation = data[position++];
  4999. } else {
  5000. segmentHeader.pageAssociation = readUint32(data, position);
  5001. position += 4;
  5002. }
  5003. segmentHeader.length = readUint32(data, position);
  5004. position += 4;
  5005. if (segmentHeader.length === 0xFFFFFFFF) {
  5006. if (segmentType === 38) {
  5007. var genericRegionInfo = readRegionSegmentInformation(data, position);
  5008. var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];
  5009. var genericRegionMmr = !!(genericRegionSegmentFlags & 1);
  5010. var searchPatternLength = 6;
  5011. var searchPattern = new Uint8Array(searchPatternLength);
  5012. if (!genericRegionMmr) {
  5013. searchPattern[0] = 0xFF;
  5014. searchPattern[1] = 0xAC;
  5015. }
  5016. searchPattern[2] = genericRegionInfo.height >>> 24 & 0xFF;
  5017. searchPattern[3] = genericRegionInfo.height >> 16 & 0xFF;
  5018. searchPattern[4] = genericRegionInfo.height >> 8 & 0xFF;
  5019. searchPattern[5] = genericRegionInfo.height & 0xFF;
  5020. for (i = position, ii = data.length; i < ii; i++) {
  5021. var j = 0;
  5022. while (j < searchPatternLength && searchPattern[j] === data[i + j]) {
  5023. j++;
  5024. }
  5025. if (j === searchPatternLength) {
  5026. segmentHeader.length = i + searchPatternLength;
  5027. break;
  5028. }
  5029. }
  5030. if (segmentHeader.length === 0xFFFFFFFF) {
  5031. error('JBIG2 error: segment end was not found');
  5032. }
  5033. } else {
  5034. error('JBIG2 error: invalid unknown segment length');
  5035. }
  5036. }
  5037. segmentHeader.headerEnd = position;
  5038. return segmentHeader;
  5039. }
  5040. function readSegments(header, data, start, end) {
  5041. var segments = [];
  5042. var position = start;
  5043. while (position < end) {
  5044. var segmentHeader = readSegmentHeader(data, position);
  5045. position = segmentHeader.headerEnd;
  5046. var segment = {
  5047. header: segmentHeader,
  5048. data: data
  5049. };
  5050. if (!header.randomAccess) {
  5051. segment.start = position;
  5052. position += segmentHeader.length;
  5053. segment.end = position;
  5054. }
  5055. segments.push(segment);
  5056. if (segmentHeader.type === 51) {
  5057. break;
  5058. }
  5059. }
  5060. if (header.randomAccess) {
  5061. for (var i = 0, ii = segments.length; i < ii; i++) {
  5062. segments[i].start = position;
  5063. position += segments[i].header.length;
  5064. segments[i].end = position;
  5065. }
  5066. }
  5067. return segments;
  5068. }
  5069. function readRegionSegmentInformation(data, start) {
  5070. return {
  5071. width: readUint32(data, start),
  5072. height: readUint32(data, start + 4),
  5073. x: readUint32(data, start + 8),
  5074. y: readUint32(data, start + 12),
  5075. combinationOperator: data[start + 16] & 7
  5076. };
  5077. }
  5078. var RegionSegmentInformationFieldLength = 17;
  5079. function processSegment(segment, visitor) {
  5080. var header = segment.header;
  5081. var data = segment.data,
  5082. position = segment.start,
  5083. end = segment.end;
  5084. var args, at, i, atLength;
  5085. switch (header.type) {
  5086. case 0:
  5087. var dictionary = {};
  5088. var dictionaryFlags = readUint16(data, position);
  5089. dictionary.huffman = !!(dictionaryFlags & 1);
  5090. dictionary.refinement = !!(dictionaryFlags & 2);
  5091. dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;
  5092. dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3;
  5093. dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1;
  5094. dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1;
  5095. dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);
  5096. dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);
  5097. dictionary.template = dictionaryFlags >> 10 & 3;
  5098. dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;
  5099. position += 2;
  5100. if (!dictionary.huffman) {
  5101. atLength = dictionary.template === 0 ? 4 : 1;
  5102. at = [];
  5103. for (i = 0; i < atLength; i++) {
  5104. at.push({
  5105. x: readInt8(data, position),
  5106. y: readInt8(data, position + 1)
  5107. });
  5108. position += 2;
  5109. }
  5110. dictionary.at = at;
  5111. }
  5112. if (dictionary.refinement && !dictionary.refinementTemplate) {
  5113. at = [];
  5114. for (i = 0; i < 2; i++) {
  5115. at.push({
  5116. x: readInt8(data, position),
  5117. y: readInt8(data, position + 1)
  5118. });
  5119. position += 2;
  5120. }
  5121. dictionary.refinementAt = at;
  5122. }
  5123. dictionary.numberOfExportedSymbols = readUint32(data, position);
  5124. position += 4;
  5125. dictionary.numberOfNewSymbols = readUint32(data, position);
  5126. position += 4;
  5127. args = [dictionary, header.number, header.referredTo, data, position, end];
  5128. break;
  5129. case 6:
  5130. case 7:
  5131. var textRegion = {};
  5132. textRegion.info = readRegionSegmentInformation(data, position);
  5133. position += RegionSegmentInformationFieldLength;
  5134. var textRegionSegmentFlags = readUint16(data, position);
  5135. position += 2;
  5136. textRegion.huffman = !!(textRegionSegmentFlags & 1);
  5137. textRegion.refinement = !!(textRegionSegmentFlags & 2);
  5138. textRegion.stripSize = 1 << (textRegionSegmentFlags >> 2 & 3);
  5139. textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3;
  5140. textRegion.transposed = !!(textRegionSegmentFlags & 64);
  5141. textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3;
  5142. textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;
  5143. textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;
  5144. textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;
  5145. if (textRegion.huffman) {
  5146. var textRegionHuffmanFlags = readUint16(data, position);
  5147. position += 2;
  5148. textRegion.huffmanFS = textRegionHuffmanFlags & 3;
  5149. textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;
  5150. textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3;
  5151. textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3;
  5152. textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3;
  5153. textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3;
  5154. textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;
  5155. textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 14);
  5156. }
  5157. if (textRegion.refinement && !textRegion.refinementTemplate) {
  5158. at = [];
  5159. for (i = 0; i < 2; i++) {
  5160. at.push({
  5161. x: readInt8(data, position),
  5162. y: readInt8(data, position + 1)
  5163. });
  5164. position += 2;
  5165. }
  5166. textRegion.refinementAt = at;
  5167. }
  5168. textRegion.numberOfSymbolInstances = readUint32(data, position);
  5169. position += 4;
  5170. if (textRegion.huffman) {
  5171. error('JBIG2 error: huffman is not supported');
  5172. }
  5173. args = [textRegion, header.referredTo, data, position, end];
  5174. break;
  5175. case 38:
  5176. case 39:
  5177. var genericRegion = {};
  5178. genericRegion.info = readRegionSegmentInformation(data, position);
  5179. position += RegionSegmentInformationFieldLength;
  5180. var genericRegionSegmentFlags = data[position++];
  5181. genericRegion.mmr = !!(genericRegionSegmentFlags & 1);
  5182. genericRegion.template = genericRegionSegmentFlags >> 1 & 3;
  5183. genericRegion.prediction = !!(genericRegionSegmentFlags & 8);
  5184. if (!genericRegion.mmr) {
  5185. atLength = genericRegion.template === 0 ? 4 : 1;
  5186. at = [];
  5187. for (i = 0; i < atLength; i++) {
  5188. at.push({
  5189. x: readInt8(data, position),
  5190. y: readInt8(data, position + 1)
  5191. });
  5192. position += 2;
  5193. }
  5194. genericRegion.at = at;
  5195. }
  5196. args = [genericRegion, data, position, end];
  5197. break;
  5198. case 48:
  5199. var pageInfo = {
  5200. width: readUint32(data, position),
  5201. height: readUint32(data, position + 4),
  5202. resolutionX: readUint32(data, position + 8),
  5203. resolutionY: readUint32(data, position + 12)
  5204. };
  5205. if (pageInfo.height === 0xFFFFFFFF) {
  5206. delete pageInfo.height;
  5207. }
  5208. var pageSegmentFlags = data[position + 16];
  5209. readUint16(data, position + 17);
  5210. pageInfo.lossless = !!(pageSegmentFlags & 1);
  5211. pageInfo.refinement = !!(pageSegmentFlags & 2);
  5212. pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;
  5213. pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3;
  5214. pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);
  5215. pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);
  5216. args = [pageInfo];
  5217. break;
  5218. case 49:
  5219. break;
  5220. case 50:
  5221. break;
  5222. case 51:
  5223. break;
  5224. case 62:
  5225. break;
  5226. default:
  5227. error('JBIG2 error: segment type ' + header.typeName + '(' + header.type + ') is not implemented');
  5228. }
  5229. var callbackName = 'on' + header.typeName;
  5230. if (callbackName in visitor) {
  5231. visitor[callbackName].apply(visitor, args);
  5232. }
  5233. }
  5234. function processSegments(segments, visitor) {
  5235. for (var i = 0, ii = segments.length; i < ii; i++) {
  5236. processSegment(segments[i], visitor);
  5237. }
  5238. }
  5239. function parseJbig2(data, start, end) {
  5240. var position = start;
  5241. if (data[position] !== 0x97 || data[position + 1] !== 0x4A || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0D || data[position + 5] !== 0x0A || data[position + 6] !== 0x1A || data[position + 7] !== 0x0A) {
  5242. error('JBIG2 error: invalid header');
  5243. }
  5244. var header = {};
  5245. position += 8;
  5246. var flags = data[position++];
  5247. header.randomAccess = !(flags & 1);
  5248. if (!(flags & 2)) {
  5249. header.numberOfPages = readUint32(data, position);
  5250. position += 4;
  5251. }
  5252. readSegments(header, data, position, end);
  5253. error('Not implemented');
  5254. }
  5255. function parseJbig2Chunks(chunks) {
  5256. var visitor = new SimpleSegmentVisitor();
  5257. for (var i = 0, ii = chunks.length; i < ii; i++) {
  5258. var chunk = chunks[i];
  5259. var segments = readSegments({}, chunk.data, chunk.start, chunk.end);
  5260. processSegments(segments, visitor);
  5261. }
  5262. return visitor.buffer;
  5263. }
  5264. function SimpleSegmentVisitor() {}
  5265. SimpleSegmentVisitor.prototype = {
  5266. onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {
  5267. this.currentPageInfo = info;
  5268. var rowSize = info.width + 7 >> 3;
  5269. var buffer = new Uint8Array(rowSize * info.height);
  5270. if (info.defaultPixelValue) {
  5271. for (var i = 0, ii = buffer.length; i < ii; i++) {
  5272. buffer[i] = 0xFF;
  5273. }
  5274. }
  5275. this.buffer = buffer;
  5276. },
  5277. drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {
  5278. var pageInfo = this.currentPageInfo;
  5279. var width = regionInfo.width,
  5280. height = regionInfo.height;
  5281. var rowSize = pageInfo.width + 7 >> 3;
  5282. var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;
  5283. var buffer = this.buffer;
  5284. var mask0 = 128 >> (regionInfo.x & 7);
  5285. var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);
  5286. var i, j, mask, offset;
  5287. switch (combinationOperator) {
  5288. case 0:
  5289. for (i = 0; i < height; i++) {
  5290. mask = mask0;
  5291. offset = offset0;
  5292. for (j = 0; j < width; j++) {
  5293. if (bitmap[i][j]) {
  5294. buffer[offset] |= mask;
  5295. }
  5296. mask >>= 1;
  5297. if (!mask) {
  5298. mask = 128;
  5299. offset++;
  5300. }
  5301. }
  5302. offset0 += rowSize;
  5303. }
  5304. break;
  5305. case 2:
  5306. for (i = 0; i < height; i++) {
  5307. mask = mask0;
  5308. offset = offset0;
  5309. for (j = 0; j < width; j++) {
  5310. if (bitmap[i][j]) {
  5311. buffer[offset] ^= mask;
  5312. }
  5313. mask >>= 1;
  5314. if (!mask) {
  5315. mask = 128;
  5316. offset++;
  5317. }
  5318. }
  5319. offset0 += rowSize;
  5320. }
  5321. break;
  5322. default:
  5323. error('JBIG2 error: operator ' + combinationOperator + ' is not supported');
  5324. }
  5325. },
  5326. onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {
  5327. var regionInfo = region.info;
  5328. var decodingContext = new DecodingContext(data, start, end);
  5329. var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);
  5330. this.drawBitmap(regionInfo, bitmap);
  5331. },
  5332. onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {
  5333. this.onImmediateGenericRegion.apply(this, arguments);
  5334. },
  5335. onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {
  5336. var huffmanTables;
  5337. if (dictionary.huffman) {
  5338. error('JBIG2 error: huffman is not supported');
  5339. }
  5340. var symbols = this.symbols;
  5341. if (!symbols) {
  5342. this.symbols = symbols = {};
  5343. }
  5344. var inputSymbols = [];
  5345. for (var i = 0, ii = referredSegments.length; i < ii; i++) {
  5346. inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]);
  5347. }
  5348. var decodingContext = new DecodingContext(data, start, end);
  5349. symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext);
  5350. },
  5351. onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {
  5352. var regionInfo = region.info;
  5353. var huffmanTables;
  5354. var symbols = this.symbols;
  5355. var inputSymbols = [];
  5356. for (var i = 0, ii = referredSegments.length; i < ii; i++) {
  5357. inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]);
  5358. }
  5359. var symbolCodeLength = log2(inputSymbols.length);
  5360. var decodingContext = new DecodingContext(data, start, end);
  5361. var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext);
  5362. this.drawBitmap(regionInfo, bitmap);
  5363. },
  5364. onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {
  5365. this.onImmediateTextRegion.apply(this, arguments);
  5366. }
  5367. };
  5368. function Jbig2Image() {}
  5369. Jbig2Image.prototype = {
  5370. parseChunks: function Jbig2Image_parseChunks(chunks) {
  5371. return parseJbig2Chunks(chunks);
  5372. }
  5373. };
  5374. return Jbig2Image;
  5375. }();
  5376. function log2(x) {
  5377. var n = 1, i = 0;
  5378. while (x > n) {
  5379. n <<= 1;
  5380. i++;
  5381. }
  5382. return i;
  5383. }
  5384. function readInt8(data, start) {
  5385. return data[start] << 24 >> 24;
  5386. }
  5387. function readUint16(data, offset) {
  5388. return data[offset] << 8 | data[offset + 1];
  5389. }
  5390. function readUint32(data, offset) {
  5391. return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;
  5392. }
  5393. function shadow(obj, prop, value) {
  5394. Object.defineProperty(obj, prop, {
  5395. value: value,
  5396. enumerable: true,
  5397. configurable: true,
  5398. writable: false
  5399. });
  5400. return value;
  5401. }
  5402. var error = function() {
  5403. console.error.apply(console, arguments);
  5404. throw new Error("PDFJS error: " + arguments[0]);
  5405. };
  5406. var warn = function() {
  5407. console.warn.apply(console, arguments);
  5408. };
  5409. var info = function() {
  5410. console.info.apply(console, arguments);
  5411. };
  5412. Jbig2Image.prototype.parse = function parseJbig2(data) {
  5413. var position = 0, end = data.length;
  5414. if (data[position] !== 151 || data[position + 1] !== 74 || data[position + 2] !== 66 || data[position + 3] !== 50 || data[position + 4] !== 13 || data[position + 5] !== 10 || data[position + 6] !== 26 || data[position + 7] !== 10) {
  5415. error("JBIG2 error: invalid header");
  5416. }
  5417. var header = {};
  5418. position += 8;
  5419. var flags = data[position++];
  5420. header.randomAccess = !(flags & 1);
  5421. if (!(flags & 2)) {
  5422. header.numberOfPages = readUint32(data, position);
  5423. position += 4;
  5424. }
  5425. var visitor = this.parseChunks([ {
  5426. data: data,
  5427. start: position,
  5428. end: end
  5429. } ]);
  5430. var width = visitor.currentPageInfo.width;
  5431. var height = visitor.currentPageInfo.height;
  5432. var bitPacked = visitor.buffer;
  5433. var data = new Uint8Array(width * height);
  5434. var q = 0, k = 0;
  5435. for (var i = 0; i < height; i++) {
  5436. var mask = 0, buffer;
  5437. for (var j = 0; j < width; j++) {
  5438. if (!mask) {
  5439. mask = 128;
  5440. buffer = bitPacked[k++];
  5441. }
  5442. data[q++] = buffer & mask ? 0 : 255;
  5443. mask >>= 1;
  5444. }
  5445. }
  5446. this.width = width;
  5447. this.height = height;
  5448. this.data = data;
  5449. };
  5450. PDFJS.JpegImage = JpegImage;
  5451. PDFJS.JpxImage = JpxImage;
  5452. PDFJS.Jbig2Image = Jbig2Image;
  5453. })(PDFJS || (PDFJS = {}));
  5454. ;(function(){var o,X=0,e=null,n=null;o=window.FFT={};var f={o:function(G){if(G!==0&&(G&G-1)===0){X=G;
  5455. f.B();f.q();f.i()}else{throw new Error("init: radix-2 required")}},X:function(G,B){f.G(G,B,1)},e:function(G,B){var j=1/X;
  5456. f.G(G,B,-1);for(var q=0;q<X;q++){G[q]*=j;B[q]*=j}},n:function(G,B){var j=[],q=[],i=0;for(var m=0;m<X;
  5457. m++){i=m*X;for(var Z=0;Z<X;Z++){j[Z]=G[Z+i];q[Z]=B[Z+i]}f.X(j,q);for(var p=0;p<X;p++){G[p+i]=j[p];B[p+i]=q[p]}}for(var C=0;
  5458. C<X;C++){for(var a=0;a<X;a++){i=C+a*X;j[a]=G[i];q[a]=B[i]}f.X(j,q);for(var r=0;r<X;r++){i=C+r*X;G[i]=j[r];
  5459. B[i]=q[r]}}},f:function(G,B){var j=[],q=[],i=0;for(var m=0;m<X;m++){i=m*X;for(var Z=0;Z<X;Z++){j[Z]=G[Z+i];
  5460. q[Z]=B[Z+i]}f.e(j,q);for(var p=0;p<X;p++){G[p+i]=j[p];B[p+i]=q[p]}}for(var C=0;C<X;C++){for(var a=0;
  5461. a<X;a++){i=C+a*X;j[a]=G[i];q[a]=B[i]}f.e(j,q);for(var r=0;r<X;r++){i=C+r*X;G[i]=j[r];B[i]=q[r]}}},G:function(G,B,j){var q,i,m,Z,p,C,a,r,M,R=X>>2;
  5462. for(var P=0;P<X;P++){Z=e[P];if(P<Z){p=G[P];G[P]=G[Z];G[Z]=p;p=B[P];B[P]=B[Z];B[Z]=p}}for(var y=1;y<X;
  5463. y<<=1){i=0;q=X/(y<<1);for(var x=0;x<y;x++){C=n[i+R];a=j*n[i];for(var t=x;t<X;t+=y<<1){m=t+y;r=C*G[m]+a*B[m];
  5464. M=C*B[m]-a*G[m];G[m]=G[t]-r;G[t]+=r;B[m]=B[t]-M;B[t]+=M}i+=q}}},B:function(){var G=Uint32Array;if(X<=256)G=Uint8Array;
  5465. else if(X<=65536)G=Uint16Array;e=new G(X);n=new Float64Array(X*1.25)},j:function(){},q:function(){var G=0,B=0,q=0;
  5466. e[0]=0;while(++G<X){q=X>>1;while(q<=B){B-=q;q>>=1}B+=q;e[G]=B}},i:function(){var G=X>>1,B=X>>2,j=X>>3,q=G+B,i=Math.sin(Math.PI/X),m=2*i*i,Z=Math.sqrt(m*(2-m)),p=n[B]=1,C=n[0]=0;
  5467. i=2*m;for(var a=1;a<j;a++){p-=m;m+=i*p;C+=Z;Z-=i*C;n[a]=C;n[B-a]=p}if(j!==0){n[j]=Math.sqrt(.5)}for(var r=0;
  5468. r<B;r++){n[G-r]=n[r]}for(var M=0;M<q;M++){n[M+G]=-n[M]}}};o.init=f.o;o.fft2d=f.n;o.ifft2d=f.f}.call(this));
  5469. (function(r){"object"===typeof exports&&"undefined"!==typeof module?module.exports=r():"function"===typeof define&&define.amd?define([],r):("undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:this).acorn=r()})(function(){return function a(l,f,c){function g(d,n){if(!f[d]){if(!l[d]){var e="function"==typeof require&&require;if(!n&&e)return e(d,!0);if(b)return b(d,!0);e=Error("Cannot find module '"+d+"'");throw e.code="MODULE_NOT_FOUND",e;}e=f[d]={exports:{}};
  5470. l[d][0].call(e.exports,function(b){var e=l[d][1][b];return g(e?e:b)},e,e.exports,a,l,f,c)}return f[d].exports}for(var b="function"==typeof require&&require,d=0;d<c.length;d++)g(c[d]);return g}({1:[function(a,l,f){var c=a("./tokentype");a=a("./state").Parser.prototype;a.checkPropClash=function(b,c){if(!(6<=this.options.ecmaVersion&&(b.computed||b.method||b.shorthand))){var d=b.key;switch(d.type){case "Identifier":var a=d.name;break;case "Literal":a=String(d.value);break;default:return}var e=b.kind;
  5471. if(6<=this.options.ecmaVersion)"__proto__"===a&&"init"===e&&(c.proto&&this.raiseRecoverable(d.start,"Redefinition of __proto__ property"),c.proto=!0);else{a="$"+a;var m=c[a];m?(a="init"!==e,(!this.strict&&!a||!m[e])&&a^m.init||this.raiseRecoverable(d.start,"Redefinition of property")):m=c[a]={init:!1,get:!1,set:!1};m[e]=!0}}};a.parseExpression=function(b,a){var d=this.start,n=this.startLoc,e=this.parseMaybeAssign(b,a);if(this.type===c.types.comma){d=this.startNodeAt(d,n);for(d.expressions=[e];this.eat(c.types.comma);)d.expressions.push(this.parseMaybeAssign(b,
  5472. a));return this.finishNode(d,"SequenceExpression")}return e};a.parseMaybeAssign=function(b,a,h){if(this.inGenerator&&this.isContextual("yield"))return this.parseYield();var d=!1;a||(a={shorthandAssign:0,trailingComma:0},d=!0);var e=this.start,m=this.startLoc;if(this.type==c.types.parenL||this.type==c.types.name)this.potentialArrowAt=this.start;var p=this.parseMaybeConditional(b,a);h&&(p=h.call(this,p,e,m));if(this.type.isAssign)return d&&this.checkPatternErrors(a,!0),h=this.startNodeAt(e,m),h.operator=
  5473. this.value,h.left=this.type===c.types.eq?this.toAssignable(p):p,a.shorthandAssign=0,this.checkLVal(p),this.next(),h.right=this.parseMaybeAssign(b),this.finishNode(h,"AssignmentExpression");d&&this.checkExpressionErrors(a,!0);return p};a.parseMaybeConditional=function(b,a){var d=this.start,n=this.startLoc,e=this.parseExprOps(b,a);return this.checkExpressionErrors(a)?e:this.eat(c.types.question)?(d=this.startNodeAt(d,n),d.test=e,d.consequent=this.parseMaybeAssign(),this.expect(c.types.colon),d.alternate=
  5474. this.parseMaybeAssign(b),this.finishNode(d,"ConditionalExpression")):e};a.parseExprOps=function(b,c){var a=this.start,d=this.startLoc,e=this.parseMaybeUnary(c,!1);return this.checkExpressionErrors(c)?e:this.parseExprOp(e,a,d,-1,b)};a.parseExprOp=function(b,a,h,n,e){var d=this.type.binop;if(null!=d&&(!e||this.type!==c.types._in)&&d>n){var p=this.type===c.types.logicalOR||this.type===c.types.logicalAND,g=this.value;this.next();var k=this.start,q=this.startLoc,d=this.parseExprOp(this.parseMaybeUnary(null,
  5475. !1),k,q,d,e);b=this.buildBinary(a,h,b,d,g,p);return this.parseExprOp(b,a,h,n,e)}return b};a.buildBinary=function(b,c,a,n,e,m){b=this.startNodeAt(b,c);b.left=a;b.operator=e;b.right=n;return this.finishNode(b,m?"LogicalExpression":"BinaryExpression")};a.parseMaybeUnary=function(b,a){var d=this.start,n=this.startLoc;if(this.type.prefix){var e=this.startNode();var m=this.type===c.types.incDec;e.operator=this.value;e.prefix=!0;this.next();e.argument=this.parseMaybeUnary(null,!0);this.checkExpressionErrors(b,
  5476. !0);m?this.checkLVal(e.argument):this.strict&&"delete"===e.operator&&"Identifier"===e.argument.type?this.raiseRecoverable(e.start,"Deleting local variable in strict mode"):a=!0;m=this.finishNode(e,m?"UpdateExpression":"UnaryExpression")}else{m=this.parseExprSubscripts(b);if(this.checkExpressionErrors(b))return m;for(;this.type.postfix&&!this.canInsertSemicolon();)e=this.startNodeAt(d,n),e.operator=this.value,e.prefix=!1,e.argument=m,this.checkLVal(m),this.next(),m=this.finishNode(e,"UpdateExpression")}return!a&&
  5477. this.eat(c.types.starstar)?this.buildBinary(d,n,m,this.parseMaybeUnary(null,!1),"**",!1):m};a.parseExprSubscripts=function(b){var c=this.start,a=this.startLoc,n=this.parseExprAtom(b),e="ArrowFunctionExpression"===n.type&&")"!==this.input.slice(this.lastTokStart,this.lastTokEnd);return this.checkExpressionErrors(b)||e?n:this.parseSubscripts(n,c,a)};a.parseSubscripts=function(b,a,h,n){for(var e;;)if(this.eat(c.types.dot))e=this.startNodeAt(a,h),e.object=b,e.property=this.parseIdent(!0),e.computed=!1,
  5478. b=this.finishNode(e,"MemberExpression");else if(this.eat(c.types.bracketL))e=this.startNodeAt(a,h),e.object=b,e.property=this.parseExpression(),e.computed=!0,this.expect(c.types.bracketR),b=this.finishNode(e,"MemberExpression");else if(!n&&this.eat(c.types.parenL))e=this.startNodeAt(a,h),e.callee=b,e.arguments=this.parseExprList(c.types.parenR,!1),b=this.finishNode(e,"CallExpression");else if(this.type===c.types.backQuote)e=this.startNodeAt(a,h),e.tag=b,e.quasi=this.parseTemplate(),b=this.finishNode(e,
  5479. "TaggedTemplateExpression");else return b};a.parseExprAtom=function(b){var a=this.potentialArrowAt==this.start;switch(this.type){case c.types._super:this.inFunction||this.raise(this.start,"'super' outside of function or class");case c.types._this:return b=this.type===c.types._this?"ThisExpression":"Super",a=this.startNode(),this.next(),this.finishNode(a,b);case c.types.name:b=this.start;var h=this.startLoc,n=this.parseIdent(this.type!==c.types.name);return a&&!this.canInsertSemicolon()&&this.eat(c.types.arrow)?
  5480. this.parseArrowExpression(this.startNodeAt(b,h),[n]):n;case c.types.regexp:return b=this.value,a=this.parseLiteral(b.value),a.regex={pattern:b.pattern,flags:b.flags},a;case c.types.num:case c.types.string:return this.parseLiteral(this.value);case c.types._null:case c.types._true:case c.types._false:return a=this.startNode(),a.value=this.type===c.types._null?null:this.type===c.types._true,a.raw=this.type.keyword,this.next(),this.finishNode(a,"Literal");case c.types.parenL:return this.parseParenAndDistinguishExpression(a);
  5481. case c.types.bracketL:return a=this.startNode(),this.next(),a.elements=this.parseExprList(c.types.bracketR,!0,!0,b),this.finishNode(a,"ArrayExpression");case c.types.braceL:return this.parseObj(!1,b);case c.types._function:return a=this.startNode(),this.next(),this.parseFunction(a,!1);case c.types._class:return this.parseClass(this.startNode(),!1);case c.types._new:return this.parseNew();case c.types.backQuote:return this.parseTemplate();default:this.unexpected()}};a.parseLiteral=function(b){var a=
  5482. this.startNode();a.value=b;a.raw=this.input.slice(this.start,this.end);this.next();return this.finishNode(a,"Literal")};a.parseParenExpression=function(){this.expect(c.types.parenL);var b=this.parseExpression();this.expect(c.types.parenR);return b};a.parseParenAndDistinguishExpression=function(b){var a=this.start,h=this.startLoc;if(6<=this.options.ecmaVersion){this.next();for(var n=this.start,e=this.startLoc,m=[],p=!0,g={shorthandAssign:0,trailingComma:0},k=void 0,q=void 0;this.type!==c.types.parenR;)if(p?
  5483. p=!1:this.expect(c.types.comma),this.type===c.types.ellipsis){k=this.start;m.push(this.parseParenItem(this.parseRest()));break}else this.type!==c.types.parenL||q||(q=this.start),m.push(this.parseMaybeAssign(!1,g,this.parseParenItem));var p=this.start,f=this.startLoc;this.expect(c.types.parenR);if(b&&!this.canInsertSemicolon()&&this.eat(c.types.arrow))return this.checkPatternErrors(g,!0),q&&this.unexpected(q),this.parseParenArrowList(a,h,m);m.length||this.unexpected(this.lastTokStart);k&&this.unexpected(k);
  5484. this.checkExpressionErrors(g,!0);1<m.length?(b=this.startNodeAt(n,e),b.expressions=m,this.finishNodeAt(b,"SequenceExpression",p,f)):b=m[0]}else b=this.parseParenExpression();return this.options.preserveParens?(a=this.startNodeAt(a,h),a.expression=b,this.finishNode(a,"ParenthesizedExpression")):b};a.parseParenItem=function(b){return b};a.parseParenArrowList=function(b,a,c){return this.parseArrowExpression(this.startNodeAt(b,a),c)};var g=[];a.parseNew=function(){var b=this.startNode(),a=this.parseIdent(!0);
  5485. if(6<=this.options.ecmaVersion&&this.eat(c.types.dot))return b.meta=a,b.property=this.parseIdent(!0),"target"!==b.property.name&&this.raiseRecoverable(b.property.start,"The only valid meta property for new is new.target"),this.inFunction||this.raiseRecoverable(b.start,"new.target can only be used in functions"),this.finishNode(b,"MetaProperty");var a=this.start,h=this.startLoc;b.callee=this.parseSubscripts(this.parseExprAtom(),a,h,!0);this.eat(c.types.parenL)?b.arguments=this.parseExprList(c.types.parenR,
  5486. !1):b.arguments=g;return this.finishNode(b,"NewExpression")};a.parseTemplateElement=function(){var b=this.startNode();b.value={raw:this.input.slice(this.start,this.end).replace(/\r\n?/g,"\n"),cooked:this.value};this.next();b.tail=this.type===c.types.backQuote;return this.finishNode(b,"TemplateElement")};a.parseTemplate=function(){var b=this.startNode();this.next();b.expressions=[];var a=this.parseTemplateElement();for(b.quasis=[a];!a.tail;)this.expect(c.types.dollarBraceL),b.expressions.push(this.parseExpression()),
  5487. this.expect(c.types.braceR),b.quasis.push(a=this.parseTemplateElement());this.next();return this.finishNode(b,"TemplateLiteral")};a.parseObj=function(b,a){var d=this.startNode(),n=!0,e={};d.properties=[];for(this.next();!this.eat(c.types.braceR);){if(n)n=!1;else if(this.expect(c.types.comma),this.afterTrailingComma(c.types.braceR))break;var m=this.startNode(),p=void 0,g=void 0,k=void 0;if(6<=this.options.ecmaVersion){m.method=!1;m.shorthand=!1;if(b||a)g=this.start,k=this.startLoc;b||(p=this.eat(c.types.star))}this.parsePropertyName(m);
  5488. this.parsePropertyValue(m,b,p,g,k,a);this.checkPropClash(m,e);d.properties.push(this.finishNode(m,"Property"))}return this.finishNode(d,b?"ObjectPattern":"ObjectExpression")};a.parsePropertyValue=function(b,a,h,n,e,m){this.eat(c.types.colon)?(b.value=a?this.parseMaybeDefault(this.start,this.startLoc):this.parseMaybeAssign(!1,m),b.kind="init"):6<=this.options.ecmaVersion&&this.type===c.types.parenL?(a&&this.unexpected(),b.kind="init",b.method=!0,b.value=this.parseMethod(h)):5<=this.options.ecmaVersion&&
  5489. !b.computed&&"Identifier"===b.key.type&&("get"===b.key.name||"set"===b.key.name)&&this.type!=c.types.comma&&this.type!=c.types.braceR?((h||a)&&this.unexpected(),b.kind=b.key.name,this.parsePropertyName(b),b.value=this.parseMethod(!1),b.value.params.length!==("get"===b.kind?0:1)&&(a=b.value.start,"get"===b.kind?this.raiseRecoverable(a,"getter should have no params"):this.raiseRecoverable(a,"setter should have exactly one param")),"set"===b.kind&&"RestElement"===b.value.params[0].type&&this.raiseRecoverable(b.value.params[0].start,
  5490. "Setter cannot use rest params")):6<=this.options.ecmaVersion&&!b.computed&&"Identifier"===b.key.type?(b.kind="init",a?((this.keywords.test(b.key.name)||(this.strict?this.reservedWordsStrictBind:this.reservedWords).test(b.key.name)||this.inGenerator&&"yield"==b.key.name)&&this.raiseRecoverable(b.key.start,"Binding "+b.key.name),b.value=this.parseMaybeDefault(n,e,b.key)):this.type===c.types.eq&&m?(m.shorthandAssign||(m.shorthandAssign=this.start),b.value=this.parseMaybeDefault(n,e,b.key)):b.value=
  5491. b.key,b.shorthand=!0):this.unexpected()};a.parsePropertyName=function(b){if(6<=this.options.ecmaVersion){if(this.eat(c.types.bracketL))return b.computed=!0,b.key=this.parseMaybeAssign(),this.expect(c.types.bracketR),b.key;b.computed=!1}return b.key=this.type===c.types.num||this.type===c.types.string?this.parseExprAtom():this.parseIdent(!0)};a.initFunction=function(b){b.id=null;6<=this.options.ecmaVersion&&(b.generator=!1,b.expression=!1)};a.parseMethod=function(b){var a=this.startNode(),h=this.inGenerator;
  5492. this.inGenerator=b;this.initFunction(a);this.expect(c.types.parenL);a.params=this.parseBindingList(c.types.parenR,!1,!1);6<=this.options.ecmaVersion&&(a.generator=b);this.parseFunctionBody(a,!1);this.inGenerator=h;return this.finishNode(a,"FunctionExpression")};a.parseArrowExpression=function(b,a){var c=this.inGenerator;this.inGenerator=!1;this.initFunction(b);b.params=this.toAssignableList(a,!0);this.parseFunctionBody(b,!0);this.inGenerator=c;return this.finishNode(b,"ArrowFunctionExpression")};
  5493. a.parseFunctionBody=function(b,a){var d=a&&this.type!==c.types.braceL;if(d)b.body=this.parseMaybeAssign(),b.expression=!0;else{var n=this.inFunction,e=this.labels;this.inFunction=!0;this.labels=[];b.body=this.parseBlock(!0);b.expression=!1;this.inFunction=n;this.labels=e}this.strict||!d&&b.body.body.length&&this.isUseStrict(b.body.body[0])?(d=this.strict,this.strict=!0,b.id&&this.checkLVal(b.id,!0),this.checkParams(b),this.strict=d):a&&this.checkParams(b)};a.checkParams=function(b){for(var a={},c=
  5494. 0;c<b.params.length;c++)this.checkLVal(b.params[c],!0,a)};a.parseExprList=function(b,a,h,n){for(var e=[],d=!0;!this.eat(b);){if(d)d=!1;else if(this.expect(c.types.comma),a&&this.afterTrailingComma(b))break;if(h&&this.type===c.types.comma)var p=null;else this.type===c.types.ellipsis?(p=this.parseSpread(n),this.type===c.types.comma&&n&&!n.trailingComma&&(n.trailingComma=this.lastTokStart)):p=this.parseMaybeAssign(!1,n);e.push(p)}return e};a.parseIdent=function(b){var a=this.startNode();b&&"never"==
  5495. this.options.allowReserved&&(b=!1);this.type===c.types.name?(!b&&(this.strict?this.reservedWordsStrict:this.reservedWords).test(this.value)&&(6<=this.options.ecmaVersion||-1==this.input.slice(this.start,this.end).indexOf("\\"))&&this.raiseRecoverable(this.start,"The keyword '"+this.value+"' is reserved"),!b&&this.inGenerator&&"yield"===this.value&&this.raiseRecoverable(this.start,"Can not use 'yield' as identifier inside a generator"),a.name=this.value):b&&this.type.keyword?a.name=this.type.keyword:
  5496. this.unexpected();this.next();return this.finishNode(a,"Identifier")};a.parseYield=function(){var b=this.startNode();this.next();this.type==c.types.semi||this.canInsertSemicolon()||this.type!=c.types.star&&!this.type.startsExpr?(b.delegate=!1,b.argument=null):(b.delegate=this.eat(c.types.star),b.argument=this.parseMaybeAssign());return this.finishNode(b,"YieldExpression")}},{"./state":10,"./tokentype":14}],2:[function(a,l,f){function c(b,a){for(var e=65536,c=0;c<a.length;c+=2){e+=a[c];if(e>b)return!1;
  5497. e+=a[c+1];if(e>=b)return!0}}f.__esModule=!0;f.isIdentifierStart=function(b,a){return 65>b?36===b:91>b?!0:97>b?95===b:123>b?!0:65535>=b?170<=b&&g.test(String.fromCharCode(b)):!1===a?!1:c(b,d)};f.isIdentifierChar=function(a,e){return 48>a?36===a:58>a?!0:65>a?!1:91>a?!0:97>a?95===a:123>a?!0:65535>=a?170<=a&&b.test(String.fromCharCode(a)):!1===e?!1:c(a,d)||c(a,h)};f.reservedWords={3:"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",
  5498. 5:"class enum extends super const export import",6:"enum",7:"enum",strict:"implements interface let package private protected public static yield",strictBind:"eval arguments"};f.keywords={5:"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this",6:"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this const class extends export import super"};
  5499. a="\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0-\u08b4\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ad\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
  5500. var g=new RegExp("["+a+"]"),b=new RegExp("["+a+"\u200c\u200d\u00b7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d01-\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]");
  5501. a=null;var d=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,17,26,6,37,11,29,3,35,5,7,2,4,43,157,99,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,26,45,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,785,52,76,44,33,24,27,35,42,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,287,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,25,391,63,32,0,449,56,1288,
  5502. 921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,881,68,12,0,67,12,16481,1,3071,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,1340,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,10591,541],h=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,
  5503. 41,2,5,0,166,1,1306,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,52,0,13,2,49,13,10,2,4,9,83,11,168,11,6,9,7,3,57,0,2,6,3,1,3,2,10,0,11,1,3,6,4,4,316,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,423,9,20855,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,3617,6,792618,239]},{}],3:[function(a,l,f){f.__esModule=!0;f.parse=function(a,b){return(new c.Parser(b,a)).parse()};f.parseExpressionAt=function(a,b,d){a=new c.Parser(d,a,b);a.nextToken();
  5504. return a.parseExpression()};f.tokenizer=function(a,b){return new c.Parser(b,a)};var c=a("./state");a("./parseutil");a("./statement");a("./lval");a("./expression");a("./location");f.Parser=c.Parser;f.plugins=c.plugins;l=a("./options");f.defaultOptions=l.defaultOptions;l=a("./locutil");f.Position=l.Position;f.SourceLocation=l.SourceLocation;f.getLineInfo=l.getLineInfo;l=a("./node");f.Node=l.Node;l=a("./tokentype");f.TokenType=l.TokenType;f.tokTypes=l.types;l=a("./tokencontext");f.TokContext=l.TokContext;
  5505. f.tokContexts=l.types;l=a("./identifier");f.isIdentifierChar=l.isIdentifierChar;f.isIdentifierStart=l.isIdentifierStart;l=a("./tokenize");f.Token=l.Token;a=a("./whitespace");f.isNewLine=a.isNewLine;f.lineBreak=a.lineBreak;f.lineBreakG=a.lineBreakG;f.version="3.1.0"},{"./expression":1,"./identifier":2,"./location":4,"./locutil":5,"./lval":6,"./node":7,"./options":8,"./parseutil":9,"./state":10,"./statement":11,"./tokencontext":12,"./tokenize":13,"./tokentype":14,"./whitespace":16}],4:[function(a,l,
  5506. f){l=a("./state");var c=a("./locutil");a=l.Parser.prototype;a.raise=function(a,b){var d=c.getLineInfo(this.input,a);b+=" ("+d.line+":"+d.column+")";var h=new SyntaxError(b);h.pos=a;h.loc=d;h.raisedAt=this.pos;throw h;};a.raiseRecoverable=a.raise;a.curPosition=function(){if(this.options.locations)return new c.Position(this.curLine,this.pos-this.lineStart)}},{"./locutil":5,"./state":10}],5:[function(a,l,f){function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function");
  5507. }f.__esModule=!0;f.getLineInfo=function(a,c){for(var d=1,e=0;;){g.lineBreakG.lastIndex=e;var m=g.lineBreakG.exec(a);if(m&&m.index<c)++d,e=m.index+m[0].length;else return new b(d,c-e)}};var g=a("./whitespace"),b=function(){function a(b,d){c(this,a);this.line=b;this.column=d}a.prototype.offset=function(b){return new a(this.line,this.column+b)};return a}();f.Position=b;f.SourceLocation=function h(a,b,m){c(this,h);this.start=b;this.end=m;null!==a.sourceFile&&(this.source=a.sourceFile)}},{"./whitespace":16}],
  5508. 6:[function(a,l,f){var c=a("./tokentype");l=a("./state");var g=a("./util");a=l.Parser.prototype;a.toAssignable=function(a,c){if(6<=this.options.ecmaVersion&&a)switch(a.type){case "Identifier":case "ObjectPattern":case "ArrayPattern":break;case "ObjectExpression":a.type="ObjectPattern";for(var b=0;b<a.properties.length;b++){var d=a.properties[b];"init"!==d.kind&&this.raise(d.key.start,"Object pattern can't contain getter or setter");this.toAssignable(d.value,c)}break;case "ArrayExpression":a.type=
  5509. "ArrayPattern";this.toAssignableList(a.elements,c);break;case "AssignmentExpression":if("="===a.operator)a.type="AssignmentPattern",delete a.operator;else{this.raise(a.left.end,"Only '=' operator can be used for specifying default value.");break}case "AssignmentPattern":"YieldExpression"===a.right.type&&this.raise(a.right.start,"Yield expression cannot be a default value");break;case "ParenthesizedExpression":a.expression=this.toAssignable(a.expression,c);break;case "MemberExpression":if(!c)break;
  5510. default:this.raise(a.start,"Assigning to rvalue")}return a};a.toAssignableList=function(a,c){var b=a.length;if(b){var d=a[b-1];if(d&&"RestElement"==d.type)--b;else if(d&&"SpreadElement"==d.type){d.type="RestElement";var e=d.argument;this.toAssignable(e,c);"Identifier"!==e.type&&"MemberExpression"!==e.type&&"ArrayPattern"!==e.type&&this.unexpected(e.start);--b}c&&"RestElement"===d.type&&"Identifier"!==d.argument.type&&this.unexpected(d.argument.start)}for(d=0;d<b;d++)(e=a[d])&&this.toAssignable(e,
  5511. c);return a};a.parseSpread=function(a){var b=this.startNode();this.next();b.argument=this.parseMaybeAssign(a);return this.finishNode(b,"SpreadElement")};a.parseRest=function(a){var b=this.startNode();this.next();b.argument=a?this.type===c.types.name?this.parseIdent():this.unexpected():this.type===c.types.name||this.type===c.types.bracketL?this.parseBindingAtom():this.unexpected();return this.finishNode(b,"RestElement")};a.parseBindingAtom=function(){if(6>this.options.ecmaVersion)return this.parseIdent();
  5512. switch(this.type){case c.types.name:return this.parseIdent();case c.types.bracketL:var a=this.startNode();this.next();a.elements=this.parseBindingList(c.types.bracketR,!0,!0);return this.finishNode(a,"ArrayPattern");case c.types.braceL:return this.parseObj(!0);default:this.unexpected()}};a.parseBindingList=function(a,d,h,n){for(var b=[],m=!0;!this.eat(a);)if(m?m=!1:this.expect(c.types.comma),d&&this.type===c.types.comma)b.push(null);else if(h&&this.afterTrailingComma(a))break;else if(this.type===
  5513. c.types.ellipsis){d=this.parseRest(n);this.parseBindingListItem(d);b.push(d);this.type===c.types.comma&&this.raise(this.start,"Comma is not permitted after the rest element");this.expect(a);break}else{var p=this.parseMaybeDefault(this.start,this.startLoc);this.parseBindingListItem(p);b.push(p)}return b};a.parseBindingListItem=function(a){return a};a.parseMaybeDefault=function(a,d,h){h=h||this.parseBindingAtom();if(6>this.options.ecmaVersion||!this.eat(c.types.eq))return h;a=this.startNodeAt(a,d);
  5514. a.left=h;a.right=this.parseMaybeAssign();return this.finishNode(a,"AssignmentPattern")};a.checkLVal=function(a,c,h){switch(a.type){case "Identifier":this.strict&&this.reservedWordsStrictBind.test(a.name)&&this.raiseRecoverable(a.start,(c?"Binding ":"Assigning to ")+a.name+" in strict mode");h&&(g.has(h,a.name)&&this.raiseRecoverable(a.start,"Argument name clash"),h[a.name]=!0);break;case "MemberExpression":c&&this.raiseRecoverable(a.start,(c?"Binding":"Assigning to")+" member expression");break;case "ObjectPattern":for(var b=
  5515. 0;b<a.properties.length;b++)this.checkLVal(a.properties[b].value,c,h);break;case "ArrayPattern":for(b=0;b<a.elements.length;b++){var e=a.elements[b];e&&this.checkLVal(e,c,h)}break;case "AssignmentPattern":this.checkLVal(a.left,c,h);break;case "RestElement":this.checkLVal(a.argument,c,h);break;case "ParenthesizedExpression":this.checkLVal(a.expression,c,h);break;default:this.raise(a.start,(c?"Binding":"Assigning to")+" rvalue")}}},{"./state":10,"./tokentype":14,"./util":15}],7:[function(a,l,f){function c(a,
  5516. b,c,e){a.type=b;a.end=c;this.options.locations&&(a.loc.end=e);this.options.ranges&&(a.range[1]=c);return a}f.__esModule=!0;l=a("./state");var g=a("./locutil"),b=function h(a,b,c){if(!(this instanceof h))throw new TypeError("Cannot call a class as a function");this.type="";this.start=b;this.end=0;a.options.locations&&(this.loc=new g.SourceLocation(a,c));a.options.directSourceFile&&(this.sourceFile=a.options.directSourceFile);a.options.ranges&&(this.range=[b,0])};f.Node=b;a=l.Parser.prototype;a.startNode=
  5517. function(){return new b(this,this.start,this.startLoc)};a.startNodeAt=function(a,c){return new b(this,a,c)};a.finishNode=function(a,b){return c.call(this,a,b,this.lastTokEnd,this.lastTokEndLoc)};a.finishNodeAt=function(a,b,e,m){return c.call(this,a,b,e,m)}},{"./locutil":5,"./state":10}],8:[function(a,l,f){function c(a,c){return function(e,m,d,h,k,q){e={type:e?"Block":"Line",value:m,start:d,end:h};a.locations&&(e.loc=new b.SourceLocation(this,k,q));a.ranges&&(e.range=[d,h]);c.push(e)}}f.__esModule=
  5518. !0;f.getOptions=function(a){var b={},e;for(e in d)b[e]=a&&g.has(a,e)?a[e]:d[e];null==b.allowReserved&&(b.allowReserved=5>b.ecmaVersion);g.isArray(b.onToken)&&function(){var a=b.onToken;b.onToken=function(b){return a.push(b)}}();g.isArray(b.onComment)&&(b.onComment=c(b,b.onComment));return b};var g=a("./util"),b=a("./locutil"),d={ecmaVersion:6,sourceType:"script",onInsertedSemicolon:null,onTrailingComma:null,allowReserved:null,allowReturnOutsideFunction:!1,allowImportExportEverywhere:!1,allowHashBang:!1,
  5519. locations:!1,onToken:null,onComment:null,ranges:!1,program:null,sourceFile:null,directSourceFile:null,preserveParens:!1,plugins:{}};f.defaultOptions=d},{"./locutil":5,"./util":15}],9:[function(a,l,f){var c=a("./tokentype");l=a("./state");var g=a("./whitespace");a=l.Parser.prototype;a.isUseStrict=function(a){return 5<=this.options.ecmaVersion&&"ExpressionStatement"===a.type&&"Literal"===a.expression.type&&"use strict"===a.expression.raw.slice(1,-1)};a.eat=function(a){return this.type===a?(this.next(),
  5520. !0):!1};a.isContextual=function(a){return this.type===c.types.name&&this.value===a};a.eatContextual=function(a){return this.value===a&&this.eat(c.types.name)};a.expectContextual=function(a){this.eatContextual(a)||this.unexpected()};a.canInsertSemicolon=function(){return this.type===c.types.eof||this.type===c.types.braceR||g.lineBreak.test(this.input.slice(this.lastTokEnd,this.start))};a.insertSemicolon=function(){if(this.canInsertSemicolon()){if(this.options.onInsertedSemicolon)this.options.onInsertedSemicolon(this.lastTokEnd,
  5521. this.lastTokEndLoc);return!0}};a.semicolon=function(){this.eat(c.types.semi)||this.insertSemicolon()||this.unexpected()};a.afterTrailingComma=function(a){if(this.type==a){if(this.options.onTrailingComma)this.options.onTrailingComma(this.lastTokStart,this.lastTokStartLoc);this.next();return!0}};a.expect=function(a){this.eat(a)||this.unexpected()};a.unexpected=function(a){this.raise(null!=a?a:this.start,"Unexpected token")};a.checkPatternErrors=function(a,c){var b=a&&a.trailingComma;if(!c)return!!b;
  5522. b&&this.raise(b,"Comma is not permitted after the rest element")};a.checkExpressionErrors=function(a,c){var b=a&&a.shorthandAssign;if(!c)return!!b;b&&this.raise(b,"Shorthand property assignments are valid only in destructuring patterns")}},{"./state":10,"./tokentype":14,"./whitespace":16}],10:[function(a,l,f){function c(a){return new RegExp("^("+a.replace(/ /g,"|")+")$")}f.__esModule=!0;var g=a("./identifier"),b=a("./tokentype"),d=a("./whitespace"),h=a("./options"),n={};f.plugins=n;a=function(){function a(e,
  5523. p,f){if(!(this instanceof a))throw new TypeError("Cannot call a class as a function");this.options=e=h.getOptions(e);this.sourceFile=e.sourceFile;this.keywords=c(g.keywords[6<=e.ecmaVersion?6:5]);var k=e.allowReserved?"":g.reservedWords[e.ecmaVersion]+("module"==e.sourceType?" await":"");this.reservedWords=c(k);k=(k?k+" ":"")+g.reservedWords.strict;this.reservedWordsStrict=c(k);this.reservedWordsStrictBind=c(k+" "+g.reservedWords.strictBind);this.input=String(p);this.containsEsc=!1;this.loadPlugins(e.plugins);
  5524. f?(this.pos=f,this.lineStart=Math.max(0,this.input.lastIndexOf("\n",f)),this.curLine=this.input.slice(0,this.lineStart).split(d.lineBreak).length):(this.pos=this.lineStart=0,this.curLine=1);this.type=b.types.eof;this.value=null;this.start=this.end=this.pos;this.startLoc=this.endLoc=this.curPosition();this.lastTokEndLoc=this.lastTokStartLoc=null;this.lastTokStart=this.lastTokEnd=this.pos;this.context=this.initialContext();this.exprAllowed=!0;this.strict=this.inModule="module"===e.sourceType;this.potentialArrowAt=
  5525. -1;this.inFunction=this.inGenerator=!1;this.labels=[];0===this.pos&&e.allowHashBang&&"#!"===this.input.slice(0,2)&&this.skipLineComment(2)}a.prototype.isKeyword=function(a){return this.keywords.test(a)};a.prototype.isReservedWord=function(a){return this.reservedWords.test(a)};a.prototype.extend=function(a,b){this[a]=b(this[a])};a.prototype.loadPlugins=function(a){for(var b in a){var c=n[b];if(!c)throw Error("Plugin '"+b+"' not found");c(this,a[b])}};a.prototype.parse=function(){var a=this.options.program||
  5526. this.startNode();this.nextToken();return this.parseTopLevel(a)};return a}();f.Parser=a},{"./identifier":2,"./options":8,"./tokentype":14,"./whitespace":16}],11:[function(a,l,f){var c=a("./tokentype");l=a("./state");var g=a("./whitespace"),b=a("./identifier");a=l.Parser.prototype;a.parseTopLevel=function(a){var b=!0;a.body||(a.body=[]);for(;this.type!==c.types.eof;){var e=this.parseStatement(!0,!0);a.body.push(e);b&&(this.isUseStrict(e)&&this.setStrict(!0),b=!1)}this.next();6<=this.options.ecmaVersion&&
  5527. (a.sourceType=this.options.sourceType);return this.finishNode(a,"Program")};var d={kind:"loop"},h={kind:"switch"};a.isLet=function(){if(this.type!==c.types.name||6>this.options.ecmaVersion||"let"!=this.value)return!1;g.skipWhiteSpace.lastIndex=this.pos;var a=g.skipWhiteSpace.exec(this.input),a=this.pos+a[0].length,d=this.input.charCodeAt(a);if(91===d||123==d)return!0;if(b.isIdentifierStart(d,!0)){for(d=a+1;b.isIdentifierChar(this.input.charCodeAt(d,!0));++d);a=this.input.slice(a,d);if(!this.isKeyword(a))return!0}return!1};
  5528. a.parseStatement=function(a,b){var e=this.type,d=this.startNode(),k=void 0;this.isLet()&&(e=c.types._var,k="let");switch(e){case c.types._break:case c.types._continue:return this.parseBreakContinueStatement(d,e.keyword);case c.types._debugger:return this.parseDebuggerStatement(d);case c.types._do:return this.parseDoStatement(d);case c.types._for:return this.parseForStatement(d);case c.types._function:return!a&&6<=this.options.ecmaVersion&&this.unexpected(),this.parseFunctionStatement(d);case c.types._class:return a||
  5529. this.unexpected(),this.parseClass(d,!0);case c.types._if:return this.parseIfStatement(d);case c.types._return:return this.parseReturnStatement(d);case c.types._switch:return this.parseSwitchStatement(d);case c.types._throw:return this.parseThrowStatement(d);case c.types._try:return this.parseTryStatement(d);case c.types._const:case c.types._var:return k=k||this.value,a||"var"==k||this.unexpected(),this.parseVarStatement(d,k);case c.types._while:return this.parseWhileStatement(d);case c.types._with:return this.parseWithStatement(d);
  5530. case c.types.braceL:return this.parseBlock();case c.types.semi:return this.parseEmptyStatement(d);case c.types._export:case c.types._import:return this.options.allowImportExportEverywhere||(b||this.raise(this.start,"'import' and 'export' may only appear at the top level"),this.inModule||this.raise(this.start,"'import' and 'export' may appear only with 'sourceType: module'")),e===c.types._import?this.parseImport(d):this.parseExport(d);default:var k=this.value,m=this.parseExpression();return e===c.types.name&&
  5531. "Identifier"===m.type&&this.eat(c.types.colon)?this.parseLabeledStatement(d,k,m):this.parseExpressionStatement(d,m)}};a.parseBreakContinueStatement=function(a,b){var e="break"==b;this.next();this.eat(c.types.semi)||this.insertSemicolon()?a.label=null:this.type!==c.types.name?this.unexpected():(a.label=this.parseIdent(),this.semicolon());for(var d=0;d<this.labels.length;++d){var k=this.labels[d];if(null==a.label||k.name===a.label.name){if(null!=k.kind&&(e||"loop"===k.kind))break;if(a.label&&e)break}}d===
  5532. this.labels.length&&this.raise(a.start,"Unsyntactic "+b);return this.finishNode(a,e?"BreakStatement":"ContinueStatement")};a.parseDebuggerStatement=function(a){this.next();this.semicolon();return this.finishNode(a,"DebuggerStatement")};a.parseDoStatement=function(a){this.next();this.labels.push(d);a.body=this.parseStatement(!1);this.labels.pop();this.expect(c.types._while);a.test=this.parseParenExpression();6<=this.options.ecmaVersion?this.eat(c.types.semi):this.semicolon();return this.finishNode(a,
  5533. "DoWhileStatement")};a.parseForStatement=function(a){this.next();this.labels.push(d);this.expect(c.types.parenL);if(this.type===c.types.semi)return this.parseFor(a,null);var b=this.isLet();if(this.type===c.types._var||this.type===c.types._const||b){var e=this.startNode(),b=b?"let":this.value;this.next();this.parseVar(e,!0,b);this.finishNode(e,"VariableDeclaration");return!(this.type===c.types._in||6<=this.options.ecmaVersion&&this.isContextual("of"))||1!==e.declarations.length||"var"!==b&&e.declarations[0].init?
  5534. this.parseFor(a,e):this.parseForIn(a,e)}e={shorthandAssign:0,trailingComma:0};b=this.parseExpression(!0,e);if(this.type===c.types._in||6<=this.options.ecmaVersion&&this.isContextual("of"))return this.checkPatternErrors(e,!0),this.toAssignable(b),this.checkLVal(b),this.parseForIn(a,b);this.checkExpressionErrors(e,!0);return this.parseFor(a,b)};a.parseFunctionStatement=function(a){this.next();return this.parseFunction(a,!0)};a.parseIfStatement=function(a){this.next();a.test=this.parseParenExpression();
  5535. a.consequent=this.parseStatement(!1);a.alternate=this.eat(c.types._else)?this.parseStatement(!1):null;return this.finishNode(a,"IfStatement")};a.parseReturnStatement=function(a){this.inFunction||this.options.allowReturnOutsideFunction||this.raise(this.start,"'return' outside of function");this.next();this.eat(c.types.semi)||this.insertSemicolon()?a.argument=null:(a.argument=this.parseExpression(),this.semicolon());return this.finishNode(a,"ReturnStatement")};a.parseSwitchStatement=function(a){this.next();
  5536. a.discriminant=this.parseParenExpression();a.cases=[];this.expect(c.types.braceL);this.labels.push(h);for(var b,e=!1;this.type!=c.types.braceR;)if(this.type===c.types._case||this.type===c.types._default){var d=this.type===c.types._case;b&&this.finishNode(b,"SwitchCase");a.cases.push(b=this.startNode());b.consequent=[];this.next();d?b.test=this.parseExpression():(e&&this.raiseRecoverable(this.lastTokStart,"Multiple default clauses"),e=!0,b.test=null);this.expect(c.types.colon)}else b||this.unexpected(),
  5537. b.consequent.push(this.parseStatement(!0));b&&this.finishNode(b,"SwitchCase");this.next();this.labels.pop();return this.finishNode(a,"SwitchStatement")};a.parseThrowStatement=function(a){this.next();g.lineBreak.test(this.input.slice(this.lastTokEnd,this.start))&&this.raise(this.lastTokEnd,"Illegal newline after throw");a.argument=this.parseExpression();this.semicolon();return this.finishNode(a,"ThrowStatement")};var n=[];a.parseTryStatement=function(a){this.next();a.block=this.parseBlock();a.handler=
  5538. null;if(this.type===c.types._catch){var b=this.startNode();this.next();this.expect(c.types.parenL);b.param=this.parseBindingAtom();this.checkLVal(b.param,!0);this.expect(c.types.parenR);b.body=this.parseBlock();a.handler=this.finishNode(b,"CatchClause")}a.finalizer=this.eat(c.types._finally)?this.parseBlock():null;a.handler||a.finalizer||this.raise(a.start,"Missing catch or finally clause");return this.finishNode(a,"TryStatement")};a.parseVarStatement=function(a,b){this.next();this.parseVar(a,!1,
  5539. b);this.semicolon();return this.finishNode(a,"VariableDeclaration")};a.parseWhileStatement=function(a){this.next();a.test=this.parseParenExpression();this.labels.push(d);a.body=this.parseStatement(!1);this.labels.pop();return this.finishNode(a,"WhileStatement")};a.parseWithStatement=function(a){this.strict&&this.raise(this.start,"'with' in strict mode");this.next();a.object=this.parseParenExpression();a.body=this.parseStatement(!1);return this.finishNode(a,"WithStatement")};a.parseEmptyStatement=
  5540. function(a){this.next();return this.finishNode(a,"EmptyStatement")};a.parseLabeledStatement=function(a,b,d){for(var e=0;e<this.labels.length;++e)this.labels[e].name===b&&this.raise(d.start,"Label '"+b+"' is already declared");for(var k=this.type.isLoop?"loop":this.type===c.types._switch?"switch":null,e=this.labels.length-1;0<=e;e--){var q=this.labels[e];if(q.statementStart==a.start)q.statementStart=this.start,q.kind=k;else break}this.labels.push({name:b,kind:k,statementStart:this.start});a.body=this.parseStatement(!0);
  5541. this.labels.pop();a.label=d;return this.finishNode(a,"LabeledStatement")};a.parseExpressionStatement=function(a,b){a.expression=b;this.semicolon();return this.finishNode(a,"ExpressionStatement")};a.parseBlock=function(a){var b=this.startNode(),e=!0,d=void 0;b.body=[];for(this.expect(c.types.braceL);!this.eat(c.types.braceR);){var k=this.parseStatement(!0);b.body.push(k);e&&a&&this.isUseStrict(k)&&(d=this.strict,this.setStrict(this.strict=!0));e=!1}!1===d&&this.setStrict(!1);return this.finishNode(b,
  5542. "BlockStatement")};a.parseFor=function(a,b){a.init=b;this.expect(c.types.semi);a.test=this.type===c.types.semi?null:this.parseExpression();this.expect(c.types.semi);a.update=this.type===c.types.parenR?null:this.parseExpression();this.expect(c.types.parenR);a.body=this.parseStatement(!1);this.labels.pop();return this.finishNode(a,"ForStatement")};a.parseForIn=function(a,b){var e=this.type===c.types._in?"ForInStatement":"ForOfStatement";this.next();a.left=b;a.right=this.parseExpression();this.expect(c.types.parenR);
  5543. a.body=this.parseStatement(!1);this.labels.pop();return this.finishNode(a,e)};a.parseVar=function(a,b,d){a.declarations=[];for(a.kind=d;;){var e=this.startNode();this.parseVarId(e);this.eat(c.types.eq)?e.init=this.parseMaybeAssign(b):"const"!==d||this.type===c.types._in||6<=this.options.ecmaVersion&&this.isContextual("of")?"Identifier"==e.id.type||b&&(this.type===c.types._in||this.isContextual("of"))?e.init=null:this.raise(this.lastTokEnd,"Complex binding patterns require an initialization value"):
  5544. this.unexpected();a.declarations.push(this.finishNode(e,"VariableDeclarator"));if(!this.eat(c.types.comma))break}return a};a.parseVarId=function(a){a.id=this.parseBindingAtom();this.checkLVal(a.id,!0)};a.parseFunction=function(a,b,d){this.initFunction(a);6<=this.options.ecmaVersion&&(a.generator=this.eat(c.types.star));var e=this.inGenerator;this.inGenerator=a.generator;if(b||this.type===c.types.name)a.id=this.parseIdent();this.parseFunctionParams(a);this.parseFunctionBody(a,d);this.inGenerator=e;
  5545. return this.finishNode(a,b?"FunctionDeclaration":"FunctionExpression")};a.parseFunctionParams=function(a){this.expect(c.types.parenL);a.params=this.parseBindingList(c.types.parenR,!1,!1,!0)};a.parseClass=function(a,b){this.next();this.parseClassId(a,b);this.parseClassSuper(a);var e=this.startNode(),d=!1;e.body=[];for(this.expect(c.types.braceL);!this.eat(c.types.braceR);)if(!this.eat(c.types.semi)){var k=this.startNode(),q=this.eat(c.types.star),h=this.type===c.types.name&&"static"===this.value;this.parsePropertyName(k);
  5546. k["static"]=h&&this.type!==c.types.parenL;k["static"]&&(q&&this.unexpected(),q=this.eat(c.types.star),this.parsePropertyName(k));k.kind="method";h=!1;if(!k.computed){var f=k.key;q||"Identifier"!==f.type||this.type===c.types.parenL||"get"!==f.name&&"set"!==f.name||(h=!0,k.kind=f.name,f=this.parsePropertyName(k));!k["static"]&&("Identifier"===f.type&&"constructor"===f.name||"Literal"===f.type&&"constructor"===f.value)&&(d&&this.raise(f.start,"Duplicate constructor in the same class"),h&&this.raise(f.start,
  5547. "Constructor can't have get/set modifier"),q&&this.raise(f.start,"Constructor can't be a generator"),k.kind="constructor",d=!0)}this.parseClassMethod(e,k,q);h&&(k.value.params.length!==("get"===k.kind?0:1)&&(q=k.value.start,"get"===k.kind?this.raiseRecoverable(q,"getter should have no params"):this.raiseRecoverable(q,"setter should have exactly one param")),"set"===k.kind&&"RestElement"===k.value.params[0].type&&this.raise(k.value.params[0].start,"Setter cannot use rest params"))}a.body=this.finishNode(e,
  5548. "ClassBody");return this.finishNode(a,b?"ClassDeclaration":"ClassExpression")};a.parseClassMethod=function(a,b,c){b.value=this.parseMethod(c);a.body.push(this.finishNode(b,"MethodDefinition"))};a.parseClassId=function(a,b){a.id=this.type===c.types.name?this.parseIdent():b?this.unexpected():null};a.parseClassSuper=function(a){a.superClass=this.eat(c.types._extends)?this.parseExprSubscripts():null};a.parseExport=function(a){this.next();if(this.eat(c.types.star))return this.expectContextual("from"),
  5549. a.source=this.type===c.types.string?this.parseExprAtom():this.unexpected(),this.semicolon(),this.finishNode(a,"ExportAllDeclaration");if(this.eat(c.types._default)){var b=this.type==c.types.parenL,e=this.parseMaybeAssign(),d=!0;b||"FunctionExpression"!=e.type&&"ClassExpression"!=e.type||(d=!1,e.id&&(e.type="FunctionExpression"==e.type?"FunctionDeclaration":"ClassDeclaration"));a.declaration=e;d&&this.semicolon();return this.finishNode(a,"ExportDefaultDeclaration")}if(this.shouldParseExportStatement())a.declaration=
  5550. this.parseStatement(!0),a.specifiers=[],a.source=null;else{a.declaration=null;a.specifiers=this.parseExportSpecifiers();if(this.eatContextual("from"))a.source=this.type===c.types.string?this.parseExprAtom():this.unexpected();else{for(b=0;b<a.specifiers.length;b++)(this.keywords.test(a.specifiers[b].local.name)||this.reservedWords.test(a.specifiers[b].local.name))&&this.unexpected(a.specifiers[b].local.start);a.source=null}this.semicolon()}return this.finishNode(a,"ExportNamedDeclaration")};a.shouldParseExportStatement=
  5551. function(){return this.type.keyword||this.isLet()};a.parseExportSpecifiers=function(){var a=[],b=!0;for(this.expect(c.types.braceL);!this.eat(c.types.braceR);){if(b)b=!1;else if(this.expect(c.types.comma),this.afterTrailingComma(c.types.braceR))break;var d=this.startNode();d.local=this.parseIdent(this.type===c.types._default);d.exported=this.eatContextual("as")?this.parseIdent(!0):d.local;a.push(this.finishNode(d,"ExportSpecifier"))}return a};a.parseImport=function(a){this.next();this.type===c.types.string?
  5552. (a.specifiers=n,a.source=this.parseExprAtom()):(a.specifiers=this.parseImportSpecifiers(),this.expectContextual("from"),a.source=this.type===c.types.string?this.parseExprAtom():this.unexpected());this.semicolon();return this.finishNode(a,"ImportDeclaration")};a.parseImportSpecifiers=function(){var a=[],b=!0;if(this.type===c.types.name){var d=this.startNode();d.local=this.parseIdent();this.checkLVal(d.local,!0);a.push(this.finishNode(d,"ImportDefaultSpecifier"));if(!this.eat(c.types.comma))return a}if(this.type===
  5553. c.types.star)return d=this.startNode(),this.next(),this.expectContextual("as"),d.local=this.parseIdent(),this.checkLVal(d.local,!0),a.push(this.finishNode(d,"ImportNamespaceSpecifier")),a;for(this.expect(c.types.braceL);!this.eat(c.types.braceR);){if(b)b=!1;else if(this.expect(c.types.comma),this.afterTrailingComma(c.types.braceR))break;d=this.startNode();d.imported=this.parseIdent(!0);this.eatContextual("as")?d.local=this.parseIdent():(d.local=d.imported,this.isKeyword(d.local.name)&&this.unexpected(d.local.start),
  5554. this.reservedWordsStrict.test(d.local.name)&&this.raise(d.local.start,"The keyword '"+d.local.name+"' is reserved"));this.checkLVal(d.local,!0);a.push(this.finishNode(d,"ImportSpecifier"))}return a}},{"./identifier":2,"./state":10,"./tokentype":14,"./whitespace":16}],12:[function(a,l,f){f.__esModule=!0;l=a("./state");var c=a("./tokentype"),g=a("./whitespace");a=function h(a,b,c,f){if(!(this instanceof h))throw new TypeError("Cannot call a class as a function");this.token=a;this.isExpr=!!b;this.preserveSpace=
  5555. !!c;this.override=f};f.TokContext=a;var b={b_stat:new a("{",!1),b_expr:new a("{",!0),b_tmpl:new a("${",!0),p_stat:new a("(",!1),p_expr:new a("(",!0),q_tmpl:new a("`",!0,!0,function(a){return a.readTmplToken()}),f_expr:new a("function",!0)};f.types=b;f=l.Parser.prototype;f.initialContext=function(){return[b.b_stat]};f.braceIsBlock=function(a){if(a===c.types.colon){var f=this.curContext();if(f===b.b_stat||f===b.b_expr)return!f.isExpr}return a===c.types._return?g.lineBreak.test(this.input.slice(this.lastTokEnd,
  5556. this.start)):a===c.types._else||a===c.types.semi||a===c.types.eof||a===c.types.parenR?!0:a==c.types.braceL?this.curContext()===b.b_stat:!this.exprAllowed};f.updateContext=function(a){var b,e=this.type;e.keyword&&a==c.types.dot?this.exprAllowed=!1:(b=e.updateContext)?b.call(this,a):this.exprAllowed=e.beforeExpr};c.types.parenR.updateContext=c.types.braceR.updateContext=function(){if(1==this.context.length)this.exprAllowed=!0;else{var a=this.context.pop();a===b.b_stat&&this.curContext()===b.f_expr?
  5557. (this.context.pop(),this.exprAllowed=!1):this.exprAllowed=a===b.b_tmpl?!0:!a.isExpr}};c.types.braceL.updateContext=function(a){this.context.push(this.braceIsBlock(a)?b.b_stat:b.b_expr);this.exprAllowed=!0};c.types.dollarBraceL.updateContext=function(){this.context.push(b.b_tmpl);this.exprAllowed=!0};c.types.parenL.updateContext=function(a){this.context.push(a===c.types._if||a===c.types._for||a===c.types._with||a===c.types._while?b.p_stat:b.p_expr);this.exprAllowed=!0};c.types.incDec.updateContext=
  5558. function(){};c.types._function.updateContext=function(a){!a.beforeExpr||a===c.types.semi||a===c.types._else||a===c.types.colon&&this.curContext()===b.b_stat||this.context.push(b.f_expr);this.exprAllowed=!1};c.types.backQuote.updateContext=function(){this.curContext()===b.q_tmpl?this.context.pop():this.context.push(b.q_tmpl);this.exprAllowed=!1}},{"./state":10,"./tokentype":14,"./whitespace":16}],13:[function(a,l,f){function c(a,b,c,d){try{return new RegExp(a,b)}catch(t){if(void 0!==c)throw t instanceof
  5559. SyntaxError&&d.raise(c,"Error parsing regular expression: "+t.message),t;}}function g(a){if(65535>=a)return String.fromCharCode(a);a-=65536;return String.fromCharCode((a>>10)+55296,(a&1023)+56320)}f.__esModule=!0;var b=a("./identifier"),d=a("./tokentype");l=a("./state");var h=a("./locutil"),n=a("./whitespace"),e=function k(a){if(!(this instanceof k))throw new TypeError("Cannot call a class as a function");this.type=a.type;this.value=a.value;this.start=a.start;this.end=a.end;a.options.locations&&(this.loc=
  5560. new h.SourceLocation(a,a.startLoc,a.endLoc));a.options.ranges&&(this.range=[a.start,a.end])};f.Token=e;a=l.Parser.prototype;var m="object"==typeof Packages&&"[object JavaPackage]"==Object.prototype.toString.call(Packages);a.next=function(){if(this.options.onToken)this.options.onToken(new e(this));this.lastTokEnd=this.end;this.lastTokStart=this.start;this.lastTokEndLoc=this.endLoc;this.lastTokStartLoc=this.startLoc;this.nextToken()};a.getToken=function(){this.next();return new e(this)};"undefined"!==
  5561. typeof Symbol&&(a[Symbol.iterator]=function(){var a=this;return{next:function(){var b=a.getToken();return{done:b.type===d.types.eof,value:b}}}});a.setStrict=function(a){this.strict=a;if(this.type===d.types.num||this.type===d.types.string){this.pos=this.start;if(this.options.locations)for(;this.pos<this.lineStart;)this.lineStart=this.input.lastIndexOf("\n",this.lineStart-2)+1,--this.curLine;this.nextToken()}};a.curContext=function(){return this.context[this.context.length-1]};a.nextToken=function(){var a=
  5562. this.curContext();a&&a.preserveSpace||this.skipSpace();this.start=this.pos;this.options.locations&&(this.startLoc=this.curPosition());if(this.pos>=this.input.length)return this.finishToken(d.types.eof);if(a.override)return a.override(this);this.readToken(this.fullCharCodeAtPos())};a.readToken=function(a){return b.isIdentifierStart(a,6<=this.options.ecmaVersion)||92===a?this.readWord():this.getTokenFromCode(a)};a.fullCharCodeAtPos=function(){var a=this.input.charCodeAt(this.pos);if(55295>=a||57344<=
  5563. a)return a;var b=this.input.charCodeAt(this.pos+1);return(a<<10)+b-56613888};a.skipBlockComment=function(){var a=this.options.onComment&&this.curPosition(),b=this.pos,c=this.input.indexOf("*/",this.pos+=2);-1===c&&this.raise(this.pos-2,"Unterminated comment");this.pos=c+2;if(this.options.locations){n.lineBreakG.lastIndex=b;for(var d=void 0;(d=n.lineBreakG.exec(this.input))&&d.index<this.pos;)++this.curLine,this.lineStart=d.index+d[0].length}if(this.options.onComment)this.options.onComment(!0,this.input.slice(b+
  5564. 2,c),b,this.pos,a,this.curPosition())};a.skipLineComment=function(a){for(var b=this.pos,c=this.options.onComment&&this.curPosition(),d=this.input.charCodeAt(this.pos+=a);this.pos<this.input.length&&10!==d&&13!==d&&8232!==d&&8233!==d;)++this.pos,d=this.input.charCodeAt(this.pos);if(this.options.onComment)this.options.onComment(!1,this.input.slice(b+a,this.pos),b,this.pos,c,this.curPosition())};a.skipSpace=function(){a:for(;this.pos<this.input.length;){var a=this.input.charCodeAt(this.pos);switch(a){case 32:case 160:++this.pos;
  5565. break;case 13:10===this.input.charCodeAt(this.pos+1)&&++this.pos;case 10:case 8232:case 8233:++this.pos;this.options.locations&&(++this.curLine,this.lineStart=this.pos);break;case 47:switch(this.input.charCodeAt(this.pos+1)){case 42:this.skipBlockComment();break;case 47:this.skipLineComment(2);break;default:break a}break;default:if(8<a&&14>a||5760<=a&&n.nonASCIIwhitespace.test(String.fromCharCode(a)))++this.pos;else break a}}};a.finishToken=function(a,b){this.end=this.pos;this.options.locations&&
  5566. (this.endLoc=this.curPosition());var c=this.type;this.type=a;this.value=b;this.updateContext(c)};a.readToken_dot=function(){var a=this.input.charCodeAt(this.pos+1);if(48<=a&&57>=a)return this.readNumber(!0);var b=this.input.charCodeAt(this.pos+2);if(6<=this.options.ecmaVersion&&46===a&&46===b)return this.pos+=3,this.finishToken(d.types.ellipsis);++this.pos;return this.finishToken(d.types.dot)};a.readToken_slash=function(){var a=this.input.charCodeAt(this.pos+1);return this.exprAllowed?(++this.pos,
  5567. this.readRegexp()):61===a?this.finishOp(d.types.assign,2):this.finishOp(d.types.slash,1)};a.readToken_mult_modulo_exp=function(a){var b=this.input.charCodeAt(this.pos+1),c=1;a=42===a?d.types.star:d.types.modulo;7<=this.options.ecmaVersion&&42===b&&(++c,a=d.types.starstar,b=this.input.charCodeAt(this.pos+2));return 61===b?this.finishOp(d.types.assign,c+1):this.finishOp(a,c)};a.readToken_pipe_amp=function(a){var b=this.input.charCodeAt(this.pos+1);return b===a?this.finishOp(124===a?d.types.logicalOR:
  5568. d.types.logicalAND,2):61===b?this.finishOp(d.types.assign,2):this.finishOp(124===a?d.types.bitwiseOR:d.types.bitwiseAND,1)};a.readToken_caret=function(){return 61===this.input.charCodeAt(this.pos+1)?this.finishOp(d.types.assign,2):this.finishOp(d.types.bitwiseXOR,1)};a.readToken_plus_min=function(a){var b=this.input.charCodeAt(this.pos+1);return b===a?45==b&&62==this.input.charCodeAt(this.pos+2)&&n.lineBreak.test(this.input.slice(this.lastTokEnd,this.pos))?(this.skipLineComment(3),this.skipSpace(),
  5569. this.nextToken()):this.finishOp(d.types.incDec,2):61===b?this.finishOp(d.types.assign,2):this.finishOp(d.types.plusMin,1)};a.readToken_lt_gt=function(a){var b=this.input.charCodeAt(this.pos+1),c=1;if(b===a)return c=62===a&&62===this.input.charCodeAt(this.pos+2)?3:2,61===this.input.charCodeAt(this.pos+c)?this.finishOp(d.types.assign,c+1):this.finishOp(d.types.bitShift,c);if(33==b&&60==a&&45==this.input.charCodeAt(this.pos+2)&&45==this.input.charCodeAt(this.pos+3))return this.inModule&&this.unexpected(),
  5570. this.skipLineComment(4),this.skipSpace(),this.nextToken();61===b&&(c=2);return this.finishOp(d.types.relational,c)};a.readToken_eq_excl=function(a){var b=this.input.charCodeAt(this.pos+1);return 61===b?this.finishOp(d.types.equality,61===this.input.charCodeAt(this.pos+2)?3:2):61===a&&62===b&&6<=this.options.ecmaVersion?(this.pos+=2,this.finishToken(d.types.arrow)):this.finishOp(61===a?d.types.eq:d.types.prefix,1)};a.getTokenFromCode=function(a){switch(a){case 46:return this.readToken_dot();case 40:return++this.pos,
  5571. this.finishToken(d.types.parenL);case 41:return++this.pos,this.finishToken(d.types.parenR);case 59:return++this.pos,this.finishToken(d.types.semi);case 44:return++this.pos,this.finishToken(d.types.comma);case 91:return++this.pos,this.finishToken(d.types.bracketL);case 93:return++this.pos,this.finishToken(d.types.bracketR);case 123:return++this.pos,this.finishToken(d.types.braceL);case 125:return++this.pos,this.finishToken(d.types.braceR);case 58:return++this.pos,this.finishToken(d.types.colon);case 63:return++this.pos,
  5572. this.finishToken(d.types.question);case 96:if(6>this.options.ecmaVersion)break;++this.pos;return this.finishToken(d.types.backQuote);case 48:a=this.input.charCodeAt(this.pos+1);if(120===a||88===a)return this.readRadixNumber(16);if(6<=this.options.ecmaVersion){if(111===a||79===a)return this.readRadixNumber(8);if(98===a||66===a)return this.readRadixNumber(2)}case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.readNumber(!1);case 34:case 39:return this.readString(a);case 47:return this.readToken_slash();
  5573. case 37:case 42:return this.readToken_mult_modulo_exp(a);case 124:case 38:return this.readToken_pipe_amp(a);case 94:return this.readToken_caret();case 43:case 45:return this.readToken_plus_min(a);case 60:case 62:return this.readToken_lt_gt(a);case 61:case 33:return this.readToken_eq_excl(a);case 126:return this.finishOp(d.types.prefix,1)}this.raise(this.pos,"Unexpected character '"+g(a)+"'")};a.finishOp=function(a,b){var c=this.input.slice(this.pos,this.pos+b);this.pos+=b;return this.finishToken(a,
  5574. c)};var p=!!c("\uffff","u");a.readRegexp=function(){for(var a=this,b=void 0,e=void 0,f=this.pos;;){this.pos>=this.input.length&&this.raise(f,"Unterminated regular expression");var g=this.input.charAt(this.pos);n.lineBreak.test(g)&&this.raise(f,"Unterminated regular expression");if(b)b=!1;else{if("["===g)e=!0;else if("]"===g&&e)e=!1;else if("/"===g&&!e)break;b="\\"===g}++this.pos}b=this.input.slice(f,this.pos);++this.pos;e=this.readWord1();g=b;if(e){var h=/^[gim]*$/;6<=this.options.ecmaVersion&&(h=
  5575. /^[gimuy]*$/);h.test(e)||this.raise(f,"Invalid regular expression flag");0<=e.indexOf("u")&&!p&&(g=g.replace(/\\u\{([0-9a-fA-F]+)\}/g,function(b,c,d){c=Number("0x"+c);1114111<c&&a.raise(f+d+3,"Code point out of bounds");return"x"}),g=g.replace(/\\u([a-fA-F0-9]{4})|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"))}h=null;m||(c(g,void 0,f,this),h=c(b,e));return this.finishToken(d.types.regexp,{pattern:b,flags:e,value:h})};a.readInt=function(a,b){for(var c=this.pos,d=0,e=0,f=null==b?Infinity:b;e<f;++e){var k=this.input.charCodeAt(this.pos),
  5576. k=97<=k?k-97+10:65<=k?k-65+10:48<=k&&57>=k?k-48:Infinity;if(k>=a)break;++this.pos;d=d*a+k}return this.pos===c||null!=b&&this.pos-c!==b?null:d};a.readRadixNumber=function(a){this.pos+=2;var c=this.readInt(a);null==c&&this.raise(this.start+2,"Expected number in radix "+a);b.isIdentifierStart(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number");return this.finishToken(d.types.num,c)};a.readNumber=function(a){var c=this.pos,e=!1,f=48===this.input.charCodeAt(this.pos);a||
  5577. null!==this.readInt(10)||this.raise(c,"Invalid number");a=this.input.charCodeAt(this.pos);46===a&&(++this.pos,this.readInt(10),e=!0,a=this.input.charCodeAt(this.pos));if(69===a||101===a)a=this.input.charCodeAt(++this.pos),43!==a&&45!==a||++this.pos,null===this.readInt(10)&&this.raise(c,"Invalid number"),e=!0;b.isIdentifierStart(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number");a=this.input.slice(c,this.pos);var k=void 0;e?k=parseFloat(a):f&&1!==a.length?/[89]/.test(a)||
  5578. this.strict?this.raise(c,"Invalid number"):k=parseInt(a,8):k=parseInt(a,10);return this.finishToken(d.types.num,k)};a.readCodePoint=function(){if(123===this.input.charCodeAt(this.pos)){6>this.options.ecmaVersion&&this.unexpected();var a=++this.pos;var b=this.readHexChar(this.input.indexOf("}",this.pos)-this.pos);++this.pos;1114111<b&&this.raise(a,"Code point out of bounds")}else b=this.readHexChar(4);return b};a.readString=function(a){for(var b="",c=++this.pos;;){this.pos>=this.input.length&&this.raise(this.start,
  5579. "Unterminated string constant");var e=this.input.charCodeAt(this.pos);if(e===a)break;92===e?(b+=this.input.slice(c,this.pos),b+=this.readEscapedChar(!1),c=this.pos):(n.isNewLine(e)&&this.raise(this.start,"Unterminated string constant"),++this.pos)}b+=this.input.slice(c,this.pos++);return this.finishToken(d.types.string,b)};a.readTmplToken=function(){for(var a="",b=this.pos;;){this.pos>=this.input.length&&this.raise(this.start,"Unterminated template");var c=this.input.charCodeAt(this.pos);if(96===
  5580. c||36===c&&123===this.input.charCodeAt(this.pos+1)){if(this.pos===this.start&&this.type===d.types.template){if(36===c)return this.pos+=2,this.finishToken(d.types.dollarBraceL);++this.pos;return this.finishToken(d.types.backQuote)}a+=this.input.slice(b,this.pos);return this.finishToken(d.types.template,a)}if(92===c)a+=this.input.slice(b,this.pos),a+=this.readEscapedChar(!0),b=this.pos;else if(n.isNewLine(c)){a+=this.input.slice(b,this.pos);++this.pos;switch(c){case 13:10===this.input.charCodeAt(this.pos)&&
  5581. ++this.pos;case 10:a+="\n";break;default:a+=String.fromCharCode(c)}this.options.locations&&(++this.curLine,this.lineStart=this.pos);b=this.pos}else++this.pos}};a.readEscapedChar=function(a){var b=this.input.charCodeAt(++this.pos);++this.pos;switch(b){case 110:return"\n";case 114:return"\r";case 120:return String.fromCharCode(this.readHexChar(2));case 117:return g(this.readCodePoint());case 116:return"\t";case 98:return"\b";case 118:return"\x0B";case 102:return"\f";case 13:10===this.input.charCodeAt(this.pos)&&
  5582. ++this.pos;case 10:return this.options.locations&&(this.lineStart=this.pos,++this.curLine),"";default:if(48<=b&&55>=b){var b=this.input.substr(this.pos-1,3).match(/^[0-7]+/)[0],c=parseInt(b,8);255<c&&(b=b.slice(0,-1),c=parseInt(b,8));"0"!==b&&(this.strict||a)&&this.raise(this.pos-2,"Octal literal in strict mode");this.pos+=b.length-1;return String.fromCharCode(c)}return String.fromCharCode(b)}};a.readHexChar=function(a){var b=this.pos;a=this.readInt(16,a);null===a&&this.raise(b,"Bad character escape sequence");
  5583. return a};a.readWord1=function(){this.containsEsc=!1;for(var a="",c=!0,d=this.pos,e=6<=this.options.ecmaVersion;this.pos<this.input.length;){var f=this.fullCharCodeAtPos();if(b.isIdentifierChar(f,e))this.pos+=65535>=f?1:2;else if(92===f)this.containsEsc=!0,a+=this.input.slice(d,this.pos),d=this.pos,117!=this.input.charCodeAt(++this.pos)&&this.raise(this.pos,"Expecting Unicode escape sequence \\uXXXX"),++this.pos,f=this.readCodePoint(),(c?b.isIdentifierStart:b.isIdentifierChar)(f,e)||this.raise(d,
  5584. "Invalid Unicode escape"),a+=g(f),d=this.pos;else break;c=!1}return a+this.input.slice(d,this.pos)};a.readWord=function(){var a=this.readWord1(),b=d.types.name;(6<=this.options.ecmaVersion||!this.containsEsc)&&this.keywords.test(a)&&(b=d.keywords[a]);return this.finishToken(b,a)}},{"./identifier":2,"./locutil":5,"./state":10,"./tokentype":14,"./whitespace":16}],14:[function(a,l,f){function c(a,c){return new b(a,{beforeExpr:!0,binop:c})}function g(a){var c=1>=arguments.length||void 0===arguments[1]?
  5585. {}:arguments[1];c.keyword=a;h[a]=d["_"+a]=new b(a,c)}f.__esModule=!0;var b=function e(a){var b=1>=arguments.length||void 0===arguments[1]?{}:arguments[1];if(!(this instanceof e))throw new TypeError("Cannot call a class as a function");this.label=a;this.keyword=b.keyword;this.beforeExpr=!!b.beforeExpr;this.startsExpr=!!b.startsExpr;this.isLoop=!!b.isLoop;this.isAssign=!!b.isAssign;this.prefix=!!b.prefix;this.postfix=!!b.postfix;this.binop=b.binop||null;this.updateContext=null};f.TokenType=b;a={beforeExpr:!0};
  5586. l={startsExpr:!0};var d={num:new b("num",l),regexp:new b("regexp",l),string:new b("string",l),name:new b("name",l),eof:new b("eof"),bracketL:new b("[",{beforeExpr:!0,startsExpr:!0}),bracketR:new b("]"),braceL:new b("{",{beforeExpr:!0,startsExpr:!0}),braceR:new b("}"),parenL:new b("(",{beforeExpr:!0,startsExpr:!0}),parenR:new b(")"),comma:new b(",",a),semi:new b(";",a),colon:new b(":",a),dot:new b("."),question:new b("?",a),arrow:new b("=>",a),template:new b("template"),ellipsis:new b("...",a),backQuote:new b("`",
  5587. l),dollarBraceL:new b("${",{beforeExpr:!0,startsExpr:!0}),eq:new b("=",{beforeExpr:!0,isAssign:!0}),assign:new b("_=",{beforeExpr:!0,isAssign:!0}),incDec:new b("++/--",{prefix:!0,postfix:!0,startsExpr:!0}),prefix:new b("prefix",{beforeExpr:!0,prefix:!0,startsExpr:!0}),logicalOR:c("||",1),logicalAND:c("&&",2),bitwiseOR:c("|",3),bitwiseXOR:c("^",4),bitwiseAND:c("&",5),equality:c("==/!=",6),relational:c("</>",7),bitShift:c("<</>>",8),plusMin:new b("+/-",{beforeExpr:!0,binop:9,prefix:!0,startsExpr:!0}),
  5588. modulo:c("%",10),star:c("*",10),slash:c("/",10),starstar:new b("**",{beforeExpr:!0})};f.types=d;var h={};f.keywords=h;g("break");g("case",a);g("catch");g("continue");g("debugger");g("default",a);g("do",{isLoop:!0,beforeExpr:!0});g("else",a);g("finally");g("for",{isLoop:!0});g("function",l);g("if");g("return",a);g("switch");g("throw",a);g("try");g("var");g("const");g("while",{isLoop:!0});g("with");g("new",{beforeExpr:!0,startsExpr:!0});g("this",l);g("super",l);g("class");g("extends",a);g("export");
  5589. g("import");g("null",l);g("true",l);g("false",l);g("in",{beforeExpr:!0,binop:7});g("instanceof",{beforeExpr:!0,binop:7});g("typeof",{beforeExpr:!0,prefix:!0,startsExpr:!0});g("void",{beforeExpr:!0,prefix:!0,startsExpr:!0});g("delete",{beforeExpr:!0,prefix:!0,startsExpr:!0})},{}],15:[function(a,l,f){f.__esModule=!0;f.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)};f.has=function(a,f){return Object.prototype.hasOwnProperty.call(a,f)}},{}],16:[function(a,l,f){f.__esModule=
  5590. !0;f.isNewLine=function(a){return 10===a||13===a||8232===a||8233==a};a=/\r\n?|\n|\u2028|\u2029/;f.lineBreak=a;f.lineBreakG=new RegExp(a.source,"g");f.nonASCIIwhitespace=/[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/;f.skipWhiteSpace=/(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g},{}]},{},[3])(3)});
  5591. var UPNG = {};
  5592. UPNG.toRGBA8 = function(out)
  5593. {
  5594. var w = out.width, h = out.height;
  5595. if(out.tabs.acTL==null) return [UPNG.toRGBA8.decodeImage(out.data, w, h, out).buffer];
  5596. var frms = [];
  5597. if(out.frames[0].data==null) out.frames[0].data = out.data;
  5598. var len = w*h*4, img = new Uint8Array(len), empty = new Uint8Array(len), prev=new Uint8Array(len);
  5599. for(var i=0; i<out.frames.length; i++)
  5600. {
  5601. var frm = out.frames[i];
  5602. var fx=frm.rect.x, fy=frm.rect.y, fw = frm.rect.width, fh = frm.rect.height;
  5603. var fdata = UPNG.toRGBA8.decodeImage(frm.data, fw,fh, out);
  5604. if(i!=0) for(var j=0; j<len; j++) prev[j]=img[j];
  5605. if (frm.blend==0) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0);
  5606. else if(frm.blend==1) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1);
  5607. frms.push(img.buffer.slice(0));
  5608. if (frm.dispose==0) {}
  5609. else if(frm.dispose==1) UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0);
  5610. else if(frm.dispose==2) for(var j=0; j<len; j++) img[j]=prev[j];
  5611. }
  5612. return frms;
  5613. }
  5614. UPNG.toRGBA8.decodeImage = function(data, w, h, out)
  5615. {
  5616. var area = w*h, bpp = UPNG.decode._getBPP(out);
  5617. var bpl = Math.ceil(w*bpp/8); // bytes per line
  5618. var bf = new Uint8Array(area*4), bf32 = new Uint32Array(bf.buffer);
  5619. var ctype = out.ctype, depth = out.depth;
  5620. var rs = UPNG._bin.readUshort;
  5621. //console.log(ctype, depth);
  5622. var time = Date.now();
  5623. if (ctype==6) { // RGB + alpha
  5624. var qarea = area<<2;
  5625. if(depth== 8) for(var i=0; i<qarea;i+=4) { bf[i] = data[i]; bf[i+1] = data[i+1]; bf[i+2] = data[i+2]; bf[i+3] = data[i+3]; }
  5626. if(depth==16) for(var i=0; i<qarea;i++ ) { bf[i] = data[i<<1]; }
  5627. }
  5628. else if(ctype==2) { // RGB
  5629. var ts=out.tabs["tRNS"];
  5630. if(ts==null) {
  5631. if(depth== 8) for(var i=0; i<area; i++) { var ti=i*3; bf32[i] = (255<<24)|(data[ti+2]<<16)|(data[ti+1]<<8)|data[ti]; }
  5632. if(depth==16) for(var i=0; i<area; i++) { var ti=i*6; bf32[i] = (255<<24)|(data[ti+4]<<16)|(data[ti+2]<<8)|data[ti]; }
  5633. }
  5634. else { var tr=ts[0], tg=ts[1], tb=ts[2];
  5635. if(depth== 8) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*3; bf32[i] = (255<<24)|(data[ti+2]<<16)|(data[ti+1]<<8)|data[ti];
  5636. if(data[ti] ==tr && data[ti+1] ==tg && data[ti+2] ==tb) bf[qi+3] = 0; }
  5637. if(depth==16) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*6; bf32[i] = (255<<24)|(data[ti+4]<<16)|(data[ti+2]<<8)|data[ti];
  5638. if(rs(data,ti)==tr && rs(data,ti+2)==tg && rs(data,ti+4)==tb) bf[qi+3] = 0; }
  5639. }
  5640. }
  5641. else if(ctype==3) { // palette
  5642. var p=out.tabs["PLTE"], ap=out.tabs["tRNS"], tl=ap?ap.length:0;
  5643. //console.log(p, ap);
  5644. if(depth==1) for(var y=0; y<h; y++) { var s0 = y*bpl, t0 = y*w;
  5645. for(var i=0; i<w; i++) { var qi=(t0+i)<<2, j=((data[s0+(i>>3)]>>(7-((i&7)<<0)))& 1), cj=3*j; bf[qi]=p[cj]; bf[qi+1]=p[cj+1]; bf[qi+2]=p[cj+2]; bf[qi+3]=(j<tl)?ap[j]:255; }
  5646. }
  5647. if(depth==2) for(var y=0; y<h; y++) { var s0 = y*bpl, t0 = y*w;
  5648. for(var i=0; i<w; i++) { var qi=(t0+i)<<2, j=((data[s0+(i>>2)]>>(6-((i&3)<<1)))& 3), cj=3*j; bf[qi]=p[cj]; bf[qi+1]=p[cj+1]; bf[qi+2]=p[cj+2]; bf[qi+3]=(j<tl)?ap[j]:255; }
  5649. }
  5650. if(depth==4) for(var y=0; y<h; y++) { var s0 = y*bpl, t0 = y*w;
  5651. for(var i=0; i<w; i++) { var qi=(t0+i)<<2, j=((data[s0+(i>>1)]>>(4-((i&1)<<2)))&15), cj=3*j; bf[qi]=p[cj]; bf[qi+1]=p[cj+1]; bf[qi+2]=p[cj+2]; bf[qi+3]=(j<tl)?ap[j]:255; }
  5652. }
  5653. if(depth==8) for(var i=0; i<area; i++ ) { var qi=i<<2, j=data[i] , cj=3*j; bf[qi]=p[cj]; bf[qi+1]=p[cj+1]; bf[qi+2]=p[cj+2]; bf[qi+3]=(j<tl)?ap[j]:255; }
  5654. }
  5655. else if(ctype==4) { // gray + alpha
  5656. if(depth== 8) for(var i=0; i<area; i++) { var qi=i<<2, di=i<<1, gr=data[di]; bf[qi]=gr; bf[qi+1]=gr; bf[qi+2]=gr; bf[qi+3]=data[di+1]; }
  5657. if(depth==16) for(var i=0; i<area; i++) { var qi=i<<2, di=i<<2, gr=data[di]; bf[qi]=gr; bf[qi+1]=gr; bf[qi+2]=gr; bf[qi+3]=data[di+2]; }
  5658. }
  5659. else if(ctype==0) { // gray
  5660. var tr = out.tabs["tRNS"] ? out.tabs["tRNS"] : -1;
  5661. for(var y=0; y<h; y++) {
  5662. var off = y*bpl, to = y*w;
  5663. if (depth== 1) for(var x=0; x<w; x++) { var gr=255*((data[off+(x>>>3)]>>>(7 -((x&7) )))& 1), al=(gr==tr*255)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
  5664. else if(depth== 2) for(var x=0; x<w; x++) { var gr= 85*((data[off+(x>>>2)]>>>(6 -((x&3)<<1)))& 3), al=(gr==tr* 85)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
  5665. else if(depth== 4) for(var x=0; x<w; x++) { var gr= 17*((data[off+(x>>>1)]>>>(4 -((x&1)<<2)))&15), al=(gr==tr* 17)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
  5666. else if(depth== 8) for(var x=0; x<w; x++) { var gr=data[off+ x], al=(gr ==tr)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
  5667. else if(depth==16) for(var x=0; x<w; x++) { var gr=data[off+(x<<1)], al=(rs(data,off+(x<<i))==tr)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
  5668. }
  5669. }
  5670. //console.log(Date.now()-time);
  5671. return bf;
  5672. }
  5673. UPNG.decode = function(buff)
  5674. {
  5675. var data = new Uint8Array(buff), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint;
  5676. var out = {tabs:{}, frames:[]};
  5677. var dd = new Uint8Array(data.length), doff = 0; // put all IDAT data into it
  5678. var fd, foff = 0; // frames
  5679. var mgck = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
  5680. for(var i=0; i<8; i++) if(data[i]!=mgck[i]) throw "The input is not a PNG file!";
  5681. while(offset<data.length)
  5682. {
  5683. var len = bin.readUint(data, offset); offset += 4;
  5684. var type = bin.readASCII(data, offset, 4); offset += 4;
  5685. //console.log(type,len);
  5686. if (type=="IHDR") { UPNG.decode._IHDR(data, offset, out); }
  5687. else if(type=="CgBI") { out.tabs[type] = data.slice(offset,offset+4); }
  5688. else if(type=="IDAT") {
  5689. for(var i=0; i<len; i++) dd[doff+i] = data[offset+i];
  5690. doff += len;
  5691. }
  5692. else if(type=="acTL") {
  5693. out.tabs[type] = { num_frames:rUi(data, offset), num_plays:rUi(data, offset+4) };
  5694. fd = new Uint8Array(data.length);
  5695. }
  5696. else if(type=="fcTL") {
  5697. if(foff!=0) { var fr = out.frames[out.frames.length-1];
  5698. fr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height); foff=0;
  5699. }
  5700. var rct = {x:rUi(data, offset+12),y:rUi(data, offset+16),width:rUi(data, offset+4),height:rUi(data, offset+8)};
  5701. var del = rUs(data, offset+22); del = rUs(data, offset+20) / (del==0?100:del);
  5702. var frm = {rect:rct, delay:Math.round(del*1000), dispose:data[offset+24], blend:data[offset+25]};
  5703. //console.log(frm);
  5704. out.frames.push(frm);
  5705. }
  5706. else if(type=="fdAT") {
  5707. for(var i=0; i<len-4; i++) fd[foff+i] = data[offset+i+4];
  5708. foff += len-4;
  5709. }
  5710. else if(type=="pHYs") {
  5711. out.tabs[type] = [bin.readUint(data, offset), bin.readUint(data, offset+4), data[offset+8]];
  5712. }
  5713. else if(type=="cHRM") {
  5714. out.tabs[type] = [];
  5715. for(var i=0; i<8; i++) out.tabs[type].push(bin.readUint(data, offset+i*4));
  5716. }
  5717. else if(type=="tEXt" || type=="zTXt") {
  5718. if(out.tabs[type]==null) out.tabs[type] = {};
  5719. var nz = bin.nextZero(data, offset);
  5720. var keyw = bin.readASCII(data, offset, nz-offset);
  5721. var text, tl=offset+len-nz-1;
  5722. if(type=="tEXt") text = bin.readASCII(data, nz+1, tl);
  5723. else {
  5724. var bfr = UPNG.decode._inflate(data.slice(nz+2,nz+2+tl));
  5725. text = bin.readUTF8(bfr,0,bfr.length);
  5726. }
  5727. out.tabs[type][keyw] = text;
  5728. }
  5729. else if(type=="iTXt") {
  5730. if(out.tabs[type]==null) out.tabs[type] = {};
  5731. var nz = 0, off = offset;
  5732. nz = bin.nextZero(data, off);
  5733. var keyw = bin.readASCII(data, off, nz-off); off = nz + 1;
  5734. var cflag = data[off], cmeth = data[off+1]; off+=2;
  5735. nz = bin.nextZero(data, off);
  5736. var ltag = bin.readASCII(data, off, nz-off); off = nz + 1;
  5737. nz = bin.nextZero(data, off);
  5738. var tkeyw = bin.readUTF8(data, off, nz-off); off = nz + 1;
  5739. var text, tl=len-(off-offset);
  5740. if(cflag==0) text = bin.readUTF8(data, off, tl);
  5741. else {
  5742. var bfr = UPNG.decode._inflate(data.slice(off,off+tl));
  5743. text = bin.readUTF8(bfr,0,bfr.length);
  5744. }
  5745. out.tabs[type][keyw] = text;
  5746. }
  5747. else if(type=="PLTE") {
  5748. out.tabs[type] = bin.readBytes(data, offset, len);
  5749. }
  5750. else if(type=="hIST") {
  5751. var pl = out.tabs["PLTE"].length/3;
  5752. out.tabs[type] = []; for(var i=0; i<pl; i++) out.tabs[type].push(rUs(data, offset+i*2));
  5753. }
  5754. else if(type=="tRNS") {
  5755. if (out.ctype==3) out.tabs[type] = bin.readBytes(data, offset, len);
  5756. else if(out.ctype==0) out.tabs[type] = rUs(data, offset);
  5757. else if(out.ctype==2) out.tabs[type] = [ rUs(data,offset),rUs(data,offset+2),rUs(data,offset+4) ];
  5758. //else console.log("tRNS for unsupported color type",out.ctype, len);
  5759. }
  5760. else if(type=="gAMA") out.tabs[type] = bin.readUint(data, offset)/100000;
  5761. else if(type=="sRGB") out.tabs[type] = data[offset];
  5762. else if(type=="bKGD")
  5763. {
  5764. if (out.ctype==0 || out.ctype==4) out.tabs[type] = [rUs(data, offset)];
  5765. else if(out.ctype==2 || out.ctype==6) out.tabs[type] = [rUs(data, offset), rUs(data, offset+2), rUs(data, offset+4)];
  5766. else if(out.ctype==3) out.tabs[type] = data[offset];
  5767. }
  5768. else if(type=="IEND") {
  5769. break;
  5770. }
  5771. //else { console.log("unknown chunk type", type, len); out.tabs[type]=data.slice(offset,offset+len); }
  5772. offset += len;
  5773. var crc = bin.readUint(data, offset); offset += 4;
  5774. }
  5775. if(foff!=0) { var fr = out.frames[out.frames.length-1];
  5776. fr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height); foff=0;
  5777. }
  5778. out.data = UPNG.decode._decompress(out, dd, out.width, out.height);
  5779. delete out.compress; delete out.interlace; delete out.filter;
  5780. return out;
  5781. }
  5782. UPNG.decode._decompress = function(out, dd, w, h) {
  5783. var time = Date.now();
  5784. var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), buff = new Uint8Array((bpl+1+out.interlace)*h);
  5785. if(out.tabs["CgBI"]) dd = UPNG.inflateRaw(dd,buff);
  5786. else dd = UPNG.decode._inflate(dd,buff);
  5787. //console.log(dd.length, buff.length);
  5788. //console.log(Date.now()-time);
  5789. var time=Date.now();
  5790. if (out.interlace==0) dd = UPNG.decode._filterZero(dd, out, 0, w, h);
  5791. else if(out.interlace==1) dd = UPNG.decode._readInterlace(dd, out);
  5792. //console.log(Date.now()-time);
  5793. return dd;
  5794. }
  5795. UPNG.decode._inflate = function(data, buff) { var out=UPNG["inflateRaw"](new Uint8Array(data.buffer, 2,data.length-6),buff); return out; }
  5796. UPNG.inflateRaw=function(){var H={};H.H={};H.H.N=function(N,W){var R=Uint8Array,i=0,m=0,J=0,h=0,Q=0,X=0,u=0,w=0,d=0,v,C;
  5797. if(N[0]==3&&N[1]==0)return W?W:new R(0);var V=H.H,n=V.b,A=V.e,l=V.R,M=V.n,I=V.A,e=V.Z,b=V.m,Z=W==null;
  5798. if(Z)W=new R(N.length>>>2<<5);while(i==0){i=n(N,d,1);m=n(N,d+1,2);d+=3;if(m==0){if((d&7)!=0)d+=8-(d&7);
  5799. var D=(d>>>3)+4,q=N[D-4]|N[D-3]<<8;if(Z)W=H.H.W(W,w+q);W.set(new R(N.buffer,N.byteOffset+D,q),w);d=D+q<<3;
  5800. w+=q;continue}if(Z)W=H.H.W(W,w+(1<<17));if(m==1){v=b.J;C=b.h;X=(1<<9)-1;u=(1<<5)-1}if(m==2){J=A(N,d,5)+257;
  5801. h=A(N,d+5,5)+1;Q=A(N,d+10,4)+4;d+=14;var E=d,j=1;for(var c=0;c<38;c+=2){b.Q[c]=0;b.Q[c+1]=0}for(var c=0;
  5802. c<Q;c++){var K=A(N,d+c*3,3);b.Q[(b.X[c]<<1)+1]=K;if(K>j)j=K}d+=3*Q;M(b.Q,j);I(b.Q,j,b.u);v=b.w;C=b.d;
  5803. d=l(b.u,(1<<j)-1,J+h,N,d,b.v);var r=V.V(b.v,0,J,b.C);X=(1<<r)-1;var S=V.V(b.v,J,h,b.D);u=(1<<S)-1;M(b.C,r);
  5804. I(b.C,r,v);M(b.D,S);I(b.D,S,C)}while(!0){var T=v[e(N,d)&X];d+=T&15;var p=T>>>4;if(p>>>8==0){W[w++]=p}else if(p==256){break}else{var z=w+p-254;
  5805. if(p>264){var _=b.q[p-257];z=w+(_>>>3)+A(N,d,_&7);d+=_&7}var $=C[e(N,d)&u];d+=$&15;var s=$>>>4,Y=b.c[s],a=(Y>>>4)+n(N,d,Y&15);
  5806. d+=Y&15;while(w<z){W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a]}w=z}}}return W.length==w?W:W.slice(0,w)};
  5807. H.H.W=function(N,W){var R=N.length;if(W<=R)return N;var V=new Uint8Array(R<<1);V.set(N,0);return V};
  5808. H.H.R=function(N,W,R,V,n,A){var l=H.H.e,M=H.H.Z,I=0;while(I<R){var e=N[M(V,n)&W];n+=e&15;var b=e>>>4;
  5809. if(b<=15){A[I]=b;I++}else{var Z=0,m=0;if(b==16){m=3+l(V,n,2);n+=2;Z=A[I-1]}else if(b==17){m=3+l(V,n,3);
  5810. n+=3}else if(b==18){m=11+l(V,n,7);n+=7}var J=I+m;while(I<J){A[I]=Z;I++}}}return n};H.H.V=function(N,W,R,V){var n=0,A=0,l=V.length>>>1;
  5811. while(A<R){var M=N[A+W];V[A<<1]=0;V[(A<<1)+1]=M;if(M>n)n=M;A++}while(A<l){V[A<<1]=0;V[(A<<1)+1]=0;A++}return n};
  5812. H.H.n=function(N,W){var R=H.H.m,V=N.length,n,A,l,M,I,e=R.j;for(var M=0;M<=W;M++)e[M]=0;for(M=1;M<V;M+=2)e[N[M]]++;
  5813. var b=R.K;n=0;e[0]=0;for(A=1;A<=W;A++){n=n+e[A-1]<<1;b[A]=n}for(l=0;l<V;l+=2){I=N[l+1];if(I!=0){N[l]=b[I];
  5814. b[I]++}}};H.H.A=function(N,W,R){var V=N.length,n=H.H.m,A=n.r;for(var l=0;l<V;l+=2)if(N[l+1]!=0){var M=l>>1,I=N[l+1],e=M<<4|I,b=W-I,Z=N[l]<<b,m=Z+(1<<b);
  5815. while(Z!=m){var J=A[Z]>>>15-W;R[J]=e;Z++}}};H.H.l=function(N,W){var R=H.H.m.r,V=15-W;for(var n=0;n<N.length;
  5816. n+=2){var A=N[n]<<W-N[n+1];N[n]=R[A]>>>V}};H.H.M=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8};
  5817. H.H.I=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8;N[V+2]|=R>>>16};H.H.e=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8)>>>(W&7)&(1<<R)-1};
  5818. H.H.b=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)&(1<<R)-1};H.H.Z=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)};
  5819. H.H.i=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16|N[(W>>>3)+3]<<24)>>>(W&7)};H.H.m=function(){var N=Uint16Array,W=Uint32Array;
  5820. return{K:new N(16),j:new N(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new N(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new W(32),J:new N(512),_:[],h:new N(32),$:[],w:new N(32768),C:[],v:[],d:new N(32768),D:[],u:new N(512),Q:[],r:new N(1<<15),s:new W(286),Y:new W(30),a:new W(19),t:new W(15e3),k:new N(1<<16),g:new N(1<<15)}}();
  5821. (function(){var N=H.H.m,W=1<<15;for(var R=0;R<W;R++){var V=R;V=(V&2863311530)>>>1|(V&1431655765)<<1;
  5822. V=(V&3435973836)>>>2|(V&858993459)<<2;V=(V&4042322160)>>>4|(V&252645135)<<4;V=(V&4278255360)>>>8|(V&16711935)<<8;
  5823. N.r[R]=(V>>>16|V<<16)>>>17}function n(A,l,M){while(l--!=0)A.push(0,M)}for(var R=0;R<32;R++){N.q[R]=N.S[R]<<3|N.T[R];
  5824. N.c[R]=N.p[R]<<4|N.z[R]}n(N._,144,8);n(N._,255-143,9);n(N._,279-255,7);n(N._,287-279,8);H.H.n(N._,9);
  5825. H.H.A(N._,9,N.J);H.H.l(N._,9);n(N.$,32,5);H.H.n(N.$,5);H.H.A(N.$,5,N.h);H.H.l(N.$,5);n(N.Q,19,0);n(N.C,286,0);
  5826. n(N.D,30,0);n(N.v,320,0)}());return H.H.N}()
  5827. UPNG.decode._readInterlace = function(data, out)
  5828. {
  5829. var w = out.width, h = out.height;
  5830. var bpp = UPNG.decode._getBPP(out), cbpp = bpp>>3, bpl = Math.ceil(w*bpp/8);
  5831. var img = new Uint8Array( h * bpl );
  5832. var di = 0;
  5833. var starting_row = [ 0, 0, 4, 0, 2, 0, 1 ];
  5834. var starting_col = [ 0, 4, 0, 2, 0, 1, 0 ];
  5835. var row_increment = [ 8, 8, 8, 4, 4, 2, 2 ];
  5836. var col_increment = [ 8, 8, 4, 4, 2, 2, 1 ];
  5837. var pass=0;
  5838. while(pass<7)
  5839. {
  5840. var ri = row_increment[pass], ci = col_increment[pass];
  5841. var sw = 0, sh = 0;
  5842. var cr = starting_row[pass]; while(cr<h) { cr+=ri; sh++; }
  5843. var cc = starting_col[pass]; while(cc<w) { cc+=ci; sw++; }
  5844. var bpll = Math.ceil(sw*bpp/8);
  5845. UPNG.decode._filterZero(data, out, di, sw, sh);
  5846. var y=0, row = starting_row[pass];
  5847. while(row<h)
  5848. {
  5849. var col = starting_col[pass];
  5850. var cdi = (di+y*bpll)<<3;
  5851. while(col<w)
  5852. {
  5853. if(bpp==1) {
  5854. var val = data[cdi>>3]; val = (val>>(7-(cdi&7)))&1;
  5855. img[row*bpl + (col>>3)] |= (val << (7-((col&7)<<0)));
  5856. }
  5857. if(bpp==2) {
  5858. var val = data[cdi>>3]; val = (val>>(6-(cdi&7)))&3;
  5859. img[row*bpl + (col>>2)] |= (val << (6-((col&3)<<1)));
  5860. }
  5861. if(bpp==4) {
  5862. var val = data[cdi>>3]; val = (val>>(4-(cdi&7)))&15;
  5863. img[row*bpl + (col>>1)] |= (val << (4-((col&1)<<2)));
  5864. }
  5865. if(bpp>=8) {
  5866. var ii = row*bpl+col*cbpp;
  5867. for(var j=0; j<cbpp; j++) img[ii+j] = data[(cdi>>3)+j];
  5868. }
  5869. cdi+=bpp; col+=ci;
  5870. }
  5871. y++; row += ri;
  5872. }
  5873. if(sw*sh!=0) di += sh * (1 + bpll);
  5874. pass = pass + 1;
  5875. }
  5876. return img;
  5877. }
  5878. UPNG.decode._getBPP = function(out) {
  5879. var noc = [1,null,3,1,2,null,4][out.ctype];
  5880. return noc * out.depth;
  5881. }
  5882. UPNG.decode._filterZero = function(data, out, off, w, h)
  5883. {
  5884. var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), paeth = UPNG.decode._paeth;
  5885. bpp = Math.ceil(bpp/8);
  5886. var i=0, di=1, type=data[off], x=0;
  5887. if(type>1) data[off]=[0,0,1][type-2];
  5888. if(type==3) for(x=bpp; x<bpl; x++) data[x+1] = (data[x+1] + (data[x+1-bpp]>>>1) )&255;
  5889. for(var y=0; y<h; y++) {
  5890. i = off+y*bpl; di = i+y+1;
  5891. type = data[di-1]; x=0;
  5892. if (type==0) for(; x<bpl; x++) data[i+x] = data[di+x];
  5893. else if(type==1) { for(; x<bpp; x++) data[i+x] = data[di+x];
  5894. for(; x<bpl; x++) data[i+x] = (data[di+x] + data[i+x-bpp]); }
  5895. else if(type==2) { for(; x<bpl; x++) data[i+x] = (data[di+x] + data[i+x-bpl]); }
  5896. else if(type==3) { for(; x<bpp; x++) data[i+x] = (data[di+x] + ( data[i+x-bpl]>>>1));
  5897. for(; x<bpl; x++) data[i+x] = (data[di+x] + ((data[i+x-bpl]+data[i+x-bpp])>>>1) ); }
  5898. else { for(; x<bpp; x++) data[i+x] = (data[di+x] + paeth(0, data[i+x-bpl], 0));
  5899. for(; x<bpl; x++) data[i+x] = (data[di+x] + paeth(data[i+x-bpp], data[i+x-bpl], data[i+x-bpp-bpl]) ); }
  5900. }
  5901. return data;
  5902. }
  5903. UPNG.decode._paeth = function(a,b,c)
  5904. {
  5905. var p = a+b-c, pa = (p-a), pb = (p-b), pc = (p-c);
  5906. if (pa*pa <= pb*pb && pa*pa <= pc*pc) return a;
  5907. else if (pb*pb <= pc*pc) return b;
  5908. return c;
  5909. }
  5910. UPNG.decode._IHDR = function(data, offset, out)
  5911. {
  5912. var bin = UPNG._bin;
  5913. out.width = bin.readUint(data, offset); offset += 4;
  5914. out.height = bin.readUint(data, offset); offset += 4;
  5915. out.depth = data[offset]; offset++;
  5916. out.ctype = data[offset]; offset++;
  5917. out.compress = data[offset]; offset++;
  5918. out.filter = data[offset]; offset++;
  5919. out.interlace = data[offset]; offset++;
  5920. }
  5921. UPNG._bin = {
  5922. nextZero : function(data,p) { while(data[p]!=0) p++; return p; },
  5923. readUshort : function(buff,p) { return (buff[p]<< 8) | buff[p+1]; },
  5924. writeUshort: function(buff,p,n){ buff[p] = (n>>8)&255; buff[p+1] = n&255; },
  5925. readUint : function(buff,p) { return (buff[p]*(256*256*256)) + ((buff[p+1]<<16) | (buff[p+2]<< 8) | buff[p+3]); },
  5926. writeUint : function(buff,p,n){ buff[p]=(n>>24)&255; buff[p+1]=(n>>16)&255; buff[p+2]=(n>>8)&255; buff[p+3]=n&255; },
  5927. readASCII : function(buff,p,l){ var s = ""; for(var i=0; i<l; i++) s += String.fromCharCode(buff[p+i]); return s; },
  5928. writeASCII : function(data,p,s){ for(var i=0; i<s.length; i++) data[p+i] = s.charCodeAt(i); },
  5929. readBytes : function(buff,p,l){ var arr = []; for(var i=0; i<l; i++) arr.push(buff[p+i]); return arr; },
  5930. pad : function(n) { return n.length < 2 ? "0" + n : n; },
  5931. readUTF8 : function(buff, p, l) {
  5932. var s = "", ns;
  5933. for(var i=0; i<l; i++) s += "%" + UPNG._bin.pad(buff[p+i].toString(16));
  5934. try { ns = decodeURIComponent(s); }
  5935. catch(e) { return UPNG._bin.readASCII(buff, p, l); }
  5936. return ns;
  5937. }
  5938. }
  5939. UPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode)
  5940. {
  5941. var w = Math.min(sw,tw), h = Math.min(sh,th);
  5942. var si=0, ti=0;
  5943. for(var y=0; y<h; y++)
  5944. for(var x=0; x<w; x++)
  5945. {
  5946. if(xoff>=0 && yoff>=0) { si = (y*sw+x)<<2; ti = (( yoff+y)*tw+xoff+x)<<2; }
  5947. else { si = ((-yoff+y)*sw-xoff+x)<<2; ti = (y*tw+x)<<2; }
  5948. if (mode==0) { tb[ti] = sb[si]; tb[ti+1] = sb[si+1]; tb[ti+2] = sb[si+2]; tb[ti+3] = sb[si+3]; }
  5949. else if(mode==1) {
  5950. var fa = sb[si+3]*(1/255), fr=sb[si]*fa, fg=sb[si+1]*fa, fb=sb[si+2]*fa;
  5951. var ba = tb[ti+3]*(1/255), br=tb[ti]*ba, bg=tb[ti+1]*ba, bb=tb[ti+2]*ba;
  5952. var ifa=1-fa, oa = fa+ba*ifa, ioa = (oa==0?0:1/oa);
  5953. tb[ti+3] = 255*oa;
  5954. tb[ti+0] = (fr+br*ifa)*ioa;
  5955. tb[ti+1] = (fg+bg*ifa)*ioa;
  5956. tb[ti+2] = (fb+bb*ifa)*ioa;
  5957. }
  5958. else if(mode==2){ // copy only differences, otherwise zero
  5959. var fa = sb[si+3], fr=sb[si], fg=sb[si+1], fb=sb[si+2];
  5960. var ba = tb[ti+3], br=tb[ti], bg=tb[ti+1], bb=tb[ti+2];
  5961. if(fa==ba && fr==br && fg==bg && fb==bb) { tb[ti]=0; tb[ti+1]=0; tb[ti+2]=0; tb[ti+3]=0; }
  5962. else { tb[ti]=fr; tb[ti+1]=fg; tb[ti+2]=fb; tb[ti+3]=fa; }
  5963. }
  5964. else if(mode==3){ // check if can be blended
  5965. var fa = sb[si+3], fr=sb[si], fg=sb[si+1], fb=sb[si+2];
  5966. var ba = tb[ti+3], br=tb[ti], bg=tb[ti+1], bb=tb[ti+2];
  5967. if(fa==ba && fr==br && fg==bg && fb==bb) continue;
  5968. //if(fa!=255 && ba!=0) return false;
  5969. if(fa<220 && ba>20) return false;
  5970. }
  5971. }
  5972. return true;
  5973. }
  5974. UPNG.encode = function(bufs, w, h, ps, dels, tabs, forbidPlte)
  5975. {
  5976. if(ps==null) ps=0;
  5977. if(forbidPlte==null) forbidPlte = false;
  5978. var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte]);
  5979. UPNG.encode.compressPNG(nimg, -1);
  5980. return UPNG.encode._main(nimg, w, h, dels, tabs);
  5981. }
  5982. UPNG.encodeLL = function(bufs, w, h, cc, ac, depth, dels, tabs) {
  5983. var nimg = { ctype: 0 + (cc==1 ? 0 : 2) + (ac==0 ? 0 : 4), depth: depth, frames: [] };
  5984. var time = Date.now();
  5985. var bipp = (cc+ac)*depth, bipl = bipp * w;
  5986. for(var i=0; i<bufs.length; i++)
  5987. nimg.frames.push({ rect:{x:0,y:0,width:w,height:h}, img:new Uint8Array(bufs[i]), blend:0, dispose:1, bpp:Math.ceil(bipp/8), bpl:Math.ceil(bipl/8) });
  5988. UPNG.encode.compressPNG(nimg, 0, true);
  5989. var out = UPNG.encode._main(nimg, w, h, dels, tabs);
  5990. return out;
  5991. }
  5992. UPNG.encode._main = function(nimg, w, h, dels, tabs) {
  5993. if(tabs==null) tabs={};
  5994. var crc = UPNG.crc.crc, wUi = UPNG._bin.writeUint, wUs = UPNG._bin.writeUshort, wAs = UPNG._bin.writeASCII;
  5995. var offset = 8, anim = nimg.frames.length>1, pltAlpha = false;
  5996. var leng = 8 + (16+5+4) /*+ (9+4)*/ + (anim ? 20 : 0);
  5997. if(tabs["sRGB"]!=null) leng += 8+1+4;
  5998. if(tabs["pHYs"]!=null) leng += 8+9+4;
  5999. if(nimg.ctype==3) {
  6000. var dl = nimg.plte.length;
  6001. for(var i=0; i<dl; i++) if((nimg.plte[i]>>>24)!=255) pltAlpha = true;
  6002. leng += (8 + dl*3 + 4) + (pltAlpha ? (8 + dl*1 + 4) : 0);
  6003. }
  6004. for(var j=0; j<nimg.frames.length; j++)
  6005. {
  6006. var fr = nimg.frames[j];
  6007. if(anim) leng += 38;
  6008. leng += fr.cimg.length + 12;
  6009. if(j!=0) leng+=4;
  6010. }
  6011. leng += 12;
  6012. var data = new Uint8Array(leng);
  6013. var wr=[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
  6014. for(var i=0; i<8; i++) data[i]=wr[i];
  6015. wUi(data,offset, 13); offset+=4;
  6016. wAs(data,offset,"IHDR"); offset+=4;
  6017. wUi(data,offset,w); offset+=4;
  6018. wUi(data,offset,h); offset+=4;
  6019. data[offset] = nimg.depth; offset++; // depth
  6020. data[offset] = nimg.ctype; offset++; // ctype
  6021. data[offset] = 0; offset++; // compress
  6022. data[offset] = 0; offset++; // filter
  6023. data[offset] = 0; offset++; // interlace
  6024. wUi(data,offset,crc(data,offset-17,17)); offset+=4; // crc
  6025. // 13 bytes to say, that it is sRGB
  6026. if(tabs["sRGB"]!=null) {
  6027. wUi(data,offset, 1); offset+=4;
  6028. wAs(data,offset,"sRGB"); offset+=4;
  6029. data[offset] = tabs["sRGB"]; offset++;
  6030. wUi(data,offset,crc(data,offset-5,5)); offset+=4; // crc
  6031. }
  6032. if(tabs["pHYs"]!=null) {
  6033. wUi(data,offset, 9); offset+=4;
  6034. wAs(data,offset,"pHYs"); offset+=4;
  6035. wUi(data,offset, tabs["pHYs"][0]); offset+=4;
  6036. wUi(data,offset, tabs["pHYs"][1]); offset+=4;
  6037. data[offset]=tabs["pHYs"][2]; offset++;
  6038. wUi(data,offset,crc(data,offset-13,13)); offset+=4; // crc
  6039. }
  6040. if(anim) {
  6041. wUi(data,offset, 8); offset+=4;
  6042. wAs(data,offset,"acTL"); offset+=4;
  6043. wUi(data,offset, nimg.frames.length); offset+=4;
  6044. wUi(data,offset, tabs["loop"]!=null?tabs["loop"]:0); offset+=4;
  6045. wUi(data,offset,crc(data,offset-12,12)); offset+=4; // crc
  6046. }
  6047. if(nimg.ctype==3) {
  6048. var dl = nimg.plte.length;
  6049. wUi(data,offset, dl*3); offset+=4;
  6050. wAs(data,offset,"PLTE"); offset+=4;
  6051. for(var i=0; i<dl; i++){
  6052. var ti=i*3, c=nimg.plte[i], r=(c)&255, g=(c>>>8)&255, b=(c>>>16)&255;
  6053. data[offset+ti+0]=r; data[offset+ti+1]=g; data[offset+ti+2]=b;
  6054. }
  6055. offset+=dl*3;
  6056. wUi(data,offset,crc(data,offset-dl*3-4,dl*3+4)); offset+=4; // crc
  6057. if(pltAlpha) {
  6058. wUi(data,offset, dl); offset+=4;
  6059. wAs(data,offset,"tRNS"); offset+=4;
  6060. for(var i=0; i<dl; i++) data[offset+i]=(nimg.plte[i]>>>24)&255;
  6061. offset+=dl;
  6062. wUi(data,offset,crc(data,offset-dl-4,dl+4)); offset+=4; // crc
  6063. }
  6064. }
  6065. var fi = 0;
  6066. for(var j=0; j<nimg.frames.length; j++)
  6067. {
  6068. var fr = nimg.frames[j];
  6069. if(anim) {
  6070. wUi(data, offset, 26); offset+=4;
  6071. wAs(data, offset,"fcTL"); offset+=4;
  6072. wUi(data, offset, fi++); offset+=4;
  6073. wUi(data, offset, fr.rect.width ); offset+=4;
  6074. wUi(data, offset, fr.rect.height); offset+=4;
  6075. wUi(data, offset, fr.rect.x); offset+=4;
  6076. wUi(data, offset, fr.rect.y); offset+=4;
  6077. wUs(data, offset, dels[j]); offset+=2;
  6078. wUs(data, offset, 1000); offset+=2;
  6079. data[offset] = fr.dispose; offset++; // dispose
  6080. data[offset] = fr.blend ; offset++; // blend
  6081. wUi(data,offset,crc(data,offset-30,30)); offset+=4; // crc
  6082. }
  6083. var imgd = fr.cimg, dl = imgd.length;
  6084. wUi(data,offset, dl+(j==0?0:4)); offset+=4;
  6085. var ioff = offset;
  6086. wAs(data,offset,(j==0)?"IDAT":"fdAT"); offset+=4;
  6087. if(j!=0) { wUi(data, offset, fi++); offset+=4; }
  6088. data.set(imgd,offset);
  6089. offset += dl;
  6090. wUi(data,offset,crc(data,ioff,offset-ioff)); offset+=4; // crc
  6091. }
  6092. wUi(data,offset, 0); offset+=4;
  6093. wAs(data,offset,"IEND"); offset+=4;
  6094. wUi(data,offset,crc(data,offset-4,4)); offset+=4; // crc
  6095. return data.buffer;
  6096. }
  6097. UPNG.encode.compressPNG = function(out, filter, levelZero) {
  6098. for(var i=0; i<out.frames.length; i++) {
  6099. var frm = out.frames[i], nw=frm.rect.width, nh=frm.rect.height;
  6100. var fdata = new Uint8Array(nh*frm.bpl+nh);
  6101. frm.cimg = UPNG.encode._filterZero(frm.img,nh,frm.bpp,frm.bpl,fdata, filter, levelZero);
  6102. }
  6103. }
  6104. UPNG.encode.compress = function(bufs, w, h, ps, prms) // prms: onlyBlend, minBits, forbidPlte
  6105. {
  6106. //var time = Date.now();
  6107. var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4];
  6108. var ctype = 6, depth = 8, alphaAnd=255
  6109. for(var j=0; j<bufs.length; j++) { // when not quantized, other frames can contain colors, that are not in an initial frame
  6110. var img = new Uint8Array(bufs[j]), ilen = img.length;
  6111. for(var i=0; i<ilen; i+=4) alphaAnd &= img[i+3];
  6112. }
  6113. var gotAlpha = (alphaAnd!=255);
  6114. //console.log("alpha check", Date.now()-time); time = Date.now();
  6115. //var brute = gotAlpha && forGIF; // brute : frames can only be copied, not "blended"
  6116. var frms = UPNG.encode.framize(bufs, w, h, onlyBlend, evenCrd, forbidPrev);
  6117. //console.log("framize", Date.now()-time); time = Date.now();
  6118. var cmap={}, plte=[], inds=[];
  6119. if(ps!=0) {
  6120. var nbufs = []; for(var i=0; i<frms.length; i++) nbufs.push(frms[i].img.buffer);
  6121. var abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps); console.log(qres);
  6122. var cof = 0, bb = new Uint8Array(qres.abuf);
  6123. for(var i=0; i<frms.length; i++) { var ti=frms[i].img, bln=ti.length; inds.push(new Uint8Array(qres.inds.buffer, cof>>2, bln>>2));
  6124. for(var j=0; j<bln; j+=4) { ti[j]=bb[cof+j]; ti[j+1]=bb[cof+j+1]; ti[j+2]=bb[cof+j+2]; ti[j+3]=bb[cof+j+3]; } cof+=bln; }
  6125. for(var i=0; i<qres.plte.length; i++) plte.push(qres.plte[i].est.rgba);
  6126. //console.log("quantize", Date.now()-time); time = Date.now();
  6127. }
  6128. else {
  6129. // what if ps==0, but there are <=256 colors? we still need to detect, if the palette could be used
  6130. for(var j=0; j<frms.length; j++) { // when not quantized, other frames can contain colors, that are not in an initial frame
  6131. var frm = frms[j], img32 = new Uint32Array(frm.img.buffer), nw=frm.rect.width, ilen = img32.length;
  6132. var ind = new Uint8Array(ilen); inds.push(ind);
  6133. for(var i=0; i<ilen; i++) {
  6134. var c = img32[i];
  6135. if (i!=0 && c==img32[i- 1]) ind[i]=ind[i-1];
  6136. else if(i>nw && c==img32[i-nw]) ind[i]=ind[i-nw];
  6137. else {
  6138. var cmc = cmap[c];
  6139. if(cmc==null) { cmap[c]=cmc=plte.length; plte.push(c); if(plte.length>=300) break; }
  6140. ind[i]=cmc;
  6141. }
  6142. }
  6143. }
  6144. //console.log("make palette", Date.now()-time); time = Date.now();
  6145. }
  6146. var cc=plte.length; //console.log("colors:",cc);
  6147. if(cc<=256 && forbidPlte==false) {
  6148. if(cc<= 2) depth=1; else if(cc<= 4) depth=2; else if(cc<=16) depth=4; else depth=8;
  6149. depth = Math.max(depth, minBits);
  6150. }
  6151. for(var j=0; j<frms.length; j++)
  6152. {
  6153. var frm = frms[j], nx=frm.rect.x, ny=frm.rect.y, nw=frm.rect.width, nh=frm.rect.height;
  6154. var cimg = frm.img, cimg32 = new Uint32Array(cimg.buffer);
  6155. var bpl = 4*nw, bpp=4;
  6156. if(cc<=256 && forbidPlte==false) {
  6157. bpl = Math.ceil(depth*nw/8);
  6158. var nimg = new Uint8Array(bpl*nh);
  6159. var inj = inds[j];
  6160. for(var y=0; y<nh; y++) { var i=y*bpl, ii=y*nw;
  6161. if (depth==8) for(var x=0; x<nw; x++) nimg[i+(x) ] = (inj[ii+x] );
  6162. else if(depth==4) for(var x=0; x<nw; x++) nimg[i+(x>>1)] |= (inj[ii+x]<<(4-(x&1)*4));
  6163. else if(depth==2) for(var x=0; x<nw; x++) nimg[i+(x>>2)] |= (inj[ii+x]<<(6-(x&3)*2));
  6164. else if(depth==1) for(var x=0; x<nw; x++) nimg[i+(x>>3)] |= (inj[ii+x]<<(7-(x&7)*1));
  6165. }
  6166. cimg=nimg; ctype=3; bpp=1;
  6167. }
  6168. else if(gotAlpha==false && frms.length==1) { // some next "reduced" frames may contain alpha for blending
  6169. var nimg = new Uint8Array(nw*nh*3), area=nw*nh;
  6170. for(var i=0; i<area; i++) { var ti=i*3, qi=i*4; nimg[ti]=cimg[qi]; nimg[ti+1]=cimg[qi+1]; nimg[ti+2]=cimg[qi+2]; }
  6171. cimg=nimg; ctype=2; bpp=3; bpl=3*nw;
  6172. }
  6173. frm.img=cimg; frm.bpl=bpl; frm.bpp=bpp;
  6174. }
  6175. //console.log("colors => palette indices", Date.now()-time); time = Date.now();
  6176. return {ctype:ctype, depth:depth, plte:plte, frames:frms };
  6177. }
  6178. UPNG.encode.framize = function(bufs,w,h,alwaysBlend,evenCrd,forbidPrev) {
  6179. /* DISPOSE
  6180. - 0 : no change
  6181. - 1 : clear to transparent
  6182. - 2 : retstore to content before rendering (previous frame disposed)
  6183. BLEND
  6184. - 0 : replace
  6185. - 1 : blend
  6186. */
  6187. var frms = [];
  6188. for(var j=0; j<bufs.length; j++) {
  6189. var cimg = new Uint8Array(bufs[j]), cimg32 = new Uint32Array(cimg.buffer);
  6190. var nimg;
  6191. var nx=0, ny=0, nw=w, nh=h, blend=alwaysBlend?1:0;
  6192. if(j!=0) {
  6193. var tlim = (forbidPrev || alwaysBlend || j==1 || frms[j-2].dispose!=0)?1:2, tstp = 0, tarea = 1e9;
  6194. for(var it=0; it<tlim; it++)
  6195. {
  6196. var pimg = new Uint8Array(bufs[j-1-it]), p32 = new Uint32Array(bufs[j-1-it]);
  6197. var mix=w,miy=h,max=-1,may=-1;
  6198. for(var y=0; y<h; y++) for(var x=0; x<w; x++) {
  6199. var i = y*w+x;
  6200. if(cimg32[i]!=p32[i]) {
  6201. if(x<mix) mix=x; if(x>max) max=x;
  6202. if(y<miy) miy=y; if(y>may) may=y;
  6203. }
  6204. }
  6205. if(max==-1) mix=miy=max=may=0;
  6206. if(evenCrd) { if((mix&1)==1)mix--; if((miy&1)==1)miy--; }
  6207. var sarea = (max-mix+1)*(may-miy+1);
  6208. if(sarea<tarea) {
  6209. tarea = sarea; tstp = it;
  6210. nx = mix; ny = miy; nw = max-mix+1; nh = may-miy+1;
  6211. }
  6212. }
  6213. // alwaysBlend: pokud zjistím, že blendit nelze, nastavím předchozímu snímku dispose=1. Zajistím, aby obsahoval můj obdélník.
  6214. var pimg = new Uint8Array(bufs[j-1-tstp]);
  6215. if(tstp==1) frms[j-1].dispose = 2;
  6216. nimg = new Uint8Array(nw*nh*4);
  6217. UPNG._copyTile(pimg,w,h, nimg,nw,nh, -nx,-ny, 0);
  6218. blend = UPNG._copyTile(cimg,w,h, nimg,nw,nh, -nx,-ny, 3) ? 1 : 0;
  6219. if(blend==1) UPNG.encode._prepareDiff(cimg,w,h,nimg,{x:nx,y:ny,width:nw,height:nh});
  6220. else UPNG._copyTile(cimg,w,h, nimg,nw,nh, -nx,-ny, 0);
  6221. //UPNG._copyTile(cimg,w,h, nimg,nw,nh, -nx,-ny, blend==1?2:0);
  6222. }
  6223. else nimg = cimg.slice(0); // img may be rewritten further ... don't rewrite input
  6224. frms.push({rect:{x:nx,y:ny,width:nw,height:nh}, img:nimg, blend:blend, dispose:0});
  6225. }
  6226. if(alwaysBlend) for(var j=0; j<frms.length; j++) {
  6227. var frm = frms[j]; if(frm.blend==1) continue;
  6228. var r0 = frm.rect, r1 = frms[j-1].rect
  6229. var miX = Math.min(r0.x, r1.x), miY = Math.min(r0.y, r1.y);
  6230. var maX = Math.max(r0.x+r0.width, r1.x+r1.width), maY = Math.max(r0.y+r0.height, r1.y+r1.height);
  6231. var r = {x:miX, y:miY, width:maX-miX, height:maY-miY};
  6232. frms[j-1].dispose = 1;
  6233. if(j-1!=0)
  6234. UPNG.encode._updateFrame(bufs, w,h,frms, j-1,r, evenCrd);
  6235. UPNG.encode._updateFrame(bufs, w,h,frms, j ,r, evenCrd);
  6236. }
  6237. var area = 0;
  6238. if(bufs.length!=1) for(var i=0; i<frms.length; i++) {
  6239. var frm = frms[i];
  6240. area += frm.rect.width*frm.rect.height;
  6241. //if(i==0 || frm.blend!=1) continue;
  6242. //var ob = new Uint8Array(
  6243. //console.log(frm.blend, frm.dispose, frm.rect);
  6244. }
  6245. //if(area!=0) console.log(area);
  6246. return frms;
  6247. }
  6248. UPNG.encode._updateFrame = function(bufs, w,h, frms, i, r, evenCrd) {
  6249. var U8 = Uint8Array, U32 = Uint32Array;
  6250. var pimg = new U8(bufs[i-1]), pimg32 = new U32(bufs[i-1]), nimg = i+1<bufs.length ? new U8(bufs[i+1]):null;
  6251. var cimg = new U8(bufs[i]), cimg32 = new U32(cimg.buffer);
  6252. var mix=w,miy=h,max=-1,may=-1;
  6253. for(var y=0; y<r.height; y++) for(var x=0; x<r.width; x++) {
  6254. var cx = r.x+x, cy = r.y+y;
  6255. var j = cy*w+cx, cc = cimg32[j];
  6256. // no need to draw transparency, or to dispose it. Or, if writing the same color and the next one does not need transparency.
  6257. if(cc==0 || (frms[i-1].dispose==0 && pimg32[j]==cc && (nimg==null || nimg[j*4+3]!=0))/**/) {}
  6258. else {
  6259. if(cx<mix) mix=cx; if(cx>max) max=cx;
  6260. if(cy<miy) miy=cy; if(cy>may) may=cy;
  6261. }
  6262. }
  6263. if(max==-1) mix=miy=max=may=0;
  6264. if(evenCrd) { if((mix&1)==1)mix--; if((miy&1)==1)miy--; }
  6265. r = {x:mix, y:miy, width:max-mix+1, height:may-miy+1};
  6266. var fr = frms[i]; fr.rect = r; fr.blend = 1; fr.img = new Uint8Array(r.width*r.height*4);
  6267. if(frms[i-1].dispose==0) {
  6268. UPNG._copyTile(pimg,w,h, fr.img,r.width,r.height, -r.x,-r.y, 0);
  6269. UPNG.encode._prepareDiff(cimg,w,h,fr.img,r);
  6270. //UPNG._copyTile(cimg,w,h, fr.img,r.width,r.height, -r.x,-r.y, 2);
  6271. }
  6272. else
  6273. UPNG._copyTile(cimg,w,h, fr.img,r.width,r.height, -r.x,-r.y, 0);
  6274. }
  6275. UPNG.encode._prepareDiff = function(cimg, w,h, nimg, rec) {
  6276. UPNG._copyTile(cimg,w,h, nimg,rec.width,rec.height, -rec.x,-rec.y, 2);
  6277. /*
  6278. var n32 = new Uint32Array(nimg.buffer);
  6279. var og = new Uint8Array(rec.width*rec.height*4), o32 = new Uint32Array(og.buffer);
  6280. UPNG._copyTile(cimg,w,h, og,rec.width,rec.height, -rec.x,-rec.y, 0);
  6281. for(var i=4; i<nimg.length; i+=4) {
  6282. if(nimg[i-1]!=0 && nimg[i+3]==0 && o32[i>>>2]==o32[(i>>>2)-1]) {
  6283. n32[i>>>2]=o32[i>>>2];
  6284. //var j = i, c=p32[(i>>>2)-1];
  6285. //while(p32[j>>>2]==c) { n32[j>>>2]=c; j+=4; }
  6286. }
  6287. }
  6288. for(var i=nimg.length-8; i>0; i-=4) {
  6289. if(nimg[i+7]!=0 && nimg[i+3]==0 && o32[i>>>2]==o32[(i>>>2)+1]) {
  6290. n32[i>>>2]=o32[i>>>2];
  6291. //var j = i, c=p32[(i>>>2)-1];
  6292. //while(p32[j>>>2]==c) { n32[j>>>2]=c; j+=4; }
  6293. }
  6294. }*/
  6295. }
  6296. UPNG.encode._filterZero = function(img,h,bpp,bpl,data, filter, levelZero)
  6297. {
  6298. var fls = [], ftry=[0,1,2,3,4];
  6299. if (filter!=-1) ftry=[filter];
  6300. else if(h*bpl>500000 || bpp==1) ftry=[0];
  6301. var opts; if(levelZero) opts={level:0};
  6302. var CMPR = (data.length>10e6 && UZIP!=null) ? UZIP : pako;
  6303. var time = Date.now();
  6304. for(var i=0; i<ftry.length; i++) {
  6305. for(var y=0; y<h; y++) UPNG.encode._filterLine(data, img, y, bpl, bpp, ftry[i]);
  6306. //var nimg = new Uint8Array(data.length);
  6307. //var sz = UZIP.F.deflate(data, nimg); fls.push(nimg.slice(0,sz));
  6308. //var dfl = pako["deflate"](data), dl=dfl.length-4;
  6309. //var crc = (dfl[dl+3]<<24)|(dfl[dl+2]<<16)|(dfl[dl+1]<<8)|(dfl[dl+0]<<0);
  6310. //console.log(crc, UZIP.adler(data,2,data.length-6));
  6311. fls.push(CMPR["deflate"](data,opts));
  6312. }
  6313. var ti, tsize=1e9;
  6314. for(var i=0; i<fls.length; i++) if(fls[i].length<tsize) { ti=i; tsize=fls[i].length; }
  6315. return fls[ti];
  6316. }
  6317. UPNG.encode._filterLine = function(data, img, y, bpl, bpp, type)
  6318. {
  6319. var i = y*bpl, di = i+y, paeth = UPNG.decode._paeth
  6320. data[di]=type; di++;
  6321. if(type==0) {
  6322. if(bpl<500) for(var x=0; x<bpl; x++) data[di+x] = img[i+x];
  6323. else data.set(new Uint8Array(img.buffer,i,bpl),di);
  6324. }
  6325. else if(type==1) {
  6326. for(var x= 0; x<bpp; x++) data[di+x] = img[i+x];
  6327. for(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x]-img[i+x-bpp]+256)&255;
  6328. }
  6329. else if(y==0) {
  6330. for(var x= 0; x<bpp; x++) data[di+x] = img[i+x];
  6331. if(type==2) for(var x=bpp; x<bpl; x++) data[di+x] = img[i+x];
  6332. if(type==3) for(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x] - (img[i+x-bpp]>>1) +256)&255;
  6333. if(type==4) for(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x] - paeth(img[i+x-bpp], 0, 0) +256)&255;
  6334. }
  6335. else {
  6336. if(type==2) { for(var x= 0; x<bpl; x++) data[di+x] = (img[i+x]+256 - img[i+x-bpl])&255; }
  6337. if(type==3) { for(var x= 0; x<bpp; x++) data[di+x] = (img[i+x]+256 - (img[i+x-bpl]>>1))&255;
  6338. for(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x]+256 - ((img[i+x-bpl]+img[i+x-bpp])>>1))&255; }
  6339. if(type==4) { for(var x= 0; x<bpp; x++) data[di+x] = (img[i+x]+256 - paeth(0, img[i+x-bpl], 0))&255;
  6340. for(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x]+256 - paeth(img[i+x-bpp], img[i+x-bpl], img[i+x-bpp-bpl]))&255; }
  6341. }
  6342. }
  6343. UPNG.crc = {
  6344. table : ( function() {
  6345. var tab = new Uint32Array(256);
  6346. for (var n=0; n<256; n++) {
  6347. var c = n;
  6348. for (var k=0; k<8; k++) {
  6349. if (c & 1) c = 0xedb88320 ^ (c >>> 1);
  6350. else c = c >>> 1;
  6351. }
  6352. tab[n] = c; }
  6353. return tab; })(),
  6354. update : function(c, buf, off, len) {
  6355. for (var i=0; i<len; i++) c = UPNG.crc.table[(c ^ buf[off+i]) & 0xff] ^ (c >>> 8);
  6356. return c;
  6357. },
  6358. crc : function(b,o,l) { return UPNG.crc.update(0xffffffff,b,o,l) ^ 0xffffffff; }
  6359. }
  6360. UPNG.quantize = function(abuf, ps)
  6361. {
  6362. var oimg = new Uint8Array(abuf), nimg = oimg.slice(0), nimg32 = new Uint32Array(nimg.buffer);
  6363. var KD = UPNG.quantize.getKDtree(nimg, ps);
  6364. var root = KD[0], leafs = KD[1];
  6365. var planeDst = UPNG.quantize.planeDst;
  6366. var sb = oimg, tb = nimg32, len=sb.length;
  6367. var inds = new Uint8Array(oimg.length>>2), nd;
  6368. if(oimg.length<20e6) // precise, but slow :(
  6369. for(var i=0; i<len; i+=4) {
  6370. var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
  6371. nd = UPNG.quantize.getNearest(root, r, g, b, a);
  6372. inds[i>>2] = nd.ind; tb[i>>2] = nd.est.rgba;
  6373. }
  6374. else
  6375. for(var i=0; i<len; i+=4) {
  6376. var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
  6377. nd = root; while(nd.left) nd = (planeDst(nd.est,r,g,b,a)<=0) ? nd.left : nd.right;
  6378. inds[i>>2] = nd.ind; tb[i>>2] = nd.est.rgba;
  6379. }
  6380. return { abuf:nimg.buffer, inds:inds, plte:leafs };
  6381. }
  6382. UPNG.quantize.getKDtree = function(nimg, ps, err) {
  6383. if(err==null) err = 0.0001;
  6384. var nimg32 = new Uint32Array(nimg.buffer);
  6385. var root = {i0:0, i1:nimg.length, bst:null, est:null, tdst:0, left:null, right:null }; // basic statistic, extra statistic
  6386. root.bst = UPNG.quantize.stats( nimg,root.i0, root.i1 ); root.est = UPNG.quantize.estats( root.bst );
  6387. var leafs = [root];
  6388. while(leafs.length<ps)
  6389. {
  6390. var maxL = 0, mi=0;
  6391. for(var i=0; i<leafs.length; i++) if(leafs[i].est.L > maxL) { maxL=leafs[i].est.L; mi=i; }
  6392. if(maxL<err) break;
  6393. var node = leafs[mi];
  6394. var s0 = UPNG.quantize.splitPixels(nimg,nimg32, node.i0, node.i1, node.est.e, node.est.eMq255);
  6395. var s0wrong = (node.i0>=s0 || node.i1<=s0);
  6396. //console.log(maxL, leafs.length, mi);
  6397. if(s0wrong) { node.est.L=0; continue; }
  6398. var ln = {i0:node.i0, i1:s0, bst:null, est:null, tdst:0, left:null, right:null }; ln.bst = UPNG.quantize.stats( nimg, ln.i0, ln.i1 );
  6399. ln.est = UPNG.quantize.estats( ln.bst );
  6400. var rn = {i0:s0, i1:node.i1, bst:null, est:null, tdst:0, left:null, right:null }; rn.bst = {R:[], m:[], N:node.bst.N-ln.bst.N};
  6401. for(var i=0; i<16; i++) rn.bst.R[i] = node.bst.R[i]-ln.bst.R[i];
  6402. for(var i=0; i< 4; i++) rn.bst.m[i] = node.bst.m[i]-ln.bst.m[i];
  6403. rn.est = UPNG.quantize.estats( rn.bst );
  6404. node.left = ln; node.right = rn;
  6405. leafs[mi]=ln; leafs.push(rn);
  6406. }
  6407. leafs.sort(function(a,b) { return b.bst.N-a.bst.N; });
  6408. for(var i=0; i<leafs.length; i++) leafs[i].ind=i;
  6409. return [root, leafs];
  6410. }
  6411. UPNG.quantize.getNearest = function(nd, r,g,b,a)
  6412. {
  6413. if(nd.left==null) { nd.tdst = UPNG.quantize.dist(nd.est.q,r,g,b,a); return nd; }
  6414. var planeDst = UPNG.quantize.planeDst(nd.est,r,g,b,a);
  6415. var node0 = nd.left, node1 = nd.right;
  6416. if(planeDst>0) { node0=nd.right; node1=nd.left; }
  6417. var ln = UPNG.quantize.getNearest(node0, r,g,b,a);
  6418. if(ln.tdst<=planeDst*planeDst) return ln;
  6419. var rn = UPNG.quantize.getNearest(node1, r,g,b,a);
  6420. return rn.tdst<ln.tdst ? rn : ln;
  6421. }
  6422. UPNG.quantize.planeDst = function(est, r,g,b,a) { var e = est.e; return e[0]*r + e[1]*g + e[2]*b + e[3]*a - est.eMq; }
  6423. UPNG.quantize.dist = function(q, r,g,b,a) { var d0=r-q[0], d1=g-q[1], d2=b-q[2], d3=a-q[3]; return d0*d0+d1*d1+d2*d2+d3*d3; }
  6424. UPNG.quantize.splitPixels = function(nimg, nimg32, i0, i1, e, eMq)
  6425. {
  6426. var vecDot = UPNG.quantize.vecDot;
  6427. i1-=4;
  6428. var shfs = 0;
  6429. while(i0<i1)
  6430. {
  6431. while(vecDot(nimg, i0, e)<=eMq) i0+=4;
  6432. while(vecDot(nimg, i1, e)> eMq) i1-=4;
  6433. if(i0>=i1) break;
  6434. var t = nimg32[i0>>2]; nimg32[i0>>2] = nimg32[i1>>2]; nimg32[i1>>2]=t;
  6435. i0+=4; i1-=4;
  6436. }
  6437. while(vecDot(nimg, i0, e)>eMq) i0-=4;
  6438. return i0+4;
  6439. }
  6440. UPNG.quantize.vecDot = function(nimg, i, e)
  6441. {
  6442. return nimg[i]*e[0] + nimg[i+1]*e[1] + nimg[i+2]*e[2] + nimg[i+3]*e[3];
  6443. }
  6444. UPNG.quantize.stats = function(nimg, i0, i1){
  6445. var R = [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0];
  6446. var m = [0,0,0,0];
  6447. var N = (i1-i0)>>2;
  6448. for(var i=i0; i<i1; i+=4)
  6449. {
  6450. var r = nimg[i]*(1/255), g = nimg[i+1]*(1/255), b = nimg[i+2]*(1/255), a = nimg[i+3]*(1/255);
  6451. //var r = nimg[i], g = nimg[i+1], b = nimg[i+2], a = nimg[i+3];
  6452. m[0]+=r; m[1]+=g; m[2]+=b; m[3]+=a;
  6453. R[ 0] += r*r; R[ 1] += r*g; R[ 2] += r*b; R[ 3] += r*a;
  6454. R[ 5] += g*g; R[ 6] += g*b; R[ 7] += g*a;
  6455. R[10] += b*b; R[11] += b*a;
  6456. R[15] += a*a;
  6457. }
  6458. R[4]=R[1]; R[8]=R[2]; R[9]=R[6]; R[12]=R[3]; R[13]=R[7]; R[14]=R[11];
  6459. return {R:R, m:m, N:N};
  6460. }
  6461. UPNG.quantize.estats = function(stats){
  6462. var R = stats.R, m = stats.m, N = stats.N;
  6463. // when all samples are equal, but N is large (millions), the Rj can be non-zero ( 0.0003.... - precission error)
  6464. var m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], iN = (N==0 ? 0 : 1/N);
  6465. var Rj = [
  6466. R[ 0] - m0*m0*iN, R[ 1] - m0*m1*iN, R[ 2] - m0*m2*iN, R[ 3] - m0*m3*iN,
  6467. R[ 4] - m1*m0*iN, R[ 5] - m1*m1*iN, R[ 6] - m1*m2*iN, R[ 7] - m1*m3*iN,
  6468. R[ 8] - m2*m0*iN, R[ 9] - m2*m1*iN, R[10] - m2*m2*iN, R[11] - m2*m3*iN,
  6469. R[12] - m3*m0*iN, R[13] - m3*m1*iN, R[14] - m3*m2*iN, R[15] - m3*m3*iN
  6470. ];
  6471. var A = Rj, M = UPNG.M4;
  6472. var b = [Math.random(),Math.random(),Math.random(),Math.random()], mi = 0, tmi = 0;
  6473. if(N!=0)
  6474. for(var i=0; i<16; i++) {
  6475. b = M.multVec(A, b); tmi = Math.sqrt(M.dot(b,b)); b = M.sml(1/tmi, b);
  6476. if(i!=0 && Math.abs(tmi-mi)<1e-9) break; mi = tmi;
  6477. }
  6478. //b = [0,0,1,0]; mi=N;
  6479. var q = [m0*iN, m1*iN, m2*iN, m3*iN];
  6480. var eMq255 = M.dot(M.sml(255,q),b);
  6481. return { Cov:Rj, q:q, e:b, L:mi, eMq255:eMq255, eMq : M.dot(b,q),
  6482. rgba: (((Math.round(255*q[3])<<24) | (Math.round(255*q[2])<<16) | (Math.round(255*q[1])<<8) | (Math.round(255*q[0])<<0))>>>0) };
  6483. }
  6484. UPNG.M4 = {
  6485. multVec : function(m,v) {
  6486. return [
  6487. m[ 0]*v[0] + m[ 1]*v[1] + m[ 2]*v[2] + m[ 3]*v[3],
  6488. m[ 4]*v[0] + m[ 5]*v[1] + m[ 6]*v[2] + m[ 7]*v[3],
  6489. m[ 8]*v[0] + m[ 9]*v[1] + m[10]*v[2] + m[11]*v[3],
  6490. m[12]*v[0] + m[13]*v[1] + m[14]*v[2] + m[15]*v[3]
  6491. ];
  6492. },
  6493. dot : function(x,y) { return x[0]*y[0]+x[1]*y[1]+x[2]*y[2]+x[3]*y[3]; },
  6494. sml : function(a,y) { return [a*y[0],a*y[1],a*y[2],a*y[3]]; }
  6495. }
  6496. UPNG.encode.concatRGBA = function(bufs) {
  6497. var tlen = 0;
  6498. for(var i=0; i<bufs.length; i++) tlen += bufs[i].byteLength;
  6499. var nimg = new Uint8Array(tlen), noff=0;
  6500. for(var i=0; i<bufs.length; i++) {
  6501. var img = new Uint8Array(bufs[i]), il = img.length;
  6502. for(var j=0; j<il; j+=4) {
  6503. var r=img[j], g=img[j+1], b=img[j+2], a = img[j+3];
  6504. if(a==0) r=g=b=0;
  6505. nimg[noff+j]=r; nimg[noff+j+1]=g; nimg[noff+j+2]=b; nimg[noff+j+3]=a; }
  6506. noff += il;
  6507. }
  6508. return nimg.buffer;
  6509. }
  6510. var UTEX=function(){function L(W,l,M,F,t){var K=new Uint8Array(4*4*4);for(var $=0;$<t;$+=4)for(var I=0;
  6511. I<F;I+=4){D(W,l,K);n(M,F,t,I,$,K);l+=8}return l}function a6(W,l,M,F,t){var K=new Uint8Array(4*4*4);for(var $=0;
  6512. $<t;$+=4)for(var I=0;I<F;I+=4){D(W,l+8,K);n(M,F,t,I,$,K);l+=16}return l}function aa(W,l,M,F,t){var K=new Uint8Array(4*4*4);
  6513. for(var $=0;$<t;$+=4)for(var I=0;I<F;I+=4){Y(W,l,K);n(M,F,t,I,$,K);l+=8}return l}function k(W,l,M,F,t){var K=new Uint8Array(16*4);
  6514. for(var $=0;$<M;$+=4)for(var I=0;I<l;I+=4){r(W,l,M,I,$,K);c(F,t,K);t+=8}return t}function B(W,l,M,F,t){var K={W:l*8},$=new Uint8Array(4*4*4);
  6515. for(var I=0;I<t;I+=4)for(var O=0;O<F;O+=4){Y(W,l+8,$);for(var C=0;C<64;C+=4){var j=a2(W,K,4);$[C+3]=255*(j/15)}n(M,F,t,O,I,$);
  6516. l+=16;K.W+=64}return l}function Q(W,l){var M=[W,l];if(W>l)M.push(6/7*W+1/7*l,5/7*W+2/7*l,4/7*W+3/7*l,3/7*W+4/7*l,2/7*W+5/7*l,1/7*W+6/7*l);
  6517. else M.push(4/5*W+1/5*l,3/5*W+2/5*l,2/5*W+3/5*l,1/5*W+4/5*l,0,255);return M}function T(W,l,M,F,t){var K=Q(W[l],W[l+1]);
  6518. M.W+=16;for(var $=0;$<64;$+=4){var I=a2(W,M,3);F[$+t]=K[I]}}function u(W,l,M,F,t){var K={W:l*8},$=new Uint8Array(4*4*4);
  6519. $.fill(255);for(var I=0;I<t;I+=4)for(var O=0;O<F;O+=4){T(W,l,K,$,1);l+=8;T(W,l,K,$,0);l+=8;n(M,F,t,O,I,$)}return l}function G(W,l,M,F,t){var K={W:l*8},$=new Uint8Array(4*4*4);
  6520. for(var I=0;I<t;I+=4)for(var O=0;O<F;O+=4){Y(W,l+8,$);T(W,l,K,$,3);K.W+=64;n(M,F,t,O,I,$);l+=16}return l}function a(W,l,M,F,t){var K=new Uint8Array(16*4);
  6521. for(var $=0;$<M;$+=4)for(var I=0;I<l;I+=4){r(W,l,M,I,$,K);var O=K[3],C=K[3];for(var j=7;j<64;j+=4){var b=K[j];
  6522. if(b<O)O=b;else if(C<b)C=b}F[t]=C;F[t+1]=O;t+=2;var h=Q(C,O),_=t+2<<3;for(var j=0;j<64;j+=32){var S=0,_=0;
  6523. for(var J=0;J<32;J+=4){var v=0,V=500,b=K[j+J+3];for(var p=0;p<8;p++){var w=Math.abs(h[p]-b);if(w<V){V=w;
  6524. v=p}}S=S|v<<_;_+=3}F[t]=S;F[t+1]=S>>8;F[t+2]=S>>16;t+=3}c(F,t,K);t+=8}return t}var E=new Uint8Array(16);
  6525. function D(W,l,M){var F=W[l+1]<<8|W[l],t=W[l+3]<<8|W[l+2],K=(F&31)*(255/31),$=(F>>>5&31)*(255/31),I=(F>>10)*(255/31),O=(t&31)*(255/31),C=(t>>>5&63)*(255/63),j=(t>>11)*(255/31),b=E;
  6526. b[0]=~~I;b[1]=~~$;b[2]=~~K;b[3]=255;b[12]=~~j;b[13]=~~C;b[14]=~~O;b[15]=255;var h=2/3,_=1-h;b[4]=~~(h*I+_*j);
  6527. b[5]=~~(h*$+_*C);b[6]=~~(h*K+_*O);b[7]=255;h=1/3;_=1-h;b[8]=~~(h*I+_*j);b[9]=~~(h*$+_*C);b[10]=~~(h*K+_*O);
  6528. b[11]=255;z(W,M,b,l)}function Y(W,l,M){var F=W[l+1]<<8|W[l],t=W[l+3]<<8|W[l+2],K=(F&31)*(255/31),$=(F>>>5&63)*(255/63),I=(F>>11)*(255/31),O=(t&31)*(255/31),C=(t>>>5&63)*(255/63),j=(t>>11)*(255/31),b=E;
  6529. b[0]=~~I;b[1]=~~$;b[2]=~~K;b[3]=255;b[4]=~~j;b[5]=~~C;b[6]=~~O;b[7]=255;if(t<F){var h=2/3,_=1-h;b[8]=~~(h*I+_*j);
  6530. b[9]=~~(h*$+_*C);b[10]=~~(h*K+_*O);b[11]=255;h=1/3;_=1-h;b[12]=~~(h*I+_*j);b[13]=~~(h*$+_*C);b[14]=~~(h*K+_*O);
  6531. b[15]=255}else{var h=1/2,_=1-h;b[8]=~~(h*I+_*j);b[9]=~~(h*$+_*C);b[10]=~~(h*K+_*O);b[11]=255;b[12]=0;
  6532. b[13]=0;b[14]=0;b[15]=0}z(W,M,b,l)}function c(W,l,M){var F=A,t=af(M),K=M[t>>8],$=M[(t>>8)+1],I=M[(t>>8)+2],O=M[t&255],C=M[(t&255)+1],j=M[(t&255)+2],b=K>>3<<11|$>>2<<5|I>>3,h=O>>3<<11|C>>2<<5|j>>3;
  6533. if(b<h){var _=b;b=h;h=_}var I=Math.floor((b&31)*(255/31)),$=Math.floor((b>>>5&63)*(255/63)),K=Math.floor((b>>11)*(255/31)),j=Math.floor((h&31)*(255/31)),C=Math.floor((h>>>5&63)*(255/63)),O=Math.floor((h>>11)*(255/31));
  6534. W[l+0]=b&255;W[l+1]=b>>8;W[l+2]=h&255;W[l+3]=h>>8;var S=2/3,J=1-S,v=Math.floor(S*K+J*O),V=Math.floor(S*$+J*C),p=Math.floor(S*I+J*j);
  6535. S=1/3;J=1-S;var w=Math.floor(S*K+J*O),a5=Math.floor(S*$+J*C),y=Math.floor(S*I+J*j),m=l*8+32;for(var i=0;
  6536. i<64;i+=4){var f=M[i],H=M[i+1],an=M[i+2],a9=F(f,H,an,K,$,I),a8=F(f,H,an,O,C,j),o=F(f,H,an,v,V,p),R=F(f,H,an,w,a5,y),al=Math.min(a9,Math.min(a8,Math.min(o,R))),g=0;
  6537. if(al==a8)g=1;else if(al==o)g=2;else if(al==R)g=3;W[m>>3]|=g<<(m&7);m+=2}}function z(W,l,M,F){var t=F+4<<3;
  6538. for(var K=0;K<64;K+=4){var $=W[t>>3]>>(t&7)&3;t+=2;$=$<<2;l[K]=M[$];l[K+1]=M[$+1];l[K+2]=M[$+2];l[K+3]=M[$+3]}}function r(W,l,M,F,t,K){for(var $=0;
  6539. $<4;$++){var I=(t+$)*l+F<<2,O=$<<4;K[O+0]=W[I+0];K[O+1]=W[I+1];K[O+2]=W[I+2];K[O+3]=W[I+3];K[O+4]=W[I+4];
  6540. K[O+5]=W[I+5];K[O+6]=W[I+6];K[O+7]=W[I+7];K[O+8]=W[I+8];K[O+9]=W[I+9];K[O+10]=W[I+10];K[O+11]=W[I+11];
  6541. K[O+12]=W[I+12];K[O+13]=W[I+13];K[O+14]=W[I+14];K[O+15]=W[I+15]}}function n(W,l,M,F,t,K){for(var $=0;
  6542. $<4;$++){var I=(t+$)*l+F<<2,O=$<<4;W[I+0]=K[O+0];W[I+1]=K[O+1];W[I+2]=K[O+2];W[I+3]=K[O+3];W[I+4]=K[O+4];
  6543. W[I+5]=K[O+5];W[I+6]=K[O+6];W[I+7]=K[O+7];W[I+8]=K[O+8];W[I+9]=K[O+9];W[I+10]=K[O+10];W[I+11]=K[O+11];
  6544. W[I+12]=K[O+12];W[I+13]=K[O+13];W[I+14]=K[O+14];W[I+15]=K[O+15]}}var d="0011001100110011 0001000100010001 0111011101110111 0001001100110111 0000000100010011 0011011101111111 0001001101111111 0000000100110111 0000000000010011 0011011111111111 0000000101111111 0000000000010111 0001011111111111 0000000011111111 0000111111111111 0000000000001111 0000100011101111 0111000100000000 0000000010001110 0111001100010000 0011000100000000 0000100011001110 0000000010001100 0111001100110001 0011000100010000 0000100010001100 0110011001100110 0011011001101100 0001011111101000 0000111111110000 0111000110001110 0011100110011100 0101010101010101 0000111100001111 0101101001011010 0011001111001100 0011110000111100 0101010110101010 0110100101101001 0101101010100101 0111001111001110 0001001111001000 0011001001001100 0011101111011100 0110100110010110 0011110011000011 0110011010011001 0000011001100000 0100111001000000 0010011100100000 0000001001110010 0000010011100100 0110110010010011 0011011011001001 0110001110011100 0011100111000110 0110110011001001 0110001100111001 0111111010000001 0001100011100111 0000111100110011 0011001111110000 0010001011101110 0100010001110111".split(" "),q="0011001102212222 0001001122112221 0000200122112211 0222002200110111 0000000011221122 0011001100220022 0022002211111111 0011001122112211 0000000011112222 0000111111112222 0000111122222222 0012001200120012 0112011201120112 0122012201220122 0011011211221222 0011200122002220 0001001101121122 0111001120012200 0000112211221122 0022002200221111 0111011102220222 0001000122212221 0000001101220122 0000110022102210 0122012200110000 0012001211222222 0110122112210110 0000011012211221 0022110211020022 0110011020022222 0011012201220011 0000200022112221 0000000211221222 0222002200120011 0011001200220222 0120012001200120 0000111122220000 0120120120120120 0120201212010120 0011220011220011 0011112222000011 0101010122222222 0000000021212121 0022112200221122 0022001100220011 0220122102201221 0101222222220101 0000212121212121 0101010101012222 0222011102220111 0002111200021112 0000211221122112 0222011101110222 0002111211120002 0110011001102222 0000000021122112 0110011022222222 0022001100110022 0022112211220022 0000000000002112 0002000100020001 0222122202221222 0101222222222222 0111201122012220".split(" "),Z=[[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,2,0],[0,8,0],[0,2,0],[0,2,0],[0,8,0],[0,8,0],[0,15,0],[0,2,0],[0,8,0],[0,2,0],[0,2,0],[0,8,0],[0,8,0],[0,2,0],[0,2,0],[0,15,0],[0,15,0],[0,6,0],[0,8,0],[0,2,0],[0,8,0],[0,15,0],[0,15,0],[0,2,0],[0,8,0],[0,2,0],[0,2,0],[0,2,0],[0,15,0],[0,15,0],[0,6,0],[0,6,0],[0,2,0],[0,6,0],[0,8,0],[0,15,0],[0,15,0],[0,2,0],[0,2,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,15,0],[0,2,0],[0,2,0],[0,15,0]],ae=[[0,3,15],[0,3,8],[0,15,8],[0,15,3],[0,8,15],[0,3,15],[0,15,3],[0,15,8],[0,8,15],[0,8,15],[0,6,15],[0,6,15],[0,6,15],[0,5,15],[0,3,15],[0,3,8],[0,3,15],[0,3,8],[0,8,15],[0,15,3],[0,3,15],[0,3,8],[0,6,15],[0,10,8],[0,5,3],[0,8,15],[0,8,6],[0,6,10],[0,8,15],[0,5,15],[0,15,10],[0,15,8],[0,8,15],[0,15,3],[0,3,15],[0,5,10],[0,6,10],[0,10,8],[0,8,9],[0,15,10],[0,15,6],[0,3,15],[0,15,8],[0,5,15],[0,15,3],[0,15,6],[0,15,6],[0,15,8],[0,3,15],[0,15,3],[0,5,15],[0,5,15],[0,5,15],[0,8,15],[0,5,15],[0,10,15],[0,5,15],[0,10,15],[0,8,15],[0,13,15],[0,15,3],[0,12,15],[0,3,15],[0,3,8]];
  6545. function P(W,l,M,F,t){var K=a2,$={W:0},I=new Uint8Array(4*4*4),O=[null,null,[0,21,43,64],[0,9,18,27,37,46,55,64],[0,4,9,13,17,21,26,30,34,38,43,47,51,55,60,64]],C=[null,null,d,q],j=[null,null,Z,ae];
  6546. for(var b=0;b<t;b+=4)for(var h=0;h<F;h+=4){var _=0,al="0000000000000000";while((W[l]>>_&1)!=1)_++;$.W=(l<<3)+_+1;
  6547. var S=_==4||_==5?K(W,$,2):0,J=_==4?K(W,$,1):0,v=[4,6,6,6,0,0,0,6][_],V=K(W,$,v),p=[4,6,5,7,5,7,7,5][_],w=[0,0,0,0,6,8,7,5][_],a5=[1,1,0,1,0,0,1,1][_],y=[6,4,6,4,2,2,2,4][_],m=[];
  6548. for(var i=0;i<4;i++){var f=i==3?w:p;for(var H=0;H<y;H++)m[i*y+H]=K(W,$,f)}for(var H=0;H<y;H++){if(_==1&&(H&1)==1)$.W--;
  6549. var an=K(W,$,a5);for(var i=0;i<3;i++)m[i*y+H]=m[i*y+H]<<a5|an;if(w!=0)m[3*y+H]=m[3*y+H]<<a5|an}p+=a5;
  6550. if(w!=0)w+=a5;for(var i=0;i<4;i++){var f=i==3?w:p,a9=f==0?0:1/((1<<f)-1);for(var H=0;H<y;H++)m[i*y+H]*=a9}if(w==0)for(var H=0;
  6551. H<y;H++)m[3*y+H]=1;var a8=[3,2,3,2,1,1,1,2][_],o=[3,3,2,2,2,2,4,2][_],R=[0,0,0,0,3,2,0,0][_],g=[0,0,0];
  6552. if(a8!=1){al=C[a8][V];g=j[a8][V]}var ah=$.W,ac=ah+16*o-a8;if(J==1){var ao=ah;ah=ac;ac=ao;ao=o;o=R;R=ao}var ak=O[o];
  6553. $.W=ah;for(var i=0;i<64;i+=4){var x=al.charCodeAt(i>>2)-48,a0=g[x]==i>>2?1:0,a4=K(W,$,o-a0),s=ak[a4]/64,a7=(1-s)*m[0*y+2*x+0]+s*m[0*y+2*x+1],ad=(1-s)*m[1*y+2*x+0]+s*m[1*y+2*x+1],ag=(1-s)*m[2*y+2*x+0]+s*m[2*y+2*x+1],a1=(1-s)*m[3*y+2*x+0]+s*m[3*y+2*x+1];
  6554. I[i]=a7*255;I[i+1]=ad*255;I[i+2]=ag*255;I[i+3]=a1*255}ak=O[R];$.W=ac;if(R!=0)for(var i=0;i<64;i+=4){var x=al.charCodeAt(i>>2)-48,a0=g[x]==i>>2?1:0,a4=K(W,$,R-a0),s=ak[a4]/64,a1=(1-s)*m[3*y+2*x+0]+s*m[3*y+2*x+1];
  6555. I[i+3]=a1*255}ai(I,S);n(M,F,t,h,b,I);l+=16}return l}function ai(W,l){if(l==0)return;for(var M=0;M<64;
  6556. M+=4){var F=W[M],t=W[M+1],K=W[M+2],$=W[M+3];if(l==1){var I=$;$=F;F=I}if(l==2){var I=$;$=t;t=I}if(l==3){var I=$;
  6557. $=K;K=I}W[M]=F;W[M+1]=t;W[M+2]=K;W[M+3]=$}}function a2(W,l,M){var F=0,t=M;while(M!=0){F=F|X(W,l)<<t-M;
  6558. M--}return F}function X(W,l){var M=l.W;l.W++;return W[M>>3]>>(M&7)&1}function e(W,l,M){var F=l>>1,t=M>>1,K=new Uint8Array(F*t*4);
  6559. for(var $=0;$<t;$++)for(var I=0;I<F;I++){var O=$*F+I<<2,C=($<<1)*l+(I<<1)<<2,j=W[C+3],b=W[C+7],h=W[C]*j+W[C+4]*b,_=W[C+1]*j+W[C+5]*b,S=W[C+2]*j+W[C+6]*b;
  6560. C+=l<<2;var J=W[C+3],v=W[C+7];h+=W[C]*J+W[C+4]*v;_+=W[C+1]*J+W[C+5]*v;S+=W[C+2]*J+W[C+6]*v;var V=j+b+J+v+2>>2,p=V==0?0:.25/V;
  6561. K[O]=~~(h*p+.5);K[O+1]=~~(_*p+.5);K[O+2]=~~(S*p+.5);K[O+3]=V}return K}function A(W,l,M,F,t,K){return(W-F)*(W-F)+(l-t)*(l-t)+(M-K)*(M-K)}function af(W){var l=A,M=0,F=0;
  6562. for(var t=0;t<64;t+=4){var K=W[t],$=W[t+1],I=W[t+2];for(var O=t+4;O<64;O+=4){var C=l(K,$,I,W[O],W[O+1],W[O+2]);
  6563. if(C>F){F=C;M=t<<8|O}}}return M}var aj=new ArrayBuffer(4),N=new Uint8Array(aj),ab=new Uint32Array(aj),am=new Uint16Array(aj),a3={Y:function(W,l){N[0]=W[l+0];
  6564. N[1]=W[l+1];return am[0]},T:function(W,l){N[0]=W[l+0];N[1]=W[l+1];N[2]=W[l+2];N[3]=W[l+3];return ab[0]},G:function(W,l,M){ab[0]=M;
  6565. W[l+0]=N[0];W[l+1]=N[1];W[l+2]=N[2];W[l+3]=N[3]},t:function(W,l,M){var F="";for(var t=0;t<M;t++)F+=String.fromCharCode(W[l+t]);
  6566. return F},b:function(W,l,M){for(var F=0;F<M.length;F++)W[l+F]=M.charCodeAt(F)}};return{R:aa,C:B,k:G,M:u,K:P,e:L,J:a6,P:k,n:a,o:e,X:a3}}();
  6567. UTEX.DDS=function(){var L={r:1,D:2,h:4,L:8,S:4096,_:131072,N:524288,q:8388608,Q:1,i:2,a:4,I:64,O:512,$:131072,B:8,z:4194304,A:4096};
  6568. function a6(G){var a=new Uint8Array(G),E=0,D=UTEX.X.t(a,E,4),Y,c,z;E+=4;Y=k(a,E);E+=124;c=Y.Z;if(c.u&L.a&&c.f=="DX10"){z=u(a,E);
  6569. E+=20}var r=Y.width,n=Y.height,d=[],q=c.f,Z=c.w,ae={DXT1:"BC1",DXT3:"BC2",DXT5:"BC3",DX10:"BC7",ATI2:"BC5"};
  6570. if(ae[q])q=ae[q];if(z){var P=z.V;if(70<=P&&P<=72)q="BC1";else if(73<=P&&P<=75)q="BC2";else if(76<=P&&P<=78)q="BC3";
  6571. else if(97<=P&&P<=99)q="BC7";else console.log("Unknown DX10 format",P)}var a2=Math.max(1,Y.c);for(var X=0;
  6572. X<a2;X++){var e=r*n*4,A=new Uint8Array(e);if(!1){}else if(q=="BC1")E=UTEX.R(a,E,A,r,n);else if(q=="BC2")E=UTEX.C(a,E,A,r,n);
  6573. else if(q=="BC3")E=UTEX.k(a,E,A,r,n);else if(q=="BC5")E=UTEX.M(a,E,A,r,n);else if(q=="BC7")E=UTEX.K(a,E,A,r,n);
  6574. else if(q=="ATC ")E=UTEX.e(a,E,A,r,n);else if(q=="ATCA")E=UTEX.J(a,E,A,r,n);else if(q=="ATCI")E=UTEX.J(a,E,A,r,n);
  6575. else if(c.u&L.Q&&c.u&L.I){var af=c.l,N=255/af,ab=c.j,am=255/ab,W=c.H,l=255/W,M=c.m,F=255/M;if(Z==32){for(var t=0;
  6576. t<e;t+=4){var K=a[E+t+3]<<24|a[E+t+2]<<16|a[E+t+1]<<8|a[E+t];A[t+0]=(K&af)*N;A[t+1]=(K&ab)*am;A[t+2]=(K&W)*l;
  6577. A[t+3]=(K&M)*F}E+=e}else if(Z==16){for(var t=0;t<e;t+=4){var K=a[E+(t>>1)+1]<<8|a[E+(t>>1)];A[t+0]=(K&af)*N;
  6578. A[t+1]=(K&ab)*am;A[t+2]=(K&W)*l;A[t+3]=(K&M)*F}E+=e>>>1}else throw"unknown bit count "+Z}else if(c.u&L.i||c.u&L.Q||c.u&L.$){if(Z==8){for(var t=0;
  6579. t<e;t+=4)A[t+3]=a[E+(t>>2)];E+=e>>>2}else throw"unknown bit count "+Z}else{console.log("unknown texture format, head flags: ",Y.u.toString(2),"pixelFormat flags: ",c.u.toString(2));
  6580. throw"e"}d.push({width:r,height:n,image:A.buffer});r=r>>>1;n=n>>>1}return d}function aa(G,a,E){var G=new Uint8Array(G),D=255,r=0,n=0;
  6581. for(var Y=3;Y<G.length;Y+=4)D&=G[Y];var c=D<250,z=new Uint8Array(124+a*E*2);UTEX.X.b(z,r,"DDS ");r+=4;
  6582. B(z,a,E,c,r);r+=124;while(a*E!=0){if(c)r=UTEX.n(G,a,E,z,r);else r=UTEX.P(G,a,E,z,r);G=UTEX.o(G,a,E);
  6583. a=a>>1;E=E>>1;n++}z[28]=n;return z.buffer.slice(0,r)}function k(G,a){var E={},D=UTEX.X.T;a+=4;E.u=D(G,a);
  6584. a+=4;E.height=D(G,a);a+=4;E.width=D(G,a);a+=4;E.pitch=D(G,a);a+=4;E.depth=D(G,a);a+=4;E.c=D(G,a);a+=4;
  6585. a+=11*4;E.Z=Q(G,a);a+=32;E.v=D(G,a);a+=4;E.g=D(G,a);a+=4;E.a3=D(G,a);a+=4;E.a8=D(G,a);a+=4;a+=4;return E}function B(G,a,E,D,Y){var c=UTEX.X.G,z=L.r|L.D|L.h|L.S;
  6586. z|=L._|L.N;var r=L.B|L.z|L.A,n=(a*E>>1)*(D?2:1),d=D?1:0;c(G,Y,124);Y+=4;c(G,Y,z);Y+=4;c(G,Y,E);Y+=4;
  6587. c(G,Y,a);Y+=4;c(G,Y,n);Y+=4;c(G,Y,d);Y+=4;c(G,Y,10);Y+=4;Y+=11*4;T(G,D,Y);Y+=32;c(G,Y,r);Y+=4;Y+=4*4}function Q(G,a){var E={},D=UTEX.X.T;
  6588. a+=4;E.u=D(G,a);a+=4;E.f=UTEX.X.t(G,a,4);a+=4;E.w=D(G,a);a+=4;E.l=D(G,a);a+=4;E.j=D(G,a);a+=4;E.H=D(G,a);
  6589. a+=4;E.m=D(G,a);a+=4;return E}function T(G,a,E){var D=UTEX.X.G,Y=L.a;D(G,E,32);E+=4;D(G,E,Y);E+=4;UTEX.X.b(G,E,a?"DXT5":"DXT1");
  6590. E+=4;E+=5*4}function u(G,a){var E={},D=UTEX.X.T;E.V=D(G,a);a+=4;E.a4=D(G,a);a+=4;E.a6=D(G,a);a+=4;E.a1=D(G,a);
  6591. a+=4;E.a0=D(G,a);a+=4;return E}return{encode:aa,decode:a6}}();UTEX.VTF=function(){var L={};function a6(k){var B=new Uint8Array(k),Q=0,T={};
  6592. Q=aa(B,Q,T);var u=T.F,G=T.d;if(u*G!=0){var a=new Uint8Array(u*G*4);Q=UTEX.R(B,Q,a,u,G)}var E=T.s,D=T.p,Y=[];
  6593. for(var c=0;c<D;c++){var z=T.width>>>D-1-c,r=T.height>>>D-1-c;for(var n=0;n<T.frames;n++){var a=new Uint8Array(z*r*4);
  6594. if(E==0||E==12){var d=Q,q=E==0?[0,1,2,3]:[2,1,0,3],Z=q[0],ae=q[1],P=q[2],a2=q[3];for(var X=0;X<a.length;
  6595. X+=4){a[X+Z]=B[d++];a[X+ae]=B[d++];a[X+P]=B[d++];a[X+a2]=B[d++]}Q+=z*r*4}else if(E==2){for(var X=0;X<a.length;
  6596. X+=4){a[X]=B[Q++];a[X+1]=B[Q++];a[X+2]=B[Q++];a[X+3]=255}}else if(E==13)Q=UTEX.R(B,Q,a,z,r);else if(E==14)Q=UTEX.C(B,Q,a,z,r);
  6597. else if(E==15)Q=UTEX.k(B,Q,a,z,r);else throw E;Y.push({width:z,height:r,image:a.buffer})}}return Y}function aa(k,B,Q){var T=UTEX.X.T,u=UTEX.X.Y,G=UTEX.X.t(k,B,4);
  6598. B+=4;var a=T(k,B);B+=4;var E=T(k,B);B+=4;var D=T(k,B);B+=4;Q.width=u(k,B);B+=2;Q.height=u(k,B);B+=2;
  6599. Q.u=T(k,B);B+=4;Q.frames=u(k,B);B+=2;Q.a7=u(k,B);B+=2;B+=4;B+=12;B+=4;B+=4;Q.s=T(k,B);B+=4;Q.p=k[B++];
  6600. Q.a2=T(k,B);B+=4;Q.F=k[B++];Q.d=k[B++];if(E>=2){Q.depth=u(k,B);B+=2;if(E>=3){B+=3;Q.a5=T(k,B);B+=4}}return D}return{decode:a6}}();(function(){var J={};if(typeof module=="object"){module.exports=J}else{self.UTIF=J}var aS=typeof require==="function"?require("pako"):self.pako;
  6601. function aw(){if(typeof process=="undefined"||process.env.NODE_ENV=="development")console.log.apply(console,arguments)}(function(J,aS){(function(){"use strict";
  6602. var Y=function F(){function Y(y){this.message="JPEG error: "+y}Y.prototype=new Error;Y.prototype.name="JpegError";
  6603. Y.constructor=Y;return Y}(),m=function K(){var y=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),x=4017,d=799,M=3406,r=2276,q=1567,i=3784,o=5793,V=2896;
  6604. function m(t){if(t==null)t={};if(t.w==null)t.w=-1;this.V=t.n;this.N=t.w}function p(t,A){var Q=0,H=[],j,v,N=16,f;
  6605. while(N>0&&!t[N-1]){N--}H.push({children:[],index:0});var e=H[0];for(j=0;j<N;j++){for(v=0;v<t[j];v++){e=H.pop();
  6606. e.children[e.index]=A[Q];while(e.index>0){e=H.pop()}e.index++;H.push(e);while(H.length<=j){H.push(f={children:[],index:0});
  6607. e.children[e.index]=f.children;e=f}Q++}if(j+1<N){H.push(f={children:[],index:0});e.children[e.index]=f.children;
  6608. e=f}}return H[0].children}function l(t,A,Q){return 64*((t.P+1)*A+Q)}function s(t,A,Q,H,j,v,N,f,e,_){if(_==null)_=!1;
  6609. var R=Q.m,W=Q.Z,E=A,T=0,z=0,L=0,U=0,aD,n=0,G,Z,h,u,b5,aB,aP=0,aG,aF,b8,b1;function C(){if(z>0){z--;return T>>z&1}T=t[A++];
  6610. if(T===255){var aE=t[A++];if(aE){if(aE===220&&_){A+=2;var ag=b(t,A);A+=2;if(ag>0&&ag!==Q.s){throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",ag)}}else if(aE===217){if(_){var aJ=n*8;
  6611. if(aJ>0&&aJ<Q.s/10){throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, "+"possibly caused by incorrect `scanLines` parameter",aJ)}}throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new Y("unexpected marker")}}z=7;
  6612. return T>>>7}function az(aE){var ag=aE;while(!0){ag=ag[C()];switch(typeof ag){case"number":return ag;
  6613. case"object":continue}throw new Y("invalid huffman sequence")}}function a3(aE){var b5=0;while(aE>0){b5=b5<<1|C();
  6614. aE--}return b5}function X(aE){if(aE===1){return C()===1?1:-1}var b5=a3(aE);if(b5>=1<<aE-1){return b5}return b5+(-1<<aE)+1}function ap(G,aE){var ag=az(G.J),aJ=ag===0?0:X(ag),u=1;
  6615. G.D[aE]=G.Q+=aJ;while(u<64){var aU=az(G.i),b2=aU&15,a8=aU>>4;if(b2===0){if(a8<15){break}u+=16;continue}u+=a8;
  6616. var aI=y[u];G.D[aE+aI]=X(b2);u++}}function ae(G,aE){var ag=az(G.J),aJ=ag===0?0:X(ag)<<e;G.D[aE]=G.Q+=aJ}function au(G,aE){G.D[aE]|=C()<<e}function aT(G,aE){if(L>0){L--;
  6617. return}var u=v,ag=N;while(u<=ag){var aJ=az(G.i),aU=aJ&15,b2=aJ>>4;if(aU===0){if(b2<15){L=a3(b2)+(1<<b2)-1;
  6618. break}u+=16;continue}u+=b2;var a8=y[u];G.D[aE+a8]=X(aU)*(1<<e);u++}}function ah(G,aE){var u=v,ag=N,aJ=0,aU,b2;
  6619. while(u<=ag){var a8=aE+y[u],aI=G.D[a8]<0?-1:1;switch(U){case 0:b2=az(G.i);aU=b2&15;aJ=b2>>4;if(aU===0){if(aJ<15){L=a3(aJ)+(1<<aJ);
  6620. U=4}else{aJ=16;U=1}}else{if(aU!==1){throw new Y("invalid ACn encoding")}aD=X(aU);U=aJ?2:3}continue;case 1:case 2:if(G.D[a8]){G.D[a8]+=aI*(C()<<e)}else{aJ--;
  6621. if(aJ===0){U=U===2?3:0}}break;case 3:if(G.D[a8]){G.D[a8]+=aI*(C()<<e)}else{G.D[a8]=aD<<e;U=0}break;case 4:if(G.D[a8]){G.D[a8]+=aI*(C()<<e)}break}u++}if(U===4){L--;
  6622. if(L===0){U=0}}}function aW(G,aE,aP,ag,aJ){var aU=aP/R|0,b2=aP%R;n=aU*G.A+ag;var a8=b2*G.h+aJ,aI=l(G,n,a8);
  6623. aE(G,aI)}function an(G,aE,aP){n=aP/G.P|0;var ag=aP%G.P,aJ=l(G,n,ag);aE(G,aJ)}var a$=H.length;if(W){if(v===0){aB=f===0?ae:au}else{aB=f===0?aT:ah}}else{aB=ap}if(a$===1){aF=H[0].P*H[0].c}else{aF=R*Q.R}while(aP<=aF){var av=j?Math.min(aF-aP,j):aF;
  6624. if(av>0){for(Z=0;Z<a$;Z++){H[Z].Q=0}L=0;if(a$===1){G=H[0];for(b5=0;b5<av;b5++){an(G,aB,aP);aP++}}else{for(b5=0;
  6625. b5<av;b5++){for(Z=0;Z<a$;Z++){G=H[Z];b8=G.h;b1=G.A;for(h=0;h<b1;h++){for(u=0;u<b8;u++){aW(G,aB,aP,h,u)}}}aP++}}}z=0;
  6626. aG=D(t,A);if(!aG){break}if(aG.u){var aQ=av>0?"unexpected":"excessive";A=aG.offset}if(aG.M>=65488&&aG.M<=65495){A+=2}else{break}}return A-E}function B(t,A,Q){var H=t.$,j=t.D,v,N,f,e,_,R,W,E,T,z,L,U,aD,n,G,aZ,Z;
  6627. if(!H){throw new Y("missing required Quantization Table.")}for(var h=0;h<64;h+=8){T=j[A+h];z=j[A+h+1];
  6628. L=j[A+h+2];U=j[A+h+3];aD=j[A+h+4];n=j[A+h+5];G=j[A+h+6];aZ=j[A+h+7];T*=H[h];if((z|L|U|aD|n|G|aZ)===0){Z=o*T+512>>10;
  6629. Q[h]=Z;Q[h+1]=Z;Q[h+2]=Z;Q[h+3]=Z;Q[h+4]=Z;Q[h+5]=Z;Q[h+6]=Z;Q[h+7]=Z;continue}z*=H[h+1];L*=H[h+2];U*=H[h+3];
  6630. aD*=H[h+4];n*=H[h+5];G*=H[h+6];aZ*=H[h+7];v=o*T+128>>8;N=o*aD+128>>8;f=L;e=G;_=V*(z-aZ)+128>>8;E=V*(z+aZ)+128>>8;
  6631. R=U<<4;W=n<<4;v=v+N+1>>1;N=v-N;Z=f*i+e*q+128>>8;f=f*q-e*i+128>>8;e=Z;_=_+W+1>>1;W=_-W;E=E+R+1>>1;R=E-R;
  6632. v=v+e+1>>1;e=v-e;N=N+f+1>>1;f=N-f;Z=_*r+E*M+2048>>12;_=_*M-E*r+2048>>12;E=Z;Z=R*d+W*x+2048>>12;R=R*x-W*d+2048>>12;
  6633. W=Z;Q[h]=v+E;Q[h+7]=v-E;Q[h+1]=N+W;Q[h+6]=N-W;Q[h+2]=f+R;Q[h+5]=f-R;Q[h+3]=e+_;Q[h+4]=e-_}for(var u=0;
  6634. u<8;++u){T=Q[u];z=Q[u+8];L=Q[u+16];U=Q[u+24];aD=Q[u+32];n=Q[u+40];G=Q[u+48];aZ=Q[u+56];if((z|L|U|aD|n|G|aZ)===0){Z=o*T+8192>>14;
  6635. if(Z<-2040){Z=0}else if(Z>=2024){Z=255}else{Z=Z+2056>>4}j[A+u]=Z;j[A+u+8]=Z;j[A+u+16]=Z;j[A+u+24]=Z;
  6636. j[A+u+32]=Z;j[A+u+40]=Z;j[A+u+48]=Z;j[A+u+56]=Z;continue}v=o*T+2048>>12;N=o*aD+2048>>12;f=L;e=G;_=V*(z-aZ)+2048>>12;
  6637. E=V*(z+aZ)+2048>>12;R=U;W=n;v=(v+N+1>>1)+4112;N=v-N;Z=f*i+e*q+2048>>12;f=f*q-e*i+2048>>12;e=Z;_=_+W+1>>1;
  6638. W=_-W;E=E+R+1>>1;R=E-R;v=v+e+1>>1;e=v-e;N=N+f+1>>1;f=N-f;Z=_*r+E*M+2048>>12;_=_*M-E*r+2048>>12;E=Z;Z=R*d+W*x+2048>>12;
  6639. R=R*x-W*d+2048>>12;W=Z;T=v+E;aZ=v-E;z=N+W;G=N-W;L=f+R;n=f-R;U=e+_;aD=e-_;if(T<16){T=0}else if(T>=4080){T=255}else{T>>=4}if(z<16){z=0}else if(z>=4080){z=255}else{z>>=4}if(L<16){L=0}else if(L>=4080){L=255}else{L>>=4}if(U<16){U=0}else if(U>=4080){U=255}else{U>>=4}if(aD<16){aD=0}else if(aD>=4080){aD=255}else{aD>>=4}if(n<16){n=0}else if(n>=4080){n=255}else{n>>=4}if(G<16){G=0}else if(G>=4080){G=255}else{G>>=4}if(aZ<16){aZ=0}else if(aZ>=4080){aZ=255}else{aZ>>=4}j[A+u]=T;
  6640. j[A+u+8]=z;j[A+u+16]=L;j[A+u+24]=U;j[A+u+32]=aD;j[A+u+40]=n;j[A+u+48]=G;j[A+u+56]=aZ}}function O(t,A){var Q=A.P,H=A.c,j=new Int16Array(64);
  6641. for(var v=0;v<H;v++){for(var N=0;N<Q;N++){var f=l(A,v,N);B(A,f,j)}}return A.D}function D(t,A,Q){if(Q==null)Q=A;
  6642. var H=t.length-1,j=Q<A?Q:A;if(A>=H){return null}var v=b(t,A);if(v>=65472&&v<=65534){return{u:null,M:v,offset:A}}var N=b(t,j);
  6643. while(!(N>=65472&&N<=65534)){if(++j>=H){return null}N=b(t,j)}return{u:v.toString(16),M:N,offset:j}}m.prototype={parse(t,A){if(A==null)A={};
  6644. var Q=A.F,H=0,j=null,v=null,N,f,e=0;function _(){var a8=b(t,H);H+=2;var aI=H+a8-2,z=D(t,aI,H);if(z&&z.u){aI=z.offset}var b7=t.subarray(H,aI);
  6645. H+=b7.length;return b7}function R(N){var a8=Math.ceil(N.o/8/N.X),aI=Math.ceil(N.s/8/N.B);for(var L=0;
  6646. L<N.W.length;L++){aT=N.W[L];var b7=Math.ceil(Math.ceil(N.o/8)*aT.h/N.X),aO=Math.ceil(Math.ceil(N.s/8)*aT.A/N.B),aR=a8*aT.h,aX=aI*aT.A,a2=64*aX*(aR+1);
  6647. aT.D=new Int16Array(a2);aT.P=b7;aT.c=aO}N.m=a8;N.R=aI}var W=[],E=[],T=[],z=b(t,H);H+=2;if(z!==65496){throw new Y("SOI not found")}z=b(t,H);
  6648. H+=2;markerLoop:while(z!==65497){var L,U,aD;switch(z){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var n=_();
  6649. if(z===65504){if(n[0]===74&&n[1]===70&&n[2]===73&&n[3]===70&&n[4]===0){j={version:{d:n[5],T:n[6]},K:n[7],j:n[8]<<8|n[9],H:n[10]<<8|n[11],S:n[12],I:n[13],C:n.subarray(14,14+3*n[12]*n[13])}}}if(z===65518){if(n[0]===65&&n[1]===100&&n[2]===111&&n[3]===98&&n[4]===101){v={version:n[5]<<8|n[6],k:n[7]<<8|n[8],q:n[9]<<8|n[10],a:n[11]}}}break;
  6650. case 65499:var G=b(t,H),aZ;H+=2;var Z=G+H-2;while(H<Z){var h=t[H++],u=new Uint16Array(64);if(h>>4===0){for(U=0;
  6651. U<64;U++){aZ=y[U];u[aZ]=t[H++]}}else if(h>>4===1){for(U=0;U<64;U++){aZ=y[U];u[aZ]=b(t,H);H+=2}}else{throw new Y("DQT - invalid table spec")}W[h&15]=u}break;
  6652. case 65472:case 65473:case 65474:if(N){throw new Y("Only single frame JPEGs supported")}H+=2;N={};N.G=z===65473;
  6653. N.Z=z===65474;N.precision=t[H++];var b5=b(t,H),aB,aP=0,aG=0;H+=2;N.s=Q||b5;N.o=b(t,H);H+=2;N.W=[];N._={};
  6654. var aF=t[H++];for(L=0;L<aF;L++){aB=t[H];var b8=t[H+1]>>4,b1=t[H+1]&15;if(aP<b8){aP=b8}if(aG<b1){aG=b1}var C=t[H+2];
  6655. aD=N.W.push({h:b8,A:b1,L:C,$:null});N._[aB]=aD-1;H+=3}N.X=aP;N.B=aG;R(N);break;case 65476:var az=b(t,H);
  6656. H+=2;for(L=2;L<az;){var a3=t[H++],X=new Uint8Array(16),ap=0;for(U=0;U<16;U++,H++){ap+=X[U]=t[H]}var ae=new Uint8Array(ap);
  6657. for(U=0;U<ap;U++,H++){ae[U]=t[H]}L+=17+ap;(a3>>4===0?T:E)[a3&15]=p(X,ae)}break;case 65501:H+=2;f=b(t,H);
  6658. H+=2;break;case 65498:var au=++e===1&&!Q,aT;H+=2;var ah=t[H++],aW=[];for(L=0;L<ah;L++){var an=t[H++],a$=N._[an];
  6659. aT=N.W[a$];aT.index=an;var av=t[H++];aT.J=T[av>>4];aT.i=E[av&15];aW.push(aT)}var aQ=t[H++],aE=t[H++],ag=t[H++];
  6660. try{var aJ=s(t,H,N,aW,f,aQ,aE,ag>>4,ag&15,au);H+=aJ}catch(ex){if(ex instanceof DNLMarkerError){return this.parse(t,{F:ex.s})}else if(ex instanceof EOIMarkerError){break markerLoop}throw ex}break;
  6661. case 65500:H+=4;break;case 65535:if(t[H]!==255){H--}break;default:var aU=D(t,H-2,H-3);if(aU&&aU.u){H=aU.offset;
  6662. break}if(H>=t.length-1){break markerLoop}throw new Y("JpegImage.parse - unknown marker: "+z.toString(16))}z=b(t,H);
  6663. H+=2}this.width=N.o;this.height=N.s;this.g=j;this.b=v;this.W=[];for(L=0;L<N.W.length;L++){aT=N.W[L];
  6664. var b2=W[aT.L];if(b2){aT.$=b2}this.W.push({index:aT.index,e:O(N,aT),l:aT.h/N.X,t:aT.A/N.B,P:aT.P,c:aT.c})}this.p=this.W.length;
  6665. return undefined},Y(t,A,Q){if(Q==null)Q=!1;var H=this.width/t,j=this.height/A,v,N,f,e,_,R,W,E,T,z,L=0,U,aD=this.W.length,n=t*A*aD,G=new Uint8ClampedArray(n),aZ=new Uint32Array(t),Z=4294967288,h;
  6666. for(W=0;W<aD;W++){v=this.W[W];N=v.l*H;f=v.t*j;L=W;U=v.e;e=v.P+1<<3;if(N!==h){for(_=0;_<t;_++){E=0|_*N;
  6667. aZ[_]=(E&Z)<<3|E&7}h=N}for(R=0;R<A;R++){E=0|R*f;z=e*(E&Z)|(E&7)<<3;for(_=0;_<t;_++){G[L]=U[z+aZ[_]];
  6668. L+=aD}}}var u=this.V;if(!Q&&aD===4&&!u){u=new Int32Array([-256,255,-256,255,-256,255,-256,255])}if(u){for(W=0;
  6669. W<n;){for(E=0,T=0;E<aD;E++,W++,T+=2){G[W]=(G[W]*u[T]>>8)+u[T+1]}}}return G},get f(){if(this.b){return!!this.b.a}if(this.p===3){if(this.N===0){return!1}else if(this.W[0].index===82&&this.W[1].index===71&&this.W[2].index===66){return!1}return!0}if(this.N===1){return!0}return!1},z:function ax(t){var A,Q,H;
  6670. for(var j=0,v=t.length;j<v;j+=3){A=t[j];Q=t[j+1];H=t[j+2];t[j]=A-179.456+1.402*H;t[j+1]=A+135.459-.344*Q-.714*H;
  6671. t[j+2]=A-226.816+1.772*Q}return t},O:function I(t){var A,Q,H,j,v=0;for(var N=0,f=t.length;N<f;N+=4){A=t[N];
  6672. Q=t[N+1];H=t[N+2];j=t[N+3];t[v++]=-122.67195406894+Q*(-660635669420364e-19*Q+.000437130475926232*H-54080610064599e-18*A+.00048449797120281*j-.154362151871126)+H*(-.000957964378445773*H+.000817076911346625*A-.00477271405408747*j+1.53380253221734)+A*(.000961250184130688*A-.00266257332283933*j+.48357088451265)+j*(-.000336197177618394*j+.484791561490776);
  6673. t[v++]=107.268039397724+Q*(219927104525741e-19*Q-.000640992018297945*H+.000659397001245577*A+.000426105652938837*j-.176491792462875)+H*(-.000778269941513683*H+.00130872261408275*A+.000770482631801132*j-.151051492775562)+A*(.00126935368114843*A-.00265090189010898*j+.25802910206845)+j*(-.000318913117588328*j-.213742400323665);
  6674. t[v++]=-20.810012546947+Q*(-.000570115196973677*Q-263409051004589e-19*H+.0020741088115012*A-.00288260236853442*j+.814272968359295)+H*(-153496057440975e-19*H-.000132689043961446*A+.000560833691242812*j-.195152027534049)+A*(.00174418132927582*A-.00255243321439347*j+.116935020465145)+j*(-.000343531996510555*j+.24165260232407)}return t.subarray(0,v)},r:function k(t){var A,Q,H;
  6675. for(var j=0,v=t.length;j<v;j+=4){A=t[j];Q=t[j+1];H=t[j+2];t[j]=434.456-A-1.402*H;t[j+1]=119.541-A+.344*Q+.714*H;
  6676. t[j+2]=481.816-A-1.772*Q}return t},U:function c(t){var A,Q,H,j,v=0;for(var N=0,f=t.length;N<f;N+=4){A=t[N];
  6677. Q=t[N+1];H=t[N+2];j=t[N+3];t[v++]=255+A*(-6747147073602441e-20*A+.0008379262121013727*Q+.0002894718188643294*H+.003264231057537806*j-1.1185611867203937)+Q*(26374107616089404e-21*Q-8626949158638572e-20*H-.0002748769067499491*j-.02155688794978967)+H*(-3878099212869363e-20*H-.0003267808279485286*j+.0686742238595345)-j*(.0003361971776183937*j+.7430659151342254);
  6678. t[v++]=255+A*(.00013596372813588848*A+.000924537132573585*Q+.00010567359618683593*H+.0004791864687436512*j-.3109689587515875)+Q*(-.00023545346108370344*Q+.0002702845253534714*H+.0020200308977307156*j-.7488052167015494)+H*(6834815998235662e-20*H+.00015168452363460973*j-.09751927774728933)-j*(.0003189131175883281*j+.7364883807733168);
  6679. t[v++]=255+A*(13598650411385308e-21*A+.00012423956175490851*Q+.0004751985097583589*H-36729317476630424e-22*j-.05562186980264034)+Q*(.00016141380598724676*Q+.0009692239130725186*H+.0007782692450036253*j-.44015232367526463)+H*(5.068882914068769e-7*H+.0017778369011375071*j-.7591454649749609)-j*(.0003435319965105553*j+.7063770186160144)}return t.subarray(0,v)},getData:function(t){var A=t.width,Q=t.height,H=t.forceRGB,j=t.isSourcePDF;
  6680. if(this.p>4){throw new Y("Unsupported color mode")}var v=this.Y(A,Q,j);if(this.p===1&&H){var N=v.length,f=new Uint8ClampedArray(N*3),e=0;
  6681. for(var _=0;_<N;_++){var R=v[_];f[e++]=R;f[e++]=R;f[e++]=R}return f}else if(this.p===3&&this.f){return this.z(v)}else if(this.p===4){if(this.f){if(H){return this.O(v)}return this.r(v)}else if(H){return this.U(v)}}return v}};
  6682. return m}();function S(y,x){return y[x]<<24>>24}function b(y,x){return y[x]<<8|y[x+1]}function w(y,x){return(y[x]<<24|y[x+1]<<16|y[x+2]<<8|y[x+3])>>>0}J.JpegDecoder=m}());
  6683. J.encodeImage=function(Y,m,F,K){var b={t256:[m],t257:[F],t258:[8,8,8,8],t259:[1],t262:[2],t273:[1e3],t277:[4],t278:[F],t279:[m*F*4],t282:[[72,1]],t283:[[72,1]],t284:[1],t286:[[0,1]],t287:[[0,1]],t296:[1],t305:["Photopea (UTIF.js)"],t338:[1]};
  6684. if(K)for(var w in K)b[w]=K[w];var y=new Uint8Array(J.encode([b])),x=new Uint8Array(Y),d=new Uint8Array(1e3+m*F*4);
  6685. for(var w=0;w<y.length;w++)d[w]=y[w];for(var w=0;w<x.length;w++)d[1e3+w]=x[w];return d.buffer};J.encode=function(Y){var m=!1,F=new Uint8Array(2e4),K=4,S=m?J._binLE:J._binBE,b=8;
  6686. F[0]=F[1]=m?73:77;S.writeUshort(F,2,42);S.writeUint(F,K,b);K+=4;for(var w=0;w<Y.length;w++){var y=J._writeIFD(S,J._types.basic,F,b,Y[w]);
  6687. b=y[1];if(w<Y.length-1){if((b&3)!=0)b+=4-(b&3);S.writeUint(F,y[0],b)}}return F.slice(0,b).buffer};J.decode=function(Y,m){if(m==null)m={parseMN:!0,debug:!1};
  6688. var F=new Uint8Array(Y),K=0,S=J._binBE.readASCII(F,K,2);K+=2;var b=S=="II"?J._binLE:J._binBE,w=b.readUshort(F,K);
  6689. K+=2;var y=b.readUint(F,K);K+=4;var x=[];while(!0){var d=b.readUshort(F,y),M=b.readUshort(F,y+4);if(d!=0)if(M<1||12<M){aw("error in TIFF");
  6690. break}J._readIFD(b,F,y,x,0,m);y=b.readUint(F,y+2+d*12);if(y==0)break}return x};J.decodeImage=function(Y,m,F){if(m.data)return;
  6691. var K=new Uint8Array(Y),S=J._binBE.readASCII(K,0,2),y,$=0;if(m.t256==null)return;m.isLE=S=="II";m.width=m.t256[0];
  6692. m.height=m.t257[0];var b=m.t259?m.t259[0]:1,w=m.t266?m.t266[0]:1;if(m.t284&&m.t284[0]==2)aw("PlanarConfiguration 2 should not be used!");
  6693. if(m.t258)y=Math.min(32,m.t258[0])*m.t258.length;else y=m.t277?m.t277[0]:1;if(b==1&&m.t279!=null&&m.t278&&m.t262[0]==32803){y=Math.round(m.t279[0]*8/(m.width*m.t278[0]))}var x=Math.ceil(m.width*y/8)*8,d=m.t273;
  6694. if(d==null)d=m.t324;var M=m.t279;if(b==1&&d.length==1)M=[m.height*(x>>>3)];if(M==null)M=m.t325;var r=new Uint8Array(m.height*(x>>>3));
  6695. if(m.t322!=null){var q=m.t322[0],i=m.t323[0],o=Math.floor((m.width+q-1)/q),P=Math.floor((m.height+i-1)/i),V=new Uint8Array(Math.ceil(q*i*y/8)|0);
  6696. for(var p=0;p<P;p++)for(var l=0;l<o;l++){var O=p*o+l;for(var D=0;D<V.length;D++)V[D]=0;J.decode._decompress(m,F,K,d[O],M[O],b,V,0,w);
  6697. if(b==6)r=V;else J._copyTile(V,Math.ceil(q*y/8)|0,i,r,Math.ceil(m.width*y/8)|0,m.height,Math.ceil(l*q*y/8)|0,p*i)}$=r.length*8}else{var ax=m.t278?m.t278[0]:m.height;
  6698. ax=Math.min(ax,m.height);for(var O=0;O<d.length;O++){J.decode._decompress(m,F,K,d[O],M[O],b,r,Math.ceil($/8)|0,w);
  6699. $+=x*ax}$=Math.min($,r.length*8)}m.data=new Uint8Array(r.buffer,0,Math.ceil($/8)|0)};J.decode._decompress=function(Y,m,F,K,S,b,w,y,x){if(!1){}else if(b==1)for(var d=0;
  6700. d<S;d++)w[y+d]=F[K+d];else if(b==3)J.decode._decodeG3(F,K,S,w,y,Y.width,x,Y.t292?(Y.t292[0]&1)==1:!1);
  6701. else if(b==4)J.decode._decodeG4(F,K,S,w,y,Y.width,x);else if(b==5)J.decode._decodeLZW(F,K,S,w,y,8);else if(b==6)J.decode._decodeOldJPEG(Y,F,K,S,w,y);
  6702. else if(b==7||b==34892)J.decode._decodeNewJPEG(Y,F,K,S,w,y);else if(b==8||b==32946){var M=new Uint8Array(F.buffer,K,S),r=aS.inflate(M);
  6703. for(var $=0;$<r.length;$++)w[y+$]=r[$]}else if(b==9)J.decode._decodeVC5(F,K,S,w,y);else if(b==32767)J.decode._decodeARW(Y,F,K,S,w,y);
  6704. else if(b==32773)J.decode._decodePackBits(F,K,S,w,y);else if(b==32809)J.decode._decodeThunder(F,K,S,w,y);
  6705. else if(b==34713)J.decode._decodeNikon(Y,m,F,K,S,w,y);else aw("Unknown compression",b);var q=Y.t258?Math.min(32,Y.t258[0]):1,i=Y.t277?Y.t277[0]:1,o=q*i>>>3,P=Y.t278?Y.t278[0]:Y.height,V=Math.ceil(q*i*Y.width/8);
  6706. if(q==16&&!Y.isLE&&Y.t33422==null)for(var p=0;p<P;p++){var l=y+p*V;for(var s=1;s<V;s+=2){var O=w[l+s];
  6707. w[l+s]=w[l+s-1];w[l+s-1]=O}}if(Y.t317&&Y.t317[0]==2){for(var p=0;p<P;p++){var D=y+p*V;if(q==16)for(var d=o;
  6708. d<V;d+=2){var ax=(w[D+d+1]<<8|w[D+d])+(w[D+d-o+1]<<8|w[D+d-o]);w[D+d]=ax&255;w[D+d+1]=ax>>>8&255}else if(i==3)for(var d=3;
  6709. d<V;d+=3){w[D+d]=w[D+d]+w[D+d-3]&255;w[D+d+1]=w[D+d+1]+w[D+d-2]&255;w[D+d+2]=w[D+d+2]+w[D+d-1]&255}else for(var d=o;
  6710. d<V;d++)w[D+d]=w[D+d]+w[D+d-o]&255}}};J.decode._decodeVC5=J.decode._decodeVC5=function(){var Y=[1,0,1,0,2,2,1,1,3,7,1,2,5,25,1,3,6,48,1,4,6,54,1,5,7,111,1,8,7,99,1,6,7,105,12,0,7,107,1,7,8,209,20,0,8,212,1,9,8,220,1,10,9,393,1,11,9,394,32,0,9,416,1,12,9,427,1,13,10,887,1,18,10,784,1,14,10,790,1,15,10,835,60,0,10,852,1,16,10,885,1,17,11,1571,1,19,11,1668,1,20,11,1669,100,0,11,1707,1,21,11,1772,1,22,12,3547,1,29,12,3164,1,24,12,3166,1,25,12,3140,1,23,12,3413,1,26,12,3537,1,27,12,3539,1,28,13,7093,1,35,13,6283,1,30,13,6331,1,31,13,6335,180,0,13,6824,1,32,13,7072,1,33,13,7077,320,0,13,7076,1,34,14,12565,1,36,14,12661,1,37,14,12669,1,38,14,13651,1,39,14,14184,1,40,15,28295,1,46,15,28371,1,47,15,25320,1,42,15,25336,1,43,15,25128,1,41,15,27300,1,44,15,28293,1,45,16,50259,1,48,16,50643,1,49,16,50675,1,50,16,56740,1,53,16,56584,1,51,16,56588,1,52,17,113483,1,61,17,113482,1,60,17,101285,1,55,17,101349,1,56,17,109205,1,57,17,109207,1,58,17,100516,1,54,17,113171,1,59,18,202568,1,62,18,202696,1,63,18,218408,1,64,18,218412,1,65,18,226340,1,66,18,226356,1,67,18,226358,1,68,19,402068,1,69,19,405138,1,70,19,405394,1,71,19,436818,1,72,19,436826,1,73,19,452714,1,75,19,452718,1,76,19,452682,1,74,20,804138,1,77,20,810279,1,78,20,810790,1,79,20,873638,1,80,20,873654,1,81,20,905366,1,82,20,905430,1,83,20,905438,1,84,21,1608278,1,85,21,1620557,1,86,21,1621582,1,87,21,1621583,1,88,21,1747310,1,89,21,1810734,1,90,21,1810735,1,91,21,1810863,1,92,21,1810879,1,93,22,3621725,1,99,22,3621757,1,100,22,3241112,1,94,22,3494556,1,95,22,3494557,1,96,22,3494622,1,97,22,3494623,1,98,23,6482227,1,102,23,6433117,1,101,23,6989117,1,103,23,6989119,1,105,23,6989118,1,104,23,7243449,1,106,23,7243512,1,107,24,13978233,1,111,24,12964453,1,109,24,12866232,1,108,24,14486897,1,113,24,13978232,1,110,24,14486896,1,112,24,14487026,1,114,24,14487027,1,115,25,25732598,1,225,25,25732597,1,189,25,25732596,1,188,25,25732595,1,203,25,25732594,1,202,25,25732593,1,197,25,25732592,1,207,25,25732591,1,169,25,25732590,1,223,25,25732589,1,159,25,25732522,1,235,25,25732579,1,152,25,25732575,1,192,25,25732489,1,179,25,25732573,1,201,25,25732472,1,172,25,25732576,1,149,25,25732488,1,178,25,25732566,1,120,25,25732571,1,219,25,25732577,1,150,25,25732487,1,127,25,25732506,1,211,25,25732548,1,125,25,25732588,1,158,25,25732486,1,247,25,25732467,1,238,25,25732508,1,163,25,25732552,1,228,25,25732603,1,183,25,25732513,1,217,25,25732587,1,168,25,25732520,1,122,25,25732484,1,128,25,25732562,1,249,25,25732505,1,187,25,25732504,1,186,25,25732483,1,136,25,25928905,1,181,25,25732560,1,255,25,25732500,1,230,25,25732482,1,135,25,25732555,1,233,25,25732568,1,222,25,25732583,1,145,25,25732481,1,134,25,25732586,1,167,25,25732521,1,248,25,25732518,1,209,25,25732480,1,243,25,25732512,1,216,25,25732509,1,164,25,25732547,1,140,25,25732479,1,157,25,25732544,1,239,25,25732574,1,191,25,25732564,1,251,25,25732478,1,156,25,25732546,1,139,25,25732498,1,242,25,25732557,1,133,25,25732477,1,162,25,25732515,1,213,25,25732584,1,165,25,25732514,1,212,25,25732476,1,227,25,25732494,1,198,25,25732531,1,236,25,25732530,1,234,25,25732529,1,117,25,25732528,1,215,25,25732527,1,124,25,25732526,1,123,25,25732525,1,254,25,25732524,1,253,25,25732523,1,148,25,25732570,1,218,25,25732580,1,146,25,25732581,1,147,25,25732569,1,224,25,25732533,1,143,25,25732540,1,184,25,25732541,1,185,25,25732585,1,166,25,25732556,1,132,25,25732485,1,129,25,25732563,1,250,25,25732578,1,151,25,25732501,1,119,25,25732502,1,193,25,25732536,1,176,25,25732496,1,245,25,25732553,1,229,25,25732516,1,206,25,25732582,1,144,25,25732517,1,208,25,25732558,1,137,25,25732543,1,241,25,25732466,1,237,25,25732507,1,190,25,25732542,1,240,25,25732551,1,131,25,25732554,1,232,25,25732565,1,252,25,25732475,1,171,25,25732493,1,205,25,25732492,1,204,25,25732491,1,118,25,25732490,1,214,25,25928904,1,180,25,25732549,1,126,25,25732602,1,182,25,25732539,1,175,25,25732545,1,141,25,25732559,1,138,25,25732537,1,177,25,25732534,1,153,25,25732503,1,194,25,25732606,1,160,25,25732567,1,121,25,25732538,1,174,25,25732497,1,246,25,25732550,1,130,25,25732572,1,200,25,25732474,1,170,25,25732511,1,221,25,25732601,1,196,25,25732532,1,142,25,25732519,1,210,25,25732495,1,199,25,25732605,1,155,25,25732535,1,154,25,25732499,1,244,25,25732510,1,220,25,25732600,1,195,25,25732607,1,161,25,25732604,1,231,25,25732473,1,173,25,25732599,1,226,26,51465122,1,116,26,51465123,0,1],F,K,S,b=[3,3,3,3,2,2,2,1,1,1],w=24576,y=16384,x=8192,d=y|x;
  6711. function M(B){var O=B[1],I=B[0][O>>>3]>>>7-(O&7)&1;B[1]++;return I}function r(B,O){if(F==null){F={};
  6712. for(var I=0;I<Y.length;I+=4)F[Y[I+1]]=Y.slice(I,I+4)}var c=M(B),t=F[c];while(t==null){c=c<<1|M(B);t=F[c]}var A=t[3];
  6713. if(A!=0)A=M(B)==0?A:-A;O[0]=t[2];O[1]=A}function $(B,O){for(var I=0;I<O;I++){if((B&1)==1)B++;B=B>>>1}return B}function q(B,O){return B>>O}function i(B,O,I,c,t,A){O[I]=q(q(11*B[t]-4*B[t+A]+B[t+A+A]+4,3)+B[c],1);
  6714. O[I+A]=q(q(5*B[t]+4*B[t+A]-B[t+A+A]+4,3)-B[c],1)}function o(B,O,I,c,t,A){var H=B[t-A]-B[t+A],j=B[t],f=B[c];
  6715. O[I]=q(q(H+4,3)+j+f,1);O[I+A]=q(q(-H+4,3)+j-f,1)}function P(B,O,I,c,t,A){O[I]=q(q(5*B[t]+4*B[t-A]-B[t-A-A]+4,3)+B[c],1);
  6716. O[I+A]=q(q(11*B[t]-4*B[t-A]+B[t-A-A]+4,3)-B[c],1)}function p(B){B=B<0?0:B>4095?4095:B;B=S[B]>>>2;return B}function l(B,O,I,c,t){c=new Uint16Array(c.buffer);
  6717. var A=Date.now(),H=J._binBE,j=O+I,f,W,a,T,ay,L,aV,U,aD,ar,ad,at,n,b3,G,aA,al,aq;O+=4;while(O<j){var b6=H.readShort(B,O),h=H.readUshort(B,O+2);
  6718. O+=4;if(b6==12)f=h;else if(b6==20)W=h;else if(b6==21)a=h;else if(b6==48)T=h;else if(b6==53)ay=h;else if(b6==35)L=h;
  6719. else if(b6==62)aV=h;else if(b6==101)U=h;else if(b6==109)aD=h;else if(b6==84)ar=h;else if(b6==106)ad=h;
  6720. else if(b6==107)at=h;else if(b6==108)n=h;else if(b6==102)b3=h;else if(b6==104)G=h;else if(b6==105)aA=h;
  6721. else{var u=b6<0?-b6:b6,a9=u&65280,b4=0;if(u&d){if(u&x){b4=h&65535;b4+=(u&255)<<16}else{b4=h&65535}}if((u&w)==w){if(al==null){al=[];
  6722. for(var a_=0;a_<4;a_++)al[a_]=new Int16Array((W>>>1)*(a>>>1));aq=new Int16Array((W>>>1)*(a>>>1));K=new Int16Array(1024);
  6723. for(var a_=0;a_<1024;a_++){var as=a_-512,aM=Math.abs(as),f=Math.floor(768*aM*aM*aM/(255*255*255))+aM;
  6724. K[a_]=Math.sign(as)*f}S=new Uint16Array(4096);var b5=(1<<16)-1;for(var a_=0;a_<4096;a_++){var aB=a_,aC=b5*(Math.pow(113,aB/4095)-1)/112;
  6725. S[a_]=Math.min(aC,b5)}}var aN=al[aV],aP=$(W,1+b[T]),aF=$(a,1+b[T]);if(T==0){for(var C=0;C<aF;C++)for(var X=0;
  6726. X<aP;X++){var ap=O+(C*aP+X)*2;aN[C*(W>>>1)+X]=B[ap]<<8|B[ap+1]}}else{var ae=[B,O*8],au=[],ah=0,aW=aP*aF,an=[0,0],a$=0,h=0;
  6727. while(ah<aW){r(ae,an);a$=an[0];h=an[1];while(a$>0){au[ah++]=h;a$--}}var av=(T-1)%3,aQ=av!=1?aP:0,aE=av!=0?aF:0;
  6728. for(var C=0;C<aF;C++){var ag=(C+aE)*(W>>>1)+aQ,aJ=C*aP;for(var X=0;X<aP;X++)aN[ag+X]=K[au[aJ+X]+512]*ay}if(av==2){var G=W>>>1,aU=aP*2,b2=aF*2;
  6729. for(var C=0;C<aF;C++){for(var X=0;X<aU;X++){var a_=C*2*G+X,a8=C*G+X,aI=aF*G+a8;if(C==0)i(aN,aq,a_,aI,a8,G);
  6730. else if(C==aF-1)P(aN,aq,a_,aI,a8,G);else o(aN,aq,a_,aI,a8,G)}}var b7=aN;aN=aq;aq=b7;for(var C=0;C<b2;
  6731. C++){for(var X=0;X<aP;X++){var a_=C*G+2*X,a8=C*G+X,aI=aP+a8;if(X==0)i(aN,aq,a_,aI,a8,1);else if(X==aP-1)P(aN,aq,a_,aI,a8,1);
  6732. else o(aN,aq,a_,aI,a8,1)}}var b7=aN;aN=aq;aq=b7;var aO=[],aR=2-~~((T-1)/3);for(var aX=0;aX<3;aX++)aO[aX]=aD>>14-aX*2&3;
  6733. var a2=aO[aR];if(a2!=0)for(var C=0;C<b2;C++)for(var X=0;X<aU;X++){var a_=C*G+X;aN[a_]=aN[a_]<<a2}}}if(T==9&&aV==3){var aH=al[0],af=al[1],aL=al[2],a4=al[3];
  6734. for(var C=0;C<a;C+=2)for(var X=0;X<W;X+=2){var ak=C*W+X,ap=(C>>>1)*(W>>>1)+(X>>>1),a1=aH[ap],aK=af[ap]-2048,a5=aL[ap]-2048,a6=a4[ap]-2048,aY=(aK<<1)+a1,b0=(a5<<1)+a1,ab=a1+a6,aa=a1-a6;
  6735. c[ak]=p(aY);c[ak+1]=p(ab);c[ak+W]=p(aa);c[ak+W+1]=p(b0)}}O+=b4*4}else if(u==16388){O+=b4*4}else if(a9==8192||a9==8448||a9==9216){}else throw u.toString(16)}}console.log(Date.now()-A)}return l}();
  6736. J.decode._ljpeg_diff=function(Y,m,F){var K=J.decode._getbithuff,S,b;S=K(Y,m,F[0],F);b=K(Y,m,S,0);if((b&1<<S-1)==0)b-=(1<<S)-1;
  6737. return b};J.decode._decodeARW=function(Y,m,F,K,S,b){var w=Y.t256[0],y=Y.t257[0],x=Y.t258[0],d=Y.isLE?J._binLE:J._binBE,M=w*y==K||w*y*1.5==K,p,V,c,t,A,Q,H,j,v,i,N;
  6738. if(!M){y+=8;var r=[F,0,0,0],$=new Uint16Array(32770),q=[3857,3856,3599,3342,3085,2828,2571,2314,2057,1800,1543,1286,1029,772,771,768,514,513],i,o,P,V,p,l=0,s=J.decode._ljpeg_diff;
  6739. $[0]=15;for(P=i=0;i<18;i++){var B=32768>>>(q[i]>>>8);for(var o=0;o<B;o++)$[++P]=q[i]}for(V=w;V--;)for(p=0;
  6740. p<y+1;p+=2){if(p==y)p=1;l+=s(m,r,$);if(p<y){var O=l&4095;J.decode._putsF(S,(p*w+V)*x,O<<16-x)}}return}if(w*y*1.5==K){for(var i=0;
  6741. i<K;i+=3){var D=m[F+i+0],ax=m[F+i+1],I=m[F+i+2];S[b+i]=ax<<4|D>>>4;S[b+i+1]=D<<4|I>>>4;S[b+i+2]=I<<4|ax>>>4}return}var k=new Uint16Array(16),f=new Uint8Array(w+1);
  6742. for(p=0;p<y;p++){for(var e=0;e<w;e++)f[e]=m[F++];for(N=0,V=0;V<w-30;N+=16){t=2047&(c=d.readUint(f,N));
  6743. A=2047&c>>>11;Q=15&c>>>22;H=15&c>>>26;for(j=0;j<4&&128<<j<=t-A;j++);for(v=30,i=0;i<16;i++)if(i==Q)k[i]=t;
  6744. else if(i==H)k[i]=A;else{k[i]=((d.readUshort(f,N+(v>>3))>>>(v&7)&127)<<j)+A;if(k[i]>2047)k[i]=2047;v+=7}for(i=0;
  6745. i<16;i++,V+=2){var O=k[i]<<1;J.decode._putsF(S,(p*w+V)*x,O<<16-x)}V-=V&1?1:31}}};J.decode._decodeNikon=function(Y,m,F,K,S,b,w){var y=[[0,0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0,5,4,3,6,2,7,1,0,8,9,11,10,12],[0,0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0,57,90,56,39,22,5,4,3,2,1,0,11,12,12],[0,0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0,5,4,6,3,7,2,8,1,9,0,10,11,12],[0,0,1,4,3,1,1,1,1,1,2,0,0,0,0,0,0,5,6,4,7,8,3,9,2,1,0,10,11,12,13,14],[0,0,1,5,1,1,1,1,1,1,1,2,0,0,0,0,0,8,92,75,58,41,7,6,5,4,3,2,1,0,13,14],[0,0,1,4,2,2,3,1,2,0,0,0,0,0,0,0,0,7,6,8,5,9,4,10,3,11,12,2,0,1,13,14]],x=Y.t256[0],d=Y.t257[0],M=Y.t258[0],r=0,$=0,q=J.decode._make_decoder,i=J.decode._getbithuff,o=m[0].exifIFD.makerNote,P=o.t150?o.t150:o.t140,V=0,p=P[V++],l=P[V++],I=0,O,c,t,A,Q,H,j=0;
  6746. if(p==73||l==88)V+=2110;if(p==70)r=2;if(M==14)r+=3;var s=[[0,0],[0,0]],B=Y.isLE?J._binLE:J._binBE;for(var O=0;
  6747. O<2;O++)for(var D=0;D<2;D++){s[O][D]=B.readShort(P,V);V+=2}var ax=1<<M&32767,k=B.readShort(P,V);V+=2;
  6748. if(k>1)I=Math.floor(ax/(k-1));if(p==68&&l==32&&I>0)$=B.readShort(P,562);var v=[0,0],N=q(y[r]),f=[K,0,0,0];
  6749. for(j=c=0;c<d;c++){if($&&c==$){N=q(y[r+1])}for(t=0;t<x;t++){O=i(F,f,N[0],N);A=O&15;Q=O>>>4;H=(i(F,f,A-Q,0)<<1)+1<<Q>>>1;
  6750. if((H&1<<A-1)==0)H-=(1<<A)-(Q==0?1:0);if(t<2)v[t]=s[c&1][t]+=H;else v[t&1]+=H;var e=Math.min(Math.max(v[t&1],0),(1<<M)-1),_=(c*x+t)*M;
  6751. J.decode._putsF(b,_,e<<16-M)}}};J.decode._putsF=function(Y,m,F){F=F<<8-(m&7);var K=m>>>3;Y[K]|=F>>>16;
  6752. Y[K+1]|=F>>>8;Y[K+2]|=F};J.decode._getbithuff=function(Y,m,F,K){var S=0,b=J.decode._get_byte,w,y=m[0],x=m[1],d=m[2],M=m[3];
  6753. if(F==0||d<0)return 0;while(!M&&d<F&&(w=Y[y++])!=-1&&!(M=S&&w==255&&Y[y++])){x=(x<<8)+w;d+=8}w=x<<32-d>>>32-F;
  6754. if(K){d-=K[w+1]>>>8;w=K[w+1]&255}else d-=F;if(d<0)throw"e";m[0]=y;m[1]=x;m[2]=d;m[3]=M;return w};J.decode._make_decoder=function(Y){var m,F,K,b,w,y=[],x=17;
  6755. for(m=16;m!=0&&!Y[m];m--);y[0]=m;for(K=F=1;F<=m;F++)for(b=0;b<Y[F];b++,++x)for(w=0;w<1<<m-F;w++)if(K<=1<<m)y[K++]=F<<8|Y[x];
  6756. return y};J.decode._decodeNewJPEG=function(Y,m,F,K,S,b){K=Math.min(K,m.length-F);var w=Y.t347,y=w?w.length:0,x=new Uint8Array(y+K);
  6757. if(w){var d=216,M=217,r=0;for(var $=0;$<y-1;$++){if(w[$]==255&&w[$+1]==M)break;x[r++]=w[$]}var q=m[F],i=m[F+1];
  6758. if(q!=255||i!=d){x[r++]=q;x[r++]=i}for(var $=2;$<K;$++)x[r++]=m[F+$]}else for(var $=0;$<K;$++)x[$]=m[F+$];
  6759. if(Y.t262[0]==32803||Y.t259[0]==7&&Y.t262[0]==34892){var o=Y.t258[0],P=J.LosslessJpegDecode(x),V=P.length;
  6760. if(!1){}else if(o==16){if(Y.isLE)for(var $=0;$<V;$++){S[b+($<<1)]=P[$]&255;S[b+($<<1)+1]=P[$]>>>8}else for(var $=0;
  6761. $<V;$++){S[b+($<<1)]=P[$]>>>8;S[b+($<<1)+1]=P[$]&255}}else if(o==14||o==12){var p=16-o;for(var $=0;$<V;
  6762. $++)J.decode._putsF(S,$*o,P[$]<<p)}else if(o==8){for(var $=0;$<V;$++)S[b+$]=P[$]}else throw new Error("unsupported bit depth "+o)}else{var l=new J.JpegDecoder;
  6763. l.parse(x);var s=l.getData({width:l.width,height:l.height,forceRGB:!0,isSourcePDF:!1});for(var $=0;$<s.length;
  6764. $++)S[b+$]=s[$]}if(Y.t262[0]==6)Y.t262[0]=2};J.decode._decodeOldJPEGInit=function(Y,m,F,K){var S=216,b=217,w=219,y=196,x=221,d=192,M=218,r=0,$=0,q,i,o=!1,P,V,p,l=Y.t513,s=l?l[0]:0,B=Y.t514,O=B?B[0]:0,D=Y.t324||Y.t273||l,ax=Y.t530,I=0,k=0,c=Y.t277?Y.t277[0]:1,t=Y.t515;
  6765. if(D){$=D[0];o=D.length>1}if(!o){if(m[F]==255&&m[F+1]==S)return{jpegOffset:F};if(l!=null){if(m[F+s]==255&&m[F+s+1]==S)r=F+s;
  6766. else aw("JPEGInterchangeFormat does not point to SOI");if(B==null)aw("JPEGInterchangeFormatLength field is missing");
  6767. else if(s>=$||s+O<=$)aw("JPEGInterchangeFormatLength field value is invalid");if(r!=null)return{jpegOffset:r}}}if(ax!=null){I=ax[0];
  6768. k=ax[1]}if(l!=null)if(B!=null)if(O>=2&&s+O<=$){if(m[F+s+O-2]==255&&m[F+s+O-1]==S)q=new Uint8Array(O-2);
  6769. else q=new Uint8Array(O);for(P=0;P<q.length;P++)q[P]=m[F+s+P];aw("Incorrect JPEG interchange format: using JPEGInterchangeFormat offset to derive tables")}else aw("JPEGInterchangeFormat+JPEGInterchangeFormatLength > offset to first strip or tile");
  6770. if(q==null){var A=0,Q=[];Q[A++]=255;Q[A++]=S;var H=Y.t519;if(H==null)throw new Error("JPEGQTables tag is missing");
  6771. for(P=0;P<H.length;P++){Q[A++]=255;Q[A++]=w;Q[A++]=0;Q[A++]=67;Q[A++]=P;for(V=0;V<64;V++)Q[A++]=m[F+H[P]+V]}for(p=0;
  6772. p<2;p++){var j=Y[p==0?"t520":"t521"];if(j==null)throw new Error((p==0?"JPEGDCTables":"JPEGACTables")+" tag is missing");
  6773. for(P=0;P<j.length;P++){Q[A++]=255;Q[A++]=y;var v=19;for(V=0;V<16;V++)v+=m[F+j[P]+V];Q[A++]=v>>>8;Q[A++]=v&255;
  6774. Q[A++]=P|p<<4;for(V=0;V<16;V++)Q[A++]=m[F+j[P]+V];for(V=0;V<v;V++)Q[A++]=m[F+j[P]+16+V]}}Q[A++]=255;
  6775. Q[A++]=d;Q[A++]=0;Q[A++]=8+3*c;Q[A++]=8;Q[A++]=Y.height>>>8&255;Q[A++]=Y.height&255;Q[A++]=Y.width>>>8&255;
  6776. Q[A++]=Y.width&255;Q[A++]=c;if(c==1){Q[A++]=1;Q[A++]=17;Q[A++]=0}else for(P=0;P<3;P++){Q[A++]=P+1;Q[A++]=P!=0?17:(I&15)<<4|k&15;
  6777. Q[A++]=P}if(t!=null&&t[0]!=0){Q[A++]=255;Q[A++]=x;Q[A++]=0;Q[A++]=4;Q[A++]=t[0]>>>8&255;Q[A++]=t[0]&255}q=new Uint8Array(Q)}var N=-1;
  6778. P=0;while(P<q.length-1){if(q[P]==255&&q[P+1]==d){N=P;break}P++}if(N==-1){var f=new Uint8Array(q.length+10+3*c);
  6779. f.set(q);var e=q.length;N=q.length;q=f;q[e++]=255;q[e++]=d;q[e++]=0;q[e++]=8+3*c;q[e++]=8;q[e++]=Y.height>>>8&255;
  6780. q[e++]=Y.height&255;q[e++]=Y.width>>>8&255;q[e++]=Y.width&255;q[e++]=c;if(c==1){q[e++]=1;q[e++]=17;q[e++]=0}else for(P=0;
  6781. P<3;P++){q[e++]=P+1;q[e++]=P!=0?17:(I&15)<<4|k&15;q[e++]=P}}if(m[$]==255&&m[$+1]==M){var _=m[$+2]<<8|m[$+3];
  6782. i=new Uint8Array(_+2);i[0]=m[$];i[1]=m[$+1];i[2]=m[$+2];i[3]=m[$+3];for(P=0;P<_-2;P++)i[P+4]=m[$+P+4]}else{i=new Uint8Array(2+6+2*c);
  6783. var R=0;i[R++]=255;i[R++]=M;i[R++]=0;i[R++]=6+2*c;i[R++]=c;if(c==1){i[R++]=1;i[R++]=0}else for(P=0;P<3;
  6784. P++){i[R++]=P+1;i[R++]=P<<4|P}i[R++]=0;i[R++]=63;i[R++]=0}return{jpegOffset:F,tables:q,sosMarker:i,sofPosition:N}};
  6785. J.decode._decodeOldJPEG=function(Y,m,F,K,S,b){var w,y,x,d,M,r=J.decode._decodeOldJPEGInit(Y,m,F,K);if(r.jpegOffset!=null){y=F+K-r.jpegOffset;
  6786. d=new Uint8Array(y);for(w=0;w<y;w++)d[w]=m[r.jpegOffset+w]}else{x=r.tables.length;d=new Uint8Array(x+r.sosMarker.length+K+2);
  6787. d.set(r.tables);M=x;d[r.sofPosition+5]=Y.height>>>8&255;d[r.sofPosition+6]=Y.height&255;d[r.sofPosition+7]=Y.width>>>8&255;
  6788. d[r.sofPosition+8]=Y.width&255;if(m[F]!=255||m[F+1]!=SOS){d.set(r.sosMarker,M);M+=sosMarker.length}for(w=0;
  6789. w<K;w++)d[M++]=m[F+w];d[M++]=255;d[M++]=EOI}var $=new J.JpegDecoder;$.parse(d);var q=$.getData({width:$.width,height:$.height,forceRGB:!0,isSourcePDF:!1});
  6790. for(var w=0;w<q.length;w++)S[b+w]=q[w];if(Y.t262&&Y.t262[0]==6)Y.t262[0]=2};J.decode._decodePackBits=function(Y,m,F,K,S){var b=new Int8Array(Y.buffer),w=new Int8Array(K.buffer),y=m+F;
  6791. while(m<y){var x=b[m];m++;if(x>=0&&x<128)for(var d=0;d<x+1;d++){w[S]=b[m];S++;m++}if(x>=-127&&x<0){for(var d=0;
  6792. d<-x+1;d++){w[S]=b[m];S++}m++}}};J.decode._decodeThunder=function(Y,m,F,K,S){var b=[0,1,0,-1],w=[0,1,2,3,0,-3,-2,-1],y=m+F,x=S*2,d=0;
  6793. while(m<y){var M=Y[m],r=M>>>6,$=M&63;m++;if(r==3){d=$&15;K[x>>>1]|=d<<4*(1-x&1);x++}if(r==0)for(var q=0;
  6794. q<$;q++){K[x>>>1]|=d<<4*(1-x&1);x++}if(r==2)for(var q=0;q<2;q++){var i=$>>>3*(1-q)&7;if(i!=4){d+=w[i];
  6795. K[x>>>1]|=d<<4*(1-x&1);x++}}if(r==1)for(var q=0;q<3;q++){var i=$>>>2*(2-q)&3;if(i!=2){d+=b[i];K[x>>>1]|=d<<4*(1-x&1);
  6796. x++}}}};J.decode._dmap={"1":0,"011":1,"000011":2,"0000011":3,"010":-1,"000010":-2,"0000010":-3};J.decode._lens=function(){var Y=function(x,d,M,r){for(var $=0;
  6797. $<d.length;$++)x[d[$]]=M+$*r},m="00110101,000111,0111,1000,1011,1100,1110,1111,10011,10100,00111,01000,001000,000011,110100,110101,"+"101010,101011,0100111,0001100,0001000,0010111,0000011,0000100,0101000,0101011,0010011,0100100,0011000,00000010,00000011,00011010,"+"00011011,00010010,00010011,00010100,00010101,00010110,00010111,00101000,00101001,00101010,00101011,00101100,00101101,00000100,00000101,00001010,"+"00001011,01010010,01010011,01010100,01010101,00100100,00100101,01011000,01011001,01011010,01011011,01001010,01001011,00110010,00110011,00110100",F="0000110111,010,11,10,011,0011,0010,00011,000101,000100,0000100,0000101,0000111,00000100,00000111,000011000,"+"0000010111,0000011000,0000001000,00001100111,00001101000,00001101100,00000110111,00000101000,00000010111,00000011000,000011001010,000011001011,000011001100,000011001101,000001101000,000001101001,"+"000001101010,000001101011,000011010010,000011010011,000011010100,000011010101,000011010110,000011010111,000001101100,000001101101,000011011010,000011011011,000001010100,000001010101,000001010110,000001010111,"+"000001100100,000001100101,000001010010,000001010011,000000100100,000000110111,000000111000,000000100111,000000101000,000001011000,000001011001,000000101011,000000101100,000001011010,000001100110,000001100111",K="11011,10010,010111,0110111,00110110,00110111,01100100,01100101,01101000,01100111,011001100,011001101,011010010,011010011,011010100,011010101,011010110,"+"011010111,011011000,011011001,011011010,011011011,010011000,010011001,010011010,011000,010011011",S="0000001111,000011001000,000011001001,000001011011,000000110011,000000110100,000000110101,0000001101100,0000001101101,0000001001010,0000001001011,0000001001100,"+"0000001001101,0000001110010,0000001110011,0000001110100,0000001110101,0000001110110,0000001110111,0000001010010,0000001010011,0000001010100,0000001010101,0000001011010,"+"0000001011011,0000001100100,0000001100101",b="00000001000,00000001100,00000001101,000000010010,000000010011,000000010100,000000010101,000000010110,000000010111,000000011100,000000011101,000000011110,000000011111";
  6798. m=m.split(",");F=F.split(",");K=K.split(",");S=S.split(",");b=b.split(",");var w={},y={};Y(w,m,0,1);
  6799. Y(w,K,64,64);Y(w,b,1792,64);Y(y,F,0,1);Y(y,S,64,64);Y(y,b,1792,64);return[w,y]}();J.decode._decodeG4=function(Y,m,F,K,S,b,w){var y=J.decode,x=m<<3,d=0,M="",r=[],$=[],i=0,o=0,P=0,V=0,p=0,s=0,B=0,O="",D=0;
  6800. for(var q=0;q<b;q++)$.push(0);$=y._makeDiff($);var ax=Math.ceil(b/8)*8;while(x>>>3<m+F){V=y._findDiff($,i+(i==0?0:1),1-s),p=y._findDiff($,V,s);
  6801. var I=0;if(w==1)I=Y[x>>>3]>>>7-(x&7)&1;if(w==2)I=Y[x>>>3]>>>(x&7)&1;x++;M+=I;if(O=="H"){if(y._lens[s][M]!=null){var k=y._lens[s][M];
  6802. M="";d+=k;if(k<64){y._addNtimes(r,d,s);i+=d;s=1-s;d=0;D--;if(D==0)O=""}}}else{if(M=="0001"){M="";y._addNtimes(r,p-i,s);
  6803. i=p}if(M=="001"){M="";O="H";D=2}if(y._dmap[M]!=null){o=V+y._dmap[M];y._addNtimes(r,o-i,s);i=o;M="";s=1-s}}if(r.length==b&&O==""){y._writeBits(r,K,S*8+B*ax);
  6804. s=0;B++;i=0;$=y._makeDiff(r);r=[]}}};J.decode._findDiff=function(Y,m,F){for(var K=0;K<Y.length;K+=2)if(Y[K]>=m&&Y[K+1]==F)return Y[K]};
  6805. J.decode._makeDiff=function(Y){var m=[];if(Y[0]==1)m.push(0,1);for(var F=1;F<Y.length;F++)if(Y[F-1]!=Y[F])m.push(F,Y[F]);
  6806. m.push(Y.length,0,Y.length,1);return m};J.decode._decodeG3=function(Y,m,F,K,S,b,w,y){var x=J.decode,d=m<<3,M=0,r="",$=[],q=[],o=0,P=0,V=0,p=0,s=0,B=0,D="",ax=0,I=!0;
  6807. for(var i=0;i<b;i++)$.push(0);var O=-1,k=Math.ceil(b/8)*8;while(d>>>3<m+F){p=x._findDiff(q,o+(o==0?0:1),1-B),s=x._findDiff(q,p,B);
  6808. var c=0;if(w==1)c=Y[d>>>3]>>>7-(d&7)&1;if(w==2)c=Y[d>>>3]>>>(d&7)&1;d++;r+=c;if(I){if(x._lens[B][r]!=null){var t=x._lens[B][r];
  6809. r="";M+=t;if(t<64){x._addNtimes($,M,B);B=1-B;M=0}}}else{if(D=="H"){if(x._lens[B][r]!=null){var t=x._lens[B][r];
  6810. r="";M+=t;if(t<64){x._addNtimes($,M,B);o+=M;B=1-B;M=0;ax--;if(ax==0)D=""}}}else{if(r=="0001"){r="";x._addNtimes($,s-o,B);
  6811. o=s}if(r=="001"){r="";D="H";ax=2}if(x._dmap[r]!=null){P=p+x._dmap[r];x._addNtimes($,P-o,B);o=P;r="";
  6812. B=1-B}}}if(r.endsWith("000000000001")){if(O>=0)x._writeBits($,K,S*8+O*k);if(y){if(w==1)I=(Y[d>>>3]>>>7-(d&7)&1)==1;
  6813. if(w==2)I=(Y[d>>>3]>>>(d&7)&1)==1;d++}r="";B=0;O++;o=0;q=x._makeDiff($);$=[]}}if($.length==b)x._writeBits($,K,S*8+O*k)};
  6814. J.decode._addNtimes=function(Y,m,F){for(var K=0;K<m;K++)Y.push(F)};J.decode._writeBits=function(Y,m,F){for(var K=0;
  6815. K<Y.length;K++)m[F+K>>>3]|=Y[K]<<7-(F+K&7)};J.decode._decodeLZW=J.decode._decodeLZW=function(){var Y,F,K,S,b=0,w=0,y=0,x=0,d=function(){var p=Y>>>3,s=F[p]<<16|F[p+1]<<8|F[p+2],B=s>>>24-(Y&7)-w&(1<<w)-1;
  6816. Y+=w;return B},M=new Uint32Array(4096*4),r=0,$=function(p){if(p==r)return;r=p;y=1<<p;x=y+1;for(var s=0;
  6817. s<x+1;s++){M[4*s]=M[4*s+3]=s;M[4*s+1]=65535;M[4*s+2]=1}},q=function(p){w=p+1;b=x+1},i=function(p){var s=p<<2,B=M[s+2],O=S+B-1;
  6818. while(s!=65535){K[O--]=M[s];s=M[s+1]}S+=B},o=function(p,s){var B=b<<2,O=p<<2;M[B]=M[(s<<2)+3];M[B+1]=O;
  6819. M[B+2]=M[O+2]+1;M[B+3]=M[O+3];b++;if(b+1==1<<w&&w!=12)w++},P=function(p,s,B,O,ax,I){Y=s<<3;F=p;K=O;S=ax;
  6820. var c=s+B<<3,t=0,A=0;$(I);q(I);while(Y<c&&(t=d())!=x){if(t==y){q(I);t=d();if(t==x)break;i(t)}else{if(t<b){i(t);
  6821. o(A,t)}else{o(A,A);i(b-1)}}A=t}return S};return P}();J.tags={};J._types=function(){var Y=new Array(250);
  6822. Y.fill(0);Y=Y.concat([0,0,0,0,4,3,3,3,3,3,0,0,3,0,0,0,3,0,0,2,2,2,2,4,3,0,0,3,4,4,3,3,5,5,3,2,5,5,0,0,0,0,4,4,0,0,3,3,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,2,2,3,5,5,3,0,3,3,4,4,4,3,4,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
  6823. var m={33432:2,33434:5,33437:5,34665:4,34850:3,34853:4,34855:3,34864:3,34866:4,36864:7,36867:2,36868:2,37121:7,37377:10,37378:5,37380:10,37381:5,37383:3,37384:3,37385:3,37386:5,37510:7,37520:2,37521:2,37522:2,40960:7,40961:3,40962:4,40963:4,40965:4,41486:5,41487:5,41488:3,41985:3,41986:3,41987:3,41988:5,41989:3,41990:3,41993:3,41994:3,41995:7,41996:3,42032:2,42033:2,42034:5,42036:2,42037:2,59932:7};
  6824. return{basic:{main:Y,rest:m},gps:{main:[1,2,5,2,5,1,5,5,0,9],rest:{18:2,29:2}}}}();J._readIFD=function(Y,m,F,K,S,b){var w=Y.readUshort(m,F);
  6825. F+=2;var y={};if(b.debug)aw(" ".repeat(S),K.length-1,">>>----------------");for(var x=0;x<w;x++){var d=Y.readUshort(m,F);
  6826. F+=2;var M=Y.readUshort(m,F);F+=2;var r=Y.readUint(m,F);F+=4;var $=Y.readUint(m,F);F+=4;var q=[];if(M==1||M==7){q=new Uint8Array(m.buffer,r<5?F-4:$,r)}if(M==2){var i=r<5?F-4:$,o=m[i],P=Math.max(0,Math.min(r-1,m.length-i));
  6827. if(o<128||P==0)q.push(Y.readASCII(m,i,P));else q=new Uint8Array(m.buffer,i,P)}if(M==3){for(var V=0;V<r;
  6828. V++)q.push(Y.readUshort(m,(r<3?F-4:$)+2*V))}if(M==4||M==13){for(var V=0;V<r;V++)q.push(Y.readUint(m,(r<2?F-4:$)+4*V))}if(M==5||M==10){var p=M==5?Y.readUint:Y.readInt;
  6829. for(var V=0;V<r;V++)q.push([p(m,$+V*8),p(m,$+V*8+4)])}if(M==8){for(var V=0;V<r;V++)q.push(Y.readShort(m,(r<3?F-4:$)+2*V))}if(M==9){for(var V=0;
  6830. V<r;V++)q.push(Y.readInt(m,(r<2?F-4:$)+4*V))}if(M==11){for(var V=0;V<r;V++)q.push(Y.readFloat(m,$+V*4))}if(M==12){for(var V=0;
  6831. V<r;V++)q.push(Y.readDouble(m,$+V*8))}if(r!=0&&q.length==0){aw(d,"unknown TIFF tag type: ",M,"num:",r);
  6832. if(x==0)return;continue}if(b.debug)aw(" ".repeat(S),d,M,J.tags[d],q);y["t"+d]=q;if(d==330&&y.t272&&y.t272[0]=="DSLR-A100"){}else if(d==330||d==34665||d==34853||d==50740&&Y.readUshort(m,Y.readUint(q,0))<300||d==61440){var l=d==50740?[Y.readUint(q,0)]:q,s=[];
  6833. for(var V=0;V<l.length;V++)J._readIFD(Y,m,l[V],s,S+1,b);if(d==330)y.subIFD=s;if(d==34665)y.exifIFD=s[0];
  6834. if(d==34853)y.gpsiIFD=s[0];if(d==50740)y.dngPrvt=s[0];if(d==61440)y.fujiIFD=s[0]}if(d==37500&&b.parseMN){var B=q;
  6835. if(Y.readASCII(B,0,5)=="Nikon")y.makerNote=J.decode(B.slice(10).buffer)[0];else if(Y.readUshort(m,$)<300&&Y.readUshort(m,$+4)<=12){var O=[];
  6836. J._readIFD(Y,m,$,O,S+1,b);y.makerNote=O[0]}}}K.push(y);if(b.debug)aw(" ".repeat(S),"<<<---------------");
  6837. return F};J._writeIFD=function(Y,m,F,K,S){var b=Object.keys(S),w=b.length;if(S.exifIFD)w--;if(S.gpsiIFD)w--;
  6838. Y.writeUshort(F,K,w);K+=2;var y=K+w*12+4;for(var x=0;x<b.length;x++){var d=b[x];if(d=="t34665"||d=="t34853")continue;
  6839. if(d=="exifIFD")d="t34665";if(d=="gpsiIFD")d="t34853";var M=parseInt(d.slice(1)),r=m.main[M];if(r==null)r=m.rest[M];
  6840. if(r==null||r==0)throw new Error("unknown type of tag: "+M);var $=S[d];if(M==34665){var q=J._writeIFD(Y,m,F,y,S.exifIFD);
  6841. $=[y];y=q[1]}if(M==34853){var q=J._writeIFD(Y,J._types.gps,F,y,S.gpsiIFD);$=[y];y=q[1]}if(r==2)$=$[0]+"\0";
  6842. var i=$.length;Y.writeUshort(F,K,M);K+=2;Y.writeUshort(F,K,r);K+=2;Y.writeUint(F,K,i);K+=4;var o=[-1,1,1,2,4,8,0,1,0,4,8,0,8][r]*i,P=K;
  6843. if(o>4){Y.writeUint(F,K,y);P=y}if(r==1||r==7){for(var V=0;V<i;V++)F[P+V]=$[V]}else if(r==2){Y.writeASCII(F,P,$)}else if(r==3){for(var V=0;
  6844. V<i;V++)Y.writeUshort(F,P+2*V,$[V])}else if(r==4){for(var V=0;V<i;V++)Y.writeUint(F,P+4*V,$[V])}else if(r==5||r==10){var p=r==5?Y.writeUint:Y.writeInt;
  6845. for(var V=0;V<i;V++){var l=$[V],s=l[0],B=l[1];if(s==null)throw"e";p(F,P+8*V,s);p(F,P+8*V+4,B)}}else if(r==9){for(var V=0;
  6846. V<i;V++)Y.writeInt(F,P+4*V,$[V])}else if(r==12){for(var V=0;V<i;V++)Y.writeDouble(F,P+8*V,$[V])}else throw r;
  6847. if(o>4){o+=o&1;y+=o}K+=4}return[K,y]};J.toRGBA8=function(Y,m){var F=Y.width,K=Y.height,b=F*K,w=b*4,y=Y.data,x=new Uint8Array(b*4),d=Y.t262?Y.t262[0]:2,M=Y.t258?Math.min(32,Y.t258[0]):1;
  6848. if(Y.t262==null&&M==1)d=0;if(!1){}else if(d==0){var r=Math.ceil(M*F/8);for(var $=0;$<K;$++){var q=$*r,i=$*F;
  6849. if(M==1)for(var o=0;o<F;o++){var P=i+o<<2,V=y[q+(o>>3)]>>7-(o&7)&1;x[P]=x[P+1]=x[P+2]=(1-V)*255;x[P+3]=255}if(M==4)for(var o=0;
  6850. o<F;o++){var P=i+o<<2,V=y[q+(o>>1)]>>4-4*(o&1)&15;x[P]=x[P+1]=x[P+2]=(15-V)*17;x[P+3]=255}if(M==8)for(var o=0;
  6851. o<F;o++){var P=i+o<<2,V=y[q+o];x[P]=x[P+1]=x[P+2]=255-V;x[P+3]=255}}}else if(d==1){var p=Y.t258?Y.t258.length:1,r=Math.ceil(p*M*F/8);
  6852. if(m==null)m=1/256;for(var $=0;$<K;$++){var q=$*r,i=$*F;if(M==1)for(var o=0;o<F;o++){var P=i+o<<2,V=y[q+(o>>3)]>>7-(o&7)&1;
  6853. x[P]=x[P+1]=x[P+2]=V*255;x[P+3]=255}if(M==2)for(var o=0;o<F;o++){var P=i+o<<2,V=y[q+(o>>2)]>>6-2*(o&3)&3;
  6854. x[P]=x[P+1]=x[P+2]=V*85;x[P+3]=255}if(M==8)for(var o=0;o<F;o++){var P=i+o<<2,V=y[q+o*p];x[P]=x[P+1]=x[P+2]=V;
  6855. x[P+3]=255}if(M==16)for(var o=0;o<F;o++){var P=i+o<<2,s=q+2*o,V=y[s+1]<<8|y[s];x[P]=x[P+1]=x[P+2]=Math.min(255,~~(V*m));
  6856. x[P+3]=255}}}else if(d==2){var p=Y.t258?Y.t258.length:3;if(M==8){if(p==4)for(var o=0;o<w;o++)x[o]=y[o];
  6857. if(p==3)for(var o=0;o<b;o++){var P=o<<2,O=o*3;x[P]=y[O];x[P+1]=y[O+1];x[P+2]=y[O+2];x[P+3]=255}}else{if(p==4)for(var o=0;
  6858. o<b;o++){var P=o<<2,O=o*8+1;x[P]=y[O];x[P+1]=y[O+2];x[P+2]=y[O+4];x[P+3]=y[O+6]}if(p==3)for(var o=0;
  6859. o<b;o++){var P=o<<2,O=o*6+1;x[P]=y[O];x[P+1]=y[O+2];x[P+2]=y[O+4];x[P+3]=255}}}else if(d==3){var D=Y.t320,p=Y.t258?Y.t258.length:1;
  6860. for(var o=0;o<b;o++){var P=o<<2,ax=y[o*p];x[P]=D[ax]>>8;x[P+1]=D[256+ax]>>8;x[P+2]=D[512+ax]>>8;x[P+3]=255}}else if(d==5){var p=Y.t258?Y.t258.length:4,I=p>4?1:0;
  6861. for(var o=0;o<b;o++){var P=o<<2,k=o*p,c=255-y[k],t=255-y[k+1],A=255-y[k+2],Q=(255-y[k+3])*(1/255);x[P]=~~(c*Q+.5);
  6862. x[P+1]=~~(t*Q+.5);x[P+2]=~~(A*Q+.5);x[P+3]=255*(1-I)+y[k+4]*I}}else if(d==6&&Y.t278){var H=Y.t278[0];
  6863. for(var $=0;$<K;$+=H){var o=$*F,j=H*F;for(var N=0;N<j;N++){var P=4*(o+N),k=3*o+4*(N>>>1),A=y[k+(N&1)],e=y[k+2]-128,_=y[k+3]-128,R=A+((_>>2)+(_>>3)+(_>>5)),g=A-((e>>2)+(e>>4)+(e>>5))-((_>>1)+(_>>3)+(_>>4)+(_>>5)),W=A+(e+(e>>1)+(e>>2)+(e>>6));
  6864. x[P]=Math.max(0,Math.min(255,R));x[P+1]=Math.max(0,Math.min(255,g));x[P+2]=Math.max(0,Math.min(255,W));
  6865. x[P+3]=255}}}else aw("Unknown Photometric interpretation: "+d);return x};J.replaceIMG=function(Y){if(Y==null)Y=document.getElementsByTagName("img");
  6866. var m=["tif","tiff","dng","cr2","nef"];for(var F=0;F<Y.length;F++){var K=Y[F],S=K.getAttribute("src");
  6867. if(S==null)continue;var w=S.split(".").pop().toLowerCase();if(m.indexOf(w)==-1)continue;var y=new XMLHttpRequest;
  6868. J._xhrs.push(y);J._imgs.push(K);y.open("GET",S);y.responseType="arraybuffer";y.onload=J._imgLoaded;y.send()}};
  6869. J._xhrs=[];J._imgs=[];J._imgLoaded=function(Y){var F=Y.target.response,K=J.decode(F),S=K,b=0,w=S[0];
  6870. if(K[0].subIFD)S=S.concat(K[0].subIFD);for(var y=0;y<S.length;y++){var x=S[y];if(x.t258==null||x.t258.length<3)continue;
  6871. var d=x.t256*x.t257;if(d>b){b=d;w=x}}J.decodeImage(F,w,K);var M=J.toRGBA8(w),r=w.width,$=w.height,q=J._xhrs.indexOf(Y.target),x=J._imgs[q];
  6872. J._xhrs.splice(q,1);J._imgs.splice(q,1);var i=document.createElement("canvas");i.width=r;i.height=$;
  6873. var o=i.getContext("2d"),P=new ImageData(new Uint8ClampedArray(M.buffer),r,$);o.putImageData(P,0,0);
  6874. x.setAttribute("src",i.toDataURL())};J._binBE={nextZero:function(Y,m){while(Y[m]!=0)m++;return m},readUshort:function(Y,m){return Y[m]<<8|Y[m+1]},readShort:function(Y,m){var F=J._binBE.ui8;
  6875. F[0]=Y[m+1];F[1]=Y[m+0];return J._binBE.i16[0]},readInt:function(Y,m){var F=J._binBE.ui8;F[0]=Y[m+3];
  6876. F[1]=Y[m+2];F[2]=Y[m+1];F[3]=Y[m+0];return J._binBE.i32[0]},readUint:function(Y,m){var F=J._binBE.ui8;
  6877. F[0]=Y[m+3];F[1]=Y[m+2];F[2]=Y[m+1];F[3]=Y[m+0];return J._binBE.ui32[0]},readASCII:function(Y,m,F){var K="";
  6878. for(var S=0;S<F;S++)K+=String.fromCharCode(Y[m+S]);return K},readFloat:function(Y,m){var F=J._binBE.ui8;
  6879. for(var K=0;K<4;K++)F[K]=Y[m+3-K];return J._binBE.fl32[0]},readDouble:function(Y,m){var F=J._binBE.ui8;
  6880. for(var K=0;K<8;K++)F[K]=Y[m+7-K];return J._binBE.fl64[0]},writeUshort:function(Y,m,F){Y[m]=F>>8&255;
  6881. Y[m+1]=F&255},writeInt:function(Y,m,F){var K=J._binBE.ui8;J._binBE.i32[0]=F;Y[m+3]=K[0];Y[m+2]=K[1];
  6882. Y[m+1]=K[2];Y[m+0]=K[3]},writeUint:function(Y,m,F){Y[m]=F>>24&255;Y[m+1]=F>>16&255;Y[m+2]=F>>8&255;Y[m+3]=F>>0&255},writeASCII:function(Y,m,F){for(var K=0;
  6883. K<F.length;K++)Y[m+K]=F.charCodeAt(K)},writeDouble:function(Y,m,F){J._binBE.fl64[0]=F;for(var K=0;K<8;
  6884. K++)Y[m+K]=J._binBE.ui8[7-K]}};J._binBE.ui8=new Uint8Array(8);J._binBE.i16=new Int16Array(J._binBE.ui8.buffer);
  6885. J._binBE.i32=new Int32Array(J._binBE.ui8.buffer);J._binBE.ui32=new Uint32Array(J._binBE.ui8.buffer);
  6886. J._binBE.fl32=new Float32Array(J._binBE.ui8.buffer);J._binBE.fl64=new Float64Array(J._binBE.ui8.buffer);
  6887. J._binLE={nextZero:J._binBE.nextZero,readUshort:function(Y,m){return Y[m+1]<<8|Y[m]},readShort:function(Y,m){var F=J._binBE.ui8;
  6888. F[0]=Y[m+0];F[1]=Y[m+1];return J._binBE.i16[0]},readInt:function(Y,m){var F=J._binBE.ui8;F[0]=Y[m+0];
  6889. F[1]=Y[m+1];F[2]=Y[m+2];F[3]=Y[m+3];return J._binBE.i32[0]},readUint:function(Y,m){var F=J._binBE.ui8;
  6890. F[0]=Y[m+0];F[1]=Y[m+1];F[2]=Y[m+2];F[3]=Y[m+3];return J._binBE.ui32[0]},readASCII:J._binBE.readASCII,readFloat:function(Y,m){var F=J._binBE.ui8;
  6891. for(var K=0;K<4;K++)F[K]=Y[m+K];return J._binBE.fl32[0]},readDouble:function(Y,m){var F=J._binBE.ui8;
  6892. for(var K=0;K<8;K++)F[K]=Y[m+K];return J._binBE.fl64[0]},writeUshort:function(Y,m,F){Y[m]=F&255;Y[m+1]=F>>8&255},writeInt:function(Y,m,F){var K=J._binBE.ui8;
  6893. J._binBE.i32[0]=F;Y[m+0]=K[0];Y[m+1]=K[1];Y[m+2]=K[2];Y[m+3]=K[3]},writeUint:function(Y,m,F){Y[m]=F>>>0&255;
  6894. Y[m+1]=F>>>8&255;Y[m+2]=F>>>16&255;Y[m+3]=F>>>24&255},writeASCII:J._binBE.writeASCII};J._copyTile=function(Y,m,F,K,S,b,w,y){var x=Math.min(m,S-w),d=Math.min(F,b-y);
  6895. for(var M=0;M<d;M++){var r=(y+M)*S+w,$=M*m;for(var q=0;q<x;q++)K[r+q]=Y[$+q]}};J.LosslessJpegDecode=function(){var Y,m,F,K,S,b,w,y,d,M;
  6896. function r(){return Y[m++]}function q(){return Y[m++]<<8|Y[m++]}function V(){var f=r(),e=[0,0,0,255],_=[],R=8;
  6897. for(var g=0;g<16;g++)_[g]=r();for(var g=0;g<16;g++){for(var W=0;W<_[g];W++){var E=l(e,0,g+1,1);e[E+3]=r()}}var a=new Uint8Array(1<<R);
  6898. d[f]=[new Uint8Array(e),a];for(var g=0;g<1<<R;g++){var ac=R,T=g,ay=0,z=0;while(e[ay+3]==255&&ac!=0){z=T>>--ac&1;
  6899. ay=e[ay+z]}a[g]=ay}}function l(f,e,_,R){if(f[e+3]!=255)return 0;if(_==0)return e;for(var g=0;g<2;g++){if(f[e+g]==0){f[e+g]=f.length;
  6900. f.push(0,0,R,255)}var W=l(f,f[e+g],_-1,R+1);if(W!=0)return W}return 0}function s(f){var e=f.c,_=f.d;
  6901. while(e<25){var R=f.data[f.a++];if(!f.b)f.a+=R+1>>>8;_=_<<8|R;e+=8}f.c=e;f.d=_}function O(f,e){if(e.c<f)s(e);
  6902. return e.d>>(e.c-=f)&65535>>16-f}function ax(f,e){var _=f[0],R=0,g=255,W=0;if(e.c<16)s(e);var E=e.d>>e.c-8&255;
  6903. R=f[1][E];g=_[R+3];e.c-=_[R+2];while(g==255){W=e.d>>--e.c&1;R=_[R+W];g=_[R+3]}return g}function k(f,e){if(f<32768>>16-e)f+=-(1<<e)+1;
  6904. return f}function c(f,e){var _=ax(f,e);if(_==0)return 0;var R=O(_,e);return k(R,_)}function A(f,e,_){var R=b,g=K,W=w,E=M;
  6905. for(var a=0;a<R;a++){f[a]=c(E[a],_)+(1<<F-1)}for(var ac=R;ac<e;ac+=R){for(var a=0;a<R;a++)f[ac+a]=c(E[a],_)+f[ac+a-R]}var T=e;
  6906. for(var ay=1;ay<g;ay++){for(var a=0;a<R;a++){f[T+a]=c(E[a],_)+f[T+a-e]}for(var ac=R;ac<e;ac+=R){for(var a=0;
  6907. a<R;a++){var z=T+ac+a,L=f[z-R];if(W==1){}else if(W==6)L=f[z-e]+(L-f[z-R-e]>>>1);else throw W;f[z]=L+c(E[a],_)}}T+=e}}function Q(f,e){var _=O(f,e);
  6908. return f==16?-32768:k(_,f)}function v(f,e,_){var R=Y.length-m;for(var g=0;g<R;g+=4){var W=Y[m+g];Y[m+g]=Y[m+g+3];
  6909. Y[m+g+3]=W;var W=Y[m+g+1];Y[m+g+1]=Y[m+g+2];Y[m+g+2]=W}var E=M[0];for(var a=0;a<K;a++){var ac=32768,T=32768;
  6910. for(var ay=0;ay<e;ay+=2){var z=ax(E,_),L=ax(E,_);if(z!=0)ac+=Q(z,_);if(L!=0)T+=Q(L,_);f[a*e+ay]=ac&65535;
  6911. f[a*e+ay+1]=T&65535}}}function N(f){Y=f;m=0;d=[],M=[];if(q()!=65496)throw"e";while(!0){var e=q();if(e==65535){m--;
  6912. continue}var _=q();if(e==65475){F=r();K=q();S=q();b=r();y=[];for(var R=0;R<b;R++){var g=r(),W=r();if(W!=17)throw"e";
  6913. m++;y[g]=R}}else if(e==65476){var E=m+_-2;while(m<E)V()}else if(e==65498){m++;for(var R=0;R<b;R++){var a=r();
  6914. M[y[a]]=d[r()>>>4]}w=r();m+=2;break}else{m+=_-2}}var ac=F>8?Uint16Array:Uint8Array,T=S*b,ay=new ac(K*T),z={c:0,d:0,b:w==8,a:m,data:Y};
  6915. if(z.b)v(ay,T,z);else A(ay,T,z);return ay}return N}()}(J,aS))}())// (c) Dean McNamee <dean@gmail.com>, 2013.
  6916. //
  6917. // https://github.com/deanm/omggif
  6918. //
  6919. // Permission is hereby granted, free of charge, to any person obtaining a copy
  6920. // of this software and associated documentation files (the "Software"), to
  6921. // deal in the Software without restriction, including without limitation the
  6922. // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  6923. // sell copies of the Software, and to permit persons to whom the Software is
  6924. // furnished to do so, subject to the following conditions:
  6925. //
  6926. // The above copyright notice and this permission notice shall be included in
  6927. // all copies or substantial portions of the Software.
  6928. //
  6929. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  6930. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  6931. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  6932. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  6933. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  6934. // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  6935. // IN THE SOFTWARE.
  6936. //
  6937. // omggif is a JavaScript implementation of a GIF 89a encoder and decoder,
  6938. // including animation and compression. It does not rely on any specific
  6939. // underlying system, so should run in the browser, Node, or Plask.
  6940. "use strict";
  6941. function GifWriter(buf, width, height, gopts) {
  6942. var p = 0;
  6943. var gopts = gopts === undefined ? { } : gopts;
  6944. var loop_count = gopts.loop === undefined ? null : gopts.loop;
  6945. var global_palette = gopts.palette === undefined ? null : gopts.palette;
  6946. if (width <= 0 || height <= 0 || width > 65535 || height > 65535)
  6947. throw new Error("Width/Height invalid.");
  6948. function check_palette_and_num_colors(palette) {
  6949. var num_colors = palette.length;
  6950. if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors-1)) {
  6951. throw new Error(
  6952. "Invalid code/color length, must be power of 2 and 2 .. 256.");
  6953. }
  6954. return num_colors;
  6955. }
  6956. // - Header.
  6957. buf[p++] = 0x47; buf[p++] = 0x49; buf[p++] = 0x46; // GIF
  6958. buf[p++] = 0x38; buf[p++] = 0x39; buf[p++] = 0x61; // 89a
  6959. // Handling of Global Color Table (palette) and background index.
  6960. var gp_num_colors_pow2 = 0;
  6961. var background = 0;
  6962. if (global_palette !== null) {
  6963. var gp_num_colors = check_palette_and_num_colors(global_palette);
  6964. while (gp_num_colors >>= 1) ++gp_num_colors_pow2;
  6965. gp_num_colors = 1 << gp_num_colors_pow2;
  6966. --gp_num_colors_pow2;
  6967. if (gopts.background !== undefined) {
  6968. background = gopts.background;
  6969. if (background >= gp_num_colors)
  6970. throw new Error("Background index out of range.");
  6971. // The GIF spec states that a background index of 0 should be ignored, so
  6972. // this is probably a mistake and you really want to set it to another
  6973. // slot in the palette. But actually in the end most browsers, etc end
  6974. // up ignoring this almost completely (including for dispose background).
  6975. if (background === 0)
  6976. throw new Error("Background index explicitly passed as 0.");
  6977. }
  6978. }
  6979. // - Logical Screen Descriptor.
  6980. // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.
  6981. buf[p++] = width & 0xff; buf[p++] = width >> 8 & 0xff;
  6982. buf[p++] = height & 0xff; buf[p++] = height >> 8 & 0xff;
  6983. // NOTE: Indicates 0-bpp original color resolution (unused?).
  6984. buf[p++] = (global_palette !== null ? 0x80 : 0) | // Global Color Table Flag.
  6985. gp_num_colors_pow2; // NOTE: No sort flag (unused?).
  6986. buf[p++] = background; // Background Color Index.
  6987. buf[p++] = 0; // Pixel aspect ratio (unused?).
  6988. // - Global Color Table
  6989. if (global_palette !== null) {
  6990. for (var i = 0, il = global_palette.length; i < il; ++i) {
  6991. var rgb = global_palette[i];
  6992. buf[p++] = rgb >> 16 & 0xff;
  6993. buf[p++] = rgb >> 8 & 0xff;
  6994. buf[p++] = rgb & 0xff;
  6995. }
  6996. }
  6997. if (loop_count !== null) { // Netscape block for looping.
  6998. if (loop_count < 0 || loop_count > 65535)
  6999. throw new Error("Loop count invalid.");
  7000. // Extension code, label, and length.
  7001. buf[p++] = 0x21; buf[p++] = 0xff; buf[p++] = 0x0b;
  7002. // NETSCAPE2.0
  7003. buf[p++] = 0x4e; buf[p++] = 0x45; buf[p++] = 0x54; buf[p++] = 0x53;
  7004. buf[p++] = 0x43; buf[p++] = 0x41; buf[p++] = 0x50; buf[p++] = 0x45;
  7005. buf[p++] = 0x32; buf[p++] = 0x2e; buf[p++] = 0x30;
  7006. // Sub-block
  7007. buf[p++] = 0x03; buf[p++] = 0x01;
  7008. buf[p++] = loop_count & 0xff; buf[p++] = loop_count >> 8 & 0xff;
  7009. buf[p++] = 0x00; // Terminator.
  7010. }
  7011. var ended = false;
  7012. this.addFrame = function(x, y, w, h, indexed_pixels, opts) {
  7013. if (ended === true) { --p; ended = false; } // Un-end.
  7014. opts = opts === undefined ? { } : opts;
  7015. // TODO(deanm): Bounds check x, y. Do they need to be within the virtual
  7016. // canvas width/height, I imagine?
  7017. if (x < 0 || y < 0 || x > 65535 || y > 65535)
  7018. throw new Error("x/y invalid.");
  7019. if (w <= 0 || h <= 0 || w > 65535 || h > 65535)
  7020. throw new Error("Width/Height invalid.");
  7021. if (indexed_pixels.length < w * h)
  7022. throw new Error("Not enough pixels for the frame size.");
  7023. var using_local_palette = true;
  7024. var palette = opts.palette;
  7025. if (palette === undefined || palette === null) {
  7026. using_local_palette = false;
  7027. palette = global_palette;
  7028. }
  7029. if (palette === undefined || palette === null)
  7030. throw new Error("Must supply either a local or global palette.");
  7031. var num_colors = check_palette_and_num_colors(palette);
  7032. // Compute the min_code_size (power of 2), destroying num_colors.
  7033. var min_code_size = 0;
  7034. while (num_colors >>= 1) ++min_code_size;
  7035. num_colors = 1 << min_code_size; // Now we can easily get it back.
  7036. var delay = opts.delay === undefined ? 0 : opts.delay;
  7037. // From the spec:
  7038. // 0 - No disposal specified. The decoder is
  7039. // not required to take any action.
  7040. // 1 - Do not dispose. The graphic is to be left
  7041. // in place.
  7042. // 2 - Restore to background color. The area used by the
  7043. // graphic must be restored to the background color.
  7044. // 3 - Restore to previous. The decoder is required to
  7045. // restore the area overwritten by the graphic with
  7046. // what was there prior to rendering the graphic.
  7047. // 4-7 - To be defined.
  7048. // NOTE(deanm): Dispose background doesn't really work, apparently most
  7049. // browsers ignore the background palette index and clear to transparency.
  7050. var disposal = opts.disposal === undefined ? 0 : opts.disposal;
  7051. if (disposal < 0 || disposal > 3) // 4-7 is reserved.
  7052. throw new Error("Disposal out of range.");
  7053. var use_transparency = false;
  7054. var transparent_index = 0;
  7055. if (opts.transparent !== undefined && opts.transparent !== null) {
  7056. use_transparency = true;
  7057. transparent_index = opts.transparent;
  7058. if (transparent_index < 0 || transparent_index >= num_colors)
  7059. throw new Error("Transparent color index.");
  7060. }
  7061. if (disposal !== 0 || use_transparency || delay !== 0) {
  7062. // - Graphics Control Extension
  7063. buf[p++] = 0x21; buf[p++] = 0xf9; // Extension / Label.
  7064. buf[p++] = 4; // Byte size.
  7065. buf[p++] = disposal << 2 | (use_transparency === true ? 1 : 0);
  7066. buf[p++] = delay & 0xff; buf[p++] = delay >> 8 & 0xff;
  7067. buf[p++] = transparent_index; // Transparent color index.
  7068. buf[p++] = 0; // Block Terminator.
  7069. }
  7070. // - Image Descriptor
  7071. buf[p++] = 0x2c; // Image Seperator.
  7072. buf[p++] = x & 0xff; buf[p++] = x >> 8 & 0xff; // Left.
  7073. buf[p++] = y & 0xff; buf[p++] = y >> 8 & 0xff; // Top.
  7074. buf[p++] = w & 0xff; buf[p++] = w >> 8 & 0xff;
  7075. buf[p++] = h & 0xff; buf[p++] = h >> 8 & 0xff;
  7076. // NOTE: No sort flag (unused?).
  7077. // TODO(deanm): Support interlace.
  7078. buf[p++] = using_local_palette === true ? (0x80 | (min_code_size-1)) : 0;
  7079. // - Local Color Table
  7080. if (using_local_palette === true) {
  7081. for (var i = 0, il = palette.length; i < il; ++i) {
  7082. var rgb = palette[i];
  7083. buf[p++] = rgb >> 16 & 0xff;
  7084. buf[p++] = rgb >> 8 & 0xff;
  7085. buf[p++] = rgb & 0xff;
  7086. }
  7087. }
  7088. p = GifWriterOutputLZWCodeStream(
  7089. buf, p, min_code_size < 2 ? 2 : min_code_size, indexed_pixels);
  7090. return p;
  7091. };
  7092. this.end = function() {
  7093. if (ended === false) {
  7094. buf[p++] = 0x3b; // Trailer.
  7095. ended = true;
  7096. }
  7097. return p;
  7098. };
  7099. this.getOutputBuffer = function() { return buf; };
  7100. this.setOutputBuffer = function(v) { buf = v; };
  7101. this.getOutputBufferPosition = function() { return p; };
  7102. this.setOutputBufferPosition = function(v) { p = v; };
  7103. }
  7104. // Main compression routine, palette indexes -> LZW code stream.
  7105. // |index_stream| must have at least one entry.
  7106. function GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {
  7107. buf[p++] = min_code_size;
  7108. var cur_subblock = p++; // Pointing at the length field.
  7109. var clear_code = 1 << min_code_size;
  7110. var code_mask = clear_code - 1;
  7111. var eoi_code = clear_code + 1;
  7112. var next_code = eoi_code + 1;
  7113. var cur_code_size = min_code_size + 1; // Number of bits per code.
  7114. var cur_shift = 0;
  7115. // We have at most 12-bit codes, so we should have to hold a max of 19
  7116. // bits here (and then we would write out).
  7117. var cur = 0;
  7118. function emit_bytes_to_buffer(bit_block_size) {
  7119. while (cur_shift >= bit_block_size) {
  7120. buf[p++] = cur & 0xff;
  7121. cur >>= 8; cur_shift -= 8;
  7122. if (p === cur_subblock + 256) { // Finished a subblock.
  7123. buf[cur_subblock] = 255;
  7124. cur_subblock = p++;
  7125. }
  7126. }
  7127. }
  7128. function emit_code(c) {
  7129. cur |= c << cur_shift;
  7130. cur_shift += cur_code_size;
  7131. emit_bytes_to_buffer(8);
  7132. }
  7133. // I am not an expert on the topic, and I don't want to write a thesis.
  7134. // However, it is good to outline here the basic algorithm and the few data
  7135. // structures and optimizations here that make this implementation fast.
  7136. // The basic idea behind LZW is to build a table of previously seen runs
  7137. // addressed by a short id (herein called output code). All data is
  7138. // referenced by a code, which represents one or more values from the
  7139. // original input stream. All input bytes can be referenced as the same
  7140. // value as an output code. So if you didn't want any compression, you
  7141. // could more or less just output the original bytes as codes (there are
  7142. // some details to this, but it is the idea). In order to achieve
  7143. // compression, values greater then the input range (codes can be up to
  7144. // 12-bit while input only 8-bit) represent a sequence of previously seen
  7145. // inputs. The decompressor is able to build the same mapping while
  7146. // decoding, so there is always a shared common knowledge between the
  7147. // encoding and decoder, which is also important for "timing" aspects like
  7148. // how to handle variable bit width code encoding.
  7149. //
  7150. // One obvious but very important consequence of the table system is there
  7151. // is always a unique id (at most 12-bits) to map the runs. 'A' might be
  7152. // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc. This relationship
  7153. // can be used for an effecient lookup strategy for the code mapping. We
  7154. // need to know if a run has been seen before, and be able to map that run
  7155. // to the output code. Since we start with known unique ids (input bytes),
  7156. // and then from those build more unique ids (table entries), we can
  7157. // continue this chain (almost like a linked list) to always have small
  7158. // integer values that represent the current byte chains in the encoder.
  7159. // This means instead of tracking the input bytes (AAAABCD) to know our
  7160. // current state, we can track the table entry for AAAABC (it is guaranteed
  7161. // to exist by the nature of the algorithm) and the next character D.
  7162. // Therefor the tuple of (table_entry, byte) is guaranteed to also be
  7163. // unique. This allows us to create a simple lookup key for mapping input
  7164. // sequences to codes (table indices) without having to store or search
  7165. // any of the code sequences. So if 'AAAA' has a table entry of 12, the
  7166. // tuple of ('AAAA', K) for any input byte K will be unique, and can be our
  7167. // key. This leads to a integer value at most 20-bits, which can always
  7168. // fit in an SMI value and be used as a fast sparse array / object key.
  7169. // Output code for the current contents of the index buffer.
  7170. var ib_code = index_stream[0] & code_mask; // Load first input index.
  7171. var code_table = { }; // Key'd on our 20-bit "tuple".
  7172. emit_code(clear_code); // Spec says first code should be a clear code.
  7173. // First index already loaded, process the rest of the stream.
  7174. for (var i = 1, il = index_stream.length; i < il; ++i) {
  7175. var k = index_stream[i] & code_mask;
  7176. var cur_key = ib_code << 8 | k; // (prev, k) unique tuple.
  7177. var cur_code = code_table[cur_key]; // buffer + k.
  7178. // Check if we have to create a new code table entry.
  7179. if (cur_code === undefined) { // We don't have buffer + k.
  7180. // Emit index buffer (without k).
  7181. // This is an inline version of emit_code, because this is the core
  7182. // writing routine of the compressor (and V8 cannot inline emit_code
  7183. // because it is a closure here in a different context). Additionally
  7184. // we can call emit_byte_to_buffer less often, because we can have
  7185. // 30-bits (from our 31-bit signed SMI), and we know our codes will only
  7186. // be 12-bits, so can safely have 18-bits there without overflow.
  7187. // emit_code(ib_code);
  7188. cur |= ib_code << cur_shift;
  7189. cur_shift += cur_code_size;
  7190. while (cur_shift >= 8) {
  7191. buf[p++] = cur & 0xff;
  7192. cur >>= 8; cur_shift -= 8;
  7193. if (p === cur_subblock + 256) { // Finished a subblock.
  7194. buf[cur_subblock] = 255;
  7195. cur_subblock = p++;
  7196. }
  7197. }
  7198. if (next_code === 4096) { // Table full, need a clear.
  7199. emit_code(clear_code);
  7200. next_code = eoi_code + 1;
  7201. cur_code_size = min_code_size + 1;
  7202. code_table = { };
  7203. } else { // Table not full, insert a new entry.
  7204. // Increase our variable bit code sizes if necessary. This is a bit
  7205. // tricky as it is based on "timing" between the encoding and
  7206. // decoder. From the encoders perspective this should happen after
  7207. // we've already emitted the index buffer and are about to create the
  7208. // first table entry that would overflow our current code bit size.
  7209. if (next_code >= (1 << cur_code_size)) ++cur_code_size;
  7210. code_table[cur_key] = next_code++; // Insert into code table.
  7211. }
  7212. ib_code = k; // Index buffer to single input k.
  7213. } else {
  7214. ib_code = cur_code; // Index buffer to sequence in code table.
  7215. }
  7216. }
  7217. emit_code(ib_code); // There will still be something in the index buffer.
  7218. emit_code(eoi_code); // End Of Information.
  7219. // Flush / finalize the sub-blocks stream to the buffer.
  7220. emit_bytes_to_buffer(1);
  7221. // Finish the sub-blocks, writing out any unfinished lengths and
  7222. // terminating with a sub-block of length 0. If we have already started
  7223. // but not yet used a sub-block it can just become the terminator.
  7224. if (cur_subblock + 1 === p) { // Started but unused.
  7225. buf[cur_subblock] = 0;
  7226. } else { // Started and used, write length and additional terminator block.
  7227. buf[cur_subblock] = p - cur_subblock - 1;
  7228. buf[p++] = 0;
  7229. }
  7230. return p;
  7231. };
  7232. var UGIF=function(){var a=function(){var j,F,c,b,H=0,k=0,Z=0,P=0,l=function(){var R=j>>>3,i=F[R+2]<<16|F[R+1]<<8|F[R],M=i>>>(j&7)&(1<<k)-1;
  7233. j+=k;return M},e=new Uint32Array(4096*4),V=0,W=function(R){if(R==V)return;V=R;Z=1<<R;P=Z+1;for(var i=0;
  7234. i<P+1;i++){e[4*i]=e[4*i+3]=i;e[4*i+1]=65535;e[4*i+2]=1}},G=function(R){k=R+1;H=P+1},Q=function(R){var i=R<<2,M=e[i+2],v=b+M-1;
  7235. while(i!=65535){c[v--]=e[i];i=e[i+1]}b+=M},L=function(R,i){var M=H<<2,v=R<<2;e[M]=e[(i<<2)+3];e[M+1]=v;
  7236. e[M+2]=e[v+2]+1;e[M+3]=e[v+3];H++;if(H==1<<k&&k!=12)k++},s=function(R,i,M,v,t,q){j=i<<3;F=R;c=v;b=t;
  7237. var g=i+M<<3,r=0,p=0;W(q);G(q);while(j<g&&(r=l())!=P){if(r==Z){G(q);r=l();if(r==P)break;Q(r)}else{if(r<H){Q(r);
  7238. L(p,r)}else{L(p,p);Q(H-1)}}p=r}return b};return s}(),O,f,E=new Uint8Array(128),B=function(){return O[f++]},A=function(){var j=O[f+1]<<8|O[f];
  7239. f+=2;return j},U=function(){while(O[f]!=0)f+=1+O[f];f++},d=function(j){O=new Uint8Array(j);f=6;var F=A(),c=A(),b=B(),H=B(),k=B(),Z=b>>>7,P=b>>>4&7,X=b>>>3&1,l=b>>>0&7,m=f,e=0,V,W=0,G=0,C=0,z=260;
  7240. if(Z==1)f+=3*(1<<l+1);var T=[];while(f<O.length){var Q=B();if(Q==33){var L=B();if(L==249){var s=B(),b=B();
  7241. W=b>>>2&7;G=A();z=B();if((b&1)==0)z=260;B()}else if(L==254){U()}else if(L==255){U()}else throw L}else if(Q==44){var R=A(),i=A(),M=A(),v=A(),t=B(),q=t>>>7;
  7242. C=t>>>6&1;if(q==1){var l=t>>>0&7;e=f;f+=3*(1<<l+1)}V={x:R,y:i,a:M,O:v,f:W,delay:G,B:z,A:e==0?m:e,U:C};
  7243. T.push(V);e=0}else if(Q<=8){var M=V.a,v=V.O,S=M*v,Y=0;if(E.length<S*1.2)E=new Uint8Array(~~(S*1.3));
  7244. while(f<O.length&&O[f]!=0){var J=B();for(var g=0;g<J;g++)E[Y+g]=O[f+g];Y+=J;f+=J}if(f>=O.length){alert("Some frames are damaged.");
  7245. T.pop();break}B();V.d=new Uint8Array(S);var r=a(E,0,Y,V.d,0,Q)}else if(Q==59)break;else throw Q}return{width:F,height:c,data:O,frames:T}};
  7246. function D(j,F,O,c,b,H,k,Z){for(var P=0;P<k;P++){var X=b[H+P];if(X!=Z){var l=F+P<<2,m=c+X*3;j[l]=O[m];
  7247. j[l+1]=O[m+1];j[l+2]=O[m+2];j[l+3]=255}}}var w=function(j){var F=j.frames,c=j.width,b=j.height,H=new Uint8Array(c*b*4),k,Z=[],O=j.data;
  7248. for(var P=0;P<F.length;P++){var X=F[P],l=X.x,m=X.y,e=X.a,T=X.O,V=X.f;if(V==3){if(k==null)k=H.slice(0);
  7249. else k.set(H)}var W=[];if(X.U==1){for(var G=0;G<T;G+=8)W.push(G);for(var G=4;G<T;G+=8)W.push(G);for(var G=2;
  7250. G<T;G+=4)W.push(G);for(var G=1;G<T;G+=2)W.push(G)}var C=X.d,z=X.A,Q=X.B,L=X.U;for(var G=0;G<T;G++){var s=L==0?G:W[G];
  7251. D(H,(s+m)*c+l,O,z,C,G*e,e,Q)}Z.push(H.slice(0).buffer);if(V<2){}else if(V==2){for(var G=0;G<T;G++){var R=((m+G)*c+l)*4;
  7252. H.fill(0,R,R+e*4)}}else if(V==3)H.set(k)}return Z};return{decode:d,toRGBA8:w}}()/**
  7253. * Gauss-Jordan elimination
  7254. */
  7255. var linear = (function(){
  7256. /**
  7257. * Used internally to solve systems
  7258. * If you want to solve A.x = B,
  7259. * choose data=A and mirror=B.
  7260. * mirror can be either an array representing a vector
  7261. * or an array of arrays representing a matrix.
  7262. */
  7263. function Mat(data, mirror) {
  7264. // Clone the original matrix
  7265. this.data = new Array(data.length);
  7266. for (var i=0, cols=data[0].length; i<data.length; i++) {
  7267. this.data[i] = new Array(cols);
  7268. for(var j=0; j<cols; j++) {
  7269. this.data[i][j] = data[i][j];
  7270. }
  7271. }
  7272. if (mirror) {
  7273. if (typeof mirror[0] !== "object") {
  7274. for (var i=0; i<mirror.length; i++) {
  7275. mirror[i] = [mirror[i]];
  7276. }
  7277. }
  7278. this.mirror = new Mat(mirror);
  7279. }
  7280. }
  7281. /**
  7282. * Swap lines i and j in the matrix
  7283. */
  7284. Mat.prototype.swap = function (i, j) {
  7285. if (this.mirror) this.mirror.swap(i,j);
  7286. var tmp = this.data[i];
  7287. this.data[i] = this.data[j];
  7288. this.data[j] = tmp;
  7289. }
  7290. /**
  7291. * Multiply line number i by l
  7292. */
  7293. Mat.prototype.multline = function (i, l) {
  7294. if (this.mirror) this.mirror.multline(i,l);
  7295. var line = this.data[i];
  7296. for (var k=line.length-1; k>=0; k--) {
  7297. line[k] *= l;
  7298. }
  7299. }
  7300. /**
  7301. * Add line number j multiplied by l to line number i
  7302. */
  7303. Mat.prototype.addmul = function (i, j, l) {
  7304. if (this.mirror) this.mirror.addmul(i,j,l);
  7305. var lineI = this.data[i], lineJ = this.data[j];
  7306. for (var k=lineI.length-1; k>=0; k--) {
  7307. lineI[k] = lineI[k] + l*lineJ[k];
  7308. }
  7309. }
  7310. /**
  7311. * Tests if line number i is composed only of zeroes
  7312. */
  7313. Mat.prototype.hasNullLine = function (i) {
  7314. for (var j=0; j<this.data[i].length; j++) {
  7315. if (this.data[i][j] !== 0) {
  7316. return false;
  7317. }
  7318. }
  7319. return true;
  7320. }
  7321. Mat.prototype.gauss = function() {
  7322. var pivot = 0,
  7323. lines = this.data.length,
  7324. columns = this.data[0].length,
  7325. nullLines = [];
  7326. for (var j=0; j<columns; j++) {
  7327. // Find the line on which there is the maximum value of column j
  7328. var maxValue = 0, maxLine = 0;
  7329. for (var k=pivot; k<lines; k++) {
  7330. var val = this.data[k][j];
  7331. if (Math.abs(val) > Math.abs(maxValue)) {
  7332. maxLine = k;
  7333. maxValue = val;
  7334. }
  7335. }
  7336. if (maxValue === 0) {
  7337. // The matrix is not invertible. The system may still have solutions.
  7338. nullLines.push(pivot);
  7339. } else {
  7340. // The value of the pivot is maxValue
  7341. this.multline(maxLine, 1/maxValue);
  7342. this.swap(maxLine, pivot);
  7343. for (var i=0; i<lines; i++) {
  7344. if (i !== pivot) {
  7345. this.addmul(i, pivot, -this.data[i][j]);
  7346. }
  7347. }
  7348. }
  7349. pivot++;
  7350. }
  7351. // Check that the system has null lines where it should
  7352. for (var i=0; i<nullLines.length; i++) {
  7353. if (!this.mirror.hasNullLine(nullLines[i])) {
  7354. throw new Error("singular matrix");
  7355. }
  7356. }
  7357. return this.mirror.data;
  7358. }
  7359. /**
  7360. * Solves A.x = b
  7361. * @param A
  7362. * @param b
  7363. * @return x
  7364. */
  7365. var exports = {};
  7366. exports.solve = function solve(A, b) {
  7367. var result = new Mat(A,b).gauss();
  7368. if (result.length > 0 && result[0].length === 1) {
  7369. // Convert Nx1 matrices to simple javascript arrays
  7370. for (var i=0; i<result.length; i++) result[i] = result[i][0];
  7371. }
  7372. return result;
  7373. }
  7374. function identity(n) {
  7375. var id = new Array(n);
  7376. for (var i=0; i<n; i++) {
  7377. id[i] = new Array(n);
  7378. for (var j=0; j<n; j++) {
  7379. id[i][j] = (i === j) ? 1 : 0;
  7380. }
  7381. }
  7382. return id;
  7383. }
  7384. /**
  7385. * invert a matrix
  7386. */
  7387. exports.invert = function invert(A) {
  7388. return new Mat(A, identity(A.length)).gauss();
  7389. }
  7390. return exports;
  7391. })();
  7392. var Typr=function(){var U={};U.parse=function(h){var d=function(L,k,B,e){var T=U.B,i=U.T,$={cmap:i.c,head:i.head,hhea:i.aN,maxp:i.aa,hmtx:i.a4,name:i.name,"OS/2":i.g,post:i.a$,loca:i.b5,kern:i.U,glyf:i.A,"CFF ":i.$,"SVG ":i.am,COLR:i.aD,CPAL:i.aA},x={_data:L,_index:k,_offset:B};
  7393. for(var m in $){var u=U.findTable(L,m,B);if(u){var z=u[0],F=e[z];if(F==null)F=$[m].v(L,z,u[1],x);x[m]=e[z]=F}}return x},T=U.B,L=new Uint8Array(h),e={},G=T.z(L,0,4);
  7394. if(G=="ttcf"){var B=4,f=T.d(L,B);B+=2;var O=T.d(L,B);B+=2;var s=T.u(L,B);B+=4;var Y=[];for(var A=0;A<s;
  7395. A++){var t=T.u(L,B);B+=4;Y.push(d(L,A,t,e))}return Y}else return[d(L,0,0,e)]};U.findTable=function(h,d,T){var L=U.B,e=L.d(h,T+4),G=T+12;
  7396. for(var B=0;B<e;B++){var O=L.z(h,G,4),s=L.u(h,G+4),Y=L.u(h,G+8),A=L.u(h,G+12);if(O==d)return[Y,A];G+=16}return null};
  7397. U.T={};U.B={p:function(h,d){return(h[d]<<8|h[d+1])+(h[d+2]<<8|h[d+3])/(256*256+4)},i:function(h,d){var T=U.B.M(h,d);
  7398. return T/16384},o:function(h,d){var T=U.B.T.r;T[0]=h[d+3];T[1]=h[d+2];T[2]=h[d+1];T[3]=h[d];return U.B.T.ao[0]},Q:function(h,d){var T=U.B.T.r;
  7399. T[0]=h[d];return U.B.T.ac[0]},M:function(h,d){var T=U.B.T.r;T[1]=h[d];T[0]=h[d+1];return U.B.T.aT[0]},d:function(h,d){return h[d]<<8|h[d+1]},aR:function(h,d,T){h[d]=T>>8&255;
  7400. h[d+1]=T&255},ae:function(h,d,T){var L=[];for(var e=0;e<T;e++){var G=U.B.d(h,d+e*2);L.push(G)}return L},u:function(h,d){var T=U.B.T.r;
  7401. T[3]=h[d];T[2]=h[d+1];T[1]=h[d+2];T[0]=h[d+3];return U.B.T.aV[0]},a6:function(h,d,T){h[d]=T>>24&255;
  7402. h[d+1]=T>>16&255;h[d+2]=T>>8&255;h[d+3]=T>>0&255},f:function(h,d){return U.B.u(h,d)*(4294967295+1)+U.B.u(h,d+4)},z:function(h,d,T){var L="";
  7403. for(var e=0;e<T;e++)L+=String.fromCharCode(h[d+e]);return L},aC:function(h,d,T){for(var L=0;L<T.length;
  7404. L++)h[d+L]=T.charCodeAt(L)},F:function(h,d,T){var L="";for(var e=0;e<T;e++){var G=h[d++]<<8|h[d++];L+=String.fromCharCode(G)}return L},au:window.TextDecoder?new window.TextDecoder:null,a7:function(h,d,T){var L=U.B.au;
  7405. if(L&&d==0&&T==h.length)return L.decode(h);return U.B.z(h,d,T)},L:function(h,d,T){var L=[];for(var e=0;
  7406. e<T;e++)L.push(h[d+e]);return L},aJ:function(h,d,T){var L=[];for(var e=0;e<T;e++)L.push(String.fromCharCode(h[d+e]));
  7407. return L},T:function(){var h=new ArrayBuffer(8);return{ah:h,ac:new Int8Array(h),r:new Uint8Array(h),aT:new Int16Array(h),b2:new Uint16Array(h),ao:new Int32Array(h),aV:new Uint32Array(h)}}()};
  7408. U.T.$={v:function(h,d,T){var L=U.B,e=U.T.$;h=new Uint8Array(h.buffer,d,T);d=0;var G=h[d];d++;var B=h[d];
  7409. d++;var f=h[d];d++;var O=h[d];d++;var s=[];d=e.k(h,d,s);var Y=[];for(var A=0;A<s.length-1;A++)Y.push(L.z(h,d+s[A],s[A+1]-s[A]));
  7410. d+=s[s.length-1];var t=[];d=e.k(h,d,t);var k=[];for(var A=0;A<t.length-1;A++)k.push(e.O(h,d+t[A],d+t[A+1]));
  7411. d+=t[t.length-1];var i=k[0],$=[];d=e.k(h,d,$);var x=[];for(var A=0;A<$.length-1;A++)x.push(L.z(h,d+$[A],$[A+1]-$[A]));
  7412. d+=$[$.length-1];e.K(h,d,i);if(i.CharStrings)i.CharStrings=e.L(h,i.CharStrings);if(i.ROS){d=i.FDArray;
  7413. var m=[];d=e.k(h,d,m);i.FDArray=[];for(var A=0;A<m.length-1;A++){var n=e.O(h,d+m[A],d+m[A+1]);e.I(h,n,x);
  7414. i.FDArray.push(n)}d+=m[m.length-1];d=i.FDSelect;i.FDSelect=[];var u=h[d];d++;if(u==3){var z=L.d(h,d);
  7415. d+=2;for(var A=0;A<z+1;A++){i.FDSelect.push(L.d(h,d),h[d+2]);d+=3}}else throw u}if(i.charset)i.charset=e.a0(h,i.charset,i.CharStrings.length);
  7416. e.I(h,i,x);return i},I:function(h,d,T){var L=U.T.$,e;if(d.Private){e=d.Private[1];d.Private=L.O(h,e,e+d.Private[0]);
  7417. if(d.Private.Subrs)L.K(h,e+d.Private.Subrs,d.Private)}for(var G in d)if("FamilyName FontName FullName Notice version Copyright".split(" ").indexOf(G)!=-1)d[G]=T[d[G]-426+35]},K:function(h,d,T){T.Subrs=U.T.$.L(h,d);
  7418. var L,e=T.Subrs.length+1;if(!1)L=0;else if(e<1240)L=107;else if(e<33900)L=1131;else L=32768;T.Bias=L},L:function(h,d){var T=U.B,L=[];
  7419. d=U.T.$.k(h,d,L);var e=[],G=L.length-1,B=h.byteOffset+d;for(var f=0;f<G;f++){var O=L[f];e.push(new Uint8Array(h.buffer,B+O,L[f+1]-O))}return e},a_:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,0,111,112,113,114,0,115,116,117,118,119,120,121,122,0,123,0,124,125,126,127,128,129,130,131,0,132,133,0,134,135,136,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,139,0,0,0,0,140,141,142,143,0,0,0,0,0,144,0,0,0,145,0,0,146,147,148,149,0,0,0,0],b6:function(h,d){for(var T=0;
  7420. T<h.charset.length;T++)if(h.charset[T]==d)return T;return-1},Y:function(h,d){if(d<0||d>255)return-1;
  7421. return U.T.$.b6(h,U.T.$.a_[d])},a0:function(h,d,T){var L=U.B,e=[".notdef"],G=h[d];d++;if(G==0){for(var B=0;
  7422. B<T;B++){var O=L.d(h,d);d+=2;e.push(O)}}else if(G==1||G==2){while(e.length<T){var O=L.d(h,d),s=0;d+=2;
  7423. if(G==1){s=h[d];d++}else{s=L.d(h,d);d+=2}for(var B=0;B<=s;B++){e.push(O);O++}}}else throw"error: format: "+G;
  7424. return e},k:function(h,d,T){var L=U.B,e=L.d(h,d)+1;d+=2;var G=h[d];d++;if(G==1)for(var B=0;B<e;B++)T.push(h[d+B]);
  7425. else if(G==2)for(var B=0;B<e;B++)T.push(L.d(h,d+B*2));else if(G==3)for(var B=0;B<e;B++)T.push(L.u(h,d+B*3-1)&16777215);
  7426. else if(G==4)for(var B=0;B<e;B++)T.push(L.u(h,d+B*4));else if(e!=1)throw"unsupported offset size: "+G+", count: "+e;
  7427. d+=e*G;return d-1},aP:function(h,d,T){var L=U.B,e=h[d],G=h[d+1],B=h[d+2],f=h[d+3],O=h[d+4],s=1,Y=null,A=null;
  7428. if(e<=20){Y=e;s=1}if(e==12){Y=e*100+G;s=2}if(21<=e&&e<=27){Y=e;s=1}if(e==28){A=L.M(h,d+1);s=3}if(29<=e&&e<=31){Y=e;
  7429. s=1}if(32<=e&&e<=246){A=e-139;s=1}if(247<=e&&e<=250){A=(e-247)*256+G+108;s=2}if(251<=e&&e<=254){A=-(e-251)*256-G-108;
  7430. s=2}if(e==255){A=L.o(h,d+1)/65535;s=5}T.aY=A!=null?A:"o"+Y;T.size=s},aM:function(h,d,T){var L=d+T,e=U.B,G=[];
  7431. while(d<L){var B=h[d],f=h[d+1],O=h[d+2],s=h[d+3],Y=h[d+4],A=1,t=null,k=null;if(B<=20){t=B;A=1}if(B==12){t=B*100+f;
  7432. A=2}if(B==19||B==20){t=B;A=2}if(21<=B&&B<=27){t=B;A=1}if(B==28){k=e.M(h,d+1);A=3}if(29<=B&&B<=31){t=B;
  7433. A=1}if(32<=B&&B<=246){k=B-139;A=1}if(247<=B&&B<=250){k=(B-247)*256+f+108;A=2}if(251<=B&&B<=254){k=-(B-251)*256-f-108;
  7434. A=2}if(B==255){k=e.o(h,d+1)/65535;A=5}G.push(k!=null?k:"o"+t);d+=A}return G},O:function(h,d,T){var L=U.B,e={},G=[];
  7435. while(d<T){var B=h[d],f=h[d+1],O=h[d+2],s=h[d+3],Y=h[d+4],A=1,t=null,k=null;if(B==28){k=L.M(h,d+1);A=3}if(B==29){k=L.o(h,d+1);
  7436. A=5}if(32<=B&&B<=246){k=B-139;A=1}if(247<=B&&B<=250){k=(B-247)*256+f+108;A=2}if(251<=B&&B<=254){k=-(B-251)*256-f-108;
  7437. A=2}if(B==255){k=L.o(h,d+1)/65535;A=5;throw"unknown number"}if(B==30){var i=[],n="";A=1;while(!0){var $=h[d+A];
  7438. A++;var x=$>>4,m=$&15;if(x!=15)i.push(x);if(m!=15)i.push(m);if(m==15)break}var u=[0,1,2,3,4,5,6,7,8,9,".","e","e-","reserved","-","endOfNumber"];
  7439. for(var z=0;z<i.length;z++)n+=u[i[z]];k=parseFloat(n)}if(B<=21){var F="version Notice FullName FamilyName Weight FontBBox BlueValues OtherBlues FamilyBlues FamilyOtherBlues StdHW StdVW escape UniqueID XUID charset Encoding CharStrings Private Subrs defaultWidthX nominalWidthX".split(" ");
  7440. t=F[B];A=1;if(B==12){var F="Copyright isFixedPitch ItalicAngle UnderlinePosition UnderlineThickness PaintType CharstringType FontMatrix StrokeWidth BlueScale BlueShift BlueFuzz StemSnapH StemSnapV ForceBold LanguageGroup ExpansionFactor initialRandomSeed SyntheticBase PostScript BaseFontName BaseFontBlend ROS CIDFontVersion CIDFontRevision CIDFontType CIDCount UIDBase FDArray FDSelect FontName".split(" ");
  7441. t=F[f];A=2}}if(t!=null){e[t]=G.length==1?G[0]:G;G=[]}else G.push(k);d+=A}return e}};U.T.c={v:function(h,d,T){var L={C:[],e:{},a8:d};
  7442. h=new Uint8Array(h.buffer,d,T);d=0;var e=d,G=U.B,B=G.d,f=U.T.c,O=B(h,d);d+=2;var s=B(h,d);d+=2;var Y=[];
  7443. for(var A=0;A<s;A++){var t=B(h,d);d+=2;var k=B(h,d);d+=2;var i=G.u(h,d);d+=4;var $="p"+t+"e"+k,x=Y.indexOf(i);
  7444. if(x==-1){x=L.C.length;var m={};Y.push(i);var n=m.aw=B(h,i);if(n==0)m=f.aj(h,i,m);else if(n==4)m=f.aK(h,i,m);
  7445. else if(n==6)m=f.av(h,i,m);else if(n==12)m=f.an(h,i,m);L.C.push(m)}if(L.e[$]!=null)throw"multiple tables for one platform+encoding";
  7446. L.e[$]=x}return L},aj:function(h,d,T){var L=U.B;d+=2;var e=L.d(h,d);d+=2;var G=L.d(h,d);d+=2;T.map=[];
  7447. for(var B=0;B<e-6;B++)T.map.push(h[d+B]);return T},aK:function(h,d,T){var L=U.B,e=L.d,G=L.ae,B=d;d+=2;
  7448. var f=e(h,d);d+=2;var O=e(h,d);d+=2;var s=e(h,d);d+=2;var Y=s>>>1;T.az=e(h,d);d+=2;T.ad=e(h,d);d+=2;
  7449. T.ar=e(h,d);d+=2;T.aL=G(h,d,Y);d+=Y*2;d+=2;T.af=G(h,d,Y);d+=Y*2;T.aB=[];for(var A=0;A<Y;A++){T.aB.push(L.M(h,d));
  7450. d+=2}T.m=G(h,d,Y);d+=Y*2;T.R=G(h,d,B+f-d>>>1);return T},av:function(h,d,T){var L=U.B,e=d;d+=2;var G=L.d(h,d);
  7451. d+=2;var B=L.d(h,d);d+=2;T.aU=L.d(h,d);d+=2;var f=L.d(h,d);d+=2;T.R=[];for(var O=0;O<f;O++){T.R.push(L.d(h,d));
  7452. d+=2}return T},an:function(h,d,T){var L=U.B,e=L.u,G=d;d+=4;var B=e(h,d);d+=4;var f=e(h,d);d+=4;var O=e(h,d)*3;
  7453. d+=4;var s=T.a9=new Uint32Array(O);for(var Y=0;Y<O;Y+=3){s[Y]=e(h,d+(Y<<2));s[Y+1]=e(h,d+(Y<<2)+4);s[Y+2]=e(h,d+(Y<<2)+8)}return T}};
  7454. U.T.A={v:function(h,d,T,L){var e=[],G=L.maxp.numGlyphs;for(var B=0;B<G;B++)e.push(null);return e},a2:function(h,d){var T=U.B,L=h._data,e=h.loca;
  7455. if(e[d]==e[d+1])return null;var B=U.findTable(L,"glyf",h._offset)[0]+e[d],f={};f.j=T.M(L,B);B+=2;f.as=T.M(L,B);
  7456. B+=2;f.ag=T.M(L,B);B+=2;f.ak=T.M(L,B);B+=2;f.at=T.M(L,B);B+=2;if(f.as>=f.ak||f.ag>=f.at)return null;
  7457. if(f.j>0){f.h=[];for(var O=0;O<f.j;O++){f.h.push(T.d(L,B));B+=2}var s=T.d(L,B),x=0,m=0;B+=2;if(L.length-B<s)return null;
  7458. f.ai=T.L(L,B,s);B+=s;var Y=f.h[f.j-1]+1;f.s=[];for(var O=0;O<Y;O++){var A=L[B];B++;f.s.push(A);if((A&8)!=0){var t=L[B];
  7459. B++;for(var k=0;k<t;k++){f.s.push(A);O++}}}f.V=[];for(var O=0;O<Y;O++){var i=(f.s[O]&2)!=0,$=(f.s[O]&16)!=0;
  7460. if(i){f.V.push($?L[B]:-L[B]);B++}else{if($)f.V.push(0);else{f.V.push(T.M(L,B));B+=2}}}f.S=[];for(var O=0;
  7461. O<Y;O++){var i=(f.s[O]&4)!=0,$=(f.s[O]&32)!=0;if(i){f.S.push($?L[B]:-L[B]);B++}else{if($)f.S.push(0);
  7462. else{f.S.push(T.M(L,B));B+=2}}}for(var O=0;O<Y;O++){x+=f.V[O];m+=f.S[O];f.V[O]=x;f.S[O]=m}}else{var n=1<<0,u=1<<1,z=1<<2,F=1<<3,H=1<<4,b=1<<5,g=1<<6,j=1<<7,K=1<<8,J=1<<9,y=1<<10,l=1<<11,D=1<<12,Q;
  7463. f.W=[];do{Q=T.d(L,B);B+=2;var o={X:{a:1,b0:0,aF:0,_:1,aS:0,b1:0},aE:-1,b3:-1};f.W.push(o);o.al=T.d(L,B);
  7464. B+=2;if(Q&n){var p=T.M(L,B);B+=2;var r=T.M(L,B);B+=2}else{var p=T.Q(L,B);B++;var r=T.Q(L,B);B++}if(Q&u){o.X.aS=p;
  7465. o.X.b1=r}else{o.aE=p;o.b3=r}if(Q&F){o.X.a=o.X._=T.i(L,B);B+=2}else if(Q&g){o.X.a=T.i(L,B);B+=2;o.X._=T.i(L,B);
  7466. B+=2}else if(Q&j){o.X.a=T.i(L,B);B+=2;o.X.b0=T.i(L,B);B+=2;o.X.aF=T.i(L,B);B+=2;o.X._=T.i(L,B);B+=2}}while(Q&b);
  7467. if(Q&K){var a9=T.d(L,B);B+=2;f.a3=[];for(var O=0;O<a9;O++){f.a3.push(L[B]);B++}}}return f}};U.T.head={v:function(h,d,T){var L=U.B,e={},G=L.p(h,d);
  7468. d+=4;e.fontRevision=L.p(h,d);d+=4;var B=L.u(h,d);d+=4;var f=L.u(h,d);d+=4;e.flags=L.d(h,d);d+=2;e.unitsPerEm=L.d(h,d);
  7469. d+=2;e.created=L.f(h,d);d+=8;e.modified=L.f(h,d);d+=8;e.xMin=L.M(h,d);d+=2;e.yMin=L.M(h,d);d+=2;e.xMax=L.M(h,d);
  7470. d+=2;e.yMax=L.M(h,d);d+=2;e.macStyle=L.d(h,d);d+=2;e.lowestRecPPEM=L.d(h,d);d+=2;e.fontDirectionHint=L.M(h,d);
  7471. d+=2;e.indexToLocFormat=L.M(h,d);d+=2;e.glyphDataFormat=L.M(h,d);d+=2;return e}};U.T.aN={v:function(h,d,T){var L=U.B,e={},G=L.p(h,d);
  7472. d+=4;var B="ascender descender lineGap advanceWidthMax minLeftSideBearing minRightSideBearing xMaxExtent caretSlopeRise caretSlopeRun caretOffset res0 res1 res2 res3 metricDataFormat numberOfHMetrics".split(" ");
  7473. for(var f=0;f<B.length;f++){var O=B[f],s=O=="advanceWidthMax"||O=="numberOfHMetrics"?L.d:L.M;e[O]=s(h,d+f*2)}return e}};
  7474. U.T.a4={v:function(h,d,T,L){var e=U.B,G=[],B=[],f=L.maxp.numGlyphs,O=L.hhea.numberOfHMetrics,s=0,Y=0,A=0;
  7475. while(A<O){s=e.d(h,d+(A<<2));Y=e.M(h,d+(A<<2)+2);G.push(s);B.push(Y);A++}while(A<f){G.push(s);B.push(Y);
  7476. A++}return{b4:G,a5:B}}};U.T.U={v:function(h,d,T,L){var e=U.B,G=U.T.U,B=e.d(h,d);if(B==1)return G.aO(h,d,T,L);
  7477. var f=e.d(h,d+2);d+=4;var O={P:[],Z:[]};for(var s=0;s<f;s++){d+=2;var T=e.d(h,d);d+=2;var Y=e.d(h,d);
  7478. d+=2;var A=Y>>>8;A&=15;if(A==0)d=G.H(h,d,O)}return O},aO:function(h,d,T,L){var e=U.B,G=U.T.U,B=e.p(h,d),f=e.u(h,d+4);
  7479. d+=8;var O={P:[],Z:[]};for(var s=0;s<f;s++){var T=e.u(h,d);d+=4;var Y=e.d(h,d);d+=2;var A=e.d(h,d);d+=2;
  7480. var t=Y&255;if(t==0)d=G.H(h,d,O)}return O},H:function(h,d,T){var L=U.B,e=L.d,G=-1,B=e(h,d),f=e(h,d+2),O=e(h,d+4),s=e(h,d+6);
  7481. d+=8;for(var Y=0;Y<B;Y++){var A=e(h,d);d+=2;var t=e(h,d);d+=2;var k=L.M(h,d);d+=2;if(A!=G){T.P.push(A);
  7482. T.Z.push({aG:[],aZ:[]})}var i=T.Z[T.Z.length-1];i.aG.push(t);i.aZ.push(k);G=A}return d}};U.T.b5={v:function(h,d,T,L){var e=U.B,G=[],B=L.head.indexToLocFormat,f=L.maxp.numGlyphs+1;
  7483. if(B==0)for(var O=0;O<f;O++)G.push(e.d(h,d+(O<<1))<<1);if(B==1)for(var O=0;O<f;O++)G.push(e.u(h,d+(O<<2)));
  7484. return G}};U.T.aa={v:function(h,d,T){var L=U.B,e=L.d,G={},B=L.u(h,d);d+=4;G.numGlyphs=e(h,d);d+=2;return G}};
  7485. U.T.name={v:function(h,d,T){var L=U.B,e={},G=L.d(h,d),F="postScriptName",V;d+=2;var B=L.d(h,d);d+=2;
  7486. var f=L.d(h,d);d+=2;var O="copyright fontFamily fontSubfamily ID fullName version postScriptName trademark manufacturer designer description urlVendor urlDesigner licence licenceURL --- typoFamilyName typoSubfamilyName compatibleFull sampleText postScriptCID wwsFamilyName wwsSubfamilyName lightPalette darkPalette".split(" "),s=d,Y=L.d;
  7487. for(var A=0;A<B;A++){var t=Y(h,d),u;d+=2;var k=Y(h,d);d+=2;var i=Y(h,d);d+=2;var $=Y(h,d);d+=2;var x=Y(h,d);
  7488. d+=2;var m=Y(h,d);d+=2;var n=s+B*12+m;if(!1){}else if(t==0)u=L.F(h,n,x/2);else if(t==3&&k==0)u=L.F(h,n,x/2);
  7489. else if(k==0)u=L.z(h,n,x);else if(k==1)u=L.F(h,n,x/2);else if(k==3)u=L.F(h,n,x/2);else if(k==4)u=L.F(h,n,x/2);
  7490. else if(k==10)u=L.F(h,n,x/2);else if(t==1){u=L.z(h,n,x);console.log("reading unknown MAC encoding "+k+" as ASCII")}else{console.log("unknown encoding "+k+", platformID: "+t);
  7491. u=L.z(h,n,x)}var z="p"+t+","+i.toString(16);if(e[z]==null)e[z]={};e[z][O[$]]=u;e[z]._lang=i}for(var a in e)if(e[a][F]!=null&&e[a]._lang==1033)return e[a];
  7492. for(var a in e)if(e[a][F]!=null&&e[a]._lang==0)return e[a];for(var a in e)if(e[a][F]!=null&&e[a]._lang==3084)return e[a];
  7493. for(var a in e)if(e[a][F]!=null)return e[a];for(var a in e){V=e[a];break}console.log("returning name table with languageID "+V.ay);
  7494. if(V[F]==null&&V.ID!=null)V[F]=V.ID;return V}};U.T.g={v:function(h,d,T){var L=U.B,e=L.d(h,d);d+=2;var G=U.T.g,B={};
  7495. if(e==0)G.n(h,d,B);else if(e==1)G.q(h,d,B);else if(e==2||e==3||e==4)G.ax(h,d,B);else if(e==5)G.ab(h,d,B);
  7496. else throw"unknown OS/2 table version: "+e;return B},n:function(h,d,T){var L=U.B;T.xAvgCharWidth=L.M(h,d);
  7497. d+=2;T.usWeightClass=L.d(h,d);d+=2;T.usWidthClass=L.d(h,d);d+=2;T.fsType=L.d(h,d);d+=2;T.ySubscriptXSize=L.M(h,d);
  7498. d+=2;T.ySubscriptYSize=L.M(h,d);d+=2;T.ySubscriptXOffset=L.M(h,d);d+=2;T.ySubscriptYOffset=L.M(h,d);
  7499. d+=2;T.ySuperscriptXSize=L.M(h,d);d+=2;T.ySuperscriptYSize=L.M(h,d);d+=2;T.ySuperscriptXOffset=L.M(h,d);
  7500. d+=2;T.ySuperscriptYOffset=L.M(h,d);d+=2;T.yStrikeoutSize=L.M(h,d);d+=2;T.yStrikeoutPosition=L.M(h,d);
  7501. d+=2;T.sFamilyClass=L.M(h,d);d+=2;T.panose=L.L(h,d,10);d+=10;T.ulUnicodeRange1=L.u(h,d);d+=4;T.ulUnicodeRange2=L.u(h,d);
  7502. d+=4;T.ulUnicodeRange3=L.u(h,d);d+=4;T.ulUnicodeRange4=L.u(h,d);d+=4;T.achVendID=L.z(h,d,4);d+=4;T.fsSelection=L.d(h,d);
  7503. d+=2;T.usFirstCharIndex=L.d(h,d);d+=2;T.usLastCharIndex=L.d(h,d);d+=2;T.sTypoAscender=L.M(h,d);d+=2;
  7504. T.sTypoDescender=L.M(h,d);d+=2;T.sTypoLineGap=L.M(h,d);d+=2;T.usWinAscent=L.d(h,d);d+=2;T.usWinDescent=L.d(h,d);
  7505. d+=2;return d},q:function(h,d,T){var L=U.B;d=U.T.g.n(h,d,T);T.ulCodePageRange1=L.u(h,d);d+=4;T.ulCodePageRange2=L.u(h,d);
  7506. d+=4;return d},ax:function(h,d,T){var L=U.B,e=L.d;d=U.T.g.q(h,d,T);T.sxHeight=L.M(h,d);d+=2;T.sCapHeight=L.M(h,d);
  7507. d+=2;T.usDefault=e(h,d);d+=2;T.usBreak=e(h,d);d+=2;T.usMaxContext=e(h,d);d+=2;return d},ab:function(h,d,T){var L=U.B.d;
  7508. d=U.T.g.ax(h,d,T);T.usLowerOpticalPointSize=L(h,d);d+=2;T.usUpperOpticalPointSize=L(h,d);d+=2;return d}};
  7509. U.T.a$={v:function(h,d,T){var L=U.B,e={};e.version=L.p(h,d);d+=4;e.italicAngle=L.p(h,d);d+=4;e.underlinePosition=L.M(h,d);
  7510. d+=2;e.underlineThickness=L.M(h,d);d+=2;return e}};U.T.am={v:function(h,d,T){var L=U.B,e={entries:[]},G=d,B=L.d(h,d);
  7511. d+=2;var f=L.u(h,d);d+=4;var O=L.u(h,d);d+=4;d=f+G;var s=L.d(h,d);d+=2;for(var Y=0;Y<s;Y++){var A=L.d(h,d);
  7512. d+=2;var t=L.d(h,d);d+=2;var k=L.u(h,d);d+=4;var i=L.u(h,d);d+=4;var $=new Uint8Array(h.buffer,G+k+f,i),x=L.a7($,0,$.length);
  7513. for(var m=A;m<=t;m++){e.entries[m]=x}}return e}};U.T.aD={v:function(h,d,T){var L=U.B,e=d;d+=2;var G=L.d(h,d);
  7514. d+=2;var B=L.u(h,d);d+=4;var f=L.u(h,d);d+=4;var O=L.d(h,d);d+=2;var s={},Y=e+B;for(var A=0;A<G;A++){s["g"+L.d(h,Y)]=[L.d(h,Y+2),L.d(h,Y+4)];
  7515. Y+=6}var t=[];Y=e+f;for(var A=0;A<O;A++){t.push(L.d(h,Y),L.d(h,Y+2));Y+=4}return[s,t]}};U.T.aA={v:function(h,d,T){var L=U.B,e=d,G=L.d(h,d);
  7516. d+=2;if(G==0){var B=L.d(h,d);d+=2;var f=L.d(h,d);d+=2;var O=L.d(h,d);d+=2;var s=L.u(h,d);d+=4;return new Uint8Array(h.buffer,e+s,O*4)}else throw G}};
  7517. U.U={shape:function(h,d,T){var L=function(h,e,i,T){var $=e[i],x=e[i+1],m=h.kern;if(m){var n=m.P.indexOf($);
  7518. if(n!=-1){var u=m.Z[n].aG.indexOf(x);if(u!=-1)return[0,0,m.Z[n].aZ[u],0]}}return[0,0,0,0]},e=[],s=0,Y=0;
  7519. for(var G=0;G<d.length;G++){var B=d.codePointAt(G);if(B>65535)G++;e.push(U.U.codeToGlyph(h,B))}var O=[];
  7520. for(var G=0;G<e.length;G++){var A=L(h,e,G,T),t=e[G],k=h.hmtx.b4[t]+A[2];O.push({g:t,cl:G,dx:0,dy:0,ax:k,ay:0});
  7521. s+=k}return O},shapeToPath:function(h,d,T){var L={B:[],b:[]},e=0,G=0;for(var B=0;B<d.length;B++){var O=d[B],s=U.U.glyphToPath(h,O.g),Y=s.crds;
  7522. for(var A=0;A<Y.length;A+=2){L.b.push(Y[A]+e+O.dx);L.b.push(Y[A+1]+G+O.dy)}if(T)L.B.push(T);for(var A=0;
  7523. A<s.cmds.length;A++)L.B.push(s.cmds[A]);var t=L.B.length;if(T)if(t!=0&&L.B[t-1]!="X")L.B.push("X");e+=O.ax;
  7524. G+=O.ay}return{cmds:L.B,crds:L.b}},codeToGlyph:function(h,d){var T=h.cmap,L=-1,e="p3e10 p0e4 p3e1 p1e0 p0e3 p0e1".split(" ");
  7525. for(var G=0;G<e.length;G++)if(T.e[e[G]]!=null){L=T.e[e[G]];break}if(L==-1)throw"no familiar platform and encoding!";
  7526. var B=function($,u,z){var F=0,a=Math.floor($.length/u);while(F+1!=a){var V=F+(a-F>>>1);if($[V*u]<=z)F=V;
  7527. else a=V}return F*u},O=T.C[L],s=O.aw,Y=-1;if(s==0){if(d>=O.map.length)Y=0;else Y=O.map[d]}else if(s==4){var A=-1,t=O.aL;
  7528. if(d>t[t.length-1])A=-1;else{A=B(t,1,d);if(t[A]<d)A++}if(A==-1)Y=0;else if(d<O.af[A])Y=0;else{var k=0;
  7529. if(O.m[A]!=0)k=O.R[d-O.af[A]+(O.m[A]>>1)-(O.m.length-A)];else k=d+O.aB[A];Y=k&65535}}else if(s==6){var i=d-O.aU,$=O.R;
  7530. if(i<0||i>=$.length)Y=0;else Y=$[i]}else if(s==12){var x=O.a9;if(d>x[x.length-2])Y=0;else{var G=B(x,3,d);
  7531. if(x[G]<=d&&d<=x[G+1]){Y=x[G+2]+(d-x[G])}if(Y==-1)Y=0}}else throw"unknown cmap table format "+O.aw;var m=h["SVG "],n=h.loca;
  7532. if(Y!=0&&h["CFF "]==null&&(m==null||m.entries[Y]==null)&&n[Y]==n[Y+1]&&[9,10,11,12,13,32,133,160,5760,8232,8233,8239,12288,6158,8203,8204,8205,8288,65279].indexOf(d)==-1&&!(8192<=d&&d<=8202))Y=0;
  7533. return Y},glyphToPath:function(h,d){var T={B:[],b:[]},L=h["SVG "],e=h["CFF "],G=h.COLR,B=U.U;if(L&&L.entries[d]){var f=L.entries[d];
  7534. if(f!=null){if(typeof f=="string"){f=B.SVG.b7(f);L.entries[d]=f}T=f}}else if(G&&G[0]["g"+d]){function O(F){var a=F.toString(16);
  7535. return(a.length==1?"0":"")+a}var s=h.CPAL,Y=G[0]["g"+d];for(var A=0;A<Y[1];A++){var t=Y[0]+A,k=G[1][2*t],$=G[1][2*t+1]*4,x=U.U.glyphToPath(h,k),m="#"+O(s[$+2])+O(s[$+1])+O(s[$+0]);
  7536. T.B.push(m);T.B=T.B.concat(x.cmds);T.b=T.b.concat(x.crds);T.B.push("X")}}else if(e){var n=e.Private,u={x:0,y:0,stack:[],N:0,w:!1,width:n?n.defaultWidthX:0,open:!1};
  7537. if(e.ROS){var z=0;while(e.FDSelect[z+2]<=d)z+=2;n=e.FDArray[e.FDSelect[z+1]].Private}B._drawCFF(e.CharStrings[d],u,e,n,T)}else if(h.glyf){B._drawGlyf(d,h,T)}return{cmds:T.B,crds:T.b}},_drawGlyf:function(h,d,T){var L=d.glyf[h];
  7538. if(L==null)L=d.glyf[h]=U.T.A.a2(d,h);if(L!=null){if(L.j>-1)U.U._simpleGlyph(L,T);else U.U._compoGlyph(L,d,T)}},_simpleGlyph:function(h,d){var T=U.U.P;
  7539. for(var L=0;L<h.j;L++){var e=L==0?0:h.h[L-1]+1,G=h.h[L];for(var B=e;B<=G;B++){var O=B==e?G:B-1,s=B==G?e:B+1,Y=h.s[B]&1,A=h.s[O]&1,t=h.s[s]&1,k=h.V[B],$=h.S[B];
  7540. if(B==e){if(Y){if(A)T.G(d,h.V[O],h.S[O]);else{T.G(d,k,$);continue}}else{if(A)T.G(d,h.V[O],h.S[O]);else T.G(d,Math.floor((h.V[O]+k)*.5),Math.floor((h.S[O]+$)*.5))}}if(Y){if(A)T.J(d,k,$)}else{if(t)T.aq(d,k,$,h.V[s],h.S[s]);
  7541. else T.aq(d,k,$,Math.floor((k+h.V[s])*.5),Math.floor(($+h.S[s])*.5))}}T.D(d)}},_compoGlyph:function(h,d,T){for(var L=0;
  7542. L<h.W.length;L++){var e={B:[],b:[]},G=h.W[L];U.U._drawGlyf(G.al,d,e);var B=G.X;for(var f=0;f<e.b.length;
  7543. f+=2){var s=e.b[f],Y=e.b[f+1];T.b.push(s*B.a+Y*B.b0+B.aS);T.b.push(s*B.aF+Y*B._+B.b1)}for(var f=0;f<e.B.length;
  7544. f++)T.B.push(e.B[f])}},pathToSVG:function(h,d){var T=h.cmds,L=h.crds,G=0;if(d==null)d=5;var e=[],B={M:2,L:2,Q:4,C:6};
  7545. for(var f=0;f<T.length;f++){var O=T[f],s=G+(B[O]?B[O]:0);e.push(O);while(G<s){var Y=L[G++];e.push(parseFloat(Y.toFixed(d))+(G==s?"":" "))}}return e.join("")},SVGToPath:function(h){var d={B:[],b:[]};
  7546. U.U.SVG.a1(h,d);return{cmds:d.B,crds:d.b}},pathToContext:function(h,d){var T=0,L=h.cmds,e=h.crds;for(var G=0;
  7547. G<L.length;G++){var B=L[G];if(B=="M"){d.moveTo(e[T],e[T+1]);T+=2}else if(B=="L"){d.lineTo(e[T],e[T+1]);
  7548. T+=2}else if(B=="C"){d.bezierCurveTo(e[T],e[T+1],e[T+2],e[T+3],e[T+4],e[T+5]);T+=6}else if(B=="Q"){d.quadraticCurveTo(e[T],e[T+1],e[T+2],e[T+3]);
  7549. T+=4}else if(B.charAt(0)=="#"){d.beginPath();d.fillStyle=B}else if(B=="Z"){d.closePath()}else if(B=="X"){d.fill()}}},P:{G:function(h,d,T){h.B.push("M");
  7550. h.b.push(d,T)},J:function(h,d,T){h.B.push("L");h.b.push(d,T)},l:function(h,d,T,L,e,G,B){h.B.push("C");
  7551. h.b.push(d,T,L,e,G,B)},aq:function(h,d,T,L,e){h.B.push("Q");h.b.push(d,T,L,e)},D:function(h){h.B.push("Z")}},_drawCFF:function(h,d,T,L,e){var G=d.stack,B=d.N,f=d.w,O=d.width,s=d.open,Y=0,A=d.x,t=d.y,k=0,$=0,x=0,m=0,n=0,u=0,z=0,F=0,H=0,b=0,g=U.T.$,j=U.U.P,K=L.nominalWidthX,J={aY:0,size:0};
  7552. while(Y<h.length){g.aP(h,Y,J);var y=J.aY;Y+=J.size;if(!1){}else if(y=="o1"||y=="o18"){var l;l=G.length%2!==0;
  7553. if(l&&!f){O=G.shift()+K}B+=G.length>>1;G.length=0;f=!0}else if(y=="o3"||y=="o23"){var l;l=G.length%2!==0;
  7554. if(l&&!f){O=G.shift()+K}B+=G.length>>1;G.length=0;f=!0}else if(y=="o4"){if(G.length>1&&!f){O=G.shift()+K;
  7555. f=!0}if(s)j.D(e);t+=G.pop();j.G(e,A,t);s=!0}else if(y=="o5"){while(G.length>0){A+=G.shift();t+=G.shift();
  7556. j.J(e,A,t)}}else if(y=="o6"||y=="o7"){var D=G.length,Q=y=="o6";for(var o=0;o<D;o++){var p=G.shift();
  7557. if(Q)A+=p;else t+=p;Q=!Q;j.J(e,A,t)}}else if(y=="o8"||y=="o24"){var D=G.length,r=0;while(r+6<=D){k=A+G.shift();
  7558. $=t+G.shift();x=k+G.shift();m=$+G.shift();A=x+G.shift();t=m+G.shift();j.l(e,k,$,x,m,A,t);r+=6}if(y=="o24"){A+=G.shift();
  7559. t+=G.shift();j.J(e,A,t)}}else if(y=="o11")break;else if(y=="o1234"||y=="o1235"||y=="o1236"||y=="o1237"){if(y=="o1234"){k=A+G.shift();
  7560. $=t;x=k+G.shift();m=$+G.shift();H=x+G.shift();b=m;n=H+G.shift();u=m;z=n+G.shift();F=t;A=z+G.shift();
  7561. j.l(e,k,$,x,m,H,b);j.l(e,n,u,z,F,A,t)}if(y=="o1235"){k=A+G.shift();$=t+G.shift();x=k+G.shift();m=$+G.shift();
  7562. H=x+G.shift();b=m+G.shift();n=H+G.shift();u=b+G.shift();z=n+G.shift();F=u+G.shift();A=z+G.shift();t=F+G.shift();
  7563. G.shift();j.l(e,k,$,x,m,H,b);j.l(e,n,u,z,F,A,t)}if(y=="o1236"){k=A+G.shift();$=t+G.shift();x=k+G.shift();
  7564. m=$+G.shift();H=x+G.shift();b=m;n=H+G.shift();u=m;z=n+G.shift();F=u+G.shift();A=z+G.shift();j.l(e,k,$,x,m,H,b);
  7565. j.l(e,n,u,z,F,A,t)}if(y=="o1237"){k=A+G.shift();$=t+G.shift();x=k+G.shift();m=$+G.shift();H=x+G.shift();
  7566. b=m+G.shift();n=H+G.shift();u=b+G.shift();z=n+G.shift();F=u+G.shift();if(Math.abs(z-A)>Math.abs(F-t)){A=z+G.shift()}else{t=F+G.shift()}j.l(e,k,$,x,m,H,b);
  7567. j.l(e,n,u,z,F,A,t)}}else if(y=="o14"){if(G.length>0&&!f){O=G.shift()+T.nominalWidthX;f=!0}if(G.length==4){var a9=0,_=G.shift(),I=G.shift(),ah=G.shift(),a6=G.shift(),ae=g.Y(T,ah),a4=g.Y(T,a6);
  7568. U.U._drawCFF(T.CharStrings[ae],d,T,L,e);d.x=_;d.y=I;U.U._drawCFF(T.CharStrings[a4],d,T,L,e)}if(s){j.D(e);
  7569. s=!1}}else if(y=="o19"||y=="o20"){var l;l=G.length%2!==0;if(l&&!f){O=G.shift()+K}B+=G.length>>1;G.length=0;
  7570. f=!0;Y+=B+7>>3}else if(y=="o21"){if(G.length>2&&!f){O=G.shift()+K;f=!0}t+=G.pop();A+=G.pop();if(s)j.D(e);
  7571. j.G(e,A,t);s=!0}else if(y=="o22"){if(G.length>1&&!f){O=G.shift()+K;f=!0}A+=G.pop();if(s)j.D(e);j.G(e,A,t);
  7572. s=!0}else if(y=="o25"){while(G.length>6){A+=G.shift();t+=G.shift();j.J(e,A,t)}k=A+G.shift();$=t+G.shift();
  7573. x=k+G.shift();m=$+G.shift();A=x+G.shift();t=m+G.shift();j.l(e,k,$,x,m,A,t)}else if(y=="o26"){if(G.length%2){A+=G.shift()}while(G.length>0){k=A;
  7574. $=t+G.shift();x=k+G.shift();m=$+G.shift();A=x;t=m+G.shift();j.l(e,k,$,x,m,A,t)}}else if(y=="o27"){if(G.length%2){t+=G.shift()}while(G.length>0){k=A+G.shift();
  7575. $=t;x=k+G.shift();m=$+G.shift();A=x+G.shift();t=m;j.l(e,k,$,x,m,A,t)}}else if(y=="o10"||y=="o29"){var C=y=="o10"?L:T;
  7576. if(G.length==0){console.log("error: empty stack")}else{var S=G.pop(),q=C.Subrs[S+C.Bias];d.x=A;d.y=t;
  7577. d.N=B;d.w=f;d.width=O;d.open=s;U.U._drawCFF(q,d,T,L,e);A=d.x;t=d.y;B=d.N;f=d.w;O=d.width;s=d.open}}else if(y=="o30"||y=="o31"){var D,X=G.length,r=0,c=y=="o31";
  7578. D=X&~2;r+=X-D;while(r<D){if(c){k=A+G.shift();$=t;x=k+G.shift();m=$+G.shift();t=m+G.shift();if(D-r==5){A=x+G.shift();
  7579. r++}else A=x;c=!1}else{k=A;$=t+G.shift();x=k+G.shift();m=$+G.shift();A=x+G.shift();if(D-r==5){t=m+G.shift();
  7580. r++}else t=m;c=!0}j.l(e,k,$,x,m,A,t);r+=4}}else if((y+"").charAt(0)=="o"){console.log("Unknown operation: "+y,h);
  7581. throw y}else G.push(y)}d.x=A;d.y=t;d.N=B;d.w=f;d.width=O;d.open=s},SVG:function(){var h={aW:function(Y){return Math.sqrt(Math.abs(Y[0]*Y[3]-Y[1]*Y[2]))},translate:function(Y,t,k){h.concat(Y,[1,0,0,1,t,k])},rotate:function(Y,t){h.concat(Y,[Math.cos(t),-Math.sin(t),Math.sin(t),Math.cos(t),0,0])},scale:function(Y,t,k){h.concat(Y,[t,0,0,k,0,0])},concat:function(Y,t){var k=Y[0],i=Y[1],$=Y[2],x=Y[3],m=Y[4],n=Y[5];
  7582. Y[0]=k*t[0]+i*t[2];Y[1]=k*t[1]+i*t[3];Y[2]=$*t[0]+x*t[2];Y[3]=$*t[1]+x*t[3];Y[4]=m*t[0]+n*t[2]+t[4];
  7583. Y[5]=m*t[1]+n*t[3]+t[5]},aQ:function(Y){var t=Y[0],k=Y[1],i=Y[2],$=Y[3],x=Y[4],m=Y[5],n=t*$-k*i;Y[0]=$/n;
  7584. Y[1]=-k/n;Y[2]=-i/n;Y[3]=t/n;Y[4]=(i*m-$*x)/n;Y[5]=(k*x-t*m)/n},aI:function(Y,t){var k=t[0],$=t[1];return[k*Y[0]+$*Y[2]+Y[4],k*Y[1]+$*Y[3]+Y[5]]},ap:function(Y,t){for(var k=0;
  7585. k<t.length;k+=2){var i=t[k],$=t[k+1];t[k]=i*Y[0]+$*Y[2]+Y[4];t[k+1]=i*Y[1]+$*Y[3]+Y[5]}}};function d(Y,A,t){var k=[],i=0,$=0,x=0;
  7586. while(!0){var m=Y.indexOf(A,$),n=Y.indexOf(t,$);if(m==-1&&n==-1)break;if(n==-1||m!=-1&&m<n){if(x==0){k.push(Y.slice(i,m).trim());
  7587. i=m+1}x++;$=m+1}else if(m==-1||n!=-1&&n<m){x--;if(x==0){k.push(Y.slice(i,n).trim());i=n+1}$=n+1}}return k}function T(Y){var A=d(Y,"{","}"),t={};
  7588. for(var k=0;k<A.length;k+=2){var i=A[k].split(",");for(var $=0;$<i.length;$++){var x=i[$].trim();if(t[x]==null)t[x]="";
  7589. t[x]+=A[k+1]}}return t}function L(Y){var A=d(Y,"(",")"),t=[1,0,0,1,0,0];for(var k=0;k<A.length;k+=2){var i=t;
  7590. t=e(A[k],A[k+1]);h.concat(t,i)}return t}function e(Y,A){var t=[1,0,0,1,0,0],k=!0;for(var i=0;i<A.length;
  7591. i++){var $=A.charAt(i);if($==","||$==" ")k=!0;else if($=="."){if(!k){A=A.slice(0,i)+","+A.slice(i);i++}k=!1}else if($=="-"&&i>0&&A[i-1]!="e"){A=A.slice(0,i)+" "+A.slice(i);
  7592. i++;k=!0}}A=A.split(/\s*[\s,]\s*/).map(parseFloat);if(!1){}else if(Y=="translate"){if(A.length==1)h.translate(t,A[0],0);
  7593. else h.translate(t,A[0],A[1])}else if(Y=="scale"){if(A.length==1)h.scale(t,A[0],A[0]);else h.scale(t,A[0],A[1])}else if(Y=="rotate"){var x=0,m=0;
  7594. if(A.length!=1){x=A[1];m=A[2]}h.translate(t,-x,-m);h.rotate(t,-Math.PI*A[0]/180);h.translate(t,x,m)}else if(Y=="matrix")t=A;
  7595. else console.log("unknown transform: ",Y);return t}function G(Y){var A={B:[],b:[]};if(Y==null)return A;
  7596. var t=new DOMParser,k=t.parseFromString(Y,"image/svg+xml"),i=k.getElementsByTagName("svg")[0],$=i.getAttribute("viewBox");
  7597. if($)$=$.trim().split(" ").map(parseFloat);else $=[0,0,1e3,1e3];B(i.children,A);for(var x=0;x<A.b.length;
  7598. x+=2){var m=A.b[x],n=A.b[x+1];m-=$[0];n-=$[1];n=-n;A.b[x]=m;A.b[x+1]=n}return A}function B(Y,A,t){for(var k=0;
  7599. k<Y.length;k++){var i=Y[k],$=i.tagName,x=i.getAttribute("fill");if(x==null)x=t;if($=="g"){var m={b:[],B:[]};
  7600. B(i.children,m,x);var n=i.getAttribute("transform");if(n){var u=L(n);h.ap(u,m.b)}A.b=A.b.concat(m.b);
  7601. A.B=A.B.concat(m.B)}else if($=="path"||$=="circle"||$=="ellipse"){A.B.push(x?x:"#000000");var z;if($=="path")z=i.getAttribute("d");
  7602. if($=="circle"||$=="ellipse"){var F=[0,0,0,0],a=["cx","cy","rx","ry","r"];for(var V=0;V<5;V++){var H=i.getAttribute(a[V]);
  7603. if(H){H=parseFloat(H);if(V<4)F[V]=H;else F[2]=F[3]=H}}var b=F[0],g=F[1],j=F[2],K=F[3];z=["M",b-j,g,"a",j,K,0,1,0,j*2,0,"a",j,K,0,1,0,-j*2,0].join(" ")}s(z,A);
  7604. A.B.push("X")}else if($=="defs"){}else console.log($,i)}}function f(Y){var A=[],t=0,k=!1,i="",$="",x="",m=0;
  7605. while(t<Y.length){var n=Y.charCodeAt(t),u=Y.charAt(t);t++;var z=48<=n&&n<=57||u=="."||u=="-"||u=="e"||u=="E";
  7606. if(k){if(u=="-"&&$!="e"||u=="."&&i.indexOf(".")!=-1||z&&(x=="a"||x=="A")&&(m%7==3||m%7==4)){A.push(parseFloat(i));
  7607. m++;i=u}else if(z)i+=u;else{A.push(parseFloat(i));m++;if(u!=","&&u!=" "){A.push(u);x=u;m=0}k=!1}}else{if(z){i=u;
  7608. k=!0}else if(u!=","&&u!=" "){A.push(u);x=u;m=0}}$=u}if(k)A.push(parseFloat(i));return A}function O(Y,A,t){var k=A;
  7609. while(k<Y.length){if(typeof Y[k]=="string")break;k+=t}return(k-A)/t}function s(Y,A){var t=f(Y),k=0,i=0,$=0,x=0,m=0,n=A.b.length,u={M:2,L:2,H:1,V:1,T:2,S:4,A:7,Q:4,C:6},z=A.B,F=A.b;
  7610. while(k<t.length){var H=t[k];k++;var b=H.toUpperCase();if(b=="Z"){z.push("Z");i=x;$=m}else{var g=u[b],j=O(t,k,g);
  7611. for(var K=0;K<j;K++){if(K==1&&b=="M"){H=H==b?"L":"l";b="L"}var J=0,y=0;if(H!=b){J=i;y=$}if(!1){}else if(b=="M"){i=J+t[k++];
  7612. $=y+t[k++];z.push("M");F.push(i,$);x=i;m=$}else if(b=="L"){i=J+t[k++];$=y+t[k++];z.push("L");F.push(i,$)}else if(b=="H"){i=J+t[k++];
  7613. z.push("L");F.push(i,$)}else if(b=="V"){$=y+t[k++];z.push("L");F.push(i,$)}else if(b=="Q"){var l=J+t[k++],D=y+t[k++],Q=J+t[k++],o=y+t[k++];
  7614. z.push("Q");F.push(l,D,Q,o);i=Q;$=o}else if(b=="T"){var p=Math.max(F.length-(z[z.length-1]=="Q"?4:2),n),l=i+i-F[p],D=$+$-F[p+1],Q=J+t[k++],o=y+t[k++];
  7615. z.push("Q");F.push(l,D,Q,o);i=Q;$=o}else if(b=="C"){var l=J+t[k++],D=y+t[k++],Q=J+t[k++],o=y+t[k++],r=J+t[k++],_=y+t[k++];
  7616. z.push("C");F.push(l,D,Q,o,r,_);i=r;$=_}else if(b=="S"){var p=Math.max(F.length-(z[z.length-1]=="C"?4:2),n),l=i+i-F[p],D=$+$-F[p+1],Q=J+t[k++],o=y+t[k++],r=J+t[k++],_=y+t[k++];
  7617. z.push("C");F.push(l,D,Q,o,r,_);i=r;$=_}else if(b=="A"){var l=i,D=$,I=t[k++],v=t[k++],ah=t[k++]*(Math.PI/180),a6=t[k++],ae=t[k++],Q=J+t[k++],o=y+t[k++];
  7618. if(Q==i&&o==$&&I==0&&v==0)continue;var a4=(l-Q)/2,C=(D-o)/2,S=Math.cos(ah),q=Math.sin(ah),X=S*a4+q*C,c=-q*a4+S*C,aa=I*I,a3=v*v,ar=X*X,at=c*c,ap=(aa*a3-aa*at-a3*ar)/(aa*at+a3*ar),af=(a6!=ae?1:-1)*Math.sqrt(Math.max(ap,0)),ao=af*(I*c)/v,a2=-af*(v*X)/I,aq=S*ao-q*a2+(l+Q)/2,a0=q*ao+S*a2+(D+o)/2,ab=function(R,P,M,E){var a5=Math.sqrt(R*R+P*P),N=Math.sqrt(M*M+E*E),as=(R*M+P*E)/(a5*N);
  7619. return(R*E-P*M>=0?1:-1)*Math.acos(Math.max(-1,Math.min(1,as)))},a7=(X-ao)/I,aj=(c-a2)/v,am=ab(1,0,a7,aj),au=ab(a7,aj,(-X-ao)/I,(-c-a2)/v);
  7620. au=au%(2*Math.PI);var ac=function(a8,i,$,R,P,M,E){var a5=function(w,Z){var an=Math.sin(Z),p=Math.cos(Z),Z=w[0],ai=w[1],ad=w[2],Y=w[3];
  7621. w[0]=Z*p+ai*an;w[1]=-Z*an+ai*p;w[2]=ad*p+Y*an;w[3]=-ad*an+Y*p},N=function(w,Z){for(var K=0;K<Z.length;
  7622. K+=2){var i=Z[K],$=Z[K+1];Z[K]=w[0]*i+w[2]*$+w[4];Z[K+1]=w[1]*i+w[3]*$+w[5]}},as=function(w,Z){for(var K=0;
  7623. K<Z.length;K++)w.push(Z[K])},a1=function(w,R){as(w.B,R.B);as(w.b,R.b)};if(E)while(M>P)M-=2*Math.PI;else while(M<P)M+=2*Math.PI;
  7624. var ag=(M-P)/4,ak=Math.cos(ag/2),al=-Math.sin(ag/2),l=(4-ak)/3,D=al==0?al:(1-ak)*(3-ak)/(3*al),Q=l,o=-D,r=ak,_=-al,g=[l,D,Q,o,r,_],A={B:["C","C","C","C"],b:g.slice(0)},W=[1,0,0,1,0,0];
  7625. a5(W,-ag);for(var K=0;K<3;K++){N(W,g);as(A.b,g)}a5(W,-P+ag/2);W[0]*=R;W[1]*=R;W[2]*=R;W[3]*=R;W[4]=i;
  7626. W[5]=$;N(W,A.b);N(a8.aX,A.b);a1(a8.aH,A)},a8={aH:A,aX:[I*S,I*q,-v*q,v*S,aq,a0]};ac(a8,0,0,1,am,am+au,ae==0);
  7627. i=Q;$=o}else console.log("Unknown SVG command "+H)}}}}return{cssMap:T,readTrnf:L,a1:s,b7:G}}(),initHB:function(h,d){var T=function(L){var e=0;
  7628. if((L&4294967295-(1<<7)+1)==0){e=1}else if((L&4294967295-(1<<11)+1)==0){e=2}else if((L&4294967295-(1<<16)+1)==0){e=3}else if((L&4294967295-(1<<21)+1)==0){e=4}return e};
  7629. fetch(h).then(function(L){return L.arrayBuffer()}).then(function(L){return WebAssembly.instantiate(L)}).then(function(L){console.log("HB ready");
  7630. var e=L.instance.exports,G=e.memory,B,f,O,s,Y,A,t,k;G.grow(30);U.U.shapeHB=function(){var i=function(x){var m=e.hb_buffer_get_length(x),n=[],u=e.hb_buffer_get_glyph_infos(x,0)>>>2,z=e.hb_buffer_get_glyph_positions(x,0)>>>2;
  7631. for(var F=0;F<m;++F){var a=u+F*5,V=z+F*5;n.push({g:f[a+0],cl:f[a+2],ax:O[V+0],ay:O[V+1],dx:O[V+2],dy:O[V+3]})}return n},$;
  7632. return function(x,m,n){var u=x._data,z=x.name.postScriptName,F=G.buffer.byteLength,a=2*u.length+m.length*16+4e6,J=0,y=0;
  7633. if(F<a){G.grow((a-F>>>16)+4)}B=new Uint8Array(G.buffer);f=new Uint32Array(G.buffer);O=new Int32Array(G.buffer);
  7634. if(s!=z){if(Y!=null){e.hb_blob_destroy(Y);e.free(A);e.hb_face_destroy(t);e.hb_font_destroy(k)}A=e.malloc(u.byteLength);
  7635. B.set(u,A);Y=e.hb_blob_create(A,u.byteLength,2,0,0);t=e.hb_face_create(Y,0);k=e.hb_font_create(t);s=z}if(window.TextEncoder==null){alert("Your browser is too old. Please, update it.");
  7636. return}if($==null)$=new window.TextEncoder("utf8");var V=e.hb_buffer_create(),H=$.encode(m),b=H.length,g=e.malloc(b);
  7637. B.set(H,g);e.hb_buffer_add_utf8(V,g,b,0,b);e.free(g);e.hb_buffer_set_direction(V,n?4:5);e.hb_buffer_guess_segment_properties(V);
  7638. e.hb_shape(k,V,0,0);var j=i(V);e.hb_buffer_destroy(V);var K=j.slice(0);if(!n)K.reverse();for(var l=1;
  7639. l<K.length;l++){var D=K[l],Q=D.cl;while(!0){var o=m.codePointAt(J),p=T(o);if(y+p<=Q){y+=p;J+=o<=65535?1:2}else break}D.cl=J}return j}}();
  7640. d()})}};return U}()
  7641. var UZIP = {};
  7642. if(typeof module == "object") module.exports = UZIP;
  7643. UZIP["parse"] = function(buf, onlyNames) // ArrayBuffer
  7644. {
  7645. var rUs = UZIP.bin.readUshort, rUi = UZIP.bin.readUint, o = 0, out = {};
  7646. var data = new Uint8Array(buf);
  7647. var eocd = data.length-4;
  7648. while(rUi(data, eocd)!=0x06054b50) eocd--;
  7649. var o = eocd;
  7650. o+=4; // sign = 0x06054b50
  7651. o+=4; // disks = 0;
  7652. var cnu = rUs(data, o); o+=2;
  7653. var cnt = rUs(data, o); o+=2;
  7654. var csize = rUi(data, o); o+=4;
  7655. var coffs = rUi(data, o); o+=4;
  7656. o = coffs;
  7657. for(var i=0; i<cnu; i++)
  7658. {
  7659. var sign = rUi(data, o); o+=4;
  7660. o += 4; // versions;
  7661. o += 4; // flag + compr
  7662. o += 4; // time
  7663. var crc32 = rUi(data, o); o+=4;
  7664. var csize = rUi(data, o); o+=4;
  7665. var usize = rUi(data, o); o+=4;
  7666. var nl = rUs(data, o), el = rUs(data, o+2), cl = rUs(data, o+4); o += 6; // name, extra, comment
  7667. o += 8; // disk, attribs
  7668. var roff = rUi(data, o); o+=4;
  7669. o += nl + el + cl;
  7670. UZIP._readLocal(data, roff, out, csize, usize, onlyNames);
  7671. }
  7672. //console.log(out);
  7673. return out;
  7674. }
  7675. UZIP._readLocal = function(data, o, out, csize, usize, onlyNames)
  7676. {
  7677. var rUs = UZIP.bin.readUshort, rUi = UZIP.bin.readUint;
  7678. var sign = rUi(data, o); o+=4;
  7679. var ver = rUs(data, o); o+=2;
  7680. var gpflg = rUs(data, o); o+=2;
  7681. //if((gpflg&8)!=0) throw "unknown sizes";
  7682. var cmpr = rUs(data, o); o+=2;
  7683. var time = rUi(data, o); o+=4;
  7684. var crc32 = rUi(data, o); o+=4;
  7685. //var csize = rUi(data, o); o+=4;
  7686. //var usize = rUi(data, o); o+=4;
  7687. o+=8;
  7688. var nlen = rUs(data, o); o+=2;
  7689. var elen = rUs(data, o); o+=2;
  7690. var name = (gpflg&2048)==0 ? UZIP.bin.readIBM(data,o,nlen) : UZIP.bin.readUTF8(data, o, nlen); o+=nlen; //console.log(name);
  7691. o += elen;
  7692. //console.log(sign.toString(16), ver, gpflg, cmpr, crc32.toString(16), "csize, usize", csize, usize, nlen, elen, name, o);
  7693. if(onlyNames) { out[name]={size:usize, csize:csize}; return; }
  7694. var file = new Uint8Array(data.buffer, o);
  7695. if(false) {}
  7696. else if(cmpr==0) out[name] = new Uint8Array(file.buffer.slice(o, o+csize));
  7697. else if(cmpr==8) {
  7698. var buf = new Uint8Array(usize); UZIP.inflateRaw(file, buf);
  7699. /*var nbuf = pako["inflateRaw"](file);
  7700. if(usize>8514000) {
  7701. //console.log(PUtils.readASCII(buf , 8514500, 500));
  7702. //console.log(PUtils.readASCII(nbuf, 8514500, 500));
  7703. }
  7704. for(var i=0; i<buf.length; i++) if(buf[i]!=nbuf[i]) { console.log(buf.length, nbuf.length, usize, i); throw "e"; }
  7705. */
  7706. out[name] = buf;
  7707. }
  7708. else throw "unknown compression method: "+cmpr;
  7709. }
  7710. UZIP.inflateRaw = function(file, buf) { return UZIP.F.inflate(file, buf); }
  7711. UZIP.inflate = function(file, buf) {
  7712. var CMF = file[0], FLG = file[1];
  7713. var CM = (CMF&15), CINFO = (CMF>>>4);
  7714. //console.log(CM, CINFO,CMF,FLG);
  7715. return UZIP.inflateRaw(new Uint8Array(file.buffer, file.byteOffset+2, file.length-6), buf);
  7716. }
  7717. UZIP.deflate = function(data, opts/*, buf, off*/) {
  7718. if(opts==null) opts={level:6};
  7719. var off=0, buf=new Uint8Array(50+Math.floor(data.length*1.1));
  7720. buf[off]=120; buf[off+1]=156; off+=2;
  7721. off = UZIP.F.deflateRaw(data, buf, off, opts.level);
  7722. var crc = UZIP.adler(data, 0, data.length);
  7723. buf[off+0]=((crc>>>24)&255);
  7724. buf[off+1]=((crc>>>16)&255);
  7725. buf[off+2]=((crc>>> 8)&255);
  7726. buf[off+3]=((crc>>> 0)&255);
  7727. return new Uint8Array(buf.buffer, 0, off+4);
  7728. }
  7729. UZIP.deflateRaw = function(data, opts) {
  7730. if(opts==null) opts={level:6};
  7731. var buf=new Uint8Array(50+Math.floor(data.length*1.1));
  7732. var off = UZIP.F.deflateRaw(data, buf, off, opts.level);
  7733. return new Uint8Array(buf.buffer, 0, off);
  7734. }
  7735. UZIP.encode = function(obj, noCmpr) {
  7736. if(noCmpr==null) noCmpr=false;
  7737. var tot = 0, wUi = UZIP.bin.writeUint, wUs = UZIP.bin.writeUshort;
  7738. var zpd = {};
  7739. for(var p in obj) { var cpr = !UZIP._noNeed(p) && !noCmpr, buf = obj[p], crc = UZIP.crc.crc(buf,0,buf.length);
  7740. zpd[p] = { cpr:cpr, usize:buf.length, crc:crc, file: (cpr ? UZIP.deflateRaw(buf) : buf) }; }
  7741. for(var p in zpd) tot += zpd[p].file.length + 30 + 46 + 2*UZIP.bin.sizeUTF8(p);
  7742. tot += 22;
  7743. var data = new Uint8Array(tot), o = 0;
  7744. var fof = []
  7745. for(var p in zpd) {
  7746. var file = zpd[p]; fof.push(o);
  7747. o = UZIP._writeHeader(data, o, p, file, 0);
  7748. }
  7749. var i=0, ioff = o;
  7750. for(var p in zpd) {
  7751. var file = zpd[p]; fof.push(o);
  7752. o = UZIP._writeHeader(data, o, p, file, 1, fof[i++]);
  7753. }
  7754. var csize = o-ioff;
  7755. wUi(data, o, 0x06054b50); o+=4;
  7756. o += 4; // disks
  7757. wUs(data, o, i); o += 2;
  7758. wUs(data, o, i); o += 2; // number of c d records
  7759. wUi(data, o, csize); o += 4;
  7760. wUi(data, o, ioff ); o += 4;
  7761. o += 2;
  7762. return data.buffer;
  7763. }
  7764. // no need to compress .PNG, .ZIP, .JPEG ....
  7765. UZIP._noNeed = function(fn) { var ext = fn.split(".").pop().toLowerCase(); return "png,jpg,jpeg,zip".indexOf(ext)!=-1; }
  7766. UZIP._writeHeader = function(data, o, p, obj, t, roff)
  7767. {
  7768. var wUi = UZIP.bin.writeUint, wUs = UZIP.bin.writeUshort;
  7769. var file = obj.file;
  7770. wUi(data, o, t==0 ? 0x04034b50 : 0x02014b50); o+=4; // sign
  7771. if(t==1) o+=2; // ver made by
  7772. wUs(data, o, 20); o+=2; // ver
  7773. wUs(data, o, 2048); o+=2; // gflip
  7774. wUs(data, o, obj.cpr?8:0); o+=2; // cmpr
  7775. wUi(data, o, 0); o+=4; // time
  7776. wUi(data, o, obj.crc); o+=4; // crc32
  7777. wUi(data, o, file.length); o+=4; // csize
  7778. wUi(data, o, obj.usize); o+=4; // usize
  7779. wUs(data, o, UZIP.bin.sizeUTF8(p)); o+=2; // nlen
  7780. wUs(data, o, 0); o+=2; // elen
  7781. if(t==1) {
  7782. o += 2; // comment length
  7783. o += 2; // disk number
  7784. o += 6; // attributes
  7785. wUi(data, o, roff); o+=4; // usize
  7786. }
  7787. var nlen = UZIP.bin.writeUTF8(data, o, p); o+= nlen;
  7788. if(t==0) { data.set(file, o); o += file.length; }
  7789. return o;
  7790. }
  7791. UZIP.crc = {
  7792. table : ( function() {
  7793. var tab = new Uint32Array(256);
  7794. for (var n=0; n<256; n++) {
  7795. var c = n;
  7796. for (var k=0; k<8; k++) {
  7797. if (c & 1) c = 0xedb88320 ^ (c >>> 1);
  7798. else c = c >>> 1;
  7799. }
  7800. tab[n] = c; }
  7801. return tab; })(),
  7802. update : function(c, buf, off, len) {
  7803. for (var i=0; i<len; i++) c = UZIP.crc.table[(c ^ buf[off+i]) & 0xff] ^ (c >>> 8);
  7804. return c;
  7805. },
  7806. crc : function(b,o,l) { return UZIP.crc.update(0xffffffff,b,o,l) ^ 0xffffffff; }
  7807. }
  7808. UZIP.adler = function(data,o,len) {
  7809. var a = 1, b = 0;
  7810. var off = o, end=o+len;
  7811. while(off<end) {
  7812. var eend = Math.min(off+5552, end);
  7813. while(off<eend) {
  7814. a += data[off++];
  7815. b += a;
  7816. }
  7817. a=a%65521;
  7818. b=b%65521;
  7819. }
  7820. return (b << 16) | a;
  7821. }
  7822. UZIP.bin = {
  7823. readUshort : function(buff,p) { return (buff[p]) | (buff[p+1]<<8); },
  7824. writeUshort: function(buff,p,n){ buff[p] = (n)&255; buff[p+1] = (n>>8)&255; },
  7825. readUint : function(buff,p) { return (buff[p+3]*(256*256*256)) + ((buff[p+2]<<16) | (buff[p+1]<< 8) | buff[p]); },
  7826. writeUint : function(buff,p,n){ buff[p]=n&255; buff[p+1]=(n>>8)&255; buff[p+2]=(n>>16)&255; buff[p+3]=(n>>24)&255; },
  7827. readASCII : function(buff,p,l){ var s = ""; for(var i=0; i<l; i++) s += String.fromCharCode(buff[p+i]); return s; },
  7828. writeASCII : function(data,p,s){ for(var i=0; i<s.length; i++) data[p+i] = s.charCodeAt(i); },
  7829. pad : function(n) { return n.length < 2 ? "0" + n : n; },
  7830. readIBM : function(buff, p, l) {
  7831. var codes = [
  7832. 0xc7, 0xfc, 0xe9, 0xe2, 0xe4, 0xe0, 0xe5, 0xe7, 0xea, 0xeb, 0xe8, 0xef, 0xee, 0xec, 0xc4, 0xc5,
  7833. 0xc9, 0xe6, 0xc6, 0xf4, 0xf6, 0xf2, 0xfb, 0xf9, 0xff, 0xd6, 0xdc, 0xa2, 0xa3, 0xa5, 0xa7, 0x192,
  7834. 0xe1, 0xed, 0xf3, 0xfa, 0xf1, 0xd1, 0xaa, 0xba, 0xbf, 0x2310, 0xac, 0xbd, 0xbc, 0xa1, 0xab, 0xbb
  7835. ]
  7836. var out = "";
  7837. for(var i=0; i<l; i++) {
  7838. var cc = buff[p+i];
  7839. if (cc<0x80) cc = cc;
  7840. else if(cc<0xb0) cc = codes[cc-0x80];
  7841. else cc = 32;
  7842. out += String.fromCharCode(cc);
  7843. }
  7844. return out;
  7845. },
  7846. readUTF8 : function(buff, p, l) {
  7847. var s = "", ns;
  7848. for(var i=0; i<l; i++) s += "%" + UZIP.bin.pad(buff[p+i].toString(16));
  7849. try { ns = decodeURIComponent(s); }
  7850. catch(e) { return UZIP.bin.readASCII(buff, p, l); }
  7851. return ns;
  7852. },
  7853. writeUTF8 : function(buff, p, str) {
  7854. var strl = str.length, i=0;
  7855. for(var ci=0; ci<strl; ci++)
  7856. {
  7857. var code = str.charCodeAt(ci);
  7858. if ((code&(0xffffffff-(1<< 7)+1))==0) { buff[p+i] = ( code ); i++; }
  7859. else if((code&(0xffffffff-(1<<11)+1))==0) { buff[p+i] = (192|(code>> 6)); buff[p+i+1] = (128|((code>> 0)&63)); i+=2; }
  7860. else if((code&(0xffffffff-(1<<16)+1))==0) { buff[p+i] = (224|(code>>12)); buff[p+i+1] = (128|((code>> 6)&63)); buff[p+i+2] = (128|((code>>0)&63)); i+=3; }
  7861. else if((code&(0xffffffff-(1<<21)+1))==0) { buff[p+i] = (240|(code>>18)); buff[p+i+1] = (128|((code>>12)&63)); buff[p+i+2] = (128|((code>>6)&63)); buff[p+i+3] = (128|((code>>0)&63)); i+=4; }
  7862. else throw "e";
  7863. }
  7864. return i;
  7865. },
  7866. sizeUTF8 : function(str) {
  7867. var strl = str.length, i=0;
  7868. for(var ci=0; ci<strl; ci++)
  7869. {
  7870. var code = str.charCodeAt(ci);
  7871. if ((code&(0xffffffff-(1<< 7)+1))==0) { i++ ; }
  7872. else if((code&(0xffffffff-(1<<11)+1))==0) { i+=2; }
  7873. else if((code&(0xffffffff-(1<<16)+1))==0) { i+=3; }
  7874. else if((code&(0xffffffff-(1<<21)+1))==0) { i+=4; }
  7875. else throw "e";
  7876. }
  7877. return i;
  7878. }
  7879. }
  7880. UZIP.F = {};
  7881. UZIP.F.deflateRaw = function(data, out, opos, lvl) {
  7882. var opts = [
  7883. /*
  7884. ush good_length; /* reduce lazy search above this match length
  7885. ush max_lazy; /* do not perform lazy search above this match length
  7886. ush nice_length; /* quit search above this match length
  7887. */
  7888. /* good lazy nice chain */
  7889. /* 0 */ [ 0, 0, 0, 0,0], /* store only */
  7890. /* 1 */ [ 4, 4, 8, 4,0], /* max speed, no lazy matches */
  7891. /* 2 */ [ 4, 5, 16, 8,0],
  7892. /* 3 */ [ 4, 6, 16, 16,0],
  7893. /* 4 */ [ 4, 10, 16, 32,0], /* lazy matches */
  7894. /* 5 */ [ 8, 16, 32, 32,0],
  7895. /* 6 */ [ 8, 16, 128, 128,0],
  7896. /* 7 */ [ 8, 32, 128, 256,0],
  7897. /* 8 */ [32, 128, 258, 1024,1],
  7898. /* 9 */ [32, 258, 258, 4096,1]]; /* max compression */
  7899. var opt = opts[lvl];
  7900. var U = UZIP.F.U, goodIndex = UZIP.F._goodIndex, hash = UZIP.F._hash, putsE = UZIP.F._putsE;
  7901. var i = 0, pos = opos<<3, cvrd = 0, dlen = data.length;
  7902. if(lvl==0) {
  7903. while(i<dlen) { var len = Math.min(0xffff, dlen-i);
  7904. putsE(out, pos, (i+len==dlen ? 1 : 0)); pos = UZIP.F._copyExact(data, i, len, out, pos+8); i += len; }
  7905. return pos>>>3;
  7906. }
  7907. var lits = U.lits, strt=U.strt, prev=U.prev, li=0, lc=0, bs=0, ebits=0, c=0, nc=0; // last_item, literal_count, block_start
  7908. if(dlen>2) { nc=UZIP.F._hash(data,0); strt[nc]=0; }
  7909. var nmch=0,nmci=0;
  7910. for(i=0; i<dlen; i++) {
  7911. c = nc;
  7912. //*
  7913. if(i+1<dlen-2) {
  7914. nc = UZIP.F._hash(data, i+1);
  7915. var ii = ((i+1)&0x7fff);
  7916. prev[ii]=strt[nc];
  7917. strt[nc]=ii;
  7918. } //*/
  7919. if(cvrd<=i) {
  7920. if((li>14000 || lc>26697) && (dlen-i)>100) {
  7921. if(cvrd<i) { lits[li]=i-cvrd; li+=2; cvrd=i; }
  7922. pos = UZIP.F._writeBlock(((i==dlen-1) || (cvrd==dlen))?1:0, lits, li, ebits, data,bs,i-bs, out, pos); li=lc=ebits=0; bs=i;
  7923. }
  7924. var mch = 0;
  7925. //if(nmci==i) mch= nmch; else
  7926. if(i<dlen-2) mch = UZIP.F._bestMatch(data, i, prev, c, Math.min(opt[2],dlen-i), opt[3]);
  7927. /*
  7928. if(mch!=0 && opt[4]==1 && (mch>>>16)<opt[1] && i+1<dlen-2) {
  7929. nmch = UZIP.F._bestMatch(data, i+1, prev, nc, opt[2], opt[3]); nmci=i+1;
  7930. //var mch2 = UZIP.F._bestMatch(data, i+2, prev, nnc); //nmci=i+1;
  7931. if((nmch>>>16)>(mch>>>16)) mch=0;
  7932. }//*/
  7933. var len = mch>>>16, dst = mch&0xffff; //if(i-dst<0) throw "e";
  7934. if(mch!=0) {
  7935. var len = mch>>>16, dst = mch&0xffff; //if(i-dst<0) throw "e";
  7936. var lgi = goodIndex(len, U.of0); U.lhst[257+lgi]++;
  7937. var dgi = goodIndex(dst, U.df0); U.dhst[ dgi]++; ebits += U.exb[lgi] + U.dxb[dgi];
  7938. lits[li] = (len<<23)|(i-cvrd); lits[li+1] = (dst<<16)|(lgi<<8)|dgi; li+=2;
  7939. cvrd = i + len;
  7940. }
  7941. else { U.lhst[data[i]]++; }
  7942. lc++;
  7943. }
  7944. }
  7945. if(bs!=i || data.length==0) {
  7946. if(cvrd<i) { lits[li]=i-cvrd; li+=2; cvrd=i; }
  7947. pos = UZIP.F._writeBlock(1, lits, li, ebits, data,bs,i-bs, out, pos); li=0; lc=0; li=lc=ebits=0; bs=i;
  7948. }
  7949. while((pos&7)!=0) pos++;
  7950. return pos>>>3;
  7951. }
  7952. UZIP.F._bestMatch = function(data, i, prev, c, nice, chain) {
  7953. var ci = (i&0x7fff), pi=prev[ci];
  7954. //console.log("----", i);
  7955. var dif = ((ci-pi + (1<<15)) & 0x7fff); if(pi==ci || c!=UZIP.F._hash(data,i-dif)) return 0;
  7956. var tl=0, td=0; // top length, top distance
  7957. var dlim = Math.min(0x7fff, i);
  7958. while(dif<=dlim && --chain!=0 && pi!=ci /*&& c==UZIP.F._hash(data,i-dif)*/) {
  7959. if(tl==0 || (data[i+tl]==data[i+tl-dif])) {
  7960. var cl = UZIP.F._howLong(data, i, dif);
  7961. if(cl>tl) {
  7962. tl=cl; td=dif; if(tl>=nice) break; //*
  7963. if(dif+2<cl) cl = dif+2;
  7964. var maxd = 0; // pi does not point to the start of the word
  7965. for(var j=0; j<cl-2; j++) {
  7966. var ei = (i-dif+j+ (1<<15)) & 0x7fff;
  7967. var li = prev[ei];
  7968. var curd = (ei-li + (1<<15)) & 0x7fff;
  7969. if(curd>maxd) { maxd=curd; pi = ei; }
  7970. } //*/
  7971. }
  7972. }
  7973. ci=pi; pi = prev[ci];
  7974. dif += ((ci-pi + (1<<15)) & 0x7fff);
  7975. }
  7976. return (tl<<16)|td;
  7977. }
  7978. UZIP.F._howLong = function(data, i, dif) {
  7979. if(data[i]!=data[i-dif] || data[i+1]!=data[i+1-dif] || data[i+2]!=data[i+2-dif]) return 0;
  7980. var oi=i, l = Math.min(data.length, i+258); i+=3;
  7981. //while(i+4<l && data[i]==data[i-dif] && data[i+1]==data[i+1-dif] && data[i+2]==data[i+2-dif] && data[i+3]==data[i+3-dif]) i+=4;
  7982. while(i<l && data[i]==data[i-dif]) i++;
  7983. return i-oi;
  7984. }
  7985. UZIP.F._hash = function(data, i) {
  7986. return (((data[i]<<8) | data[i+1])+(data[i+2]<<4))&0xffff;
  7987. //var hash_shift = 0, hash_mask = 255;
  7988. //var h = data[i+1] % 251;
  7989. //h = (((h << 8) + data[i+2]) % 251);
  7990. //h = (((h << 8) + data[i+2]) % 251);
  7991. //h = ((h<<hash_shift) ^ (c) ) & hash_mask;
  7992. //return h | (data[i]<<8);
  7993. //return (data[i] | (data[i+1]<<8));
  7994. }
  7995. //UZIP.___toth = 0;
  7996. UZIP.saved = 0;
  7997. UZIP.F._writeBlock = function(BFINAL, lits, li, ebits, data,o0,l0, out, pos) {
  7998. var U = UZIP.F.U, putsF = UZIP.F._putsF, putsE = UZIP.F._putsE;
  7999. //*
  8000. var T, ML, MD, MH, numl, numd, numh, lset, dset; U.lhst[256]++;
  8001. T = UZIP.F.getTrees(); ML=T[0]; MD=T[1]; MH=T[2]; numl=T[3]; numd=T[4]; numh=T[5]; lset=T[6]; dset=T[7];
  8002. var cstSize = (((pos+3)&7)==0 ? 0 : 8-((pos+3)&7)) + 32 + (l0<<3);
  8003. var fxdSize = ebits + UZIP.F.contSize(U.fltree, U.lhst) + UZIP.F.contSize(U.fdtree, U.dhst);
  8004. var dynSize = ebits + UZIP.F.contSize(U.ltree , U.lhst) + UZIP.F.contSize(U.dtree , U.dhst);
  8005. dynSize += 14 + 3*numh + UZIP.F.contSize(U.itree, U.ihst) + (U.ihst[16]*2 + U.ihst[17]*3 + U.ihst[18]*7);
  8006. for(var j=0; j<286; j++) U.lhst[j]=0; for(var j=0; j<30; j++) U.dhst[j]=0; for(var j=0; j<19; j++) U.ihst[j]=0;
  8007. //*/
  8008. var BTYPE = (cstSize<fxdSize && cstSize<dynSize) ? 0 : ( fxdSize<dynSize ? 1 : 2 );
  8009. putsF(out, pos, BFINAL); putsF(out, pos+1, BTYPE); pos+=3;
  8010. var opos = pos;
  8011. if(BTYPE==0) {
  8012. while((pos&7)!=0) pos++;
  8013. pos = UZIP.F._copyExact(data, o0, l0, out, pos);
  8014. }
  8015. else {
  8016. var ltree, dtree;
  8017. if(BTYPE==1) { ltree=U.fltree; dtree=U.fdtree; }
  8018. if(BTYPE==2) {
  8019. UZIP.F.makeCodes(U.ltree, ML); UZIP.F.revCodes(U.ltree, ML);
  8020. UZIP.F.makeCodes(U.dtree, MD); UZIP.F.revCodes(U.dtree, MD);
  8021. UZIP.F.makeCodes(U.itree, MH); UZIP.F.revCodes(U.itree, MH);
  8022. ltree = U.ltree; dtree = U.dtree;
  8023. putsE(out, pos,numl-257); pos+=5; // 286
  8024. putsE(out, pos,numd- 1); pos+=5; // 30
  8025. putsE(out, pos,numh- 4); pos+=4; // 19
  8026. for(var i=0; i<numh; i++) putsE(out, pos+i*3, U.itree[(U.ordr[i]<<1)+1]); pos+=3* numh;
  8027. pos = UZIP.F._codeTiny(lset, U.itree, out, pos);
  8028. pos = UZIP.F._codeTiny(dset, U.itree, out, pos);
  8029. }
  8030. var off=o0;
  8031. for(var si=0; si<li; si+=2) {
  8032. var qb=lits[si], len=(qb>>>23), end = off+(qb&((1<<23)-1));
  8033. while(off<end) pos = UZIP.F._writeLit(data[off++], ltree, out, pos);
  8034. if(len!=0) {
  8035. var qc = lits[si+1], dst=(qc>>16), lgi=(qc>>8)&255, dgi=(qc&255);
  8036. pos = UZIP.F._writeLit(257+lgi, ltree, out, pos);
  8037. putsE(out, pos, len-U.of0[lgi]); pos+=U.exb[lgi];
  8038. pos = UZIP.F._writeLit(dgi, dtree, out, pos);
  8039. putsF(out, pos, dst-U.df0[dgi]); pos+=U.dxb[dgi]; off+=len;
  8040. }
  8041. }
  8042. pos = UZIP.F._writeLit(256, ltree, out, pos);
  8043. }
  8044. //console.log(pos-opos, fxdSize, dynSize, cstSize);
  8045. return pos;
  8046. }
  8047. UZIP.F._copyExact = function(data,off,len,out,pos) {
  8048. var p8 = (pos>>>3);
  8049. out[p8]=(len); out[p8+1]=(len>>>8); out[p8+2]=255-out[p8]; out[p8+3]=255-out[p8+1]; p8+=4;
  8050. out.set(new Uint8Array(data.buffer, off, len), p8);
  8051. //for(var i=0; i<len; i++) out[p8+i]=data[off+i];
  8052. return pos + ((len+4)<<3);
  8053. }
  8054. /*
  8055. Interesting facts:
  8056. - decompressed block can have bytes, which do not occur in a Huffman tree (copied from the previous block by reference)
  8057. */
  8058. UZIP.F.getTrees = function() {
  8059. var U = UZIP.F.U;
  8060. var ML = UZIP.F._hufTree(U.lhst, U.ltree, 15);
  8061. var MD = UZIP.F._hufTree(U.dhst, U.dtree, 15);
  8062. var lset = [], numl = UZIP.F._lenCodes(U.ltree, lset);
  8063. var dset = [], numd = UZIP.F._lenCodes(U.dtree, dset);
  8064. for(var i=0; i<lset.length; i+=2) U.ihst[lset[i]]++;
  8065. for(var i=0; i<dset.length; i+=2) U.ihst[dset[i]]++;
  8066. var MH = UZIP.F._hufTree(U.ihst, U.itree, 7);
  8067. var numh = 19; while(numh>4 && U.itree[(U.ordr[numh-1]<<1)+1]==0) numh--;
  8068. return [ML, MD, MH, numl, numd, numh, lset, dset];
  8069. }
  8070. UZIP.F.getSecond= function(a) { var b=[]; for(var i=0; i<a.length; i+=2) b.push (a[i+1]); return b; }
  8071. UZIP.F.nonZero = function(a) { var b= ""; for(var i=0; i<a.length; i+=2) if(a[i+1]!=0)b+=(i>>1)+","; return b; }
  8072. UZIP.F.contSize = function(tree, hst) { var s=0; for(var i=0; i<hst.length; i++) s+= hst[i]*tree[(i<<1)+1]; return s; }
  8073. UZIP.F._codeTiny = function(set, tree, out, pos) {
  8074. for(var i=0; i<set.length; i+=2) {
  8075. var l = set[i], rst = set[i+1]; //console.log(l, pos, tree[(l<<1)+1]);
  8076. pos = UZIP.F._writeLit(l, tree, out, pos);
  8077. var rsl = l==16 ? 2 : (l==17 ? 3 : 7);
  8078. if(l>15) { UZIP.F._putsE(out, pos, rst, rsl); pos+=rsl; }
  8079. }
  8080. return pos;
  8081. }
  8082. UZIP.F._lenCodes = function(tree, set) {
  8083. var len=tree.length; while(len!=2 && tree[len-1]==0) len-=2; // when no distances, keep one code with length 0
  8084. for(var i=0; i<len; i+=2) {
  8085. var l = tree[i+1], nxt = (i+3<len ? tree[i+3]:-1), nnxt = (i+5<len ? tree[i+5]:-1), prv = (i==0 ? -1 : tree[i-1]);
  8086. if(l==0 && nxt==l && nnxt==l) {
  8087. var lz = i+5;
  8088. while(lz+2<len && tree[lz+2]==l) lz+=2;
  8089. var zc = Math.min((lz+1-i)>>>1, 138);
  8090. if(zc<11) set.push(17, zc-3);
  8091. else set.push(18, zc-11);
  8092. i += zc*2-2;
  8093. }
  8094. else if(l==prv && nxt==l && nnxt==l) {
  8095. var lz = i+5;
  8096. while(lz+2<len && tree[lz+2]==l) lz+=2;
  8097. var zc = Math.min((lz+1-i)>>>1, 6);
  8098. set.push(16, zc-3);
  8099. i += zc*2-2;
  8100. }
  8101. else set.push(l, 0);
  8102. }
  8103. return len>>>1;
  8104. }
  8105. UZIP.F._hufTree = function(hst, tree, MAXL) {
  8106. var list=[], hl = hst.length, tl=tree.length, i=0;
  8107. for(i=0; i<tl; i+=2) { tree[i]=0; tree[i+1]=0; }
  8108. for(i=0; i<hl; i++) if(hst[i]!=0) list.push({lit:i, f:hst[i]});
  8109. var end = list.length, l2=list.slice(0);
  8110. if(end==0) return 0; // empty histogram (usually for dist)
  8111. if(end==1) { var lit=list[0].lit, l2=lit==0?1:0; tree[(lit<<1)+1]=1; tree[(l2<<1)+1]=1; return 1; }
  8112. list.sort(function(a,b){return a.f-b.f;});
  8113. var a=list[0], b=list[1], i0=0, i1=1, i2=2; list[0]={lit:-1,f:a.f+b.f,l:a,r:b,d:0};
  8114. while(i1!=end-1) {
  8115. if(i0!=i1 && (i2==end || list[i0].f<list[i2].f)) { a=list[i0++]; } else { a=list[i2++]; }
  8116. if(i0!=i1 && (i2==end || list[i0].f<list[i2].f)) { b=list[i0++]; } else { b=list[i2++]; }
  8117. list[i1++]={lit:-1,f:a.f+b.f, l:a,r:b};
  8118. }
  8119. var maxl = UZIP.F.setDepth(list[i1-1], 0);
  8120. if(maxl>MAXL) { UZIP.F.restrictDepth(l2, MAXL, maxl); maxl = MAXL; }
  8121. for(i=0; i<end; i++) tree[(l2[i].lit<<1)+1]=l2[i].d;
  8122. return maxl;
  8123. }
  8124. UZIP.F.setDepth = function(t, d) {
  8125. if(t.lit!=-1) { t.d=d; return d; }
  8126. return Math.max( UZIP.F.setDepth(t.l, d+1), UZIP.F.setDepth(t.r, d+1) );
  8127. }
  8128. UZIP.F.restrictDepth = function(dps, MD, maxl) {
  8129. var i=0, bCost=1<<(maxl-MD), dbt=0;
  8130. dps.sort(function(a,b){return b.d==a.d ? a.f-b.f : b.d-a.d;});
  8131. for(i=0; i<dps.length; i++) if(dps[i].d>MD) { var od=dps[i].d; dps[i].d=MD; dbt+=bCost-(1<<(maxl-od)); } else break;
  8132. dbt = dbt>>>(maxl-MD);
  8133. while(dbt>0) { var od=dps[i].d; if(od<MD) { dps[i].d++; dbt-=(1<<(MD-od-1)); } else i++; }
  8134. for(; i>=0; i--) if(dps[i].d==MD && dbt<0) { dps[i].d--; dbt++; } if(dbt!=0) console.log("debt left");
  8135. }
  8136. UZIP.F._goodIndex = function(v, arr) {
  8137. var i=0; if(arr[i|16]<=v) i|=16; if(arr[i|8]<=v) i|=8; if(arr[i|4]<=v) i|=4; if(arr[i|2]<=v) i|=2; if(arr[i|1]<=v) i|=1; return i;
  8138. }
  8139. UZIP.F._writeLit = function(ch, ltree, out, pos) {
  8140. UZIP.F._putsF(out, pos, ltree[ch<<1]);
  8141. return pos+ltree[(ch<<1)+1];
  8142. }
  8143. UZIP.F.inflate = function(data, buf) {
  8144. var u8=Uint8Array;
  8145. if(data[0]==3 && data[1]==0) return (buf ? buf : new u8(0));
  8146. var F=UZIP.F, bitsF = F._bitsF, bitsE = F._bitsE, decodeTiny = F._decodeTiny, makeCodes = F.makeCodes, codes2map=F.codes2map, get17 = F._get17;
  8147. var U = F.U;
  8148. var noBuf = (buf==null);
  8149. if(noBuf) buf = new u8((data.length>>>2)<<3);
  8150. var BFINAL=0, BTYPE=0, HLIT=0, HDIST=0, HCLEN=0, ML=0, MD=0;
  8151. var off = 0, pos = 0;
  8152. var lmap, dmap;
  8153. while(BFINAL==0) {
  8154. BFINAL = bitsF(data, pos , 1);
  8155. BTYPE = bitsF(data, pos+1, 2); pos+=3;
  8156. //console.log(BFINAL, BTYPE);
  8157. if(BTYPE==0) {
  8158. if((pos&7)!=0) pos+=8-(pos&7);
  8159. var p8 = (pos>>>3)+4, len = data[p8-4]|(data[p8-3]<<8); //console.log(len);//bitsF(data, pos, 16),
  8160. if(noBuf) buf=UZIP.F._check(buf, off+len);
  8161. buf.set(new u8(data.buffer, data.byteOffset+p8, len), off);
  8162. //for(var i=0; i<len; i++) buf[off+i] = data[p8+i];
  8163. //for(var i=0; i<len; i++) if(buf[off+i] != data[p8+i]) throw "e";
  8164. pos = ((p8+len)<<3); off+=len; continue;
  8165. }
  8166. if(noBuf) buf=UZIP.F._check(buf, off+(1<<17)); // really not enough in many cases (but PNG and ZIP provide buffer in advance)
  8167. if(BTYPE==1) { lmap = U.flmap; dmap = U.fdmap; ML = (1<<9)-1; MD = (1<<5)-1; }
  8168. if(BTYPE==2) {
  8169. HLIT = bitsE(data, pos , 5)+257;
  8170. HDIST = bitsE(data, pos+ 5, 5)+ 1;
  8171. HCLEN = bitsE(data, pos+10, 4)+ 4; pos+=14;
  8172. var ppos = pos;
  8173. for(var i=0; i<38; i+=2) { U.itree[i]=0; U.itree[i+1]=0; }
  8174. var tl = 1;
  8175. for(var i=0; i<HCLEN; i++) { var l=bitsE(data, pos+i*3, 3); U.itree[(U.ordr[i]<<1)+1] = l; if(l>tl)tl=l; } pos+=3*HCLEN; //console.log(itree);
  8176. makeCodes(U.itree, tl);
  8177. codes2map(U.itree, tl, U.imap);
  8178. lmap = U.lmap; dmap = U.dmap;
  8179. pos = decodeTiny(U.imap, (1<<tl)-1, HLIT+HDIST, data, pos, U.ttree);
  8180. var mx0 = F._copyOut(U.ttree, 0, HLIT , U.ltree); ML = (1<<mx0)-1;
  8181. var mx1 = F._copyOut(U.ttree, HLIT, HDIST, U.dtree); MD = (1<<mx1)-1;
  8182. //var ml = decodeTiny(U.imap, (1<<tl)-1, HLIT , data, pos, U.ltree); ML = (1<<(ml>>>24))-1; pos+=(ml&0xffffff);
  8183. makeCodes(U.ltree, mx0);
  8184. codes2map(U.ltree, mx0, lmap);
  8185. //var md = decodeTiny(U.imap, (1<<tl)-1, HDIST, data, pos, U.dtree); MD = (1<<(md>>>24))-1; pos+=(md&0xffffff);
  8186. makeCodes(U.dtree, mx1);
  8187. codes2map(U.dtree, mx1, dmap);
  8188. }
  8189. //var ooff=off, opos=pos;
  8190. while(true) {
  8191. var code = lmap[get17(data, pos) & ML]; pos += code&15;
  8192. var lit = code>>>4; //U.lhst[lit]++;
  8193. if((lit>>>8)==0) { buf[off++] = lit; }
  8194. else if(lit==256) { break; }
  8195. else {
  8196. var end = off+lit-254;
  8197. if(lit>264) { var ebs = U.ldef[lit-257]; end = off + (ebs>>>3) + bitsE(data, pos, ebs&7); pos += ebs&7; }
  8198. //UZIP.F.dst[end-off]++;
  8199. var dcode = dmap[get17(data, pos) & MD]; pos += dcode&15;
  8200. var dlit = dcode>>>4;
  8201. var dbs = U.ddef[dlit], dst = (dbs>>>4) + bitsF(data, pos, dbs&15); pos += dbs&15;
  8202. //var o0 = off-dst, stp = Math.min(end-off, dst);
  8203. //if(stp>20) while(off<end) { buf.copyWithin(off, o0, o0+stp); off+=stp; } else
  8204. //if(end-dst<=off) buf.copyWithin(off, off-dst, end-dst); else
  8205. //if(dst==1) buf.fill(buf[off-1], off, end); else
  8206. if(noBuf) buf=UZIP.F._check(buf, off+(1<<17));
  8207. while(off<end) { buf[off]=buf[off++-dst]; buf[off]=buf[off++-dst]; buf[off]=buf[off++-dst]; buf[off]=buf[off++-dst]; }
  8208. off=end;
  8209. //while(off!=end) { buf[off]=buf[off++-dst]; }
  8210. }
  8211. }
  8212. //console.log(off-ooff, (pos-opos)>>>3);
  8213. }
  8214. //console.log(UZIP.F.dst);
  8215. //console.log(tlen, dlen, off-tlen+tcnt);
  8216. return buf.length==off ? buf : buf.slice(0,off);
  8217. }
  8218. UZIP.F._check=function(buf, len) {
  8219. var bl=buf.length; if(len<=bl) return buf;
  8220. var nbuf = new Uint8Array(Math.max(bl<<1,len)); nbuf.set(buf,0);
  8221. //for(var i=0; i<bl; i+=4) { nbuf[i]=buf[i]; nbuf[i+1]=buf[i+1]; nbuf[i+2]=buf[i+2]; nbuf[i+3]=buf[i+3]; }
  8222. return nbuf;
  8223. }
  8224. UZIP.F._decodeTiny = function(lmap, LL, len, data, pos, tree) {
  8225. var bitsE = UZIP.F._bitsE, get17 = UZIP.F._get17;
  8226. var i = 0;
  8227. while(i<len) {
  8228. var code = lmap[get17(data, pos)&LL]; pos+=code&15;
  8229. var lit = code>>>4;
  8230. if(lit<=15) { tree[i]=lit; i++; }
  8231. else {
  8232. var ll = 0, n = 0;
  8233. if(lit==16) {
  8234. n = (3 + bitsE(data, pos, 2)); pos += 2; ll = tree[i-1];
  8235. }
  8236. else if(lit==17) {
  8237. n = (3 + bitsE(data, pos, 3)); pos += 3;
  8238. }
  8239. else if(lit==18) {
  8240. n = (11 + bitsE(data, pos, 7)); pos += 7;
  8241. }
  8242. var ni = i+n;
  8243. while(i<ni) { tree[i]=ll; i++; }
  8244. }
  8245. }
  8246. return pos;
  8247. }
  8248. UZIP.F._copyOut = function(src, off, len, tree) {
  8249. var mx=0, i=0, tl=tree.length>>>1;
  8250. while(i<len) { var v=src[i+off]; tree[(i<<1)]=0; tree[(i<<1)+1]=v; if(v>mx)mx=v; i++; }
  8251. while(i<tl ) { tree[(i<<1)]=0; tree[(i<<1)+1]=0; i++; }
  8252. return mx;
  8253. }
  8254. UZIP.F.makeCodes = function(tree, MAX_BITS) { // code, length
  8255. var U = UZIP.F.U;
  8256. var max_code = tree.length;
  8257. var code, bits, n, i, len;
  8258. var bl_count = U.bl_count; for(var i=0; i<=MAX_BITS; i++) bl_count[i]=0;
  8259. for(i=1; i<max_code; i+=2) bl_count[tree[i]]++;
  8260. var next_code = U.next_code; // smallest code for each length
  8261. code = 0;
  8262. bl_count[0] = 0;
  8263. for (bits = 1; bits <= MAX_BITS; bits++) {
  8264. code = (code + bl_count[bits-1]) << 1;
  8265. next_code[bits] = code;
  8266. }
  8267. for (n = 0; n < max_code; n+=2) {
  8268. len = tree[n+1];
  8269. if (len != 0) {
  8270. tree[n] = next_code[len];
  8271. next_code[len]++;
  8272. }
  8273. }
  8274. }
  8275. UZIP.F.codes2map = function(tree, MAX_BITS, map) {
  8276. var max_code = tree.length;
  8277. var U=UZIP.F.U, r15 = U.rev15;
  8278. for(var i=0; i<max_code; i+=2) if(tree[i+1]!=0) {
  8279. var lit = i>>1;
  8280. var cl = tree[i+1], val = (lit<<4)|cl; // : (0x8000 | (U.of0[lit-257]<<7) | (U.exb[lit-257]<<4) | cl);
  8281. var rest = (MAX_BITS-cl), i0 = tree[i]<<rest, i1 = i0 + (1<<rest);
  8282. //tree[i]=r15[i0]>>>(15-MAX_BITS);
  8283. while(i0!=i1) {
  8284. var p0 = r15[i0]>>>(15-MAX_BITS);
  8285. map[p0]=val; i0++;
  8286. }
  8287. }
  8288. }
  8289. UZIP.F.revCodes = function(tree, MAX_BITS) {
  8290. var r15 = UZIP.F.U.rev15, imb = 15-MAX_BITS;
  8291. for(var i=0; i<tree.length; i+=2) { var i0 = (tree[i]<<(MAX_BITS-tree[i+1])); tree[i] = r15[i0]>>>imb; }
  8292. }
  8293. // used only in deflate
  8294. UZIP.F._putsE= function(dt, pos, val ) { val = val<<(pos&7); var o=(pos>>>3); dt[o]|=val; dt[o+1]|=(val>>>8); }
  8295. UZIP.F._putsF= function(dt, pos, val ) { val = val<<(pos&7); var o=(pos>>>3); dt[o]|=val; dt[o+1]|=(val>>>8); dt[o+2]|=(val>>>16); }
  8296. UZIP.F._bitsE= function(dt, pos, length) { return ((dt[pos>>>3] | (dt[(pos>>>3)+1]<<8) )>>>(pos&7))&((1<<length)-1); }
  8297. UZIP.F._bitsF= function(dt, pos, length) { return ((dt[pos>>>3] | (dt[(pos>>>3)+1]<<8) | (dt[(pos>>>3)+2]<<16))>>>(pos&7))&((1<<length)-1); }
  8298. /*
  8299. UZIP.F._get9 = function(dt, pos) {
  8300. return ((dt[pos>>>3] | (dt[(pos>>>3)+1]<<8))>>>(pos&7))&511;
  8301. } */
  8302. UZIP.F._get17= function(dt, pos) { // return at least 17 meaningful bytes
  8303. return (dt[pos>>>3] | (dt[(pos>>>3)+1]<<8) | (dt[(pos>>>3)+2]<<16) )>>>(pos&7);
  8304. }
  8305. UZIP.F._get25= function(dt, pos) { // return at least 17 meaningful bytes
  8306. return (dt[pos>>>3] | (dt[(pos>>>3)+1]<<8) | (dt[(pos>>>3)+2]<<16) | (dt[(pos>>>3)+3]<<24) )>>>(pos&7);
  8307. }
  8308. UZIP.F.U = function(){
  8309. var u16=Uint16Array, u32=Uint32Array;
  8310. return {
  8311. next_code : new u16(16),
  8312. bl_count : new u16(16),
  8313. ordr : [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ],
  8314. of0 : [3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],
  8315. exb : [0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],
  8316. ldef : new u16(32),
  8317. df0 : [1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 65535, 65535],
  8318. dxb : [0,0,0,0,1,1,2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],
  8319. ddef : new u32(32),
  8320. flmap: new u16( 512), fltree: [],
  8321. fdmap: new u16( 32), fdtree: [],
  8322. lmap : new u16(32768), ltree : [], ttree:[],
  8323. dmap : new u16(32768), dtree : [],
  8324. imap : new u16( 512), itree : [],
  8325. //rev9 : new u16( 512)
  8326. rev15: new u16(1<<15),
  8327. lhst : new u32(286), dhst : new u32( 30), ihst : new u32(19),
  8328. lits : new u32(15000),
  8329. strt : new u16(1<<16),
  8330. prev : new u16(1<<15)
  8331. };
  8332. } ();
  8333. (function(){
  8334. var U = UZIP.F.U;
  8335. var len = 1<<15;
  8336. for(var i=0; i<len; i++) {
  8337. var x = i;
  8338. x = (((x & 0xaaaaaaaa) >>> 1) | ((x & 0x55555555) << 1));
  8339. x = (((x & 0xcccccccc) >>> 2) | ((x & 0x33333333) << 2));
  8340. x = (((x & 0xf0f0f0f0) >>> 4) | ((x & 0x0f0f0f0f) << 4));
  8341. x = (((x & 0xff00ff00) >>> 8) | ((x & 0x00ff00ff) << 8));
  8342. U.rev15[i] = (((x >>> 16) | (x << 16)))>>>17;
  8343. }
  8344. function pushV(tgt, n, sv) { while(n--!=0) tgt.push(0,sv); }
  8345. for(var i=0; i<32; i++) { U.ldef[i]=(U.of0[i]<<3)|U.exb[i]; U.ddef[i]=(U.df0[i]<<4)|U.dxb[i]; }
  8346. pushV(U.fltree, 144, 8); pushV(U.fltree, 255-143, 9); pushV(U.fltree, 279-255, 7); pushV(U.fltree,287-279,8);
  8347. /*
  8348. var i = 0;
  8349. for(; i<=143; i++) U.fltree.push(0,8);
  8350. for(; i<=255; i++) U.fltree.push(0,9);
  8351. for(; i<=279; i++) U.fltree.push(0,7);
  8352. for(; i<=287; i++) U.fltree.push(0,8);
  8353. */
  8354. UZIP.F.makeCodes(U.fltree, 9);
  8355. UZIP.F.codes2map(U.fltree, 9, U.flmap);
  8356. UZIP.F.revCodes (U.fltree, 9)
  8357. pushV(U.fdtree,32,5);
  8358. //for(i=0;i<32; i++) U.fdtree.push(0,5);
  8359. UZIP.F.makeCodes(U.fdtree, 5);
  8360. UZIP.F.codes2map(U.fdtree, 5, U.fdmap);
  8361. UZIP.F.revCodes (U.fdtree, 5)
  8362. pushV(U.itree,19,0); pushV(U.ltree,286,0); pushV(U.dtree,30,0); pushV(U.ttree,320,0);
  8363. /*
  8364. for(var i=0; i< 19; i++) U.itree.push(0,0);
  8365. for(var i=0; i<286; i++) U.ltree.push(0,0);
  8366. for(var i=0; i< 30; i++) U.dtree.push(0,0);
  8367. for(var i=0; i<320; i++) U.ttree.push(0,0);
  8368. */
  8369. })()
  8370. var paper=function(t,e){var i=(t=t||require("./node/self.js")).window,n=t.document,r=new function(){function t(t,e,r,s,a){function u(n,u){"string"==typeof(u=u||(u=o(e,n))&&(u.get?u:u.value))&&"#"===u[0]&&(u=t[u.substring(1)]||u);var c,f="function"==typeof u,d=u,_=a||f&&!u.base?u&&u.get?n in t:t[n]:null;a&&_||(f&&_&&(u.base=_),f&&!1!==s&&(c=n.match(/^([gs]et|is)(([A-Z])(.*))$/))&&(l[c[3].toLowerCase()+c[4]]=c[2]),d&&!f&&d.get&&"function"==typeof d.get&&i.isPlainObject(d)||(d={value:d,writable:!0}),(o(t,n)||{configurable:!0}).configurable&&(d.configurable=!0,d.enumerable=null!=r?r:!c),h(t,n,d))}var l={};if(e){for(var c in e)e.hasOwnProperty(c)&&!n.test(c)&&u(c);for(var c in l){var f=l[c],d=t["set"+f],_=t["get"+f]||d&&t["is"+f];!_||!0!==s&&0!==_.length||u(c,{get:_,set:d})}}return t}function i(){for(var t=0,e=arguments.length;t<e;t++){var i=arguments[t];i&&c(this,i)}return this}var n=/^(statics|enumerable|beans|preserve)$/,r=[],s=r.slice,a=Object.create,o=Object.getOwnPropertyDescriptor,h=Object.defineProperty,u=r.forEach||function(t,e){for(var i=0,n=this.length;i<n;i++)t.call(e,this[i],i,this)},l=function(t,e){for(var i in this)this.hasOwnProperty(i)&&t.call(e,this[i],i,this)},c=Object.assign||function(t){for(var e=1,i=arguments.length;e<i;e++){var n=arguments[e];for(var r in n)n.hasOwnProperty(r)&&(t[r]=n[r])}return t},f=function(t,e,i){if(t){var n=o(t,"length");(n&&"number"==typeof n.value?u:l).call(t,e,i=i||t)}return i};return t(i,{inject:function(e){if(e){var i=!0===e.statics?e:e.statics,n=e.beans,r=e.preserve;i!==e&&t(this.prototype,e,e.enumerable,n,r),t(this,i,null,n,r)}for(var s=1,a=arguments.length;s<a;s++)this.inject(arguments[s]);return this},extend:function(){for(var e,i,n,r=this,s=0,o=arguments.length;s<o&&(!e||!i);s++)n=arguments[s],e=e||n.initialize,i=i||n.prototype;return e=e||function(){r.apply(this,arguments)},i=e.prototype=i||a(this.prototype),h(i,"constructor",{value:e,writable:!0,configurable:!0}),t(e,this),arguments.length&&this.inject.apply(e,arguments),e.base=r,e}}).inject({enumerable:!1,initialize:i,set:i,inject:function(){for(var e=0,i=arguments.length;e<i;e++){var n=arguments[e];n&&t(this,n,n.enumerable,n.beans,n.preserve)}return this},extend:function(){var t=a(this);return t.inject.apply(t,arguments)},each:function(t,e){return f(this,t,e)},clone:function(){return new this.constructor(this)},statics:{set:c,each:f,create:a,define:h,describe:o,clone:function(t){return c(new t.constructor,t)},isPlainObject:function(t){var e=null!=t&&t.constructor;return e&&(e===Object||e===i||"Object"===e.name)},pick:function(t,i){return t!==e?t:i},slice:function(t,e,i){return s.call(t,e,i)}}})};"undefined"!=typeof module&&(module.exports=r),r.inject({enumerable:!1,toString:function(){return null!=this._id?(this._class||"Object")+(this._name?" '"+this._name+"'":" @"+this._id):"{ "+r.each(this,function(t,e){if(!/^_/.test(e)){var i=typeof t;this.push(e+": "+("number"===i?h.instance.number(t):"string"===i?"'"+t+"'":t))}},[]).join(", ")+" }"},getClassName:function(){return this._class||""},importJSON:function(t){return r.importJSON(t,this)},exportJSON:function(t){return r.exportJSON(this,t)},toJSON:function(){return r.serialize(this)},set:function(t,e){return t&&r.filter(this,t,e,this._prioritize),this}},{beans:!1,statics:{exports:{},extend:function t(){var e=t.base.apply(this,arguments),i=e.prototype._class;return i&&!r.exports[i]&&(r.exports[i]=e),e},equals:function(t,e){if(t===e)return!0;if(t&&t.equals)return t.equals(e);if(e&&e.equals)return e.equals(t);if(t&&e&&"object"==typeof t&&"object"==typeof e){if(Array.isArray(t)&&Array.isArray(e)){if((n=t.length)!==e.length)return!1;for(;n--;)if(!r.equals(t[n],e[n]))return!1}else{var i=Object.keys(t),n=i.length;if(n!==Object.keys(e).length)return!1;for(;n--;){var s=i[n];if(!e.hasOwnProperty(s)||!r.equals(t[s],e[s]))return!1}}return!0}return!1},read:function(t,i,n,s){if(this===r){var a=this.peek(t,i);return t.__index++,a}var o=this.prototype,h=o._readIndex,u=i||h&&t.__index||0,l=t.length,c=t[u];if(s=s||l-u,c instanceof this||n&&n.readNull&&null==c&&s<=1)return h&&(t.__index=u+1),c&&n&&n.clone?c.clone():c;if(c=r.create(o),h&&(c.__read=!0),c=c.initialize.apply(c,u>0||u+s<l?r.slice(t,u,u+s):t)||c,h){t.__index=u+c.__read;var f=c.__filtered;f&&(t.__filtered=f,c.__filtered=e),c.__read=e}return c},peek:function(t,e){return t[t.__index=e||t.__index||0]},remain:function(t){return t.length-(t.__index||0)},readList:function(t,e,i,n){for(var r,s=[],a=e||0,o=n?a+n:t.length,h=a;h<o;h++)s.push(Array.isArray(r=t[h])?this.read(r,0,i):this.read(t,h,i,1));return s},readNamed:function(t,i,n,s,a){var o=this.getNamed(t,i),h=o!==e;if(h){var u=t.__filtered;u||((u=t.__filtered=r.create(t[0])).__unfiltered=t[0]),u[i]=e}var l=h?[o]:t;return this.read(l,n,s,a)},getNamed:function(t,i){var n=t[0];if(t._hasObject===e&&(t._hasObject=1===t.length&&r.isPlainObject(n)),t._hasObject)return i?n[i]:t.__filtered||n},hasNamed:function(t,e){return!!this.getNamed(t,e)},filter:function(t,i,n,r){function s(r){if(!(n&&r in n||a&&r in a)){var s=i[r];s!==e&&(t[r]=s)}}var a;if(r){for(var o,h={},u=0,l=r.length;u<l;u++)(o=r[u])in i&&(s(o),h[o]=!0);a=h}return Object.keys(i.__unfiltered||i).forEach(s),t},isPlainValue:function(t,e){return r.isPlainObject(t)||Array.isArray(t)||e&&"string"==typeof t},serialize:function(t,e,i,n){e=e||{};var s,a=!n;if(a&&(e.formatter=new h(e.precision),n={length:0,definitions:{},references:{},add:function(t,e){var i="#"+t._id,n=this.references[i];if(!n){this.length++;var r=e.call(t),s=t._class;s&&r[0]!==s&&r.unshift(s),this.definitions[i]=r,n=this.references[i]=[i]}return n}}),t&&t._serialize){s=t._serialize(e,n);var o=t._class;!o||t._compactSerialize||!a&&i||s[0]===o||s.unshift(o)}else if(Array.isArray(t)){s=[];for(var u=0,l=t.length;u<l;u++)s[u]=r.serialize(t[u],e,i,n)}else if(r.isPlainObject(t)){s={};for(var c=Object.keys(t),u=0,l=c.length;u<l;u++){var f=c[u];s[f]=r.serialize(t[f],e,i,n)}}else s="number"==typeof t?e.formatter.number(t,e.precision):t;return a&&n.length>0?[["dictionary",n.definitions],s]:s},deserialize:function(t,e,i,n,s){var a=t,o=!i,h=o&&t&&t.length&&"dictionary"===t[0][0];if(i=i||{},Array.isArray(t)){var u=t[0],l="dictionary"===u;if(1==t.length&&/^#/.test(u))return i.dictionary[u];a=[];for(var c=(u=r.exports[u])?1:0,f=t.length;c<f;c++)a.push(r.deserialize(t[c],e,i,l,h));if(u){var d=a;e?a=e(u,d,o||s):(a=r.create(u.prototype),u.apply(a,d))}}else if(r.isPlainObject(t)){a={},n&&(i.dictionary=a);for(var _ in t)a[_]=r.deserialize(t[_],e,i)}return h?a[1]:a},exportJSON:function(t,e){var i=r.serialize(t,e);return e&&0==e.asString?i:JSON.stringify(i)},importJSON:function(t,e){return r.deserialize("string"==typeof t?JSON.parse(t):t,function(t,i,n){var s=n&&e&&e.constructor===t,a=s?e:r.create(t.prototype);if(1===i.length&&a instanceof w&&(s||!(a instanceof b))){var o=i[0];r.isPlainObject(o)&&(o.insert=!1)}return(s?a.set:t).apply(a,i),s&&(e=null),a})},splice:function(t,i,n,r){var s=i&&i.length,a=n===e;(n=a?t.length:n)>t.length&&(n=t.length);for(u=0;u<s;u++)i[u]._index=n+u;if(a)return t.push.apply(t,i),[];var o=[n,r];i&&o.push.apply(o,i);for(var h=t.splice.apply(t,o),u=0,l=h.length;u<l;u++)h[u]._index=e;for(var u=n+s,l=t.length;u<l;u++)t[u]._index=u;return h},capitalize:function(t){return t.replace(/\b[a-z]/g,function(t){return t.toUpperCase()})},camelize:function(t){return t.replace(/-(.)/g,function(t,e){return e.toUpperCase()})},hyphenate:function(t){return t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}}});var s={on:function(t,e){if("string"!=typeof t)r.each(t,function(t,e){this.on(e,t)},this);else{var i=this._eventTypes,n=i&&i[t],s=this._callbacks=this._callbacks||{};-1===(s=s[t]=s[t]||[]).indexOf(e)&&(s.push(e),n&&n.install&&1===s.length&&n.install.call(this,t))}return this},off:function(t,e){if("string"==typeof t){var i,n=this._eventTypes,s=n&&n[t],a=this._callbacks&&this._callbacks[t];return a&&(!e||-1!==(i=a.indexOf(e))&&1===a.length?(s&&s.uninstall&&s.uninstall.call(this,t),delete this._callbacks[t]):-1!==i&&a.splice(i,1)),this}r.each(t,function(t,e){this.off(e,t)},this)},once:function(t,e){return this.on(t,function(){e.apply(this,arguments),this.off(t,e)})},emit:function(t,e){var i=this._callbacks&&this._callbacks[t];if(!i)return!1;var n=r.slice(arguments,1),s=e&&e.target&&!e.currentTarget;i=i.slice(),s&&(e.currentTarget=this);for(var a=0,o=i.length;a<o;a++)if(0==i[a].apply(this,n)){e&&e.stop&&e.stop();break}return s&&delete e.currentTarget,!0},responds:function(t){return!(!this._callbacks||!this._callbacks[t])},attach:"#on",detach:"#off",fire:"#emit",_installEvents:function(t){var e=this._eventTypes,i=this._callbacks,n=t?"install":"uninstall";if(e)for(var r in i)if(i[r].length>0){var s=e[r],a=s&&s[n];a&&a.call(this,r)}},statics:{inject:function t(e){var i=e._events;if(i){var n={};r.each(i,function(t,i){var s="string"==typeof t,a=s?t:i,o=r.capitalize(a),h=a.substring(2).toLowerCase();n[h]=s?{}:t,a="_"+a,e["get"+o]=function(){return this[a]},e["set"+o]=function(t){var e=this[a];e&&this.off(h,e),t&&this.on(h,t),this[a]=t}}),e._eventTypes=n}return t.base.apply(this,arguments)}}},a=r.extend({_class:"PaperScope",initialize:function e(){paper=this,this.settings=new r({applyMatrix:!0,insertItems:!0,handleSize:4,hitTolerance:0}),this.project=null,this.projects=[],this.tools=[],this._id=e._id++,e._scopes[this._id]=this;var i=e.prototype;if(!this.support){var n=Q.getContext(1,1)||{};i.support={nativeDash:"setLineDash"in n||"mozDash"in n,nativeBlendModes:tt.nativeModes},Q.release(n)}if(!this.agent){var s=t.navigator.userAgent.toLowerCase(),a=(/(darwin|win|mac|linux|freebsd|sunos)/.exec(s)||[])[0],o="darwin"===a?"mac":a,h=i.agent=i.browser={platform:o};o&&(h[o]=!0),s.replace(/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node)\/?\s*([.\d]+)(?:.*version\/([.\d]+))?(?:.*rv\:v?([.\d]+))?/g,function(t,e,i,n,r){if(!h.chrome){var s="opera"===e?n:/^(node|trident)$/.test(e)?r:i;h.version=s,h.versionNumber=parseFloat(s),e="trident"===e?"msie":e,h.name=e,h[e]=!0}}),h.chrome&&delete h.webkit,h.atom&&delete h.chrome}},version:"0.11.5",getView:function(){var t=this.project;return t&&t._view},getPaper:function(){return this},execute:function(t,e){paper.PaperScript.execute(t,this,e),U.updateFocus()},install:function(t){var e=this;r.each(["project","view","tool"],function(i){r.define(t,i,{configurable:!0,get:function(){return e[i]}})});for(var i in this)!/^_/.test(i)&&this[i]&&(t[i]=this[i])},setup:function(t){return paper=this,this.project=new y(t),this},createCanvas:function(t,e){return Q.getCanvas(t,e)},activate:function(){paper=this},clear:function(){for(var t=this.projects,e=this.tools,i=t.length-1;i>=0;i--)t[i].remove();for(i=e.length-1;i>=0;i--)e[i].remove()},remove:function(){this.clear(),delete a._scopes[this._id]},statics:new function(){function t(t){return t+="Attribute",function(e,i){return e[t](i)||e[t]("data-paper-"+i)}}return{_scopes:{},_id:0,get:function(t){return this._scopes[t]||null},getAttribute:t("get"),hasAttribute:t("has")}}}),o=r.extend(s,{initialize:function(t){this._scope=paper,this._index=this._scope[this._list].push(this)-1,!t&&this._scope[this._reference]||this.activate()},activate:function(){if(!this._scope)return!1;var t=this._scope[this._reference];return t&&t!==this&&t.emit("deactivate"),this._scope[this._reference]=this,this.emit("activate",t),!0},isActive:function(){return this._scope[this._reference]===this},remove:function(){return null!=this._index&&(r.splice(this._scope[this._list],null,this._index,1),this._scope[this._reference]==this&&(this._scope[this._reference]=null),this._scope=null,!0)},getView:function(){return this._scope.getView()}}),h=r.extend({initialize:function(t){this.precision=r.pick(t,5),this.multiplier=Math.pow(10,this.precision)},number:function(t){return this.precision<16?Math.round(t*this.multiplier)/this.multiplier:t},pair:function(t,e,i){return this.number(t)+(i||",")+this.number(e)},point:function(t,e){return this.number(t.x)+(e||",")+this.number(t.y)},size:function(t,e){return this.number(t.width)+(e||",")+this.number(t.height)},rectangle:function(t,e){return this.point(t,e)+(e||",")+this.size(t,e)}});h.instance=new h;var u=new function(){function t(t,e,i){return t<e?e:t>i?i:t}function e(t,e,i){function n(t){var e=134217729*t,i=t-e+e;return[i,t-i]}var r=e*e-t*i,a=e*e+t*i;if(3*s(r)<a){var o=n(t),h=n(e),u=n(i),l=e*e,c=t*i;r=l-c+(h[0]*h[0]-l+2*h[0]*h[1]+h[1]*h[1]-(o[0]*u[0]-c+o[0]*u[1]+o[1]*u[0]+o[1]*u[1]))}return r}function i(){var t=Math.max.apply(Math,arguments);return t&&(t<1e-8||t>1e8)?o(2,-Math.round(h(t))):0}var n=[[.5773502691896257],[0,.7745966692414834],[.33998104358485626,.8611363115940526],[0,.5384693101056831,.906179845938664],[.2386191860831969,.6612093864662645,.932469514203152],[0,.4058451513773972,.7415311855993945,.9491079123427585],[.1834346424956498,.525532409916329,.7966664774136267,.9602898564975363],[0,.3242534234038089,.6133714327005904,.8360311073266358,.9681602395076261],[.14887433898163122,.4333953941292472,.6794095682990244,.8650633666889845,.9739065285171717],[0,.26954315595234496,.5190961292068118,.7301520055740494,.8870625997680953,.978228658146057],[.1252334085114689,.3678314989981802,.5873179542866175,.7699026741943047,.9041172563704749,.9815606342467192],[0,.2304583159551348,.44849275103644687,.6423493394403402,.8015780907333099,.9175983992229779,.9841830547185881],[.10805494870734367,.31911236892788974,.5152486363581541,.6872929048116855,.827201315069765,.9284348836635735,.9862838086968123],[0,.20119409399743451,.3941513470775634,.5709721726085388,.7244177313601701,.8482065834104272,.937273392400706,.9879925180204854],[.09501250983763744,.2816035507792589,.45801677765722737,.6178762444026438,.755404408355003,.8656312023878318,.9445750230732326,.9894009349916499]],r=[[1],[.8888888888888888,.5555555555555556],[.6521451548625461,.34785484513745385],[.5688888888888889,.47862867049936647,.23692688505618908],[.46791393457269104,.3607615730481386,.17132449237917036],[.4179591836734694,.3818300505051189,.27970539148927664,.1294849661688697],[.362683783378362,.31370664587788727,.22238103445337448,.10122853629037626],[.3302393550012598,.31234707704000286,.26061069640293544,.1806481606948574,.08127438836157441],[.29552422471475287,.26926671930999635,.21908636251598204,.1494513491505806,.06667134430868814],[.2729250867779006,.26280454451024665,.23319376459199048,.18629021092773426,.1255803694649046,.05566856711617366],[.24914704581340277,.2334925365383548,.20316742672306592,.16007832854334622,.10693932599531843,.04717533638651183],[.2325515532308739,.22628318026289723,.2078160475368885,.17814598076194574,.13887351021978725,.09212149983772845,.04048400476531588],[.2152638534631578,.2051984637212956,.18553839747793782,.15720316715819355,.12151857068790319,.08015808715976021,.03511946033175186],[.2025782419255613,.19843148532711158,.1861610000155622,.16626920581699392,.13957067792615432,.10715922046717194,.07036604748810812,.03075324199611727],[.1894506104550685,.18260341504492358,.16915651939500254,.14959598881657674,.12462897125553388,.09515851168249279,.062253523938647894,.027152459411754096]],s=Math.abs,a=Math.sqrt,o=Math.pow,h=Math.log2||function(t){return Math.log(t)*Math.LOG2E};return{EPSILON:1e-12,MACHINE_EPSILON:1.12e-16,CURVETIME_EPSILON:1e-8,GEOMETRIC_EPSILON:1e-7,TRIGONOMETRIC_EPSILON:1e-8,KAPPA:4*(a(2)-1)/3,isZero:function(t){return t>=-1e-12&&t<=1e-12},clamp:t,integrate:function(t,e,i,s){for(var a=n[s-2],o=r[s-2],h=.5*(i-e),u=h+e,l=0,c=s+1>>1,f=1&s?o[l++]*t(u):0;l<c;){var d=h*a[l];f+=o[l++]*(t(u+d)+t(u-d))}return h*f},findRoot:function(e,i,n,r,a,o,h){for(var u=0;u<o;u++){var l=e(n),c=l/i(n),f=n-c;if(s(c)<h){n=f;break}l>0?(a=n,n=f<=r?.5*(r+a):f):(r=n,n=f>=a?.5*(r+a):f)}return t(n,r,a)},solveQuadratic:function(n,r,o,h,u,l){var c,f=1/0;if(s(n)<1e-12){if(s(r)<1e-12)return s(o)<1e-12?-1:0;c=-o/r}else{var d=e(n,r*=-.5,o);if(d&&s(d)<1.12e-16){var _=i(s(n),s(r),s(o));_&&(d=e(n*=_,r*=_,o*=_))}if(d>=-1.12e-16){var g=d<0?0:a(d),v=r+(r<0?-g:g);0===v?f=-(c=o/n):(c=v/n,f=o/v)}}var p=0,m=null==u,y=u-1e-12,w=l+1e-12;return isFinite(c)&&(m||c>y&&c<w)&&(h[p++]=m?c:t(c,u,l)),f!==c&&isFinite(f)&&(m||f>y&&f<w)&&(h[p++]=m?f:t(f,u,l)),p},solveCubic:function(e,n,r,h,l,c,f){function d(t){var i=e*(_=t);p=(i+(g=i+n))*_+(v=g*_+r),m=v*_+h}var _,g,v,p,m,y=i(s(e),s(n),s(r),s(h));if(y&&(e*=y,n*=y,r*=y,h*=y),s(e)<1e-12)e=n,g=r,v=h,_=1/0;else if(s(h)<1e-12)g=n,v=r,_=0;else{d(-n/e/3);var w=m/e,x=o(s(w),1/3),b=w<0?-1:1,C=-p/e,S=C>0?1.324717957244746*Math.max(x,a(C)):x,P=_-b*S;if(P!==_){do{d(P),P=0===p?_:_-m/p/(1+1.12e-16)}while(b*P>b*_);s(e)*_*_>s(h/_)&&(g=((v=-h/_)-r)/_)}}var I=u.solveQuadratic(e,g,v,l,c,f),M=null==c;return isFinite(_)&&(0===I||I>0&&_!==l[0]&&_!==l[1])&&(M||_>c-1e-12&&_<f+1e-12)&&(l[I++]=M?_:t(_,c,f)),I}}},l={_id:1,_pools:{},get:function(t){if(t){var e=this._pools[t];return e||(e=this._pools[t]={_id:1}),e._id++}return this._id++}},c=r.extend({_class:"Point",_readIndex:!0,initialize:function(t,e){var i=typeof t,n=this.__read,r=0;if("number"===i){var s="number"==typeof e;this._set(t,s?e:t),n&&(r=s?2:1)}else if("undefined"===i||null===t)this._set(0,0),n&&(r=null===t?1:0);else{var a="string"===i?t.split(/[\s,]+/)||[]:t;r=1,Array.isArray(a)?this._set(+a[0],+(a.length>1?a[1]:a[0])):"x"in a?this._set(a.x||0,a.y||0):"width"in a?this._set(a.width||0,a.height||0):"angle"in a?(this._set(a.length||0,0),this.setAngle(a.angle||0)):(this._set(0,0),r=0)}return n&&(this.__read=r),this},set:"#initialize",_set:function(t,e){return this.x=t,this.y=e,this},equals:function(t){return this===t||t&&(this.x===t.x&&this.y===t.y||Array.isArray(t)&&this.x===t[0]&&this.y===t[1])||!1},clone:function(){return new c(this.x,this.y)},toString:function(){var t=h.instance;return"{ x: "+t.number(this.x)+", y: "+t.number(this.y)+" }"},_serialize:function(t){var e=t.formatter;return[e.number(this.x),e.number(this.y)]},getLength:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setLength:function(t){if(this.isZero()){var e=this._angle||0;this._set(Math.cos(e)*t,Math.sin(e)*t)}else{var i=t/this.getLength();u.isZero(i)&&this.getAngle(),this._set(this.x*i,this.y*i)}},getAngle:function(){return 180*this.getAngleInRadians.apply(this,arguments)/Math.PI},setAngle:function(t){this.setAngleInRadians.call(this,t*Math.PI/180)},getAngleInDegrees:"#getAngle",setAngleInDegrees:"#setAngle",getAngleInRadians:function(){if(arguments.length){var t=c.read(arguments),e=this.getLength()*t.getLength();if(u.isZero(e))return NaN;var i=this.dot(t)/e;return Math.acos(i<-1?-1:i>1?1:i)}return this.isZero()?this._angle||0:this._angle=Math.atan2(this.y,this.x)},setAngleInRadians:function(t){if(this._angle=t,!this.isZero()){var e=this.getLength();this._set(Math.cos(t)*e,Math.sin(t)*e)}},getQuadrant:function(){return this.x>=0?this.y>=0?1:4:this.y>=0?2:3}},{beans:!1,getDirectedAngle:function(){var t=c.read(arguments);return 180*Math.atan2(this.cross(t),this.dot(t))/Math.PI},getDistance:function(){var t=c.read(arguments),e=t.x-this.x,i=t.y-this.y,n=e*e+i*i;return r.read(arguments)?n:Math.sqrt(n)},normalize:function(t){t===e&&(t=1);var i=this.getLength(),n=0!==i?t/i:0,r=new c(this.x*n,this.y*n);return n>=0&&(r._angle=this._angle),r},rotate:function(t,e){if(0===t)return this.clone();t=t*Math.PI/180;var i=e?this.subtract(e):this,n=Math.sin(t),r=Math.cos(t);return i=new c(i.x*r-i.y*n,i.x*n+i.y*r),e?i.add(e):i},transform:function(t){return t?t._transformPoint(this):this},add:function(){var t=c.read(arguments);return new c(this.x+t.x,this.y+t.y)},subtract:function(){var t=c.read(arguments);return new c(this.x-t.x,this.y-t.y)},multiply:function(){var t=c.read(arguments);return new c(this.x*t.x,this.y*t.y)},divide:function(){var t=c.read(arguments);return new c(this.x/t.x,this.y/t.y)},modulo:function(){var t=c.read(arguments);return new c(this.x%t.x,this.y%t.y)},negate:function(){return new c(-this.x,-this.y)},isInside:function(){return g.read(arguments).contains(this)},isClose:function(){var t=c.read(arguments),e=r.read(arguments);return this.getDistance(t)<=e},isCollinear:function(){var t=c.read(arguments);return c.isCollinear(this.x,this.y,t.x,t.y)},isColinear:"#isCollinear",isOrthogonal:function(){var t=c.read(arguments);return c.isOrthogonal(this.x,this.y,t.x,t.y)},isZero:function(){var t=u.isZero;return t(this.x)&&t(this.y)},isNaN:function(){return isNaN(this.x)||isNaN(this.y)},isInQuadrant:function(t){return this.x*(t>1&&t<4?-1:1)>=0&&this.y*(t>2?-1:1)>=0},dot:function(){var t=c.read(arguments);return this.x*t.x+this.y*t.y},cross:function(){var t=c.read(arguments);return this.x*t.y-this.y*t.x},project:function(){var t=c.read(arguments),e=t.isZero()?0:this.dot(t)/t.dot(t);return new c(t.x*e,t.y*e)},statics:{min:function(){var t=c.read(arguments),e=c.read(arguments);return new c(Math.min(t.x,e.x),Math.min(t.y,e.y))},max:function(){var t=c.read(arguments),e=c.read(arguments);return new c(Math.max(t.x,e.x),Math.max(t.y,e.y))},random:function(){return new c(Math.random(),Math.random())},isCollinear:function(t,e,i,n){return Math.abs(t*n-e*i)<=1e-8*Math.sqrt((t*t+e*e)*(i*i+n*n))},isOrthogonal:function(t,e,i,n){return Math.abs(t*i+e*n)<=1e-8*Math.sqrt((t*t+e*e)*(i*i+n*n))}}},r.each(["round","ceil","floor","abs"],function(t){var e=Math[t];this[t]=function(){return new c(e(this.x),e(this.y))}},{})),f=c.extend({initialize:function(t,e,i,n){this._x=t,this._y=e,this._owner=i,this._setter=n},_set:function(t,e,i){return this._x=t,this._y=e,i||this._owner[this._setter](this),this},getX:function(){return this._x},setX:function(t){this._x=t,this._owner[this._setter](this)},getY:function(){return this._y},setY:function(t){this._y=t,this._owner[this._setter](this)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(t){this._owner._changeSelection(this._getSelection(),t)},_getSelection:function(){return"setPosition"===this._setter?4:0}}),d=r.extend({_class:"Size",_readIndex:!0,initialize:function(t,e){var i=typeof t,n=this.__read,r=0;if("number"===i){var s="number"==typeof e;this._set(t,s?e:t),n&&(r=s?2:1)}else if("undefined"===i||null===t)this._set(0,0),n&&(r=null===t?1:0);else{var a="string"===i?t.split(/[\s,]+/)||[]:t;r=1,Array.isArray(a)?this._set(+a[0],+(a.length>1?a[1]:a[0])):"width"in a?this._set(a.width||0,a.height||0):"x"in a?this._set(a.x||0,a.y||0):(this._set(0,0),r=0)}return n&&(this.__read=r),this},set:"#initialize",_set:function(t,e){return this.width=t,this.height=e,this},equals:function(t){return t===this||t&&(this.width===t.width&&this.height===t.height||Array.isArray(t)&&this.width===t[0]&&this.height===t[1])||!1},clone:function(){return new d(this.width,this.height)},toString:function(){var t=h.instance;return"{ width: "+t.number(this.width)+", height: "+t.number(this.height)+" }"},_serialize:function(t){var e=t.formatter;return[e.number(this.width),e.number(this.height)]},add:function(){var t=d.read(arguments);return new d(this.width+t.width,this.height+t.height)},subtract:function(){var t=d.read(arguments);return new d(this.width-t.width,this.height-t.height)},multiply:function(){var t=d.read(arguments);return new d(this.width*t.width,this.height*t.height)},divide:function(){var t=d.read(arguments);return new d(this.width/t.width,this.height/t.height)},modulo:function(){var t=d.read(arguments);return new d(this.width%t.width,this.height%t.height)},negate:function(){return new d(-this.width,-this.height)},isZero:function(){var t=u.isZero;return t(this.width)&&t(this.height)},isNaN:function(){return isNaN(this.width)||isNaN(this.height)},statics:{min:function(t,e){return new d(Math.min(t.width,e.width),Math.min(t.height,e.height))},max:function(t,e){return new d(Math.max(t.width,e.width),Math.max(t.height,e.height))},random:function(){return new d(Math.random(),Math.random())}}},r.each(["round","ceil","floor","abs"],function(t){var e=Math[t];this[t]=function(){return new d(e(this.width),e(this.height))}},{})),_=d.extend({initialize:function(t,e,i,n){this._width=t,this._height=e,this._owner=i,this._setter=n},_set:function(t,e,i){return this._width=t,this._height=e,i||this._owner[this._setter](this),this},getWidth:function(){return this._width},setWidth:function(t){this._width=t,this._owner[this._setter](this)},getHeight:function(){return this._height},setHeight:function(t){this._height=t,this._owner[this._setter](this)}}),g=r.extend({_class:"Rectangle",_readIndex:!0,beans:!0,initialize:function(t,i,n,s){var a,o=typeof t;if("number"===o?(this._set(t,i,n,s),a=4):"undefined"===o||null===t?(this._set(0,0,0,0),a=null===t?1:0):1===arguments.length&&(Array.isArray(t)?(this._set.apply(this,t),a=1):t.x!==e||t.width!==e?(this._set(t.x||0,t.y||0,t.width||0,t.height||0),a=1):t.from===e&&t.to===e&&(this._set(0,0,0,0),r.filter(this,t),a=1)),a===e){var h,u,l=c.readNamed(arguments,"from"),f=r.peek(arguments),_=l.x,g=l.y;if(f&&f.x!==e||r.hasNamed(arguments,"to")){var v=c.readNamed(arguments,"to");h=v.x-_,u=v.y-g,h<0&&(_=v.x,h=-h),u<0&&(g=v.y,u=-u)}else{var p=d.read(arguments);h=p.width,u=p.height}this._set(_,g,h,u),a=arguments.__index;var m=arguments.__filtered;m&&(this.__filtered=m)}return this.__read&&(this.__read=a),this},set:"#initialize",_set:function(t,e,i,n){return this.x=t,this.y=e,this.width=i,this.height=n,this},clone:function(){return new g(this.x,this.y,this.width,this.height)},equals:function(t){var e=r.isPlainValue(t)?g.read(arguments):t;return e===this||e&&this.x===e.x&&this.y===e.y&&this.width===e.width&&this.height===e.height||!1},toString:function(){var t=h.instance;return"{ x: "+t.number(this.x)+", y: "+t.number(this.y)+", width: "+t.number(this.width)+", height: "+t.number(this.height)+" }"},_serialize:function(t){var e=t.formatter;return[e.number(this.x),e.number(this.y),e.number(this.width),e.number(this.height)]},getPoint:function(t){return new(t?c:f)(this.x,this.y,this,"setPoint")},setPoint:function(){var t=c.read(arguments);this.x=t.x,this.y=t.y},getSize:function(t){return new(t?d:_)(this.width,this.height,this,"setSize")},_fw:1,_fh:1,setSize:function(){var t=d.read(arguments),e=this._sx,i=this._sy,n=t.width,r=t.height;e&&(this.x+=(this.width-n)*e),i&&(this.y+=(this.height-r)*i),this.width=n,this.height=r,this._fw=this._fh=1},getLeft:function(){return this.x},setLeft:function(t){if(!this._fw){var e=t-this.x;this.width-=.5===this._sx?2*e:e}this.x=t,this._sx=this._fw=0},getTop:function(){return this.y},setTop:function(t){if(!this._fh){var e=t-this.y;this.height-=.5===this._sy?2*e:e}this.y=t,this._sy=this._fh=0},getRight:function(){return this.x+this.width},setRight:function(t){if(!this._fw){var e=t-this.x;this.width=.5===this._sx?2*e:e}this.x=t-this.width,this._sx=1,this._fw=0},getBottom:function(){return this.y+this.height},setBottom:function(t){if(!this._fh){var e=t-this.y;this.height=.5===this._sy?2*e:e}this.y=t-this.height,this._sy=1,this._fh=0},getCenterX:function(){return this.x+this.width/2},setCenterX:function(t){this._fw||.5===this._sx?this.x=t-this.width/2:(this._sx&&(this.x+=2*(t-this.x)*this._sx),this.width=2*(t-this.x)),this._sx=.5,this._fw=0},getCenterY:function(){return this.y+this.height/2},setCenterY:function(t){this._fh||.5===this._sy?this.y=t-this.height/2:(this._sy&&(this.y+=2*(t-this.y)*this._sy),this.height=2*(t-this.y)),this._sy=.5,this._fh=0},getCenter:function(t){return new(t?c:f)(this.getCenterX(),this.getCenterY(),this,"setCenter")},setCenter:function(){var t=c.read(arguments);return this.setCenterX(t.x),this.setCenterY(t.y),this},getArea:function(){return this.width*this.height},isEmpty:function(){return 0===this.width||0===this.height},contains:function(t){return t&&t.width!==e||4===(Array.isArray(t)?t:arguments).length?this._containsRectangle(g.read(arguments)):this._containsPoint(c.read(arguments))},_containsPoint:function(t){var e=t.x,i=t.y;return e>=this.x&&i>=this.y&&e<=this.x+this.width&&i<=this.y+this.height},_containsRectangle:function(t){var e=t.x,i=t.y;return e>=this.x&&i>=this.y&&e+t.width<=this.x+this.width&&i+t.height<=this.y+this.height},intersects:function(){var t=g.read(arguments),e=r.read(arguments)||0;return t.x+t.width>this.x-e&&t.y+t.height>this.y-e&&t.x<this.x+this.width+e&&t.y<this.y+this.height+e},intersect:function(){var t=g.read(arguments),e=Math.max(this.x,t.x),i=Math.max(this.y,t.y),n=Math.min(this.x+this.width,t.x+t.width),r=Math.min(this.y+this.height,t.y+t.height);return new g(e,i,n-e,r-i)},unite:function(){var t=g.read(arguments),e=Math.min(this.x,t.x),i=Math.min(this.y,t.y),n=Math.max(this.x+this.width,t.x+t.width),r=Math.max(this.y+this.height,t.y+t.height);return new g(e,i,n-e,r-i)},include:function(){var t=c.read(arguments),e=Math.min(this.x,t.x),i=Math.min(this.y,t.y),n=Math.max(this.x+this.width,t.x),r=Math.max(this.y+this.height,t.y);return new g(e,i,n-e,r-i)},expand:function(){var t=d.read(arguments),e=t.width,i=t.height;return new g(this.x-e/2,this.y-i/2,this.width+e,this.height+i)},scale:function(t,i){return this.expand(this.width*t-this.width,this.height*(i===e?t:i)-this.height)}},r.each([["Top","Left"],["Top","Right"],["Bottom","Left"],["Bottom","Right"],["Left","Center"],["Top","Center"],["Right","Center"],["Bottom","Center"]],function(t,e){var i=t.join(""),n=/^[RL]/.test(i);e>=4&&(t[1]+=n?"Y":"X");var r=t[n?0:1],s=t[n?1:0],a="get"+r,o="get"+s,h="set"+r,u="set"+s,l="set"+i;this["get"+i]=function(t){return new(t?c:f)(this[a](),this[o](),this,l)},this[l]=function(){var t=c.read(arguments);this[h](t.x),this[u](t.y)}},{beans:!0})),v=g.extend({initialize:function(t,e,i,n,r,s){this._set(t,e,i,n,!0),this._owner=r,this._setter=s},_set:function(t,e,i,n,r){return this._x=t,this._y=e,this._width=i,this._height=n,r||this._owner[this._setter](this),this}},new function(){var t=g.prototype;return r.each(["x","y","width","height"],function(t){var e=r.capitalize(t),i="_"+t;this["get"+e]=function(){return this[i]},this["set"+e]=function(t){this[i]=t,this._dontNotify||this._owner[this._setter](this)}},r.each(["Point","Size","Center","Left","Top","Right","Bottom","CenterX","CenterY","TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],function(e){var i="set"+e;this[i]=function(){this._dontNotify=!0,t[i].apply(this,arguments),this._dontNotify=!1,this._owner[this._setter](this)}},{isSelected:function(){return!!(2&this._owner._selection)},setSelected:function(t){var e=this._owner;e._changeSelection&&e._changeSelection(2,t)}}))}),p=r.extend({_class:"Matrix",initialize:function t(e,i){var n=arguments.length,r=!0;if(n>=6?this._set.apply(this,arguments):1===n||2===n?e instanceof t?this._set(e._a,e._b,e._c,e._d,e._tx,e._ty,i):Array.isArray(e)?this._set.apply(this,i?e.concat([i]):e):r=!1:n?r=!1:this.reset(),!r)throw new Error("Unsupported matrix parameters");return this},set:"#initialize",_set:function(t,e,i,n,r,s,a){return this._a=t,this._b=e,this._c=i,this._d=n,this._tx=r,this._ty=s,a||this._changed(),this},_serialize:function(t,e){return r.serialize(this.getValues(),t,!0,e)},_changed:function(){var t=this._owner;t&&(t._applyMatrix?t.transform(null,!0):t._changed(9))},clone:function(){return new p(this._a,this._b,this._c,this._d,this._tx,this._ty)},equals:function(t){return t===this||t&&this._a===t._a&&this._b===t._b&&this._c===t._c&&this._d===t._d&&this._tx===t._tx&&this._ty===t._ty},toString:function(){var t=h.instance;return"[["+[t.number(this._a),t.number(this._c),t.number(this._tx)].join(", ")+"], ["+[t.number(this._b),t.number(this._d),t.number(this._ty)].join(", ")+"]]"},reset:function(t){return this._a=this._d=1,this._b=this._c=this._tx=this._ty=0,t||this._changed(),this},apply:function(t,e){var i=this._owner;return!!i&&(i.transform(null,!0,r.pick(t,!0),e),this.isIdentity())},translate:function(){var t=c.read(arguments),e=t.x,i=t.y;return this._tx+=e*this._a+i*this._c,this._ty+=e*this._b+i*this._d,this._changed(),this},scale:function(){var t=c.read(arguments),e=c.read(arguments,0,{readNull:!0});return e&&this.translate(e),this._a*=t.x,this._b*=t.x,this._c*=t.y,this._d*=t.y,e&&this.translate(e.negate()),this._changed(),this},rotate:function(t){t*=Math.PI/180;var e=c.read(arguments,1),i=e.x,n=e.y,r=Math.cos(t),s=Math.sin(t),a=i-i*r+n*s,o=n-i*s-n*r,h=this._a,u=this._b,l=this._c,f=this._d;return this._a=r*h+s*l,this._b=r*u+s*f,this._c=-s*h+r*l,this._d=-s*u+r*f,this._tx+=a*h+o*l,this._ty+=a*u+o*f,this._changed(),this},shear:function(){var t=c.read(arguments),e=c.read(arguments,0,{readNull:!0});e&&this.translate(e);var i=this._a,n=this._b;return this._a+=t.y*this._c,this._b+=t.y*this._d,this._c+=t.x*i,this._d+=t.x*n,e&&this.translate(e.negate()),this._changed(),this},skew:function(){var t=c.read(arguments),e=c.read(arguments,0,{readNull:!0}),i=Math.PI/180,n=new c(Math.tan(t.x*i),Math.tan(t.y*i));return this.shear(n,e)},append:function(t,e){if(t){var i=this._a,n=this._b,r=this._c,s=this._d,a=t._a,o=t._c,h=t._b,u=t._d,l=t._tx,c=t._ty;this._a=a*i+h*r,this._c=o*i+u*r,this._b=a*n+h*s,this._d=o*n+u*s,this._tx+=l*i+c*r,this._ty+=l*n+c*s,e||this._changed()}return this},prepend:function(t,e){if(t){var i=this._a,n=this._b,r=this._c,s=this._d,a=this._tx,o=this._ty,h=t._a,u=t._c,l=t._b,c=t._d,f=t._tx,d=t._ty;this._a=h*i+u*n,this._c=h*r+u*s,this._b=l*i+c*n,this._d=l*r+c*s,this._tx=h*a+u*o+f,this._ty=l*a+c*o+d,e||this._changed()}return this},appended:function(t){return this.clone().append(t)},prepended:function(t){return this.clone().prepend(t)},invert:function(){var t=this._a,e=this._b,i=this._c,n=this._d,r=this._tx,s=this._ty,a=t*n-e*i,o=null;return a&&!isNaN(a)&&isFinite(r)&&isFinite(s)&&(this._a=n/a,this._b=-e/a,this._c=-i/a,this._d=t/a,this._tx=(i*s-n*r)/a,this._ty=(e*r-t*s)/a,o=this),o},inverted:function(){return this.clone().invert()},concatenate:"#append",preConcatenate:"#prepend",chain:"#appended",_shiftless:function(){return new p(this._a,this._b,this._c,this._d,0,0)},_orNullIfIdentity:function(){return this.isIdentity()?null:this},isIdentity:function(){return 1===this._a&&0===this._b&&0===this._c&&1===this._d&&0===this._tx&&0===this._ty},isInvertible:function(){var t=this._a*this._d-this._c*this._b;return t&&!isNaN(t)&&isFinite(this._tx)&&isFinite(this._ty)},isSingular:function(){return!this.isInvertible()},transform:function(t,e,i){return arguments.length<3?this._transformPoint(c.read(arguments)):this._transformCoordinates(t,e,i)},_transformPoint:function(t,e,i){var n=t.x,r=t.y;return e||(e=new c),e._set(n*this._a+r*this._c+this._tx,n*this._b+r*this._d+this._ty,i)},_transformCoordinates:function(t,e,i){for(var n=0,r=2*i;n<r;n+=2){var s=t[n],a=t[n+1];e[n]=s*this._a+a*this._c+this._tx,e[n+1]=s*this._b+a*this._d+this._ty}return e},_transformCorners:function(t){var e=t.x,i=t.y,n=e+t.width,r=i+t.height,s=[e,i,n,i,n,r,e,r];return this._transformCoordinates(s,s,4)},_transformBounds:function(t,e,i){for(var n=this._transformCorners(t),r=n.slice(0,2),s=r.slice(),a=2;a<8;a++){var o=n[a],h=1&a;o<r[h]?r[h]=o:o>s[h]&&(s[h]=o)}return e||(e=new g),e._set(r[0],r[1],s[0]-r[0],s[1]-r[1],i)},inverseTransform:function(){return this._inverseTransform(c.read(arguments))},_inverseTransform:function(t,e,i){var n=this._a,r=this._b,s=this._c,a=this._d,o=this._tx,h=this._ty,u=n*a-r*s,l=null;if(u&&!isNaN(u)&&isFinite(o)&&isFinite(h)){var f=t.x-this._tx,d=t.y-this._ty;e||(e=new c),l=e._set((f*a-d*s)/u,(d*n-f*r)/u,i)}return l},decompose:function(){var t,e,i,n=this._a,r=this._b,s=this._c,a=this._d,o=n*a-r*s,h=Math.sqrt,u=Math.atan2,l=180/Math.PI;if(0!==n||0!==r){var f=h(n*n+r*r);t=Math.acos(n/f)*(r>0?1:-1),e=[f,o/f],i=[u(n*s+r*a,f*f),0]}else if(0!==s||0!==a){var d=h(s*s+a*a);t=Math.asin(s/d)*(a>0?1:-1),e=[o/d,d],i=[0,u(n*s+r*a,d*d)]}else t=0,i=e=[0,0];return{translation:this.getTranslation(),rotation:t*l,scaling:new c(e),skewing:new c(i[0]*l,i[1]*l)}},getValues:function(){return[this._a,this._b,this._c,this._d,this._tx,this._ty]},getTranslation:function(){return new c(this._tx,this._ty)},getScaling:function(){return(this.decompose()||{}).scaling},getRotation:function(){return(this.decompose()||{}).rotation},applyToContext:function(t){this.isIdentity()||t.transform(this._a,this._b,this._c,this._d,this._tx,this._ty)}},r.each(["a","b","c","d","tx","ty"],function(t){var e=r.capitalize(t),i="_"+t;this["get"+e]=function(){return this[i]},this["set"+e]=function(t){this[i]=t,this._changed()}},{})),m=r.extend({_class:"Line",initialize:function(t,e,i,n,r){var s=!1;arguments.length>=4?(this._px=t,this._py=e,this._vx=i,this._vy=n,s=r):(this._px=t.x,this._py=t.y,this._vx=e.x,this._vy=e.y,s=i),s||(this._vx-=this._px,this._vy-=this._py)},getPoint:function(){return new c(this._px,this._py)},getVector:function(){return new c(this._vx,this._vy)},getLength:function(){return this.getVector().getLength()},intersect:function(t,e){return m.intersect(this._px,this._py,this._vx,this._vy,t._px,t._py,t._vx,t._vy,!0,e)},getSide:function(t,e){return m.getSide(this._px,this._py,this._vx,this._vy,t.x,t.y,!0,e)},getDistance:function(t){return Math.abs(this.getSignedDistance(t))},getSignedDistance:function(t){return m.getSignedDistance(this._px,this._py,this._vx,this._vy,t.x,t.y,!0)},isCollinear:function(t){return c.isCollinear(this._vx,this._vy,t._vx,t._vy)},isOrthogonal:function(t){return c.isOrthogonal(this._vx,this._vy,t._vx,t._vy)},statics:{intersect:function(t,e,i,n,r,s,a,o,h,l){h||(i-=t,n-=e,a-=r,o-=s);var f=i*o-n*a;if(!u.isZero(f)){var d=t-r,_=e-s,g=(a*_-o*d)/f,v=(i*_-n*d)/f;if(l||-1e-12<g&&g<1+1e-12&&-1e-12<v&&v<1+1e-12)return l||(g=g<=0?0:g>=1?1:g),new c(t+g*i,e+g*n)}},getSide:function(t,e,i,n,r,s,a,o){a||(i-=t,n-=e);var h=r-t,l=h*n-(s-e)*i;return!o&&u.isZero(l)&&(l=(h*i+h*i)/(i*i+n*n))>=0&&l<=1&&(l=0),l<0?-1:l>0?1:0},getSignedDistance:function(t,e,i,n,r,s,a){return a||(i-=t,n-=e),0===i?n>0?r-t:t-r:0===n?i<0?s-e:e-s:((r-t)*n-(s-e)*i)/Math.sqrt(i*i+n*n)},getDistance:function(t,e,i,n,r,s,a){return Math.abs(m.getSignedDistance(t,e,i,n,r,s,a))}}}),y=o.extend({_class:"Project",_list:"projects",_reference:"project",_compactSerialize:!0,initialize:function(t){o.call(this,!0),this._children=[],this._namedChildren={},this._activeLayer=null,this._currentStyle=new V(null,null,this),this._view=U.create(this,t||Q.getCanvas(1,1)),this._selectionItems={},this._selectionCount=0,this._updateVersion=0},_serialize:function(t,e){return r.serialize(this._children,t,!0,e)},_changed:function(t,e){if(1&t){var i=this._view;i&&(i._needsUpdate=!0,!i._requested&&i._autoUpdate&&i.requestUpdate())}var n=this._changes;if(n&&e){var r=this._changesById,s=e._id,a=r[s];a?a.flags|=t:n.push(r[s]={item:e,flags:t})}},clear:function(){for(var t=this._children,e=t.length-1;e>=0;e--)t[e].remove()},isEmpty:function(){return!this._children.length},remove:function t(){return!!t.base.call(this)&&(this._view&&this._view.remove(),!0)},getView:function(){return this._view},getCurrentStyle:function(){return this._currentStyle},setCurrentStyle:function(t){this._currentStyle.set(t)},getIndex:function(){return this._index},getOptions:function(){return this._scope.settings},getLayers:function(){return this._children},getActiveLayer:function(){return this._activeLayer||new b({project:this,insert:!0})},getSymbolDefinitions:function(){var t=[],e={};return this.getItems({class:P,match:function(i){var n=i._definition,r=n._id;return e[r]||(e[r]=!0,t.push(n)),!1}}),t},getSymbols:"getSymbolDefinitions",getSelectedItems:function(){var t=this._selectionItems,e=[];for(var i in t){var n=t[i],r=n._selection;1&r&&n.isInserted()?e.push(n):r||this._updateSelection(n)}return e},_updateSelection:function(t){var e=t._id,i=this._selectionItems;t._selection?i[e]!==t&&(this._selectionCount++,i[e]=t):i[e]===t&&(this._selectionCount--,delete i[e])},selectAll:function(){for(var t=this._children,e=0,i=t.length;e<i;e++)t[e].setFullySelected(!0)},deselectAll:function(){var t=this._selectionItems;for(var e in t)t[e].setFullySelected(!1)},addLayer:function(t){return this.insertLayer(e,t)},insertLayer:function(t,e){if(e instanceof b){e._remove(!1,!0),r.splice(this._children,[e],t,0),e._setProject(this,!0);var i=e._name;i&&e.setName(i),this._changes&&e._changed(5),this._activeLayer||(this._activeLayer=e)}else e=null;return e},_insertItem:function(t,i,n){return i=this.insertLayer(t,i)||(this._activeLayer||this._insertItem(e,new b(w.NO_INSERT),!0)).insertChild(t,i),n&&i.activate&&i.activate(),i},getItems:function(t){return w._getItems(this,t)},getItem:function(t){return w._getItems(this,t,null,null,!0)[0]||null},importJSON:function(t){this.activate();var e=this._activeLayer;return r.importJSON(t,e&&e.isEmpty()&&e)},removeOn:function(t){var e=this._removeSets;if(e){"mouseup"===t&&(e.mousedrag=null);var i=e[t];if(i){for(var n in i){var r=i[n];for(var s in e){var a=e[s];a&&a!=i&&delete a[r._id]}r.remove()}e[t]=null}}},draw:function(t,e,i){this._updateVersion++,t.save(),e.applyToContext(t);for(var n=this._children,s=new r({offset:new c(0,0),pixelRatio:i,viewMatrix:e.isIdentity()?null:e,matrices:[new p],updateMatrix:!0}),a=0,o=n.length;a<o;a++)n[a].draw(t,s);if(t.restore(),this._selectionCount>0){t.save(),t.strokeWidth=1;var h=this._selectionItems,u=this._scope.settings.handleSize,l=this._updateVersion;for(var f in h)h[f]._drawSelection(t,e,u,h,l);t.restore()}}}),w=r.extend(s,{statics:{extend:function t(e){return e._serializeFields&&(e._serializeFields=r.set({},this.prototype._serializeFields,e._serializeFields)),t.base.apply(this,arguments)},NO_INSERT:{insert:!1}},_class:"Item",_name:null,_applyMatrix:!0,_canApplyMatrix:!0,_canScaleStroke:!1,_pivot:null,_visible:!0,_blendMode:"normal",_opacity:1,_locked:!1,_guide:!1,_clipMask:!1,_selection:0,_selectBounds:!0,_selectChildren:!1,_serializeFields:{name:null,applyMatrix:null,matrix:new p,pivot:null,visible:!0,blendMode:"normal",opacity:1,locked:!1,guide:!1,clipMask:!1,selected:!1,data:{}},_prioritize:["applyMatrix"]},new function(){var t=["onMouseDown","onMouseUp","onMouseDrag","onClick","onDoubleClick","onMouseMove","onMouseEnter","onMouseLeave"];return r.each(t,function(t){this._events[t]={install:function(t){this.getView()._countItemEvent(t,1)},uninstall:function(t){this.getView()._countItemEvent(t,-1)}}},{_events:{onFrame:{install:function(){this.getView()._animateItem(this,!0)},uninstall:function(){this.getView()._animateItem(this,!1)}},onLoad:{},onError:{}},statics:{_itemHandlers:t}})},{initialize:function(){},_initialize:function(t,i){var n=t&&r.isPlainObject(t),s=n&&!0===t.internal,a=this._matrix=new p,o=n&&t.project||paper.project,h=paper.settings;return this._id=s?null:l.get(),this._parent=this._index=null,this._applyMatrix=this._canApplyMatrix&&h.applyMatrix,i&&a.translate(i),a._owner=this,this._style=new V(o._currentStyle,this,o),s||n&&0==t.insert||!h.insertItems&&(!n||!0!==t.insert)?this._setProject(o):(n&&t.parent||o)._insertItem(e,this,!0),n&&t!==w.NO_INSERT&&this.set(t,{internal:!0,insert:!0,project:!0,parent:!0}),n},_serialize:function(t,e){function i(i){for(var a in i){var o=s[a];r.equals(o,"leading"===a?1.2*i.fontSize:i[a])||(n[a]=r.serialize(o,t,"data"!==a,e))}}var n={},s=this;return i(this._serializeFields),this instanceof x||i(this._style._defaults),[this._class,n]},_changed:function(t){var i=this._symbol,n=this._parent||i,r=this._project;8&t&&(this._bounds=this._position=this._decomposed=this._globalMatrix=e),n&&40&t&&w._clearBoundsCache(n),2&t&&w._clearBoundsCache(this),r&&r._changed(t,this),i&&i._changed(t)},getId:function(){return this._id},getName:function(){return this._name},setName:function(t){if(this._name&&this._removeNamed(),t===+t+"")throw new Error("Names consisting only of numbers are not supported.");var i=this._getOwner();if(t&&i){var n=i._children,r=i._namedChildren;(r[t]=r[t]||[]).push(this),t in n||(n[t]=this)}this._name=t||e,this._changed(128)},getStyle:function(){return this._style},setStyle:function(t){this.getStyle().set(t)}},r.each(["locked","visible","blendMode","opacity","guide"],function(t){var e=r.capitalize(t),i="_"+t,n={locked:128,visible:137};this["get"+e]=function(){return this[i]},this["set"+e]=function(e){e!=this[i]&&(this[i]=e,this._changed(n[t]||129))}},{}),{beans:!0,getSelection:function(){return this._selection},setSelection:function(t){if(t!==this._selection){this._selection=t;var e=this._project;e&&(e._updateSelection(this),this._changed(129))}},_changeSelection:function(t,e){var i=this._selection;this.setSelection(e?i|t:i&~t)},isSelected:function(){if(this._selectChildren)for(var t=this._children,e=0,i=t.length;e<i;e++)if(t[e].isSelected())return!0;return!!(1&this._selection)},setSelected:function(t){if(this._selectChildren)for(var e=this._children,i=0,n=e.length;i<n;i++)e[i].setSelected(t);this._changeSelection(1,t)},isFullySelected:function(){var t=this._children,e=!!(1&this._selection);if(t&&e){for(var i=0,n=t.length;i<n;i++)if(!t[i].isFullySelected())return!1;return!0}return e},setFullySelected:function(t){var e=this._children;if(e)for(var i=0,n=e.length;i<n;i++)e[i].setFullySelected(t);this._changeSelection(1,t)},isClipMask:function(){return this._clipMask},setClipMask:function(t){this._clipMask!=(t=!!t)&&(this._clipMask=t,t&&(this.setFillColor(null),this.setStrokeColor(null)),this._changed(129),this._parent&&this._parent._changed(1024))},getData:function(){return this._data||(this._data={}),this._data},setData:function(t){this._data=t},getPosition:function(t){var e=this._position,i=t?c:f;if(!e){var n=this._pivot;e=this._position=n?this._matrix._transformPoint(n):this.getBounds().getCenter(!0)}return new i(e.x,e.y,this,"setPosition")},setPosition:function(){this.translate(c.read(arguments).subtract(this.getPosition(!0)))},getPivot:function(){var t=this._pivot;return t?new f(t.x,t.y,this,"setPivot"):null},setPivot:function(){this._pivot=c.read(arguments,0,{clone:!0,readNull:!0}),this._position=e}},r.each({getStrokeBounds:{stroke:!0},getHandleBounds:{handle:!0},getInternalBounds:{internal:!0}},function(t,e){this[e]=function(e){return this.getBounds(e,t)}},{beans:!0,getBounds:function(t,e){var i=e||t instanceof p,n=r.set({},i?e:t,this._boundsOptions);n.stroke&&!this.getStrokeScaling()||(n.cacheItem=this);var s=this._getCachedBounds(i&&t,n).rect;return arguments.length?s:new v(s.x,s.y,s.width,s.height,this,"setBounds")},setBounds:function(){var t=g.read(arguments),e=this.getBounds(),i=this._matrix,n=new p,r=t.getCenter();n.translate(r),t.width==e.width&&t.height==e.height||(i.isInvertible()||(i.set(i._backup||(new p).translate(i.getTranslation())),e=this.getBounds()),n.scale(0!==e.width?t.width/e.width:0,0!==e.height?t.height/e.height:0)),r=e.getCenter(),n.translate(-r.x,-r.y),this.transform(n)},_getBounds:function(t,e){var i=this._children;return i&&i.length?(w._updateBoundsCache(this,e.cacheItem),w._getBounds(i,t,e)):new g},_getBoundsCacheKey:function(t,e){return[t.stroke?1:0,t.handle?1:0,e?1:0].join("")},_getCachedBounds:function(t,e,i){t=t&&t._orNullIfIdentity();var n=e.internal&&!i,r=e.cacheItem,s=n?null:this._matrix._orNullIfIdentity(),a=r&&(!t||t.equals(s))&&this._getBoundsCacheKey(e,n),o=this._bounds;if(w._updateBoundsCache(this._parent||this._symbol,r),a&&o&&a in o)return{rect:(f=o[a]).rect.clone(),nonscaling:f.nonscaling};var h=this._getBounds(t||s,e),u=h.rect||h,l=this._style,c=h.nonscaling||l.hasStroke()&&!l.getStrokeScaling();if(a){o||(this._bounds=o={});var f=o[a]={rect:u.clone(),nonscaling:c,internal:n}}return{rect:u,nonscaling:c}},_getStrokeMatrix:function(t,e){var i=this.getStrokeScaling()?null:e&&e.internal?this:this._parent||this._symbol&&this._symbol._item,n=i?i.getViewMatrix().invert():t;return n&&n._shiftless()},statics:{_updateBoundsCache:function(t,e){if(t&&e){var i=e._id,n=t._boundsCache=t._boundsCache||{ids:{},list:[]};n.ids[i]||(n.list.push(e),n.ids[i]=e)}},_clearBoundsCache:function(t){var i=t._boundsCache;if(i){t._bounds=t._position=t._boundsCache=e;for(var n=0,r=i.list,s=r.length;n<s;n++){var a=r[n];a!==t&&(a._bounds=a._position=e,a._boundsCache&&w._clearBoundsCache(a))}}},_getBounds:function(t,e,i){var n=1/0,r=-n,s=n,a=r,o=!1;i=i||{};for(var h=0,u=t.length;h<u;h++){var l=t[h];if(l._visible&&!l.isEmpty()){var c=l._getCachedBounds(e&&e.appended(l._matrix),i,!0),f=c.rect;n=Math.min(f.x,n),s=Math.min(f.y,s),r=Math.max(f.x+f.width,r),a=Math.max(f.y+f.height,a),c.nonscaling&&(o=!0)}}return{rect:isFinite(n)?new g(n,s,r-n,a-s):new g,nonscaling:o}}}}),{beans:!0,_decompose:function(){return this._applyMatrix?null:this._decomposed||(this._decomposed=this._matrix.decompose())},getRotation:function(){var t=this._decompose();return t?t.rotation:0},setRotation:function(t){var e=this.getRotation();if(null!=e&&null!=t){var i=this._decomposed;this.rotate(t-e),i&&(i.rotation=t,this._decomposed=i)}},getScaling:function(){var t=this._decompose(),e=t&&t.scaling;return new f(e?e.x:1,e?e.y:1,this,"setScaling")},setScaling:function(){var t=this.getScaling(),e=c.read(arguments,0,{clone:!0,readNull:!0});if(t&&e&&!t.equals(e)){var i=this.getRotation(),n=this._decomposed,r=new p,s=this.getPosition(!0);r.translate(s),i&&r.rotate(i),r.scale(e.x/t.x,e.y/t.y),i&&r.rotate(-i),r.translate(s.negate()),this.transform(r),n&&(n.scaling=e,this._decomposed=n)}},getMatrix:function(){return this._matrix},setMatrix:function(){var t=this._matrix;t.initialize.apply(t,arguments)},getGlobalMatrix:function(t){var e=this._globalMatrix,i=this._project._updateVersion;if(e&&e._updateVersion!==i&&(e=null),!e){e=this._globalMatrix=this._matrix.clone();var n=this._parent;n&&e.prepend(n.getGlobalMatrix(!0)),e._updateVersion=i}return t?e:e.clone()},getViewMatrix:function(){return this.getGlobalMatrix().prepend(this.getView()._matrix)},getApplyMatrix:function(){return this._applyMatrix},setApplyMatrix:function(t){(this._applyMatrix=this._canApplyMatrix&&!!t)&&this.transform(null,!0)},getTransformContent:"#getApplyMatrix",setTransformContent:"#setApplyMatrix"},{getProject:function(){return this._project},_setProject:function(t,e){if(this._project!==t){this._project&&this._installEvents(!1),this._project=t;for(var i=this._children,n=0,r=i&&i.length;n<r;n++)i[n]._setProject(t);e=!0}e&&this._installEvents(!0)},getView:function(){return this._project._view},_installEvents:function t(e){t.base.call(this,e);for(var i=this._children,n=0,r=i&&i.length;n<r;n++)i[n]._installEvents(e)},getLayer:function(){for(var t=this;t=t._parent;)if(t instanceof b)return t;return null},getParent:function(){return this._parent},setParent:function(t){return t.addChild(this)},_getOwner:"#getParent",getChildren:function(){return this._children},setChildren:function(t){this.removeChildren(),this.addChildren(t)},getFirstChild:function(){return this._children&&this._children[0]||null},getLastChild:function(){return this._children&&this._children[this._children.length-1]||null},getNextSibling:function(){var t=this._getOwner();return t&&t._children[this._index+1]||null},getPreviousSibling:function(){var t=this._getOwner();return t&&t._children[this._index-1]||null},getIndex:function(){return this._index},equals:function(t){return t===this||t&&this._class===t._class&&this._style.equals(t._style)&&this._matrix.equals(t._matrix)&&this._locked===t._locked&&this._visible===t._visible&&this._blendMode===t._blendMode&&this._opacity===t._opacity&&this._clipMask===t._clipMask&&this._guide===t._guide&&this._equals(t)||!1},_equals:function(t){return r.equals(this._children,t._children)},clone:function(t){var i=new this.constructor(w.NO_INSERT),n=this._children,s=r.pick(t?t.insert:e,t===e||!0===t),a=r.pick(t?t.deep:e,!0);n&&i.copyAttributes(this),n&&!a||i.copyContent(this),n||i.copyAttributes(this),s&&i.insertAbove(this);var o=this._name,h=this._parent;if(o&&h){for(var n=h._children,u=o,l=1;n[o];)o=u+" "+l++;o!==u&&i.setName(o)}return i},copyContent:function(t){for(var e=t._children,i=0,n=e&&e.length;i<n;i++)this.addChild(e[i].clone(!1),!0)},copyAttributes:function(t,e){this.setStyle(t._style);for(var i=["_locked","_visible","_blendMode","_opacity","_clipMask","_guide"],n=0,s=i.length;n<s;n++){var a=i[n];t.hasOwnProperty(a)&&(this[a]=t[a])}e||this._matrix.set(t._matrix,!0),this.setApplyMatrix(t._applyMatrix),this.setPivot(t._pivot),this.setSelection(t._selection);var o=t._data,h=t._name;this._data=o?r.clone(o):null,h&&this.setName(h)},rasterize:function(t,i){var n=this.getStrokeBounds(),s=(t||this.getView().getResolution())/72,a=n.getTopLeft().floor(),o=n.getBottomRight().ceil(),h=new d(o.subtract(a)),u=new S(w.NO_INSERT);if(!h.isZero()){var l=Q.getCanvas(h.multiply(s)),c=l.getContext("2d"),f=(new p).scale(s).translate(a.negate());c.save(),f.applyToContext(c),this.draw(c,new r({matrices:[f]})),c.restore(),u.setCanvas(l)}return u.transform((new p).translate(a.add(h.divide(2))).scale(1/s)),(i===e||i)&&u.insertAbove(this),u},contains:function(){return!!this._contains(this._matrix._inverseTransform(c.read(arguments)))},_contains:function(t){var e=this._children;if(e){for(var i=e.length-1;i>=0;i--)if(e[i].contains(t))return!0;return!1}return t.isInside(this.getInternalBounds())},isInside:function(){return g.read(arguments).contains(this.getBounds())},_asPathItem:function(){return new L.Rectangle({rectangle:this.getInternalBounds(),matrix:this._matrix,insert:!1})},intersects:function(t,e){return t instanceof w&&this._asPathItem().getIntersections(t._asPathItem(),null,e,!0).length>0}},new function(){function t(){return this._hitTest(c.read(arguments),M.getOptions(arguments))}function e(){var t=c.read(arguments),e=M.getOptions(arguments),i=[];return this._hitTest(t,r.set({all:i},e)),i}function i(t,e,i,n){var r=this._children;if(r)for(var s=r.length-1;s>=0;s--){var a=r[s],o=a!==n&&a._hitTest(t,e,i);if(o&&!e.all)return o}return null}return y.inject({hitTest:t,hitTestAll:e,_hitTest:i}),{hitTest:t,hitTestAll:e,_hitTestChildren:i}},{_hitTest:function(t,e,i){function n(t){return t&&_&&!_(t)&&(t=null),t&&e.all&&e.all.push(t),t}function s(e,i){var n=i?l["get"+i]():g.getPosition();if(t.subtract(n).divide(u).length<=1)return new M(e,g,{name:i?r.hyphenate(i):e,point:n})}if(this._locked||!this._visible||this._guide&&!e.guides||this.isEmpty())return null;var a=this._matrix,o=i?i.appended(a):this.getGlobalMatrix().prepend(this.getView()._matrix),h=Math.max(e.tolerance,1e-12),u=e._tolerancePadding=new d(L._getStrokePadding(h,a._shiftless().invert()));if(!(t=a._inverseTransform(t))||!this._children&&!this.getBounds({internal:!0,stroke:!0,handle:!0}).expand(u.multiply(2))._containsPoint(t))return null;var l,c,f=!(e.guides&&!this._guide||e.selected&&!this.isSelected()||e.type&&e.type!==r.hyphenate(this._class)||e.class&&!(this instanceof e.class)),_=e.match,g=this,v=e.position,p=e.center,m=e.bounds;if(f&&this._parent&&(v||p||m)){if((p||m)&&(l=this.getInternalBounds()),!(c=v&&s("position")||p&&s("center","Center"))&&m)for(var y=["TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],w=0;w<8&&!c;w++)c=s("bounds",y[w]);c=n(c)}return c||(c=this._hitTestChildren(t,e,o)||f&&n(this._hitTestSelf(t,e,o,this.getStrokeScaling()?null:o._shiftless().invert()))||null),c&&c.point&&(c.point=a.transform(c.point)),c},_hitTestSelf:function(t,e){if(e.fill&&this.hasFill()&&this._contains(t))return new M("fill",this)},matches:function(t,e){function i(t,e){for(var n in t)if(t.hasOwnProperty(n)){var s=t[n],a=e[n];if(r.isPlainObject(s)&&r.isPlainObject(a)){if(!i(s,a))return!1}else if(!r.equals(s,a))return!1}return!0}var n=typeof t;if("object"===n){for(var s in t)if(t.hasOwnProperty(s)&&!this.matches(s,t[s]))return!1;return!0}if("function"===n)return t(this);if("match"===t)return e(this);var a=/^(empty|editable)$/.test(t)?this["is"+r.capitalize(t)]():"type"===t?r.hyphenate(this._class):this[t];if("class"===t){if("function"==typeof e)return this instanceof e;a=this._class}if("function"==typeof e)return!!e(a);if(e){if(e.test)return e.test(a);if(r.isPlainObject(e))return i(e,a)}return r.equals(a,e)},getItems:function(t){return w._getItems(this,t,this._matrix)},getItem:function(t){return w._getItems(this,t,this._matrix,null,!0)[0]||null},statics:{_getItems:function t(e,i,n,s,a){if(!s){var o="object"==typeof i&&i,h=o&&o.overlapping,u=o&&o.inside,l=(w=h||u)&&g.read([w]);s={items:[],recursive:o&&!1!==o.recursive,inside:!!u,overlapping:!!h,rect:l,path:h&&new L.Rectangle({rectangle:l,insert:!1})},o&&(i=r.filter({},i,{recursive:!0,inside:!0,overlapping:!0}))}var c=e._children,f=s.items;n=(l=s.rect)&&(n||new p);for(var d=0,_=c&&c.length;d<_;d++){var v=c[d],m=n&&n.appended(v._matrix),y=!0;if(l){var w=v.getBounds(m);if(!l.intersects(w))continue;l.contains(w)||s.overlapping&&(w.contains(l)||s.path.intersects(v,m))||(y=!1)}if(y&&v.matches(i)&&(f.push(v),a))break;if(!1!==s.recursive&&t(v,i,m,s,a),a&&f.length>0)break}return f}}},{importJSON:function(t){var e=r.importJSON(t,this);return e!==this?this.addChild(e):e},addChild:function(t){return this.insertChild(e,t)},insertChild:function(t,e){var i=e?this.insertChildren(t,[e]):null;return i&&i[0]},addChildren:function(t){return this.insertChildren(this._children.length,t)},insertChildren:function(t,e){var i=this._children;if(i&&e&&e.length>0){for(var n={},s=(e=r.slice(e)).length-1;s>=0;s--){var a=(l=e[s])&&l._id;!l||n[a]?e.splice(s,1):(l._remove(!1,!0),n[a]=!0)}r.splice(i,e,t,0);for(var o=this._project,h=o._changes,s=0,u=e.length;s<u;s++){var l=e[s],c=l._name;l._parent=this,l._setProject(o,!0),c&&l.setName(c),h&&l._changed(5)}this._changed(11)}else e=null;return e},_insertItem:"#insertChild",_insertAt:function(t,e){var i=t&&t._getOwner(),n=t!==this&&i?this:null;return n&&(n._remove(!1,!0),i._insertItem(t._index+e,n)),n},insertAbove:function(t){return this._insertAt(t,1)},insertBelow:function(t){return this._insertAt(t,0)},sendToBack:function(){var t=this._getOwner();return t?t._insertItem(0,this):null},bringToFront:function(){var t=this._getOwner();return t?t._insertItem(e,this):null},appendTop:"#addChild",appendBottom:function(t){return this.insertChild(0,t)},moveAbove:"#insertAbove",moveBelow:"#insertBelow",addTo:function(t){return t._insertItem(e,this)},copyTo:function(t){return this.clone(!1).addTo(t)},reduce:function(t){var e=this._children;if(e&&1===e.length){var i=e[0].reduce(t);return this._parent?(i.insertAbove(this),this.remove()):i.remove(),i}return this},_removeNamed:function(){var t=this._getOwner();if(t){var e=t._children,i=t._namedChildren,n=this._name,r=i[n],s=r?r.indexOf(this):-1;-1!==s&&(e[n]==this&&delete e[n],r.splice(s,1),r.length?e[n]=r[0]:delete i[n])}},_remove:function(t,e){var i=this._getOwner(),n=this._project,s=this._index;return!!i&&(this._name&&this._removeNamed(),null!=s&&(n._activeLayer===this&&(n._activeLayer=this.getNextSibling()||this.getPreviousSibling()),r.splice(i._children,null,s,1)),this._installEvents(!1),t&&n._changes&&this._changed(5),e&&i._changed(11,this),this._parent=null,!0)},remove:function(){return this._remove(!0,!0)},replaceWith:function(t){var e=t&&t.insertBelow(this);return e&&this.remove(),e},removeChildren:function(t,e){if(!this._children)return null;t=t||0,e=r.pick(e,this._children.length);for(var i=r.splice(this._children,null,t,e-t),n=i.length-1;n>=0;n--)i[n]._remove(!0,!1);return i.length>0&&this._changed(11),i},clear:"#removeChildren",reverseChildren:function(){if(this._children){this._children.reverse();for(var t=0,e=this._children.length;t<e;t++)this._children[t]._index=t;this._changed(11)}},isEmpty:function(){var t=this._children;return!t||!t.length},isEditable:function(){for(var t=this;t;){if(!t._visible||t._locked)return!1;t=t._parent}return!0},hasFill:function(){return this.getStyle().hasFill()},hasStroke:function(){return this.getStyle().hasStroke()},hasShadow:function(){return this.getStyle().hasShadow()},_getOrder:function(t){function e(t){var e=[];do{e.unshift(t)}while(t=t._parent);return e}for(var i=e(this),n=e(t),r=0,s=Math.min(i.length,n.length);r<s;r++)if(i[r]!=n[r])return i[r]._index<n[r]._index?1:-1;return 0},hasChildren:function(){return this._children&&this._children.length>0},isInserted:function(){return!!this._parent&&this._parent.isInserted()},isAbove:function(t){return-1===this._getOrder(t)},isBelow:function(t){return 1===this._getOrder(t)},isParent:function(t){return this._parent===t},isChild:function(t){return t&&t._parent===this},isDescendant:function(t){for(var e=this;e=e._parent;)if(e===t)return!0;return!1},isAncestor:function(t){return!!t&&t.isDescendant(this)},isSibling:function(t){return this._parent===t._parent},isGroupedWith:function(t){for(var e=this._parent;e;){if(e._parent&&/^(Group|Layer|CompoundPath)$/.test(e._class)&&t.isDescendant(e))return!0;e=e._parent}return!1}},r.each(["rotate","scale","shear","skew"],function(t){var e="rotate"===t;this[t]=function(){var i=(e?r:c).read(arguments),n=c.read(arguments,0,{readNull:!0});return this.transform((new p)[t](i,n||this.getPosition(!0)))}},{translate:function(){var t=new p;return this.transform(t.translate.apply(t,arguments))},transform:function(t,e,i,n){var r=this._matrix,s=t&&!t.isIdentity(),a=(e||this._applyMatrix)&&(!r.isIdentity()||s||e&&i&&this._children);if(!s&&!a)return this;if(s){!t.isInvertible()&&r.isInvertible()&&(r._backup=r.getValues()),r.prepend(t,!0);var o=this._style,h=o.getFillColor(!0),u=o.getStrokeColor(!0);h&&h.transform(t),u&&u.transform(t)}if(a&&(a=this._transformContent(r,i,n))){var l=this._pivot;l&&r._transformPoint(l,l,!0),r.reset(!0),n&&this._canApplyMatrix&&(this._applyMatrix=!0)}var c=this._bounds,f=this._position;(s||a)&&this._changed(9);var d=s&&c&&t.decompose();if(d&&d.skewing.isZero()&&d.rotation%90==0){for(var _ in c){var g=c[_];if(g.nonscaling)delete c[_];else if(a||!g.internal){var v=g.rect;t._transformBounds(v,v)}}this._bounds=c;var p=c[this._getBoundsCacheKey(this._boundsOptions||{})];p&&(this._position=p.rect.getCenter(!0))}else s&&f&&this._pivot&&(this._position=t._transformPoint(f,f));return this},_transformContent:function(t,e,i){var n=this._children;if(n){for(var r=0,s=n.length;r<s;r++)n[r].transform(t,!0,e,i);return!0}},globalToLocal:function(){return this.getGlobalMatrix(!0)._inverseTransform(c.read(arguments))},localToGlobal:function(){return this.getGlobalMatrix(!0)._transformPoint(c.read(arguments))},parentToLocal:function(){return this._matrix._inverseTransform(c.read(arguments))},localToParent:function(){return this._matrix._transformPoint(c.read(arguments))},fitBounds:function(t,e){t=g.read(arguments);var i=this.getBounds(),n=i.height/i.width,r=t.height/t.width,s=(e?n>r:n<r)?t.width/i.width:t.height/i.height,a=new g(new c,new d(i.width*s,i.height*s));a.setCenter(t.getCenter()),this.setBounds(a)}}),{_setStyles:function(t,e,i){var n=this._style,r=this._matrix;if(n.hasFill()&&(t.fillStyle=n.getFillColor().toCanvasStyle(t,r)),n.hasStroke()){t.strokeStyle=n.getStrokeColor().toCanvasStyle(t,r),t.lineWidth=n.getStrokeWidth();var s=n.getStrokeJoin(),a=n.getStrokeCap(),o=n.getMiterLimit();if(s&&(t.lineJoin=s),a&&(t.lineCap=a),o&&(t.miterLimit=o),paper.support.nativeDash){var h=n.getDashArray(),u=n.getDashOffset();h&&h.length&&("setLineDash"in t?(t.setLineDash(h),t.lineDashOffset=u):(t.mozDash=h,t.mozDashOffset=u))}}if(n.hasShadow()){var l=e.pixelRatio||1,f=i._shiftless().prepend((new p).scale(l,l)),d=f.transform(new c(n.getShadowBlur(),0)),_=f.transform(this.getShadowOffset());t.shadowColor=n.getShadowColor().toCanvasStyle(t),t.shadowBlur=d.getLength(),t.shadowOffsetX=_.x,t.shadowOffsetY=_.y}},draw:function(t,e,i){var n=this._updateVersion=this._project._updateVersion;if(this._visible&&0!==this._opacity){var r=e.matrices,s=e.viewMatrix,a=this._matrix,o=r[r.length-1].appended(a);if(o.isInvertible()){s=s?s.appended(o):o,r.push(o),e.updateMatrix&&(o._updateVersion=n,this._globalMatrix=o);var h,u,l,c=this._blendMode,f=this._opacity,d="normal"===c,_=tt.nativeModes[c],g=d&&1===f||e.dontStart||e.clip||(_||d&&f<1)&&this._canComposite(),v=e.pixelRatio||1;if(!g){var p=this.getStrokeBounds(s);if(!p.width||!p.height)return;l=e.offset,u=e.offset=p.getTopLeft().floor(),h=t,t=Q.getContext(p.getSize().ceil().add(1).multiply(v)),1!==v&&t.scale(v,v)}t.save();var m=i?i.appended(a):this._canScaleStroke&&!this.getStrokeScaling(!0)&&s,y=!g&&e.clipItem,w=!m||y;if(g?(t.globalAlpha=f,_&&(t.globalCompositeOperation=c)):w&&t.translate(-u.x,-u.y),w&&(g?a:s).applyToContext(t),y&&e.clipItem.draw(t,e.extend({clip:!0})),m){t.setTransform(v,0,0,v,0,0);var x=e.offset;x&&t.translate(-x.x,-x.y)}this._draw(t,e,s,m),t.restore(),r.pop(),e.clip&&!e.dontFinish&&t.clip(),g||(tt.process(c,t,h,f,u.subtract(l).multiply(v)),Q.release(t),e.offset=l)}}},_isUpdated:function(t){var e=this._parent;if(e instanceof N)return e._isUpdated(t);var i=this._updateVersion===t;return!i&&e&&e._visible&&e._isUpdated(t)&&(this._updateVersion=t,i=!0),i},_drawSelection:function(t,e,i,n,r){var s=this._selection,a=1&s,o=2&s||a&&this._selectBounds,h=4&s;if(this._drawSelected||(a=!1),(a||o||h)&&this._isUpdated(r)){var u,l=this.getSelectedColor(!0)||(u=this.getLayer())&&u.getSelectedColor(!0),c=e.appended(this.getGlobalMatrix(!0)),f=i/2;if(t.strokeStyle=t.fillStyle=l?l.toCanvasStyle(t):"#009dec",a&&this._drawSelected(t,c,n),h){var d=this.getPosition(!0),_=d.x,g=d.y;t.beginPath(),t.arc(_,g,f,0,2*Math.PI,!0),t.stroke();for(var v=[[0,-1],[1,0],[0,1],[-1,0]],p=f,m=i+1,y=0;y<4;y++){var w=v[y],x=w[0],b=w[1];t.moveTo(_+x*p,g+b*p),t.lineTo(_+x*m,g+b*m),t.stroke()}}if(o){var C=c._transformCorners(this.getInternalBounds());t.beginPath();for(y=0;y<8;y++)t[y?"lineTo":"moveTo"](C[y],C[++y]);t.closePath(),t.stroke();for(y=0;y<8;y++)t.fillRect(C[y]-f,C[++y]-f,i,i)}}},_canComposite:function(){return!1}},r.each(["down","drag","up","move"],function(t){this["removeOn"+r.capitalize(t)]=function(){var e={};return e[t]=!0,this.removeOn(e)}},{removeOn:function(t){for(var e in t)if(t[e]){var i="mouse"+e,n=this._project,r=n._removeSets=n._removeSets||{};r[i]=r[i]||{},r[i][this._id]=this}return this}})),x=w.extend({_class:"Group",_selectBounds:!1,_selectChildren:!0,_serializeFields:{children:[]},initialize:function(t){this._children=[],this._namedChildren={},this._initialize(t)||this.addChildren(Array.isArray(t)?t:arguments)},_changed:function t(i){t.base.call(this,i),1026&i&&(this._clipItem=e)},_getClipItem:function(){var t=this._clipItem;if(t===e){t=null;for(var i=this._children,n=0,r=i.length;n<r;n++)if(i[n]._clipMask){t=i[n];break}this._clipItem=t}return t},isClipped:function(){return!!this._getClipItem()},setClipped:function(t){var e=this.getFirstChild();e&&e.setClipMask(t)},_getBounds:function t(e,i){var n=this._getClipItem();return n?n._getCachedBounds(e&&e.appended(n._matrix),r.set({},i,{stroke:!1})):t.base.call(this,e,i)},_hitTestChildren:function t(e,i,n){var r=this._getClipItem();return(!r||r.contains(e))&&t.base.call(this,e,i,n,r)},_draw:function(t,e){var i=e.clip,n=!i&&this._getClipItem();e=e.extend({clipItem:n,clip:!1}),i?(t.beginPath(),e.dontStart=e.dontFinish=!0):n&&n.draw(t,e.extend({clip:!0}));for(var r=this._children,s=0,a=r.length;s<a;s++){var o=r[s];o!==n&&o.draw(t,e)}}}),b=x.extend({_class:"Layer",initialize:function(){x.apply(this,arguments)},_getOwner:function(){return this._parent||null!=this._index&&this._project},isInserted:function t(){return this._parent?t.base.call(this):null!=this._index},activate:function(){this._project._activeLayer=this},_hitTestSelf:function(){}}),C=w.extend({_class:"Shape",_applyMatrix:!1,_canApplyMatrix:!1,_canScaleStroke:!0,_serializeFields:{type:null,size:null,radius:null},initialize:function(t,e){this._initialize(t,e)},_equals:function(t){return this._type===t._type&&this._size.equals(t._size)&&r.equals(this._radius,t._radius)},copyContent:function(t){this.setType(t._type),this.setSize(t._size),this.setRadius(t._radius)},getType:function(){return this._type},setType:function(t){this._type=t},getShape:"#getType",setShape:"#setType",getSize:function(){var t=this._size;return new _(t.width,t.height,this,"setSize")},setSize:function(){var t=d.read(arguments);if(this._size){if(!this._size.equals(t)){var e=this._type,i=t.width,n=t.height;"rectangle"===e?this._radius.set(d.min(this._radius,t.divide(2))):"circle"===e?(i=n=(i+n)/2,this._radius=i/2):"ellipse"===e&&this._radius._set(i/2,n/2),this._size._set(i,n),this._changed(9)}}else this._size=t.clone()},getRadius:function(){var t=this._radius;return"circle"===this._type?t:new _(t.width,t.height,this,"setRadius")},setRadius:function(t){var e=this._type;if("circle"===e){if(t===this._radius)return;i=2*t;this._radius=t,this._size._set(i,i)}else if(t=d.read(arguments),this._radius){if(this._radius.equals(t))return;if(this._radius.set(t),"rectangle"===e){var i=d.max(this._size,t.multiply(2));this._size.set(i)}else"ellipse"===e&&this._size._set(2*t.width,2*t.height)}else this._radius=t.clone();this._changed(9)},isEmpty:function(){return!1},toPath:function(t){var i=new(L[r.capitalize(this._type)])({center:new c,size:this._size,radius:this._radius,insert:!1});return i.copyAttributes(this),paper.settings.applyMatrix&&i.setApplyMatrix(!0),(t===e||t)&&i.insertAbove(this),i},toShape:"#clone",_asPathItem:function(){return this.toPath(!1)},_draw:function(t,e,i,n){var r=this._style,s=r.hasFill(),a=r.hasStroke(),o=e.dontFinish||e.clip,h=!n;if(s||a||o){var u=this._type,l=this._radius,c="circle"===u;if(e.dontStart||t.beginPath(),h&&c)t.arc(0,0,l,0,2*Math.PI,!0);else{var f=c?l:l.width,d=c?l:l.height,_=this._size,g=_.width,v=_.height;if(h&&"rectangle"===u&&0===f&&0===d)t.rect(-g/2,-v/2,g,v);else{var p=g/2,m=v/2,y=.44771525016920644,w=f*y,x=d*y,b=[-p,-m+d,-p,-m+x,-p+w,-m,-p+f,-m,p-f,-m,p-w,-m,p,-m+x,p,-m+d,p,m-d,p,m-x,p-w,m,p-f,m,-p+f,m,-p+w,m,-p,m-x,-p,m-d];n&&n.transform(b,b,32),t.moveTo(b[0],b[1]),t.bezierCurveTo(b[2],b[3],b[4],b[5],b[6],b[7]),p!==f&&t.lineTo(b[8],b[9]),t.bezierCurveTo(b[10],b[11],b[12],b[13],b[14],b[15]),m!==d&&t.lineTo(b[16],b[17]),t.bezierCurveTo(b[18],b[19],b[20],b[21],b[22],b[23]),p!==f&&t.lineTo(b[24],b[25]),t.bezierCurveTo(b[26],b[27],b[28],b[29],b[30],b[31])}}t.closePath()}o||!s&&!a||(this._setStyles(t,e,i),s&&(t.fill(r.getFillRule()),t.shadowColor="rgba(0,0,0,0)"),a&&t.stroke())},_canComposite:function(){return!(this.hasFill()&&this.hasStroke())},_getBounds:function(t,e){var i=new g(this._size).setCenter(0,0),n=this._style,r=e.stroke&&n.hasStroke()&&n.getStrokeWidth();return t&&(i=t._transformBounds(i)),r?i.expand(L._getStrokePadding(r,this._getStrokeMatrix(t,e))):i}},new function(){function t(t,e,i){var n=t._radius;if(!n.isZero())for(var r=t._size.divide(2),s=1;s<=4;s++){var a=new c(s>1&&s<4?-1:1,s>2?-1:1),o=a.multiply(r),h=o.subtract(a.multiply(n));if(new g(i?o.add(a.multiply(i)):o,h).contains(e))return{point:h,quadrant:s}}}function e(t,e,i,n){var r=t.divide(e);return(!n||r.isInQuadrant(n))&&r.subtract(r.normalize()).multiply(e).divide(i).length<=1}return{_contains:function e(i){if("rectangle"===this._type){var n=t(this,i);return n?i.subtract(n.point).divide(this._radius).getLength()<=1:e.base.call(this,i)}return i.divide(this.size).getLength()<=.5},_hitTestSelf:function i(n,r,s,a){var o=!1,h=this._style,u=r.stroke&&h.hasStroke(),l=r.fill&&h.hasFill();if(u||l){var c=this._type,f=this._radius,d=u?h.getStrokeWidth()/2:0,_=r._tolerancePadding.add(L._getStrokePadding(d,!h.getStrokeScaling()&&a));if("rectangle"===c){var v=_.multiply(2),p=t(this,n,v);if(p)o=e(n.subtract(p.point),f,_,p.quadrant);else{var m=new g(this._size).setCenter(0,0),y=m.expand(v),w=m.expand(v.negate());o=y._containsPoint(n)&&!w._containsPoint(n)}}else o=e(n,f,_)}return o?new M(u?"stroke":"fill",this):i.base.apply(this,arguments)}}},{statics:new function(){function t(t,e,i,n,s){var a=new C(r.getNamed(s),e);return a._type=t,a._size=i,a._radius=n,a}return{Circle:function(){var e=c.readNamed(arguments,"center"),i=r.readNamed(arguments,"radius");return t("circle",e,new d(2*i),i,arguments)},Rectangle:function(){var e=g.readNamed(arguments,"rectangle"),i=d.min(d.readNamed(arguments,"radius"),e.getSize(!0).divide(2));return t("rectangle",e.getCenter(!0),e.getSize(!0),i,arguments)},Ellipse:function(){var e=C._readEllipse(arguments),i=e.radius;return t("ellipse",e.center,i.multiply(2),i,arguments)},_readEllipse:function(t){var e,i;if(r.hasNamed(t,"radius"))e=c.readNamed(t,"center"),i=d.readNamed(t,"radius");else{var n=g.readNamed(t,"rectangle");e=n.getCenter(!0),i=n.getSize(!0).divide(2)}return{center:e,radius:i}}}}}),S=w.extend({_class:"Raster",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!1,handle:!1},_serializeFields:{crossOrigin:null,source:null},_prioritize:["crossOrigin"],initialize:function(t,i){if(!this._initialize(t,i!==e&&c.read(arguments,1))){var r="string"==typeof t?n.getElementById(t):t;r?this.setImage(r):this.setSource(t)}this._size||(this._size=new d,this._loaded=!1)},_equals:function(t){return this.getSource()===t.getSource()},copyContent:function(t){var e=t._image,i=t._canvas;if(e)this._setImage(e);else if(i){var n=Q.getCanvas(t._size);n.getContext("2d").drawImage(i,0,0),this._setImage(n)}this._crossOrigin=t._crossOrigin},getSize:function(){var t=this._size;return new _(t?t.width:0,t?t.height:0,this,"setSize")},setSize:function(){var t=d.read(arguments);if(!t.equals(this._size))if(t.width>0&&t.height>0){var e=this.getElement();this._setImage(Q.getCanvas(t)),e&&this.getContext(!0).drawImage(e,0,0,t.width,t.height)}else this._canvas&&Q.release(this._canvas),this._size=t.clone()},getWidth:function(){return this._size?this._size.width:0},setWidth:function(t){this.setSize(t,this.getHeight())},getHeight:function(){return this._size?this._size.height:0},setHeight:function(t){this.setSize(this.getWidth(),t)},getLoaded:function(){return this._loaded},isEmpty:function(){var t=this._size;return!t||0===t.width&&0===t.height},getResolution:function(){var t=this._matrix,e=new c(0,0).transform(t),i=new c(1,0).transform(t).subtract(e),n=new c(0,1).transform(t).subtract(e);return new d(72/i.getLength(),72/n.getLength())},getPpi:"#getResolution",getImage:function(){return this._image},setImage:function(t){function e(t){var e=i.getView(),n=t&&t.type||"load";e&&i.responds(n)&&(paper=e._scope,i.emit(n,new G(t)))}var i=this;this._setImage(t),this._loaded?setTimeout(e,0):t&&Z.add(t,{load:function(n){i._setImage(t),e(n)},error:e})},_setImage:function(t){this._canvas&&Q.release(this._canvas),t&&t.getContext?(this._image=null,this._canvas=t,this._loaded=!0):(this._image=t,this._canvas=null,this._loaded=!!(t&&t.src&&t.complete)),this._size=new d(t?t.naturalWidth||t.width:0,t?t.naturalHeight||t.height:0),this._context=null,this._changed(521)},getCanvas:function(){if(!this._canvas){var t=Q.getContext(this._size);try{this._image&&t.drawImage(this._image,0,0),this._canvas=t.canvas}catch(e){Q.release(t)}}return this._canvas},setCanvas:"#setImage",getContext:function(t){return this._context||(this._context=this.getCanvas().getContext("2d")),t&&(this._image=null,this._changed(513)),this._context},setContext:function(t){this._context=t},getSource:function(){var t=this._image;return t&&t.src||this.toDataURL()},setSource:function(e){var i=new t.Image,n=this._crossOrigin;n&&(i.crossOrigin=n),i.src=e,this.setImage(i)},getCrossOrigin:function(){var t=this._image;return t&&t.crossOrigin||this._crossOrigin||""},setCrossOrigin:function(t){this._crossOrigin=t;var e=this._image;e&&(e.crossOrigin=t)},getElement:function(){return this._canvas||this._loaded&&this._image}},{beans:!1,getSubCanvas:function(){var t=g.read(arguments),e=Q.getContext(t.getSize());return e.drawImage(this.getCanvas(),t.x,t.y,t.width,t.height,0,0,t.width,t.height),e.canvas},getSubRaster:function(){var t=g.read(arguments),e=new S(w.NO_INSERT);return e._setImage(this.getSubCanvas(t)),e.translate(t.getCenter().subtract(this.getSize().divide(2))),e._matrix.prepend(this._matrix),e.insertAbove(this),e},toDataURL:function(){var t=this._image,e=t&&t.src;if(/^data:/.test(e))return e;var i=this.getCanvas();return i?i.toDataURL.apply(i,arguments):null},drawImage:function(t){var e=c.read(arguments,1);this.getContext(!0).drawImage(t,e.x,e.y)},getAverageColor:function(t){var e,i;if(t?t instanceof A?(i=t,e=t.getBounds()):"object"==typeof t&&("width"in t?e=new g(t):"x"in t&&(e=new g(t.x-.5,t.y-.5,1,1))):e=this.getBounds(),!e)return null;var n=Math.min(e.width,32),s=Math.min(e.height,32),a=S._sampleContext;a?a.clearRect(0,0,33,33):a=S._sampleContext=Q.getContext(new d(32)),a.save();var o=(new p).scale(n/e.width,s/e.height).translate(-e.x,-e.y);o.applyToContext(a),i&&i.draw(a,new r({clip:!0,matrices:[o]})),this._matrix.applyToContext(a);var h=this.getElement(),u=this._size;h&&a.drawImage(h,-u.width/2,-u.height/2),a.restore();for(var l=a.getImageData(.5,.5,Math.ceil(n),Math.ceil(s)).data,c=[0,0,0],f=0,_=0,v=l.length;_<v;_+=4){var m=l[_+3];f+=m,m/=255,c[0]+=l[_]*m,c[1]+=l[_+1]*m,c[2]+=l[_+2]*m}for(_=0;_<3;_++)c[_]/=f;return f?F.read(c):null},getPixel:function(){var t=c.read(arguments),e=this.getContext().getImageData(t.x,t.y,1,1).data;return new F("rgb",[e[0]/255,e[1]/255,e[2]/255],e[3]/255)},setPixel:function(){var t=c.read(arguments),e=F.read(arguments),i=e._convert("rgb"),n=e._alpha,r=this.getContext(!0),s=r.createImageData(1,1),a=s.data;a[0]=255*i[0],a[1]=255*i[1],a[2]=255*i[2],a[3]=null!=n?255*n:255,r.putImageData(s,t.x,t.y)},createImageData:function(){var t=d.read(arguments);return this.getContext().createImageData(t.width,t.height)},getImageData:function(){var t=g.read(arguments);return t.isEmpty()&&(t=new g(this._size)),this.getContext().getImageData(t.x,t.y,t.width,t.height)},setImageData:function(t){var e=c.read(arguments,1);this.getContext(!0).putImageData(t,e.x,e.y)},_getBounds:function(t,e){var i=new g(this._size).setCenter(0,0);return t?t._transformBounds(i):i},_hitTestSelf:function(t){if(this._contains(t)){var e=this;return new M("pixel",e,{offset:t.add(e._size.divide(2)).round(),color:{get:function(){return e.getPixel(this.offset)}}})}},_draw:function(t){var e=this.getElement();e&&(t.globalAlpha=this._opacity,t.drawImage(e,-this._size.width/2,-this._size.height/2))},_canComposite:function(){return!0}}),P=w.extend({_class:"SymbolItem",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!0},_serializeFields:{symbol:null},initialize:function(t,i){this._initialize(t,i!==e&&c.read(arguments,1))||this.setDefinition(t instanceof I?t:new I(t))},_equals:function(t){return this._definition===t._definition},copyContent:function(t){this.setDefinition(t._definition)},getDefinition:function(){return this._definition},setDefinition:function(t){this._definition=t,this._changed(9)},getSymbol:"#getDefinition",setSymbol:"#setDefinition",isEmpty:function(){return this._definition._item.isEmpty()},_getBounds:function(t,e){var i=this._definition._item;return i._getCachedBounds(i._matrix.prepended(t),e)},_hitTestSelf:function(t,e,i){var n=this._definition._item._hitTest(t,e,i);return n&&(n.item=this),n},_draw:function(t,e){this._definition._item.draw(t,e)}}),I=r.extend({_class:"SymbolDefinition",initialize:function(t,e){this._id=l.get(),this.project=paper.project,t&&this.setItem(t,e)},_serialize:function(t,e){return e.add(this,function(){return r.serialize([this._class,this._item],t,!1,e)})},_changed:function(t){8&t&&w._clearBoundsCache(this),1&t&&this.project._changed(t)},getItem:function(){return this._item},setItem:function(t,e){t._symbol&&(t=t.clone()),this._item&&(this._item._symbol=null),this._item=t,t.remove(),t.setSelected(!1),e||t.setPosition(new c),t._symbol=this,this._changed(9)},getDefinition:"#getItem",setDefinition:"#setItem",place:function(t){return new P(this,t)},clone:function(){return new I(this._item.clone(!1))},equals:function(t){return t===this||t&&this._item.equals(t._item)||!1}}),M=r.extend({_class:"HitResult",initialize:function(t,e,i){this.type=t,this.item=e,i&&this.inject(i)},statics:{getOptions:function(t){var e=t&&r.read(t);return r.set({type:null,tolerance:paper.settings.hitTolerance,fill:!e,stroke:!e,segments:!e,handles:!1,ends:!1,position:!1,center:!1,bounds:!1,guides:!1,selected:!1},e)}}}),T=r.extend({_class:"Segment",beans:!0,_selection:0,initialize:function(t,i,n,r,s,a){var o,h,u,l,c=arguments.length;c>0&&(null==t||"object"==typeof t?1===c&&t&&"point"in t?(o=t.point,h=t.handleIn,u=t.handleOut,l=t.selection):(o=t,h=i,u=n,l=r):(o=[t,i],h=n!==e?[n,r]:null,u=s!==e?[s,a]:null)),new z(o,this,"_point"),new z(h,this,"_handleIn"),new z(u,this,"_handleOut"),l&&this.setSelection(l)},_serialize:function(t,e){var i=this._point,n=this._selection,s=n||this.hasHandles()?[i,this._handleIn,this._handleOut]:i;return n&&s.push(n),r.serialize(s,t,!0,e)},_changed:function(t){var e=this._path;if(e){var i,n=e._curves,r=this._index;n&&(t&&t!==this._point&&t!==this._handleIn||!(i=r>0?n[r-1]:e._closed?n[n.length-1]:null)||i._changed(),t&&t!==this._point&&t!==this._handleOut||!(i=n[r])||i._changed()),e._changed(25)}},getPoint:function(){return this._point},setPoint:function(){this._point.set(c.read(arguments))},getHandleIn:function(){return this._handleIn},setHandleIn:function(){this._handleIn.set(c.read(arguments))},getHandleOut:function(){return this._handleOut},setHandleOut:function(){this._handleOut.set(c.read(arguments))},hasHandles:function(){return!this._handleIn.isZero()||!this._handleOut.isZero()},isSmooth:function(){var t=this._handleIn,e=this._handleOut;return!t.isZero()&&!e.isZero()&&t.isCollinear(e)},clearHandles:function(){this._handleIn._set(0,0),this._handleOut._set(0,0)},getSelection:function(){return this._selection},setSelection:function(t){var e=this._selection,i=this._path;this._selection=t=t||0,i&&t!==e&&(i._updateSelection(this,e,t),i._changed(129))},_changeSelection:function(t,e){var i=this._selection;this.setSelection(e?i|t:i&~t)},isSelected:function(){return!!(7&this._selection)},setSelected:function(t){this._changeSelection(7,t)},getIndex:function(){return this._index!==e?this._index:null},getPath:function(){return this._path||null},getCurve:function(){var t=this._path,e=this._index;return t?(e>0&&!t._closed&&e===t._segments.length-1&&e--,t.getCurves()[e]||null):null},getLocation:function(){var t=this.getCurve();return t?new O(t,this===t._segment1?0:1):null},getNext:function(){var t=this._path&&this._path._segments;return t&&(t[this._index+1]||this._path._closed&&t[0])||null},smooth:function(t,i,n){var r=t||{},s=r.type,a=r.factor,o=this.getPrevious(),h=this.getNext(),u=(o||this)._point,l=this._point,f=(h||this)._point,d=u.getDistance(l),_=l.getDistance(f);if(s&&"catmull-rom"!==s){if("geometric"!==s)throw new Error("Smoothing method '"+s+"' not supported.");if(o&&h){var g=u.subtract(f),v=a===e?.4:a,p=v*d/(d+_);i||this.setHandleIn(g.multiply(p)),n||this.setHandleOut(g.multiply(p-v))}}else{var m=a===e?.5:a,y=Math.pow(d,m),w=y*y,x=Math.pow(_,m),b=x*x;if(!i&&o){var C=2*b+3*x*y+w,S=3*x*(x+y);this.setHandleIn(0!==S?new c((b*u._x+C*l._x-w*f._x)/S-l._x,(b*u._y+C*l._y-w*f._y)/S-l._y):new c)}if(!n&&h){var C=2*w+3*y*x+b,S=3*y*(y+x);this.setHandleOut(0!==S?new c((w*f._x+C*l._x-b*u._x)/S-l._x,(w*f._y+C*l._y-b*u._y)/S-l._y):new c)}}},getPrevious:function(){var t=this._path&&this._path._segments;return t&&(t[this._index-1]||this._path._closed&&t[t.length-1])||null},isFirst:function(){return!this._index},isLast:function(){var t=this._path;return t&&this._index===t._segments.length-1||!1},reverse:function(){var t=this._handleIn,e=this._handleOut,i=t.clone();t.set(e),e.set(i)},reversed:function(){return new T(this._point,this._handleOut,this._handleIn)},remove:function(){return!!this._path&&!!this._path.removeSegment(this._index)},clone:function(){return new T(this._point,this._handleIn,this._handleOut)},equals:function(t){return t===this||t&&this._class===t._class&&this._point.equals(t._point)&&this._handleIn.equals(t._handleIn)&&this._handleOut.equals(t._handleOut)||!1},toString:function(){var t=["point: "+this._point];return this._handleIn.isZero()||t.push("handleIn: "+this._handleIn),this._handleOut.isZero()||t.push("handleOut: "+this._handleOut),"{ "+t.join(", ")+" }"},transform:function(t){this._transformCoordinates(t,new Array(6),!0),this._changed()},interpolate:function(t,e,i){var n=1-i,r=i,s=t._point,a=e._point,o=t._handleIn,h=e._handleIn,u=e._handleOut,l=t._handleOut;this._point._set(n*s._x+r*a._x,n*s._y+r*a._y,!0),this._handleIn._set(n*o._x+r*h._x,n*o._y+r*h._y,!0),this._handleOut._set(n*l._x+r*u._x,n*l._y+r*u._y,!0),this._changed()},_transformCoordinates:function(t,e,i){var n=this._point,r=i&&this._handleIn.isZero()?null:this._handleIn,s=i&&this._handleOut.isZero()?null:this._handleOut,a=n._x,o=n._y,h=2;return e[0]=a,e[1]=o,r&&(e[h++]=r._x+a,e[h++]=r._y+o),s&&(e[h++]=s._x+a,e[h++]=s._y+o),t&&(t._transformCoordinates(e,e,h/2),a=e[0],o=e[1],i?(n._x=a,n._y=o,h=2,r&&(r._x=e[h++]-a,r._y=e[h++]-o),s&&(s._x=e[h++]-a,s._y=e[h++]-o)):(r||(e[h++]=a,e[h++]=o),s||(e[h++]=a,e[h++]=o))),e}}),z=c.extend({initialize:function(t,i,n){var r,s,a;if(t)if((r=t[0])!==e)s=t[1];else{var o=t;(r=o.x)===e&&(r=(o=c.read(arguments)).x),s=o.y,a=o.selected}else r=s=0;this._x=r,this._y=s,this._owner=i,i[n]=this,a&&this.setSelected(!0)},_set:function(t,e){return this._x=t,this._y=e,this._owner._changed(this),this},getX:function(){return this._x},setX:function(t){this._x=t,this._owner._changed(this)},getY:function(){return this._y},setY:function(t){this._y=t,this._owner._changed(this)},isZero:function(){var t=u.isZero;return t(this._x)&&t(this._y)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(t){this._owner._changeSelection(this._getSelection(),t)},_getSelection:function(){var t=this._owner;return this===t._point?1:this===t._handleIn?2:this===t._handleOut?4:0}}),k=r.extend({_class:"Curve",beans:!0,initialize:function(t,e,i,n,r,s,a,o){var h,u,l,c,f,d,_=arguments.length;3===_?(this._path=t,h=e,u=i):_?1===_?"segment1"in t?(h=new T(t.segment1),u=new T(t.segment2)):"point1"in t?(l=t.point1,f=t.handle1,d=t.handle2,c=t.point2):Array.isArray(t)&&(l=[t[0],t[1]],c=[t[6],t[7]],f=[t[2]-t[0],t[3]-t[1]],d=[t[4]-t[6],t[5]-t[7]]):2===_?(h=new T(t),u=new T(e)):4===_?(l=t,f=e,d=i,c=n):8===_&&(l=[t,e],c=[a,o],f=[i-t,n-e],d=[r-a,s-o]):(h=new T,u=new T),this._segment1=h||new T(l,null,f),this._segment2=u||new T(c,d,null)},_serialize:function(t,e){return r.serialize(this.hasHandles()?[this.getPoint1(),this.getHandle1(),this.getHandle2(),this.getPoint2()]:[this.getPoint1(),this.getPoint2()],t,!0,e)},_changed:function(){this._length=this._bounds=e},clone:function(){return new k(this._segment1,this._segment2)},toString:function(){var t=["point1: "+this._segment1._point];return this._segment1._handleOut.isZero()||t.push("handle1: "+this._segment1._handleOut),this._segment2._handleIn.isZero()||t.push("handle2: "+this._segment2._handleIn),t.push("point2: "+this._segment2._point),"{ "+t.join(", ")+" }"},classify:function(){return k.classify(this.getValues())},remove:function(){var t=!1;if(this._path){var e=this._segment2,i=e._handleOut;(t=e.remove())&&this._segment1._handleOut.set(i)}return t},getPoint1:function(){return this._segment1._point},setPoint1:function(){this._segment1._point.set(c.read(arguments))},getPoint2:function(){return this._segment2._point},setPoint2:function(){this._segment2._point.set(c.read(arguments))},getHandle1:function(){return this._segment1._handleOut},setHandle1:function(){this._segment1._handleOut.set(c.read(arguments))},getHandle2:function(){return this._segment2._handleIn},setHandle2:function(){this._segment2._handleIn.set(c.read(arguments))},getSegment1:function(){return this._segment1},getSegment2:function(){return this._segment2},getPath:function(){return this._path},getIndex:function(){return this._segment1._index},getNext:function(){var t=this._path&&this._path._curves;return t&&(t[this._segment1._index+1]||this._path._closed&&t[0])||null},getPrevious:function(){var t=this._path&&this._path._curves;return t&&(t[this._segment1._index-1]||this._path._closed&&t[t.length-1])||null},isFirst:function(){return!this._segment1._index},isLast:function(){var t=this._path;return t&&this._segment1._index===t._curves.length-1||!1},isSelected:function(){return this.getPoint1().isSelected()&&this.getHandle1().isSelected()&&this.getHandle2().isSelected()&&this.getPoint2().isSelected()},setSelected:function(t){this.getPoint1().setSelected(t),this.getHandle1().setSelected(t),this.getHandle2().setSelected(t),this.getPoint2().setSelected(t)},getValues:function(t){return k.getValues(this._segment1,this._segment2,t)},getPoints:function(){for(var t=this.getValues(),e=[],i=0;i<8;i+=2)e.push(new c(t[i],t[i+1]));return e}},{getLength:function(){return null==this._length&&(this._length=k.getLength(this.getValues(),0,1)),this._length},getArea:function(){return k.getArea(this.getValues())},getLine:function(){return new m(this._segment1._point,this._segment2._point)},getPart:function(t,e){return new k(k.getPart(this.getValues(),t,e))},getPartLength:function(t,e){return k.getLength(this.getValues(),t,e)},divideAt:function(t){return this.divideAtTime(t&&t.curve===this?t.time:this.getTimeAt(t))},divideAtTime:function(t,e){var i=null;if(t>=1e-8&&t<=1-1e-8){var n=k.subdivide(this.getValues(),t),r=n[0],s=n[1],a=e||this.hasHandles(),o=this._segment1,h=this._segment2,u=this._path;a&&(o._handleOut._set(r[2]-r[0],r[3]-r[1]),h._handleIn._set(s[4]-s[6],s[5]-s[7]));var l=r[6],f=r[7],d=new T(new c(l,f),a&&new c(r[4]-l,r[5]-f),a&&new c(s[2]-l,s[3]-f));u?(u.insert(o._index+1,d),i=this.getNext()):(this._segment2=d,this._changed(),i=new k(d,h))}return i},splitAt:function(t){var e=this._path;return e?e.splitAt(t):null},splitAtTime:function(t){return this.splitAt(this.getLocationAtTime(t))},divide:function(t,i){return this.divideAtTime(t===e?.5:i?t:this.getTimeAt(t))},split:function(t,i){return this.splitAtTime(t===e?.5:i?t:this.getTimeAt(t))},reversed:function(){return new k(this._segment2.reversed(),this._segment1.reversed())},clearHandles:function(){this._segment1._handleOut._set(0,0),this._segment2._handleIn._set(0,0)},statics:{getValues:function(t,e,i,n){var r=t._point,s=t._handleOut,a=e._handleIn,o=e._point,h=r.x,u=r.y,l=o.x,c=o.y,f=n?[h,u,h,u,l,c,l,c]:[h,u,h+s._x,u+s._y,l+a._x,c+a._y,l,c];return i&&i._transformCoordinates(f,f,4),f},subdivide:function(t,i){var n=t[0],r=t[1],s=t[2],a=t[3],o=t[4],h=t[5],u=t[6],l=t[7];i===e&&(i=.5);var c=1-i,f=c*n+i*s,d=c*r+i*a,_=c*s+i*o,g=c*a+i*h,v=c*o+i*u,p=c*h+i*l,m=c*f+i*_,y=c*d+i*g,w=c*_+i*v,x=c*g+i*p,b=c*m+i*w,C=c*y+i*x;return[[n,r,f,d,m,y,b,C],[b,C,w,x,v,p,u,l]]},getMonoCurves:function(t,e){var i=[],n=e?0:1,r=t[n+0],s=t[n+2],a=t[n+4],o=t[n+6];if(r>=s==s>=a&&s>=a==a>=o||k.isStraight(t))i.push(t);else{var h=3*(s-a)-r+o,l=2*(r+a)-4*s,c=s-r,f=[],d=u.solveQuadratic(h,l,c,f,1e-8,1-1e-8);if(d){f.sort();var _=f[0],g=k.subdivide(t,_);i.push(g[0]),d>1&&(_=(f[1]-_)/(1-_),g=k.subdivide(g[1],_),i.push(g[0])),i.push(g[1])}else i.push(t)}return i},solveCubic:function(t,e,i,n,r,s){var a=t[e],o=t[e+2],h=t[e+4],l=t[e+6],c=0;if(!(a<i&&l<i&&o<i&&h<i||a>i&&l>i&&o>i&&h>i)){var f=3*(o-a),d=3*(h-o)-f,_=l-a-f-d;c=u.solveCubic(_,d,f,a-i,n,r,s)}return c},getTimeOf:function(t,e){var i=new c(t[0],t[1]),n=new c(t[6],t[7]);if(null===(e.isClose(i,1e-12)?0:e.isClose(n,1e-12)?1:null))for(var r=[e.x,e.y],s=[],a=0;a<2;a++)for(var o=k.solveCubic(t,a,r[a],s,0,1),h=0;h<o;h++){var u=s[h];if(e.isClose(k.getPoint(t,u),1e-7))return u}return e.isClose(i,1e-7)?0:e.isClose(n,1e-7)?1:null},getNearestTime:function(t,e){function i(i){if(i>=0&&i<=1){var n=e.getDistance(k.getPoint(t,i),!0);if(n<u)return u=n,l=i,!0}}if(k.isStraight(t)){var n=t[0],r=t[1],s=t[6]-n,a=t[7]-r,o=s*s+a*a;if(0===o)return 0;var h=((e.x-n)*s+(e.y-r)*a)/o;return h<1e-12?0:h>.999999999999?1:k.getTimeOf(t,new c(n+h*s,r+h*a))}for(var u=1/0,l=0,f=0;f<=100;f++)i(f/100);for(var d=.005;d>1e-8;)i(l-d)||i(l+d)||(d/=2);return l},getPart:function(t,e,i){var n=e>i;if(n){var r=e;e=i,i=r}return e>0&&(t=k.subdivide(t,e)[1]),i<1&&(t=k.subdivide(t,(i-e)/(1-e))[0]),n?[t[6],t[7],t[4],t[5],t[2],t[3],t[0],t[1]]:t},isFlatEnough:function(t,e){var i=t[0],n=t[1],r=t[2],s=t[3],a=t[4],o=t[5],h=t[6],u=t[7],l=3*r-2*i-h,c=3*s-2*n-u,f=3*a-2*h-i,d=3*o-2*u-n;return Math.max(l*l,f*f)+Math.max(c*c,d*d)<=16*e*e},getArea:function(t){var e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],h=t[7];return 3*((h-i)*(n+s)-(o-e)*(r+a)+r*(e-s)-n*(i-a)+h*(s+e/3)-o*(a+i/3))/20},getBounds:function(t){for(var e=t.slice(0,2),i=e.slice(),n=[0,0],r=0;r<2;r++)k._addBounds(t[r],t[r+2],t[r+4],t[r+6],r,0,e,i,n);return new g(e[0],e[1],i[0]-e[0],i[1]-e[1])},_addBounds:function(t,e,i,n,r,s,a,o,h){function l(t,e){var i=t-e,n=t+e;i<a[r]&&(a[r]=i),n>o[r]&&(o[r]=n)}s/=2;var c=a[r]-s,f=o[r]+s;if(t<c||e<c||i<c||n<c||t>f||e>f||i>f||n>f)if(e<t!=e<n&&i<t!=i<n)l(t,s),l(n,s);else{var d=3*(e-i)-t+n,_=2*(t+i)-4*e,g=e-t,v=u.solveQuadratic(d,_,g,h);l(n,0);for(var p=0;p<v;p++){var m=h[p],y=1-m;1e-8<=m&&m<=1-1e-8&&l(y*y*y*t+3*y*y*m*e+3*y*m*m*i+m*m*m*n,s)}}}}},r.each(["getBounds","getStrokeBounds","getHandleBounds"],function(t){this[t]=function(){this._bounds||(this._bounds={});var e=this._bounds[t];return e||(e=this._bounds[t]=L[t]([this._segment1,this._segment2],!1,this._path)),e.clone()}},{}),r.each({isStraight:function(t,e,i,n){if(e.isZero()&&i.isZero())return!0;var r=n.subtract(t);if(r.isZero())return!1;if(r.isCollinear(e)&&r.isCollinear(i)){var s=new m(t,n);if(s.getDistance(t.add(e))<1e-7&&s.getDistance(n.add(i))<1e-7){var a=r.dot(r),o=r.dot(e)/a,h=r.dot(i)/a;return o>=0&&o<=1&&h<=0&&h>=-1}}return!1},isLinear:function(t,e,i,n){var r=n.subtract(t).divide(3);return e.equals(r)&&i.negate().equals(r)}},function(t,e){this[e]=function(e){var i=this._segment1,n=this._segment2;return t(i._point,i._handleOut,n._handleIn,n._point,e)},this.statics[e]=function(e,i){var n=e[0],r=e[1],s=e[6],a=e[7];return t(new c(n,r),new c(e[2]-n,e[3]-r),new c(e[4]-s,e[5]-a),new c(s,a),i)}},{statics:{},hasHandles:function(){return!this._segment1._handleOut.isZero()||!this._segment2._handleIn.isZero()},hasLength:function(t){return(!this.getPoint1().equals(this.getPoint2())||this.hasHandles())&&this.getLength()>(t||0)},isCollinear:function(t){return t&&this.isStraight()&&t.isStraight()&&this.getLine().isCollinear(t.getLine())},isHorizontal:function(){return this.isStraight()&&Math.abs(this.getTangentAtTime(.5).y)<1e-8},isVertical:function(){return this.isStraight()&&Math.abs(this.getTangentAtTime(.5).x)<1e-8}}),{beans:!1,getLocationAt:function(t,e){return this.getLocationAtTime(e?t:this.getTimeAt(t))},getLocationAtTime:function(t){return null!=t&&t>=0&&t<=1?new O(this,t):null},getTimeAt:function(t,e){return k.getTimeAt(this.getValues(),t,e)},getParameterAt:"#getTimeAt",getOffsetAtTime:function(t){return this.getPartLength(0,t)},getLocationOf:function(){return this.getLocationAtTime(this.getTimeOf(c.read(arguments)))},getOffsetOf:function(){var t=this.getLocationOf.apply(this,arguments);return t?t.getOffset():null},getTimeOf:function(){return k.getTimeOf(this.getValues(),c.read(arguments))},getParameterOf:"#getTimeOf",getNearestLocation:function(){var t=c.read(arguments),e=this.getValues(),i=k.getNearestTime(e,t),n=k.getPoint(e,i);return new O(this,i,n,null,t.getDistance(n))},getNearestPoint:function(){var t=this.getNearestLocation.apply(this,arguments);return t?t.getPoint():t}},new function(){var t=["getPoint","getTangent","getNormal","getWeightedTangent","getWeightedNormal","getCurvature"];return r.each(t,function(t){this[t+"At"]=function(e,i){var n=this.getValues();return k[t](n,i?e:k.getTimeAt(n,e))},this[t+"AtTime"]=function(e){return k[t](this.getValues(),e)}},{statics:{_evaluateMethods:t}})},new function(){function t(t){var e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=9*(n-s)+3*(t[6]-e),h=6*(e+s)-12*n,u=3*(n-e),l=9*(r-a)+3*(t[7]-i),c=6*(i+a)-12*r,f=3*(r-i);return function(t){var e=(o*t+h)*t+u,i=(l*t+c)*t+f;return Math.sqrt(e*e+i*i)}}function i(t,e){return Math.max(2,Math.min(16,Math.ceil(32*Math.abs(e-t))))}function n(t,e,i,n){if(null==e||e<0||e>1)return null;var r=t[0],s=t[1],a=t[2],o=t[3],h=t[4],l=t[5],f=t[6],d=t[7],_=u.isZero;_(a-r)&&_(o-s)&&(a=r,o=s),_(h-f)&&_(l-d)&&(h=f,l=d);var g,v,p=3*(a-r),m=3*(h-a)-p,y=f-r-p-m,w=3*(o-s),x=3*(l-o)-w,b=d-s-w-x;if(0===i)g=0===e?r:1===e?f:((y*e+m)*e+p)*e+r,v=0===e?s:1===e?d:((b*e+x)*e+w)*e+s;else{if(e<1e-8?(g=p,v=w):e>1-1e-8?(g=3*(f-h),v=3*(d-l)):(g=(3*y*e+2*m)*e+p,v=(3*b*e+2*x)*e+w),n){0===g&&0===v&&(e<1e-8||e>1-1e-8)&&(g=h-a,v=l-o);var C=Math.sqrt(g*g+v*v);C&&(g/=C,v/=C)}if(3===i){var h=6*y*e+2*m,l=6*b*e+2*x,S=Math.pow(g*g+v*v,1.5);g=0!==S?(g*l-v*h)/S:0,v=0}}return 2===i?new c(v,-g):new c(g,v)}return{statics:{classify:function(t){function i(t,i,n){var r=i!==e,s=r&&i>0&&i<1,a=r&&n>0&&n<1;return!r||(s||a)&&("loop"!==t||s&&a)||(t="arch",s=a=!1),{type:t,roots:s||a?s&&a?i<n?[i,n]:[n,i]:[s?i:n]:null}}var n=t[0],r=t[1],s=t[2],a=t[3],o=t[4],h=t[5],l=t[6],c=t[7],f=s*(r-c)+a*(l-n)+n*c-r*l,d=3*(o*(a-r)+h*(n-s)+s*r-a*n),_=d-f,g=_-f+(n*(c-h)+r*(o-l)+l*h-c*o),v=Math.sqrt(g*g+_*_+d*d),p=0!==v?1/v:0,m=u.isZero;if(g*=p,_*=p,d*=p,m(g))return m(_)?i(m(d)?"line":"quadratic"):i("serpentine",d/(3*_));var y=3*_*_-4*g*d;if(m(y))return i("cusp",_/(2*g));var w=y>0?Math.sqrt(y/3):Math.sqrt(-y),x=2*g;return i(y>0?"serpentine":"loop",(_+w)/x,(_-w)/x)},getLength:function(n,r,s,a){if(r===e&&(r=0),s===e&&(s=1),k.isStraight(n)){var o=n;s<1&&(o=k.subdivide(o,s)[0],r/=s),r>0&&(o=k.subdivide(o,r)[1]);var h=o[6]-o[0],l=o[7]-o[1];return Math.sqrt(h*h+l*l)}return u.integrate(a||t(n),r,s,i(r,s))},getTimeAt:function(n,r,s){if(s===e&&(s=r<0?1:0),0===r)return s;var a=Math.abs,o=r>0,h=o?s:0,l=o?1:s,c=t(n),f=k.getLength(n,h,l,c),d=a(r)-f;if(a(d)<1e-12)return o?l:h;if(d>1e-12)return null;var _=r/f,g=0;return u.findRoot(function(t){return g+=u.integrate(c,s,t,i(s,t)),s=t,g-r},c,s+_,h,l,32,1e-12)},getPoint:function(t,e){return n(t,e,0,!1)},getTangent:function(t,e){return n(t,e,1,!0)},getWeightedTangent:function(t,e){return n(t,e,1,!1)},getNormal:function(t,e){return n(t,e,2,!0)},getWeightedNormal:function(t,e){return n(t,e,2,!1)},getCurvature:function(t,e){return n(t,e,3,!1).x},getPeaks:function(t){var e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=3*n-e-3*s+t[6],h=3*e-6*n+3*s,l=-3*e+3*n,c=3*r-i-3*a+t[7],f=3*i-6*r+3*a,d=-3*i+3*r,_=[];return u.solveCubic(9*(o*o+c*c),9*(o*h+f*c),2*(h*h+f*f)+3*(l*o+d*c),l*h+f*d,_,1e-8,1-1e-8),_.sort()}}}},new function(){function t(t,e,i,n,r,s,a){var o=!a&&i.getPrevious()===r,h=!a&&i!==r&&i.getNext()===r;if(null!==n&&n>=(o?1e-8:0)&&n<=(h?1-1e-8:1)&&null!==s&&s>=(h?1e-8:0)&&s<=(o?1-1e-8:1)){var u=new O(i,n,null,a),l=new O(r,s,null,a);u._intersection=l,l._intersection=u,e&&!e(u)||O.insert(t,u,!0)}}function e(r,s,a,o,h,u,l,c,f,d,_,g,v){if(++f>=4096||++c>=40)return f;var p,y,w=s[0],x=s[1],b=s[6],C=s[7],S=m.getSignedDistance,P=S(w,x,b,C,s[2],s[3]),I=S(w,x,b,C,s[4],s[5]),M=P*I>0?.75:4/9,T=M*Math.min(0,P,I),z=M*Math.max(0,P,I),O=S(w,x,b,C,r[0],r[1]),A=S(w,x,b,C,r[2],r[3]),L=S(w,x,b,C,r[4],r[5]),N=S(w,x,b,C,r[6],r[7]),B=i(O,A,L,N),D=B[0],j=B[1];if(0===P&&0===I&&0===O&&0===A&&0===L&&0===N||null==(p=n(D,j,T,z))||null==(y=n(D.reverse(),j.reverse(),T,z)))return f;var E=d+(_-d)*p,F=d+(_-d)*y;if(Math.max(v-g,F-E)<1e-9){var R=(E+F)/2,q=(g+v)/2;t(h,u,l?o:a,l?q:R,l?a:o,l?R:q)}else if(r=k.getPart(r,p,y),y-p>.8)if(F-E>v-g){R=(E+F)/2;f=e(s,(V=k.subdivide(r,.5))[0],o,a,h,u,!l,c,f,g,v,E,R),f=e(s,V[1],o,a,h,u,!l,c,f,g,v,R,F)}else{var V=k.subdivide(s,.5),q=(g+v)/2;f=e(V[0],r,o,a,h,u,!l,c,f,g,q,E,F),f=e(V[1],r,o,a,h,u,!l,c,f,q,v,E,F)}else f=v-g>=1e-9?e(s,r,o,a,h,u,!l,c,f,g,v,E,F):e(r,s,a,o,h,u,l,c,f,E,F,g,v);return f}function i(t,e,i,n){var r,s=[0,t],a=[1/3,e],o=[2/3,i],h=[1,n],u=e-(2*t+n)/3,l=i-(t+2*n)/3;if(u*l<0)r=[[s,a,h],[s,o,h]];else{var c=u/l;r=[c>=2?[s,a,h]:c<=.5?[s,o,h]:[s,a,o,h],[s,h]]}return(u||l)<0?r.reverse():r}function n(t,e,i,n){return t[0][1]<i?r(t,!0,i):e[0][1]>n?r(e,!1,n):t[0][0]}function r(t,e,i){for(var n=t[0][0],r=t[0][1],s=1,a=t.length;s<a;s++){var o=t[s][0],h=t[s][1];if(e?h>=i:h<=i)return h===i?o:n+(i-r)*(o-n)/(h-r);n=o,r=h}return null}function s(t,e,i,n,r){var s=u.isZero;if(s(n)&&s(r)){var a=k.getTimeOf(t,new c(e,i));return null===a?[]:[a]}for(var o=Math.atan2(-r,n),h=Math.sin(o),l=Math.cos(o),f=[],d=[],_=0;_<8;_+=2){var g=t[_]-e,v=t[_+1]-i;f.push(g*l-v*h,g*h+v*l)}return k.solveCubic(f,1,0,d,0,1),d}function a(e,i,n,r,a,o,h){for(var u=i[0],l=i[1],c=s(e,u,l,i[6]-u,i[7]-l),f=0,d=c.length;f<d;f++){var _=c[f],g=k.getPoint(e,_),v=k.getTimeOf(i,g);null!==v&&t(a,o,h?r:n,h?v:_,h?n:r,h?_:v)}}function o(e,i,n,r,s,a){var o=m.intersect(e[0],e[1],e[6],e[7],i[0],i[1],i[6],i[7]);o&&t(s,a,n,k.getTimeOf(e,o),r,k.getTimeOf(i,o))}function h(i,n,r,s,h,u){var l=Math.min,d=Math.max;if(d(i[0],i[2],i[4],i[6])+1e-12>l(n[0],n[2],n[4],n[6])&&l(i[0],i[2],i[4],i[6])-1e-12<d(n[0],n[2],n[4],n[6])&&d(i[1],i[3],i[5],i[7])+1e-12>l(n[1],n[3],n[5],n[7])&&l(i[1],i[3],i[5],i[7])-1e-12<d(n[1],n[3],n[5],n[7])){var _=f(i,n);if(_)for(x=0;x<2;x++){var g=_[x];t(h,u,r,g[0],s,g[1],!0)}else{var v=k.isStraight(i),p=k.isStraight(n),m=v&&p,y=v&&!p,w=h.length;if((m?o:v||p?a:e)(y?n:i,y?i:n,y?s:r,y?r:s,h,u,y,0,0,0,1,0,1),!m||h.length===w)for(var x=0;x<4;x++){var b=x>>1,C=1&x,S=6*b,P=6*C,I=new c(i[S],i[S+1]),M=new c(n[P],n[P+1]);I.isClose(M,1e-12)&&t(h,u,r,b,s,C)}}}return h}function l(e,i,n,r){var s=k.classify(e);if("loop"===s.type){var a=s.roots;t(n,r,i,a[0],i,a[1])}return n}function f(t,e){function i(t){var e=t[6]-t[0],i=t[7]-t[1];return e*e+i*i}var n=Math.abs,r=m.getDistance,s=k.isStraight(t),a=k.isStraight(e),o=s&&a,h=i(t)<i(e),u=h?e:t,l=h?t:e,f=u[0],d=u[1],_=u[6]-f,g=u[7]-d;if(r(f,d,_,g,l[0],l[1],!0)<1e-7&&r(f,d,_,g,l[6],l[7],!0)<1e-7)!o&&r(f,d,_,g,u[2],u[3],!0)<1e-7&&r(f,d,_,g,u[4],u[5],!0)<1e-7&&r(f,d,_,g,l[2],l[3],!0)<1e-7&&r(f,d,_,g,l[4],l[5],!0)<1e-7&&(s=a=o=!0);else if(o)return null;if(s^a)return null;for(var v=[t,e],p=[],y=0;y<4&&p.length<2;y++){var w=1&y,x=1^w,b=y>>1,C=k.getTimeOf(v[w],new c(v[x][b?6:0],v[x][b?7:1]));if(null!=C){var S=w?[b,C]:[C,b];(!p.length||n(S[0]-p[0][0])>1e-8&&n(S[1]-p[0][1])>1e-8)&&p.push(S)}if(y>2&&!p.length)break}if(2!==p.length)p=null;else if(!o){var P=k.getPart(t,p[0][0],p[1][0]),I=k.getPart(e,p[0][1],p[1][1]);(n(I[2]-P[2])>1e-7||n(I[3]-P[3])>1e-7||n(I[4]-P[4])>1e-7||n(I[5]-P[5])>1e-7)&&(p=null)}return p}return{getIntersections:function(t){var e=this.getValues(),i=t&&t!==this&&t.getValues();return i?h(e,i,this,t,[]):l(e,this,[])},statics:{getOverlaps:f,getIntersections:function(t,e,i,n,r,s){var a=!e;a&&(e=t);for(var o,u,c=t.length,f=e.length,d=[],_=[],g=0;g<f;g++)d[g]=e[g].getValues(r);for(g=0;g<c;g++){var v=t[g],p=a?d[g]:v.getValues(n),m=v.getPath();m!==u&&(u=m,o=[],_.push(o)),a&&l(p,v,o,i);for(var y=a?g+1:0;y<f;y++){if(s&&o.length)return o;h(p,d[y],v,e[y],o,i)}}o=[];for(var g=0,w=_.length;g<w;g++)o.push.apply(o,_[g]);return o},getCurveLineIntersections:s}}}),O=r.extend({_class:"CurveLocation",initialize:function(t,e,i,n,r){if(e>=.99999999){var s=t.getNext();s&&(e=0,t=s)}this._setCurve(t),this._time=e,this._point=i||t.getPointAtTime(e),this._overlap=n,this._distance=r,this._intersection=this._next=this._previous=null},_setCurve:function(t){var e=t._path;this._path=e,this._version=e?e._version:0,this._curve=t,this._segment=null,this._segment1=t._segment1,this._segment2=t._segment2},_setSegment:function(t){this._setCurve(t.getCurve()),this._segment=t,this._time=t===this._segment1?0:1,this._point=t._point.clone()},getSegment:function(){var t=this._segment;if(!t){var e=this.getCurve(),i=this.getTime();0===i?t=e._segment1:1===i?t=e._segment2:null!=i&&(t=e.getPartLength(0,i)<e.getPartLength(i,1)?e._segment1:e._segment2),this._segment=t}return t},getCurve:function(){function t(t){var e=t&&t.getCurve();if(e&&null!=(i._time=e.getTimeOf(i._point)))return i._setCurve(e),e}var e=this._path,i=this;return e&&e._version!==this._version&&(this._time=this._offset=this._curveOffset=this._curve=null),this._curve||t(this._segment)||t(this._segment1)||t(this._segment2.getPrevious())},getPath:function(){var t=this.getCurve();return t&&t._path},getIndex:function(){var t=this.getCurve();return t&&t.getIndex()},getTime:function(){var t=this.getCurve(),e=this._time;return t&&null==e?this._time=t.getTimeOf(this._point):e},getParameter:"#getTime",getPoint:function(){return this._point},getOffset:function(){var t=this._offset;if(null==t){t=0;var e=this.getPath(),i=this.getIndex();if(e&&null!=i)for(var n=e.getCurves(),r=0;r<i;r++)t+=n[r].getLength();this._offset=t+=this.getCurveOffset()}return t},getCurveOffset:function(){var t=this._curveOffset;if(null==t){var e=this.getCurve(),i=this.getTime();this._curveOffset=t=null!=i&&e&&e.getPartLength(0,i)}return t},getIntersection:function(){return this._intersection},getDistance:function(){return this._distance},divide:function(){var t=this.getCurve(),e=t&&t.divideAtTime(this.getTime());return e&&this._setSegment(e._segment1),e},split:function(){var t=this.getCurve(),e=t._path,i=t&&t.splitAtTime(this.getTime());return i&&this._setSegment(e.getLastSegment()),i},equals:function(t,e){var i=this===t;if(!i&&t instanceof O){var n=this.getCurve(),r=t.getCurve(),s=n._path;if(s===r._path){var a=Math.abs,o=a(this.getOffset()-t.getOffset()),h=!e&&this._intersection,u=!e&&t._intersection;i=(o<1e-7||s&&a(s.getLength()-o)<1e-7)&&(!h&&!u||h&&u&&h.equals(u,!0))}}return i},toString:function(){var t=[],e=this.getPoint(),i=h.instance;e&&t.push("point: "+e);var n=this.getIndex();null!=n&&t.push("index: "+n);var r=this.getTime();return null!=r&&t.push("time: "+i.number(r)),null!=this._distance&&t.push("distance: "+i.number(this._distance)),"{ "+t.join(", ")+" }"},isTouching:function(){var t=this._intersection;if(t&&this.getTangent().isCollinear(t.getTangent())){var e=this.getCurve(),i=t.getCurve();return!(e.isStraight()&&i.isStraight()&&e.getLine().intersect(i.getLine()))}return!1},isCrossing:function(){function t(t,e){var i=t.getValues(),n=k.classify(i).roots||k.getPeaks(i),r=n.length,s=e&&r>1?n[r-1]:r>0?n[0]:.5;c.push(k.getLength(i,e?s:0,e?1:s)/2)}function e(t,e,i){return e<i?t>e&&t<i:t>e||t<i}var i=this._intersection;if(!i)return!1;var n=this.getTime(),r=i.getTime(),s=n>=1e-8&&n<=1-1e-8,a=r>=1e-8&&r<=1-1e-8;if(s&&a)return!this.isTouching();var o=this.getCurve(),h=n<1e-8?o.getPrevious():o,u=i.getCurve(),l=r<1e-8?u.getPrevious():u;if(n>1-1e-8&&(o=o.getNext()),r>1-1e-8&&(u=u.getNext()),!(h&&o&&l&&u))return!1;var c=[];s||(t(h,!0),t(o,!1)),a||(t(l,!0),t(u,!1));var f=this.getPoint(),d=Math.min.apply(Math,c),_=s?o.getTangentAtTime(n):o.getPointAt(d).subtract(f),g=s?_.negate():h.getPointAt(-d).subtract(f),v=a?u.getTangentAtTime(r):u.getPointAt(d).subtract(f),p=a?v.negate():l.getPointAt(-d).subtract(f),m=g.getAngle(),y=_.getAngle(),w=p.getAngle(),x=v.getAngle();return!!(s?e(m,w,x)^e(y,w,x)&&e(m,x,w)^e(y,x,w):e(w,m,y)^e(x,m,y)&&e(w,y,m)^e(x,y,m))},hasOverlap:function(){return!!this._overlap}},r.each(k._evaluateMethods,function(t){var e=t+"At";this[t]=function(){var t=this.getCurve(),i=this.getTime();return null!=i&&t&&t[e](i,!0)}},{preserve:!0}),new function(){function t(t,e,i){function n(i,n){for(var s=i+n;s>=-1&&s<=r;s+=n){var a=t[(s%r+r)%r];if(!e.getPoint().isClose(a.getPoint(),1e-7))break;if(e.equals(a))return a}return null}for(var r=t.length,s=0,a=r-1;s<=a;){var o,h=s+a>>>1,u=t[h];if(i&&(o=e.equals(u)?u:n(h,-1)||n(h,1)))return e._overlap&&(o._overlap=o._intersection._overlap=!0),o;var l=e.getPath(),c=u.getPath();(l!==c?l._id-c._id:e.getIndex()+e.getTime()-(u.getIndex()+u.getTime()))<0?a=h-1:s=h+1}return t.splice(s,0,e),e}return{statics:{insert:t,expand:function(e){for(var i=e.slice(),n=e.length-1;n>=0;n--)t(i,e[n]._intersection,!1);return i}}}}),A=w.extend({_class:"PathItem",_selectBounds:!1,_canScaleStroke:!0,beans:!0,initialize:function(){},statics:{create:function(t){var e,i,n;if(r.isPlainObject(t)?(i=t.segments,e=t.pathData):Array.isArray(t)?i=t:"string"==typeof t&&(e=t),i){var s=i[0];n=s&&Array.isArray(s[0])}else e&&(n=(e.match(/m/gi)||[]).length>1||/z\s*\S+/i.test(e));return new(n?N:L)(t)}},_asPathItem:function(){return this},isClockwise:function(){return this.getArea()>=0},setClockwise:function(t){this.isClockwise()!=(t=!!t)&&this.reverse()},setPathData:function(t){function e(t,e){var i=+n[t];return o&&(i+=h[e]),i}function i(t){return new c(e(t,"x"),e(t+1,"y"))}var n,r,s,a=t&&t.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/gi),o=!1,h=new c,u=new c;this.clear();for(var l=0,f=a&&a.length;l<f;l++){var _=a[l],g=_[0],v=g.toLowerCase(),p=(n=_.match(/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g))&&n.length;switch(o=g===v,"z"!==r||/[mz]/.test(v)||this.moveTo(h),v){case"m":case"l":for(var m="m"===v,y=0;y<p;y+=2)this[m?"moveTo":"lineTo"](h=i(y)),m&&(u=h,m=!1);s=h;break;case"h":case"v":var w="h"===v?"x":"y";h=h.clone();for(y=0;y<p;y++)h[w]=e(y,w),this.lineTo(h);s=h;break;case"c":for(y=0;y<p;y+=6)this.cubicCurveTo(i(y),s=i(y+2),h=i(y+4));break;case"s":for(y=0;y<p;y+=4)this.cubicCurveTo(/[cs]/.test(r)?h.multiply(2).subtract(s):h,s=i(y),h=i(y+2)),r=v;break;case"q":for(y=0;y<p;y+=4)this.quadraticCurveTo(s=i(y),h=i(y+2));break;case"t":for(y=0;y<p;y+=2)this.quadraticCurveTo(s=/[qt]/.test(r)?h.multiply(2).subtract(s):h,h=i(y)),r=v;break;case"a":for(y=0;y<p;y+=7)this.arcTo(h=i(y+5),new d(+n[y],+n[y+1]),+n[y+2],+n[y+4],+n[y+3]);break;case"z":this.closePath(1e-12),h=u}r=v}},_canComposite:function(){return!(this.hasFill()&&this.hasStroke())},_contains:function(t){var e=t.isInside(this.getBounds({internal:!0,handle:!0}))?this._getWinding(t):{};return e.onPath||!!("evenodd"===this.getFillRule()?1&e.windingL||1&e.windingR:e.winding)},getIntersections:function(t,e,i,n){var r=this===t||!t,s=this._matrix._orNullIfIdentity(),a=r?s:(i||t._matrix)._orNullIfIdentity();return r||this.getBounds(s).intersects(t.getBounds(a),1e-12)?k.getIntersections(this.getCurves(),!r&&t.getCurves(),e,s,a,n):[]},getCrossings:function(t){return this.getIntersections(t,function(t){return t.hasOverlap()||t.isCrossing()})},getNearestLocation:function(){for(var t=c.read(arguments),e=this.getCurves(),i=1/0,n=null,r=0,s=e.length;r<s;r++){var a=e[r].getNearestLocation(t);a._distance<i&&(i=a._distance,n=a)}return n},getNearestPoint:function(){var t=this.getNearestLocation.apply(this,arguments);return t?t.getPoint():t},interpolate:function(t,e,i){var n=!this._children,r=n?"_segments":"_children",s=t[r],a=e[r],o=this[r];if(!s||!a||s.length!==a.length)throw new Error("Invalid operands in interpolate() call: "+t+", "+e);var h=o.length,u=a.length;if(h<u)for(var l=n?T:L,c=h;c<u;c++)this.add(new l);else h>u&&this[n?"removeSegments":"removeChildren"](u,h);for(c=0;c<u;c++)o[c].interpolate(s[c],a[c],i);n&&(this.setClosed(t._closed),this._changed(9))},compare:function(t){var e=!1;if(t){var i=this._children||[this],n=t._children?t._children.slice():[t],r=i.length,s=n.length,a=[],o=0;e=!0;for(var h=r-1;h>=0&&e;h--){var u=i[h];e=!1;for(var l=s-1;l>=0&&!e;l--)u.compare(n[l])&&(a[l]||(a[l]=!0,o++),e=!0)}e=e&&o===s}return e}}),L=A.extend({_class:"Path",_serializeFields:{segments:[],closed:!1},initialize:function(t){this._closed=!1,this._segments=[],this._version=0;var i=Array.isArray(t)?"object"==typeof t[0]?t:arguments:!t||t.size!==e||t.x===e&&t.point===e?null:arguments;i&&i.length>0?this.setSegments(i):(this._curves=e,this._segmentSelection=0,i||"string"!=typeof t||(this.setPathData(t),t=null)),this._initialize(!i&&t)},_equals:function(t){return this._closed===t._closed&&r.equals(this._segments,t._segments)},copyContent:function(t){this.setSegments(t._segments),this._closed=t._closed},_changed:function t(i){if(t.base.call(this,i),8&i){if(this._length=this._area=e,16&i)this._version++;else if(this._curves)for(var n=0,r=this._curves.length;n<r;n++)this._curves[n]._changed()}else 32&i&&(this._bounds=e)},getStyle:function(){var t=this._parent;return(t instanceof N?t:this)._style},getSegments:function(){return this._segments},setSegments:function(t){var i=this.isFullySelected(),n=t&&t.length;if(this._segments.length=0,this._segmentSelection=0,this._curves=e,n){var r=t[n-1];"boolean"==typeof r&&(this.setClosed(r),n--),this._add(T.readList(t,0,{},n))}i&&this.setFullySelected(!0)},getFirstSegment:function(){return this._segments[0]},getLastSegment:function(){return this._segments[this._segments.length-1]},getCurves:function(){var t=this._curves,e=this._segments;if(!t){var i=this._countCurves();t=this._curves=new Array(i);for(var n=0;n<i;n++)t[n]=new k(this,e[n],e[n+1]||e[0])}return t},getFirstCurve:function(){return this.getCurves()[0]},getLastCurve:function(){var t=this.getCurves();return t[t.length-1]},isClosed:function(){return this._closed},setClosed:function(t){if(this._closed!=(t=!!t)){if(this._closed=t,this._curves){var e=this._curves.length=this._countCurves();t&&(this._curves[e-1]=new k(this,this._segments[e-1],this._segments[0]))}this._changed(25)}}},{beans:!0,getPathData:function(t,e){function i(e,i){if(e._transformCoordinates(t,g),n=g[0],r=g[1],v)p.push("M"+_.pair(n,r)),v=!1;else if(o=g[2],u=g[3],o===n&&u===r&&l===s&&c===a){if(!i){var h=n-s,f=r-a;p.push(0===h?"v"+_.number(f):0===f?"h"+_.number(h):"l"+_.pair(h,f))}}else p.push("c"+_.pair(l-s,c-a)+" "+_.pair(o-s,u-a)+" "+_.pair(n-s,r-a));s=n,a=r,l=g[4],c=g[5]}var n,r,s,a,o,u,l,c,f=this._segments,d=f.length,_=new h(e),g=new Array(6),v=!0,p=[];if(!d)return"";for(var m=0;m<d;m++)i(f[m]);return this._closed&&d>0&&(i(f[0],!0),p.push("z")),p.join("")},isEmpty:function(){return!this._segments.length},_transformContent:function(t){for(var e=this._segments,i=new Array(6),n=0,r=e.length;n<r;n++)e[n]._transformCoordinates(t,i,!0);return!0},_add:function(t,e){for(var i=this._segments,n=this._curves,r=t.length,s=null==e,e=s?i.length:e,a=0;a<r;a++){var o=t[a];o._path&&(o=t[a]=o.clone()),o._path=this,o._index=e+a,o._selection&&this._updateSelection(o,0,o._selection)}if(s)i.push.apply(i,t);else{i.splice.apply(i,[e,0].concat(t));for(var a=e+r,h=i.length;a<h;a++)i[a]._index=a}if(n){var u=this._countCurves(),l=e>0&&e+r-1===u?e-1:e,c=l,f=Math.min(l+r,u);t._curves&&(n.splice.apply(n,[l,0].concat(t._curves)),c+=t._curves.length);for(a=c;a<f;a++)n.splice(a,0,new k(this,null,null));this._adjustCurves(l,f)}return this._changed(25),t},_adjustCurves:function(t,e){for(var i,n=this._segments,r=this._curves,s=t;s<e;s++)(i=r[s])._path=this,i._segment1=n[s],i._segment2=n[s+1]||n[0],i._changed();(i=r[this._closed&&!t?n.length-1:t-1])&&(i._segment2=n[t]||n[0],i._changed()),(i=r[e])&&(i._segment1=n[e],i._changed())},_countCurves:function(){var t=this._segments.length;return!this._closed&&t>0?t-1:t},add:function(t){return arguments.length>1&&"number"!=typeof t?this._add(T.readList(arguments)):this._add([T.read(arguments)])[0]},insert:function(t,e){return arguments.length>2&&"number"!=typeof e?this._add(T.readList(arguments,1),t):this._add([T.read(arguments,1)],t)[0]},addSegment:function(){return this._add([T.read(arguments)])[0]},insertSegment:function(t){return this._add([T.read(arguments,1)],t)[0]},addSegments:function(t){return this._add(T.readList(t))},insertSegments:function(t,e){return this._add(T.readList(e),t)},removeSegment:function(t){return this.removeSegments(t,t+1)[0]||null},removeSegments:function(t,e,i){t=t||0,e=r.pick(e,this._segments.length);var n=this._segments,s=this._curves,a=n.length,o=n.splice(t,e-t),h=o.length;if(!h)return o;for(l=0;l<h;l++){var u=o[l];u._selection&&this._updateSelection(u,u._selection,0),u._index=u._path=null}for(var l=t,c=n.length;l<c;l++)n[l]._index=l;if(s){for(var f=t>0&&e===a+(this._closed?1:0)?t-1:t,l=(s=s.splice(f,h)).length-1;l>=0;l--)s[l]._path=null;i&&(o._curves=s.slice(1)),this._adjustCurves(f,f)}return this._changed(25),o},clear:"#removeSegments",hasHandles:function(){for(var t=this._segments,e=0,i=t.length;e<i;e++)if(t[e].hasHandles())return!0;return!1},clearHandles:function(){for(var t=this._segments,e=0,i=t.length;e<i;e++)t[e].clearHandles()},getLength:function(){if(null==this._length){for(var t=this.getCurves(),e=0,i=0,n=t.length;i<n;i++)e+=t[i].getLength();this._length=e}return this._length},getArea:function(){var t=this._area;if(null==t){var e=this._segments,i=this._closed;t=0;for(var n=0,r=e.length;n<r;n++){var s=n+1===r;t+=k.getArea(k.getValues(e[n],e[s?0:n+1],null,s&&!i))}this._area=t}return t},isFullySelected:function(){var t=this._segments.length;return this.isSelected()&&t>0&&this._segmentSelection===7*t},setFullySelected:function(t){t&&this._selectSegments(!0),this.setSelected(t)},setSelection:function t(e){1&e||this._selectSegments(!1),t.base.call(this,e)},_selectSegments:function(t){var e=this._segments,i=e.length,n=t?7:0;this._segmentSelection=n*i;for(var r=0;r<i;r++)e[r]._selection=n},_updateSelection:function(t,e,i){t._selection=i,(this._segmentSelection+=i-e)>0&&this.setSelected(!0)},divideAt:function(t){var e,i=this.getLocationAt(t);return i&&(e=i.getCurve().divideAt(i.getCurveOffset()))?e._segment1:null},splitAt:function(t){var e=this.getLocationAt(t),i=e&&e.index,n=e&&e.time;n>1-1e-8&&(i++,n=0);var r=this.getCurves();if(i>=0&&i<r.length){n>=1e-8&&r[i++].divideAtTime(n);var s,a=this.removeSegments(i,this._segments.length,!0);return this._closed?(this.setClosed(!1),s=this):((s=new L(w.NO_INSERT)).insertAbove(this),s.copyAttributes(this)),s._add(a,0),this.addSegment(a[0]),s}return null},split:function(t,i){var n,r=i===e?t:(n=this.getCurves()[t])&&n.getLocationAtTime(i);return null!=r?this.splitAt(r):null},join:function(t,e){var i=e||0;if(t&&t!==this){var n=t._segments,r=this.getLastSegment(),s=t.getLastSegment();if(!s)return this;r&&r._point.isClose(s._point,i)&&t.reverse();var a=t.getFirstSegment();if(r&&r._point.isClose(a._point,i))r.setHandleOut(a._handleOut),this._add(n.slice(1));else{var o=this.getFirstSegment();o&&o._point.isClose(a._point,i)&&t.reverse(),s=t.getLastSegment(),o&&o._point.isClose(s._point,i)?(o.setHandleIn(s._handleIn),this._add(n.slice(0,n.length-1),0)):this._add(n.slice())}t._closed&&this._add([n[0]]),t.remove()}var h=this.getFirstSegment(),u=this.getLastSegment();return h!==u&&h._point.isClose(u._point,i)&&(h.setHandleIn(u._handleIn),u.remove(),this.setClosed(!0)),this},reduce:function(t){for(var e=this.getCurves(),i=t&&t.simplify,n=i?1e-7:0,r=e.length-1;r>=0;r--){var s=e[r];!s.hasHandles()&&(!s.hasLength(n)||i&&s.isCollinear(s.getNext()))&&s.remove()}return this},reverse:function(){this._segments.reverse();for(var t=0,e=this._segments.length;t<e;t++){var i=this._segments[t],n=i._handleIn;i._handleIn=i._handleOut,i._handleOut=n,i._index=t}this._curves=null,this._changed(9)},flatten:function(t){for(var e=new B(this,t||.25,256,!0).parts,i=e.length,n=[],r=0;r<i;r++)n.push(new T(e[r].curve.slice(0,2)));!this._closed&&i>0&&n.push(new T(e[i-1].curve.slice(6))),this.setSegments(n)},simplify:function(t){var e=new D(this).fit(t||2.5);return e&&this.setSegments(e),!!e},smooth:function(t){function i(t,e){var i=t&&t.index;if(null!=i){var r=t.path;if(r&&r!==n)throw new Error(t._class+" "+i+" of "+r+" is not part of "+n);e&&t instanceof k&&i++}else i="number"==typeof t?t:e;return Math.min(i<0&&h?i%o:i<0?i+o:i,o-1)}var n=this,r=t||{},s=r.type||"asymmetric",a=this._segments,o=a.length,h=this._closed,u=h&&r.from===e&&r.to===e,l=i(r.from,0),c=i(r.to,o-1);if(l>c)if(h)l-=o;else{var f=l;l=c,c=f}if(/^(?:asymmetric|continuous)$/.test(s)){var d="asymmetric"===s,_=Math.min,g=c-l+1,v=g-1,p=u?_(g,4):1,m=p,y=p,w=[];if(h||(m=_(1,l),y=_(1,o-c-1)),(v+=m+y)<=1)return;for(var x=0,b=l-m;x<=v;x++,b++)w[x]=a[(b<0?b+o:b)%o]._point;for(var C=w[0]._x+2*w[1]._x,S=w[0]._y+2*w[1]._y,P=2,I=v-1,M=[C],T=[S],z=[P],O=[],A=[],x=1;x<v;x++){var L=x<I,N=L?1:d?1:2,B=L?4:d?2:7,D=L?4:d?3:8,j=L?2:d?0:1,E=N/P;P=z[x]=B-E,C=M[x]=D*w[x]._x+j*w[x+1]._x-E*C,S=T[x]=D*w[x]._y+j*w[x+1]._y-E*S}O[I]=M[I]/z[I],A[I]=T[I]/z[I];for(x=v-2;x>=0;x--)O[x]=(M[x]-O[x+1])/z[x],A[x]=(T[x]-A[x+1])/z[x];O[v]=(3*w[v]._x-O[I])/2,A[v]=(3*w[v]._y-A[I])/2;for(var x=m,F=v-y,b=l;x<=F;x++,b++){var R=a[b<0?b+o:b],q=R._point,V=O[x]-q._x,H=A[x]-q._y;(u||x<F)&&R.setHandleOut(V,H),(u||x>m)&&R.setHandleIn(-V,-H)}}else for(x=l;x<=c;x++)a[x<0?x+o:x].smooth(r,!u&&x===l,!u&&x===c)},toShape:function(t){function i(t,e){var i=l[t],n=i.getNext(),r=l[e],s=r.getNext();return i._handleOut.isZero()&&n._handleIn.isZero()&&r._handleOut.isZero()&&s._handleIn.isZero()&&n._point.subtract(i._point).isCollinear(s._point.subtract(r._point))}function n(t){var e=l[t],i=e.getNext(),n=e._handleOut,r=i._handleIn;if(n.isOrthogonal(r)){var s=e._point,a=i._point,o=new m(s,n,!0).intersect(new m(a,r,!0),!0);return o&&u.isZero(n.getLength()/o.subtract(s).getLength()-.5522847498307936)&&u.isZero(r.getLength()/o.subtract(a).getLength()-.5522847498307936)}return!1}function r(t,e){return l[t]._point.getDistance(l[e]._point)}if(!this._closed)return null;var s,a,o,h,l=this._segments;if(!this.hasHandles()&&4===l.length&&i(0,2)&&i(1,3)&&function(t){var e=l[t],i=e.getPrevious(),n=e.getNext();return i._handleOut.isZero()&&e._handleIn.isZero()&&e._handleOut.isZero()&&n._handleIn.isZero()&&e._point.subtract(i._point).isOrthogonal(n._point.subtract(e._point))}(1)?(s=C.Rectangle,a=new d(r(0,3),r(0,1)),h=l[1]._point.add(l[2]._point).divide(2)):8===l.length&&n(0)&&n(2)&&n(4)&&n(6)&&i(1,5)&&i(3,7)?(s=C.Rectangle,o=(a=new d(r(1,6),r(0,3))).subtract(new d(r(0,7),r(1,2))).divide(2),h=l[3]._point.add(l[4]._point).divide(2)):4===l.length&&n(0)&&n(1)&&n(2)&&n(3)&&(u.isZero(r(0,2)-r(1,3))?(s=C.Circle,o=r(0,2)/2):(s=C.Ellipse,o=new d(r(2,0)/2,r(3,1)/2)),h=l[1]._point),s){var c=this.getPosition(!0),f=new s({center:c,size:a,radius:o,insert:!1});return f.copyAttributes(this,!0),f._matrix.prepend(this._matrix),f.rotate(h.subtract(c).getAngle()+90),(t===e||t)&&f.insertAbove(this),f}return null},toPath:"#clone",compare:function t(e){if(!e||e instanceof N)return t.base.call(this,e);var i=this.getCurves(),n=e.getCurves(),r=i.length,s=n.length;if(!r||!s)return r==s;for(var a,o,h=i[0].getValues(),u=[],l=0,c=0,f=0;f<s;f++){g=n[f].getValues();if(u.push(g),v=k.getOverlaps(h,g)){a=!f&&v[0][0]>0?s-1:f,o=v[0][1];break}}for(var d,_=Math.abs,g=u[a];h&&g;){var v=k.getOverlaps(h,g);if(v&&_(v[0][0]-c)<1e-8){1===(c=v[1][0])&&(h=++l<r?i[l].getValues():null,c=0);var p=v[0][1];if(_(p-o)<1e-8){if(d||(d=[a,p]),1===(o=v[1][1])&&(++a>=s&&(a=0),g=u[a]||n[a].getValues(),o=0),!h)return d[0]===a&&d[1]===o;continue}}break}return!1},_hitTestSelf:function(t,e,i,n){function r(e,i){return t.subtract(e).divide(i).length<=1}function s(t,i,n){if(!e.selected||i.isSelected()){var s=t._point;if(i!==s&&(i=i.add(s)),r(i,x))return new M(n,g,{segment:t,point:i})}}function a(t,i){return(i||e.segments)&&s(t,t._point,"segment")||!i&&e.handles&&(s(t,t._handleIn,"handle-in")||s(t,t._handleOut,"handle-out"))}function o(t){f.add(t)}function h(e){var i=y||e._index>0&&e._index<m-1;if("round"===(i?u:l))return r(e._point,x);if(f=new L({internal:!0,closed:!0}),i?e.isSmooth()||L._addBevelJoin(e,u,P,c,null,n,o,!0):"square"===l&&L._addSquareCap(e,l,P,null,n,o,!0),!f.isEmpty()){var s;return f.contains(t)||(s=f.getNearestLocation(t))&&r(s.getPoint(),w)}}var u,l,c,f,d,_,g=this,v=this.getStyle(),p=this._segments,m=p.length,y=this._closed,w=e._tolerancePadding,x=w,b=e.stroke&&v.hasStroke(),C=e.fill&&v.hasFill(),S=e.curves,P=b?v.getStrokeWidth()/2:C&&e.tolerance>0||S?0:null;if(null!==P&&(P>0?(u=v.getStrokeJoin(),l=v.getStrokeCap(),c=v.getMiterLimit(),x=x.add(L._getStrokePadding(P,n))):u=l="round"),!e.ends||e.segments||y){if(e.segments||e.handles)for(T=0;T<m;T++)if(_=a(p[T]))return _}else if(_=a(p[0],!0)||a(p[m-1],!0))return _;if(null!==P){if(d=this.getNearestLocation(t)){var I=d.getTime();0===I||1===I&&m>1?h(d.getSegment())||(d=null):r(d.getPoint(),x)||(d=null)}if(!d&&"miter"===u&&m>1)for(var T=0;T<m;T++){var z=p[T];if(t.getDistance(z._point)<=c*P&&h(z)){d=z.getLocation();break}}}return!d&&C&&this._contains(t)||d&&!b&&!S?new M("fill",this):d?new M(b?"stroke":"curve",this,{location:d,point:d.getPoint()}):null}},r.each(k._evaluateMethods,function(t){this[t+"At"]=function(e){var i=this.getLocationAt(e);return i&&i[t]()}},{beans:!1,getLocationOf:function(){for(var t=c.read(arguments),e=this.getCurves(),i=0,n=e.length;i<n;i++){var r=e[i].getLocationOf(t);if(r)return r}return null},getOffsetOf:function(){var t=this.getLocationOf.apply(this,arguments);return t?t.getOffset():null},getLocationAt:function(t){if("number"==typeof t){for(var e=this.getCurves(),i=0,n=0,r=e.length;n<r;n++){var s=i,a=e[n];if((i+=a.getLength())>t)return a.getLocationAt(t-s)}if(e.length>0&&t<=this.getLength())return new O(e[e.length-1],1)}else if(t&&t.getPath&&t.getPath()===this)return t;return null}}),new function(){function t(t,e,i,n){function r(e){var i=h[e],n=h[e+1];s==i&&a==n||(t.beginPath(),t.moveTo(s,a),t.lineTo(i,n),t.stroke(),t.beginPath(),t.arc(i,n,o,0,2*Math.PI,!0),t.fill())}for(var s,a,o=n/2,h=new Array(6),u=0,l=e.length;u<l;u++){var c=e[u],f=c._selection;if(c._transformCoordinates(i,h),s=h[0],a=h[1],2&f&&r(2),4&f&&r(4),t.fillRect(s-o,a-o,n,n),!(1&f)){var d=t.fillStyle;t.fillStyle="#ffffff",t.fillRect(s-o+1,a-o+1,n-2,n-2),t.fillStyle=d}}}function e(t,e,i){function n(e){if(i)e._transformCoordinates(i,_),r=_[0],s=_[1];else{var n=e._point;r=n._x,s=n._y}if(g)t.moveTo(r,s),g=!1;else{if(i)h=_[2],u=_[3];else{f=e._handleIn;h=r+f._x,u=s+f._y}h===r&&u===s&&l===a&&c===o?t.lineTo(r,s):t.bezierCurveTo(l,c,h,u,r,s)}if(a=r,o=s,i)l=_[4],c=_[5];else{var f=e._handleOut;l=a+f._x,c=o+f._y}}for(var r,s,a,o,h,u,l,c,f=e._segments,d=f.length,_=new Array(6),g=!0,v=0;v<d;v++)n(f[v]);e._closed&&d>0&&n(f[0])}return{_draw:function(t,i,n,r){function s(t){return c[(t%f+f)%f]}var a=i.dontStart,o=i.dontFinish||i.clip,h=this.getStyle(),u=h.hasFill(),l=h.hasStroke(),c=h.getDashArray(),f=!paper.support.nativeDash&&l&&c&&c.length;if(a||t.beginPath(),(u||l&&!f||o)&&(e(t,this,r),this._closed&&t.closePath()),!o&&(u||l)&&(this._setStyles(t,i,n),u&&(t.fill(h.getFillRule()),t.shadowColor="rgba(0,0,0,0)"),l)){if(f){a||t.beginPath();var d,_=new B(this,.25,32,!1,r),g=_.length,v=-h.getDashOffset(),p=0;for(v%=g;v>0;)v-=s(p--)+s(p--);for(;v<g;)d=v+s(p++),(v>0||d>0)&&_.drawPart(t,Math.max(v,0),Math.max(d,0)),v=d+s(p++)}t.stroke()}},_drawSelected:function(i,n){i.beginPath(),e(i,this,n),i.stroke(),t(i,this._segments,n,paper.settings.handleSize)}}},new function(){function t(t){var e=t._segments;if(!e.length)throw new Error("Use a moveTo() command first");return e[e.length-1]}return{moveTo:function(){var t=this._segments;1===t.length&&this.removeSegment(0),t.length||this._add([new T(c.read(arguments))])},moveBy:function(){throw new Error("moveBy() is unsupported on Path items.")},lineTo:function(){this._add([new T(c.read(arguments))])},cubicCurveTo:function(){var e=c.read(arguments),i=c.read(arguments),n=c.read(arguments),r=t(this);r.setHandleOut(e.subtract(r._point)),this._add([new T(n,i.subtract(n))])},quadraticCurveTo:function(){var e=c.read(arguments),i=c.read(arguments),n=t(this)._point;this.cubicCurveTo(e.add(n.subtract(e).multiply(1/3)),e.add(i.subtract(e).multiply(1/3)),i)},curveTo:function(){var e=c.read(arguments),i=c.read(arguments),n=r.pick(r.read(arguments),.5),s=1-n,a=t(this)._point,o=e.subtract(a.multiply(s*s)).subtract(i.multiply(n*n)).divide(2*n*s);if(o.isNaN())throw new Error("Cannot put a curve through points with parameter = "+n);this.quadraticCurveTo(o,i)},arcTo:function(){var e,i,n,s,a=Math.abs,o=Math.sqrt,h=t(this),l=h._point,f=c.read(arguments),_=r.peek(arguments);if("boolean"==typeof(x=r.pick(_,!0)))var g=(C=l.add(f).divide(2)).add(C.subtract(l).rotate(x?-90:90));else if(r.remain(arguments)<=2)g=f,f=c.read(arguments);else{var v=d.read(arguments),y=u.isZero;if(y(v.width)||y(v.height))return this.lineTo(f);var w=r.read(arguments),x=!!r.read(arguments),b=!!r.read(arguments),C=l.add(f).divide(2),S=(W=l.subtract(C).rotate(-w)).x,P=W.y,I=a(v.width),M=a(v.height),z=I*I,k=M*M,O=S*S,A=P*P,L=o(O/z+A/k);if(L>1&&(z=(I*=L)*I,k=(M*=L)*M),L=(z*k-z*A-k*O)/(z*A+k*O),a(L)<1e-12&&(L=0),L<0)throw new Error("Cannot create an arc with the given arguments");e=new c(I*P/M,-M*S/I).multiply((b===x?-1:1)*o(L)).rotate(w).add(C),i=(n=(s=(new p).translate(e).rotate(w).scale(I,M))._inverseTransform(l)).getDirectedAngle(s._inverseTransform(f)),!x&&i>0?i-=360:x&&i<0&&(i+=360)}if(g){var N=new m(l.add(g).divide(2),g.subtract(l).rotate(90),!0),B=new m(g.add(f).divide(2),f.subtract(g).rotate(90),!0),D=new m(l,f),j=D.getSide(g);if(!(e=N.intersect(B,!0))){if(!j)return this.lineTo(f);throw new Error("Cannot create an arc with the given arguments")}i=(n=l.subtract(e)).getDirectedAngle(f.subtract(e));var E=D.getSide(e);0===E?i=j*a(i):j===E&&(i+=i<0?360:-360)}for(var F=a(i),R=F>=360?4:Math.ceil((F-1e-7)/90),q=i/R,V=q*Math.PI/360,H=4/3*Math.sin(V)/(1+Math.cos(V)),Z=[],U=0;U<=R;U++){var W=f,G=null;if(U<R&&(G=n.rotate(90).multiply(H),s?(W=s._transformPoint(n),G=s._transformPoint(n.add(G)).subtract(W)):W=e.add(n)),U){var J=n.rotate(-90).multiply(H);s&&(J=s._transformPoint(n.add(J)).subtract(W)),Z.push(new T(W,J,G))}else h.setHandleOut(G);n=n.rotate(q)}this._add(Z)},lineBy:function(){var e=c.read(arguments),i=t(this)._point;this.lineTo(i.add(e))},curveBy:function(){var e=c.read(arguments),i=c.read(arguments),n=r.read(arguments),s=t(this)._point;this.curveTo(s.add(e),s.add(i),n)},cubicCurveBy:function(){var e=c.read(arguments),i=c.read(arguments),n=c.read(arguments),r=t(this)._point;this.cubicCurveTo(r.add(e),r.add(i),r.add(n))},quadraticCurveBy:function(){var e=c.read(arguments),i=c.read(arguments),n=t(this)._point;this.quadraticCurveTo(n.add(e),n.add(i))},arcBy:function(){var e=t(this)._point,i=e.add(c.read(arguments)),n=r.pick(r.peek(arguments),!0);"boolean"==typeof n?this.arcTo(i,n):this.arcTo(i,e.add(c.read(arguments)))},closePath:function(t){this.setClosed(!0),this.join(this,t)}}},{_getBounds:function(t,e){var i=e.handle?"getHandleBounds":e.stroke?"getStrokeBounds":"getBounds";return L[i](this._segments,this._closed,this,t,e)},statics:{getBounds:function(t,e,i,n,r,s){function a(t){t._transformCoordinates(n,h);for(var e=0;e<2;e++)k._addBounds(u[e],u[e+4],h[e+2],h[e],e,s?s[e]:0,l,c,f);var i=u;u=h,h=i}var o=t[0];if(!o)return new g;for(var h=new Array(6),u=o._transformCoordinates(n,new Array(6)),l=u.slice(0,2),c=l.slice(),f=new Array(2),d=1,_=t.length;d<_;d++)a(t[d]);return e&&a(o),new g(l[0],l[1],c[0]-l[0],c[1]-l[1])},getStrokeBounds:function(t,e,i,n,r){function s(t){v=v.include(t)}function a(t){v=v.unite(x.setCenter(t._point.transform(n)))}function o(t,e){"round"===e||t.isSmooth()?a(t):L._addBevelJoin(t,e,p,w,n,f,s)}function h(t,e){"round"===e?a(t):L._addSquareCap(t,e,p,n,f,s)}var u=i.getStyle(),l=u.hasStroke(),c=u.getStrokeWidth(),f=l&&i._getStrokeMatrix(n,r),_=l&&L._getStrokePadding(c,f),v=L.getBounds(t,e,i,n,r,_);if(!l)return v;for(var p=c/2,m=u.getStrokeJoin(),y=u.getStrokeCap(),w=u.getMiterLimit(),x=new g(new d(_)),b=t.length-(e?0:1),C=1;C<b;C++)o(t[C],m);return e?o(t[0],m):b>0&&(h(t[0],y),h(t[t.length-1],y)),v},_getStrokePadding:function(t,e){if(!e)return[t,t];var i=new c(t,0).transform(e),n=new c(0,t).transform(e),r=i.getAngleInRadians(),s=i.getLength(),a=n.getLength(),o=Math.sin(r),h=Math.cos(r),u=Math.tan(r),l=Math.atan2(a*u,s),f=Math.atan2(a,u*s);return[Math.abs(s*Math.cos(l)*h+a*Math.sin(l)*o),Math.abs(a*Math.sin(f)*h+s*Math.cos(f)*o)]},_addBevelJoin:function(t,e,i,n,r,s,a,o){var h=t.getCurve(),u=h.getPrevious(),l=h.getPoint1().transform(r),f=u.getNormalAtTime(1).multiply(i).transform(s),d=h.getNormalAtTime(0).multiply(i).transform(s);if(f.getDirectedAngle(d)<0&&(f=f.negate(),d=d.negate()),o&&a(l),a(l.add(f)),"miter"===e){var _=new m(l.add(f),new c(-f.y,f.x),!0).intersect(new m(l.add(d),new c(-d.y,d.x),!0),!0);_&&l.getDistance(_)<=n*i&&a(_)}a(l.add(d))},_addSquareCap:function(t,e,i,n,r,s,a){var o=t._point.transform(n),h=t.getLocation(),u=h.getNormal().multiply(0===h.getTime()?i:-i).transform(r);"square"===e&&(a&&(s(o.subtract(u)),s(o.add(u))),o=o.add(u.rotate(-90))),s(o.add(u)),s(o.subtract(u))},getHandleBounds:function(t,e,i,n,r){var s,a,o=i.getStyle();if(r.stroke&&o.hasStroke()){var h=i._getStrokeMatrix(n,r),u=o.getStrokeWidth()/2,l=u;"miter"===o.getStrokeJoin()&&(l=u*o.getMiterLimit()),"square"===o.getStrokeCap()&&(l=Math.max(l,u*Math.SQRT2)),s=L._getStrokePadding(u,h),a=L._getStrokePadding(l,h)}for(var c=new Array(6),f=1/0,d=-f,_=f,v=d,p=0,m=t.length;p<m;p++){t[p]._transformCoordinates(n,c);for(var y=0;y<6;y+=2){var w=y?s:a,x=w?w[0]:0,b=w?w[1]:0,C=c[y],S=c[y+1],P=C-x,I=C+x,M=S-b,T=S+b;P<f&&(f=P),I>d&&(d=I),M<_&&(_=M),T>v&&(v=T)}}return new g(f,_,d-f,v-_)}}});L.inject({statics:new function(){function t(t,e,i){var n=r.getNamed(i),s=new L(n&&0==n.insert&&w.NO_INSERT);return s._add(t),s._closed=e,s.set(n,{insert:!0})}function e(e,i,r){for(var s=new Array(4),a=0;a<4;a++){var o=n[a];s[a]=new T(o._point.multiply(i).add(e),o._handleIn.multiply(i),o._handleOut.multiply(i))}return t(s,!0,r)}var i=.5522847498307936,n=[new T([-1,0],[0,i],[0,-i]),new T([0,-1],[-i,0],[i,0]),new T([1,0],[0,-i],[0,i]),new T([0,1],[i,0],[-i,0])];return{Line:function(){return t([new T(c.readNamed(arguments,"from")),new T(c.readNamed(arguments,"to"))],!1,arguments)},Circle:function(){var t=c.readNamed(arguments,"center"),i=r.readNamed(arguments,"radius");return e(t,new d(i),arguments)},Rectangle:function(){var e,n=g.readNamed(arguments,"rectangle"),r=d.readNamed(arguments,"radius",0,{readNull:!0}),s=n.getBottomLeft(!0),a=n.getTopLeft(!0),o=n.getTopRight(!0),h=n.getBottomRight(!0);if(!r||r.isZero())e=[new T(s),new T(a),new T(o),new T(h)];else{var u=(r=d.min(r,n.getSize(!0).divide(2))).width,l=r.height,c=u*i,f=l*i;e=[new T(s.add(u,0),null,[-c,0]),new T(s.subtract(0,l),[0,f]),new T(a.add(0,l),null,[0,-f]),new T(a.add(u,0),[-c,0],null),new T(o.subtract(u,0),null,[c,0]),new T(o.add(0,l),[0,-f],null),new T(h.subtract(0,l),null,[0,f]),new T(h.subtract(u,0),[c,0])]}return t(e,!0,arguments)},RoundRectangle:"#Rectangle",Ellipse:function(){var t=C._readEllipse(arguments);return e(t.center,t.radius,arguments)},Oval:"#Ellipse",Arc:function(){var t=c.readNamed(arguments,"from"),e=c.readNamed(arguments,"through"),i=c.readNamed(arguments,"to"),n=r.getNamed(arguments),s=new L(n&&0==n.insert&&w.NO_INSERT);return s.moveTo(t),s.arcTo(e,i),s.set(n)},RegularPolygon:function(){for(var e=c.readNamed(arguments,"center"),i=r.readNamed(arguments,"sides"),n=r.readNamed(arguments,"radius"),s=360/i,a=i%3==0,o=new c(0,a?-n:n),h=a?-1:.5,u=new Array(i),l=0;l<i;l++)u[l]=new T(e.add(o.rotate((l+h)*s)));return t(u,!0,arguments)},Star:function(){for(var e=c.readNamed(arguments,"center"),i=2*r.readNamed(arguments,"points"),n=r.readNamed(arguments,"radius1"),s=r.readNamed(arguments,"radius2"),a=360/i,o=new c(0,-1),h=new Array(i),u=0;u<i;u++)h[u]=new T(e.add(o.rotate(a*u).multiply(u%2?s:n)));return t(h,!0,arguments)}}}});var N=A.extend({_class:"CompoundPath",_serializeFields:{children:[]},beans:!0,initialize:function(t){this._children=[],this._namedChildren={},this._initialize(t)||("string"==typeof t?this.setPathData(t):this.addChildren(Array.isArray(t)?t:arguments))},insertChildren:function t(e,i){var n=i,s=n[0];s&&"number"==typeof s[0]&&(n=[n]);for(var a=i.length-1;a>=0;a--){var o=n[a];n!==i||o instanceof L||(n=r.slice(n)),Array.isArray(o)?n[a]=new L({segments:o,insert:!1}):o instanceof N&&(n.splice.apply(n,[a,1].concat(o.removeChildren())),o.remove())}return t.base.call(this,e,n)},reduce:function t(e){for(var i=this._children,n=i.length-1;n>=0;n--)(r=i[n].reduce(e)).isEmpty()&&r.remove();if(!i.length){var r=new L(w.NO_INSERT);return r.copyAttributes(this),r.insertAbove(this),this.remove(),r}return t.base.call(this)},isClosed:function(){for(var t=this._children,e=0,i=t.length;e<i;e++)if(!t[e]._closed)return!1;return!0},setClosed:function(t){for(var e=this._children,i=0,n=e.length;i<n;i++)e[i].setClosed(t)},getFirstSegment:function(){var t=this.getFirstChild();return t&&t.getFirstSegment()},getLastSegment:function(){var t=this.getLastChild();return t&&t.getLastSegment()},getCurves:function(){for(var t=this._children,e=[],i=0,n=t.length;i<n;i++)e.push.apply(e,t[i].getCurves());return e},getFirstCurve:function(){var t=this.getFirstChild();return t&&t.getFirstCurve()},getLastCurve:function(){var t=this.getLastChild();return t&&t.getLastCurve()},getArea:function(){for(var t=this._children,e=0,i=0,n=t.length;i<n;i++)e+=t[i].getArea();return e},getLength:function(){for(var t=this._children,e=0,i=0,n=t.length;i<n;i++)e+=t[i].getLength();return e},getPathData:function(t,e){for(var i=this._children,n=[],r=0,s=i.length;r<s;r++){var a=i[r],o=a._matrix;n.push(a.getPathData(t&&!o.isIdentity()?t.appended(o):t,e))}return n.join("")},_hitTestChildren:function t(e,i,n){return t.base.call(this,e,i.class===L||"path"===i.type?i:r.set({},i,{fill:!1}),n)},_draw:function(t,e,i,n){var r=this._children;if(r.length){e=e.extend({dontStart:!0,dontFinish:!0}),t.beginPath();for(var s=0,a=r.length;s<a;s++)r[s].draw(t,e,n);if(!e.clip){this._setStyles(t,e,i);var o=this._style;o.hasFill()&&(t.fill(o.getFillRule()),t.shadowColor="rgba(0,0,0,0)"),o.hasStroke()&&t.stroke()}}},_drawSelected:function(t,e,i){for(var n=this._children,r=0,s=n.length;r<s;r++){var a=n[r],o=a._matrix;i[a._id]||a._drawSelected(t,o.isIdentity()?e:e.appended(o))}}},new function(){function t(t,e){var i=t._children;if(e&&!i.length)throw new Error("Use a moveTo() command first");return i[i.length-1]}return r.each(["lineTo","cubicCurveTo","quadraticCurveTo","curveTo","arcTo","lineBy","cubicCurveBy","quadraticCurveBy","curveBy","arcBy"],function(e){this[e]=function(){var i=t(this,!0);i[e].apply(i,arguments)}},{moveTo:function(){var e=t(this),i=e&&e.isEmpty()?e:new L(w.NO_INSERT);i!==e&&this.addChild(i),i.moveTo.apply(i,arguments)},moveBy:function(){var e=t(this,!0),i=e&&e.getLastSegment(),n=c.read(arguments);this.moveTo(i?n.add(i._point):n)},closePath:function(e){t(this,!0).closePath(e)}})},r.each(["reverse","flatten","simplify","smooth"],function(t){this[t]=function(e){for(var i,n=this._children,r=0,s=n.length;r<s;r++)i=n[r][t](e)||i;return i}},{}));A.inject(new function(){function t(t,e){var i=t.clone(!1).reduce({simplify:!0}).transform(null,!0,!0);return e?i.resolveCrossings().reorient("nonzero"===i.getFillRule(),!0):i}function i(t,e,i,n,r){var s=new N(w.NO_INSERT);return s.addChildren(t,!0),s=s.reduce({simplify:e}),r&&0==r.insert||s.insertAbove(n&&i.isSibling(n)&&i.getIndex()<n.getIndex()?n:i),s.copyAttributes(i,!0),s}function n(e,n,r,a){function o(t){for(var e=0,i=t.length;e<i;e++){var n=t[e];w.push.apply(w,n._segments),x.push.apply(x,n.getCurves()),n._overlapsOnly=!0}}if(a&&(0==a.trace||a.stroke)&&/^(subtract|intersect)$/.test(r))return s(e,n,r);var u=t(e,!0),c=n&&e!==n&&t(n,!0),_=p[r];_[r]=!0,c&&(_.subtract||_.exclude)^c.isClockwise()^u.isClockwise()&&c.reverse();var g,v=l(O.expand(u.getCrossings(c))),m=u._children||[u],y=c&&(c._children||[c]),w=[],x=[];if(v.length){o(m),y&&o(y);for(var b=0,C=v.length;b<C;b++)f(v[b]._segment,u,c,x,_);for(var b=0,C=w.length;b<C;b++){var S=w[b],P=S._intersection;S._winding||f(S,u,c,x,_),P&&P._overlap||(S._path._overlapsOnly=!1)}g=d(w,_)}else g=h(y?m.concat(y):m.slice(),function(t){return!!_[t]});return i(g,!0,e,n,a)}function s(e,n,r){function s(t){if(!c[t._id]&&(l||o.contains(t.getPointAt(t.getLength()/2))^u))return f.unshift(t),c[t._id]=!0}for(var a=t(e),o=t(n),h=a.getCrossings(o),u="subtract"===r,l="divide"===r,c={},f=[],d=h.length-1;d>=0;d--){var _=h[d].split();_&&(s(_)&&_.getFirstSegment().setHandleIn(0,0),a.getLastSegment().setHandleOut(0,0))}return s(a),i(f,!1,e,n)}function a(t,e){for(var i=t;i;){if(i===e)return;i=i._previous}for(;t._next&&t._next!==e;)t=t._next;if(!t._next){for(;e._previous;)e=e._previous;t._next=e,e._previous=t}}function o(t){for(var e=t.length-1;e>=0;e--)t[e].clearHandles()}function h(t,e,i){var n=t&&t.length;if(n){var s=r.each(t,function(t,e){this[t._id]={container:null,winding:t.isClockwise()?1:-1,index:e}},{}),a=t.slice().sort(function(t,e){return v(e.getArea())-v(t.getArea())}),o=a[0];null==i&&(i=o.isClockwise());for(var h=0;h<n;h++){for(var u=a[h],l=s[u._id],c=u.getInteriorPoint(),f=0,d=h-1;d>=0;d--){var _=a[d];if(_.contains(c)){var g=s[_._id];f=g.winding,l.winding+=f,l.container=g.exclude?g.container:_;break}}if(e(l.winding)===e(f))l.exclude=!0,t[l.index]=null;else{var p=l.container;u.setClockwise(p?!p.isClockwise():i)}}}return t}function l(t,e,i){function n(t){return t._path._id+"."+t._segment1._index}for(var r,s,h,u=e&&[],l=!1,c=i||[],f=i&&{},d=(i&&i.length)-1;d>=0;d--)(y=i[d])._path&&(f[n(y)]=!0);for(d=t.length-1;d>=0;d--){var _,g=t[d],v=g._time,p=v,m=e&&!e(g),y=g._curve;if(y&&(y!==s?(l=!y.hasHandles()||f&&f[n(y)],r=[],h=null,s=y):h>=1e-8&&(v/=h)),m)r&&r.push(g);else{if(e&&u.unshift(g),h=p,v<1e-8)_=y._segment1;else if(v>1-1e-8)_=y._segment2;else{var w=y.divideAtTime(v,!0);l&&c.push(y,w),_=w._segment1;for(var x=r.length-1;x>=0;x--){var b=r[x];b._time=(b._time-v)/(1-v)}}g._setSegment(_);var C=_._intersection,S=g._intersection;if(C){a(C,S);for(var P=C;P;)a(P._intersection,C),P=P._next}else _._intersection=S}}return i||o(c),u||t}function c(t,e,i,n,r){function s(s){var a=s[l+0],h=s[l+6];if(!(p<_(a,h)||p>g(a,h))){var f=s[u+0],v=s[u+2],x=s[u+4],b=s[u+6];if(a!==h){var I=p===a?0:p===h?1:y>g(f,v,x,b)||w<_(f,v,x,b)?1:k.solveCubic(s,l,p,T,0,1)>0?T[0]:1,z=0===I?f:1===I?b:k.getPoint(s,I)[i?"y":"x"],O=a>h?1:-1,A=o[l]>o[l+6]?1:-1,L=o[u+6];return p!==a?(z<y?C+=O:z>w?S+=O:P=!0,z>d-m&&z<d+m&&(M/=2)):(O!==A?f<y?C+=O:f>w&&(S+=O):f!=L&&(L<w&&z>w?(S+=O,P=!0):L>y&&z<y&&(C+=O,P=!0)),M=0),o=s,!r&&z>y&&z<w&&0===k.getTangent(s,I)[i?"x":"y"]&&c(t,e,!i,n,!0)}(f<w&&b>y||b<w&&f>y)&&(P=!0)}}function a(t){var e=t[l+0],n=t[l+2],r=t[l+4],a=t[l+6];if(p<=g(e,n,r,a)&&p>=_(e,n,r,a))for(var o,h=t[u+0],c=t[u+2],f=t[u+4],d=t[u+6],v=y>g(h,c,f,d)||w<_(h,c,f,d)?[t]:k.getMonoCurves(t,i),m=0,x=v.length;m<x;m++)if(o=s(v[m]))return o}for(var o,h,u=i?1:0,l=1^u,f=[t.x,t.y],d=f[u],p=f[l],m=1e-6,y=d-1e-9,w=d+1e-9,x=0,b=0,C=0,S=0,P=!1,I=!1,M=1,T=[],z=0,O=e.length;z<O;z++){var A,L=e[z],N=L._path,B=L.getValues();if(!(z&&e[z-1]._path===N||(o=null,N._closed||(h=k.getValues(N.getLastCurve().getSegment2(),L.getSegment1(),null,!n))[l]!==h[l+6]&&(o=h),o))){o=B;for(var D=N.getLastCurve();D&&D!==L;){var j=D.getValues();if(j[l]!==j[l+6]){o=j;break}D=D.getPrevious()}}if(A=a(B))return A;if(z+1===O||e[z+1]._path!==N){if(h&&(A=a(h)))return A;!P||C||S||(C=S=N.isClockwise(n)^i?1:-1),x+=C,b+=S,C=S=0,P&&(I=!0,P=!1),h=null}}return x=v(x),b=v(b),{winding:g(x,b),windingL:x,windingR:b,quality:M,onPath:I}}function f(t,e,i,n,r){var s=[],a=t,o=0;do{d=(y=t.getCurve()).getLength();s.push({segment:t,curve:y,length:d}),o+=d,t=t.getNext()}while(t&&!t._intersection&&t!==a);for(var h=[.5,.25,.75],l={winding:0,quality:-1},f=0;f<h.length&&l.quality<.5;f++)for(var d=o*h[f],_=0,g=s.length;_<g;_++){var p=s[_],m=p.length;if(d<=m){var y=p.curve,w=y._path,x=w._parent,b=x instanceof N?x:w,C=u.clamp(y.getTimeAt(d),1e-8,1-1e-8),S=y.getPointAtTime(C),P=v(y.getTangentAtTime(C).y)<Math.SQRT1_2,I=r.subtract&&i&&(b===e&&i._getWinding(S,P,!0).winding||b===i&&!e._getWinding(S,P,!0).winding)?{winding:0,quality:1}:c(S,n,P,!0);I.quality>l.quality&&(l=I);break}d-=m}for(_=s.length-1;_>=0;_--)s[_].segment._winding=l}function d(t,e){function i(t){var i;return!(!t||t._visited||e&&(!e[(i=t._winding||{}).winding]||e.unite&&2===i.winding&&i.windingL&&i.windingR))}function n(t){if(t)for(var e=0,i=s.length;e<i;e++)if(t===s[e])return!0;return!1}function r(t){for(var e=t._segments,i=0,n=e.length;i<n;i++)e[i]._visited=!0}var s,a=[];t.sort(function(t,e){var i=t._intersection,n=e._intersection,r=!(!i||!i._overlap),s=!(!n||!n._overlap),a=t._path,o=e._path;return r^s?r?1:-1:!i^!n?i?1:-1:a!==o?a._id-o._id:t._index-e._index});for(var o=0,h=t.length;o<h;o++){var u,l,c,f=t[o],d=i(f),_=null,g=!1,v=!0,p=[];if(d&&f._path._overlapsOnly){var m=f._path,y=f._intersection._segment._path;m.compare(y)&&(m.getArea()&&a.push(m.clone(!1)),r(m),r(y),d=!1)}for(;d;){var x=!_,b=function(t,e){function r(r,a){for(;r&&r!==a;){var o=r._segment,u=o&&o._path;if(u){var l=o.getNext()||u.getFirstSegment(),c=l._intersection;o!==t&&(n(o)||n(l)||l&&i(o)&&(i(l)||c&&i(c._segment)))&&h.push(o),e&&s.push(o)}r=r._next}}var a=t._intersection,o=a,h=[];if(e&&(s=[t]),a){for(r(a);a&&a._prev;)a=a._prev;r(a,o)}return h}(f,x),C=b.shift(),S=!(g=!x&&(n(f)||n(C)))&&C;if(x&&(_=new L(w.NO_INSERT),u=null),g){(f.isFirst()||f.isLast())&&(v=f._path._closed),f._visited=!0;break}if(S&&u&&(p.push(u),u=null),u||(S&&b.push(f),u={start:_._segments.length,crossings:b,visited:l=[],handleIn:c}),S&&(f=C),!i(f)){_.removeSegments(u.start);for(var P=0,I=l.length;P<I;P++)l[P]._visited=!1;l.length=0;do{(f=u&&u.crossings.shift())&&f._path||(f=null,(u=p.pop())&&(l=u.visited,c=u.handleIn))}while(u&&!i(f));if(!f)break}var M=f.getNext();_.add(new T(f._point,c,M&&f._handleOut)),f._visited=!0,l.push(f),f=M||f._path.getFirstSegment(),c=M&&M._handleIn}g&&(v&&(_.getFirstSegment().setHandleIn(c),_.setClosed(v)),0!==_.getArea()&&a.push(_))}return a}var _=Math.min,g=Math.max,v=Math.abs,p={unite:{1:!0,2:!0},intersect:{2:!0},subtract:{1:!0},exclude:{1:!0,"-1":!0}};return{_getWinding:function(t,e,i){return c(t,this.getCurves(),e,i)},unite:function(t,e){return n(this,t,"unite",e)},intersect:function(t,e){return n(this,t,"intersect",e)},subtract:function(t,e){return n(this,t,"subtract",e)},exclude:function(t,e){return n(this,t,"exclude",e)},divide:function(t,e){return e&&(0==e.trace||e.stroke)?s(this,t,"divide"):i([this.subtract(t,e),this.intersect(t,e)],!0,this,t,e)},resolveCrossings:function(){function t(t,e){var i=t&&t._intersection;return i&&i._overlap&&i._path===e}var e=this._children,i=e||[this],n=!1,s=!1,a=this.getIntersections(null,function(t){return t.hasOverlap()&&(n=!0)||t.isCrossing()&&(s=!0)}),h=n&&s&&[];if(a=O.expand(a),n)for(var u=l(a,function(t){return t.hasOverlap()},h),c=u.length-1;c>=0;c--){var f=u[c],_=f._path,g=f._segment,v=g.getPrevious(),p=g.getNext();t(v,_)&&t(p,_)&&(g.remove(),v._handleOut._set(0,0),p._handleIn._set(0,0),v===g||v.getCurve().hasLength()||(p._handleIn.set(v._handleIn),v.remove()))}s&&(l(a,n&&function(t){var e=t.getCurve(),i=t.getSegment(),n=t._intersection,r=n._curve,s=n._segment;if(e&&r&&e._path&&r._path)return!0;i&&(i._intersection=null),s&&(s._intersection=null)},h),h&&o(h),i=d(r.each(i,function(t){this.push.apply(this,t._segments)},[])));var m,y=i.length;return y>1&&e?(i!==e&&this.setChildren(i),m=this):1!==y||e||(i[0]!==this&&this.setSegments(i[0].removeSegments()),m=this),m||((m=new N(w.NO_INSERT)).addChildren(i),(m=m.reduce()).copyAttributes(this),this.replaceWith(m)),m},reorient:function(t,i){var n=this._children;return n&&n.length?this.setChildren(h(this.removeChildren(),function(e){return!!(t?e:1&e)},i)):i!==e&&this.setClockwise(i),this},getInteriorPoint:function(){var t=this.getBounds().getCenter(!0);if(!this.contains(t)){for(var e=this.getCurves(),i=t.y,n=[],r=[],s=0,a=e.length;s<a;s++){var o=e[s].getValues(),h=o[1],u=o[3],l=o[5],c=o[7];if(i>=_(h,u,l,c)&&i<=g(h,u,l,c))for(var f=k.getMonoCurves(o),d=0,v=f.length;d<v;d++){var p=f[d],m=p[1],y=p[7];if(m!==y&&(i>=m&&i<=y||i>=y&&i<=m)){var w=i===m?p[0]:i===y?p[6]:1===k.solveCubic(p,1,i,r,0,1)?k.getPoint(p,r[0]).x:(p[0]+p[6])/2;n.push(w)}}}n.length>1&&(n.sort(function(t,e){return t-e}),t.x=(n[0]+n[1])/2)}return t}}});var B=r.extend({_class:"PathFlattener",initialize:function(t,e,i,n,r){function s(t,e){var i=k.getValues(t,e,r);h.push(i),a(i,t._index,0,1)}function a(t,i,r,s){if(!(s-r>c)||n&&k.isStraight(t)||k.isFlatEnough(t,e||.25)){var o=t[6]-t[0],h=t[7]-t[1],f=Math.sqrt(o*o+h*h);f>0&&(l+=f,u.push({offset:l,curve:t,index:i,time:s}))}else{var d=k.subdivide(t,.5),_=(r+s)/2;a(d[0],i,r,_),a(d[1],i,_,s)}}for(var o,h=[],u=[],l=0,c=1/(i||32),f=t._segments,d=f[0],_=1,g=f.length;_<g;_++)s(d,o=f[_]),d=o;t._closed&&s(o,f[0]),this.curves=h,this.parts=u,this.length=l,this.index=0},_get:function(t){for(var e,i=this.parts,n=i.length,r=this.index;e=r,r&&!(i[--r].offset<t););for(;e<n;e++){var s=i[e];if(s.offset>=t){this.index=e;var a=i[e-1],o=a&&a.index===s.index?a.time:0,h=a?a.offset:0;return{index:s.index,time:o+(s.time-o)*(t-h)/(s.offset-h)}}}return{index:i[n-1].index,time:1}},drawPart:function(t,e,i){for(var n=this._get(e),r=this._get(i),s=n.index,a=r.index;s<=a;s++){var o=k.getPart(this.curves[s],s===n.index?n.time:0,s===r.index?r.time:1);s===n.index&&t.moveTo(o[0],o[1]),t.bezierCurveTo.apply(t,o.slice(2))}}},r.each(k._evaluateMethods,function(t){this[t+"At"]=function(e){var i=this._get(e);return k[t](this.curves[i.index],i.time)}},{})),D=r.extend({initialize:function(t){for(var e,i=this.points=[],n=t._segments,r=t._closed,s=0,a=n.length;s<a;s++){var o=n[s].point;e&&e.equals(o)||i.push(e=o.clone())}r&&(i.unshift(i[i.length-1]),i.push(i[1])),this.closed=r},fit:function(t){var e=this.points,i=e.length,n=null;return i>0&&(n=[new T(e[0])],i>1&&(this.fitCubic(n,t,0,i-1,e[1].subtract(e[0]),e[i-2].subtract(e[i-1])),this.closed&&(n.shift(),n.pop()))),n},fitCubic:function(t,e,i,n,r,s){var a=this.points;if(n-i!=1){for(var o,h=this.chordLengthParameterize(i,n),u=Math.max(e,e*e),l=!0,c=0;c<=4;c++){var f=this.generateBezier(i,n,h,r,s),d=this.findMaxError(i,n,f,h);if(d.error<e&&l)return void this.addCurve(t,f);if(o=d.index,d.error>=u)break;l=this.reparameterize(i,n,h,f),u=d.error}var _=a[o-1].subtract(a[o+1]);this.fitCubic(t,e,i,o,r,_),this.fitCubic(t,e,o,n,_.negate(),s)}else{var g=a[i],v=a[n],p=g.getDistance(v)/3;this.addCurve(t,[g,g.add(r.normalize(p)),v.add(s.normalize(p)),v])}},addCurve:function(t,e){t[t.length-1].setHandleOut(e[1].subtract(e[0])),t.push(new T(e[3],e[2].subtract(e[3])))},generateBezier:function(t,e,i,n,r){for(var s=Math.abs,a=this.points,o=a[t],h=a[e],u=[[0,0],[0,0]],l=[0,0],c=0,f=e-t+1;c<f;c++){var d=i[c],_=1-d,g=3*d*_,v=_*_*_,p=g*_,m=g*d,y=d*d*d,w=n.normalize(p),x=r.normalize(m),b=a[t+c].subtract(o.multiply(v+p)).subtract(h.multiply(m+y));u[0][0]+=w.dot(w),u[0][1]+=w.dot(x),u[1][0]=u[0][1],u[1][1]+=x.dot(x),l[0]+=w.dot(b),l[1]+=x.dot(b)}var C,S,P=u[0][0]*u[1][1]-u[1][0]*u[0][1];if(s(P)>1e-12){var I=u[0][0]*l[1]-u[1][0]*l[0];C=(l[0]*u[1][1]-l[1]*u[0][1])/P,S=I/P}else{var M=u[0][0]+u[0][1],T=u[1][0]+u[1][1];C=S=s(M)>1e-12?l[0]/M:s(T)>1e-12?l[1]/T:0}var z,k,O=h.getDistance(o),A=1e-12*O;if(C<A||S<A)C=S=O/3;else{var L=h.subtract(o);z=n.normalize(C),k=r.normalize(S),z.dot(L)-k.dot(L)>O*O&&(C=S=O/3,z=k=null)}return[o,o.add(z||n.normalize(C)),h.add(k||r.normalize(S)),h]},reparameterize:function(t,e,i,n){for(r=t;r<=e;r++)i[r-t]=this.findRoot(n,this.points[r],i[r-t]);for(var r=1,s=i.length;r<s;r++)if(i[r]<=i[r-1])return!1;return!0},findRoot:function(t,e,i){for(var n=[],r=[],s=0;s<=2;s++)n[s]=t[s+1].subtract(t[s]).multiply(3);for(s=0;s<=1;s++)r[s]=n[s+1].subtract(n[s]).multiply(2);var a=this.evaluate(3,t,i),o=this.evaluate(2,n,i),h=this.evaluate(1,r,i),l=a.subtract(e),c=o.dot(o)+l.dot(h);return u.isZero(c)?i:i-l.dot(o)/c},evaluate:function(t,e,i){for(var n=e.slice(),r=1;r<=t;r++)for(var s=0;s<=t-r;s++)n[s]=n[s].multiply(1-i).add(n[s+1].multiply(i));return n[0]},chordLengthParameterize:function(t,e){for(var i=[0],n=t+1;n<=e;n++)i[n-t]=i[n-t-1]+this.points[n].getDistance(this.points[n-1]);for(var n=1,r=e-t;n<=r;n++)i[n]/=i[r];return i},findMaxError:function(t,e,i,n){for(var r=Math.floor((e-t+1)/2),s=0,a=t+1;a<e;a++){var o=this.evaluate(3,i,n[a-t]).subtract(this.points[a]),h=o.x*o.x+o.y*o.y;h>=s&&(s=h,r=a)}return{error:s,index:r}}}),j=w.extend({_class:"TextItem",_applyMatrix:!1,_canApplyMatrix:!1,_serializeFields:{content:null},_boundsOptions:{stroke:!1,handle:!1},initialize:function(t){this._content="",this._lines=[];var i=t&&r.isPlainObject(t)&&t.x===e&&t.y===e;this._initialize(i&&t,!i&&c.read(arguments))},_equals:function(t){return this._content===t._content},copyContent:function(t){this.setContent(t._content)},getContent:function(){return this._content},setContent:function(t){this._content=""+t,this._lines=this._content.split(/\r\n|\n|\r/gm),this._changed(265)},isEmpty:function(){return!this._content},getCharacterStyle:"#getStyle",setCharacterStyle:"#setStyle",getParagraphStyle:"#getStyle",setParagraphStyle:"#setStyle"}),E=j.extend({_class:"PointText",initialize:function(){j.apply(this,arguments)},getPoint:function(){var t=this._matrix.getTranslation();return new f(t.x,t.y,this,"setPoint")},setPoint:function(){var t=c.read(arguments);this.translate(t.subtract(this._matrix.getTranslation()))},_draw:function(t,e,i){if(this._content){this._setStyles(t,e,i);var n=this._lines,r=this._style,s=r.hasFill(),a=r.hasStroke(),o=r.getLeading(),h=t.shadowColor;t.font=r.getFontStyle(),t.textAlign=r.getJustification();for(var u=0,l=n.length;u<l;u++){t.shadowColor=h;var c=n[u];s&&(t.fillText(c,0,0),t.shadowColor="rgba(0,0,0,0)"),a&&t.strokeText(c,0,0),t.translate(0,o)}}},_getBounds:function(t,e){var i=this._style,n=this._lines,r=n.length,s=i.getJustification(),a=i.getLeading(),o=this.getView().getTextWidth(i.getFontStyle(),n),h=0;"left"!==s&&(h-=o/("center"===s?2:1));var u=new g(h,r?-.75*a:0,o,r*a);return t?t._transformBounds(u,u):u}}),F=r.extend(new function(){function t(t){var n,r=t.match(/^#(\w{1,2})(\w{1,2})(\w{1,2})$/);if(r){n=[0,0,0];for(s=0;s<3;s++){h=r[s+1];n[s]=parseInt(1==h.length?h+h:h,16)/255}}else if(r=t.match(/^rgba?\((.*)\)$/))for(var s=0,o=(n=r[1].split(",")).length;s<o;s++){var h=+n[s];n[s]=s<3?h/255:h}else if(i){var u=a[t];if(!u){e||((e=Q.getContext(1,1)).globalCompositeOperation="copy"),e.fillStyle="rgba(0,0,0,0)",e.fillStyle=t,e.fillRect(0,0,1,1);var l=e.getImageData(0,0,1,1).data;u=a[t]=[l[0]/255,l[1]/255,l[2]/255]}n=u.slice()}else n=[0,0,0];return n}var e,n={gray:["gray"],rgb:["red","green","blue"],hsb:["hue","saturation","brightness"],hsl:["hue","saturation","lightness"],gradient:["gradient","origin","destination","highlight"]},s={},a={},o=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]],u={"rgb-hsb":function(t,e,i){var n=Math.max(t,e,i),r=n-Math.min(t,e,i);return[0===r?0:60*(n==t?(e-i)/r+(e<i?6:0):n==e?(i-t)/r+2:(t-e)/r+4),0===n?0:r/n,n]},"hsb-rgb":function(t,e,i){t=(t/60%6+6)%6;var n=Math.floor(t),r=t-n,s=[i,i*(1-e),i*(1-e*r),i*(1-e*(1-r))];return[s[(n=o[n])[0]],s[n[1]],s[n[2]]]},"rgb-hsl":function(t,e,i){var n=Math.max(t,e,i),r=Math.min(t,e,i),s=n-r,a=0===s,o=(n+r)/2;return[a?0:60*(n==t?(e-i)/s+(e<i?6:0):n==e?(i-t)/s+2:(t-e)/s+4),a?0:o<.5?s/(n+r):s/(2-n-r),o]},"hsl-rgb":function(t,e,i){if(t=(t/360%1+1)%1,0===e)return[i,i,i];for(var n=[t+1/3,t,t-1/3],r=i<.5?i*(1+e):i+e-i*e,s=2*i-r,a=[],o=0;o<3;o++){var h=n[o];h<0&&(h+=1),h>1&&(h-=1),a[o]=6*h<1?s+6*(r-s)*h:2*h<1?r:3*h<2?s+(r-s)*(2/3-h)*6:s}return a},"rgb-gray":function(t,e,i){return[.2989*t+.587*e+.114*i]},"gray-rgb":function(t){return[t,t,t]},"gray-hsb":function(t){return[0,0,t]},"gray-hsl":function(t){return[0,0,t]},"gradient-rgb":function(){return[]},"rgb-gradient":function(){return[]}};return r.each(n,function(t,e){s[e]=[],r.each(t,function(t,i){var a=r.capitalize(t),o=/^(hue|saturation)$/.test(t),h=s[e][i]="gradient"===t?function(t){var e=this._components[0];return t=R.read(Array.isArray(t)?t:arguments,0,{readNull:!0}),e!==t&&(e&&e._removeOwner(this),t&&t._addOwner(this)),t}:"gradient"===e?function(){return c.read(arguments,0,{readNull:"highlight"===t,clone:!0})}:function(t){return null==t||isNaN(t)?0:t};this["get"+a]=function(){return this._type===e||o&&/^hs[bl]$/.test(this._type)?this._components[i]:this._convert(e)[i]},this["set"+a]=function(t){this._type===e||o&&/^hs[bl]$/.test(this._type)||(this._components=this._convert(e),this._properties=n[e],this._type=e),this._components[i]=h.call(this,t),this._changed()}},this)},{_class:"Color",_readIndex:!0,initialize:function e(i){var a,o,h,u,l=arguments,c=this.__read,f=0;Array.isArray(i)&&(i=(l=i)[0]);var d=null!=i&&typeof i;if("string"===d&&i in n&&(a=i,i=l[1],Array.isArray(i)?(o=i,h=l[2]):(c&&(f=1),l=r.slice(l,1),d=typeof i)),!o){if(u="number"===d?l:"object"===d&&null!=i.length?i:null){a||(a=u.length>=3?"rgb":"gray");var _=n[a].length;h=u[_],c&&(f+=u===arguments?_+(null!=h?1:0):1),u.length>_&&(u=r.slice(u,0,_))}else if("string"===d)a="rgb",4===(o=t(i)).length&&(h=o[3],o.length--);else if("object"===d)if(i.constructor===e){if(a=i._type,o=i._components.slice(),h=i._alpha,"gradient"===a)for(var g=1,v=o.length;g<v;g++){var p=o[g];p&&(o[g]=p.clone())}}else if(i.constructor===R)a="gradient",u=l;else{var m=n[a="hue"in i?"lightness"in i?"hsl":"hsb":"gradient"in i||"stops"in i||"radial"in i?"gradient":"gray"in i?"gray":"rgb"],y=s[a];this._components=o=[];for(var g=0,v=m.length;g<v;g++)null==(w=i[m[g]])&&!g&&"gradient"===a&&"stops"in i&&(w={stops:i.stops,radial:i.radial}),null!=(w=y[g].call(this,w))&&(o[g]=w);h=i.alpha}c&&a&&(f=1)}if(this._type=a||"rgb",!o){this._components=o=[];for(var g=0,v=(y=s[this._type]).length;g<v;g++){var w=y[g].call(this,u&&u[g]);null!=w&&(o[g]=w)}}return this._components=o,this._properties=n[this._type],this._alpha=h,c&&(this.__read=f),this},set:"#initialize",_serialize:function(t,e){var i=this.getComponents();return r.serialize(/^(gray|rgb)$/.test(this._type)?i:[this._type].concat(i),t,!0,e)},_changed:function(){this._canvasStyle=null,this._owner&&this._owner._changed(65)},_convert:function(t){var e;return this._type===t?this._components.slice():(e=u[this._type+"-"+t])?e.apply(this,this._components):u["rgb-"+t].apply(this,u[this._type+"-rgb"].apply(this,this._components))},convert:function(t){return new F(t,this._convert(t),this._alpha)},getType:function(){return this._type},setType:function(t){this._components=this._convert(t),this._properties=n[t],this._type=t},getComponents:function(){var t=this._components.slice();return null!=this._alpha&&t.push(this._alpha),t},getAlpha:function(){return null!=this._alpha?this._alpha:1},setAlpha:function(t){this._alpha=null==t?null:Math.min(Math.max(t,0),1),this._changed()},hasAlpha:function(){return null!=this._alpha},equals:function(t){var e=r.isPlainValue(t,!0)?F.read(arguments):t;return e===this||e&&this._class===e._class&&this._type===e._type&&this.getAlpha()===e.getAlpha()&&r.equals(this._components,e._components)||!1},toString:function(){for(var t=this._properties,e=[],i="gradient"===this._type,n=h.instance,r=0,s=t.length;r<s;r++){var a=this._components[r];null!=a&&e.push(t[r]+": "+(i?a:n.number(a)))}return null!=this._alpha&&e.push("alpha: "+n.number(this._alpha)),"{ "+e.join(", ")+" }"},toCSS:function(t){function e(t){return Math.round(255*(t<0?0:t>1?1:t))}var i=this._convert("rgb"),n=t||null==this._alpha?1:this._alpha;return i=[e(i[0]),e(i[1]),e(i[2])],n<1&&i.push(n<0?0:n),t?"#"+((1<<24)+(i[0]<<16)+(i[1]<<8)+i[2]).toString(16).slice(1):(4==i.length?"rgba(":"rgb(")+i.join(",")+")"},toCanvasStyle:function(t,e){if(this._canvasStyle)return this._canvasStyle;if("gradient"!==this._type)return this._canvasStyle=this.toCSS();var i,n=this._components,r=n[0],s=r._stops,a=n[1],o=n[2],h=n[3],u=e&&e.inverted();if(u&&(a=u._transformPoint(a),o=u._transformPoint(o),h&&(h=u._transformPoint(h))),r._radial){var l=o.getDistance(a);if(h){var c=h.subtract(a);c.getLength()>l&&(h=a.add(c.normalize(l-.1)))}var f=h||a;i=t.createRadialGradient(f.x,f.y,0,a.x,a.y,l)}else i=t.createLinearGradient(a.x,a.y,o.x,o.y);for(var d=0,_=s.length;d<_;d++){var g=s[d],v=g._offset;i.addColorStop(null==v?d/(_-1):v,g._color.toCanvasStyle())}return this._canvasStyle=i},transform:function(t){if("gradient"===this._type){for(var e=this._components,i=1,n=e.length;i<n;i++){var r=e[i];t._transformPoint(r,r,!0)}this._changed()}},statics:{_types:n,random:function(){var t=Math.random;return new F(t(),t(),t())}}})},new function(){var t={add:function(t,e){return t+e},subtract:function(t,e){return t-e},multiply:function(t,e){return t*e},divide:function(t,e){return t/e}};return r.each(t,function(t,e){this[e]=function(e){e=F.read(arguments);for(var i=this._type,n=this._components,r=e._convert(i),s=0,a=n.length;s<a;s++)r[s]=t(n[s],r[s]);return new F(i,r,null!=this._alpha?t(this._alpha,e.getAlpha()):null)}},{})}),R=r.extend({_class:"Gradient",initialize:function(t,e){this._id=l.get(),t&&r.isPlainObject(t)&&(this.set(t),t=e=null),null==this._stops&&this.setStops(t||["white","black"]),null==this._radial&&this.setRadial("string"==typeof e&&"radial"===e||e||!1)},_serialize:function(t,e){return e.add(this,function(){return r.serialize([this._stops,this._radial],t,!0,e)})},_changed:function(){for(var t=0,e=this._owners&&this._owners.length;t<e;t++)this._owners[t]._changed()},_addOwner:function(t){this._owners||(this._owners=[]),this._owners.push(t)},_removeOwner:function(t){var i=this._owners?this._owners.indexOf(t):-1;-1!=i&&(this._owners.splice(i,1),this._owners.length||(this._owners=e))},clone:function(){for(var t=[],e=0,i=this._stops.length;e<i;e++)t[e]=this._stops[e].clone();return new R(t,this._radial)},getStops:function(){return this._stops},setStops:function(t){if(t.length<2)throw new Error("Gradient stop list needs to contain at least two stops.");var i=this._stops;if(i)for(var n=0,r=i.length;n<r;n++)i[n]._owner=e;for(var n=0,r=(i=this._stops=q.readList(t,0,{clone:!0})).length;n<r;n++)i[n]._owner=this;this._changed()},getRadial:function(){return this._radial},setRadial:function(t){this._radial=t,this._changed()},equals:function(t){if(t===this)return!0;if(t&&this._class===t._class){var e=this._stops,i=t._stops,n=e.length;if(n===i.length){for(var r=0;r<n;r++)if(!e[r].equals(i[r]))return!1;return!0}}return!1}}),q=r.extend({_class:"GradientStop",initialize:function(t,i){var n=t,r=i;"object"==typeof t&&i===e&&(Array.isArray(t)&&"number"!=typeof t[0]?(n=t[0],r=t[1]):("color"in t||"offset"in t||"rampPoint"in t)&&(n=t.color,r=t.offset||t.rampPoint||0)),this.setColor(n),this.setOffset(r)},clone:function(){return new q(this._color.clone(),this._offset)},_serialize:function(t,e){var i=this._color,n=this._offset;return r.serialize(null==n?[i]:[i,n],t,!0,e)},_changed:function(){this._owner&&this._owner._changed(65)},getOffset:function(){return this._offset},setOffset:function(t){this._offset=t,this._changed()},getRampPoint:"#getOffset",setRampPoint:"#setOffset",getColor:function(){return this._color},setColor:function(){var t=F.read(arguments,0,{clone:!0});t&&(t._owner=this),this._color=t,this._changed()},equals:function(t){return t===this||t&&this._class===t._class&&this._color.equals(t._color)&&this._offset==t._offset||!1}}),V=r.extend(new function(){var t={fillColor:null,fillRule:"nonzero",strokeColor:null,strokeWidth:1,strokeCap:"butt",strokeJoin:"miter",strokeScaling:!0,miterLimit:10,dashOffset:0,dashArray:[],shadowColor:null,shadowBlur:0,shadowOffset:new c,selectedColor:null},i=r.set({},t,{fontFamily:"sans-serif",fontWeight:"normal",fontSize:12,leading:null,justification:"left"}),n=r.set({},i,{fillColor:new F}),s={strokeWidth:97,strokeCap:97,strokeJoin:97,strokeScaling:105,miterLimit:97,fontFamily:9,fontWeight:9,fontSize:9,font:9,leading:9,justification:9},a={beans:!0},o={_class:"Style",beans:!0,initialize:function(e,r,s){this._values={},this._owner=r,this._project=r&&r._project||s||paper.project,this._defaults=!r||r instanceof x?i:r instanceof j?n:t,e&&this.set(e)}};return r.each(i,function(t,i){var n=/Color$/.test(i),h="shadowOffset"===i,u=r.capitalize(i),l=s[i],f="set"+u,d="get"+u;o[f]=function(t){var r=this._owner,s=r&&r._children;if(s&&s.length>0&&!(r instanceof N))for(var a=0,o=s.length;a<o;a++)s[a]._style[f](t);else if(i in this._defaults){var h=this._values[i];h!==t&&(n&&(h&&h._owner!==e&&(h._owner=e),t&&t.constructor===F&&(t._owner&&(t=t.clone()),t._owner=r)),this._values[i]=t,r&&r._changed(l||65))}},o[d]=function(t){var s,a=this._owner,o=a&&a._children;if(i in this._defaults&&(!o||!o.length||t||a instanceof N))if((s=this._values[i])===e)(s=this._defaults[i])&&s.clone&&(s=s.clone());else{var u=n?F:h?c:null;!u||s&&s.constructor===u||(this._values[i]=s=u.read([s],0,{readNull:!0,clone:!0}),s&&n&&(s._owner=a))}else if(o)for(var l=0,f=o.length;l<f;l++){var _=o[l]._style[d]();if(l){if(!r.equals(s,_))return e}else s=_}return s},a[d]=function(t){return this._style[d](t)},a[f]=function(t){this._style[f](t)}}),r.each({Font:"FontFamily",WindingRule:"FillRule"},function(t,e){var i="get"+e,n="set"+e;o[i]=a[i]="#get"+t,o[n]=a[n]="#set"+t}),w.inject(a),o},{set:function(t){var e=t instanceof V,i=e?t._values:t;if(i)for(var n in i)if(n in this._defaults){var r=i[n];this[n]=r&&e&&r.clone?r.clone():r}},equals:function(t){function i(t,i,n){var s=t._values,a=i._values,o=i._defaults;for(var h in s){var u=s[h],l=a[h];if(!(n&&h in a||r.equals(u,l===e?o[h]:l)))return!1}return!0}return t===this||t&&this._class===t._class&&i(this,t)&&i(t,this,!0)||!1},hasFill:function(){var t=this.getFillColor();return!!t&&t.alpha>0},hasStroke:function(){var t=this.getStrokeColor();return!!t&&t.alpha>0&&this.getStrokeWidth()>0},hasShadow:function(){var t=this.getShadowColor();return!!t&&t.alpha>0&&(this.getShadowBlur()>0||!this.getShadowOffset().isZero())},getView:function(){return this._project._view},getFontStyle:function(){var t=this.getFontSize();return this.getFontWeight()+" "+t+(/[a-z]/i.test(t+"")?" ":"px ")+this.getFontFamily()},getFont:"#getFontFamily",setFont:"#setFontFamily",getLeading:function t(){var e=t.base.call(this),i=this.getFontSize();return/pt|em|%|px/.test(i)&&(i=this.getView().getPixelSize(i)),null!=e?e:1.2*i}}),H=new function(){function t(t,e,i,n){for(var r=["","webkit","moz","Moz","ms","o"],s=e[0].toUpperCase()+e.substring(1),a=0;a<6;a++){var o=r[a],h=o?o+s:e;if(h in t){if(!i)return t[h];t[h]=n;break}}}return{getStyles:function(t){var e=t&&9!==t.nodeType?t.ownerDocument:t,i=e&&e.defaultView;return i&&i.getComputedStyle(t,"")},getBounds:function(t,e){var i,n=t.ownerDocument,r=n.body,s=n.documentElement;try{i=t.getBoundingClientRect()}catch(t){i={left:0,top:0,width:0,height:0}}var a=i.left-(s.clientLeft||r.clientLeft||0),o=i.top-(s.clientTop||r.clientTop||0);if(!e){var h=n.defaultView;a+=h.pageXOffset||s.scrollLeft||r.scrollLeft,o+=h.pageYOffset||s.scrollTop||r.scrollTop}return new g(a,o,i.width,i.height)},getViewportBounds:function(t){var e=t.ownerDocument,i=e.defaultView,n=e.documentElement;return new g(0,0,i.innerWidth||n.clientWidth,i.innerHeight||n.clientHeight)},getOffset:function(t,e){return H.getBounds(t,e).getPoint()},getSize:function(t){return H.getBounds(t,!0).getSize()},isInvisible:function(t){return H.getSize(t).equals(new d(0,0))},isInView:function(t){return!H.isInvisible(t)&&H.getViewportBounds(t).intersects(H.getBounds(t,!0))},isInserted:function(t){return n.body.contains(t)},getPrefixed:function(e,i){return e&&t(e,i)},setPrefixed:function(e,i,n){if("object"==typeof i)for(var r in i)t(e,r,!0,i[r]);else t(e,i,!0,n)}}},Z={add:function(t,e){if(t)for(var i in e)for(var n=e[i],r=i.split(/[\s,]+/g),s=0,a=r.length;s<a;s++)t.addEventListener(r[s],n,!1)},remove:function(t,e){if(t)for(var i in e)for(var n=e[i],r=i.split(/[\s,]+/g),s=0,a=r.length;s<a;s++)t.removeEventListener(r[s],n,!1)},getPoint:function(t){var e=t.targetTouches?t.targetTouches.length?t.targetTouches[0]:t.changedTouches[0]:t;return new c(e.pageX||e.clientX+n.documentElement.scrollLeft,e.pageY||e.clientY+n.documentElement.scrollTop)},getTarget:function(t){return t.target||t.srcElement},getRelatedTarget:function(t){return t.relatedTarget||t.toElement},getOffset:function(t,e){return Z.getPoint(t).subtract(H.getOffset(e||Z.getTarget(t)))}};Z.requestAnimationFrame=new function(){function t(){var e=s;s=[];for(var i=0,a=e.length;i<a;i++)e[i]();(r=n&&s.length)&&n(t)}var e,n=H.getPrefixed(i,"requestAnimationFrame"),r=!1,s=[];return function(i){s.push(i),n?r||(n(t),r=!0):e||(e=setInterval(t,1e3/60))}};var U=r.extend(s,{_class:"View",initialize:function t(e,r){function s(t){return r[t]||parseInt(r.getAttribute(t),10)}function o(){var t=H.getSize(r);return t.isNaN()||t.isZero()?new d(s("width"),s("height")):t}var h;if(i&&r){this._id=r.getAttribute("id"),null==this._id&&r.setAttribute("id",this._id="view-"+t._id++),Z.add(r,this._viewEvents);if(H.setPrefixed(r.style,{userDrag:"none",userSelect:"none",touchCallout:"none",contentZooming:"none",tapHighlightColor:"rgba(0,0,0,0)"}),a.hasAttribute(r,"resize")){var u=this;Z.add(i,this._windowEvents={resize:function(){u.setViewSize(o())}})}if(h=o(),a.hasAttribute(r,"stats")&&"undefined"!=typeof Stats){this._stats=new Stats;var l=this._stats.domElement,c=l.style,f=H.getOffset(r);c.position="absolute",c.left=f.x+"px",c.top=f.y+"px",n.body.appendChild(l)}}else h=new d(r),r=null;this._project=e,this._scope=e._scope,this._element=r,this._pixelRatio||(this._pixelRatio=i&&i.devicePixelRatio||1),this._setElementSize(h.width,h.height),this._viewSize=h,t._views.push(this),t._viewsById[this._id]=this,(this._matrix=new p)._owner=this,t._focused||(t._focused=this),this._frameItems={},this._frameItemCount=0,this._itemEvents={native:{},virtual:{}},this._autoUpdate=!paper.agent.node,this._needsUpdate=!1},remove:function(){if(!this._project)return!1;U._focused===this&&(U._focused=null),U._views.splice(U._views.indexOf(this),1),delete U._viewsById[this._id];var t=this._project;return t._view===this&&(t._view=null),Z.remove(this._element,this._viewEvents),Z.remove(i,this._windowEvents),this._element=this._project=null,this.off("frame"),this._animate=!1,this._frameItems={},!0},_events:r.each(w._itemHandlers.concat(["onResize","onKeyDown","onKeyUp"]),function(t){this[t]={}},{onFrame:{install:function(){this.play()},uninstall:function(){this.pause()}}}),_animate:!1,_time:0,_count:0,getAutoUpdate:function(){return this._autoUpdate},setAutoUpdate:function(t){this._autoUpdate=t,t&&this.requestUpdate()},update:function(){},draw:function(){this.update()},requestUpdate:function(){if(!this._requested){var t=this;Z.requestAnimationFrame(function(){if(t._requested=!1,t._animate){t.requestUpdate();var e=t._element;H.getPrefixed(n,"hidden")&&"true"!==a.getAttribute(e,"keepalive")||!H.isInView(e)||t._handleFrame()}t._autoUpdate&&t.update()}),this._requested=!0}},play:function(){this._animate=!0,this.requestUpdate()},pause:function(){this._animate=!1},_handleFrame:function(){paper=this._scope;var t=Date.now()/1e3,e=this._last?t-this._last:0;this._last=t,this.emit("frame",new r({delta:e,time:this._time+=e,count:this._count++})),this._stats&&this._stats.update()},_animateItem:function(t,e){var i=this._frameItems;e?(i[t._id]={item:t,time:0,count:0},1==++this._frameItemCount&&this.on("frame",this._handleFrameItems)):(delete i[t._id],0==--this._frameItemCount&&this.off("frame",this._handleFrameItems))},_handleFrameItems:function(t){for(var e in this._frameItems){var i=this._frameItems[e];i.item.emit("frame",new r(t,{time:i.time+=t.delta,count:i.count++}))}},_changed:function(){this._project._changed(2049),this._bounds=this._decomposed=e},getElement:function(){return this._element},getPixelRatio:function(){return this._pixelRatio},getResolution:function(){return 72*this._pixelRatio},getViewSize:function(){var t=this._viewSize;return new _(t.width,t.height,this,"setViewSize")},setViewSize:function(){var t=d.read(arguments),e=t.subtract(this._viewSize);e.isZero()||(this._setElementSize(t.width,t.height),this._viewSize.set(t),this._changed(),this.emit("resize",{size:t,delta:e}),this._autoUpdate&&this.update())},_setElementSize:function(t,e){var i=this._element;i&&(i.width!==t&&(i.width=t),i.height!==e&&(i.height=e))},getBounds:function(){return this._bounds||(this._bounds=this._matrix.inverted()._transformBounds(new g(new c,this._viewSize))),this._bounds},getSize:function(){return this.getBounds().getSize()},isVisible:function(){return H.isInView(this._element)},isInserted:function(){return H.isInserted(this._element)},getPixelSize:function(t){var e,i=this._element;if(i){var r=i.parentNode,s=n.createElement("div");s.style.fontSize=t,r.appendChild(s),e=parseFloat(H.getStyles(s).fontSize),r.removeChild(s)}else e=parseFloat(e);return e},getTextWidth:function(t,e){return 0}},r.each(["rotate","scale","shear","skew"],function(t){var e="rotate"===t;this[t]=function(){var i=(e?r:c).read(arguments),n=c.read(arguments,0,{readNull:!0});return this.transform((new p)[t](i,n||this.getCenter(!0)))}},{_decompose:function(){return this._decomposed||(this._decomposed=this._matrix.decompose())},translate:function(){var t=new p;return this.transform(t.translate.apply(t,arguments))},getCenter:function(){return this.getBounds().getCenter()},setCenter:function(){var t=c.read(arguments);this.translate(this.getCenter().subtract(t))},getZoom:function(){var t=this._decompose(),e=t&&t.scaling;return e?(e.x+e.y)/2:0},setZoom:function(t){this.transform((new p).scale(t/this.getZoom(),this.getCenter()))},getRotation:function(){var t=this._decompose();return t&&t.rotation},setRotation:function(t){var e=this.getRotation();null!=e&&null!=t&&this.rotate(t-e)},getScaling:function(){var t=this._decompose(),i=t&&t.scaling;return i?new f(i.x,i.y,this,"setScaling"):e},setScaling:function(){var t=this.getScaling(),e=c.read(arguments,0,{clone:!0,readNull:!0});t&&e&&this.scale(e.x/t.x,e.y/t.y)},getMatrix:function(){return this._matrix},setMatrix:function(){var t=this._matrix;t.initialize.apply(t,arguments)},transform:function(t){this._matrix.append(t)},scrollBy:function(){this.translate(c.read(arguments).negate())}}),{projectToView:function(){return this._matrix._transformPoint(c.read(arguments))},viewToProject:function(){return this._matrix._inverseTransform(c.read(arguments))},getEventPoint:function(t){return this.viewToProject(Z.getOffset(t,this._element))}},{statics:{_views:[],_viewsById:{},_id:0,create:function(t,e){return n&&"string"==typeof e&&(e=n.getElementById(e)),new(i?W:U)(t,e)}}},new function(){function t(t){var e=Z.getTarget(t);return e.getAttribute&&U._viewsById[e.getAttribute("id")]}function e(){var t=U._focused;if(!t||!t.isVisible())for(var e=0,i=U._views.length;e<i;e++)if((t=U._views[e]).isVisible()){U._focused=h=t;break}}function r(t,e,i){t._handleMouseEvent("mousemove",e,i)}function s(t,e,i,n,r,s,a){function o(t,i){if(t.responds(i)){if(h||(h=new X(i,n,r,e||t,s?r.subtract(s):null)),t.emit(i,h)&&(I=!0,h.prevented&&(M=!0),h.stopped))return u=!0}else{var a=T[i];if(a)return o(t,a)}}for(var h,u=!1;t&&t!==a&&!o(t,i);)t=t._parent;return u}function a(t,e,i,n,r,a){return t._project.removeOn(i),M=I=!1,b&&s(b,null,i,n,r,a)||e&&e!==b&&!e.isDescendant(b)&&s(e,null,i,n,r,a,b)||s(t,b||e||t,i,n,r,a)}if(i){var o,h,u,l,c,f=!1,d=!1,_=i.navigator;_.pointerEnabled||_.msPointerEnabled?(u="pointerdown MSPointerDown",l="pointermove MSPointerMove",c="pointerup pointercancel MSPointerUp MSPointerCancel"):(u="touchstart",l="touchmove",c="touchend touchcancel","ontouchstart"in i&&_.userAgent.match(/mobile|tablet|ip(ad|hone|od)|android|silk/i)||(u+=" mousedown",l+=" mousemove",c+=" mouseup"));var g={},v={mouseout:function(t){var e=U._focused,i=Z.getRelatedTarget(t);if(e&&(!i||"HTML"===i.nodeName)){var n=Z.getOffset(t,e._element),s=n.x,a=Math.abs,o=a(s),h=o-(1<<25);n.x=a(h)<o?h*(s<0?-1:1):s,r(e,t,e.viewToProject(n))}},scroll:e};g[u]=function(e){var i=U._focused=t(e);f||(f=!0,i._handleMouseEvent("mousedown",e))},v[l]=function(i){var n=U._focused;if(!d){var s=t(i);s?n!==s&&(n&&r(n,i),o||(o=n),n=U._focused=h=s):h&&h===n&&(o&&!o.isInserted()&&(o=null),n=U._focused=o,o=null,e())}n&&r(n,i)},v[u]=function(){d=!0},v[c]=function(t){var e=U._focused;e&&f&&e._handleMouseEvent("mouseup",t),d=f=!1},Z.add(n,v),Z.add(i,{load:e});var p,m,y,w,x,b,C,S,P,I=!1,M=!1,T={doubleclick:"click",mousedrag:"mousemove"},z=!1,k={mousedown:{mousedown:1,mousedrag:1,click:1,doubleclick:1},mouseup:{mouseup:1,mousedrag:1,click:1,doubleclick:1},mousemove:{mousedrag:1,mousemove:1,mouseenter:1,mouseleave:1}};return{_viewEvents:g,_handleMouseEvent:function(t,e,i){function n(t){return r.virtual[t]||l.responds(t)||u&&u.responds(t)}var r=this._itemEvents,o=r.native[t],h="mousemove"===t,u=this._scope.tool,l=this;h&&f&&n("mousedrag")&&(t="mousedrag"),i||(i=this.getEventPoint(e));var c=this.getBounds().contains(i),d=o&&c&&l._project.hitTest(i,{tolerance:0,fill:!0,stroke:!0}),_=d&&d.item||null,g=!1,v={};if(v[t.substr(5)]=!0,o&&_!==x&&(x&&s(x,null,"mouseleave",e,i),_&&s(_,null,"mouseenter",e,i),x=_),z^c&&(s(this,null,c?"mouseenter":"mouseleave",e,i),p=c?this:null,g=!0),!c&&!v.drag||i.equals(y)||(a(this,_,h?t:"mousemove",e,i,y),g=!0),z=c,v.down&&c||v.up&&m){if(a(this,_,t,e,i,m),v.down){if(P=_===C&&Date.now()-S<300,w=C=_,!M&&_){for(var T=_;T&&!T.responds("mousedrag");)T=T._parent;T&&(b=_)}m=i}else v.up&&(M||_!==w||(S=Date.now(),a(this,_,P?"doubleclick":"click",e,i,m),P=!1),w=b=null);z=!1,g=!0}y=i,g&&u&&(I=u._handleMouseEvent(t,e,i,v)||I),(I&&!v.move||v.down&&n("mouseup"))&&e.preventDefault()},_handleKeyEvent:function(t,e,i,n){function r(r){r.responds(t)&&(paper=a,r.emit(t,s=s||new J(t,e,i,n)))}var s,a=this._scope,o=a.tool;this.isVisible()&&(r(this),o&&o.responds(t)&&r(o))},_countItemEvent:function(t,e){var i=this._itemEvents,n=i.native,r=i.virtual;for(var s in k)n[s]=(n[s]||0)+(k[s][t]||0)*e;r[t]=(r[t]||0)+e},statics:{updateFocus:e}}}}),W=U.extend({_class:"CanvasView",initialize:function(t,e){if(!(e instanceof i.HTMLCanvasElement)){var n=d.read(arguments,1);if(n.isZero())throw new Error("Cannot create CanvasView with the provided argument: "+r.slice(arguments,1));e=Q.getCanvas(n)}var s=this._context=e.getContext("2d");if(s.save(),this._pixelRatio=1,!/^off|false$/.test(a.getAttribute(e,"hidpi"))){var o=i.devicePixelRatio||1,h=H.getPrefixed(s,"backingStorePixelRatio")||1;this._pixelRatio=o/h}U.call(this,t,e),this._needsUpdate=!0},remove:function t(){return this._context.restore(),t.base.call(this)},_setElementSize:function t(e,i){var n=this._pixelRatio;if(t.base.call(this,e*n,i*n),1!==n){var r=this._element,s=this._context;if(!a.hasAttribute(r,"resize")){var o=r.style;o.width=e+"px",o.height=i+"px"}s.restore(),s.save(),s.scale(n,n)}},getPixelSize:function t(e){var i,n=paper.agent;if(n&&n.firefox)i=t.base.call(this,e);else{var r=this._context,s=r.font;r.font=e+" serif",i=parseFloat(r.font),r.font=s}return i},getTextWidth:function(t,e){var i=this._context,n=i.font,r=0;i.font=t;for(var s=0,a=e.length;s<a;s++)r=Math.max(r,i.measureText(e[s]).width);return i.font=n,r},update:function(){if(!this._needsUpdate)return!1;var t=this._project,e=this._context,i=this._viewSize;return e.clearRect(0,0,i.width+1,i.height+1),t&&t.draw(e,this._matrix,this._pixelRatio),this._needsUpdate=!1,!0}}),G=r.extend({_class:"Event",initialize:function(t){this.event=t,this.type=t&&t.type},prevented:!1,stopped:!1,preventDefault:function(){this.prevented=!0,this.event.preventDefault()},stopPropagation:function(){this.stopped=!0,this.event.stopPropagation()},stop:function(){this.stopPropagation(),this.preventDefault()},getTimeStamp:function(){return this.event.timeStamp},getModifiers:function(){return $.modifiers}}),J=G.extend({_class:"KeyEvent",initialize:function(t,e,i,n){this.type=t,this.event=e,this.key=i,this.character=n},toString:function(){return"{ type: '"+this.type+"', key: '"+this.key+"', character: '"+this.character+"', modifiers: "+this.getModifiers()+" }"}}),$=new function(){function t(t){var i=t.key||t.keyIdentifier;return i=/^U\+/.test(i)?String.fromCharCode(parseInt(i.substr(2),16)):/^Arrow[A-Z]/.test(i)?i.substr(5):"Unidentified"===i||i===e?String.fromCharCode(t.keyCode):i,h[i]||(i.length>1?r.hyphenate(i):i.toLowerCase())}function s(t,e,i,n){var o,h=U._focused;if(l[e]=t,t?c[e]=i:delete c[e],e.length>1&&(o=r.camelize(e))in f){f[o]=t;var u=paper&&paper.agent;if("meta"===o&&u&&u.mac)if(t)a={};else{for(var d in a)d in c&&s(!1,d,a[d],n);a=null}}else t&&a&&(a[e]=i);h&&h._handleKeyEvent(t?"keydown":"keyup",n,e,i)}var a,o,h={"\t":"tab"," ":"space","\b":"backspace","":"delete",Spacebar:"space",Del:"delete",Win:"meta",Esc:"escape"},u={tab:"\t",space:" ",enter:"\r"},l={},c={},f=new r({shift:!1,control:!1,alt:!1,meta:!1,capsLock:!1,space:!1}).inject({option:{get:function(){return this.alt}},command:{get:function(){var t=paper&&paper.agent;return t&&t.mac?this.meta:this.control}}});return Z.add(n,{keydown:function(e){var i=t(e),n=paper&&paper.agent;i.length>1||n&&n.chrome&&(e.altKey||n.mac&&e.metaKey||!n.mac&&e.ctrlKey)?s(!0,i,u[i]||(i.length>1?"":i),e):o=i},keypress:function(e){if(o){var i=t(e),n=e.charCode,r=n>=32?String.fromCharCode(n):i.length>1?"":i;i!==o&&(i=r.toLowerCase()),s(!0,i,r,e),o=null}},keyup:function(e){var i=t(e);i in c&&s(!1,i,c[i],e)}}),Z.add(i,{blur:function(t){for(var e in c)s(!1,e,c[e],t)}}),{modifiers:f,isDown:function(t){return!!l[t]}}},X=G.extend({_class:"MouseEvent",initialize:function(t,e,i,n,r){this.type=t,this.event=e,this.point=i,this.target=n,this.delta=r},toString:function(){return"{ type: '"+this.type+"', point: "+this.point+", target: "+this.target+(this.delta?", delta: "+this.delta:"")+", modifiers: "+this.getModifiers()+" }"}}),Y=G.extend({_class:"ToolEvent",_item:null,initialize:function(t,e,i){this.tool=t,this.type=e,this.event=i},_choosePoint:function(t,e){return t||(e?e.clone():null)},getPoint:function(){return this._choosePoint(this._point,this.tool._point)},setPoint:function(t){this._point=t},getLastPoint:function(){return this._choosePoint(this._lastPoint,this.tool._lastPoint)},setLastPoint:function(t){this._lastPoint=t},getDownPoint:function(){return this._choosePoint(this._downPoint,this.tool._downPoint)},setDownPoint:function(t){this._downPoint=t},getMiddlePoint:function(){return!this._middlePoint&&this.tool._lastPoint?this.tool._point.add(this.tool._lastPoint).divide(2):this._middlePoint},setMiddlePoint:function(t){this._middlePoint=t},getDelta:function(){return!this._delta&&this.tool._lastPoint?this.tool._point.subtract(this.tool._lastPoint):this._delta},setDelta:function(t){this._delta=t},getCount:function(){return this.tool[/^mouse(down|up)$/.test(this.type)?"_downCount":"_moveCount"]},setCount:function(t){this.tool[/^mouse(down|up)$/.test(this.type)?"downCount":"count"]=t},getItem:function(){if(!this._item){var t=this.tool._scope.project.hitTest(this.getPoint());if(t){for(var e=t.item,i=e._parent;/^(Group|CompoundPath)$/.test(i._class);)e=i,i=i._parent;this._item=e}}return this._item},setItem:function(t){this._item=t},toString:function(){return"{ type: "+this.type+", point: "+this.getPoint()+", count: "+this.getCount()+", modifiers: "+this.getModifiers()+" }"}}),K=(o.extend({_class:"Tool",_list:"tools",_reference:"tool",_events:["onMouseDown","onMouseUp","onMouseDrag","onMouseMove","onActivate","onDeactivate","onEditOptions","onKeyDown","onKeyUp"],initialize:function(t){o.call(this),this._moveCount=-1,this._downCount=-1,this.set(t)},getMinDistance:function(){return this._minDistance},setMinDistance:function(t){this._minDistance=t,null!=t&&null!=this._maxDistance&&t>this._maxDistance&&(this._maxDistance=t)},getMaxDistance:function(){return this._maxDistance},setMaxDistance:function(t){this._maxDistance=t,null!=this._minDistance&&null!=t&&t<this._minDistance&&(this._minDistance=t)},getFixedDistance:function(){return this._minDistance==this._maxDistance?this._minDistance:null},setFixedDistance:function(t){this._minDistance=this._maxDistance=t},_handleMouseEvent:function(t,e,i,n){function r(t,e){var r=i,s=a?c._point:c._downPoint||r;if(a){if(c._moveCount&&r.equals(s))return!1;if(s&&(null!=t||null!=e)){var o=r.subtract(s),h=o.getLength();if(h<(t||0))return!1;e&&(r=s.add(o.normalize(Math.min(h,e))))}c._moveCount++}return c._point=r,c._lastPoint=s||r,n.down&&(c._moveCount=-1,c._downPoint=r,c._downCount++),!0}function s(){o&&(l=c.emit(t,new Y(c,t,e))||l)}paper=this._scope,n.drag&&!this.responds(t)&&(t="mousemove");var a=n.move||n.drag,o=this.responds(t),h=this.minDistance,u=this.maxDistance,l=!1,c=this;if(n.down)r(),s();else if(n.up)r(null,u),s();else if(o)for(;r(h,u);)s();return l}}),{request:function(e){var i=new t.XMLHttpRequest;return i.open((e.method||"get").toUpperCase(),e.url,r.pick(e.async,!0)),e.mimeType&&i.overrideMimeType(e.mimeType),i.onload=function(){var t=i.status;0===t||200===t?e.onLoad&&e.onLoad.call(i,i.responseText):i.onerror()},i.onerror=function(){var t=i.status,n='Could not load "'+e.url+'" (Status: '+t+")";if(!e.onError)throw new Error(n);e.onError(n,t)},i.send(null)}}),Q={canvases:[],getCanvas:function(t,e){if(!i)return null;var r,s=!0;"object"==typeof t&&(e=t.height,t=t.width),this.canvases.length?r=this.canvases.pop():(r=n.createElement("canvas"),s=!1);var a=r.getContext("2d");if(!a)throw new Error("Canvas "+r+" is unable to provide a 2D context.");return r.width===t&&r.height===e?s&&a.clearRect(0,0,t+1,e+1):(r.width=t,r.height=e),a.save(),r},getContext:function(t,e){var i=this.getCanvas(t,e);return i?i.getContext("2d"):null},release:function(t){var e=t&&t.canvas?t.canvas:t;e&&e.getContext&&(e.getContext("2d").restore(),this.canvases.push(e))}},tt=new function(){function t(t,e,i){return.2989*t+.587*e+.114*i}function e(e,i,n,r){var s=r-t(e,i,n),r=t(d=e+s,_=i+s,g=n+s),a=v(d,_,g),o=p(d,_,g);if(a<0){var h=r-a;d=r+(d-r)*r/h,_=r+(_-r)*r/h,g=r+(g-r)*r/h}if(o>255){var u=255-r,l=o-r;d=r+(d-r)*u/l,_=r+(_-r)*u/l,g=r+(g-r)*u/l}}function i(t,e,i){return p(t,e,i)-v(t,e,i)}function n(t,e,i,n){var r,s=[t,e,i],a=p(t,e,i),o=v(t,e,i);r=0===v(o=o===t?0:o===e?1:2,a=a===t?0:a===e?1:2)?1===p(o,a)?2:1:0,s[a]>s[o]?(s[r]=(s[r]-s[o])*n/(s[a]-s[o]),s[a]=n):s[r]=s[a]=0,s[o]=0,d=s[0],_=s[1],g=s[2]}var s,a,o,h,u,l,c,f,d,_,g,v=Math.min,p=Math.max,m=Math.abs,y={multiply:function(){d=u*s/255,_=l*a/255,g=c*o/255},screen:function(){d=u+s-u*s/255,_=l+a-l*a/255,g=c+o-c*o/255},overlay:function(){d=u<128?2*u*s/255:255-2*(255-u)*(255-s)/255,_=l<128?2*l*a/255:255-2*(255-l)*(255-a)/255,g=c<128?2*c*o/255:255-2*(255-c)*(255-o)/255},"soft-light":function(){var t=s*u/255;d=t+u*(255-(255-u)*(255-s)/255-t)/255,_=(t=a*l/255)+l*(255-(255-l)*(255-a)/255-t)/255,g=(t=o*c/255)+c*(255-(255-c)*(255-o)/255-t)/255},"hard-light":function(){d=s<128?2*s*u/255:255-2*(255-s)*(255-u)/255,_=a<128?2*a*l/255:255-2*(255-a)*(255-l)/255,g=o<128?2*o*c/255:255-2*(255-o)*(255-c)/255},"color-dodge":function(){d=0===u?0:255===s?255:v(255,255*u/(255-s)),_=0===l?0:255===a?255:v(255,255*l/(255-a)),g=0===c?0:255===o?255:v(255,255*c/(255-o))},"color-burn":function(){d=255===u?255:0===s?0:p(0,255-255*(255-u)/s),_=255===l?255:0===a?0:p(0,255-255*(255-l)/a),g=255===c?255:0===o?0:p(0,255-255*(255-c)/o)},darken:function(){d=u<s?u:s,_=l<a?l:a,g=c<o?c:o},lighten:function(){d=u>s?u:s,_=l>a?l:a,g=c>o?c:o},difference:function(){(d=u-s)<0&&(d=-d),(_=l-a)<0&&(_=-_),(g=c-o)<0&&(g=-g)},exclusion:function(){d=u+s*(255-u-u)/255,_=l+a*(255-l-l)/255,g=c+o*(255-c-c)/255},hue:function(){n(s,a,o,i(u,l,c)),e(d,_,g,t(u,l,c))},saturation:function(){n(u,l,c,i(s,a,o)),e(d,_,g,t(u,l,c))},luminosity:function(){e(u,l,c,t(s,a,o))},color:function(){e(s,a,o,t(u,l,c))},add:function(){d=v(u+s,255),_=v(l+a,255),g=v(c+o,255)},subtract:function(){d=p(u-s,0),_=p(l-a,0),g=p(c-o,0)},average:function(){d=(u+s)/2,_=(l+a)/2,g=(c+o)/2},negation:function(){d=255-m(255-s-u),_=255-m(255-a-l),g=255-m(255-o-c)}},w=this.nativeModes=r.each(["source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","darker","copy","xor"],function(t){this[t]=!0},{}),x=Q.getContext(1,1);x&&(r.each(y,function(t,e){var i="darken"===e,n=!1;x.save();try{x.fillStyle=i?"#300":"#a00",x.fillRect(0,0,1,1),x.globalCompositeOperation=e,x.globalCompositeOperation===e&&(x.fillStyle=i?"#a00":"#300",x.fillRect(0,0,1,1),n=x.getImageData(0,0,1,1).data[0]!==i?170:51)}catch(t){}x.restore(),w[e]=n}),Q.release(x)),this.process=function(t,e,i,n,r){var v=e.canvas,p="normal"===t;if(p||w[t])i.save(),i.setTransform(1,0,0,1,0,0),i.globalAlpha=n,p||(i.globalCompositeOperation=t),i.drawImage(v,r.x,r.y),i.restore();else{var m=y[t];if(!m)return;for(var x=i.getImageData(r.x,r.y,v.width,v.height),b=x.data,C=e.getImageData(0,0,v.width,v.height).data,S=0,P=b.length;S<P;S+=4){s=C[S],u=b[S],a=C[S+1],l=b[S+1],o=C[S+2],c=b[S+2],h=C[S+3],f=b[S+3],m();var I=h*n/255,M=1-I;b[S]=I*d+M*u,b[S+1]=I*_+M*l,b[S+2]=I*g+M*c,b[S+3]=h*n+M*f}i.putImageData(x,r.x,r.y)}}},et=new function(){function t(t,e,i){for(var n in e){var r=e[n],a=s[n];"number"==typeof r&&i&&(r=i.number(r)),a?t.setAttributeNS(a,n,r):t.setAttribute(n,r)}return t}var e="http://www.w3.org/2000/svg",i="http://www.w3.org/2000/xmlns",r="http://www.w3.org/1999/xlink",s={href:r,xlink:i,xmlns:i+"/","xmlns:xlink":i+"/"};return{svg:e,xmlns:i,xlink:r,create:function(i,r,s){return t(n.createElementNS(e,i),r,s)},get:function(t,e){var i=s[e],n=i?t.getAttributeNS(i,e):t.getAttribute(e);return"null"===n?null:n},set:t}},it=r.each({fillColor:["fill","color"],fillRule:["fill-rule","string"],strokeColor:["stroke","color"],strokeWidth:["stroke-width","number"],strokeCap:["stroke-linecap","string"],strokeJoin:["stroke-linejoin","string"],strokeScaling:["vector-effect","lookup",{true:"none",false:"non-scaling-stroke"},function(t,e){return!e&&(t instanceof A||t instanceof C||t instanceof j)}],miterLimit:["stroke-miterlimit","number"],dashArray:["stroke-dasharray","array"],dashOffset:["stroke-dashoffset","number"],fontFamily:["font-family","string"],fontWeight:["font-weight","string"],fontSize:["font-size","number"],justification:["text-anchor","lookup",{left:"start",center:"middle",right:"end"}],opacity:["opacity","number"],blendMode:["mix-blend-mode","style"]},function(t,e){var i=r.capitalize(e),n=t[2];this[e]={type:t[1],property:e,attribute:t[0],toSVG:n,fromSVG:n&&r.each(n,function(t,e){this[t]=e},{}),exportFilter:t[3],get:"get"+i,set:"set"+i}},{});return new function(){function e(t,e,i){var n=new r,s=t.getTranslation();if(e){var a=(t=t._shiftless())._inverseTransform(s);n[i?"cx":"x"]=a.x,n[i?"cy":"y"]=a.y,s=null}if(!t.isIdentity()){var o=t.decompose();if(o){var h=[],l=o.rotation,c=o.scaling,f=o.skewing;s&&!s.isZero()&&h.push("translate("+v.point(s)+")"),l&&h.push("rotate("+v.number(l)+")"),u.isZero(c.x-1)&&u.isZero(c.y-1)||h.push("scale("+v.point(c)+")"),f.x&&h.push("skewX("+v.number(f.x)+")"),f.y&&h.push("skewY("+v.number(f.y)+")"),n.transform=h.join(" ")}else n.transform="matrix("+t.getValues().join(",")+")"}return n}function i(t,i){for(var n=e(t._matrix),r=t._children,s=et.create("g",n,v),a=0,o=r.length;a<o;a++){var h=r[a],u=d(h,i);if(u)if(h.isClipMask()){var l=et.create("clipPath");l.appendChild(u),c(h,l,"clip"),et.set(s,{"clip-path":"url(#"+l.id+")"})}else s.appendChild(u)}return s}function n(t){var i=t._type,n=t._radius,r=e(t._matrix,!0,"rectangle"!==i);if("rectangle"===i){i="rect";var s=t._size,a=s.width,o=s.height;r.x-=a/2,r.y-=o/2,r.width=a,r.height=o,n.isZero()&&(n=null)}return n&&("circle"===i?r.r=n:(r.rx=n.width,r.ry=n.height)),et.create(i,r,v)}function s(t){var e=o(t,"color");if(!e){var i,n=t.getGradient(),r=n._radial,s=t.getOrigin(),a=t.getDestination();if(r){i={cx:s.x,cy:s.y,r:s.getDistance(a)};var h=t.getHighlight();h&&(i.fx=h.x,i.fy=h.y)}else i={x1:s.x,y1:s.y,x2:a.x,y2:a.y};i.gradientUnits="userSpaceOnUse",e=et.create((r?"radial":"linear")+"Gradient",i,v);for(var u=n._stops,l=0,f=u.length;l<f;l++){var d=u[l],_=d._color,g=_.getAlpha(),p=d._offset;i={offset:null==p?l/(f-1):p},_&&(i["stop-color"]=_.toCSS(!0)),g<1&&(i["stop-opacity"]=g),e.appendChild(et.create("stop",i,v))}c(t,e,"color")}return"url(#"+e.id+")"}function a(t,e,i){var n={},a=!i&&t.getParent(),o=[];return null!=t._name&&(n.id=t._name),r.each(it,function(e){var i=e.get,h=e.type,u=t[i]();if(e.exportFilter?e.exportFilter(t,u):!a||!r.equals(a[i](),u)){if("color"===h&&null!=u){var l=u.getAlpha();l<1&&(n[e.attribute+"-opacity"]=l)}"style"===h?o.push(e.attribute+": "+u):n[e.attribute]=null==u?"none":"color"===h?u.gradient?s(u,t):u.toCSS(!0):"array"===h?u.join(","):"lookup"===h?e.toSVG[u]:u}}),o.length&&(n.style=o.join(";")),1===n.opacity&&delete n.opacity,t._visible||(n.visibility="hidden"),et.set(e,n,v)}function o(t,e){return m||(m={ids:{},svgs:{}}),t&&m.svgs[e+"-"+(t._id||t.__id||(t.__id=l.get("svg")))]}function c(t,e,i){m||o();var n=m.ids[i]=(m.ids[i]||0)+1;e.id=i+"-"+n,m.svgs[i+"-"+(t._id||t.__id)]=e}function f(e,i){var n=e,r=null;if(m){n="svg"===e.nodeName.toLowerCase()&&e;for(var s in m.svgs)r||(n||(n=et.create("svg")).appendChild(e),r=n.insertBefore(et.create("defs"),n.firstChild)),r.appendChild(m.svgs[s]);m=null}return i.asString?(new t.XMLSerializer).serializeToString(n):n}function d(t,e,i){var n=x[t._class],r=n&&n(t,e);if(r){var s=e.onExport;s&&(r=s(t,r,e)||r);var o=JSON.stringify(t._data);o&&"{}"!==o&&"null"!==o&&r.setAttribute("data-paper-data",o)}return r&&a(t,r,i)}function _(t){return t||(t={}),v=new h(t.precision),t}var v,m,x={Group:i,Layer:i,Raster:function(t,i){var n=e(t._matrix,!0),r=t.getSize(),s=t.getImage();return n.x-=r.width/2,n.y-=r.height/2,n.width=r.width,n.height=r.height,n.href=0==i.embedImages&&s&&s.src||t.toDataURL(),et.create("image",n,v)},Path:function(t,i){var r=i.matchShapes;if(r){var s=t.toShape(!1);if(s)return n(s)}var a,o=t._segments,h=o.length,u=e(t._matrix);if(r&&h>=2&&!t.hasHandles())if(h>2){a=t._closed?"polygon":"polyline";for(var l=[],c=0;c<h;c++)l.push(v.point(o[c]._point));u.points=l.join(" ")}else{a="line";var f=o[0]._point,d=o[1]._point;u.set({x1:f.x,y1:f.y,x2:d.x,y2:d.y})}else a="path",u.d=t.getPathData(null,i.precision);return et.create(a,u,v)},Shape:n,CompoundPath:function(t,i){var n=e(t._matrix),r=t.getPathData(null,i.precision);return r&&(n.d=r),et.create("path",n,v)},SymbolItem:function(t,i){var n=e(t._matrix,!0),r=t._definition,s=o(r,"symbol"),a=r._item,h=a.getBounds();return s||((s=et.create("symbol",{viewBox:v.rectangle(h)})).appendChild(d(a,i)),c(r,s,"symbol")),n.href="#"+s.id,n.x+=h.x,n.y+=h.y,n.width=h.width,n.height=h.height,n.overflow="visible",et.create("use",n,v)},PointText:function(t){var i=et.create("text",e(t._matrix,!0),v);return i.textContent=t._content,i}};w.inject({exportSVG:function(t){return t=_(t),f(d(this,t,!0),t)}}),y.inject({exportSVG:function(t){t=_(t);var i=this._children,n=this.getView(),s=r.pick(t.bounds,"view"),a=t.matrix||"view"===s&&n._matrix,o=a&&p.read([a]),h="view"===s?new g([0,0],n.getViewSize()):"content"===s?w._getBounds(i,o,{stroke:!0}).rect:g.read([s],0,{readNull:!0}),u={version:"1.1",xmlns:et.svg,"xmlns:xlink":et.xlink};h&&(u.width=h.width,u.height=h.height,(h.x||h.y)&&(u.viewBox=v.rectangle(h)));var l=et.create("svg",u,v),c=l;o&&!o.isIdentity()&&(c=l.appendChild(et.create("g",e(o),v)));for(var m=0,y=i.length;m<y;m++)c.appendChild(d(i[m],t,!0));return f(l,t)}})},new function(){function s(t,e,i,n,r){var s=et.get(t,e),a=null==s?n?null:i?"":0:i?s:parseFloat(s);return/%\s*$/.test(s)?a/100*(r?1:z[/x|^width/.test(e)?"width":"height"]):a}function a(t,e,i,n,r){return e=s(t,e||"x",!1,n,r),i=s(t,i||"y",!1,n,r),!n||null!=e&&null!=i?new c(e,i):null}function o(t,e,i,n,r){return e=s(t,e||"width",!1,n,r),i=s(t,i||"height",!1,n,r),!n||null!=e&&null!=i?new d(e,i):null}function h(t,e,i){return"none"===t?null:"number"===e?parseFloat(t):"array"===e?t?t.split(/[\s,]+/g).map(parseFloat):[]:"color"===e?P(t)||t:"lookup"===e?i[t]:t}function u(t,e,i,n){var r=t.childNodes,s="clippath"===e,a="defs"===e,o=new x,h=o._project,u=h._currentStyle,l=[];if(s||a||(o=b(o,t,n),h._currentStyle=o._style.clone()),n)for(var c=t.querySelectorAll("defs"),f=0,d=c.length;f<d;f++)M(c[f],i,!1);for(var f=0,d=r.length;f<d;f++){var _,g=r[f];1!==g.nodeType||/^defs$/i.test(g.nodeName)||!(_=M(g,i,!1))||_ instanceof I||l.push(_)}return o.addChildren(l),s&&(o=b(o.reduce(),t,n)),h._currentStyle=u,(s||a)&&(o.remove(),o=null),o}function l(t,e){for(var i=t.getAttribute("points").match(/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g),n=[],r=0,s=i.length;r<s;r+=2)n.push(new c(parseFloat(i[r]),parseFloat(i[r+1])));var a=new L(n);return"polygon"===e&&a.closePath(),a}function f(t,e){var i,n=(s(t,"href",!0)||"").substring(1),r="radialgradient"===e;if(n)(i=k[n].getGradient())._radial^r&&((i=i.clone())._radial=r);else{for(var o=t.childNodes,h=[],u=0,l=o.length;u<l;u++){var c=o[u];1===c.nodeType&&h.push(b(new q,c))}i=new R(h,r)}var f,d,_,g="userSpaceOnUse"!==s(t,"gradientUnits",!0);return r?(d=(f=a(t,"cx","cy",!1,g)).add(s(t,"r",!1,!1,g),0),_=a(t,"fx","fy",!0,g)):(f=a(t,"x1","y1",!1,g),d=a(t,"x2","y2",!1,g)),b(new F(i,f,d,_),t)._scaleToBounds=g,null}function _(t,e,i,n){if(t.transform){for(var r=(n.getAttribute(i)||"").split(/\)\s*/g),s=new p,a=0,o=r.length;a<o;a++){var h=r[a];if(!h)break;for(var u=h.split(/\(\s*/),l=u[0],c=u[1].split(/[\s,]+/g),f=0,d=c.length;f<d;f++)c[f]=parseFloat(c[f]);switch(l){case"matrix":s.append(new p(c[0],c[1],c[2],c[3],c[4],c[5]));break;case"rotate":s.rotate(c[0],c[1],c[2]);break;case"translate":s.translate(c[0],c[1]);break;case"scale":s.scale(c);break;case"skewX":s.skew(c[0],0);break;case"skewY":s.skew(0,c[0])}}t.transform(s)}}function v(t,e,i){var n="fill-opacity"===i?"getFillColor":"getStrokeColor",r=t[n]&&t[n]();r&&r.setAlpha(parseFloat(e))}function m(t,i,n){var s=t.attributes[i],a=s&&s.value;if(!a){var o=r.camelize(i);(a=t.style[o])||n.node[o]===n.parent[o]||(a=n.node[o])}return a?"none"===a?null:a:e}function b(t,i,n){if(i.style){var s=i.parentNode,a={node:H.getStyles(i)||{},parent:!n&&!/^defs$/i.test(s.tagName)&&H.getStyles(s)||{}};r.each(N,function(n,r){var s=m(i,r,a);t=s!==e&&n(t,s,r,i,a)||t})}return t}function P(t){var e=t&&t.match(/\((?:["'#]*)([^"')]+)/),n=e&&e[1],r=n&&k[i?n.replace(i.location.href.split("#")[0]+"#",""):n];return r&&r._scaleToBounds&&((r=r.clone())._scaleToBounds=!0),r}function M(t,e,i){var s,a,h,u=t.nodeName.toLowerCase(),l="#document"!==u,c=n.body;i&&l&&(z=paper.getView().getSize(),z=o(t,null,null,!0)||z,s=et.create("svg",{style:"stroke-width: 1px; stroke-miterlimit: 10"}),a=t.parentNode,h=t.nextSibling,s.appendChild(t),c.appendChild(s));var f=paper.settings,d=f.applyMatrix,_=f.insertItems;f.applyMatrix=!1,f.insertItems=!1;var g=O[u],v=g&&g(t,u,e,i)||null;if(f.insertItems=_,f.applyMatrix=d,v){!l||v instanceof x||(v=b(v,t,i));var p=e.onImport,m=l&&t.getAttribute("data-paper-data");p&&(v=p(t,v,e)||v),e.expandShapes&&v instanceof C&&(v.remove(),v=v.toPath()),m&&(v._data=JSON.parse(m))}return s&&(c.removeChild(s),a&&(h?a.insertBefore(t,h):a.appendChild(t))),i&&(k={},v&&r.pick(e.applyMatrix,d)&&v.matrix.apply(!0,!0)),v}function T(i,r,s){function a(n){try{var a="object"==typeof n?n:(new t.DOMParser).parseFromString(n,"image/svg+xml");if(!a.nodeName)throw a=null,new Error("Unsupported SVG source: "+i);paper=h,u=M(a,r,!0),r&&!1===r.insert||s._insertItem(e,u);var l=r.onLoad;l&&l(u,n)}catch(t){o(t)}}function o(t,e){var i=r.onError;if(!i)throw new Error(t);i(t,e)}if(!i)return null;r="function"==typeof r?{onLoad:r}:r||{};var h=paper,u=null;if("string"!=typeof i||/^.*</.test(i)){if("undefined"!=typeof File&&i instanceof File){var l=new FileReader;return l.onload=function(){a(l.result)},l.onerror=function(){o(l.error)},l.readAsText(i)}a(i)}else{var c=n.getElementById(i);c?a(c):K.request({url:i,async:!0,onLoad:a,onError:o})}return u}var z,k={},O={"#document":function(t,e,i,n){for(var r=t.childNodes,s=0,a=r.length;s<a;s++){var o=r[s];if(1===o.nodeType)return M(o,i,n)}},g:u,svg:u,clippath:u,polygon:l,polyline:l,path:function(t){return A.create(t.getAttribute("d"))},lineargradient:f,radialgradient:f,image:function(t){var e=new S(s(t,"href",!0));return e.on("load",function(){var e=o(t);this.setSize(e);var i=this._matrix._transformPoint(a(t).add(e.divide(2)));this.translate(i)}),e},symbol:function(t,e,i,n){return new I(u(t,e,i,n),!0)},defs:u,use:function(t){var e=(s(t,"href",!0)||"").substring(1),i=k[e],n=a(t);return i?i instanceof I?i.place(n):i.clone().translate(n):null},circle:function(t){return new C.Circle(a(t,"cx","cy"),s(t,"r"))},ellipse:function(t){return new C.Ellipse({center:a(t,"cx","cy"),radius:o(t,"rx","ry")})},rect:function(t){return new C.Rectangle(new g(a(t),o(t)),o(t,"rx","ry"))},line:function(t){return new L.Line(a(t,"x1","y1"),a(t,"x2","y2"))},text:function(t){var e=new E(a(t).add(a(t,"dx","dy")));return e.setContent(t.textContent.trim()||""),e}},N=r.set(r.each(it,function(t){this[t.attribute]=function(e,i){if(e[t.set]&&(e[t.set](h(i,t.type,t.fromSVG)),"color"===t.type)){var n=e[t.get]();if(n&&n._scaleToBounds){var r=e.getBounds();n.transform((new p).translate(r.getPoint()).scale(r.getSize()))}}}},{}),{id:function(t,e){k[e]=t,t.setName&&t.setName(e)},"clip-path":function(t,e){var i=P(e);if(i){if((i=i.clone()).setClipMask(!0),!(t instanceof x))return new x(i,t);t.insertChild(0,i)}},gradientTransform:_,transform:_,"fill-opacity":v,"stroke-opacity":v,visibility:function(t,e){t.setVisible&&t.setVisible("visible"===e)},display:function(t,e){t.setVisible&&t.setVisible(null!==e)},"stop-color":function(t,e){t.setColor&&t.setColor(e)},"stop-opacity":function(t,e){t._color&&t._color.setAlpha(parseFloat(e))},offset:function(t,e){if(t.setOffset){var i=e.match(/(.*)%$/);t.setOffset(i?i[1]/100:parseFloat(e))}},viewBox:function(t,e,i,n,r){var s,a=new g(h(e,"array")),u=o(n,null,null,!0);if(t instanceof x){var l=u?u.divide(a.getSize()):1,c=(new p).scale(l).translate(a.getPoint().negate());s=t}else t instanceof I&&(u&&a.setSize(u),s=t._item);if(s){if("visible"!==m(n,"overflow",r)){var f=new C.Rectangle(a);f.setClipMask(!0),s.addChild(f)}c&&s.transform(c)}}});w.inject({importSVG:function(t,e){return T(t,e,this)}}),y.inject({importSVG:function(t,e){return this.activate(),T(t,e,this)}})},(paper=new(a.inject(r.exports,{Base:r,Numerical:u,Key:$,DomEvent:Z,DomElement:H,document:n,window:i,Symbol:I,PlacedSymbol:P}))).agent.node&&require("./node/extend.js")(paper),"function"==typeof define&&define.amd?define("paper",paper):"object"==typeof module&&module&&(module.exports=paper),paper}.call(this,"object"==typeof self?self:null);/*
  8371. Script: RectanglePacker.js
  8372. An algorithm implementation in JavaScript for rectangle packing.
  8373. Author:
  8374. Iván Montes <drslump@drslump.biz>, <http://blog.netxus.es>
  8375. License:
  8376. LGPL - Lesser General Public License
  8377. Credits:
  8378. - Algorithm based on <http://www.blackpawn.com/texts/lightmaps/default.html>
  8379. */
  8380. /*
  8381. Class: NETXUS.RectanglePacker
  8382. A class that finds an 'efficient' position for a rectangle inside another rectangle
  8383. without overlapping the space already taken.
  8384. Algorithm based on <http://www.blackpawn.com/texts/lightmaps/default.html>
  8385. It uses a binary tree to partition the space of the parent rectangle and allocate the
  8386. passed rectangles by dividing the partitions into filled and empty.
  8387. */
  8388. // Create a NETXUS namespace object if it doesn't exists
  8389. if (typeof NETXUS === 'undefined')
  8390. var NETXUS = function() {};
  8391. /*
  8392. Constructor: NETXUS.RectanglePacker
  8393. Initializes the object with the given maximum dimensions
  8394. Parameters:
  8395. width - The containing rectangle maximum width as integer
  8396. height - The containing rectangle maximum height as integer
  8397. */
  8398. NETXUS.RectanglePacker = function ( width, height ) {
  8399. this.root = {};
  8400. // initialize
  8401. this.reset( width, height );
  8402. }
  8403. /*
  8404. Resets the object to its initial state by initializing the internal variables
  8405. Parameters:
  8406. width - The containing rectangle maximum width as integer
  8407. height - The containing rectangle maximum height as integer
  8408. */
  8409. NETXUS.RectanglePacker.prototype.reset = function ( width, height ) {
  8410. this.root.x = 0;
  8411. this.root.y = 0;
  8412. this.root.w = width;
  8413. this.root.h = height;
  8414. delete this.root.lft;
  8415. delete this.root.rgt;
  8416. this.usedWidth = 0;
  8417. this.usedHeight = 0;
  8418. }
  8419. /*
  8420. Returns the actual used dimensions of the containing rectangle.
  8421. Returns:
  8422. A object composed of the properties: 'w' for width and 'h' for height.
  8423. */
  8424. NETXUS.RectanglePacker.prototype.getDimensions = function () {
  8425. return { w: this.usedWidth, h: this.usedHeight };
  8426. }
  8427. /*
  8428. Finds a suitable place for the given rectangle
  8429. Parameters:
  8430. w - The rectangle width as integer.
  8431. h - The rectangle height as integer.
  8432. Returns:
  8433. If there is room for the rectangle then returns the coordinates as an object
  8434. composed of 'x' and 'y' properties.
  8435. If it doesn't fit returns null
  8436. */
  8437. NETXUS.RectanglePacker.prototype.findCoords = function ( w, h ) {
  8438. // private function to traverse the node tree by recursion
  8439. function recursiveFindCoords ( node, w, h ) {
  8440. // private function to clone a node coords and size
  8441. function cloneNode ( node ) {
  8442. return {
  8443. x: node.x,
  8444. y: node.y,
  8445. w: node.w,
  8446. h: node.h
  8447. };
  8448. }
  8449. // if we are not at a leaf then go deeper
  8450. if ( node.lft ) {
  8451. // check first the left branch if not found then go by the right
  8452. var coords = recursiveFindCoords( node.lft, w, h );
  8453. return coords ? coords : recursiveFindCoords( node.rgt, w, h );
  8454. }
  8455. else
  8456. {
  8457. // if already used or it's too big then return
  8458. if ( node.used || w > node.w || h > node.h )
  8459. return null;
  8460. // if it fits perfectly then use this gap
  8461. if ( w == node.w && h == node.h ) {
  8462. node.used = true;
  8463. return { x: node.x, y: node.y };
  8464. }
  8465. // initialize the left and right leafs by clonning the current one
  8466. node.lft = cloneNode( node );
  8467. node.rgt = cloneNode( node );
  8468. // checks if we partition in vertical or horizontal
  8469. if ( node.w - w > node.h - h ) {
  8470. node.lft.w = w;
  8471. node.rgt.x = node.x + w;
  8472. node.rgt.w = node.w - w;
  8473. } else {
  8474. node.lft.h = h;
  8475. node.rgt.y = node.y + h;
  8476. node.rgt.h = node.h - h;
  8477. }
  8478. return recursiveFindCoords( node.lft, w, h );
  8479. }
  8480. }
  8481. // perform the search
  8482. var coords = recursiveFindCoords( this.root, w, h );
  8483. // if fitted then recalculate the used dimensions
  8484. if (coords) {
  8485. if ( this.usedWidth < coords.x + w )
  8486. this.usedWidth = coords.x + w;
  8487. if ( this.usedHeight < coords.y + h )
  8488. this.usedHeight = coords.y + h;
  8489. }
  8490. return coords;
  8491. }
  8492. function UnionFind(count) {
  8493. this.roots = new Array(count);
  8494. this.ranks = new Array(count);
  8495. for(var i=0; i<count; ++i) {
  8496. this.roots[i] = i;
  8497. this.ranks[i] = 0;
  8498. }
  8499. }
  8500. // Two calls find(x) always return the same result, if link(..) has not been called in between (unique representatives)
  8501. UnionFind.prototype.find = function(x) {
  8502. var x0 = x;
  8503. var roots = this.roots;
  8504. while(roots[x] != x) x = roots[x];
  8505. while(roots[x0] != x) {
  8506. var y = roots[x0];
  8507. roots[x0] = x;
  8508. x0 = y;
  8509. }
  8510. return x;
  8511. }
  8512. UnionFind.prototype.link = function(x, y) {
  8513. var xr = this.find(x), yr = this.find(y);
  8514. if(xr == yr) return;
  8515. var ranks = this.ranks, roots = this.roots, xd = ranks[xr], yd = ranks[yr];
  8516. if (xd < yd) { roots[xr] = yr; }
  8517. else if(yd < xd) { roots[yr] = xr; }
  8518. else { roots[yr] = xr; ++ranks[xr]; }
  8519. }
  8520. var ICC=function(){var v=new Int16Array(1),C=new Uint8Array(v.buffer);function a(e,n){return e[n]<<8|e[n+1]}function G(e,n){C[0]=e[n+1];
  8521. C[1]=e[n];return v[0]}function I(e,n){return e[n]<<24|e[n+1]<<16|e[n+2]<<8|e[n+3]}function t(e,n,A){var L="";
  8522. for(var k=0;k<A;k++)L+=String.fromCharCode(e[n+k]);return L}function E(e,n,A){var L=[];for(var k=0;k<A;
  8523. k++)L.push(String.fromCharCode(e[n+k]));return L}function i(e,n,A){var L="";for(var k=0;k<A;k++){var z=e[n++]<<8|e[n++];
  8524. L+=String.fromCharCode(z)}return L}function B(e){var n=new Uint8Array(e);return{header:h(n,0),tags:F(n,128)}}function h(e,n){var A=t,L=I,k={};
  8525. k.I=A(e,4,4);k.version=e[8]+"."+(e[9]>>>4)+"."+(e[9]&15);k.P=A(e,12,4);k.a=A(e,16,4);k.p=A(e,20,4);k.v=a(e,24);
  8526. for(var z=0;z<5;z++)k.v+="."+a(e,26+2*z);k.platform=A(e,40,4);k.d=L(e,44);k.k=A(e,48,4);k.l=L(e,52);
  8527. k.Q=[L(e,56),L(e,60)];k.U=L(e,64);k.A=d(e,68);k.h=A(e,80,4);return k}function F(e,n){var A=I,L={},k=A(e,n);
  8528. n+=4;for(var z=0;z<k;z++){var r=t(e,n,4);n+=4;var s=A(e,n);n+=4;var x=A(e,n);n+=4;L[r]=o(e,s,x)}return L}function o(e,n,A){var L=t(e,n,4),k={C:L,T:A};
  8529. n+=4;n+=4;if(L=="mluc"){var z=[];for(var r=0;r<A;r++)z.push(e[n-8+r])}if(L=="mluc")D(k,e,n,A);else if(L=="text")M(k,e,n,A);
  8530. else if(L=="desc")u(k,e,n,A);else if(L=="mAB ")H(k,e,n,A);else if(L=="mft1")w(k,e,n,A);else if(L=="XYZ ")J(k,e,n,A);
  8531. else if(L=="para")l(k,e,n,A);else if(L=="curv")K(k,e,n,A);else if(L!="pseq"){console.log("unknown tag",L,n,n,A)}if((k.T&3)!=0)k.T+=4-(k.T&3);
  8532. return k}function D(e,n,A,L){var k=A-8,z=I(n,A);A+=4;var r=I(n,A);A+=4;e.b=[];for(var s=0;s<z;s++){var x={};
  8533. e.b.push(x);x.code=t(n,A,4);var j=I(n,A+4),b=I(n,A+8);A+=12;x.text=i(n,k+b,j>>>1)}}function u(e,n,A,L){var k=I(n,A);
  8534. A+=4;e.r=t(n,A,k-1);A+=k;var z=I(n,A);A+=4;var r=I(n,A);A+=4;e.e=i(n,A,r);A+=r;var s=a(n,A);A+=2;var x=n[A];
  8535. A++;e.z=t(n,A,x)}function H(e,n,A,L){var k=A-8;e.L=n[A];A++;e.u=n[A];A++;A+=2;var z=I(n,A);A+=4;var r=I(n,A);
  8536. A+=4;var s=I(n,A);A+=4;var x=I(n,A);A+=4;var j=I(n,A);A+=4;if(z!=0){e.S=[];A=k+z;for(var b=0;b<e.u;b++){var f=o(n,A,0);
  8537. A+=f.T;e.S.push(f)}}if(r!=0){e.F=[];for(var b=0;b<12;b++)e.F.push(p(n,k+r+b*4))}if(s!=0){e.o=[];A=k+s;
  8538. for(var b=0;b<e.u;b++){var f=o(n,A,0);A+=f.T;e.o.push(f)}}if(x!=0){e.c=[];A=k+x;e.n=[];for(var b=0;b<e.L;
  8539. b++)e.n.push(n[A+b]);A+=16;var y=n[A];A+=4;var g=e.u;for(var b=0;b<e.L;b++)g*=e.n[b];if(y==1)for(var b=0;
  8540. b<g;b++)e.c.push(n[A+b]*(1/255));if(y==2)for(var b=0;b<g;b++)e.c.push(a(n,A+2*b)*(1/65535))}if(j!=0){e.V=[];
  8541. A=k+j;for(var b=0;b<e.L;b++){var f=o(n,A,0);A+=f.T;e.V.push(f)}}}function w(e,n,A,L){q(e,n,A);A+=40;
  8542. e.K=m(n,A,e.L,256);A+=e.L*256;e.c=[];var k=Math.round(Math.pow(e.q,e.L))*e.u;for(var z=0;z<k;z++)e.c.push(n[A+z]*(1/255));
  8543. A+=k;e.D=m(n,A,e.u,256);A+=e.u*256}function q(e,n,A){e.L=n[A];A++;e.u=n[A];A++;e.q=n[A];A++;A++;e.F=[];
  8544. for(var L=0;L<9;L++){e.F.push(p(n,A));A+=4}}function m(e,n,A,L){var k=[];for(var z=0;z<A;z++){var r=[];
  8545. k.push(r);for(var s=0;s<L;s++){r.push(e[n]);n++}}return k}function l(e,n,A,L){e.s=a(n,A);A+=2;A+=2;var k=[1,3,4,5,7];
  8546. e.f=[];for(var z=0;z<k[e.s];z++)e.f.push(p(n,A+z*4))}function K(e,n,A,L){var k=I(n,A);A+=4;e.b=[];if(k==1)e.b.push(c(n,A));
  8547. else for(var z=0;z<k;z++)e.b.push(a(n,A+z*2));e.T=12+2*k}function J(e,n,A){e.value=d(n,A)}function M(e,n,A,L){e.value=t(n,A,L-9)}function c(e,n){return e[n]+e[n+1]/256}function p(e,n){return G(e,n)+a(e,n+2)*(1/65536)}function d(e,n){var A=[];
  8548. for(var L=0;L<3;L++)A.push(p(e,n+L*4));return A}return{R:B}}();ICC.U=function(){var v={O:[3.1338561,-1.6168667,-.4906146,-.9787684,1.9161415,.033454,.0719453,-.2289914,1.4052427],H:[.4360747,.3850649,.14308038,.2225045,.7168786,.0606169,.0139322,.0971045,.7141733],m:function(F){return F<.0031308?12.92*F:1.055*Math.pow(F,1/2.4)-.055},G:function(F){return F<.04045?F/12.92:Math.pow((F+.055)/1.055,2.4)},J:function(F,o,D){var u=v.R[0],H=v.R[1];
  8549. F=u[~~(F*(1e3/255))];o=u[~~(o*(1e3/255))];D=u[~~(D*(1e3/255))];var w=v.H,q=w[0]*F+w[1]*o+w[2]*D,l=w[3]*F+w[4]*o+w[5]*D,K=w[6]*F+w[7]*o+w[8]*D;
  8550. q=q*(100/96.72);l=l*(100/100);K=K*(100/81.427);return v.i(q,l,K)},i:function(F,o,D){var u=v.R[1],H=u[~~(F*1e3)],w=u[~~(o*1e3)],q=u[~~(D*1e3)];
  8551. return{t:116*w-16,j:500*(H-w),N:200*(w-q)}},w:function(F,o,D){var u=903.3,H=.008856,w=(F+16)/116,q=w*w*w,m=w-D/200,l=m*m*m,K=o/500+w,J=K*K*K,M=l>H?l:(116*m-16)/u,c=q>H?q:(116*w-16)/u,p=J>H?J:(116*K-16)/u,d=p*96.72,e=c*100,n=M*81.427,A=d/100,k=e/100,D=n/100,z=v.O,r=[z[0]*A+z[1]*k+z[2]*D,z[3]*A+z[4]*k+z[5]*D,z[6]*A+z[7]*k+z[8]*D];
  8552. for(var s=0;s<3;s++)r[s]=Math.max(0,Math.min(255,v.m(r[s])*255));return{g:r[0],q:r[1],N:r[2]}}};v.R=function(){var F=[],o=[];
  8553. for(var D=0;D<2e3;D++){var u=D/1e3;F[D]=v.G(u);o[D]=u>.008856?Math.pow(u,1/3):(903.3*u+16)*(1/116)}return[F,o]}();
  8554. function C(F,o){var D=o*o*o,u=D*3,H=1/(o-1),w=[];for(var q=0;q<o;q++)for(var l=0;l<o;l++)for(var K=0;
  8555. K<o;K++)w.push(q*H,l*H,K*H);var J=F.tags.A2B0,M=F.header.a.toLowerCase();if(J.C=="mAB "){var c=J.F,p=J.o&&J.o[0].b.length>1?J.o:null;
  8556. for(var d=0;d<u;d+=3){if(p)G(w,d,p);t(w,d,J.c,J.n[0]);if(J.F)a(w,d,J.F)}}else if(J.C=="mft1"){if(M=="rgb ")for(var d=0;
  8557. d<u;d+=3){t(w,d,J.c,J.q)}else for(var d=0;d<u;d+=3){var e=v.J(w[d]*255,w[d+1]*255,w[d+2]*255);w[d]=e.t/100;
  8558. w[d+1]=(128+e.j)/255;w[d+2]=(128+e.N)/255;t(w,d,J.c,J.q);var n=v.w(w[d]*100,-128+255*w[d+1],-128+255*w[d+2]);
  8559. w[d]=n.g/255;w[d+1]=n.q/255;w[d+2]=n.N/255}}return w}function a(F,o,D){var u=F[o],H=F[o+1],w=F[o+2];
  8560. F[o]=Math.max(0,Math.min(1,D[0]*u+D[1]*H+D[2]*w+D[9]));F[o+1]=Math.max(0,Math.min(1,D[3]*u+D[4]*H+D[5]*w+D[10]));
  8561. F[o+2]=Math.max(0,Math.min(1,D[6]*u+D[7]*H+D[8]*w+D[11]))}function G(F,o,D){F[o]=I(F[o],D[0].b);F[o+1]=I(F[o+1],D[1].b);
  8562. F[o+2]=I(F[o+2],D[2].b)}function I(F,o){var D=o.length,u=F*(D-1)*.99999,H=~~u,w=u-H;return((1-w)*o[H]+w*o[H+1])*(1/65535)}function t(F,o,D,u){var H=[0,0,0,0,0,0,0,0,0,0,0,0],w=u-1.000001,q=w*F[o+0],l=w*F[o+1],K=w*F[o+2],J=~~q,M=~~l,c=~~K;
  8563. E(3*(c+u*M+u*u*J),3*(c+1+u*M+u*u*J),D,K-c,0,H);E(3*(c+u*(M+1)+u*u*J),3*(c+1+u*(M+1)+u*u*J),D,K-c,3,H);
  8564. E(0,3,H,l-M,6,H);E(3*(c+u*M+u*u*(J+1)),3*(c+1+u*M+u*u*(J+1)),D,K-c,0,H);E(3*(c+u*(M+1)+u*u*(J+1)),3*(c+1+u*(M+1)+u*u*(J+1)),D,K-c,3,H);
  8565. E(0,3,H,l-M,9,H);E(6,9,H,q-J,0,H);F[o]=H[0];F[o+1]=H[1];F[o+2]=H[2]}function E(F,o,D,u,H,w){var q=1-u;
  8566. w[H+0]=q*D[F]+u*D[o];w[H+1]=q*D[F+1]+u*D[o+1];w[H+2]=q*D[F+2]+u*D[o+2]}function i(F,o){var D=o*o*o,u=new Uint8Array(D*4);
  8567. for(var H=0;H<D;H++){var w=H*3,q=w+H,m=Math.max(0,Math.min(1,F[w])),l=Math.max(0,Math.min(1,F[w+1])),K=Math.max(0,Math.min(1,F[w+2]));
  8568. u[q]=~~(.5+m*255);u[q+1]=~~(.5+l*255);u[q+2]=~~(.5+K*255);u[q+3]=255;F[w]=m;F[w+1]=l;F[w+2]=K}return u}function B(F,o,D,u,H,w){var q=1-u;
  8569. w[H+0]=q*D[F]+u*D[o];w[H+1]=q*D[F+1]+u*D[o+1];w[H+2]=q*D[F+2]+u*D[o+2]}function h(F,o,D,u){var H=[0,0,0,0,0,0,0,0,0,0,0,0],w=(o-1.000001)/255,q=3;
  8570. for(var m=0;m<D.length;m+=4){var l=w*D[m],K=w*D[m+1],J=w*D[m+2],M=~~l,c=~~K,p=~~J;B(q*(p+o*c+o*o*M),q*(p+1+o*c+o*o*M),F,J-p,0,H);
  8571. B(q*(p+o*(c+1)+o*o*M),q*(p+1+o*(c+1)+o*o*M),F,J-p,3,H);B(0,3,H,K-c,6,H);B(q*(p+o*c+o*o*(M+1)),q*(p+1+o*c+o*o*(M+1)),F,J-p,0,H);
  8572. B(q*(p+o*(c+1)+o*o*(M+1)),q*(p+1+o*(c+1)+o*o*(M+1)),F,J-p,3,H);B(0,3,H,K-c,9,H);B(6,9,H,l-M,0,H);u[m]=~~(.5+H[0]*255);
  8573. u[m+1]=~~(.5+H[1]*255);u[m+2]=~~(.5+H[2]*255)}}return{rgba8LUT:i,sampleLUT:C,applyLUT:h}}()/*
  8574. * [js-sha1]{@link https://github.com/emn178/js-sha1}
  8575. *
  8576. * @version 0.6.0
  8577. * @author Chen, Yi-Cyuan [emn178@gmail.com]
  8578. * @copyright Chen, Yi-Cyuan 2014-2017
  8579. * @license MIT
  8580. */
  8581. !function(){"use strict";function t(t){t?(f[0]=f[16]=f[1]=f[2]=f[3]=f[4]=f[5]=f[6]=f[7]=f[8]=f[9]=f[10]=f[11]=f[12]=f[13]=f[14]=f[15]=0,this.blocks=f):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.h0=1732584193,this.h1=4023233417,this.h2=2562383102,this.h3=271733878,this.h4=3285377520,this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0}var h="object"==typeof window?window:{},s=!h.JS_SHA1_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;s&&(h=global);var i=!h.JS_SHA1_NO_COMMON_JS&&"object"==typeof module&&module.exports,e="function"==typeof define&&define.amd,r="0123456789abcdef".split(""),o=[-2147483648,8388608,32768,128],n=[24,16,8,0],a=["hex","array","digest","arrayBuffer"],f=[],u=function(h){return function(s){return new t(!0).update(s)[h]()}},c=function(){var h=u("hex");s&&(h=p(h)),h.create=function(){return new t},h.update=function(t){return h.create().update(t)};for(var i=0;i<a.length;++i){var e=a[i];h[e]=u(e)}return h},p=function(t){var h=eval("require('crypto')"),s=eval("require('buffer').Buffer"),i=function(i){if("string"==typeof i)return h.createHash("sha1").update(i,"utf8").digest("hex");if(i.constructor===ArrayBuffer)i=new Uint8Array(i);else if(void 0===i.length)return t(i);return h.createHash("sha1").update(new s(i)).digest("hex")};return i};t.prototype.update=function(t){if(!this.finalized){var s="string"!=typeof t;s&&t.constructor===h.ArrayBuffer&&(t=new Uint8Array(t));for(var i,e,r=0,o=t.length||0,a=this.blocks;r<o;){if(this.hashed&&(this.hashed=!1,a[0]=this.block,a[16]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=a[8]=a[9]=a[10]=a[11]=a[12]=a[13]=a[14]=a[15]=0),s)for(e=this.start;r<o&&e<64;++r)a[e>>2]|=t[r]<<n[3&e++];else for(e=this.start;r<o&&e<64;++r)(i=t.charCodeAt(r))<128?a[e>>2]|=i<<n[3&e++]:i<2048?(a[e>>2]|=(192|i>>6)<<n[3&e++],a[e>>2]|=(128|63&i)<<n[3&e++]):i<55296||i>=57344?(a[e>>2]|=(224|i>>12)<<n[3&e++],a[e>>2]|=(128|i>>6&63)<<n[3&e++],a[e>>2]|=(128|63&i)<<n[3&e++]):(i=65536+((1023&i)<<10|1023&t.charCodeAt(++r)),a[e>>2]|=(240|i>>18)<<n[3&e++],a[e>>2]|=(128|i>>12&63)<<n[3&e++],a[e>>2]|=(128|i>>6&63)<<n[3&e++],a[e>>2]|=(128|63&i)<<n[3&e++]);this.lastByteIndex=e,this.bytes+=e-this.start,e>=64?(this.block=a[16],this.start=e-64,this.hash(),this.hashed=!0):this.start=e}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},t.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,h=this.lastByteIndex;t[16]=this.block,t[h>>2]|=o[3&h],this.block=t[16],h>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},t.prototype.hash=function(){var t,h,s=this.h0,i=this.h1,e=this.h2,r=this.h3,o=this.h4,n=this.blocks;for(t=16;t<80;++t)h=n[t-3]^n[t-8]^n[t-14]^n[t-16],n[t]=h<<1|h>>>31;for(t=0;t<20;t+=5)s=(h=(i=(h=(e=(h=(r=(h=(o=(h=s<<5|s>>>27)+(i&e|~i&r)+o+1518500249+n[t]<<0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|~s&e)+r+1518500249+n[t+1]<<0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|~o&i)+e+1518500249+n[t+2]<<0)<<5|e>>>27)+(r&(o=o<<30|o>>>2)|~r&s)+i+1518500249+n[t+3]<<0)<<5|i>>>27)+(e&(r=r<<30|r>>>2)|~e&o)+s+1518500249+n[t+4]<<0,e=e<<30|e>>>2;for(;t<40;t+=5)s=(h=(i=(h=(e=(h=(r=(h=(o=(h=s<<5|s>>>27)+(i^e^r)+o+1859775393+n[t]<<0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^e)+r+1859775393+n[t+1]<<0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+e+1859775393+n[t+2]<<0)<<5|e>>>27)+(r^(o=o<<30|o>>>2)^s)+i+1859775393+n[t+3]<<0)<<5|i>>>27)+(e^(r=r<<30|r>>>2)^o)+s+1859775393+n[t+4]<<0,e=e<<30|e>>>2;for(;t<60;t+=5)s=(h=(i=(h=(e=(h=(r=(h=(o=(h=s<<5|s>>>27)+(i&e|i&r|e&r)+o-1894007588+n[t]<<0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|s&e|i&e)+r-1894007588+n[t+1]<<0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|o&i|s&i)+e-1894007588+n[t+2]<<0)<<5|e>>>27)+(r&(o=o<<30|o>>>2)|r&s|o&s)+i-1894007588+n[t+3]<<0)<<5|i>>>27)+(e&(r=r<<30|r>>>2)|e&o|r&o)+s-1894007588+n[t+4]<<0,e=e<<30|e>>>2;for(;t<80;t+=5)s=(h=(i=(h=(e=(h=(r=(h=(o=(h=s<<5|s>>>27)+(i^e^r)+o-899497514+n[t]<<0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^e)+r-899497514+n[t+1]<<0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+e-899497514+n[t+2]<<0)<<5|e>>>27)+(r^(o=o<<30|o>>>2)^s)+i-899497514+n[t+3]<<0)<<5|i>>>27)+(e^(r=r<<30|r>>>2)^o)+s-899497514+n[t+4]<<0,e=e<<30|e>>>2;this.h0=this.h0+s<<0,this.h1=this.h1+i<<0,this.h2=this.h2+e<<0,this.h3=this.h3+r<<0,this.h4=this.h4+o<<0},t.prototype.hex=function(){this.finalize();var t=this.h0,h=this.h1,s=this.h2,i=this.h3,e=this.h4;return r[t>>28&15]+r[t>>24&15]+r[t>>20&15]+r[t>>16&15]+r[t>>12&15]+r[t>>8&15]+r[t>>4&15]+r[15&t]+r[h>>28&15]+r[h>>24&15]+r[h>>20&15]+r[h>>16&15]+r[h>>12&15]+r[h>>8&15]+r[h>>4&15]+r[15&h]+r[s>>28&15]+r[s>>24&15]+r[s>>20&15]+r[s>>16&15]+r[s>>12&15]+r[s>>8&15]+r[s>>4&15]+r[15&s]+r[i>>28&15]+r[i>>24&15]+r[i>>20&15]+r[i>>16&15]+r[i>>12&15]+r[i>>8&15]+r[i>>4&15]+r[15&i]+r[e>>28&15]+r[e>>24&15]+r[e>>20&15]+r[e>>16&15]+r[e>>12&15]+r[e>>8&15]+r[e>>4&15]+r[15&e]},t.prototype.toString=t.prototype.hex,t.prototype.digest=function(){this.finalize();var t=this.h0,h=this.h1,s=this.h2,i=this.h3,e=this.h4;return[t>>24&255,t>>16&255,t>>8&255,255&t,h>>24&255,h>>16&255,h>>8&255,255&h,s>>24&255,s>>16&255,s>>8&255,255&s,i>>24&255,i>>16&255,i>>8&255,255&i,e>>24&255,e>>16&255,e>>8&255,255&e]},t.prototype.array=t.prototype.digest,t.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(20),h=new DataView(t);return h.setUint32(0,this.h0),h.setUint32(4,this.h1),h.setUint32(8,this.h2),h.setUint32(12,this.h3),h.setUint32(16,this.h4),t};var y=c();i?module.exports=y:(h.sha1=y,e&&define(function(){return y}))}();var EXRLoader={parse:function(e){var r={FloatType:1,UnsignedByteType:2,HalfFloatType:3,RGBEFormat:4};this.type=r.FloatType;var a=65536,n=a>>3,t=14,i=65537,o=1<<t,f=o-1,l=32768,u=65535,s=59,v=63,c=2+v-s,h=8,w=4,p=4,y=2,d=1,g=0,A=1,S=0,U=1,b=2,m=Math.pow(2.7182818,2.2),M=new DataView(new ArrayBuffer(8));function C(e){if(0===e)return[e,0];M.setFloat64(0,e);var r=M.getUint32(0)>>>20&2047;0===r&&(M.setFloat64(0,e*Math.pow(2,64)),r=(M.getUint32(0)>>>20&2047)-64);var a=r-1022;return[function(e,r){for(var a=Math.min(3,Math.ceil(Math.abs(r)/1023)),n=e,t=0;t<a;t++)n*=Math.pow(2,Math.floor((r+t)/a));return n}(e,-a),a]}var O={l:0,c:0,lc:0};function I(e,r,a,n,t){for(;a<e;)r=r<<8|te(n,t),a+=8;a-=e,O.l=r>>a&(1<<e)-1,O.c=r,O.lc=a}var E=new Array(59);function R(e,r,a,n,t,o,f){for(var l=a,u=0,h=0;t<=o;t++){if(l.value-a.value>n)return!1;I(6,u,h,e,l);var w=O.l;if(u=O.c,h=O.lc,f[t]=w,w==v){if(l.value-a.value>n)throw"Something wrong with hufUnpackEncTable";I(8,u,h,e,l);var p=O.l+c;if(u=O.c,h=O.lc,t+p>o+1)throw"Something wrong with hufUnpackEncTable";for(;p--;)f[t++]=0;t--}else if(w>=s){if(t+(p=w-s+2)>o+1)throw"Something wrong with hufUnpackEncTable";for(;p--;)f[t++]=0;t--}}!function(e){for(var r=0;r<=58;++r)E[r]=0;for(r=0;r<i;++r)E[e[r]]+=1;var a=0;for(r=58;r>0;--r){var n=a+E[r]>>1;E[r]=a,a=n}for(r=0;r<i;++r){var t=e[r];t>0&&(e[r]=t|E[t]++<<6)}}(f)}function x(e){return 63&e}function P(e){return e>>6}var z={c:0,lc:0};function N(e,r,a,n){e=e<<8|te(a,n),r+=8,z.c=e,z.lc=r}var T={c:0,lc:0};function k(e,r,a,n,t,i,o,f,l,u){if(e==r){n<8&&(N(a,n,t,o),a=z.c,n=z.lc);var s=a>>(n-=8);s=new Uint8Array([s])[0];if(l.value+s>u)return!1;for(var v=f[l.value-1];s-- >0;)f[l.value++]=v}else{if(!(l.value<u))return!1;f[l.value++]=e}T.c=a,T.lc=n}function _(e){return 65535&e}function D(e){var r=_(e);return r>32767?r-65536:r}var F={a:0,b:0};function B(e,r){var a=D(e),n=D(r),t=a+(1&n)+(n>>1),i=t,o=t-n;F.a=i,F.b=o}function L(e,r){var a=_(e),n=_(r),t=a-(n>>1)&u,i=n+t-l&u;F.a=i,F.b=t}function X(e,r,a,n,t,i,o){for(var f,l=o<16384,u=a>t?t:a,s=1;s<=u;)s<<=1;for(f=s>>=1,s>>=1;s>=1;){for(var v,c,h,w,p=0,y=p+i*(t-f),d=i*s,g=i*f,A=n*s,S=n*f;p<=y;p+=g){for(var U=p,b=p+n*(a-f);U<=b;U+=S){var m=U+A,M=(C=U+d)+A;l?(B(e[U+r],e[C+r]),v=F.a,h=F.b,B(e[m+r],e[M+r]),c=F.a,w=F.b,B(v,c),e[U+r]=F.a,e[m+r]=F.b,B(h,w),e[C+r]=F.a,e[M+r]=F.b):(L(e[U+r],e[C+r]),v=F.a,h=F.b,L(e[m+r],e[M+r]),c=F.a,w=F.b,L(v,c),e[U+r]=F.a,e[m+r]=F.b,L(h,w),e[C+r]=F.a,e[M+r]=F.b)}if(a&s){var C=U+d;l?B(e[U+r],e[C+r]):L(e[U+r],e[C+r]),v=F.a,e[C+r]=F.b,e[U+r]=v}}if(t&s)for(U=p,b=p+n*(a-f);U<=b;U+=S){m=U+A;l?B(e[U+r],e[m+r]):L(e[U+r],e[m+r]),v=F.a,e[m+r]=F.b,e[U+r]=v}f=s,s>>=1}return p}function V(e,r,a,n,l,u){var s=a.value,v=ne(r,a),c=ne(r,a);a.value+=4;var h=ne(r,a);if(a.value+=4,v<0||v>=i||c<0||c>=i)throw"Something wrong with HUF_ENCSIZE";var w=new Array(i),p=new Array(o);if(function(e){for(var r=0;r<o;r++)e[r]={},e[r].len=0,e[r].lit=0,e[r].p=null}(p),R(e,0,a,n-(a.value-s),v,c,w),h>8*(n-(a.value-s)))throw"Something wrong with hufUncompress";!function(e,r,a,n){for(;r<=a;r++){var i=P(e[r]),o=x(e[r]);if(i>>o)throw"Invalid table entry";if(o>t){if((s=n[i>>o-t]).len)throw"Invalid table entry";if(s.lit++,s.p){var f=s.p;s.p=new Array(s.lit);for(var l=0;l<s.lit-1;++l)s.p[l]=f[l]}else s.p=new Array(1);s.p[s.lit-1]=r}else if(o){var u=0;for(l=1<<t-o;l>0;l--){var s;if((s=n[(i<<t-o)+u]).len||s.p)throw"Invalid table entry";s.len=o,s.lit=r,u++}}}}(w,v,c,p),function(e,r,a,n,i,o,l,u,s,v){for(var c=0,h=0,w=u,p=Math.trunc(i.value+(o+7)/8);i.value<p;)for(N(c,h,a,i),c=z.c,h=z.lc;h>=t;)if((A=r[c>>h-t&f]).len)h-=A.len,k(A.lit,l,c,h,a,0,i,s,v,w),c=T.c,h=T.lc;else{if(!A.p)throw"hufDecode issues";var y;for(y=0;y<A.lit;y++){for(var d=x(e[A.p[y]]);h<d&&i.value<p;)N(c,h,a,i),c=z.c,h=z.lc;if(h>=d&&P(e[A.p[y]])==(c>>h-d&(1<<d)-1)){h-=d,k(A.p[y],l,c,h,a,0,i,s,v,w),c=T.c,h=T.lc;break}}if(y==A.lit)throw"hufDecode issues"}var g=8-o&7;for(c>>=g,h-=g;h>0;){var A;if(!(A=r[c<<t-h&f]).len)throw"hufDecode issues";h-=A.len,k(A.lit,l,c,h,a,0,i,s,v,w),c=T.c,h=T.lc}}(w,p,e,0,a,h,c,u,l,{value:0})}function Z(e){for(var r=1;r<e.length;r++){var a=e[r-1]+e[r]-128;e[r]=a}}function H(e,r){for(var a=0,n=Math.floor((e.length+1)/2),t=0,i=e.length-1;!(t>i||(r[t++]=e[a++],t>i));)r[t++]=e[n++]}function W(e){for(var r=e.byteLength,a=new Array,n=0,t=new DataView(e);r>0;){var i=t.getInt8(n++);if(i<0){r-=(f=-i)+1;for(var o=0;o<f;o++)a.push(t.getUint8(n++))}else{var f=i;r-=2;var l=t.getUint8(n++);for(o=0;o<f+1;o++)a.push(l)}}return a}function G(e,r,a){for(var n,t=1;t<64;)65280==(n=r[e.value])?t=64:n>>8==255?t+=255&n:(a[t]=n,t++),e.value++}function Y(e,r){r[0]=le(e[0]),r[1]=le(e[1]),r[2]=le(e[5]),r[3]=le(e[6]),r[4]=le(e[14]),r[5]=le(e[15]),r[6]=le(e[27]),r[7]=le(e[28]),r[8]=le(e[2]),r[9]=le(e[4]),r[10]=le(e[7]),r[11]=le(e[13]),r[12]=le(e[16]),r[13]=le(e[26]),r[14]=le(e[29]),r[15]=le(e[42]),r[16]=le(e[3]),r[17]=le(e[8]),r[18]=le(e[12]),r[19]=le(e[17]),r[20]=le(e[25]),r[21]=le(e[30]),r[22]=le(e[41]),r[23]=le(e[43]),r[24]=le(e[9]),r[25]=le(e[11]),r[26]=le(e[18]),r[27]=le(e[24]),r[28]=le(e[31]),r[29]=le(e[40]),r[30]=le(e[44]),r[31]=le(e[53]),r[32]=le(e[10]),r[33]=le(e[19]),r[34]=le(e[23]),r[35]=le(e[32]),r[36]=le(e[39]),r[37]=le(e[45]),r[38]=le(e[52]),r[39]=le(e[54]),r[40]=le(e[20]),r[41]=le(e[22]),r[42]=le(e[33]),r[43]=le(e[38]),r[44]=le(e[46]),r[45]=le(e[51]),r[46]=le(e[55]),r[47]=le(e[60]),r[48]=le(e[21]),r[49]=le(e[34]),r[50]=le(e[37]),r[51]=le(e[47]),r[52]=le(e[50]),r[53]=le(e[56]),r[54]=le(e[59]),r[55]=le(e[61]),r[56]=le(e[35]),r[57]=le(e[36]),r[58]=le(e[48]),r[59]=le(e[49]),r[60]=le(e[57]),r[61]=le(e[58]),r[62]=le(e[62]),r[63]=le(e[63])}function j(e){for(var r=.5*Math.cos(.7853975),a=.5*Math.cos(.196349375),n=.5*Math.cos(.39269875),t=.5*Math.cos(3*3.14159/16),i=.5*Math.cos(.981746875),o=.5*Math.cos(3*3.14159/8),f=.5*Math.cos(1.374445625),l=new Array(4),u=new Array(4),s=new Array(4),v=new Array(4),c=0;c<8;++c){var h=8*c;l[0]=n*e[h+2],l[1]=o*e[h+2],l[2]=n*e[h+6],l[3]=o*e[h+6],u[0]=a*e[h+1]+t*e[h+3]+i*e[h+5]+f*e[h+7],u[1]=t*e[h+1]-f*e[h+3]-a*e[h+5]-i*e[h+7],u[2]=i*e[h+1]-a*e[h+3]+f*e[h+5]+t*e[h+7],u[3]=f*e[h+1]-i*e[h+3]+t*e[h+5]-a*e[h+7],s[0]=r*(e[h+0]+e[h+4]),s[3]=r*(e[h+0]-e[h+4]),s[1]=l[0]+l[3],s[2]=l[1]-l[2],v[0]=s[0]+s[1],v[1]=s[3]+s[2],v[2]=s[3]-s[2],v[3]=s[0]-s[1],e[h+0]=v[0]+u[0],e[h+1]=v[1]+u[1],e[h+2]=v[2]+u[2],e[h+3]=v[3]+u[3],e[h+4]=v[3]-u[3],e[h+5]=v[2]-u[2],e[h+6]=v[1]-u[1],e[h+7]=v[0]-u[0]}for(var w=0;w<8;++w)l[0]=n*e[16+w],l[1]=o*e[16+w],l[2]=n*e[48+w],l[3]=o*e[48+w],u[0]=a*e[8+w]+t*e[24+w]+i*e[40+w]+f*e[56+w],u[1]=t*e[8+w]-f*e[24+w]-a*e[40+w]-i*e[56+w],u[2]=i*e[8+w]-a*e[24+w]+f*e[40+w]+t*e[56+w],u[3]=f*e[8+w]-i*e[24+w]+t*e[40+w]-a*e[56+w],s[0]=r*(e[w]+e[32+w]),s[3]=r*(e[w]-e[32+w]),s[1]=l[0]+l[3],s[2]=l[1]-l[2],v[0]=s[0]+s[1],v[1]=s[3]+s[2],v[2]=s[3]-s[2],v[3]=s[0]-s[1],e[0+w]=v[0]+u[0],e[8+w]=v[1]+u[1],e[16+w]=v[2]+u[2],e[24+w]=v[3]+u[3],e[32+w]=v[3]-u[3],e[40+w]=v[2]-u[2],e[48+w]=v[1]-u[1],e[56+w]=v[0]-u[0]}function q(e){for(var r=0;r<64;++r){var a=e[0][r],n=e[1][r],t=e[2][r];e[0][r]=a+1.5747*t,e[1][r]=a-.1873*n-.4682*t,e[2][r]=a+1.8556*n}}function J(e,r,a){for(var n=0;n<64;++n)r[a+n]=ue(K(e[n]))}function K(e){return e<=1?Math.sign(e)*Math.pow(Math.abs(e),2.2):Math.sign(e)*Math.pow(m,Math.abs(e)-1)}function Q(e){var r=e.array.slice(e.offset.value,e.offset.value+e.size),a=new Uint8Array(pako.inflate(r).buffer),n=new Uint8Array(a.length);return Z(a),H(a,n),new DataView(n.buffer)}function $(e){var r=e.viewer,a={value:e.offset.value},n=new Uint8Array(e.width*e.lines*(we.channels.length*e.type*y)),t={version:oe(r,a),unknownUncompressedSize:oe(r,a),unknownCompressedSize:oe(r,a),acCompressedSize:oe(r,a),dcCompressedSize:oe(r,a),rleCompressedSize:oe(r,a),rleUncompressedSize:oe(r,a),rleRawSize:oe(r,a),totalAcUncompressedCount:oe(r,a),totalDcUncompressedCount:oe(r,a),acCompression:oe(r,a)};if(t.version<2)throw"EXRLoader.parse: "+we.compression+" version "+t.version+" is unsupported";for(var i=new Array,o=se(r,a)-y;o>0;){var f=ee(r.buffer,a),l=ie(r,a),u=l>>2&3,s=new Int8Array([(l>>4)-1])[0],v=ie(r,a);i.push({name:f,index:s,type:v,compression:u}),o-=f.length+3}for(var c=we.channels,h=new Array(e.channels),w=0;w<e.channels;++w){var p=h[w]={},d=c[w];p.name=d.name,p.compression=S,p.decoded=!1,p.type=d.pixelType,p.pLinear=d.pLinear,p.width=e.width,p.height=e.lines}for(var m={idx:new Array(3)},M=0;M<e.channels;++M)for(p=h[M],w=0;w<i.length;++w){var C=i[w];p.name==C.name&&(p.compression=C.compression,C.index>=0&&(m.idx[C.index]=M),p.offset=M)}if(t.acCompressedSize>0)switch(t.acCompression){case g:var O=new Uint16Array(t.totalAcUncompressedCount);V(e.array,r,a,t.acCompressedSize,O,t.totalAcUncompressedCount);break;case A:var I=e.array.slice(a.value,a.value+t.totalAcUncompressedCount);O=new Uint16Array(pako.inflate(I).buffer);a.value+=t.totalAcUncompressedCount}if(t.dcCompressedSize>0){var E={array:e.array,offset:a,size:t.dcCompressedSize},R=new Uint16Array(Q(E).buffer);a.value+=t.dcCompressedSize}if(t.rleRawSize>0){I=e.array.slice(a.value,a.value+t.rleCompressedSize);var x=W(pako.inflate(I).buffer);a.value+=t.rleCompressedSize}var P=0,z=new Array(h.length);for(w=0;w<z.length;++w)z[w]=new Array;for(var N=0;N<e.lines;++N)for(var T=0;T<h.length;++T)z[T].push(P),P+=h[T].width*e.type*y;!function(e,r,a,n,t,i){for(var o=new DataView(i.buffer),f=a[e.idx[0]].width,l=a[e.idx[0]].height,u=Math.floor(f/8),s=Math.ceil(f/8),v=Math.ceil(l/8),c=f-8*(s-1),h=l-8*(v-1),w={value:0},p=new Array(3),d=new Array(3),g=new Array(3),A=new Array(3),S=new Array(3),U=0;U<3;++U)S[U]=r[e.idx[U]],p[U]=U<1?0:p[U-1]+s*v,d[U]=new Float32Array(64),g[U]=new Uint16Array(64),A[U]=new Uint16Array(64*s);for(var b=0;b<v;++b){var m=8;b==v-1&&(m=h);for(var M=8,C=0;C<s;++C){for(C==s-1&&(M=c),U=0;U<3;++U)g[U].fill(0),g[U][0]=t[p[U]++],G(w,n,g[U]),Y(g[U],d[U]),j(d[U]);for(q(d),U=0;U<3;++U)J(d[U],A[U],64*C)}var O=0;for(U=0;U<3;++U){for(var I=a[e.idx[U]].type,E=8*b;E<8*b+m;++E)for(O=S[U][E],C=0;C<u;++C){var R=64*C+8*(7&E);o.setUint16(O+0*y*I,A[U][R+0],!0),o.setUint16(O+1*y*I,A[U][R+1],!0),o.setUint16(O+2*y*I,A[U][R+2],!0),o.setUint16(O+3*y*I,A[U][R+3],!0),o.setUint16(O+4*y*I,A[U][R+4],!0),o.setUint16(O+5*y*I,A[U][R+5],!0),o.setUint16(O+6*y*I,A[U][R+6],!0),o.setUint16(O+7*y*I,A[U][R+7],!0),O+=8*y*I}if(u!=s)for(E=8*b;E<8*b+m;++E){O=S[U][E]+8*u*y*I,R=64*u+8*(7&E);for(var x=0;x<M;++x)o.setUint16(O+x*y*I,A[U][R+x],!0)}}}var P=new Uint16Array(f);for(o=new DataView(i.buffer),U=0;U<3;++U)if(a[e.idx[U]].decoded=!0,I=a[e.idx[U]].type,2==a[U].type)for(E=0;E<l;++E){for(O=S[U][E],x=0;x<f;++x)P[x]=o.getUint16(O+x*y*I,!0);for(x=0;x<f;++x)o.setFloat32(O+x*y*I,le(P[x]),!0)}}(m,z,h,O,R,n);for(w=0;w<h.length;++w){if(!(p=h[w]).decoded)switch(p.compression){case b:var k=0,_=0;for(N=0;N<e.lines;++N){for(var D=z[w][k],F=0;F<p.width;++F){for(var B=0;B<y*p.type;++B)n[D++]=x[_+B*p.width*p.height];_++}k++}break;case U:default:throw"EXRLoader.parse: unsupported channel compression"}}return new DataView(n.buffer)}function ee(e,r){for(var a=new Uint8Array(e),n=0;0!=a[r.value+n];)n+=1;var t=(new TextDecoder).decode(a.slice(r.value,r.value+n));return r.value=r.value+n+1,t}function re(e,r){var a=e.getUint32(0,!0);return r.value=r.value+h,a}function ae(e,r){var a=e.getInt32(r.value,!0);return r.value=r.value+p,a}function ne(e,r){var a=e.getUint32(r.value,!0);return r.value=r.value+p,a}function te(e,r){var a=e[r.value];return r.value=r.value+d,a}function ie(e,r){var a=e.getUint8(r.value);return r.value=r.value+d,a}function oe(e,r){var a=Number(e.getBigInt64(r.value,!0));return r.value+=h,a}function fe(e,r){var a=e.getFloat32(r.value,!0);return r.value+=w,a}function le(e){var r=(31744&e)>>10,a=1023&e;return(e>>15?-1:1)*(r?31===r?a?NaN:1/0:Math.pow(2,r-15)*(1+a/1024):a/1024*6103515625e-14)}function ue(e){M.setFloat32(0,e);var r=M.getInt32(0),a=r>>16&32768,n=r>>12&2047,t=r>>23&255;return t<103?a:t>142?(a|=31744,a|=(255==t?0:1)&&8388607&r):t<113?a|=((n|=2048)>>114-t)+(n>>113-t&1):(a|=t-112<<10|n>>1,a+=1&n)}function se(e,r){var a=e.getUint16(r.value,!0);return r.value+=y,a}function ve(e,r,a,n,t){return"string"===n||"stringvector"===n||"iccProfile"===n?function(e,r,a){var n=(new TextDecoder).decode(new Uint8Array(e).slice(r.value,r.value+a));return r.value=r.value+a,n}(r,a,t):"chlist"===n?function(e,r,a,n){for(var t=a.value,i=[];a.value<t+n-1;){var o=ee(r,a),f=ae(e,a),l=ie(e,a);a.value+=3;var u=ae(e,a),s=ae(e,a);i.push({name:o,pixelType:f,pLinear:l,xSampling:u,ySampling:s})}return a.value+=1,i}(e,r,a,t):"chromaticities"===n?function(e,r){return{redX:fe(e,r),redY:fe(e,r),greenX:fe(e,r),greenY:fe(e,r),blueX:fe(e,r),blueY:fe(e,r),whiteX:fe(e,r),whiteY:fe(e,r)}}(e,a):"compression"===n?function(e,r){return["NO_COMPRESSION","RLE_COMPRESSION","ZIPS_COMPRESSION","ZIP_COMPRESSION","PIZ_COMPRESSION","PXR24_COMPRESSION","B44_COMPRESSION","B44A_COMPRESSION","DWAA_COMPRESSION","DWAB_COMPRESSION"][ie(e,r)]}(e,a):"box2i"===n?function(e,r){return{xMin:ne(e,r),yMin:ne(e,r),xMax:ne(e,r),yMax:ne(e,r)}}(e,a):"lineOrder"===n?function(e,r){return["INCREASING_Y"][ie(e,r)]}(e,a):"float"===n?fe(e,a):"v2f"===n?function(e,r){return[fe(e,r),fe(e,r)]}(e,a):"v3f"===n?function(e,r){return[fe(e,r),fe(e,r),fe(e,r)]}(e,a):"int"===n?ae(e,a):"rational"===n?function(e,r){return[ae(e,r),ne(e,r)]}(e,a):"timecode"===n?function(e,r){return[ne(e,r),ne(e,r)]}(e,a):(a.value+=t,void console.log("Cannot parse value for unsupported type: "+n))}var ce=new DataView(e),he=new Uint8Array(e),we={};ce.getUint32(0,!0),ce.getUint8(4,!0),ce.getUint8(5,!0);for(var pe={value:8},ye=!0;ye;){var de=ee(e,pe);if(0==de)ye=!1;else{var ge=ve(ce,e,pe,ee(e,pe),ne(ce,pe));we[de]=ge}}var Ae,Se,Ue,be,me=we.dataWindow.yMax+1;switch(we.compression){case"NO_COMPRESSION":Se=1,Ae=function(e){return new DataView(e.array.buffer,e.offset.value,e.size)};break;case"RLE_COMPRESSION":Se=1,Ae=function(e){var r=e.viewer.buffer.slice(e.offset.value,e.offset.value+e.size),a=new Uint8Array(W(r)),n=new Uint8Array(a.length);return Z(a),H(a,n),new DataView(n.buffer)};break;case"ZIPS_COMPRESSION":Se=1,Ae=Q;break;case"ZIP_COMPRESSION":Se=16,Ae=Q;break;case"PXR24_COMPRESSION":Se=16,Ae=function(e){for(var r=e.array.slice(e.offset.value,e.offset.value+e.size),a=new Uint8Array(pako.inflate(r).buffer),n=new Uint8Array(a.length),t=n,i=Ee,o=0;o<t.length;o+=2*i){for(var f=0;f<i;f++)t[o+2*f]=a[o+f+i],t[o+2*f+1]=a[o+f];var l=new Uint16Array(t.buffer,o,i);for(f=1;f<i;f++)l[f]=l[f-1]+l[f]&65535}return new DataView(n.buffer)};break;case"PIZ_COMPRESSION":Se=32,Ae=function(e){for(var r=e.viewer,t={value:e.offset.value},i=e.width*Se*(we.channels.length*e.type),o=new Uint16Array(i),f=new Uint8Array(n),l=0,u=new Array(e.channels),s=0;s<e.channels;s++)u[s]={},u[s].start=l,u[s].end=u[s].start,u[s].nx=e.width,u[s].ny=e.lines,u[s].size=e.type,l+=u[s].nx*u[s].ny*u[s].size;var v=se(r,t),c=se(r,t);if(c>=n)throw"Something is wrong with PIZ_COMPRESSION BITMAP_SIZE";if(v<=c)for(s=0;s<c-v+1;s++)f[s+v]=ie(r,t);var h=new Uint16Array(a),w=function(e,r){for(var n=0,t=0;t<a;++t)(0==t||e[t>>3]&1<<(7&t))&&(r[n++]=t);for(var i=n-1;n<a;)r[n++]=0;return i}(f,h),p=ne(r,t);for(V(e.array,r,t,p,o,l),s=0;s<e.channels;++s)for(var d=u[s],g=0;g<u[s].size;++g)X(o,d.start+g,d.nx,d.size,d.ny,d.nx*d.size,w);!function(e,r,a){for(var n=0;n<a;++n)r[n]=e[r[n]]}(h,o,l);for(var A=0,S=new Uint8Array(o.buffer.byteLength),U=0;U<e.lines;U++)for(var b=0;b<e.channels;b++){var m=(d=u[b]).nx*d.size,M=new Uint8Array(o.buffer,d.end*y,m*y);S.set(M,A),A+=m*y,d.end+=m}return new DataView(S.buffer)};break;case"DWAA_COMPRESSION":Se=32,Ae=$;break;case"DWAB_COMPRESSION":Se=256,Ae=$;break;default:throw"EXRLoader.parse: "+we.compression+" is unsupported"}var Me=we.channels[0].pixelType;if(1===Me)switch(this.type){case r.UnsignedByteType:case r.FloatType:be=function(e,r){return le(se(e,r))},Ue=y;break;case r.HalfFloatType:be=se,Ue=y}else{if(2!==Me)throw"EXRLoader.parse: unsupported pixelType "+Me+" for "+we.compression+".";switch(this.type){case r.UnsignedByteType:case r.FloatType:be=fe,Ue=w;break;case r.HalfFloatType:be=function(e,r){return ue(fe(e,r))},Ue=w}}for(var Ce=me/Se,Oe=0;Oe<Ce;Oe++)re(ce,pe);var Ie=we.dataWindow,Ee=Ie.xMax-Ie.xMin+1,Re=Ie.yMax-Ie.yMin+1,xe=Ee*Re*4;switch(this.type){case r.UnsignedByteType:case r.FloatType:var Pe=new Float32Array(xe);we.channels.length<4&&Pe.fill(1,0,xe);break;case r.HalfFloatType:Pe=new Uint16Array(xe);we.channels.length<4&&Pe.fill(15360,0,xe);break;default:console.error("THREE.EXRLoader: unsupported type: ",this.type)}for(var ze,Ne,Te={R:0,G:1,B:2,A:3},ke={size:0,width:Ee,lines:Se,offset:pe,array:he,viewer:ce,type:Me,channels:we.channels.length},_e={value:0},De=0;De<Re/Se;De++){ze=ne(ce,pe),xe=ne(ce,pe),ke.lines=ze+Se>Re?Re-ze:Se,ke.offset=pe,ke.size=xe,Ne=Ae(ke),pe.value+=xe;for(var Fe=0;Fe<Se;Fe++){var Be=Fe+De*Se;if(Be>=Re)break;for(var Le=0;Le<we.channels.length;Le++)for(var Xe=Te[we.channels[Le].name],Ve=0;Ve<Ee;Ve++){var Ze=Fe*(we.channels.length*Ee)+Le*Ee+Ve;_e.value=Ze*Ue;var He=be(Ne,_e);Pe[4*Ee*(Re-1-Be)+4*Ve+Xe]=He}}}if(this.type===r.UnsignedByteType){xe=Pe.length;for(var We,Ge=new Uint8Array(xe),Ye=0;Ye<Re;++Ye)for(var je=0;je<Ee;++je){var qe=Pe[Oe=Ye*Ee*4+4*je],Je=Pe[Oe+1],Ke=Pe[Oe+2];if((We=Ke>(We=qe>Je?qe:Je)?Ke:We)<1e-32)Ge[Oe]=Ge[Oe+1]=Ge[Oe+2]=Ge[Oe+3]=0;else{var Qe=C(We);We=256*Qe[0]/We,Ge[Oe]=qe*We,Ge[Oe+1]=Je*We,Ge[Oe+2]=Ke*We,Ge[Oe+3]=Qe[1]+128}}Pe=Ge}var $e=this.type===r.UnsignedByteType?r.RGBEFormat:r.RGBAFormat;return{header:we,width:Ee,height:Re,data:Pe,format:$e,type:this.type}}};